diff --git a/.npmrc b/.npmrc deleted file mode 100644 index cda6b55bb..000000000 --- a/.npmrc +++ /dev/null @@ -1,2 +0,0 @@ -//npm.pkg.github.com/:_authToken=${GITHUB_NPM_TOKEN} -@zuplo:registry=https://npm.pkg.github.com \ No newline at end of file diff --git a/docs/ai/features.mdx b/docs/ai/features.mdx new file mode 100644 index 000000000..0575da7e2 --- /dev/null +++ b/docs/ai/features.mdx @@ -0,0 +1,4 @@ +--- +title: Zuplo AI Features +sidebar_label: Features +--- diff --git a/docs/ai/gateway/apps.mdx b/docs/ai/gateway/apps.mdx new file mode 100644 index 000000000..538386543 --- /dev/null +++ b/docs/ai/gateway/apps.mdx @@ -0,0 +1,10 @@ +--- +title: AI Gateway Apps +sidebar_label: Overview +--- + +Apps are in the Zuplo AI Gateway represent any app or intergration that will +call the AI Gateway. For example, you might have a custom support chatbot on +your website - that chatbot would be an App in the AI Gateway. Each App has its +own API Key so that usage is tracked independently. Apps are owned by a specific +[team](./teams.mdx) and can access the AI Providers assigned to that team. diff --git a/docs/ai/gateway/getting-started.mdx b/docs/ai/gateway/getting-started.mdx new file mode 100644 index 000000000..6be1e2e41 --- /dev/null +++ b/docs/ai/gateway/getting-started.mdx @@ -0,0 +1,4 @@ +--- +title: Zuplo AI Gateway Getting Started +sidebar_label: Getting Started +--- diff --git a/docs/ai/gateway/information-architecture.mdx b/docs/ai/gateway/information-architecture.mdx new file mode 100644 index 000000000..1436297a7 --- /dev/null +++ b/docs/ai/gateway/information-architecture.mdx @@ -0,0 +1,4 @@ +--- +title: AI Gateway Information Architecture +sidebar_label: Information Architecture +--- diff --git a/docs/ai/gateway/managing-providers.mdx b/docs/ai/gateway/managing-providers.mdx new file mode 100644 index 000000000..00cde9787 --- /dev/null +++ b/docs/ai/gateway/managing-providers.mdx @@ -0,0 +1,65 @@ +--- +title: Managing AI Providers +sidebar_label: Managing Providers +--- + +Zuplo's AI Gateway supports integration with various +[AI providers](./providers.mdx), allowing you to leverage different models and +services for your AI applications. + +## Adding a New AI Provider + +To add a new AI provider to your Zuplo AI Gateway, follow these steps: + + + +1. Navigate to the **Settings** > **AI Providers** section of your AI Gateway + project in the [Zuplo Portal](https://portal.zuplo.com). + +1. Click on the **Add Provider** button. + +1. Select the desired provider from the list of + [supported providers](./providers.mdx). + +1. Specify a label for the provider instance to easily identify it later. You + can change the label later if required. + +1. Enter the API Key for the selected provider. For instructions on how to + create an API key for each provider see the + [provider documentation](./providers.mdx). + +1. Select the model or models you want to use with this provider. The available + models will depend on the selected provider. This can be changed later. + + :::tip + + Click "Select All" to enable all models. + + ::: + +1. Click save + + + +## Editing an AI Provider + +Existing providers can be modified by navigating to the **Settings** > **AI +Providers** section and clicking the **Edit** button next to the provider you +want to modify. + +You can modify the label, API key, and selected models for the provider. After +making your changes, click **Save** to apply them. Changes are effective +immediately. + +:::caution + +Be careful removing models from an provider that is in use as it may break +existing applications that rely on the provider. + +::: + +## Deleting an AI Provider + +Providers that are no longer used within your project can be deleted. To delete +a provider, navigate to the **Settings** > **AI Providers** section and click +the **Delete** button next to the provider you want to remove. diff --git a/docs/ai/gateway/managing-teams.mdx b/docs/ai/gateway/managing-teams.mdx new file mode 100644 index 000000000..d110db93a --- /dev/null +++ b/docs/ai/gateway/managing-teams.mdx @@ -0,0 +1,63 @@ +--- +title: Managing Teams +--- + +Teams in the Zuplo AI Gateway are how users are granted access to AI Providers +and Apps. Teams are hiearcical with access propogating downword. Teams are also +where you define usage limits. + +## Creating a Team + + + +1. Navigate to the **Teams** tab of your AI Gateway project in the + [Zuplo Portal](https://portal.zuplo.com). + +1. Click on the **Create Team** button. + +1. Enter the name of your team. + +1. Click **Create** + + + +## Adding Team Members + +Team members are the users who belong to a team and can access the AI Providers +and Apps associated with that team. + + + +1. Navigate to the **Teams** tab of your AI Gateway project in the + [Zuplo Portal](https://portal.zuplo.com). + +1. Select the team you want to add members to. + +1. Click the **Members** tab. + +1. Click **Add Member**. + +1. Type the email address of the user you want to add. If the user is already a + member of your Zuplo account they will be directly added to the team. If they + don't have an account, they will be invited to join the account and then + added to the team. + +1. Select the role for the user (if your plan supports RBAC). The available + roles are: + - **Member**: Can access AI Providers and Apps assigned to the team. + - **Admin**: Can manage team settings, members, and access AI Providers and + Apps assigned to the team. + + :::note + + RBAC is an optional enterprise add-on. For more information see the + [document on roles and permissions](../../articles/accounts/roles-and-permissions.mdx). + + ::: + +1. Click **Add Member** to confirm. + +1. The user will receive an email notification if they are being invited to the + Zuplo account. + + diff --git a/docs/ai/gateway/overview.mdx b/docs/ai/gateway/overview.mdx new file mode 100644 index 000000000..2d381cdac --- /dev/null +++ b/docs/ai/gateway/overview.mdx @@ -0,0 +1,6 @@ +--- +title: Zuplo AI Gateway +sidebar_label: Overview +--- + +Introduction diff --git a/docs/ai/gateway/provider-anthropic.mdx b/docs/ai/gateway/provider-anthropic.mdx new file mode 100644 index 000000000..a0bf3b971 --- /dev/null +++ b/docs/ai/gateway/provider-anthropic.mdx @@ -0,0 +1,4 @@ +--- +title: Anthropic Provider +sidebar_label: Anthropic +--- diff --git a/docs/ai/gateway/provider-google.mdx b/docs/ai/gateway/provider-google.mdx new file mode 100644 index 000000000..931f187da --- /dev/null +++ b/docs/ai/gateway/provider-google.mdx @@ -0,0 +1,4 @@ +--- +title: Google Provider +sidebar_label: Google +--- diff --git a/docs/ai/gateway/provider-minstral.mdx b/docs/ai/gateway/provider-minstral.mdx new file mode 100644 index 000000000..74ac8f762 --- /dev/null +++ b/docs/ai/gateway/provider-minstral.mdx @@ -0,0 +1,4 @@ +--- +title: Minstral Provider +sidebar_label: Minstral +--- diff --git a/docs/ai/gateway/provider-openai.mdx b/docs/ai/gateway/provider-openai.mdx new file mode 100644 index 000000000..b898a5407 --- /dev/null +++ b/docs/ai/gateway/provider-openai.mdx @@ -0,0 +1,4 @@ +--- +title: OpenAI Provider +sidebar_label: OpenAI +--- diff --git a/docs/ai/gateway/providers.mdx b/docs/ai/gateway/providers.mdx new file mode 100644 index 000000000..69bb8b07e --- /dev/null +++ b/docs/ai/gateway/providers.mdx @@ -0,0 +1,13 @@ +--- +title: AI Providers +sidebar_label: Overview +--- + +Zuplo's AI Gateway supports integration with various AI providers, allowing you +to leverage different models and services for your AI applications. + +## Supported Providers + +Zuplo currently supports the following AI providers: + +| diff --git a/docs/ai/gateway/teams.mdx b/docs/ai/gateway/teams.mdx new file mode 100644 index 000000000..49e0feb6b --- /dev/null +++ b/docs/ai/gateway/teams.mdx @@ -0,0 +1,4 @@ +--- +title: AI Gateway Teams +sidebar_label: Overview +--- diff --git a/docs/ai/gateway/universal-api.mdx b/docs/ai/gateway/universal-api.mdx new file mode 100644 index 000000000..56593406d --- /dev/null +++ b/docs/ai/gateway/universal-api.mdx @@ -0,0 +1,8 @@ +--- +title: AI Gateway Universal API +sidebar_label: Universal API +--- + +Zuplo AI Gateway provides a universal API that standardizes interactions with +various AI providers. This API follows the OpenAI API specification, making it +easy to integrate with existing applications that already use OpenAI's API. diff --git a/docs/ai/gateway/usage-limits.mdx b/docs/ai/gateway/usage-limits.mdx new file mode 100644 index 000000000..4bdc2864e --- /dev/null +++ b/docs/ai/gateway/usage-limits.mdx @@ -0,0 +1,4 @@ +--- +title: "Usage Limits & Threasholds" +sidebar_label: "Usage Limits" +--- diff --git a/docs/ai/guardrails.mdx b/docs/ai/guardrails.mdx new file mode 100644 index 000000000..65c1e5efd --- /dev/null +++ b/docs/ai/guardrails.mdx @@ -0,0 +1,4 @@ +--- +title: Zuplo AI Guardrails +sidebar_label: Overview +--- diff --git a/docs/ai/mcp-server/getting-started.mdx b/docs/ai/mcp-server/getting-started.mdx new file mode 100644 index 000000000..d67bd34c9 --- /dev/null +++ b/docs/ai/mcp-server/getting-started.mdx @@ -0,0 +1,125 @@ +--- +title: Zuplo MCP Server Getting Started +sidebar_label: Getting Started +--- + +#### Getting Started + +1. Set up your APIs in Zuplo using OpenAPI specifications +2. Add the MCP Server Handler to a route +3. Configure your server name, version, and which APIs to expose as tools +4. Deploy your project to make the MCP tools available +5. Connect your AI systems to the MCP server endpoint + +[Read the full technical documentation on the MCP Server Handler](/docs/handlers/mcp-server) + +### 2. MCP Custom Tools: Programmable AI Tools + +For more complex scenarios, use MCP Custom Tools to create sophisticated AI +tools with custom business logic, multi-step workflows, and programmatic control +using OpenAPI specifications and custom handler functions. + +#### Key Features + +- **OpenAPI Standard**: Define tools using standard OpenAPI 3.1 specifications +- **Custom Logic**: Implement complex business workflows that go beyond simple + API calls to enable powerful AI workloads +- **Multi-Step Operations**: Chain multiple API calls, data transformations, and + conditional logic +- **Type Safety**: Built-in JSON Schema validation for inputs and outputs +- **Runtime Integration**: Full access to your gateway through + `context.invokeRoute()` + +#### Example Use Case + +The following shows a powerful workflow that can enable an AI agent to interface +with a process ordering system: instead of an agent calling each of your APIs +manually, this workflow can be used as a single "aggregate" process to validate +the provided customer, check that items are in stock, determine pricing, and +place orders for those items. + +**OpenAPI Tool Definition:** + +```json +{ + "/process-order": { + "post": { + "summary": "Process customer order", + "description": "Process a customer order with inventory validation and pricing", + "operationId": "processCustomerOrder", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": ["customerId", "orderNum"], + "properties": { + "customerId": { + "type": "string", + "description": "Unique customer identifier" + }, + "orderNum": { + "type": "number", + "description": "Order number to process" + } + } + } + } + } + }, + "x-zuplo-route": { + "handler": { + "export": "default", + "module": "$import(./modules/process-order)" + } + } + } + } +} +``` + +**Custom Handler Implementation:** + +```typescript +// modules/process-order.ts +import { ZuploContext, ZuploRequest } from "@zuplo/runtime"; + +export default async function (request: ZuploRequest, context: ZuploContext) { + const args = await request.json(); + + // 1. Validate customer exists and is active + const customerRes = await context.invokeRoute( + `/customers/${args.customerId}`, + ); + if (!customerRes.ok) { + throw new Error("Customer not found or inactive"); + } + const customer = await customerRes.json(); + + // 2. Check the customer's order + const orderResponse = await context.invokeRoute(`/orders/${args.orderNum}`); + + if (!orderResponse.ok) { + throw new Error("Order not found"); + } + const order = await orderResponse.json(); + + // 3. Return structured response + return { + orderNum: order.id, + items: order.items, + status: "processed", + customerId: args.customerId, + }; +} +``` + +#### Getting Started with Custom Tools + +1. Create an OpenAPI specification defining your tools as POST endpoints +2. Implement custom handler functions for complex business logic +3. Configure the MCP Server Handler with your OpenAPI specification +4. Deploy and test with MCP clients + +[Read the full documentation on MCP Custom Tools](/docs/handlers/mcp-server-custom-tools) diff --git a/docs/ai/mcp.mdx b/docs/ai/mcp-server/overview.mdx similarity index 50% rename from docs/ai/mcp.mdx rename to docs/ai/mcp-server/overview.mdx index 57e669933..62422dbb2 100644 --- a/docs/ai/mcp.mdx +++ b/docs/ai/mcp-server/overview.mdx @@ -1,6 +1,6 @@ --- title: Model Context Protocol (MCP) -sidebar_label: Model Context Protocol (MCP) +sidebar_label: Overview --- [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) is @@ -112,127 +112,6 @@ When exposing routes as MCP tools: 4. **Scope permissions carefully** - only expose routes and OpenAPI specs that should be accessible to AI systems -#### Getting Started - -1. Set up your APIs in Zuplo using OpenAPI specifications -2. Add the MCP Server Handler to a route -3. Configure your server name, version, and which APIs to expose as tools -4. Deploy your project to make the MCP tools available -5. Connect your AI systems to the MCP server endpoint - -[Read the full technical documentation on the MCP Server Handler](/docs/handlers/mcp-server) - -### 2. MCP Custom Tools: Programmable AI Tools - -For more complex scenarios, use MCP Custom Tools to create sophisticated AI -tools with custom business logic, multi-step workflows, and programmatic control -using OpenAPI specifications and custom handler functions. - -#### Key Features - -- **OpenAPI Standard**: Define tools using standard OpenAPI 3.1 specifications -- **Custom Logic**: Implement complex business workflows that go beyond simple - API calls to enable powerful AI workloads -- **Multi-Step Operations**: Chain multiple API calls, data transformations, and - conditional logic -- **Type Safety**: Built-in JSON Schema validation for inputs and outputs -- **Runtime Integration**: Full access to your gateway through - `context.invokeRoute()` - -#### Example Use Case - -The following shows a powerful workflow that can enable an AI agent to interface -with a process ordering system: instead of an agent calling each of your APIs -manually, this workflow can be used as a single "aggregate" process to validate -the provided customer, check that items are in stock, determine pricing, and -place orders for those items. - -**OpenAPI Tool Definition:** - -```json -{ - "/process-order": { - "post": { - "summary": "Process customer order", - "description": "Process a customer order with inventory validation and pricing", - "operationId": "processCustomerOrder", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "required": ["customerId", "orderNum"], - "properties": { - "customerId": { - "type": "string", - "description": "Unique customer identifier" - }, - "orderNum": { - "type": "number", - "description": "Order number to process" - } - } - } - } - } - }, - "x-zuplo-route": { - "handler": { - "export": "default", - "module": "$import(./modules/process-order)" - } - } - } - } -} -``` - -**Custom Handler Implementation:** - -```typescript -// modules/process-order.ts -import { ZuploContext, ZuploRequest } from "@zuplo/runtime"; - -export default async function (request: ZuploRequest, context: ZuploContext) { - const args = await request.json(); - - // 1. Validate customer exists and is active - const customerRes = await context.invokeRoute( - `/customers/${args.customerId}`, - ); - if (!customerRes.ok) { - throw new Error("Customer not found or inactive"); - } - const customer = await customerRes.json(); - - // 2. Check the customer's order - const orderResponse = await context.invokeRoute(`/orders/${args.orderNum}`); - - if (!orderResponse.ok) { - throw new Error("Order not found"); - } - const order = await orderResponse.json(); - - // 3. Return structured response - return { - orderNum: order.id, - items: order.items, - status: "processed", - customerId: args.customerId, - }; -} -``` - -#### Getting Started with Custom Tools - -1. Create an OpenAPI specification defining your tools as POST endpoints -2. Implement custom handler functions for complex business logic -3. Configure the MCP Server Handler with your OpenAPI specification -4. Deploy and test with MCP clients - -[Read the full documentation on MCP Custom Tools](/docs/handlers/mcp-server-custom-tools) - ## Learn More - [MCP Server Handler Technical Documentation](/docs/handlers/mcp-server) diff --git a/docs/ai/overview.mdx b/docs/ai/overview.mdx new file mode 100644 index 000000000..83fc3b409 --- /dev/null +++ b/docs/ai/overview.mdx @@ -0,0 +1,4 @@ +--- +title: Zuplo AI +sidebar_label: Overview +--- diff --git a/docs/handlers/mcp-server-custom-tools.mdx b/docs/handlers/mcp-server-custom-tools.mdx index 5f41234a2..261a3b991 100644 --- a/docs/handlers/mcp-server-custom-tools.mdx +++ b/docs/handlers/mcp-server-custom-tools.mdx @@ -534,6 +534,7 @@ dramatically reduce invalid tool usage. This validation is done automatically. ## Learn More - [MCP Server Handler](./mcp-server.mdx) - For simple route-to-tool mapping -- [Model Context Protocol Overview](../ai/mcp.mdx) - Understanding MCP concepts +- [Model Context Protocol Overview](../ai/mcp/introduction.mdx) - Understanding + MCP concepts - [MCP Specification](https://modelcontextprotocol.io/specification/) - Official protocol documentation diff --git a/package-lock.json b/package-lock.json index cab503f9b..2814fd73c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "lucide-react": "^0.516.0", "react": "^19.0.0", "react-dom": "^19.0.0", - "zudoku": "^0.60.1" + "zudoku": "^0.61.4" }, "devDependencies": { "@types/json-schema": "7.0.15", @@ -2846,6 +2846,12 @@ "url": "https://opencollective.com/pkgr" } }, + "node_modules/@posthog/core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.0.0.tgz", + "integrity": "sha512-gquQld+duT9DdzLIFoHZkUMW0DZOTSLCtSjuuC/zKFz65Qecbz9p37DHBJMkw0dCuB8Mgh2GtH8Ag3PznJrP3g==", + "license": "MIT" + }, "node_modules/@pothos/core": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/@pothos/core/-/core-4.8.0.tgz", @@ -2874,19 +2880,19 @@ "license": "MIT" }, "node_modules/@radix-ui/primitive": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz", - "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", "license": "MIT" }, "node_modules/@radix-ui/react-accordion": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.11.tgz", - "integrity": "sha512-l3W5D54emV2ues7jjeG1xcyN7S3jnK3zE2zHqgn0CmMsy9lNJwmgcrmaxS+7ipw15FAivzKNzH3d5EcGoFKw0A==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", + "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-collapsible": "1.1.11", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collapsible": "1.1.12", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", @@ -2911,15 +2917,15 @@ } }, "node_modules/@radix-ui/react-alert-dialog": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.14.tgz", - "integrity": "sha512-IOZfZ3nPvN6lXpJTBCunFQPRSvK8MDgSc1FB85xnIpUKOw9en0dJj8JmCAxV7BiZdtYlUpmrQjoTFkVYtdoWzQ==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", + "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dialog": "1.1.14", + "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, @@ -2985,15 +2991,15 @@ } }, "node_modules/@radix-ui/react-checkbox": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.2.tgz", - "integrity": "sha512-yd+dI56KZqawxKZrJ31eENUwqc1QSqg4OZ15rybGjF2ZNwMO+wCyHzAVLRp9qoYJf7kYy0YpZ2b0JCzJ42HZpA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", + "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", @@ -3015,16 +3021,16 @@ } }, "node_modules/@radix-ui/react-collapsible": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.11.tgz", - "integrity": "sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", + "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1" @@ -3101,20 +3107,20 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz", - "integrity": "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", @@ -3152,12 +3158,12 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz", - "integrity": "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", @@ -3179,16 +3185,16 @@ } }, "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.15.tgz", - "integrity": "sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==", + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.15", + "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, @@ -3208,9 +3214,9 @@ } }, "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz", - "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -3248,18 +3254,18 @@ } }, "node_modules/@radix-ui/react-hover-card": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.14.tgz", - "integrity": "sha512-CPYZ24Mhirm+g6D8jArmLzjYu4Eyg3TTUHswR26QgzXBHBe64BO/RHOJKzmF/Dxb4y4f9PKyJdwm/O/AhNkb+Q==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz", + "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, @@ -3320,25 +3326,25 @@ } }, "node_modules/@radix-ui/react-menu": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.15.tgz", - "integrity": "sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==", + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "aria-hidden": "^1.2.4", @@ -3360,21 +3366,21 @@ } }, "node_modules/@radix-ui/react-popover": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.14.tgz", - "integrity": "sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", + "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", @@ -3397,9 +3403,9 @@ } }, "node_modules/@radix-ui/react-popper": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.7.tgz", - "integrity": "sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", @@ -3453,9 +3459,9 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz", - "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", @@ -3524,18 +3530,18 @@ } }, "node_modules/@radix-ui/react-radio-group": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.7.tgz", - "integrity": "sha512-9w5XhD0KPOrm92OTTE0SysH3sYzHsSTHNvZgUBo/VZ80VdYyB5RneDbc0dKpURS24IxkoFRu/hI0i4XyfFwY6g==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz", + "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" @@ -3556,12 +3562,12 @@ } }, "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.10.tgz", - "integrity": "sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", @@ -3587,17 +3593,17 @@ } }, "node_modules/@radix-ui/react-scroll-area": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.9.tgz", - "integrity": "sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", + "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", "license": "MIT", "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", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1" @@ -3618,22 +3624,22 @@ } }, "node_modules/@radix-ui/react-select": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.5.tgz", - "integrity": "sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", + "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", "license": "MIT", "dependencies": { "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", @@ -3661,13 +3667,13 @@ } }, "node_modules/@radix-ui/react-slider": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.5.tgz", - "integrity": "sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", "license": "MIT", "dependencies": { "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", @@ -3712,12 +3718,12 @@ } }, "node_modules/@radix-ui/react-switch": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.5.tgz", - "integrity": "sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", @@ -3741,18 +3747,18 @@ } }, "node_modules/@radix-ui/react-tabs": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.12.tgz", - "integrity": "sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", + "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { @@ -3771,12 +3777,12 @@ } }, "node_modules/@radix-ui/react-toggle": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.9.tgz", - "integrity": "sha512-ZoFkBBz9zv9GWer7wIjvdRxmh2wyc2oKWw6C6CseWd6/yq1DK/l5lJ+wnsmFwJZbBYqr02mrf8A2q/CVCuM3ZA==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", + "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, @@ -3796,17 +3802,17 @@ } }, "node_modules/@radix-ui/react-toggle-group": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.10.tgz", - "integrity": "sha512-kiU694Km3WFLTC75DdqgM/3Jauf3rD9wxeS9XtyWFKsBUeZA337lC+6uUazT7I1DhanZ5gyD5Stf8uf2dbQxOQ==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", + "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", - "@radix-ui/react-toggle": "1.1.9", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-toggle": "1.1.10", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { @@ -3825,19 +3831,19 @@ } }, "node_modules/@radix-ui/react-tooltip": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.7.tgz", - "integrity": "sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", + "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", @@ -4843,84 +4849,84 @@ } }, "node_modules/@shikijs/core": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.9.2.tgz", - "integrity": "sha512-3q/mzmw09B2B6PgFNeiaN8pkNOixWS726IHmJEpjDAcneDPMQmUg2cweT9cWXY4XcyQS3i6mOOUgQz9RRUP6HA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.12.0.tgz", + "integrity": "sha512-rPfCBd6gHIKBPpf2hKKWn2ISPSrmRKAFi+bYDjvZHpzs3zlksWvEwaF3Z4jnvW+xHxSRef7qDooIJkY0RpA9EA==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.9.2", + "@shikijs/types": "3.12.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "node_modules/@shikijs/engine-javascript": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.9.2.tgz", - "integrity": "sha512-kUTRVKPsB/28H5Ko6qEsyudBiWEDLst+Sfi+hwr59E0GLHV0h8RfgbQU7fdN5Lt9A8R1ulRiZyTvAizkROjwDA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.12.0.tgz", + "integrity": "sha512-Ni3nm4lnKxyKaDoXQQJYEayX052BL7D0ikU5laHp+ynxPpIF1WIwyhzrMU6WDN7AoAfggVR4Xqx3WN+JTS+BvA==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.9.2", + "@shikijs/types": "3.12.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.3" } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.9.2.tgz", - "integrity": "sha512-Vn/w5oyQ6TUgTVDIC/BrpXwIlfK6V6kGWDVVz2eRkF2v13YoENUvaNwxMsQU/t6oCuZKzqp9vqtEtEzKl9VegA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.12.0.tgz", + "integrity": "sha512-IfDl3oXPbJ/Jr2K8mLeQVpnF+FxjAc7ZPDkgr38uEw/Bg3u638neSrpwqOTnTHXt1aU0Fk1/J+/RBdst1kVqLg==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.9.2", + "@shikijs/types": "3.12.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/@shikijs/langs": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.9.2.tgz", - "integrity": "sha512-X1Q6wRRQXY7HqAuX3I8WjMscjeGjqXCg/Sve7J2GWFORXkSrXud23UECqTBIdCSNKJioFtmUGJQNKtlMMZMn0w==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.12.0.tgz", + "integrity": "sha512-HIca0daEySJ8zuy9bdrtcBPhcYBo8wR1dyHk1vKrOuwDsITtZuQeGhEkcEfWc6IDyTcom7LRFCH6P7ljGSCEiQ==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.9.2" + "@shikijs/types": "3.12.0" } }, "node_modules/@shikijs/rehype": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-3.9.2.tgz", - "integrity": "sha512-obHyTWAUp5cpgpr4v7T9sjEHkLUMvBHvcpYAtdB1yuWU4/IeJ8boDMpnGUvvnxVpDwARlkvBA4Hr+BISo3zwjg==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-3.12.0.tgz", + "integrity": "sha512-qxZwugfCQUMECTmUOCGiG5cNHHTxxGk3esirD7mwwdSxl344KlN/6M9/anev+3uBFVs9UDNShjsMAla8egkCuw==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.9.2", + "@shikijs/types": "3.12.0", "@types/hast": "^3.0.4", "hast-util-to-string": "^3.0.1", - "shiki": "3.9.2", + "shiki": "3.12.0", "unified": "^11.0.5", "unist-util-visit": "^5.0.0" } }, "node_modules/@shikijs/themes": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.9.2.tgz", - "integrity": "sha512-6z5lBPBMRfLyyEsgf6uJDHPa6NAGVzFJqH4EAZ+03+7sedYir2yJBRu2uPZOKmj43GyhVHWHvyduLDAwJQfDjA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.12.0.tgz", + "integrity": "sha512-/lxvQxSI5s4qZLV/AuFaA4Wt61t/0Oka/P9Lmpr1UV+HydNCczO3DMHOC/CsXCCpbv4Zq8sMD0cDa7mvaVoj0Q==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.9.2" + "@shikijs/types": "3.12.0" } }, "node_modules/@shikijs/transformers": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.9.2.tgz", - "integrity": "sha512-MW5hT4TyUp6bNAgTExRYLk1NNasVQMTCw1kgbxHcEC0O5cbepPWaB+1k+JzW9r3SP2/R8kiens8/3E6hGKfgsA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.12.0.tgz", + "integrity": "sha512-HcJwlvMAyZzOY+ayEAGE891BdJ7Vtio+qdWUTF9ki4d0LIkDb6DBz8ynOWGAEglHv6eQs/WcAWf/h6ina6IgCw==", "license": "MIT", "dependencies": { - "@shikijs/core": "3.9.2", - "@shikijs/types": "3.9.2" + "@shikijs/core": "3.12.0", + "@shikijs/types": "3.12.0" } }, "node_modules/@shikijs/types": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.9.2.tgz", - "integrity": "sha512-/M5L0Uc2ljyn2jKvj4Yiah7ow/W+DJSglVafvWAJ/b8AZDeeRAdMu3c2riDzB7N42VD+jSnWxeP9AKtd4TfYVw==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.12.0.tgz", + "integrity": "sha512-jsFzm8hCeTINC3OCmTZdhR9DOl/foJWplH2Px0bTi4m8z59fnsueLsweX82oGcjRQ7mfQAluQYKGoH2VzsWY4A==", "license": "MIT", "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", @@ -5485,9 +5491,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.81.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.81.5.tgz", - "integrity": "sha512-ZJOgCy/z2qpZXWaj/oxvodDx07XcQa9BF92c0oINjHkoqUPsmm3uG08HpTaviviZ/N9eP1f9CM7mKSEkIo7O1Q==", + "version": "5.85.5", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.85.5.tgz", + "integrity": "sha512-KO0WTob4JEApv69iYp1eGvfMSUkgw//IpMnq+//cORBzXf0smyRwPLrUvEe5qtAEGjwZTXrjxg+oJNP/C00t6w==", "license": "MIT", "funding": { "type": "github", @@ -5495,12 +5501,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.81.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.81.5.tgz", - "integrity": "sha512-lOf2KqRRiYWpQT86eeeftAGnjuTR35myTP8MXyvHa81VlomoAWNEd8x5vkcAfQefu0qtYCvyqLropFZqgI2EQw==", + "version": "5.85.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.85.5.tgz", + "integrity": "sha512-/X4EFNcnPiSs8wM2v+b6DqS5mmGeuJQvxBglmDxl6ZQb5V26ouD2SJYAcC3VjbNwqhY2zjxVD15rDA5nGbMn3A==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.81.5" + "@tanstack/query-core": "5.85.5" }, "funding": { "type": "github", @@ -6259,6 +6265,24 @@ "react": "^18.0.0 || ^19.0.0" } }, + "node_modules/@zuplo/mcp": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@zuplo/mcp/-/mcp-0.0.18.tgz", + "integrity": "sha512-Lwffy72XuWAUhBgSuJKE085lgPTNmzfHE1I71sz7AxkW1+MhgIVsJi0xA0uPtBpjDCs9ABFoGxHnTCO35wWLyw==", + "license": "MIT", + "dependencies": { + "zod": "^3.25.0" + } + }, + "node_modules/@zuplo/mcp/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@zxcvbn-ts/core": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@zxcvbn-ts/core/-/core-3.0.4.tgz", @@ -6390,9 +6414,9 @@ "license": "MIT" }, "node_modules/allof-merge": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/allof-merge/-/allof-merge-0.6.6.tgz", - "integrity": "sha512-116eZBf2he0/J4Tl7EYMz96I5Anaeio+VL0j/H2yxW9CoYQAMMv8gYcwkVRoO7XfIOv/qzSTfVzDVGAYxKFi3g==", + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/allof-merge/-/allof-merge-0.6.7.tgz", + "integrity": "sha512-slvjkM56OdeVkm1tllrnaumtSHwqyHrepXkAe6Am+CW4WdbHkNqdOKPF6cvY3/IouzvXk1BoLICT5LY7sCoFGw==", "license": "MIT", "dependencies": { "json-crawl": "^0.5.3" @@ -6475,19 +6499,9 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, "license": "MIT" }, - "node_modules/axios": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", - "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", @@ -6966,6 +6980,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -7415,6 +7430,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -7648,6 +7664,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -8436,6 +8453,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -8451,6 +8469,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -8460,6 +8479,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -8849,6 +8869,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -12296,15 +12317,15 @@ } }, "node_modules/posthog-node": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-4.17.1.tgz", - "integrity": "sha512-cVlQPOwOPjakUnrueKRCQe1m2Ku+XzKaOos7Tn/zDZkkZFeBT/byP7tbNf7LiwhaBRWFBRowZZb/MsTtSRaorg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-5.7.0.tgz", + "integrity": "sha512-6J1AIZWtbr2lEbZOO2AzO/h1FPJjUZM4KWcdaL2UQw7FY8J7VNaH3NiaRockASFmglpID7zEY25gV/YwCtuXjg==", "license": "MIT", "dependencies": { - "axios": "^1.8.2" + "@posthog/core": "1.0.0" }, "engines": { - "node": ">=15.0.0" + "node": ">=20" } }, "node_modules/preact": { @@ -12556,9 +12577,9 @@ "license": "MIT" }, "node_modules/react-hook-form": { - "version": "7.60.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.60.0.tgz", - "integrity": "sha512-SBrYOvMbDB7cV8ZfNpaiLcgjH/a1c7aK0lK+aNigpf4xWLO8q+o4tcvVurv3c4EOyzn/3dCsYt4GKD42VvJ/+A==", + "version": "7.62.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.62.0.tgz", + "integrity": "sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -12661,9 +12682,9 @@ } }, "node_modules/react-router": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.6.3.tgz", - "integrity": "sha512-zf45LZp5skDC6I3jDLXQUu0u26jtuP4lEGbc7BbdyxenBN1vJSTA18czM2D+h5qyMBuMrD+9uB+mU37HIoKGRA==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.8.2.tgz", + "integrity": "sha512-7M2fR1JbIZ/jFWqelpvSZx+7vd7UlBTfdZqf6OSdF9g6+sfdqJDAWcak6ervbHph200ePlu+7G8LdoiC3ReyAQ==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -13549,17 +13570,17 @@ } }, "node_modules/shiki": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.9.2.tgz", - "integrity": "sha512-t6NKl5e/zGTvw/IyftLcumolgOczhuroqwXngDeMqJ3h3EQiTY/7wmfgPlsmloD8oYfqkEDqxiaH37Pjm1zUhQ==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.12.0.tgz", + "integrity": "sha512-E+ke51tciraTHpaXYXfqnPZFSViKHhSQ3fiugThlfs/om/EonlQ0hSldcqgzOWWqX6PcjkKKzFgrjIaiPAXoaA==", "license": "MIT", "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.12.0", + "@shikijs/engine-javascript": "3.12.0", + "@shikijs/engine-oniguruma": "3.12.0", + "@shikijs/langs": "3.12.0", + "@shikijs/themes": "3.12.0", + "@shikijs/types": "3.12.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } @@ -14230,6 +14251,15 @@ "fsevents": "~2.3.3" } }, + "node_modules/tw-animate-css": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.3.6.tgz", + "integrity": "sha512-9dy0R9UsYEGmgf26L8UcHiLmSFTHa9+D7+dAt/G/sF5dCnPePZbfgDYinc7/UzAM7g/baVrmS6m9yEpU46d+LA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Wombosvideo" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -15139,9 +15169,9 @@ } }, "node_modules/zudoku": { - "version": "0.60.1", - "resolved": "https://registry.npmjs.org/zudoku/-/zudoku-0.60.1.tgz", - "integrity": "sha512-sxQSHSRqf/lpuGcp0uCTpFgxMaKACcIJrq+i+nH3E8I7tR8Q2FEAedLUZRtXcX22aL5+3y3paMva+44oDUA48Q==", + "version": "0.61.4", + "resolved": "https://registry.npmjs.org/zudoku/-/zudoku-0.61.4.tgz", + "integrity": "sha512-qEoTyAA3rCK2Z/mFCvNBRL4ZlNeLGsB48bGCxBEe25OFm0/GfQlamI/PevPhg21SoRO2SPfM6KA5AxmnK1LzpA==", "dependencies": { "@apidevtools/json-schema-ref-parser": "14.1.1", "@envelop/core": "5.3.0", @@ -15150,46 +15180,47 @@ "@mdx-js/react": "3.1.0", "@mdx-js/rollup": "3.1.0", "@pothos/core": "4.8.0", - "@radix-ui/react-accordion": "1.2.11", - "@radix-ui/react-alert-dialog": "1.1.14", + "@radix-ui/react-accordion": "1.2.12", + "@radix-ui/react-alert-dialog": "1.1.15", "@radix-ui/react-aspect-ratio": "1.1.7", - "@radix-ui/react-checkbox": "1.3.2", - "@radix-ui/react-collapsible": "1.1.11", - "@radix-ui/react-dialog": "1.1.14", - "@radix-ui/react-dropdown-menu": "2.1.15", - "@radix-ui/react-hover-card": "1.1.14", + "@radix-ui/react-checkbox": "1.3.3", + "@radix-ui/react-collapsible": "1.1.12", + "@radix-ui/react-dialog": "1.1.15", + "@radix-ui/react-dropdown-menu": "2.1.16", + "@radix-ui/react-hover-card": "1.1.15", "@radix-ui/react-label": "2.1.7", - "@radix-ui/react-popover": "1.1.14", + "@radix-ui/react-popover": "1.1.15", "@radix-ui/react-progress": "1.1.7", - "@radix-ui/react-radio-group": "1.3.7", - "@radix-ui/react-scroll-area": "1.2.9", - "@radix-ui/react-select": "2.2.5", - "@radix-ui/react-slider": "1.3.5", + "@radix-ui/react-radio-group": "1.3.8", + "@radix-ui/react-scroll-area": "1.2.10", + "@radix-ui/react-select": "2.2.6", + "@radix-ui/react-slider": "1.3.6", "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-switch": "1.2.5", - "@radix-ui/react-tabs": "1.1.12", - "@radix-ui/react-toggle": "1.1.9", - "@radix-ui/react-toggle-group": "1.1.10", - "@radix-ui/react-tooltip": "1.2.7", + "@radix-ui/react-switch": "1.2.6", + "@radix-ui/react-tabs": "1.1.13", + "@radix-ui/react-toggle": "1.1.10", + "@radix-ui/react-toggle-group": "1.1.11", + "@radix-ui/react-tooltip": "1.2.8", "@radix-ui/react-visually-hidden": "1.2.3", "@scalar/openapi-parser": "0.18.0", "@sentry/node": "9.26.0", - "@shikijs/langs": "3.9.2", - "@shikijs/rehype": "3.9.2", - "@shikijs/themes": "3.9.2", - "@shikijs/transformers": "3.9.2", + "@shikijs/langs": "3.12.0", + "@shikijs/rehype": "3.12.0", + "@shikijs/themes": "3.12.0", + "@shikijs/transformers": "3.12.0", "@sindresorhus/slugify": "2.2.1", "@stefanprobst/rehype-extract-toc": "3.0.0", "@tailwindcss/typography": "0.5.16", "@tailwindcss/vite": "4.1.11", "@tanem/react-nprogress": "5.0.55", - "@tanstack/react-query": "5.81.5", + "@tanstack/react-query": "5.85.5", "@types/react": "19.1.10", "@types/react-dom": "19.1.7", "@vitejs/plugin-react": "4.6.0", "@zudoku/httpsnippet": "10.0.9", "@zudoku/react-helmet-async": "2.0.5", - "allof-merge": "0.6.6", + "@zuplo/mcp": "^0.0.18", + "allof-merge": "0.6.7", "class-variance-authority": "0.7.1", "clsx": "2.1.1", "cmdk": "1.1.1", @@ -15209,7 +15240,7 @@ "javascript-stringify": "2.1.0", "json-schema-to-typescript-lite": "15.0.0", "loglevel": "1.9.2", - "lucide-react": "0.526.0", + "lucide-react": "0.542.0", "motion": "12.23.12", "nanoevents": "^9.1.0", "next-themes": "0.4.6", @@ -15218,12 +15249,12 @@ "pagefind": "1.4.0-alpha.1", "picocolors": "1.1.1", "piscina": "5.1.3", - "posthog-node": "4.17.1", + "posthog-node": "5.7.0", "react-error-boundary": "6.0.0", - "react-hook-form": "7.60.0", + "react-hook-form": "7.62.0", "react-is": "19.1.1", "react-markdown": "10.1.0", - "react-router": "7.6.3", + "react-router": "7.8.2", "rehype-mdx-import-media": "1.2.0", "rehype-raw": "7.0.0", "rehype-slug": "6.0.0", @@ -15235,11 +15266,12 @@ "remark-mdx-frontmatter": "5.2.0", "rollup": "4.46.1", "semver": "7.7.2", - "shiki": "3.9.2", + "shiki": "3.12.0", "sitemap": "8.0.0", "strip-ansi": "7.1.0", "tailwind-merge": "3.3.1", "tailwindcss": "4.1.11", + "tw-animate-css": "1.3.6", "unified": "^11.0.5", "unist-util-visit": "5.0.0", "vaul": "1.1.2", @@ -15248,7 +15280,7 @@ "yaml": "2.8.1", "yargs": "18.0.0", "zod": "4.0.10", - "zustand": "5.0.6" + "zustand": "5.0.8" }, "bin": { "zudoku": "cli.js" @@ -15347,9 +15379,9 @@ } }, "node_modules/zudoku/node_modules/lucide-react": { - "version": "0.526.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.526.0.tgz", - "integrity": "sha512-uGWG/2RKuDLeQHCodn5cmJ9Zij80EstOdcBP+j//B2sr78w7woiEL4aMu6CRlRkyOyJ8sZry8QLhQTmZjynLdA==", + "version": "0.542.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.542.0.tgz", + "integrity": "sha512-w3hD8/SQB7+lzU2r4VdFyzzOzKnUjTZIF/MQJGSSvni7Llewni4vuViRppfRAa2guOsY5k4jZyxw/i9DQHv+dw==", "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -15434,9 +15466,9 @@ } }, "node_modules/zudoku/node_modules/zustand": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.6.tgz", - "integrity": "sha512-ihAqNeUVhe0MAD+X8M5UzqyZ9k3FFZLBTtqo6JLPwV53cbRB/mJwBI0PxcIgqhBBHlEs8G45OTDTMq3gNcLq3A==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.8.tgz", + "integrity": "sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==", "license": "MIT", "engines": { "node": ">=12.20.0" diff --git a/package.json b/package.json index 017346330..d88d1dcfe 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "lucide-react": "^0.516.0", "react": "^19.0.0", "react-dom": "^19.0.0", - "zudoku": "^0.60.1" + "zudoku": "^0.61.4" }, "devDependencies": { "@types/json-schema": "7.0.15", diff --git a/sidebar.ts b/sidebar.ts index 638cfd4d7..7662eba20 100644 --- a/sidebar.ts +++ b/sidebar.ts @@ -88,11 +88,6 @@ export const docs: Navigation = [ "articles/testing", ], }, - { - type: "category", - label: "AI", - items: ["ai/mcp"], - }, { type: "category", label: "Observability", @@ -347,6 +342,74 @@ export const docs: Navigation = [ }, ]; +export const ai: Navigation = [ + { + type: "category", + label: "Introduction", + items: ["ai/overview", "ai/features"], + collapsed: false, + }, + { + type: "category", + label: "AI Gateway", + items: [ + "ai/gateway/overview", + "ai/gateway/getting-started", + "ai/gateway/universal-api", + "ai/gateway/information-architecture", + { + type: "category", + label: "Providers", + items: [ + "ai/gateway/providers", + "ai/gateway/managing-providers", + "ai/gateway/provider-openai", + "ai/gateway/provider-anthropic", + "ai/gateway/provider-google", + "ai/gateway/provider-minstral", + ], + }, + { + type: "category", + label: "Teams", + items: [ + "ai/gateway/teams", + "ai/gateway/managing-teams", + "ai/gateway/usage-limits", + ], + }, + { + type: "category", + label: "Apps", + items: ["ai/gateway/apps"], + }, + ], + collapsed: false, + }, + { + type: "category", + label: "MCP Server", + items: [ + "ai/mcp-server/overview", + "ai/mcp-server/getting-started", + { + type: "link", + icon: "square-code", + label: "Handler", + target: "_self", + to: "https://zuplo.com/docs/handlers/mcp-server", + }, + ], + collapsed: false, + }, + + { + type: "category", + label: "Guardrails", + items: ["ai/guardrails"], + }, +]; + export const programming: Navigation = [ { type: "doc", diff --git a/zudoku.config.tsx b/zudoku.config.tsx index 4f9ac2e38..2dfb4afc6 100644 --- a/zudoku.config.tsx +++ b/zudoku.config.tsx @@ -1,5 +1,5 @@ import type { ZudokuConfig, ZudokuPlugin } from "zudoku"; -import { devPortal, docs, policies, programming } from "./sidebar.js"; +import { ai, devPortal, docs, policies, programming } from "./sidebar.js"; import { mdxComponents } from "./src/components.js"; import { HeadNavigation } from "./src/HeadNavigation"; import "./src/diagrams.css"; @@ -102,6 +102,11 @@ posthog.init('phc_xB1aydh7a41MW9TwUtLJjKme4izQiWf9zKbKhpysAiW', { person_profile label: "Documentation", items: docs, }, + { + type: "category", + label: "AI", + items: ai, + }, { type: "category", label: "Policies & Handlers",