diff --git a/.changeset/quick-ends-drop.md b/.changeset/quick-ends-drop.md new file mode 100644 index 00000000..2bde6a5a --- /dev/null +++ b/.changeset/quick-ends-drop.md @@ -0,0 +1,5 @@ +--- +"@proofkit/typegen": patch +--- + +Add type import to the `InferZodPortals` import diff --git a/.changeset/ui-default-shadcn.md b/.changeset/ui-default-shadcn.md index 3260d4fa..d6f50a74 100644 --- a/.changeset/ui-default-shadcn.md +++ b/.changeset/ui-default-shadcn.md @@ -1,7 +1,9 @@ --- -"@proofkit/cli": minor +"@proofkit/cli": major --- -CLI defaults to shadcn/ui for new projects. Legacy Mantine templates are still available via a hidden `--ui mantine` flag during `init`. The selected UI is persisted in `proofkit.json` as `ui`. Existing projects using Mantine are auto-detected and remain fully supported. For shadcn-based projects, adding new pages or auth via `proofkit add` requires passing the name of the component you want to add, such as `proofkit add table/basic`. Interactive selection of templates will come back soon! +Learn more about v2 in the docs: [https://proofkit.com/docs/cli/v2](https://proofkit.com/docs/cli/v2) -This release also deprecates the `mantine` UI templates. In the next major release of the CLI, the `mantine` UI templates will no longer be supported for new projects. \ No newline at end of file +CLI now defaults to shadcn/ui for new projects. Legacy Mantine templates are still available via a hidden `--ui mantine` flag during `init`. The selected UI is persisted in `proofkit.json` as `ui`. Existing projects using Mantine may not be fully supported. + +For adding new pages or auth via `proofkit add`, you will need to pass the name of the component you want to add, such as `proofkit add table/basic`. See new templates in the [docs](/docs/templates). diff --git a/apps/docs/cli.json b/apps/docs/cli.json new file mode 100644 index 00000000..8a9e3361 --- /dev/null +++ b/apps/docs/cli.json @@ -0,0 +1,11 @@ +{ + "aliases": { + "uiDir": "./components/ui", + "componentsDir": "./components", + "blockDir": "./components", + "cssDir": "./styles", + "libDir": "./lib" + }, + "baseDir": "src", + "commands": {} +} \ No newline at end of file diff --git a/apps/docs/content/docs/better-auth/installation.mdx b/apps/docs/content/docs/better-auth/installation.mdx index 63af87ce..fa078ff6 100644 --- a/apps/docs/content/docs/better-auth/installation.mdx +++ b/apps/docs/content/docs/better-auth/installation.mdx @@ -4,11 +4,27 @@ title: Installation & Usage import { Callout } from "fumadocs-ui/components/callout"; +import { CliCommand } from "@/components/CliCommand"; + This package is currently in beta. Please report any issues you find to the [GitHub repository](https://github.com/proofgeist/proofkit/issues), or reach out to us in the [Community](https://community.ottomatic.cloud/c/proofkit/13) +# Prerequisites +- Ensure OData is enabled on your FileMaker server. +- Ensure your credentials have the `fmodata` privilege enabled. +- If you are using OttoFMS 4.11+ and you want to use a Data API key instead of plain credentials, ensure OData is enabled for that key. + +# Step 1a: Automated Setup with the ProofKit CLI + +This automated setup expects you to have Next.js and shadcn/ui set up in your project. It will also setup various auth pages for you, but these may not work if you have a prefix configured for tailwindcss. You can use this opinionated setup to get you started, or if you need more control you should refer to the manual setup. + + +Run the following command to add the necessary packages and config files to your project. You will not need to follow the better-auth installation guide. + + +# Step 1b: Manual Setup Follow the [Better-Auth installation guide](https://better-auth.com/docs/installation) to get started in your app, but come back here for special instructions for anything related to your Database Setup or schema migrations. @@ -39,26 +55,24 @@ export const auth = betterAuth({ database: process.env.FM_DATABASE, }, }), + // ...rest of your config }); ``` -### Create Database Tables +# Step 2: Create/Update Database Tables -Run the following command to create the necessary tables and fields in your FileMaker file. -```bash -pnpm dlx @proofkit/better-auth@latest migrate -``` -[Full Access] credentials are required for the schema changes to be applied automatically, but you may want to use a more restricted account for the rest of better-auth usage. If your credentials that you entered eariler in the `auth.ts` file do not have the [Full Access] permissions, you can override them in the CLI. -```bash -pnpm dlx @proofkit/better-auth@latest migrate --username "full_access_username" --password "full_access_password" -``` +Run the following command to create the necessary tables and fields in your FileMaker file. It will show you a confirmation before any changes are applied, so you can review them. + - -If you make any schema-related changes to the better-auth config, such as adding plugins, you will need to run the migration command again to apply the changes to your FileMaker file. - +[Full Access] credentials are required for the schema changes to be applied automatically, but you may want to use a more restricted account for the rest of better-auth usage. If your credentials that you entered earlier in the `auth.ts` file do not have the [Full Access] permissions, you can override them in the CLI. + +These changes affect database schema only. No layouts or relationships are created or modified during this process. +The tables/fields that are created will be dependent on how your `auth.ts` file is setup. If you want to use any of your existing tables, just set [custom table names](https://www.better-auth.com/docs/concepts/database#custom-table-names) in the `auth.ts` file before running the migration command. -## Next Steps +You may see fields added to your tables that you don't plan on using, but it's best to keep them in your database anyway to avoid potential errors. -Now that you have your database setup and your tables created, you can continue with the [Better-Auth installation guide](https://better-auth.com/docs/installation) to get your app up and running. + +If you make any schema-related changes to the better-auth config, such as adding plugins, you will need to run the migration command again to apply the changes to your FileMaker file. + diff --git a/apps/docs/content/docs/cli/guides/adding-components.mdx b/apps/docs/content/docs/cli/guides/adding-components/index.mdx similarity index 81% rename from apps/docs/content/docs/cli/guides/adding-components.mdx rename to apps/docs/content/docs/cli/guides/adding-components/index.mdx index 9e634221..44d3f943 100644 --- a/apps/docs/content/docs/cli/guides/adding-components.mdx +++ b/apps/docs/content/docs/cli/guides/adding-components/index.mdx @@ -6,10 +6,16 @@ icon: puzzle import { CliCommand } from "@/components/CliCommand"; -After initilizing a new ProofKit project, you can use the CLI to add new components and features. + +After initializing a new ProofKit project, you can use the CLI to add new components and features. + + +The `add` is now more dynamic and may change over time. To see all available items you can add via this command, see the [full list of templates available here](/docs/templates) + The ProofKit package is installed in your project, and as a script in your `package.json`, so you can run the following command (as long as your current directory is your project root): + diff --git a/apps/docs/content/docs/cli/guides/adding-components/meta.json b/apps/docs/content/docs/cli/guides/adding-components/meta.json new file mode 100644 index 00000000..18c4c7fc --- /dev/null +++ b/apps/docs/content/docs/cli/guides/adding-components/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Adding Components", + "icon": "puzzle", + "pages": ["templates"], + "defaultOpen": true +} diff --git a/apps/docs/content/docs/cli/guides/adding-components/templates.mdx b/apps/docs/content/docs/cli/guides/adding-components/templates.mdx new file mode 100644 index 00000000..fdf728ab --- /dev/null +++ b/apps/docs/content/docs/cli/guides/adding-components/templates.mdx @@ -0,0 +1,9 @@ +--- +title: All Templates +icon: ExternalLink +--- + +import Redirect from "@/components/redirect"; + +# ProofKit Templates + diff --git a/apps/docs/content/docs/cli/guides/auth/add-on.mdx b/apps/docs/content/docs/cli/guides/auth/add-on.mdx index 92d37f3d..28f80484 100644 --- a/apps/docs/content/docs/cli/guides/auth/add-on.mdx +++ b/apps/docs/content/docs/cli/guides/auth/add-on.mdx @@ -6,6 +6,10 @@ description: How to add FileMaker Add-on Auth to your FileMaker file import { CliCommand } from "@/components/CliCommand"; + +This component is no longer the recommended approach for self-hosting your web app's authentication in FileMaker. Instead, check out the [Better-Auth installation guide](/docs/better-auth/installation) for a more flexible and customizable solution. + + ProofKit includes a self-hosted authentication solution that is built to be flexible and easy to customize. Rather than using a third-party library or authentication service, the ProofKit CLI installs all of the necessary functions into your project and then you just have to install the FileMaker add-on in your FileMaker file to get the necessary tables in your database. While FileMaker Add-on Auth is built to be secure, it is more advanced than a typical third-party authentication service and does warrant a good understanding of how it works before you customize it beyond the default settings. For more details about the security principles behind it, see the [Lucia documentation](https://lucia-auth.com/). diff --git a/apps/docs/content/docs/cli/guides/motivation.mdx b/apps/docs/content/docs/cli/guides/motivation.mdx index f649e333..21f1fe1e 100644 --- a/apps/docs/content/docs/cli/guides/motivation.mdx +++ b/apps/docs/content/docs/cli/guides/motivation.mdx @@ -7,6 +7,7 @@ sidebar: import { Card } from "fumadocs-ui/components/card"; import { Callout } from "fumadocs-ui/components/callout"; +import { Badge } from "@/components/ui/badge"; The ProofKit CLI aims to make web development easier for beginners and more efficient for experienced devs. Its _opinionated_ structure allows for more than just a starter template or bootstrapping tool, but code-mod scripts that can modify a project after the initial setup. @@ -36,11 +37,20 @@ Here is a list of the frameworks and packages that you'll come across in a Proof A well-supported open-source React framework for full-stack web applications. This means it runs code on your frontend (in the client's web browser) and backend (on the web server, or API routes). It makes it easy to get a web app up and running with all the features that we expect from a modern web app and is used by companies of all sizes to power their online presence. -#### [Mantine](https://mantine.dev/) +#### [Shadcn/ui](https://ui.shadcn.com/) NEW -A vast, themeable component library for React. We use their default components and styles to build apps very quickly, but with the option of adding custom styles or themes later if needed. Mantine also includes many helpful React hooks, and they provide a Modal and Notification system to ProofKit apps. +A themeable component library for React. We use their default components and styles to build apps very quickly, but with the option of adding custom styles or themes later if needed. Shadcn/ui also includes many helpful React hooks, and they provide a Modal and Notification system to ProofKit apps. -Why not tailwind css and/or shadcn/ui? We've chosen to focus on Mantine because it has allowed our team to work much faster for the kinds of web apps that we build for our clients. When you're working on multiple projects at once, it's actually a benefit to **not** own the component code within an individual codebase, so that it can be more easily upgraded when the time comes. However, we have not ruled out other components and style systems and may add support for them in the future. +Using the shadcn CLI, you can install any component or utility from any compatible library. This makes shadcn the best choice for the most flexible and customizable apps. Some of our favorite shadcn-compatible libraries are: +- [Kibu Ui](https://www.kibo-ui.com/) +- [reui](https://reui.io/) +- [Magic UI](https://magicui.design/) +- [tweakcn (easily theme your components)](https://tweakcn.com/) +- [A longer list of more...](https://github.com/birobirobiro/awesome-shadcn-ui) + +#### [Tailwind CSS](https://tailwindcss.com/) NEW + +A utility-first CSS framework for rapidly building custom user interfaces. It's used by shadcn (and related libraries) to style the components and pages in your app. #### [Tanstack Query](https://tanstack.com/query) @@ -60,17 +70,6 @@ A wrapper around Next.js actions that include middleware (for easily checking th A hosted authentication service that is extremely easy to set up and use. It's a great choice to secure most customer-facing web apps, including built-in features such as Social logins, magic link, multi-factor authentication, and more. -#### Self-Hosted Auth - -For when you need a bit more flexibility or if you want to self-host the authentication layer, ProofKit can also scaffold out all the security functions required for you to manage your own authentication. Learn more in this guide: [FileMaker Add-on Auth](/docs/cli/guides/auth/add-on) - - -### Data Sources - -#### [Supabase](https://supabase.com/) - -An open-source set of tools that are centered around a Postgres database. They also offer an authentication layer to handle user logins all under one roof. - -#### [FileMaker](https://www.claris.com/) +#### [Better-Auth](https://better-auth.com/) (self-hosted) -A database and application development platform that allows users to create custom apps and automate processes. +For when you need a bit more flexibility or if you want to self-host the authentication layer within your existing FileMaker solution. Better-auth is a great choice for this, and the [proofkit/better-auth](/docs/better-auth) adapter allows you to use FileMaker as your backend database, including automated schema migrations to easily add any necessary tables and fields to your FileMaker file. diff --git a/apps/docs/content/docs/cli/index.mdx b/apps/docs/content/docs/cli/index.mdx index 90bf95df..ac105347 100644 --- a/apps/docs/content/docs/cli/index.mdx +++ b/apps/docs/content/docs/cli/index.mdx @@ -1,12 +1,38 @@ --- -title: ProofKit CLI -icon: terminal +title: Introduction +description: Build a web-app quicker than ever before. --- import { InitCommand } from "@/components/InitCommand"; import { Card } from "fumadocs-ui/components/card"; -Build a web-app quicker than ever before. + +## What is ProofKit? +ProofKit is a collection of TypeScript tools and libraries for building modern web applications, with a focus on seamless integration with Claris FileMaker. + +The ProofKit CLI aims to make web development easier for beginners and more efficient for experienced devs. Its opinionated structure allows for more than just a starter template or bootstrapping tool, but code-mod scripts that can modify a project after the initial setup. + +Think of it as our experience building web apps encapsulated into a CLI tool to help you structure your project and add to it over time. Each template is just a starting point, and you are free to modify any part of it as you see fit. + +## Core Libraries + +The ProofKit CLI will automatically install these other packages for you (depending on what you choose to build), but they are published separately if you want to use them in your own projects, without the opinionated structure provided by the CLI. + + +A library for interacting with the FileMaker Data API. + + +A library for generating TypeScript types and validation schemas from FileMaker layouts. + + +A library for interacting with the FileMaker WebViewer. + + +Self-hosted auth for your web apps, backed by your FileMaker database. + + + + ## Quick Start diff --git a/apps/docs/content/docs/cli/meta.json b/apps/docs/content/docs/cli/meta.json index 375a4bba..353fffef 100644 --- a/apps/docs/content/docs/cli/meta.json +++ b/apps/docs/content/docs/cli/meta.json @@ -4,7 +4,9 @@ "icon": "Terminal", "root": true, "pages": [ + "index", "guides/motivation", + "v2", "---Guides---", "guides/getting-started", "guides/adding-components", @@ -14,7 +16,6 @@ "webviewer", "---Reference---", "reference/cli-commands", - "reference/folder-structure", "guides/resources" ] } diff --git a/apps/docs/content/docs/cli/registry/index.mdx b/apps/docs/content/docs/cli/registry/index.mdx new file mode 100644 index 00000000..e977f272 --- /dev/null +++ b/apps/docs/content/docs/cli/registry/index.mdx @@ -0,0 +1,12 @@ +--- +title: ProofKit Registry +description: A collection of ProofKit templates for building great apps +--- + +The ProofKit Registry is a collection of ProofKit templates for building great apps. + +## Templates + +### @proofkit/template-basic + +A basic ProofKit template for building great apps. \ No newline at end of file diff --git a/apps/docs/content/docs/cli/v2.mdx b/apps/docs/content/docs/cli/v2.mdx new file mode 100644 index 00000000..a0e4bc33 --- /dev/null +++ b/apps/docs/content/docs/cli/v2.mdx @@ -0,0 +1,51 @@ +--- +title: What's new in v2? +description: In this major release, the ProofKit CLI has been reimagined as a more powerful tool for building web apps. +--- + +# The Highlights + +### A new starting point + +When you start a new app using the ProofKit CLI, the new template is based on shadcn and tailwindcss instead of Mantine. This new simple template still includes the best practices from the Proof+Geist team, but now with even more flexibility. + +### A new way to add [anything] + +The `proofkit add` command leverages the shadcn CLI to install any component or utility into your app, or you can use the shadcn CLI directly to install any component from any compatible library. Even better, these templates are now published right here on the docs site, so we can more easily release updates and new components that you can use right away. + +### A new level of compatibility + +You can now use the ProofKit CLI in an existing Next.js app, even if it wasn’t bootstrapped with the CLI, as long as it's already using shadcn. This unlocks the ability for more advanced developers to leverage the power of ProofKit, while still trying out the latest and greatest in the JavaScript ecosystem. + +# Why the change? + +Adding new templates to the ProofKit CLI was always a challenge, and arguably the most lacking of the whole system. The templates are meant to be just a starting place, so they needed to be generic to fit any project, yet useful enough to warrant inclusion in the binary everyone downloads to run the CLI. That wasn’t scalable. But shadcn has taken the JavaScript world by storm over the past few years, especially with the rise of AI and especially tools like v0. We needed to unlock the ability to easily add anything to your JavaScript projects, whether it was a template from Proof, shadcn, v0 (AI-generated), or from any of the other emerging UI libraries built on the shadcn CLI. + +But this required a new starting point. While mantine and tailwind can be used together in the same project, they get in each other’s way. At Proof+Geist, we’ve been building new projects without ProofKit for a few months now, so it was time to bring those learnings back to the framework so we could all move more quickly. New projects will start with a new foundation based on tailwindcss. It’s easier for AI to understand, and more compatible with any UI component built for shadcn to install for you. + +But the shadcn CLI isn’t just about UI components. It can install any utility or set of components into your app. Take the new `@proofkit/better-auth` package that was recently released. It’s the best way to quickly and easily add self-hosted authentication to your web app, without having to compromise on login options or pay for an external auth service. But setting it up was not easy...until now! Check out our @proofkit/better-auth [guide](/docs/better-auth/installation) for more details. + +# Upgrade from v1 + +Unfortunately, there is not an easy path for you to upgrade projects that were created with v1 to be fully compatible with v2. But if you are able to setup tailwindcss and shadcn in your existing project, you can still use the ProofKit CLI to add new components and utilities to your app. + +Basic steps: + +1. Configure [tailwindcss](https://tailwindcss.com/) in your project. + - If possible, you should replace any use of the Mantine UI library with tailwind-based components. You could also configure tailwind with a prefix so as not to conflict with the Mantine classes, but not all of the new components are compatible. +2. Install [shadcn](https://ui.shadcn.com/). +3. Add/change the "ui" key in your `proofkit.json` file and set to "shadcn". + +```json title="proofkit.json" +{ + "ui": "shadcn" +} +``` + +4. Install/update the ProofKit CLI, or use the npx commands to run the CLI without needing to install it in your project + + + Please report any issues you find to the [GitHub + repository](https://github.com/proofgeist/proofkit/issues), or reach out to us + in the [Community](https://community.ottomatic.cloud/c/proofkit/13) + diff --git a/apps/docs/content/docs/index.mdx b/apps/docs/content/docs/index.mdx index 4167ad44..9f3c7abc 100644 --- a/apps/docs/content/docs/index.mdx +++ b/apps/docs/content/docs/index.mdx @@ -30,3 +30,7 @@ A library for generating TypeScript types and validation schemas from FileMaker ### @proofkit/webviewer A library for interacting with the FileMaker WebViewer. [Learn more](/docs/webviewer) + +### @proofkit/better-auth + +Self-hosted auth for your web apps, backed by your FileMaker database. [Learn more](/docs/better-auth) diff --git a/apps/docs/content/docs/meta.json b/apps/docs/content/docs/meta.json index 9efe2649..09649e1a 100644 --- a/apps/docs/content/docs/meta.json +++ b/apps/docs/content/docs/meta.json @@ -1,3 +1,3 @@ { - "pages": ["cli", "fmdapi", "webviewer", "typegen", "better-auth"] + "pages": ["cli", "templates", "fmdapi", "webviewer", "typegen", "better-auth"] } diff --git a/apps/docs/content/docs/templates/index.mdx b/apps/docs/content/docs/templates/index.mdx new file mode 100644 index 00000000..7898e6a7 --- /dev/null +++ b/apps/docs/content/docs/templates/index.mdx @@ -0,0 +1,3 @@ +--- +title: ProofKit Templates +--- \ No newline at end of file diff --git a/apps/docs/content/docs/templates/meta.json b/apps/docs/content/docs/templates/meta.json new file mode 100644 index 00000000..5347a602 --- /dev/null +++ b/apps/docs/content/docs/templates/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Templates", + "description": "Quickly install via CLI", + "icon": "Puzzle", + "root": true +} diff --git a/apps/docs/next.config.ts b/apps/docs/next.config.ts index 5649c293..61483a15 100644 --- a/apps/docs/next.config.ts +++ b/apps/docs/next.config.ts @@ -1,6 +1,7 @@ import { createMDX } from "fumadocs-mdx/next"; import { type NextConfig } from "next"; import { validateRegistry } from "@proofkit/registry"; +import { source } from "./src/lib/source"; const withMDX = createMDX(); // validateRegistry(); @@ -16,6 +17,7 @@ const config: NextConfig = { destination: "/r/:path*", permanent: true, }, + { source: "/docs", destination: "/docs/cli", permanent: false }, ]; }, }; diff --git a/apps/docs/package.json b/apps/docs/package.json index e96e7434..8647288c 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -13,26 +13,32 @@ "@proofkit/registry": "workspace:*", "@proofkit/typegen": "workspace:*", "@proofkit/webviewer": "workspace:*", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-presence": "^1.1.5", + "@radix-ui/react-scroll-area": "^1.2.10", "@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-slot": "^1.2.3", "@tabler/icons-react": "^3.34.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "fumadocs-core": "15.3.3", + "fumadocs-core": "15.7.13", "fumadocs-docgen": "^2.1.0", "fumadocs-mdx": "11.6.4", - "fumadocs-twoslash": "^3.1.4", - "fumadocs-typescript": "^4.0.6", - "fumadocs-ui": "15.3.3", + "fumadocs-twoslash": "^3.1.7", + "fumadocs-typescript": "^4.0.8", + "fumadocs-ui": "15.7.13", "hono": "^4.9.0", "jiti": "^1.21.7", "lucide-react": "^0.511.0", "next": "^15.4.6", + "next-themes": "^0.4.6", "react": "^19.1.1", "react-dom": "^19.1.1", "shadcn": "^2.10.0", - "shiki": "^3.9.2", + "shiki": "^3.13.0", "tailwind-merge": "^3.3.1", + "ts-morph": "^26.0.0", "twoslash": "^0.3.4", "zod": "3.25.64" }, diff --git a/apps/docs/src/app/(home)/layout.tsx b/apps/docs/src/app/(home)/layout.tsx index 1c64fbb9..3875dbd3 100644 --- a/apps/docs/src/app/(home)/layout.tsx +++ b/apps/docs/src/app/(home)/layout.tsx @@ -3,5 +3,15 @@ import { HomeLayout } from "fumadocs-ui/layouts/home"; import { baseOptions } from "@/app/layout.config"; export default function Layout({ children }: { children: ReactNode }) { - return {children}; + return ( + + {children} + + ); } diff --git a/apps/docs/src/app/docs/[[...slug]]/page.tsx b/apps/docs/src/app/docs/(docs)/[[...slug]]/page.tsx similarity index 100% rename from apps/docs/src/app/docs/[[...slug]]/page.tsx rename to apps/docs/src/app/docs/(docs)/[[...slug]]/page.tsx diff --git a/apps/docs/src/app/docs/layout.tsx b/apps/docs/src/app/docs/(docs)/layout.tsx similarity index 93% rename from apps/docs/src/app/docs/layout.tsx rename to apps/docs/src/app/docs/(docs)/layout.tsx index 6f51a33d..aeeab9b1 100644 --- a/apps/docs/src/app/docs/layout.tsx +++ b/apps/docs/src/app/docs/(docs)/layout.tsx @@ -1,4 +1,4 @@ -import { DocsLayout } from "fumadocs-ui/layouts/docs"; +import { DocsLayout } from "@/components/layout/docs"; import type { ReactNode } from "react"; import { baseOptions } from "@/app/layout.config"; import { source } from "@/lib/source"; diff --git a/apps/docs/src/app/docs/templates/[...slug]/page.tsx b/apps/docs/src/app/docs/templates/[...slug]/page.tsx new file mode 100644 index 00000000..d8be3906 --- /dev/null +++ b/apps/docs/src/app/docs/templates/[...slug]/page.tsx @@ -0,0 +1,91 @@ +import { getAllTemplates, getTemplateByName } from "@/lib/templates"; +import { notFound } from "next/navigation"; +import type { Metadata } from "next"; +import { CliCommand } from "@/components/CliCommand"; +import { getCategoryConfig } from "../category-config"; + +interface TemplatePageProps { + params: Promise<{ slug: string[] }>; +} + +export async function generateStaticParams() { + const templates = await getAllTemplates(); + + return templates.map((template) => ({ + slug: template.name.split("/"), + })); +} + +export async function generateMetadata({ + params, +}: TemplatePageProps): Promise { + const { slug } = await params; + const templateName = slug.join("/"); + + const template = await getTemplateByName(templateName); + + if (!template) { + return { + title: "Template Not Found", + }; + } + + return { + title: `${template.title} - ProofKit Templates`, + description: + template.description || + `Learn about the ${template.title} template for ProofKit applications.`, + }; +} + +export default async function TemplatePage({ params }: TemplatePageProps) { + const { slug } = await params; + const templateName = slug.join("/"); + + const template = await getTemplateByName(templateName); + + if (!template) { + notFound(); + } + + return ( +
+ {/* Template header */} +
+
+
+ {(() => { + const CategoryIcon = getCategoryConfig( + template.category as any, + ).icon; + return ; + })()} +
+
+

{template.title}

+ {template.description && ( +

+ {template.description} +

+ )} +
+
+ +
+ + {getCategoryConfig(template.category as any).name} + + + {template.name} + +
+
+ + {/* Installation command */} +
+

Installation

+ +
+
+ ); +} diff --git a/apps/docs/src/app/docs/templates/category-config.ts b/apps/docs/src/app/docs/templates/category-config.ts new file mode 100644 index 00000000..2836a992 --- /dev/null +++ b/apps/docs/src/app/docs/templates/category-config.ts @@ -0,0 +1,57 @@ +import { Package, File, Wrench, Mail, Anchor } from "lucide-react"; +import type { ComponentType } from "react"; +import type { TemplateMetadata } from "@proofkit/registry"; + +type Category = TemplateMetadata["category"]; + +export interface CategoryConfig { + category: Category; + name: string; + icon: ComponentType; +} + +export const categoryConfigs: CategoryConfig[] = [ + { + category: "component", + name: "Components", + icon: Package, + }, + { + category: "page", + name: "Pages", + icon: File, + }, + { + category: "hook", + name: "Hooks", + icon: Anchor, + }, + { + category: "email", + name: "Emails", + icon: Mail, + }, + { + category: "utility", + name: "Utilities", + icon: Wrench, + }, +]; + +// Create a lookup map for O(1) access +export const categoryConfigMap = categoryConfigs.reduce( + (acc, config) => { + acc[config.category] = config; + return acc; + }, + {} as Record, +); + +// Helper function to get category configuration +export const getCategoryConfig = (category: Category): CategoryConfig => { + const config = categoryConfigMap[category]; + if (!config) { + throw new Error(`Unknown template category: ${category as string}`); + } + return config; +}; diff --git a/apps/docs/src/app/docs/templates/layout.tsx b/apps/docs/src/app/docs/templates/layout.tsx new file mode 100644 index 00000000..f8305607 --- /dev/null +++ b/apps/docs/src/app/docs/templates/layout.tsx @@ -0,0 +1,104 @@ +import { DocsLayout } from "@/components/layout/docs"; +import type { ReactNode } from "react"; +import { baseOptions } from "../../layout.config"; +import { getTemplatesByCategory } from "@/lib/templates"; +import { type TemplateMetadata } from "@proofkit/registry"; +import { PageTree } from "fumadocs-core/server"; +import { source } from "@/lib/source"; +import { New_Tegomin } from "next/font/google"; +import { getSidebarTabs } from "fumadocs-ui/utils/get-sidebar-tabs"; +import { categoryConfigs, categoryConfigMap } from "./category-config"; + +type Category = TemplateMetadata["category"]; + +async function buildTemplatesTree() { + const templatesByCategory = await getTemplatesByCategory(); + + const children: PageTree.Root["children"] = [ + { + name: "Overview", + url: "/docs/templates", + type: "page", + }, + ]; + + // Add each category as a separator followed by its templates in the defined order + categoryConfigs.forEach(({ category, name }) => { + const templates = templatesByCategory[category]; + if (!templates || templates.length === 0) return; + + // Add category separator + children.push({ + name, + type: "separator", + }); + + // Add all templates in this category + templates.forEach((template) => { + children.push({ + name: template.title, + url: `/docs${template.path}`, + type: "page", + }); + }); + }); + + return { + children, + }; +} + +export default async function Layout({ children }: { children: ReactNode }) { + const templatesTree = await buildTemplatesTree(); + + // Find the existing Templates folder in the source tree + const templatesFolder = source.pageTree.children.find( + (child) => child.type === "folder" && child.name === "Templates", + ); + + // Create a new tree with the Templates folder replaced + const newChildren = source.pageTree.children.map((child) => { + if (child.type === "folder" && child.name === "Templates") { + // Replace the Templates folder with our custom one that includes dynamic templates + return { + ...child, // Preserve the original properties (including icon, root, etc.) + children: templatesTree.children, + }; + } + return child; + }); + + const newTree: PageTree.Root = { + ...source.pageTree, + children: newChildren, + }; + + const tabs = getSidebarTabs(newTree); + + return ( + +

+ Made with ❤️ by{" "} + + Proof+Geist + +

+ + ), + }} + > +
{children}
+
+ ); +} diff --git a/apps/docs/src/app/docs/templates/page.tsx b/apps/docs/src/app/docs/templates/page.tsx new file mode 100644 index 00000000..222be832 --- /dev/null +++ b/apps/docs/src/app/docs/templates/page.tsx @@ -0,0 +1,34 @@ +import { getAllTemplates, getTemplatesByCategory } from "@/lib/templates"; +import { TemplatesPageClient } from "./templates-client"; +import type { Metadata } from "next"; +import { DocsPage } from "fumadocs-ui/page"; + +export const metadata: Metadata = { + title: "Templates - ProofKit", + description: + "Discover and explore our collection of templates for building FileMaker-powered applications.", +}; + +export default async function TemplatesPage() { + const [templates, templatesByCategory] = await Promise.all([ + getAllTemplates(), + getTemplatesByCategory(), + ]); + + return ( +
+
+

ProofKit Templates

+

+ Discover and explore our collection of templates for building + FileMaker-powered applications. +

+
+ + +
+ ); +} diff --git a/apps/docs/src/app/docs/templates/templates-client.tsx b/apps/docs/src/app/docs/templates/templates-client.tsx new file mode 100644 index 00000000..5fa97da7 --- /dev/null +++ b/apps/docs/src/app/docs/templates/templates-client.tsx @@ -0,0 +1,203 @@ +"use client"; + +import { useState, useMemo } from "react"; +import Link from "next/link"; +import { Search, Package } from "lucide-react"; +import type { TemplateWithPath } from "@/lib/templates"; +import { + getCategoryConfig, + categoryConfigs, + type CategoryConfig, +} from "./category-config"; +import type { TemplateMetadata } from "@proofkit/registry"; + +type Category = TemplateMetadata["category"]; + +interface TemplatesPageClientProps { + templates: TemplateWithPath[]; + templatesByCategory: Record; +} + +export function TemplatesPageClient({ + templates, + templatesByCategory, +}: TemplatesPageClientProps) { + const [searchQuery, setSearchQuery] = useState(""); + const [selectedCategory, setSelectedCategory] = useState( + null, + ); + + const filteredTemplates = useMemo(() => { + let filtered = templates; + + // Filter by search query + if (searchQuery.trim()) { + const query = searchQuery.toLowerCase(); + filtered = filtered.filter( + (template) => + template.title.toLowerCase().includes(query) || + template.description?.toLowerCase().includes(query) || + template.name.toLowerCase().includes(query) || + template.category.toLowerCase().includes(query), + ); + } + + // Filter by category + if (selectedCategory) { + filtered = filtered.filter( + (template) => template.category === selectedCategory, + ); + } + + return filtered; + }, [templates, searchQuery, selectedCategory]); + + // Use category configuration order instead of alphabetical sort + const categories = categoryConfigs + .filter((config) => templatesByCategory[config.category]?.length > 0) + .map((config) => config.category); + + return ( +
+ {/* Search and filters */} +
+ {/* Search */} +
+
+ + setSearchQuery(e.target.value)} + className="w-full pl-10 pr-4 py-2 border border-border rounded-lg bg-background focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent" + /> +
+
+ + {/* Category filters */} +
+ + {categories.map((category) => { + const config = getCategoryConfig(category); + const CategoryIcon = config.icon; + return ( + + ); + })} +
+
+ + {/* Main content */} +
+ {/* Results header */} +
+

+ {filteredTemplates.length} template + {filteredTemplates.length !== 1 ? "s" : ""} found + {selectedCategory && ( + + {" "} + in{" "} + + {getCategoryConfig(selectedCategory).name} + + + )} + {searchQuery && ( + + {" "} + matching "{searchQuery}" + + )} +

+
+ + {/* Templates grid */} + {filteredTemplates.length > 0 ? ( +
+ {filteredTemplates.map((template) => ( + +
+
+ {(() => { + const CategoryIcon = getCategoryConfig( + template.category, + ).icon; + return ; + })()} +
+
+

+ {template.title} +

+ {template.description && ( +

+ {template.description} +

+ )} +
+ + {template.category} + + + {template.name} + +
+
+
+ + ))} +
+ ) : ( +
+ +

+ No templates found +

+

+ {searchQuery || selectedCategory + ? "Try adjusting your search or filter criteria." + : "There are no templates available at the moment."} +

+ {(searchQuery || selectedCategory) && ( + + )} +
+ )} +
+
+ ); +} diff --git a/apps/docs/src/app/layout.config.tsx b/apps/docs/src/app/layout.config.tsx index 7656c72f..2f286bef 100644 --- a/apps/docs/src/app/layout.config.tsx +++ b/apps/docs/src/app/layout.config.tsx @@ -7,7 +7,7 @@ import Image from "next/image"; * Home Layout: app/(home)/layout.tsx * Docs Layout: app/docs/layout.tsx */ -export const baseOptions: BaseLayoutProps = { +export const baseOptions = { nav: { title: ( <> @@ -21,7 +21,6 @@ export const baseOptions: BaseLayoutProps = { ), }, links: [ - { text: "Documentation", url: "/docs", active: "none", on: "nav" }, { text: "Community", url: "https://community.ottomatic.cloud/c/proofkit", @@ -39,4 +38,4 @@ export const baseOptions: BaseLayoutProps = { external: true, }, ], -}; +} satisfies BaseLayoutProps; diff --git a/apps/docs/src/components/CliCommand.tsx b/apps/docs/src/components/CliCommand.tsx index 7561c0ff..66d0d787 100644 --- a/apps/docs/src/components/CliCommand.tsx +++ b/apps/docs/src/components/CliCommand.tsx @@ -1,13 +1,44 @@ +"use client"; import { DynamicCodeBlock } from "fumadocs-ui/components/dynamic-codeblock"; import { Tabs, Tab } from "fumadocs-ui/components/tabs"; +import { cliVersion } from "@/lib/constants"; const MANAGERS = [ - { key: "pnpm", label: "pnpm", prefix: "pnpm" }, - { key: "npm", label: "npm", prefix: "npm run" }, - { key: "yarn", label: "yarn", prefix: "yarn" }, + { + key: "npm", + label: "npm", + prefix: "npm run", + execPrefix: "npx", + }, + { + key: "pnpm", + label: "pnpm", + prefix: "pnpm", + execPrefix: "pnpm dlx", + }, + { + key: "yarn", + label: "yarn", + prefix: "yarn", + execPrefix: "yarn dlx", + }, + { + key: "bun", + label: "bun", + prefix: "bun", + execPrefix: "bunx", + }, ]; -export function CliCommand({ command }: { command: string }) { +export function CliCommand({ + command, + exec, + execPackage = `@proofkit/cli@${cliVersion}`, +}: { + command: string; + exec?: boolean; + execPackage?: string; +}) { return ( {MANAGERS.map((manager) => ( - + ))} diff --git a/apps/docs/src/components/InitCommand.tsx b/apps/docs/src/components/InitCommand.tsx index a64521ee..59be04f0 100644 --- a/apps/docs/src/components/InitCommand.tsx +++ b/apps/docs/src/components/InitCommand.tsx @@ -1,10 +1,11 @@ import { DynamicCodeBlock } from "fumadocs-ui/components/dynamic-codeblock"; import { Tabs, Tab } from "fumadocs-ui/components/tabs"; +import { cliVersion } from "@/lib/constants"; const MANAGERS = [ - { key: "pnpm", label: "pnpm", command: "pnpm create proofkit@latest" }, - { key: "npm", label: "npm", command: "npx create-proofkit@latest" }, - { key: "yarn", label: "yarn", command: "yarn create proofkit@latest" }, + { key: "pnpm", label: "pnpm", command: `pnpm create proofkit@${cliVersion}` }, + { key: "npm", label: "npm", command: `npx create-proofkit@${cliVersion}` }, + { key: "yarn", label: "yarn", command: `yarn create proofkit@${cliVersion}` }, ]; export function InitCommand() { diff --git a/apps/docs/src/components/language-toggle.tsx b/apps/docs/src/components/language-toggle.tsx new file mode 100644 index 00000000..40a5443d --- /dev/null +++ b/apps/docs/src/components/language-toggle.tsx @@ -0,0 +1,68 @@ +'use client'; +import { type ButtonHTMLAttributes, type HTMLAttributes } from 'react'; +import { useI18n } from 'fumadocs-ui/contexts/i18n'; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from './ui/popover'; +import { cn } from '../lib/cn'; +import { buttonVariants } from './ui/button'; + +export type LanguageSelectProps = ButtonHTMLAttributes; + +export function LanguageToggle(props: LanguageSelectProps): React.ReactElement { + const context = useI18n(); + if (!context.locales) throw new Error('Missing ``'); + + return ( + + + {props.children} + + +

+ {context.text.chooseLanguage} +

+ {context.locales.map((item) => ( + + ))} +
+
+ ); +} + +export function LanguageToggleText( + props: HTMLAttributes, +): React.ReactElement { + const context = useI18n(); + const text = context.locales?.find( + (item) => item.locale === context.locale, + )?.name; + + return {text}; +} diff --git a/apps/docs/src/components/layout/docs/client.tsx b/apps/docs/src/components/layout/docs/client.tsx new file mode 100644 index 00000000..3a7183a0 --- /dev/null +++ b/apps/docs/src/components/layout/docs/client.tsx @@ -0,0 +1,81 @@ +'use client'; + +import { Sidebar as SidebarIcon } from 'lucide-react'; +import { type ComponentProps } from 'react'; +import { cn } from '../../../lib/cn'; +import { buttonVariants } from '../../ui/button'; +import { useSidebar } from 'fumadocs-ui/contexts/sidebar'; +import { useNav } from 'fumadocs-ui/contexts/layout'; +import { SidebarCollapseTrigger } from '../../sidebar'; +import { SearchToggle } from '../../search-toggle'; + +export function Navbar(props: ComponentProps<'header'>) { + const { isTransparent } = useNav(); + + return ( +
+ {props.children} +
+ ); +} + +export function LayoutBody(props: ComponentProps<'main'>) { + const { collapsed } = useSidebar(); + + return ( +
+ {props.children} +
+ ); +} + +export function CollapsibleControl() { + const { collapsed } = useSidebar(); + + return ( +
+ + + + +
+ ); +} diff --git a/apps/docs/src/components/layout/docs/index.tsx b/apps/docs/src/components/layout/docs/index.tsx new file mode 100644 index 00000000..9a26da45 --- /dev/null +++ b/apps/docs/src/components/layout/docs/index.tsx @@ -0,0 +1,368 @@ +import type { PageTree } from "fumadocs-core/server"; +import { + type ComponentProps, + type HTMLAttributes, + type ReactNode, + useMemo, +} from "react"; +import { Languages, Sidebar as SidebarIcon } from "lucide-react"; +import { cn } from "../../../lib/cn"; +import { buttonVariants } from "../../ui/button"; +import { + Sidebar, + SidebarCollapseTrigger, + type SidebarComponents, + SidebarContent, + SidebarContentMobile, + SidebarFolder, + SidebarFolderContent, + SidebarFolderLink, + SidebarFolderTrigger, + SidebarFooter, + SidebarHeader, + SidebarItem, + SidebarPageTree, + type SidebarProps, + SidebarTrigger, + SidebarViewport, +} from "../../sidebar"; +import { type Option, RootToggle } from "../../root-toggle"; +import { + type BaseLayoutProps, + BaseLinkItem, + getLinks, + type IconItemType, + type LinkItemType, +} from "../shared/index"; +import { LanguageToggle, LanguageToggleText } from "../../language-toggle"; +import { CollapsibleControl, LayoutBody, Navbar } from "./client"; +import { TreeContextProvider } from "fumadocs-ui/contexts/tree"; +import { ThemeToggle } from "../../theme-toggle"; +import { NavProvider } from "fumadocs-ui/contexts/layout"; +import Link from "fumadocs-core/link"; +import { LargeSearchToggle, SearchToggle } from "../../search-toggle"; +import { HideIfEmpty } from "fumadocs-core/hide-if-empty"; +import { + getSidebarTabs, + type GetSidebarTabsOptions, +} from "fumadocs-ui/utils/get-sidebar-tabs"; + +export interface DocsLayoutProps extends BaseLayoutProps { + tree: PageTree.Root; + + sidebar?: SidebarOptions; + + /** + * Props for the `div` container + */ + containerProps?: HTMLAttributes; +} + +interface SidebarOptions + extends ComponentProps<"aside">, + Pick { + enabled?: boolean; + component?: ReactNode; + components?: Partial; + + /** + * Root Toggle options + */ + tabs?: Option[] | GetSidebarTabsOptions | false; + + banner?: ReactNode; + footer?: ReactNode; + + /** + * Support collapsing the sidebar on desktop mode + * + * @defaultValue true + */ + collapsible?: boolean; +} + +export function DocsLayout({ + nav: { transparentMode, ...nav } = {}, + sidebar: { + tabs: sidebarTabs, + enabled: sidebarEnabled = true, + ...sidebarProps + } = {}, + searchToggle = {}, + disableThemeSwitch = false, + themeSwitch = { enabled: !disableThemeSwitch }, + i18n = false, + children, + ...props +}: DocsLayoutProps) { + const tabs = useMemo(() => { + if (Array.isArray(sidebarTabs)) { + return sidebarTabs; + } + if (typeof sidebarTabs === "object") { + return getSidebarTabs(props.tree, sidebarTabs); + } + if (sidebarTabs !== false) { + return getSidebarTabs(props.tree); + } + return []; + }, [sidebarTabs, props.tree]); + const links = getLinks(props.links ?? [], props.githubUrl); + const sidebarVariables = cn( + "md:[--fd-sidebar-width:268px] lg:[--fd-sidebar-width:286px]", + ); + + function sidebar() { + const { + footer, + banner, + collapsible = true, + component, + components, + defaultOpenLevel, + prefetch, + ...rest + } = sidebarProps; + if (component) return component; + + const iconLinks = links.filter( + (item): item is IconItemType => item.type === "icon", + ); + + const viewport = ( + + {links + .filter((v) => v.type !== "icon") + .map((item, i, list) => ( + + ))} + + + ); + + const mobile = ( + + +
+
+ {iconLinks.map((item, i) => ( + + {item.icon} + + ))} +
+ {i18n ? ( + + + + + ) : null} + {themeSwitch.enabled !== false && + (themeSwitch.component ?? ( + + ))} + + + +
+ {tabs.length > 0 && } + {banner} +
+ {viewport} + {footer} +
+ ); + + const content = ( + + +
+ + {nav.title} + + {nav.children} + {collapsible && ( + + + + )} +
+ {searchToggle.enabled !== false && + (searchToggle.components?.lg ?? ( + + ))} + {tabs.length > 0 && } + + {banner} +
+ {viewport} + +
+ {i18n ? ( + + + + ) : null} + {iconLinks.map((item, i) => ( + + {item.icon} + + ))} + {themeSwitch.enabled !== false && + (themeSwitch.component ?? ( + + ))} +
+ {footer} +
+
+ ); + + return ( + + {collapsible && } + {content} + + } + /> + ); + } + + return ( + + + {nav.enabled !== false && + (nav.component ?? ( + + + {nav.title} + +
{nav.children}
+ {searchToggle.enabled !== false && + (searchToggle.components?.sm ?? ( + + ))} + {sidebarEnabled && ( + + + + )} +
+ ))} + + {sidebarEnabled && sidebar()} + {children} + +
+
+ ); +} + +function SidebarLinkItem({ + item, + ...props +}: { + item: Exclude; + className?: string; +}) { + if (item.type === "menu") + return ( + + {item.url ? ( + + {item.icon} + {item.text} + + ) : ( + + {item.icon} + {item.text} + + )} + + {item.items.map((child, i) => ( + + ))} + + + ); + + if (item.type === "custom") return
{item.children}
; + + return ( + + {item.text} + + ); +} + +export { CollapsibleControl, Navbar, SidebarTrigger, type LinkItemType }; diff --git a/apps/docs/src/components/layout/docs/page-client.tsx b/apps/docs/src/components/layout/docs/page-client.tsx new file mode 100644 index 00000000..95953aa5 --- /dev/null +++ b/apps/docs/src/components/layout/docs/page-client.tsx @@ -0,0 +1,426 @@ +"use client"; + +import { + type ComponentProps, + Fragment, + useEffect, + useMemo, + useRef, + useState, +} from "react"; +import { ChevronDown, ChevronLeft, ChevronRight } from "lucide-react"; +import Link from "fumadocs-core/link"; +import { cn } from "../../../lib/cn"; +import { useI18n } from "fumadocs-ui/contexts/i18n"; +import { useTreeContext, useTreePath } from "fumadocs-ui/contexts/tree"; +import type { PageTree } from "fumadocs-core/server"; +import { createContext, usePathname } from "fumadocs-core/framework"; +import { + type BreadcrumbOptions, + getBreadcrumbItemsFromPath, +} from "fumadocs-core/breadcrumb"; +import { useNav } from "fumadocs-ui/contexts/layout"; +import { isActive } from "../../../lib/is-active"; +import { useEffectEvent } from "fumadocs-core/utils/use-effect-event"; +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from "../../ui/collapsible"; +import { useSidebar } from "fumadocs-ui/contexts/sidebar"; +import { useTOCItems } from "../../ui/toc"; +import { useActiveAnchor } from "fumadocs-core/toc"; + +const TocPopoverContext = createContext<{ + open: boolean; + setOpen: (open: boolean) => void; +}>("TocPopoverContext"); + +export function PageTOCPopoverTrigger(props: ComponentProps<"button">) { + const { text } = useI18n(); + const { open } = TocPopoverContext.use(); + const items = useTOCItems(); + const active = useActiveAnchor(); + const selected = useMemo( + () => items.findIndex((item) => active === item.url.slice(1)), + [items, active], + ); + const path = useTreePath().at(-1); + const showItem = selected !== -1 && !open; + + return ( + + + + + {path?.name ?? text.toc} + + + {items[selected]?.title} + + + + + ); +} + +interface ProgressCircleProps + extends Omit, "strokeWidth"> { + value: number; + strokeWidth?: number; + size?: number; + min?: number; + max?: number; +} + +function clamp(input: number, min: number, max: number): number { + if (input < min) return min; + if (input > max) return max; + return input; +} + +function ProgressCircle({ + value, + strokeWidth = 2, + size = 24, + min = 0, + max = 100, + ...restSvgProps +}: ProgressCircleProps) { + const normalizedValue = clamp(value, min, max); + const radius = (size - strokeWidth) / 2; + const circumference = 2 * Math.PI * radius; + const progress = (normalizedValue / max) * circumference; + const circleProps = { + cx: size / 2, + cy: size / 2, + r: radius, + fill: "none", + strokeWidth, + }; + + return ( + + + + + ); +} + +export function PageTOCPopoverContent(props: ComponentProps<"div">) { + return ( + + {props.children} + + ); +} + +export function PageTOCPopover(props: ComponentProps<"div">) { + const ref = useRef(null); + const [open, setOpen] = useState(false); + const { collapsed } = useSidebar(); + const { isTransparent } = useNav(); + + const onClick = useEffectEvent((e: Event) => { + if (!open) return; + + if (ref.current && !ref.current.contains(e.target as HTMLElement)) + setOpen(false); + }); + + useEffect(() => { + window.addEventListener("click", onClick); + + return () => { + window.removeEventListener("click", onClick); + }; + }, [onClick]); + + return ( + ({ + open, + setOpen, + }), + [setOpen, open], + )} + > + +
+ {props.children} +
+
+
+ ); +} + +export function PageLastUpdate({ + date: value, + ...props +}: Omit, "children"> & { date: Date | string }) { + const { text } = useI18n(); + const [date, setDate] = useState(""); + + useEffect(() => { + // Parse the date once and validate it + const parsed = new Date(value); + + // Check if the parsed date is valid + if (!Number.isNaN(parsed.getTime())) { + // Valid date - format to client timezone + setDate(parsed.toLocaleDateString()); + } else { + // Invalid date - set to empty string as fallback + setDate(""); + } + }, [value]); + + return ( +

+ {text.lastUpdate} {date || ""} +

+ ); +} + +type Item = Pick; +export interface FooterProps extends ComponentProps<"div"> { + /** + * Items including information for the next and previous page + */ + items?: { + previous?: Item; + next?: Item; + }; +} + +function scanNavigationList(tree: PageTree.Node[]) { + const list: PageTree.Item[] = []; + + tree.forEach((node) => { + if (node.type === "folder") { + if (node.index) { + list.push(node.index); + } + + list.push(...scanNavigationList(node.children)); + return; + } + + if (node.type === "page" && !node.external) { + list.push(node); + } + }); + + return list; +} + +const listCache = new Map(); + +export function PageFooter({ items, ...props }: FooterProps) { + const { root } = useTreeContext(); + const pathname = usePathname(); + + const { previous, next } = useMemo(() => { + if (items) return items; + + const cached = listCache.get(root.$id); + const list = cached ?? scanNavigationList(root.children); + listCache.set(root.$id, list); + + const idx = list.findIndex((item) => isActive(item.url, pathname, false)); + + if (idx === -1) return {}; + return { + previous: list[idx - 1], + next: list[idx + 1], + }; + }, [items, pathname, root]); + + return ( +
+ {previous ? : null} + {next ? : null} +
+ ); +} + +function FooterItem({ item, index }: { item: Item; index: 0 | 1 }) { + const { text } = useI18n(); + const Icon = index === 0 ? ChevronLeft : ChevronRight; + + return ( + +
+ +

{item.name}

+
+

+ {item.description ?? (index === 0 ? text.previousPage : text.nextPage)} +

+ + ); +} + +export type BreadcrumbProps = BreadcrumbOptions & ComponentProps<"div">; + +export function PageBreadcrumb({ + includeRoot = false, + includeSeparator, + includePage = false, + ...props +}: BreadcrumbProps) { + const path = useTreePath(); + const { root } = useTreeContext(); + const items = useMemo(() => { + return getBreadcrumbItemsFromPath(root, path, { + includePage, + includeSeparator, + includeRoot, + }); + }, [includePage, includeRoot, includeSeparator, path, root]); + + if (items.length === 0) return null; + + return ( +
+ {items.map((item, i) => { + const className = cn( + "truncate", + i === items.length - 1 && "text-fd-primary font-medium", + ); + + return ( + + {i !== 0 && } + {item.url ? ( + + {item.name} + + ) : ( + {item.name} + )} + + ); + })} +
+ ); +} + +export function PageTOC(props: ComponentProps<"div">) { + const { collapsed } = useSidebar(); + const offset = collapsed ? "0px" : "var(--fd-layout-offset)"; + + return ( +
+
+ {props.children} +
+
+ ); +} diff --git a/apps/docs/src/components/layout/docs/page.tsx b/apps/docs/src/components/layout/docs/page.tsx new file mode 100644 index 00000000..38b85f9c --- /dev/null +++ b/apps/docs/src/components/layout/docs/page.tsx @@ -0,0 +1,103 @@ +import { type ComponentProps } from 'react'; +import { cn } from '../../../lib/cn'; +import { + type BreadcrumbProps, + type FooterProps, + PageBreadcrumb, + PageFooter, + PageLastUpdate, + PageTOC, + PageTOCPopover, + PageTOCPopoverContent, + PageTOCPopoverTrigger, +} from './page-client'; +import { TOCItems, TOCProvider, TOCScrollArea } from '../../ui/toc'; +import { Text } from 'lucide-react'; +import { I18nLabel } from 'fumadocs-ui/contexts/i18n'; +import ClerkTOCItems from '../../ui/toc-clerk'; +import type { AnchorProviderProps } from 'fumadocs-core/toc'; + +export function PageTOCTitle(props: ComponentProps<'h2'>) { + return ( +

+ + +

+ ); +} + +export function PageTOCItems({ + variant = 'normal', + ...props +}: ComponentProps<'div'> & { variant?: 'clerk' | 'normal' }) { + return ( + + {variant === 'clerk' ? : } + + ); +} + +export function PageTOCPopoverItems({ + variant = 'normal', + ...props +}: ComponentProps<'div'> & { variant?: 'clerk' | 'normal' }) { + return ( + + {variant === 'clerk' ? : } + + ); +} + +export function PageArticle(props: ComponentProps<'article'>) { + return ( +
+ {props.children} +
+ ); +} + +export interface RootProps extends ComponentProps<'div'> { + toc?: Omit | false; +} + +export function PageRoot({ toc = false, children, ...props }: RootProps) { + const content = ( +
+ {children} +
+ ); + + if (toc) return {content}; + return content; +} + +export { + PageBreadcrumb, + PageFooter, + PageLastUpdate, + PageTOC, + PageTOCPopover, + PageTOCPopoverTrigger, + PageTOCPopoverContent, + type FooterProps, + type BreadcrumbProps, +}; diff --git a/apps/docs/src/components/layout/page.tsx b/apps/docs/src/components/layout/page.tsx new file mode 100644 index 00000000..1055057e --- /dev/null +++ b/apps/docs/src/components/layout/page.tsx @@ -0,0 +1,288 @@ +import { type ComponentProps, forwardRef, type ReactNode } from "react"; +import { cn } from "../../lib/cn"; +import { buttonVariants } from "../ui/button"; +import { Edit } from "lucide-react"; +import { I18nLabel } from "fumadocs-ui/contexts/i18n"; +import { + type BreadcrumbProps, + type FooterProps, + PageArticle, + PageBreadcrumb, + PageFooter, + PageLastUpdate, + PageRoot, + PageTOC, + PageTOCItems, + PageTOCPopover, + PageTOCPopoverContent, + PageTOCPopoverItems, + PageTOCPopoverTrigger, + PageTOCTitle, +} from "./docs/page"; +import type { AnchorProviderProps } from "fumadocs-core/toc"; +import type { TOCItemType } from "fumadocs-core/server"; + +interface EditOnGitHubOptions + extends Omit, "href" | "children"> { + owner: string; + repo: string; + + /** + * SHA or ref (branch or tag) name. + * + * @defaultValue main + */ + sha?: string; + + /** + * File path in the repo + */ + path: string; +} + +interface BreadcrumbOptions extends BreadcrumbProps { + enabled: boolean; + component: ReactNode; + + /** + * Show the full path to the current page + * + * @defaultValue false + * @deprecated use `includePage` instead + */ + full?: boolean; +} + +interface FooterOptions extends FooterProps { + enabled: boolean; + component: ReactNode; +} + +export interface DocsPageProps { + toc?: TOCItemType[]; + tableOfContent?: Partial; + tableOfContentPopover?: Partial; + + /** + * Extend the page to fill all available space + * + * @defaultValue false + */ + full?: boolean; + + /** + * Replace or disable breadcrumb + */ + breadcrumb?: Partial; + + /** + * Footer navigation, you can disable it by passing `false` + */ + footer?: Partial; + + editOnGithub?: EditOnGitHubOptions; + lastUpdate?: Date | string | number; + + container?: ComponentProps<"div">; + article?: ComponentProps<"article">; + children?: ReactNode; +} + +type TableOfContentOptions = Pick & { + /** + * Custom content in TOC container, before the main TOC + */ + header?: ReactNode; + + /** + * Custom content in TOC container, after the main TOC + */ + footer?: ReactNode; + + enabled: boolean; + component: ReactNode; + + /** + * @defaultValue 'normal' + */ + style?: "normal" | "clerk"; +}; + +type TableOfContentPopoverOptions = Omit; + +export function DocsPage({ + editOnGithub, + breadcrumb: { + enabled: breadcrumbEnabled = true, + component: breadcrumb, + ...breadcrumbProps + } = {}, + footer = {}, + lastUpdate, + container, + full = false, + tableOfContentPopover: { + enabled: tocPopoverEnabled, + component: tocPopover, + ...tocPopoverOptions + } = {}, + tableOfContent: { + enabled: tocEnabled, + component: tocReplace, + ...tocOptions + } = {}, + toc = [], + article, + children, +}: DocsPageProps) { + // disable TOC on full mode, you can still enable it with `enabled` option. + tocEnabled ??= + !full && + (toc.length > 0 || + tocOptions.footer !== undefined || + tocOptions.header !== undefined); + + tocPopoverEnabled ??= + toc.length > 0 || + tocPopoverOptions.header !== undefined || + tocPopoverOptions.footer !== undefined; + + return ( + + {tocPopoverEnabled && + (tocPopover ?? ( + + + + {tocPopoverOptions.header} + + {tocPopoverOptions.footer} + + + ))} + + {breadcrumbEnabled && + (breadcrumb ?? )} + {children} +
+ {editOnGithub && ( + + )} + {lastUpdate && } +
+ {footer.enabled !== false && + (footer.component ?? )} +
+ {tocEnabled && + (tocReplace ?? ( + + {tocOptions.header} + + + {tocOptions.footer} + + ))} +
+ ); +} + +export function EditOnGitHub(props: ComponentProps<"a">) { + return ( + + {props.children ?? ( + <> + + + + )} + + ); +} + +/** + * Add typography styles + */ +export const DocsBody = forwardRef>( + (props, ref) => ( +
+ {props.children} +
+ ), +); + +DocsBody.displayName = "DocsBody"; + +export const DocsDescription = forwardRef< + HTMLParagraphElement, + ComponentProps<"p"> +>((props, ref) => { + // don't render if no description provided + if (props.children === undefined) return null; + + return ( +

+ {props.children} +

+ ); +}); + +DocsDescription.displayName = "DocsDescription"; + +export const DocsTitle = forwardRef>( + (props, ref) => { + return ( +

+ {props.children} +

+ ); + }, +); + +DocsTitle.displayName = "DocsTitle"; + +/** + * For separate MDX page + */ +export function withArticle(props: ComponentProps<"main">): ReactNode { + return ( +
+
{props.children}
+
+ ); +} diff --git a/apps/docs/src/components/layout/shared/client.tsx b/apps/docs/src/components/layout/shared/client.tsx new file mode 100644 index 00000000..d685015e --- /dev/null +++ b/apps/docs/src/components/layout/shared/client.tsx @@ -0,0 +1,30 @@ +'use client'; +import type { ComponentProps } from 'react'; +import { usePathname } from 'fumadocs-core/framework'; +import { isActive } from '../../../lib/is-active'; +import Link from 'fumadocs-core/link'; +import type { BaseLinkType } from './index'; + +export function BaseLinkItem({ + ref, + item, + ...props +}: Omit, 'href'> & { item: BaseLinkType }) { + const pathname = usePathname(); + const activeType = item.active ?? 'url'; + const active = + activeType !== 'none' && + isActive(item.url, pathname, activeType === 'nested-url'); + + return ( + + {props.children} + + ); +} diff --git a/apps/docs/src/components/layout/shared/index.tsx b/apps/docs/src/components/layout/shared/index.tsx new file mode 100644 index 00000000..eff21b45 --- /dev/null +++ b/apps/docs/src/components/layout/shared/index.tsx @@ -0,0 +1,182 @@ +import type { HTMLAttributes, ReactNode } from "react"; +import type { NavProviderProps } from "fumadocs-ui/contexts/layout"; +import type { I18nConfig } from "fumadocs-core/i18n"; + +export interface NavOptions extends NavProviderProps { + enabled: boolean; + component: ReactNode; + + title?: ReactNode; + + /** + * Redirect url of title + * @defaultValue '/' + */ + url?: string; + + children?: ReactNode; +} + +export interface BaseLayoutProps { + themeSwitch?: { + enabled?: boolean; + component?: ReactNode; + mode?: "light-dark" | "light-dark-system"; + }; + + searchToggle?: Partial<{ + enabled: boolean; + components: Partial<{ + sm: ReactNode; + lg: ReactNode; + }>; + }>; + + /** + * Remove theme switcher component + * + * @deprecated Use `themeSwitch.enabled` instead. + */ + disableThemeSwitch?: boolean; + + /** + * I18n options + * + * @defaultValue false + */ + i18n?: boolean | I18nConfig; + + /** + * GitHub url + */ + githubUrl?: string; + + links?: LinkItemType[]; + /** + * Replace or disable navbar + */ + nav?: Partial; + + children?: ReactNode; +} + +interface BaseItem { + /** + * Restrict where the item is displayed + * + * @defaultValue 'all' + */ + on?: "menu" | "nav" | "all"; +} + +export interface BaseLinkType extends BaseItem { + url: string; + /** + * When the item is marked as active + * + * @defaultValue 'url' + */ + active?: "url" | "nested-url" | "none"; + external?: boolean; +} + +export interface MainItemType extends BaseLinkType { + type?: "main"; + icon?: ReactNode; + text: ReactNode; + description?: ReactNode; +} + +export interface IconItemType extends BaseLinkType { + type: "icon"; + /** + * `aria-label` of icon button + */ + label?: string; + icon: ReactNode; + text: ReactNode; + /** + * @defaultValue true + */ + secondary?: boolean; +} + +export interface ButtonItemType extends BaseLinkType { + type: "button"; + icon?: ReactNode; + text: ReactNode; + /** + * @defaultValue false + */ + secondary?: boolean; +} + +export interface MenuItemType extends Partial { + type: "menu"; + icon?: ReactNode; + text: ReactNode; + + items: ( + | (MainItemType & { + /** + * Options when displayed on navigation menu + */ + menu?: HTMLAttributes & { + banner?: ReactNode; + }; + }) + | CustomItemType + )[]; + + /** + * @defaultValue false + */ + secondary?: boolean; +} + +export interface CustomItemType extends BaseItem { + type: "custom"; + /** + * @defaultValue false + */ + secondary?: boolean; + children: ReactNode; +} + +export type LinkItemType = + | MainItemType + | IconItemType + | ButtonItemType + | MenuItemType + | CustomItemType; + +/** + * Get Links Items with shortcuts + */ +export function getLinks( + links: LinkItemType[] = [], + githubUrl?: string, +): LinkItemType[] { + let result = links ?? []; + + if (githubUrl) + result = [ + ...result, + { + type: "icon", + url: githubUrl, + text: "GitHub", + label: "GitHub", + icon: ( + + + + ), + external: true, + }, + ]; + + return result; +} + +export { BaseLinkItem } from "./client"; diff --git a/apps/docs/src/components/redirect.tsx b/apps/docs/src/components/redirect.tsx new file mode 100644 index 00000000..dd511e2e --- /dev/null +++ b/apps/docs/src/components/redirect.tsx @@ -0,0 +1,14 @@ +"use client"; + +import { useEffect } from "react"; +import { useRouter } from "next/navigation"; +import { Skeleton } from "./ui/skeleton"; + +export default function Redirect({ href }: { href: string }) { + const router = useRouter(); + useEffect(() => { + router.replace(href); + }, [href, router]); + + return ; +} diff --git a/apps/docs/src/components/root-toggle.tsx b/apps/docs/src/components/root-toggle.tsx new file mode 100644 index 00000000..c0c0a30e --- /dev/null +++ b/apps/docs/src/components/root-toggle.tsx @@ -0,0 +1,103 @@ +"use client"; +import { Check, ChevronsUpDown } from "lucide-react"; +import { type ComponentProps, type ReactNode, useMemo, useState } from "react"; +import Link from "fumadocs-core/link"; +import { usePathname } from "fumadocs-core/framework"; +import { cn } from "../lib/cn"; +import { isTabActive } from "../lib/is-active"; +import { useSidebar } from "fumadocs-ui/contexts/sidebar"; +import { Popover, PopoverContent, PopoverTrigger } from "./ui/popover"; +import type { SidebarTab } from "fumadocs-ui/utils/get-sidebar-tabs"; + +export interface Option extends SidebarTab { + props?: ComponentProps<"a">; +} + +export function RootToggle({ + options, + placeholder, + ...props +}: { + placeholder?: ReactNode; + options: Option[]; +} & ComponentProps<"button">) { + const [open, setOpen] = useState(false); + const { closeOnRedirect } = useSidebar(); + const pathname = usePathname(); + + const selected = useMemo(() => { + return options.findLast((item) => isTabActive(item, pathname)); + }, [options, pathname]); + + const onClick = () => { + closeOnRedirect.current = false; + setOpen(false); + }; + + const item = selected ? ( + <> +
{selected.icon}
+
+

{selected.title}

+

+ {selected.description} +

+
+ + ) : ( + placeholder + ); + + return ( + + {item && ( + + {item} + + + )} + + {options.map((item) => { + const isActive = selected && item.url === selected.url; + if (!isActive && item.unlisted) return; + + return ( + +
+ {item.icon} +
+
+

{item.title}

+

+ {item.description} +

+
+ + + + ); + })} +
+
+ ); +} diff --git a/apps/docs/src/components/search-toggle.tsx b/apps/docs/src/components/search-toggle.tsx new file mode 100644 index 00000000..09529401 --- /dev/null +++ b/apps/docs/src/components/search-toggle.tsx @@ -0,0 +1,79 @@ +'use client'; +import type { ComponentProps } from 'react'; +import { Search } from 'lucide-react'; +import { useSearchContext } from 'fumadocs-ui/contexts/search'; +import { useI18n } from 'fumadocs-ui/contexts/i18n'; +import { cn } from '../lib/cn'; +import { type ButtonProps, buttonVariants } from './ui/button'; + +interface SearchToggleProps + extends Omit, 'color'>, + ButtonProps { + hideIfDisabled?: boolean; +} + +export function SearchToggle({ + hideIfDisabled, + size = 'icon-sm', + color = 'ghost', + ...props +}: SearchToggleProps) { + const { setOpenSearch, enabled } = useSearchContext(); + if (hideIfDisabled && !enabled) return null; + + return ( + + ); +} + +export function LargeSearchToggle({ + hideIfDisabled, + ...props +}: ComponentProps<'button'> & { + hideIfDisabled?: boolean; +}) { + const { enabled, hotKey, setOpenSearch } = useSearchContext(); + const { text } = useI18n(); + if (hideIfDisabled && !enabled) return null; + + return ( + + ); +} diff --git a/apps/docs/src/components/sidebar.tsx b/apps/docs/src/components/sidebar.tsx new file mode 100644 index 00000000..995debfb --- /dev/null +++ b/apps/docs/src/components/sidebar.tsx @@ -0,0 +1,559 @@ +'use client'; +import { ChevronDown, ExternalLink } from 'lucide-react'; +import { usePathname } from 'fumadocs-core/framework'; +import { + type ComponentProps, + createContext, + type FC, + Fragment, + type ReactNode, + useContext, + useMemo, + useRef, + useState, +} from 'react'; +import Link, { type LinkProps } from 'fumadocs-core/link'; +import { useOnChange } from 'fumadocs-core/utils/use-on-change'; +import { cn } from '../lib/cn'; +import { ScrollArea, ScrollViewport } from './ui/scroll-area'; +import { isActive } from '../lib/is-active'; +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from './ui/collapsible'; +import { type ScrollAreaProps } from '@radix-ui/react-scroll-area'; +import { useSidebar } from 'fumadocs-ui/contexts/sidebar'; +import { cva } from 'class-variance-authority'; +import type { + CollapsibleContentProps, + CollapsibleTriggerProps, +} from '@radix-ui/react-collapsible'; +import type { PageTree } from 'fumadocs-core/server'; +import { useTreeContext, useTreePath } from 'fumadocs-ui/contexts/tree'; +import { useMediaQuery } from 'fumadocs-core/utils/use-media-query'; +import { Presence } from '@radix-ui/react-presence'; + +export interface SidebarProps { + /** + * Open folders by default if their level is lower or equal to a specific level + * (Starting from 1) + * + * @defaultValue 0 + */ + defaultOpenLevel?: number; + + /** + * Prefetch links + * + * @defaultValue true + */ + prefetch?: boolean; + + /** + * Children to render + */ + Content: ReactNode; + + /** + * Alternative children for mobile + */ + Mobile?: ReactNode; +} + +interface InternalContext { + defaultOpenLevel: number; + prefetch: boolean; + level: number; +} + +const itemVariants = cva( + 'relative flex flex-row items-center gap-2 rounded-lg p-2 ps-(--sidebar-item-offset) text-start text-fd-muted-foreground [overflow-wrap:anywhere] [&_svg]:size-4 [&_svg]:shrink-0', + { + variants: { + active: { + true: 'bg-fd-primary/10 text-fd-primary', + false: + 'transition-colors hover:bg-fd-accent/50 hover:text-fd-accent-foreground/80 hover:transition-none', + }, + }, + }, +); + +const Context = createContext(null); +const FolderContext = createContext<{ + open: boolean; + setOpen: React.Dispatch>; +} | null>(null); + +export function Sidebar({ + defaultOpenLevel = 0, + prefetch = true, + Mobile, + Content, +}: SidebarProps) { + const isMobile = useMediaQuery('(width < 768px)') ?? false; + const context = useMemo(() => { + return { + defaultOpenLevel, + prefetch, + level: 1, + }; + }, [defaultOpenLevel, prefetch]); + + return ( + + {isMobile && Mobile != null ? Mobile : Content} + + ); +} + +export function SidebarContent(props: ComponentProps<'aside'>) { + const { collapsed } = useSidebar(); + const [hover, setHover] = useState(false); + const timerRef = useRef(0); + const closeTimeRef = useRef(0); + + useOnChange(collapsed, () => { + setHover(false); + closeTimeRef.current = Date.now() + 150; + }); + + return ( + + ); +} + +export function SidebarContentMobile({ + className, + children, + ...props +}: ComponentProps<'aside'>) { + const { open, setOpen } = useSidebar(); + const state = open ? 'open' : 'closed'; + + return ( + <> + +
setOpen(false)} + /> + + + {({ present }) => ( + + )} + + + ); +} + +export function SidebarHeader(props: ComponentProps<'div'>) { + return ( +
+ {props.children} +
+ ); +} + +export function SidebarFooter(props: ComponentProps<'div'>) { + return ( +
+ {props.children} +
+ ); +} + +export function SidebarViewport(props: ScrollAreaProps) { + return ( + + + {props.children} + + + ); +} + +export function SidebarSeparator(props: ComponentProps<'p'>) { + return ( +

+ {props.children} +

+ ); +} + +export function SidebarItem({ + icon, + ...props +}: LinkProps & { + icon?: ReactNode; +}) { + const pathname = usePathname(); + const active = + props.href !== undefined && isActive(props.href, pathname, false); + const { prefetch } = useInternalContext(); + + return ( + + {icon ?? (props.external ? : null)} + {props.children} + + ); +} + +export function SidebarFolder({ + defaultOpen = false, + ...props +}: ComponentProps<'div'> & { + defaultOpen?: boolean; +}) { + const [open, setOpen] = useState(defaultOpen); + + useOnChange(defaultOpen, (v) => { + if (v) setOpen(v); + }); + + return ( + + ({ open, setOpen }), [open])} + > + {props.children} + + + ); +} + +export function SidebarFolderTrigger({ + className, + ...props +}: CollapsibleTriggerProps) { + const { open } = useFolderContext(); + + return ( + + {props.children} + + + ); +} + +export function SidebarFolderLink(props: LinkProps) { + const { open, setOpen } = useFolderContext(); + const { prefetch } = useInternalContext(); + + const pathname = usePathname(); + const active = + props.href !== undefined && isActive(props.href, pathname, false); + + return ( + { + if ( + e.target instanceof Element && + e.target.matches('[data-icon], [data-icon] *') + ) { + setOpen(!open); + e.preventDefault(); + } else { + setOpen(active ? !open : true); + } + }} + prefetch={prefetch} + > + {props.children} + + + ); +} + +export function SidebarFolderContent(props: CollapsibleContentProps) { + const { level, ...ctx } = useInternalContext(); + + return ( + + ({ + ...ctx, + level: level + 1, + }), + [ctx, level], + )} + > + {props.children} + + + ); +} + +export function SidebarTrigger({ + children, + ...props +}: ComponentProps<'button'>) { + const { setOpen } = useSidebar(); + + return ( + + ); +} + +export function SidebarCollapseTrigger(props: ComponentProps<'button'>) { + const { collapsed, setCollapsed } = useSidebar(); + + return ( + + ); +} + +function useFolderContext() { + const ctx = useContext(FolderContext); + if (!ctx) throw new Error('Missing sidebar folder'); + + return ctx; +} + +function useInternalContext() { + const ctx = useContext(Context); + if (!ctx) throw new Error(' component required.'); + + return ctx; +} + +export interface SidebarComponents { + Item: FC<{ item: PageTree.Item }>; + Folder: FC<{ item: PageTree.Folder; level: number; children: ReactNode }>; + Separator: FC<{ item: PageTree.Separator }>; +} + +/** + * Render sidebar items from page tree + */ +export function SidebarPageTree(props: { + components?: Partial; +}) { + const { root } = useTreeContext(); + + return useMemo(() => { + const { Separator, Item, Folder } = props.components ?? {}; + + function renderSidebarList( + items: PageTree.Node[], + level: number, + ): ReactNode[] { + return items.map((item, i) => { + if (item.type === 'separator') { + if (Separator) return ; + return ( + + {item.icon} + {item.name} + + ); + } + + if (item.type === 'folder') { + const children = renderSidebarList(item.children, level + 1); + + if (Folder) + return ( + + {children} + + ); + return ( + + {children} + + ); + } + + if (Item) return ; + return ( + + {item.name} + + ); + }); + } + + return ( + {renderSidebarList(root.children, 1)} + ); + }, [props.components, root]); +} + +function PageTreeFolder({ + item, + ...props +}: { + item: PageTree.Folder; + children: ReactNode; +}) { + const { defaultOpenLevel, level } = useInternalContext(); + const path = useTreePath(); + + return ( + = level) || path.includes(item) + } + > + {item.index ? ( + + {item.icon} + {item.name} + + ) : ( + + {item.icon} + {item.name} + + )} + {props.children} + + ); +} diff --git a/apps/docs/src/components/theme-toggle.tsx b/apps/docs/src/components/theme-toggle.tsx new file mode 100644 index 00000000..4e6656cb --- /dev/null +++ b/apps/docs/src/components/theme-toggle.tsx @@ -0,0 +1,87 @@ +'use client'; +import { cva } from 'class-variance-authority'; +import { Moon, Sun, Airplay } from 'lucide-react'; +import { useTheme } from 'next-themes'; +import { type HTMLAttributes, useLayoutEffect, useState } from 'react'; +import { cn } from '../lib/cn'; + +const itemVariants = cva( + 'size-6.5 rounded-full p-1.5 text-fd-muted-foreground', + { + variants: { + active: { + true: 'bg-fd-accent text-fd-accent-foreground', + false: 'text-fd-muted-foreground', + }, + }, + }, +); + +const full = [ + ['light', Sun] as const, + ['dark', Moon] as const, + ['system', Airplay] as const, +]; + +export function ThemeToggle({ + className, + mode = 'light-dark', + ...props +}: HTMLAttributes & { + mode?: 'light-dark' | 'light-dark-system'; +}) { + const { setTheme, theme, resolvedTheme } = useTheme(); + const [mounted, setMounted] = useState(false); + + useLayoutEffect(() => { + setMounted(true); + }, []); + + const container = cn( + 'inline-flex items-center rounded-full border p-1', + className, + ); + + if (mode === 'light-dark') { + const value = mounted ? resolvedTheme : null; + + return ( + + ); + } + + const value = mounted ? theme : null; + + return ( +
+ {full.map(([key, Icon]) => ( + + ))} +
+ ); +} diff --git a/apps/docs/src/components/ui/button.tsx b/apps/docs/src/components/ui/button.tsx new file mode 100644 index 00000000..5fca2adb --- /dev/null +++ b/apps/docs/src/components/ui/button.tsx @@ -0,0 +1,28 @@ +import { cva, type VariantProps } from 'class-variance-authority'; + +const variants = { + primary: 'bg-fd-primary text-fd-primary-foreground hover:bg-fd-primary/80', + outline: 'border hover:bg-fd-accent hover:text-fd-accent-foreground', + ghost: 'hover:bg-fd-accent hover:text-fd-accent-foreground', + secondary: + 'border bg-fd-secondary text-fd-secondary-foreground hover:bg-fd-accent hover:text-fd-accent-foreground', +} as const; + +export const buttonVariants = cva( + 'inline-flex items-center justify-center rounded-md p-2 text-sm font-medium transition-colors duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none', + { + variants: { + variant: variants, + // fumadocs use `color` instead of `variant` + color: variants, + size: { + sm: 'gap-1 px-2 py-1.5 text-xs', + icon: 'p-1.5 [&_svg]:size-5', + 'icon-sm': 'p-1.5 [&_svg]:size-4.5', + 'icon-xs': 'p-1 [&_svg]:size-4', + }, + }, + }, +); + +export type ButtonProps = VariantProps; diff --git a/apps/docs/src/components/ui/collapsible.tsx b/apps/docs/src/components/ui/collapsible.tsx new file mode 100644 index 00000000..dbcf3f00 --- /dev/null +++ b/apps/docs/src/components/ui/collapsible.tsx @@ -0,0 +1,39 @@ +'use client'; +import * as CollapsiblePrimitive from '@radix-ui/react-collapsible'; +import { forwardRef, useEffect, useState } from 'react'; +import { cn } from '../../lib/cn'; + +const Collapsible = CollapsiblePrimitive.Root; + +const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger; + +const CollapsibleContent = forwardRef< + HTMLDivElement, + React.ComponentPropsWithoutRef +>(({ children, ...props }, ref) => { + const [mounted, setMounted] = useState(false); + + useEffect(() => { + setMounted(true); + }, []); + + return ( + + {children} + + ); +}); + +CollapsibleContent.displayName = + CollapsiblePrimitive.CollapsibleContent.displayName; + +export { Collapsible, CollapsibleTrigger, CollapsibleContent }; diff --git a/apps/docs/src/components/ui/popover.tsx b/apps/docs/src/components/ui/popover.tsx new file mode 100644 index 00000000..e033f5d7 --- /dev/null +++ b/apps/docs/src/components/ui/popover.tsx @@ -0,0 +1,32 @@ +'use client'; +import * as PopoverPrimitive from '@radix-ui/react-popover'; +import * as React from 'react'; +import { cn } from '../../lib/cn'; + +const Popover = PopoverPrimitive.Root; + +const PopoverTrigger = PopoverPrimitive.Trigger; + +const PopoverContent = React.forwardRef< + React.ComponentRef, + React.ComponentPropsWithoutRef +>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => ( + + + +)); +PopoverContent.displayName = PopoverPrimitive.Content.displayName; + +const PopoverClose = PopoverPrimitive.PopoverClose; + +export { Popover, PopoverTrigger, PopoverContent, PopoverClose }; diff --git a/apps/docs/src/components/ui/scroll-area.tsx b/apps/docs/src/components/ui/scroll-area.tsx new file mode 100644 index 00000000..4902d206 --- /dev/null +++ b/apps/docs/src/components/ui/scroll-area.tsx @@ -0,0 +1,58 @@ +import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"; +import * as React from "react"; +import { cn } from "../../lib/cn"; + +const ScrollArea = React.forwardRef< + React.ComponentRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + {children} + + + +)); + +ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName; + +const ScrollViewport = React.forwardRef< + React.ComponentRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + {children} + +)); + +ScrollViewport.displayName = ScrollAreaPrimitive.Viewport.displayName; + +const ScrollBar = React.forwardRef< + React.ComponentRef, + React.ComponentPropsWithoutRef +>(({ className, orientation = "vertical", ...props }, ref) => ( + + + +)); +ScrollBar.displayName = ScrollAreaPrimitive.Scrollbar.displayName; + +export { ScrollArea, ScrollBar, ScrollViewport }; diff --git a/apps/docs/src/components/ui/skeleton.tsx b/apps/docs/src/components/ui/skeleton.tsx new file mode 100644 index 00000000..96d86fa6 --- /dev/null +++ b/apps/docs/src/components/ui/skeleton.tsx @@ -0,0 +1,8 @@ +import * as React from 'react'; +import { cn } from '@/lib/utils'; + +function Skeleton({ className, ...props }: React.ComponentProps<'div'>) { + return
; +} + +export { Skeleton }; diff --git a/apps/docs/src/components/ui/toc-clerk.tsx b/apps/docs/src/components/ui/toc-clerk.tsx new file mode 100644 index 00000000..f8466ab4 --- /dev/null +++ b/apps/docs/src/components/ui/toc-clerk.tsx @@ -0,0 +1,179 @@ +'use client'; +import type { TOCItemType } from 'fumadocs-core/server'; +import * as Primitive from 'fumadocs-core/toc'; +import { type ComponentProps, useEffect, useRef, useState } from 'react'; +import { cn } from '../../lib/cn'; +import { TocThumb } from './toc-thumb'; +import { useTOCItems } from './toc'; +import { mergeRefs } from '../../lib/merge-refs'; +import { useI18n } from 'fumadocs-ui/contexts/i18n'; + +export default function ClerkTOCItems({ + ref, + className, + ...props +}: ComponentProps<'div'>) { + const containerRef = useRef(null); + const items = useTOCItems(); + const { text } = useI18n(); + + const [svg, setSvg] = useState<{ + path: string; + width: number; + height: number; + }>(); + + useEffect(() => { + if (!containerRef.current) return; + const container = containerRef.current; + + function onResize(): void { + if (container.clientHeight === 0) return; + let w = 0, + h = 0; + const d: string[] = []; + for (let i = 0; i < items.length; i++) { + const element: HTMLElement | null = container.querySelector( + `a[href="#${items[i].url.slice(1)}"]`, + ); + if (!element) continue; + + const styles = getComputedStyle(element); + const offset = getLineOffset(items[i].depth) + 1, + top = element.offsetTop + parseFloat(styles.paddingTop), + bottom = + element.offsetTop + + element.clientHeight - + parseFloat(styles.paddingBottom); + + w = Math.max(offset, w); + h = Math.max(h, bottom); + + d.push(`${i === 0 ? 'M' : 'L'}${offset} ${top}`); + d.push(`L${offset} ${bottom}`); + } + + setSvg({ + path: d.join(' '), + width: w + 1, + height: h, + }); + } + + const observer = new ResizeObserver(onResize); + onResize(); + + observer.observe(container); + return () => { + observer.disconnect(); + }; + }, [items]); + + if (items.length === 0) + return ( +
+ {text.tocNoHeadings} +
+ ); + + return ( + <> + {svg ? ( +
`, + ) + }")`, + }} + > + +
+ ) : null} +
+ {items.map((item, i) => ( + + ))} +
+ + ); +} + +function getItemOffset(depth: number): number { + if (depth <= 2) return 14; + if (depth === 3) return 26; + return 36; +} + +function getLineOffset(depth: number): number { + return depth >= 3 ? 10 : 0; +} + +function TOCItem({ + item, + upper = item.depth, + lower = item.depth, +}: { + item: TOCItemType; + upper?: number; + lower?: number; +}) { + const offset = getLineOffset(item.depth), + upperOffset = getLineOffset(upper), + lowerOffset = getLineOffset(lower); + + return ( + + {offset !== upperOffset ? ( + + + + ) : null} +
+ {item.title} + + ); +} diff --git a/apps/docs/src/components/ui/toc-thumb.tsx b/apps/docs/src/components/ui/toc-thumb.tsx new file mode 100644 index 00000000..bdced31a --- /dev/null +++ b/apps/docs/src/components/ui/toc-thumb.tsx @@ -0,0 +1,73 @@ +import { type HTMLAttributes, type RefObject, useEffect, useRef } from 'react'; +import * as Primitive from 'fumadocs-core/toc'; +import { useOnChange } from 'fumadocs-core/utils/use-on-change'; +import { useEffectEvent } from 'fumadocs-core/utils/use-effect-event'; + +export type TOCThumb = [top: number, height: number]; + +function calc(container: HTMLElement, active: string[]): TOCThumb { + if (active.length === 0 || container.clientHeight === 0) { + return [0, 0]; + } + + let upper = Number.MAX_VALUE, + lower = 0; + + for (const item of active) { + const element = container.querySelector(`a[href="#${item}"]`); + if (!element) continue; + + const styles = getComputedStyle(element); + upper = Math.min(upper, element.offsetTop + parseFloat(styles.paddingTop)); + lower = Math.max( + lower, + element.offsetTop + + element.clientHeight - + parseFloat(styles.paddingBottom), + ); + } + + return [upper, lower - upper]; +} + +function update(element: HTMLElement, info: TOCThumb): void { + element.style.setProperty('--fd-top', `${info[0]}px`); + element.style.setProperty('--fd-height', `${info[1]}px`); +} + +export function TocThumb({ + containerRef, + ...props +}: HTMLAttributes & { + containerRef: RefObject; +}) { + const active = Primitive.useActiveAnchors(); + const thumbRef = useRef(null); + + const onResize = useEffectEvent(() => { + if (!containerRef.current || !thumbRef.current) return; + + update(thumbRef.current, calc(containerRef.current, active)); + }); + + useEffect(() => { + if (!containerRef.current) return; + const container = containerRef.current; + + onResize(); + const observer = new ResizeObserver(onResize); + observer.observe(container); + + return () => { + observer.disconnect(); + }; + }, [containerRef, onResize]); + + useOnChange(active, () => { + if (!containerRef.current || !thumbRef.current) return; + + update(thumbRef.current, calc(containerRef.current, active)); + }); + + return
; +} diff --git a/apps/docs/src/components/ui/toc.tsx b/apps/docs/src/components/ui/toc.tsx new file mode 100644 index 00000000..81cebc2d --- /dev/null +++ b/apps/docs/src/components/ui/toc.tsx @@ -0,0 +1,101 @@ +'use client'; +import type { TOCItemType } from 'fumadocs-core/server'; +import * as Primitive from 'fumadocs-core/toc'; +import { type ComponentProps, createContext, useContext, useRef } from 'react'; +import { cn } from '../../lib/cn'; +import { useI18n } from 'fumadocs-ui/contexts/i18n'; +import { TocThumb } from './toc-thumb'; +import { mergeRefs } from '../../lib/merge-refs'; + +const TOCContext = createContext([]); + +export function useTOCItems(): TOCItemType[] { + return useContext(TOCContext); +} + +export function TOCProvider({ + toc, + children, + ...props +}: ComponentProps) { + return ( + + + {children} + + + ); +} + +export function TOCScrollArea({ + ref, + className, + ...props +}: ComponentProps<'div'>) { + const viewRef = useRef(null); + + return ( +
+ + {props.children} + +
+ ); +} + +export function TOCItems({ ref, className, ...props }: ComponentProps<'div'>) { + const containerRef = useRef(null); + const items = useTOCItems(); + const { text } = useI18n(); + + if (items.length === 0) + return ( +
+ {text.tocNoHeadings} +
+ ); + + return ( + <> + +
+ {items.map((item) => ( + + ))} +
+ + ); +} + +function TOCItem({ item }: { item: TOCItemType }) { + return ( + = 4 && 'ps-8', + )} + > + {item.title} + + ); +} diff --git a/apps/docs/src/lib/constants.ts b/apps/docs/src/lib/constants.ts new file mode 100644 index 00000000..f5a10200 --- /dev/null +++ b/apps/docs/src/lib/constants.ts @@ -0,0 +1,2 @@ +// which version of the CLI to use in the docs +export const cliVersion: "latest" | "beta" = "beta"; diff --git a/apps/docs/src/lib/is-active.ts b/apps/docs/src/lib/is-active.ts new file mode 100644 index 00000000..d41bf698 --- /dev/null +++ b/apps/docs/src/lib/is-active.ts @@ -0,0 +1,23 @@ +import type { SidebarTab } from 'fumadocs-ui/utils/get-sidebar-tabs'; + +function normalize(url: string) { + if (url.length > 1 && url.endsWith('/')) return url.slice(0, -1); + return url; +} + +export function isActive( + url: string, + pathname: string, + nested = true, +): boolean { + url = normalize(url); + pathname = normalize(pathname); + + return url === pathname || (nested && pathname.startsWith(`${url}/`)); +} + +export function isTabActive(tab: SidebarTab, pathname: string) { + if (tab.urls) return tab.urls.has(normalize(pathname)); + + return isActive(tab.url, pathname, true); +} diff --git a/apps/docs/src/lib/merge-refs.ts b/apps/docs/src/lib/merge-refs.ts new file mode 100644 index 00000000..7d05f74a --- /dev/null +++ b/apps/docs/src/lib/merge-refs.ts @@ -0,0 +1,15 @@ +import type * as React from 'react'; + +export function mergeRefs( + ...refs: (React.Ref | undefined)[] +): React.RefCallback { + return (value) => { + refs.forEach((ref) => { + if (typeof ref === 'function') { + ref(value); + } else if (ref) { + ref.current = value; + } + }); + }; +} diff --git a/apps/docs/src/lib/templates.ts b/apps/docs/src/lib/templates.ts new file mode 100644 index 00000000..b1381352 --- /dev/null +++ b/apps/docs/src/lib/templates.ts @@ -0,0 +1,103 @@ +import { getRegistryIndex, type TemplateMetadata } from "@proofkit/registry"; +import path from "path"; + +type Category = TemplateMetadata["category"]; + +export interface TemplateWithPath { + name: string; + title: string; + description?: string; + category: Category; + path: string; +} + +/** + * Get the path to templates based on environment + */ +function getTemplatesPath(): string { + if (process.env.NODE_ENV === "production") { + // In production, templates are bundled in the public directory + return path.join(process.cwd(), "public/registry-templates"); + } else { + // In development, read directly from registry package + return path.resolve(process.cwd(), "../../packages/registry/templates"); + } +} + +/** + * Load all templates from the registry at build time + */ +export async function getAllTemplates(): Promise { + try { + const templatesPath = getTemplatesPath(); + const index = await getRegistryIndex(templatesPath); + + return index.map((template) => ({ + ...template, + path: `/templates/${template.name}`, + })); + } catch (error) { + console.error("Failed to load templates:", error); + return []; + } +} + +/** + * Get templates grouped by category + */ +export async function getTemplatesByCategory(): Promise< + Record +> { + const templates = await getAllTemplates(); + + const grouped = templates.reduce( + (acc, template) => { + const category = template.category; + if (!acc[category]) { + acc[category] = []; + } + acc[category].push(template); + return acc; + }, + {} as Record, + ); + + // Sort templates within each category by title + (Object.keys(grouped) as Category[]).forEach((category) => { + grouped[category].sort((a, b) => a.title.localeCompare(b.title)); + }); + + return grouped; +} + +/** + * Get a single template by name + */ +export async function getTemplateByName( + name: string, +): Promise { + const templates = await getAllTemplates(); + return templates.find((template) => template.name === name) || null; +} + +/** + * Search templates by title or description + */ +export function searchTemplates( + templates: TemplateWithPath[], + query: string, +): TemplateWithPath[] { + if (!query.trim()) { + return templates; + } + + const lowercaseQuery = query.toLowerCase(); + + return templates.filter( + (template) => + template.title.toLowerCase().includes(lowercaseQuery) || + template.description?.toLowerCase().includes(lowercaseQuery) || + template.name.toLowerCase().includes(lowercaseQuery) || + template.category.toLowerCase().includes(lowercaseQuery), + ); +} diff --git a/packages/cli/package.json b/packages/cli/package.json index 6b8f0003..8007aaf3 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@proofkit/cli", - "version": "1.2.0-beta.2", + "version": "2.0.0-beta.3", "description": "Create web application with the ProofKit stack", "license": "MIT", "repository": { diff --git a/packages/cli/template/nextjs-shadcn/package.json b/packages/cli/template/nextjs-shadcn/package.json index 7ad785f8..32245694 100644 --- a/packages/cli/template/nextjs-shadcn/package.json +++ b/packages/cli/template/nextjs-shadcn/package.json @@ -15,14 +15,14 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.541.0", - "next": "15.5.0", + "next": "15.5.3", "next-themes": "^0.4.6", - "react": "19.1.0", - "react-dom": "19.1.0", + "react": "19.1.1", + "react-dom": "19.1.1", "tailwind-merge": "^3.3.1" }, "devDependencies": { - "@biomejs/biome": "2.2.0", + "@biomejs/biome": "2.2.4", "@tailwindcss/postcss": "^4", "@types/node": "^22", "@types/react": "^19", @@ -30,7 +30,6 @@ "tailwindcss": "^4", "tw-animate-css": "^1.3.7", "typescript": "^5", - "ultracite": "5.2.4" - }, - "packageManager": "pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748" + "ultracite": "5.4.5" + } } diff --git a/packages/fmdapi/tests/client-methods.test.ts b/packages/fmdapi/tests/client-methods.test.ts index 257ef907..b0502136 100644 --- a/packages/fmdapi/tests/client-methods.test.ts +++ b/packages/fmdapi/tests/client-methods.test.ts @@ -19,8 +19,8 @@ describe("sort methods", () => { sort: { fieldName: "recordId", sortOrder: "descend" }, }); expect(resp.data.length).toBe(3); - const firstRecord = parseInt(resp.data[0].fieldData.recordId as string); - const secondRecord = parseInt(resp.data[1].fieldData.recordId as string); + const firstRecord = parseInt(resp.data[0]?.fieldData.recordId as string); + const secondRecord = parseInt(resp.data[1]?.fieldData.recordId as string); expect(firstRecord).toBeGreaterThan(secondRecord); }); test("should sort ascending by default", async () => { @@ -28,8 +28,8 @@ describe("sort methods", () => { sort: { fieldName: "recordId" }, }); - const firstRecord = parseInt(resp.data[0].fieldData.recordId as string); - const secondRecord = parseInt(resp.data[1].fieldData.recordId as string); + const firstRecord = parseInt(resp.data[0]?.fieldData.recordId as string); + const secondRecord = parseInt(resp.data[1]?.fieldData.recordId as string); expect(secondRecord).toBeGreaterThan(firstRecord); }); }); @@ -48,6 +48,7 @@ describe("find methods", () => { const resp = await client.find({ query: { anything: "anything" }, }); + expect(Array.isArray(resp.data)).toBe(true); }); test("successful findFirst with multiple return", async () => { @@ -75,7 +76,7 @@ describe("portal methods", () => { const result = await layoutClient.list({ limit: 1, }); - expect(result.data[0].portalData.test.length).toBe(50); // default portal limit is 50 + expect(result.data[0]?.portalData?.test?.length).toBe(50); // default portal limit is 50 const { data } = await layoutClient.list({ limit: 1, @@ -83,10 +84,10 @@ describe("portal methods", () => { }); expect(data.length).toBe(1); - const portalData = data[0].portalData; - const testPortal = portalData.test; - expect(testPortal.length).toBe(1); - expect(testPortal[0]["related::related_field"]).toContain("2"); // we should get the 2nd record + const portalData = data[0]?.portalData; + const testPortal = portalData?.test; + expect(testPortal?.length).toBe(1); + expect(testPortal?.[0]?.["related::related_field"]).toContain("2"); // we should get the 2nd record }); it("should update portal data", async () => { await layoutClient.update({ @@ -106,13 +107,13 @@ describe("portal methods", () => { }); expect( - "long_and_strange.portalName#forTesting" in data[0].portalData, + "long_and_strange.portalName#forTesting" in (data?.[0]?.portalData ?? {}), ).toBeTruthy(); const portalData = - data[0].portalData["long_and_strange.portalName#forTesting"]; + data[0]?.portalData["long_and_strange.portalName#forTesting"]; - expect(portalData.length).toBeGreaterThan(50); + expect(portalData?.length).toBeGreaterThan(50); }); }); diff --git a/packages/fmdapi/tests/tsconfig.json b/packages/fmdapi/tests/tsconfig.json index f4d49859..2aea2cf0 100644 --- a/packages/fmdapi/tests/tsconfig.json +++ b/packages/fmdapi/tests/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "noEmit": true, "types": ["vitest", "node"], - "isolatedModules": true + "isolatedModules": true, + "rootDir": "../" }, "include": ["./**/*.ts"], "exclude": ["../dist", "../schema"] diff --git a/packages/typegen/src/buildSchema.ts b/packages/typegen/src/buildSchema.ts index 3ce4986e..34e9bf85 100644 --- a/packages/typegen/src/buildSchema.ts +++ b/packages/typegen/src/buildSchema.ts @@ -35,6 +35,7 @@ export function buildSchema( schemaFile.addImportDeclaration({ moduleSpecifier: "@proofkit/fmdapi", namedImports: ["InferZodPortals"], + isTypeOnly: true, }); } } @@ -349,6 +350,7 @@ export function buildOverrideFile( overrideFile.addImportDeclaration({ moduleSpecifier: "@proofkit/fmdapi", namedImports: ["InferZodPortals"], + isTypeOnly: true, }); } diff --git a/packages/typegen/tests/__snapshots__/strict-numbers.snap.ts b/packages/typegen/tests/__snapshots__/strict-numbers.snap.ts index f5798ab2..050d9f46 100644 --- a/packages/typegen/tests/__snapshots__/strict-numbers.snap.ts +++ b/packages/typegen/tests/__snapshots__/strict-numbers.snap.ts @@ -4,7 +4,7 @@ * DO NOT EDIT THIS FILE DIRECTLY. Changes may be overritten */ import { z } from "zod/v4"; -import { InferZodPortals } from "@proofkit/fmdapi"; +import type { InferZodPortals } from "@proofkit/fmdapi"; // @generated // prettier-ignore diff --git a/packages/typegen/tests/__snapshots__/zod-layout-client.snap.ts b/packages/typegen/tests/__snapshots__/zod-layout-client.snap.ts index 2cd6f680..e2fef985 100644 --- a/packages/typegen/tests/__snapshots__/zod-layout-client.snap.ts +++ b/packages/typegen/tests/__snapshots__/zod-layout-client.snap.ts @@ -4,7 +4,7 @@ * DO NOT EDIT THIS FILE DIRECTLY. Changes may be overritten */ import { z } from "zod"; -import { InferZodPortals } from "@proofkit/fmdapi"; +import type { InferZodPortals } from "@proofkit/fmdapi"; // @generated // prettier-ignore diff --git a/packages/typegen/tests/__snapshots__/zod-layout-overrides.snap.ts b/packages/typegen/tests/__snapshots__/zod-layout-overrides.snap.ts index 4052537e..eeefb91d 100644 --- a/packages/typegen/tests/__snapshots__/zod-layout-overrides.snap.ts +++ b/packages/typegen/tests/__snapshots__/zod-layout-overrides.snap.ts @@ -8,7 +8,7 @@ import { ZVLYesNo as ZVLYesNo_generated, ZtestLayout as ZtestLayout_generated, } from "./generated/testLayout"; -import { InferZodPortals } from "@proofkit/fmdapi"; +import type { InferZodPortals } from "@proofkit/fmdapi"; export const Ztest = Ztest_generated; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d85f281e..dd59102f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -120,6 +120,18 @@ importers: '@proofkit/webviewer': specifier: workspace:* version: link:../../packages/webviewer + '@radix-ui/react-collapsible': + specifier: ^1.1.12 + version: 1.1.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-popover': + specifier: ^1.1.15 + version: 1.1.15(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': + specifier: ^1.1.5 + version: 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-scroll-area': + specifier: ^1.2.10 + version: 1.2.10(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-separator': specifier: ^1.1.7 version: 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -136,23 +148,23 @@ importers: specifier: ^2.1.1 version: 2.1.1 fumadocs-core: - specifier: 15.3.3 - version: 15.3.3(@types/react@19.1.10)(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: 15.7.13 + version: 15.7.13(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) fumadocs-docgen: specifier: ^2.1.0 version: 2.1.0 fumadocs-mdx: specifier: 11.6.4 - version: 11.6.4(acorn@8.14.1)(fumadocs-core@15.3.3(@types/react@19.1.10)(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)) + version: 11.6.4(acorn@8.14.1)(fumadocs-core@15.7.13(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)) fumadocs-twoslash: - specifier: ^3.1.4 - version: 3.1.4(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(fumadocs-ui@15.3.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + specifier: ^3.1.7 + version: 3.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(fumadocs-ui@15.7.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) fumadocs-typescript: - specifier: ^4.0.6 - version: 4.0.6(@types/react@19.1.10)(typescript@5.9.2) + specifier: ^4.0.8 + version: 4.0.8(@types/react@19.1.10)(fumadocs-core@15.7.13(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(fumadocs-ui@15.7.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11))(typescript@5.9.2) fumadocs-ui: - specifier: 15.3.3 - version: 15.3.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11) + specifier: 15.7.13 + version: 15.7.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11) hono: specifier: ^4.9.0 version: 4.9.0 @@ -165,6 +177,9 @@ importers: next: specifier: ^15.4.6 version: 15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + next-themes: + specifier: ^0.4.6 + version: 0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: specifier: ^19.1.1 version: 19.1.1 @@ -175,11 +190,14 @@ importers: specifier: ^2.10.0 version: 2.10.0(@types/node@22.17.1)(typescript@5.9.2) shiki: - specifier: ^3.9.2 - version: 3.9.2 + specifier: ^3.13.0 + version: 3.13.0 tailwind-merge: specifier: ^3.3.1 version: 3.3.1 + ts-morph: + specifier: ^26.0.0 + version: 26.0.0 twoslash: specifier: ^0.3.4 version: 0.3.4(typescript@5.9.2) @@ -422,7 +440,7 @@ importers: version: 11.0.0-rc.441(@trpc/server@11.0.0-rc.441) '@trpc/next': specifier: 11.0.0-rc.441 - version: 11.0.0-rc.441(@tanstack/react-query@5.76.1(react@19.1.1))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/react-query@11.0.0-rc.441(@tanstack/react-query@5.76.1(react@19.1.1))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/server@11.0.0-rc.441)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@trpc/server@11.0.0-rc.441)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 11.0.0-rc.441(@tanstack/react-query@5.76.1(react@19.1.1))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/react-query@11.0.0-rc.441(@tanstack/react-query@5.76.1(react@19.1.1))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/server@11.0.0-rc.441)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@trpc/server@11.0.0-rc.441)(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@trpc/react-query': specifier: 11.0.0-rc.441 version: 11.0.0-rc.441(@tanstack/react-query@5.76.1(react@19.1.1))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/server@11.0.0-rc.441)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -467,7 +485,7 @@ importers: version: 15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next-auth: specifier: ^4.24.7 - version: 4.24.11(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 4.24.11(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) postgres: specifier: ^3.4.4 version: 3.4.5 @@ -1095,12 +1113,21 @@ packages: '@emnapi/core@1.4.5': resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} + '@emnapi/core@1.5.0': + resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} + '@emnapi/runtime@1.4.5': resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + '@emnapi/runtime@1.5.0': + resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + '@emnapi/wasi-threads@1.0.4': resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} deprecated: 'Merged into tsx: https://tsx.is' @@ -1861,24 +1888,12 @@ packages: resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@floating-ui/core@1.7.0': - resolution: {integrity: sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==} - '@floating-ui/core@1.7.1': resolution: {integrity: sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==} - '@floating-ui/dom@1.7.0': - resolution: {integrity: sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==} - '@floating-ui/dom@1.7.1': resolution: {integrity: sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==} - '@floating-ui/react-dom@2.1.2': - resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - '@floating-ui/react-dom@2.1.3': resolution: {integrity: sha512-huMBfiU9UnQ2oBwIhgzyIiSpVgvlDstU8CX0AF+wS+KzmYMs0J2a3GwuFHV1Lz+jlrQGeC1fF+Nv0QoumyV0bA==} peerDependencies: @@ -2226,8 +2241,11 @@ packages: '@napi-rs/wasm-runtime@0.2.11': resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} - '@napi-rs/wasm-runtime@1.0.3': - resolution: {integrity: sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==} + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + + '@napi-rs/wasm-runtime@1.0.5': + resolution: {integrity: sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==} '@neon-rs/load@0.0.4': resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} @@ -2318,8 +2336,8 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@orama/orama@3.1.7': - resolution: {integrity: sha512-6yB0117ZjsgNevZw3LP+bkrZa9mU/POPVaXgzMPOBbBc35w2P3R+1vMMhEfC06kYCpd5bf0jodBaTkYQW5TVeQ==} + '@orama/orama@3.1.14': + resolution: {integrity: sha512-Iq4RxYC7y0pA/hLgcUGpYYs5Vze4qNmJk0Qi1uIrg2bHGpm6A06nbjWcH9h4HQsddkDFFlanLj/zYBH3Sxdb4w==} engines: {node: '>= 20.0.0'} '@oxc-parser/binding-darwin-arm64@0.36.0': @@ -2366,18 +2384,14 @@ packages: resolution: {integrity: sha512-FtOS+0v7rZcnjXzYTTqv1vu/KDptD1UztFgoZkYBGe/6TcNFm+SP/jQoLvzau1SPir95WgDOBOUm2Gmsm+bQag==} engines: {node: '>=6.9.0'} - '@oxc-project/runtime@0.82.2': - resolution: {integrity: sha512-cYxcj5CPn/vo5QSpCZcYzBiLidU5+GlFSqIeNaMgBDtcVRBsBJHZg3pHw999W6nHamFQ1EHuPPByB26tjaJiJw==} - engines: {node: '>=6.9.0'} - '@oxc-project/types@0.36.0': resolution: {integrity: sha512-VAv7ANBGE6glvOX5PEhGcca8hqBeGGDXt3xfPApZg7GhkrvbI8YCf01HojlpdIewixN2rnNpfO6cFgHS6Ixe5A==} '@oxc-project/types@0.72.3': resolution: {integrity: sha512-CfAC4wrmMkUoISpQkFAIfMVvlPfQV3xg7ZlcqPXPOIMQhdKIId44G8W0mCPgtpWdFFAyJ+SFtiM+9vbyCkoVng==} - '@oxc-project/types@0.82.2': - resolution: {integrity: sha512-WMGSwd9FsNBs/WfqIOH0h3k1LBdjZJQGYjGnC+vla/fh6HUsu5HzGPerRljiq1hgMQ6gs031YJR12VyP57b/hQ==} + '@oxc-project/types@0.89.0': + resolution: {integrity: sha512-yuo+ECPIW5Q9mSeNmCDC2im33bfKuwW18mwkaHMQh8KakHYDzj4ci/q7wxf2qS3dMlVVCIyrs3kFtH5LmnlYnw==} '@oxc-resolver/binding-darwin-arm64@9.0.2': resolution: {integrity: sha512-MVyRgP2gzJJtAowjG/cHN3VQXwNLWnY+FpOEsyvDepJki1SdAX/8XDijM1yN6ESD1kr9uhBKjGelC6h3qtT+rA==} @@ -2608,24 +2622,11 @@ packages: '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} - '@radix-ui/primitive@1.1.2': - resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} - '@radix-ui/react-accordion@1.2.10': - resolution: {integrity: sha512-x+URzV1siKmeXPSUIQ22L81qp2eOhjpy3tgteF+zOr4d1u0qJnFuyBF4MoQRhmKP6ivDxlvDAvqaF77gh7DOIw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-arrow@1.1.6': - resolution: {integrity: sha512-2JMfHJf/eVnwq+2dewT3C0acmCWD3XiVA1Da+jTDqo342UlU13WvXtqHhG+yJw5JeQmu4ue2eMy6gcEArLBlcw==} + '@radix-ui/react-accordion@1.2.12': + resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2650,8 +2651,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-collapsible@1.1.10': - resolution: {integrity: sha512-O2mcG3gZNkJ/Ena34HurA3llPOEA/M4dJtIRMa6y/cknRDC8XY5UZBInKTsUwW5cUue9A4k0wi1XU5fKBzKe1w==} + '@radix-ui/react-collapsible@1.1.12': + resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2663,8 +2664,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-collection@1.1.6': - resolution: {integrity: sha512-PbhRFK4lIEw9ADonj48tiYWzkllz81TM7KVYyyMMw2cwHO7D5h4XKEblL8NlaRisTK3QTe6tBEhDccFUryxHBQ==} + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2694,8 +2695,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-dialog@1.1.13': - resolution: {integrity: sha512-ARFmqUyhIVS3+riWzwGTe7JLjqwqgnODBUZdqpWar/z1WFs9z76fuOs/2BOWCR+YboRn4/WN9aoaGVwqNRr8VA==} + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2716,8 +2717,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-dismissable-layer@1.1.10': - resolution: {integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==} + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2729,40 +2730,14 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-dismissable-layer@1.1.9': - resolution: {integrity: sha512-way197PiTvNp+WBP7svMJasHl+vibhWGQDb6Mgf5mhEWJkgb85z7Lfl9TUdkqpWsf8GRNmoopx9ZxCyDzmgRMQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-focus-guards@1.1.2': - resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-focus-scope@1.1.6': - resolution: {integrity: sha512-r9zpYNUQY+2jWHWZGyddQLL9YHkM/XvSFHVcWs7bdVuxMAnCwTAuy6Pf47Z4nw7dYcUou1vg/VgjjrrH03VeBw==} + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: '@types/react': '*' - '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - '@types/react-dom': - optional: true '@radix-ui/react-focus-scope@1.1.7': resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} @@ -2786,21 +2761,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-navigation-menu@1.2.12': - resolution: {integrity: sha512-iExvawdu7n6DidDJRU5pMTdi+Z3DaVPN4UZbAGuTs7nJA8P4RvvkEz+XYI2UJjb/Hh23RrH19DakgZNLdaq9Bw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-popover@1.1.13': - resolution: {integrity: sha512-84uqQV3omKDR076izYgcha6gdpN8m3z6w/AeJ83MSBJYVG/AbOHdLjAgsPZkeC/kt+k64moXFCnio8BbqXszlw==} + '@radix-ui/react-navigation-menu@1.2.14': + resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2812,8 +2774,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-popover@1.1.14': - resolution: {integrity: sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==} + '@radix-ui/react-popover@1.1.15': + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2825,34 +2787,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-popper@1.2.6': - resolution: {integrity: sha512-7iqXaOWIjDBfIG7aq8CUEeCSsQMLFdn7VEE8TaFz704DtEzpPHR7w/uuzRflvKgltqSAImgcmxQ7fFX3X7wasg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-popper@1.2.7': - resolution: {integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-portal@1.1.8': - resolution: {integrity: sha512-hQsTUIn7p7fxCPvao/q6wpbxmCwgLrlz+nOrJgC+RwfZqWY/WN+UMqkXzrtKbPrF82P43eCTl3ekeKuyAQbFeg==} + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2877,21 +2813,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-presence@1.1.4': - resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-primitive@2.1.2': - resolution: {integrity: sha512-uHa+l/lKfxuDD2zjN/0peM/RhhSmRjr5YWdk/37EnSv1nJ88uvG85DPexSm8HdFQROd2VdERJ6ynXbkCFi+APw==} + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2916,8 +2839,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-roving-focus@1.1.9': - resolution: {integrity: sha512-ZzrIFnMYHHCNqSNCsuN6l7wlewBEq0O0BCSBkabJMFXVO51LRUTq71gLP1UxFvmrXElqmPjA5VX7IqC9VpazAQ==} + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2929,8 +2852,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-scroll-area@1.2.8': - resolution: {integrity: sha512-K5h1RkYA6M0Sn61BV5LQs686zqBsSC0sGzL4/Gw4mNnjzrQcGSc6YXfC6CRFNaGydSdv5+M8cb0eNsOGo0OXtQ==} + '@radix-ui/react-scroll-area@1.2.10': + resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2955,15 +2878,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-slot@1.2.2': - resolution: {integrity: sha512-y7TBO4xN4Y94FvcWIOIh18fM4R1A8S4q1jhoz4PNzOoHsFcN8pogcFmZrTYAm4F9VRUrWP/Mw7xSKybIeRI+CQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-slot@1.2.3': resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: @@ -2973,8 +2887,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-tabs@1.1.11': - resolution: {integrity: sha512-4FiKSVoXqPP/KfzlB7lwwqoFV6EPwkrrqGp9cUYXjwDYHhvpnqq79P+EPHKcdoTE7Rl8w/+6s9rTlsfXHES9GA==} + '@radix-ui/react-tabs@1.1.13': + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -3058,8 +2972,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-visually-hidden@1.2.2': - resolution: {integrity: sha512-ORCmRUbNiZIv6uV5mhFrhsIKw4UX/N3syZtyqvry61tbGm4JlgQuSn0hk5TwCARsCjkcnuRkSdCE3xfb+ADHew==} + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -3074,8 +2988,9 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - '@rolldown/binding-android-arm64@1.0.0-beta.33': - resolution: {integrity: sha512-xhDQXKftRkEULIxCddrKMR8y0YO/Y+6BKk/XrQP2B29YjV2wr8DByoEz+AHX9BfLHb2srfpdN46UquBW2QXWpQ==} + '@rolldown/binding-android-arm64@1.0.0-beta.38': + resolution: {integrity: sha512-AE3HFQrjWCKLFZD1Vpiy+qsqTRwwoil1oM5WsKPSmfQ5fif/A+ZtOZetF32erZdsR7qyvns6qHEteEsF6g6rsQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] @@ -3084,8 +2999,9 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.0-beta.33': - resolution: {integrity: sha512-7lhhY08v5ZtRq8JJQaJ49fnJombAPnqllKKCDLU/UvaqNAOEyTGC8J1WVOLC4EA4zbXO5U3CCRgVGyAFNH2VtQ==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.38': + resolution: {integrity: sha512-RaoWOKc0rrFsVmKOjQpebMY6c6/I7GR1FBc25v7L/R7NlM0166mUotwGEv7vxu7ruXH4SJcFeVrfADFUUXUmmQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] @@ -3094,8 +3010,9 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.33': - resolution: {integrity: sha512-U2iGjcDV7NWyYyhap8YuY0nwrLX6TvX/9i7gBtdEMPm9z3wIUVGNMVdGlA43uqg7xDpRGpEqGnxbeDgiEwYdnA==} + '@rolldown/binding-darwin-x64@1.0.0-beta.38': + resolution: {integrity: sha512-Ymojqc2U35iUc8NFU2XX1WQPfBRRHN6xHcrxAf9WS8BFFBn8pDrH5QPvH1tYs3lDkw6UGGbanr1RGzARqdUp1g==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] @@ -3104,8 +3021,9 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.0-beta.33': - resolution: {integrity: sha512-gd6ASromVHFLlzrjJWMG5CXHkS7/36DEZ8HhvGt2NN8eZALCIuyEx8HMMLqvKA7z4EAztVkdToVrdxpGMsKZxw==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.38': + resolution: {integrity: sha512-0ermTQ//WzSI0nOL3z/LUWMNiE9xeM5cLGxjewPFEexqxV/0uM8/lNp9QageQ8jfc/VO1OURsGw34HYO5PaL8w==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] @@ -3114,8 +3032,9 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.33': - resolution: {integrity: sha512-xmeLfkfGthuynO1EpCdyTVr0r4G+wqvnKCuyR6rXOet+hLrq5HNAC2XtP/jU2TB4Bc6aiLYxl868B8CGtFDhcw==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.38': + resolution: {integrity: sha512-GADxzVUTCTp6EWI52831A29Tt7PukFe94nhg/SUsfkI33oTiNQtPxyLIT/3oRegizGuPSZSlrdBurkjDwxyEUQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -3124,8 +3043,9 @@ packages: cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.33': - resolution: {integrity: sha512-cHGp8yfHL4pes6uaLbO5L58ceFkUK4efd8iE86jClD1QPPDLKiqEXJCFYeuK3OfODuF5EBOmf0SlcUZNEYGdmw==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.38': + resolution: {integrity: sha512-SKO7Exl5Yem/OSNoA5uLHzyrptUQ8Hg70kHDxuwEaH0+GUg+SQe9/7PWmc4hFKBMrJGdQtii8WZ0uIz9Dofg5Q==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -3134,8 +3054,9 @@ packages: cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.33': - resolution: {integrity: sha512-wZ1t7JAvVeFgskH1L9y7c47ITitPytpL0s8FmAT8pVfXcaTmS58ZyoXT+y6cz8uCkQnETjrX3YezTGI18u3ecg==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.38': + resolution: {integrity: sha512-SOo6+WqhXPBaShLxLT0eCgH17d3Yu1lMAe4mFP0M9Bvr/kfMSOPQXuLxBcbBU9IFM9w3N6qP9xWOHO+oUJvi8Q==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -3144,8 +3065,9 @@ packages: cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.33': - resolution: {integrity: sha512-cDndWo3VEYbm7yeujOV6Ie2XHz0K8YX/R/vbNmMo03m1QwtBKKvbYNSyJb3B9+8igltDjd8zNM9mpiNNrq/ekQ==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.38': + resolution: {integrity: sha512-yvsQ3CyrodOX+lcoi+lejZGCOvJZa9xTsNB8OzpMDmHeZq3QzJfpYjXSAS6vie70fOkLVJb77UqYO193Cl8XBQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -3154,13 +3076,15 @@ packages: cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.33': - resolution: {integrity: sha512-bl7uzi6es/l6LT++NZcBpiX43ldLyKXCPwEZGY1rZJ99HQ7m1g3KxWwYCcGxtKjlb2ExVvDZicF6k+96vxOJKg==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.38': + resolution: {integrity: sha512-84qzKMwUwikfYeOuJ4Kxm/3z15rt0nFGGQArHYIQQNSTiQdxGHxOkqXtzPFqrVfBJUdxBAf+jYzR1pttFJuWyg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-openharmony-arm64@1.0.0-beta.33': - resolution: {integrity: sha512-TrgzQanpLgcmmzolCbYA9BPZgF1gYxkIGZhU/HROnJPsq67gcyaYw/JBLioqQLjIwMipETkn25YY799D2OZzJA==} + '@rolldown/binding-openharmony-arm64@1.0.0-beta.38': + resolution: {integrity: sha512-QrNiWlce01DYH0rL8K3yUBu+lNzY+B0DyCbIc2Atan6/S6flxOL0ow5DLQvMamOI/oKhrJ4xG+9MkMb9dDHbLQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] @@ -3169,8 +3093,8 @@ packages: engines: {node: '>=14.21.3'} cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.33': - resolution: {integrity: sha512-z0LltdUfvoKak9SuaLz/M9AVSg+RTOZjFksbZXzC6Svl1odyW4ai21VHhZy3m2Faeeb/rl/9efVLayj+qYEGxw==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.38': + resolution: {integrity: sha512-fnLtHyjwEsG4/aNV3Uv3Qd1ZbdH+CopwJNoV0RgBqrcQB8V6/Qdikd5JKvnO23kb3QvIpP+dAMGZMv1c2PJMzw==} engines: {node: '>=14.0.0'} cpu: [wasm32] @@ -3179,8 +3103,9 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.33': - resolution: {integrity: sha512-CpvOHyqDNOYx9riD4giyXQDIu72bWRU2Dwt1xFSPlBudk6NumK0OJl6Ch+LPnkp5podQHcQg0mMauAXPVKct7g==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.38': + resolution: {integrity: sha512-19cTfnGedem+RY+znA9J6ARBOCEFD4YSjnx0p5jiTm9tR6pHafRfFIfKlTXhun+NL0WWM/M0eb2IfPPYUa8+wg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] @@ -3189,8 +3114,9 @@ packages: cpu: [ia32] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.33': - resolution: {integrity: sha512-/tNTvZTWHz6HiVuwpR3zR0kGIyCNb+/tFhnJmti+Aw2fAXs3l7Aj0DcXd0646eFKMX8L2w5hOW9H08FXTUkN0g==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.38': + resolution: {integrity: sha512-HcICm4YzFJZV+fI0O0bFLVVlsWvRNo/AB9EfUXvNYbtAxakCnQZ15oq22deFdz6sfi9Y4/SagH2kPU723dhCFA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] @@ -3199,16 +3125,17 @@ packages: cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.33': - resolution: {integrity: sha512-Bb2qK3z7g2mf4zaKRvkohHzweaP1lLbaoBmXZFkY6jJWMm0Z8Pfnh8cOoRlH1IVM1Ufbo8ZZ1WXp1LbOpRMtXw==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.38': + resolution: {integrity: sha512-4Qx6cgEPXLb0XsCyLoQcUgYBpfL0sjugftob+zhUH0EOk/NVCAIT+h0NJhY+jn7pFpeKxhNMqhvTNx3AesxIAQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] '@rolldown/pluginutils@1.0.0-beta.13-commit.024b632': resolution: {integrity: sha512-9/h9ID36/orsoJx8kd2E/wxQ+bif87Blg/7LAu3t9wqfXPPezu02MYR96NOH9G/Aiwr8YgdaKfDE97IZcg/MTw==} - '@rolldown/pluginutils@1.0.0-beta.33': - resolution: {integrity: sha512-she25NCG6NoEPC/SEB4pHs5STcnfI4VBFOzjeI63maSPrWME5J2XC8ogrBgp8NaE/xzj28/kbpSaebiMvFRj+w==} + '@rolldown/pluginutils@1.0.0-beta.38': + resolution: {integrity: sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw==} '@rollup/pluginutils@5.1.4': resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} @@ -3350,58 +3277,34 @@ packages: '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@shikijs/core@3.4.2': - resolution: {integrity: sha512-AG8vnSi1W2pbgR2B911EfGqtLE9c4hQBYkv/x7Z+Kt0VxhgQKcW7UNDVYsu9YxwV6u+OJrvdJrMq6DNWoBjihQ==} - - '@shikijs/core@3.7.0': - resolution: {integrity: sha512-yilc0S9HvTPyahHpcum8eonYrQtmGTU0lbtwxhA6jHv4Bm1cAdlPFRCJX4AHebkCm75aKTjjRAW+DezqD1b/cg==} - - '@shikijs/core@3.9.2': - resolution: {integrity: sha512-3q/mzmw09B2B6PgFNeiaN8pkNOixWS726IHmJEpjDAcneDPMQmUg2cweT9cWXY4XcyQS3i6mOOUgQz9RRUP6HA==} - - '@shikijs/engine-javascript@3.4.2': - resolution: {integrity: sha512-1/adJbSMBOkpScCE/SB6XkjJU17ANln3Wky7lOmrnpl+zBdQ1qXUJg2GXTYVHRq+2j3hd1DesmElTXYDgtfSOQ==} + '@shikijs/core@3.13.0': + resolution: {integrity: sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==} - '@shikijs/engine-javascript@3.9.2': - resolution: {integrity: sha512-kUTRVKPsB/28H5Ko6qEsyudBiWEDLst+Sfi+hwr59E0GLHV0h8RfgbQU7fdN5Lt9A8R1ulRiZyTvAizkROjwDA==} + '@shikijs/engine-javascript@3.13.0': + resolution: {integrity: sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==} - '@shikijs/engine-oniguruma@3.4.2': - resolution: {integrity: sha512-zcZKMnNndgRa3ORja6Iemsr3DrLtkX3cAF7lTJkdMB6v9alhlBsX9uNiCpqofNrXOvpA3h6lHcLJxgCIhVOU5Q==} + '@shikijs/engine-oniguruma@3.13.0': + resolution: {integrity: sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==} - '@shikijs/engine-oniguruma@3.9.2': - resolution: {integrity: sha512-Vn/w5oyQ6TUgTVDIC/BrpXwIlfK6V6kGWDVVz2eRkF2v13YoENUvaNwxMsQU/t6oCuZKzqp9vqtEtEzKl9VegA==} + '@shikijs/langs@3.13.0': + resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==} - '@shikijs/langs@3.4.2': - resolution: {integrity: sha512-H6azIAM+OXD98yztIfs/KH5H4PU39t+SREhmM8LaNXyUrqj2mx+zVkr8MWYqjceSjDw9I1jawm1WdFqU806rMA==} + '@shikijs/rehype@3.13.0': + resolution: {integrity: sha512-dxvB5gXEpiTI3beGwOPEwxFxQNmUWM4cwOWbvUmL6DnQJGl18/+cCjVHZK2OnasmU0v7SvM39Zh3iliWdwfBDA==} - '@shikijs/langs@3.9.2': - resolution: {integrity: sha512-X1Q6wRRQXY7HqAuX3I8WjMscjeGjqXCg/Sve7J2GWFORXkSrXud23UECqTBIdCSNKJioFtmUGJQNKtlMMZMn0w==} + '@shikijs/themes@3.13.0': + resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==} - '@shikijs/rehype@3.4.2': - resolution: {integrity: sha512-atbsrT3UKs25OdKVbNoHyKO9ZP7KEBPlo1oanPGMkvUL0fLictpxMPz6vPE2YTeHhpwz7EMrA4K4FHRY8XAReg==} + '@shikijs/transformers@3.13.0': + resolution: {integrity: sha512-833lcuVzcRiG+fXvgslWsM2f4gHpjEgui1ipIknSizRuTgMkNZupiXE5/TVJ6eSYfhNBFhBZKkReKWO2GgYmqA==} - '@shikijs/themes@3.4.2': - resolution: {integrity: sha512-qAEuAQh+brd8Jyej2UDDf+b4V2g1Rm8aBIdvt32XhDPrHvDkEnpb7Kzc9hSuHUxz0Iuflmq7elaDuQAP9bHIhg==} - - '@shikijs/themes@3.9.2': - resolution: {integrity: sha512-6z5lBPBMRfLyyEsgf6uJDHPa6NAGVzFJqH4EAZ+03+7sedYir2yJBRu2uPZOKmj43GyhVHWHvyduLDAwJQfDjA==} - - '@shikijs/transformers@3.4.2': - resolution: {integrity: sha512-I5baLVi/ynLEOZoWSAMlACHNnG+yw5HDmse0oe+GW6U1u+ULdEB3UHiVWaHoJSSONV7tlcVxuaMy74sREDkSvg==} - - '@shikijs/twoslash@3.7.0': - resolution: {integrity: sha512-EjnV193iasm/M5UHVDJg6WyX6dIMCb0YhsKKlgWv3OK7iLFjuW7sUp978ZkO2OIn3niqBT6e+CX1LgoPM8jYjQ==} + '@shikijs/twoslash@3.13.0': + resolution: {integrity: sha512-OmNKNoZ8Hevt4VKQHfJL+hrsrqLSnW/Nz7RMutuBqXBCIYZWk80HnF9pcXEwRmy9MN0MGRmZCW2rDDP8K7Bxkw==} peerDependencies: typescript: '>=5.5.0' - '@shikijs/types@3.4.2': - resolution: {integrity: sha512-zHC1l7L+eQlDXLnxvM9R91Efh2V4+rN3oMVS2swCBssbj2U/FBwybD1eeLaq8yl/iwT+zih8iUbTBCgGZOYlVg==} - - '@shikijs/types@3.7.0': - resolution: {integrity: sha512-MGaLeaRlSWpnP0XSAum3kP3a8vtcTsITqoEPYdt3lQG3YCdQH4DnEhodkYcNMcU0uW0RffhoD1O3e0vG5eSBBg==} - - '@shikijs/types@3.9.2': - resolution: {integrity: sha512-/M5L0Uc2ljyn2jKvj4Yiah7ow/W+DJSglVafvWAJ/b8AZDeeRAdMu3c2riDzB7N42VD+jSnWxeP9AKtd4TfYVw==} + '@shikijs/types@3.13.0': + resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -3598,8 +3501,8 @@ packages: '@ts-morph/common@0.27.0': resolution: {integrity: sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==} - '@tybys/wasm-util@0.10.0': - resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} @@ -3632,6 +3535,9 @@ packages: '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/filemaker-webviewer@1.0.3': resolution: {integrity: sha512-055zPlCmsDnggyRX9v2/eLd0QJ1JFn0FADisvV0YQW42nQICgGhliOLeHbvynTlEoE/cOx+qDMByoEAy7vavVg==} @@ -4141,10 +4047,6 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-hidden@1.2.4: - resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} - engines: {node: '>=10'} - aria-hidden@1.2.6: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} @@ -4677,6 +4579,9 @@ packages: decode-named-character-reference@1.1.0: resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} + decode-named-character-reference@1.2.0: + resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -5554,17 +5459,28 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - fumadocs-core@15.3.3: - resolution: {integrity: sha512-3i547DisQ/k4v5UYECgTIi14be2TGrnomwT6AKOis+Nj0A8sUdaMEU6KgYT9GAOUeeC6A733pSm6Bi8aY91/IQ==} + fumadocs-core@15.7.13: + resolution: {integrity: sha512-pXSu5/7newNu1nxhz3tp5e0P8jS5oA4jpxWM9o/Rdt6mXjR0FymgHzFDesFVirpSCSjZDTa7RyWDRnyvEOYtvQ==} peerDependencies: + '@mixedbread/sdk': ^0.19.0 '@oramacloud/client': 1.x.x || 2.x.x - algoliasearch: 4.24.0 + '@tanstack/react-router': 1.x.x + '@types/react': '*' + algoliasearch: 5.x.x next: 14.x.x || 15.x.x react: 18.x.x || 19.x.x react-dom: 18.x.x || 19.x.x + react-router: 7.x.x + waku: ^0.26.0 peerDependenciesMeta: + '@mixedbread/sdk': + optional: true '@oramacloud/client': optional: true + '@tanstack/react-router': + optional: true + '@types/react': + optional: true algoliasearch: optional: true next: @@ -5573,6 +5489,10 @@ packages: optional: true react-dom: optional: true + react-router: + optional: true + waku: + optional: true fumadocs-docgen@2.1.0: resolution: {integrity: sha512-OX1JKA3dqIuUxwpt66i6GyT2ZiYT937dvTR3vuHtUi9zx9Nft03h9Z2aLuVcdTaH5WmLdGvZUTYHPyYa9xeHrw==} @@ -5588,8 +5508,8 @@ packages: '@fumadocs/mdx-remote': optional: true - fumadocs-twoslash@3.1.4: - resolution: {integrity: sha512-mD3byKodAZ9c7OG6coppMUg/KcaYlM5DznTR4Yh0/adFkaToFYJcK/cJHHc/hHSou9WOXlwdSOrDUdMny8Qugw==} + fumadocs-twoslash@3.1.7: + resolution: {integrity: sha512-RHO1K6Sh8O8eS9TCQRv9C3ek/TZuUrUqMNtoKBx7D/D5L6OB3Skol+PTltHDzyIrmrHVRkO20tBlqyRxD3awUA==} peerDependencies: '@types/react': '*' fumadocs-ui: ^15.0.0 @@ -5598,23 +5518,32 @@ packages: '@types/react': optional: true - fumadocs-typescript@4.0.6: - resolution: {integrity: sha512-cr2GPMH1TSHQJXRBDbxWGMXpOd7F5uLU8Y2xMOXMc6kQqEpvM2KYlq+QJ/lHTfXmhNgJBr/iKZJtQ2xHSWxaaQ==} + fumadocs-typescript@4.0.8: + resolution: {integrity: sha512-S+Ix6BMKppr3YlINHsX3vU6uyB7bAkD62SkRWl8zxmnOt0P6Sgs+iV4D2vpHbrqHb9Zq/Afa4PMD8J19ymkRgw==} peerDependencies: '@types/react': '*' + fumadocs-core: ^15.7.0 + fumadocs-ui: ^15.7.0 typescript: '*' peerDependenciesMeta: '@types/react': optional: true + fumadocs-ui: + optional: true - fumadocs-ui@15.3.3: - resolution: {integrity: sha512-/jYy4xjK4kMjpcm2ANG3qPGid/wFQdSyCYBXA0OariZEGh1yoDVcwDHYDXOXsiEkVtrRZWI4zjVcIF23r5/SxA==} + fumadocs-ui@15.7.13: + resolution: {integrity: sha512-dn+BKqbGyamzVPkeVQb6xDG2J1tlzeCgEXBZQ383kfdCxNA0crnXo7AkS+uvGz674aXSw6mYfjhia91Si6088w==} peerDependencies: + '@types/react': '*' next: 14.x.x || 15.x.x react: 18.x.x || 19.x.x react-dom: 18.x.x || 19.x.x tailwindcss: ^3.4.14 || ^4.0.0 peerDependenciesMeta: + '@types/react': + optional: true + next: + optional: true tailwindcss: optional: true @@ -7433,8 +7362,8 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-medium-image-zoom@5.2.14: - resolution: {integrity: sha512-nfTVYcAUnBzXQpPDcZL+cG/e6UceYUIG+zDcnemL7jtAqbJjVVkA85RgneGtJeni12dTyiRPZVM6Szkmwd/o8w==} + react-medium-image-zoom@5.4.0: + resolution: {integrity: sha512-BsE+EnFVQzFIlyuuQrZ9iTwyKpKkqdFZV1ImEQN573QPqGrIUuNni7aF+sZwDcxlsuOMayCr6oO/PZR/yJnbRg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -7449,26 +7378,6 @@ packages: '@types/react': optional: true - react-remove-scroll@2.6.3: - resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - react-remove-scroll@2.7.0: - resolution: {integrity: sha512-sGsQtcjMqdQyijAHytfGEELB8FufGbfXIsvUTe+NLx1GDRJCXtCFLBLUI1eyZCKXXvbEU2C6gai0PZKoIE9Vbg==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - react-remove-scroll@2.7.1: resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} engines: {node: '>=10'} @@ -7628,8 +7537,9 @@ packages: resolution: {integrity: sha512-sntAHxNJ22WdcXVHQDoRst4eOJZjuT3S1aqsNWsvK2aaFVPgpVPY3WGwvJ91SvH/oTdRCyJw5PwpzbaMdKdYqQ==} hasBin: true - rolldown@1.0.0-beta.33: - resolution: {integrity: sha512-mgu118ZuRguC8unhPCbdZbyRbjQfEMiWqlojBA5aRIncBelRaBomnHNpGKYkYWeK7twRz5Cql30xgqqrA3Xelw==} + rolldown@1.0.0-beta.38: + resolution: {integrity: sha512-58frPNX55Je1YsyrtPJv9rOSR3G5efUZpRqok94Efsj0EUa8dnqJV3BldShyI7A+bVPleucOtzXHwVpJRcR0kQ==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true rollup-plugin-preserve-directives@0.4.0: @@ -7757,11 +7667,8 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} - shiki@3.4.2: - resolution: {integrity: sha512-wuxzZzQG8kvZndD7nustrNFIKYJ1jJoWIPaBpVe2+KHSvtzMi4SBjOxrigs8qeqce/l3U0cwiC+VAkLKSunHQQ==} - - shiki@3.9.2: - resolution: {integrity: sha512-t6NKl5e/zGTvw/IyftLcumolgOczhuroqwXngDeMqJ3h3EQiTY/7wmfgPlsmloD8oYfqkEDqxiaH37Pjm1zUhQ==} + shiki@3.13.0: + resolution: {integrity: sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==} side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} @@ -7986,11 +7893,11 @@ packages: resolution: {integrity: sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==} engines: {node: '>=16'} - style-to-js@1.1.16: - resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} + style-to-js@1.1.17: + resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==} - style-to-object@1.0.8: - resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + style-to-object@1.0.9: + resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==} styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} @@ -8479,6 +8386,9 @@ packages: vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} @@ -9423,16 +9333,32 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.5.0': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.4.5': dependencies: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.5.0': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.0.4': dependencies: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild-kit/core-utils@3.3.2': dependencies: esbuild: 0.18.20 @@ -9849,30 +9775,15 @@ snapshots: '@eslint/core': 0.14.0 levn: 0.4.1 - '@floating-ui/core@1.7.0': - dependencies: - '@floating-ui/utils': 0.2.9 - '@floating-ui/core@1.7.1': dependencies: '@floating-ui/utils': 0.2.9 - '@floating-ui/dom@1.7.0': - dependencies: - '@floating-ui/core': 1.7.0 - '@floating-ui/utils': 0.2.9 - '@floating-ui/dom@1.7.1': dependencies: '@floating-ui/core': 1.7.1 '@floating-ui/utils': 0.2.9 - '@floating-ui/react-dom@2.1.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@floating-ui/dom': 1.7.0 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - '@floating-ui/react-dom@2.1.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@floating-ui/dom': 1.7.1 @@ -10268,11 +10179,18 @@ snapshots: '@tybys/wasm-util': 0.9.0 optional: true - '@napi-rs/wasm-runtime@1.0.3': + '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.4.5 - '@emnapi/runtime': 1.4.5 - '@tybys/wasm-util': 0.10.0 + '@emnapi/core': 1.5.0 + '@emnapi/runtime': 1.5.0 + '@tybys/wasm-util': 0.10.1 + optional: true + + '@napi-rs/wasm-runtime@1.0.5': + dependencies: + '@emnapi/core': 1.5.0 + '@emnapi/runtime': 1.5.0 + '@tybys/wasm-util': 0.10.1 optional: true '@neon-rs/load@0.0.4': {} @@ -10334,7 +10252,7 @@ snapshots: '@open-draft/until@2.1.0': {} - '@orama/orama@3.1.7': {} + '@orama/orama@3.1.14': {} '@oxc-parser/binding-darwin-arm64@0.36.0': optional: true @@ -10362,13 +10280,11 @@ snapshots: '@oxc-project/runtime@0.72.3': {} - '@oxc-project/runtime@0.82.2': {} - '@oxc-project/types@0.36.0': {} '@oxc-project/types@0.72.3': {} - '@oxc-project/types@0.82.2': {} + '@oxc-project/types@0.89.0': {} '@oxc-resolver/binding-darwin-arm64@9.0.2': optional: true @@ -10544,18 +10460,18 @@ snapshots: '@radix-ui/number@1.1.1': {} - '@radix-ui/primitive@1.1.2': {} + '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-accordion@1.2.10(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collapsible': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-id': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.10)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -10563,15 +10479,6 @@ snapshots: '@types/react': 19.1.10 '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-arrow@1.1.6(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.10 - '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -10581,14 +10488,14 @@ snapshots: '@types/react': 19.1.10 '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-collapsible@1.1.10(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-id': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.10)(react@19.1.1) react: 19.1.1 @@ -10597,12 +10504,12 @@ snapshots: '@types/react': 19.1.10 '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-collection@1.1.6(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.10)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: @@ -10621,24 +10528,24 @@ snapshots: optionalDependencies: '@types/react': 19.1.10 - '@radix-ui/react-dialog@1.1.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-id': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.10)(react@19.1.1) aria-hidden: 1.2.6 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-remove-scroll: 2.7.0(@types/react@19.1.10)(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.10)(react@19.1.1) optionalDependencies: '@types/react': 19.1.10 '@types/react-dom': 19.1.7(@types/react@19.1.10) @@ -10649,9 +10556,9 @@ snapshots: optionalDependencies: '@types/react': 19.1.10 - '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.10)(react@19.1.1) @@ -10662,35 +10569,11 @@ snapshots: '@types/react': 19.1.10 '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-dismissable-layer@1.1.9(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.10)(react@19.1.1)': dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.10)(react@19.1.1) react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) optionalDependencies: '@types/react': 19.1.10 - '@types/react-dom': 19.1.7(@types/react@19.1.10) - - '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.10)(react@19.1.1)': - dependencies: - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.10 - - '@radix-ui/react-focus-scope@1.1.6(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.10)(react@19.1.1) - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.10 - '@types/react-dom': 19.1.7(@types/react@19.1.10) '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: @@ -10710,63 +10593,40 @@ snapshots: optionalDependencies: '@types/react': 19.1.10 - '@radix-ui/react-navigation-menu@1.2.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-id': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-visually-hidden': 1.2.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.10 - '@types/react-dom': 19.1.7(@types/react@19.1.10) - - '@radix-ui/react-popover@1.1.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.10)(react@19.1.1) - aria-hidden: 1.2.4 + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-remove-scroll: 2.6.3(@types/react@19.1.10)(react@19.1.1) optionalDependencies: '@types/react': 19.1.10 '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-popover@1.1.14(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-id': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-slot': 1.2.3(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.10)(react@19.1.1) @@ -10778,25 +10638,7 @@ snapshots: '@types/react': 19.1.10 '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-popper@1.2.6(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-arrow': 1.1.6(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/rect': 1.1.1 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.10 - '@types/react-dom': 19.1.7(@types/react@19.1.10) - - '@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@floating-ui/react-dom': 2.1.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -10814,16 +10656,6 @@ snapshots: '@types/react': 19.1.10 '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-portal@1.1.8(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.10)(react@19.1.1) - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.10 - '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -10834,7 +10666,7 @@ snapshots: '@types/react': 19.1.10 '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.10)(react@19.1.1) @@ -10844,15 +10676,6 @@ snapshots: '@types/react': 19.1.10 '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-primitive@2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.10)(react@19.1.1) - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.10 - '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/react-slot': 1.2.3(@types/react@19.1.10)(react@19.1.1) @@ -10862,15 +10685,15 @@ snapshots: '@types/react': 19.1.10 '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-roving-focus@1.1.9(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-id': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.10)(react@19.1.1) react: 19.1.1 @@ -10879,15 +10702,15 @@ snapshots: '@types/react': 19.1.10 '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-scroll-area@1.2.8(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.10)(react@19.1.1) react: 19.1.1 @@ -10905,13 +10728,6 @@ snapshots: '@types/react': 19.1.10 '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-slot@1.2.2(@types/react@19.1.10)(react@19.1.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.10 - '@radix-ui/react-slot@1.2.3(@types/react@19.1.10)(react@19.1.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) @@ -10919,15 +10735,15 @@ snapshots: optionalDependencies: '@types/react': 19.1.10 - '@radix-ui/react-tabs@1.1.11(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-id': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-roving-focus': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.10)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -10989,9 +10805,9 @@ snapshots: optionalDependencies: '@types/react': 19.1.10 - '@radix-ui/react-visually-hidden@1.2.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: @@ -11000,91 +10816,91 @@ snapshots: '@radix-ui/rect@1.1.1': {} - '@rolldown/binding-android-arm64@1.0.0-beta.33': + '@rolldown/binding-android-arm64@1.0.0-beta.38': optional: true '@rolldown/binding-darwin-arm64@1.0.0-beta.13-commit.024b632': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.33': + '@rolldown/binding-darwin-arm64@1.0.0-beta.38': optional: true '@rolldown/binding-darwin-x64@1.0.0-beta.13-commit.024b632': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.33': + '@rolldown/binding-darwin-x64@1.0.0-beta.38': optional: true '@rolldown/binding-freebsd-x64@1.0.0-beta.13-commit.024b632': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.33': + '@rolldown/binding-freebsd-x64@1.0.0-beta.38': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.13-commit.024b632': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.33': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.38': optional: true '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.13-commit.024b632': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.33': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.38': optional: true '@rolldown/binding-linux-arm64-musl@1.0.0-beta.13-commit.024b632': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.33': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.38': optional: true '@rolldown/binding-linux-x64-gnu@1.0.0-beta.13-commit.024b632': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.33': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.38': optional: true '@rolldown/binding-linux-x64-musl@1.0.0-beta.13-commit.024b632': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.33': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.38': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-beta.33': + '@rolldown/binding-openharmony-arm64@1.0.0-beta.38': optional: true '@rolldown/binding-wasm32-wasi@1.0.0-beta.13-commit.024b632': dependencies: - '@napi-rs/wasm-runtime': 0.2.11 + '@napi-rs/wasm-runtime': 0.2.12 optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.33': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.38': dependencies: - '@napi-rs/wasm-runtime': 1.0.3 + '@napi-rs/wasm-runtime': 1.0.5 optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.13-commit.024b632': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.33': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.38': optional: true '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.13-commit.024b632': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.33': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.38': optional: true '@rolldown/binding-win32-x64-msvc@1.0.0-beta.13-commit.024b632': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.33': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.38': optional: true '@rolldown/pluginutils@1.0.0-beta.13-commit.024b632': {} - '@rolldown/pluginutils@1.0.0-beta.33': {} + '@rolldown/pluginutils@1.0.0-beta.38': {} '@rollup/pluginutils@5.1.4(rollup@4.40.2)': dependencies: @@ -11194,99 +11010,56 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@shikijs/core@3.4.2': - dependencies: - '@shikijs/types': 3.4.2 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - - '@shikijs/core@3.7.0': - dependencies: - '@shikijs/types': 3.7.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - - '@shikijs/core@3.9.2': + '@shikijs/core@3.13.0': dependencies: - '@shikijs/types': 3.9.2 + '@shikijs/types': 3.13.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@3.4.2': + '@shikijs/engine-javascript@3.13.0': dependencies: - '@shikijs/types': 3.4.2 + '@shikijs/types': 3.13.0 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 - '@shikijs/engine-javascript@3.9.2': + '@shikijs/engine-oniguruma@3.13.0': dependencies: - '@shikijs/types': 3.9.2 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.3 - - '@shikijs/engine-oniguruma@3.4.2': - dependencies: - '@shikijs/types': 3.4.2 + '@shikijs/types': 3.13.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/engine-oniguruma@3.9.2': + '@shikijs/langs@3.13.0': dependencies: - '@shikijs/types': 3.9.2 - '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/types': 3.13.0 - '@shikijs/langs@3.4.2': + '@shikijs/rehype@3.13.0': dependencies: - '@shikijs/types': 3.4.2 - - '@shikijs/langs@3.9.2': - dependencies: - '@shikijs/types': 3.9.2 - - '@shikijs/rehype@3.4.2': - dependencies: - '@shikijs/types': 3.4.2 + '@shikijs/types': 3.13.0 '@types/hast': 3.0.4 hast-util-to-string: 3.0.1 - shiki: 3.4.2 + shiki: 3.13.0 unified: 11.0.5 unist-util-visit: 5.0.0 - '@shikijs/themes@3.4.2': - dependencies: - '@shikijs/types': 3.4.2 - - '@shikijs/themes@3.9.2': + '@shikijs/themes@3.13.0': dependencies: - '@shikijs/types': 3.9.2 + '@shikijs/types': 3.13.0 - '@shikijs/transformers@3.4.2': + '@shikijs/transformers@3.13.0': dependencies: - '@shikijs/core': 3.4.2 - '@shikijs/types': 3.4.2 + '@shikijs/core': 3.13.0 + '@shikijs/types': 3.13.0 - '@shikijs/twoslash@3.7.0(typescript@5.9.2)': + '@shikijs/twoslash@3.13.0(typescript@5.9.2)': dependencies: - '@shikijs/core': 3.7.0 - '@shikijs/types': 3.7.0 + '@shikijs/core': 3.13.0 + '@shikijs/types': 3.13.0 twoslash: 0.3.4(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@shikijs/types@3.4.2': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/types@3.7.0': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/types@3.9.2': + '@shikijs/types@3.13.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -11435,7 +11208,7 @@ snapshots: dependencies: '@trpc/server': 11.0.0-rc.441 - '@trpc/next@11.0.0-rc.441(@tanstack/react-query@5.76.1(react@19.1.1))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/react-query@11.0.0-rc.441(@tanstack/react-query@5.76.1(react@19.1.1))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/server@11.0.0-rc.441)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@trpc/server@11.0.0-rc.441)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@trpc/next@11.0.0-rc.441(@tanstack/react-query@5.76.1(react@19.1.1))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/react-query@11.0.0-rc.441(@tanstack/react-query@5.76.1(react@19.1.1))(@trpc/client@11.0.0-rc.441(@trpc/server@11.0.0-rc.441))(@trpc/server@11.0.0-rc.441)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@trpc/server@11.0.0-rc.441)(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@trpc/client': 11.0.0-rc.441(@trpc/server@11.0.0-rc.441) '@trpc/server': 11.0.0-rc.441 @@ -11469,7 +11242,7 @@ snapshots: minimatch: 10.0.3 path-browserify: 1.0.1 - '@tybys/wasm-util@0.10.0': + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 optional: true @@ -11509,6 +11282,8 @@ snapshots: '@types/estree@1.0.7': {} + '@types/estree@1.0.8': {} + '@types/filemaker-webviewer@1.0.3': {} '@types/fs-extra@11.0.4': @@ -12115,10 +11890,6 @@ snapshots: argparse@2.0.1: {} - aria-hidden@1.2.4: - dependencies: - tslib: 2.8.1 - aria-hidden@1.2.6: dependencies: tslib: 2.8.1 @@ -12716,6 +12487,10 @@ snapshots: dependencies: character-entities: 2.0.2 + decode-named-character-reference@1.2.0: + dependencies: + character-entities: 2.0.2 + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 @@ -13100,7 +12875,7 @@ snapshots: '@types/estree-jsx': 1.0.5 acorn: 8.14.1 esast-util-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 esbuild-register@3.6.0(esbuild@0.19.12): dependencies: @@ -13508,7 +13283,7 @@ snapshots: estree-util-attach-comments@3.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-util-build-jsx@3.0.1: dependencies: @@ -13818,29 +13593,31 @@ snapshots: fsevents@2.3.3: optional: true - fumadocs-core@15.3.3(@types/react@19.1.10)(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + fumadocs-core@15.7.13(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@formatjs/intl-localematcher': 0.6.1 - '@orama/orama': 3.1.7 - '@shikijs/rehype': 3.4.2 - '@shikijs/transformers': 3.4.2 + '@orama/orama': 3.1.14 + '@shikijs/rehype': 3.13.0 + '@shikijs/transformers': 3.13.0 github-slugger: 2.0.0 hast-util-to-estree: 3.1.3 hast-util-to-jsx-runtime: 2.3.6 image-size: 2.0.2 negotiator: 1.0.0 - react-remove-scroll: 2.7.0(@types/react@19.1.10)(react@19.1.1) + npm-to-yarn: 3.0.1 + react-remove-scroll: 2.7.1(@types/react@19.1.10)(react@19.1.1) remark: 15.0.1 remark-gfm: 4.0.1 + remark-rehype: 11.1.2 scroll-into-view-if-needed: 3.1.0 - shiki: 3.9.2 + shiki: 3.13.0 unist-util-visit: 5.0.0 optionalDependencies: + '@types/react': 19.1.10 next: 15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) transitivePeerDependencies: - - '@types/react' - supports-color fumadocs-docgen@2.1.0: @@ -13852,7 +13629,7 @@ snapshots: unist-util-visit: 5.0.0 zod: 3.25.76 - fumadocs-mdx@11.6.4(acorn@8.14.1)(fumadocs-core@15.3.3(@types/react@19.1.10)(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)): + fumadocs-mdx@11.6.4(acorn@8.14.1)(fumadocs-core@15.7.13(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)): dependencies: '@mdx-js/mdx': 3.1.0(acorn@8.14.1) '@standard-schema/spec': 1.0.0 @@ -13861,7 +13638,7 @@ snapshots: esbuild: 0.25.4 estree-util-value-to-estree: 3.4.0 fast-glob: 3.3.3 - fumadocs-core: 15.3.3(@types/react@19.1.10)(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + fumadocs-core: 15.7.13(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) gray-matter: 4.0.3 js-yaml: 4.1.0 lru-cache: 11.1.0 @@ -13873,16 +13650,16 @@ snapshots: - acorn - supports-color - fumadocs-twoslash@3.1.4(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(fumadocs-ui@15.3.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2): + fumadocs-twoslash@3.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(fumadocs-ui@15.7.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2): dependencies: - '@radix-ui/react-popover': 1.1.14(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@shikijs/twoslash': 3.7.0(typescript@5.9.2) - fumadocs-ui: 15.3.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@shikijs/twoslash': 3.13.0(typescript@5.9.2) + fumadocs-ui: 15.7.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11) mdast-util-from-markdown: 2.0.2 mdast-util-gfm: 3.1.0 mdast-util-to-hast: 13.2.0 react: 19.1.1 - shiki: 3.9.2 + shiki: 3.13.0 tailwind-merge: 3.3.1 twoslash: 0.3.4(typescript@5.9.2) optionalDependencies: @@ -13893,54 +13670,59 @@ snapshots: - supports-color - typescript - fumadocs-typescript@4.0.6(@types/react@19.1.10)(typescript@5.9.2): + fumadocs-typescript@4.0.8(@types/react@19.1.10)(fumadocs-core@15.7.13(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(fumadocs-ui@15.7.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11))(typescript@5.9.2): dependencies: estree-util-value-to-estree: 3.4.0 + fumadocs-core: 15.7.13(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) hast-util-to-estree: 3.1.3 hast-util-to-jsx-runtime: 2.3.6 remark: 15.0.1 remark-rehype: 11.1.2 - shiki: 3.9.2 tinyglobby: 0.2.14 ts-morph: 26.0.0 typescript: 5.9.2 unist-util-visit: 5.0.0 optionalDependencies: '@types/react': 19.1.10 + fumadocs-ui: 15.7.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11) transitivePeerDependencies: - supports-color - fumadocs-ui@15.3.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11): + fumadocs-ui@15.7.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11): dependencies: - '@radix-ui/react-accordion': 1.2.10(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-collapsible': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-dialog': 1.1.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-navigation-menu': 1.2.12(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-popover': 1.1.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-scroll-area': 1.2.8(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-slot': 1.2.3(@types/react@19.1.10)(react@19.1.1) - '@radix-ui/react-tabs': 1.1.11(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) class-variance-authority: 0.7.1 - fumadocs-core: 15.3.3(@types/react@19.1.10)(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + fumadocs-core: 15.7.13(@types/react@19.1.10)(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) lodash.merge: 4.6.2 - next: 15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next-themes: 0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) postcss-selector-parser: 7.1.0 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - react-medium-image-zoom: 5.2.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - react-remove-scroll: 2.7.0(@types/react@19.1.10)(react@19.1.1) + react-medium-image-zoom: 5.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + scroll-into-view-if-needed: 3.1.0 tailwind-merge: 3.3.1 optionalDependencies: + '@types/react': 19.1.10 + next: 15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) tailwindcss: 4.1.11 transitivePeerDependencies: + - '@mixedbread/sdk' - '@oramacloud/client' - - '@types/react' + - '@tanstack/react-router' - '@types/react-dom' - algoliasearch + - react-router - supports-color + - waku function-bind@1.1.2: {} @@ -14156,7 +13938,7 @@ snapshots: hast-util-to-estree@3.1.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 @@ -14169,7 +13951,7 @@ snapshots: mdast-util-mdxjs-esm: 2.0.1 property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.16 + style-to-js: 1.1.17 unist-util-position: 5.0.0 zwitch: 2.0.4 transitivePeerDependencies: @@ -14191,7 +13973,7 @@ snapshots: hast-util-to-jsx-runtime@2.3.6: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/hast': 3.0.4 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 @@ -14203,9 +13985,9 @@ snapshots: mdast-util-mdxjs-esm: 2.0.1 property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.16 + style-to-js: 1.1.17 unist-util-position: 5.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color @@ -14955,7 +14737,7 @@ snapshots: parse-entities: 4.0.2 stringify-entities: 4.0.4 unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color @@ -15131,7 +14913,7 @@ snapshots: micromark-util-events-to-acorn: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-extension-mdx-md@2.0.0: dependencies: @@ -15147,7 +14929,7 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-extension-mdxjs@3.0.0: dependencies: @@ -15183,7 +14965,7 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-factory-space@2.0.1: dependencies: @@ -15245,7 +15027,7 @@ snapshots: estree-util-visit: 2.0.0 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-util-html-tag-name@2.0.1: {} @@ -15456,7 +15238,7 @@ snapshots: optionalDependencies: '@rollup/rollup-linux-x64-gnu': 4.40.2 - next-auth@4.24.11(next@15.4.6(@babel/core@7.27.7)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + next-auth@4.24.11(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@babel/runtime': 7.27.1 '@panva/hkdf': 1.2.1 @@ -15775,7 +15557,7 @@ snapshots: '@types/unist': 2.0.11 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 @@ -16045,7 +15827,7 @@ snapshots: react-is@18.3.1: {} - react-medium-image-zoom@5.2.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + react-medium-image-zoom@5.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -16058,28 +15840,6 @@ snapshots: optionalDependencies: '@types/react': 19.1.10 - react-remove-scroll@2.6.3(@types/react@19.1.10)(react@19.1.1): - dependencies: - react: 19.1.1 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.10)(react@19.1.1) - react-style-singleton: 2.2.3(@types/react@19.1.10)(react@19.1.1) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.10)(react@19.1.1) - use-sidecar: 1.1.3(@types/react@19.1.10)(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.10 - - react-remove-scroll@2.7.0(@types/react@19.1.10)(react@19.1.1): - dependencies: - react: 19.1.1 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.10)(react@19.1.1) - react-style-singleton: 2.2.3(@types/react@19.1.10)(react@19.1.1) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.10)(react@19.1.1) - use-sidecar: 1.1.3(@types/react@19.1.10)(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.10 - react-remove-scroll@2.7.1(@types/react@19.1.10)(react@19.1.1): dependencies: react: 19.1.1 @@ -16281,7 +16041,7 @@ snapshots: reusify@1.1.0: {} - rolldown-plugin-dts@0.15.6(rolldown@1.0.0-beta.33)(typescript@5.9.2): + rolldown-plugin-dts@0.15.6(rolldown@1.0.0-beta.38)(typescript@5.9.2): dependencies: '@babel/generator': 7.28.3 '@babel/parser': 7.28.3 @@ -16291,7 +16051,7 @@ snapshots: debug: 4.4.1 dts-resolver: 2.1.1 get-tsconfig: 4.10.1 - rolldown: 1.0.0-beta.33 + rolldown: 1.0.0-beta.38 optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: @@ -16318,27 +16078,26 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.13-commit.024b632 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.13-commit.024b632 - rolldown@1.0.0-beta.33: + rolldown@1.0.0-beta.38: dependencies: - '@oxc-project/runtime': 0.82.2 - '@oxc-project/types': 0.82.2 - '@rolldown/pluginutils': 1.0.0-beta.33 + '@oxc-project/types': 0.89.0 + '@rolldown/pluginutils': 1.0.0-beta.38 ansis: 4.1.0 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.33 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.33 - '@rolldown/binding-darwin-x64': 1.0.0-beta.33 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.33 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.33 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.33 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.33 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.33 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.33 - '@rolldown/binding-openharmony-arm64': 1.0.0-beta.33 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.33 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.33 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.33 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.33 + '@rolldown/binding-android-arm64': 1.0.0-beta.38 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.38 + '@rolldown/binding-darwin-x64': 1.0.0-beta.38 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.38 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.38 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.38 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.38 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.38 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.38 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.38 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.38 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.38 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.38 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.38 rollup-plugin-preserve-directives@0.4.0(rollup@4.40.2): dependencies: @@ -16565,25 +16324,14 @@ snapshots: shell-quote@1.8.3: {} - shiki@3.4.2: - dependencies: - '@shikijs/core': 3.4.2 - '@shikijs/engine-javascript': 3.4.2 - '@shikijs/engine-oniguruma': 3.4.2 - '@shikijs/langs': 3.4.2 - '@shikijs/themes': 3.4.2 - '@shikijs/types': 3.4.2 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - shiki@3.9.2: + shiki@3.13.0: dependencies: - '@shikijs/core': 3.9.2 - '@shikijs/engine-javascript': 3.9.2 - '@shikijs/engine-oniguruma': 3.9.2 - '@shikijs/langs': 3.9.2 - '@shikijs/themes': 3.9.2 - '@shikijs/types': 3.9.2 + '@shikijs/core': 3.13.0 + '@shikijs/engine-javascript': 3.13.0 + '@shikijs/engine-oniguruma': 3.13.0 + '@shikijs/langs': 3.13.0 + '@shikijs/themes': 3.13.0 + '@shikijs/types': 3.13.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -16836,11 +16584,11 @@ snapshots: '@tokenizer/token': 0.3.0 peek-readable: 5.4.2 - style-to-js@1.1.16: + style-to-js@1.1.17: dependencies: - style-to-object: 1.0.8 + style-to-object: 1.0.9 - style-to-object@1.0.8: + style-to-object@1.0.9: dependencies: inline-style-parser: 0.2.4 @@ -17047,8 +16795,8 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.33 - rolldown-plugin-dts: 0.15.6(rolldown@1.0.0-beta.33)(typescript@5.9.2) + rolldown: 1.0.0-beta.38 + rolldown-plugin-dts: 0.15.6(rolldown@1.0.0-beta.38)(typescript@5.9.2) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.14 @@ -17370,6 +17118,11 @@ snapshots: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + vfile@6.0.3: dependencies: '@types/unist': 3.0.3