better-design 0.7.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../shared/src/mcp/clients.ts","../src/setup/clients.ts","../src/setup/constants.ts","../src/setup/fs-utils.ts","../src/setup/config-writer.ts","../src/setup/rule-writer.ts","../src/setup/args.ts","../src/setup/prompts.ts","../src/setup/index.ts","../../shared/src/mcp/instructions.ts","../../shared/src/mcp/icon-installer.ts","../../shared/src/mcp/guardrails.ts","../../shared/src/mcp/preview-widget-sdk.generated.ts","../../shared/src/mcp/preview-html.ts","../../shared/src/foundational-docs/topic-utils.ts","../../shared/src/mcp/tools.ts","../../shared/src/mcp/index.ts","../src/lib/api-client.ts","../src/lib/http-data-provider.ts","../src/index.ts"],"sourcesContent":["/**\n * Single source of truth for how Better Design's MCP server is configured in\n * each client: the server name, the remote endpoint, and the per-client config\n * shape (root key + entry, TOML block, dedicated file, or CLI command).\n *\n * Consumed by BOTH:\n * - the `better-design-mcp setup` CLI (packages/mcp/src/setup/clients.ts),\n * which adds OS config paths + detection on top of these shapes, and\n * - the website install pages (packages/web/.../mcp/install/_clients.tsx),\n * which add presentation (logo, copy, deeplinks) on top of these shapes.\n *\n * Keep config SHAPES here only. Paths/detection are CLI-only; presentation is\n * web-only. A drift guard test asserts both consumers agree with this file.\n */\n\nexport const MCP_NAME = \"better-design\";\n\n// One env convention for both surfaces. NEXT_PUBLIC_APP_URL wins first so the\n// web install snippets keep their original behaviour even in a build env that\n// also has BETTER_DESIGN_API_URL set; the CLI (Node, no NEXT_PUBLIC_APP_URL)\n// still overrides via BETTER_DESIGN_API_URL. `||` (not `??`) so an empty-string\n// env value falls through to prod instead of producing a broken \"/api/mcp\".\nconst API_BASE =\n process.env.NEXT_PUBLIC_APP_URL ||\n process.env.BETTER_DESIGN_API_URL ||\n \"https://better-design.com\";\n\nexport const MCP_URL = `${API_BASE}/api/mcp`;\n\nconst bearer = (apiKey: string) => ({ Authorization: `Bearer ${apiKey}` });\n\n/** Scope of an install: user/global vs the current project. */\nexport type McpScope = \"global\" | \"project\";\n\nexport interface JsonShape {\n kind: \"json\";\n /** Top-level key the server entry nests under (e.g. \"mcpServers\", \"servers\"). */\n rootKey: string;\n buildEntry: (apiKey: string) => Record<string, unknown>;\n}\nexport interface TomlShape {\n kind: \"toml\";\n /** The `[header]` line that identifies our block for idempotent replace. */\n blockHeader: string;\n buildBlock: (apiKey: string) => string;\n}\nexport interface FileShape {\n kind: \"file\";\n buildContent: (apiKey: string) => string;\n}\nexport interface CommandShape {\n kind: \"command\";\n buildCommand: (apiKey: string, scope: McpScope) => { bin: string; args: string[] };\n buildRemoveCommand: (scope: McpScope) => { bin: string; args: string[] };\n}\n\nexport type McpClientShape = JsonShape | TomlShape | FileShape | CommandShape;\n\nexport const MCP_CLIENT_SHAPES = {\n \"claude-code\": {\n kind: \"command\",\n buildCommand: (apiKey, scope) => ({\n bin: \"claude\",\n args: [\n \"mcp\",\n \"add\",\n \"--scope\",\n scope === \"global\" ? \"user\" : \"project\",\n MCP_NAME,\n \"--transport\",\n \"http\",\n MCP_URL,\n \"--header\",\n `Authorization: Bearer ${apiKey}`,\n ],\n }),\n buildRemoveCommand: (scope) => ({\n bin: \"claude\",\n args: [\"mcp\", \"remove\", \"--scope\", scope === \"global\" ? \"user\" : \"project\", MCP_NAME],\n }),\n },\n cursor: {\n kind: \"json\",\n rootKey: \"mcpServers\",\n buildEntry: (apiKey) => ({ url: MCP_URL, headers: bearer(apiKey) }),\n },\n vscode: {\n kind: \"json\",\n rootKey: \"servers\",\n buildEntry: (apiKey) => ({ type: \"http\", url: MCP_URL, headers: bearer(apiKey) }),\n },\n windsurf: {\n kind: \"json\",\n rootKey: \"mcpServers\",\n buildEntry: (apiKey) => ({ serverUrl: MCP_URL, headers: bearer(apiKey) }),\n },\n zed: {\n kind: \"json\",\n rootKey: \"context_servers\",\n buildEntry: (apiKey) => ({ url: MCP_URL, headers: bearer(apiKey) }),\n },\n cline: {\n kind: \"json\",\n rootKey: \"mcpServers\",\n buildEntry: (apiKey) => ({\n type: \"streamableHttp\",\n url: MCP_URL,\n headers: bearer(apiKey),\n disabled: false,\n }),\n },\n \"claude-desktop\": {\n kind: \"json\",\n rootKey: \"mcpServers\",\n // Claude Desktop only launches stdio processes, so a key-based remote MCP\n // runs through the mcp-remote npx bridge.\n buildEntry: (apiKey) => ({\n command: \"npx\",\n args: [\"-y\", \"mcp-remote\", MCP_URL, \"--header\", \"Authorization:${AUTH_HEADER}\"],\n env: { AUTH_HEADER: `Bearer ${apiKey}` },\n }),\n },\n opencode: {\n kind: \"json\",\n rootKey: \"mcp\",\n buildEntry: (apiKey) => ({\n type: \"remote\",\n url: MCP_URL,\n enabled: true,\n headers: bearer(apiKey),\n }),\n },\n amp: {\n kind: \"json\",\n rootKey: \"amp.mcpServers\",\n buildEntry: (apiKey) => ({ url: MCP_URL, headers: bearer(apiKey) }),\n },\n codex: {\n kind: \"toml\",\n blockHeader: `[mcp_servers.${MCP_NAME}]`,\n buildBlock: (apiKey) =>\n `[mcp_servers.${MCP_NAME}]\\nurl = \"${MCP_URL}\"\\nhttp_headers = { Authorization = \"Bearer ${apiKey}\" }`,\n },\n continue: {\n kind: \"file\",\n buildContent: (apiKey) =>\n `name: Better Design MCP\\nversion: 0.0.1\\nschema: v1\\nmcpServers:\\n - name: ${MCP_NAME}\\n type: streamable-http\\n url: ${MCP_URL}\\n requestOptions:\\n headers:\\n Authorization: \"Bearer ${apiKey}\"\\n`,\n },\n} satisfies Record<string, McpClientShape>;\n\nexport type McpClientId = keyof typeof MCP_CLIENT_SHAPES;\n\n/** Serialize a JSON-shaped client's config the way both surfaces present/write it. */\nexport function jsonConfigString(shape: JsonShape, apiKey: string): string {\n return JSON.stringify({ [shape.rootKey]: { [MCP_NAME]: shape.buildEntry(apiKey) } }, null, 2);\n}\n\n/** Render a command-shaped client as a copy-paste shell string (quoting args with spaces). */\nexport function commandConfigString(shape: CommandShape, apiKey: string, scope: McpScope): string {\n const { bin, args } = shape.buildCommand(apiKey, scope);\n const quoted = args.map((arg) => (arg.includes(\" \") ? `\"${arg}\"` : arg));\n return `${bin} ${quoted.join(\" \")}`;\n}\n","/**\n * Registry of MCP clients the installer can configure.\n *\n * The config ENTRY shapes (url + Authorization header, root keys, the\n * mcp-remote bridge, the `claude mcp add` command) come from the single source\n * of truth in @better-design/shared/mcp/clients (shared with the website\n * install pages). This file adds the CLI-only layer on top: the on-disk config\n * path per OS (`pathFor`) and installed-client detection (`detect`).\n */\n\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { existsSync } from \"node:fs\";\n\nimport { MCP_CLIENT_SHAPES } from \"@better-design/shared/mcp/clients\";\n\nexport type Scope = \"global\" | \"project\";\n\ntype Platform = \"darwin\" | \"win32\" | \"linux\";\n\nfunction platform(): Platform {\n const p = os.platform();\n if (p === \"darwin\" || p === \"win32\") return p;\n return \"linux\";\n}\n\nconst home = os.homedir();\n\n/** Windows %APPDATA% (roaming), falling back to a sensible default. */\nfunction appData(): string {\n return process.env.APPDATA ?? path.join(home, \"AppData\", \"Roaming\");\n}\n\n/** XDG config home (~/.config on macOS/Linux). */\nfunction configHome(): string {\n return process.env.XDG_CONFIG_HOME ?? path.join(home, \".config\");\n}\n\n/** macOS \"Application Support\" / Windows %APPDATA% / Linux ~/.config. */\nfunction appSupport(): string {\n switch (platform()) {\n case \"darwin\":\n return path.join(home, \"Library\", \"Application Support\");\n case \"win32\":\n return appData();\n default:\n return configHome();\n }\n}\n\n/** A client whose config is a JSON object we merge a server entry into. */\nexport interface JsonClient {\n id: string;\n label: string;\n kind: \"json\";\n /** Top-level key the server entry nests under (e.g. \"mcpServers\", \"servers\"). */\n rootKey: string;\n /** Build the per-server config value written under rootKey[MCP_NAME]. */\n buildEntry: (apiKey: string) => Record<string, unknown>;\n /** Absolute config path per scope, or null if the scope is unsupported. */\n pathFor: (scope: Scope) => string | null;\n scopes: Scope[];\n /** True when the client appears installed on this machine. */\n detect: () => boolean;\n}\n\n/** A client configured by shelling out to its own CLI (e.g. `claude mcp add`). */\nexport interface CommandClient {\n id: string;\n label: string;\n kind: \"command\";\n /** argv for the install command, run only when `bin` resolves on PATH. */\n buildCommand: (apiKey: string, scope: Scope) => { bin: string; args: string[] };\n /** argv to remove a prior entry first, so re-running the install is idempotent. */\n buildRemoveCommand?: (scope: Scope) => { bin: string; args: string[] };\n scopes: Scope[];\n detect: () => boolean;\n}\n\n/** A client that owns a dedicated single file we write verbatim (e.g. Continue YAML). */\nexport interface FileClient {\n id: string;\n label: string;\n kind: \"file\";\n buildContent: (apiKey: string) => string;\n pathFor: (scope: Scope) => string | null;\n scopes: Scope[];\n detect: () => boolean;\n}\n\n/** A client whose config is TOML; we replace/append a single named block. */\nexport interface TomlClient {\n id: string;\n label: string;\n kind: \"toml\";\n /** The `[header]` line that identifies our block for idempotent replace. */\n blockHeader: string;\n buildBlock: (apiKey: string) => string;\n pathFor: (scope: Scope) => string | null;\n scopes: Scope[];\n detect: () => boolean;\n}\n\nexport type Client = JsonClient | CommandClient | FileClient | TomlClient;\n\nfunction dirExists(...segments: string[]): boolean {\n return existsSync(path.join(...segments));\n}\n\n/** Resolve a binary on PATH (best-effort, sync, no spawn). */\nfunction onPath(bin: string): boolean {\n const dirs = (process.env.PATH ?? \"\").split(path.delimiter);\n const exts = platform() === \"win32\" ? [\"\", \".exe\", \".cmd\", \".bat\"] : [\"\"];\n return dirs.some((d) => d && exts.some((ext) => existsSync(path.join(d, bin + ext))));\n}\n\n// Each entry = the shared config shape (what to write) + CLI-only path/detection.\nexport const CLIENTS: Client[] = [\n {\n ...MCP_CLIENT_SHAPES[\"claude-code\"],\n id: \"claude-code\",\n label: \"Claude Code\",\n scopes: [\"global\", \"project\"],\n detect: () => onPath(\"claude\"),\n },\n {\n ...MCP_CLIENT_SHAPES.cursor,\n id: \"cursor\",\n label: \"Cursor\",\n scopes: [\"global\", \"project\"],\n pathFor: (scope) =>\n scope === \"global\"\n ? path.join(home, \".cursor\", \"mcp.json\")\n : path.join(process.cwd(), \".cursor\", \"mcp.json\"),\n detect: () => dirExists(home, \".cursor\"),\n },\n {\n ...MCP_CLIENT_SHAPES.vscode,\n id: \"vscode\",\n label: \"VS Code (Copilot)\",\n scopes: [\"global\", \"project\"],\n pathFor: (scope) =>\n scope === \"global\"\n ? path.join(appSupport(), \"Code\", \"User\", \"mcp.json\")\n : path.join(process.cwd(), \".vscode\", \"mcp.json\"),\n detect: () => dirExists(appSupport(), \"Code\") || onPath(\"code\"),\n },\n {\n ...MCP_CLIENT_SHAPES.windsurf,\n id: \"windsurf\",\n label: \"Windsurf\",\n scopes: [\"global\"],\n pathFor: (scope) =>\n scope === \"global\" ? path.join(home, \".codeium\", \"windsurf\", \"mcp_config.json\") : null,\n detect: () => dirExists(home, \".codeium\", \"windsurf\"),\n },\n {\n ...MCP_CLIENT_SHAPES.zed,\n id: \"zed\",\n label: \"Zed\",\n scopes: [\"global\"],\n pathFor: (scope) =>\n scope === \"global\"\n ? platform() === \"win32\"\n ? path.join(appData(), \"Zed\", \"settings.json\")\n : path.join(configHome(), \"zed\", \"settings.json\")\n : null,\n detect: () =>\n dirExists(configHome(), \"zed\") || dirExists(appSupport(), \"Zed\") || onPath(\"zed\"),\n },\n {\n ...MCP_CLIENT_SHAPES.cline,\n id: \"cline\",\n label: \"Cline (VS Code)\",\n scopes: [\"global\"],\n pathFor: (scope) =>\n scope === \"global\"\n ? path.join(\n appSupport(),\n \"Code\",\n \"User\",\n \"globalStorage\",\n \"saoudrizwan.claude-dev\",\n \"settings\",\n \"cline_mcp_settings.json\",\n )\n : null,\n detect: () =>\n dirExists(appSupport(), \"Code\", \"User\", \"globalStorage\", \"saoudrizwan.claude-dev\"),\n },\n {\n ...MCP_CLIENT_SHAPES[\"claude-desktop\"],\n id: \"claude-desktop\",\n label: \"Claude Desktop\",\n scopes: [\"global\"],\n pathFor: (scope) =>\n scope === \"global\"\n ? platform() === \"linux\"\n ? path.join(configHome(), \"Claude\", \"claude_desktop_config.json\")\n : path.join(appSupport(), \"Claude\", \"claude_desktop_config.json\")\n : null,\n detect: () =>\n platform() === \"linux\"\n ? dirExists(configHome(), \"Claude\")\n : dirExists(appSupport(), \"Claude\"),\n },\n {\n ...MCP_CLIENT_SHAPES.opencode,\n id: \"opencode\",\n label: \"OpenCode\",\n scopes: [\"global\", \"project\"],\n pathFor: (scope) =>\n scope === \"global\"\n ? path.join(configHome(), \"opencode\", \"opencode.json\")\n : path.join(process.cwd(), \"opencode.json\"),\n detect: () => dirExists(configHome(), \"opencode\") || onPath(\"opencode\"),\n },\n {\n ...MCP_CLIENT_SHAPES.amp,\n id: \"amp\",\n label: \"Amp (Sourcegraph)\",\n scopes: [\"global\"],\n pathFor: (scope) =>\n scope === \"global\" ? path.join(configHome(), \"amp\", \"settings.json\") : null,\n detect: () => dirExists(configHome(), \"amp\") || onPath(\"amp\"),\n },\n {\n ...MCP_CLIENT_SHAPES.codex,\n id: \"codex\",\n label: \"Codex CLI\",\n scopes: [\"global\"],\n pathFor: (scope) =>\n scope === \"global\" ? path.join(home, \".codex\", \"config.toml\") : null,\n detect: () => dirExists(home, \".codex\") || onPath(\"codex\"),\n },\n {\n ...MCP_CLIENT_SHAPES.continue,\n id: \"continue\",\n label: \"Continue.dev\",\n scopes: [\"project\"],\n pathFor: (scope) =>\n scope === \"project\"\n ? path.join(process.cwd(), \".continue\", \"mcpServers\", \"better-design.yaml\")\n : null,\n detect: () => dirExists(home, \".continue\") || dirExists(process.cwd(), \".continue\"),\n },\n];\n\nexport function clientById(id: string): Client | undefined {\n return CLIENTS.find((c) => c.id === id);\n}\n\n/** Clients that appear installed on this machine. */\nexport function detectInstalled(): Client[] {\n return CLIENTS.filter((c) => {\n try {\n return c.detect();\n } catch {\n return false;\n }\n });\n}\n","/**\n * Constants for the `better-design-mcp setup` installer.\n *\n * MCP_NAME / MCP_URL and the per-client config shapes live in\n * @better-design/shared/mcp/clients (the single source of truth shared with the\n * website install pages). Re-exported here for the installer's local imports.\n */\n\nexport { MCP_NAME, MCP_URL } from \"@better-design/shared/mcp/clients\";\n\nexport const DASHBOARD_URL = \"https://better-design.com/mcp\";\n\n/** Marker fences so the rule block can be found, replaced, or removed idempotently. */\nexport const RULE_START = \"<!-- better-design:start -->\";\nexport const RULE_END = \"<!-- better-design:end -->\";\n\n/** The auto-invoke rule written into CLAUDE.md / client rules files. */\nexport const RULE_BODY = `## Better Design\n\nAlways use the Better Design MCP tools for any frontend, UI, UX, interaction, flow, form, navigation, dialog, error, onboarding, component, or styling work, without me having to explicitly ask. Load visual guidance with \\`get-ui-principle\\`, load flow/behavior guidance with \\`get-ux-principle\\`, and self-review against \\`get-review-rules\\` after. Use \\`resolve-design-system\\` / \\`get-design-system-docs\\` to install a design system and \\`create-design-system\\` to generate a custom one.`;\n\nexport const RULE_BLOCK = `${RULE_START}\\n${RULE_BODY}\\n${RULE_END}`;\n","/** Filesystem helpers shared by the config and rule writers. */\n\nimport { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport function ensureDir(filePath: string): void {\n mkdirSync(path.dirname(filePath), { recursive: true });\n}\n\nexport function readIfExists(filePath: string): string | null {\n return existsSync(filePath) ? readFileSync(filePath, \"utf8\") : null;\n}\n\nconst BACKUP_DIR = path.join(os.homedir(), \".better-design\", \"backups\");\n\n/**\n * Back up a file before we modify it. Backups live in ~/.better-design/backups\n * (not next to the original) so project-scope edits don't litter the repo, and\n * are keyed by the original path so each file keeps exactly one backup.\n */\nexport function backup(filePath: string): string {\n const dest = path.join(BACKUP_DIR, `${filePath.replace(/[/\\\\:]/g, \"__\")}.bak`);\n mkdirSync(BACKUP_DIR, { recursive: true });\n // Create the backup owner-only from the start (no copy-then-chmod window where\n // a bearer token would be world-readable), then chmod to also cover overwrites.\n writeFileSync(dest, readFileSync(filePath), { mode: 0o600 });\n chmodSync(dest, 0o600);\n return dest;\n}\n","/**\n * Reads, backs up, merges, and writes MCP client config files.\n *\n * Core guarantee: never clobber a user's OTHER servers. JSON files are parsed\n * and merged (a pre-existing better-design entry is replaced on re-run); on a\n * parse failure (e.g. a config with comments) we skip the write and hand back\n * a manual snippet instead of risking corruption.\n */\n\nimport { chmodSync, writeFileSync } from \"node:fs\";\nimport { spawnSync } from \"node:child_process\";\n\nimport { MCP_NAME } from \"./constants.js\";\nimport type { Client, Scope } from \"./clients.js\";\nimport { backup, ensureDir, readIfExists } from \"./fs-utils.js\";\n\n/** External commands shouldn't hang the installer. */\nconst COMMAND_TIMEOUT_MS = 60_000;\n\n/**\n * Write a config file that holds a bearer token, then force owner-only perms.\n * The `mode` write option only applies when CREATING a file, so we chmod after\n * to also lock down a pre-existing world-readable config we just rewrote.\n */\nfunction writeSecret(filePath: string, data: string): void {\n writeFileSync(filePath, data, { encoding: \"utf8\", mode: 0o600 });\n chmodSync(filePath, 0o600);\n}\n\nexport type WriteAction =\n | \"added\"\n | \"updated\"\n | \"would-write\"\n | \"skipped\"\n | \"manual\"\n | \"error\";\n\nexport interface WriteResult {\n client: string;\n action: WriteAction;\n filePath?: string;\n /** Detail shown to the user (manual snippet, error reason, etc.). */\n message?: string;\n}\n\n/** Skipped result for a client that has no config path at this scope. */\nfunction noPath(clientId: string, scope: Scope): WriteResult {\n return { client: clientId, action: \"skipped\", message: `no ${scope} config path` };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n// ─── JSON clients ──────────────────────────────────────────────────────────\n\nfunction applyJsonClient(\n client: Extract<Client, { kind: \"json\" }>,\n apiKey: string,\n scope: Scope,\n dryRun: boolean,\n): WriteResult {\n const filePath = client.pathFor(scope);\n if (!filePath) return noPath(client.id, scope);\n\n const entry = client.buildEntry(apiKey);\n const existing = readIfExists(filePath);\n\n const manual = (): WriteResult => ({\n client: client.id,\n action: \"manual\",\n filePath,\n message: manualJsonSnippet(client, entry),\n });\n\n let root: Record<string, unknown> = {};\n if (existing && existing.trim()) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(existing);\n } catch {\n // Config has comments/trailing commas or is malformed — don't risk it.\n return manual();\n }\n if (!isPlainObject(parsed)) return manual();\n root = parsed;\n }\n\n // Bail rather than clobber if the root key holds something other than an object.\n const rawBucket = root[client.rootKey];\n if (rawBucket !== undefined && !isPlainObject(rawBucket)) return manual();\n const bucket = (rawBucket as Record<string, unknown> | undefined) ?? {};\n const isUpdate = Object.prototype.hasOwnProperty.call(bucket, MCP_NAME);\n bucket[MCP_NAME] = entry;\n root[client.rootKey] = bucket;\n\n if (dryRun) {\n return { client: client.id, action: \"would-write\", filePath };\n }\n\n if (existing) backup(filePath);\n ensureDir(filePath);\n writeSecret(filePath, `${JSON.stringify(root, null, 2)}\\n`);\n return { client: client.id, action: isUpdate ? \"updated\" : \"added\", filePath };\n}\n\nfunction manualJsonSnippet(\n client: Extract<Client, { kind: \"json\" }>,\n entry: Record<string, unknown>,\n): string {\n const snippet = { [client.rootKey]: { [MCP_NAME]: entry } };\n return `Couldn't safely auto-edit (file has comments or invalid JSON). Add this manually:\\n${JSON.stringify(snippet, null, 2)}`;\n}\n\n// ─── TOML clients (block replace/append) ─────────────────────────────────────\n\nfunction applyTomlClient(\n client: Extract<Client, { kind: \"toml\" }>,\n apiKey: string,\n scope: Scope,\n dryRun: boolean,\n): WriteResult {\n const filePath = client.pathFor(scope);\n if (!filePath) return noPath(client.id, scope);\n\n const block = client.buildBlock(apiKey);\n const existing = readIfExists(filePath) ?? \"\";\n const next = upsertTomlBlock(existing, client.blockHeader, block);\n const isUpdate = existing.includes(client.blockHeader);\n\n if (dryRun) {\n return { client: client.id, action: \"would-write\", filePath };\n }\n\n if (existing) backup(filePath);\n ensureDir(filePath);\n writeSecret(filePath, next);\n return { client: client.id, action: isUpdate ? \"updated\" : \"added\", filePath };\n}\n\n/** Replace an existing `[header]` section in-place, else append it. */\nfunction upsertTomlBlock(content: string, header: string, block: string): string {\n const lines = content.split(\"\\n\");\n const start = lines.findIndex((l) => l.trim() === header);\n\n if (start === -1) {\n const base = content.trimEnd();\n return base ? `${base}\\n\\n${block}\\n` : `${block}\\n`;\n }\n\n let end = start + 1;\n while (end < lines.length && !lines[end].trimStart().startsWith(\"[\")) end++;\n const before = lines.slice(0, start).join(\"\\n\").trimEnd();\n const after = lines.slice(end).join(\"\\n\").trimStart();\n return [before, block, after].filter((s) => s.length > 0).join(\"\\n\\n\").trimEnd() + \"\\n\";\n}\n\n// ─── Dedicated-file clients (e.g. Continue YAML) ─────────────────────────────\n\nfunction applyFileClient(\n client: Extract<Client, { kind: \"file\" }>,\n apiKey: string,\n scope: Scope,\n dryRun: boolean,\n): WriteResult {\n const filePath = client.pathFor(scope);\n if (!filePath) return noPath(client.id, scope);\n\n const content = client.buildContent(apiKey);\n const existing = readIfExists(filePath);\n if (existing === content) {\n return { client: client.id, action: \"skipped\", filePath, message: \"already configured\" };\n }\n\n if (dryRun) {\n return { client: client.id, action: \"would-write\", filePath };\n }\n\n if (existing) backup(filePath);\n ensureDir(filePath);\n writeSecret(filePath, content);\n return { client: client.id, action: existing ? \"updated\" : \"added\", filePath };\n}\n\n// ─── Command clients (e.g. `claude mcp add`) ─────────────────────────────────\n\nfunction applyCommandClient(\n client: Extract<Client, { kind: \"command\" }>,\n apiKey: string,\n scope: Scope,\n dryRun: boolean,\n): WriteResult {\n const { bin, args } = client.buildCommand(apiKey, scope);\n\n if (dryRun) {\n // Never echo the bearer token in the preview.\n return { client: client.id, action: \"would-write\", message: `${bin} ${redactArgs(args).join(\" \")}` };\n }\n\n // `claude mcp add` rejects a duplicate name, so drop any existing entry first\n // (ignoring failure when there is nothing to remove) to make re-runs idempotent.\n const remove = client.buildRemoveCommand?.(scope);\n if (remove) spawnSync(remove.bin, remove.args, { encoding: \"utf8\", timeout: COMMAND_TIMEOUT_MS });\n\n const res = spawnSync(bin, args, { encoding: \"utf8\", timeout: COMMAND_TIMEOUT_MS });\n if (res.error || res.status !== 0) {\n const reason = res.error?.message ?? res.stderr?.trim() ?? `exit ${res.status}`;\n return { client: client.id, action: \"error\", message: reason };\n }\n return { client: client.id, action: \"added\", message: `${bin} mcp add` };\n}\n\n/** Mask any Authorization arg so the API key never appears in previews/logs. */\nfunction redactArgs(args: string[]): string[] {\n return args.map((a) => (/^Authorization:/i.test(a) ? \"Authorization: Bearer ***\" : a));\n}\n\n// ─── Dispatch ────────────────────────────────────────────────────────────────\n\nexport function applyClient(\n client: Client,\n apiKey: string,\n scope: Scope,\n dryRun: boolean,\n): WriteResult {\n try {\n switch (client.kind) {\n case \"json\":\n return applyJsonClient(client, apiKey, scope, dryRun);\n case \"toml\":\n return applyTomlClient(client, apiKey, scope, dryRun);\n case \"file\":\n return applyFileClient(client, apiKey, scope, dryRun);\n case \"command\":\n return applyCommandClient(client, apiKey, scope, dryRun);\n }\n } catch (err) {\n return {\n client: client.id,\n action: \"error\",\n message: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\n/** The scope to use for a client: the requested one if supported, else its first. */\nexport function resolveScope(client: Client, requested: Scope): Scope {\n return client.scopes.includes(requested) ? requested : client.scopes[0];\n}\n","/**\n * Writes the auto-invoke rule into the file each client reads: CLAUDE.md for\n * Claude Code, AGENTS.md for the cross-tool clients, .continue/rules for\n * Continue. This is the trigger mechanism: MCP server instructions alone are\n * unreliable across clients (truncated / dropped by several hosts).\n *\n * The block is fenced with markers so re-running setup updates it in place\n * instead of appending duplicates.\n */\n\nimport { writeFileSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { RULE_BLOCK, RULE_END, RULE_START } from \"./constants.js\";\nimport type { Scope } from \"./clients.js\";\nimport { backup, ensureDir, readIfExists } from \"./fs-utils.js\";\n\nexport interface RuleResult {\n filePath: string;\n action: \"added\" | \"updated\" | \"would-write\" | \"skipped\";\n message?: string;\n}\n\n/** Clients that read the cross-tool AGENTS.md standard from the project root. */\nconst AGENTS_MD_CLIENTS = new Set([\n \"cursor\",\n \"vscode\",\n \"windsurf\",\n \"zed\",\n \"cline\",\n \"amp\",\n \"opencode\",\n]);\n\nexport interface RulePlan {\n /** Rule files to write (deduped). */\n files: string[];\n /** Clients whose rule lives in a settings UI, not a file we can write. */\n manual: string[];\n}\n\n/**\n * The rule file a client reads at a given scope, or null when it has no\n * writable rule file there (e.g. global rules configured in a settings UI).\n *\n * Claude Code reads CLAUDE.md only; everything else in AGENTS_MD_CLIENTS reads\n * the cross-tool AGENTS.md. Codex and Claude Code are the only clients with a\n * writable GLOBAL rule file. Continue uses its own .continue/rules directory.\n */\nfunction ruleFileFor(clientId: string, scope: Scope): string | null {\n const cwd = process.cwd();\n const home = os.homedir();\n\n switch (clientId) {\n case \"claude-code\":\n return scope === \"global\"\n ? path.join(home, \".claude\", \"CLAUDE.md\")\n : path.join(cwd, \"CLAUDE.md\");\n case \"codex\":\n return scope === \"global\"\n ? path.join(home, \".codex\", \"AGENTS.md\")\n : path.join(cwd, \"AGENTS.md\");\n case \"continue\":\n return scope === \"project\"\n ? path.join(cwd, \".continue\", \"rules\", \"better-design.md\")\n : null;\n case \"claude-desktop\":\n return null; // desktop app, no project rule file\n default:\n return AGENTS_MD_CLIENTS.has(clientId) && scope === \"project\"\n ? path.join(cwd, \"AGENTS.md\")\n : null;\n }\n}\n\n/** Resolve which rule files to write and which clients need a manual step. */\nexport function ruleTargets(selectedClientIds: string[], scope: Scope): RulePlan {\n const files = new Set<string>();\n const manual: string[] = [];\n\n for (const id of selectedClientIds) {\n const file = ruleFileFor(id, scope);\n if (file) files.add(file);\n else if (id !== \"claude-desktop\") manual.push(id);\n }\n\n return { files: [...files], manual };\n}\n\n/** Insert or replace the fenced rule block, preserving surrounding content. */\nfunction upsertBlock(content: string, start: number, end: number): string {\n const before = start === -1 ? content : content.slice(0, start);\n const after = start === -1 ? \"\" : content.slice(end + RULE_END.length);\n return [before.trim(), RULE_BLOCK, after.trim()].filter(Boolean).join(\"\\n\\n\") + \"\\n\";\n}\n\nexport function writeRule(filePath: string, dryRun: boolean): RuleResult {\n const existing = readIfExists(filePath) ?? \"\";\n const start = existing.indexOf(RULE_START);\n const end = start === -1 ? -1 : existing.indexOf(RULE_END, start);\n\n // Start marker without a matching end = hand-edited/corrupted. Don't risk\n // truncating everything after it; leave the file untouched.\n if (start !== -1 && end === -1) {\n return {\n filePath,\n action: \"skipped\",\n message: \"unterminated better-design marker; left unchanged\",\n };\n }\n\n if (dryRun) return { filePath, action: \"would-write\" };\n\n if (existing) backup(filePath);\n ensureDir(filePath);\n writeFileSync(filePath, upsertBlock(existing, start, end), \"utf8\");\n return { filePath, action: start === -1 ? \"added\" : \"updated\" };\n}\n","/** Parses argv for `better-design-mcp setup`. */\n\nimport type { Scope } from \"./clients.js\";\n\nexport interface SetupArgs {\n dryRun: boolean;\n yes: boolean;\n noRule: boolean;\n scope?: Scope;\n /** Explicit client ids (skips detection/picker) or undefined to auto-detect. */\n clients?: string[];\n apiKey?: string;\n help: boolean;\n}\n\nexport function parseArgs(argv: string[]): SetupArgs {\n const args: SetupArgs = { dryRun: false, yes: false, noRule: false, help: false };\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n // Consume the next token as a value only if it isn't another flag, so\n // `--api-key --dry-run` doesn't swallow `--dry-run` as the key.\n const takeValue = () => {\n const value = argv[i + 1];\n if (value === undefined || value.startsWith(\"-\")) return undefined;\n i++;\n return value;\n };\n\n switch (arg) {\n case \"--dry-run\":\n args.dryRun = true;\n break;\n case \"--yes\":\n case \"-y\":\n args.yes = true;\n break;\n case \"--no-rule\":\n args.noRule = true;\n break;\n case \"--global\":\n args.scope = \"global\";\n break;\n case \"--project\":\n args.scope = \"project\";\n break;\n case \"--client\":\n args.clients = (takeValue() ?? \"\").split(\",\").map((s) => s.trim()).filter(Boolean);\n break;\n case \"--api-key\":\n args.apiKey = takeValue();\n break;\n case \"--help\":\n case \"-h\":\n args.help = true;\n break;\n }\n }\n\n return args;\n}\n\nexport const HELP_TEXT = `better-design-mcp setup: configure Better Design in your AI clients\n\nUsage:\n npx better-design-mcp setup [options]\n\nOptions:\n --client <ids> Comma-separated client ids to configure (skips detection)\n e.g. claude-code,cursor,vscode\n --global Install at user/global scope (default)\n --project Install at project scope (current directory)\n --api-key <key> API key (else \\$BETTER_DESIGN_API_KEY or prompt)\n --no-rule Don't write the auto-invoke rule (CLAUDE.md / AGENTS.md)\n --dry-run Show what would change without writing\n --yes, -y Non-interactive; use detected clients and defaults\n --help, -h Show this help\n\nGet an API key at https://better-design.com/mcp`;\n","/** Thin wrapper over @clack/prompts that turns Ctrl-C / cancel into a clean exit. */\n\nimport * as clack from \"@clack/prompts\";\n\nexport { clack };\n\n/** Unwrap a prompt result, exiting cleanly if the user cancelled. */\nexport function ensure<T>(value: T | symbol): T {\n if (clack.isCancel(value)) {\n clack.cancel(\"Setup cancelled.\");\n process.exit(0);\n }\n return value as T;\n}\n","/**\n * `better-design-mcp setup` — interactive installer.\n *\n * Detects installed MCP clients, writes the Better Design server config into\n * each chosen client (merge-safe, backed up), and drops an auto-invoke rule\n * into CLAUDE.md so agents reach for Better Design on UI work automatically.\n */\n\nimport { CLIENTS, clientById, detectInstalled, type Client, type Scope } from \"./clients.js\";\nimport { applyClient, resolveScope, type WriteResult } from \"./config-writer.js\";\nimport { ruleTargets, writeRule } from \"./rule-writer.js\";\nimport { parseArgs, HELP_TEXT, type SetupArgs } from \"./args.js\";\nimport { clack, ensure } from \"./prompts.js\";\nimport { DASHBOARD_URL } from \"./constants.js\";\n\nexport async function runSetup(argv: string[]): Promise<void> {\n const args = parseArgs(argv);\n if (args.help) {\n console.log(HELP_TEXT);\n return;\n }\n\n const interactive = Boolean(process.stdin.isTTY) && !args.yes;\n\n clack.intro(\"Better Design setup\");\n if (args.dryRun) clack.log.info(\"Dry run: no files will be written.\");\n\n const apiKey = await getApiKey(args, interactive);\n const clients = await pickClients(args, interactive);\n if (clients.length === 0) {\n clack.outro(\"No clients selected. Run again or pass --client <ids>.\");\n process.exit(interactive ? 0 : 1);\n }\n const scope = await pickScope(args, interactive);\n\n const writeRuleChoice = args.noRule ? false : await confirmRule(interactive);\n\n const results = applyAll(clients, apiKey, scope, args.dryRun);\n const rulePlan = writeRuleChoice\n ? ruleTargets(clients.map((c) => c.id), scope)\n : { files: [], manual: [] };\n const ruleResults = rulePlan.files.map((f) => writeRule(f, args.dryRun));\n\n printSummary(results, ruleResults, rulePlan.manual, args);\n}\n\nasync function getApiKey(args: SetupArgs, interactive: boolean): Promise<string> {\n const fromFlag = args.apiKey ?? process.env.BETTER_DESIGN_API_KEY;\n if (fromFlag) return fromFlag.trim();\n if (!interactive) {\n clack.cancel(`No API key. Pass --api-key or set BETTER_DESIGN_API_KEY. Get one at ${DASHBOARD_URL}`);\n process.exit(1);\n }\n const key = ensure(\n await clack.password({\n message: `Paste your Better Design API key (get one at ${DASHBOARD_URL})`,\n validate: (v) => (v && v.trim().length > 0 ? undefined : \"API key is required\"),\n }),\n );\n return key.trim();\n}\n\nasync function pickClients(args: SetupArgs, interactive: boolean): Promise<Client[]> {\n if (args.clients) {\n return args.clients.map((id) => {\n const c = clientById(id);\n if (!c) {\n clack.cancel(`Unknown client \"${id}\". Known: ${CLIENTS.map((x) => x.id).join(\", \")}`);\n process.exit(1);\n }\n return c;\n });\n }\n\n const detected = detectInstalled();\n if (!interactive) return detected;\n\n const detectedIds = new Set(detected.map((c) => c.id));\n const selected = ensure(\n await clack.multiselect({\n message: \"Which clients should I configure?\",\n options: CLIENTS.map((c) => ({\n value: c.id,\n label: c.label,\n hint: detectedIds.has(c.id) ? \"detected\" : undefined,\n })),\n initialValues: detected.map((c) => c.id),\n required: true,\n }),\n );\n return (selected as string[]).map((id) => clientById(id)!);\n}\n\nasync function pickScope(args: SetupArgs, interactive: boolean): Promise<Scope> {\n if (args.scope) return args.scope;\n if (!interactive) return \"global\";\n return ensure(\n await clack.select({\n message: \"Install scope?\",\n options: [\n { value: \"global\" as Scope, label: \"Global\", hint: \"all projects\" },\n { value: \"project\" as Scope, label: \"Project\", hint: \"current directory only\" },\n ],\n initialValue: \"global\" as Scope,\n }),\n );\n}\n\nasync function confirmRule(interactive: boolean): Promise<boolean> {\n if (!interactive) return true;\n return ensure(\n await clack.confirm({\n message: \"Add an auto-invoke rule to CLAUDE.md so agents use Better Design for UI work?\",\n initialValue: true,\n }),\n );\n}\n\nfunction applyAll(clients: Client[], apiKey: string, scope: Scope, dryRun: boolean): WriteResult[] {\n const spinner = clack.spinner();\n spinner.start(dryRun ? \"Checking clients\" : \"Writing client configs\");\n const results = clients.map((c) => {\n const used = resolveScope(c, scope);\n const result = applyClient(c, apiKey, used, dryRun);\n if (used !== scope && !result.message) {\n result.message = `installed ${used} (only scope ${c.id} supports)`;\n }\n return result;\n });\n spinner.stop(dryRun ? \"Checked clients\" : \"Wrote client configs\");\n return results;\n}\n\nfunction printSummary(\n results: WriteResult[],\n ruleResults: { filePath: string; action: string; message?: string }[],\n ruleManual: string[],\n args: SetupArgs,\n): void {\n const lines = results.map((r) => formatLine(r.action, r.client, r.filePath, r.message));\n for (const rule of ruleResults) {\n lines.push(formatLine(rule.action, \"rule\", rule.filePath, rule.message));\n }\n for (const id of ruleManual) {\n lines.push(formatLine(\"manual\", `rule (${id})`, undefined, \"add it in this client's settings rules\"));\n }\n clack.note(lines.join(\"\\n\"), args.dryRun ? \"Would write\" : \"Summary\");\n\n // A skipped rule write means the auto-invoke trigger was NOT written — surface it.\n const failed =\n results.filter((r) => r.action === \"error\" || r.action === \"manual\").length +\n ruleResults.filter((r) => r.action === \"skipped\").length;\n if (args.dryRun) {\n clack.outro(\"Dry run complete. Re-run without --dry-run to apply.\");\n } else if (failed > 0) {\n clack.outro(\"Done with warnings. Resolve the items above, then restart your client.\");\n } else {\n clack.outro(\"Done. Restart your AI client to load the Better Design tools.\");\n }\n}\n\nfunction formatLine(action: string, label: string, filePath?: string, message?: string): string {\n let line = `${icon(action)} ${label}${filePath ? ` ${filePath}` : \"\"}`;\n if (message) {\n line += action === \"manual\" || action === \"error\" ? `\\n ${message}` : ` (${message})`;\n }\n return line;\n}\n\nfunction icon(action: string): string {\n switch (action) {\n case \"added\":\n case \"updated\":\n case \"would-write\":\n return \"✓\";\n case \"skipped\":\n return \"–\";\n default:\n return \"✗\";\n }\n}\n","// Kept under 2KB on purpose: Claude Code truncates MCP server instructions at\n// 2048 bytes, so the trigger sentence and core tool chain must come first.\n// Detailed per-tool guidance lives in each tool's own description (loaded on\n// demand), not here.\nexport const INSTRUCTIONS = `# Better Design\n\nUse these tools for ANY frontend, UI, component, or styling work, without being asked.\n\nAll tools (call by exact name): resolve-design-system, get-design-system-docs, preview-design-system (SHOW a system in-chat), create-design-system, check-design-system-status (poll after create), get-ui-principle, get-ux-principle, get-review-rules, resolve-icon-library, search-icons, install-icons, detect-icon-library.\n\n## Modifying or building UI\n1. Before visual styling, call get-ui-principle (hierarchy, spacing, typography, color, depth, images, polish, animation), or query.\n2. Before UX behavior, call get-ux-principle (forms, navigation, notifications, errors, dialogs, search, onboarding, microcopy, cognitive laws), or query.\n3. Write code with the project's existing design tokens and components. Semantic HTML, aria labels, keyboard nav, WCAG AA contrast (4.5:1 text, 3:1 large).\n4. After writing UI, call get-review-rules and fix every critical or serious accessibility/visual issue before presenting code.\n\n## Starting fresh, or when the user says \"use better-design\"\n1. resolve-design-system(query describing industry/personality/style) -> show matches, let the user pick.\n2. get-design-system-docs({ designSystemId }) -> run BOTH returned bash lines as-is in the project root. Installs globals.css + every component into components/ui/. Read installed files afterward; use only their tokens, never invented colors/spacing/radius.\n3. Icons: first read components/icons/.library.json; if present, detect-icon-library and reuse it. Otherwise resolve-icon-library -> search-icons -> install-icons({ libraryId, names }). Never runtime @iconify/react.\n4. Then follow the \"Modifying or building UI\" steps above.\n`.trim();\n","// Helpers for the `install-icons` MCP tool — fetch SVGs from the Iconify\n// public API and turn them into React component files the agent writes to\n// disk in the user's project.\n\nexport interface ParsedSvg {\n viewBox: string;\n body: string;\n}\n\n/**\n * SVG attributes that JSX requires in camelCase. Anything not in this list\n * we leave alone (it'll either already be camelCase or will be passed\n * through as a data-/aria-/xmlns: attribute which JSX accepts as-is).\n */\nconst KEBAB_TO_CAMEL_ATTRS: Record<string, string> = {\n \"stroke-width\": \"strokeWidth\",\n \"stroke-linecap\": \"strokeLinecap\",\n \"stroke-linejoin\": \"strokeLinejoin\",\n \"stroke-dasharray\": \"strokeDasharray\",\n \"stroke-dashoffset\": \"strokeDashoffset\",\n \"stroke-miterlimit\": \"strokeMiterlimit\",\n \"stroke-opacity\": \"strokeOpacity\",\n \"fill-opacity\": \"fillOpacity\",\n \"fill-rule\": \"fillRule\",\n \"clip-path\": \"clipPath\",\n \"clip-rule\": \"clipRule\",\n \"color-interpolation-filters\": \"colorInterpolationFilters\",\n \"flood-color\": \"floodColor\",\n \"flood-opacity\": \"floodOpacity\",\n \"stop-color\": \"stopColor\",\n \"stop-opacity\": \"stopOpacity\",\n \"text-anchor\": \"textAnchor\",\n \"vector-effect\": \"vectorEffect\",\n \"paint-order\": \"paintOrder\",\n \"shape-rendering\": \"shapeRendering\",\n};\n\n/**\n * Convert SVG attribute names from kebab-case to JSX-friendly camelCase so\n * the inlined body is valid React TSX.\n */\nexport function jsxifyAttrs(svgBody: string): string {\n let out = svgBody;\n for (const [from, to] of Object.entries(KEBAB_TO_CAMEL_ATTRS)) {\n out = out.replace(new RegExp(`\\\\b${from}=`, \"g\"), `${to}=`);\n }\n return out;\n}\n\n/**\n * Convert an Iconify icon name (kebab-case, may include a prefix) into a\n * PascalCase React component identifier with an \"Icon\" suffix.\n *\n * Examples:\n * home -> HomeIcon\n * arrow-left -> ArrowLeftIcon\n * tabler:arrow-left -> ArrowLeftIcon\n * brand-github -> BrandGithubIcon\n * 1-circle -> Icon1Circle (component names cannot start with a digit)\n */\nexport function toPascalCase(rawName: string): string {\n const stripped = stripPrefix(rawName);\n const parts = stripped\n .split(/[-_]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1));\n const joined = parts.join(\"\");\n const safe = /^[0-9]/.test(joined) ? `Icon${joined}` : `${joined}Icon`;\n return safe;\n}\n\n/**\n * Strip an Iconify prefix (`tabler:`, `phosphor:`, etc.) from an icon name.\n */\nexport function stripPrefix(name: string): string {\n const idx = name.indexOf(\":\");\n return idx === -1 ? name : name.slice(idx + 1);\n}\n\n/**\n * Extract the viewBox attribute and inner body of an `<svg>` element from a\n * raw Iconify-served SVG string. Falls back to `0 0 24 24` if no viewBox is\n * present.\n */\nexport function parseSvg(rawSvg: string): ParsedSvg {\n const match = rawSvg.match(/<svg([^>]*)>([\\s\\S]*)<\\/svg>/i);\n if (!match) {\n return { viewBox: \"0 0 24 24\", body: rawSvg.trim() };\n }\n const attrs = match[1] ?? \"\";\n const body = (match[2] ?? \"\").trim();\n const viewBoxMatch = attrs.match(/viewBox\\s*=\\s*\"([^\"]+)\"/i);\n const viewBox = viewBoxMatch?.[1] ?? \"0 0 24 24\";\n return { viewBox, body };\n}\n\nexport interface BuildTsxOptions {\n libraryName: string;\n iconName: string; // original Iconify name (e.g. \"tabler:home\" or \"home\")\n viewBox: string;\n body: string;\n}\n\n/**\n * Detect whether the SVG body declares its own `fill=` or `stroke=` attribute\n * on any child element. Outline-style icons (Tabler, Lucide, Feather) typically\n * leave fill/stroke off and inherit it from the parent `<svg>`. Filled/duotone\n * icons (Material Symbols Filled, Phosphor Fill, Solar Bold-Duotone) declare\n * their own fill/stroke on child paths — in that case we must NOT emit\n * SVG-level defaults or they'll override the body and break rendering.\n */\nexport function hasOwnStrokeOrFill(body: string): boolean {\n return /\\b(fill|stroke)=/.test(body);\n}\n\n/**\n * Generate the source for a single `<Name>Icon` React component file.\n * Inlines the SVG body so there is no runtime CDN fetch.\n */\nexport function buildTsxComponent(opts: BuildTsxOptions): string {\n const componentName = toPascalCase(opts.iconName);\n const indentedBody = jsxifyAttrs(opts.body)\n .split(\"\\n\")\n .map((line) => (line.length ? ` ${line}` : line))\n .join(\"\\n\");\n const useOutlineDefaults = !hasOwnStrokeOrFill(opts.body);\n const svgAttrs = useOutlineDefaults\n ? ` fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n`\n : \"\";\n return `// From ${opts.libraryName} — used via Iconify (https://iconify.design)\nimport type { SVGProps } from \"react\";\n\nexport function ${componentName}(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"${opts.viewBox}\"\n${svgAttrs} {...props}\n >\n${indentedBody}\n </svg>\n );\n}\n`;\n}\n\nexport interface BarrelEntry {\n /** PascalCase component name, e.g. \"HomeIcon\". */\n componentName: string;\n /** File stem to import from (no extension), e.g. \"./home\". */\n importPath: string;\n}\n\nexport interface BuildBarrelOptions {\n /** Human-readable library name, e.g. \"Tabler Icons\". */\n libraryName?: string;\n /** Iconify prefix, e.g. \"tabler\" or \"ph\". */\n prefix?: string;\n}\n\n/**\n * Build a barrel `index.ts` that re-exports every icon component.\n * The agent is instructed to merge this with any existing barrel rather\n * than overwrite, so duplicate exports stay the caller's problem.\n *\n * When `libraryName` and `prefix` are provided, a header comment is\n * prepended that names the locked library and points at follow-up tools.\n */\nexport function buildBarrel(\n entries: BarrelEntry[],\n options: BuildBarrelOptions = {},\n): string {\n if (entries.length === 0) return \"\";\n const lines = entries\n .map((e) => `export { ${e.componentName} } from \"${e.importPath}\";`)\n .join(\"\\n\");\n const body = `${lines}\\n`;\n const { libraryName, prefix } = options;\n if (!libraryName || !prefix) return body;\n const header = [\n `// Icons from ${libraryName} (https://iconify.design/?prefix=${prefix}).`,\n `// To add more: invoke the install-icons MCP tool with libraryId=\"${prefix}\",`,\n `// or run \\`bun run add-icon <name>\\` if scripts/add-icon.ts exists in this repo.`,\n `// Do NOT mix in icons from other libraries — see .library.json for the locked choice.`,\n ``,\n ``,\n ].join(\"\\n\");\n return `${header}${body}`;\n}\n\n/**\n * Convert an icon name (with or without prefix) into a filesystem-safe\n * kebab-case file stem. Sanitises to `[a-z0-9-]` so a malicious or\n * malformed icon name (path separators, dots, control chars) can never\n * escape the target directory or produce an invalid filename. Throws if\n * the resulting stem would be empty so the caller can report it cleanly\n * via the skipped-list mechanism.\n */\nexport function toFileStem(rawName: string): string {\n const stem = stripPrefix(rawName).toLowerCase().replace(/[^a-z0-9-]/g, \"\");\n if (!stem) {\n throw new Error(`Icon name \"${rawName}\" sanitizes to empty stem.`);\n }\n return stem;\n}\n\n/**\n * Validate a user-supplied `targetDir` for the install-icons tool. Allowed:\n * relative paths only, no `..` segments, no leading `/`, no Windows drive\n * letters, no backslashes (Windows traversal), no null bytes. Trims trailing\n * slashes. Returns a discriminated-union result so callers can surface the\n * error via the existing MCP error-content pattern rather than throwing.\n */\nexport function validateTargetDir(\n input: string | undefined,\n): { ok: true; dir: string } | { ok: false; error: string } {\n const dir = (input ?? \"components/icons\").replace(/\\/+$/g, \"\");\n if (!dir) return { ok: false, error: \"targetDir cannot be empty.\" };\n if (dir.startsWith(\"/\") || /^[A-Za-z]:/.test(dir)) {\n return { ok: false, error: \"targetDir must be a relative path.\" };\n }\n if (dir.split(\"/\").some((seg) => seg === \"..\")) {\n return { ok: false, error: \"targetDir cannot contain '..' segments.\" };\n }\n if (dir.includes(\"\\\\\")) {\n return { ok: false, error: \"targetDir cannot contain backslashes.\" };\n }\n if (/\\0/.test(dir)) {\n return { ok: false, error: \"targetDir contains invalid characters.\" };\n }\n return { ok: true, dir };\n}\n","// Design-system guardrails shipped into a consumer project after a Better\n// Design scaffold. The MCP tools (`get-design-system-docs`, `create-design-system`)\n// surface GUARDRAILS_SETUP_MD as text so the calling agent wires these up, and\n// the per-project shadcn registry route writes the two namespaced files\n// deterministically via `registry:file` + target.\n//\n// Why this exists: the MCP installs ~90 components into `components/ui/` but\n// nothing previously stopped the agent from hand-rolling its own `<button>`,\n// `<table>`, or faking a ⌘K palette / dropdown / notification with bare divs\n// (the styling still matched because both read the same globals.css tokens, but\n// the interactive fakes ended up dead). These guardrails make \"compose the\n// installed components, never rebuild a primitive\" durable across context\n// compaction and tool ecosystems (Claude Code, Cursor, Codex).\n//\n// SINGLE SOURCE OF TRUTH: edit the content here only. Both the registry route\n// and the MCP install text read these constants — do not duplicate the prose.\n\n// Written to `.better-design/rules.md`. A namespaced file the user does not own,\n// so it is always safe to (over)write. Referenced from CLAUDE.md / AGENTS.md.\nexport const DS_RULES_MD = `# Design system rules\n\nThe files in \\`components/ui/*\\` ARE the design system installed by Better Design.\n\n**Compose them. Never hand-roll a primitive the DS already ships.** Rebuilding\n\\`Button\\` as a raw \\`<button>\\`, a table as a raw \\`<table>\\`, or faking a ⌘K palette,\naccount menu, or notification bell with bare \\`<div>\\`s is a bug even when it looks\nright: it only matches because both read the same \\`app/globals.css\\` tokens, and the\nfaked interactive pieces end up dead (the search opens nothing, the menu has no\nitems, the bell does nothing).\n\nMap each UI need to the installed component BEFORE writing markup:\n\n- buttons, nav links (use \\`asChild\\`) -> \\`button\\`\n- panels, cards, KPI tiles, section containers -> \\`card\\`\n- tabular data -> \\`table\\` (not a raw \\`<table>\\`)\n- status pills, tags, labels -> \\`badge\\`\n- ⌘K / search palette -> \\`command\\` (\\`CommandDialog\\`)\n- account / overflow / context menus -> \\`dropdown-menu\\`\n- notification bell, flyouts -> \\`popover\\` + \\`notification\\`\n- transient confirmations -> \\`use-toast\\` + \\`toaster\\`\n- tooltips -> \\`tooltip\\` (wrap the app in \\`TooltipProvider\\`)\n- modals -> \\`dialog\\`; tab switchers -> \\`tabs\\`; avatars -> \\`avatar\\`; dividers -> \\`separator\\`\n- form fields -> \\`input\\` / \\`textarea\\` / \\`select\\` / \\`checkbox\\` / \\`switch\\` / \\`radio-group\\`\n\nRead a component's source from \\`components/ui/\\` to learn its props/exports. Use only\nthe design tokens in \\`app/globals.css\\`; never invent colors, spacing, or radii.\n`;\n\n// Written to `.better-design/eslint-design-system.mjs`. A flat-config fragment the\n// project's eslint.config.mjs spreads in. `warn` (not `error`) so it surfaces in\n// the agent's lint run without hard-failing legitimate one-off raw elements;\n// bump to \"error\" to gate CI.\nexport const DS_ESLINT_CONFIG = `// Better Design — design-system guardrail (flat ESLint config fragment).\n// Flags raw HTML primitives in feature code when the installed DS ships an\n// equivalent in components/ui/*. Wire it into eslint.config.mjs:\n//\n// import dsGuardrail from \"./.better-design/eslint-design-system.mjs\"; // better-design-guardrail\n// export default [ ...dsGuardrail, /* ...your config */ ];\n//\n// Scoped to app/** and components/** but NOT components/ui/** (the DS itself).\n// Bump \"warn\" -> \"error\" to fail lint/CI on violations.\nconst banned = [\n { selector: \"JSXOpeningElement[name.name='button']\", message: \"Use <Button> from @/components/ui/button instead of a raw <button>.\" },\n { selector: \"JSXOpeningElement[name.name='table']\", message: \"Use <Table> from @/components/ui/table instead of a raw <table>.\" },\n { selector: \"JSXOpeningElement[name.name='input']\", message: \"Use <Input> from @/components/ui/input instead of a raw <input>.\" },\n { selector: \"JSXOpeningElement[name.name='select']\", message: \"Use <Select> from @/components/ui/select instead of a raw <select>.\" },\n { selector: \"JSXOpeningElement[name.name='textarea']\", message: \"Use <Textarea> from @/components/ui/textarea instead of a raw <textarea>.\" },\n];\n\nexport default [\n {\n files: [\"app/**/*.{tsx,jsx}\", \"components/**/*.{tsx,jsx}\"],\n // Exclude the DS itself and co-located tests, which legitimately render raw\n // <button>/<input> for queries/assertions and would otherwise emit noise.\n ignores: [\"components/ui/**\", \"**/*.{test,spec}.{tsx,jsx}\", \"**/__tests__/**\"],\n rules: { \"no-restricted-syntax\": [\"warn\", ...banned] },\n },\n];\n`;\n\n// shadcn `registry:file` entries that write the two namespaced files. Returned\n// from the per-project registry route so a single `shadcn add` drops them\n// alongside components/ui/*. Namespaced paths the user does not own -> safe.\nexport function guardrailRegistryFiles(): Array<{\n path: string;\n content: string;\n type: \"registry:file\";\n target: string;\n}> {\n return [\n {\n path: \".better-design/rules.md\",\n content: DS_RULES_MD,\n type: \"registry:file\",\n target: \".better-design/rules.md\",\n },\n {\n path: \".better-design/eslint-design-system.mjs\",\n content: DS_ESLINT_CONFIG,\n type: \"registry:file\",\n target: \".better-design/eslint-design-system.mjs\",\n },\n ];\n}\n\n// MCP-text setup step appended to both scaffold flows. Embeds the file contents\n// so the `get-design-system-docs` flow (which installs per-component seed URLs,\n// NOT the project all.json) can create them too. All writes are idempotent and\n// MUST NOT overwrite user-owned files (CLAUDE.md / AGENTS.md / eslint.config.mjs).\nexport const GUARDRAILS_SETUP_MD = `## Set up the design-system guardrails (one-time, idempotent)\n\nThese keep feature code composing the installed components instead of re-building\nprimitives. Apply all three; never overwrite a user-owned file, only create-if-missing\nor append a guarded block.\n\n**1. Rules doc** — write \\`.better-design/rules.md\\` (skip if the install already wrote it):\n\n\\`\\`\\`md\n${DS_RULES_MD}\\`\\`\\`\n\n**2. Reference it from the agent config files** (create if missing, append if absent, never clobber):\n- \\`CLAUDE.md\\`: ensure it contains the line \\`@.better-design/rules.md\\`.\n- \\`AGENTS.md\\`: AGENTS.md has no import mechanic, so inline the rule in a marker block. Append if \\`better-design:start\\` is absent; replace between markers if present:\n \\`\\`\\`\n <!-- better-design:start -->\n Compose the installed components/ui/* primitives; never hand-roll a <button>/<table>/<input>/<dialog> or fake a ⌘K palette / menu / notification bell. Use only app/globals.css design tokens. See .better-design/rules.md.\n <!-- better-design:end -->\n \\`\\`\\`\n\n**3. ESLint guardrail** — write \\`.better-design/eslint-design-system.mjs\\` (skip if the install already wrote it):\n\n\\`\\`\\`js\n${DS_ESLINT_CONFIG}\\`\\`\\`\n\nThen wire it into the project's \\`eslint.config.mjs\\` (flat config), guarded so re-runs don't duplicate — skip if the marker \\`// better-design-guardrail\\` is already present:\n\n\\`\\`\\`js\nimport dsGuardrail from \"./.better-design/eslint-design-system.mjs\"; // better-design-guardrail\n// spread ...dsGuardrail into the exported config array\n\\`\\`\\`\n\nAfter wiring, \\`npm run lint\\` flags raw primitives in feature code (warnings; bump to \"error\" to gate CI).\n`;\n","// AUTO-GENERATED by scripts/build-preview-widget-sdk.ts — DO NOT EDIT BY HAND.\n// Minified IIFE bundle of @modelcontextprotocol/ext-apps that assigns\n// window.__bdMcp = { App, applyDocumentTheme, applyHostFonts }. The DS preview\n// widget inlines this so the MCP Apps SDK runs without a runtime CDN import\n// (Claude's sandbox CSP blocks dynamic esm.sh imports). Regenerate with\n// `bun run build:preview-widget` after bumping the SDK. [BD-92]\nexport const PREVIEW_WIDGET_SDK_JS = \"var __require=(typeof globalThis!==\\\"undefined\\\"&&globalThis.__require)||function(n){throw new Error(\\\"ext-apps runtime require() unavailable in browser: \\\"+n);};\\n(()=>{var ye=Object.defineProperty;var jr=(r,i)=>{for(var v in i)ye(r,v,{get:i[v],enumerable:!0,configurable:!0,set:(u)=>i[v]=()=>u})};var O=(r,i)=>()=>(r&&(i=r(r=0)),i);function e(r,i,v){function u($,b){if(!$._zod)Object.defineProperty($,\\\"_zod\\\",{value:{def:b,constr:o,traits:new Set},enumerable:!1});if($._zod.traits.has(r))return;$._zod.traits.add(r),i($,b);let g=o.prototype,c=Object.keys(g);for(let U=0;U<c.length;U++){let w=c[U];if(!(w in $))$[w]=g[w].bind($)}}let n=v?.Parent??Object;class t extends n{}Object.defineProperty(t,\\\"name\\\",{value:r});function o($){var b;let g=v?.Parent?new t:this;u(g,$),(b=g._zod).deferred??(b.deferred=[]);for(let c of g._zod.deferred)c();return g}return Object.defineProperty(o,\\\"init\\\",{value:u}),Object.defineProperty(o,Symbol.hasInstance,{value:($)=>{if(v?.Parent&&$ instanceof v.Parent)return!0;return $?._zod?.traits?.has(r)}}),Object.defineProperty(o,\\\"name\\\",{value:r}),o}function Z(r){if(r)Object.assign(fr,r);return fr}var N6,Ot,St,Lr,dr,fr;var yr=O(()=>{Ot=Object.freeze({status:\\\"aborted\\\"});St=Symbol(\\\"zod_brand\\\");Lr=class Lr extends Error{constructor(){super(\\\"Encountered Promise during synchronous parse. Use .parseAsync() instead.\\\")}};dr=class dr extends Error{constructor(r){super(`Encountered unidirectional transform during encode: ${r}`);this.name=\\\"ZodEncodeError\\\"}};(N6=globalThis).__zod_globalConfig??(N6.__zod_globalConfig={});fr=globalThis.__zod_globalConfig});var N={};jr(N,{unwrapMessage:()=>sn,uint8ArrayToHex:()=>m_,uint8ArrayToBase64url:()=>k_,uint8ArrayToBase64:()=>O6,stringifyPrimitive:()=>D,slugify:()=>Zu,shallowClone:()=>Cu,safeExtend:()=>e_,required:()=>U_,randomString:()=>u_,propertyKeyTypes:()=>ii,promiseAllObject:()=>v_,primitiveTypes:()=>fu,prefixIssues:()=>br,pick:()=>l_,partial:()=>I_,parsedType:()=>k,optionalKeys:()=>du,omit:()=>b_,objectClone:()=>n_,numKeys:()=>o_,nullish:()=>Hr,normalizeParams:()=>z,mergeDefs:()=>Wr,merge:()=>__,jsonStringifyReplacer:()=>mn,joinValues:()=>_,issue:()=>On,isPlainObject:()=>Er,isObject:()=>hr,hexToUint8Array:()=>N_,getSizableOrigin:()=>ti,getParsedType:()=>$_,getLengthableOrigin:()=>vi,getEnumValues:()=>ri,getElementAtPath:()=>t_,floatSafeRemainder:()=>Ru,finalizeIssue:()=>$r,extend:()=>c_,explicitlyAborted:()=>pu,escapeRegex:()=>wr,esc:()=>Pt,defineLazy:()=>G,createTransparentProxy:()=>g_,cloneDef:()=>i_,clone:()=>tr,cleanRegex:()=>ni,cleanEnum:()=>D_,captureStackTrace:()=>jt,cached:()=>zn,base64urlToUint8Array:()=>w_,base64ToUint8Array:()=>z6,assignProp:()=>Fr,assertNotEqual:()=>pe,assertNever:()=>se,assertIs:()=>ae,assertEqual:()=>he,assert:()=>r_,allowsEval:()=>Qu,aborted:()=>Tr,NUMBER_FORMAT_RANGES:()=>yu,Class:()=>S6,BIGINT_FORMAT_RANGES:()=>hu});function he(r){return r}function pe(r){return r}function ae(r){}function se(r){throw Error(\\\"Unexpected value in exhaustive check\\\")}function r_(r){}function ri(r){let i=Object.values(r).filter((u)=>typeof u===\\\"number\\\");return Object.entries(r).filter(([u,n])=>i.indexOf(+u)===-1).map(([u,n])=>n)}function _(r,i=\\\"|\\\"){return r.map((v)=>D(v)).join(i)}function mn(r,i){if(typeof i===\\\"bigint\\\")return i.toString();return i}function zn(r){return{get value(){{let v=r();return Object.defineProperty(this,\\\"value\\\",{value:v}),v}throw Error(\\\"cached value already set\\\")}}}function Hr(r){return r===null||r===void 0}function ni(r){let i=r.startsWith(\\\"^\\\")?1:0,v=r.endsWith(\\\"$\\\")?r.length-1:r.length;return r.slice(i,v)}function Ru(r,i){let v=r/i,u=Math.round(v),n=Number.EPSILON*Math.max(Math.abs(v),1);if(Math.abs(v-u)<n)return 0;return v-u}function G(r,i,v){let u=void 0;Object.defineProperty(r,i,{get(){if(u===m6)return;if(u===void 0)u=m6,u=v();return u},set(n){Object.defineProperty(r,i,{value:n})},configurable:!0})}function n_(r){return Object.create(Object.getPrototypeOf(r),Object.getOwnPropertyDescriptors(r))}function Fr(r,i,v){Object.defineProperty(r,i,{value:v,writable:!0,enumerable:!0,configurable:!0})}function Wr(...r){let i={};for(let v of r){let u=Object.getOwnPropertyDescriptors(v);Object.assign(i,u)}return Object.defineProperties({},i)}function i_(r){return Wr(r._zod.def)}function t_(r,i){if(!i)return r;return i.reduce((v,u)=>v?.[u],r)}function v_(r){let i=Object.keys(r),v=i.map((u)=>r[u]);return Promise.all(v).then((u)=>{let n={};for(let t=0;t<i.length;t++)n[i[t]]=u[t];return n})}function u_(r=10){let v=\\\"\\\";for(let u=0;u<r;u++)v+=\\\"abcdefghijklmnopqrstuvwxyz\\\"[Math.floor(Math.random()*26)];return v}function Pt(r){return JSON.stringify(r)}function Zu(r){return r.toLowerCase().trim().replace(/[^\\\\w\\\\s-]/g,\\\"\\\").replace(/[\\\\s_-]+/g,\\\"-\\\").replace(/^-+|-+$/g,\\\"\\\")}function hr(r){return typeof r===\\\"object\\\"&&r!==null&&!Array.isArray(r)}function Er(r){if(hr(r)===!1)return!1;let i=r.constructor;if(i===void 0)return!0;if(typeof i!==\\\"function\\\")return!0;let v=i.prototype;if(hr(v)===!1)return!1;if(Object.prototype.hasOwnProperty.call(v,\\\"isPrototypeOf\\\")===!1)return!1;return!0}function Cu(r){if(Er(r))return{...r};if(Array.isArray(r))return[...r];if(r instanceof Map)return new Map(r);if(r instanceof Set)return new Set(r);return r}function o_(r){let i=0;for(let v in r)if(Object.prototype.hasOwnProperty.call(r,v))i++;return i}function wr(r){return r.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g,\\\"\\\\\\\\$&\\\")}function tr(r,i,v){let u=new r._zod.constr(i??r._zod.def);if(!i||v?.parent)u._zod.parent=r;return u}function z(r){let i=r;if(!i)return{};if(typeof i===\\\"string\\\")return{error:()=>i};if(i?.message!==void 0){if(i?.error!==void 0)throw Error(\\\"Cannot specify both `message` and `error` params\\\");i.error=i.message}if(delete i.message,typeof i.error===\\\"string\\\")return{...i,error:()=>i.error};return i}function g_(r){let i;return new Proxy({},{get(v,u,n){return i??(i=r()),Reflect.get(i,u,n)},set(v,u,n,t){return i??(i=r()),Reflect.set(i,u,n,t)},has(v,u){return i??(i=r()),Reflect.has(i,u)},deleteProperty(v,u){return i??(i=r()),Reflect.deleteProperty(i,u)},ownKeys(v){return i??(i=r()),Reflect.ownKeys(i)},getOwnPropertyDescriptor(v,u){return i??(i=r()),Reflect.getOwnPropertyDescriptor(i,u)},defineProperty(v,u,n){return i??(i=r()),Reflect.defineProperty(i,u,n)}})}function D(r){if(typeof r===\\\"bigint\\\")return r.toString()+\\\"n\\\";if(typeof r===\\\"string\\\")return`\\\"${r}\\\"`;return`${r}`}function du(r){return Object.keys(r).filter((i)=>{return r[i]._zod.optin===\\\"optional\\\"&&r[i]._zod.optout===\\\"optional\\\"})}function l_(r,i){let v=r._zod.def,u=v.checks;if(u&&u.length>0)throw Error(\\\".pick() cannot be used on object schemas containing refinements\\\");let t=Wr(r._zod.def,{get shape(){let o={};for(let $ in i){if(!($ in v.shape))throw Error(`Unrecognized key: \\\"${$}\\\"`);if(!i[$])continue;o[$]=v.shape[$]}return Fr(this,\\\"shape\\\",o),o},checks:[]});return tr(r,t)}function b_(r,i){let v=r._zod.def,u=v.checks;if(u&&u.length>0)throw Error(\\\".omit() cannot be used on object schemas containing refinements\\\");let t=Wr(r._zod.def,{get shape(){let o={...r._zod.def.shape};for(let $ in i){if(!($ in v.shape))throw Error(`Unrecognized key: \\\"${$}\\\"`);if(!i[$])continue;delete o[$]}return Fr(this,\\\"shape\\\",o),o},checks:[]});return tr(r,t)}function c_(r,i){if(!Er(i))throw Error(\\\"Invalid input to extend: expected a plain object\\\");let v=r._zod.def.checks;if(v&&v.length>0){let t=r._zod.def.shape;for(let o in i)if(Object.getOwnPropertyDescriptor(t,o)!==void 0)throw Error(\\\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\\\")}let n=Wr(r._zod.def,{get shape(){let t={...r._zod.def.shape,...i};return Fr(this,\\\"shape\\\",t),t}});return tr(r,n)}function e_(r,i){if(!Er(i))throw Error(\\\"Invalid input to safeExtend: expected a plain object\\\");let v=Wr(r._zod.def,{get shape(){let u={...r._zod.def.shape,...i};return Fr(this,\\\"shape\\\",u),u}});return tr(r,v)}function __(r,i){if(r._zod.def.checks?.length)throw Error(\\\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\\\");let v=Wr(r._zod.def,{get shape(){let u={...r._zod.def.shape,...i._zod.def.shape};return Fr(this,\\\"shape\\\",u),u},get catchall(){return i._zod.def.catchall},checks:i._zod.def.checks??[]});return tr(r,v)}function I_(r,i,v){let n=i._zod.def.checks;if(n&&n.length>0)throw Error(\\\".partial() cannot be used on object schemas containing refinements\\\");let o=Wr(i._zod.def,{get shape(){let $=i._zod.def.shape,b={...$};if(v)for(let g in v){if(!(g in $))throw Error(`Unrecognized key: \\\"${g}\\\"`);if(!v[g])continue;b[g]=r?new r({type:\\\"optional\\\",innerType:$[g]}):$[g]}else for(let g in $)b[g]=r?new r({type:\\\"optional\\\",innerType:$[g]}):$[g];return Fr(this,\\\"shape\\\",b),b},checks:[]});return tr(i,o)}function U_(r,i,v){let u=Wr(i._zod.def,{get shape(){let n=i._zod.def.shape,t={...n};if(v)for(let o in v){if(!(o in t))throw Error(`Unrecognized key: \\\"${o}\\\"`);if(!v[o])continue;t[o]=new r({type:\\\"nonoptional\\\",innerType:n[o]})}else for(let o in n)t[o]=new r({type:\\\"nonoptional\\\",innerType:n[o]});return Fr(this,\\\"shape\\\",t),t}});return tr(i,u)}function Tr(r,i=0){if(r.aborted===!0)return!0;for(let v=i;v<r.issues.length;v++)if(r.issues[v]?.continue!==!0)return!0;return!1}function pu(r,i=0){if(r.aborted===!0)return!0;for(let v=i;v<r.issues.length;v++)if(r.issues[v]?.continue===!1)return!0;return!1}function br(r,i){return i.map((v)=>{var u;return(u=v).path??(u.path=[]),v.path.unshift(r),v})}function sn(r){return typeof r===\\\"string\\\"?r:r?.message}function $r(r,i,v){let u=r.message?r.message:sn(r.inst?._zod.def?.error?.(r))??sn(i?.error?.(r))??sn(v.customError?.(r))??sn(v.localeError?.(r))??\\\"Invalid input\\\",{inst:n,continue:t,input:o,...$}=r;if($.path??($.path=[]),$.message=u,i?.reportInput)$.input=o;return $}function ti(r){if(r instanceof Set)return\\\"set\\\";if(r instanceof Map)return\\\"map\\\";if(r instanceof File)return\\\"file\\\";return\\\"unknown\\\"}function vi(r){if(Array.isArray(r))return\\\"array\\\";if(typeof r===\\\"string\\\")return\\\"string\\\";return\\\"unknown\\\"}function k(r){let i=typeof r;switch(i){case\\\"number\\\":return Number.isNaN(r)?\\\"nan\\\":\\\"number\\\";case\\\"object\\\":{if(r===null)return\\\"null\\\";if(Array.isArray(r))return\\\"array\\\";let v=r;if(v&&Object.getPrototypeOf(v)!==Object.prototype&&\\\"constructor\\\"in v&&v.constructor)return v.constructor.name}}return i}function On(...r){let[i,v,u]=r;if(typeof i===\\\"string\\\")return{message:i,code:\\\"custom\\\",input:v,inst:u};return{...i}}function D_(r){return Object.entries(r).filter(([i,v])=>{return Number.isNaN(Number.parseInt(i,10))}).map((i)=>i[1])}function z6(r){let i=atob(r),v=new Uint8Array(i.length);for(let u=0;u<i.length;u++)v[u]=i.charCodeAt(u);return v}function O6(r){let i=\\\"\\\";for(let v=0;v<r.length;v++)i+=String.fromCharCode(r[v]);return btoa(i)}function w_(r){let i=r.replace(/-/g,\\\"+\\\").replace(/_/g,\\\"/\\\"),v=\\\"=\\\".repeat((4-i.length%4)%4);return z6(i+v)}function k_(r){return O6(r).replace(/\\\\+/g,\\\"-\\\").replace(/\\\\//g,\\\"_\\\").replace(/=/g,\\\"\\\")}function N_(r){let i=r.replace(/^0x/,\\\"\\\");if(i.length%2!==0)throw Error(\\\"Invalid hex string length\\\");let v=new Uint8Array(i.length/2);for(let u=0;u<i.length;u+=2)v[u/2]=Number.parseInt(i.slice(u,u+2),16);return v}function m_(r){return Array.from(r).map((i)=>i.toString(16).padStart(2,\\\"0\\\")).join(\\\"\\\")}class S6{constructor(...r){}}var m6,jt,Qu,$_=(r)=>{let i=typeof r;switch(i){case\\\"undefined\\\":return\\\"undefined\\\";case\\\"string\\\":return\\\"string\\\";case\\\"number\\\":return Number.isNaN(r)?\\\"nan\\\":\\\"number\\\";case\\\"boolean\\\":return\\\"boolean\\\";case\\\"function\\\":return\\\"function\\\";case\\\"bigint\\\":return\\\"bigint\\\";case\\\"symbol\\\":return\\\"symbol\\\";case\\\"object\\\":if(Array.isArray(r))return\\\"array\\\";if(r===null)return\\\"null\\\";if(r.then&&typeof r.then===\\\"function\\\"&&r.catch&&typeof r.catch===\\\"function\\\")return\\\"promise\\\";if(typeof Map<\\\"u\\\"&&r instanceof Map)return\\\"map\\\";if(typeof Set<\\\"u\\\"&&r instanceof Set)return\\\"set\\\";if(typeof Date<\\\"u\\\"&&r instanceof Date)return\\\"date\\\";if(typeof File<\\\"u\\\"&&r instanceof File)return\\\"file\\\";return\\\"object\\\";default:throw Error(`Unknown data type: ${i}`)}},ii,fu,yu,hu;var j=O(()=>{yr();m6=Symbol(\\\"evaluating\\\");jt=\\\"captureStackTrace\\\"in Error?Error.captureStackTrace:(...r)=>{};Qu=zn(()=>{if(fr.jitless)return!1;if(typeof navigator<\\\"u\\\"&&navigator?.userAgent?.includes(\\\"Cloudflare\\\"))return!1;try{return new Function(\\\"\\\"),!0}catch(r){return!1}});ii=new Set([\\\"string\\\",\\\"number\\\",\\\"symbol\\\"]),fu=new Set([\\\"string\\\",\\\"number\\\",\\\"bigint\\\",\\\"boolean\\\",\\\"symbol\\\",\\\"undefined\\\"]);yu={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-340282346638528860000000000000000000000,340282346638528860000000000000000000000],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},hu={int64:[BigInt(\\\"-9223372036854775808\\\"),BigInt(\\\"9223372036854775807\\\")],uint64:[BigInt(0),BigInt(\\\"18446744073709551615\\\")]}});function Sn(r,i=(v)=>v.message){let v={},u=[];for(let n of r.issues)if(n.path.length>0)v[n.path[0]]=v[n.path[0]]||[],v[n.path[0]].push(i(n));else u.push(i(n));return{formErrors:u,fieldErrors:v}}function Pn(r,i=(v)=>v.message){let v={_errors:[]},u=(n,t=[])=>{for(let o of n.issues)if(o.code===\\\"invalid_union\\\"&&o.errors.length)o.errors.map(($)=>u({issues:$},[...t,...o.path]));else if(o.code===\\\"invalid_key\\\")u({issues:o.issues},[...t,...o.path]);else if(o.code===\\\"invalid_element\\\")u({issues:o.issues},[...t,...o.path]);else{let $=[...t,...o.path];if($.length===0)v._errors.push(i(o));else{let b=v,g=0;while(g<$.length){let c=$[g];if(g!==$.length-1)b[c]=b[c]||{_errors:[]};else b[c]=b[c]||{_errors:[]},b[c]._errors.push(i(o));b=b[c],g++}}}};return u(r),v}function Lt(r,i=(v)=>v.message){let v={errors:[]},u=(n,t=[])=>{var o,$;for(let b of n.issues)if(b.code===\\\"invalid_union\\\"&&b.errors.length)b.errors.map((g)=>u({issues:g},[...t,...b.path]));else if(b.code===\\\"invalid_key\\\")u({issues:b.issues},[...t,...b.path]);else if(b.code===\\\"invalid_element\\\")u({issues:b.issues},[...t,...b.path]);else{let g=[...t,...b.path];if(g.length===0){v.errors.push(i(b));continue}let c=v,U=0;while(U<g.length){let w=g[U],m=U===g.length-1;if(typeof w===\\\"string\\\")c.properties??(c.properties={}),(o=c.properties)[w]??(o[w]={errors:[]}),c=c.properties[w];else c.items??(c.items=[]),($=c.items)[w]??($[w]={errors:[]}),c=c.items[w];if(m)c.errors.push(i(b));U++}}};return u(r),v}function j6(r){let i=[],v=r.map((u)=>typeof u===\\\"object\\\"?u.key:u);for(let u of v)if(typeof u===\\\"number\\\")i.push(`[${u}]`);else if(typeof u===\\\"symbol\\\")i.push(`[${JSON.stringify(String(u))}]`);else if(/[^\\\\w$]/.test(u))i.push(`[${JSON.stringify(u)}]`);else{if(i.length)i.push(\\\".\\\");i.push(u)}return i.join(\\\"\\\")}function At(r){let i=[],v=[...r.issues].sort((u,n)=>(u.path??[]).length-(n.path??[]).length);for(let u of v)if(i.push(`✖ ${u.message}`),u.path?.length)i.push(` → at ${j6(u.path)}`);return i.join(`\\n`)}var P6=(r,i)=>{r.name=\\\"$ZodError\\\",Object.defineProperty(r,\\\"_zod\\\",{value:r._zod,enumerable:!1}),Object.defineProperty(r,\\\"issues\\\",{value:i,enumerable:!1}),r.message=JSON.stringify(i,mn,2),Object.defineProperty(r,\\\"toString\\\",{value:()=>r.message,enumerable:!1})},ui,cr;var au=O(()=>{yr();j();ui=e(\\\"$ZodError\\\",P6),cr=e(\\\"$ZodError\\\",P6,{Parent:Error})});var jn=(r)=>(i,v,u,n)=>{let t=u?{...u,async:!1}:{async:!1},o=i._zod.run({value:v,issues:[]},t);if(o instanceof Promise)throw new Lr;if(o.issues.length){let $=new(n?.Err??r)(o.issues.map((b)=>$r(b,t,Z())));throw jt($,n?.callee),$}return o.value},oi,Ln=(r)=>async(i,v,u,n)=>{let t=u?{...u,async:!0}:{async:!0},o=i._zod.run({value:v,issues:[]},t);if(o instanceof Promise)o=await o;if(o.issues.length){let $=new(n?.Err??r)(o.issues.map((b)=>$r(b,t,Z())));throw jt($,n?.callee),$}return o.value},$i,An=(r)=>(i,v,u)=>{let n=u?{...u,async:!1}:{async:!1},t=i._zod.run({value:v,issues:[]},n);if(t instanceof Promise)throw new Lr;return t.issues.length?{success:!1,error:new(r??ui)(t.issues.map((o)=>$r(o,n,Z())))}:{success:!0,data:t.value}},Jn,Wn=(r)=>async(i,v,u)=>{let n=u?{...u,async:!0}:{async:!0},t=i._zod.run({value:v,issues:[]},n);if(t instanceof Promise)t=await t;return t.issues.length?{success:!1,error:new r(t.issues.map((o)=>$r(o,n,Z())))}:{success:!0,data:t.value}},gi,Jt=(r)=>(i,v,u)=>{let n=u?{...u,direction:\\\"backward\\\"}:{direction:\\\"backward\\\"};return jn(r)(i,v,n)},L6,Wt=(r)=>(i,v,u)=>{return jn(r)(i,v,u)},A6,Vt=(r)=>async(i,v,u)=>{let n=u?{...u,direction:\\\"backward\\\"}:{direction:\\\"backward\\\"};return Ln(r)(i,v,n)},J6,Gt=(r)=>async(i,v,u)=>{return Ln(r)(i,v,u)},W6,Kt=(r)=>(i,v,u)=>{let n=u?{...u,direction:\\\"backward\\\"}:{direction:\\\"backward\\\"};return An(r)(i,v,n)},V6,Bt=(r)=>(i,v,u)=>{return An(r)(i,v,u)},G6,Ht=(r)=>async(i,v,u)=>{let n=u?{...u,direction:\\\"backward\\\"}:{direction:\\\"backward\\\"};return Wn(r)(i,v,n)},K6,Ft=(r)=>async(i,v,u)=>{return Wn(r)(i,v,u)},B6;var su=O(()=>{yr();au();j();oi=jn(cr),$i=Ln(cr),Jn=An(cr),gi=Wn(cr),L6=Jt(cr),A6=Wt(cr),J6=Vt(cr),W6=Gt(cr),V6=Kt(cr),G6=Bt(cr),K6=Ht(cr),B6=Ft(cr)});var er={};jr(er,{xid:()=>to,uuid7:()=>j_,uuid6:()=>P_,uuid4:()=>S_,uuid:()=>pr,uppercase:()=>Jo,unicodeEmail:()=>H6,undefined:()=>Lo,ulid:()=>io,time:()=>No,string:()=>zo,sha512_hex:()=>C_,sha512_base64url:()=>d_,sha512_base64:()=>f_,sha384_hex:()=>R_,sha384_base64url:()=>Q_,sha384_base64:()=>Z_,sha256_hex:()=>Y_,sha256_base64url:()=>X_,sha256_base64:()=>q_,sha1_hex:()=>T_,sha1_base64url:()=>M_,sha1_base64:()=>x_,rfc5322Email:()=>A_,number:()=>li,null:()=>jo,nanoid:()=>uo,md5_hex:()=>H_,md5_base64url:()=>E_,md5_base64:()=>F_,mac:()=>eo,lowercase:()=>Ao,ksuid:()=>vo,ipv6:()=>co,ipv4:()=>bo,integer:()=>So,idnEmail:()=>J_,httpProtocol:()=>Do,html5Email:()=>L_,hostname:()=>G_,hex:()=>B_,guid:()=>$o,extendedDuration:()=>O_,emoji:()=>lo,email:()=>go,e164:()=>wo,duration:()=>oo,domain:()=>K_,datetime:()=>mo,date:()=>ko,cuid2:()=>no,cuid:()=>ro,cidrv6:()=>Io,cidrv4:()=>_o,browserEmail:()=>W_,boolean:()=>Po,bigint:()=>Oo,base64url:()=>Et,base64:()=>Uo});function lo(){return new RegExp(V_,\\\"u\\\")}function E6(r){return typeof r.precision===\\\"number\\\"?r.precision===-1?\\\"(?:[01]\\\\\\\\d|2[0-3]):[0-5]\\\\\\\\d\\\":r.precision===0?\\\"(?:[01]\\\\\\\\d|2[0-3]):[0-5]\\\\\\\\d:[0-5]\\\\\\\\d\\\":`(?:[01]\\\\\\\\d|2[0-3]):[0-5]\\\\\\\\d:[0-5]\\\\\\\\d\\\\\\\\.\\\\\\\\d{${r.precision}}`:\\\"(?:[01]\\\\\\\\d|2[0-3]):[0-5]\\\\\\\\d(?::[0-5]\\\\\\\\d(?:\\\\\\\\.\\\\\\\\d+)?)?\\\"}function No(r){return new RegExp(`^${E6(r)}$`)}function mo(r){let i=E6({precision:r.precision}),v=[\\\"Z\\\"];if(r.local)v.push(\\\"\\\");if(r.offset)v.push(\\\"([+-](?:[01]\\\\\\\\d|2[0-3]):[0-5]\\\\\\\\d)\\\");let u=`${i}(?:${v.join(\\\"|\\\")})`;return new RegExp(`^${F6}T(?:${u})$`)}function bi(r,i){return new RegExp(`^[A-Za-z0-9+/]{${r}}${i}$`)}function ci(r){return new RegExp(`^[A-Za-z0-9_-]{${r}}$`)}var ro,no,io,to,vo,uo,oo,O_,$o,pr=(r)=>{if(!r)return/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${r}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`)},S_,P_,j_,go,L_,A_,H6,J_,W_,V_=\\\"^(\\\\\\\\p{Extended_Pictographic}|\\\\\\\\p{Emoji_Component})+$\\\",bo,co,eo=(r)=>{let i=wr(r??\\\":\\\");return new RegExp(`^(?:[0-9A-F]{2}${i}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${i}){5}[0-9a-f]{2}$`)},_o,Io,Uo,Et,G_,K_,Do,wo,F6=\\\"(?:(?:\\\\\\\\d\\\\\\\\d[2468][048]|\\\\\\\\d\\\\\\\\d[13579][26]|\\\\\\\\d\\\\\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\\\\\d|2[0-8])))\\\",ko,zo=(r)=>{let i=r?`[\\\\\\\\s\\\\\\\\S]{${r?.minimum??0},${r?.maximum??\\\"\\\"}}`:\\\"[\\\\\\\\s\\\\\\\\S]*\\\";return new RegExp(`^${i}$`)},Oo,So,li,Po,jo,Lo,Ao,Jo,B_,H_,F_,E_,T_,x_,M_,Y_,q_,X_,R_,Z_,Q_,C_,f_,d_;var Tt=O(()=>{j();ro=/^[cC][0-9a-z]{6,}$/,no=/^[0-9a-z]+$/,io=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,to=/^[0-9a-vA-V]{20}$/,vo=/^[A-Za-z0-9]{27}$/,uo=/^[a-zA-Z0-9_-]{21}$/,oo=/^P(?:(\\\\d+W)|(?!.*W)(?=\\\\d|T\\\\d)(\\\\d+Y)?(\\\\d+M)?(\\\\d+D)?(T(?=\\\\d)(\\\\d+H)?(\\\\d+M)?(\\\\d+([.,]\\\\d+)?S)?)?)$/,O_=/^[-+]?P(?!$)(?:(?:[-+]?\\\\d+Y)|(?:[-+]?\\\\d+[.,]\\\\d+Y$))?(?:(?:[-+]?\\\\d+M)|(?:[-+]?\\\\d+[.,]\\\\d+M$))?(?:(?:[-+]?\\\\d+W)|(?:[-+]?\\\\d+[.,]\\\\d+W$))?(?:(?:[-+]?\\\\d+D)|(?:[-+]?\\\\d+[.,]\\\\d+D$))?(?:T(?=[\\\\d+-])(?:(?:[-+]?\\\\d+H)|(?:[-+]?\\\\d+[.,]\\\\d+H$))?(?:(?:[-+]?\\\\d+M)|(?:[-+]?\\\\d+[.,]\\\\d+M$))?(?:[-+]?\\\\d+(?:[.,]\\\\d+)?S)?)??$/,$o=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,S_=pr(4),P_=pr(6),j_=pr(7),go=/^(?!\\\\.)(?!.*\\\\.\\\\.)([A-Za-z0-9_'+\\\\-\\\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\\\-]*\\\\.)+[A-Za-z]{2,}$/,L_=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,A_=/^(([^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+(\\\\.[^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+)*)|(\\\".+\\\"))@((\\\\[[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}])|(([a-zA-Z\\\\-0-9]+\\\\.)+[a-zA-Z]{2,}))$/,H6=/^[^\\\\s@\\\"]{1,64}@[^\\\\s@]{1,255}$/u,J_=H6,W_=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;bo=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,co=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,_o=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\\\/([0-9]|[1-2][0-9]|3[0-2])$/,Io=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Uo=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Et=/^[A-Za-z0-9_-]*$/,G_=/^(?=.{1,253}\\\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\\\.?$/,K_=/^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\\\.)+[a-zA-Z]{2,}$/,Do=/^https?$/,wo=/^\\\\+[1-9]\\\\d{6,14}$/,ko=new RegExp(`^${F6}$`);Oo=/^-?\\\\d+n?$/,So=/^-?\\\\d+$/,li=/^-?\\\\d+(?:\\\\.\\\\d+)?$/,Po=/^(?:true|false)$/i,jo=/^null$/i,Lo=/^undefined$/i,Ao=/^[^A-Z]*$/,Jo=/^[^a-z]*$/,B_=/^[0-9a-fA-F]*$/;H_=/^[0-9a-fA-F]{32}$/,F_=bi(22,\\\"==\\\"),E_=ci(22),T_=/^[0-9a-fA-F]{40}$/,x_=bi(27,\\\"=\\\"),M_=ci(27),Y_=/^[0-9a-fA-F]{64}$/,q_=bi(43,\\\"=\\\"),X_=ci(43),R_=/^[0-9a-fA-F]{96}$/,Z_=bi(64,\\\"\\\"),Q_=ci(64),C_=/^[0-9a-fA-F]{128}$/,f_=bi(86,\\\"==\\\"),d_=ci(86)});function T6(r,i,v){if(r.issues.length)i.issues.push(...br(v,r.issues))}var X,x6,xt,Mt,Wo,Vo,Go,Ko,Bo,Ho,Fo,Eo,To,Vn,xo,Mo,Yo,qo,Xo,Ro,Zo,Qo,Co;var Yt=O(()=>{yr();Tt();j();X=e(\\\"$ZodCheck\\\",(r,i)=>{var v;r._zod??(r._zod={}),r._zod.def=i,(v=r._zod).onattach??(v.onattach=[])}),x6={number:\\\"number\\\",bigint:\\\"bigint\\\",object:\\\"date\\\"},xt=e(\\\"$ZodCheckLessThan\\\",(r,i)=>{X.init(r,i);let v=x6[typeof i.value];r._zod.onattach.push((u)=>{let n=u._zod.bag,t=(i.inclusive?n.maximum:n.exclusiveMaximum)??Number.POSITIVE_INFINITY;if(i.value<t)if(i.inclusive)n.maximum=i.value;else n.exclusiveMaximum=i.value}),r._zod.check=(u)=>{if(i.inclusive?u.value<=i.value:u.value<i.value)return;u.issues.push({origin:v,code:\\\"too_big\\\",maximum:typeof i.value===\\\"object\\\"?i.value.getTime():i.value,input:u.value,inclusive:i.inclusive,inst:r,continue:!i.abort})}}),Mt=e(\\\"$ZodCheckGreaterThan\\\",(r,i)=>{X.init(r,i);let v=x6[typeof i.value];r._zod.onattach.push((u)=>{let n=u._zod.bag,t=(i.inclusive?n.minimum:n.exclusiveMinimum)??Number.NEGATIVE_INFINITY;if(i.value>t)if(i.inclusive)n.minimum=i.value;else n.exclusiveMinimum=i.value}),r._zod.check=(u)=>{if(i.inclusive?u.value>=i.value:u.value>i.value)return;u.issues.push({origin:v,code:\\\"too_small\\\",minimum:typeof i.value===\\\"object\\\"?i.value.getTime():i.value,input:u.value,inclusive:i.inclusive,inst:r,continue:!i.abort})}}),Wo=e(\\\"$ZodCheckMultipleOf\\\",(r,i)=>{X.init(r,i),r._zod.onattach.push((v)=>{var u;(u=v._zod.bag).multipleOf??(u.multipleOf=i.value)}),r._zod.check=(v)=>{if(typeof v.value!==typeof i.value)throw Error(\\\"Cannot mix number and bigint in multiple_of check.\\\");if(typeof v.value===\\\"bigint\\\"?v.value%i.value===BigInt(0):Ru(v.value,i.value)===0)return;v.issues.push({origin:typeof v.value,code:\\\"not_multiple_of\\\",divisor:i.value,input:v.value,inst:r,continue:!i.abort})}}),Vo=e(\\\"$ZodCheckNumberFormat\\\",(r,i)=>{X.init(r,i),i.format=i.format||\\\"float64\\\";let v=i.format?.includes(\\\"int\\\"),u=v?\\\"int\\\":\\\"number\\\",[n,t]=yu[i.format];r._zod.onattach.push((o)=>{let $=o._zod.bag;if($.format=i.format,$.minimum=n,$.maximum=t,v)$.pattern=So}),r._zod.check=(o)=>{let $=o.value;if(v){if(!Number.isInteger($)){o.issues.push({expected:u,format:i.format,code:\\\"invalid_type\\\",continue:!1,input:$,inst:r});return}if(!Number.isSafeInteger($)){if($>0)o.issues.push({input:$,code:\\\"too_big\\\",maximum:Number.MAX_SAFE_INTEGER,note:\\\"Integers must be within the safe integer range.\\\",inst:r,origin:u,inclusive:!0,continue:!i.abort});else o.issues.push({input:$,code:\\\"too_small\\\",minimum:Number.MIN_SAFE_INTEGER,note:\\\"Integers must be within the safe integer range.\\\",inst:r,origin:u,inclusive:!0,continue:!i.abort});return}}if($<n)o.issues.push({origin:\\\"number\\\",input:$,code:\\\"too_small\\\",minimum:n,inclusive:!0,inst:r,continue:!i.abort});if($>t)o.issues.push({origin:\\\"number\\\",input:$,code:\\\"too_big\\\",maximum:t,inclusive:!0,inst:r,continue:!i.abort})}}),Go=e(\\\"$ZodCheckBigIntFormat\\\",(r,i)=>{X.init(r,i);let[v,u]=hu[i.format];r._zod.onattach.push((n)=>{let t=n._zod.bag;t.format=i.format,t.minimum=v,t.maximum=u}),r._zod.check=(n)=>{let t=n.value;if(t<v)n.issues.push({origin:\\\"bigint\\\",input:t,code:\\\"too_small\\\",minimum:v,inclusive:!0,inst:r,continue:!i.abort});if(t>u)n.issues.push({origin:\\\"bigint\\\",input:t,code:\\\"too_big\\\",maximum:u,inclusive:!0,inst:r,continue:!i.abort})}}),Ko=e(\\\"$ZodCheckMaxSize\\\",(r,i)=>{var v;X.init(r,i),(v=r._zod.def).when??(v.when=(u)=>{let n=u.value;return!Hr(n)&&n.size!==void 0}),r._zod.onattach.push((u)=>{let n=u._zod.bag.maximum??Number.POSITIVE_INFINITY;if(i.maximum<n)u._zod.bag.maximum=i.maximum}),r._zod.check=(u)=>{let n=u.value;if(n.size<=i.maximum)return;u.issues.push({origin:ti(n),code:\\\"too_big\\\",maximum:i.maximum,inclusive:!0,input:n,inst:r,continue:!i.abort})}}),Bo=e(\\\"$ZodCheckMinSize\\\",(r,i)=>{var v;X.init(r,i),(v=r._zod.def).when??(v.when=(u)=>{let n=u.value;return!Hr(n)&&n.size!==void 0}),r._zod.onattach.push((u)=>{let n=u._zod.bag.minimum??Number.NEGATIVE_INFINITY;if(i.minimum>n)u._zod.bag.minimum=i.minimum}),r._zod.check=(u)=>{let n=u.value;if(n.size>=i.minimum)return;u.issues.push({origin:ti(n),code:\\\"too_small\\\",minimum:i.minimum,inclusive:!0,input:n,inst:r,continue:!i.abort})}}),Ho=e(\\\"$ZodCheckSizeEquals\\\",(r,i)=>{var v;X.init(r,i),(v=r._zod.def).when??(v.when=(u)=>{let n=u.value;return!Hr(n)&&n.size!==void 0}),r._zod.onattach.push((u)=>{let n=u._zod.bag;n.minimum=i.size,n.maximum=i.size,n.size=i.size}),r._zod.check=(u)=>{let n=u.value,t=n.size;if(t===i.size)return;let o=t>i.size;u.issues.push({origin:ti(n),...o?{code:\\\"too_big\\\",maximum:i.size}:{code:\\\"too_small\\\",minimum:i.size},inclusive:!0,exact:!0,input:u.value,inst:r,continue:!i.abort})}}),Fo=e(\\\"$ZodCheckMaxLength\\\",(r,i)=>{var v;X.init(r,i),(v=r._zod.def).when??(v.when=(u)=>{let n=u.value;return!Hr(n)&&n.length!==void 0}),r._zod.onattach.push((u)=>{let n=u._zod.bag.maximum??Number.POSITIVE_INFINITY;if(i.maximum<n)u._zod.bag.maximum=i.maximum}),r._zod.check=(u)=>{let n=u.value;if(n.length<=i.maximum)return;let o=vi(n);u.issues.push({origin:o,code:\\\"too_big\\\",maximum:i.maximum,inclusive:!0,input:n,inst:r,continue:!i.abort})}}),Eo=e(\\\"$ZodCheckMinLength\\\",(r,i)=>{var v;X.init(r,i),(v=r._zod.def).when??(v.when=(u)=>{let n=u.value;return!Hr(n)&&n.length!==void 0}),r._zod.onattach.push((u)=>{let n=u._zod.bag.minimum??Number.NEGATIVE_INFINITY;if(i.minimum>n)u._zod.bag.minimum=i.minimum}),r._zod.check=(u)=>{let n=u.value;if(n.length>=i.minimum)return;let o=vi(n);u.issues.push({origin:o,code:\\\"too_small\\\",minimum:i.minimum,inclusive:!0,input:n,inst:r,continue:!i.abort})}}),To=e(\\\"$ZodCheckLengthEquals\\\",(r,i)=>{var v;X.init(r,i),(v=r._zod.def).when??(v.when=(u)=>{let n=u.value;return!Hr(n)&&n.length!==void 0}),r._zod.onattach.push((u)=>{let n=u._zod.bag;n.minimum=i.length,n.maximum=i.length,n.length=i.length}),r._zod.check=(u)=>{let n=u.value,t=n.length;if(t===i.length)return;let o=vi(n),$=t>i.length;u.issues.push({origin:o,...$?{code:\\\"too_big\\\",maximum:i.length}:{code:\\\"too_small\\\",minimum:i.length},inclusive:!0,exact:!0,input:u.value,inst:r,continue:!i.abort})}}),Vn=e(\\\"$ZodCheckStringFormat\\\",(r,i)=>{var v,u;if(X.init(r,i),r._zod.onattach.push((n)=>{let t=n._zod.bag;if(t.format=i.format,i.pattern)t.patterns??(t.patterns=new Set),t.patterns.add(i.pattern)}),i.pattern)(v=r._zod).check??(v.check=(n)=>{if(i.pattern.lastIndex=0,i.pattern.test(n.value))return;n.issues.push({origin:\\\"string\\\",code:\\\"invalid_format\\\",format:i.format,input:n.value,...i.pattern?{pattern:i.pattern.toString()}:{},inst:r,continue:!i.abort})});else(u=r._zod).check??(u.check=()=>{})}),xo=e(\\\"$ZodCheckRegex\\\",(r,i)=>{Vn.init(r,i),r._zod.check=(v)=>{if(i.pattern.lastIndex=0,i.pattern.test(v.value))return;v.issues.push({origin:\\\"string\\\",code:\\\"invalid_format\\\",format:\\\"regex\\\",input:v.value,pattern:i.pattern.toString(),inst:r,continue:!i.abort})}}),Mo=e(\\\"$ZodCheckLowerCase\\\",(r,i)=>{i.pattern??(i.pattern=Ao),Vn.init(r,i)}),Yo=e(\\\"$ZodCheckUpperCase\\\",(r,i)=>{i.pattern??(i.pattern=Jo),Vn.init(r,i)}),qo=e(\\\"$ZodCheckIncludes\\\",(r,i)=>{X.init(r,i);let v=wr(i.includes),u=new RegExp(typeof i.position===\\\"number\\\"?`^.{${i.position}}${v}`:v);i.pattern=u,r._zod.onattach.push((n)=>{let t=n._zod.bag;t.patterns??(t.patterns=new Set),t.patterns.add(u)}),r._zod.check=(n)=>{if(n.value.includes(i.includes,i.position))return;n.issues.push({origin:\\\"string\\\",code:\\\"invalid_format\\\",format:\\\"includes\\\",includes:i.includes,input:n.value,inst:r,continue:!i.abort})}}),Xo=e(\\\"$ZodCheckStartsWith\\\",(r,i)=>{X.init(r,i);let v=new RegExp(`^${wr(i.prefix)}.*`);i.pattern??(i.pattern=v),r._zod.onattach.push((u)=>{let n=u._zod.bag;n.patterns??(n.patterns=new Set),n.patterns.add(v)}),r._zod.check=(u)=>{if(u.value.startsWith(i.prefix))return;u.issues.push({origin:\\\"string\\\",code:\\\"invalid_format\\\",format:\\\"starts_with\\\",prefix:i.prefix,input:u.value,inst:r,continue:!i.abort})}}),Ro=e(\\\"$ZodCheckEndsWith\\\",(r,i)=>{X.init(r,i);let v=new RegExp(`.*${wr(i.suffix)}$`);i.pattern??(i.pattern=v),r._zod.onattach.push((u)=>{let n=u._zod.bag;n.patterns??(n.patterns=new Set),n.patterns.add(v)}),r._zod.check=(u)=>{if(u.value.endsWith(i.suffix))return;u.issues.push({origin:\\\"string\\\",code:\\\"invalid_format\\\",format:\\\"ends_with\\\",suffix:i.suffix,input:u.value,inst:r,continue:!i.abort})}});Zo=e(\\\"$ZodCheckProperty\\\",(r,i)=>{X.init(r,i),r._zod.check=(v)=>{let u=i.schema._zod.run({value:v.value[i.property],issues:[]},{});if(u instanceof Promise)return u.then((n)=>T6(n,v,i.property));T6(u,v,i.property);return}}),Qo=e(\\\"$ZodCheckMimeType\\\",(r,i)=>{X.init(r,i);let v=new Set(i.mime);r._zod.onattach.push((u)=>{u._zod.bag.mime=i.mime}),r._zod.check=(u)=>{if(v.has(u.value.type))return;u.issues.push({code:\\\"invalid_value\\\",values:i.mime,input:u.value.type,inst:r,continue:!i.abort})}}),Co=e(\\\"$ZodCheckOverwrite\\\",(r,i)=>{X.init(r,i),r._zod.check=(v)=>{v.value=i.tx(v.value)}})});class qt{constructor(r=[]){if(this.content=[],this.indent=0,this)this.args=r}indented(r){this.indent+=1,r(this),this.indent-=1}write(r){if(typeof r===\\\"function\\\"){r(this,{execution:\\\"sync\\\"}),r(this,{execution:\\\"async\\\"});return}let v=r.split(`\\n`).filter((t)=>t),u=Math.min(...v.map((t)=>t.length-t.trimStart().length)),n=v.map((t)=>t.slice(u)).map((t)=>\\\" \\\".repeat(this.indent*2)+t);for(let t of n)this.content.push(t)}compile(){let r=Function,i=this?.args,u=[...(this?.content??[\\\"\\\"]).map((n)=>` ${n}`)];return new r(...i,u.join(`\\n`))}}var fo;var yo=O(()=>{fo={major:4,minor:4,patch:3}});function w$(r){if(r===\\\"\\\")return!0;if(/\\\\s/.test(r))return!1;if(r.length%4!==0)return!1;try{return atob(r),!0}catch{return!1}}function rc(r){if(!Et.test(r))return!1;let i=r.replace(/[-_]/g,(u)=>u===\\\"-\\\"?\\\"+\\\":\\\"/\\\"),v=i.padEnd(Math.ceil(i.length/4)*4,\\\"=\\\");return w$(v)}function nc(r,i=null){try{let v=r.split(\\\".\\\");if(v.length!==3)return!1;let[u]=v;if(!u)return!1;let n=JSON.parse(atob(u));if(\\\"typ\\\"in n&&n?.typ!==\\\"JWT\\\")return!1;if(!n.alg)return!1;if(i&&(!(\\\"alg\\\"in n)||n.alg!==i))return!1;return!0}catch{return!1}}function Y6(r,i,v){if(r.issues.length)i.issues.push(...br(v,r.issues));i.value[v]=r.value}function Qt(r,i,v,u,n,t){let o=v in u;if(r.issues.length){if(n&&t&&!o)return;i.issues.push(...br(v,r.issues))}if(!o&&!n){if(!r.issues.length)i.issues.push({code:\\\"invalid_type\\\",expected:\\\"nonoptional\\\",input:void 0,path:[v]});return}if(r.value===void 0){if(o)i.value[v]=void 0}else i.value[v]=r.value}function ic(r){let i=Object.keys(r.shape);for(let u of i)if(!r.shape?.[u]?._zod?.traits?.has(\\\"$ZodType\\\"))throw Error(`Invalid element at key \\\"${u}\\\": expected a Zod schema`);let v=du(r.shape);return{...r,keys:i,keySet:new Set(i),numKeys:i.length,optionalKeys:new Set(v)}}function tc(r,i,v,u,n,t){let o=[],$=n.keySet,b=n.catchall._zod,g=b.def.type,c=b.optin===\\\"optional\\\",U=b.optout===\\\"optional\\\";for(let w in i){if(w===\\\"__proto__\\\")continue;if($.has(w))continue;if(g===\\\"never\\\"){o.push(w);continue}let m=b.run({value:i[w],issues:[]},u);if(m instanceof Promise)r.push(m.then((A)=>Qt(A,v,w,i,c,U)));else Qt(m,v,w,i,c,U)}if(o.length)v.issues.push({code:\\\"unrecognized_keys\\\",keys:o,input:i,inst:t});if(!r.length)return v;return Promise.all(r).then(()=>{return v})}function q6(r,i,v,u){for(let t of r)if(t.issues.length===0)return i.value=t.value,i;let n=r.filter((t)=>!Tr(t));if(n.length===1)return i.value=n[0].value,n[0];return i.issues.push({code:\\\"invalid_union\\\",input:i.value,inst:v,errors:r.map((t)=>t.issues.map((o)=>$r(o,u,Z())))}),i}function X6(r,i,v,u){let n=r.filter((t)=>t.issues.length===0);if(n.length===1)return i.value=n[0].value,i;if(n.length===0)i.issues.push({code:\\\"invalid_union\\\",input:i.value,inst:v,errors:r.map((t)=>t.issues.map((o)=>$r(o,u,Z())))});else i.issues.push({code:\\\"invalid_union\\\",input:i.value,inst:v,errors:[],inclusive:!1});return i}function ho(r,i){if(r===i)return{valid:!0,data:r};if(r instanceof Date&&i instanceof Date&&+r===+i)return{valid:!0,data:r};if(Er(r)&&Er(i)){let v=Object.keys(i),u=Object.keys(r).filter((t)=>v.indexOf(t)!==-1),n={...r,...i};for(let t of u){let o=ho(r[t],i[t]);if(!o.valid)return{valid:!1,mergeErrorPath:[t,...o.mergeErrorPath]};n[t]=o.data}return{valid:!0,data:n}}if(Array.isArray(r)&&Array.isArray(i)){if(r.length!==i.length)return{valid:!1,mergeErrorPath:[]};let v=[];for(let u=0;u<r.length;u++){let n=r[u],t=i[u],o=ho(n,t);if(!o.valid)return{valid:!1,mergeErrorPath:[u,...o.mergeErrorPath]};v.push(o.data)}return{valid:!0,data:v}}return{valid:!1,mergeErrorPath:[]}}function R6(r,i,v){let u=new Map,n;for(let $ of i.issues)if($.code===\\\"unrecognized_keys\\\"){n??(n=$);for(let b of $.keys){if(!u.has(b))u.set(b,{});u.get(b).l=!0}}else r.issues.push($);for(let $ of v.issues)if($.code===\\\"unrecognized_keys\\\")for(let b of $.keys){if(!u.has(b))u.set(b,{});u.get(b).r=!0}else r.issues.push($);let t=[...u].filter(([,$])=>$.l&&$.r).map(([$])=>$);if(t.length&&n)r.issues.push({...n,keys:t});if(Tr(r))return r;let o=ho(i.value,v.value);if(!o.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(o.mergeErrorPath)}`);return r.value=o.data,r}function Z6(r,i){for(let v=r.length-1;v>=0;v--)if(r[v]._zod[i]!==\\\"optional\\\")return v+1;return 0}function Q6(r,i,v){if(r.issues.length)i.issues.push(...br(v,r.issues));i.value[v]=r.value}function C6(r,i,v,u,n){for(let t=0;t<v.length;t++){let o=r[t],$=t<u.length;if(o.issues.length){if(!$&&t>=n){i.value.length=t;break}i.issues.push(...br(t,o.issues))}i.value[t]=o.value}for(let t=i.value.length-1;t>=u.length;t--)if(v[t]._zod.optout===\\\"optional\\\"&&i.value[t]===void 0)i.value.length=t;else break;return i}function f6(r,i,v,u,n,t,o){if(r.issues.length)if(ii.has(typeof u))v.issues.push(...br(u,r.issues));else v.issues.push({code:\\\"invalid_key\\\",origin:\\\"map\\\",input:n,inst:t,issues:r.issues.map(($)=>$r($,o,Z()))});if(i.issues.length)if(ii.has(typeof u))v.issues.push(...br(u,i.issues));else v.issues.push({origin:\\\"map\\\",code:\\\"invalid_element\\\",input:n,inst:t,key:u,issues:i.issues.map(($)=>$r($,o,Z()))});v.value.set(r.value,i.value)}function d6(r,i){if(r.issues.length)i.issues.push(...r.issues);i.value.add(r.value)}function y6(r,i){if(i===void 0&&(r.issues.length||r.fallback))return{issues:[],value:void 0};return r}function h6(r,i){if(r.value===void 0)r.value=i.defaultValue;return r}function p6(r,i){if(!r.issues.length&&r.value===void 0)r.issues.push({code:\\\"invalid_type\\\",expected:\\\"nonoptional\\\",input:r.value,inst:i});return r}function Xt(r,i,v){if(r.issues.length)return r.aborted=!0,r;return i._zod.run({value:r.value,issues:r.issues,fallback:r.fallback},v)}function Rt(r,i,v){if(r.issues.length)return r.aborted=!0,r;if((v.direction||\\\"forward\\\")===\\\"forward\\\"){let n=i.transform(r.value,r);if(n instanceof Promise)return n.then((t)=>Zt(r,t,i.out,v));return Zt(r,n,i.out,v)}else{let n=i.reverseTransform(r.value,r);if(n instanceof Promise)return n.then((t)=>Zt(r,t,i.in,v));return Zt(r,n,i.in,v)}}function Zt(r,i,v,u){if(r.issues.length)return r.aborted=!0,r;return v._zod.run({value:i,issues:r.issues},u)}function a6(r){return r.value=Object.freeze(r.value),r}function s6(r,i,v,u){if(!r){let n={code:\\\"custom\\\",input:v,inst:u,path:[...u._zod.def.path??[]],continue:!u._zod.def.abort};if(u._zod.def.params)n.params=u._zod.def.params;i.issues.push(On(n))}}var J,ar,Y,po,ao,so,r$,n$,i$,t$,v$,u$,o$,$$,g$,l$,b$,c$,e$,_$,I$,U$,D$,k$,N$,m$,z$,O$,Ct,S$,ei,ft,P$,j$,L$,A$,J$,W$,V$,G$,K$,B$,vc,H$,_i,F$,E$,T$,dt,x$,M$,Y$,q$,X$,R$,Z$,yt,Q$,C$,f$,d$,y$,h$,p$,a$,ht,Ii,s$,rg,ng,ig,tg,vg,ug;var og=O(()=>{Yt();yr();su();Tt();j();yo();j();J=e(\\\"$ZodType\\\",(r,i)=>{var v;r??(r={}),r._zod.def=i,r._zod.bag=r._zod.bag||{},r._zod.version=fo;let u=[...r._zod.def.checks??[]];if(r._zod.traits.has(\\\"$ZodCheck\\\"))u.unshift(r);for(let n of u)for(let t of n._zod.onattach)t(r);if(u.length===0)(v=r._zod).deferred??(v.deferred=[]),r._zod.deferred?.push(()=>{r._zod.run=r._zod.parse});else{let n=(o,$,b)=>{let g=Tr(o),c;for(let U of $){if(U._zod.def.when){if(pu(o))continue;if(!U._zod.def.when(o))continue}else if(g)continue;let w=o.issues.length,m=U._zod.check(o);if(m instanceof Promise&&b?.async===!1)throw new Lr;if(c||m instanceof Promise)c=(c??Promise.resolve()).then(async()=>{if(await m,o.issues.length===w)return;if(!g)g=Tr(o,w)});else{if(o.issues.length===w)continue;if(!g)g=Tr(o,w)}}if(c)return c.then(()=>{return o});return o},t=(o,$,b)=>{if(Tr(o))return o.aborted=!0,o;let g=n($,u,b);if(g instanceof Promise){if(b.async===!1)throw new Lr;return g.then((c)=>r._zod.parse(c,b))}return r._zod.parse(g,b)};r._zod.run=(o,$)=>{if($.skipChecks)return r._zod.parse(o,$);if($.direction===\\\"backward\\\"){let g=r._zod.parse({value:o.value,issues:[]},{...$,skipChecks:!0});if(g instanceof Promise)return g.then((c)=>{return t(c,o,$)});return t(g,o,$)}let b=r._zod.parse(o,$);if(b instanceof Promise){if($.async===!1)throw new Lr;return b.then((g)=>n(g,u,$))}return n(b,u,$)}}G(r,\\\"~standard\\\",()=>({validate:(n)=>{try{let t=Jn(r,n);return t.success?{value:t.data}:{issues:t.error?.issues}}catch(t){return gi(r,n).then((o)=>o.success?{value:o.data}:{issues:o.error?.issues})}},vendor:\\\"zod\\\",version:1}))}),ar=e(\\\"$ZodString\\\",(r,i)=>{J.init(r,i),r._zod.pattern=[...r?._zod.bag?.patterns??[]].pop()??zo(r._zod.bag),r._zod.parse=(v,u)=>{if(i.coerce)try{v.value=String(v.value)}catch(n){}if(typeof v.value===\\\"string\\\")return v;return v.issues.push({expected:\\\"string\\\",code:\\\"invalid_type\\\",input:v.value,inst:r}),v}}),Y=e(\\\"$ZodStringFormat\\\",(r,i)=>{Vn.init(r,i),ar.init(r,i)}),po=e(\\\"$ZodGUID\\\",(r,i)=>{i.pattern??(i.pattern=$o),Y.init(r,i)}),ao=e(\\\"$ZodUUID\\\",(r,i)=>{if(i.version){let u={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[i.version];if(u===void 0)throw Error(`Invalid UUID version: \\\"${i.version}\\\"`);i.pattern??(i.pattern=pr(u))}else i.pattern??(i.pattern=pr());Y.init(r,i)}),so=e(\\\"$ZodEmail\\\",(r,i)=>{i.pattern??(i.pattern=go),Y.init(r,i)}),r$=e(\\\"$ZodURL\\\",(r,i)=>{Y.init(r,i),r._zod.check=(v)=>{try{let u=v.value.trim();if(!i.normalize&&i.protocol?.source===Do.source){if(!/^https?:\\\\/\\\\//i.test(u)){v.issues.push({code:\\\"invalid_format\\\",format:\\\"url\\\",note:\\\"Invalid URL format\\\",input:v.value,inst:r,continue:!i.abort});return}}let n=new URL(u);if(i.hostname){if(i.hostname.lastIndex=0,!i.hostname.test(n.hostname))v.issues.push({code:\\\"invalid_format\\\",format:\\\"url\\\",note:\\\"Invalid hostname\\\",pattern:i.hostname.source,input:v.value,inst:r,continue:!i.abort})}if(i.protocol){if(i.protocol.lastIndex=0,!i.protocol.test(n.protocol.endsWith(\\\":\\\")?n.protocol.slice(0,-1):n.protocol))v.issues.push({code:\\\"invalid_format\\\",format:\\\"url\\\",note:\\\"Invalid protocol\\\",pattern:i.protocol.source,input:v.value,inst:r,continue:!i.abort})}if(i.normalize)v.value=n.href;else v.value=u;return}catch(u){v.issues.push({code:\\\"invalid_format\\\",format:\\\"url\\\",input:v.value,inst:r,continue:!i.abort})}}}),n$=e(\\\"$ZodEmoji\\\",(r,i)=>{i.pattern??(i.pattern=lo()),Y.init(r,i)}),i$=e(\\\"$ZodNanoID\\\",(r,i)=>{i.pattern??(i.pattern=uo),Y.init(r,i)}),t$=e(\\\"$ZodCUID\\\",(r,i)=>{i.pattern??(i.pattern=ro),Y.init(r,i)}),v$=e(\\\"$ZodCUID2\\\",(r,i)=>{i.pattern??(i.pattern=no),Y.init(r,i)}),u$=e(\\\"$ZodULID\\\",(r,i)=>{i.pattern??(i.pattern=io),Y.init(r,i)}),o$=e(\\\"$ZodXID\\\",(r,i)=>{i.pattern??(i.pattern=to),Y.init(r,i)}),$$=e(\\\"$ZodKSUID\\\",(r,i)=>{i.pattern??(i.pattern=vo),Y.init(r,i)}),g$=e(\\\"$ZodISODateTime\\\",(r,i)=>{i.pattern??(i.pattern=mo(i)),Y.init(r,i)}),l$=e(\\\"$ZodISODate\\\",(r,i)=>{i.pattern??(i.pattern=ko),Y.init(r,i)}),b$=e(\\\"$ZodISOTime\\\",(r,i)=>{i.pattern??(i.pattern=No(i)),Y.init(r,i)}),c$=e(\\\"$ZodISODuration\\\",(r,i)=>{i.pattern??(i.pattern=oo),Y.init(r,i)}),e$=e(\\\"$ZodIPv4\\\",(r,i)=>{i.pattern??(i.pattern=bo),Y.init(r,i),r._zod.bag.format=\\\"ipv4\\\"}),_$=e(\\\"$ZodIPv6\\\",(r,i)=>{i.pattern??(i.pattern=co),Y.init(r,i),r._zod.bag.format=\\\"ipv6\\\",r._zod.check=(v)=>{try{new URL(`http://[${v.value}]`)}catch{v.issues.push({code:\\\"invalid_format\\\",format:\\\"ipv6\\\",input:v.value,inst:r,continue:!i.abort})}}}),I$=e(\\\"$ZodMAC\\\",(r,i)=>{i.pattern??(i.pattern=eo(i.delimiter)),Y.init(r,i),r._zod.bag.format=\\\"mac\\\"}),U$=e(\\\"$ZodCIDRv4\\\",(r,i)=>{i.pattern??(i.pattern=_o),Y.init(r,i)}),D$=e(\\\"$ZodCIDRv6\\\",(r,i)=>{i.pattern??(i.pattern=Io),Y.init(r,i),r._zod.check=(v)=>{let u=v.value.split(\\\"/\\\");try{if(u.length!==2)throw Error();let[n,t]=u;if(!t)throw Error();let o=Number(t);if(`${o}`!==t)throw Error();if(o<0||o>128)throw Error();new URL(`http://[${n}]`)}catch{v.issues.push({code:\\\"invalid_format\\\",format:\\\"cidrv6\\\",input:v.value,inst:r,continue:!i.abort})}}});k$=e(\\\"$ZodBase64\\\",(r,i)=>{i.pattern??(i.pattern=Uo),Y.init(r,i),r._zod.bag.contentEncoding=\\\"base64\\\",r._zod.check=(v)=>{if(w$(v.value))return;v.issues.push({code:\\\"invalid_format\\\",format:\\\"base64\\\",input:v.value,inst:r,continue:!i.abort})}});N$=e(\\\"$ZodBase64URL\\\",(r,i)=>{i.pattern??(i.pattern=Et),Y.init(r,i),r._zod.bag.contentEncoding=\\\"base64url\\\",r._zod.check=(v)=>{if(rc(v.value))return;v.issues.push({code:\\\"invalid_format\\\",format:\\\"base64url\\\",input:v.value,inst:r,continue:!i.abort})}}),m$=e(\\\"$ZodE164\\\",(r,i)=>{i.pattern??(i.pattern=wo),Y.init(r,i)});z$=e(\\\"$ZodJWT\\\",(r,i)=>{Y.init(r,i),r._zod.check=(v)=>{if(nc(v.value,i.alg))return;v.issues.push({code:\\\"invalid_format\\\",format:\\\"jwt\\\",input:v.value,inst:r,continue:!i.abort})}}),O$=e(\\\"$ZodCustomStringFormat\\\",(r,i)=>{Y.init(r,i),r._zod.check=(v)=>{if(i.fn(v.value))return;v.issues.push({code:\\\"invalid_format\\\",format:i.format,input:v.value,inst:r,continue:!i.abort})}}),Ct=e(\\\"$ZodNumber\\\",(r,i)=>{J.init(r,i),r._zod.pattern=r._zod.bag.pattern??li,r._zod.parse=(v,u)=>{if(i.coerce)try{v.value=Number(v.value)}catch(o){}let n=v.value;if(typeof n===\\\"number\\\"&&!Number.isNaN(n)&&Number.isFinite(n))return v;let t=typeof n===\\\"number\\\"?Number.isNaN(n)?\\\"NaN\\\":!Number.isFinite(n)?\\\"Infinity\\\":void 0:void 0;return v.issues.push({expected:\\\"number\\\",code:\\\"invalid_type\\\",input:n,inst:r,...t?{received:t}:{}}),v}}),S$=e(\\\"$ZodNumberFormat\\\",(r,i)=>{Vo.init(r,i),Ct.init(r,i)}),ei=e(\\\"$ZodBoolean\\\",(r,i)=>{J.init(r,i),r._zod.pattern=Po,r._zod.parse=(v,u)=>{if(i.coerce)try{v.value=Boolean(v.value)}catch(t){}let n=v.value;if(typeof n===\\\"boolean\\\")return v;return v.issues.push({expected:\\\"boolean\\\",code:\\\"invalid_type\\\",input:n,inst:r}),v}}),ft=e(\\\"$ZodBigInt\\\",(r,i)=>{J.init(r,i),r._zod.pattern=Oo,r._zod.parse=(v,u)=>{if(i.coerce)try{v.value=BigInt(v.value)}catch(n){}if(typeof v.value===\\\"bigint\\\")return v;return v.issues.push({expected:\\\"bigint\\\",code:\\\"invalid_type\\\",input:v.value,inst:r}),v}}),P$=e(\\\"$ZodBigIntFormat\\\",(r,i)=>{Go.init(r,i),ft.init(r,i)}),j$=e(\\\"$ZodSymbol\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v,u)=>{let n=v.value;if(typeof n===\\\"symbol\\\")return v;return v.issues.push({expected:\\\"symbol\\\",code:\\\"invalid_type\\\",input:n,inst:r}),v}}),L$=e(\\\"$ZodUndefined\\\",(r,i)=>{J.init(r,i),r._zod.pattern=Lo,r._zod.values=new Set([void 0]),r._zod.parse=(v,u)=>{let n=v.value;if(typeof n>\\\"u\\\")return v;return v.issues.push({expected:\\\"undefined\\\",code:\\\"invalid_type\\\",input:n,inst:r}),v}}),A$=e(\\\"$ZodNull\\\",(r,i)=>{J.init(r,i),r._zod.pattern=jo,r._zod.values=new Set([null]),r._zod.parse=(v,u)=>{let n=v.value;if(n===null)return v;return v.issues.push({expected:\\\"null\\\",code:\\\"invalid_type\\\",input:n,inst:r}),v}}),J$=e(\\\"$ZodAny\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v)=>v}),W$=e(\\\"$ZodUnknown\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v)=>v}),V$=e(\\\"$ZodNever\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v,u)=>{return v.issues.push({expected:\\\"never\\\",code:\\\"invalid_type\\\",input:v.value,inst:r}),v}}),G$=e(\\\"$ZodVoid\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v,u)=>{let n=v.value;if(typeof n>\\\"u\\\")return v;return v.issues.push({expected:\\\"void\\\",code:\\\"invalid_type\\\",input:n,inst:r}),v}}),K$=e(\\\"$ZodDate\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v,u)=>{if(i.coerce)try{v.value=new Date(v.value)}catch($){}let n=v.value,t=n instanceof Date;if(t&&!Number.isNaN(n.getTime()))return v;return v.issues.push({expected:\\\"date\\\",code:\\\"invalid_type\\\",input:n,...t?{received:\\\"Invalid Date\\\"}:{},inst:r}),v}});B$=e(\\\"$ZodArray\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v,u)=>{let n=v.value;if(!Array.isArray(n))return v.issues.push({expected:\\\"array\\\",code:\\\"invalid_type\\\",input:n,inst:r}),v;v.value=Array(n.length);let t=[];for(let o=0;o<n.length;o++){let $=n[o],b=i.element._zod.run({value:$,issues:[]},u);if(b instanceof Promise)t.push(b.then((g)=>Y6(g,v,o)));else Y6(b,v,o)}if(t.length)return Promise.all(t).then(()=>v);return v}});vc=e(\\\"$ZodObject\\\",(r,i)=>{if(J.init(r,i),!Object.getOwnPropertyDescriptor(i,\\\"shape\\\")?.get){let $=i.shape;Object.defineProperty(i,\\\"shape\\\",{get:()=>{let b={...$};return Object.defineProperty(i,\\\"shape\\\",{value:b}),b}})}let u=zn(()=>ic(i));G(r._zod,\\\"propValues\\\",()=>{let $=i.shape,b={};for(let g in $){let c=$[g]._zod;if(c.values){b[g]??(b[g]=new Set);for(let U of c.values)b[g].add(U)}}return b});let n=hr,t=i.catchall,o;r._zod.parse=($,b)=>{o??(o=u.value);let g=$.value;if(!n(g))return $.issues.push({expected:\\\"object\\\",code:\\\"invalid_type\\\",input:g,inst:r}),$;$.value={};let c=[],U=o.shape;for(let w of o.keys){let m=U[w],A=m._zod.optin===\\\"optional\\\",ir=m._zod.optout===\\\"optional\\\",R=m._zod.run({value:g[w],issues:[]},b);if(R instanceof Promise)c.push(R.then((f)=>Qt(f,$,w,g,A,ir)));else Qt(R,$,w,g,A,ir)}if(!t)return c.length?Promise.all(c).then(()=>$):$;return tc(c,g,$,b,u.value,r)}}),H$=e(\\\"$ZodObjectJIT\\\",(r,i)=>{vc.init(r,i);let v=r._zod.parse,u=zn(()=>ic(i)),n=(w)=>{let m=new qt([\\\"shape\\\",\\\"payload\\\",\\\"ctx\\\"]),A=u.value,ir=(or)=>{let Q=Pt(or);return`shape[${Q}]._zod.run({ value: input[${Q}], issues: [] }, ctx)`};m.write(\\\"const input = payload.value;\\\");let R=Object.create(null),f=0;for(let or of A.keys)R[or]=`key_${f++}`;m.write(\\\"const newResult = {};\\\");for(let or of A.keys){let Q=R[or],a=Pt(or),w6=w[or],k6=w6?._zod?.optin===\\\"optional\\\",de=w6?._zod?.optout===\\\"optional\\\";if(m.write(`const ${Q} = ${ir(or)};`),k6&&de)m.write(`\\n if (${Q}.issues.length) {\\n if (${a} in input) {\\n payload.issues = payload.issues.concat(${Q}.issues.map(iss => ({\\n ...iss,\\n path: iss.path ? [${a}, ...iss.path] : [${a}]\\n })));\\n }\\n }\\n \\n if (${Q}.value === undefined) {\\n if (${a} in input) {\\n newResult[${a}] = undefined;\\n }\\n } else {\\n newResult[${a}] = ${Q}.value;\\n }\\n \\n `);else if(!k6)m.write(`\\n const ${Q}_present = ${a} in input;\\n if (${Q}.issues.length) {\\n payload.issues = payload.issues.concat(${Q}.issues.map(iss => ({\\n ...iss,\\n path: iss.path ? [${a}, ...iss.path] : [${a}]\\n })));\\n }\\n if (!${Q}_present && !${Q}.issues.length) {\\n payload.issues.push({\\n code: \\\"invalid_type\\\",\\n expected: \\\"nonoptional\\\",\\n input: undefined,\\n path: [${a}]\\n });\\n }\\n\\n if (${Q}_present) {\\n if (${Q}.value === undefined) {\\n newResult[${a}] = undefined;\\n } else {\\n newResult[${a}] = ${Q}.value;\\n }\\n }\\n\\n `);else m.write(`\\n if (${Q}.issues.length) {\\n payload.issues = payload.issues.concat(${Q}.issues.map(iss => ({\\n ...iss,\\n path: iss.path ? [${a}, ...iss.path] : [${a}]\\n })));\\n }\\n \\n if (${Q}.value === undefined) {\\n if (${a} in input) {\\n newResult[${a}] = undefined;\\n }\\n } else {\\n newResult[${a}] = ${Q}.value;\\n }\\n \\n `)}m.write(\\\"payload.value = newResult;\\\"),m.write(\\\"return payload;\\\");let Ur=m.compile();return(or,Q)=>Ur(w,or,Q)},t,o=hr,$=!fr.jitless,g=$&&Qu.value,c=i.catchall,U;r._zod.parse=(w,m)=>{U??(U=u.value);let A=w.value;if(!o(A))return w.issues.push({expected:\\\"object\\\",code:\\\"invalid_type\\\",input:A,inst:r}),w;if($&&g&&m?.async===!1&&m.jitless!==!0){if(!t)t=n(i.shape);if(w=t(w,m),!c)return w;return tc([],A,w,m,U,r)}return v(w,m)}});_i=e(\\\"$ZodUnion\\\",(r,i)=>{J.init(r,i),G(r._zod,\\\"optin\\\",()=>i.options.some((u)=>u._zod.optin===\\\"optional\\\")?\\\"optional\\\":void 0),G(r._zod,\\\"optout\\\",()=>i.options.some((u)=>u._zod.optout===\\\"optional\\\")?\\\"optional\\\":void 0),G(r._zod,\\\"values\\\",()=>{if(i.options.every((u)=>u._zod.values))return new Set(i.options.flatMap((u)=>Array.from(u._zod.values)));return}),G(r._zod,\\\"pattern\\\",()=>{if(i.options.every((u)=>u._zod.pattern)){let u=i.options.map((n)=>n._zod.pattern);return new RegExp(`^(${u.map((n)=>ni(n.source)).join(\\\"|\\\")})$`)}return});let v=i.options.length===1?i.options[0]._zod.run:null;r._zod.parse=(u,n)=>{if(v)return v(u,n);let t=!1,o=[];for(let $ of i.options){let b=$._zod.run({value:u.value,issues:[]},n);if(b instanceof Promise)o.push(b),t=!0;else{if(b.issues.length===0)return b;o.push(b)}}if(!t)return q6(o,u,r,n);return Promise.all(o).then(($)=>{return q6($,u,r,n)})}});F$=e(\\\"$ZodXor\\\",(r,i)=>{_i.init(r,i),i.inclusive=!1;let v=i.options.length===1?i.options[0]._zod.run:null;r._zod.parse=(u,n)=>{if(v)return v(u,n);let t=!1,o=[];for(let $ of i.options){let b=$._zod.run({value:u.value,issues:[]},n);if(b instanceof Promise)o.push(b),t=!0;else o.push(b)}if(!t)return X6(o,u,r,n);return Promise.all(o).then(($)=>{return X6($,u,r,n)})}}),E$=e(\\\"$ZodDiscriminatedUnion\\\",(r,i)=>{i.inclusive=!1,_i.init(r,i);let v=r._zod.parse;G(r._zod,\\\"propValues\\\",()=>{let n={};for(let t of i.options){let o=t._zod.propValues;if(!o||Object.keys(o).length===0)throw Error(`Invalid discriminated union option at index \\\"${i.options.indexOf(t)}\\\"`);for(let[$,b]of Object.entries(o)){if(!n[$])n[$]=new Set;for(let g of b)n[$].add(g)}}return n});let u=zn(()=>{let n=i.options,t=new Map;for(let o of n){let $=o._zod.propValues?.[i.discriminator];if(!$||$.size===0)throw Error(`Invalid discriminated union option at index \\\"${i.options.indexOf(o)}\\\"`);for(let b of $){if(t.has(b))throw Error(`Duplicate discriminator value \\\"${String(b)}\\\"`);t.set(b,o)}}return t});r._zod.parse=(n,t)=>{let o=n.value;if(!hr(o))return n.issues.push({code:\\\"invalid_type\\\",expected:\\\"object\\\",input:o,inst:r}),n;let $=u.value.get(o?.[i.discriminator]);if($)return $._zod.run(n,t);if(i.unionFallback||t.direction===\\\"backward\\\")return v(n,t);return n.issues.push({code:\\\"invalid_union\\\",errors:[],note:\\\"No matching discriminator\\\",discriminator:i.discriminator,options:Array.from(u.value.keys()),input:o,path:[i.discriminator],inst:r}),n}}),T$=e(\\\"$ZodIntersection\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v,u)=>{let n=v.value,t=i.left._zod.run({value:n,issues:[]},u),o=i.right._zod.run({value:n,issues:[]},u);if(t instanceof Promise||o instanceof Promise)return Promise.all([t,o]).then(([b,g])=>{return R6(v,b,g)});return R6(v,t,o)}});dt=e(\\\"$ZodTuple\\\",(r,i)=>{J.init(r,i);let v=i.items;r._zod.parse=(u,n)=>{let t=u.value;if(!Array.isArray(t))return u.issues.push({input:t,inst:r,expected:\\\"tuple\\\",code:\\\"invalid_type\\\"}),u;u.value=[];let o=[],$=Z6(v,\\\"optin\\\"),b=Z6(v,\\\"optout\\\");if(!i.rest){if(t.length<$)return u.issues.push({code:\\\"too_small\\\",minimum:$,inclusive:!0,input:t,inst:r,origin:\\\"array\\\"}),u;if(t.length>v.length)u.issues.push({code:\\\"too_big\\\",maximum:v.length,inclusive:!0,input:t,inst:r,origin:\\\"array\\\"})}let g=Array(v.length);for(let c=0;c<v.length;c++){let U=v[c]._zod.run({value:t[c],issues:[]},n);if(U instanceof Promise)o.push(U.then((w)=>{g[c]=w}));else g[c]=U}if(i.rest){let c=v.length-1,U=t.slice(v.length);for(let w of U){c++;let m=i.rest._zod.run({value:w,issues:[]},n);if(m instanceof Promise)o.push(m.then((A)=>Q6(A,u,c)));else Q6(m,u,c)}}if(o.length)return Promise.all(o).then(()=>C6(g,u,v,t,b));return C6(g,u,v,t,b)}});x$=e(\\\"$ZodRecord\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v,u)=>{let n=v.value;if(!Er(n))return v.issues.push({expected:\\\"record\\\",code:\\\"invalid_type\\\",input:n,inst:r}),v;let t=[],o=i.keyType._zod.values;if(o){v.value={};let $=new Set;for(let g of o)if(typeof g===\\\"string\\\"||typeof g===\\\"number\\\"||typeof g===\\\"symbol\\\"){$.add(typeof g===\\\"number\\\"?g.toString():g);let c=i.keyType._zod.run({value:g,issues:[]},u);if(c instanceof Promise)throw Error(\\\"Async schemas not supported in object keys currently\\\");if(c.issues.length){v.issues.push({code:\\\"invalid_key\\\",origin:\\\"record\\\",issues:c.issues.map((m)=>$r(m,u,Z())),input:g,path:[g],inst:r});continue}let U=c.value,w=i.valueType._zod.run({value:n[g],issues:[]},u);if(w instanceof Promise)t.push(w.then((m)=>{if(m.issues.length)v.issues.push(...br(g,m.issues));v.value[U]=m.value}));else{if(w.issues.length)v.issues.push(...br(g,w.issues));v.value[U]=w.value}}let b;for(let g in n)if(!$.has(g))b=b??[],b.push(g);if(b&&b.length>0)v.issues.push({code:\\\"unrecognized_keys\\\",input:n,inst:r,keys:b})}else{v.value={};for(let $ of Reflect.ownKeys(n)){if($===\\\"__proto__\\\")continue;if(!Object.prototype.propertyIsEnumerable.call(n,$))continue;let b=i.keyType._zod.run({value:$,issues:[]},u);if(b instanceof Promise)throw Error(\\\"Async schemas not supported in object keys currently\\\");if(typeof $===\\\"string\\\"&&li.test($)&&b.issues.length){let U=i.keyType._zod.run({value:Number($),issues:[]},u);if(U instanceof Promise)throw Error(\\\"Async schemas not supported in object keys currently\\\");if(U.issues.length===0)b=U}if(b.issues.length){if(i.mode===\\\"loose\\\")v.value[$]=n[$];else v.issues.push({code:\\\"invalid_key\\\",origin:\\\"record\\\",issues:b.issues.map((U)=>$r(U,u,Z())),input:$,path:[$],inst:r});continue}let c=i.valueType._zod.run({value:n[$],issues:[]},u);if(c instanceof Promise)t.push(c.then((U)=>{if(U.issues.length)v.issues.push(...br($,U.issues));v.value[b.value]=U.value}));else{if(c.issues.length)v.issues.push(...br($,c.issues));v.value[b.value]=c.value}}}if(t.length)return Promise.all(t).then(()=>v);return v}}),M$=e(\\\"$ZodMap\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v,u)=>{let n=v.value;if(!(n instanceof Map))return v.issues.push({expected:\\\"map\\\",code:\\\"invalid_type\\\",input:n,inst:r}),v;let t=[];v.value=new Map;for(let[o,$]of n){let b=i.keyType._zod.run({value:o,issues:[]},u),g=i.valueType._zod.run({value:$,issues:[]},u);if(b instanceof Promise||g instanceof Promise)t.push(Promise.all([b,g]).then(([c,U])=>{f6(c,U,v,o,n,r,u)}));else f6(b,g,v,o,n,r,u)}if(t.length)return Promise.all(t).then(()=>v);return v}});Y$=e(\\\"$ZodSet\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v,u)=>{let n=v.value;if(!(n instanceof Set))return v.issues.push({input:n,inst:r,expected:\\\"set\\\",code:\\\"invalid_type\\\"}),v;let t=[];v.value=new Set;for(let o of n){let $=i.valueType._zod.run({value:o,issues:[]},u);if($ instanceof Promise)t.push($.then((b)=>d6(b,v)));else d6($,v)}if(t.length)return Promise.all(t).then(()=>v);return v}});q$=e(\\\"$ZodEnum\\\",(r,i)=>{J.init(r,i);let v=ri(i.entries),u=new Set(v);r._zod.values=u,r._zod.pattern=new RegExp(`^(${v.filter((n)=>ii.has(typeof n)).map((n)=>typeof n===\\\"string\\\"?wr(n):n.toString()).join(\\\"|\\\")})$`),r._zod.parse=(n,t)=>{let o=n.value;if(u.has(o))return n;return n.issues.push({code:\\\"invalid_value\\\",values:v,input:o,inst:r}),n}}),X$=e(\\\"$ZodLiteral\\\",(r,i)=>{if(J.init(r,i),i.values.length===0)throw Error(\\\"Cannot create literal schema with no valid values\\\");let v=new Set(i.values);r._zod.values=v,r._zod.pattern=new RegExp(`^(${i.values.map((u)=>typeof u===\\\"string\\\"?wr(u):u?wr(u.toString()):String(u)).join(\\\"|\\\")})$`),r._zod.parse=(u,n)=>{let t=u.value;if(v.has(t))return u;return u.issues.push({code:\\\"invalid_value\\\",values:i.values,input:t,inst:r}),u}}),R$=e(\\\"$ZodFile\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v,u)=>{let n=v.value;if(n instanceof File)return v;return v.issues.push({expected:\\\"file\\\",code:\\\"invalid_type\\\",input:n,inst:r}),v}}),Z$=e(\\\"$ZodTransform\\\",(r,i)=>{J.init(r,i),r._zod.optin=\\\"optional\\\",r._zod.parse=(v,u)=>{if(u.direction===\\\"backward\\\")throw new dr(r.constructor.name);let n=i.transform(v.value,v);if(u.async)return(n instanceof Promise?n:Promise.resolve(n)).then((o)=>{return v.value=o,v.fallback=!0,v});if(n instanceof Promise)throw new Lr;return v.value=n,v.fallback=!0,v}});yt=e(\\\"$ZodOptional\\\",(r,i)=>{J.init(r,i),r._zod.optin=\\\"optional\\\",r._zod.optout=\\\"optional\\\",G(r._zod,\\\"values\\\",()=>{return i.innerType._zod.values?new Set([...i.innerType._zod.values,void 0]):void 0}),G(r._zod,\\\"pattern\\\",()=>{let v=i.innerType._zod.pattern;return v?new RegExp(`^(${ni(v.source)})?$`):void 0}),r._zod.parse=(v,u)=>{if(i.innerType._zod.optin===\\\"optional\\\"){let n=v.value,t=i.innerType._zod.run(v,u);if(t instanceof Promise)return t.then((o)=>y6(o,n));return y6(t,n)}if(v.value===void 0)return v;return i.innerType._zod.run(v,u)}}),Q$=e(\\\"$ZodExactOptional\\\",(r,i)=>{yt.init(r,i),G(r._zod,\\\"values\\\",()=>i.innerType._zod.values),G(r._zod,\\\"pattern\\\",()=>i.innerType._zod.pattern),r._zod.parse=(v,u)=>{return i.innerType._zod.run(v,u)}}),C$=e(\\\"$ZodNullable\\\",(r,i)=>{J.init(r,i),G(r._zod,\\\"optin\\\",()=>i.innerType._zod.optin),G(r._zod,\\\"optout\\\",()=>i.innerType._zod.optout),G(r._zod,\\\"pattern\\\",()=>{let v=i.innerType._zod.pattern;return v?new RegExp(`^(${ni(v.source)}|null)$`):void 0}),G(r._zod,\\\"values\\\",()=>{return i.innerType._zod.values?new Set([...i.innerType._zod.values,null]):void 0}),r._zod.parse=(v,u)=>{if(v.value===null)return v;return i.innerType._zod.run(v,u)}}),f$=e(\\\"$ZodDefault\\\",(r,i)=>{J.init(r,i),r._zod.optin=\\\"optional\\\",G(r._zod,\\\"values\\\",()=>i.innerType._zod.values),r._zod.parse=(v,u)=>{if(u.direction===\\\"backward\\\")return i.innerType._zod.run(v,u);if(v.value===void 0)return v.value=i.defaultValue,v;let n=i.innerType._zod.run(v,u);if(n instanceof Promise)return n.then((t)=>h6(t,i));return h6(n,i)}});d$=e(\\\"$ZodPrefault\\\",(r,i)=>{J.init(r,i),r._zod.optin=\\\"optional\\\",G(r._zod,\\\"values\\\",()=>i.innerType._zod.values),r._zod.parse=(v,u)=>{if(u.direction===\\\"backward\\\")return i.innerType._zod.run(v,u);if(v.value===void 0)v.value=i.defaultValue;return i.innerType._zod.run(v,u)}}),y$=e(\\\"$ZodNonOptional\\\",(r,i)=>{J.init(r,i),G(r._zod,\\\"values\\\",()=>{let v=i.innerType._zod.values;return v?new Set([...v].filter((u)=>u!==void 0)):void 0}),r._zod.parse=(v,u)=>{let n=i.innerType._zod.run(v,u);if(n instanceof Promise)return n.then((t)=>p6(t,r));return p6(n,r)}});h$=e(\\\"$ZodSuccess\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v,u)=>{if(u.direction===\\\"backward\\\")throw new dr(\\\"ZodSuccess\\\");let n=i.innerType._zod.run(v,u);if(n instanceof Promise)return n.then((t)=>{return v.value=t.issues.length===0,v});return v.value=n.issues.length===0,v}}),p$=e(\\\"$ZodCatch\\\",(r,i)=>{J.init(r,i),r._zod.optin=\\\"optional\\\",G(r._zod,\\\"optout\\\",()=>i.innerType._zod.optout),G(r._zod,\\\"values\\\",()=>i.innerType._zod.values),r._zod.parse=(v,u)=>{if(u.direction===\\\"backward\\\")return i.innerType._zod.run(v,u);let n=i.innerType._zod.run(v,u);if(n instanceof Promise)return n.then((t)=>{if(v.value=t.value,t.issues.length)v.value=i.catchValue({...v,error:{issues:t.issues.map((o)=>$r(o,u,Z()))},input:v.value}),v.issues=[],v.fallback=!0;return v});if(v.value=n.value,n.issues.length)v.value=i.catchValue({...v,error:{issues:n.issues.map((t)=>$r(t,u,Z()))},input:v.value}),v.issues=[],v.fallback=!0;return v}}),a$=e(\\\"$ZodNaN\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v,u)=>{if(typeof v.value!==\\\"number\\\"||!Number.isNaN(v.value))return v.issues.push({input:v.value,inst:r,expected:\\\"nan\\\",code:\\\"invalid_type\\\"}),v;return v}}),ht=e(\\\"$ZodPipe\\\",(r,i)=>{J.init(r,i),G(r._zod,\\\"values\\\",()=>i.in._zod.values),G(r._zod,\\\"optin\\\",()=>i.in._zod.optin),G(r._zod,\\\"optout\\\",()=>i.out._zod.optout),G(r._zod,\\\"propValues\\\",()=>i.in._zod.propValues),r._zod.parse=(v,u)=>{if(u.direction===\\\"backward\\\"){let t=i.out._zod.run(v,u);if(t instanceof Promise)return t.then((o)=>Xt(o,i.in,u));return Xt(t,i.in,u)}let n=i.in._zod.run(v,u);if(n instanceof Promise)return n.then((t)=>Xt(t,i.out,u));return Xt(n,i.out,u)}});Ii=e(\\\"$ZodCodec\\\",(r,i)=>{J.init(r,i),G(r._zod,\\\"values\\\",()=>i.in._zod.values),G(r._zod,\\\"optin\\\",()=>i.in._zod.optin),G(r._zod,\\\"optout\\\",()=>i.out._zod.optout),G(r._zod,\\\"propValues\\\",()=>i.in._zod.propValues),r._zod.parse=(v,u)=>{if((u.direction||\\\"forward\\\")===\\\"forward\\\"){let t=i.in._zod.run(v,u);if(t instanceof Promise)return t.then((o)=>Rt(o,i,u));return Rt(t,i,u)}else{let t=i.out._zod.run(v,u);if(t instanceof Promise)return t.then((o)=>Rt(o,i,u));return Rt(t,i,u)}}});s$=e(\\\"$ZodPreprocess\\\",(r,i)=>{ht.init(r,i)}),rg=e(\\\"$ZodReadonly\\\",(r,i)=>{J.init(r,i),G(r._zod,\\\"propValues\\\",()=>i.innerType._zod.propValues),G(r._zod,\\\"values\\\",()=>i.innerType._zod.values),G(r._zod,\\\"optin\\\",()=>i.innerType?._zod?.optin),G(r._zod,\\\"optout\\\",()=>i.innerType?._zod?.optout),r._zod.parse=(v,u)=>{if(u.direction===\\\"backward\\\")return i.innerType._zod.run(v,u);let n=i.innerType._zod.run(v,u);if(n instanceof Promise)return n.then(a6);return a6(n)}});ng=e(\\\"$ZodTemplateLiteral\\\",(r,i)=>{J.init(r,i);let v=[];for(let u of i.parts)if(typeof u===\\\"object\\\"&&u!==null){if(!u._zod.pattern)throw Error(`Invalid template literal part, no pattern found: ${[...u._zod.traits].shift()}`);let n=u._zod.pattern instanceof RegExp?u._zod.pattern.source:u._zod.pattern;if(!n)throw Error(`Invalid template literal part: ${u._zod.traits}`);let t=n.startsWith(\\\"^\\\")?1:0,o=n.endsWith(\\\"$\\\")?n.length-1:n.length;v.push(n.slice(t,o))}else if(u===null||fu.has(typeof u))v.push(wr(`${u}`));else throw Error(`Invalid template literal part: ${u}`);r._zod.pattern=new RegExp(`^${v.join(\\\"\\\")}$`),r._zod.parse=(u,n)=>{if(typeof u.value!==\\\"string\\\")return u.issues.push({input:u.value,inst:r,expected:\\\"string\\\",code:\\\"invalid_type\\\"}),u;if(r._zod.pattern.lastIndex=0,!r._zod.pattern.test(u.value))return u.issues.push({input:u.value,inst:r,code:\\\"invalid_format\\\",format:i.format??\\\"template_literal\\\",pattern:r._zod.pattern.source}),u;return u}}),ig=e(\\\"$ZodFunction\\\",(r,i)=>{return J.init(r,i),r._def=i,r._zod.def=i,r.implement=(v)=>{if(typeof v!==\\\"function\\\")throw Error(\\\"implement() must be called with a function\\\");return function(...u){let n=r._def.input?oi(r._def.input,u):u,t=Reflect.apply(v,this,n);if(r._def.output)return oi(r._def.output,t);return t}},r.implementAsync=(v)=>{if(typeof v!==\\\"function\\\")throw Error(\\\"implementAsync() must be called with a function\\\");return async function(...u){let n=r._def.input?await $i(r._def.input,u):u,t=await Reflect.apply(v,this,n);if(r._def.output)return await $i(r._def.output,t);return t}},r._zod.parse=(v,u)=>{if(typeof v.value!==\\\"function\\\")return v.issues.push({code:\\\"invalid_type\\\",expected:\\\"function\\\",input:v.value,inst:r}),v;if(r._def.output&&r._def.output._zod.def.type===\\\"promise\\\")v.value=r.implementAsync(v.value);else v.value=r.implement(v.value);return v},r.input=(...v)=>{let u=r.constructor;if(Array.isArray(v[0]))return new u({type:\\\"function\\\",input:new dt({type:\\\"tuple\\\",items:v[0],rest:v[1]}),output:r._def.output});return new u({type:\\\"function\\\",input:v[0],output:r._def.output})},r.output=(v)=>{return new r.constructor({type:\\\"function\\\",input:r._def.input,output:v})},r}),tg=e(\\\"$ZodPromise\\\",(r,i)=>{J.init(r,i),r._zod.parse=(v,u)=>{return Promise.resolve(v.value).then((n)=>i.innerType._zod.run({value:n,issues:[]},u))}}),vg=e(\\\"$ZodLazy\\\",(r,i)=>{J.init(r,i),G(r._zod,\\\"innerType\\\",()=>{let v=i;if(!v._cachedInner)v._cachedInner=i.getter();return v._cachedInner}),G(r._zod,\\\"pattern\\\",()=>r._zod.innerType?._zod?.pattern),G(r._zod,\\\"propValues\\\",()=>r._zod.innerType?._zod?.propValues),G(r._zod,\\\"optin\\\",()=>r._zod.innerType?._zod?.optin??void 0),G(r._zod,\\\"optout\\\",()=>r._zod.innerType?._zod?.optout??void 0),r._zod.parse=(v,u)=>{return r._zod.innerType._zod.run(v,u)}}),ug=e(\\\"$ZodCustom\\\",(r,i)=>{X.init(r,i),J.init(r,i),r._zod.parse=(v,u)=>{return v},r._zod.check=(v)=>{let u=v.value,n=i.fn(u);if(n instanceof Promise)return n.then((t)=>s6(t,v,u,r));s6(n,v,u,r);return}})});function $g(){return{localeError:p_()}}var p_=()=>{let r={string:{unit:\\\"حرف\\\",verb:\\\"أن يحوي\\\"},file:{unit:\\\"بايت\\\",verb:\\\"أن يحوي\\\"},array:{unit:\\\"عنصر\\\",verb:\\\"أن يحوي\\\"},set:{unit:\\\"عنصر\\\",verb:\\\"أن يحوي\\\"}};function i(n){return r[n]??null}let v={regex:\\\"مدخل\\\",email:\\\"بريد إلكتروني\\\",url:\\\"رابط\\\",emoji:\\\"إيموجي\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"تاريخ ووقت بمعيار ISO\\\",date:\\\"تاريخ بمعيار ISO\\\",time:\\\"وقت بمعيار ISO\\\",duration:\\\"مدة بمعيار ISO\\\",ipv4:\\\"عنوان IPv4\\\",ipv6:\\\"عنوان IPv6\\\",cidrv4:\\\"مدى عناوين بصيغة IPv4\\\",cidrv6:\\\"مدى عناوين بصيغة IPv6\\\",base64:\\\"نَص بترميز base64-encoded\\\",base64url:\\\"نَص بترميز base64url-encoded\\\",json_string:\\\"نَص على هيئة JSON\\\",e164:\\\"رقم هاتف بمعيار E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"مدخل\\\"},u={nan:\\\"NaN\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`مدخلات غير مقبولة: يفترض إدخال instanceof ${n.expected}، ولكن تم إدخال ${$}`;return`مدخلات غير مقبولة: يفترض إدخال ${t}، ولكن تم إدخال ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`مدخلات غير مقبولة: يفترض إدخال ${D(n.values[0])}`;return`اختيار غير مقبول: يتوقع انتقاء أحد هذه الخيارات: ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return` أكبر من اللازم: يفترض أن تكون ${n.origin??\\\"القيمة\\\"} ${t} ${n.maximum.toString()} ${o.unit??\\\"عنصر\\\"}`;return`أكبر من اللازم: يفترض أن تكون ${n.origin??\\\"القيمة\\\"} ${t} ${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`أصغر من اللازم: يفترض لـ ${n.origin} أن يكون ${t} ${n.minimum.toString()} ${o.unit}`;return`أصغر من اللازم: يفترض لـ ${n.origin} أن يكون ${t} ${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`نَص غير مقبول: يجب أن يبدأ بـ \\\"${n.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`نَص غير مقبول: يجب أن ينتهي بـ \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`نَص غير مقبول: يجب أن يتضمَّن \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`نَص غير مقبول: يجب أن يطابق النمط ${t.pattern}`;return`${v[t.format]??n.format} غير مقبول`}case\\\"not_multiple_of\\\":return`رقم غير مقبول: يجب أن يكون من مضاعفات ${n.divisor}`;case\\\"unrecognized_keys\\\":return`معرف${n.keys.length>1?\\\"ات\\\":\\\"\\\"} غريب${n.keys.length>1?\\\"ة\\\":\\\"\\\"}: ${_(n.keys,\\\"، \\\")}`;case\\\"invalid_key\\\":return`معرف غير مقبول في ${n.origin}`;case\\\"invalid_union\\\":return\\\"مدخل غير مقبول\\\";case\\\"invalid_element\\\":return`مدخل غير مقبول في ${n.origin}`;default:return\\\"مدخل غير مقبول\\\"}}};var uc=O(()=>{j()});function gg(){return{localeError:a_()}}var a_=()=>{let r={string:{unit:\\\"simvol\\\",verb:\\\"olmalıdır\\\"},file:{unit:\\\"bayt\\\",verb:\\\"olmalıdır\\\"},array:{unit:\\\"element\\\",verb:\\\"olmalıdır\\\"},set:{unit:\\\"element\\\",verb:\\\"olmalıdır\\\"}};function i(n){return r[n]??null}let v={regex:\\\"input\\\",email:\\\"email address\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO datetime\\\",date:\\\"ISO date\\\",time:\\\"ISO time\\\",duration:\\\"ISO duration\\\",ipv4:\\\"IPv4 address\\\",ipv6:\\\"IPv6 address\\\",cidrv4:\\\"IPv4 range\\\",cidrv6:\\\"IPv6 range\\\",base64:\\\"base64-encoded string\\\",base64url:\\\"base64url-encoded string\\\",json_string:\\\"JSON string\\\",e164:\\\"E.164 number\\\",jwt:\\\"JWT\\\",template_literal:\\\"input\\\"},u={nan:\\\"NaN\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Yanlış dəyər: gözlənilən instanceof ${n.expected}, daxil olan ${$}`;return`Yanlış dəyər: gözlənilən ${t}, daxil olan ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Yanlış dəyər: gözlənilən ${D(n.values[0])}`;return`Yanlış seçim: aşağıdakılardan biri olmalıdır: ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Çox böyük: gözlənilən ${n.origin??\\\"dəyər\\\"} ${t}${n.maximum.toString()} ${o.unit??\\\"element\\\"}`;return`Çox böyük: gözlənilən ${n.origin??\\\"dəyər\\\"} ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Çox kiçik: gözlənilən ${n.origin} ${t}${n.minimum.toString()} ${o.unit}`;return`Çox kiçik: gözlənilən ${n.origin} ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Yanlış mətn: \\\"${t.prefix}\\\" ilə başlamalıdır`;if(t.format===\\\"ends_with\\\")return`Yanlış mətn: \\\"${t.suffix}\\\" ilə bitməlidir`;if(t.format===\\\"includes\\\")return`Yanlış mətn: \\\"${t.includes}\\\" daxil olmalıdır`;if(t.format===\\\"regex\\\")return`Yanlış mətn: ${t.pattern} şablonuna uyğun olmalıdır`;return`Yanlış ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Yanlış ədəd: ${n.divisor} ilə bölünə bilən olmalıdır`;case\\\"unrecognized_keys\\\":return`Tanınmayan açar${n.keys.length>1?\\\"lar\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`${n.origin} daxilində yanlış açar`;case\\\"invalid_union\\\":return\\\"Yanlış dəyər\\\";case\\\"invalid_element\\\":return`${n.origin} daxilində yanlış dəyər`;default:return\\\"Yanlış dəyər\\\"}}};var oc=O(()=>{j()});function $c(r,i,v,u){let n=Math.abs(r),t=n%10,o=n%100;if(o>=11&&o<=19)return u;if(t===1)return i;if(t>=2&&t<=4)return v;return u}function lg(){return{localeError:s_()}}var s_=()=>{let r={string:{unit:{one:\\\"сімвал\\\",few:\\\"сімвалы\\\",many:\\\"сімвалаў\\\"},verb:\\\"мець\\\"},array:{unit:{one:\\\"элемент\\\",few:\\\"элементы\\\",many:\\\"элементаў\\\"},verb:\\\"мець\\\"},set:{unit:{one:\\\"элемент\\\",few:\\\"элементы\\\",many:\\\"элементаў\\\"},verb:\\\"мець\\\"},file:{unit:{one:\\\"байт\\\",few:\\\"байты\\\",many:\\\"байтаў\\\"},verb:\\\"мець\\\"}};function i(n){return r[n]??null}let v={regex:\\\"увод\\\",email:\\\"email адрас\\\",url:\\\"URL\\\",emoji:\\\"эмодзі\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO дата і час\\\",date:\\\"ISO дата\\\",time:\\\"ISO час\\\",duration:\\\"ISO працягласць\\\",ipv4:\\\"IPv4 адрас\\\",ipv6:\\\"IPv6 адрас\\\",cidrv4:\\\"IPv4 дыяпазон\\\",cidrv6:\\\"IPv6 дыяпазон\\\",base64:\\\"радок у фармаце base64\\\",base64url:\\\"радок у фармаце base64url\\\",json_string:\\\"JSON радок\\\",e164:\\\"нумар E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"увод\\\"},u={nan:\\\"NaN\\\",number:\\\"лік\\\",array:\\\"масіў\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Няправільны ўвод: чакаўся instanceof ${n.expected}, атрымана ${$}`;return`Няправільны ўвод: чакаўся ${t}, атрымана ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Няправільны ўвод: чакалася ${D(n.values[0])}`;return`Няправільны варыянт: чакаўся адзін з ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o){let $=Number(n.maximum),b=$c($,o.unit.one,o.unit.few,o.unit.many);return`Занадта вялікі: чакалася, што ${n.origin??\\\"значэнне\\\"} павінна ${o.verb} ${t}${n.maximum.toString()} ${b}`}return`Занадта вялікі: чакалася, што ${n.origin??\\\"значэнне\\\"} павінна быць ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o){let $=Number(n.minimum),b=$c($,o.unit.one,o.unit.few,o.unit.many);return`Занадта малы: чакалася, што ${n.origin} павінна ${o.verb} ${t}${n.minimum.toString()} ${b}`}return`Занадта малы: чакалася, што ${n.origin} павінна быць ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Няправільны радок: павінен пачынацца з \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Няправільны радок: павінен заканчвацца на \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Няправільны радок: павінен змяшчаць \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Няправільны радок: павінен адпавядаць шаблону ${t.pattern}`;return`Няправільны ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Няправільны лік: павінен быць кратным ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Нераспазнаны ${n.keys.length>1?\\\"ключы\\\":\\\"ключ\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Няправільны ключ у ${n.origin}`;case\\\"invalid_union\\\":return\\\"Няправільны ўвод\\\";case\\\"invalid_element\\\":return`Няправільнае значэнне ў ${n.origin}`;default:return\\\"Няправільны ўвод\\\"}}};var gc=O(()=>{j()});function bg(){return{localeError:rI()}}var rI=()=>{let r={string:{unit:\\\"символа\\\",verb:\\\"да съдържа\\\"},file:{unit:\\\"байта\\\",verb:\\\"да съдържа\\\"},array:{unit:\\\"елемента\\\",verb:\\\"да съдържа\\\"},set:{unit:\\\"елемента\\\",verb:\\\"да съдържа\\\"}};function i(n){return r[n]??null}let v={regex:\\\"вход\\\",email:\\\"имейл адрес\\\",url:\\\"URL\\\",emoji:\\\"емоджи\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO време\\\",date:\\\"ISO дата\\\",time:\\\"ISO време\\\",duration:\\\"ISO продължителност\\\",ipv4:\\\"IPv4 адрес\\\",ipv6:\\\"IPv6 адрес\\\",cidrv4:\\\"IPv4 диапазон\\\",cidrv6:\\\"IPv6 диапазон\\\",base64:\\\"base64-кодиран низ\\\",base64url:\\\"base64url-кодиран низ\\\",json_string:\\\"JSON низ\\\",e164:\\\"E.164 номер\\\",jwt:\\\"JWT\\\",template_literal:\\\"вход\\\"},u={nan:\\\"NaN\\\",number:\\\"число\\\",array:\\\"масив\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Невалиден вход: очакван instanceof ${n.expected}, получен ${$}`;return`Невалиден вход: очакван ${t}, получен ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Невалиден вход: очакван ${D(n.values[0])}`;return`Невалидна опция: очаквано едно от ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Твърде голямо: очаква се ${n.origin??\\\"стойност\\\"} да съдържа ${t}${n.maximum.toString()} ${o.unit??\\\"елемента\\\"}`;return`Твърде голямо: очаква се ${n.origin??\\\"стойност\\\"} да бъде ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Твърде малко: очаква се ${n.origin} да съдържа ${t}${n.minimum.toString()} ${o.unit}`;return`Твърде малко: очаква се ${n.origin} да бъде ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Невалиден низ: трябва да започва с \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Невалиден низ: трябва да завършва с \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Невалиден низ: трябва да включва \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Невалиден низ: трябва да съвпада с ${t.pattern}`;let o=\\\"Невалиден\\\";if(t.format===\\\"emoji\\\")o=\\\"Невалидно\\\";if(t.format===\\\"datetime\\\")o=\\\"Невалидно\\\";if(t.format===\\\"date\\\")o=\\\"Невалидна\\\";if(t.format===\\\"time\\\")o=\\\"Невалидно\\\";if(t.format===\\\"duration\\\")o=\\\"Невалидна\\\";return`${o} ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Невалидно число: трябва да бъде кратно на ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Неразпознат${n.keys.length>1?\\\"и\\\":\\\"\\\"} ключ${n.keys.length>1?\\\"ове\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Невалиден ключ в ${n.origin}`;case\\\"invalid_union\\\":return\\\"Невалиден вход\\\";case\\\"invalid_element\\\":return`Невалидна стойност в ${n.origin}`;default:return\\\"Невалиден вход\\\"}}};var lc=O(()=>{j()});function cg(){return{localeError:nI()}}var nI=()=>{let r={string:{unit:\\\"caràcters\\\",verb:\\\"contenir\\\"},file:{unit:\\\"bytes\\\",verb:\\\"contenir\\\"},array:{unit:\\\"elements\\\",verb:\\\"contenir\\\"},set:{unit:\\\"elements\\\",verb:\\\"contenir\\\"}};function i(n){return r[n]??null}let v={regex:\\\"entrada\\\",email:\\\"adreça electrònica\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"data i hora ISO\\\",date:\\\"data ISO\\\",time:\\\"hora ISO\\\",duration:\\\"durada ISO\\\",ipv4:\\\"adreça IPv4\\\",ipv6:\\\"adreça IPv6\\\",cidrv4:\\\"rang IPv4\\\",cidrv6:\\\"rang IPv6\\\",base64:\\\"cadena codificada en base64\\\",base64url:\\\"cadena codificada en base64url\\\",json_string:\\\"cadena JSON\\\",e164:\\\"número E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"entrada\\\"},u={nan:\\\"NaN\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Tipus invàlid: s'esperava instanceof ${n.expected}, s'ha rebut ${$}`;return`Tipus invàlid: s'esperava ${t}, s'ha rebut ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Valor invàlid: s'esperava ${D(n.values[0])}`;return`Opció invàlida: s'esperava una de ${_(n.values,\\\" o \\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"com a màxim\\\":\\\"menys de\\\",o=i(n.origin);if(o)return`Massa gran: s'esperava que ${n.origin??\\\"el valor\\\"} contingués ${t} ${n.maximum.toString()} ${o.unit??\\\"elements\\\"}`;return`Massa gran: s'esperava que ${n.origin??\\\"el valor\\\"} fos ${t} ${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\"com a mínim\\\":\\\"més de\\\",o=i(n.origin);if(o)return`Massa petit: s'esperava que ${n.origin} contingués ${t} ${n.minimum.toString()} ${o.unit}`;return`Massa petit: s'esperava que ${n.origin} fos ${t} ${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Format invàlid: ha de començar amb \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Format invàlid: ha d'acabar amb \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Format invàlid: ha d'incloure \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Format invàlid: ha de coincidir amb el patró ${t.pattern}`;return`Format invàlid per a ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Número invàlid: ha de ser múltiple de ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Clau${n.keys.length>1?\\\"s\\\":\\\"\\\"} no reconeguda${n.keys.length>1?\\\"s\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Clau invàlida a ${n.origin}`;case\\\"invalid_union\\\":return\\\"Entrada invàlida\\\";case\\\"invalid_element\\\":return`Element invàlid a ${n.origin}`;default:return\\\"Entrada invàlida\\\"}}};var bc=O(()=>{j()});function eg(){return{localeError:iI()}}var iI=()=>{let r={string:{unit:\\\"znaků\\\",verb:\\\"mít\\\"},file:{unit:\\\"bajtů\\\",verb:\\\"mít\\\"},array:{unit:\\\"prvků\\\",verb:\\\"mít\\\"},set:{unit:\\\"prvků\\\",verb:\\\"mít\\\"}};function i(n){return r[n]??null}let v={regex:\\\"regulární výraz\\\",email:\\\"e-mailová adresa\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"datum a čas ve formátu ISO\\\",date:\\\"datum ve formátu ISO\\\",time:\\\"čas ve formátu ISO\\\",duration:\\\"doba trvání ISO\\\",ipv4:\\\"IPv4 adresa\\\",ipv6:\\\"IPv6 adresa\\\",cidrv4:\\\"rozsah IPv4\\\",cidrv6:\\\"rozsah IPv6\\\",base64:\\\"řetězec zakódovaný ve formátu base64\\\",base64url:\\\"řetězec zakódovaný ve formátu base64url\\\",json_string:\\\"řetězec ve formátu JSON\\\",e164:\\\"číslo E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"vstup\\\"},u={nan:\\\"NaN\\\",number:\\\"číslo\\\",string:\\\"řetězec\\\",function:\\\"funkce\\\",array:\\\"pole\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Neplatný vstup: očekáváno instanceof ${n.expected}, obdrženo ${$}`;return`Neplatný vstup: očekáváno ${t}, obdrženo ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Neplatný vstup: očekáváno ${D(n.values[0])}`;return`Neplatná možnost: očekávána jedna z hodnot ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Hodnota je příliš velká: ${n.origin??\\\"hodnota\\\"} musí mít ${t}${n.maximum.toString()} ${o.unit??\\\"prvků\\\"}`;return`Hodnota je příliš velká: ${n.origin??\\\"hodnota\\\"} musí být ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Hodnota je příliš malá: ${n.origin??\\\"hodnota\\\"} musí mít ${t}${n.minimum.toString()} ${o.unit??\\\"prvků\\\"}`;return`Hodnota je příliš malá: ${n.origin??\\\"hodnota\\\"} musí být ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Neplatný řetězec: musí začínat na \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Neplatný řetězec: musí končit na \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Neplatný řetězec: musí obsahovat \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Neplatný řetězec: musí odpovídat vzoru ${t.pattern}`;return`Neplatný formát ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Neplatné číslo: musí být násobkem ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Neznámé klíče: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Neplatný klíč v ${n.origin}`;case\\\"invalid_union\\\":return\\\"Neplatný vstup\\\";case\\\"invalid_element\\\":return`Neplatná hodnota v ${n.origin}`;default:return\\\"Neplatný vstup\\\"}}};var cc=O(()=>{j()});function _g(){return{localeError:tI()}}var tI=()=>{let r={string:{unit:\\\"tegn\\\",verb:\\\"havde\\\"},file:{unit:\\\"bytes\\\",verb:\\\"havde\\\"},array:{unit:\\\"elementer\\\",verb:\\\"indeholdt\\\"},set:{unit:\\\"elementer\\\",verb:\\\"indeholdt\\\"}};function i(n){return r[n]??null}let v={regex:\\\"input\\\",email:\\\"e-mailadresse\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO dato- og klokkeslæt\\\",date:\\\"ISO-dato\\\",time:\\\"ISO-klokkeslæt\\\",duration:\\\"ISO-varighed\\\",ipv4:\\\"IPv4-område\\\",ipv6:\\\"IPv6-område\\\",cidrv4:\\\"IPv4-spektrum\\\",cidrv6:\\\"IPv6-spektrum\\\",base64:\\\"base64-kodet streng\\\",base64url:\\\"base64url-kodet streng\\\",json_string:\\\"JSON-streng\\\",e164:\\\"E.164-nummer\\\",jwt:\\\"JWT\\\",template_literal:\\\"input\\\"},u={nan:\\\"NaN\\\",string:\\\"streng\\\",number:\\\"tal\\\",boolean:\\\"boolean\\\",array:\\\"liste\\\",object:\\\"objekt\\\",set:\\\"sæt\\\",file:\\\"fil\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Ugyldigt input: forventede instanceof ${n.expected}, fik ${$}`;return`Ugyldigt input: forventede ${t}, fik ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Ugyldig værdi: forventede ${D(n.values[0])}`;return`Ugyldigt valg: forventede en af følgende ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin),$=u[n.origin]??n.origin;if(o)return`For stor: forventede ${$??\\\"value\\\"} ${o.verb} ${t} ${n.maximum.toString()} ${o.unit??\\\"elementer\\\"}`;return`For stor: forventede ${$??\\\"value\\\"} havde ${t} ${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin),$=u[n.origin]??n.origin;if(o)return`For lille: forventede ${$} ${o.verb} ${t} ${n.minimum.toString()} ${o.unit}`;return`For lille: forventede ${$} havde ${t} ${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Ugyldig streng: skal starte med \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Ugyldig streng: skal ende med \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Ugyldig streng: skal indeholde \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Ugyldig streng: skal matche mønsteret ${t.pattern}`;return`Ugyldig ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Ugyldigt tal: skal være deleligt med ${n.divisor}`;case\\\"unrecognized_keys\\\":return`${n.keys.length>1?\\\"Ukendte nøgler\\\":\\\"Ukendt nøgle\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Ugyldig nøgle i ${n.origin}`;case\\\"invalid_union\\\":return\\\"Ugyldigt input: matcher ingen af de tilladte typer\\\";case\\\"invalid_element\\\":return`Ugyldig værdi i ${n.origin}`;default:return\\\"Ugyldigt input\\\"}}};var ec=O(()=>{j()});function Ig(){return{localeError:vI()}}var vI=()=>{let r={string:{unit:\\\"Zeichen\\\",verb:\\\"zu haben\\\"},file:{unit:\\\"Bytes\\\",verb:\\\"zu haben\\\"},array:{unit:\\\"Elemente\\\",verb:\\\"zu haben\\\"},set:{unit:\\\"Elemente\\\",verb:\\\"zu haben\\\"}};function i(n){return r[n]??null}let v={regex:\\\"Eingabe\\\",email:\\\"E-Mail-Adresse\\\",url:\\\"URL\\\",emoji:\\\"Emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO-Datum und -Uhrzeit\\\",date:\\\"ISO-Datum\\\",time:\\\"ISO-Uhrzeit\\\",duration:\\\"ISO-Dauer\\\",ipv4:\\\"IPv4-Adresse\\\",ipv6:\\\"IPv6-Adresse\\\",cidrv4:\\\"IPv4-Bereich\\\",cidrv6:\\\"IPv6-Bereich\\\",base64:\\\"Base64-codierter String\\\",base64url:\\\"Base64-URL-codierter String\\\",json_string:\\\"JSON-String\\\",e164:\\\"E.164-Nummer\\\",jwt:\\\"JWT\\\",template_literal:\\\"Eingabe\\\"},u={nan:\\\"NaN\\\",number:\\\"Zahl\\\",array:\\\"Array\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Ungültige Eingabe: erwartet instanceof ${n.expected}, erhalten ${$}`;return`Ungültige Eingabe: erwartet ${t}, erhalten ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Ungültige Eingabe: erwartet ${D(n.values[0])}`;return`Ungültige Option: erwartet eine von ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Zu groß: erwartet, dass ${n.origin??\\\"Wert\\\"} ${t}${n.maximum.toString()} ${o.unit??\\\"Elemente\\\"} hat`;return`Zu groß: erwartet, dass ${n.origin??\\\"Wert\\\"} ${t}${n.maximum.toString()} ist`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Zu klein: erwartet, dass ${n.origin} ${t}${n.minimum.toString()} ${o.unit} hat`;return`Zu klein: erwartet, dass ${n.origin} ${t}${n.minimum.toString()} ist`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Ungültiger String: muss mit \\\"${t.prefix}\\\" beginnen`;if(t.format===\\\"ends_with\\\")return`Ungültiger String: muss mit \\\"${t.suffix}\\\" enden`;if(t.format===\\\"includes\\\")return`Ungültiger String: muss \\\"${t.includes}\\\" enthalten`;if(t.format===\\\"regex\\\")return`Ungültiger String: muss dem Muster ${t.pattern} entsprechen`;return`Ungültig: ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Ungültige Zahl: muss ein Vielfaches von ${n.divisor} sein`;case\\\"unrecognized_keys\\\":return`${n.keys.length>1?\\\"Unbekannte Schlüssel\\\":\\\"Unbekannter Schlüssel\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Ungültiger Schlüssel in ${n.origin}`;case\\\"invalid_union\\\":return\\\"Ungültige Eingabe\\\";case\\\"invalid_element\\\":return`Ungültiger Wert in ${n.origin}`;default:return\\\"Ungültige Eingabe\\\"}}};var _c=O(()=>{j()});function Ug(){return{localeError:uI()}}var uI=()=>{let r={string:{unit:\\\"χαρακτήρες\\\",verb:\\\"να έχει\\\"},file:{unit:\\\"bytes\\\",verb:\\\"να έχει\\\"},array:{unit:\\\"στοιχεία\\\",verb:\\\"να έχει\\\"},set:{unit:\\\"στοιχεία\\\",verb:\\\"να έχει\\\"},map:{unit:\\\"καταχωρήσεις\\\",verb:\\\"να έχει\\\"}};function i(n){return r[n]??null}let v={regex:\\\"είσοδος\\\",email:\\\"διεύθυνση email\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO ημερομηνία και ώρα\\\",date:\\\"ISO ημερομηνία\\\",time:\\\"ISO ώρα\\\",duration:\\\"ISO διάρκεια\\\",ipv4:\\\"διεύθυνση IPv4\\\",ipv6:\\\"διεύθυνση IPv6\\\",mac:\\\"διεύθυνση MAC\\\",cidrv4:\\\"εύρος IPv4\\\",cidrv6:\\\"εύρος IPv6\\\",base64:\\\"συμβολοσειρά κωδικοποιημένη σε base64\\\",base64url:\\\"συμβολοσειρά κωδικοποιημένη σε base64url\\\",json_string:\\\"συμβολοσειρά JSON\\\",e164:\\\"αριθμός E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"είσοδος\\\"},u={nan:\\\"NaN\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(typeof n.expected===\\\"string\\\"&&/^[A-Z]/.test(n.expected))return`Μη έγκυρη είσοδος: αναμενόταν instanceof ${n.expected}, λήφθηκε ${$}`;return`Μη έγκυρη είσοδος: αναμενόταν ${t}, λήφθηκε ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Μη έγκυρη είσοδος: αναμενόταν ${D(n.values[0])}`;return`Μη έγκυρη επιλογή: αναμενόταν ένα από ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Πολύ μεγάλο: αναμενόταν ${n.origin??\\\"τιμή\\\"} να έχει ${t}${n.maximum.toString()} ${o.unit??\\\"στοιχεία\\\"}`;return`Πολύ μεγάλο: αναμενόταν ${n.origin??\\\"τιμή\\\"} να είναι ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Πολύ μικρό: αναμενόταν ${n.origin} να έχει ${t}${n.minimum.toString()} ${o.unit}`;return`Πολύ μικρό: αναμενόταν ${n.origin} να είναι ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Μη έγκυρη συμβολοσειρά: πρέπει να ξεκινά με \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Μη έγκυρη συμβολοσειρά: πρέπει να τελειώνει με \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Μη έγκυρη συμβολοσειρά: πρέπει να περιέχει \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Μη έγκυρη συμβολοσειρά: πρέπει να ταιριάζει με το μοτίβο ${t.pattern}`;return`Μη έγκυρο: ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Μη έγκυρος αριθμός: πρέπει να είναι πολλαπλάσιο του ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Άγνωστ${n.keys.length>1?\\\"α\\\":\\\"ο\\\"} κλειδ${n.keys.length>1?\\\"ιά\\\":\\\"ί\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Μη έγκυρο κλειδί στο ${n.origin}`;case\\\"invalid_union\\\":return\\\"Μη έγκυρη είσοδος\\\";case\\\"invalid_element\\\":return`Μη έγκυρη τιμή στο ${n.origin}`;default:return\\\"Μη έγκυρη είσοδος\\\"}}};var Ic=O(()=>{j()});function Ui(){return{localeError:oI()}}var oI=()=>{let r={string:{unit:\\\"characters\\\",verb:\\\"to have\\\"},file:{unit:\\\"bytes\\\",verb:\\\"to have\\\"},array:{unit:\\\"items\\\",verb:\\\"to have\\\"},set:{unit:\\\"items\\\",verb:\\\"to have\\\"},map:{unit:\\\"entries\\\",verb:\\\"to have\\\"}};function i(n){return r[n]??null}let v={regex:\\\"input\\\",email:\\\"email address\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO datetime\\\",date:\\\"ISO date\\\",time:\\\"ISO time\\\",duration:\\\"ISO duration\\\",ipv4:\\\"IPv4 address\\\",ipv6:\\\"IPv6 address\\\",mac:\\\"MAC address\\\",cidrv4:\\\"IPv4 range\\\",cidrv6:\\\"IPv6 range\\\",base64:\\\"base64-encoded string\\\",base64url:\\\"base64url-encoded string\\\",json_string:\\\"JSON string\\\",e164:\\\"E.164 number\\\",jwt:\\\"JWT\\\",template_literal:\\\"input\\\"},u={nan:\\\"NaN\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;return`Invalid input: expected ${t}, received ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Invalid input: expected ${D(n.values[0])}`;return`Invalid option: expected one of ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Too big: expected ${n.origin??\\\"value\\\"} to have ${t}${n.maximum.toString()} ${o.unit??\\\"elements\\\"}`;return`Too big: expected ${n.origin??\\\"value\\\"} to be ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Too small: expected ${n.origin} to have ${t}${n.minimum.toString()} ${o.unit}`;return`Too small: expected ${n.origin} to be ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Invalid string: must start with \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Invalid string: must end with \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Invalid string: must include \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Invalid string: must match pattern ${t.pattern}`;return`Invalid ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Invalid number: must be a multiple of ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Unrecognized key${n.keys.length>1?\\\"s\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Invalid key in ${n.origin}`;case\\\"invalid_union\\\":if(n.options&&Array.isArray(n.options)&&n.options.length>0)return`Invalid discriminator value. Expected ${n.options.map((o)=>`'${o}'`).join(\\\" | \\\")}`;return\\\"Invalid input\\\";case\\\"invalid_element\\\":return`Invalid value in ${n.origin}`;default:return\\\"Invalid input\\\"}}};var Dg=O(()=>{j()});function wg(){return{localeError:$I()}}var $I=()=>{let r={string:{unit:\\\"karaktrojn\\\",verb:\\\"havi\\\"},file:{unit:\\\"bajtojn\\\",verb:\\\"havi\\\"},array:{unit:\\\"elementojn\\\",verb:\\\"havi\\\"},set:{unit:\\\"elementojn\\\",verb:\\\"havi\\\"}};function i(n){return r[n]??null}let v={regex:\\\"enigo\\\",email:\\\"retadreso\\\",url:\\\"URL\\\",emoji:\\\"emoĝio\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO-datotempo\\\",date:\\\"ISO-dato\\\",time:\\\"ISO-tempo\\\",duration:\\\"ISO-daŭro\\\",ipv4:\\\"IPv4-adreso\\\",ipv6:\\\"IPv6-adreso\\\",cidrv4:\\\"IPv4-rango\\\",cidrv6:\\\"IPv6-rango\\\",base64:\\\"64-ume kodita karaktraro\\\",base64url:\\\"URL-64-ume kodita karaktraro\\\",json_string:\\\"JSON-karaktraro\\\",e164:\\\"E.164-nombro\\\",jwt:\\\"JWT\\\",template_literal:\\\"enigo\\\"},u={nan:\\\"NaN\\\",number:\\\"nombro\\\",array:\\\"tabelo\\\",null:\\\"senvalora\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Nevalida enigo: atendiĝis instanceof ${n.expected}, riceviĝis ${$}`;return`Nevalida enigo: atendiĝis ${t}, riceviĝis ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Nevalida enigo: atendiĝis ${D(n.values[0])}`;return`Nevalida opcio: atendiĝis unu el ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Tro granda: atendiĝis ke ${n.origin??\\\"valoro\\\"} havu ${t}${n.maximum.toString()} ${o.unit??\\\"elementojn\\\"}`;return`Tro granda: atendiĝis ke ${n.origin??\\\"valoro\\\"} havu ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Tro malgranda: atendiĝis ke ${n.origin} havu ${t}${n.minimum.toString()} ${o.unit}`;return`Tro malgranda: atendiĝis ke ${n.origin} estu ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Nevalida karaktraro: devas komenciĝi per \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Nevalida karaktraro: devas finiĝi per \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Nevalida karaktraro: devas inkluzivi \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Nevalida karaktraro: devas kongrui kun la modelo ${t.pattern}`;return`Nevalida ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Nevalida nombro: devas esti oblo de ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Nekonata${n.keys.length>1?\\\"j\\\":\\\"\\\"} ŝlosilo${n.keys.length>1?\\\"j\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Nevalida ŝlosilo en ${n.origin}`;case\\\"invalid_union\\\":return\\\"Nevalida enigo\\\";case\\\"invalid_element\\\":return`Nevalida valoro en ${n.origin}`;default:return\\\"Nevalida enigo\\\"}}};var Uc=O(()=>{j()});function kg(){return{localeError:gI()}}var gI=()=>{let r={string:{unit:\\\"caracteres\\\",verb:\\\"tener\\\"},file:{unit:\\\"bytes\\\",verb:\\\"tener\\\"},array:{unit:\\\"elementos\\\",verb:\\\"tener\\\"},set:{unit:\\\"elementos\\\",verb:\\\"tener\\\"}};function i(n){return r[n]??null}let v={regex:\\\"entrada\\\",email:\\\"dirección de correo electrónico\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"fecha y hora ISO\\\",date:\\\"fecha ISO\\\",time:\\\"hora ISO\\\",duration:\\\"duración ISO\\\",ipv4:\\\"dirección IPv4\\\",ipv6:\\\"dirección IPv6\\\",cidrv4:\\\"rango IPv4\\\",cidrv6:\\\"rango IPv6\\\",base64:\\\"cadena codificada en base64\\\",base64url:\\\"URL codificada en base64\\\",json_string:\\\"cadena JSON\\\",e164:\\\"número E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"entrada\\\"},u={nan:\\\"NaN\\\",string:\\\"texto\\\",number:\\\"número\\\",boolean:\\\"booleano\\\",array:\\\"arreglo\\\",object:\\\"objeto\\\",set:\\\"conjunto\\\",file:\\\"archivo\\\",date:\\\"fecha\\\",bigint:\\\"número grande\\\",symbol:\\\"símbolo\\\",undefined:\\\"indefinido\\\",null:\\\"nulo\\\",function:\\\"función\\\",map:\\\"mapa\\\",record:\\\"registro\\\",tuple:\\\"tupla\\\",enum:\\\"enumeración\\\",union:\\\"unión\\\",literal:\\\"literal\\\",promise:\\\"promesa\\\",void:\\\"vacío\\\",never:\\\"nunca\\\",unknown:\\\"desconocido\\\",any:\\\"cualquiera\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Entrada inválida: se esperaba instanceof ${n.expected}, recibido ${$}`;return`Entrada inválida: se esperaba ${t}, recibido ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Entrada inválida: se esperaba ${D(n.values[0])}`;return`Opción inválida: se esperaba una de ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin),$=u[n.origin]??n.origin;if(o)return`Demasiado grande: se esperaba que ${$??\\\"valor\\\"} tuviera ${t}${n.maximum.toString()} ${o.unit??\\\"elementos\\\"}`;return`Demasiado grande: se esperaba que ${$??\\\"valor\\\"} fuera ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin),$=u[n.origin]??n.origin;if(o)return`Demasiado pequeño: se esperaba que ${$} tuviera ${t}${n.minimum.toString()} ${o.unit}`;return`Demasiado pequeño: se esperaba que ${$} fuera ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Cadena inválida: debe comenzar con \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Cadena inválida: debe terminar en \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Cadena inválida: debe incluir \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Cadena inválida: debe coincidir con el patrón ${t.pattern}`;return`Inválido ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Número inválido: debe ser múltiplo de ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Llave${n.keys.length>1?\\\"s\\\":\\\"\\\"} desconocida${n.keys.length>1?\\\"s\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Llave inválida en ${u[n.origin]??n.origin}`;case\\\"invalid_union\\\":return\\\"Entrada inválida\\\";case\\\"invalid_element\\\":return`Valor inválido en ${u[n.origin]??n.origin}`;default:return\\\"Entrada inválida\\\"}}};var Dc=O(()=>{j()});function Ng(){return{localeError:lI()}}var lI=()=>{let r={string:{unit:\\\"کاراکتر\\\",verb:\\\"داشته باشد\\\"},file:{unit:\\\"بایت\\\",verb:\\\"داشته باشد\\\"},array:{unit:\\\"آیتم\\\",verb:\\\"داشته باشد\\\"},set:{unit:\\\"آیتم\\\",verb:\\\"داشته باشد\\\"}};function i(n){return r[n]??null}let v={regex:\\\"ورودی\\\",email:\\\"آدرس ایمیل\\\",url:\\\"URL\\\",emoji:\\\"ایموجی\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"تاریخ و زمان ایزو\\\",date:\\\"تاریخ ایزو\\\",time:\\\"زمان ایزو\\\",duration:\\\"مدت زمان ایزو\\\",ipv4:\\\"IPv4 آدرس\\\",ipv6:\\\"IPv6 آدرس\\\",cidrv4:\\\"IPv4 دامنه\\\",cidrv6:\\\"IPv6 دامنه\\\",base64:\\\"base64-encoded رشته\\\",base64url:\\\"base64url-encoded رشته\\\",json_string:\\\"JSON رشته\\\",e164:\\\"E.164 عدد\\\",jwt:\\\"JWT\\\",template_literal:\\\"ورودی\\\"},u={nan:\\\"NaN\\\",number:\\\"عدد\\\",array:\\\"آرایه\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`ورودی نامعتبر: می‌بایست instanceof ${n.expected} می‌بود، ${$} دریافت شد`;return`ورودی نامعتبر: می‌بایست ${t} می‌بود، ${$} دریافت شد`}case\\\"invalid_value\\\":if(n.values.length===1)return`ورودی نامعتبر: می‌بایست ${D(n.values[0])} می‌بود`;return`گزینه نامعتبر: می‌بایست یکی از ${_(n.values,\\\"|\\\")} می‌بود`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`خیلی بزرگ: ${n.origin??\\\"مقدار\\\"} باید ${t}${n.maximum.toString()} ${o.unit??\\\"عنصر\\\"} باشد`;return`خیلی بزرگ: ${n.origin??\\\"مقدار\\\"} باید ${t}${n.maximum.toString()} باشد`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`خیلی کوچک: ${n.origin} باید ${t}${n.minimum.toString()} ${o.unit} باشد`;return`خیلی کوچک: ${n.origin} باید ${t}${n.minimum.toString()} باشد`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`رشته نامعتبر: باید با \\\"${t.prefix}\\\" شروع شود`;if(t.format===\\\"ends_with\\\")return`رشته نامعتبر: باید با \\\"${t.suffix}\\\" تمام شود`;if(t.format===\\\"includes\\\")return`رشته نامعتبر: باید شامل \\\"${t.includes}\\\" باشد`;if(t.format===\\\"regex\\\")return`رشته نامعتبر: باید با الگوی ${t.pattern} مطابقت داشته باشد`;return`${v[t.format]??n.format} نامعتبر`}case\\\"not_multiple_of\\\":return`عدد نامعتبر: باید مضرب ${n.divisor} باشد`;case\\\"unrecognized_keys\\\":return`کلید${n.keys.length>1?\\\"های\\\":\\\"\\\"} ناشناس: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`کلید ناشناس در ${n.origin}`;case\\\"invalid_union\\\":return\\\"ورودی نامعتبر\\\";case\\\"invalid_element\\\":return`مقدار نامعتبر در ${n.origin}`;default:return\\\"ورودی نامعتبر\\\"}}};var wc=O(()=>{j()});function mg(){return{localeError:bI()}}var bI=()=>{let r={string:{unit:\\\"merkkiä\\\",subject:\\\"merkkijonon\\\"},file:{unit:\\\"tavua\\\",subject:\\\"tiedoston\\\"},array:{unit:\\\"alkiota\\\",subject:\\\"listan\\\"},set:{unit:\\\"alkiota\\\",subject:\\\"joukon\\\"},number:{unit:\\\"\\\",subject:\\\"luvun\\\"},bigint:{unit:\\\"\\\",subject:\\\"suuren kokonaisluvun\\\"},int:{unit:\\\"\\\",subject:\\\"kokonaisluvun\\\"},date:{unit:\\\"\\\",subject:\\\"päivämäärän\\\"}};function i(n){return r[n]??null}let v={regex:\\\"säännöllinen lauseke\\\",email:\\\"sähköpostiosoite\\\",url:\\\"URL-osoite\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO-aikaleima\\\",date:\\\"ISO-päivämäärä\\\",time:\\\"ISO-aika\\\",duration:\\\"ISO-kesto\\\",ipv4:\\\"IPv4-osoite\\\",ipv6:\\\"IPv6-osoite\\\",cidrv4:\\\"IPv4-alue\\\",cidrv6:\\\"IPv6-alue\\\",base64:\\\"base64-koodattu merkkijono\\\",base64url:\\\"base64url-koodattu merkkijono\\\",json_string:\\\"JSON-merkkijono\\\",e164:\\\"E.164-luku\\\",jwt:\\\"JWT\\\",template_literal:\\\"templaattimerkkijono\\\"},u={nan:\\\"NaN\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Virheellinen tyyppi: odotettiin instanceof ${n.expected}, oli ${$}`;return`Virheellinen tyyppi: odotettiin ${t}, oli ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Virheellinen syöte: täytyy olla ${D(n.values[0])}`;return`Virheellinen valinta: täytyy olla yksi seuraavista: ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Liian suuri: ${o.subject} täytyy olla ${t}${n.maximum.toString()} ${o.unit}`.trim();return`Liian suuri: arvon täytyy olla ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Liian pieni: ${o.subject} täytyy olla ${t}${n.minimum.toString()} ${o.unit}`.trim();return`Liian pieni: arvon täytyy olla ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Virheellinen syöte: täytyy alkaa \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Virheellinen syöte: täytyy loppua \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Virheellinen syöte: täytyy sisältää \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Virheellinen syöte: täytyy vastata säännöllistä lauseketta ${t.pattern}`;return`Virheellinen ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Virheellinen luku: täytyy olla luvun ${n.divisor} monikerta`;case\\\"unrecognized_keys\\\":return`${n.keys.length>1?\\\"Tuntemattomat avaimet\\\":\\\"Tuntematon avain\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return\\\"Virheellinen avain tietueessa\\\";case\\\"invalid_union\\\":return\\\"Virheellinen unioni\\\";case\\\"invalid_element\\\":return\\\"Virheellinen arvo joukossa\\\";default:return\\\"Virheellinen syöte\\\"}}};var kc=O(()=>{j()});function zg(){return{localeError:cI()}}var cI=()=>{let r={string:{unit:\\\"caractères\\\",verb:\\\"avoir\\\"},file:{unit:\\\"octets\\\",verb:\\\"avoir\\\"},array:{unit:\\\"éléments\\\",verb:\\\"avoir\\\"},set:{unit:\\\"éléments\\\",verb:\\\"avoir\\\"}};function i(n){return r[n]??null}let v={regex:\\\"entrée\\\",email:\\\"adresse e-mail\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"date et heure ISO\\\",date:\\\"date ISO\\\",time:\\\"heure ISO\\\",duration:\\\"durée ISO\\\",ipv4:\\\"adresse IPv4\\\",ipv6:\\\"adresse IPv6\\\",cidrv4:\\\"plage IPv4\\\",cidrv6:\\\"plage IPv6\\\",base64:\\\"chaîne encodée en base64\\\",base64url:\\\"chaîne encodée en base64url\\\",json_string:\\\"chaîne JSON\\\",e164:\\\"numéro E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"entrée\\\"},u={string:\\\"chaîne\\\",number:\\\"nombre\\\",int:\\\"entier\\\",boolean:\\\"booléen\\\",bigint:\\\"grand entier\\\",symbol:\\\"symbole\\\",undefined:\\\"indéfini\\\",null:\\\"null\\\",never:\\\"jamais\\\",void:\\\"vide\\\",date:\\\"date\\\",array:\\\"tableau\\\",object:\\\"objet\\\",tuple:\\\"tuple\\\",record:\\\"enregistrement\\\",map:\\\"carte\\\",set:\\\"ensemble\\\",file:\\\"fichier\\\",nonoptional:\\\"non-optionnel\\\",nan:\\\"NaN\\\",function:\\\"fonction\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Entrée invalide : instanceof ${n.expected} attendu, ${$} reçu`;return`Entrée invalide : ${t} attendu, ${$} reçu`}case\\\"invalid_value\\\":if(n.values.length===1)return`Entrée invalide : ${D(n.values[0])} attendu`;return`Option invalide : une valeur parmi ${_(n.values,\\\"|\\\")} attendue`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Trop grand : ${u[n.origin]??\\\"valeur\\\"} doit ${o.verb} ${t}${n.maximum.toString()} ${o.unit??\\\"élément(s)\\\"}`;return`Trop grand : ${u[n.origin]??\\\"valeur\\\"} doit être ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Trop petit : ${u[n.origin]??\\\"valeur\\\"} doit ${o.verb} ${t}${n.minimum.toString()} ${o.unit}`;return`Trop petit : ${u[n.origin]??\\\"valeur\\\"} doit être ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Chaîne invalide : doit commencer par \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Chaîne invalide : doit se terminer par \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Chaîne invalide : doit inclure \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Chaîne invalide : doit correspondre au modèle ${t.pattern}`;return`${v[t.format]??n.format} invalide`}case\\\"not_multiple_of\\\":return`Nombre invalide : doit être un multiple de ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Clé${n.keys.length>1?\\\"s\\\":\\\"\\\"} non reconnue${n.keys.length>1?\\\"s\\\":\\\"\\\"} : ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Clé invalide dans ${n.origin}`;case\\\"invalid_union\\\":return\\\"Entrée invalide\\\";case\\\"invalid_element\\\":return`Valeur invalide dans ${n.origin}`;default:return\\\"Entrée invalide\\\"}}};var Nc=O(()=>{j()});function Og(){return{localeError:eI()}}var eI=()=>{let r={string:{unit:\\\"caractères\\\",verb:\\\"avoir\\\"},file:{unit:\\\"octets\\\",verb:\\\"avoir\\\"},array:{unit:\\\"éléments\\\",verb:\\\"avoir\\\"},set:{unit:\\\"éléments\\\",verb:\\\"avoir\\\"}};function i(n){return r[n]??null}let v={regex:\\\"entrée\\\",email:\\\"adresse courriel\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"date-heure ISO\\\",date:\\\"date ISO\\\",time:\\\"heure ISO\\\",duration:\\\"durée ISO\\\",ipv4:\\\"adresse IPv4\\\",ipv6:\\\"adresse IPv6\\\",cidrv4:\\\"plage IPv4\\\",cidrv6:\\\"plage IPv6\\\",base64:\\\"chaîne encodée en base64\\\",base64url:\\\"chaîne encodée en base64url\\\",json_string:\\\"chaîne JSON\\\",e164:\\\"numéro E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"entrée\\\"},u={nan:\\\"NaN\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Entrée invalide : attendu instanceof ${n.expected}, reçu ${$}`;return`Entrée invalide : attendu ${t}, reçu ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Entrée invalide : attendu ${D(n.values[0])}`;return`Option invalide : attendu l'une des valeurs suivantes ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"≤\\\":\\\"<\\\",o=i(n.origin);if(o)return`Trop grand : attendu que ${n.origin??\\\"la valeur\\\"} ait ${t}${n.maximum.toString()} ${o.unit}`;return`Trop grand : attendu que ${n.origin??\\\"la valeur\\\"} soit ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\"≥\\\":\\\">\\\",o=i(n.origin);if(o)return`Trop petit : attendu que ${n.origin} ait ${t}${n.minimum.toString()} ${o.unit}`;return`Trop petit : attendu que ${n.origin} soit ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Chaîne invalide : doit commencer par \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Chaîne invalide : doit se terminer par \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Chaîne invalide : doit inclure \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Chaîne invalide : doit correspondre au motif ${t.pattern}`;return`${v[t.format]??n.format} invalide`}case\\\"not_multiple_of\\\":return`Nombre invalide : doit être un multiple de ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Clé${n.keys.length>1?\\\"s\\\":\\\"\\\"} non reconnue${n.keys.length>1?\\\"s\\\":\\\"\\\"} : ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Clé invalide dans ${n.origin}`;case\\\"invalid_union\\\":return\\\"Entrée invalide\\\";case\\\"invalid_element\\\":return`Valeur invalide dans ${n.origin}`;default:return\\\"Entrée invalide\\\"}}};var mc=O(()=>{j()});function Sg(){return{localeError:_I()}}var _I=()=>{let r={string:{label:\\\"מחרוזת\\\",gender:\\\"f\\\"},number:{label:\\\"מספר\\\",gender:\\\"m\\\"},boolean:{label:\\\"ערך בוליאני\\\",gender:\\\"m\\\"},bigint:{label:\\\"BigInt\\\",gender:\\\"m\\\"},date:{label:\\\"תאריך\\\",gender:\\\"m\\\"},array:{label:\\\"מערך\\\",gender:\\\"m\\\"},object:{label:\\\"אובייקט\\\",gender:\\\"m\\\"},null:{label:\\\"ערך ריק (null)\\\",gender:\\\"m\\\"},undefined:{label:\\\"ערך לא מוגדר (undefined)\\\",gender:\\\"m\\\"},symbol:{label:\\\"סימבול (Symbol)\\\",gender:\\\"m\\\"},function:{label:\\\"פונקציה\\\",gender:\\\"f\\\"},map:{label:\\\"מפה (Map)\\\",gender:\\\"f\\\"},set:{label:\\\"קבוצה (Set)\\\",gender:\\\"f\\\"},file:{label:\\\"קובץ\\\",gender:\\\"m\\\"},promise:{label:\\\"Promise\\\",gender:\\\"m\\\"},NaN:{label:\\\"NaN\\\",gender:\\\"m\\\"},unknown:{label:\\\"ערך לא ידוע\\\",gender:\\\"m\\\"},value:{label:\\\"ערך\\\",gender:\\\"m\\\"}},i={string:{unit:\\\"תווים\\\",shortLabel:\\\"קצר\\\",longLabel:\\\"ארוך\\\"},file:{unit:\\\"בייטים\\\",shortLabel:\\\"קטן\\\",longLabel:\\\"גדול\\\"},array:{unit:\\\"פריטים\\\",shortLabel:\\\"קטן\\\",longLabel:\\\"גדול\\\"},set:{unit:\\\"פריטים\\\",shortLabel:\\\"קטן\\\",longLabel:\\\"גדול\\\"},number:{unit:\\\"\\\",shortLabel:\\\"קטן\\\",longLabel:\\\"גדול\\\"}},v=(g)=>g?r[g]:void 0,u=(g)=>{let c=v(g);if(c)return c.label;return g??r.unknown.label},n=(g)=>`ה${u(g)}`,t=(g)=>{return(v(g)?.gender??\\\"m\\\")===\\\"f\\\"?\\\"צריכה להיות\\\":\\\"צריך להיות\\\"},o=(g)=>{if(!g)return null;return i[g]??null},$={regex:{label:\\\"קלט\\\",gender:\\\"m\\\"},email:{label:\\\"כתובת אימייל\\\",gender:\\\"f\\\"},url:{label:\\\"כתובת רשת\\\",gender:\\\"f\\\"},emoji:{label:\\\"אימוג'י\\\",gender:\\\"m\\\"},uuid:{label:\\\"UUID\\\",gender:\\\"m\\\"},nanoid:{label:\\\"nanoid\\\",gender:\\\"m\\\"},guid:{label:\\\"GUID\\\",gender:\\\"m\\\"},cuid:{label:\\\"cuid\\\",gender:\\\"m\\\"},cuid2:{label:\\\"cuid2\\\",gender:\\\"m\\\"},ulid:{label:\\\"ULID\\\",gender:\\\"m\\\"},xid:{label:\\\"XID\\\",gender:\\\"m\\\"},ksuid:{label:\\\"KSUID\\\",gender:\\\"m\\\"},datetime:{label:\\\"תאריך וזמן ISO\\\",gender:\\\"m\\\"},date:{label:\\\"תאריך ISO\\\",gender:\\\"m\\\"},time:{label:\\\"זמן ISO\\\",gender:\\\"m\\\"},duration:{label:\\\"משך זמן ISO\\\",gender:\\\"m\\\"},ipv4:{label:\\\"כתובת IPv4\\\",gender:\\\"f\\\"},ipv6:{label:\\\"כתובת IPv6\\\",gender:\\\"f\\\"},cidrv4:{label:\\\"טווח IPv4\\\",gender:\\\"m\\\"},cidrv6:{label:\\\"טווח IPv6\\\",gender:\\\"m\\\"},base64:{label:\\\"מחרוזת בבסיס 64\\\",gender:\\\"f\\\"},base64url:{label:\\\"מחרוזת בבסיס 64 לכתובות רשת\\\",gender:\\\"f\\\"},json_string:{label:\\\"מחרוזת JSON\\\",gender:\\\"f\\\"},e164:{label:\\\"מספר E.164\\\",gender:\\\"m\\\"},jwt:{label:\\\"JWT\\\",gender:\\\"m\\\"},ends_with:{label:\\\"קלט\\\",gender:\\\"m\\\"},includes:{label:\\\"קלט\\\",gender:\\\"m\\\"},lowercase:{label:\\\"קלט\\\",gender:\\\"m\\\"},starts_with:{label:\\\"קלט\\\",gender:\\\"m\\\"},uppercase:{label:\\\"קלט\\\",gender:\\\"m\\\"}},b={nan:\\\"NaN\\\"};return(g)=>{switch(g.code){case\\\"invalid_type\\\":{let c=g.expected,U=b[c??\\\"\\\"]??u(c),w=k(g.input),m=b[w]??r[w]?.label??w;if(/^[A-Z]/.test(g.expected))return`קלט לא תקין: צריך להיות instanceof ${g.expected}, התקבל ${m}`;return`קלט לא תקין: צריך להיות ${U}, התקבל ${m}`}case\\\"invalid_value\\\":{if(g.values.length===1)return`ערך לא תקין: הערך חייב להיות ${D(g.values[0])}`;let c=g.values.map((m)=>D(m));if(g.values.length===2)return`ערך לא תקין: האפשרויות המתאימות הן ${c[0]} או ${c[1]}`;let U=c[c.length-1];return`ערך לא תקין: האפשרויות המתאימות הן ${c.slice(0,-1).join(\\\", \\\")} או ${U}`}case\\\"too_big\\\":{let c=o(g.origin),U=n(g.origin??\\\"value\\\");if(g.origin===\\\"string\\\")return`${c?.longLabel??\\\"ארוך\\\"} מדי: ${U} צריכה להכיל ${g.maximum.toString()} ${c?.unit??\\\"\\\"} ${g.inclusive?\\\"או פחות\\\":\\\"לכל היותר\\\"}`.trim();if(g.origin===\\\"number\\\"){let A=g.inclusive?`קטן או שווה ל-${g.maximum}`:`קטן מ-${g.maximum}`;return`גדול מדי: ${U} צריך להיות ${A}`}if(g.origin===\\\"array\\\"||g.origin===\\\"set\\\"){let A=g.origin===\\\"set\\\"?\\\"צריכה\\\":\\\"צריך\\\",ir=g.inclusive?`${g.maximum} ${c?.unit??\\\"\\\"} או פחות`:`פחות מ-${g.maximum} ${c?.unit??\\\"\\\"}`;return`גדול מדי: ${U} ${A} להכיל ${ir}`.trim()}let w=g.inclusive?\\\"<=\\\":\\\"<\\\",m=t(g.origin??\\\"value\\\");if(c?.unit)return`${c.longLabel} מדי: ${U} ${m} ${w}${g.maximum.toString()} ${c.unit}`;return`${c?.longLabel??\\\"גדול\\\"} מדי: ${U} ${m} ${w}${g.maximum.toString()}`}case\\\"too_small\\\":{let c=o(g.origin),U=n(g.origin??\\\"value\\\");if(g.origin===\\\"string\\\")return`${c?.shortLabel??\\\"קצר\\\"} מדי: ${U} צריכה להכיל ${g.minimum.toString()} ${c?.unit??\\\"\\\"} ${g.inclusive?\\\"או יותר\\\":\\\"לפחות\\\"}`.trim();if(g.origin===\\\"number\\\"){let A=g.inclusive?`גדול או שווה ל-${g.minimum}`:`גדול מ-${g.minimum}`;return`קטן מדי: ${U} צריך להיות ${A}`}if(g.origin===\\\"array\\\"||g.origin===\\\"set\\\"){let A=g.origin===\\\"set\\\"?\\\"צריכה\\\":\\\"צריך\\\";if(g.minimum===1&&g.inclusive){let R=g.origin===\\\"set\\\"?\\\"לפחות פריט אחד\\\":\\\"לפחות פריט אחד\\\";return`קטן מדי: ${U} ${A} להכיל ${R}`}let ir=g.inclusive?`${g.minimum} ${c?.unit??\\\"\\\"} או יותר`:`יותר מ-${g.minimum} ${c?.unit??\\\"\\\"}`;return`קטן מדי: ${U} ${A} להכיל ${ir}`.trim()}let w=g.inclusive?\\\">=\\\":\\\">\\\",m=t(g.origin??\\\"value\\\");if(c?.unit)return`${c.shortLabel} מדי: ${U} ${m} ${w}${g.minimum.toString()} ${c.unit}`;return`${c?.shortLabel??\\\"קטן\\\"} מדי: ${U} ${m} ${w}${g.minimum.toString()}`}case\\\"invalid_format\\\":{let c=g;if(c.format===\\\"starts_with\\\")return`המחרוזת חייבת להתחיל ב \\\"${c.prefix}\\\"`;if(c.format===\\\"ends_with\\\")return`המחרוזת חייבת להסתיים ב \\\"${c.suffix}\\\"`;if(c.format===\\\"includes\\\")return`המחרוזת חייבת לכלול \\\"${c.includes}\\\"`;if(c.format===\\\"regex\\\")return`המחרוזת חייבת להתאים לתבנית ${c.pattern}`;let U=$[c.format],w=U?.label??c.format,A=(U?.gender??\\\"m\\\")===\\\"f\\\"?\\\"תקינה\\\":\\\"תקין\\\";return`${w} לא ${A}`}case\\\"not_multiple_of\\\":return`מספר לא תקין: חייב להיות מכפלה של ${g.divisor}`;case\\\"unrecognized_keys\\\":return`מפתח${g.keys.length>1?\\\"ות\\\":\\\"\\\"} לא מזוה${g.keys.length>1?\\\"ים\\\":\\\"ה\\\"}: ${_(g.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return\\\"שדה לא תקין באובייקט\\\";case\\\"invalid_union\\\":return\\\"קלט לא תקין\\\";case\\\"invalid_element\\\":return`ערך לא תקין ב${n(g.origin??\\\"array\\\")}`;default:return\\\"קלט לא תקין\\\"}}};var zc=O(()=>{j()});function Pg(){return{localeError:II()}}var II=()=>{let r={string:{unit:\\\"znakova\\\",verb:\\\"imati\\\"},file:{unit:\\\"bajtova\\\",verb:\\\"imati\\\"},array:{unit:\\\"stavki\\\",verb:\\\"imati\\\"},set:{unit:\\\"stavki\\\",verb:\\\"imati\\\"}};function i(n){return r[n]??null}let v={regex:\\\"unos\\\",email:\\\"email adresa\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO datum i vrijeme\\\",date:\\\"ISO datum\\\",time:\\\"ISO vrijeme\\\",duration:\\\"ISO trajanje\\\",ipv4:\\\"IPv4 adresa\\\",ipv6:\\\"IPv6 adresa\\\",cidrv4:\\\"IPv4 raspon\\\",cidrv6:\\\"IPv6 raspon\\\",base64:\\\"base64 kodirani tekst\\\",base64url:\\\"base64url kodirani tekst\\\",json_string:\\\"JSON tekst\\\",e164:\\\"E.164 broj\\\",jwt:\\\"JWT\\\",template_literal:\\\"unos\\\"},u={nan:\\\"NaN\\\",string:\\\"tekst\\\",number:\\\"broj\\\",boolean:\\\"boolean\\\",array:\\\"niz\\\",object:\\\"objekt\\\",set:\\\"skup\\\",file:\\\"datoteka\\\",date:\\\"datum\\\",bigint:\\\"bigint\\\",symbol:\\\"simbol\\\",undefined:\\\"undefined\\\",null:\\\"null\\\",function:\\\"funkcija\\\",map:\\\"mapa\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Neispravan unos: očekuje se instanceof ${n.expected}, a primljeno je ${$}`;return`Neispravan unos: očekuje se ${t}, a primljeno je ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Neispravna vrijednost: očekivano ${D(n.values[0])}`;return`Neispravna opcija: očekivano jedno od ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin),$=u[n.origin]??n.origin;if(o)return`Preveliko: očekivano da ${$??\\\"vrijednost\\\"} ima ${t}${n.maximum.toString()} ${o.unit??\\\"elemenata\\\"}`;return`Preveliko: očekivano da ${$??\\\"vrijednost\\\"} bude ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin),$=u[n.origin]??n.origin;if(o)return`Premalo: očekivano da ${$} ima ${t}${n.minimum.toString()} ${o.unit}`;return`Premalo: očekivano da ${$} bude ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Neispravan tekst: mora započinjati s \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Neispravan tekst: mora završavati s \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Neispravan tekst: mora sadržavati \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Neispravan tekst: mora odgovarati uzorku ${t.pattern}`;return`Neispravna ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Neispravan broj: mora biti višekratnik od ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Neprepoznat${n.keys.length>1?\\\"i ključevi\\\":\\\" ključ\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Neispravan ključ u ${u[n.origin]??n.origin}`;case\\\"invalid_union\\\":return\\\"Neispravan unos\\\";case\\\"invalid_element\\\":return`Neispravna vrijednost u ${u[n.origin]??n.origin}`;default:return\\\"Neispravan unos\\\"}}};var Oc=O(()=>{j()});function jg(){return{localeError:UI()}}var UI=()=>{let r={string:{unit:\\\"karakter\\\",verb:\\\"legyen\\\"},file:{unit:\\\"byte\\\",verb:\\\"legyen\\\"},array:{unit:\\\"elem\\\",verb:\\\"legyen\\\"},set:{unit:\\\"elem\\\",verb:\\\"legyen\\\"}};function i(n){return r[n]??null}let v={regex:\\\"bemenet\\\",email:\\\"email cím\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO időbélyeg\\\",date:\\\"ISO dátum\\\",time:\\\"ISO idő\\\",duration:\\\"ISO időintervallum\\\",ipv4:\\\"IPv4 cím\\\",ipv6:\\\"IPv6 cím\\\",cidrv4:\\\"IPv4 tartomány\\\",cidrv6:\\\"IPv6 tartomány\\\",base64:\\\"base64-kódolt string\\\",base64url:\\\"base64url-kódolt string\\\",json_string:\\\"JSON string\\\",e164:\\\"E.164 szám\\\",jwt:\\\"JWT\\\",template_literal:\\\"bemenet\\\"},u={nan:\\\"NaN\\\",number:\\\"szám\\\",array:\\\"tömb\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Érvénytelen bemenet: a várt érték instanceof ${n.expected}, a kapott érték ${$}`;return`Érvénytelen bemenet: a várt érték ${t}, a kapott érték ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Érvénytelen bemenet: a várt érték ${D(n.values[0])}`;return`Érvénytelen opció: valamelyik érték várt ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Túl nagy: ${n.origin??\\\"érték\\\"} mérete túl nagy ${t}${n.maximum.toString()} ${o.unit??\\\"elem\\\"}`;return`Túl nagy: a bemeneti érték ${n.origin??\\\"érték\\\"} túl nagy: ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Túl kicsi: a bemeneti érték ${n.origin} mérete túl kicsi ${t}${n.minimum.toString()} ${o.unit}`;return`Túl kicsi: a bemeneti érték ${n.origin} túl kicsi ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Érvénytelen string: \\\"${t.prefix}\\\" értékkel kell kezdődnie`;if(t.format===\\\"ends_with\\\")return`Érvénytelen string: \\\"${t.suffix}\\\" értékkel kell végződnie`;if(t.format===\\\"includes\\\")return`Érvénytelen string: \\\"${t.includes}\\\" értéket kell tartalmaznia`;if(t.format===\\\"regex\\\")return`Érvénytelen string: ${t.pattern} mintának kell megfelelnie`;return`Érvénytelen ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Érvénytelen szám: ${n.divisor} többszörösének kell lennie`;case\\\"unrecognized_keys\\\":return`Ismeretlen kulcs${n.keys.length>1?\\\"s\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Érvénytelen kulcs ${n.origin}`;case\\\"invalid_union\\\":return\\\"Érvénytelen bemenet\\\";case\\\"invalid_element\\\":return`Érvénytelen érték: ${n.origin}`;default:return\\\"Érvénytelen bemenet\\\"}}};var Sc=O(()=>{j()});function Pc(r,i,v){return Math.abs(r)===1?i:v}function Gn(r){if(!r)return\\\"\\\";let i=[\\\"ա\\\",\\\"ե\\\",\\\"ը\\\",\\\"ի\\\",\\\"ո\\\",\\\"ու\\\",\\\"օ\\\"],v=r[r.length-1];return r+(i.includes(v)?\\\"ն\\\":\\\"ը\\\")}function Lg(){return{localeError:DI()}}var DI=()=>{let r={string:{unit:{one:\\\"նշան\\\",many:\\\"նշաններ\\\"},verb:\\\"ունենալ\\\"},file:{unit:{one:\\\"բայթ\\\",many:\\\"բայթեր\\\"},verb:\\\"ունենալ\\\"},array:{unit:{one:\\\"տարր\\\",many:\\\"տարրեր\\\"},verb:\\\"ունենալ\\\"},set:{unit:{one:\\\"տարր\\\",many:\\\"տարրեր\\\"},verb:\\\"ունենալ\\\"}};function i(n){return r[n]??null}let v={regex:\\\"մուտք\\\",email:\\\"էլ. հասցե\\\",url:\\\"URL\\\",emoji:\\\"էմոջի\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO ամսաթիվ և ժամ\\\",date:\\\"ISO ամսաթիվ\\\",time:\\\"ISO ժամ\\\",duration:\\\"ISO տևողություն\\\",ipv4:\\\"IPv4 հասցե\\\",ipv6:\\\"IPv6 հասցե\\\",cidrv4:\\\"IPv4 միջակայք\\\",cidrv6:\\\"IPv6 միջակայք\\\",base64:\\\"base64 ձևաչափով տող\\\",base64url:\\\"base64url ձևաչափով տող\\\",json_string:\\\"JSON տող\\\",e164:\\\"E.164 համար\\\",jwt:\\\"JWT\\\",template_literal:\\\"մուտք\\\"},u={nan:\\\"NaN\\\",number:\\\"թիվ\\\",array:\\\"զանգված\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Սխալ մուտքագրում․ սպասվում էր instanceof ${n.expected}, ստացվել է ${$}`;return`Սխալ մուտքագրում․ սպասվում էր ${t}, ստացվել է ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Սխալ մուտքագրում․ սպասվում էր ${D(n.values[1])}`;return`Սխալ տարբերակ․ սպասվում էր հետևյալներից մեկը՝ ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o){let $=Number(n.maximum),b=Pc($,o.unit.one,o.unit.many);return`Չափազանց մեծ արժեք․ սպասվում է, որ ${Gn(n.origin??\\\"արժեք\\\")} կունենա ${t}${n.maximum.toString()} ${b}`}return`Չափազանց մեծ արժեք․ սպասվում է, որ ${Gn(n.origin??\\\"արժեք\\\")} լինի ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o){let $=Number(n.minimum),b=Pc($,o.unit.one,o.unit.many);return`Չափազանց փոքր արժեք․ սպասվում է, որ ${Gn(n.origin)} կունենա ${t}${n.minimum.toString()} ${b}`}return`Չափազանց փոքր արժեք․ սպասվում է, որ ${Gn(n.origin)} լինի ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Սխալ տող․ պետք է սկսվի \\\"${t.prefix}\\\"-ով`;if(t.format===\\\"ends_with\\\")return`Սխալ տող․ պետք է ավարտվի \\\"${t.suffix}\\\"-ով`;if(t.format===\\\"includes\\\")return`Սխալ տող․ պետք է պարունակի \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Սխալ տող․ պետք է համապատասխանի ${t.pattern} ձևաչափին`;return`Սխալ ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Սխալ թիվ․ պետք է բազմապատիկ լինի ${n.divisor}-ի`;case\\\"unrecognized_keys\\\":return`Չճանաչված բանալի${n.keys.length>1?\\\"ներ\\\":\\\"\\\"}. ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Սխալ բանալի ${Gn(n.origin)}-ում`;case\\\"invalid_union\\\":return\\\"Սխալ մուտքագրում\\\";case\\\"invalid_element\\\":return`Սխալ արժեք ${Gn(n.origin)}-ում`;default:return\\\"Սխալ մուտքագրում\\\"}}};var jc=O(()=>{j()});function Ag(){return{localeError:wI()}}var wI=()=>{let r={string:{unit:\\\"karakter\\\",verb:\\\"memiliki\\\"},file:{unit:\\\"byte\\\",verb:\\\"memiliki\\\"},array:{unit:\\\"item\\\",verb:\\\"memiliki\\\"},set:{unit:\\\"item\\\",verb:\\\"memiliki\\\"}};function i(n){return r[n]??null}let v={regex:\\\"input\\\",email:\\\"alamat email\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"tanggal dan waktu format ISO\\\",date:\\\"tanggal format ISO\\\",time:\\\"jam format ISO\\\",duration:\\\"durasi format ISO\\\",ipv4:\\\"alamat IPv4\\\",ipv6:\\\"alamat IPv6\\\",cidrv4:\\\"rentang alamat IPv4\\\",cidrv6:\\\"rentang alamat IPv6\\\",base64:\\\"string dengan enkode base64\\\",base64url:\\\"string dengan enkode base64url\\\",json_string:\\\"string JSON\\\",e164:\\\"angka E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"input\\\"},u={nan:\\\"NaN\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Input tidak valid: diharapkan instanceof ${n.expected}, diterima ${$}`;return`Input tidak valid: diharapkan ${t}, diterima ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Input tidak valid: diharapkan ${D(n.values[0])}`;return`Pilihan tidak valid: diharapkan salah satu dari ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Terlalu besar: diharapkan ${n.origin??\\\"value\\\"} memiliki ${t}${n.maximum.toString()} ${o.unit??\\\"elemen\\\"}`;return`Terlalu besar: diharapkan ${n.origin??\\\"value\\\"} menjadi ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Terlalu kecil: diharapkan ${n.origin} memiliki ${t}${n.minimum.toString()} ${o.unit}`;return`Terlalu kecil: diharapkan ${n.origin} menjadi ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`String tidak valid: harus dimulai dengan \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`String tidak valid: harus berakhir dengan \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`String tidak valid: harus menyertakan \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`String tidak valid: harus sesuai pola ${t.pattern}`;return`${v[t.format]??n.format} tidak valid`}case\\\"not_multiple_of\\\":return`Angka tidak valid: harus kelipatan dari ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Kunci tidak dikenali ${n.keys.length>1?\\\"s\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Kunci tidak valid di ${n.origin}`;case\\\"invalid_union\\\":return\\\"Input tidak valid\\\";case\\\"invalid_element\\\":return`Nilai tidak valid di ${n.origin}`;default:return\\\"Input tidak valid\\\"}}};var Lc=O(()=>{j()});function Jg(){return{localeError:kI()}}var kI=()=>{let r={string:{unit:\\\"stafi\\\",verb:\\\"að hafa\\\"},file:{unit:\\\"bæti\\\",verb:\\\"að hafa\\\"},array:{unit:\\\"hluti\\\",verb:\\\"að hafa\\\"},set:{unit:\\\"hluti\\\",verb:\\\"að hafa\\\"}};function i(n){return r[n]??null}let v={regex:\\\"gildi\\\",email:\\\"netfang\\\",url:\\\"vefslóð\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO dagsetning og tími\\\",date:\\\"ISO dagsetning\\\",time:\\\"ISO tími\\\",duration:\\\"ISO tímalengd\\\",ipv4:\\\"IPv4 address\\\",ipv6:\\\"IPv6 address\\\",cidrv4:\\\"IPv4 range\\\",cidrv6:\\\"IPv6 range\\\",base64:\\\"base64-encoded strengur\\\",base64url:\\\"base64url-encoded strengur\\\",json_string:\\\"JSON strengur\\\",e164:\\\"E.164 tölugildi\\\",jwt:\\\"JWT\\\",template_literal:\\\"gildi\\\"},u={nan:\\\"NaN\\\",number:\\\"númer\\\",array:\\\"fylki\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Rangt gildi: Þú slóst inn ${$} þar sem á að vera instanceof ${n.expected}`;return`Rangt gildi: Þú slóst inn ${$} þar sem á að vera ${t}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Rangt gildi: gert ráð fyrir ${D(n.values[0])}`;return`Ógilt val: má vera eitt af eftirfarandi ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Of stórt: gert er ráð fyrir að ${n.origin??\\\"gildi\\\"} hafi ${t}${n.maximum.toString()} ${o.unit??\\\"hluti\\\"}`;return`Of stórt: gert er ráð fyrir að ${n.origin??\\\"gildi\\\"} sé ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Of lítið: gert er ráð fyrir að ${n.origin} hafi ${t}${n.minimum.toString()} ${o.unit}`;return`Of lítið: gert er ráð fyrir að ${n.origin} sé ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Ógildur strengur: verður að byrja á \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Ógildur strengur: verður að enda á \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Ógildur strengur: verður að innihalda \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Ógildur strengur: verður að fylgja mynstri ${t.pattern}`;return`Rangt ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Röng tala: verður að vera margfeldi af ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Óþekkt ${n.keys.length>1?\\\"ir lyklar\\\":\\\"ur lykill\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Rangur lykill í ${n.origin}`;case\\\"invalid_union\\\":return\\\"Rangt gildi\\\";case\\\"invalid_element\\\":return`Rangt gildi í ${n.origin}`;default:return\\\"Rangt gildi\\\"}}};var Ac=O(()=>{j()});function Wg(){return{localeError:NI()}}var NI=()=>{let r={string:{unit:\\\"caratteri\\\",verb:\\\"avere\\\"},file:{unit:\\\"byte\\\",verb:\\\"avere\\\"},array:{unit:\\\"elementi\\\",verb:\\\"avere\\\"},set:{unit:\\\"elementi\\\",verb:\\\"avere\\\"}};function i(n){return r[n]??null}let v={regex:\\\"input\\\",email:\\\"indirizzo email\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"data e ora ISO\\\",date:\\\"data ISO\\\",time:\\\"ora ISO\\\",duration:\\\"durata ISO\\\",ipv4:\\\"indirizzo IPv4\\\",ipv6:\\\"indirizzo IPv6\\\",cidrv4:\\\"intervallo IPv4\\\",cidrv6:\\\"intervallo IPv6\\\",base64:\\\"stringa codificata in base64\\\",base64url:\\\"URL codificata in base64\\\",json_string:\\\"stringa JSON\\\",e164:\\\"numero E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"input\\\"},u={nan:\\\"NaN\\\",number:\\\"numero\\\",array:\\\"vettore\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Input non valido: atteso instanceof ${n.expected}, ricevuto ${$}`;return`Input non valido: atteso ${t}, ricevuto ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Input non valido: atteso ${D(n.values[0])}`;return`Opzione non valida: atteso uno tra ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Troppo grande: ${n.origin??\\\"valore\\\"} deve avere ${t}${n.maximum.toString()} ${o.unit??\\\"elementi\\\"}`;return`Troppo grande: ${n.origin??\\\"valore\\\"} deve essere ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Troppo piccolo: ${n.origin} deve avere ${t}${n.minimum.toString()} ${o.unit}`;return`Troppo piccolo: ${n.origin} deve essere ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Stringa non valida: deve iniziare con \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Stringa non valida: deve terminare con \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Stringa non valida: deve includere \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Stringa non valida: deve corrispondere al pattern ${t.pattern}`;return`Input non valido: ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Numero non valido: deve essere un multiplo di ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Chiav${n.keys.length>1?\\\"i\\\":\\\"e\\\"} non riconosciut${n.keys.length>1?\\\"e\\\":\\\"a\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Chiave non valida in ${n.origin}`;case\\\"invalid_union\\\":return\\\"Input non valido\\\";case\\\"invalid_element\\\":return`Valore non valido in ${n.origin}`;default:return\\\"Input non valido\\\"}}};var Jc=O(()=>{j()});function Vg(){return{localeError:mI()}}var mI=()=>{let r={string:{unit:\\\"文字\\\",verb:\\\"である\\\"},file:{unit:\\\"バイト\\\",verb:\\\"である\\\"},array:{unit:\\\"要素\\\",verb:\\\"である\\\"},set:{unit:\\\"要素\\\",verb:\\\"である\\\"}};function i(n){return r[n]??null}let v={regex:\\\"入力値\\\",email:\\\"メールアドレス\\\",url:\\\"URL\\\",emoji:\\\"絵文字\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO日時\\\",date:\\\"ISO日付\\\",time:\\\"ISO時刻\\\",duration:\\\"ISO期間\\\",ipv4:\\\"IPv4アドレス\\\",ipv6:\\\"IPv6アドレス\\\",cidrv4:\\\"IPv4範囲\\\",cidrv6:\\\"IPv6範囲\\\",base64:\\\"base64エンコード文字列\\\",base64url:\\\"base64urlエンコード文字列\\\",json_string:\\\"JSON文字列\\\",e164:\\\"E.164番号\\\",jwt:\\\"JWT\\\",template_literal:\\\"入力値\\\"},u={nan:\\\"NaN\\\",number:\\\"数値\\\",array:\\\"配列\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`無効な入力: instanceof ${n.expected}が期待されましたが、${$}が入力されました`;return`無効な入力: ${t}が期待されましたが、${$}が入力されました`}case\\\"invalid_value\\\":if(n.values.length===1)return`無効な入力: ${D(n.values[0])}が期待されました`;return`無効な選択: ${_(n.values,\\\"、\\\")}のいずれかである必要があります`;case\\\"too_big\\\":{let t=n.inclusive?\\\"以下である\\\":\\\"より小さい\\\",o=i(n.origin);if(o)return`大きすぎる値: ${n.origin??\\\"値\\\"}は${n.maximum.toString()}${o.unit??\\\"要素\\\"}${t}必要があります`;return`大きすぎる値: ${n.origin??\\\"値\\\"}は${n.maximum.toString()}${t}必要があります`}case\\\"too_small\\\":{let t=n.inclusive?\\\"以上である\\\":\\\"より大きい\\\",o=i(n.origin);if(o)return`小さすぎる値: ${n.origin}は${n.minimum.toString()}${o.unit}${t}必要があります`;return`小さすぎる値: ${n.origin}は${n.minimum.toString()}${t}必要があります`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`無効な文字列: \\\"${t.prefix}\\\"で始まる必要があります`;if(t.format===\\\"ends_with\\\")return`無効な文字列: \\\"${t.suffix}\\\"で終わる必要があります`;if(t.format===\\\"includes\\\")return`無効な文字列: \\\"${t.includes}\\\"を含む必要があります`;if(t.format===\\\"regex\\\")return`無効な文字列: パターン${t.pattern}に一致する必要があります`;return`無効な${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`無効な数値: ${n.divisor}の倍数である必要があります`;case\\\"unrecognized_keys\\\":return`認識されていないキー${n.keys.length>1?\\\"群\\\":\\\"\\\"}: ${_(n.keys,\\\"、\\\")}`;case\\\"invalid_key\\\":return`${n.origin}内の無効なキー`;case\\\"invalid_union\\\":return\\\"無効な入力\\\";case\\\"invalid_element\\\":return`${n.origin}内の無効な値`;default:return\\\"無効な入力\\\"}}};var Wc=O(()=>{j()});function Gg(){return{localeError:zI()}}var zI=()=>{let r={string:{unit:\\\"სიმბოლო\\\",verb:\\\"უნდა შეიცავდეს\\\"},file:{unit:\\\"ბაიტი\\\",verb:\\\"უნდა შეიცავდეს\\\"},array:{unit:\\\"ელემენტი\\\",verb:\\\"უნდა შეიცავდეს\\\"},set:{unit:\\\"ელემენტი\\\",verb:\\\"უნდა შეიცავდეს\\\"}};function i(n){return r[n]??null}let v={regex:\\\"შეყვანა\\\",email:\\\"ელ-ფოსტის მისამართი\\\",url:\\\"URL\\\",emoji:\\\"ემოჯი\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"თარიღი-დრო\\\",date:\\\"თარიღი\\\",time:\\\"დრო\\\",duration:\\\"ხანგრძლივობა\\\",ipv4:\\\"IPv4 მისამართი\\\",ipv6:\\\"IPv6 მისამართი\\\",cidrv4:\\\"IPv4 დიაპაზონი\\\",cidrv6:\\\"IPv6 დიაპაზონი\\\",base64:\\\"base64-კოდირებული ველი\\\",base64url:\\\"base64url-კოდირებული ველი\\\",json_string:\\\"JSON ველი\\\",e164:\\\"E.164 ნომერი\\\",jwt:\\\"JWT\\\",template_literal:\\\"შეყვანა\\\"},u={nan:\\\"NaN\\\",number:\\\"რიცხვი\\\",string:\\\"ველი\\\",boolean:\\\"ბულეანი\\\",function:\\\"ფუნქცია\\\",array:\\\"მასივი\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`არასწორი შეყვანა: მოსალოდნელი instanceof ${n.expected}, მიღებული ${$}`;return`არასწორი შეყვანა: მოსალოდნელი ${t}, მიღებული ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`არასწორი შეყვანა: მოსალოდნელი ${D(n.values[0])}`;return`არასწორი ვარიანტი: მოსალოდნელია ერთ-ერთი ${_(n.values,\\\"|\\\")}-დან`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`ზედმეტად დიდი: მოსალოდნელი ${n.origin??\\\"მნიშვნელობა\\\"} ${o.verb} ${t}${n.maximum.toString()} ${o.unit}`;return`ზედმეტად დიდი: მოსალოდნელი ${n.origin??\\\"მნიშვნელობა\\\"} იყოს ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`ზედმეტად პატარა: მოსალოდნელი ${n.origin} ${o.verb} ${t}${n.minimum.toString()} ${o.unit}`;return`ზედმეტად პატარა: მოსალოდნელი ${n.origin} იყოს ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`არასწორი ველი: უნდა იწყებოდეს \\\"${t.prefix}\\\"-ით`;if(t.format===\\\"ends_with\\\")return`არასწორი ველი: უნდა მთავრდებოდეს \\\"${t.suffix}\\\"-ით`;if(t.format===\\\"includes\\\")return`არასწორი ველი: უნდა შეიცავდეს \\\"${t.includes}\\\"-ს`;if(t.format===\\\"regex\\\")return`არასწორი ველი: უნდა შეესაბამებოდეს შაბლონს ${t.pattern}`;return`არასწორი ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`არასწორი რიცხვი: უნდა იყოს ${n.divisor}-ის ჯერადი`;case\\\"unrecognized_keys\\\":return`უცნობი გასაღებ${n.keys.length>1?\\\"ები\\\":\\\"ი\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`არასწორი გასაღები ${n.origin}-ში`;case\\\"invalid_union\\\":return\\\"არასწორი შეყვანა\\\";case\\\"invalid_element\\\":return`არასწორი მნიშვნელობა ${n.origin}-ში`;default:return\\\"არასწორი შეყვანა\\\"}}};var Vc=O(()=>{j()});function Di(){return{localeError:OI()}}var OI=()=>{let r={string:{unit:\\\"តួអក្សរ\\\",verb:\\\"គួរមាន\\\"},file:{unit:\\\"បៃ\\\",verb:\\\"គួរមាន\\\"},array:{unit:\\\"ធាតុ\\\",verb:\\\"គួរមាន\\\"},set:{unit:\\\"ធាតុ\\\",verb:\\\"គួរមាន\\\"}};function i(n){return r[n]??null}let v={regex:\\\"ទិន្នន័យបញ្ចូល\\\",email:\\\"អាសយដ្ឋានអ៊ីមែល\\\",url:\\\"URL\\\",emoji:\\\"សញ្ញាអារម្មណ៍\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"កាលបរិច្ឆេទ និងម៉ោង ISO\\\",date:\\\"កាលបរិច្ឆេទ ISO\\\",time:\\\"ម៉ោង ISO\\\",duration:\\\"រយៈពេល ISO\\\",ipv4:\\\"អាសយដ្ឋាន IPv4\\\",ipv6:\\\"អាសយដ្ឋាន IPv6\\\",cidrv4:\\\"ដែនអាសយដ្ឋាន IPv4\\\",cidrv6:\\\"ដែនអាសយដ្ឋាន IPv6\\\",base64:\\\"ខ្សែអក្សរអ៊ិកូដ base64\\\",base64url:\\\"ខ្សែអក្សរអ៊ិកូដ base64url\\\",json_string:\\\"ខ្សែអក្សរ JSON\\\",e164:\\\"លេខ E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"ទិន្នន័យបញ្ចូល\\\"},u={nan:\\\"NaN\\\",number:\\\"លេខ\\\",array:\\\"អារេ (Array)\\\",null:\\\"គ្មានតម្លៃ (null)\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ instanceof ${n.expected} ប៉ុន្តែទទួលបាន ${$}`;return`ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${t} ប៉ុន្តែទទួលបាន ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${D(n.values[0])}`;return`ជម្រើសមិនត្រឹមត្រូវ៖ ត្រូវជាមួយក្នុងចំណោម ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`ធំពេក៖ ត្រូវការ ${n.origin??\\\"តម្លៃ\\\"} ${t} ${n.maximum.toString()} ${o.unit??\\\"ធាតុ\\\"}`;return`ធំពេក៖ ត្រូវការ ${n.origin??\\\"តម្លៃ\\\"} ${t} ${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`តូចពេក៖ ត្រូវការ ${n.origin} ${t} ${n.minimum.toString()} ${o.unit}`;return`តូចពេក៖ ត្រូវការ ${n.origin} ${t} ${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវចាប់ផ្តើមដោយ \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវបញ្ចប់ដោយ \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវមាន \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវតែផ្គូផ្គងនឹងទម្រង់ដែលបានកំណត់ ${t.pattern}`;return`មិនត្រឹមត្រូវ៖ ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`លេខមិនត្រឹមត្រូវ៖ ត្រូវតែជាពហុគុណនៃ ${n.divisor}`;case\\\"unrecognized_keys\\\":return`រកឃើញសោមិនស្គាល់៖ ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`សោមិនត្រឹមត្រូវនៅក្នុង ${n.origin}`;case\\\"invalid_union\\\":return\\\"ទិន្នន័យមិនត្រឹមត្រូវ\\\";case\\\"invalid_element\\\":return`ទិន្នន័យមិនត្រឹមត្រូវនៅក្នុង ${n.origin}`;default:return\\\"ទិន្នន័យមិនត្រឹមត្រូវ\\\"}}};var Kg=O(()=>{j()});function Bg(){return Di()}var Gc=O(()=>{Kg()});function Hg(){return{localeError:SI()}}var SI=()=>{let r={string:{unit:\\\"문자\\\",verb:\\\"to have\\\"},file:{unit:\\\"바이트\\\",verb:\\\"to have\\\"},array:{unit:\\\"개\\\",verb:\\\"to have\\\"},set:{unit:\\\"개\\\",verb:\\\"to have\\\"}};function i(n){return r[n]??null}let v={regex:\\\"입력\\\",email:\\\"이메일 주소\\\",url:\\\"URL\\\",emoji:\\\"이모지\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO 날짜시간\\\",date:\\\"ISO 날짜\\\",time:\\\"ISO 시간\\\",duration:\\\"ISO 기간\\\",ipv4:\\\"IPv4 주소\\\",ipv6:\\\"IPv6 주소\\\",cidrv4:\\\"IPv4 범위\\\",cidrv6:\\\"IPv6 범위\\\",base64:\\\"base64 인코딩 문자열\\\",base64url:\\\"base64url 인코딩 문자열\\\",json_string:\\\"JSON 문자열\\\",e164:\\\"E.164 번호\\\",jwt:\\\"JWT\\\",template_literal:\\\"입력\\\"},u={nan:\\\"NaN\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`잘못된 입력: 예상 타입은 instanceof ${n.expected}, 받은 타입은 ${$}입니다`;return`잘못된 입력: 예상 타입은 ${t}, 받은 타입은 ${$}입니다`}case\\\"invalid_value\\\":if(n.values.length===1)return`잘못된 입력: 값은 ${D(n.values[0])} 이어야 합니다`;return`잘못된 옵션: ${_(n.values,\\\"또는 \\\")} 중 하나여야 합니다`;case\\\"too_big\\\":{let t=n.inclusive?\\\"이하\\\":\\\"미만\\\",o=t===\\\"미만\\\"?\\\"이어야 합니다\\\":\\\"여야 합니다\\\",$=i(n.origin),b=$?.unit??\\\"요소\\\";if($)return`${n.origin??\\\"값\\\"}이 너무 큽니다: ${n.maximum.toString()}${b} ${t}${o}`;return`${n.origin??\\\"값\\\"}이 너무 큽니다: ${n.maximum.toString()} ${t}${o}`}case\\\"too_small\\\":{let t=n.inclusive?\\\"이상\\\":\\\"초과\\\",o=t===\\\"이상\\\"?\\\"이어야 합니다\\\":\\\"여야 합니다\\\",$=i(n.origin),b=$?.unit??\\\"요소\\\";if($)return`${n.origin??\\\"값\\\"}이 너무 작습니다: ${n.minimum.toString()}${b} ${t}${o}`;return`${n.origin??\\\"값\\\"}이 너무 작습니다: ${n.minimum.toString()} ${t}${o}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`잘못된 문자열: \\\"${t.prefix}\\\"(으)로 시작해야 합니다`;if(t.format===\\\"ends_with\\\")return`잘못된 문자열: \\\"${t.suffix}\\\"(으)로 끝나야 합니다`;if(t.format===\\\"includes\\\")return`잘못된 문자열: \\\"${t.includes}\\\"을(를) 포함해야 합니다`;if(t.format===\\\"regex\\\")return`잘못된 문자열: 정규식 ${t.pattern} 패턴과 일치해야 합니다`;return`잘못된 ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`잘못된 숫자: ${n.divisor}의 배수여야 합니다`;case\\\"unrecognized_keys\\\":return`인식할 수 없는 키: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`잘못된 키: ${n.origin}`;case\\\"invalid_union\\\":return\\\"잘못된 입력\\\";case\\\"invalid_element\\\":return`잘못된 값: ${n.origin}`;default:return\\\"잘못된 입력\\\"}}};var Kc=O(()=>{j()});function Bc(r){let i=Math.abs(r),v=i%10,u=i%100;if(u>=11&&u<=19||v===0)return\\\"many\\\";if(v===1)return\\\"one\\\";return\\\"few\\\"}function Fg(){return{localeError:PI()}}var wi=(r)=>{return r.charAt(0).toUpperCase()+r.slice(1)},PI=()=>{let r={string:{unit:{one:\\\"simbolis\\\",few:\\\"simboliai\\\",many:\\\"simbolių\\\"},verb:{smaller:{inclusive:\\\"turi būti ne ilgesnė kaip\\\",notInclusive:\\\"turi būti trumpesnė kaip\\\"},bigger:{inclusive:\\\"turi būti ne trumpesnė kaip\\\",notInclusive:\\\"turi būti ilgesnė kaip\\\"}}},file:{unit:{one:\\\"baitas\\\",few:\\\"baitai\\\",many:\\\"baitų\\\"},verb:{smaller:{inclusive:\\\"turi būti ne didesnis kaip\\\",notInclusive:\\\"turi būti mažesnis kaip\\\"},bigger:{inclusive:\\\"turi būti ne mažesnis kaip\\\",notInclusive:\\\"turi būti didesnis kaip\\\"}}},array:{unit:{one:\\\"elementą\\\",few:\\\"elementus\\\",many:\\\"elementų\\\"},verb:{smaller:{inclusive:\\\"turi turėti ne daugiau kaip\\\",notInclusive:\\\"turi turėti mažiau kaip\\\"},bigger:{inclusive:\\\"turi turėti ne mažiau kaip\\\",notInclusive:\\\"turi turėti daugiau kaip\\\"}}},set:{unit:{one:\\\"elementą\\\",few:\\\"elementus\\\",many:\\\"elementų\\\"},verb:{smaller:{inclusive:\\\"turi turėti ne daugiau kaip\\\",notInclusive:\\\"turi turėti mažiau kaip\\\"},bigger:{inclusive:\\\"turi turėti ne mažiau kaip\\\",notInclusive:\\\"turi turėti daugiau kaip\\\"}}}};function i(n,t,o,$){let b=r[n]??null;if(b===null)return b;return{unit:b.unit[t],verb:b.verb[$][o?\\\"inclusive\\\":\\\"notInclusive\\\"]}}let v={regex:\\\"įvestis\\\",email:\\\"el. pašto adresas\\\",url:\\\"URL\\\",emoji:\\\"jaustukas\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO data ir laikas\\\",date:\\\"ISO data\\\",time:\\\"ISO laikas\\\",duration:\\\"ISO trukmė\\\",ipv4:\\\"IPv4 adresas\\\",ipv6:\\\"IPv6 adresas\\\",cidrv4:\\\"IPv4 tinklo prefiksas (CIDR)\\\",cidrv6:\\\"IPv6 tinklo prefiksas (CIDR)\\\",base64:\\\"base64 užkoduota eilutė\\\",base64url:\\\"base64url užkoduota eilutė\\\",json_string:\\\"JSON eilutė\\\",e164:\\\"E.164 numeris\\\",jwt:\\\"JWT\\\",template_literal:\\\"įvestis\\\"},u={nan:\\\"NaN\\\",number:\\\"skaičius\\\",bigint:\\\"sveikasis skaičius\\\",string:\\\"eilutė\\\",boolean:\\\"loginė reikšmė\\\",undefined:\\\"neapibrėžta reikšmė\\\",function:\\\"funkcija\\\",symbol:\\\"simbolis\\\",array:\\\"masyvas\\\",object:\\\"objektas\\\",null:\\\"nulinė reikšmė\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Gautas tipas ${$}, o tikėtasi - instanceof ${n.expected}`;return`Gautas tipas ${$}, o tikėtasi - ${t}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Privalo būti ${D(n.values[0])}`;return`Privalo būti vienas iš ${_(n.values,\\\"|\\\")} pasirinkimų`;case\\\"too_big\\\":{let t=u[n.origin]??n.origin,o=i(n.origin,Bc(Number(n.maximum)),n.inclusive??!1,\\\"smaller\\\");if(o?.verb)return`${wi(t??n.origin??\\\"reikšmė\\\")} ${o.verb} ${n.maximum.toString()} ${o.unit??\\\"elementų\\\"}`;let $=n.inclusive?\\\"ne didesnis kaip\\\":\\\"mažesnis kaip\\\";return`${wi(t??n.origin??\\\"reikšmė\\\")} turi būti ${$} ${n.maximum.toString()} ${o?.unit}`}case\\\"too_small\\\":{let t=u[n.origin]??n.origin,o=i(n.origin,Bc(Number(n.minimum)),n.inclusive??!1,\\\"bigger\\\");if(o?.verb)return`${wi(t??n.origin??\\\"reikšmė\\\")} ${o.verb} ${n.minimum.toString()} ${o.unit??\\\"elementų\\\"}`;let $=n.inclusive?\\\"ne mažesnis kaip\\\":\\\"didesnis kaip\\\";return`${wi(t??n.origin??\\\"reikšmė\\\")} turi būti ${$} ${n.minimum.toString()} ${o?.unit}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Eilutė privalo prasidėti \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Eilutė privalo pasibaigti \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Eilutė privalo įtraukti \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Eilutė privalo atitikti ${t.pattern}`;return`Neteisingas ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Skaičius privalo būti ${n.divisor} kartotinis.`;case\\\"unrecognized_keys\\\":return`Neatpažint${n.keys.length>1?\\\"i\\\":\\\"as\\\"} rakt${n.keys.length>1?\\\"ai\\\":\\\"as\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return\\\"Rastas klaidingas raktas\\\";case\\\"invalid_union\\\":return\\\"Klaidinga įvestis\\\";case\\\"invalid_element\\\":{let t=u[n.origin]??n.origin;return`${wi(t??n.origin??\\\"reikšmė\\\")} turi klaidingą įvestį`}default:return\\\"Klaidinga įvestis\\\"}}};var Hc=O(()=>{j()});function Eg(){return{localeError:jI()}}var jI=()=>{let r={string:{unit:\\\"знаци\\\",verb:\\\"да имаат\\\"},file:{unit:\\\"бајти\\\",verb:\\\"да имаат\\\"},array:{unit:\\\"ставки\\\",verb:\\\"да имаат\\\"},set:{unit:\\\"ставки\\\",verb:\\\"да имаат\\\"}};function i(n){return r[n]??null}let v={regex:\\\"внес\\\",email:\\\"адреса на е-пошта\\\",url:\\\"URL\\\",emoji:\\\"емоџи\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO датум и време\\\",date:\\\"ISO датум\\\",time:\\\"ISO време\\\",duration:\\\"ISO времетраење\\\",ipv4:\\\"IPv4 адреса\\\",ipv6:\\\"IPv6 адреса\\\",cidrv4:\\\"IPv4 опсег\\\",cidrv6:\\\"IPv6 опсег\\\",base64:\\\"base64-енкодирана низа\\\",base64url:\\\"base64url-енкодирана низа\\\",json_string:\\\"JSON низа\\\",e164:\\\"E.164 број\\\",jwt:\\\"JWT\\\",template_literal:\\\"внес\\\"},u={nan:\\\"NaN\\\",number:\\\"број\\\",array:\\\"низа\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Грешен внес: се очекува instanceof ${n.expected}, примено ${$}`;return`Грешен внес: се очекува ${t}, примено ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Invalid input: expected ${D(n.values[0])}`;return`Грешана опција: се очекува една ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Премногу голем: се очекува ${n.origin??\\\"вредноста\\\"} да има ${t}${n.maximum.toString()} ${o.unit??\\\"елементи\\\"}`;return`Премногу голем: се очекува ${n.origin??\\\"вредноста\\\"} да биде ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Премногу мал: се очекува ${n.origin} да има ${t}${n.minimum.toString()} ${o.unit}`;return`Премногу мал: се очекува ${n.origin} да биде ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Неважечка низа: мора да започнува со \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Неважечка низа: мора да завршува со \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Неважечка низа: мора да вклучува \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Неважечка низа: мора да одгоара на патернот ${t.pattern}`;return`Invalid ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Грешен број: мора да биде делив со ${n.divisor}`;case\\\"unrecognized_keys\\\":return`${n.keys.length>1?\\\"Непрепознаени клучеви\\\":\\\"Непрепознаен клуч\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Грешен клуч во ${n.origin}`;case\\\"invalid_union\\\":return\\\"Грешен внес\\\";case\\\"invalid_element\\\":return`Грешна вредност во ${n.origin}`;default:return\\\"Грешен внес\\\"}}};var Fc=O(()=>{j()});function Tg(){return{localeError:LI()}}var LI=()=>{let r={string:{unit:\\\"aksara\\\",verb:\\\"mempunyai\\\"},file:{unit:\\\"bait\\\",verb:\\\"mempunyai\\\"},array:{unit:\\\"elemen\\\",verb:\\\"mempunyai\\\"},set:{unit:\\\"elemen\\\",verb:\\\"mempunyai\\\"}};function i(n){return r[n]??null}let v={regex:\\\"input\\\",email:\\\"alamat e-mel\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"tarikh masa ISO\\\",date:\\\"tarikh ISO\\\",time:\\\"masa ISO\\\",duration:\\\"tempoh ISO\\\",ipv4:\\\"alamat IPv4\\\",ipv6:\\\"alamat IPv6\\\",cidrv4:\\\"julat IPv4\\\",cidrv6:\\\"julat IPv6\\\",base64:\\\"string dikodkan base64\\\",base64url:\\\"string dikodkan base64url\\\",json_string:\\\"string JSON\\\",e164:\\\"nombor E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"input\\\"},u={nan:\\\"NaN\\\",number:\\\"nombor\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Input tidak sah: dijangka instanceof ${n.expected}, diterima ${$}`;return`Input tidak sah: dijangka ${t}, diterima ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Input tidak sah: dijangka ${D(n.values[0])}`;return`Pilihan tidak sah: dijangka salah satu daripada ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Terlalu besar: dijangka ${n.origin??\\\"nilai\\\"} ${o.verb} ${t}${n.maximum.toString()} ${o.unit??\\\"elemen\\\"}`;return`Terlalu besar: dijangka ${n.origin??\\\"nilai\\\"} adalah ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Terlalu kecil: dijangka ${n.origin} ${o.verb} ${t}${n.minimum.toString()} ${o.unit}`;return`Terlalu kecil: dijangka ${n.origin} adalah ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`String tidak sah: mesti bermula dengan \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`String tidak sah: mesti berakhir dengan \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`String tidak sah: mesti mengandungi \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`String tidak sah: mesti sepadan dengan corak ${t.pattern}`;return`${v[t.format]??n.format} tidak sah`}case\\\"not_multiple_of\\\":return`Nombor tidak sah: perlu gandaan ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Kunci tidak dikenali: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Kunci tidak sah dalam ${n.origin}`;case\\\"invalid_union\\\":return\\\"Input tidak sah\\\";case\\\"invalid_element\\\":return`Nilai tidak sah dalam ${n.origin}`;default:return\\\"Input tidak sah\\\"}}};var Ec=O(()=>{j()});function xg(){return{localeError:AI()}}var AI=()=>{let r={string:{unit:\\\"tekens\\\",verb:\\\"heeft\\\"},file:{unit:\\\"bytes\\\",verb:\\\"heeft\\\"},array:{unit:\\\"elementen\\\",verb:\\\"heeft\\\"},set:{unit:\\\"elementen\\\",verb:\\\"heeft\\\"}};function i(n){return r[n]??null}let v={regex:\\\"invoer\\\",email:\\\"emailadres\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO datum en tijd\\\",date:\\\"ISO datum\\\",time:\\\"ISO tijd\\\",duration:\\\"ISO duur\\\",ipv4:\\\"IPv4-adres\\\",ipv6:\\\"IPv6-adres\\\",cidrv4:\\\"IPv4-bereik\\\",cidrv6:\\\"IPv6-bereik\\\",base64:\\\"base64-gecodeerde tekst\\\",base64url:\\\"base64 URL-gecodeerde tekst\\\",json_string:\\\"JSON string\\\",e164:\\\"E.164-nummer\\\",jwt:\\\"JWT\\\",template_literal:\\\"invoer\\\"},u={nan:\\\"NaN\\\",number:\\\"getal\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Ongeldige invoer: verwacht instanceof ${n.expected}, ontving ${$}`;return`Ongeldige invoer: verwacht ${t}, ontving ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Ongeldige invoer: verwacht ${D(n.values[0])}`;return`Ongeldige optie: verwacht één van ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin),$=n.origin===\\\"date\\\"?\\\"laat\\\":n.origin===\\\"string\\\"?\\\"lang\\\":\\\"groot\\\";if(o)return`Te ${$}: verwacht dat ${n.origin??\\\"waarde\\\"} ${t}${n.maximum.toString()} ${o.unit??\\\"elementen\\\"} ${o.verb}`;return`Te ${$}: verwacht dat ${n.origin??\\\"waarde\\\"} ${t}${n.maximum.toString()} is`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin),$=n.origin===\\\"date\\\"?\\\"vroeg\\\":n.origin===\\\"string\\\"?\\\"kort\\\":\\\"klein\\\";if(o)return`Te ${$}: verwacht dat ${n.origin} ${t}${n.minimum.toString()} ${o.unit} ${o.verb}`;return`Te ${$}: verwacht dat ${n.origin} ${t}${n.minimum.toString()} is`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Ongeldige tekst: moet met \\\"${t.prefix}\\\" beginnen`;if(t.format===\\\"ends_with\\\")return`Ongeldige tekst: moet op \\\"${t.suffix}\\\" eindigen`;if(t.format===\\\"includes\\\")return`Ongeldige tekst: moet \\\"${t.includes}\\\" bevatten`;if(t.format===\\\"regex\\\")return`Ongeldige tekst: moet overeenkomen met patroon ${t.pattern}`;return`Ongeldig: ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Ongeldig getal: moet een veelvoud van ${n.divisor} zijn`;case\\\"unrecognized_keys\\\":return`Onbekende key${n.keys.length>1?\\\"s\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Ongeldige key in ${n.origin}`;case\\\"invalid_union\\\":return\\\"Ongeldige invoer\\\";case\\\"invalid_element\\\":return`Ongeldige waarde in ${n.origin}`;default:return\\\"Ongeldige invoer\\\"}}};var Tc=O(()=>{j()});function Mg(){return{localeError:JI()}}var JI=()=>{let r={string:{unit:\\\"tegn\\\",verb:\\\"å ha\\\"},file:{unit:\\\"bytes\\\",verb:\\\"å ha\\\"},array:{unit:\\\"elementer\\\",verb:\\\"å inneholde\\\"},set:{unit:\\\"elementer\\\",verb:\\\"å inneholde\\\"}};function i(n){return r[n]??null}let v={regex:\\\"input\\\",email:\\\"e-postadresse\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO dato- og klokkeslett\\\",date:\\\"ISO-dato\\\",time:\\\"ISO-klokkeslett\\\",duration:\\\"ISO-varighet\\\",ipv4:\\\"IPv4-område\\\",ipv6:\\\"IPv6-område\\\",cidrv4:\\\"IPv4-spekter\\\",cidrv6:\\\"IPv6-spekter\\\",base64:\\\"base64-enkodet streng\\\",base64url:\\\"base64url-enkodet streng\\\",json_string:\\\"JSON-streng\\\",e164:\\\"E.164-nummer\\\",jwt:\\\"JWT\\\",template_literal:\\\"input\\\"},u={nan:\\\"NaN\\\",number:\\\"tall\\\",array:\\\"liste\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Ugyldig input: forventet instanceof ${n.expected}, fikk ${$}`;return`Ugyldig input: forventet ${t}, fikk ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Ugyldig verdi: forventet ${D(n.values[0])}`;return`Ugyldig valg: forventet en av ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`For stor(t): forventet ${n.origin??\\\"value\\\"} til å ha ${t}${n.maximum.toString()} ${o.unit??\\\"elementer\\\"}`;return`For stor(t): forventet ${n.origin??\\\"value\\\"} til å ha ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`For lite(n): forventet ${n.origin} til å ha ${t}${n.minimum.toString()} ${o.unit}`;return`For lite(n): forventet ${n.origin} til å ha ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Ugyldig streng: må starte med \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Ugyldig streng: må ende med \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Ugyldig streng: må inneholde \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Ugyldig streng: må matche mønsteret ${t.pattern}`;return`Ugyldig ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Ugyldig tall: må være et multiplum av ${n.divisor}`;case\\\"unrecognized_keys\\\":return`${n.keys.length>1?\\\"Ukjente nøkler\\\":\\\"Ukjent nøkkel\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Ugyldig nøkkel i ${n.origin}`;case\\\"invalid_union\\\":return\\\"Ugyldig input\\\";case\\\"invalid_element\\\":return`Ugyldig verdi i ${n.origin}`;default:return\\\"Ugyldig input\\\"}}};var xc=O(()=>{j()});function Yg(){return{localeError:WI()}}var WI=()=>{let r={string:{unit:\\\"harf\\\",verb:\\\"olmalıdır\\\"},file:{unit:\\\"bayt\\\",verb:\\\"olmalıdır\\\"},array:{unit:\\\"unsur\\\",verb:\\\"olmalıdır\\\"},set:{unit:\\\"unsur\\\",verb:\\\"olmalıdır\\\"}};function i(n){return r[n]??null}let v={regex:\\\"giren\\\",email:\\\"epostagâh\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO hengâmı\\\",date:\\\"ISO tarihi\\\",time:\\\"ISO zamanı\\\",duration:\\\"ISO müddeti\\\",ipv4:\\\"IPv4 nişânı\\\",ipv6:\\\"IPv6 nişânı\\\",cidrv4:\\\"IPv4 menzili\\\",cidrv6:\\\"IPv6 menzili\\\",base64:\\\"base64-şifreli metin\\\",base64url:\\\"base64url-şifreli metin\\\",json_string:\\\"JSON metin\\\",e164:\\\"E.164 sayısı\\\",jwt:\\\"JWT\\\",template_literal:\\\"giren\\\"},u={nan:\\\"NaN\\\",number:\\\"numara\\\",array:\\\"saf\\\",null:\\\"gayb\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Fâsit giren: umulan instanceof ${n.expected}, alınan ${$}`;return`Fâsit giren: umulan ${t}, alınan ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Fâsit giren: umulan ${D(n.values[0])}`;return`Fâsit tercih: mûteberler ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Fazla büyük: ${n.origin??\\\"value\\\"}, ${t}${n.maximum.toString()} ${o.unit??\\\"elements\\\"} sahip olmalıydı.`;return`Fazla büyük: ${n.origin??\\\"value\\\"}, ${t}${n.maximum.toString()} olmalıydı.`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Fazla küçük: ${n.origin}, ${t}${n.minimum.toString()} ${o.unit} sahip olmalıydı.`;return`Fazla küçük: ${n.origin}, ${t}${n.minimum.toString()} olmalıydı.`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Fâsit metin: \\\"${t.prefix}\\\" ile başlamalı.`;if(t.format===\\\"ends_with\\\")return`Fâsit metin: \\\"${t.suffix}\\\" ile bitmeli.`;if(t.format===\\\"includes\\\")return`Fâsit metin: \\\"${t.includes}\\\" ihtivâ etmeli.`;if(t.format===\\\"regex\\\")return`Fâsit metin: ${t.pattern} nakşına uymalı.`;return`Fâsit ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Fâsit sayı: ${n.divisor} katı olmalıydı.`;case\\\"unrecognized_keys\\\":return`Tanınmayan anahtar ${n.keys.length>1?\\\"s\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`${n.origin} için tanınmayan anahtar var.`;case\\\"invalid_union\\\":return\\\"Giren tanınamadı.\\\";case\\\"invalid_element\\\":return`${n.origin} için tanınmayan kıymet var.`;default:return\\\"Kıymet tanınamadı.\\\"}}};var Mc=O(()=>{j()});function qg(){return{localeError:VI()}}var VI=()=>{let r={string:{unit:\\\"توکي\\\",verb:\\\"ولري\\\"},file:{unit:\\\"بایټس\\\",verb:\\\"ولري\\\"},array:{unit:\\\"توکي\\\",verb:\\\"ولري\\\"},set:{unit:\\\"توکي\\\",verb:\\\"ولري\\\"}};function i(n){return r[n]??null}let v={regex:\\\"ورودي\\\",email:\\\"بریښنالیک\\\",url:\\\"یو آر ال\\\",emoji:\\\"ایموجي\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"نیټه او وخت\\\",date:\\\"نېټه\\\",time:\\\"وخت\\\",duration:\\\"موده\\\",ipv4:\\\"د IPv4 پته\\\",ipv6:\\\"د IPv6 پته\\\",cidrv4:\\\"د IPv4 ساحه\\\",cidrv6:\\\"د IPv6 ساحه\\\",base64:\\\"base64-encoded متن\\\",base64url:\\\"base64url-encoded متن\\\",json_string:\\\"JSON متن\\\",e164:\\\"د E.164 شمېره\\\",jwt:\\\"JWT\\\",template_literal:\\\"ورودي\\\"},u={nan:\\\"NaN\\\",number:\\\"عدد\\\",array:\\\"ارې\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`ناسم ورودي: باید instanceof ${n.expected} وای, مګر ${$} ترلاسه شو`;return`ناسم ورودي: باید ${t} وای, مګر ${$} ترلاسه شو`}case\\\"invalid_value\\\":if(n.values.length===1)return`ناسم ورودي: باید ${D(n.values[0])} وای`;return`ناسم انتخاب: باید یو له ${_(n.values,\\\"|\\\")} څخه وای`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`ډیر لوی: ${n.origin??\\\"ارزښت\\\"} باید ${t}${n.maximum.toString()} ${o.unit??\\\"عنصرونه\\\"} ولري`;return`ډیر لوی: ${n.origin??\\\"ارزښت\\\"} باید ${t}${n.maximum.toString()} وي`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`ډیر کوچنی: ${n.origin} باید ${t}${n.minimum.toString()} ${o.unit} ولري`;return`ډیر کوچنی: ${n.origin} باید ${t}${n.minimum.toString()} وي`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`ناسم متن: باید د \\\"${t.prefix}\\\" سره پیل شي`;if(t.format===\\\"ends_with\\\")return`ناسم متن: باید د \\\"${t.suffix}\\\" سره پای ته ورسيږي`;if(t.format===\\\"includes\\\")return`ناسم متن: باید \\\"${t.includes}\\\" ولري`;if(t.format===\\\"regex\\\")return`ناسم متن: باید د ${t.pattern} سره مطابقت ولري`;return`${v[t.format]??n.format} ناسم دی`}case\\\"not_multiple_of\\\":return`ناسم عدد: باید د ${n.divisor} مضرب وي`;case\\\"unrecognized_keys\\\":return`ناسم ${n.keys.length>1?\\\"کلیډونه\\\":\\\"کلیډ\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`ناسم کلیډ په ${n.origin} کې`;case\\\"invalid_union\\\":return\\\"ناسمه ورودي\\\";case\\\"invalid_element\\\":return`ناسم عنصر په ${n.origin} کې`;default:return\\\"ناسمه ورودي\\\"}}};var Yc=O(()=>{j()});function Xg(){return{localeError:GI()}}var GI=()=>{let r={string:{unit:\\\"znaków\\\",verb:\\\"mieć\\\"},file:{unit:\\\"bajtów\\\",verb:\\\"mieć\\\"},array:{unit:\\\"elementów\\\",verb:\\\"mieć\\\"},set:{unit:\\\"elementów\\\",verb:\\\"mieć\\\"}};function i(n){return r[n]??null}let v={regex:\\\"wyrażenie\\\",email:\\\"adres email\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"data i godzina w formacie ISO\\\",date:\\\"data w formacie ISO\\\",time:\\\"godzina w formacie ISO\\\",duration:\\\"czas trwania ISO\\\",ipv4:\\\"adres IPv4\\\",ipv6:\\\"adres IPv6\\\",cidrv4:\\\"zakres IPv4\\\",cidrv6:\\\"zakres IPv6\\\",base64:\\\"ciąg znaków zakodowany w formacie base64\\\",base64url:\\\"ciąg znaków zakodowany w formacie base64url\\\",json_string:\\\"ciąg znaków w formacie JSON\\\",e164:\\\"liczba E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"wejście\\\"},u={nan:\\\"NaN\\\",number:\\\"liczba\\\",array:\\\"tablica\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Nieprawidłowe dane wejściowe: oczekiwano instanceof ${n.expected}, otrzymano ${$}`;return`Nieprawidłowe dane wejściowe: oczekiwano ${t}, otrzymano ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Nieprawidłowe dane wejściowe: oczekiwano ${D(n.values[0])}`;return`Nieprawidłowa opcja: oczekiwano jednej z wartości ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Za duża wartość: oczekiwano, że ${n.origin??\\\"wartość\\\"} będzie mieć ${t}${n.maximum.toString()} ${o.unit??\\\"elementów\\\"}`;return`Zbyt duż(y/a/e): oczekiwano, że ${n.origin??\\\"wartość\\\"} będzie wynosić ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Za mała wartość: oczekiwano, że ${n.origin??\\\"wartość\\\"} będzie mieć ${t}${n.minimum.toString()} ${o.unit??\\\"elementów\\\"}`;return`Zbyt mał(y/a/e): oczekiwano, że ${n.origin??\\\"wartość\\\"} będzie wynosić ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Nieprawidłowy ciąg znaków: musi zaczynać się od \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Nieprawidłowy ciąg znaków: musi kończyć się na \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Nieprawidłowy ciąg znaków: musi zawierać \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Nieprawidłowy ciąg znaków: musi odpowiadać wzorcowi ${t.pattern}`;return`Nieprawidłow(y/a/e) ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Nieprawidłowa liczba: musi być wielokrotnością ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Nierozpoznane klucze${n.keys.length>1?\\\"s\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Nieprawidłowy klucz w ${n.origin}`;case\\\"invalid_union\\\":return\\\"Nieprawidłowe dane wejściowe\\\";case\\\"invalid_element\\\":return`Nieprawidłowa wartość w ${n.origin}`;default:return\\\"Nieprawidłowe dane wejściowe\\\"}}};var qc=O(()=>{j()});function Rg(){return{localeError:KI()}}var KI=()=>{let r={string:{unit:\\\"caracteres\\\",verb:\\\"ter\\\"},file:{unit:\\\"bytes\\\",verb:\\\"ter\\\"},array:{unit:\\\"itens\\\",verb:\\\"ter\\\"},set:{unit:\\\"itens\\\",verb:\\\"ter\\\"}};function i(n){return r[n]??null}let v={regex:\\\"padrão\\\",email:\\\"endereço de e-mail\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"data e hora ISO\\\",date:\\\"data ISO\\\",time:\\\"hora ISO\\\",duration:\\\"duração ISO\\\",ipv4:\\\"endereço IPv4\\\",ipv6:\\\"endereço IPv6\\\",cidrv4:\\\"faixa de IPv4\\\",cidrv6:\\\"faixa de IPv6\\\",base64:\\\"texto codificado em base64\\\",base64url:\\\"URL codificada em base64\\\",json_string:\\\"texto JSON\\\",e164:\\\"número E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"entrada\\\"},u={nan:\\\"NaN\\\",number:\\\"número\\\",null:\\\"nulo\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Tipo inválido: esperado instanceof ${n.expected}, recebido ${$}`;return`Tipo inválido: esperado ${t}, recebido ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Entrada inválida: esperado ${D(n.values[0])}`;return`Opção inválida: esperada uma das ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Muito grande: esperado que ${n.origin??\\\"valor\\\"} tivesse ${t}${n.maximum.toString()} ${o.unit??\\\"elementos\\\"}`;return`Muito grande: esperado que ${n.origin??\\\"valor\\\"} fosse ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Muito pequeno: esperado que ${n.origin} tivesse ${t}${n.minimum.toString()} ${o.unit}`;return`Muito pequeno: esperado que ${n.origin} fosse ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Texto inválido: deve começar com \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Texto inválido: deve terminar com \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Texto inválido: deve incluir \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Texto inválido: deve corresponder ao padrão ${t.pattern}`;return`${v[t.format]??n.format} inválido`}case\\\"not_multiple_of\\\":return`Número inválido: deve ser múltiplo de ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Chave${n.keys.length>1?\\\"s\\\":\\\"\\\"} desconhecida${n.keys.length>1?\\\"s\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Chave inválida em ${n.origin}`;case\\\"invalid_union\\\":return\\\"Entrada inválida\\\";case\\\"invalid_element\\\":return`Valor inválido em ${n.origin}`;default:return\\\"Campo inválido\\\"}}};var Xc=O(()=>{j()});function Zg(){return{localeError:BI()}}var BI=()=>{let r={string:{unit:\\\"caractere\\\",verb:\\\"să aibă\\\"},file:{unit:\\\"octeți\\\",verb:\\\"să aibă\\\"},array:{unit:\\\"elemente\\\",verb:\\\"să aibă\\\"},set:{unit:\\\"elemente\\\",verb:\\\"să aibă\\\"},map:{unit:\\\"intrări\\\",verb:\\\"să aibă\\\"}};function i(n){return r[n]??null}let v={regex:\\\"intrare\\\",email:\\\"adresă de email\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"dată și oră ISO\\\",date:\\\"dată ISO\\\",time:\\\"oră ISO\\\",duration:\\\"durată ISO\\\",ipv4:\\\"adresă IPv4\\\",ipv6:\\\"adresă IPv6\\\",mac:\\\"adresă MAC\\\",cidrv4:\\\"interval IPv4\\\",cidrv6:\\\"interval IPv6\\\",base64:\\\"șir codat base64\\\",base64url:\\\"șir codat base64url\\\",json_string:\\\"șir JSON\\\",e164:\\\"număr E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"intrare\\\"},u={nan:\\\"NaN\\\",string:\\\"șir\\\",number:\\\"număr\\\",boolean:\\\"boolean\\\",function:\\\"funcție\\\",array:\\\"matrice\\\",object:\\\"obiect\\\",undefined:\\\"nedefinit\\\",symbol:\\\"simbol\\\",bigint:\\\"număr mare\\\",void:\\\"void\\\",never:\\\"never\\\",map:\\\"hartă\\\",set:\\\"set\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;return`Intrare invalidă: așteptat ${t}, primit ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Intrare invalidă: așteptat ${D(n.values[0])}`;return`Opțiune invalidă: așteptat una dintre ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Prea mare: așteptat ca ${n.origin??\\\"valoarea\\\"} ${o.verb} ${t}${n.maximum.toString()} ${o.unit??\\\"elemente\\\"}`;return`Prea mare: așteptat ca ${n.origin??\\\"valoarea\\\"} să fie ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Prea mic: așteptat ca ${n.origin} ${o.verb} ${t}${n.minimum.toString()} ${o.unit}`;return`Prea mic: așteptat ca ${n.origin} să fie ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Șir invalid: trebuie să înceapă cu \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Șir invalid: trebuie să se termine cu \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Șir invalid: trebuie să includă \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Șir invalid: trebuie să se potrivească cu modelul ${t.pattern}`;return`Format invalid: ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Număr invalid: trebuie să fie multiplu de ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Chei nerecunoscute: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Cheie invalidă în ${n.origin}`;case\\\"invalid_union\\\":return\\\"Intrare invalidă\\\";case\\\"invalid_element\\\":return`Valoare invalidă în ${n.origin}`;default:return\\\"Intrare invalidă\\\"}}};var Rc=O(()=>{j()});function Zc(r,i,v,u){let n=Math.abs(r),t=n%10,o=n%100;if(o>=11&&o<=19)return u;if(t===1)return i;if(t>=2&&t<=4)return v;return u}function Qg(){return{localeError:HI()}}var HI=()=>{let r={string:{unit:{one:\\\"символ\\\",few:\\\"символа\\\",many:\\\"символов\\\"},verb:\\\"иметь\\\"},file:{unit:{one:\\\"байт\\\",few:\\\"байта\\\",many:\\\"байт\\\"},verb:\\\"иметь\\\"},array:{unit:{one:\\\"элемент\\\",few:\\\"элемента\\\",many:\\\"элементов\\\"},verb:\\\"иметь\\\"},set:{unit:{one:\\\"элемент\\\",few:\\\"элемента\\\",many:\\\"элементов\\\"},verb:\\\"иметь\\\"}};function i(n){return r[n]??null}let v={regex:\\\"ввод\\\",email:\\\"email адрес\\\",url:\\\"URL\\\",emoji:\\\"эмодзи\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO дата и время\\\",date:\\\"ISO дата\\\",time:\\\"ISO время\\\",duration:\\\"ISO длительность\\\",ipv4:\\\"IPv4 адрес\\\",ipv6:\\\"IPv6 адрес\\\",cidrv4:\\\"IPv4 диапазон\\\",cidrv6:\\\"IPv6 диапазон\\\",base64:\\\"строка в формате base64\\\",base64url:\\\"строка в формате base64url\\\",json_string:\\\"JSON строка\\\",e164:\\\"номер E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"ввод\\\"},u={nan:\\\"NaN\\\",number:\\\"число\\\",array:\\\"массив\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Неверный ввод: ожидалось instanceof ${n.expected}, получено ${$}`;return`Неверный ввод: ожидалось ${t}, получено ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Неверный ввод: ожидалось ${D(n.values[0])}`;return`Неверный вариант: ожидалось одно из ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o){let $=Number(n.maximum),b=Zc($,o.unit.one,o.unit.few,o.unit.many);return`Слишком большое значение: ожидалось, что ${n.origin??\\\"значение\\\"} будет иметь ${t}${n.maximum.toString()} ${b}`}return`Слишком большое значение: ожидалось, что ${n.origin??\\\"значение\\\"} будет ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o){let $=Number(n.minimum),b=Zc($,o.unit.one,o.unit.few,o.unit.many);return`Слишком маленькое значение: ожидалось, что ${n.origin} будет иметь ${t}${n.minimum.toString()} ${b}`}return`Слишком маленькое значение: ожидалось, что ${n.origin} будет ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Неверная строка: должна начинаться с \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Неверная строка: должна заканчиваться на \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Неверная строка: должна содержать \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Неверная строка: должна соответствовать шаблону ${t.pattern}`;return`Неверный ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Неверное число: должно быть кратным ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Нераспознанн${n.keys.length>1?\\\"ые\\\":\\\"ый\\\"} ключ${n.keys.length>1?\\\"и\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Неверный ключ в ${n.origin}`;case\\\"invalid_union\\\":return\\\"Неверные входные данные\\\";case\\\"invalid_element\\\":return`Неверное значение в ${n.origin}`;default:return\\\"Неверные входные данные\\\"}}};var Qc=O(()=>{j()});function Cg(){return{localeError:FI()}}var FI=()=>{let r={string:{unit:\\\"znakov\\\",verb:\\\"imeti\\\"},file:{unit:\\\"bajtov\\\",verb:\\\"imeti\\\"},array:{unit:\\\"elementov\\\",verb:\\\"imeti\\\"},set:{unit:\\\"elementov\\\",verb:\\\"imeti\\\"}};function i(n){return r[n]??null}let v={regex:\\\"vnos\\\",email:\\\"e-poštni naslov\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO datum in čas\\\",date:\\\"ISO datum\\\",time:\\\"ISO čas\\\",duration:\\\"ISO trajanje\\\",ipv4:\\\"IPv4 naslov\\\",ipv6:\\\"IPv6 naslov\\\",cidrv4:\\\"obseg IPv4\\\",cidrv6:\\\"obseg IPv6\\\",base64:\\\"base64 kodiran niz\\\",base64url:\\\"base64url kodiran niz\\\",json_string:\\\"JSON niz\\\",e164:\\\"E.164 številka\\\",jwt:\\\"JWT\\\",template_literal:\\\"vnos\\\"},u={nan:\\\"NaN\\\",number:\\\"število\\\",array:\\\"tabela\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Neveljaven vnos: pričakovano instanceof ${n.expected}, prejeto ${$}`;return`Neveljaven vnos: pričakovano ${t}, prejeto ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Neveljaven vnos: pričakovano ${D(n.values[0])}`;return`Neveljavna možnost: pričakovano eno izmed ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Preveliko: pričakovano, da bo ${n.origin??\\\"vrednost\\\"} imelo ${t}${n.maximum.toString()} ${o.unit??\\\"elementov\\\"}`;return`Preveliko: pričakovano, da bo ${n.origin??\\\"vrednost\\\"} ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Premajhno: pričakovano, da bo ${n.origin} imelo ${t}${n.minimum.toString()} ${o.unit}`;return`Premajhno: pričakovano, da bo ${n.origin} ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Neveljaven niz: mora se začeti z \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Neveljaven niz: mora se končati z \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Neveljaven niz: mora vsebovati \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Neveljaven niz: mora ustrezati vzorcu ${t.pattern}`;return`Neveljaven ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Neveljavno število: mora biti večkratnik ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Neprepoznan${n.keys.length>1?\\\"i ključi\\\":\\\" ključ\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Neveljaven ključ v ${n.origin}`;case\\\"invalid_union\\\":return\\\"Neveljaven vnos\\\";case\\\"invalid_element\\\":return`Neveljavna vrednost v ${n.origin}`;default:return\\\"Neveljaven vnos\\\"}}};var Cc=O(()=>{j()});function fg(){return{localeError:EI()}}var EI=()=>{let r={string:{unit:\\\"tecken\\\",verb:\\\"att ha\\\"},file:{unit:\\\"bytes\\\",verb:\\\"att ha\\\"},array:{unit:\\\"objekt\\\",verb:\\\"att innehålla\\\"},set:{unit:\\\"objekt\\\",verb:\\\"att innehålla\\\"}};function i(n){return r[n]??null}let v={regex:\\\"reguljärt uttryck\\\",email:\\\"e-postadress\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO-datum och tid\\\",date:\\\"ISO-datum\\\",time:\\\"ISO-tid\\\",duration:\\\"ISO-varaktighet\\\",ipv4:\\\"IPv4-intervall\\\",ipv6:\\\"IPv6-intervall\\\",cidrv4:\\\"IPv4-spektrum\\\",cidrv6:\\\"IPv6-spektrum\\\",base64:\\\"base64-kodad sträng\\\",base64url:\\\"base64url-kodad sträng\\\",json_string:\\\"JSON-sträng\\\",e164:\\\"E.164-nummer\\\",jwt:\\\"JWT\\\",template_literal:\\\"mall-literal\\\"},u={nan:\\\"NaN\\\",number:\\\"antal\\\",array:\\\"lista\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Ogiltig inmatning: förväntat instanceof ${n.expected}, fick ${$}`;return`Ogiltig inmatning: förväntat ${t}, fick ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Ogiltig inmatning: förväntat ${D(n.values[0])}`;return`Ogiltigt val: förväntade en av ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`För stor(t): förväntade ${n.origin??\\\"värdet\\\"} att ha ${t}${n.maximum.toString()} ${o.unit??\\\"element\\\"}`;return`För stor(t): förväntat ${n.origin??\\\"värdet\\\"} att ha ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`För lite(t): förväntade ${n.origin??\\\"värdet\\\"} att ha ${t}${n.minimum.toString()} ${o.unit}`;return`För lite(t): förväntade ${n.origin??\\\"värdet\\\"} att ha ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Ogiltig sträng: måste börja med \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Ogiltig sträng: måste sluta med \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Ogiltig sträng: måste innehålla \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Ogiltig sträng: måste matcha mönstret \\\"${t.pattern}\\\"`;return`Ogiltig(t) ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Ogiltigt tal: måste vara en multipel av ${n.divisor}`;case\\\"unrecognized_keys\\\":return`${n.keys.length>1?\\\"Okända nycklar\\\":\\\"Okänd nyckel\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Ogiltig nyckel i ${n.origin??\\\"värdet\\\"}`;case\\\"invalid_union\\\":return\\\"Ogiltig input\\\";case\\\"invalid_element\\\":return`Ogiltigt värde i ${n.origin??\\\"värdet\\\"}`;default:return\\\"Ogiltig input\\\"}}};var fc=O(()=>{j()});function dg(){return{localeError:TI()}}var TI=()=>{let r={string:{unit:\\\"எழுத்துக்கள்\\\",verb:\\\"கொண்டிருக்க வேண்டும்\\\"},file:{unit:\\\"பைட்டுகள்\\\",verb:\\\"கொண்டிருக்க வேண்டும்\\\"},array:{unit:\\\"உறுப்புகள்\\\",verb:\\\"கொண்டிருக்க வேண்டும்\\\"},set:{unit:\\\"உறுப்புகள்\\\",verb:\\\"கொண்டிருக்க வேண்டும்\\\"}};function i(n){return r[n]??null}let v={regex:\\\"உள்ளீடு\\\",email:\\\"மின்னஞ்சல் முகவரி\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO தேதி நேரம்\\\",date:\\\"ISO தேதி\\\",time:\\\"ISO நேரம்\\\",duration:\\\"ISO கால அளவு\\\",ipv4:\\\"IPv4 முகவரி\\\",ipv6:\\\"IPv6 முகவரி\\\",cidrv4:\\\"IPv4 வரம்பு\\\",cidrv6:\\\"IPv6 வரம்பு\\\",base64:\\\"base64-encoded சரம்\\\",base64url:\\\"base64url-encoded சரம்\\\",json_string:\\\"JSON சரம்\\\",e164:\\\"E.164 எண்\\\",jwt:\\\"JWT\\\",template_literal:\\\"input\\\"},u={nan:\\\"NaN\\\",number:\\\"எண்\\\",array:\\\"அணி\\\",null:\\\"வெறுமை\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது instanceof ${n.expected}, பெறப்பட்டது ${$}`;return`தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது ${t}, பெறப்பட்டது ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது ${D(n.values[0])}`;return`தவறான விருப்பம்: எதிர்பார்க்கப்பட்டது ${_(n.values,\\\"|\\\")} இல் ஒன்று`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`மிக பெரியது: எதிர்பார்க்கப்பட்டது ${n.origin??\\\"மதிப்பு\\\"} ${t}${n.maximum.toString()} ${o.unit??\\\"உறுப்புகள்\\\"} ஆக இருக்க வேண்டும்`;return`மிக பெரியது: எதிர்பார்க்கப்பட்டது ${n.origin??\\\"மதிப்பு\\\"} ${t}${n.maximum.toString()} ஆக இருக்க வேண்டும்`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`மிகச் சிறியது: எதிர்பார்க்கப்பட்டது ${n.origin} ${t}${n.minimum.toString()} ${o.unit} ஆக இருக்க வேண்டும்`;return`மிகச் சிறியது: எதிர்பார்க்கப்பட்டது ${n.origin} ${t}${n.minimum.toString()} ஆக இருக்க வேண்டும்`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`தவறான சரம்: \\\"${t.prefix}\\\" இல் தொடங்க வேண்டும்`;if(t.format===\\\"ends_with\\\")return`தவறான சரம்: \\\"${t.suffix}\\\" இல் முடிவடைய வேண்டும்`;if(t.format===\\\"includes\\\")return`தவறான சரம்: \\\"${t.includes}\\\" ஐ உள்ளடக்க வேண்டும்`;if(t.format===\\\"regex\\\")return`தவறான சரம்: ${t.pattern} முறைபாட்டுடன் பொருந்த வேண்டும்`;return`தவறான ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`தவறான எண்: ${n.divisor} இன் பலமாக இருக்க வேண்டும்`;case\\\"unrecognized_keys\\\":return`அடையாளம் தெரியாத விசை${n.keys.length>1?\\\"கள்\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`${n.origin} இல் தவறான விசை`;case\\\"invalid_union\\\":return\\\"தவறான உள்ளீடு\\\";case\\\"invalid_element\\\":return`${n.origin} இல் தவறான மதிப்பு`;default:return\\\"தவறான உள்ளீடு\\\"}}};var dc=O(()=>{j()});function yg(){return{localeError:xI()}}var xI=()=>{let r={string:{unit:\\\"ตัวอักษร\\\",verb:\\\"ควรมี\\\"},file:{unit:\\\"ไบต์\\\",verb:\\\"ควรมี\\\"},array:{unit:\\\"รายการ\\\",verb:\\\"ควรมี\\\"},set:{unit:\\\"รายการ\\\",verb:\\\"ควรมี\\\"}};function i(n){return r[n]??null}let v={regex:\\\"ข้อมูลที่ป้อน\\\",email:\\\"ที่อยู่อีเมล\\\",url:\\\"URL\\\",emoji:\\\"อิโมจิ\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"วันที่เวลาแบบ ISO\\\",date:\\\"วันที่แบบ ISO\\\",time:\\\"เวลาแบบ ISO\\\",duration:\\\"ช่วงเวลาแบบ ISO\\\",ipv4:\\\"ที่อยู่ IPv4\\\",ipv6:\\\"ที่อยู่ IPv6\\\",cidrv4:\\\"ช่วง IP แบบ IPv4\\\",cidrv6:\\\"ช่วง IP แบบ IPv6\\\",base64:\\\"ข้อความแบบ Base64\\\",base64url:\\\"ข้อความแบบ Base64 สำหรับ URL\\\",json_string:\\\"ข้อความแบบ JSON\\\",e164:\\\"เบอร์โทรศัพท์ระหว่างประเทศ (E.164)\\\",jwt:\\\"โทเคน JWT\\\",template_literal:\\\"ข้อมูลที่ป้อน\\\"},u={nan:\\\"NaN\\\",number:\\\"ตัวเลข\\\",array:\\\"อาร์เรย์ (Array)\\\",null:\\\"ไม่มีค่า (null)\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`ประเภทข้อมูลไม่ถูกต้อง: ควรเป็น instanceof ${n.expected} แต่ได้รับ ${$}`;return`ประเภทข้อมูลไม่ถูกต้อง: ควรเป็น ${t} แต่ได้รับ ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`ค่าไม่ถูกต้อง: ควรเป็น ${D(n.values[0])}`;return`ตัวเลือกไม่ถูกต้อง: ควรเป็นหนึ่งใน ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"ไม่เกิน\\\":\\\"น้อยกว่า\\\",o=i(n.origin);if(o)return`เกินกำหนด: ${n.origin??\\\"ค่า\\\"} ควรมี${t} ${n.maximum.toString()} ${o.unit??\\\"รายการ\\\"}`;return`เกินกำหนด: ${n.origin??\\\"ค่า\\\"} ควรมี${t} ${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\"อย่างน้อย\\\":\\\"มากกว่า\\\",o=i(n.origin);if(o)return`น้อยกว่ากำหนด: ${n.origin} ควรมี${t} ${n.minimum.toString()} ${o.unit}`;return`น้อยกว่ากำหนด: ${n.origin} ควรมี${t} ${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`รูปแบบไม่ถูกต้อง: ข้อความต้องขึ้นต้นด้วย \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`รูปแบบไม่ถูกต้อง: ข้อความต้องลงท้ายด้วย \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`รูปแบบไม่ถูกต้อง: ข้อความต้องมี \\\"${t.includes}\\\" อยู่ในข้อความ`;if(t.format===\\\"regex\\\")return`รูปแบบไม่ถูกต้อง: ต้องตรงกับรูปแบบที่กำหนด ${t.pattern}`;return`รูปแบบไม่ถูกต้อง: ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`ตัวเลขไม่ถูกต้อง: ต้องเป็นจำนวนที่หารด้วย ${n.divisor} ได้ลงตัว`;case\\\"unrecognized_keys\\\":return`พบคีย์ที่ไม่รู้จัก: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`คีย์ไม่ถูกต้องใน ${n.origin}`;case\\\"invalid_union\\\":return\\\"ข้อมูลไม่ถูกต้อง: ไม่ตรงกับรูปแบบยูเนียนที่กำหนดไว้\\\";case\\\"invalid_element\\\":return`ข้อมูลไม่ถูกต้องใน ${n.origin}`;default:return\\\"ข้อมูลไม่ถูกต้อง\\\"}}};var yc=O(()=>{j()});function hg(){return{localeError:MI()}}var MI=()=>{let r={string:{unit:\\\"karakter\\\",verb:\\\"olmalı\\\"},file:{unit:\\\"bayt\\\",verb:\\\"olmalı\\\"},array:{unit:\\\"öğe\\\",verb:\\\"olmalı\\\"},set:{unit:\\\"öğe\\\",verb:\\\"olmalı\\\"}};function i(n){return r[n]??null}let v={regex:\\\"girdi\\\",email:\\\"e-posta adresi\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO tarih ve saat\\\",date:\\\"ISO tarih\\\",time:\\\"ISO saat\\\",duration:\\\"ISO süre\\\",ipv4:\\\"IPv4 adresi\\\",ipv6:\\\"IPv6 adresi\\\",cidrv4:\\\"IPv4 aralığı\\\",cidrv6:\\\"IPv6 aralığı\\\",base64:\\\"base64 ile şifrelenmiş metin\\\",base64url:\\\"base64url ile şifrelenmiş metin\\\",json_string:\\\"JSON dizesi\\\",e164:\\\"E.164 sayısı\\\",jwt:\\\"JWT\\\",template_literal:\\\"Şablon dizesi\\\"},u={nan:\\\"NaN\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Geçersiz değer: beklenen instanceof ${n.expected}, alınan ${$}`;return`Geçersiz değer: beklenen ${t}, alınan ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Geçersiz değer: beklenen ${D(n.values[0])}`;return`Geçersiz seçenek: aşağıdakilerden biri olmalı: ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Çok büyük: beklenen ${n.origin??\\\"değer\\\"} ${t}${n.maximum.toString()} ${o.unit??\\\"öğe\\\"}`;return`Çok büyük: beklenen ${n.origin??\\\"değer\\\"} ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Çok küçük: beklenen ${n.origin} ${t}${n.minimum.toString()} ${o.unit}`;return`Çok küçük: beklenen ${n.origin} ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Geçersiz metin: \\\"${t.prefix}\\\" ile başlamalı`;if(t.format===\\\"ends_with\\\")return`Geçersiz metin: \\\"${t.suffix}\\\" ile bitmeli`;if(t.format===\\\"includes\\\")return`Geçersiz metin: \\\"${t.includes}\\\" içermeli`;if(t.format===\\\"regex\\\")return`Geçersiz metin: ${t.pattern} desenine uymalı`;return`Geçersiz ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Geçersiz sayı: ${n.divisor} ile tam bölünebilmeli`;case\\\"unrecognized_keys\\\":return`Tanınmayan anahtar${n.keys.length>1?\\\"lar\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`${n.origin} içinde geçersiz anahtar`;case\\\"invalid_union\\\":return\\\"Geçersiz değer\\\";case\\\"invalid_element\\\":return`${n.origin} içinde geçersiz değer`;default:return\\\"Geçersiz değer\\\"}}};var hc=O(()=>{j()});function ki(){return{localeError:YI()}}var YI=()=>{let r={string:{unit:\\\"символів\\\",verb:\\\"матиме\\\"},file:{unit:\\\"байтів\\\",verb:\\\"матиме\\\"},array:{unit:\\\"елементів\\\",verb:\\\"матиме\\\"},set:{unit:\\\"елементів\\\",verb:\\\"матиме\\\"}};function i(n){return r[n]??null}let v={regex:\\\"вхідні дані\\\",email:\\\"адреса електронної пошти\\\",url:\\\"URL\\\",emoji:\\\"емодзі\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"дата та час ISO\\\",date:\\\"дата ISO\\\",time:\\\"час ISO\\\",duration:\\\"тривалість ISO\\\",ipv4:\\\"адреса IPv4\\\",ipv6:\\\"адреса IPv6\\\",cidrv4:\\\"діапазон IPv4\\\",cidrv6:\\\"діапазон IPv6\\\",base64:\\\"рядок у кодуванні base64\\\",base64url:\\\"рядок у кодуванні base64url\\\",json_string:\\\"рядок JSON\\\",e164:\\\"номер E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"вхідні дані\\\"},u={nan:\\\"NaN\\\",number:\\\"число\\\",array:\\\"масив\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Неправильні вхідні дані: очікується instanceof ${n.expected}, отримано ${$}`;return`Неправильні вхідні дані: очікується ${t}, отримано ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Неправильні вхідні дані: очікується ${D(n.values[0])}`;return`Неправильна опція: очікується одне з ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Занадто велике: очікується, що ${n.origin??\\\"значення\\\"} ${o.verb} ${t}${n.maximum.toString()} ${o.unit??\\\"елементів\\\"}`;return`Занадто велике: очікується, що ${n.origin??\\\"значення\\\"} буде ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Занадто мале: очікується, що ${n.origin} ${o.verb} ${t}${n.minimum.toString()} ${o.unit}`;return`Занадто мале: очікується, що ${n.origin} буде ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Неправильний рядок: повинен починатися з \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Неправильний рядок: повинен закінчуватися на \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Неправильний рядок: повинен містити \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Неправильний рядок: повинен відповідати шаблону ${t.pattern}`;return`Неправильний ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Неправильне число: повинно бути кратним ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Нерозпізнаний ключ${n.keys.length>1?\\\"і\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Неправильний ключ у ${n.origin}`;case\\\"invalid_union\\\":return\\\"Неправильні вхідні дані\\\";case\\\"invalid_element\\\":return`Неправильне значення у ${n.origin}`;default:return\\\"Неправильні вхідні дані\\\"}}};var pg=O(()=>{j()});function ag(){return ki()}var pc=O(()=>{pg()});function sg(){return{localeError:qI()}}var qI=()=>{let r={string:{unit:\\\"حروف\\\",verb:\\\"ہونا\\\"},file:{unit:\\\"بائٹس\\\",verb:\\\"ہونا\\\"},array:{unit:\\\"آئٹمز\\\",verb:\\\"ہونا\\\"},set:{unit:\\\"آئٹمز\\\",verb:\\\"ہونا\\\"}};function i(n){return r[n]??null}let v={regex:\\\"ان پٹ\\\",email:\\\"ای میل ایڈریس\\\",url:\\\"یو آر ایل\\\",emoji:\\\"ایموجی\\\",uuid:\\\"یو یو آئی ڈی\\\",uuidv4:\\\"یو یو آئی ڈی وی 4\\\",uuidv6:\\\"یو یو آئی ڈی وی 6\\\",nanoid:\\\"نینو آئی ڈی\\\",guid:\\\"جی یو آئی ڈی\\\",cuid:\\\"سی یو آئی ڈی\\\",cuid2:\\\"سی یو آئی ڈی 2\\\",ulid:\\\"یو ایل آئی ڈی\\\",xid:\\\"ایکس آئی ڈی\\\",ksuid:\\\"کے ایس یو آئی ڈی\\\",datetime:\\\"آئی ایس او ڈیٹ ٹائم\\\",date:\\\"آئی ایس او تاریخ\\\",time:\\\"آئی ایس او وقت\\\",duration:\\\"آئی ایس او مدت\\\",ipv4:\\\"آئی پی وی 4 ایڈریس\\\",ipv6:\\\"آئی پی وی 6 ایڈریس\\\",cidrv4:\\\"آئی پی وی 4 رینج\\\",cidrv6:\\\"آئی پی وی 6 رینج\\\",base64:\\\"بیس 64 ان کوڈڈ سٹرنگ\\\",base64url:\\\"بیس 64 یو آر ایل ان کوڈڈ سٹرنگ\\\",json_string:\\\"جے ایس او این سٹرنگ\\\",e164:\\\"ای 164 نمبر\\\",jwt:\\\"جے ڈبلیو ٹی\\\",template_literal:\\\"ان پٹ\\\"},u={nan:\\\"NaN\\\",number:\\\"نمبر\\\",array:\\\"آرے\\\",null:\\\"نل\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`غلط ان پٹ: instanceof ${n.expected} متوقع تھا، ${$} موصول ہوا`;return`غلط ان پٹ: ${t} متوقع تھا، ${$} موصول ہوا`}case\\\"invalid_value\\\":if(n.values.length===1)return`غلط ان پٹ: ${D(n.values[0])} متوقع تھا`;return`غلط آپشن: ${_(n.values,\\\"|\\\")} میں سے ایک متوقع تھا`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`بہت بڑا: ${n.origin??\\\"ویلیو\\\"} کے ${t}${n.maximum.toString()} ${o.unit??\\\"عناصر\\\"} ہونے متوقع تھے`;return`بہت بڑا: ${n.origin??\\\"ویلیو\\\"} کا ${t}${n.maximum.toString()} ہونا متوقع تھا`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`بہت چھوٹا: ${n.origin} کے ${t}${n.minimum.toString()} ${o.unit} ہونے متوقع تھے`;return`بہت چھوٹا: ${n.origin} کا ${t}${n.minimum.toString()} ہونا متوقع تھا`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`غلط سٹرنگ: \\\"${t.prefix}\\\" سے شروع ہونا چاہیے`;if(t.format===\\\"ends_with\\\")return`غلط سٹرنگ: \\\"${t.suffix}\\\" پر ختم ہونا چاہیے`;if(t.format===\\\"includes\\\")return`غلط سٹرنگ: \\\"${t.includes}\\\" شامل ہونا چاہیے`;if(t.format===\\\"regex\\\")return`غلط سٹرنگ: پیٹرن ${t.pattern} سے میچ ہونا چاہیے`;return`غلط ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`غلط نمبر: ${n.divisor} کا مضاعف ہونا چاہیے`;case\\\"unrecognized_keys\\\":return`غیر تسلیم شدہ کی${n.keys.length>1?\\\"ز\\\":\\\"\\\"}: ${_(n.keys,\\\"، \\\")}`;case\\\"invalid_key\\\":return`${n.origin} میں غلط کی`;case\\\"invalid_union\\\":return\\\"غلط ان پٹ\\\";case\\\"invalid_element\\\":return`${n.origin} میں غلط ویلیو`;default:return\\\"غلط ان پٹ\\\"}}};var ac=O(()=>{j()});function rl(){return{localeError:XI()}}var XI=()=>{let r={string:{unit:\\\"belgi\\\",verb:\\\"bo‘lishi kerak\\\"},file:{unit:\\\"bayt\\\",verb:\\\"bo‘lishi kerak\\\"},array:{unit:\\\"element\\\",verb:\\\"bo‘lishi kerak\\\"},set:{unit:\\\"element\\\",verb:\\\"bo‘lishi kerak\\\"},map:{unit:\\\"yozuv\\\",verb:\\\"bo‘lishi kerak\\\"}};function i(n){return r[n]??null}let v={regex:\\\"kirish\\\",email:\\\"elektron pochta manzili\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO sana va vaqti\\\",date:\\\"ISO sana\\\",time:\\\"ISO vaqt\\\",duration:\\\"ISO davomiylik\\\",ipv4:\\\"IPv4 manzil\\\",ipv6:\\\"IPv6 manzil\\\",mac:\\\"MAC manzil\\\",cidrv4:\\\"IPv4 diapazon\\\",cidrv6:\\\"IPv6 diapazon\\\",base64:\\\"base64 kodlangan satr\\\",base64url:\\\"base64url kodlangan satr\\\",json_string:\\\"JSON satr\\\",e164:\\\"E.164 raqam\\\",jwt:\\\"JWT\\\",template_literal:\\\"kirish\\\"},u={nan:\\\"NaN\\\",number:\\\"raqam\\\",array:\\\"massiv\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Noto‘g‘ri kirish: kutilgan instanceof ${n.expected}, qabul qilingan ${$}`;return`Noto‘g‘ri kirish: kutilgan ${t}, qabul qilingan ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Noto‘g‘ri kirish: kutilgan ${D(n.values[0])}`;return`Noto‘g‘ri variant: quyidagilardan biri kutilgan ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Juda katta: kutilgan ${n.origin??\\\"qiymat\\\"} ${t}${n.maximum.toString()} ${o.unit} ${o.verb}`;return`Juda katta: kutilgan ${n.origin??\\\"qiymat\\\"} ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Juda kichik: kutilgan ${n.origin} ${t}${n.minimum.toString()} ${o.unit} ${o.verb}`;return`Juda kichik: kutilgan ${n.origin} ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Noto‘g‘ri satr: \\\"${t.prefix}\\\" bilan boshlanishi kerak`;if(t.format===\\\"ends_with\\\")return`Noto‘g‘ri satr: \\\"${t.suffix}\\\" bilan tugashi kerak`;if(t.format===\\\"includes\\\")return`Noto‘g‘ri satr: \\\"${t.includes}\\\" ni o‘z ichiga olishi kerak`;if(t.format===\\\"regex\\\")return`Noto‘g‘ri satr: ${t.pattern} shabloniga mos kelishi kerak`;return`Noto‘g‘ri ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Noto‘g‘ri raqam: ${n.divisor} ning karralisi bo‘lishi kerak`;case\\\"unrecognized_keys\\\":return`Noma’lum kalit${n.keys.length>1?\\\"lar\\\":\\\"\\\"}: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`${n.origin} dagi kalit noto‘g‘ri`;case\\\"invalid_union\\\":return\\\"Noto‘g‘ri kirish\\\";case\\\"invalid_element\\\":return`${n.origin} da noto‘g‘ri qiymat`;default:return\\\"Noto‘g‘ri kirish\\\"}}};var sc=O(()=>{j()});function nl(){return{localeError:RI()}}var RI=()=>{let r={string:{unit:\\\"ký tự\\\",verb:\\\"có\\\"},file:{unit:\\\"byte\\\",verb:\\\"có\\\"},array:{unit:\\\"phần tử\\\",verb:\\\"có\\\"},set:{unit:\\\"phần tử\\\",verb:\\\"có\\\"}};function i(n){return r[n]??null}let v={regex:\\\"đầu vào\\\",email:\\\"địa chỉ email\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ngày giờ ISO\\\",date:\\\"ngày ISO\\\",time:\\\"giờ ISO\\\",duration:\\\"khoảng thời gian ISO\\\",ipv4:\\\"địa chỉ IPv4\\\",ipv6:\\\"địa chỉ IPv6\\\",cidrv4:\\\"dải IPv4\\\",cidrv6:\\\"dải IPv6\\\",base64:\\\"chuỗi mã hóa base64\\\",base64url:\\\"chuỗi mã hóa base64url\\\",json_string:\\\"chuỗi JSON\\\",e164:\\\"số E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"đầu vào\\\"},u={nan:\\\"NaN\\\",number:\\\"số\\\",array:\\\"mảng\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Đầu vào không hợp lệ: mong đợi instanceof ${n.expected}, nhận được ${$}`;return`Đầu vào không hợp lệ: mong đợi ${t}, nhận được ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Đầu vào không hợp lệ: mong đợi ${D(n.values[0])}`;return`Tùy chọn không hợp lệ: mong đợi một trong các giá trị ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Quá lớn: mong đợi ${n.origin??\\\"giá trị\\\"} ${o.verb} ${t}${n.maximum.toString()} ${o.unit??\\\"phần tử\\\"}`;return`Quá lớn: mong đợi ${n.origin??\\\"giá trị\\\"} ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Quá nhỏ: mong đợi ${n.origin} ${o.verb} ${t}${n.minimum.toString()} ${o.unit}`;return`Quá nhỏ: mong đợi ${n.origin} ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Chuỗi không hợp lệ: phải bắt đầu bằng \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Chuỗi không hợp lệ: phải kết thúc bằng \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Chuỗi không hợp lệ: phải bao gồm \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Chuỗi không hợp lệ: phải khớp với mẫu ${t.pattern}`;return`${v[t.format]??n.format} không hợp lệ`}case\\\"not_multiple_of\\\":return`Số không hợp lệ: phải là bội số của ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Khóa không được nhận dạng: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Khóa không hợp lệ trong ${n.origin}`;case\\\"invalid_union\\\":return\\\"Đầu vào không hợp lệ\\\";case\\\"invalid_element\\\":return`Giá trị không hợp lệ trong ${n.origin}`;default:return\\\"Đầu vào không hợp lệ\\\"}}};var re=O(()=>{j()});function il(){return{localeError:ZI()}}var ZI=()=>{let r={string:{unit:\\\"字符\\\",verb:\\\"包含\\\"},file:{unit:\\\"字节\\\",verb:\\\"包含\\\"},array:{unit:\\\"项\\\",verb:\\\"包含\\\"},set:{unit:\\\"项\\\",verb:\\\"包含\\\"}};function i(n){return r[n]??null}let v={regex:\\\"输入\\\",email:\\\"电子邮件\\\",url:\\\"URL\\\",emoji:\\\"表情符号\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO日期时间\\\",date:\\\"ISO日期\\\",time:\\\"ISO时间\\\",duration:\\\"ISO时长\\\",ipv4:\\\"IPv4地址\\\",ipv6:\\\"IPv6地址\\\",cidrv4:\\\"IPv4网段\\\",cidrv6:\\\"IPv6网段\\\",base64:\\\"base64编码字符串\\\",base64url:\\\"base64url编码字符串\\\",json_string:\\\"JSON字符串\\\",e164:\\\"E.164号码\\\",jwt:\\\"JWT\\\",template_literal:\\\"输入\\\"},u={nan:\\\"NaN\\\",number:\\\"数字\\\",array:\\\"数组\\\",null:\\\"空值(null)\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`无效输入:期望 instanceof ${n.expected},实际接收 ${$}`;return`无效输入:期望 ${t},实际接收 ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`无效输入:期望 ${D(n.values[0])}`;return`无效选项:期望以下之一 ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`数值过大:期望 ${n.origin??\\\"值\\\"} ${t}${n.maximum.toString()} ${o.unit??\\\"个元素\\\"}`;return`数值过大:期望 ${n.origin??\\\"值\\\"} ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`数值过小:期望 ${n.origin} ${t}${n.minimum.toString()} ${o.unit}`;return`数值过小:期望 ${n.origin} ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`无效字符串:必须以 \\\"${t.prefix}\\\" 开头`;if(t.format===\\\"ends_with\\\")return`无效字符串:必须以 \\\"${t.suffix}\\\" 结尾`;if(t.format===\\\"includes\\\")return`无效字符串:必须包含 \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`无效字符串:必须满足正则表达式 ${t.pattern}`;return`无效${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`无效数字:必须是 ${n.divisor} 的倍数`;case\\\"unrecognized_keys\\\":return`出现未知的键(key): ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`${n.origin} 中的键(key)无效`;case\\\"invalid_union\\\":return\\\"无效输入\\\";case\\\"invalid_element\\\":return`${n.origin} 中包含无效值(value)`;default:return\\\"无效输入\\\"}}};var ne=O(()=>{j()});function tl(){return{localeError:QI()}}var QI=()=>{let r={string:{unit:\\\"字元\\\",verb:\\\"擁有\\\"},file:{unit:\\\"位元組\\\",verb:\\\"擁有\\\"},array:{unit:\\\"項目\\\",verb:\\\"擁有\\\"},set:{unit:\\\"項目\\\",verb:\\\"擁有\\\"}};function i(n){return r[n]??null}let v={regex:\\\"輸入\\\",email:\\\"郵件地址\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"ISO 日期時間\\\",date:\\\"ISO 日期\\\",time:\\\"ISO 時間\\\",duration:\\\"ISO 期間\\\",ipv4:\\\"IPv4 位址\\\",ipv6:\\\"IPv6 位址\\\",cidrv4:\\\"IPv4 範圍\\\",cidrv6:\\\"IPv6 範圍\\\",base64:\\\"base64 編碼字串\\\",base64url:\\\"base64url 編碼字串\\\",json_string:\\\"JSON 字串\\\",e164:\\\"E.164 數值\\\",jwt:\\\"JWT\\\",template_literal:\\\"輸入\\\"},u={nan:\\\"NaN\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`無效的輸入值:預期為 instanceof ${n.expected},但收到 ${$}`;return`無效的輸入值:預期為 ${t},但收到 ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`無效的輸入值:預期為 ${D(n.values[0])}`;return`無效的選項:預期為以下其中之一 ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`數值過大:預期 ${n.origin??\\\"值\\\"} 應為 ${t}${n.maximum.toString()} ${o.unit??\\\"個元素\\\"}`;return`數值過大:預期 ${n.origin??\\\"值\\\"} 應為 ${t}${n.maximum.toString()}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`數值過小:預期 ${n.origin} 應為 ${t}${n.minimum.toString()} ${o.unit}`;return`數值過小:預期 ${n.origin} 應為 ${t}${n.minimum.toString()}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`無效的字串:必須以 \\\"${t.prefix}\\\" 開頭`;if(t.format===\\\"ends_with\\\")return`無效的字串:必須以 \\\"${t.suffix}\\\" 結尾`;if(t.format===\\\"includes\\\")return`無效的字串:必須包含 \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`無效的字串:必須符合格式 ${t.pattern}`;return`無效的 ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`無效的數字:必須為 ${n.divisor} 的倍數`;case\\\"unrecognized_keys\\\":return`無法識別的鍵值${n.keys.length>1?\\\"們\\\":\\\"\\\"}:${_(n.keys,\\\"、\\\")}`;case\\\"invalid_key\\\":return`${n.origin} 中有無效的鍵值`;case\\\"invalid_union\\\":return\\\"無效的輸入值\\\";case\\\"invalid_element\\\":return`${n.origin} 中有無效的值`;default:return\\\"無效的輸入值\\\"}}};var ie=O(()=>{j()});function vl(){return{localeError:CI()}}var CI=()=>{let r={string:{unit:\\\"àmi\\\",verb:\\\"ní\\\"},file:{unit:\\\"bytes\\\",verb:\\\"ní\\\"},array:{unit:\\\"nkan\\\",verb:\\\"ní\\\"},set:{unit:\\\"nkan\\\",verb:\\\"ní\\\"}};function i(n){return r[n]??null}let v={regex:\\\"ẹ̀rọ ìbáwọlé\\\",email:\\\"àdírẹ́sì ìmẹ́lì\\\",url:\\\"URL\\\",emoji:\\\"emoji\\\",uuid:\\\"UUID\\\",uuidv4:\\\"UUIDv4\\\",uuidv6:\\\"UUIDv6\\\",nanoid:\\\"nanoid\\\",guid:\\\"GUID\\\",cuid:\\\"cuid\\\",cuid2:\\\"cuid2\\\",ulid:\\\"ULID\\\",xid:\\\"XID\\\",ksuid:\\\"KSUID\\\",datetime:\\\"àkókò ISO\\\",date:\\\"ọjọ́ ISO\\\",time:\\\"àkókò ISO\\\",duration:\\\"àkókò tó pé ISO\\\",ipv4:\\\"àdírẹ́sì IPv4\\\",ipv6:\\\"àdírẹ́sì IPv6\\\",cidrv4:\\\"àgbègbè IPv4\\\",cidrv6:\\\"àgbègbè IPv6\\\",base64:\\\"ọ̀rọ̀ tí a kọ́ ní base64\\\",base64url:\\\"ọ̀rọ̀ base64url\\\",json_string:\\\"ọ̀rọ̀ JSON\\\",e164:\\\"nọ́mbà E.164\\\",jwt:\\\"JWT\\\",template_literal:\\\"ẹ̀rọ ìbáwọlé\\\"},u={nan:\\\"NaN\\\",number:\\\"nọ́mbà\\\",array:\\\"akopọ\\\"};return(n)=>{switch(n.code){case\\\"invalid_type\\\":{let t=u[n.expected]??n.expected,o=k(n.input),$=u[o]??o;if(/^[A-Z]/.test(n.expected))return`Ìbáwọlé aṣìṣe: a ní láti fi instanceof ${n.expected}, àmọ̀ a rí ${$}`;return`Ìbáwọlé aṣìṣe: a ní láti fi ${t}, àmọ̀ a rí ${$}`}case\\\"invalid_value\\\":if(n.values.length===1)return`Ìbáwọlé aṣìṣe: a ní láti fi ${D(n.values[0])}`;return`Àṣàyàn aṣìṣe: yan ọ̀kan lára ${_(n.values,\\\"|\\\")}`;case\\\"too_big\\\":{let t=n.inclusive?\\\"<=\\\":\\\"<\\\",o=i(n.origin);if(o)return`Tó pọ̀ jù: a ní láti jẹ́ pé ${n.origin??\\\"iye\\\"} ${o.verb} ${t}${n.maximum} ${o.unit}`;return`Tó pọ̀ jù: a ní láti jẹ́ ${t}${n.maximum}`}case\\\"too_small\\\":{let t=n.inclusive?\\\">=\\\":\\\">\\\",o=i(n.origin);if(o)return`Kéré ju: a ní láti jẹ́ pé ${n.origin} ${o.verb} ${t}${n.minimum} ${o.unit}`;return`Kéré ju: a ní láti jẹ́ ${t}${n.minimum}`}case\\\"invalid_format\\\":{let t=n;if(t.format===\\\"starts_with\\\")return`Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bẹ̀rẹ̀ pẹ̀lú \\\"${t.prefix}\\\"`;if(t.format===\\\"ends_with\\\")return`Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ parí pẹ̀lú \\\"${t.suffix}\\\"`;if(t.format===\\\"includes\\\")return`Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ ní \\\"${t.includes}\\\"`;if(t.format===\\\"regex\\\")return`Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bá àpẹẹrẹ mu ${t.pattern}`;return`Aṣìṣe: ${v[t.format]??n.format}`}case\\\"not_multiple_of\\\":return`Nọ́mbà aṣìṣe: gbọ́dọ̀ jẹ́ èyà pípín ti ${n.divisor}`;case\\\"unrecognized_keys\\\":return`Bọtìnì àìmọ̀: ${_(n.keys,\\\", \\\")}`;case\\\"invalid_key\\\":return`Bọtìnì aṣìṣe nínú ${n.origin}`;case\\\"invalid_union\\\":return\\\"Ìbáwọlé aṣìṣe\\\";case\\\"invalid_element\\\":return`Iye aṣìṣe nínú ${n.origin}`;default:return\\\"Ìbáwọlé aṣìṣe\\\"}}};var te=O(()=>{j()});var Kn={};jr(Kn,{zhTW:()=>tl,zhCN:()=>il,yo:()=>vl,vi:()=>nl,uz:()=>rl,ur:()=>sg,uk:()=>ki,ua:()=>ag,tr:()=>hg,th:()=>yg,ta:()=>dg,sv:()=>fg,sl:()=>Cg,ru:()=>Qg,ro:()=>Zg,pt:()=>Rg,ps:()=>qg,pl:()=>Xg,ota:()=>Yg,no:()=>Mg,nl:()=>xg,ms:()=>Tg,mk:()=>Eg,lt:()=>Fg,ko:()=>Hg,km:()=>Di,kh:()=>Bg,ka:()=>Gg,ja:()=>Vg,it:()=>Wg,is:()=>Jg,id:()=>Ag,hy:()=>Lg,hu:()=>jg,hr:()=>Pg,he:()=>Sg,frCA:()=>Og,fr:()=>zg,fi:()=>mg,fa:()=>Ng,es:()=>kg,eo:()=>wg,en:()=>Ui,el:()=>Ug,de:()=>Ig,da:()=>_g,cs:()=>eg,ca:()=>cg,bg:()=>bg,be:()=>lg,az:()=>gg,ar:()=>$g});var ul=O(()=>{uc();oc();gc();lc();bc();cc();ec();_c();Ic();Dg();Uc();Dc();wc();kc();Nc();mc();zc();Oc();Sc();jc();Lc();Ac();Jc();Wc();Vc();Gc();Kg();Kc();Hc();Fc();Ec();Tc();xc();Mc();Yc();qc();Xc();Rc();Qc();Cc();fc();dc();yc();hc();pc();pg();ac();sc();re();ne();ie();te()});class ol{constructor(){this._map=new WeakMap,this._idmap=new Map}add(r,...i){let v=i[0];if(this._map.set(r,v),v&&typeof v===\\\"object\\\"&&\\\"id\\\"in v)this._idmap.set(v.id,r);return this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(r){let i=this._map.get(r);if(i&&typeof i===\\\"object\\\"&&\\\"id\\\"in i)this._idmap.delete(i.id);return this._map.delete(r),this}get(r){let i=r._zod.parent;if(i){let v={...this.get(i)??{}};delete v.id;let u={...v,...this._map.get(r)};return Object.keys(u).length?u:void 0}return this._map.get(r)}has(r){return this._map.has(r)}}function Ni(){return new ol}var ve,pt,at,y;var mi=O(()=>{pt=Symbol(\\\"ZodOutput\\\"),at=Symbol(\\\"ZodInput\\\");(ve=globalThis).__zod_globalRegistry??(ve.__zod_globalRegistry=Ni());y=globalThis.__zod_globalRegistry});function $l(r,i){return new r({type:\\\"string\\\",...z(i)})}function gl(r,i){return new r({type:\\\"string\\\",coerce:!0,...z(i)})}function st(r,i){return new r({type:\\\"string\\\",format:\\\"email\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function zi(r,i){return new r({type:\\\"string\\\",format:\\\"guid\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function rv(r,i){return new r({type:\\\"string\\\",format:\\\"uuid\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function nv(r,i){return new r({type:\\\"string\\\",format:\\\"uuid\\\",check:\\\"string_format\\\",abort:!1,version:\\\"v4\\\",...z(i)})}function iv(r,i){return new r({type:\\\"string\\\",format:\\\"uuid\\\",check:\\\"string_format\\\",abort:!1,version:\\\"v6\\\",...z(i)})}function tv(r,i){return new r({type:\\\"string\\\",format:\\\"uuid\\\",check:\\\"string_format\\\",abort:!1,version:\\\"v7\\\",...z(i)})}function Oi(r,i){return new r({type:\\\"string\\\",format:\\\"url\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function vv(r,i){return new r({type:\\\"string\\\",format:\\\"emoji\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function uv(r,i){return new r({type:\\\"string\\\",format:\\\"nanoid\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function ov(r,i){return new r({type:\\\"string\\\",format:\\\"cuid\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function $v(r,i){return new r({type:\\\"string\\\",format:\\\"cuid2\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function gv(r,i){return new r({type:\\\"string\\\",format:\\\"ulid\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function lv(r,i){return new r({type:\\\"string\\\",format:\\\"xid\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function bv(r,i){return new r({type:\\\"string\\\",format:\\\"ksuid\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function cv(r,i){return new r({type:\\\"string\\\",format:\\\"ipv4\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function ev(r,i){return new r({type:\\\"string\\\",format:\\\"ipv6\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function ll(r,i){return new r({type:\\\"string\\\",format:\\\"mac\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function _v(r,i){return new r({type:\\\"string\\\",format:\\\"cidrv4\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function Iv(r,i){return new r({type:\\\"string\\\",format:\\\"cidrv6\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function Uv(r,i){return new r({type:\\\"string\\\",format:\\\"base64\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function Dv(r,i){return new r({type:\\\"string\\\",format:\\\"base64url\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function wv(r,i){return new r({type:\\\"string\\\",format:\\\"e164\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function kv(r,i){return new r({type:\\\"string\\\",format:\\\"jwt\\\",check:\\\"string_format\\\",abort:!1,...z(i)})}function bl(r,i){return new r({type:\\\"string\\\",format:\\\"datetime\\\",check:\\\"string_format\\\",offset:!1,local:!1,precision:null,...z(i)})}function cl(r,i){return new r({type:\\\"string\\\",format:\\\"date\\\",check:\\\"string_format\\\",...z(i)})}function el(r,i){return new r({type:\\\"string\\\",format:\\\"time\\\",check:\\\"string_format\\\",precision:null,...z(i)})}function _l(r,i){return new r({type:\\\"string\\\",format:\\\"duration\\\",check:\\\"string_format\\\",...z(i)})}function Il(r,i){return new r({type:\\\"number\\\",checks:[],...z(i)})}function Ul(r,i){return new r({type:\\\"number\\\",coerce:!0,checks:[],...z(i)})}function Dl(r,i){return new r({type:\\\"number\\\",check:\\\"number_format\\\",abort:!1,format:\\\"safeint\\\",...z(i)})}function wl(r,i){return new r({type:\\\"number\\\",check:\\\"number_format\\\",abort:!1,format:\\\"float32\\\",...z(i)})}function kl(r,i){return new r({type:\\\"number\\\",check:\\\"number_format\\\",abort:!1,format:\\\"float64\\\",...z(i)})}function Nl(r,i){return new r({type:\\\"number\\\",check:\\\"number_format\\\",abort:!1,format:\\\"int32\\\",...z(i)})}function ml(r,i){return new r({type:\\\"number\\\",check:\\\"number_format\\\",abort:!1,format:\\\"uint32\\\",...z(i)})}function zl(r,i){return new r({type:\\\"boolean\\\",...z(i)})}function Ol(r,i){return new r({type:\\\"boolean\\\",coerce:!0,...z(i)})}function Sl(r,i){return new r({type:\\\"bigint\\\",...z(i)})}function Pl(r,i){return new r({type:\\\"bigint\\\",coerce:!0,...z(i)})}function jl(r,i){return new r({type:\\\"bigint\\\",check:\\\"bigint_format\\\",abort:!1,format:\\\"int64\\\",...z(i)})}function Ll(r,i){return new r({type:\\\"bigint\\\",check:\\\"bigint_format\\\",abort:!1,format:\\\"uint64\\\",...z(i)})}function Al(r,i){return new r({type:\\\"symbol\\\",...z(i)})}function Jl(r,i){return new r({type:\\\"undefined\\\",...z(i)})}function Wl(r,i){return new r({type:\\\"null\\\",...z(i)})}function Vl(r){return new r({type:\\\"any\\\"})}function Gl(r){return new r({type:\\\"unknown\\\"})}function Kl(r,i){return new r({type:\\\"never\\\",...z(i)})}function Bl(r,i){return new r({type:\\\"void\\\",...z(i)})}function Hl(r,i){return new r({type:\\\"date\\\",...z(i)})}function Fl(r,i){return new r({type:\\\"date\\\",coerce:!0,...z(i)})}function El(r,i){return new r({type:\\\"nan\\\",...z(i)})}function zr(r,i){return new xt({check:\\\"less_than\\\",...z(i),value:r,inclusive:!1})}function _r(r,i){return new xt({check:\\\"less_than\\\",...z(i),value:r,inclusive:!0})}function Or(r,i){return new Mt({check:\\\"greater_than\\\",...z(i),value:r,inclusive:!1})}function vr(r,i){return new Mt({check:\\\"greater_than\\\",...z(i),value:r,inclusive:!0})}function Si(r){return Or(0,r)}function Pi(r){return zr(0,r)}function ji(r){return _r(0,r)}function Li(r){return vr(0,r)}function Vr(r,i){return new Wo({check:\\\"multiple_of\\\",...z(i),value:r})}function Gr(r,i){return new Ko({check:\\\"max_size\\\",...z(i),maximum:r})}function Sr(r,i){return new Bo({check:\\\"min_size\\\",...z(i),minimum:r})}function xr(r,i){return new Ho({check:\\\"size_equals\\\",...z(i),size:r})}function Mr(r,i){return new Fo({check:\\\"max_length\\\",...z(i),maximum:r})}function Ar(r,i){return new Eo({check:\\\"min_length\\\",...z(i),minimum:r})}function Yr(r,i){return new To({check:\\\"length_equals\\\",...z(i),length:r})}function sr(r,i){return new xo({check:\\\"string_format\\\",format:\\\"regex\\\",...z(i),pattern:r})}function rn(r){return new Mo({check:\\\"string_format\\\",format:\\\"lowercase\\\",...z(r)})}function nn(r){return new Yo({check:\\\"string_format\\\",format:\\\"uppercase\\\",...z(r)})}function tn(r,i){return new qo({check:\\\"string_format\\\",format:\\\"includes\\\",...z(i),includes:r})}function vn(r,i){return new Xo({check:\\\"string_format\\\",format:\\\"starts_with\\\",...z(i),prefix:r})}function un(r,i){return new Ro({check:\\\"string_format\\\",format:\\\"ends_with\\\",...z(i),suffix:r})}function Ai(r,i,v){return new Zo({check:\\\"property\\\",property:r,schema:i,...z(v)})}function on(r,i){return new Qo({check:\\\"mime_type\\\",mime:r,...z(i)})}function kr(r){return new Co({check:\\\"overwrite\\\",tx:r})}function $n(r){return kr((i)=>i.normalize(r))}function gn(){return kr((r)=>r.trim())}function ln(){return kr((r)=>r.toLowerCase())}function bn(){return kr((r)=>r.toUpperCase())}function cn(){return kr((r)=>Zu(r))}function Tl(r,i,v){return new r({type:\\\"array\\\",element:i,...z(v)})}function dI(r,i,v){return new r({type:\\\"union\\\",options:i,...z(v)})}function yI(r,i,v){return new r({type:\\\"union\\\",options:i,inclusive:!1,...z(v)})}function hI(r,i,v,u){return new r({type:\\\"union\\\",options:v,discriminator:i,...z(u)})}function pI(r,i,v){return new r({type:\\\"intersection\\\",left:i,right:v})}function aI(r,i,v,u){let n=v instanceof J;return new r({type:\\\"tuple\\\",items:i,rest:n?v:null,...z(n?u:v)})}function sI(r,i,v,u){return new r({type:\\\"record\\\",keyType:i,valueType:v,...z(u)})}function rU(r,i,v,u){return new r({type:\\\"map\\\",keyType:i,valueType:v,...z(u)})}function nU(r,i,v){return new r({type:\\\"set\\\",valueType:i,...z(v)})}function iU(r,i,v){let u=Array.isArray(i)?Object.fromEntries(i.map((n)=>[n,n])):i;return new r({type:\\\"enum\\\",entries:u,...z(v)})}function tU(r,i,v){return new r({type:\\\"enum\\\",entries:i,...z(v)})}function vU(r,i,v){return new r({type:\\\"literal\\\",values:Array.isArray(i)?i:[i],...z(v)})}function xl(r,i){return new r({type:\\\"file\\\",...z(i)})}function uU(r,i){return new r({type:\\\"transform\\\",transform:i})}function oU(r,i){return new r({type:\\\"optional\\\",innerType:i})}function $U(r,i){return new r({type:\\\"nullable\\\",innerType:i})}function gU(r,i,v){return new r({type:\\\"default\\\",innerType:i,get defaultValue(){return typeof v===\\\"function\\\"?v():Cu(v)}})}function lU(r,i,v){return new r({type:\\\"nonoptional\\\",innerType:i,...z(v)})}function bU(r,i){return new r({type:\\\"success\\\",innerType:i})}function cU(r,i,v){return new r({type:\\\"catch\\\",innerType:i,catchValue:typeof v===\\\"function\\\"?v:()=>v})}function eU(r,i,v){return new r({type:\\\"pipe\\\",in:i,out:v})}function _U(r,i){return new r({type:\\\"readonly\\\",innerType:i})}function IU(r,i,v){return new r({type:\\\"template_literal\\\",parts:i,...z(v)})}function UU(r,i){return new r({type:\\\"lazy\\\",getter:i})}function DU(r,i){return new r({type:\\\"promise\\\",innerType:i})}function Ml(r,i,v){let u=z(v);return u.abort??(u.abort=!0),new r({type:\\\"custom\\\",check:\\\"custom\\\",fn:i,...u})}function Yl(r,i,v){return new r({type:\\\"custom\\\",check:\\\"custom\\\",fn:i,...z(v)})}function ql(r,i){let v=ue((u)=>{return u.addIssue=(n)=>{if(typeof n===\\\"string\\\")u.issues.push(On(n,u.value,v._zod.def));else{let t=n;if(t.fatal)t.continue=!1;t.code??(t.code=\\\"custom\\\"),t.input??(t.input=u.value),t.inst??(t.inst=v),t.continue??(t.continue=!v._zod.def.abort),u.issues.push(On(t))}},r(u.value,u)},i);return v}function ue(r,i){let v=new X({check:\\\"custom\\\",...z(i)});return v._zod.check=r,v}function Xl(r){let i=new X({check:\\\"describe\\\"});return i._zod.onattach=[(v)=>{let u=y.get(v)??{};y.add(v,{...u,description:r})}],i._zod.check=()=>{},i}function Rl(r){let i=new X({check:\\\"meta\\\"});return i._zod.onattach=[(v)=>{let u=y.get(v)??{};y.add(v,{...u,...r})}],i._zod.check=()=>{},i}function Zl(r,i){let v=z(i),u=v.truthy??[\\\"true\\\",\\\"1\\\",\\\"yes\\\",\\\"on\\\",\\\"y\\\",\\\"enabled\\\"],n=v.falsy??[\\\"false\\\",\\\"0\\\",\\\"no\\\",\\\"off\\\",\\\"n\\\",\\\"disabled\\\"];if(v.case!==\\\"sensitive\\\")u=u.map((m)=>typeof m===\\\"string\\\"?m.toLowerCase():m),n=n.map((m)=>typeof m===\\\"string\\\"?m.toLowerCase():m);let t=new Set(u),o=new Set(n),$=r.Codec??Ii,b=r.Boolean??ei,c=new(r.String??ar)({type:\\\"string\\\",error:v.error}),U=new b({type:\\\"boolean\\\",error:v.error}),w=new $({type:\\\"pipe\\\",in:c,out:U,transform:(m,A)=>{let ir=m;if(v.case!==\\\"sensitive\\\")ir=ir.toLowerCase();if(t.has(ir))return!0;else if(o.has(ir))return!1;else return A.issues.push({code:\\\"invalid_value\\\",expected:\\\"stringbool\\\",values:[...t,...o],input:A.value,inst:w,continue:!1}),{}},reverseTransform:(m,A)=>{if(m===!0)return u[0]||\\\"true\\\";else return n[0]||\\\"false\\\"},error:v.error});return w}function Bn(r,i,v,u={}){let n=z(u),t={...z(u),check:\\\"string_format\\\",type:\\\"string\\\",format:i,fn:typeof v===\\\"function\\\"?v:($)=>v.test($),...n};if(v instanceof RegExp)t.pattern=v;return new r(t)}var Nv;var oe=O(()=>{Yt();mi();og();j();Nv={Any:null,Minute:-1,Second:0,Millisecond:3,Microsecond:6}});function qr(r){let i=r?.target??\\\"draft-2020-12\\\";if(i===\\\"draft-4\\\")i=\\\"draft-04\\\";if(i===\\\"draft-7\\\")i=\\\"draft-07\\\";return{processors:r.processors??{},metadataRegistry:r?.metadata??y,target:i,unrepresentable:r?.unrepresentable??\\\"throw\\\",override:r?.override??(()=>{}),io:r?.io??\\\"output\\\",counter:0,seen:new Map,cycles:r?.cycles??\\\"ref\\\",reused:r?.reused??\\\"inline\\\",external:r?.external??void 0}}function H(r,i,v={path:[],schemaPath:[]}){var u;let n=r._zod.def,t=i.seen.get(r);if(t){if(t.count++,v.schemaPath.includes(r))t.cycle=v.path;return t.schema}let o={schema:{},count:1,cycle:void 0,path:v.path};i.seen.set(r,o);let $=r._zod.toJSONSchema?.();if($)o.schema=$;else{let c={...v,schemaPath:[...v.schemaPath,r],path:v.path};if(r._zod.processJSONSchema)r._zod.processJSONSchema(i,o.schema,c);else{let w=o.schema,m=i.processors[n.type];if(!m)throw Error(`[toJSONSchema]: Non-representable type encountered: ${n.type}`);m(r,i,w,c)}let U=r._zod.parent;if(U){if(!o.ref)o.ref=U;H(U,i,c),i.seen.get(U).isParent=!0}}let b=i.metadataRegistry.get(r);if(b)Object.assign(o.schema,b);if(i.io===\\\"input\\\"&&gr(r))delete o.schema.examples,delete o.schema.default;if(i.io===\\\"input\\\"&&\\\"_prefault\\\"in o.schema)(u=o.schema).default??(u.default=o.schema._prefault);return delete o.schema._prefault,i.seen.get(r).schema}function Xr(r,i){let v=r.seen.get(i);if(!v)throw Error(\\\"Unprocessed schema. This is a bug in Zod.\\\");let u=new Map;for(let o of r.seen.entries()){let $=r.metadataRegistry.get(o[0])?.id;if($){let b=u.get($);if(b&&b!==o[0])throw Error(`Duplicate schema id \\\"${$}\\\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);u.set($,o[0])}}let n=(o)=>{let $=r.target===\\\"draft-2020-12\\\"?\\\"$defs\\\":\\\"definitions\\\";if(r.external){let U=r.external.registry.get(o[0])?.id,w=r.external.uri??((A)=>A);if(U)return{ref:w(U)};let m=o[1].defId??o[1].schema.id??`schema${r.counter++}`;return o[1].defId=m,{defId:m,ref:`${w(\\\"__shared\\\")}#/${$}/${m}`}}if(o[1]===v)return{ref:\\\"#\\\"};let g=`${\\\"#\\\"}/${$}/`,c=o[1].schema.id??`__schema${r.counter++}`;return{defId:c,ref:g+c}},t=(o)=>{if(o[1].schema.$ref)return;let $=o[1],{ref:b,defId:g}=n(o);if($.def={...$.schema},g)$.defId=g;let c=$.schema;for(let U in c)delete c[U];c.$ref=b};if(r.cycles===\\\"throw\\\")for(let o of r.seen.entries()){let $=o[1];if($.cycle)throw Error(`Cycle detected: #/${$.cycle?.join(\\\"/\\\")}/<root>\\n\\nSet the \\\\`cycles\\\\` parameter to \\\\`\\\"ref\\\"\\\\` to resolve cyclical schemas with defs.`)}for(let o of r.seen.entries()){let $=o[1];if(i===o[0]){t(o);continue}if(r.external){let g=r.external.registry.get(o[0])?.id;if(i!==o[0]&&g){t(o);continue}}if(r.metadataRegistry.get(o[0])?.id){t(o);continue}if($.cycle){t(o);continue}if($.count>1){if(r.reused===\\\"ref\\\"){t(o);continue}}}}function Rr(r,i){let v=r.seen.get(i);if(!v)throw Error(\\\"Unprocessed schema. This is a bug in Zod.\\\");let u=($)=>{let b=r.seen.get($);if(b.ref===null)return;let g=b.def??b.schema,c={...g},U=b.ref;if(b.ref=null,U){u(U);let m=r.seen.get(U),A=m.schema;if(A.$ref&&(r.target===\\\"draft-07\\\"||r.target===\\\"draft-04\\\"||r.target===\\\"openapi-3.0\\\"))g.allOf=g.allOf??[],g.allOf.push(A);else Object.assign(g,A);if(Object.assign(g,c),$._zod.parent===U)for(let R in g){if(R===\\\"$ref\\\"||R===\\\"allOf\\\")continue;if(!(R in c))delete g[R]}if(A.$ref&&m.def)for(let R in g){if(R===\\\"$ref\\\"||R===\\\"allOf\\\")continue;if(R in m.def&&JSON.stringify(g[R])===JSON.stringify(m.def[R]))delete g[R]}}let w=$._zod.parent;if(w&&w!==U){u(w);let m=r.seen.get(w);if(m?.schema.$ref){if(g.$ref=m.schema.$ref,m.def)for(let A in g){if(A===\\\"$ref\\\"||A===\\\"allOf\\\")continue;if(A in m.def&&JSON.stringify(g[A])===JSON.stringify(m.def[A]))delete g[A]}}}r.override({zodSchema:$,jsonSchema:g,path:b.path??[]})};for(let $ of[...r.seen.entries()].reverse())u($[0]);let n={};if(r.target===\\\"draft-2020-12\\\")n.$schema=\\\"https://json-schema.org/draft/2020-12/schema\\\";else if(r.target===\\\"draft-07\\\")n.$schema=\\\"http://json-schema.org/draft-07/schema#\\\";else if(r.target===\\\"draft-04\\\")n.$schema=\\\"http://json-schema.org/draft-04/schema#\\\";else if(r.target===\\\"openapi-3.0\\\");if(r.external?.uri){let $=r.external.registry.get(i)?.id;if(!$)throw Error(\\\"Schema is missing an `id` property\\\");n.$id=r.external.uri($)}Object.assign(n,v.def??v.schema);let t=r.metadataRegistry.get(i)?.id;if(t!==void 0&&n.id===t)delete n.id;let o=r.external?.defs??{};for(let $ of r.seen.entries()){let b=$[1];if(b.def&&b.defId){if(b.def.id===b.defId)delete b.def.id;o[b.defId]=b.def}}if(r.external);else if(Object.keys(o).length>0)if(r.target===\\\"draft-2020-12\\\")n.$defs=o;else n.definitions=o;try{let $=JSON.parse(JSON.stringify(n));return Object.defineProperty($,\\\"~standard\\\",{value:{...i[\\\"~standard\\\"],jsonSchema:{input:Hn(i,\\\"input\\\",r.processors),output:Hn(i,\\\"output\\\",r.processors)}},enumerable:!1,writable:!1}),$}catch($){throw Error(\\\"Error converting schema to JSON.\\\")}}function gr(r,i){let v=i??{seen:new Set};if(v.seen.has(r))return!1;v.seen.add(r);let u=r._zod.def;if(u.type===\\\"transform\\\")return!0;if(u.type===\\\"array\\\")return gr(u.element,v);if(u.type===\\\"set\\\")return gr(u.valueType,v);if(u.type===\\\"lazy\\\")return gr(u.getter(),v);if(u.type===\\\"promise\\\"||u.type===\\\"optional\\\"||u.type===\\\"nonoptional\\\"||u.type===\\\"nullable\\\"||u.type===\\\"readonly\\\"||u.type===\\\"default\\\"||u.type===\\\"prefault\\\")return gr(u.innerType,v);if(u.type===\\\"intersection\\\")return gr(u.left,v)||gr(u.right,v);if(u.type===\\\"record\\\"||u.type===\\\"map\\\")return gr(u.keyType,v)||gr(u.valueType,v);if(u.type===\\\"pipe\\\"){if(r._zod.traits.has(\\\"$ZodCodec\\\"))return!0;return gr(u.in,v)||gr(u.out,v)}if(u.type===\\\"object\\\"){for(let n in u.shape)if(gr(u.shape[n],v))return!0;return!1}if(u.type===\\\"union\\\"){for(let n of u.options)if(gr(n,v))return!0;return!1}if(u.type===\\\"tuple\\\"){for(let n of u.items)if(gr(n,v))return!0;if(u.rest&&gr(u.rest,v))return!0;return!1}return!1}var Ql=(r,i={})=>(v)=>{let u=qr({...v,processors:i});return H(r,u),Xr(u,r),Rr(u,r)},Hn=(r,i,v={})=>(u)=>{let{libraryOptions:n,target:t}=u??{},o=qr({...n??{},target:t,io:i,processors:v});return H(r,o),Xr(o,r),Rr(o,r)};var Ji=O(()=>{mi()});function Wi(r,i){if(\\\"_idmap\\\"in r){let u=r,n=qr({...i,processors:mv}),t={};for(let b of u._idmap.entries()){let[g,c]=b;H(c,n)}let o={},$={registry:u,uri:i?.uri,defs:t};n.external=$;for(let b of u._idmap.entries()){let[g,c]=b;Xr(n,c),o[g]=Rr(n,c)}if(Object.keys(t).length>0){let b=n.target===\\\"draft-2020-12\\\"?\\\"$defs\\\":\\\"definitions\\\";o.__shared={[b]:t}}return{schemas:o}}let v=qr({...i,processors:mv});return H(r,v),Xr(v,r),Rr(v,r)}var wU,Cl=(r,i,v,u)=>{let n=v;n.type=\\\"string\\\";let{minimum:t,maximum:o,format:$,patterns:b,contentEncoding:g}=r._zod.bag;if(typeof t===\\\"number\\\")n.minLength=t;if(typeof o===\\\"number\\\")n.maxLength=o;if($){if(n.format=wU[$]??$,n.format===\\\"\\\")delete n.format;if($===\\\"time\\\")delete n.format}if(g)n.contentEncoding=g;if(b&&b.size>0){let c=[...b];if(c.length===1)n.pattern=c[0].source;else if(c.length>1)n.allOf=[...c.map((U)=>({...i.target===\\\"draft-07\\\"||i.target===\\\"draft-04\\\"||i.target===\\\"openapi-3.0\\\"?{type:\\\"string\\\"}:{},pattern:U.source}))]}},fl=(r,i,v,u)=>{let n=v,{minimum:t,maximum:o,format:$,multipleOf:b,exclusiveMaximum:g,exclusiveMinimum:c}=r._zod.bag;if(typeof $===\\\"string\\\"&&$.includes(\\\"int\\\"))n.type=\\\"integer\\\";else n.type=\\\"number\\\";let U=typeof c===\\\"number\\\"&&c>=(t??Number.NEGATIVE_INFINITY),w=typeof g===\\\"number\\\"&&g<=(o??Number.POSITIVE_INFINITY),m=i.target===\\\"draft-04\\\"||i.target===\\\"openapi-3.0\\\";if(U)if(m)n.minimum=c,n.exclusiveMinimum=!0;else n.exclusiveMinimum=c;else if(typeof t===\\\"number\\\")n.minimum=t;if(w)if(m)n.maximum=g,n.exclusiveMaximum=!0;else n.exclusiveMaximum=g;else if(typeof o===\\\"number\\\")n.maximum=o;if(typeof b===\\\"number\\\")n.multipleOf=b},dl=(r,i,v,u)=>{v.type=\\\"boolean\\\"},yl=(r,i,v,u)=>{if(i.unrepresentable===\\\"throw\\\")throw Error(\\\"BigInt cannot be represented in JSON Schema\\\")},hl=(r,i,v,u)=>{if(i.unrepresentable===\\\"throw\\\")throw Error(\\\"Symbols cannot be represented in JSON Schema\\\")},pl=(r,i,v,u)=>{if(i.target===\\\"openapi-3.0\\\")v.type=\\\"string\\\",v.nullable=!0,v.enum=[null];else v.type=\\\"null\\\"},al=(r,i,v,u)=>{if(i.unrepresentable===\\\"throw\\\")throw Error(\\\"Undefined cannot be represented in JSON Schema\\\")},sl=(r,i,v,u)=>{if(i.unrepresentable===\\\"throw\\\")throw Error(\\\"Void cannot be represented in JSON Schema\\\")},rb=(r,i,v,u)=>{v.not={}},nb=(r,i,v,u)=>{},ib=(r,i,v,u)=>{},tb=(r,i,v,u)=>{if(i.unrepresentable===\\\"throw\\\")throw Error(\\\"Date cannot be represented in JSON Schema\\\")},vb=(r,i,v,u)=>{let n=r._zod.def,t=ri(n.entries);if(t.every((o)=>typeof o===\\\"number\\\"))v.type=\\\"number\\\";if(t.every((o)=>typeof o===\\\"string\\\"))v.type=\\\"string\\\";v.enum=t},ub=(r,i,v,u)=>{let n=r._zod.def,t=[];for(let o of n.values)if(o===void 0){if(i.unrepresentable===\\\"throw\\\")throw Error(\\\"Literal `undefined` cannot be represented in JSON Schema\\\")}else if(typeof o===\\\"bigint\\\")if(i.unrepresentable===\\\"throw\\\")throw Error(\\\"BigInt literals cannot be represented in JSON Schema\\\");else t.push(Number(o));else t.push(o);if(t.length===0);else if(t.length===1){let o=t[0];if(v.type=o===null?\\\"null\\\":typeof o,i.target===\\\"draft-04\\\"||i.target===\\\"openapi-3.0\\\")v.enum=[o];else v.const=o}else{if(t.every((o)=>typeof o===\\\"number\\\"))v.type=\\\"number\\\";if(t.every((o)=>typeof o===\\\"string\\\"))v.type=\\\"string\\\";if(t.every((o)=>typeof o===\\\"boolean\\\"))v.type=\\\"boolean\\\";if(t.every((o)=>o===null))v.type=\\\"null\\\";v.enum=t}},ob=(r,i,v,u)=>{if(i.unrepresentable===\\\"throw\\\")throw Error(\\\"NaN cannot be represented in JSON Schema\\\")},$b=(r,i,v,u)=>{let n=v,t=r._zod.pattern;if(!t)throw Error(\\\"Pattern not found in template literal\\\");n.type=\\\"string\\\",n.pattern=t.source},gb=(r,i,v,u)=>{let n=v,t={type:\\\"string\\\",format:\\\"binary\\\",contentEncoding:\\\"binary\\\"},{minimum:o,maximum:$,mime:b}=r._zod.bag;if(o!==void 0)t.minLength=o;if($!==void 0)t.maxLength=$;if(b)if(b.length===1)t.contentMediaType=b[0],Object.assign(n,t);else Object.assign(n,t),n.anyOf=b.map((g)=>({contentMediaType:g}));else Object.assign(n,t)},lb=(r,i,v,u)=>{v.type=\\\"boolean\\\"},bb=(r,i,v,u)=>{if(i.unrepresentable===\\\"throw\\\")throw Error(\\\"Custom types cannot be represented in JSON Schema\\\")},cb=(r,i,v,u)=>{if(i.unrepresentable===\\\"throw\\\")throw Error(\\\"Function types cannot be represented in JSON Schema\\\")},eb=(r,i,v,u)=>{if(i.unrepresentable===\\\"throw\\\")throw Error(\\\"Transforms cannot be represented in JSON Schema\\\")},_b=(r,i,v,u)=>{if(i.unrepresentable===\\\"throw\\\")throw Error(\\\"Map cannot be represented in JSON Schema\\\")},Ib=(r,i,v,u)=>{if(i.unrepresentable===\\\"throw\\\")throw Error(\\\"Set cannot be represented in JSON Schema\\\")},Ub=(r,i,v,u)=>{let n=v,t=r._zod.def,{minimum:o,maximum:$}=r._zod.bag;if(typeof o===\\\"number\\\")n.minItems=o;if(typeof $===\\\"number\\\")n.maxItems=$;n.type=\\\"array\\\",n.items=H(t.element,i,{...u,path:[...u.path,\\\"items\\\"]})},Db=(r,i,v,u)=>{let n=v,t=r._zod.def;n.type=\\\"object\\\",n.properties={};let o=t.shape;for(let g in o)n.properties[g]=H(o[g],i,{...u,path:[...u.path,\\\"properties\\\",g]});let $=new Set(Object.keys(o)),b=new Set([...$].filter((g)=>{let c=t.shape[g]._zod;if(i.io===\\\"input\\\")return c.optin===void 0;else return c.optout===void 0}));if(b.size>0)n.required=Array.from(b);if(t.catchall?._zod.def.type===\\\"never\\\")n.additionalProperties=!1;else if(!t.catchall){if(i.io===\\\"output\\\")n.additionalProperties=!1}else if(t.catchall)n.additionalProperties=H(t.catchall,i,{...u,path:[...u.path,\\\"additionalProperties\\\"]})},zv=(r,i,v,u)=>{let n=r._zod.def,t=n.inclusive===!1,o=n.options.map(($,b)=>H($,i,{...u,path:[...u.path,t?\\\"oneOf\\\":\\\"anyOf\\\",b]}));if(t)v.oneOf=o;else v.anyOf=o},wb=(r,i,v,u)=>{let n=r._zod.def,t=H(n.left,i,{...u,path:[...u.path,\\\"allOf\\\",0]}),o=H(n.right,i,{...u,path:[...u.path,\\\"allOf\\\",1]}),$=(g)=>(\\\"allOf\\\"in g)&&Object.keys(g).length===1,b=[...$(t)?t.allOf:[t],...$(o)?o.allOf:[o]];v.allOf=b},kb=(r,i,v,u)=>{let n=v,t=r._zod.def;n.type=\\\"array\\\";let o=i.target===\\\"draft-2020-12\\\"?\\\"prefixItems\\\":\\\"items\\\",$=i.target===\\\"draft-2020-12\\\"?\\\"items\\\":i.target===\\\"openapi-3.0\\\"?\\\"items\\\":\\\"additionalItems\\\",b=t.items.map((w,m)=>H(w,i,{...u,path:[...u.path,o,m]})),g=t.rest?H(t.rest,i,{...u,path:[...u.path,$,...i.target===\\\"openapi-3.0\\\"?[t.items.length]:[]]}):null;if(i.target===\\\"draft-2020-12\\\"){if(n.prefixItems=b,g)n.items=g}else if(i.target===\\\"openapi-3.0\\\"){if(n.items={anyOf:b},g)n.items.anyOf.push(g);if(n.minItems=b.length,!g)n.maxItems=b.length}else if(n.items=b,g)n.additionalItems=g;let{minimum:c,maximum:U}=r._zod.bag;if(typeof c===\\\"number\\\")n.minItems=c;if(typeof U===\\\"number\\\")n.maxItems=U},Nb=(r,i,v,u)=>{let n=v,t=r._zod.def;n.type=\\\"object\\\";let o=t.keyType,b=o._zod.bag?.patterns;if(t.mode===\\\"loose\\\"&&b&&b.size>0){let c=H(t.valueType,i,{...u,path:[...u.path,\\\"patternProperties\\\",\\\"*\\\"]});n.patternProperties={};for(let U of b)n.patternProperties[U.source]=c}else{if(i.target===\\\"draft-07\\\"||i.target===\\\"draft-2020-12\\\")n.propertyNames=H(t.keyType,i,{...u,path:[...u.path,\\\"propertyNames\\\"]});n.additionalProperties=H(t.valueType,i,{...u,path:[...u.path,\\\"additionalProperties\\\"]})}let g=o._zod.values;if(g){let c=[...g].filter((U)=>typeof U===\\\"string\\\"||typeof U===\\\"number\\\");if(c.length>0)n.required=c}},mb=(r,i,v,u)=>{let n=r._zod.def,t=H(n.innerType,i,u),o=i.seen.get(r);if(i.target===\\\"openapi-3.0\\\")o.ref=n.innerType,v.nullable=!0;else v.anyOf=[t,{type:\\\"null\\\"}]},zb=(r,i,v,u)=>{let n=r._zod.def;H(n.innerType,i,u);let t=i.seen.get(r);t.ref=n.innerType},Ob=(r,i,v,u)=>{let n=r._zod.def;H(n.innerType,i,u);let t=i.seen.get(r);t.ref=n.innerType,v.default=JSON.parse(JSON.stringify(n.defaultValue))},Sb=(r,i,v,u)=>{let n=r._zod.def;H(n.innerType,i,u);let t=i.seen.get(r);if(t.ref=n.innerType,i.io===\\\"input\\\")v._prefault=JSON.parse(JSON.stringify(n.defaultValue))},Pb=(r,i,v,u)=>{let n=r._zod.def;H(n.innerType,i,u);let t=i.seen.get(r);t.ref=n.innerType;let o;try{o=n.catchValue(void 0)}catch{throw Error(\\\"Dynamic catch values are not supported in JSON Schema\\\")}v.default=o},jb=(r,i,v,u)=>{let n=r._zod.def,t=n.in._zod.traits.has(\\\"$ZodTransform\\\"),o=i.io===\\\"input\\\"?t?n.out:n.in:n.out;H(o,i,u);let $=i.seen.get(r);$.ref=o},Lb=(r,i,v,u)=>{let n=r._zod.def;H(n.innerType,i,u);let t=i.seen.get(r);t.ref=n.innerType,v.readOnly=!0},Ab=(r,i,v,u)=>{let n=r._zod.def;H(n.innerType,i,u);let t=i.seen.get(r);t.ref=n.innerType},Ov=(r,i,v,u)=>{let n=r._zod.def;H(n.innerType,i,u);let t=i.seen.get(r);t.ref=n.innerType},Jb=(r,i,v,u)=>{let n=r._zod.innerType;H(n,i,u);let t=i.seen.get(r);t.ref=n},mv;var Vi=O(()=>{Ji();j();wU={guid:\\\"uuid\\\",url:\\\"uri\\\",datetime:\\\"date-time\\\",json_string:\\\"json-string\\\",regex:\\\"\\\"},mv={string:Cl,number:fl,boolean:dl,bigint:yl,symbol:hl,null:pl,undefined:al,void:sl,never:rb,any:nb,unknown:ib,date:tb,enum:vb,literal:ub,nan:ob,template_literal:$b,file:gb,success:lb,custom:bb,function:cb,transform:eb,map:_b,set:Ib,array:Ub,object:Db,union:zv,intersection:wb,tuple:kb,record:Nb,nullable:mb,nonoptional:zb,default:Ob,prefault:Sb,catch:Pb,pipe:jb,readonly:Lb,promise:Ab,optional:Ov,lazy:Jb}});class Wb{get metadataRegistry(){return this.ctx.metadataRegistry}get target(){return this.ctx.target}get unrepresentable(){return this.ctx.unrepresentable}get override(){return this.ctx.override}get io(){return this.ctx.io}get counter(){return this.ctx.counter}set counter(r){this.ctx.counter=r}get seen(){return this.ctx.seen}constructor(r){let i=r?.target??\\\"draft-2020-12\\\";if(i===\\\"draft-4\\\")i=\\\"draft-04\\\";if(i===\\\"draft-7\\\")i=\\\"draft-07\\\";this.ctx=qr({processors:mv,target:i,...r?.metadata&&{metadata:r.metadata},...r?.unrepresentable&&{unrepresentable:r.unrepresentable},...r?.override&&{override:r.override},...r?.io&&{io:r.io}})}process(r,i={path:[],schemaPath:[]}){return H(r,this.ctx,i)}emit(r,i){if(i){if(i.cycles)this.ctx.cycles=i.cycles;if(i.reused)this.ctx.reused=i.reused;if(i.external)this.ctx.external=i.external}Xr(this.ctx,r);let v=Rr(this.ctx,r),{\\\"~standard\\\":u,...n}=v;return n}}var $e=O(()=>{Vi();Ji()});var ge={};var le=()=>{};var Jr={};jr(Jr,{version:()=>fo,util:()=>N,treeifyError:()=>Lt,toJSONSchema:()=>Wi,toDotPath:()=>j6,safeParseAsync:()=>gi,safeParse:()=>Jn,safeEncodeAsync:()=>K6,safeEncode:()=>V6,safeDecodeAsync:()=>B6,safeDecode:()=>G6,registry:()=>Ni,regexes:()=>er,process:()=>H,prettifyError:()=>At,parseAsync:()=>$i,parse:()=>oi,meta:()=>Rl,locales:()=>Kn,isValidJWT:()=>nc,isValidBase64URL:()=>rc,isValidBase64:()=>w$,initializeContext:()=>qr,globalRegistry:()=>y,globalConfig:()=>fr,formatError:()=>Pn,flattenError:()=>Sn,finalize:()=>Rr,extractDefs:()=>Xr,encodeAsync:()=>J6,encode:()=>L6,describe:()=>Xl,decodeAsync:()=>W6,decode:()=>A6,createToJSONSchemaMethod:()=>Ql,createStandardJSONSchemaMethod:()=>Hn,config:()=>Z,clone:()=>tr,_xor:()=>yI,_xid:()=>lv,_void:()=>Bl,_uuidv7:()=>tv,_uuidv6:()=>iv,_uuidv4:()=>nv,_uuid:()=>rv,_url:()=>Oi,_uppercase:()=>nn,_unknown:()=>Gl,_union:()=>dI,_undefined:()=>Jl,_ulid:()=>gv,_uint64:()=>Ll,_uint32:()=>ml,_tuple:()=>aI,_trim:()=>gn,_transform:()=>uU,_toUpperCase:()=>bn,_toLowerCase:()=>ln,_templateLiteral:()=>IU,_symbol:()=>Al,_superRefine:()=>ql,_success:()=>bU,_stringbool:()=>Zl,_stringFormat:()=>Bn,_string:()=>$l,_startsWith:()=>vn,_slugify:()=>cn,_size:()=>xr,_set:()=>nU,_safeParseAsync:()=>Wn,_safeParse:()=>An,_safeEncodeAsync:()=>Ht,_safeEncode:()=>Kt,_safeDecodeAsync:()=>Ft,_safeDecode:()=>Bt,_regex:()=>sr,_refine:()=>Yl,_record:()=>sI,_readonly:()=>_U,_property:()=>Ai,_promise:()=>DU,_positive:()=>Si,_pipe:()=>eU,_parseAsync:()=>Ln,_parse:()=>jn,_overwrite:()=>kr,_optional:()=>oU,_number:()=>Il,_nullable:()=>$U,_null:()=>Wl,_normalize:()=>$n,_nonpositive:()=>ji,_nonoptional:()=>lU,_nonnegative:()=>Li,_never:()=>Kl,_negative:()=>Pi,_nativeEnum:()=>tU,_nanoid:()=>uv,_nan:()=>El,_multipleOf:()=>Vr,_minSize:()=>Sr,_minLength:()=>Ar,_min:()=>vr,_mime:()=>on,_maxSize:()=>Gr,_maxLength:()=>Mr,_max:()=>_r,_map:()=>rU,_mac:()=>ll,_lte:()=>_r,_lt:()=>zr,_lowercase:()=>rn,_literal:()=>vU,_length:()=>Yr,_lazy:()=>UU,_ksuid:()=>bv,_jwt:()=>kv,_isoTime:()=>el,_isoDuration:()=>_l,_isoDateTime:()=>bl,_isoDate:()=>cl,_ipv6:()=>ev,_ipv4:()=>cv,_intersection:()=>pI,_int64:()=>jl,_int32:()=>Nl,_int:()=>Dl,_includes:()=>tn,_guid:()=>zi,_gte:()=>vr,_gt:()=>Or,_float64:()=>kl,_float32:()=>wl,_file:()=>xl,_enum:()=>iU,_endsWith:()=>un,_encodeAsync:()=>Vt,_encode:()=>Jt,_emoji:()=>vv,_email:()=>st,_e164:()=>wv,_discriminatedUnion:()=>hI,_default:()=>gU,_decodeAsync:()=>Gt,_decode:()=>Wt,_date:()=>Hl,_custom:()=>Ml,_cuid2:()=>$v,_cuid:()=>ov,_coercedString:()=>gl,_coercedNumber:()=>Ul,_coercedDate:()=>Fl,_coercedBoolean:()=>Ol,_coercedBigint:()=>Pl,_cidrv6:()=>Iv,_cidrv4:()=>_v,_check:()=>ue,_catch:()=>cU,_boolean:()=>zl,_bigint:()=>Sl,_base64url:()=>Dv,_base64:()=>Uv,_array:()=>Tl,_any:()=>Vl,TimePrecision:()=>Nv,NEVER:()=>Ot,JSONSchemaGenerator:()=>Wb,JSONSchema:()=>ge,Doc:()=>qt,$output:()=>pt,$input:()=>at,$constructor:()=>e,$brand:()=>St,$ZodXor:()=>F$,$ZodXID:()=>o$,$ZodVoid:()=>G$,$ZodUnknown:()=>W$,$ZodUnion:()=>_i,$ZodUndefined:()=>L$,$ZodUUID:()=>ao,$ZodURL:()=>r$,$ZodULID:()=>u$,$ZodType:()=>J,$ZodTuple:()=>dt,$ZodTransform:()=>Z$,$ZodTemplateLiteral:()=>ng,$ZodSymbol:()=>j$,$ZodSuccess:()=>h$,$ZodStringFormat:()=>Y,$ZodString:()=>ar,$ZodSet:()=>Y$,$ZodRegistry:()=>ol,$ZodRecord:()=>x$,$ZodRealError:()=>cr,$ZodReadonly:()=>rg,$ZodPromise:()=>tg,$ZodPreprocess:()=>s$,$ZodPrefault:()=>d$,$ZodPipe:()=>ht,$ZodOptional:()=>yt,$ZodObjectJIT:()=>H$,$ZodObject:()=>vc,$ZodNumberFormat:()=>S$,$ZodNumber:()=>Ct,$ZodNullable:()=>C$,$ZodNull:()=>A$,$ZodNonOptional:()=>y$,$ZodNever:()=>V$,$ZodNanoID:()=>i$,$ZodNaN:()=>a$,$ZodMap:()=>M$,$ZodMAC:()=>I$,$ZodLiteral:()=>X$,$ZodLazy:()=>vg,$ZodKSUID:()=>$$,$ZodJWT:()=>z$,$ZodIntersection:()=>T$,$ZodISOTime:()=>b$,$ZodISODuration:()=>c$,$ZodISODateTime:()=>g$,$ZodISODate:()=>l$,$ZodIPv6:()=>_$,$ZodIPv4:()=>e$,$ZodGUID:()=>po,$ZodFunction:()=>ig,$ZodFile:()=>R$,$ZodExactOptional:()=>Q$,$ZodError:()=>ui,$ZodEnum:()=>q$,$ZodEncodeError:()=>dr,$ZodEmoji:()=>n$,$ZodEmail:()=>so,$ZodE164:()=>m$,$ZodDiscriminatedUnion:()=>E$,$ZodDefault:()=>f$,$ZodDate:()=>K$,$ZodCustomStringFormat:()=>O$,$ZodCustom:()=>ug,$ZodCodec:()=>Ii,$ZodCheckUpperCase:()=>Yo,$ZodCheckStringFormat:()=>Vn,$ZodCheckStartsWith:()=>Xo,$ZodCheckSizeEquals:()=>Ho,$ZodCheckRegex:()=>xo,$ZodCheckProperty:()=>Zo,$ZodCheckOverwrite:()=>Co,$ZodCheckNumberFormat:()=>Vo,$ZodCheckMultipleOf:()=>Wo,$ZodCheckMinSize:()=>Bo,$ZodCheckMinLength:()=>Eo,$ZodCheckMimeType:()=>Qo,$ZodCheckMaxSize:()=>Ko,$ZodCheckMaxLength:()=>Fo,$ZodCheckLowerCase:()=>Mo,$ZodCheckLessThan:()=>xt,$ZodCheckLengthEquals:()=>To,$ZodCheckIncludes:()=>qo,$ZodCheckGreaterThan:()=>Mt,$ZodCheckEndsWith:()=>Ro,$ZodCheckBigIntFormat:()=>Go,$ZodCheck:()=>X,$ZodCatch:()=>p$,$ZodCUID2:()=>v$,$ZodCUID:()=>t$,$ZodCIDRv6:()=>D$,$ZodCIDRv4:()=>U$,$ZodBoolean:()=>ei,$ZodBigIntFormat:()=>P$,$ZodBigInt:()=>ft,$ZodBase64URL:()=>N$,$ZodBase64:()=>k$,$ZodAsyncError:()=>Lr,$ZodArray:()=>B$,$ZodAny:()=>J$});var Ir=O(()=>{j();Tt();ul();Vi();$e();le();yr();su();au();og();Yt();yo();mi();oe();Ji()});var jv={};jr(jv,{uppercase:()=>nn,trim:()=>gn,toUpperCase:()=>bn,toLowerCase:()=>ln,startsWith:()=>vn,slugify:()=>cn,size:()=>xr,regex:()=>sr,property:()=>Ai,positive:()=>Si,overwrite:()=>kr,normalize:()=>$n,nonpositive:()=>ji,nonnegative:()=>Li,negative:()=>Pi,multipleOf:()=>Vr,minSize:()=>Sr,minLength:()=>Ar,mime:()=>on,maxSize:()=>Gr,maxLength:()=>Mr,lte:()=>_r,lt:()=>zr,lowercase:()=>rn,length:()=>Yr,includes:()=>tn,gte:()=>vr,gt:()=>Or,endsWith:()=>un});var Lv=O(()=>{Ir()});var Kr={};jr(Kr,{time:()=>Kb,duration:()=>Bb,datetime:()=>Vb,date:()=>Gb,ZodISOTime:()=>Bi,ZodISODuration:()=>Hi,ZodISODateTime:()=>Gi,ZodISODate:()=>Ki});function Vb(r){return bl(Gi,r)}function Gb(r){return cl(Ki,r)}function Kb(r){return el(Bi,r)}function Bb(r){return _l(Hi,r)}var Gi,Ki,Bi,Hi;var Fi=O(()=>{Ir();Ti();Gi=e(\\\"ZodISODateTime\\\",(r,i)=>{g$.init(r,i),T.init(r,i)});Ki=e(\\\"ZodISODate\\\",(r,i)=>{l$.init(r,i),T.init(r,i)});Bi=e(\\\"ZodISOTime\\\",(r,i)=>{b$.init(r,i),T.init(r,i)});Hi=e(\\\"ZodISODuration\\\",(r,i)=>{c$.init(r,i),T.init(r,i)})});var ee=(r,i)=>{ui.init(r,i),r.name=\\\"ZodError\\\",Object.defineProperties(r,{format:{value:(v)=>Pn(r,v)},flatten:{value:(v)=>Sn(r,v)},addIssue:{value:(v)=>{r.issues.push(v),r.message=JSON.stringify(r.issues,mn,2)}},addIssues:{value:(v)=>{r.issues.push(...v),r.message=JSON.stringify(r.issues,mn,2)}},isEmpty:{get(){return r.issues.length===0}}})},_e,lr;var Hb=O(()=>{Ir();Ir();j();_e=e(\\\"ZodError\\\",ee),lr=e(\\\"ZodError\\\",ee,{Parent:Error})});var Av,Jv,Wv,Vv,Gv,Kv,Bv,Hv,Fv,Ev,Tv,xv;var Fb=O(()=>{Ir();Hb();Av=jn(lr),Jv=Ln(lr),Wv=An(lr),Vv=Wn(lr),Gv=Jt(lr),Kv=Wt(lr),Bv=Vt(lr),Hv=Gt(lr),Fv=Kt(lr),Ev=Bt(lr),Tv=Ht(lr),xv=Ft(lr)});var Ei={};jr(Ei,{xor:()=>P4,xid:()=>yb,void:()=>m4,uuidv7:()=>qb,uuidv6:()=>Yb,uuidv4:()=>Mb,uuid:()=>xb,url:()=>Xb,unknown:()=>x,union:()=>M,undefined:()=>k4,ulid:()=>db,uint64:()=>D4,uint32:()=>_4,tuple:()=>av,transform:()=>ot,templateLiteral:()=>E4,symbol:()=>w4,superRefine:()=>ju,success:()=>K4,stringbool:()=>R4,stringFormat:()=>o4,string:()=>I,strictObject:()=>S4,set:()=>J4,refine:()=>Pu,record:()=>F,readonly:()=>ku,promise:()=>T4,preprocess:()=>Cn,prefault:()=>bu,pipe:()=>Mi,partialRecord:()=>j4,optional:()=>q,object:()=>P,number:()=>K,nullish:()=>G4,nullable:()=>En,null:()=>xn,nonoptional:()=>cu,never:()=>ut,nativeEnum:()=>W4,nanoid:()=>Qb,nan:()=>B4,meta:()=>q4,map:()=>A4,mac:()=>ab,looseRecord:()=>L4,looseObject:()=>h,literal:()=>L,lazy:()=>zu,ksuid:()=>hb,keyof:()=>O4,jwt:()=>u4,json:()=>Z4,ipv6:()=>sb,ipv4:()=>pb,invertCodec:()=>F4,intersection:()=>Nn,int64:()=>U4,int32:()=>e4,int:()=>xi,instanceof:()=>X4,httpUrl:()=>Rb,hostname:()=>$4,hex:()=>g4,hash:()=>l4,guid:()=>Tb,function:()=>x4,float64:()=>c4,float32:()=>b4,file:()=>V4,exactOptional:()=>uu,enum:()=>p,emoji:()=>Zb,email:()=>Eb,e164:()=>v4,discriminatedUnion:()=>Xn,describe:()=>Y4,date:()=>z4,custom:()=>lt,cuid2:()=>fb,cuid:()=>Cb,codec:()=>H4,cidrv6:()=>n4,cidrv4:()=>r4,check:()=>M4,catch:()=>Iu,boolean:()=>C,bigint:()=>I4,base64url:()=>t4,base64:()=>i4,array:()=>V,any:()=>N4,_function:()=>x4,_default:()=>gu,_ZodString:()=>qi,ZodXor:()=>dv,ZodXID:()=>di,ZodVoid:()=>Cv,ZodUnknown:()=>Zv,ZodUnion:()=>qn,ZodUndefined:()=>qv,ZodUUID:()=>Pr,ZodURL:()=>Tn,ZodULID:()=>fi,ZodType:()=>W,ZodTuple:()=>pv,ZodTransform:()=>tu,ZodTemplateLiteral:()=>Nu,ZodSymbol:()=>Yv,ZodSuccess:()=>eu,ZodStringFormat:()=>T,ZodString:()=>In,ZodSet:()=>ru,ZodRecord:()=>en,ZodReadonly:()=>wu,ZodPromise:()=>Ou,ZodPreprocess:()=>Du,ZodPrefault:()=>lu,ZodPipe:()=>Rn,ZodOptional:()=>$t,ZodObject:()=>Yn,ZodNumberFormat:()=>Zr,ZodNumber:()=>Dn,ZodNullable:()=>ou,ZodNull:()=>Xv,ZodNonOptional:()=>gt,ZodNever:()=>Qv,ZodNanoID:()=>Zi,ZodNaN:()=>Uu,ZodMap:()=>sv,ZodMAC:()=>Mv,ZodLiteral:()=>nu,ZodLazy:()=>mu,ZodKSUID:()=>yi,ZodJWT:()=>tt,ZodIntersection:()=>hv,ZodIPv6:()=>pi,ZodIPv4:()=>hi,ZodGUID:()=>Fn,ZodFunction:()=>Su,ZodFile:()=>iu,ZodExactOptional:()=>vu,ZodEnum:()=>_n,ZodEmoji:()=>Ri,ZodEmail:()=>Xi,ZodE164:()=>it,ZodDiscriminatedUnion:()=>yv,ZodDefault:()=>$u,ZodDate:()=>Mn,ZodCustomStringFormat:()=>Un,ZodCustom:()=>Qn,ZodCodec:()=>Zn,ZodCatch:()=>_u,ZodCUID2:()=>Ci,ZodCUID:()=>Qi,ZodCIDRv6:()=>si,ZodCIDRv4:()=>ai,ZodBoolean:()=>wn,ZodBigIntFormat:()=>vt,ZodBigInt:()=>kn,ZodBase64URL:()=>nt,ZodBase64:()=>rt,ZodArray:()=>fv,ZodAny:()=>Rv});function Yi(r,i,v){let u=Object.getPrototypeOf(r),n=Ie.get(u);if(!n)n=new Set,Ie.set(u,n);if(n.has(i))return;n.add(i);for(let t in v){let o=v[t];Object.defineProperty(u,t,{configurable:!0,enumerable:!1,get(){let $=o.bind(this);return Object.defineProperty(this,t,{configurable:!0,writable:!0,enumerable:!0,value:$}),$},set($){Object.defineProperty(this,t,{configurable:!0,writable:!0,enumerable:!0,value:$})}})}}function I(r){return $l(In,r)}function Eb(r){return st(Xi,r)}function Tb(r){return zi(Fn,r)}function xb(r){return rv(Pr,r)}function Mb(r){return nv(Pr,r)}function Yb(r){return iv(Pr,r)}function qb(r){return tv(Pr,r)}function Xb(r){return Oi(Tn,r)}function Rb(r){return Oi(Tn,{protocol:er.httpProtocol,hostname:er.domain,...N.normalizeParams(r)})}function Zb(r){return vv(Ri,r)}function Qb(r){return uv(Zi,r)}function Cb(r){return ov(Qi,r)}function fb(r){return $v(Ci,r)}function db(r){return gv(fi,r)}function yb(r){return lv(di,r)}function hb(r){return bv(yi,r)}function pb(r){return cv(hi,r)}function ab(r){return ll(Mv,r)}function sb(r){return ev(pi,r)}function r4(r){return _v(ai,r)}function n4(r){return Iv(si,r)}function i4(r){return Uv(rt,r)}function t4(r){return Dv(nt,r)}function v4(r){return wv(it,r)}function u4(r){return kv(tt,r)}function o4(r,i,v={}){return Bn(Un,r,i,v)}function $4(r){return Bn(Un,\\\"hostname\\\",er.hostname,r)}function g4(r){return Bn(Un,\\\"hex\\\",er.hex,r)}function l4(r,i){let v=i?.enc??\\\"hex\\\",u=`${r}_${v}`,n=er[u];if(!n)throw Error(`Unrecognized hash format: ${u}`);return Bn(Un,u,n,i)}function K(r){return Il(Dn,r)}function xi(r){return Dl(Zr,r)}function b4(r){return wl(Zr,r)}function c4(r){return kl(Zr,r)}function e4(r){return Nl(Zr,r)}function _4(r){return ml(Zr,r)}function C(r){return zl(wn,r)}function I4(r){return Sl(kn,r)}function U4(r){return jl(vt,r)}function D4(r){return Ll(vt,r)}function w4(r){return Al(Yv,r)}function k4(r){return Jl(qv,r)}function xn(r){return Wl(Xv,r)}function N4(){return Vl(Rv)}function x(){return Gl(Zv)}function ut(r){return Kl(Qv,r)}function m4(r){return Bl(Cv,r)}function z4(r){return Hl(Mn,r)}function V(r,i){return Tl(fv,r,i)}function O4(r){let i=r._zod.def.shape;return p(Object.keys(i))}function P(r,i){let v={type:\\\"object\\\",shape:r??{},...N.normalizeParams(i)};return new Yn(v)}function S4(r,i){return new Yn({type:\\\"object\\\",shape:r,catchall:ut(),...N.normalizeParams(i)})}function h(r,i){return new Yn({type:\\\"object\\\",shape:r,catchall:x(),...N.normalizeParams(i)})}function M(r,i){return new qn({type:\\\"union\\\",options:r,...N.normalizeParams(i)})}function P4(r,i){return new dv({type:\\\"union\\\",options:r,inclusive:!1,...N.normalizeParams(i)})}function Xn(r,i,v){return new yv({type:\\\"union\\\",options:i,discriminator:r,...N.normalizeParams(v)})}function Nn(r,i){return new hv({type:\\\"intersection\\\",left:r,right:i})}function av(r,i,v){let u=i instanceof J,n=u?v:i;return new pv({type:\\\"tuple\\\",items:r,rest:u?i:null,...N.normalizeParams(n)})}function F(r,i,v){if(!i||!i._zod)return new en({type:\\\"record\\\",keyType:I(),valueType:r,...N.normalizeParams(i)});return new en({type:\\\"record\\\",keyType:r,valueType:i,...N.normalizeParams(v)})}function j4(r,i,v){let u=tr(r);return u._zod.values=void 0,new en({type:\\\"record\\\",keyType:u,valueType:i,...N.normalizeParams(v)})}function L4(r,i,v){return new en({type:\\\"record\\\",keyType:r,valueType:i,mode:\\\"loose\\\",...N.normalizeParams(v)})}function A4(r,i,v){return new sv({type:\\\"map\\\",keyType:r,valueType:i,...N.normalizeParams(v)})}function J4(r,i){return new ru({type:\\\"set\\\",valueType:r,...N.normalizeParams(i)})}function p(r,i){let v=Array.isArray(r)?Object.fromEntries(r.map((u)=>[u,u])):r;return new _n({type:\\\"enum\\\",entries:v,...N.normalizeParams(i)})}function W4(r,i){return new _n({type:\\\"enum\\\",entries:r,...N.normalizeParams(i)})}function L(r,i){return new nu({type:\\\"literal\\\",values:Array.isArray(r)?r:[r],...N.normalizeParams(i)})}function V4(r){return xl(iu,r)}function ot(r){return new tu({type:\\\"transform\\\",transform:r})}function q(r){return new $t({type:\\\"optional\\\",innerType:r})}function uu(r){return new vu({type:\\\"optional\\\",innerType:r})}function En(r){return new ou({type:\\\"nullable\\\",innerType:r})}function G4(r){return q(En(r))}function gu(r,i){return new $u({type:\\\"default\\\",innerType:r,get defaultValue(){return typeof i===\\\"function\\\"?i():N.shallowClone(i)}})}function bu(r,i){return new lu({type:\\\"prefault\\\",innerType:r,get defaultValue(){return typeof i===\\\"function\\\"?i():N.shallowClone(i)}})}function cu(r,i){return new gt({type:\\\"nonoptional\\\",innerType:r,...N.normalizeParams(i)})}function K4(r){return new eu({type:\\\"success\\\",innerType:r})}function Iu(r,i){return new _u({type:\\\"catch\\\",innerType:r,catchValue:typeof i===\\\"function\\\"?i:()=>i})}function B4(r){return El(Uu,r)}function Mi(r,i){return new Rn({type:\\\"pipe\\\",in:r,out:i})}function H4(r,i,v){return new Zn({type:\\\"pipe\\\",in:r,out:i,transform:v.decode,reverseTransform:v.encode})}function F4(r){let i=r._zod.def;return new Zn({type:\\\"pipe\\\",in:i.out,out:i.in,transform:i.reverseTransform,reverseTransform:i.transform})}function ku(r){return new wu({type:\\\"readonly\\\",innerType:r})}function E4(r,i){return new Nu({type:\\\"template_literal\\\",parts:r,...N.normalizeParams(i)})}function zu(r){return new mu({type:\\\"lazy\\\",getter:r})}function T4(r){return new Ou({type:\\\"promise\\\",innerType:r})}function x4(r){return new Su({type:\\\"function\\\",input:Array.isArray(r?.input)?av(r?.input):r?.input??V(x()),output:r?.output??x()})}function M4(r){let i=new X({check:\\\"custom\\\"});return i._zod.check=r,i}function lt(r,i){return Ml(Qn,r??(()=>!0),i)}function Pu(r,i={}){return Yl(Qn,r,i)}function ju(r,i){return ql(r,i)}function X4(r,i={}){let v=new Qn({type:\\\"custom\\\",check:\\\"custom\\\",fn:(u)=>u instanceof r,abort:!0,...N.normalizeParams(i)});return v._zod.bag.Class=r,v._zod.check=(u)=>{if(!(u.value instanceof r))u.issues.push({code:\\\"invalid_type\\\",expected:r.name,input:u.value,inst:v,path:[...v._zod.def.path??[]]})},v}function Z4(r){let i=zu(()=>{return M([I(r),K(),C(),xn(),V(i),F(I(),i)])});return i}function Cn(r,i){return new Du({type:\\\"pipe\\\",in:ot(r),out:i})}var Ie,W,qi,In,T,Xi,Fn,Pr,Tn,Ri,Zi,Qi,Ci,fi,di,yi,hi,Mv,pi,ai,si,rt,nt,it,tt,Un,Dn,Zr,wn,kn,vt,Yv,qv,Xv,Rv,Zv,Qv,Cv,Mn,fv,Yn,qn,dv,yv,hv,pv,en,sv,ru,_n,nu,iu,tu,$t,vu,ou,$u,lu,gt,eu,_u,Uu,Rn,Zn,Du,wu,Nu,mu,Ou,Su,Qn,Y4,q4,R4=(...r)=>Zl({Codec:Zn,Boolean:wn,String:In},...r);var Ti=O(()=>{Ir();Ir();Vi();Ji();Lv();Fi();Fb();Ie=new WeakMap;W=e(\\\"ZodType\\\",(r,i)=>{return J.init(r,i),Object.assign(r[\\\"~standard\\\"],{jsonSchema:{input:Hn(r,\\\"input\\\"),output:Hn(r,\\\"output\\\")}}),r.toJSONSchema=Ql(r,{}),r.def=i,r.type=i.type,Object.defineProperty(r,\\\"_def\\\",{value:i}),r.parse=(v,u)=>Av(r,v,u,{callee:r.parse}),r.safeParse=(v,u)=>Wv(r,v,u),r.parseAsync=async(v,u)=>Jv(r,v,u,{callee:r.parseAsync}),r.safeParseAsync=async(v,u)=>Vv(r,v,u),r.spa=r.safeParseAsync,r.encode=(v,u)=>Gv(r,v,u),r.decode=(v,u)=>Kv(r,v,u),r.encodeAsync=async(v,u)=>Bv(r,v,u),r.decodeAsync=async(v,u)=>Hv(r,v,u),r.safeEncode=(v,u)=>Fv(r,v,u),r.safeDecode=(v,u)=>Ev(r,v,u),r.safeEncodeAsync=async(v,u)=>Tv(r,v,u),r.safeDecodeAsync=async(v,u)=>xv(r,v,u),Yi(r,\\\"ZodType\\\",{check(...v){let u=this.def;return this.clone(N.mergeDefs(u,{checks:[...u.checks??[],...v.map((n)=>typeof n===\\\"function\\\"?{_zod:{check:n,def:{check:\\\"custom\\\"},onattach:[]}}:n)]}),{parent:!0})},with(...v){return this.check(...v)},clone(v,u){return tr(this,v,u)},brand(){return this},register(v,u){return v.add(this,u),this},refine(v,u){return this.check(Pu(v,u))},superRefine(v,u){return this.check(ju(v,u))},overwrite(v){return this.check(kr(v))},optional(){return q(this)},exactOptional(){return uu(this)},nullable(){return En(this)},nullish(){return q(En(this))},nonoptional(v){return cu(this,v)},array(){return V(this)},or(v){return M([this,v])},and(v){return Nn(this,v)},transform(v){return Mi(this,ot(v))},default(v){return gu(this,v)},prefault(v){return bu(this,v)},catch(v){return Iu(this,v)},pipe(v){return Mi(this,v)},readonly(){return ku(this)},describe(v){let u=this.clone();return y.add(u,{description:v}),u},meta(...v){if(v.length===0)return y.get(this);let u=this.clone();return y.add(u,v[0]),u},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(v){return v(this)}}),Object.defineProperty(r,\\\"description\\\",{get(){return y.get(r)?.description},configurable:!0}),r}),qi=e(\\\"_ZodString\\\",(r,i)=>{ar.init(r,i),W.init(r,i),r._zod.processJSONSchema=(u,n,t)=>Cl(r,u,n,t);let v=r._zod.bag;r.format=v.format??null,r.minLength=v.minimum??null,r.maxLength=v.maximum??null,Yi(r,\\\"_ZodString\\\",{regex(...u){return this.check(sr(...u))},includes(...u){return this.check(tn(...u))},startsWith(...u){return this.check(vn(...u))},endsWith(...u){return this.check(un(...u))},min(...u){return this.check(Ar(...u))},max(...u){return this.check(Mr(...u))},length(...u){return this.check(Yr(...u))},nonempty(...u){return this.check(Ar(1,...u))},lowercase(u){return this.check(rn(u))},uppercase(u){return this.check(nn(u))},trim(){return this.check(gn())},normalize(...u){return this.check($n(...u))},toLowerCase(){return this.check(ln())},toUpperCase(){return this.check(bn())},slugify(){return this.check(cn())}})}),In=e(\\\"ZodString\\\",(r,i)=>{ar.init(r,i),qi.init(r,i),r.email=(v)=>r.check(st(Xi,v)),r.url=(v)=>r.check(Oi(Tn,v)),r.jwt=(v)=>r.check(kv(tt,v)),r.emoji=(v)=>r.check(vv(Ri,v)),r.guid=(v)=>r.check(zi(Fn,v)),r.uuid=(v)=>r.check(rv(Pr,v)),r.uuidv4=(v)=>r.check(nv(Pr,v)),r.uuidv6=(v)=>r.check(iv(Pr,v)),r.uuidv7=(v)=>r.check(tv(Pr,v)),r.nanoid=(v)=>r.check(uv(Zi,v)),r.guid=(v)=>r.check(zi(Fn,v)),r.cuid=(v)=>r.check(ov(Qi,v)),r.cuid2=(v)=>r.check($v(Ci,v)),r.ulid=(v)=>r.check(gv(fi,v)),r.base64=(v)=>r.check(Uv(rt,v)),r.base64url=(v)=>r.check(Dv(nt,v)),r.xid=(v)=>r.check(lv(di,v)),r.ksuid=(v)=>r.check(bv(yi,v)),r.ipv4=(v)=>r.check(cv(hi,v)),r.ipv6=(v)=>r.check(ev(pi,v)),r.cidrv4=(v)=>r.check(_v(ai,v)),r.cidrv6=(v)=>r.check(Iv(si,v)),r.e164=(v)=>r.check(wv(it,v)),r.datetime=(v)=>r.check(Vb(v)),r.date=(v)=>r.check(Gb(v)),r.time=(v)=>r.check(Kb(v)),r.duration=(v)=>r.check(Bb(v))});T=e(\\\"ZodStringFormat\\\",(r,i)=>{Y.init(r,i),qi.init(r,i)}),Xi=e(\\\"ZodEmail\\\",(r,i)=>{so.init(r,i),T.init(r,i)});Fn=e(\\\"ZodGUID\\\",(r,i)=>{po.init(r,i),T.init(r,i)});Pr=e(\\\"ZodUUID\\\",(r,i)=>{ao.init(r,i),T.init(r,i)});Tn=e(\\\"ZodURL\\\",(r,i)=>{r$.init(r,i),T.init(r,i)});Ri=e(\\\"ZodEmoji\\\",(r,i)=>{n$.init(r,i),T.init(r,i)});Zi=e(\\\"ZodNanoID\\\",(r,i)=>{i$.init(r,i),T.init(r,i)});Qi=e(\\\"ZodCUID\\\",(r,i)=>{t$.init(r,i),T.init(r,i)});Ci=e(\\\"ZodCUID2\\\",(r,i)=>{v$.init(r,i),T.init(r,i)});fi=e(\\\"ZodULID\\\",(r,i)=>{u$.init(r,i),T.init(r,i)});di=e(\\\"ZodXID\\\",(r,i)=>{o$.init(r,i),T.init(r,i)});yi=e(\\\"ZodKSUID\\\",(r,i)=>{$$.init(r,i),T.init(r,i)});hi=e(\\\"ZodIPv4\\\",(r,i)=>{e$.init(r,i),T.init(r,i)});Mv=e(\\\"ZodMAC\\\",(r,i)=>{I$.init(r,i),T.init(r,i)});pi=e(\\\"ZodIPv6\\\",(r,i)=>{_$.init(r,i),T.init(r,i)});ai=e(\\\"ZodCIDRv4\\\",(r,i)=>{U$.init(r,i),T.init(r,i)});si=e(\\\"ZodCIDRv6\\\",(r,i)=>{D$.init(r,i),T.init(r,i)});rt=e(\\\"ZodBase64\\\",(r,i)=>{k$.init(r,i),T.init(r,i)});nt=e(\\\"ZodBase64URL\\\",(r,i)=>{N$.init(r,i),T.init(r,i)});it=e(\\\"ZodE164\\\",(r,i)=>{m$.init(r,i),T.init(r,i)});tt=e(\\\"ZodJWT\\\",(r,i)=>{z$.init(r,i),T.init(r,i)});Un=e(\\\"ZodCustomStringFormat\\\",(r,i)=>{O$.init(r,i),T.init(r,i)});Dn=e(\\\"ZodNumber\\\",(r,i)=>{Ct.init(r,i),W.init(r,i),r._zod.processJSONSchema=(u,n,t)=>fl(r,u,n,t),Yi(r,\\\"ZodNumber\\\",{gt(u,n){return this.check(Or(u,n))},gte(u,n){return this.check(vr(u,n))},min(u,n){return this.check(vr(u,n))},lt(u,n){return this.check(zr(u,n))},lte(u,n){return this.check(_r(u,n))},max(u,n){return this.check(_r(u,n))},int(u){return this.check(xi(u))},safe(u){return this.check(xi(u))},positive(u){return this.check(Or(0,u))},nonnegative(u){return this.check(vr(0,u))},negative(u){return this.check(zr(0,u))},nonpositive(u){return this.check(_r(0,u))},multipleOf(u,n){return this.check(Vr(u,n))},step(u,n){return this.check(Vr(u,n))},finite(){return this}});let v=r._zod.bag;r.minValue=Math.max(v.minimum??Number.NEGATIVE_INFINITY,v.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,r.maxValue=Math.min(v.maximum??Number.POSITIVE_INFINITY,v.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,r.isInt=(v.format??\\\"\\\").includes(\\\"int\\\")||Number.isSafeInteger(v.multipleOf??0.5),r.isFinite=!0,r.format=v.format??null});Zr=e(\\\"ZodNumberFormat\\\",(r,i)=>{S$.init(r,i),Dn.init(r,i)});wn=e(\\\"ZodBoolean\\\",(r,i)=>{ei.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>dl(r,v,u,n)});kn=e(\\\"ZodBigInt\\\",(r,i)=>{ft.init(r,i),W.init(r,i),r._zod.processJSONSchema=(u,n,t)=>yl(r,u,n,t),r.gte=(u,n)=>r.check(vr(u,n)),r.min=(u,n)=>r.check(vr(u,n)),r.gt=(u,n)=>r.check(Or(u,n)),r.gte=(u,n)=>r.check(vr(u,n)),r.min=(u,n)=>r.check(vr(u,n)),r.lt=(u,n)=>r.check(zr(u,n)),r.lte=(u,n)=>r.check(_r(u,n)),r.max=(u,n)=>r.check(_r(u,n)),r.positive=(u)=>r.check(Or(BigInt(0),u)),r.negative=(u)=>r.check(zr(BigInt(0),u)),r.nonpositive=(u)=>r.check(_r(BigInt(0),u)),r.nonnegative=(u)=>r.check(vr(BigInt(0),u)),r.multipleOf=(u,n)=>r.check(Vr(u,n));let v=r._zod.bag;r.minValue=v.minimum??null,r.maxValue=v.maximum??null,r.format=v.format??null});vt=e(\\\"ZodBigIntFormat\\\",(r,i)=>{P$.init(r,i),kn.init(r,i)});Yv=e(\\\"ZodSymbol\\\",(r,i)=>{j$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>hl(r,v,u,n)});qv=e(\\\"ZodUndefined\\\",(r,i)=>{L$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>al(r,v,u,n)});Xv=e(\\\"ZodNull\\\",(r,i)=>{A$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>pl(r,v,u,n)});Rv=e(\\\"ZodAny\\\",(r,i)=>{J$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>nb(r,v,u,n)});Zv=e(\\\"ZodUnknown\\\",(r,i)=>{W$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>ib(r,v,u,n)});Qv=e(\\\"ZodNever\\\",(r,i)=>{V$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>rb(r,v,u,n)});Cv=e(\\\"ZodVoid\\\",(r,i)=>{G$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>sl(r,v,u,n)});Mn=e(\\\"ZodDate\\\",(r,i)=>{K$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(u,n,t)=>tb(r,u,n,t),r.min=(u,n)=>r.check(vr(u,n)),r.max=(u,n)=>r.check(_r(u,n));let v=r._zod.bag;r.minDate=v.minimum?new Date(v.minimum):null,r.maxDate=v.maximum?new Date(v.maximum):null});fv=e(\\\"ZodArray\\\",(r,i)=>{B$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>Ub(r,v,u,n),r.element=i.element,Yi(r,\\\"ZodArray\\\",{min(v,u){return this.check(Ar(v,u))},nonempty(v){return this.check(Ar(1,v))},max(v,u){return this.check(Mr(v,u))},length(v,u){return this.check(Yr(v,u))},unwrap(){return this.element}})});Yn=e(\\\"ZodObject\\\",(r,i)=>{H$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>Db(r,v,u,n),N.defineLazy(r,\\\"shape\\\",()=>{return i.shape}),Yi(r,\\\"ZodObject\\\",{keyof(){return p(Object.keys(this._zod.def.shape))},catchall(v){return this.clone({...this._zod.def,catchall:v})},passthrough(){return this.clone({...this._zod.def,catchall:x()})},loose(){return this.clone({...this._zod.def,catchall:x()})},strict(){return this.clone({...this._zod.def,catchall:ut()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(v){return N.extend(this,v)},safeExtend(v){return N.safeExtend(this,v)},merge(v){return N.merge(this,v)},pick(v){return N.pick(this,v)},omit(v){return N.omit(this,v)},partial(...v){return N.partial($t,this,v[0])},required(...v){return N.required(gt,this,v[0])}})});qn=e(\\\"ZodUnion\\\",(r,i)=>{_i.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>zv(r,v,u,n),r.options=i.options});dv=e(\\\"ZodXor\\\",(r,i)=>{qn.init(r,i),F$.init(r,i),r._zod.processJSONSchema=(v,u,n)=>zv(r,v,u,n),r.options=i.options});yv=e(\\\"ZodDiscriminatedUnion\\\",(r,i)=>{qn.init(r,i),E$.init(r,i)});hv=e(\\\"ZodIntersection\\\",(r,i)=>{T$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>wb(r,v,u,n)});pv=e(\\\"ZodTuple\\\",(r,i)=>{dt.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>kb(r,v,u,n),r.rest=(v)=>r.clone({...r._zod.def,rest:v})});en=e(\\\"ZodRecord\\\",(r,i)=>{x$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>Nb(r,v,u,n),r.keyType=i.keyType,r.valueType=i.valueType});sv=e(\\\"ZodMap\\\",(r,i)=>{M$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>_b(r,v,u,n),r.keyType=i.keyType,r.valueType=i.valueType,r.min=(...v)=>r.check(Sr(...v)),r.nonempty=(v)=>r.check(Sr(1,v)),r.max=(...v)=>r.check(Gr(...v)),r.size=(...v)=>r.check(xr(...v))});ru=e(\\\"ZodSet\\\",(r,i)=>{Y$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>Ib(r,v,u,n),r.min=(...v)=>r.check(Sr(...v)),r.nonempty=(v)=>r.check(Sr(1,v)),r.max=(...v)=>r.check(Gr(...v)),r.size=(...v)=>r.check(xr(...v))});_n=e(\\\"ZodEnum\\\",(r,i)=>{q$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(u,n,t)=>vb(r,u,n,t),r.enum=i.entries,r.options=Object.values(i.entries);let v=new Set(Object.keys(i.entries));r.extract=(u,n)=>{let t={};for(let o of u)if(v.has(o))t[o]=i.entries[o];else throw Error(`Key ${o} not found in enum`);return new _n({...i,checks:[],...N.normalizeParams(n),entries:t})},r.exclude=(u,n)=>{let t={...i.entries};for(let o of u)if(v.has(o))delete t[o];else throw Error(`Key ${o} not found in enum`);return new _n({...i,checks:[],...N.normalizeParams(n),entries:t})}});nu=e(\\\"ZodLiteral\\\",(r,i)=>{X$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>ub(r,v,u,n),r.values=new Set(i.values),Object.defineProperty(r,\\\"value\\\",{get(){if(i.values.length>1)throw Error(\\\"This schema contains multiple valid literal values. Use `.values` instead.\\\");return i.values[0]}})});iu=e(\\\"ZodFile\\\",(r,i)=>{R$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>gb(r,v,u,n),r.min=(v,u)=>r.check(Sr(v,u)),r.max=(v,u)=>r.check(Gr(v,u)),r.mime=(v,u)=>r.check(on(Array.isArray(v)?v:[v],u))});tu=e(\\\"ZodTransform\\\",(r,i)=>{Z$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>eb(r,v,u,n),r._zod.parse=(v,u)=>{if(u.direction===\\\"backward\\\")throw new dr(r.constructor.name);v.addIssue=(t)=>{if(typeof t===\\\"string\\\")v.issues.push(N.issue(t,v.value,i));else{let o=t;if(o.fatal)o.continue=!1;o.code??(o.code=\\\"custom\\\"),o.input??(o.input=v.value),o.inst??(o.inst=r),v.issues.push(N.issue(o))}};let n=i.transform(v.value,v);if(n instanceof Promise)return n.then((t)=>{return v.value=t,v.fallback=!0,v});return v.value=n,v.fallback=!0,v}});$t=e(\\\"ZodOptional\\\",(r,i)=>{yt.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>Ov(r,v,u,n),r.unwrap=()=>r._zod.def.innerType});vu=e(\\\"ZodExactOptional\\\",(r,i)=>{Q$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>Ov(r,v,u,n),r.unwrap=()=>r._zod.def.innerType});ou=e(\\\"ZodNullable\\\",(r,i)=>{C$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>mb(r,v,u,n),r.unwrap=()=>r._zod.def.innerType});$u=e(\\\"ZodDefault\\\",(r,i)=>{f$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>Ob(r,v,u,n),r.unwrap=()=>r._zod.def.innerType,r.removeDefault=r.unwrap});lu=e(\\\"ZodPrefault\\\",(r,i)=>{d$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>Sb(r,v,u,n),r.unwrap=()=>r._zod.def.innerType});gt=e(\\\"ZodNonOptional\\\",(r,i)=>{y$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>zb(r,v,u,n),r.unwrap=()=>r._zod.def.innerType});eu=e(\\\"ZodSuccess\\\",(r,i)=>{h$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>lb(r,v,u,n),r.unwrap=()=>r._zod.def.innerType});_u=e(\\\"ZodCatch\\\",(r,i)=>{p$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>Pb(r,v,u,n),r.unwrap=()=>r._zod.def.innerType,r.removeCatch=r.unwrap});Uu=e(\\\"ZodNaN\\\",(r,i)=>{a$.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>ob(r,v,u,n)});Rn=e(\\\"ZodPipe\\\",(r,i)=>{ht.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>jb(r,v,u,n),r.in=i.in,r.out=i.out});Zn=e(\\\"ZodCodec\\\",(r,i)=>{Rn.init(r,i),Ii.init(r,i)});Du=e(\\\"ZodPreprocess\\\",(r,i)=>{Rn.init(r,i),s$.init(r,i)}),wu=e(\\\"ZodReadonly\\\",(r,i)=>{rg.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>Lb(r,v,u,n),r.unwrap=()=>r._zod.def.innerType});Nu=e(\\\"ZodTemplateLiteral\\\",(r,i)=>{ng.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>$b(r,v,u,n)});mu=e(\\\"ZodLazy\\\",(r,i)=>{vg.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>Jb(r,v,u,n),r.unwrap=()=>r._zod.def.getter()});Ou=e(\\\"ZodPromise\\\",(r,i)=>{tg.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>Ab(r,v,u,n),r.unwrap=()=>r._zod.def.innerType});Su=e(\\\"ZodFunction\\\",(r,i)=>{ig.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>cb(r,v,u,n)});Qn=e(\\\"ZodCustom\\\",(r,i)=>{ug.init(r,i),W.init(r,i),r._zod.processJSONSchema=(v,u,n)=>bb(r,v,u,n)});Y4=Xl,q4=Rl});function De(r){Z({customError:r})}function we(){return Z().customError}var Ue,Lu;var ke=O(()=>{Ir();Ue={invalid_type:\\\"invalid_type\\\",too_big:\\\"too_big\\\",too_small:\\\"too_small\\\",invalid_format:\\\"invalid_format\\\",not_multiple_of:\\\"not_multiple_of\\\",unrecognized_keys:\\\"unrecognized_keys\\\",invalid_union:\\\"invalid_union\\\",invalid_key:\\\"invalid_key\\\",invalid_element:\\\"invalid_element\\\",invalid_value:\\\"invalid_value\\\",custom:\\\"custom\\\"};(function(r){})(Lu||(Lu={}))});function zU(r,i){let v=r.$schema;if(v===\\\"https://json-schema.org/draft/2020-12/schema\\\")return\\\"draft-2020-12\\\";if(v===\\\"http://json-schema.org/draft-07/schema#\\\")return\\\"draft-7\\\";if(v===\\\"http://json-schema.org/draft-04/schema#\\\")return\\\"draft-4\\\";return i??\\\"draft-2020-12\\\"}function OU(r,i){if(!r.startsWith(\\\"#\\\"))throw Error(\\\"External $ref is not supported, only local refs (#/...) are allowed\\\");let v=r.slice(1).split(\\\"/\\\").filter(Boolean);if(v.length===0)return i.rootSchema;let u=i.version===\\\"draft-2020-12\\\"?\\\"$defs\\\":\\\"definitions\\\";if(v[0]===u){let n=v[1];if(!n||!i.defs[n])throw Error(`Reference not found: ${r}`);return i.defs[n]}throw Error(`Reference not found: ${r}`)}function Ne(r,i){if(r.not!==void 0){if(typeof r.not===\\\"object\\\"&&Object.keys(r.not).length===0)return S.never();throw Error(\\\"not is not supported in Zod (except { not: {} } for never)\\\")}if(r.unevaluatedItems!==void 0)throw Error(\\\"unevaluatedItems is not supported\\\");if(r.unevaluatedProperties!==void 0)throw Error(\\\"unevaluatedProperties is not supported\\\");if(r.if!==void 0||r.then!==void 0||r.else!==void 0)throw Error(\\\"Conditional schemas (if/then/else) are not supported\\\");if(r.dependentSchemas!==void 0||r.dependentRequired!==void 0)throw Error(\\\"dependentSchemas and dependentRequired are not supported\\\");if(r.$ref){let n=r.$ref;if(i.refs.has(n))return i.refs.get(n);if(i.processing.has(n))return S.lazy(()=>{if(!i.refs.has(n))throw Error(`Circular reference not resolved: ${n}`);return i.refs.get(n)});i.processing.add(n);let t=OU(n,i),o=ur(t,i);return i.refs.set(n,o),i.processing.delete(n),o}if(r.enum!==void 0){let n=r.enum;if(i.version===\\\"openapi-3.0\\\"&&r.nullable===!0&&n.length===1&&n[0]===null)return S.null();if(n.length===0)return S.never();if(n.length===1)return S.literal(n[0]);if(n.every((o)=>typeof o===\\\"string\\\"))return S.enum(n);let t=n.map((o)=>S.literal(o));if(t.length<2)return t[0];return S.union([t[0],t[1],...t.slice(2)])}if(r.const!==void 0)return S.literal(r.const);let v=r.type;if(Array.isArray(v)){let n=v.map((t)=>{let o={...r,type:t};return Ne(o,i)});if(n.length===0)return S.never();if(n.length===1)return n[0];return S.union(n)}if(!v)return S.any();let u;switch(v){case\\\"string\\\":{let n=S.string();if(r.format){let t=r.format;if(t===\\\"email\\\")n=n.check(S.email());else if(t===\\\"uri\\\"||t===\\\"uri-reference\\\")n=n.check(S.url());else if(t===\\\"uuid\\\"||t===\\\"guid\\\")n=n.check(S.uuid());else if(t===\\\"date-time\\\")n=n.check(S.iso.datetime());else if(t===\\\"date\\\")n=n.check(S.iso.date());else if(t===\\\"time\\\")n=n.check(S.iso.time());else if(t===\\\"duration\\\")n=n.check(S.iso.duration());else if(t===\\\"ipv4\\\")n=n.check(S.ipv4());else if(t===\\\"ipv6\\\")n=n.check(S.ipv6());else if(t===\\\"mac\\\")n=n.check(S.mac());else if(t===\\\"cidr\\\")n=n.check(S.cidrv4());else if(t===\\\"cidr-v6\\\")n=n.check(S.cidrv6());else if(t===\\\"base64\\\")n=n.check(S.base64());else if(t===\\\"base64url\\\")n=n.check(S.base64url());else if(t===\\\"e164\\\")n=n.check(S.e164());else if(t===\\\"jwt\\\")n=n.check(S.jwt());else if(t===\\\"emoji\\\")n=n.check(S.emoji());else if(t===\\\"nanoid\\\")n=n.check(S.nanoid());else if(t===\\\"cuid\\\")n=n.check(S.cuid());else if(t===\\\"cuid2\\\")n=n.check(S.cuid2());else if(t===\\\"ulid\\\")n=n.check(S.ulid());else if(t===\\\"xid\\\")n=n.check(S.xid());else if(t===\\\"ksuid\\\")n=n.check(S.ksuid())}if(typeof r.minLength===\\\"number\\\")n=n.min(r.minLength);if(typeof r.maxLength===\\\"number\\\")n=n.max(r.maxLength);if(r.pattern)n=n.regex(new RegExp(r.pattern));u=n;break}case\\\"number\\\":case\\\"integer\\\":{let n=v===\\\"integer\\\"?S.number().int():S.number();if(typeof r.minimum===\\\"number\\\")n=n.min(r.minimum);if(typeof r.maximum===\\\"number\\\")n=n.max(r.maximum);if(typeof r.exclusiveMinimum===\\\"number\\\")n=n.gt(r.exclusiveMinimum);else if(r.exclusiveMinimum===!0&&typeof r.minimum===\\\"number\\\")n=n.gt(r.minimum);if(typeof r.exclusiveMaximum===\\\"number\\\")n=n.lt(r.exclusiveMaximum);else if(r.exclusiveMaximum===!0&&typeof r.maximum===\\\"number\\\")n=n.lt(r.maximum);if(typeof r.multipleOf===\\\"number\\\")n=n.multipleOf(r.multipleOf);u=n;break}case\\\"boolean\\\":{u=S.boolean();break}case\\\"null\\\":{u=S.null();break}case\\\"object\\\":{let n={},t=r.properties||{},o=new Set(r.required||[]);for(let[b,g]of Object.entries(t)){let c=ur(g,i);n[b]=o.has(b)?c:c.optional()}if(r.propertyNames){let b=ur(r.propertyNames,i),g=r.additionalProperties&&typeof r.additionalProperties===\\\"object\\\"?ur(r.additionalProperties,i):S.any();if(Object.keys(n).length===0){u=S.record(b,g);break}let c=S.object(n).passthrough(),U=S.looseRecord(b,g);u=S.intersection(c,U);break}if(r.patternProperties){let b=r.patternProperties,g=Object.keys(b),c=[];for(let w of g){let m=ur(b[w],i),A=S.string().regex(new RegExp(w));c.push(S.looseRecord(A,m))}let U=[];if(Object.keys(n).length>0)U.push(S.object(n).passthrough());if(U.push(...c),U.length===0)u=S.object({}).passthrough();else if(U.length===1)u=U[0];else{let w=S.intersection(U[0],U[1]);for(let m=2;m<U.length;m++)w=S.intersection(w,U[m]);u=w}break}let $=S.object(n);if(r.additionalProperties===!1)u=$.strict();else if(typeof r.additionalProperties===\\\"object\\\")u=$.catchall(ur(r.additionalProperties,i));else u=$.passthrough();break}case\\\"array\\\":{let{prefixItems:n,items:t}=r;if(n&&Array.isArray(n)){let o=n.map((b)=>ur(b,i)),$=t&&typeof t===\\\"object\\\"&&!Array.isArray(t)?ur(t,i):void 0;if($)u=S.tuple(o).rest($);else u=S.tuple(o);if(typeof r.minItems===\\\"number\\\")u=u.check(S.minLength(r.minItems));if(typeof r.maxItems===\\\"number\\\")u=u.check(S.maxLength(r.maxItems))}else if(Array.isArray(t)){let o=t.map((b)=>ur(b,i)),$=r.additionalItems&&typeof r.additionalItems===\\\"object\\\"?ur(r.additionalItems,i):void 0;if($)u=S.tuple(o).rest($);else u=S.tuple(o);if(typeof r.minItems===\\\"number\\\")u=u.check(S.minLength(r.minItems));if(typeof r.maxItems===\\\"number\\\")u=u.check(S.maxLength(r.maxItems))}else if(t!==void 0){let o=ur(t,i),$=S.array(o);if(typeof r.minItems===\\\"number\\\")$=$.min(r.minItems);if(typeof r.maxItems===\\\"number\\\")$=$.max(r.maxItems);u=$}else u=S.array(S.any());break}default:throw Error(`Unsupported type: ${v}`)}return u}function ur(r,i){if(typeof r===\\\"boolean\\\")return r?S.any():S.never();let v=Ne(r,i),u=r.type||r.enum!==void 0||r.const!==void 0;if(r.anyOf&&Array.isArray(r.anyOf)){let $=r.anyOf.map((g)=>ur(g,i)),b=S.union($);v=u?S.intersection(v,b):b}if(r.oneOf&&Array.isArray(r.oneOf)){let $=r.oneOf.map((g)=>ur(g,i)),b=S.xor($);v=u?S.intersection(v,b):b}if(r.allOf&&Array.isArray(r.allOf))if(r.allOf.length===0)v=u?v:S.any();else{let $=u?v:ur(r.allOf[0],i),b=u?0:1;for(let g=b;g<r.allOf.length;g++)$=S.intersection($,ur(r.allOf[g],i));v=$}if(r.nullable===!0&&i.version===\\\"openapi-3.0\\\")v=S.nullable(v);if(r.readOnly===!0)v=S.readonly(v);if(r.default!==void 0)v=v.default(r.default);let n={},t=[\\\"$id\\\",\\\"id\\\",\\\"$comment\\\",\\\"$anchor\\\",\\\"$vocabulary\\\",\\\"$dynamicRef\\\",\\\"$dynamicAnchor\\\"];for(let $ of t)if($ in r)n[$]=r[$];let o=[\\\"contentEncoding\\\",\\\"contentMediaType\\\",\\\"contentSchema\\\"];for(let $ of o)if($ in r)n[$]=r[$];for(let $ of Object.keys(r))if(!mU.has($))n[$]=r[$];if(Object.keys(n).length>0)i.registry.add(v,n);if(r.description)v=v.describe(r.description);return v}function Q4(r,i){if(typeof r===\\\"boolean\\\")return r?S.any():S.never();let v;try{v=JSON.parse(JSON.stringify(r))}catch{throw Error(\\\"fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas\\\")}let u=zU(v,i?.defaultTarget),n=v.$defs||v.definitions||{},t={version:u,defs:n,refs:new Map,processing:new Set,rootSchema:v,registry:i?.registry??y};return ur(v,t)}var S,mU;var me=O(()=>{mi();Lv();Fi();Ti();S={...Ei,...jv,iso:Kr},mU=new Set([\\\"$schema\\\",\\\"$ref\\\",\\\"$defs\\\",\\\"definitions\\\",\\\"$id\\\",\\\"id\\\",\\\"$comment\\\",\\\"$anchor\\\",\\\"$vocabulary\\\",\\\"$dynamicRef\\\",\\\"$dynamicAnchor\\\",\\\"type\\\",\\\"enum\\\",\\\"const\\\",\\\"anyOf\\\",\\\"oneOf\\\",\\\"allOf\\\",\\\"not\\\",\\\"properties\\\",\\\"required\\\",\\\"additionalProperties\\\",\\\"patternProperties\\\",\\\"propertyNames\\\",\\\"minProperties\\\",\\\"maxProperties\\\",\\\"items\\\",\\\"prefixItems\\\",\\\"additionalItems\\\",\\\"minItems\\\",\\\"maxItems\\\",\\\"uniqueItems\\\",\\\"contains\\\",\\\"minContains\\\",\\\"maxContains\\\",\\\"minLength\\\",\\\"maxLength\\\",\\\"pattern\\\",\\\"format\\\",\\\"minimum\\\",\\\"maximum\\\",\\\"exclusiveMinimum\\\",\\\"exclusiveMaximum\\\",\\\"multipleOf\\\",\\\"description\\\",\\\"default\\\",\\\"contentEncoding\\\",\\\"contentMediaType\\\",\\\"contentSchema\\\",\\\"unevaluatedItems\\\",\\\"unevaluatedProperties\\\",\\\"if\\\",\\\"then\\\",\\\"else\\\",\\\"dependentSchemas\\\",\\\"dependentRequired\\\",\\\"nullable\\\",\\\"readOnly\\\"])});var Au={};jr(Au,{string:()=>SU,number:()=>PU,date:()=>AU,boolean:()=>jU,bigint:()=>LU});function SU(r){return gl(In,r)}function PU(r){return Ul(Dn,r)}function jU(r){return Ol(wn,r)}function LU(r){return Pl(kn,r)}function AU(r){return Fl(Mn,r)}var ze=O(()=>{Ir();Ti()});var l={};jr(l,{xor:()=>P4,xid:()=>yb,void:()=>m4,uuidv7:()=>qb,uuidv6:()=>Yb,uuidv4:()=>Mb,uuid:()=>xb,util:()=>N,url:()=>Xb,uppercase:()=>nn,unknown:()=>x,union:()=>M,undefined:()=>k4,ulid:()=>db,uint64:()=>D4,uint32:()=>_4,tuple:()=>av,trim:()=>gn,treeifyError:()=>Lt,transform:()=>ot,toUpperCase:()=>bn,toLowerCase:()=>ln,toJSONSchema:()=>Wi,templateLiteral:()=>E4,symbol:()=>w4,superRefine:()=>ju,success:()=>K4,stringbool:()=>R4,stringFormat:()=>o4,string:()=>I,strictObject:()=>S4,startsWith:()=>vn,slugify:()=>cn,size:()=>xr,setErrorMap:()=>De,set:()=>J4,safeParseAsync:()=>Vv,safeParse:()=>Wv,safeEncodeAsync:()=>Tv,safeEncode:()=>Fv,safeDecodeAsync:()=>xv,safeDecode:()=>Ev,registry:()=>Ni,regexes:()=>er,regex:()=>sr,refine:()=>Pu,record:()=>F,readonly:()=>ku,property:()=>Ai,promise:()=>T4,prettifyError:()=>At,preprocess:()=>Cn,prefault:()=>bu,positive:()=>Si,pipe:()=>Mi,partialRecord:()=>j4,parseAsync:()=>Jv,parse:()=>Av,overwrite:()=>kr,optional:()=>q,object:()=>P,number:()=>K,nullish:()=>G4,nullable:()=>En,null:()=>xn,normalize:()=>$n,nonpositive:()=>ji,nonoptional:()=>cu,nonnegative:()=>Li,never:()=>ut,negative:()=>Pi,nativeEnum:()=>W4,nanoid:()=>Qb,nan:()=>B4,multipleOf:()=>Vr,minSize:()=>Sr,minLength:()=>Ar,mime:()=>on,meta:()=>q4,maxSize:()=>Gr,maxLength:()=>Mr,map:()=>A4,mac:()=>ab,lte:()=>_r,lt:()=>zr,lowercase:()=>rn,looseRecord:()=>L4,looseObject:()=>h,locales:()=>Kn,literal:()=>L,length:()=>Yr,lazy:()=>zu,ksuid:()=>hb,keyof:()=>O4,jwt:()=>u4,json:()=>Z4,iso:()=>Kr,ipv6:()=>sb,ipv4:()=>pb,invertCodec:()=>F4,intersection:()=>Nn,int64:()=>U4,int32:()=>e4,int:()=>xi,instanceof:()=>X4,includes:()=>tn,httpUrl:()=>Rb,hostname:()=>$4,hex:()=>g4,hash:()=>l4,guid:()=>Tb,gte:()=>vr,gt:()=>Or,globalRegistry:()=>y,getErrorMap:()=>we,function:()=>x4,fromJSONSchema:()=>Q4,formatError:()=>Pn,float64:()=>c4,float32:()=>b4,flattenError:()=>Sn,file:()=>V4,exactOptional:()=>uu,enum:()=>p,endsWith:()=>un,encodeAsync:()=>Bv,encode:()=>Gv,emoji:()=>Zb,email:()=>Eb,e164:()=>v4,discriminatedUnion:()=>Xn,describe:()=>Y4,decodeAsync:()=>Hv,decode:()=>Kv,date:()=>z4,custom:()=>lt,cuid2:()=>fb,cuid:()=>Cb,core:()=>Jr,config:()=>Z,coerce:()=>Au,codec:()=>H4,clone:()=>tr,cidrv6:()=>n4,cidrv4:()=>r4,check:()=>M4,catch:()=>Iu,boolean:()=>C,bigint:()=>I4,base64url:()=>t4,base64:()=>i4,array:()=>V,any:()=>N4,_function:()=>x4,_default:()=>gu,_ZodString:()=>qi,ZodXor:()=>dv,ZodXID:()=>di,ZodVoid:()=>Cv,ZodUnknown:()=>Zv,ZodUnion:()=>qn,ZodUndefined:()=>qv,ZodUUID:()=>Pr,ZodURL:()=>Tn,ZodULID:()=>fi,ZodType:()=>W,ZodTuple:()=>pv,ZodTransform:()=>tu,ZodTemplateLiteral:()=>Nu,ZodSymbol:()=>Yv,ZodSuccess:()=>eu,ZodStringFormat:()=>T,ZodString:()=>In,ZodSet:()=>ru,ZodRecord:()=>en,ZodRealError:()=>lr,ZodReadonly:()=>wu,ZodPromise:()=>Ou,ZodPreprocess:()=>Du,ZodPrefault:()=>lu,ZodPipe:()=>Rn,ZodOptional:()=>$t,ZodObject:()=>Yn,ZodNumberFormat:()=>Zr,ZodNumber:()=>Dn,ZodNullable:()=>ou,ZodNull:()=>Xv,ZodNonOptional:()=>gt,ZodNever:()=>Qv,ZodNanoID:()=>Zi,ZodNaN:()=>Uu,ZodMap:()=>sv,ZodMAC:()=>Mv,ZodLiteral:()=>nu,ZodLazy:()=>mu,ZodKSUID:()=>yi,ZodJWT:()=>tt,ZodIssueCode:()=>Ue,ZodIntersection:()=>hv,ZodISOTime:()=>Bi,ZodISODuration:()=>Hi,ZodISODateTime:()=>Gi,ZodISODate:()=>Ki,ZodIPv6:()=>pi,ZodIPv4:()=>hi,ZodGUID:()=>Fn,ZodFunction:()=>Su,ZodFirstPartyTypeKind:()=>Lu,ZodFile:()=>iu,ZodExactOptional:()=>vu,ZodError:()=>_e,ZodEnum:()=>_n,ZodEmoji:()=>Ri,ZodEmail:()=>Xi,ZodE164:()=>it,ZodDiscriminatedUnion:()=>yv,ZodDefault:()=>$u,ZodDate:()=>Mn,ZodCustomStringFormat:()=>Un,ZodCustom:()=>Qn,ZodCodec:()=>Zn,ZodCatch:()=>_u,ZodCUID2:()=>Ci,ZodCUID:()=>Qi,ZodCIDRv6:()=>si,ZodCIDRv4:()=>ai,ZodBoolean:()=>wn,ZodBigIntFormat:()=>vt,ZodBigInt:()=>kn,ZodBase64URL:()=>nt,ZodBase64:()=>rt,ZodArray:()=>fv,ZodAny:()=>Rv,TimePrecision:()=>Nv,NEVER:()=>Ot,$output:()=>pt,$input:()=>at,$brand:()=>St});var C4=O(()=>{Ir();Ir();Dg();Ir();Vi();me();ul();Fi();Fi();ze();Ti();Lv();Hb();Fb();ke();Z(Ui())});var Oe;var f4=O(()=>{C4();C4();Oe=l});var d4={};jr(d4,{z:()=>l,xor:()=>P4,xid:()=>yb,void:()=>m4,uuidv7:()=>qb,uuidv6:()=>Yb,uuidv4:()=>Mb,uuid:()=>xb,util:()=>N,url:()=>Xb,uppercase:()=>nn,unknown:()=>x,union:()=>M,undefined:()=>k4,ulid:()=>db,uint64:()=>D4,uint32:()=>_4,tuple:()=>av,trim:()=>gn,treeifyError:()=>Lt,transform:()=>ot,toUpperCase:()=>bn,toLowerCase:()=>ln,toJSONSchema:()=>Wi,templateLiteral:()=>E4,symbol:()=>w4,superRefine:()=>ju,success:()=>K4,stringbool:()=>R4,stringFormat:()=>o4,string:()=>I,strictObject:()=>S4,startsWith:()=>vn,slugify:()=>cn,size:()=>xr,setErrorMap:()=>De,set:()=>J4,safeParseAsync:()=>Vv,safeParse:()=>Wv,safeEncodeAsync:()=>Tv,safeEncode:()=>Fv,safeDecodeAsync:()=>xv,safeDecode:()=>Ev,registry:()=>Ni,regexes:()=>er,regex:()=>sr,refine:()=>Pu,record:()=>F,readonly:()=>ku,property:()=>Ai,promise:()=>T4,prettifyError:()=>At,preprocess:()=>Cn,prefault:()=>bu,positive:()=>Si,pipe:()=>Mi,partialRecord:()=>j4,parseAsync:()=>Jv,parse:()=>Av,overwrite:()=>kr,optional:()=>q,object:()=>P,number:()=>K,nullish:()=>G4,nullable:()=>En,null:()=>xn,normalize:()=>$n,nonpositive:()=>ji,nonoptional:()=>cu,nonnegative:()=>Li,never:()=>ut,negative:()=>Pi,nativeEnum:()=>W4,nanoid:()=>Qb,nan:()=>B4,multipleOf:()=>Vr,minSize:()=>Sr,minLength:()=>Ar,mime:()=>on,meta:()=>q4,maxSize:()=>Gr,maxLength:()=>Mr,map:()=>A4,mac:()=>ab,lte:()=>_r,lt:()=>zr,lowercase:()=>rn,looseRecord:()=>L4,looseObject:()=>h,locales:()=>Kn,literal:()=>L,length:()=>Yr,lazy:()=>zu,ksuid:()=>hb,keyof:()=>O4,jwt:()=>u4,json:()=>Z4,iso:()=>Kr,ipv6:()=>sb,ipv4:()=>pb,invertCodec:()=>F4,intersection:()=>Nn,int64:()=>U4,int32:()=>e4,int:()=>xi,instanceof:()=>X4,includes:()=>tn,httpUrl:()=>Rb,hostname:()=>$4,hex:()=>g4,hash:()=>l4,guid:()=>Tb,gte:()=>vr,gt:()=>Or,globalRegistry:()=>y,getErrorMap:()=>we,function:()=>x4,fromJSONSchema:()=>Q4,formatError:()=>Pn,float64:()=>c4,float32:()=>b4,flattenError:()=>Sn,file:()=>V4,exactOptional:()=>uu,enum:()=>p,endsWith:()=>un,encodeAsync:()=>Bv,encode:()=>Gv,emoji:()=>Zb,email:()=>Eb,e164:()=>v4,discriminatedUnion:()=>Xn,describe:()=>Y4,default:()=>JU,decodeAsync:()=>Hv,decode:()=>Kv,date:()=>z4,custom:()=>lt,cuid2:()=>fb,cuid:()=>Cb,core:()=>Jr,config:()=>Z,coerce:()=>Au,codec:()=>H4,clone:()=>tr,cidrv6:()=>n4,cidrv4:()=>r4,check:()=>M4,catch:()=>Iu,boolean:()=>C,bigint:()=>I4,base64url:()=>t4,base64:()=>i4,array:()=>V,any:()=>N4,_function:()=>x4,_default:()=>gu,_ZodString:()=>qi,ZodXor:()=>dv,ZodXID:()=>di,ZodVoid:()=>Cv,ZodUnknown:()=>Zv,ZodUnion:()=>qn,ZodUndefined:()=>qv,ZodUUID:()=>Pr,ZodURL:()=>Tn,ZodULID:()=>fi,ZodType:()=>W,ZodTuple:()=>pv,ZodTransform:()=>tu,ZodTemplateLiteral:()=>Nu,ZodSymbol:()=>Yv,ZodSuccess:()=>eu,ZodStringFormat:()=>T,ZodString:()=>In,ZodSet:()=>ru,ZodRecord:()=>en,ZodRealError:()=>lr,ZodReadonly:()=>wu,ZodPromise:()=>Ou,ZodPreprocess:()=>Du,ZodPrefault:()=>lu,ZodPipe:()=>Rn,ZodOptional:()=>$t,ZodObject:()=>Yn,ZodNumberFormat:()=>Zr,ZodNumber:()=>Dn,ZodNullable:()=>ou,ZodNull:()=>Xv,ZodNonOptional:()=>gt,ZodNever:()=>Qv,ZodNanoID:()=>Zi,ZodNaN:()=>Uu,ZodMap:()=>sv,ZodMAC:()=>Mv,ZodLiteral:()=>nu,ZodLazy:()=>mu,ZodKSUID:()=>yi,ZodJWT:()=>tt,ZodIssueCode:()=>Ue,ZodIntersection:()=>hv,ZodISOTime:()=>Bi,ZodISODuration:()=>Hi,ZodISODateTime:()=>Gi,ZodISODate:()=>Ki,ZodIPv6:()=>pi,ZodIPv4:()=>hi,ZodGUID:()=>Fn,ZodFunction:()=>Su,ZodFirstPartyTypeKind:()=>Lu,ZodFile:()=>iu,ZodExactOptional:()=>vu,ZodError:()=>_e,ZodEnum:()=>_n,ZodEmoji:()=>Ri,ZodEmail:()=>Xi,ZodE164:()=>it,ZodDiscriminatedUnion:()=>yv,ZodDefault:()=>$u,ZodDate:()=>Mn,ZodCustomStringFormat:()=>Un,ZodCustom:()=>Qn,ZodCodec:()=>Zn,ZodCatch:()=>_u,ZodCUID2:()=>Ci,ZodCUID:()=>Qi,ZodCIDRv6:()=>si,ZodCIDRv4:()=>ai,ZodBoolean:()=>wn,ZodBigIntFormat:()=>vt,ZodBigInt:()=>kn,ZodBase64URL:()=>nt,ZodBase64:()=>rt,ZodArray:()=>fv,ZodAny:()=>Rv,TimePrecision:()=>Nv,NEVER:()=>Ot,$output:()=>pt,$input:()=>at,$brand:()=>St});var JU;var bt=O(()=>{f4();f4();JU=Oe});Ir();function Sv(r){return!!r._zod}function Pv(r,i){if(Sv(r))return Jn(r,i);return r.safeParse(i)}function be(r){if(!r)return;let i;if(Sv(r))i=r._zod?.def?.shape;else i=r.shape;if(!i)return;if(typeof i===\\\"function\\\")try{return i()}catch{return}return i}function ce(r){if(Sv(r)){let t=r._zod?.def;if(t){if(t.value!==void 0)return t.value;if(Array.isArray(t.values)&&t.values.length>0)return t.values[0]}}let v=r._def;if(v){if(v.value!==void 0)return v.value;if(Array.isArray(v.values)&&v.values.length>0)return v.values[0]}let u=r.value;if(u!==void 0)return u;return}bt();var Qr=\\\"io.modelcontextprotocol/related-task\\\",Wu=\\\"2.0\\\",d=lt((r)=>r!==null&&(typeof r===\\\"object\\\"||typeof r===\\\"function\\\")),Se=M([I(),K().int()]),Pe=I(),Y1=h({ttl:K().optional(),pollInterval:K().optional()}),WU=P({ttl:K().optional()}),VU=P({taskId:I()}),y4=h({progressToken:Se.optional(),[Qr]:VU.optional()}),Dr=P({_meta:y4.optional()}),ct=Dr.extend({task:WU.optional()}),je=(r)=>ct.safeParse(r).success,s=P({method:I(),params:Dr.loose().optional()}),Nr=P({_meta:y4.optional()}),mr=P({method:I(),params:Nr.loose().optional()}),rr=h({_meta:y4.optional()}),dn=M([I(),K().int()]),Le=P({jsonrpc:L(Wu),id:dn,...s.shape}).strict(),h4=(r)=>Le.safeParse(r).success,Ae=P({jsonrpc:L(Wu),...mr.shape}).strict(),Je=(r)=>Ae.safeParse(r).success,p4=P({jsonrpc:L(Wu),id:dn,result:rr}).strict(),et=(r)=>p4.safeParse(r).success;var E;(function(r){r[r.ConnectionClosed=-32000]=\\\"ConnectionClosed\\\",r[r.RequestTimeout=-32001]=\\\"RequestTimeout\\\",r[r.ParseError=-32700]=\\\"ParseError\\\",r[r.InvalidRequest=-32600]=\\\"InvalidRequest\\\",r[r.MethodNotFound=-32601]=\\\"MethodNotFound\\\",r[r.InvalidParams=-32602]=\\\"InvalidParams\\\",r[r.InternalError=-32603]=\\\"InternalError\\\",r[r.UrlElicitationRequired=-32042]=\\\"UrlElicitationRequired\\\"})(E||(E={}));var a4=P({jsonrpc:L(Wu),id:dn.optional(),error:P({code:K().int(),message:I(),data:x().optional()})}).strict();var We=(r)=>a4.safeParse(r).success;var Ve=M([Le,Ae,p4,a4]),q1=M([p4,a4]),Vu=rr.strict(),GU=Nr.extend({requestId:dn.optional(),reason:I().optional()}),Gu=mr.extend({method:L(\\\"notifications/cancelled\\\"),params:GU}),KU=P({src:I(),mimeType:I().optional(),sizes:V(I()).optional(),theme:p([\\\"light\\\",\\\"dark\\\"]).optional()}),_t=P({icons:V(KU).optional()}),fn=P({name:I(),title:I().optional()}),It=fn.extend({...fn.shape,..._t.shape,version:I(),websiteUrl:I().optional(),description:I().optional()}),BU=Nn(P({applyDefaults:C().optional()}),F(I(),x())),HU=Cn((r)=>{if(r&&typeof r===\\\"object\\\"&&!Array.isArray(r)){if(Object.keys(r).length===0)return{form:{}}}return r},Nn(P({form:BU.optional(),url:d.optional()}),F(I(),x()).optional())),FU=h({list:d.optional(),cancel:d.optional(),requests:h({sampling:h({createMessage:d.optional()}).optional(),elicitation:h({create:d.optional()}).optional()}).optional()}),EU=h({list:d.optional(),cancel:d.optional(),requests:h({tools:h({call:d.optional()}).optional()}).optional()}),TU=P({experimental:F(I(),d).optional(),sampling:P({context:d.optional(),tools:d.optional()}).optional(),elicitation:HU.optional(),roots:P({listChanged:C().optional()}).optional(),tasks:FU.optional(),extensions:F(I(),d).optional()}),xU=Dr.extend({protocolVersion:I(),capabilities:TU,clientInfo:It}),MU=s.extend({method:L(\\\"initialize\\\"),params:xU});var YU=P({experimental:F(I(),d).optional(),logging:d.optional(),completions:d.optional(),prompts:P({listChanged:C().optional()}).optional(),resources:P({subscribe:C().optional(),listChanged:C().optional()}).optional(),tools:P({listChanged:C().optional()}).optional(),tasks:EU.optional(),extensions:F(I(),d).optional()}),qU=rr.extend({protocolVersion:I(),capabilities:YU,serverInfo:It,instructions:I().optional()}),XU=mr.extend({method:L(\\\"notifications/initialized\\\"),params:Nr.optional()});var yn=s.extend({method:L(\\\"ping\\\"),params:Dr.optional()}),RU=P({progress:K(),total:q(K()),message:q(I())}),ZU=P({...Nr.shape,...RU.shape,progressToken:Se}),Ku=mr.extend({method:L(\\\"notifications/progress\\\"),params:ZU}),QU=Dr.extend({cursor:Pe.optional()}),Ut=s.extend({params:QU.optional()}),Dt=rr.extend({nextCursor:Pe.optional()}),CU=p([\\\"working\\\",\\\"input_required\\\",\\\"completed\\\",\\\"failed\\\",\\\"cancelled\\\"]),wt=P({taskId:I(),status:CU,ttl:M([K(),xn()]),createdAt:I(),lastUpdatedAt:I(),pollInterval:q(K()),statusMessage:q(I())}),Bu=rr.extend({task:wt}),fU=Nr.merge(wt),kt=mr.extend({method:L(\\\"notifications/tasks/status\\\"),params:fU}),Hu=s.extend({method:L(\\\"tasks/get\\\"),params:Dr.extend({taskId:I()})}),Fu=rr.merge(wt),Eu=s.extend({method:L(\\\"tasks/result\\\"),params:Dr.extend({taskId:I()})}),X1=rr.loose(),Tu=Ut.extend({method:L(\\\"tasks/list\\\")}),xu=Dt.extend({tasks:V(wt)}),Mu=s.extend({method:L(\\\"tasks/cancel\\\"),params:Dr.extend({taskId:I()})}),Ge=rr.merge(wt),Ke=P({uri:I(),mimeType:q(I()),_meta:F(I(),x()).optional()}),Be=Ke.extend({text:I()}),s4=I().refine((r)=>{try{return atob(r),!0}catch{return!1}},{message:\\\"Invalid Base64 string\\\"}),He=Ke.extend({blob:s4}),Nt=p([\\\"user\\\",\\\"assistant\\\"]),hn=P({audience:V(Nt).optional(),priority:K().min(0).max(1).optional(),lastModified:Kr.datetime({offset:!0}).optional()}),Fe=P({...fn.shape,..._t.shape,uri:I(),description:q(I()),mimeType:q(I()),size:q(K()),annotations:hn.optional(),_meta:q(h({}))}),dU=P({...fn.shape,..._t.shape,uriTemplate:I(),description:q(I()),mimeType:q(I()),annotations:hn.optional(),_meta:q(h({}))}),yU=Ut.extend({method:L(\\\"resources/list\\\")}),r6=Dt.extend({resources:V(Fe)}),hU=Ut.extend({method:L(\\\"resources/templates/list\\\")}),pU=Dt.extend({resourceTemplates:V(dU)}),n6=Dr.extend({uri:I()}),aU=n6,sU=s.extend({method:L(\\\"resources/read\\\"),params:aU}),i6=rr.extend({contents:V(M([Be,He]))}),rD=mr.extend({method:L(\\\"notifications/resources/list_changed\\\"),params:Nr.optional()}),nD=n6,iD=s.extend({method:L(\\\"resources/subscribe\\\"),params:nD}),tD=n6,vD=s.extend({method:L(\\\"resources/unsubscribe\\\"),params:tD}),uD=Nr.extend({uri:I()}),oD=mr.extend({method:L(\\\"notifications/resources/updated\\\"),params:uD}),$D=P({name:I(),description:q(I()),required:q(C())}),gD=P({...fn.shape,..._t.shape,description:q(I()),arguments:q(V($D)),_meta:q(h({}))}),lD=Ut.extend({method:L(\\\"prompts/list\\\")}),bD=Dt.extend({prompts:V(gD)}),cD=Dr.extend({name:I(),arguments:F(I(),I()).optional()}),eD=s.extend({method:L(\\\"prompts/get\\\"),params:cD}),t6=P({type:L(\\\"text\\\"),text:I(),annotations:hn.optional(),_meta:F(I(),x()).optional()}),v6=P({type:L(\\\"image\\\"),data:s4,mimeType:I(),annotations:hn.optional(),_meta:F(I(),x()).optional()}),u6=P({type:L(\\\"audio\\\"),data:s4,mimeType:I(),annotations:hn.optional(),_meta:F(I(),x()).optional()}),_D=P({type:L(\\\"tool_use\\\"),name:I(),id:I(),input:F(I(),x()),_meta:F(I(),x()).optional()}),o6=P({type:L(\\\"resource\\\"),resource:M([Be,He]),annotations:hn.optional(),_meta:F(I(),x()).optional()}),$6=Fe.extend({type:L(\\\"resource_link\\\")}),pn=M([t6,v6,u6,$6,o6]),ID=P({role:Nt,content:pn}),UD=rr.extend({description:I().optional(),messages:V(ID)}),DD=mr.extend({method:L(\\\"notifications/prompts/list_changed\\\"),params:Nr.optional()}),wD=P({title:I().optional(),readOnlyHint:C().optional(),destructiveHint:C().optional(),idempotentHint:C().optional(),openWorldHint:C().optional()}),kD=P({taskSupport:p([\\\"required\\\",\\\"optional\\\",\\\"forbidden\\\"]).optional()}),Yu=P({...fn.shape,..._t.shape,description:I().optional(),inputSchema:P({type:L(\\\"object\\\"),properties:F(I(),d).optional(),required:V(I()).optional()}).catchall(x()),outputSchema:P({type:L(\\\"object\\\"),properties:F(I(),d).optional(),required:V(I()).optional()}).catchall(x()).optional(),annotations:wD.optional(),execution:kD.optional(),_meta:F(I(),x()).optional()}),g6=Ut.extend({method:L(\\\"tools/list\\\")}),ND=Dt.extend({tools:V(Yu)}),an=rr.extend({content:V(pn).default([]),structuredContent:F(I(),x()).optional(),isError:C().optional()}),R1=an.or(rr.extend({toolResult:x()})),mD=ct.extend({name:I(),arguments:F(I(),x()).optional()}),l6=s.extend({method:L(\\\"tools/call\\\"),params:mD}),zD=mr.extend({method:L(\\\"notifications/tools/list_changed\\\"),params:Nr.optional()}),Z1=P({autoRefresh:C().default(!0),debounceMs:K().int().nonnegative().default(300)}),Ee=p([\\\"debug\\\",\\\"info\\\",\\\"notice\\\",\\\"warning\\\",\\\"error\\\",\\\"critical\\\",\\\"alert\\\",\\\"emergency\\\"]),OD=Dr.extend({level:Ee}),SD=s.extend({method:L(\\\"logging/setLevel\\\"),params:OD}),PD=Nr.extend({level:Ee,logger:I().optional(),data:x()}),jD=mr.extend({method:L(\\\"notifications/message\\\"),params:PD}),LD=P({name:I().optional()}),AD=P({hints:V(LD).optional(),costPriority:K().min(0).max(1).optional(),speedPriority:K().min(0).max(1).optional(),intelligencePriority:K().min(0).max(1).optional()}),JD=P({mode:p([\\\"auto\\\",\\\"required\\\",\\\"none\\\"]).optional()}),WD=P({type:L(\\\"tool_result\\\"),toolUseId:I().describe(\\\"The unique identifier for the corresponding tool call.\\\"),content:V(pn).default([]),structuredContent:P({}).loose().optional(),isError:C().optional(),_meta:F(I(),x()).optional()}),VD=Xn(\\\"type\\\",[t6,v6,u6]),Ju=Xn(\\\"type\\\",[t6,v6,u6,_D,WD]),GD=P({role:Nt,content:M([Ju,V(Ju)]),_meta:F(I(),x()).optional()}),KD=ct.extend({messages:V(GD),modelPreferences:AD.optional(),systemPrompt:I().optional(),includeContext:p([\\\"none\\\",\\\"thisServer\\\",\\\"allServers\\\"]).optional(),temperature:K().optional(),maxTokens:K().int(),stopSequences:V(I()).optional(),metadata:d.optional(),tools:V(Yu).optional(),toolChoice:JD.optional()}),BD=s.extend({method:L(\\\"sampling/createMessage\\\"),params:KD}),b6=rr.extend({model:I(),stopReason:q(p([\\\"endTurn\\\",\\\"stopSequence\\\",\\\"maxTokens\\\"]).or(I())),role:Nt,content:VD}),c6=rr.extend({model:I(),stopReason:q(p([\\\"endTurn\\\",\\\"stopSequence\\\",\\\"maxTokens\\\",\\\"toolUse\\\"]).or(I())),role:Nt,content:M([Ju,V(Ju)])}),HD=P({type:L(\\\"boolean\\\"),title:I().optional(),description:I().optional(),default:C().optional()}),FD=P({type:L(\\\"string\\\"),title:I().optional(),description:I().optional(),minLength:K().optional(),maxLength:K().optional(),format:p([\\\"email\\\",\\\"uri\\\",\\\"date\\\",\\\"date-time\\\"]).optional(),default:I().optional()}),ED=P({type:p([\\\"number\\\",\\\"integer\\\"]),title:I().optional(),description:I().optional(),minimum:K().optional(),maximum:K().optional(),default:K().optional()}),TD=P({type:L(\\\"string\\\"),title:I().optional(),description:I().optional(),enum:V(I()),default:I().optional()}),xD=P({type:L(\\\"string\\\"),title:I().optional(),description:I().optional(),oneOf:V(P({const:I(),title:I()})),default:I().optional()}),MD=P({type:L(\\\"string\\\"),title:I().optional(),description:I().optional(),enum:V(I()),enumNames:V(I()).optional(),default:I().optional()}),YD=M([TD,xD]),qD=P({type:L(\\\"array\\\"),title:I().optional(),description:I().optional(),minItems:K().optional(),maxItems:K().optional(),items:P({type:L(\\\"string\\\"),enum:V(I())}),default:V(I()).optional()}),XD=P({type:L(\\\"array\\\"),title:I().optional(),description:I().optional(),minItems:K().optional(),maxItems:K().optional(),items:P({anyOf:V(P({const:I(),title:I()}))}),default:V(I()).optional()}),RD=M([qD,XD]),ZD=M([MD,YD,RD]),QD=M([ZD,HD,FD,ED]),CD=ct.extend({mode:L(\\\"form\\\").optional(),message:I(),requestedSchema:P({type:L(\\\"object\\\"),properties:F(I(),QD),required:V(I()).optional()})}),fD=ct.extend({mode:L(\\\"url\\\"),message:I(),elicitationId:I(),url:I().url()}),dD=M([CD,fD]),yD=s.extend({method:L(\\\"elicitation/create\\\"),params:dD}),hD=Nr.extend({elicitationId:I()}),pD=mr.extend({method:L(\\\"notifications/elicitation/complete\\\"),params:hD}),aD=rr.extend({action:p([\\\"accept\\\",\\\"decline\\\",\\\"cancel\\\"]),content:Cn((r)=>r===null?void 0:r,F(I(),M([I(),K(),C(),V(I())])).optional())}),sD=P({type:L(\\\"ref/resource\\\"),uri:I()});var rw=P({type:L(\\\"ref/prompt\\\"),name:I()}),nw=Dr.extend({ref:M([rw,sD]),argument:P({name:I(),value:I()}),context:P({arguments:F(I(),I()).optional()}).optional()}),iw=s.extend({method:L(\\\"completion/complete\\\"),params:nw});var tw=rr.extend({completion:h({values:V(I()).max(100),total:q(K().int()),hasMore:q(C())})}),vw=P({uri:I().startsWith(\\\"file://\\\"),name:I().optional(),_meta:F(I(),x()).optional()}),uw=s.extend({method:L(\\\"roots/list\\\"),params:Dr.optional()}),ow=rr.extend({roots:V(vw)}),$w=mr.extend({method:L(\\\"notifications/roots/list_changed\\\"),params:Nr.optional()}),Q1=M([yn,MU,iw,SD,eD,lD,yU,hU,sU,iD,vD,l6,g6,Hu,Eu,Tu,Mu]),C1=M([Gu,Ku,XU,$w,kt]),f1=M([Vu,b6,c6,aD,ow,Fu,xu,Bu]),d1=M([yn,BD,yD,uw,Hu,Eu,Tu,Mu]),y1=M([Gu,Ku,jD,oD,rD,zD,DD,kt,pD]),h1=M([Vu,qU,tw,UD,bD,r6,pU,i6,an,ND,Fu,xu,Bu]);class B extends Error{constructor(r,i,v){super(`MCP error ${r}: ${i}`);this.code=r,this.data=v,this.name=\\\"McpError\\\"}static fromError(r,i,v){if(r===E.UrlElicitationRequired&&v){let u=v;if(u.elicitations)return new Te(u.elicitations,i)}return new B(r,i,v)}}class Te extends B{constructor(r,i=`URL elicitation${r.length>1?\\\"s\\\":\\\"\\\"} required`){super(E.UrlElicitationRequired,i,{elicitations:r})}get elicitations(){return this.data?.elicitations??[]}}function Cr(r){return r===\\\"completed\\\"||r===\\\"failed\\\"||r===\\\"cancelled\\\"}var gw=Symbol(\\\"Let zodToJsonSchema decide on which parser to use\\\");var Wm=new Set(\\\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\\\");function e6(r){let v=be(r)?.method;if(!v)throw Error(\\\"Schema is missing a method literal\\\");let u=ce(v);if(typeof u!==\\\"string\\\")throw Error(\\\"Schema method literal must be a string\\\");return u}function _6(r,i){let v=Pv(r,i);if(!v.success)throw v.error;return v.data}var Iw=60000;class I6{constructor(r){if(this._options=r,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(Gu,(i)=>{this._oncancel(i)}),this.setNotificationHandler(Ku,(i)=>{this._onprogress(i)}),this.setRequestHandler(yn,(i)=>({})),this._taskStore=r?.taskStore,this._taskMessageQueue=r?.taskMessageQueue,this._taskStore)this.setRequestHandler(Hu,async(i,v)=>{let u=await this._taskStore.getTask(i.params.taskId,v.sessionId);if(!u)throw new B(E.InvalidParams,\\\"Failed to retrieve task: Task not found\\\");return{...u}}),this.setRequestHandler(Eu,async(i,v)=>{let u=async()=>{let n=i.params.taskId;if(this._taskMessageQueue){let o;while(o=await this._taskMessageQueue.dequeue(n,v.sessionId)){if(o.type===\\\"response\\\"||o.type===\\\"error\\\"){let $=o.message,b=$.id,g=this._requestResolvers.get(b);if(g)if(this._requestResolvers.delete(b),o.type===\\\"response\\\")g($);else{let c=$,U=new B(c.error.code,c.error.message,c.error.data);g(U)}else{let c=o.type===\\\"response\\\"?\\\"Response\\\":\\\"Error\\\";this._onerror(Error(`${c} handler missing for request ${b}`))}continue}await this._transport?.send(o.message,{relatedRequestId:v.requestId})}}let t=await this._taskStore.getTask(n,v.sessionId);if(!t)throw new B(E.InvalidParams,`Task not found: ${n}`);if(!Cr(t.status))return await this._waitForTaskUpdate(n,v.signal),await u();if(Cr(t.status)){let o=await this._taskStore.getTaskResult(n,v.sessionId);return this._clearTaskQueue(n),{...o,_meta:{...o._meta,[Qr]:{taskId:n}}}}return await u()};return await u()}),this.setRequestHandler(Tu,async(i,v)=>{try{let{tasks:u,nextCursor:n}=await this._taskStore.listTasks(i.params?.cursor,v.sessionId);return{tasks:u,nextCursor:n,_meta:{}}}catch(u){throw new B(E.InvalidParams,`Failed to list tasks: ${u instanceof Error?u.message:String(u)}`)}}),this.setRequestHandler(Mu,async(i,v)=>{try{let u=await this._taskStore.getTask(i.params.taskId,v.sessionId);if(!u)throw new B(E.InvalidParams,`Task not found: ${i.params.taskId}`);if(Cr(u.status))throw new B(E.InvalidParams,`Cannot cancel task in terminal status: ${u.status}`);await this._taskStore.updateTaskStatus(i.params.taskId,\\\"cancelled\\\",\\\"Client cancelled task execution.\\\",v.sessionId),this._clearTaskQueue(i.params.taskId);let n=await this._taskStore.getTask(i.params.taskId,v.sessionId);if(!n)throw new B(E.InvalidParams,`Task not found after cancellation: ${i.params.taskId}`);return{_meta:{},...n}}catch(u){if(u instanceof B)throw u;throw new B(E.InvalidRequest,`Failed to cancel task: ${u instanceof Error?u.message:String(u)}`)}})}async _oncancel(r){if(!r.params.requestId)return;this._requestHandlerAbortControllers.get(r.params.requestId)?.abort(r.params.reason)}_setupTimeout(r,i,v,u,n=!1){this._timeoutInfo.set(r,{timeoutId:setTimeout(u,i),startTime:Date.now(),timeout:i,maxTotalTimeout:v,resetTimeoutOnProgress:n,onTimeout:u})}_resetTimeout(r){let i=this._timeoutInfo.get(r);if(!i)return!1;let v=Date.now()-i.startTime;if(i.maxTotalTimeout&&v>=i.maxTotalTimeout)throw this._timeoutInfo.delete(r),B.fromError(E.RequestTimeout,\\\"Maximum total timeout exceeded\\\",{maxTotalTimeout:i.maxTotalTimeout,totalElapsed:v});return clearTimeout(i.timeoutId),i.timeoutId=setTimeout(i.onTimeout,i.timeout),!0}_cleanupTimeout(r){let i=this._timeoutInfo.get(r);if(i)clearTimeout(i.timeoutId),this._timeoutInfo.delete(r)}async connect(r){if(this._transport)throw Error(\\\"Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.\\\");this._transport=r;let i=this.transport?.onclose;this._transport.onclose=()=>{i?.(),this._onclose()};let v=this.transport?.onerror;this._transport.onerror=(n)=>{v?.(n),this._onerror(n)};let u=this._transport?.onmessage;this._transport.onmessage=(n,t)=>{if(u?.(n,t),et(n)||We(n))this._onresponse(n);else if(h4(n))this._onrequest(n,t);else if(Je(n))this._onnotification(n);else this._onerror(Error(`Unknown message type: ${JSON.stringify(n)}`))},await this._transport.start()}_onclose(){let r=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();for(let v of this._timeoutInfo.values())clearTimeout(v.timeoutId);this._timeoutInfo.clear();for(let v of this._requestHandlerAbortControllers.values())v.abort();this._requestHandlerAbortControllers.clear();let i=B.fromError(E.ConnectionClosed,\\\"Connection closed\\\");this._transport=void 0,this.onclose?.();for(let v of r.values())v(i)}_onerror(r){this.onerror?.(r)}_onnotification(r){let i=this._notificationHandlers.get(r.method)??this.fallbackNotificationHandler;if(i===void 0)return;Promise.resolve().then(()=>i(r)).catch((v)=>this._onerror(Error(`Uncaught error in notification handler: ${v}`)))}_onrequest(r,i){let v=this._requestHandlers.get(r.method)??this.fallbackRequestHandler,u=this._transport,n=r.params?._meta?.[Qr]?.taskId;if(v===void 0){let g={jsonrpc:\\\"2.0\\\",id:r.id,error:{code:E.MethodNotFound,message:\\\"Method not found\\\"}};if(n&&this._taskMessageQueue)this._enqueueTaskMessage(n,{type:\\\"error\\\",message:g,timestamp:Date.now()},u?.sessionId).catch((c)=>this._onerror(Error(`Failed to enqueue error response: ${c}`)));else u?.send(g).catch((c)=>this._onerror(Error(`Failed to send an error response: ${c}`)));return}let t=new AbortController;this._requestHandlerAbortControllers.set(r.id,t);let o=je(r.params)?r.params.task:void 0,$=this._taskStore?this.requestTaskStore(r,u?.sessionId):void 0,b={signal:t.signal,sessionId:u?.sessionId,_meta:r.params?._meta,sendNotification:async(g)=>{if(t.signal.aborted)return;let c={relatedRequestId:r.id};if(n)c.relatedTask={taskId:n};await this.notification(g,c)},sendRequest:async(g,c,U)=>{if(t.signal.aborted)throw new B(E.ConnectionClosed,\\\"Request was cancelled\\\");let w={...U,relatedRequestId:r.id};if(n&&!w.relatedTask)w.relatedTask={taskId:n};let m=w.relatedTask?.taskId??n;if(m&&$)await $.updateTaskStatus(m,\\\"input_required\\\");return await this.request(g,c,w)},authInfo:i?.authInfo,requestId:r.id,requestInfo:i?.requestInfo,taskId:n,taskStore:$,taskRequestedTtl:o?.ttl,closeSSEStream:i?.closeSSEStream,closeStandaloneSSEStream:i?.closeStandaloneSSEStream};Promise.resolve().then(()=>{if(o)this.assertTaskHandlerCapability(r.method)}).then(()=>v(r,b)).then(async(g)=>{if(t.signal.aborted)return;let c={result:g,jsonrpc:\\\"2.0\\\",id:r.id};if(n&&this._taskMessageQueue)await this._enqueueTaskMessage(n,{type:\\\"response\\\",message:c,timestamp:Date.now()},u?.sessionId);else await u?.send(c)},async(g)=>{if(t.signal.aborted)return;let c={jsonrpc:\\\"2.0\\\",id:r.id,error:{code:Number.isSafeInteger(g.code)?g.code:E.InternalError,message:g.message??\\\"Internal error\\\",...g.data!==void 0&&{data:g.data}}};if(n&&this._taskMessageQueue)await this._enqueueTaskMessage(n,{type:\\\"error\\\",message:c,timestamp:Date.now()},u?.sessionId);else await u?.send(c)}).catch((g)=>this._onerror(Error(`Failed to send response: ${g}`))).finally(()=>{if(this._requestHandlerAbortControllers.get(r.id)===t)this._requestHandlerAbortControllers.delete(r.id)})}_onprogress(r){let{progressToken:i,...v}=r.params,u=Number(i),n=this._progressHandlers.get(u);if(!n){this._onerror(Error(`Received a progress notification for an unknown token: ${JSON.stringify(r)}`));return}let t=this._responseHandlers.get(u),o=this._timeoutInfo.get(u);if(o&&t&&o.resetTimeoutOnProgress)try{this._resetTimeout(u)}catch($){this._responseHandlers.delete(u),this._progressHandlers.delete(u),this._cleanupTimeout(u),t($);return}n(v)}_onresponse(r){let i=Number(r.id),v=this._requestResolvers.get(i);if(v){if(this._requestResolvers.delete(i),et(r))v(r);else{let t=new B(r.error.code,r.error.message,r.error.data);v(t)}return}let u=this._responseHandlers.get(i);if(u===void 0){this._onerror(Error(`Received a response for an unknown message ID: ${JSON.stringify(r)}`));return}this._responseHandlers.delete(i),this._cleanupTimeout(i);let n=!1;if(et(r)&&r.result&&typeof r.result===\\\"object\\\"){let t=r.result;if(t.task&&typeof t.task===\\\"object\\\"){let o=t.task;if(typeof o.taskId===\\\"string\\\")n=!0,this._taskProgressTokens.set(o.taskId,i)}}if(!n)this._progressHandlers.delete(i);if(et(r))u(r);else{let t=B.fromError(r.error.code,r.error.message,r.error.data);u(t)}}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(r,i,v){let{task:u}=v??{};if(!u){try{yield{type:\\\"result\\\",result:await this.request(r,i,v)}}catch(t){yield{type:\\\"error\\\",error:t instanceof B?t:new B(E.InternalError,String(t))}}return}let n;try{let t=await this.request(r,Bu,v);if(t.task)n=t.task.taskId,yield{type:\\\"taskCreated\\\",task:t.task};else throw new B(E.InternalError,\\\"Task creation did not return a task\\\");while(!0){let o=await this.getTask({taskId:n},v);if(yield{type:\\\"taskStatus\\\",task:o},Cr(o.status)){if(o.status===\\\"completed\\\")yield{type:\\\"result\\\",result:await this.getTaskResult({taskId:n},i,v)};else if(o.status===\\\"failed\\\")yield{type:\\\"error\\\",error:new B(E.InternalError,`Task ${n} failed`)};else if(o.status===\\\"cancelled\\\")yield{type:\\\"error\\\",error:new B(E.InternalError,`Task ${n} was cancelled`)};return}if(o.status===\\\"input_required\\\"){yield{type:\\\"result\\\",result:await this.getTaskResult({taskId:n},i,v)};return}let $=o.pollInterval??this._options?.defaultTaskPollInterval??1000;await new Promise((b)=>setTimeout(b,$)),v?.signal?.throwIfAborted()}}catch(t){yield{type:\\\"error\\\",error:t instanceof B?t:new B(E.InternalError,String(t))}}}request(r,i,v){let{relatedRequestId:u,resumptionToken:n,onresumptiontoken:t,task:o,relatedTask:$}=v??{};return new Promise((b,g)=>{let c=(f)=>{g(f)};if(!this._transport){c(Error(\\\"Not connected\\\"));return}if(this._options?.enforceStrictCapabilities===!0)try{if(this.assertCapabilityForMethod(r.method),o)this.assertTaskCapability(r.method)}catch(f){c(f);return}v?.signal?.throwIfAborted();let U=this._requestMessageId++,w={...r,jsonrpc:\\\"2.0\\\",id:U};if(v?.onprogress)this._progressHandlers.set(U,v.onprogress),w.params={...r.params,_meta:{...r.params?._meta||{},progressToken:U}};if(o)w.params={...w.params,task:o};if($)w.params={...w.params,_meta:{...w.params?._meta||{},[Qr]:$}};let m=(f)=>{this._responseHandlers.delete(U),this._progressHandlers.delete(U),this._cleanupTimeout(U),this._transport?.send({jsonrpc:\\\"2.0\\\",method:\\\"notifications/cancelled\\\",params:{requestId:U,reason:String(f)}},{relatedRequestId:u,resumptionToken:n,onresumptiontoken:t}).catch((or)=>this._onerror(Error(`Failed to send cancellation: ${or}`)));let Ur=f instanceof B?f:new B(E.RequestTimeout,String(f));g(Ur)};this._responseHandlers.set(U,(f)=>{if(v?.signal?.aborted)return;if(f instanceof Error)return g(f);try{let Ur=Pv(i,f.result);if(!Ur.success)g(Ur.error);else b(Ur.data)}catch(Ur){g(Ur)}}),v?.signal?.addEventListener(\\\"abort\\\",()=>{m(v?.signal?.reason)});let A=v?.timeout??Iw,ir=()=>m(B.fromError(E.RequestTimeout,\\\"Request timed out\\\",{timeout:A}));this._setupTimeout(U,A,v?.maxTotalTimeout,ir,v?.resetTimeoutOnProgress??!1);let R=$?.taskId;if(R){let f=(Ur)=>{let or=this._responseHandlers.get(U);if(or)or(Ur);else this._onerror(Error(`Response handler missing for side-channeled request ${U}`))};this._requestResolvers.set(U,f),this._enqueueTaskMessage(R,{type:\\\"request\\\",message:w,timestamp:Date.now()}).catch((Ur)=>{this._cleanupTimeout(U),g(Ur)})}else this._transport.send(w,{relatedRequestId:u,resumptionToken:n,onresumptiontoken:t}).catch((f)=>{this._cleanupTimeout(U),g(f)})})}async getTask(r,i){return this.request({method:\\\"tasks/get\\\",params:r},Fu,i)}async getTaskResult(r,i,v){return this.request({method:\\\"tasks/result\\\",params:r},i,v)}async listTasks(r,i){return this.request({method:\\\"tasks/list\\\",params:r},xu,i)}async cancelTask(r,i){return this.request({method:\\\"tasks/cancel\\\",params:r},Ge,i)}async notification(r,i){if(!this._transport)throw Error(\\\"Not connected\\\");this.assertNotificationCapability(r.method);let v=i?.relatedTask?.taskId;if(v){let o={...r,jsonrpc:\\\"2.0\\\",params:{...r.params,_meta:{...r.params?._meta||{},[Qr]:i.relatedTask}}};await this._enqueueTaskMessage(v,{type:\\\"notification\\\",message:o,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(r.method)&&!r.params&&!i?.relatedRequestId&&!i?.relatedTask){if(this._pendingDebouncedNotifications.has(r.method))return;this._pendingDebouncedNotifications.add(r.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(r.method),!this._transport)return;let o={...r,jsonrpc:\\\"2.0\\\"};if(i?.relatedTask)o={...o,params:{...o.params,_meta:{...o.params?._meta||{},[Qr]:i.relatedTask}}};this._transport?.send(o,i).catch(($)=>this._onerror($))});return}let t={...r,jsonrpc:\\\"2.0\\\"};if(i?.relatedTask)t={...t,params:{...t.params,_meta:{...t.params?._meta||{},[Qr]:i.relatedTask}}};await this._transport.send(t,i)}setRequestHandler(r,i){let v=e6(r);this.assertRequestHandlerCapability(v),this._requestHandlers.set(v,(u,n)=>{let t=_6(r,u);return Promise.resolve(i(t,n))})}removeRequestHandler(r){this._requestHandlers.delete(r)}assertCanSetRequestHandler(r){if(this._requestHandlers.has(r))throw Error(`A request handler for ${r} already exists, which would be overridden`)}setNotificationHandler(r,i){let v=e6(r);this._notificationHandlers.set(v,(u)=>{let n=_6(r,u);return Promise.resolve(i(n))})}removeNotificationHandler(r){this._notificationHandlers.delete(r)}_cleanupTaskProgressHandler(r){let i=this._taskProgressTokens.get(r);if(i!==void 0)this._progressHandlers.delete(i),this._taskProgressTokens.delete(r)}async _enqueueTaskMessage(r,i,v){if(!this._taskStore||!this._taskMessageQueue)throw Error(\\\"Cannot enqueue task message: taskStore and taskMessageQueue are not configured\\\");let u=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(r,i,v,u)}async _clearTaskQueue(r,i){if(this._taskMessageQueue){let v=await this._taskMessageQueue.dequeueAll(r,i);for(let u of v)if(u.type===\\\"request\\\"&&h4(u.message)){let n=u.message.id,t=this._requestResolvers.get(n);if(t)t(new B(E.InternalError,\\\"Task cancelled or completed\\\")),this._requestResolvers.delete(n);else this._onerror(Error(`Resolver missing for request ${n} during task ${r} cleanup`))}}}async _waitForTaskUpdate(r,i){let v=this._options?.defaultTaskPollInterval??1000;try{let u=await this._taskStore?.getTask(r);if(u?.pollInterval)v=u.pollInterval}catch{}return new Promise((u,n)=>{if(i.aborted){n(new B(E.InvalidRequest,\\\"Request cancelled\\\"));return}let t=setTimeout(u,v);i.addEventListener(\\\"abort\\\",()=>{clearTimeout(t),n(new B(E.InvalidRequest,\\\"Request cancelled\\\"))},{once:!0})})}requestTaskStore(r,i){let v=this._taskStore;if(!v)throw Error(\\\"No task store configured\\\");return{createTask:async(u)=>{if(!r)throw Error(\\\"No request provided\\\");return await v.createTask(u,r.id,{method:r.method,params:r.params},i)},getTask:async(u)=>{let n=await v.getTask(u,i);if(!n)throw new B(E.InvalidParams,\\\"Failed to retrieve task: Task not found\\\");return n},storeTaskResult:async(u,n,t)=>{await v.storeTaskResult(u,n,t,i);let o=await v.getTask(u,i);if(o){let $=kt.parse({method:\\\"notifications/tasks/status\\\",params:o});if(await this.notification($),Cr(o.status))this._cleanupTaskProgressHandler(u)}},getTaskResult:(u)=>{return v.getTaskResult(u,i)},updateTaskStatus:async(u,n,t)=>{let o=await v.getTask(u,i);if(!o)throw new B(E.InvalidParams,`Task \\\"${u}\\\" not found - it may have been cleaned up`);if(Cr(o.status))throw new B(E.InvalidParams,`Cannot update task \\\"${u}\\\" from terminal status \\\"${o.status}\\\" to \\\"${n}\\\". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await v.updateTaskStatus(u,n,t,i);let $=await v.getTask(u,i);if($){let b=kt.parse({method:\\\"notifications/tasks/status\\\",params:$});if(await this.notification(b),Cr($.status))this._cleanupTaskProgressHandler(u)}},listTasks:(u)=>{return v.listTasks(u,i)}}}}function xe(r){return r!==null&&typeof r===\\\"object\\\"&&!Array.isArray(r)}function Me(r,i){let v={...r};for(let u in i){let n=u,t=i[n];if(t===void 0)continue;let o=v[n];if(xe(o)&&xe(t))v[n]={...o,...t};else v[n]=t}return v}bt();bt();var AS=((r)=>__require)(function(r){return __require.apply(this,arguments)});class Re extends I6{_registeredMethods=new Set;_eventSlots=new Map;onEventDispatch(r,i){}_ensureEventSlot(r){let i=this._eventSlots.get(r);if(!i){let v=this.eventSchemas[r];if(!v)throw Error(`Unknown event: ${String(r)}`);i={listeners:[]},this._eventSlots.set(r,i);let u=v.shape.method.value;this._registeredMethods.add(u);let n=i;super.setNotificationHandler(v,(t)=>{let o=t.params;this.onEventDispatch(r,o),n.onHandler?.(o);for(let $ of[...n.listeners])$(o)})}return i}setEventHandler(r,i){let v=this._ensureEventSlot(r);if(v.onHandler&&i)console.warn(`[MCP Apps] on${String(r)} handler replaced. Use addEventListener(\\\"${String(r)}\\\", …) to add multiple listeners without replacing.`);v.onHandler=i}getEventHandler(r){return this._eventSlots.get(r)?.onHandler}addEventListener(r,i){this._ensureEventSlot(r).listeners.push(i)}removeEventListener(r,i){let v=this._eventSlots.get(r);if(!v)return;let u=v.listeners.indexOf(i);if(u!==-1)v.listeners.splice(u,1)}setRequestHandler=(r,i)=>{this._assertMethodNotRegistered(r,\\\"setRequestHandler\\\"),super.setRequestHandler(r,i)};setNotificationHandler=(r,i)=>{this._assertMethodNotRegistered(r,\\\"setNotificationHandler\\\"),super.setNotificationHandler(r,i)};warnIfRequestHandlerReplaced(r,i,v){if(i&&v)console.warn(`[MCP Apps] ${r} handler replaced. Previous handler will no longer be called.`)}replaceRequestHandler=(r,i)=>{let v=r.shape.method.value;this._registeredMethods.add(v),super.setRequestHandler(r,i)};_assertMethodNotRegistered(r,i){let v=r.shape.method.value;if(this._registeredMethods.has(v))throw Error(`Handler for \\\"${v}\\\" already registered (via ${i}). Use addEventListener() to attach multiple listeners, or the on* setter for replace semantics.`);this._registeredMethods.add(v)}}var Uw=\\\"2026-01-26\\\";var Dw=\\\"ui/notifications/tool-input-partial\\\";class Ze{eventTarget;eventSource;messageListener;constructor(r=window.parent,i){this.eventTarget=r,this.eventSource=i,this.messageListener=(v)=>{if(i&&v.source!==this.eventSource){console.debug(\\\"Ignoring message from unknown source\\\",v);return}let u=Ve.safeParse(v.data);if(u.success)console.debug(\\\"Parsed message\\\",u.data),this.onmessage?.(u.data);else if(v.data?.jsonrpc!==\\\"2.0\\\")console.debug(\\\"Ignoring non-JSON-RPC message\\\",u.error.message,v);else console.error(\\\"Failed to parse message\\\",u.error.message,v),this.onerror?.(Error(\\\"Invalid JSON-RPC message received: \\\"+u.error.message))}}async start(){window.addEventListener(\\\"message\\\",this.messageListener)}async send(r,i){if(r.method!==Dw)console.debug(\\\"Sending message\\\",r);this.eventTarget.postMessage(r,\\\"*\\\")}async close(){window.removeEventListener(\\\"message\\\",this.messageListener),this.onclose?.()}onclose;onerror;onmessage;sessionId;setProtocolVersion}var ww=l.union([l.literal(\\\"light\\\"),l.literal(\\\"dark\\\")]).describe(\\\"Color theme preference for the host environment.\\\"),zt=l.union([l.literal(\\\"inline\\\"),l.literal(\\\"fullscreen\\\"),l.literal(\\\"pip\\\")]).describe(\\\"Display mode for UI presentation.\\\"),kw=l.union([l.literal(\\\"--color-background-primary\\\"),l.literal(\\\"--color-background-secondary\\\"),l.literal(\\\"--color-background-tertiary\\\"),l.literal(\\\"--color-background-inverse\\\"),l.literal(\\\"--color-background-ghost\\\"),l.literal(\\\"--color-background-info\\\"),l.literal(\\\"--color-background-danger\\\"),l.literal(\\\"--color-background-success\\\"),l.literal(\\\"--color-background-warning\\\"),l.literal(\\\"--color-background-disabled\\\"),l.literal(\\\"--color-text-primary\\\"),l.literal(\\\"--color-text-secondary\\\"),l.literal(\\\"--color-text-tertiary\\\"),l.literal(\\\"--color-text-inverse\\\"),l.literal(\\\"--color-text-ghost\\\"),l.literal(\\\"--color-text-info\\\"),l.literal(\\\"--color-text-danger\\\"),l.literal(\\\"--color-text-success\\\"),l.literal(\\\"--color-text-warning\\\"),l.literal(\\\"--color-text-disabled\\\"),l.literal(\\\"--color-border-primary\\\"),l.literal(\\\"--color-border-secondary\\\"),l.literal(\\\"--color-border-tertiary\\\"),l.literal(\\\"--color-border-inverse\\\"),l.literal(\\\"--color-border-ghost\\\"),l.literal(\\\"--color-border-info\\\"),l.literal(\\\"--color-border-danger\\\"),l.literal(\\\"--color-border-success\\\"),l.literal(\\\"--color-border-warning\\\"),l.literal(\\\"--color-border-disabled\\\"),l.literal(\\\"--color-ring-primary\\\"),l.literal(\\\"--color-ring-secondary\\\"),l.literal(\\\"--color-ring-inverse\\\"),l.literal(\\\"--color-ring-info\\\"),l.literal(\\\"--color-ring-danger\\\"),l.literal(\\\"--color-ring-success\\\"),l.literal(\\\"--color-ring-warning\\\"),l.literal(\\\"--font-sans\\\"),l.literal(\\\"--font-mono\\\"),l.literal(\\\"--font-weight-normal\\\"),l.literal(\\\"--font-weight-medium\\\"),l.literal(\\\"--font-weight-semibold\\\"),l.literal(\\\"--font-weight-bold\\\"),l.literal(\\\"--font-text-xs-size\\\"),l.literal(\\\"--font-text-sm-size\\\"),l.literal(\\\"--font-text-md-size\\\"),l.literal(\\\"--font-text-lg-size\\\"),l.literal(\\\"--font-heading-xs-size\\\"),l.literal(\\\"--font-heading-sm-size\\\"),l.literal(\\\"--font-heading-md-size\\\"),l.literal(\\\"--font-heading-lg-size\\\"),l.literal(\\\"--font-heading-xl-size\\\"),l.literal(\\\"--font-heading-2xl-size\\\"),l.literal(\\\"--font-heading-3xl-size\\\"),l.literal(\\\"--font-text-xs-line-height\\\"),l.literal(\\\"--font-text-sm-line-height\\\"),l.literal(\\\"--font-text-md-line-height\\\"),l.literal(\\\"--font-text-lg-line-height\\\"),l.literal(\\\"--font-heading-xs-line-height\\\"),l.literal(\\\"--font-heading-sm-line-height\\\"),l.literal(\\\"--font-heading-md-line-height\\\"),l.literal(\\\"--font-heading-lg-line-height\\\"),l.literal(\\\"--font-heading-xl-line-height\\\"),l.literal(\\\"--font-heading-2xl-line-height\\\"),l.literal(\\\"--font-heading-3xl-line-height\\\"),l.literal(\\\"--border-radius-xs\\\"),l.literal(\\\"--border-radius-sm\\\"),l.literal(\\\"--border-radius-md\\\"),l.literal(\\\"--border-radius-lg\\\"),l.literal(\\\"--border-radius-xl\\\"),l.literal(\\\"--border-radius-full\\\"),l.literal(\\\"--border-width-regular\\\"),l.literal(\\\"--shadow-hairline\\\"),l.literal(\\\"--shadow-sm\\\"),l.literal(\\\"--shadow-md\\\"),l.literal(\\\"--shadow-lg\\\")]).describe(\\\"CSS variable keys available to MCP apps for theming.\\\"),Nw=l.record(kw.describe(`Style variables for theming MCP apps.\\n\\nIndividual style keys are optional - hosts may provide any subset of these values.\\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\\n\\nNote: This type uses \\\\`Record<K, string | undefined>\\\\` rather than \\\\`Partial<Record<K, string>>\\\\`\\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.`),l.union([l.string(),l.undefined()]).describe(`Style variables for theming MCP apps.\\n\\nIndividual style keys are optional - hosts may provide any subset of these values.\\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\\n\\nNote: This type uses \\\\`Record<K, string | undefined>\\\\` rather than \\\\`Partial<Record<K, string>>\\\\`\\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.`)).describe(`Style variables for theming MCP apps.\\n\\nIndividual style keys are optional - hosts may provide any subset of these values.\\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\\n\\nNote: This type uses \\\\`Record<K, string | undefined>\\\\` rather than \\\\`Partial<Record<K, string>>\\\\`\\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.`),HS=l.object({method:l.literal(\\\"ui/open-link\\\"),params:l.object({url:l.string().describe(\\\"URL to open in the host's browser\\\")})}),mw=l.object({isError:l.boolean().optional().describe(\\\"True if the host failed to open the URL (e.g., due to security policy).\\\")}).passthrough(),zw=l.object({isError:l.boolean().optional().describe(\\\"True if the download failed (e.g., user cancelled or host denied).\\\")}).passthrough(),Ow=l.object({isError:l.boolean().optional().describe(\\\"True if the host rejected or failed to deliver the message.\\\")}).passthrough(),FS=l.object({method:l.literal(\\\"ui/notifications/sandbox-proxy-ready\\\"),params:l.object({})}),U6=l.object({connectDomains:l.array(l.string()).optional().describe(`Origins for network requests (fetch/XHR/WebSocket).\\n\\n- Maps to CSP \\\\`connect-src\\\\` directive\\n- Empty or omitted → no network connections (secure default)`),resourceDomains:l.array(l.string()).optional().describe(\\\"Origins for static resources (images, scripts, stylesheets, fonts, media).\\\\n\\\\n- Maps to CSP `img-src`, `script-src`, `style-src`, `font-src`, `media-src` directives\\\\n- Wildcard subdomains supported: `https://*.example.com`\\\\n- Empty or omitted → no network resources (secure default)\\\"),frameDomains:l.array(l.string()).optional().describe(\\\"Origins for nested iframes.\\\\n\\\\n- Maps to CSP `frame-src` directive\\\\n- Empty or omitted → no nested iframes allowed (`frame-src 'none'`)\\\"),baseUriDomains:l.array(l.string()).optional().describe(\\\"Allowed base URIs for the document.\\\\n\\\\n- Maps to CSP `base-uri` directive\\\\n- Empty or omitted → only same origin allowed (`base-uri 'self'`)\\\")}),D6=l.object({camera:l.object({}).optional().describe(\\\"Request camera access.\\\\n\\\\nMaps to Permission Policy `camera` feature.\\\"),microphone:l.object({}).optional().describe(\\\"Request microphone access.\\\\n\\\\nMaps to Permission Policy `microphone` feature.\\\"),geolocation:l.object({}).optional().describe(\\\"Request geolocation access.\\\\n\\\\nMaps to Permission Policy `geolocation` feature.\\\"),clipboardWrite:l.object({}).optional().describe(\\\"Request clipboard write access.\\\\n\\\\nMaps to Permission Policy `clipboard-write` feature.\\\")}),ES=l.object({method:l.literal(\\\"ui/notifications/size-changed\\\"),params:l.object({width:l.number().optional().describe(\\\"New width in pixels.\\\"),height:l.number().optional().describe(\\\"New height in pixels.\\\")})}),Sw=l.object({method:l.literal(\\\"ui/notifications/tool-input\\\"),params:l.object({arguments:l.record(l.string(),l.unknown().describe(\\\"Complete tool call arguments as key-value pairs.\\\")).optional().describe(\\\"Complete tool call arguments as key-value pairs.\\\")})}),Pw=l.object({method:l.literal(\\\"ui/notifications/tool-input-partial\\\"),params:l.object({arguments:l.record(l.string(),l.unknown().describe(\\\"Partial tool call arguments (incomplete, may change).\\\")).optional().describe(\\\"Partial tool call arguments (incomplete, may change).\\\")})}),jw=l.object({method:l.literal(\\\"ui/notifications/tool-cancelled\\\"),params:l.object({reason:l.string().optional().describe('Optional reason for the cancellation (e.g., \\\"user action\\\", \\\"timeout\\\").')})}),Lw=l.object({fonts:l.string().optional()}),Aw=l.object({variables:Nw.optional().describe(\\\"CSS variables for theming the app.\\\"),css:Lw.optional().describe(\\\"CSS blocks that apps can inject.\\\")}),Jw=l.object({method:l.literal(\\\"ui/resource-teardown\\\"),params:l.object({})}),TS=l.record(l.string(),l.unknown()),Ye=l.object({text:l.object({}).optional().describe(\\\"Host supports text content blocks.\\\"),image:l.object({}).optional().describe(\\\"Host supports image content blocks.\\\"),audio:l.object({}).optional().describe(\\\"Host supports audio content blocks.\\\"),resource:l.object({}).optional().describe(\\\"Host supports resource content blocks.\\\"),resourceLink:l.object({}).optional().describe(\\\"Host supports resource link content blocks.\\\"),structuredContent:l.object({}).optional().describe(\\\"Host supports structured content.\\\")}),xS=l.object({method:l.literal(\\\"ui/notifications/request-teardown\\\"),params:l.object({}).optional()}),Ww=l.object({experimental:l.object({}).optional().describe(\\\"Experimental features (structure TBD).\\\"),openLinks:l.object({}).optional().describe(\\\"Host supports opening external URLs.\\\"),downloadFile:l.object({}).optional().describe(\\\"Host supports file downloads via ui/download-file.\\\"),serverTools:l.object({listChanged:l.boolean().optional().describe(\\\"Host supports tools/list_changed notifications.\\\")}).optional().describe(\\\"Host can proxy tool calls to the MCP server.\\\"),serverResources:l.object({listChanged:l.boolean().optional().describe(\\\"Host supports resources/list_changed notifications.\\\")}).optional().describe(\\\"Host can proxy resource reads to the MCP server.\\\"),logging:l.object({}).optional().describe(\\\"Host accepts log messages.\\\"),sandbox:l.object({permissions:D6.optional().describe(\\\"Permissions granted by the host (camera, microphone, geolocation).\\\"),csp:U6.optional().describe(\\\"CSP domains approved by the host.\\\")}).optional().describe(\\\"Sandbox configuration applied by the host.\\\"),updateModelContext:Ye.optional().describe(\\\"Host accepts context updates (ui/update-model-context) to be included in the model's context for future turns.\\\"),message:Ye.optional().describe(\\\"Host supports receiving content messages (ui/message) from the view.\\\"),sampling:l.object({tools:l.object({}).optional().describe(\\\"Host supports tool use via `tools` and `toolChoice` parameters.\\\")}).optional().describe(\\\"Host supports LLM sampling (sampling/createMessage) from the view.\\\\nMirrors the MCP `ClientCapabilities.sampling` shape so hosts can pass it through.\\\")}),Vw=l.object({experimental:l.object({}).optional().describe(\\\"Experimental features (structure TBD).\\\"),tools:l.object({listChanged:l.boolean().optional().describe(\\\"App supports tools/list_changed notifications.\\\")}).optional().describe(\\\"App exposes MCP-style tools that the host can call.\\\"),availableDisplayModes:l.array(zt).optional().describe(\\\"Display modes the app supports.\\\")}),MS=l.object({method:l.literal(\\\"ui/notifications/initialized\\\"),params:l.object({}).optional()}),YS=l.object({csp:U6.optional().describe(\\\"Content Security Policy configuration for UI resources.\\\"),permissions:D6.optional().describe(\\\"Sandbox permissions requested by the UI resource.\\\"),domain:l.string().optional().describe(`Dedicated origin for view sandbox.\\n\\nUseful when views need stable, dedicated origins for OAuth callbacks, CORS policies, or API key allowlists.\\n\\n**Host-dependent:** The format and validation rules for this field are determined by each host. Servers MUST consult host-specific documentation for the expected domain format. Common patterns include:\\n- Hash-based subdomains (e.g., \\\\`{hash}.claudemcpcontent.com\\\\`)\\n- URL-derived subdomains (e.g., \\\\`www-example-com.oaiusercontent.com\\\\`)\\n\\nIf omitted, host uses default sandbox origin (typically per-conversation).`),prefersBorder:l.boolean().optional().describe(`Visual boundary preference - true if view prefers a visible border.\\n\\nBoolean requesting whether a visible border and background is provided by the host. Specifying an explicit value for this is recommended because hosts' defaults may vary.\\n\\n- \\\\`true\\\\`: request visible border + background\\n- \\\\`false\\\\`: request no visible border + background\\n- omitted: host decides border`)}),qS=l.object({method:l.literal(\\\"ui/request-display-mode\\\"),params:l.object({mode:zt.describe(\\\"The display mode being requested.\\\")})}),Gw=l.object({mode:zt.describe(\\\"The display mode that was actually set. May differ from requested if not supported.\\\")}).passthrough(),Kw=l.union([l.literal(\\\"model\\\"),l.literal(\\\"app\\\")]).describe(\\\"Tool visibility scope - who can access the tool.\\\"),XS=l.object({resourceUri:l.string().optional(),visibility:l.array(Kw).optional().describe(`Who can access this tool. Default: [\\\"model\\\", \\\"app\\\"]\\n- \\\"model\\\": Tool visible to and callable by the agent\\n- \\\"app\\\": Tool callable by the app from this server only`),csp:l.never().optional(),permissions:l.never().optional()}),RS=l.object({mimeTypes:l.array(l.string()).optional().describe('Array of supported MIME types for UI resources.\\\\nMust include `\\\"text/html;profile=mcp-app\\\"` for MCP Apps support.')}),ZS=l.object({method:l.literal(\\\"ui/download-file\\\"),params:l.object({contents:l.array(l.union([o6,$6])).describe(\\\"Resource contents to download — embedded (inline data) or linked (host fetches). Uses standard MCP resource types.\\\")})}),QS=l.object({method:l.literal(\\\"ui/message\\\"),params:l.object({role:l.literal(\\\"user\\\").describe('Message role, currently only \\\"user\\\" is supported.'),content:l.array(pn).describe(\\\"Message content blocks (text, image, etc.).\\\")})}),CS=l.object({method:l.literal(\\\"ui/notifications/sandbox-resource-ready\\\"),params:l.object({html:l.string().describe(\\\"HTML content to load into the inner iframe.\\\"),sandbox:l.string().optional().describe(\\\"Optional override for the inner iframe's sandbox attribute.\\\"),csp:U6.optional().describe(\\\"CSP configuration from resource metadata.\\\"),permissions:D6.optional().describe(\\\"Sandbox permissions from resource metadata.\\\")})}),Bw=l.object({method:l.literal(\\\"ui/notifications/tool-result\\\"),params:an.describe(\\\"Standard MCP tool execution result.\\\")}),Qe=l.object({toolInfo:l.object({id:dn.optional().describe(\\\"JSON-RPC id of the tools/call request.\\\"),tool:Yu.describe(\\\"Tool definition including name, inputSchema, etc.\\\")}).optional().describe(\\\"Metadata of the tool call that instantiated this App.\\\"),theme:ww.optional().describe(\\\"Current color theme preference.\\\"),styles:Aw.optional().describe(\\\"Style configuration for theming the app.\\\"),displayMode:zt.optional().describe(\\\"How the UI is currently displayed.\\\"),availableDisplayModes:l.array(zt).optional().describe(\\\"Display modes the host supports.\\\"),containerDimensions:l.union([l.object({height:l.number().describe(\\\"Fixed container height in pixels.\\\")}),l.object({maxHeight:l.union([l.number(),l.undefined()]).optional().describe(\\\"Maximum container height in pixels.\\\")})]).and(l.union([l.object({width:l.number().describe(\\\"Fixed container width in pixels.\\\")}),l.object({maxWidth:l.union([l.number(),l.undefined()]).optional().describe(\\\"Maximum container width in pixels.\\\")})])).optional().describe(`Container dimensions. Represents the dimensions of the iframe or other\\ncontainer holding the app. Specify either width or maxWidth, and either height or maxHeight.`),locale:l.string().optional().describe(\\\"User's language and region preference in BCP 47 format.\\\"),timeZone:l.string().optional().describe(\\\"User's timezone in IANA format.\\\"),userAgent:l.string().optional().describe(\\\"Host application identifier.\\\"),platform:l.union([l.literal(\\\"web\\\"),l.literal(\\\"desktop\\\"),l.literal(\\\"mobile\\\")]).optional().describe(\\\"Platform type for responsive design decisions.\\\"),deviceCapabilities:l.object({touch:l.boolean().optional().describe(\\\"Whether the device supports touch input.\\\"),hover:l.boolean().optional().describe(\\\"Whether the device supports hover interactions.\\\")}).optional().describe(\\\"Device input capabilities.\\\"),safeAreaInsets:l.object({top:l.number().describe(\\\"Top safe area inset in pixels.\\\"),right:l.number().describe(\\\"Right safe area inset in pixels.\\\"),bottom:l.number().describe(\\\"Bottom safe area inset in pixels.\\\"),left:l.number().describe(\\\"Left safe area inset in pixels.\\\")}).optional().describe(\\\"Mobile safe area boundaries in pixels.\\\")}).passthrough(),Hw=l.object({method:l.literal(\\\"ui/notifications/host-context-changed\\\"),params:Qe.describe(\\\"Partial context update containing only changed fields.\\\")}),fS=l.object({method:l.literal(\\\"ui/update-model-context\\\"),params:l.object({content:l.array(pn).optional().describe(\\\"Context content blocks (text, image, etc.).\\\"),structuredContent:l.record(l.string(),l.unknown().describe(\\\"Structured content for machine-readable context data.\\\")).optional().describe(\\\"Structured content for machine-readable context data.\\\")})}),dS=l.object({method:l.literal(\\\"ui/initialize\\\"),params:l.object({appInfo:It.describe(\\\"App identification (name and version).\\\"),appCapabilities:Vw.describe(\\\"Features and capabilities this app provides.\\\"),protocolVersion:l.string().describe(\\\"Protocol version this app supports.\\\")})}),Fw=l.object({protocolVersion:l.string().describe('Negotiated protocol version string (e.g., \\\"2025-11-21\\\").'),hostInfo:It.describe(\\\"Host application identification and version.\\\"),hostCapabilities:Ww.describe(\\\"Features and capabilities provided by the host.\\\"),hostContext:Qe.describe(\\\"Rich context about the host environment.\\\")}).passthrough(),Ew={target:\\\"draft-2020-12\\\"};async function qe(r,i){let v=r[\\\"~standard\\\"];if(v.jsonSchema)return v.jsonSchema[i](Ew);if(v.vendor===\\\"zod\\\"){let{z:u}=await Promise.resolve().then(() => (bt(),d4));return u.toJSONSchema(r,{io:i})}throw Error(`Schema (vendor: ${v.vendor}) does not implement Standard JSON Schema (~standard.jsonSchema). Use a library that does (zod v4, ArkType, Valibot) or wrap your schema accordingly.`)}async function Xe(r,i,v=\\\"\\\"){let u=await r[\\\"~standard\\\"].validate(i);if(u.issues){let n=u.issues.map((t)=>{let o=t.path?.map(($)=>typeof $===\\\"object\\\"?$.key:$).join(\\\".\\\");return o?`${o}: ${t.message}`:t.message}).join(\\\"; \\\");throw Error(v+n)}return u.value}function Ce(r){let i=document.documentElement;i.setAttribute(\\\"data-theme\\\",r),i.style.colorScheme=r}function fe(r){if(document.getElementById(\\\"__mcp-host-fonts\\\"))return;let i=document.createElement(\\\"style\\\");i.id=\\\"__mcp-host-fonts\\\",i.textContent=r,document.head.appendChild(i)}class qu extends Re{_appInfo;_capabilities;options;_hostCapabilities;_hostInfo;_hostContext;_registeredTools={};_initializedSent=!1;_assertInitialized(r){if(this._initializedSent)return;let i=`[ext-apps] App.${r}() called before connect() completed the ui/initialize handshake. Await app.connect() before calling this method, or move data loading to an ontoolresult handler.`;if(this.options?.strict)throw Error(i);console.warn(`${i}. This will throw in a future release.`)}eventSchemas={toolinput:Sw,toolinputpartial:Pw,toolresult:Bw,toolcancelled:jw,hostcontextchanged:Hw};static ONE_SHOT_EVENTS=new Set([\\\"toolinput\\\",\\\"toolinputpartial\\\",\\\"toolresult\\\",\\\"toolcancelled\\\"]);_everHadListener=new Set;_assertHandlerTiming(r){if(!qu.ONE_SHOT_EVENTS.has(r)||this._everHadListener.has(r))return;if(this._everHadListener.add(r),!this._initializedSent)return;let i=`[ext-apps] \\\"${String(r)}\\\" handler registered after connect() completed the ui/initialize handshake. The host may have already sent this notification. Register handlers before calling app.connect().`;if(this.options?.strict)throw Error(i);console.warn(i)}setEventHandler(r,i){if(i)this._assertHandlerTiming(r);super.setEventHandler(r,i)}addEventListener(r,i){this._assertHandlerTiming(r),super.addEventListener(r,i)}onEventDispatch(r,i){if(r===\\\"hostcontextchanged\\\")this._hostContext={...this._hostContext,...i}}constructor(r,i={},v={autoResize:!0}){super(v);if(this._appInfo=r,this._capabilities=i,this.options=v,!v.allowUnsafeEval)l.config({jitless:!0});this.setRequestHandler(yn,(u)=>{return console.log(\\\"Received ping:\\\",u.params),{}}),this.setEventHandler(\\\"hostcontextchanged\\\",void 0)}registerCapabilities(r){if(this.transport)throw Error(\\\"Cannot register capabilities after transport is established\\\");this._capabilities=Me(this._capabilities,r)}registerTool(r,i,v){if(this._registeredTools[r])throw Error(`Tool ${r} is already registered`);let u=this,n=()=>{if(u._initializedSent&&u._capabilities.tools?.listChanged)u.sendToolListChanged()},t=i.inputSchema!==void 0,o={title:i.title,description:i.description,inputSchema:i.inputSchema,outputSchema:i.outputSchema,annotations:i.annotations,_meta:i._meta,enabled:!0,enable(){this.enabled=!0,n()},disable(){this.enabled=!1,n()},update($){Object.assign(this,$),n()},remove(){if(u._registeredTools[r]!==o)return;delete u._registeredTools[r],n()},handler:async($,b)=>{if(!o.enabled)throw Error(`Tool ${r} is disabled`);let g;if(t){let c=o.inputSchema,U=c?await Xe(c,$??{},`Invalid input for tool ${r}: `):$??{};g=await v(U,b)}else g=await v(b);if(o.outputSchema&&!g.isError)g.structuredContent=await Xe(o.outputSchema,g.structuredContent,`Invalid output for tool ${r}: `);return g}};if(this._registeredTools[r]=o,!this._capabilities.tools&&!this.transport)this.registerCapabilities({tools:{listChanged:!0}});return this.ensureToolHandlersInitialized(),n(),o}_toolHandlersInitialized=!1;ensureToolHandlersInitialized(){if(this._toolHandlersInitialized)return;this._toolHandlersInitialized=!0,this.oncalltool=async(r,i)=>{let v=this._registeredTools[r.name];if(!v)throw Error(`Tool ${r.name} not found`);return v.handler(r.arguments,i)},this.onlisttools=async(r,i)=>{return{tools:await Promise.all(Object.entries(this._registeredTools).filter(([v,u])=>u.enabled).map(async([v,u])=>{let n={name:v,title:u.title,description:u.description,inputSchema:u.inputSchema?await qe(u.inputSchema,\\\"input\\\"):{type:\\\"object\\\",properties:{}}};if(u.outputSchema)n.outputSchema=await qe(u.outputSchema,\\\"output\\\");if(u.annotations)n.annotations=u.annotations;if(u._meta)n._meta=u._meta;return n}))}}}async sendToolListChanged(r={}){this._assertInitialized(\\\"sendToolListChanged\\\"),await this.notification({method:\\\"notifications/tools/list_changed\\\",params:r})}getHostCapabilities(){return this._hostCapabilities}getHostVersion(){return this._hostInfo}getHostContext(){return this._hostContext}get ontoolinput(){return this.getEventHandler(\\\"toolinput\\\")}set ontoolinput(r){this.setEventHandler(\\\"toolinput\\\",r)}get ontoolinputpartial(){return this.getEventHandler(\\\"toolinputpartial\\\")}set ontoolinputpartial(r){this.setEventHandler(\\\"toolinputpartial\\\",r)}get ontoolresult(){return this.getEventHandler(\\\"toolresult\\\")}set ontoolresult(r){this.setEventHandler(\\\"toolresult\\\",r)}get ontoolcancelled(){return this.getEventHandler(\\\"toolcancelled\\\")}set ontoolcancelled(r){this.setEventHandler(\\\"toolcancelled\\\",r)}get onhostcontextchanged(){return this.getEventHandler(\\\"hostcontextchanged\\\")}set onhostcontextchanged(r){this.setEventHandler(\\\"hostcontextchanged\\\",r)}_onteardown;get onteardown(){return this._onteardown}set onteardown(r){this.warnIfRequestHandlerReplaced(\\\"onteardown\\\",this._onteardown,r),this._onteardown=r,this.replaceRequestHandler(Jw,(i,v)=>{if(!this._onteardown)throw Error(\\\"No onteardown handler set\\\");return this._onteardown(i.params,v)})}_oncalltool;get oncalltool(){return this._oncalltool}set oncalltool(r){this.warnIfRequestHandlerReplaced(\\\"oncalltool\\\",this._oncalltool,r),this._oncalltool=r,this.replaceRequestHandler(l6,(i,v)=>{if(!this._oncalltool)throw Error(\\\"No oncalltool handler set\\\");return this._oncalltool(i.params,v)})}_onlisttools;get onlisttools(){return this._onlisttools}set onlisttools(r){this.warnIfRequestHandlerReplaced(\\\"onlisttools\\\",this._onlisttools,r),this._onlisttools=r,this.replaceRequestHandler(g6,(i,v)=>{if(!this._onlisttools)throw Error(\\\"No onlisttools handler set\\\");return this._onlisttools(i.params,v)})}assertCapabilityForMethod(r){switch(r){case\\\"sampling/createMessage\\\":if(!this._hostCapabilities?.sampling)throw Error(`Host does not support sampling (required for ${r})`);break}}assertRequestHandlerCapability(r){switch(r){case\\\"tools/call\\\":case\\\"tools/list\\\":if(!this._capabilities.tools)throw Error(`Client does not support tool capability (required for ${r})`);return;case\\\"ping\\\":case\\\"ui/resource-teardown\\\":return;default:throw Error(`No handler for method ${r} registered`)}}assertNotificationCapability(r){}assertTaskCapability(r){throw Error(\\\"Tasks are not supported in MCP Apps\\\")}assertTaskHandlerCapability(r){throw Error(\\\"Task handlers are not supported in MCP Apps\\\")}async callServerTool(r,i){if(this._assertInitialized(\\\"callServerTool\\\"),typeof r===\\\"string\\\")throw Error(`callServerTool() expects an object as its first argument, but received a string (\\\"${r}\\\"). Did you mean: callServerTool({ name: \\\"${r}\\\", arguments: { ... } })?`);return await this.request({method:\\\"tools/call\\\",params:r},an,{onprogress:()=>{},resetTimeoutOnProgress:!0,...i})}async readServerResource(r,i){return this._assertInitialized(\\\"readServerResource\\\"),await this.request({method:\\\"resources/read\\\",params:r},i6,i)}async listServerResources(r,i){return this._assertInitialized(\\\"listServerResources\\\"),await this.request({method:\\\"resources/list\\\",params:r},r6,i)}async createSamplingMessage(r,i){this._assertInitialized(\\\"createSamplingMessage\\\");let v=r.tools?c6:b6;return await this.request({method:\\\"sampling/createMessage\\\",params:r},v,i)}sendMessage(r,i){return this._assertInitialized(\\\"sendMessage\\\"),this.request({method:\\\"ui/message\\\",params:r},Ow,i)}sendLog(r){return this.notification({method:\\\"notifications/message\\\",params:r})}updateModelContext(r,i){return this._assertInitialized(\\\"updateModelContext\\\"),this.request({method:\\\"ui/update-model-context\\\",params:r},Vu,i)}openLink(r,i){return this._assertInitialized(\\\"openLink\\\"),this.request({method:\\\"ui/open-link\\\",params:r},mw,i)}sendOpenLink=this.openLink;downloadFile(r,i){return this._assertInitialized(\\\"downloadFile\\\"),this.request({method:\\\"ui/download-file\\\",params:r},zw,i)}requestTeardown(r={}){return this.notification({method:\\\"ui/notifications/request-teardown\\\",params:r})}requestDisplayMode(r,i){return this._assertInitialized(\\\"requestDisplayMode\\\"),this.request({method:\\\"ui/request-display-mode\\\",params:r},Gw,i)}sendSizeChanged(r){return this.notification({method:\\\"ui/notifications/size-changed\\\",params:r})}setupSizeChangedNotifications(){let r=!1,i=0,v=0,u=()=>{if(r)return;r=!0,requestAnimationFrame(()=>{r=!1;let t=document.documentElement,o=t.style.height;t.style.height=\\\"max-content\\\";let $=Math.ceil(t.getBoundingClientRect().height);t.style.height=o;let b=Math.ceil(window.innerWidth);if(b!==i||$!==v)i=b,v=$,this.sendSizeChanged({width:b,height:$})})};u();let n=new ResizeObserver(u);return n.observe(document.documentElement),n.observe(document.body),()=>n.disconnect()}async connect(r=new Ze(window.parent,window.parent),i){if(this.transport)throw Error(\\\"App is already connected. Call close() before connecting again.\\\");this._initializedSent=!1,await super.connect(r);try{let v=await this.request({method:\\\"ui/initialize\\\",params:{appCapabilities:this._capabilities,appInfo:this._appInfo,protocolVersion:Uw}},Fw,i);if(v===void 0)throw Error(`Server sent invalid initialize result: ${v}`);if(this._hostCapabilities=v.hostCapabilities,this._hostInfo=v.hostInfo,this._hostContext=v.hostContext,await this.notification({method:\\\"ui/notifications/initialized\\\"}),this._initializedSent=!0,this.options?.autoResize)this.setupSizeChangedNotifications()}catch(v){throw this.close(),v}}}window.__bdMcp={App:qu,applyDocumentTheme:Ce,applyHostFonts:fe};})();\\n\";\n","// Static HTML/CSS preview of a design system, rendered from its design tokens.\n//\n// Hosted chat clients cannot run the React showcase, so previews are plain\n// HTML styled exclusively with the DS's own CSS custom properties:\n// - ChatGPT renders DS_PREVIEW_WIDGET_HTML inline as an Apps SDK widget\n// (registered as a ui:// resource; data arrives via window.openai.toolOutput).\n// - Claude and other clients get a self-contained document from\n// buildDsPreviewDocument() to render as an HTML artifact.\n//\n// Fidelity note: real component bodies are Tailwind-built and need a Tailwind\n// pass, so the preview shows the system's actual tokens (palette, type, radius,\n// shadows) on representative components rather than pixel-perfect React output.\n\n// Minified IIFE bundle of the MCP Apps SDK, inlined into the widget so it runs\n// without a runtime CDN import (Claude's sandbox CSP blocks dynamic esm.sh\n// imports). Generated by `bun run build:preview-widget`. [BD-92]\nimport { PREVIEW_WIDGET_SDK_JS } from \"./preview-widget-sdk.generated\";\n\nexport interface DsPreviewData {\n /** Display name of the design system or generated project. */\n name: string;\n /** CSS that defines the token custom properties (`:root{--background:...}`). */\n tokensCss: string;\n /** Link to the project / DS page on better-design.com. */\n viewUrl?: string;\n /** shadcn install command, when generation has completed. */\n installCommand?: string;\n}\n\n/** Rebuild a `:root{}` / `.dark{}` token stylesheet from shadcn registry cssVars. */\nexport function cssFromRegistryVars(cssVars: {\n light?: Record<string, string>;\n dark?: Record<string, string>;\n theme?: Record<string, string>;\n}): string {\n const block = (vars: Record<string, string> | undefined) =>\n Object.entries(vars ?? {})\n .map(([k, v]) => ` --${k.replace(/^--/, \"\")}: ${v};`)\n .join(\"\\n\");\n const root = block({ ...cssVars.theme, ...cssVars.light });\n const dark = block(cssVars.dark);\n return [`:root {\\n${root}\\n}`, dark ? `.dark {\\n${dark}\\n}` : \"\"].filter(Boolean).join(\"\\n\");\n}\n\n/**\n * Pull the system's typography out of its raw globals.css. The `--font-*`\n * declarations live in the file's `@theme inline` block, which the registry's\n * parsed `cssVars` does NOT carry, and the webfonts themselves are loaded by\n * the Next app (next/font), not by the stylesheet. Without both, previews fall\n * back to system fonts. Returns the font variable declarations plus a Google\n * Fonts `@import` for every named family (the catalog and the generation\n * pipeline both use Google-Fonts-available families); the import must be\n * placed first in the stylesheet. Degrades to the var's own fallback stack if\n * the host blocks external fonts. [BD-84]\n */\nexport function extractFontCss(rawGlobalsCss: string): { fontVars: string; fontImport: string } {\n const decls: string[] = rawGlobalsCss.match(/--font-(?:sans|serif|mono)\\s*:[^;]+;/g) ?? [];\n // Generated projects declare no --font-* vars; their globals set a plain\n // `font-family:` on body instead. Map the first such stack onto --font-sans\n // so the preview picks up the project's body font. [BD-86]\n if (!decls.length) {\n // Prefer the body rule's stack; only fall back to the first declaration\n // anywhere (which could be a @font-face or component rule) when body\n // declares none.\n const bodyRule = rawGlobalsCss.match(/(?:^|[}\\s,])body\\s*(?:,[^{]*)?\\{[^}]*?font-family\\s*:\\s*([^;}]+)/);\n const stack = bodyRule?.[1]?.trim() ?? rawGlobalsCss.match(/font-family\\s*:\\s*([^;}]+)/)?.[1]?.trim();\n if (stack) decls.push(`--font-sans: ${stack};`);\n }\n const families = new Set<string>();\n for (const decl of decls) {\n const value = decl.replace(/^--font-(?:sans|serif|mono)\\s*:\\s*/, \"\").replace(/;$/, \"\");\n for (const m of value.matchAll(/[\"']([^\"']+)[\"']/g)) addFontFamily(families, m[1]);\n if (!/[\"']/.test(value)) addFontFamily(families, value.split(\",\")[0] ?? \"\");\n }\n const fontImport = families.size\n ? `@import url(\"https://fonts.googleapis.com/css2?${[...families]\n .map((f) => `family=${encodeURIComponent(f).replace(/%20/g, \"+\")}:wght@400;500;600;700`)\n .join(\"&\")}&display=swap\");`\n : \"\";\n const fontVars = decls.length ? `:root {\\n ${decls.join(\"\\n \")}\\n}` : \"\";\n return { fontVars, fontImport };\n}\n\nconst SYSTEM_FONT_FAMILIES = new Set([\n \"arial\",\n \"georgia\",\n \"helvetica\",\n \"menlo\",\n \"monaco\",\n \"sans-serif\",\n \"serif\",\n \"sfmono-regular\",\n \"system-ui\",\n \"times new roman\",\n \"ui-monospace\",\n \"ui-sans-serif\",\n \"ui-serif\",\n]);\n\nfunction addFontFamily(families: Set<string>, raw: string): void {\n const family = raw.trim().replace(/^[\"']|[\"']$/g, \"\");\n if (!family || family.startsWith(\"var(\") || SYSTEM_FONT_FAMILIES.has(family.toLowerCase())) return;\n families.add(family);\n}\n\n// Tailwind rounded-* utility -> CSS value, honoring the DS's own radius scale\n// (catalog systems define --radius-sm/md/lg in @theme per the no-arbitrary-\n// values rule; 2xl/3xl fall back to Tailwind defaults).\nconst RADIUS_CLASS_TO_CSS: Record<string, string> = {\n \"rounded-none\": \"0\",\n \"rounded-sm\": \"var(--radius-sm, calc(var(--radius, 0.5rem) - 4px))\",\n \"rounded-md\": \"var(--radius-md, calc(var(--radius, 0.5rem) - 2px))\",\n \"rounded-lg\": \"var(--radius-lg, var(--radius, 0.5rem))\",\n \"rounded-xl\": \"var(--radius-xl, calc(var(--radius, 0.5rem) + 4px))\",\n \"rounded-2xl\": \"var(--radius-2xl, 1rem)\",\n \"rounded-3xl\": \"var(--radius-3xl, 1.5rem)\",\n rounded: \"0.25rem\",\n \"rounded-full\": \"9999px\",\n};\n\n/**\n * Mirror each component's AUTHORED corner radius instead of guessing from the\n * base token: a DS may give its hero button rounded-full while inputs sit at\n * rounded-2xl (editorial-warm does exactly that), so one raw `--radius` on\n * everything reads wrong. Scans the registry/project sources for the button,\n * input, card and badge files and emits override rules for the preview's\n * sample components. Files missing (or no rounded-* class found) keep the\n * base-CSS shadcn-scale fallbacks. [BD-84]\n */\nexport function componentRadiusCss(files: Array<{ path?: string; content?: string }>): string {\n const radiusFor = (pattern: RegExp): string | null => {\n const file = files.find((f) => f.path && pattern.test(f.path));\n if (!file?.content) return null;\n const m = file.content.match(/rounded(?:-(?:none|sm|md|lg|xl|2xl|3xl|full))?(?=[\\s\"'])/);\n return m ? (RADIUS_CLASS_TO_CSS[m[0]] ?? null) : null;\n };\n const rules: string[] = [];\n const button = radiusFor(/(^|\\/)button\\.(tsx|jsx)$/);\n if (button) rules.push(`.bd-btn, .bd-view { border-radius: ${button}; }`);\n const input = radiusFor(/(^|\\/)input\\.(tsx|jsx)$/);\n if (input) rules.push(`.bd-input { border-radius: ${input}; }`);\n const card = radiusFor(/(^|\\/)card\\.(tsx|jsx)$/);\n if (card) rules.push(`.bd-card { border-radius: ${card}; }`);\n return rules.join(\"\\n\");\n}\n\n/** Radius scale declarations from the raw globals.css (@theme block), which parsed cssVars omit. */\nexport function extractRadiusScaleCss(rawGlobalsCss: string): string {\n const decls = rawGlobalsCss.match(/--radius-[a-z0-9]+\\s*:[^;]+;/g) ?? [];\n return decls.length ? `:root {\\n ${decls.join(\"\\n \")}\\n}` : \"\";\n}\n\n// Shared look for both the widget and the standalone document. Every color\n// reads a DS token with an oklch fallback so a missing variable degrades to a\n// neutral scheme instead of broken styling.\nconst PREVIEW_BASE_CSS = `\n .bd-preview { background: var(--background, oklch(1 0 0)); color: var(--foreground, oklch(0.2 0 0)); font-family: var(--font-sans, ui-sans-serif, system-ui, sans-serif); border: 1px solid var(--border, oklch(0.9 0 0)); border-radius: calc(var(--radius, 0.5rem) + 4px); padding: 20px; max-width: 720px; box-shadow: var(--shadow-md, var(--shadow, none)); }\n .bd-view { box-shadow: var(--shadow-sm, var(--shadow-xs, none)); }\n .bd-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 14px; }\n .bd-name { font-family: var(--font-serif, var(--font-sans, ui-sans-serif)); font-size: 22px; font-weight: 600; margin: 0; }\n .bd-sub { color: var(--muted-foreground, oklch(0.55 0 0)); font-size: 12px; }\n .bd-swatches { display: flex; gap: 6px; margin: 12px 0; }\n .bd-swatch { width: 34px; height: 34px; border-radius: 9999px; border: 1px solid var(--border, oklch(0.9 0 0)); }\n .bd-row { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 12px 0; }\n .bd-btn { font: inherit; font-size: 14px; font-weight: 500; padding: 8px 16px; border-radius: var(--radius-md, calc(var(--radius, 0.5rem) - 2px)); border: 1px solid transparent; cursor: pointer; }\n .bd-btn-primary { background: var(--primary, oklch(0.3 0 0)); color: var(--primary-foreground, oklch(1 0 0)); box-shadow: var(--shadow-sm, var(--shadow-xs, var(--shadow, none))); }\n .bd-btn-secondary { background: var(--secondary, oklch(0.95 0 0)); color: var(--secondary-foreground, oklch(0.25 0 0)); box-shadow: var(--shadow-xs, var(--shadow-2xs, none)); }\n .bd-btn-outline { background: transparent; color: var(--foreground, oklch(0.2 0 0)); border-color: var(--border, oklch(0.85 0 0)); box-shadow: var(--shadow-2xs, none); }\n .bd-input { font: inherit; font-size: 14px; padding: 8px 12px; border-radius: var(--radius-md, calc(var(--radius, 0.5rem) - 2px)); border: 1px solid var(--input, var(--border, oklch(0.85 0 0))); background: var(--background, oklch(1 0 0)); color: var(--foreground, oklch(0.2 0 0)); min-width: 180px; box-shadow: var(--shadow-2xs, none); }\n .bd-input:focus { outline: 2px solid var(--ring, var(--primary, oklch(0.3 0 0))); outline-offset: 1px; }\n .bd-card { background: var(--card, var(--background, oklch(1 0 0))); color: var(--card-foreground, var(--foreground, oklch(0.2 0 0))); border: 1px solid var(--border, oklch(0.9 0 0)); border-radius: var(--radius-xl, calc(var(--radius, 0.5rem) + 4px)); padding: 14px 16px; margin: 12px 0; box-shadow: var(--shadow-sm, var(--shadow-xs, none)); }\n .bd-card h3 { font-family: var(--font-serif, var(--font-sans, ui-sans-serif)); margin: 0 0 4px; font-size: 16px; }\n .bd-card p { margin: 0; font-size: 13px; color: var(--muted-foreground, oklch(0.55 0 0)); }\n .bd-badge { display: inline-block; font-size: 11px; font-weight: 600; padding: 2px 9px; border-radius: 999px; background: var(--accent, var(--secondary, oklch(0.95 0 0))); color: var(--accent-foreground, var(--secondary-foreground, oklch(0.25 0 0))); }\n .bd-mono { font-family: var(--font-mono, ui-monospace, monospace); font-size: 12px; color: var(--muted-foreground, oklch(0.55 0 0)); }\n .bd-foot { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-top: 16px; border-top: 1px solid var(--border, oklch(0.92 0 0)); padding-top: 12px; }\n .bd-view { font-size: 13px; font-weight: 600; text-decoration: none; padding: 7px 14px; border-radius: var(--radius-md, calc(var(--radius, 0.5rem) - 2px)); background: var(--primary, oklch(0.3 0 0)); color: var(--primary-foreground, oklch(1 0 0)); }\n .bd-links { font-size: 12px; display: flex; gap: 12px; }\n .bd-links a { color: var(--muted-foreground, oklch(0.5 0 0)); }\n .bd-progress { font-size: 13px; color: var(--muted-foreground, oklch(0.5 0 0)); margin: 10px 0; }\n .bd-app { display: flex; flex-direction: column; gap: 12px; }\n .bd-appbar { display: flex; align-items: center; justify-content: space-between; }\n .bd-logo { font-family: var(--font-serif, var(--font-sans, ui-sans-serif)); font-weight: 700; font-size: 16px; color: var(--foreground, oklch(0.2 0 0)); }\n .bd-hero-card { background: var(--card, var(--background, oklch(1 0 0))); color: var(--card-foreground, var(--foreground, oklch(0.2 0 0))); border: 1px solid var(--border, oklch(0.9 0 0)); border-radius: var(--radius-xl, calc(var(--radius, 0.5rem) + 4px)); padding: 16px 18px; box-shadow: var(--shadow-sm, var(--shadow-xs, none)); }\n .bd-h { font-family: var(--font-serif, var(--font-sans, ui-sans-serif)); font-size: 20px; font-weight: 600; margin: 0 0 6px; }\n .bd-p { margin: 0 0 14px; font-size: 13px; line-height: 1.5; color: var(--muted-foreground, oklch(0.55 0 0)); max-width: 48ch; }\n .bd-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }\n .bd-stat { background: var(--card, var(--background, oklch(1 0 0))); border: 1px solid var(--border, oklch(0.9 0 0)); border-radius: var(--radius-lg, var(--radius, 0.5rem)); padding: 12px 14px; }\n .bd-stat-n { display: block; font-size: 20px; font-weight: 700; color: var(--foreground, oklch(0.2 0 0)); font-family: var(--font-serif, var(--font-sans, ui-sans-serif)); }\n .bd-stat-l { font-size: 11px; color: var(--muted-foreground, oklch(0.55 0 0)); }\n .bd-list { background: var(--card, var(--background, oklch(1 0 0))); border: 1px solid var(--border, oklch(0.9 0 0)); border-radius: var(--radius-lg, var(--radius, 0.5rem)); overflow: hidden; }\n .bd-li { display: flex; align-items: center; gap: 10px; padding: 10px 14px; font-size: 13px; color: var(--foreground, oklch(0.2 0 0)); border-top: 1px solid var(--border, oklch(0.93 0 0)); }\n .bd-li:first-child { border-top: 0; }\n .bd-grow { flex: 1; }\n .bd-dot { width: 8px; height: 8px; border-radius: 9999px; background: var(--primary, oklch(0.3 0 0)); flex: none; }\n .bd-pill { font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 999px; background: var(--secondary, oklch(0.95 0 0)); color: var(--secondary-foreground, oklch(0.25 0 0)); }\n`;\n\nconst SWATCH_TOKENS = [\"background\", \"foreground\", \"primary\", \"secondary\", \"accent\", \"muted\", \"border\"];\n\n// A small, realistic app vignette rendered entirely from the system's tokens\n// (type, color, radius, depth) so the preview reads like a real product screen\n// in the DS's style, not a token inventory. Shared structure with the widget's\n// client-side fallbackBody — keep the two in sync. [BD-92]\nfunction dsVignetteHtml(name: string, swatches: string): string {\n const nm = escapeHtml(name);\n return `<div class=\"bd-app\">\n <div class=\"bd-appbar\"><span class=\"bd-logo\">${nm}</span><span class=\"bd-badge\">Live preview</span></div>\n <div class=\"bd-hero-card\">\n <h3 class=\"bd-h\">Build something in ${nm}.</h3>\n <p class=\"bd-p\">A starter screen styled entirely with this system's tokens: type, color, radius and depth, ready to vibecode on.</p>\n <div class=\"bd-row\"><button class=\"bd-btn bd-btn-primary\">Get started</button><button class=\"bd-btn bd-btn-outline\">Learn more</button></div>\n </div>\n <div class=\"bd-grid\">\n <div class=\"bd-stat\"><span class=\"bd-stat-n\">2,481</span><span class=\"bd-stat-l\">Active users</span></div>\n <div class=\"bd-stat\"><span class=\"bd-stat-n\">98%</span><span class=\"bd-stat-l\">Uptime</span></div>\n <div class=\"bd-stat\"><span class=\"bd-stat-n\">4.9</span><span class=\"bd-stat-l\">Rating</span></div>\n </div>\n <div class=\"bd-list\">\n <div class=\"bd-li\"><span class=\"bd-dot\"></span><span class=\"bd-grow\">New project created</span><span class=\"bd-pill\">now</span></div>\n <div class=\"bd-li\"><span class=\"bd-dot\"></span><span class=\"bd-grow\">Components installed</span><span class=\"bd-pill\">87</span></div>\n <div class=\"bd-li\"><span class=\"bd-dot\"></span><span class=\"bd-grow\">Theme applied</span><span class=\"bd-badge\">done</span></div>\n </div>\n <div class=\"bd-swatches\">${swatches}</div>\n </div>`;\n}\n\nfunction previewBodyHtml(d: DsPreviewData): string {\n const swatches = SWATCH_TOKENS.map(\n (t) => `<div class=\"bd-swatch\" style=\"background: var(--${t}, transparent)\" title=\"--${t}\"></div>`,\n ).join(\"\");\n return `\n ${dsVignetteHtml(d.name, swatches)}\n ${\n d.viewUrl\n ? `<div class=\"bd-foot\"><div class=\"bd-links\"></div><a class=\"bd-view\" href=\"${escapeHtml(d.viewUrl)}\" target=\"_blank\" rel=\"noopener\">View in Better Design</a></div>`\n : \"\"\n }`;\n}\n\n// Registry-supplied CSS lands verbatim inside a <style> block; a literal\n// \"</style\" sequence would close it early and let markup escape into the\n// document. \"<\" never appears in valid CSS outside strings/comments, so\n// neutralizing the sequence is lossless for real stylesheets.\nfunction sanitizeCss(css: string): string {\n return css.replace(/<\\/style/gi, \"<\\\\/style\");\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\n\n/** Self-contained preview page: render as an HTML artifact (Claude) or serve as a file. */\nexport function buildDsPreviewDocument(d: DsPreviewData): string {\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>${escapeHtml(d.name)} preview</title>\n<style>\n${sanitizeCss(d.tokensCss)}\nbody { margin: 0; padding: 24px; background: var(--background, oklch(0.98 0 0)); display: flex; justify-content: center; }\n${PREVIEW_BASE_CSS}\n</style>\n</head>\n<body>\n${previewBodyHtml(d)}\n</body>\n</html>`;\n}\n\n/**\n * Cross-client MCP Apps widget (renders inline in BOTH Claude and ChatGPT).\n *\n * Data delivery is dual-bridge:\n * - MCP Apps SDK (`App.ontoolresult` -> structuredContent) - what Claude and\n * any compliant MCP Apps host speaks. The SDK is INLINED (bundled IIFE,\n * `window.__bdMcp`), not imported from a CDN: Claude's sandboxed view CSP\n * blocks a dynamic `import(\"https://esm.sh/...\")`, which previously left the\n * widget blank. The official ext-apps examples bundle the SDK the same way.\n * - `window.openai.toolOutput` fallback for ChatGPT's OpenAI Apps bridge.\n * Whichever fires first renders; both call the same render().\n *\n * structuredContent shape: { name, tokensCss, viewUrl, installCommand, status, step }.\n * Layout: a token-rendered mini-UI of the system as the hero (pure CSS from the\n * DS tokens, no iframe since Claude restricts cross-origin frameDomains), with a\n * \"Preview Project\" CTA bottom-right linking to the durable project page. [BD-92]\n */\n// Version the URI on every markup change: hosts cache the template by URI.\nexport const DS_PREVIEW_WIDGET_URI = \"ui://widget/ds-preview-v5.html\";\n\nexport const DS_PREVIEW_WIDGET_HTML = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<style>\nhtml, body { margin: 0; padding: 0; background: transparent; }\n${PREVIEW_BASE_CSS}\n.bd-card-shell { background: var(--background, oklch(1 0 0)); border-radius: 16px; overflow: hidden; box-shadow: 0 1px 3px oklch(0 0 0 / 0.08), 0 8px 24px oklch(0 0 0 / 0.06); }\n.bd-app { padding: 16px; }\n.bd-cta-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 16px; background: var(--card, var(--background, oklch(1 0 0))); border-top: 1px solid var(--border, oklch(0.92 0 0)); }\n.bd-cta-name { font-weight: 600; font-size: 14px; color: var(--foreground, oklch(0.2 0 0)); font-family: var(--font-serif, var(--font-sans, ui-sans-serif)); }\n.bd-cta { font: inherit; font-size: 14px; font-weight: 700; text-decoration: none; color: var(--primary, oklch(0.45 0 0)); display: inline-flex; align-items: center; gap: 6px; }\n.bd-cta:hover { opacity: 0.7; }\n.bd-progress { padding: 6px 16px 12px; }\n</style>\n<style id=\"bd-tokens\"></style>\n</head>\n<body>\n<div id=\"bd-root\"></div>\n<script>${PREVIEW_WIDGET_SDK_JS.replace(/<\\/script/gi, \"<\\\\/script\")}</script>\n<script>\n(function () {\n var root = document.getElementById(\"bd-root\");\n var tokens = document.getElementById(\"bd-tokens\");\n var SWATCHES = ${JSON.stringify(SWATCH_TOKENS)};\n\n function esc(s) {\n return String(s == null ? \"\" : s).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n }\n\n // Token-rendered app vignette (mirrors dsVignetteHtml in preview-html.ts).\n function fallbackBody(out) {\n var swatches = SWATCHES.map(function (t) {\n return '<div class=\"bd-swatch\" style=\"background: var(--' + t + ', transparent)\" title=\"--' + t + '\"></div>';\n }).join(\"\");\n var nm = esc(out.name || \"Design system\");\n return '<div class=\"bd-app\">' +\n '<div class=\"bd-appbar\"><span class=\"bd-logo\">' + nm + '</span><span class=\"bd-badge\">Live preview</span></div>' +\n '<div class=\"bd-hero-card\">' +\n '<h3 class=\"bd-h\">Build something in ' + nm + '.</h3>' +\n '<p class=\"bd-p\">A starter screen styled entirely with this system\\\\'s tokens: type, color, radius and depth, ready to vibecode on.</p>' +\n '<div class=\"bd-row\"><button class=\"bd-btn bd-btn-primary\">Get started</button><button class=\"bd-btn bd-btn-outline\">Learn more</button></div>' +\n '</div>' +\n '<div class=\"bd-grid\">' +\n '<div class=\"bd-stat\"><span class=\"bd-stat-n\">2,481</span><span class=\"bd-stat-l\">Active users</span></div>' +\n '<div class=\"bd-stat\"><span class=\"bd-stat-n\">98%</span><span class=\"bd-stat-l\">Uptime</span></div>' +\n '<div class=\"bd-stat\"><span class=\"bd-stat-n\">4.9</span><span class=\"bd-stat-l\">Rating</span></div>' +\n '</div>' +\n '<div class=\"bd-list\">' +\n '<div class=\"bd-li\"><span class=\"bd-dot\"></span><span class=\"bd-grow\">New project created</span><span class=\"bd-pill\">now</span></div>' +\n '<div class=\"bd-li\"><span class=\"bd-dot\"></span><span class=\"bd-grow\">Components installed</span><span class=\"bd-pill\">87</span></div>' +\n '<div class=\"bd-li\"><span class=\"bd-dot\"></span><span class=\"bd-grow\">Theme applied</span><span class=\"bd-badge\">done</span></div>' +\n '</div>' +\n '<div class=\"bd-swatches\">' + swatches + '</div>' +\n '</div>';\n }\n\n function render(out) {\n if (!out) { root.innerHTML = \"\"; return; }\n tokens.textContent = out.tokensCss || \"\";\n var generating = out.status && out.status !== \"completed\";\n var progress = generating\n ? '<div class=\"bd-progress bd-mono\">Generating' + (out.step ? \": \" + esc(out.step) : \"...\") + \"</div>\"\n : \"\";\n // Hero = token-rendered mini-UI of the system (pure CSS from the DS tokens;\n // no iframe, since Claude restricts cross-origin frameDomains). CTA links to\n // the durable project page bottom-right, mirroring the requested card.\n var hero = fallbackBody(out);\n var cta = out.viewUrl\n ? '<div class=\"bd-cta-row\"><span class=\"bd-cta-name\">' + esc(out.name || \"Design system\") + '</span>' +\n '<a class=\"bd-cta\" href=\"' + esc(out.viewUrl) + '\" target=\"_blank\" rel=\"noopener\">Preview Project &rsaquo;</a></div>'\n : \"\";\n root.innerHTML = '<div class=\"bd-card-shell\">' + hero + progress + cta + \"</div>\";\n }\n\n // ChatGPT bridge (OpenAI Apps): render immediately + on globals update.\n if (window.openai) {\n render(window.openai.toolOutput);\n window.addEventListener(\"openai:set_globals\", function (event) {\n var g = event && event.detail && event.detail.globals;\n render((g && g.toolOutput) || (window.openai && window.openai.toolOutput));\n });\n }\n\n // MCP Apps bridge (Claude + any compliant host): the SDK is INLINED above as\n // window.__bdMcp (bundled IIFE), so there is no runtime CDN import for the\n // sandbox CSP to block.\n try {\n var mcp = window.__bdMcp;\n if (mcp && mcp.App) {\n var app = new mcp.App({ name: \"Better Design Preview\", version: \"1.0.0\" });\n app.ontoolresult = function (params) {\n var sc = params && (params.structuredContent || (params.result && params.result.structuredContent));\n if (sc) render(sc);\n };\n app.onhostcontextchanged = function (ctx) {\n try {\n if (ctx && ctx.theme && mcp.applyDocumentTheme) mcp.applyDocumentTheme(ctx.theme);\n if (ctx && ctx.styles && ctx.styles.css && ctx.styles.css.fonts && mcp.applyHostFonts) mcp.applyHostFonts(ctx.styles.css.fonts);\n } catch (e) {}\n };\n if (app.connect) app.connect().catch(function () {});\n }\n } catch (e) { /* host without MCP Apps support; OpenAI bridge or static text covers it */ }\n})();\n</script>\n</body>\n</html>`;\n","export function normalizePrincipleTopic(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/^principle-/, \"\")\n .replace(/&/g, \"and\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n","import { createHash } from \"node:crypto\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport type { DataProvider, PrincipleArea } from \"./data-provider\";\nimport {\n buildBarrel,\n buildTsxComponent,\n parseSvg,\n stripPrefix,\n toFileStem,\n toPascalCase,\n validateTargetDir,\n} from \"./icon-installer\";\nimport { GUARDRAILS_SETUP_MD } from \"./guardrails\";\nimport {\n buildDsPreviewDocument,\n componentRadiusCss,\n cssFromRegistryVars,\n extractFontCss,\n extractRadiusScaleCss,\n DS_PREVIEW_WIDGET_HTML,\n DS_PREVIEW_WIDGET_URI,\n} from \"./preview-html\";\nimport { normalizePrincipleTopic } from \"../foundational-docs/topic-utils\";\n\n/**\n * Token stylesheet for the DS preview from a shadcn registry payload: parsed\n * cssVars give the color/radius/shadow tokens; the raw globals.css inside\n * `files` supplies the `--font-*` vars + the Google Fonts import that the\n * parsed vars never carry (see extractFontCss). [BD-84]\n */\nfunction tokensCssFromRegistry(json: {\n cssVars?: { light?: Record<string, string>; dark?: Record<string, string>; theme?: Record<string, string> };\n files?: Array<{ path?: string; content?: string }>;\n meta?: { globalsCss?: string };\n}): string {\n const files = json.files ?? [];\n const vars = json.cssVars ? cssFromRegistryVars(json.cssVars) : \"\";\n // Generated-project registries don't ship globals.css as a file (it is\n // parsed into cssVars); the raw source rides in meta.globalsCss instead so\n // the preview keeps the project's fonts + radius scale. [BD-86]\n const globals =\n files.find((f) => f.path?.endsWith(\"globals.css\"))?.content ?? json.meta?.globalsCss ?? \"\";\n const { fontVars, fontImport } = extractFontCss(globals);\n return [\n fontImport,\n vars,\n fontVars,\n extractRadiusScaleCss(globals),\n componentRadiusCss(files),\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nconst ICONIFY_FETCH_TIMEOUT_MS = 10_000;\n\nasync function fetchWithTimeout(url: string, timeoutMs = ICONIFY_FETCH_TIMEOUT_MS): Promise<Response> {\n const controller = new AbortController();\n const id = setTimeout(() => controller.abort(), timeoutMs);\n try {\n return await globalThis.fetch(url, { signal: controller.signal });\n } finally {\n clearTimeout(id);\n }\n}\n\nconst ICONIFY_API_BASE = \"https://api.iconify.design\";\n\nconst REGISTRY_BASE_URL =\n process.env.BETTER_DESIGN_REGISTRY_URL ??\n \"https://better-design.com/registry\";\n\n// Shape of a shadcn-registry item (globals.json / <component>.json). Parsed\n// with safeParse so a malformed registry response degrades to the no-tokens\n// path instead of throwing or smuggling unexpected types past an `as` cast.\nconst REGISTRY_ITEM_SCHEMA = z.object({\n cssVars: z\n .object({\n light: z.record(z.string(), z.string()).optional(),\n dark: z.record(z.string(), z.string()).optional(),\n theme: z.record(z.string(), z.string()).optional(),\n })\n .optional(),\n files: z.array(z.object({ path: z.string().optional(), content: z.string().optional() })).optional(),\n});\n\n// Web origin (apex) for user-facing links: the catalog DS showcase\n// (/design-systems/<id>) and generated-project pages (/projects/<id>). Single\n// source so every tool links to the same host the OAuth session is scoped to.\nconst APP_BASE_URL =\n process.env.BETTER_DESIGN_APP_URL ??\n \"https://better-design.com\";\n\n// CSP for the preview widget's sandboxed view. The MCP Apps SDK is inlined and\n// the hero is a token-render (no iframe), so the only external origins are the\n// Google Fonts CDNs used to load the system's webfonts. [BD-92]\nconst WIDGET_RESOURCE_DOMAINS = [\n \"https://fonts.googleapis.com\",\n \"https://fonts.gstatic.com\",\n];\n\n// Stable per-app sandbox origin for the widget view, derived from the MCP server\n// URL: `{sha256(serverUrl)[0..32]}.claudemcpcontent.com`. Lets Claude give the\n// view a consistent origin a server can allowlist for CORS (ext-apps\n// `_meta.ui.domain`; see ext-apps docs/csp-cors.md). [BD-92]\nconst WIDGET_APP_DOMAIN = `${createHash(\"sha256\")\n .update(`${APP_BASE_URL}/api/mcp`)\n .digest(\"hex\")\n .slice(0, 32)}.claudemcpcontent.com`;\n\n// Stated up front in every install response. The components are authored for\n// Tailwind v4 — their globals.css uses the v4 entry point (`@import \"tailwindcss\"`)\n// and the v4 PostCSS plugin moved to a separate package. A project still on\n// Tailwind v3 (or one that lets `tailwindcss` resolve to \"latest\" against a v3\n// PostCSS config) crashes with: \"trying to use `tailwindcss` directly as a\n// PostCSS plugin ... moved to @tailwindcss/postcss\". Telling the agent the\n// requirement here turns that runtime crash into an up-front prerequisite.\nconst REQUIREMENTS_MD = `> **Requirements:** these components target **Tailwind v4**. The installed \\`globals.css\\` uses the v4 entry point (\\`@import \"tailwindcss\"\\`), so the project needs \\`tailwindcss@^4\\` with \\`@tailwindcss/postcss\\` in its PostCSS config (or the \\`@tailwindcss/vite\\` plugin). On a Tailwind v3 project, migrate to v4 first, otherwise the build throws the \"trying to use tailwindcss directly as a PostCSS plugin\" error.\\n`;\n\n// Appended right after the install command. Closes the escape hatch where an\n// agent, instead of running the install, hand-writes the components from memory\n// or builds a standalone HTML mockup — both skip the real tokens/registry output\n// and cannot import \\`@/components/ui/*\\`.\nconst ANTI_MOCKUP_MD = `\\n**Run the install. Do not substitute it.** Never hand-write these components from memory and never build a standalone HTML mockup as a stand-in: both skip the real design tokens, drift from the registry source, and cannot \\`import\\` from \\`@/components/ui/*\\`. The only correct output is running the command above in a real project, then composing the installed files.`;\n\n// Shared structuredContent contract for the preview-rendering tools\n// (check-design-system-status, preview-design-system). The Apps SDK widget\n// reads exactly these fields from window.openai.toolOutput. [BD-84]\nconst PREVIEW_OUTPUT_SCHEMA = z.object({\n status: z.string().describe(\"completed | error | pending | generating | selected\"),\n name: z.string().describe(\"Display name of the design system or project.\"),\n viewUrl: z.string().optional().describe(\"Better Design page for this system/project.\"),\n installCommand: z.string().optional().describe(\"shadcn install command, when complete.\"),\n step: z.string().optional().describe(\"Current generation step, while generating.\"),\n tokensCss: z.string().describe(\"CSS custom-property stylesheet for the system's tokens.\"),\n});\n\nfunction truncateToTokens(text: string, maxTokens: number): string {\n const maxChars = maxTokens * 4;\n if (text.length <= maxChars) return text;\n return text.slice(0, maxChars) + `\\n\\n...(truncated to ~${maxTokens} tokens)`;\n}\n\n/**\n * Build the inline-preview token stylesheet for a CATALOG design system by id:\n * fetch its globals (tokens) + button/input/card (authored radii) from the\n * registry and run them through tokensCssFromRegistry. Returns \"\" if the\n * registry is unreachable. Shared by `preview-design-system` and the\n * widget-bearing `get-design-system-docs` (the latter is one of the only ~5\n * tools claude.ai loads, so the preview must ride on it to render there). [BD-95]\n */\nasync function fetchCatalogTokensCss(designSystemId: string): Promise<string> {\n try {\n const [globalsRes, ...componentResults] = await Promise.all([\n fetch(`${REGISTRY_BASE_URL}/${designSystemId}/globals.json`),\n ...[\"button\", \"input\", \"card\"].map((c) =>\n fetch(`${REGISTRY_BASE_URL}/${designSystemId}/${c}.json`).catch(() => null),\n ),\n ]);\n if (!globalsRes.ok) return \"\";\n const globals = REGISTRY_ITEM_SCHEMA.safeParse(await globalsRes.json());\n if (!globals.success) return \"\";\n const files = [...(globals.data.files ?? [])];\n for (const res of componentResults) {\n if (!res?.ok) continue;\n const item = REGISTRY_ITEM_SCHEMA.safeParse(await res.json().catch(() => null));\n if (item.success && item.data.files) files.push(...item.data.files);\n }\n return tokensCssFromRegistry({ cssVars: globals.data.cssVars, files });\n } catch {\n return \"\";\n }\n}\n\nfunction levenshteinDistance(a: string, b: string): number {\n const previous = Array.from({ length: b.length + 1 }, (_, index) => index);\n for (let i = 1; i <= a.length; i += 1) {\n const current = [i];\n for (let j = 1; j <= b.length; j += 1) {\n current[j] = Math.min(\n current[j - 1] + 1,\n previous[j] + 1,\n previous[j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1),\n );\n }\n previous.splice(0, previous.length, ...current);\n }\n return previous[b.length];\n}\n\ntype PrincipleListItem = Awaited<ReturnType<DataProvider[\"listPrinciples\"]>>[number];\n\nfunction formatPrincipleIndex(\n principles: PrincipleListItem[],\n toolName: string,\n label: string,\n): string {\n const indexText = principles\n .map((principle) => {\n const topic = principle.topic ?? principle.id.replace(\"principle-\", \"\");\n const aliases = principle.aliases?.length\n ? ` (aliases: ${principle.aliases.slice(0, 5).join(\", \")})`\n : \"\";\n return `- **${topic}**: ${principle.title}${aliases}`;\n })\n .join(\"\\n\");\n\n return `# Available ${label} Principles\\n\\nUse \\`${toolName}({ topic: \"...\" })\\` to load a specific principle:\\n\\n${indexText}\\n\\nOr use \\`${toolName}({ query: \"...\" })\\` to search by natural language.`;\n}\n\nfunction formatTopicNotFound(\n topic: string,\n principles: PrincipleListItem[],\n toolName: string,\n): string {\n const needle = normalizePrincipleTopic(topic);\n const suggestions = principles\n .map((principle) => {\n const candidates = [\n principle.topic ?? principle.id.replace(\"principle-\", \"\"),\n principle.title,\n ...(principle.aliases ?? []),\n ];\n const distance = Math.min(\n ...candidates.map((candidate) => levenshteinDistance(needle, normalizePrincipleTopic(candidate))),\n );\n return { principle, distance };\n })\n .sort((a, b) => a.distance - b.distance)\n .slice(0, 5)\n .map(({ principle }) => principle.topic ?? principle.id.replace(\"principle-\", \"\"));\n\n return [\n `Principle '${topic}' not found.`,\n suggestions.length ? `Closest topics: ${suggestions.map((item) => `\\`${item}\\``).join(\", \")}.` : \"\",\n `Call \\`${toolName}({})\\` for the full index.`,\n ].filter(Boolean).join(\"\\n\");\n}\n\nasync function runPrincipleTool(\n provider: DataProvider,\n area: PrincipleArea,\n label: string,\n toolName: string,\n args: { topic?: string; query?: string; maxTokens?: number },\n) {\n const { topic, query, maxTokens } = args;\n\n if (topic && query) {\n return {\n content: [{\n type: \"text\" as const,\n text: `Pass either 'topic' or 'query' to ${toolName}, not both.`,\n }],\n };\n }\n\n if (topic) {\n const principle = await provider.getPrincipleByTopic(topic, area);\n if (!principle) {\n const principles = await provider.listPrinciples(area);\n return { content: [{ type: \"text\" as const, text: formatTopicNotFound(topic, principles, toolName) }] };\n }\n\n const topicLine = principle.topic ? `\\n\\nTopic: ${principle.topic}` : \"\";\n const aliasesLine = principle.aliases?.length ? `\\nAliases: ${principle.aliases.join(\", \")}` : \"\";\n let text = `# ${principle.title}${topicLine}${aliasesLine}\\n\\n${principle.content}`;\n if (maxTokens) text = truncateToTokens(text, maxTokens);\n return { content: [{ type: \"text\" as const, text }] };\n }\n\n if (query) {\n const results = await provider.searchPrinciples(query, 5, area);\n\n if (results.length === 0) {\n return { content: [{ type: \"text\" as const, text: `No matching ${label.toLowerCase()} guidelines found. Try a different query.` }] };\n }\n\n const formatted = results\n .map((result) =>\n `## ${result.title} (${result.matchScore}% match)\\n\\n${result.content.substring(0, 1500)}${result.content.length > 1500 ? \"\\n\\n...(truncated)\" : \"\"}`,\n )\n .join(\"\\n\\n---\\n\\n\");\n\n let text = `# ${label} Guidelines matching \"${query}\"\\n\\n${formatted}`;\n if (maxTokens) text = truncateToTokens(text, maxTokens);\n return { content: [{ type: \"text\" as const, text }] };\n }\n\n const principles = await provider.listPrinciples(area);\n\n if (principles.length === 0) {\n return { content: [{ type: \"text\" as const, text: `No ${label.toLowerCase()} principles found.` }] };\n }\n\n return {\n content: [{\n type: \"text\" as const,\n text: formatPrincipleIndex(principles, toolName, label),\n }],\n };\n}\n\nexport interface ToolUsageContext {\n /** MCP client name from the initialize handshake (e.g. \"claude-ai\", \"cursor-vscode\", \"windsurf\"). */\n clientName?: string;\n /** MCP client version from the initialize handshake. */\n clientVersion?: string;\n /** First ~1000 chars of the tool's text response — used for eval inspection in PostHog. */\n outputPreview?: string;\n}\n\nconst MAX_OUTPUT_PREVIEW = 1000;\n\nfunction extractOutputPreview(result: unknown): string | undefined {\n const content = (result as { content?: Array<{ type?: unknown; text?: unknown }> } | null | undefined)?.content;\n if (!Array.isArray(content)) return undefined;\n const first = content.find((c) => c?.type === \"text\" && typeof c.text === \"string\");\n const text = first?.text;\n if (typeof text !== \"string\" || !text) return undefined;\n return text.length > MAX_OUTPUT_PREVIEW\n ? text.slice(0, MAX_OUTPUT_PREVIEW) + \"…\"\n : text;\n}\n\n/**\n * Caller identity for a single MCP request. Threaded through to tools that\n * need to forward authorization to upstream Better Design endpoints — namely\n * `create-design-system`, which posts to `/api/projects/anonymous` and needs\n * the server to meter against the calling user's quota instead of the\n * IP-keyed anonymous bucket.\n *\n * `kind: \"api-key\"` covers local clients (Cursor, Claude Code, Codex, …) that\n * hold a `bd_live_*` key. `kind: \"oauth\"` covers hosted clients (ChatGPT Apps,\n * Claude.ai/Desktop) that complete the better-auth MCP OAuth flow.\n */\nexport type McpAuthContext =\n | { kind: \"api-key\"; apiKey: string }\n | { kind: \"oauth\"; accessToken: string };\n\nexport function registerAllTools(\n server: McpServer,\n provider: DataProvider,\n onToolUsage?: (\n tool: string,\n params: Record<string, unknown>,\n context: ToolUsageContext,\n ) => void,\n authContext?: McpAuthContext,\n): void {\n const track = (\n tool: string,\n params: Record<string, unknown>,\n outputPreview?: string,\n ) => {\n if (!onToolUsage) return;\n try {\n const info = server.server.getClientVersion?.();\n onToolUsage(tool, params, {\n clientName: info?.name,\n clientVersion: info?.version,\n outputPreview,\n });\n } catch {\n // analytics must never break MCP tool responses\n }\n };\n\n // Wrap a tool callback so we record AFTER it runs, with input + output preview.\n async function tracked<TArgs, TResult>(\n tool: string,\n args: TArgs,\n run: () => Promise<TResult>,\n ): Promise<TResult> {\n const result = await run();\n track(tool, args as Record<string, unknown>, extractOutputPreview(result));\n return result;\n }\n\n // ─── Tool 1: resolve-design-system ──────────────────────────────────────\n\n server.registerTool(\n \"resolve-design-system\",\n {\n title: \"Resolve Design System\",\n description: `Search for design systems matching a query using semantic search.\n\nYou MUST call this before 'get-design-system-docs' to obtain a valid design system ID.\n\nSearch by:\n- Industry (fintech, education, travel, developer tools)\n- Personality traits (professional, playful, minimal, warm)\n- Natural language descriptions of the UI you want\n\nExamples:\n- \"fintech startup\" → Stripe design system\n- \"playful education app\" → Duolingo design system\n- \"minimal developer tools\" → Linear design system`,\n inputSchema: z.object({\n query: z.string().describe(\"Natural language query describing the type of UI you're building.\"),\n }),\n annotations: { readOnlyHint: true },\n },\n async ({ query }) => tracked(\"resolve-design-system\", { query }, async () => {\n try {\n const results = await provider.searchDesignSystems(query, 5);\n\n if (results.length === 0) {\n return { content: [{ type: \"text\" as const, text: \"No design systems found matching your query.\" }] };\n }\n\n const formatted = results\n .map((r) =>\n [\n `**ID:** ${r.id}`,\n `**Title:** ${r.title}`,\n `**Description:** ${r.description}`,\n `**Personality:** ${r.personality.join(\", \")}`,\n `**Industry:** ${r.industry.join(\", \")}`,\n `**Components:** ${r.componentCount}`,\n `**Match Score:** ${r.matchScore}%`,\n `**Registry:** ${REGISTRY_BASE_URL}/${r.id}`,\n ].join(\"\\n\"),\n )\n .join(\"\\n\\n----------\\n\\n\");\n\n return {\n content: [{\n type: \"text\" as const,\n text: `# Available Design Systems\\n\\nEach result includes an **ID** to use with get-design-system-docs.\\n\\n---\\n\\n${formatted}`,\n }],\n };\n } catch (error) {\n return { content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }] };\n }\n }),\n );\n\n // ─── Tool 2: get-design-system-docs ─────────────────────────────────────\n\n server.registerTool(\n \"get-design-system-docs\",\n {\n title: \"Get Design System Documentation\",\n description: `Scaffolds a design system into the user's project.\n\nYou must call 'resolve-design-system' first to obtain the design system ID.\n\n**Default behavior (recommended): install the full design system.**\nCall with only a designSystemId and this tool returns ONE shadcn command that\ninstalls every component (globals + all UI primitives) into components/ui/ in\none shot. Run that command before you start writing feature code — the agent\nshould always have the full component library available.\n\nPass 'component' only when the user explicitly asks to inspect or customise a\nspecific component's source code. In that mode the tool returns just the\nrequested components plus their source code, not an install command.`,\n inputSchema: z.object({\n designSystemId: z.string().describe(\"The design system ID from resolve-design-system\"),\n component: z.union([z.string(), z.array(z.string())]).optional()\n .describe('Optional. Only pass this when the user asks to inspect specific component source code. Examples: \"button\", [\"button\", \"card\"]. Omit to scaffold the entire design system.'),\n }),\n outputSchema: PREVIEW_OUTPUT_SCHEMA,\n annotations: { readOnlyHint: true },\n // claude.ai only loads ~5 connector tools and this is one of them, while\n // the standalone preview-design-system is not. Carry the inline preview\n // widget here so \"show/preview <DS>\" renders a card in claude.ai too. [BD-95]\n _meta: {\n ui: { resourceUri: DS_PREVIEW_WIDGET_URI },\n \"ui/resourceUri\": DS_PREVIEW_WIDGET_URI,\n \"openai/outputTemplate\": DS_PREVIEW_WIDGET_URI,\n },\n },\n async ({ designSystemId, component }) => tracked(\"get-design-system-docs\", { designSystemId, component }, async () => {\n try {\n const system = await provider.getDesignSystemById(designSystemId);\n if (!system) {\n return { content: [{ type: \"text\" as const, text: `Design system '${designSystemId}' not found.` }] };\n }\n\n const { metadata, components: allComponents } = system;\n\n // Inline-preview payload for the widget (claude.ai renders it from this\n // tool since it doesn't load the standalone preview tool). [BD-95]\n const previewViewUrl = `${APP_BASE_URL}/design-systems/${metadata.id}`;\n const previewStructured = {\n status: \"completed\",\n name: metadata.title,\n viewUrl: previewViewUrl,\n tokensCss: await fetchCatalogTokensCss(metadata.id),\n };\n\n const header: string[] = [\n `# ${metadata.title}\\n`,\n `**Description:** ${metadata.description}`,\n `**Personality:** ${metadata.personality.join(\", \")}`,\n `**Industry:** ${metadata.industry.join(\", \")}`,\n ];\n if (metadata.primaryColor) header.push(`**Primary Color:** ${metadata.primaryColor}`);\n if (metadata.borderRadius) header.push(`**Border Radius:** ${metadata.borderRadius}`);\n if (metadata.font) header.push(`**Font:** ${metadata.font}`);\n // Preview link: the showcase renders every component live, so the user can\n // SEE this DS in the browser before/after installing instead of guessing\n // from code. Share this when presenting the install.\n header.push(`**Preview (see it live):** ${APP_BASE_URL}/design-systems/${metadata.id}`);\n\n // Install-all mode — default when no component filter is passed.\n if (!component) {\n const installNames = [\n \"globals\",\n ...allComponents.map((c) => c.name).sort(),\n ];\n const installUrls = installNames\n .map((name) => `${REGISTRY_BASE_URL}/${metadata.id}/${name}.json`)\n .join(\" \\\\\\n \");\n\n const parts = [\n ...header,\n \"\\n## Scaffold the full design system\\n\",\n REQUIREMENTS_MD,\n `Run these commands in the user's project root. The first **conditionally** runs \\`shadcn init\\` only when the project hasn't been set up yet (no \\`components.json\\`); the second installs **all ${installNames.length} pieces** (globals.css + ${allComponents.length} components) into \\`components/ui/\\` with a single shadcn invocation:`,\n \"```bash\",\n `# 1. Initialize shadcn if not already set up (creates components.json,`,\n `# components/ui/, lib/utils.ts, hooks up globals.css). Idempotent.`,\n `[ -f components.json ] || npx shadcn@latest init -d -y`,\n \"\",\n `# 2. Install Better Design's full DS into components/ui/`,\n `npx shadcn@latest add \\\\\\n ${installUrls}`,\n \"```\",\n ANTI_MOCKUP_MD,\n \"\\nAfter the install completes, read files from `components/ui/` directly when writing feature code — do not ask this tool for component source unless the user wants to inspect or customise a specific file.\",\n \"\\n## Included components\\n\",\n installNames.map((n) => `- \\`${n}\\``).join(\"\\n\"),\n \"\\n\" + GUARDRAILS_SETUP_MD,\n ];\n\n return { content: [{ type: \"text\" as const, text: parts.join(\"\\n\") }], structuredContent: previewStructured };\n }\n\n // Scoped mode — return source code for specific components.\n const componentNames = Array.isArray(component) ? component : [component];\n const components = allComponents.filter((c) => componentNames.includes(c.name));\n\n const scopedUrls = componentNames\n .map((name) => `${REGISTRY_BASE_URL}/${metadata.id}/${name}.json`)\n .join(\" \\\\\\n \");\n\n const parts = [\n ...header,\n \"\\n## Install just these components\\n\",\n REQUIREMENTS_MD,\n \"```bash\",\n `# Init shadcn if missing (idempotent — skips when components.json exists)`,\n `[ -f components.json ] || npx shadcn@latest init -d -y`,\n \"\",\n `npx shadcn@latest add \\\\\\n ${scopedUrls}`,\n \"```\",\n ANTI_MOCKUP_MD,\n \"\\n---\\n\",\n ];\n\n for (const comp of components) {\n const name = comp.name.charAt(0).toUpperCase() + comp.name.slice(1);\n parts.push(`## ${name}`);\n if (comp.description) parts.push(`**Description:** ${comp.description}`);\n parts.push(\"\");\n parts.push(\"```tsx\");\n parts.push(comp.code);\n parts.push(\"```\");\n parts.push(\"\");\n }\n\n return { content: [{ type: \"text\" as const, text: parts.join(\"\\n\") }], structuredContent: previewStructured };\n } catch (error) {\n return { content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }] };\n }\n }),\n );\n\n // ─── Tool 3: get-ui-principle ───────────────────────────────────────────\n\n server.registerTool(\n \"get-ui-principle\",\n {\n title: \"Get UI Design Principle\",\n description: `Load visual UI design principles into context on-demand.\n\nUse this for visual surface decisions: hierarchy, spacing/layout, typography, color, depth, images, polish, and animation. For behavior, flows, forms, navigation, notifications, errors, search, onboarding, microcopy, or psychology/cognitive laws, use get-ux-principle instead.\n\nYou can either:\n1. Request a specific topic: get-ui-principle({ topic: \"spacing\" })\n2. Semantic search: get-ui-principle({ query: \"animation easing\" })\n3. Get index of all principles: get-ui-principle({})\n\nUse maxTokens to keep responses focused (recommended: 5000–10000).`,\n inputSchema: z.object({\n topic: z.string().optional().describe(\"Specific UI topic or alias to load, e.g. spacing, hierarchy, color, depth, animation.\"),\n query: z.string().optional()\n .describe(\"Natural language search query to find relevant principles.\"),\n maxTokens: z.number().min(500).max(50000).optional()\n .describe(\"Maximum tokens to return. Truncates content to fit. Recommended: 5000–10000.\"),\n }),\n annotations: { readOnlyHint: true },\n },\n async ({ topic, query, maxTokens }) => tracked(\"get-ui-principle\", { topic, query, maxTokens }, async () => {\n try {\n return await runPrincipleTool(provider, \"ui\", \"UI\", \"get-ui-principle\", { topic, query, maxTokens });\n } catch (error) {\n return { content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }] };\n }\n }),\n );\n\n // ─── Tool 4: get-ux-principle ───────────────────────────────────────────\n\n server.registerTool(\n \"get-ux-principle\",\n {\n title: \"Get UX Design Principle\",\n description: `Load UX behavior and product-flow principles into context on-demand.\n\nUse this before implementing flows or interactive behavior: forms, navigation, notifications, errors, dialogs, search, onboarding, responsive behavior, microcopy, interaction patterns, mobile patterns, sound, anti-patterns, understanding users, and cognitive laws / psychology / behavioral science.\n\nYou can either:\n1. Request a specific topic: get-ux-principle({ topic: \"forms\" })\n2. Use an alias: get-ux-principle({ topic: \"psychology\" })\n3. Semantic search: get-ux-principle({ query: \"psycho biases in pricing cards\" })\n4. Get index of all UX principles: get-ux-principle({})\n\nUse maxTokens to keep responses focused (recommended: 5000–10000).`,\n inputSchema: z.object({\n topic: z.string().optional()\n .describe(\"Specific UX topic or alias to load, e.g. forms, navigation, notifications, errors, search, onboarding, microcopy, cognitive-laws, psychology.\"),\n query: z.string().optional()\n .describe(\"Natural language search query to find relevant UX principles.\"),\n maxTokens: z.number().min(500).max(50000).optional()\n .describe(\"Maximum tokens to return. Truncates content to fit. Recommended: 5000–10000.\"),\n }),\n annotations: { readOnlyHint: true },\n },\n async ({ topic, query, maxTokens }) => tracked(\"get-ux-principle\", { topic, query, maxTokens }, async () => {\n try {\n return await runPrincipleTool(provider, \"ux\", \"UX\", \"get-ux-principle\", { topic, query, maxTokens });\n } catch (error) {\n return { content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }] };\n }\n }),\n );\n\n // ─── Tool 5: resolve-icon-library ───────────────────────────────────────\n\n server.registerTool(\n \"resolve-icon-library\",\n {\n title: \"Resolve Icon Library\",\n description: `Search for icon libraries matching a design style or personality using semantic search.\n\nUse this to find an icon library that matches your design system's personality:\n- Style traits (minimal, bold, rounded, sharp, outlined, filled)\n- Mood (friendly, professional, playful, serious, warm, elegant)\n- Use case (consumer, enterprise, developer, dashboard, mobile)\n\nExamples:\n- \"minimal clean professional\" → Iconoir, Feather Icons\n- \"friendly rounded warm\" → Phosphor, MingCute\n- \"bold technical enterprise\" → Tabler, Carbon`,\n inputSchema: z.object({\n query: z.string().describe(\"Style description or personality traits to match.\"),\n }),\n annotations: { readOnlyHint: true },\n },\n async ({ query }) => tracked(\"resolve-icon-library\", { query }, async () => {\n try {\n const results = await provider.searchIconLibraries(query, 5);\n\n if (results.length === 0) {\n return { content: [{ type: \"text\" as const, text: \"No icon libraries found matching your query.\" }] };\n }\n\n const formatted = results\n .map((r) => {\n const lines = [\n `**ID:** ${r.id}`,\n `**Name:** ${r.name}`,\n `**Prefix:** ${r.prefix}`,\n `**Style:** ${r.tags.join(\", \")}`,\n ];\n if (r.variants?.length) {\n lines.push(`**Variants:** ${r.variants.join(\", \")}`);\n lines.push(`**Default Variant:** ${r.defaultVariant || r.variants[0]}`);\n }\n lines.push(`**Match Score:** ${r.matchScore}%`);\n return lines.join(\"\\n\");\n })\n .join(\"\\n\\n----------\\n\\n\");\n\n return {\n content: [{\n type: \"text\" as const,\n text: `# Matching Icon Libraries\\n\\nUse the prefix with Iconify: \\`<Icon icon=\"prefix:icon-name\" />\\`\\n\\n---\\n\\n${formatted}`,\n }],\n };\n } catch (error) {\n return { content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }] };\n }\n }),\n );\n\n // ─── Tool 5: search-icons ──────────────────────────────────────────────\n\n server.registerTool(\n \"search-icons\",\n {\n title: \"Search Icons\",\n description: `Search for specific icons within an icon library.\n\nUse this after resolve-icon-library to find specific icons by name/concept.\n\nExamples:\n- search-icons({ query: \"home\", libraryId: \"phosphor\" })\n- search-icons({ query: \"settings gear\", libraryId: \"tabler\" })\n\nReturns icons formatted for use with Iconify React.`,\n inputSchema: z.object({\n query: z.string().describe(\"What icon you need (e.g., 'home', 'settings', 'user')\"),\n libraryId: z.string().describe(\"The icon library ID from resolve-icon-library\"),\n variant: z.string().optional().describe(\"Optional variant style (e.g., 'bold', 'outline', 'duotone').\"),\n }),\n annotations: { readOnlyHint: true },\n },\n async ({ query, libraryId, variant }) => tracked(\"search-icons\", { query, libraryId, variant }, async () => {\n try {\n const library = await provider.getIconLibraryById(libraryId);\n if (!library) {\n return { content: [{ type: \"text\" as const, text: `Icon library '${libraryId}' not found.` }] };\n }\n\n const icons = await provider.searchIconsInLibrary(query, library, variant, 15);\n\n if (icons.length === 0) {\n return { content: [{ type: \"text\" as const, text: `No icons found in ${library.name}.` }] };\n }\n\n const lines = [\n `# Icons from ${library.name}`,\n \"\",\n \"**Next step:** call `install-icons` with these names to scaffold them as SSR-clean React component files in the user's repo. Avoid the runtime `<Icon icon=\\\"...\\\" />` import — it requires a CDN fetch on every page load.\",\n \"\",\n \"```ts\",\n `install-icons({ libraryId: \"${library.id}\", names: [${icons.slice(0, 3).map((i) => `\"${stripPrefix(i)}\"`).join(\", \")}${icons.length > 3 ? \", ...\" : \"\"}] })`,\n \"```\",\n \"\",\n \"Found icons:\",\n \"\",\n ...icons.map((icon) => `- \\`${icon}\\``),\n ];\n\n return { content: [{ type: \"text\" as const, text: lines.join(\"\\n\") }] };\n } catch (error) {\n return { content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }] };\n }\n }),\n );\n\n // ─── Tool 6: get-review-rules ──────────────────────────────────────────\n\n server.registerTool(\n \"get-review-rules\",\n {\n title: \"Get Code Review Rules\",\n description: `Retrieves accessibility (WCAG 2.1) and visual design review rules for analyzing code.\n\nYou MUST call this after writing UI code to self-review your output.\n\n**Accessibility (WCAG 2.1):**\n- Critical: Images without alt text, icon buttons without aria-labels, form inputs without labels\n- Serious: Focus outline removed, missing keyboard handlers, color-only information\n\n**Visual Design:**\n- Layout & Spacing: Inconsistent spacing, overflow issues, z-index conflicts\n- Typography: Mixed fonts, line-height issues, missing fallbacks\n- Color & Contrast: Contrast below 4.5:1, missing hover/focus states\n\nUse maxTokens to keep responses focused (recommended: 5000–10000).`,\n inputSchema: z.object({\n category: z.enum([\"accessibility\", \"visual-design\", \"all\"]).optional()\n .describe(\"Filter rules by category (defaults to 'all')\"),\n maxTokens: z.number().min(500).max(50000).optional()\n .describe(\"Maximum tokens to return. Truncates content to fit. Recommended: 5000–10000.\"),\n }),\n annotations: { readOnlyHint: true },\n },\n async ({ category = \"all\", maxTokens }) => tracked(\"get-review-rules\", { category, maxTokens }, async () => {\n try {\n const rules = await provider.getReviewRules(category);\n\n if (rules.length === 0) {\n return { content: [{ type: \"text\" as const, text: \"No review rules found.\" }] };\n }\n\n const rulesOutput = rules\n .map((rule) => `# ${rule.title}\\n\\n${rule.content}`)\n .join(\"\\n\\n---\\n\\n\");\n\n let text = `# Code Review Rules\\n\\n${rulesOutput}\\n\\n---\\n\\n## Scoring System\\n\\n- **Critical issues:** -20 points each (max -100)\\n- **Serious issues:** -10 points each\\n- **Moderate issues:** -5 points each\\n\\nStart at 100. Minimum score is 0.\\n\\n90-100: Excellent | 75-89: Good | 60-74: Needs improvement | 0-59: Poor`;\n\n if (maxTokens) text = truncateToTokens(text, maxTokens);\n\n return { content: [{ type: \"text\" as const, text }] };\n } catch (error) {\n return { content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }] };\n }\n }),\n );\n\n // ─── Tool 7: install-icons ─────────────────────────────────────────────\n\n server.registerTool(\n \"install-icons\",\n {\n title: \"Install Icons as React Components\",\n description: `Scaffold SVG icons as React component files (.tsx) into the user's repo.\n\nCall this after \\`search-icons\\` to materialise the chosen icons as owned, SSR-clean component files — no runtime CDN fetch from \\`api.iconify.design\\`, no first-paint flash.\n\nThe tool fetches each SVG from the public Iconify API, inlines its viewBox + body into a small \\`<Name>Icon\\` React component, and returns a list of \\`<file path=\"...\">\\`-tagged blocks for the agent to write to disk. A barrel \\`index.ts\\` is also returned.\n\nUsage after writing the files:\n\\`\\`\\`tsx\nimport { HomeIcon } from \"@/components/icons\";\n<HomeIcon className=\"size-4\" />\n\\`\\`\\`\n\nIf \\`components/icons/index.ts\\` already exists in the project, MERGE the new exports into it rather than overwriting.`,\n inputSchema: z.object({\n libraryId: z.string().describe(\"Icon library ID from resolve-icon-library (e.g. 'tabler', 'phosphor').\"),\n names: z.array(z.string()).min(1).describe(\"Icon names to install. May be bare (e.g. 'home') or prefixed (e.g. 'tabler:home').\"),\n targetDir: z.string().optional().describe(\"Directory inside the project to write into. Defaults to 'components/icons'.\"),\n format: z.enum([\"tsx\", \"svg\"]).optional().describe(\"Output format. 'tsx' (default) generates React components; 'svg' generates raw .svg files.\"),\n variant: z.string().optional().describe(\"Optional library variant (e.g. 'outline', 'filled').\"),\n }),\n annotations: { readOnlyHint: true },\n },\n async ({ libraryId, names, targetDir, format, variant }) => tracked(\n \"install-icons\",\n { libraryId, count: names.length, format: format ?? \"tsx\" },\n async () => {\n try {\n // Validate targetDir before any network/auth so a malicious or\n // malformed path is rejected up front, regardless of API key state.\n const dirResult = validateTargetDir(targetDir);\n if (!dirResult.ok) {\n return { content: [{ type: \"text\" as const, text: `Invalid targetDir: ${dirResult.error}` }] };\n }\n const dir = dirResult.dir;\n\n const library = await provider.getIconLibraryById(libraryId);\n if (!library) {\n return { content: [{ type: \"text\" as const, text: `Icon library '${libraryId}' not found. Call resolve-icon-library first.` }] };\n }\n const outFormat = format ?? \"tsx\";\n const prefix = library.prefix;\n\n interface IconFile {\n path: string;\n content: string;\n componentName: string;\n stem: string;\n }\n const generated: IconFile[] = [];\n const skipped: { name: string; reason: string }[] = [];\n const duplicates: string[] = [];\n\n // Dedupe input by sanitized stem before fetching. A malformed name\n // that fails sanitization is kept so the main loop can report it.\n const seenStems = new Set<string>();\n const uniqueNames: string[] = [];\n for (const rawName of names) {\n let stem: string;\n try {\n stem = toFileStem(rawName);\n } catch {\n // Let the main loop report the sanitization error via `skipped`.\n uniqueNames.push(rawName);\n continue;\n }\n if (seenStems.has(stem)) {\n duplicates.push(rawName);\n continue;\n }\n seenStems.add(stem);\n uniqueNames.push(rawName);\n }\n\n // Track PascalCase component names so we can flag collisions that\n // survived stem-dedup (theoretically possible across libraries).\n const seenComponentNames = new Set<string>();\n\n for (const rawName of uniqueNames) {\n const bare = stripPrefix(rawName);\n let stem: string;\n try {\n stem = toFileStem(rawName);\n } catch (err) {\n skipped.push({\n name: rawName,\n reason: err instanceof Error ? err.message : \"invalid name\",\n });\n continue;\n }\n const url = `${ICONIFY_API_BASE}/${prefix}/${bare}.svg${variant ? `?variant=${encodeURIComponent(variant)}` : \"\"}`;\n\n let rawSvg: string;\n try {\n const res = await fetchWithTimeout(url);\n if (!res.ok) {\n skipped.push({ name: rawName, reason: `HTTP ${res.status}` });\n continue;\n }\n rawSvg = await res.text();\n // Iconify returns a 1x1 placeholder SVG for unknown icons.\n if (rawSvg.includes('width=\"1\"') && rawSvg.includes('height=\"1\"') && !rawSvg.includes(\"<path\") && !rawSvg.includes(\"<g\")) {\n skipped.push({ name: rawName, reason: \"not found in library\" });\n continue;\n }\n } catch (err) {\n const isAbort = err instanceof Error && err.name === \"AbortError\";\n skipped.push({\n name: rawName,\n reason: isAbort\n ? `timeout after ${ICONIFY_FETCH_TIMEOUT_MS}ms`\n : err instanceof Error\n ? err.message\n : \"fetch failed\",\n });\n continue;\n }\n\n if (outFormat === \"svg\") {\n generated.push({\n path: `${dir}/${stem}.svg`,\n content: rawSvg.trim() + \"\\n\",\n componentName: \"\",\n stem,\n });\n continue;\n }\n\n const { viewBox, body } = parseSvg(rawSvg);\n const componentName = toPascalCase(rawName);\n if (seenComponentNames.has(componentName)) {\n duplicates.push(rawName);\n continue;\n }\n seenComponentNames.add(componentName);\n const content = buildTsxComponent({\n libraryName: library.name,\n iconName: rawName,\n viewBox,\n body,\n });\n generated.push({\n path: `${dir}/${stem}.tsx`,\n content,\n componentName,\n stem,\n });\n }\n\n const parts: string[] = [\n `# Install icons from ${library.name}`,\n \"\",\n \"Write each file below to disk in the user's project. Then import via:\",\n \"\",\n \"```tsx\",\n `import { HomeIcon } from \"@/${dir}\";`,\n `<HomeIcon className=\\\"size-4\\\" />`,\n \"```\",\n \"\",\n `If \\`${dir}/index.ts\\` already exists, **merge** the new exports into it instead of overwriting.`,\n \"\",\n `If \\`${dir}/.library.json\\` already exists, **merge** the new \\`icons\\` array into the existing one (set-union, sorted) and update \\`installedAt\\`. Do not overwrite the file blindly.`,\n \"\",\n \"## Files\",\n \"\",\n ];\n\n for (const file of generated) {\n parts.push(`<file path=\"${file.path}\">`);\n parts.push(file.content.trimEnd());\n parts.push(`</file>`);\n parts.push(\"\");\n }\n\n if (outFormat === \"tsx\" && generated.length > 0) {\n const barrel = buildBarrel(\n generated.map((f) => ({\n componentName: f.componentName,\n importPath: `./${f.stem}`,\n })),\n { libraryName: library.name, prefix: library.prefix },\n );\n parts.push(`<file path=\"${dir}/index.ts\">`);\n parts.push(barrel.trimEnd());\n parts.push(`</file>`);\n parts.push(\"\");\n }\n\n // Library-anchoring manifest — locks the chosen library so future\n // sessions don't mix in icons from a different one.\n if (generated.length > 0) {\n const installedIcons = Array.from(\n new Set(generated.map((f) => f.stem)),\n ).sort();\n const manifest = {\n library: library.id,\n prefix: library.prefix,\n source: \"iconify\" as const,\n installedAt: new Date().toISOString(),\n icons: installedIcons,\n };\n parts.push(`<file path=\"${dir}/.library.json\">`);\n parts.push(JSON.stringify(manifest, null, 2));\n parts.push(`</file>`);\n parts.push(\"\");\n }\n\n if (skipped.length > 0) {\n parts.push(\"## Skipped (fetch failed)\");\n parts.push(\"\");\n for (const s of skipped) {\n parts.push(`- \\`${s.name}\\` — ${s.reason}`);\n }\n parts.push(\"\");\n }\n\n if (duplicates.length > 0) {\n parts.push(\"## Duplicates (skipped)\");\n parts.push(\"\");\n parts.push(\"These names resolved to the same file stem or component name as an earlier entry:\");\n parts.push(\"\");\n for (const name of duplicates) {\n parts.push(`- \\`${name}\\``);\n }\n parts.push(\"\");\n }\n\n if (generated.length === 0) {\n parts.push(\"\");\n parts.push(\"No icons were generated. Check the icon names and try again.\");\n }\n\n return { content: [{ type: \"text\" as const, text: parts.join(\"\\n\") }] };\n } catch (error) {\n return { content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }] };\n }\n },\n ),\n );\n\n // ─── Tool 8: detect-icon-library ───────────────────────────────────────\n\n server.registerTool(\n \"detect-icon-library\",\n {\n title: \"Detect Existing Icon Library\",\n description: `Check if the user's project already has an icon library installed via Better Design.\n\nReads <targetDir>/.library.json (default targetDir: \"components/icons\") if it exists and returns the locked library + installed icon list.\n\nCall this BEFORE resolve-icon-library / install-icons. If a library is already locked, use it for any new icon work — do NOT switch libraries mid-project.\n\nReturns either:\n- The locked library info + installed icon list, with a hint to call install-icons using that libraryId, OR\n- A \"no library detected\" response, prompting the agent to call resolve-icon-library normally.`,\n inputSchema: z.object({\n manifestContent: z.string().optional()\n .describe(\"Contents of the project's components/icons/.library.json file, if it exists. The agent should attempt to read this file from disk and pass it here. If the file doesn't exist or can't be read, omit this field.\"),\n }),\n annotations: { readOnlyHint: true },\n },\n async ({ manifestContent }) => tracked(\"detect-icon-library\", { hasManifest: Boolean(manifestContent) }, async () => {\n if (!manifestContent || !manifestContent.trim()) {\n return { content: [{ type: \"text\" as const, text: \"No `.library.json` manifest found. Proceed by calling `resolve-icon-library` to pick a library, then `install-icons` to scaffold icons. The library you pick will be locked for subsequent installs.\" }] };\n }\n try {\n const parsed = JSON.parse(manifestContent);\n const lines = [\n `# Locked icon library: ${parsed.library ?? \"(unknown)\"}`,\n \"\",\n `- Prefix: \\`${parsed.prefix ?? \"?\"}\\``,\n `- Source: ${parsed.source ?? \"?\"}`,\n `- Installed at: ${parsed.installedAt ?? \"?\"}`,\n `- Already-installed icons: ${Array.isArray(parsed.icons) ? parsed.icons.length : 0}`,\n \"\",\n \"**Use this library for any new icon work.** Call `install-icons` with `libraryId: \\\"\" + (parsed.library ?? \"\") + \"\\\"` — do NOT pick a different library.\",\n ];\n return { content: [{ type: \"text\" as const, text: lines.join(\"\\n\") }] };\n } catch (err) {\n return { content: [{ type: \"text\" as const, text: `Failed to parse .library.json: ${err instanceof Error ? err.message : \"unknown error\"}\\n\\nProceed by calling \\`resolve-icon-library\\` to pick a library.` }] };\n }\n }),\n );\n\n // ─── Tool 9: create-design-system ──────────────────────────────────────\n //\n // Mirrors the web chat-input flow. POSTs the user's prompt to the anonymous\n // project endpoint, polls until generation finishes, then returns a single\n // `npx shadcn add` command that pulls every component + globals.css into the\n // caller's Next.js project via the per-project registry endpoint.\n\n server.registerTool(\n \"create-design-system\",\n {\n title: \"Create a New Design System\",\n description: `Generate a brand new design system tailored to the user's product, and return a single shadcn install command that lands the entire set of components + tokens (globals.css) into the user's Next.js project.\n\nUse this when the user wants a **custom** design system instead of installing one of the existing ones via 'get-design-system-docs'.\n\nHow it works:\n1. Sends the user's prompt to Better Design's generation pipeline (same flow the web chat input uses) and returns IMMEDIATELY with the project id + project URL.\n2. Generation runs in the background and typically takes 1-3 minutes.\n3. Call \\`check-design-system-status\\` with the returned project id (wait ~60 seconds first) to get the live preview URL and the final \\`npx shadcn add <registry-url>\\` install command once it completes.\n\nShare the project URL with the user right away so they can watch the generation live.`,\n inputSchema: z.object({\n prompt: z.string().min(1).max(10000).describe(\"Describe the design system the user wants. E.g. 'A warm, minimal design system for a personal finance app, soft pastels, rounded corners' or 'A brutalist developer tool aesthetic with sharp edges and monospace type'.\"),\n baseDesignSystemId: z.string().optional().describe(\"Optional. Pass a design system ID from `resolve-design-system` to bias generation toward an existing aesthetic (e.g. apply a theme tweak on top of Linear). Leave empty for a fully custom DS.\"),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n openWorldHint: false,\n },\n },\n async ({ prompt, baseDesignSystemId }) => tracked(\"create-design-system\", { hasBase: Boolean(baseDesignSystemId) }, async () => {\n const startUrl = `${APP_BASE_URL}/api/projects/anonymous`;\n let projectId: string;\n // Forward the caller's bearer when present. The /anonymous endpoint\n // detects it and meters per-user credits instead of the IP-keyed\n // anonymous quota — see packages/server/src/api/routes/projects.ts.\n const requestHeaders: Record<string, string> = { \"Content-Type\": \"application/json\" };\n if (authContext) {\n const bearer =\n authContext.kind === \"api-key\" ? authContext.apiKey : authContext.accessToken;\n requestHeaders.Authorization = `Bearer ${bearer}`;\n }\n try {\n const startRes = await fetch(startUrl, {\n method: \"POST\",\n headers: requestHeaders,\n body: JSON.stringify({\n value: prompt,\n ...(baseDesignSystemId ? { designSystemId: baseDesignSystemId } : {}),\n }),\n });\n if (!startRes.ok) {\n const text = await startRes.text().catch(() => \"\");\n return { content: [{ type: \"text\" as const, text: `Failed to start generation (HTTP ${startRes.status}). ${text.slice(0, 500)}` }] };\n }\n const body = (await startRes.json()) as { id?: string };\n if (!body.id) {\n return { content: [{ type: \"text\" as const, text: \"Generation endpoint did not return a project id.\" }] };\n }\n projectId = body.id;\n } catch (err) {\n return { content: [{ type: \"text\" as const, text: `Network error calling ${startUrl}: ${err instanceof Error ? err.message : String(err)}` }] };\n }\n\n // Return immediately. The old flow block-polled here for up to 3 minutes\n // waiting for COMPLETED, which outlives hosted MCP clients' per-tool-call\n // timeout (ChatGPT/Claude abort around a minute) — the user saw \"connector\n // timed out\" and never got the install command. Generation continues in\n // the background; `check-design-system-status` delivers the result. [BD-82]\n const projectUrl = `${APP_BASE_URL}/projects/${projectId}`;\n const lines = [\n `# Generation started`,\n \"\",\n `Project id: \\`${projectId}\\``,\n \"\",\n // Only authenticated callers (OAuth / API-key) own the project; anonymous\n // stdio callers get a neutral link, not a \"your account\" claim they can't honor.\n ...(authContext\n ? [`Saved to your Better Design account. Watch it generate live:`]\n : [`Watch it generate live:`]),\n projectUrl,\n \"\",\n `Generation takes 1-3 minutes. Share the project link with the user now, wait ~60 seconds, then call \\`check-design-system-status\\` with the project id to get the live preview URL and the final install command.`,\n ];\n return { content: [{ type: \"text\" as const, text: lines.join(\"\\n\") }] };\n }),\n );\n\n // ─── Tool 10: check-design-system-status ────────────────────────────────\n //\n // Companion to `create-design-system`, which returns as soon as generation\n // starts. This tool reads progress and, once the pipeline completes, returns\n // the live preview URL plus the same install instructions the old blocking\n // flow produced. [BD-82]\n\n server.registerTool(\n \"check-design-system-status\",\n {\n title: \"Check Design System Generation Status\",\n description: `Check on a design system generation started with 'create-design-system'. Returns progress while generating, and the live preview URL + the \\`npx shadcn add\\` install command once complete. Generation typically takes 1-3 minutes; poll every ~30 seconds until it reports ready.`,\n inputSchema: z.object({\n projectId: z.string().min(1).describe(\"The project id returned by create-design-system.\"),\n }),\n outputSchema: PREVIEW_OUTPUT_SCHEMA,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n openWorldHint: false,\n },\n // ChatGPT renders this tool's structuredContent as an inline preview card\n // (Apps SDK widget) instead of plain text; other clients ignore _meta and\n // read the text content. [BD-84]\n _meta: {\n ui: { resourceUri: DS_PREVIEW_WIDGET_URI },\n \"ui/resourceUri\": DS_PREVIEW_WIDGET_URI,\n \"openai/outputTemplate\": DS_PREVIEW_WIDGET_URI,\n \"openai/toolInvocation/invoking\": \"Checking your design system...\",\n \"openai/toolInvocation/invoked\": \"Design system status ready\",\n },\n },\n async ({ projectId }) => tracked(\"check-design-system-status\", {}, async () => {\n // Forward the caller's bearer: projects created by an authenticated MCP\n // caller are owner-scoped (isAnonymous = false), so an unauthenticated\n // status read 404s — see resolveMcpUser in the projects route.\n const headers: Record<string, string> = {};\n if (authContext) {\n const bearer =\n authContext.kind === \"api-key\" ? authContext.apiKey : authContext.accessToken;\n headers.Authorization = `Bearer ${bearer}`;\n }\n const statusUrl = `${APP_BASE_URL}/api/projects/${projectId}`;\n let project: { name?: string; designSystemStatus?: string; currentStep?: string | null };\n try {\n const res = await fetch(statusUrl, { headers });\n if (!res.ok) {\n return { content: [{ type: \"text\" as const, text: `Could not read project ${projectId} (HTTP ${res.status}). Check the id, or view it at ${APP_BASE_URL}/projects/${projectId}.` }] };\n }\n project = (await res.json()) as typeof project;\n } catch (err) {\n return { content: [{ type: \"text\" as const, text: `Network error calling ${statusUrl}: ${err instanceof Error ? err.message : String(err)}` }] };\n }\n\n const projectUrl = `${APP_BASE_URL}/projects/${projectId}`;\n if (project.designSystemStatus === \"COMPLETED\") {\n const registryUrl = `${APP_BASE_URL}/api/projects/${projectId}/registry/all.json`;\n // Fetch instructions from the registry endpoint so they stay in sync with the\n // server (no MCP republish for instruction tweaks). Fall back to a minimal\n // command if the endpoint doesn't ship `meta.installInstructions` yet.\n // The same payload's cssVars feed the inline preview (widget / artifact).\n let body = `\\`\\`\\`bash\\nnpx shadcn@latest add ${registryUrl}\\n\\`\\`\\``;\n let tokensCss = \"\";\n let dsName = `Project ${projectId.slice(0, 8)}`;\n try {\n const res = await fetch(registryUrl);\n if (res.ok) {\n const json = (await res.json()) as {\n name?: string;\n cssVars?: { light?: Record<string, string>; dark?: Record<string, string>; theme?: Record<string, string> };\n files?: Array<{ path?: string; content?: string }>;\n meta?: { installInstructions?: string; globalsCss?: string };\n };\n if (json.meta?.installInstructions) body = json.meta.installInstructions;\n tokensCss = tokensCssFromRegistry(json);\n // Registry `name` is the fixed literal \"design-system\"; the project's\n // own display name reads better on the preview card. [BD-86]\n if (project.name) dsName = project.name;\n else if (json.name) dsName = json.name;\n }\n } catch {\n // keep fallbacks\n }\n const previewDoc = tokensCss\n ? buildDsPreviewDocument({ name: dsName, tokensCss, viewUrl: projectUrl })\n : null;\n const lines = [\n `# Design system ready`,\n \"\",\n // Only authenticated callers (OAuth / API-key) own the project; anonymous\n // stdio callers get a neutral link, not a \"your account\" claim they can't honor.\n ...(authContext\n ? [`Saved to your Better Design account. View, preview, and re-grab the install command anytime here:`]\n : [`View and preview your design system anytime here:`]),\n projectUrl,\n \"\",\n // No sandbox link here: the pipeline kills the e2b sandbox in its final\n // step, so the stored URL is already dead. The project page respawns a\n // sandbox on view and is the durable live preview. [BD-86]\n `Project id: \\`${projectId}\\``,\n \"\",\n `To install it into a local project (Cursor, Claude Code, a checked-out repo):`,\n \"\",\n REQUIREMENTS_MD,\n body,\n ANTI_MOCKUP_MD,\n // Clients without Apps SDK widgets (Claude) can still show the system\n // visually: the doc below is self-contained HTML built from the real\n // tokens, sized for an artifact viewer.\n ...(previewDoc\n ? [\n \"\",\n `IMPORTANT: if you can create artifacts (Claude) or render HTML, you MUST now create an HTML artifact from the document below so the user SEES the design system. Title it \"Design system preview\". Never print this code as text and never describe it instead of rendering it:`,\n \"```html\",\n previewDoc,\n \"```\",\n ]\n : []),\n ];\n return {\n content: [{ type: \"text\" as const, text: lines.join(\"\\n\") }],\n structuredContent: {\n status: \"completed\",\n name: dsName,\n viewUrl: projectUrl,\n installCommand: `npx shadcn@latest add ${registryUrl}`,\n tokensCss,\n },\n };\n }\n if (project.designSystemStatus === \"ERROR\") {\n return {\n content: [{ type: \"text\" as const, text: `Generation failed for project ${projectId}. Last step: ${project.currentStep ?? \"(none)\"}. The user can retry from ${projectUrl}.` }],\n structuredContent: { status: \"error\", name: `Project ${projectId.slice(0, 8)}`, viewUrl: projectUrl, tokensCss: \"\" },\n };\n }\n const step = project.currentStep ? project.currentStep.replace(/^[a-z]+:/, \"\") : undefined;\n const stepNote = step ? ` Current step: ${step}.` : \"\";\n // Never surface the raw e2b sandbox URL: it is torn down the moment\n // generation finishes (and at idle), so any link to it is a trap that\n // 404s with \"Sandbox Not Found\". The project page is the durable preview;\n // it respawns a sandbox on view. [BD-89]\n return {\n content: [{ type: \"text\" as const, text: `Still generating (status: ${project.designSystemStatus ?? \"PENDING\"}).${stepNote}\\nCheck again in ~30 seconds. Watch it live on the project page: ${projectUrl}` }],\n structuredContent: {\n status: (project.designSystemStatus ?? \"PENDING\").toLowerCase(),\n name: `Project ${projectId.slice(0, 8)}`,\n viewUrl: projectUrl,\n step,\n tokensCss: \"\",\n },\n };\n }),\n );\n\n // ─── Tool 11: preview-design-system ─────────────────────────────────────\n //\n // Token-true visual preview of a CATALOG design system (the 47+ built-in\n // systems), so a hosted chat can show the user what a system looks like\n // before installing it. ChatGPT renders the structuredContent through the\n // same Apps SDK widget; Claude (and any client without widgets) renders the\n // self-contained HTML document from the text response as an artifact. [BD-84]\n\n server.registerTool(\n \"preview-design-system\",\n {\n title: \"Preview a Design System\",\n description: `Show the user a visual preview of a design system from the catalog (use the id from 'resolve-design-system'). Returns a token-true HTML preview: palette, typography, buttons, card, input, badge, plus a link to the full live showcase. Use this when the user wants to SEE a design system before installing it.`,\n inputSchema: z.object({\n designSystemId: z.string().min(1).describe(\"Design system id from resolve-design-system, e.g. 'linear', 'editorial-warm'.\"),\n }),\n outputSchema: PREVIEW_OUTPUT_SCHEMA,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n openWorldHint: false,\n },\n _meta: {\n ui: { resourceUri: DS_PREVIEW_WIDGET_URI },\n \"ui/resourceUri\": DS_PREVIEW_WIDGET_URI,\n \"openai/outputTemplate\": DS_PREVIEW_WIDGET_URI,\n \"openai/toolInvocation/invoking\": \"Building the preview...\",\n \"openai/toolInvocation/invoked\": \"Preview ready\",\n },\n },\n async ({ designSystemId }) => tracked(\"preview-design-system\", { designSystemId }, async () => {\n const ds = await provider.getDesignSystemById(designSystemId);\n if (!ds) {\n return {\n content: [{ type: \"text\" as const, text: `Design system \"${designSystemId}\" not found. Call resolve-design-system first to get a valid id.` }],\n structuredContent: { status: \"error\", name: designSystemId, tokensCss: \"\" },\n };\n }\n // The DS's globals.css ships as a registry item; its cssVars carry the\n // full token set the preview needs.\n const tokensCss = await fetchCatalogTokensCss(designSystemId);\n const viewUrl = `${APP_BASE_URL}/design-systems/${designSystemId}`;\n if (!tokensCss) {\n return {\n content: [{ type: \"text\" as const, text: `Could not load tokens for \"${designSystemId}\". The full live showcase is at ${viewUrl}.` }],\n structuredContent: { status: \"error\", name: ds.metadata.title, viewUrl, tokensCss: \"\" },\n };\n }\n const previewDoc = buildDsPreviewDocument({ name: ds.metadata.title, tokensCss, viewUrl });\n const text = [\n `# ${ds.metadata.title}`,\n \"\",\n ds.metadata.description,\n \"\",\n `Full live showcase (every component): ${viewUrl}`,\n \"\",\n `IMPORTANT: if you can create artifacts (Claude) or render HTML, you MUST now create an HTML artifact from the document below so the user SEES the design system. Title it \"Design system preview\". Never print this code as text and never describe it instead of rendering it:`,\n \"```html\",\n previewDoc,\n \"```\",\n ].join(\"\\n\");\n return {\n content: [{ type: \"text\" as const, text }],\n structuredContent: {\n status: \"completed\",\n name: ds.metadata.title,\n viewUrl,\n tokensCss,\n },\n };\n }),\n );\n\n // The Apps SDK widget template both preview tools reference. ChatGPT loads\n // this once per conversation and feeds it each tool call's structuredContent\n // via window.openai.toolOutput; non-widget clients never request it. [BD-84]\n // The registration config (3rd arg) populates the resources/list entry the\n // host scans to discover UI resources — it MUST declare the mcp-app mimeType\n // and ui meta there, not only on the read result, or claude.ai never treats\n // this as a renderable widget. (Mirrors registerAppResource.) [BD-95]\n server.registerResource(\n \"ds-preview-widget\",\n DS_PREVIEW_WIDGET_URI,\n {\n mimeType: \"text/html;profile=mcp-app\",\n _meta: {\n ui: {\n prefersBorder: true,\n csp: { resourceDomains: WIDGET_RESOURCE_DOMAINS },\n domain: WIDGET_APP_DOMAIN,\n },\n },\n },\n async () => ({\n contents: [\n {\n uri: DS_PREVIEW_WIDGET_URI,\n mimeType: \"text/html;profile=mcp-app\",\n text: DS_PREVIEW_WIDGET_HTML,\n // MCP Apps CSP (spec §UI Resource), set on the read result where the\n // host actually enforces it (docs/csp-cors.md). The MCP Apps SDK is now\n // INLINED in the widget (no esm.sh import) and the hero is a token-render\n // (no iframe), so the only external origins left are the Google Fonts\n // CDNs for webfont loading. `domain` gives the view a stable sandbox\n // origin Claude can allowlist (RFC 9728-style hash). [BD-92]\n _meta: {\n ui: {\n prefersBorder: true,\n csp: { resourceDomains: WIDGET_RESOURCE_DOMAINS },\n domain: WIDGET_APP_DOMAIN,\n },\n },\n },\n ],\n }));\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { DataProvider } from \"./data-provider\";\nimport { INSTRUCTIONS } from \"./instructions\";\nimport { registerAllTools, type ToolUsageContext, type McpAuthContext } from \"./tools\";\n\nexport type { ToolUsageContext, McpAuthContext };\n\nexport interface CreateMcpServerOptions {\n provider: DataProvider;\n name?: string;\n version?: string;\n /** Optional hook called on every tool invocation for analytics. */\n onToolUsage?: (\n tool: string,\n params: Record<string, unknown>,\n context: ToolUsageContext,\n ) => void;\n /**\n * Caller identity for the current MCP request. When set, tools that hit\n * upstream Better Design endpoints (notably `create-design-system`) forward\n * the bearer so the server can meter per-user credits instead of falling\n * back to the IP-keyed anonymous quota.\n */\n authContext?: McpAuthContext;\n}\n\nexport function createMcpServer(options: CreateMcpServerOptions): McpServer {\n const {\n provider,\n name = \"BetterDesign\",\n version = \"3.0.0\",\n onToolUsage,\n authContext,\n } = options;\n\n const server = new McpServer(\n { name, version },\n { instructions: INSTRUCTIONS },\n );\n\n registerAllTools(server, provider, onToolUsage, authContext);\n\n return server;\n}\n\n// Re-exports\nexport type { DataProvider };\nexport type {\n DesignSystemSearchResult,\n DesignSystemMetadata,\n DesignSystemComponent,\n DesignSystemWithComponents,\n FoundationalDoc,\n FoundationalDocSearchResult,\n IconLibrarySearchResult,\n IconLibraryInfo,\n PrincipleArea,\n} from \"./data-provider\";\nexport { INSTRUCTIONS } from \"./instructions\";\n","/**\n * Thin HTTP client for the Better Design API.\n * All data flows through the backend — the MCP never touches the DB directly.\n */\n\nimport { createHash } from \"node:crypto\";\n\nconst API_URL = process.env.API_URL ?? \"https://better-design.com\";\nconst API_KEY = process.env.BETTER_DESIGN_API_KEY;\n\nconst API_KEY_HASH = API_KEY\n ? createHash(\"sha256\").update(API_KEY).digest(\"hex\")\n : undefined;\n\nclass ApiError extends Error {\n constructor(\n public status: number,\n message: string,\n ) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n\nasync function request<T>(path: string): Promise<T> {\n if (!API_KEY) {\n throw new ApiError(401, \"BETTER_DESIGN_API_KEY is not set. Get one at https://better-design.com/mcp\");\n }\n\n const res = await fetch(`${API_URL}/api${path}`, {\n headers: {\n Authorization: `Bearer ${API_KEY}`,\n \"Content-Type\": \"application/json\",\n },\n signal: AbortSignal.timeout(15000),\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ message: res.statusText }));\n throw new ApiError(res.status, (body as { message?: string }).message ?? `API error ${res.status}`);\n }\n\n return res.json() as Promise<T>;\n}\n\n// ─── Design Systems ──────────────────────────────────────────────────────\n\nexport interface SearchResult {\n id: string;\n title: string;\n description: string;\n personality: string[];\n industry: string[];\n componentCount: number;\n matchScore: number;\n}\n\nexport async function searchDesignSystems(query: string, limit = 5) {\n return request<{ results: SearchResult[] }>(\n `/v1/design-systems/search?q=${encodeURIComponent(query)}&limit=${limit}`,\n );\n}\n\nexport interface DesignSystemMetadata {\n id: string;\n title: string;\n description: string;\n personality: string[];\n industry: string[];\n componentCount: number;\n primaryColor?: string;\n borderRadius?: string;\n font?: string;\n}\n\nexport interface Component {\n id: string;\n name: string;\n description: string;\n code: string;\n}\n\nexport async function getDesignSystem(id: string) {\n return request<{ metadata: DesignSystemMetadata; componentCount: number }>(\n `/v1/design-systems/${encodeURIComponent(id)}`,\n );\n}\n\nexport async function getDesignSystemComponents(id: string, names?: string[]) {\n const params = names?.length ? `?names=${names.map(encodeURIComponent).join(\",\")}` : \"\";\n return request<{ components: Component[] }>(\n `/v1/design-systems/${encodeURIComponent(id)}/components${params}`,\n );\n}\n\n// ─── Principles ──────────────────────────────────────────────────────────\n\nexport interface Principle {\n id: string;\n title: string;\n content: string;\n area?: \"ui\" | \"ux\" | null;\n topic?: string | null;\n aliases?: string[];\n sourceFile?: string | null;\n chunkType?: \"parent\" | \"section\" | null;\n}\n\nexport interface PrincipleSearchResult extends Principle {\n matchScore: number;\n}\n\nexport async function listPrinciples(area?: \"ui\" | \"ux\") {\n const params = area ? `?area=${area}` : \"\";\n return request<{ principles: { id: string; title: string; topic?: string | null; aliases?: string[] }[] }>(`/v1/principles${params}`);\n}\n\nexport async function getPrinciple(topic: string, area?: \"ui\" | \"ux\") {\n const params = area ? `?area=${area}` : \"\";\n return request<Principle>(`/v1/principles/${encodeURIComponent(topic)}${params}`);\n}\n\nexport async function searchPrinciples(query: string, limit = 5, area?: \"ui\" | \"ux\") {\n const params = new URLSearchParams({ q: query, limit: String(limit) });\n if (area) params.set(\"area\", area);\n return request<{ results: PrincipleSearchResult[] }>(\n `/v1/principles/search?${params}`,\n );\n}\n\n// ─── Icon Libraries ──────────────────────────────────────────────────────\n\nexport interface IconLibraryResult {\n id: string;\n name: string;\n prefix: string;\n category: string | null;\n tags: string[];\n matchScore: number;\n variants: string[] | null;\n defaultVariant: string | null;\n}\n\nexport async function searchIconLibraries(query: string, limit = 5) {\n return request<{ results: IconLibraryResult[] }>(\n `/v1/icon-libraries/search?q=${encodeURIComponent(query)}&limit=${limit}`,\n );\n}\n\nexport async function searchIcons(libraryId: string, query: string, variant?: string, limit = 15) {\n const params = new URLSearchParams({ q: query, limit: String(limit) });\n if (variant) params.set(\"variant\", variant);\n return request<{ icons: string[]; library: { id: string; name: string; prefix: string } }>(\n `/v1/icon-libraries/${encodeURIComponent(libraryId)}/icons?${params}`,\n );\n}\n\n// ─── Review Rules ────────────────────────────────────────────────────────\n\nexport interface ReviewRule {\n id: string;\n title: string;\n content: string;\n}\n\nexport async function getReviewRules(category: string = \"all\") {\n const params = category !== \"all\" ? `?category=${encodeURIComponent(category)}` : \"\";\n return request<{ rules: ReviewRule[] }>(`/v1/review-rules${params}`);\n}\n\n// ─── Alerts ──────────────────────────────────────────────────────────────\n\nexport interface ToolUsageContext {\n clientName?: string;\n clientVersion?: string;\n outputPreview?: string;\n}\n\nfunction postAlert(body: Record<string, unknown>) {\n fetch(`${API_URL}/api/internal/alert`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n signal: AbortSignal.timeout(5000),\n }).catch(() => {});\n}\n\nexport function trackToolUsage(\n tool: string,\n params: Record<string, unknown>,\n context: ToolUsageContext = {},\n) {\n postAlert({\n type: \"mcp-usage\",\n tool,\n params,\n apiKeyHash: API_KEY_HASH,\n clientName: context.clientName,\n clientVersion: context.clientVersion,\n mcpVersion: process.env.npm_package_version,\n outputPreview: context.outputPreview,\n });\n}\n\nexport function trackMcpInstalled(opts: { clientName?: string; clientVersion?: string }) {\n postAlert({\n type: \"mcp-installed\",\n apiKeyHash: API_KEY_HASH,\n clientName: opts.clientName,\n clientVersion: opts.clientVersion,\n mcpVersion: process.env.npm_package_version,\n });\n}\n","import type { DataProvider, IconLibraryInfo, PrincipleArea } from \"@better-design/shared/mcp\";\nimport {\n searchDesignSystems as apiSearchDesignSystems,\n getDesignSystem,\n getDesignSystemComponents,\n listPrinciples as apiListPrinciples,\n getPrinciple,\n searchPrinciples as apiSearchPrinciples,\n getReviewRules as apiGetReviewRules,\n searchIconLibraries as apiSearchIconLibraries,\n searchIcons as apiSearchIcons,\n} from \"./api-client.js\";\n\nexport function createHttpDataProvider(): DataProvider {\n return {\n async searchDesignSystems(query: string, limit = 5) {\n const { results } = await apiSearchDesignSystems(query, limit);\n return results;\n },\n\n async getDesignSystemById(id: string) {\n const [systemRes, componentsRes] = await Promise.all([\n getDesignSystem(id),\n getDesignSystemComponents(id),\n ]);\n return {\n metadata: systemRes.metadata,\n components: componentsRes.components,\n };\n },\n\n async listPrinciples(area?: PrincipleArea) {\n const { principles } = await apiListPrinciples(area);\n return principles;\n },\n\n async getPrincipleByTopic(topic: string, area?: PrincipleArea) {\n try {\n return await getPrinciple(topic, area);\n } catch {\n return null;\n }\n },\n\n async searchPrinciples(query: string, limit = 5, area?: PrincipleArea) {\n const { results } = await apiSearchPrinciples(query, limit, area);\n return results;\n },\n\n async getReviewRules(category = \"all\") {\n const { rules } = await apiGetReviewRules(category);\n return rules;\n },\n\n async searchIconLibraries(query: string, limit = 5) {\n const { results } = await apiSearchIconLibraries(query, limit);\n return results;\n },\n\n async getIconLibraryById(id: string) {\n // The search-icons endpoint handles library lookup server-side.\n // We do a lightweight search to get the library info.\n const { results } = await apiSearchIconLibraries(id, 1);\n const match = results.find((r) => r.id === id);\n if (!match) return null;\n return {\n id: match.id,\n name: match.name,\n prefix: match.prefix,\n variants: match.variants,\n defaultVariant: match.defaultVariant,\n variantFormat: null,\n };\n },\n\n async searchIconsInLibrary(\n query: string,\n library: IconLibraryInfo,\n variant?: string,\n limit = 15,\n ) {\n const { icons } = await apiSearchIcons(library.id, query, variant, limit);\n return icons;\n },\n };\n}\n","const argv = process.argv.slice(2);\nconst command = argv[0];\n\nif (command === \"setup\" || !command) {\n const { runSetup } = await import(\"./setup/index.js\");\n runSetup(argv.slice(1)).catch((error) => {\n console.error(error);\n process.exit(1);\n });\n} else {\n startServer().catch((error) => {\n console.error(\"Fatal error:\", error);\n process.exit(1);\n });\n}\n\nasync function startServer() {\n const { StdioServerTransport } = await import(\"@modelcontextprotocol/sdk/server/stdio.js\");\n const { createMcpServer } = await import(\"@better-design/shared/mcp\");\n const { createHttpDataProvider } = await import(\"./lib/http-data-provider.js\");\n const { trackToolUsage, trackMcpInstalled } = await import(\"./lib/api-client.js\");\n\n const server = createMcpServer({\n provider: createHttpDataProvider(),\n name: \"DesignSystems\",\n version: \"3.0.0\",\n onToolUsage: trackToolUsage,\n });\n\n server.server.oninitialized = () => {\n try {\n const info = server.server.getClientVersion?.();\n trackMcpInstalled({ clientName: info?.name, clientVersion: info?.version });\n } catch {\n // analytics must never break MCP startup\n }\n };\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error(\"Better Design MCP Server v3.0 running on stdio\");\n}\n"],"mappings":"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","names":["init_clients","existsSync","os","path","chmodSync","writeFileSync","writeFileSync","os","path","home","argv","argv","init_clients","principles","parts","icon","bearer","createHash","path","runSetup","createMcpServer","createHttpDataProvider","trackToolUsage","trackMcpInstalled"]}
1
+ {"version":3,"sources":["../../shared/src/mcp/clients.ts","../src/setup/clients.ts","../src/setup/constants.ts","../src/setup/fs-utils.ts","../src/setup/config-writer.ts","../src/setup/rule-writer.ts","../src/setup/args.ts","../src/setup/prompts.ts","../src/setup/provision.ts","../src/setup/index.ts","../../shared/src/mcp/instructions.ts","../../shared/src/mcp/tools/shared.ts","../../shared/src/foundational-docs/topic-utils.ts","../../shared/src/mcp/tools/principle-tools.ts","../../shared/src/mcp/icon-installer.ts","../../shared/src/mcp/tools/icon-tools.ts","../../shared/src/mcp/guardrails.ts","../../shared/src/mcp/html-kit.ts","../../shared/src/mcp/preview-widget-sdk.generated.ts","../../shared/src/mcp/preview-html.ts","../../shared/src/mcp/tools/design-system-tools.ts","../../shared/src/mcp/tools/preview-resource.ts","../../shared/src/mcp/tools.ts","../../shared/src/mcp/index.ts","../src/lib/api-client.ts","../src/lib/http-data-provider.ts","../src/index.ts"],"sourcesContent":["/**\n * Single source of truth for how Better Design's MCP server is configured in\n * each client: the server name, the remote endpoint, and the per-client config\n * shape (root key + entry, TOML block, dedicated file, or CLI command).\n *\n * Consumed by BOTH:\n * - the `better-design setup` CLI (packages/mcp/src/setup/clients.ts),\n * which adds OS config paths + detection on top of these shapes, and\n * - the website install pages (packages/web/.../mcp/install/_clients.tsx),\n * which add presentation (logo, copy, deeplinks) on top of these shapes.\n *\n * Keep config SHAPES here only. Paths/detection are CLI-only; presentation is\n * web-only. A drift guard test asserts both consumers agree with this file.\n */\n\nexport const MCP_NAME = \"better-design\";\n\n// One env convention for both surfaces. NEXT_PUBLIC_APP_URL wins first so the\n// web install snippets keep their original behaviour even in a build env that\n// also has BETTER_DESIGN_API_URL set; the CLI (Node, no NEXT_PUBLIC_APP_URL)\n// still overrides via BETTER_DESIGN_API_URL. `||` (not `??`) so an empty-string\n// env value falls through to prod instead of producing a broken \"/api/mcp\".\nconst API_BASE =\n process.env.NEXT_PUBLIC_APP_URL ||\n process.env.BETTER_DESIGN_API_URL ||\n \"https://better-design.com\";\n\nexport const MCP_URL = `${API_BASE}/api/mcp`;\n\nconst bearer = (apiKey: string) => ({ Authorization: `Bearer ${apiKey}` });\n\n/** Scope of an install: user/global vs the current project. */\nexport type McpScope = \"global\" | \"project\";\n\nexport interface JsonShape {\n kind: \"json\";\n /** Top-level key the server entry nests under (e.g. \"mcpServers\", \"servers\"). */\n rootKey: string;\n buildEntry: (apiKey: string) => Record<string, unknown>;\n}\nexport interface TomlShape {\n kind: \"toml\";\n /** The `[header]` line that identifies our block for idempotent replace. */\n blockHeader: string;\n buildBlock: (apiKey: string) => string;\n}\nexport interface FileShape {\n kind: \"file\";\n buildContent: (apiKey: string) => string;\n}\nexport interface CommandShape {\n kind: \"command\";\n buildCommand: (apiKey: string, scope: McpScope) => { bin: string; args: string[] };\n buildRemoveCommand: (scope: McpScope) => { bin: string; args: string[] };\n}\n\nexport type McpClientShape = JsonShape | TomlShape | FileShape | CommandShape;\n\nexport const MCP_CLIENT_SHAPES = {\n \"claude-code\": {\n kind: \"command\",\n buildCommand: (apiKey, scope) => ({\n bin: \"claude\",\n args: [\n \"mcp\",\n \"add\",\n \"--scope\",\n scope === \"global\" ? \"user\" : \"project\",\n MCP_NAME,\n \"--transport\",\n \"http\",\n MCP_URL,\n \"--header\",\n `Authorization: Bearer ${apiKey}`,\n ],\n }),\n buildRemoveCommand: (scope) => ({\n bin: \"claude\",\n args: [\"mcp\", \"remove\", \"--scope\", scope === \"global\" ? \"user\" : \"project\", MCP_NAME],\n }),\n },\n cursor: {\n kind: \"json\",\n rootKey: \"mcpServers\",\n buildEntry: (apiKey) => ({ url: MCP_URL, headers: bearer(apiKey) }),\n },\n vscode: {\n kind: \"json\",\n rootKey: \"servers\",\n buildEntry: (apiKey) => ({ type: \"http\", url: MCP_URL, headers: bearer(apiKey) }),\n },\n windsurf: {\n kind: \"json\",\n rootKey: \"mcpServers\",\n buildEntry: (apiKey) => ({ serverUrl: MCP_URL, headers: bearer(apiKey) }),\n },\n zed: {\n kind: \"json\",\n rootKey: \"context_servers\",\n buildEntry: (apiKey) => ({ url: MCP_URL, headers: bearer(apiKey) }),\n },\n cline: {\n kind: \"json\",\n rootKey: \"mcpServers\",\n buildEntry: (apiKey) => ({\n type: \"streamableHttp\",\n url: MCP_URL,\n headers: bearer(apiKey),\n disabled: false,\n }),\n },\n \"claude-desktop\": {\n kind: \"json\",\n rootKey: \"mcpServers\",\n // Claude Desktop only launches stdio processes, so a key-based remote MCP\n // runs through the mcp-remote npx bridge.\n buildEntry: (apiKey) => ({\n command: \"npx\",\n args: [\"-y\", \"mcp-remote\", MCP_URL, \"--header\", \"Authorization:${AUTH_HEADER}\"],\n env: { AUTH_HEADER: `Bearer ${apiKey}` },\n }),\n },\n opencode: {\n kind: \"json\",\n rootKey: \"mcp\",\n buildEntry: (apiKey) => ({\n type: \"remote\",\n url: MCP_URL,\n enabled: true,\n headers: bearer(apiKey),\n }),\n },\n amp: {\n kind: \"json\",\n rootKey: \"amp.mcpServers\",\n buildEntry: (apiKey) => ({ url: MCP_URL, headers: bearer(apiKey) }),\n },\n codex: {\n kind: \"toml\",\n blockHeader: `[mcp_servers.${MCP_NAME}]`,\n buildBlock: (apiKey) =>\n `[mcp_servers.${MCP_NAME}]\\nurl = \"${MCP_URL}\"\\nhttp_headers = { Authorization = \"Bearer ${apiKey}\" }`,\n },\n continue: {\n kind: \"file\",\n buildContent: (apiKey) =>\n `name: Better Design MCP\\nversion: 0.0.1\\nschema: v1\\nmcpServers:\\n - name: ${MCP_NAME}\\n type: streamable-http\\n url: ${MCP_URL}\\n requestOptions:\\n headers:\\n Authorization: \"Bearer ${apiKey}\"\\n`,\n },\n} satisfies Record<string, McpClientShape>;\n\nexport type McpClientId = keyof typeof MCP_CLIENT_SHAPES;\n\n/** Serialize a JSON-shaped client's config the way both surfaces present/write it. */\nexport function jsonConfigString(shape: JsonShape, apiKey: string): string {\n return JSON.stringify({ [shape.rootKey]: { [MCP_NAME]: shape.buildEntry(apiKey) } }, null, 2);\n}\n\n/** Render a command-shaped client as a copy-paste shell string (quoting args with spaces). */\nexport function commandConfigString(shape: CommandShape, apiKey: string, scope: McpScope): string {\n const { bin, args } = shape.buildCommand(apiKey, scope);\n const quoted = args.map((arg) => (arg.includes(\" \") ? `\"${arg}\"` : arg));\n return `${bin} ${quoted.join(\" \")}`;\n}\n","/**\n * Registry of MCP clients the installer can configure.\n *\n * The config ENTRY shapes (url + Authorization header, root keys, the\n * mcp-remote bridge, the `claude mcp add` command) come from the single source\n * of truth in @better-design/shared/mcp/clients (shared with the website\n * install pages). This file adds the CLI-only layer on top: the on-disk config\n * path per OS (`pathFor`) and installed-client detection (`detect`).\n */\n\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { existsSync } from \"node:fs\";\n\nimport { MCP_CLIENT_SHAPES } from \"@better-design/shared/mcp/clients\";\n\nexport type Scope = \"global\" | \"project\";\n\ntype Platform = \"darwin\" | \"win32\" | \"linux\";\n\nfunction platform(): Platform {\n const p = os.platform();\n if (p === \"darwin\" || p === \"win32\") return p;\n return \"linux\";\n}\n\nconst home = os.homedir();\n\n/** Windows %APPDATA% (roaming), falling back to a sensible default. */\nfunction appData(): string {\n return process.env.APPDATA ?? path.join(home, \"AppData\", \"Roaming\");\n}\n\n/** XDG config home (~/.config on macOS/Linux). */\nfunction configHome(): string {\n return process.env.XDG_CONFIG_HOME ?? path.join(home, \".config\");\n}\n\n/** macOS \"Application Support\" / Windows %APPDATA% / Linux ~/.config. */\nfunction appSupport(): string {\n switch (platform()) {\n case \"darwin\":\n return path.join(home, \"Library\", \"Application Support\");\n case \"win32\":\n return appData();\n default:\n return configHome();\n }\n}\n\n/** A client whose config is a JSON object we merge a server entry into. */\nexport interface JsonClient {\n id: string;\n label: string;\n kind: \"json\";\n /** Top-level key the server entry nests under (e.g. \"mcpServers\", \"servers\"). */\n rootKey: string;\n /** Build the per-server config value written under rootKey[MCP_NAME]. */\n buildEntry: (apiKey: string) => Record<string, unknown>;\n /** Absolute config path per scope, or null if the scope is unsupported. */\n pathFor: (scope: Scope) => string | null;\n scopes: Scope[];\n /** True when the client appears installed on this machine. */\n detect: () => boolean;\n}\n\n/** A client configured by shelling out to its own CLI (e.g. `claude mcp add`). */\nexport interface CommandClient {\n id: string;\n label: string;\n kind: \"command\";\n /** argv for the install command, run only when `bin` resolves on PATH. */\n buildCommand: (apiKey: string, scope: Scope) => { bin: string; args: string[] };\n /** argv to remove a prior entry first, so re-running the install is idempotent. */\n buildRemoveCommand?: (scope: Scope) => { bin: string; args: string[] };\n scopes: Scope[];\n detect: () => boolean;\n}\n\n/** A client that owns a dedicated single file we write verbatim (e.g. Continue YAML). */\nexport interface FileClient {\n id: string;\n label: string;\n kind: \"file\";\n buildContent: (apiKey: string) => string;\n pathFor: (scope: Scope) => string | null;\n scopes: Scope[];\n detect: () => boolean;\n}\n\n/** A client whose config is TOML; we replace/append a single named block. */\nexport interface TomlClient {\n id: string;\n label: string;\n kind: \"toml\";\n /** The `[header]` line that identifies our block for idempotent replace. */\n blockHeader: string;\n buildBlock: (apiKey: string) => string;\n pathFor: (scope: Scope) => string | null;\n scopes: Scope[];\n detect: () => boolean;\n}\n\nexport type Client = JsonClient | CommandClient | FileClient | TomlClient;\n\nfunction dirExists(...segments: string[]): boolean {\n return existsSync(path.join(...segments));\n}\n\n/** Resolve a binary on PATH (best-effort, sync, no spawn). */\nfunction onPath(bin: string): boolean {\n const dirs = (process.env.PATH ?? \"\").split(path.delimiter);\n const exts = platform() === \"win32\" ? [\"\", \".exe\", \".cmd\", \".bat\"] : [\"\"];\n return dirs.some((d) => d && exts.some((ext) => existsSync(path.join(d, bin + ext))));\n}\n\n// Each entry = the shared config shape (what to write) + CLI-only path/detection.\nexport const CLIENTS: Client[] = [\n {\n ...MCP_CLIENT_SHAPES[\"claude-code\"],\n id: \"claude-code\",\n label: \"Claude Code\",\n scopes: [\"global\", \"project\"],\n detect: () => onPath(\"claude\"),\n },\n {\n ...MCP_CLIENT_SHAPES.cursor,\n id: \"cursor\",\n label: \"Cursor\",\n scopes: [\"global\", \"project\"],\n pathFor: (scope) =>\n scope === \"global\"\n ? path.join(home, \".cursor\", \"mcp.json\")\n : path.join(process.cwd(), \".cursor\", \"mcp.json\"),\n detect: () => dirExists(home, \".cursor\"),\n },\n {\n ...MCP_CLIENT_SHAPES.vscode,\n id: \"vscode\",\n label: \"VS Code (Copilot)\",\n scopes: [\"global\", \"project\"],\n pathFor: (scope) =>\n scope === \"global\"\n ? path.join(appSupport(), \"Code\", \"User\", \"mcp.json\")\n : path.join(process.cwd(), \".vscode\", \"mcp.json\"),\n detect: () => dirExists(appSupport(), \"Code\") || onPath(\"code\"),\n },\n {\n ...MCP_CLIENT_SHAPES.windsurf,\n id: \"windsurf\",\n label: \"Windsurf\",\n scopes: [\"global\"],\n pathFor: (scope) =>\n scope === \"global\" ? path.join(home, \".codeium\", \"windsurf\", \"mcp_config.json\") : null,\n detect: () => dirExists(home, \".codeium\", \"windsurf\"),\n },\n {\n ...MCP_CLIENT_SHAPES.zed,\n id: \"zed\",\n label: \"Zed\",\n scopes: [\"global\"],\n pathFor: (scope) =>\n scope === \"global\"\n ? platform() === \"win32\"\n ? path.join(appData(), \"Zed\", \"settings.json\")\n : path.join(configHome(), \"zed\", \"settings.json\")\n : null,\n detect: () =>\n dirExists(configHome(), \"zed\") || dirExists(appSupport(), \"Zed\") || onPath(\"zed\"),\n },\n {\n ...MCP_CLIENT_SHAPES.cline,\n id: \"cline\",\n label: \"Cline (VS Code)\",\n scopes: [\"global\"],\n pathFor: (scope) =>\n scope === \"global\"\n ? path.join(\n appSupport(),\n \"Code\",\n \"User\",\n \"globalStorage\",\n \"saoudrizwan.claude-dev\",\n \"settings\",\n \"cline_mcp_settings.json\",\n )\n : null,\n detect: () =>\n dirExists(appSupport(), \"Code\", \"User\", \"globalStorage\", \"saoudrizwan.claude-dev\"),\n },\n {\n ...MCP_CLIENT_SHAPES[\"claude-desktop\"],\n id: \"claude-desktop\",\n label: \"Claude Desktop\",\n scopes: [\"global\"],\n pathFor: (scope) =>\n scope === \"global\"\n ? platform() === \"linux\"\n ? path.join(configHome(), \"Claude\", \"claude_desktop_config.json\")\n : path.join(appSupport(), \"Claude\", \"claude_desktop_config.json\")\n : null,\n detect: () =>\n platform() === \"linux\"\n ? dirExists(configHome(), \"Claude\")\n : dirExists(appSupport(), \"Claude\"),\n },\n {\n ...MCP_CLIENT_SHAPES.opencode,\n id: \"opencode\",\n label: \"OpenCode\",\n scopes: [\"global\", \"project\"],\n pathFor: (scope) =>\n scope === \"global\"\n ? path.join(configHome(), \"opencode\", \"opencode.json\")\n : path.join(process.cwd(), \"opencode.json\"),\n detect: () => dirExists(configHome(), \"opencode\") || onPath(\"opencode\"),\n },\n {\n ...MCP_CLIENT_SHAPES.amp,\n id: \"amp\",\n label: \"Amp (Sourcegraph)\",\n scopes: [\"global\"],\n pathFor: (scope) =>\n scope === \"global\" ? path.join(configHome(), \"amp\", \"settings.json\") : null,\n detect: () => dirExists(configHome(), \"amp\") || onPath(\"amp\"),\n },\n {\n ...MCP_CLIENT_SHAPES.codex,\n id: \"codex\",\n label: \"Codex CLI\",\n scopes: [\"global\"],\n pathFor: (scope) =>\n scope === \"global\" ? path.join(home, \".codex\", \"config.toml\") : null,\n detect: () => dirExists(home, \".codex\") || onPath(\"codex\"),\n },\n {\n ...MCP_CLIENT_SHAPES.continue,\n id: \"continue\",\n label: \"Continue.dev\",\n scopes: [\"project\"],\n pathFor: (scope) =>\n scope === \"project\"\n ? path.join(process.cwd(), \".continue\", \"mcpServers\", \"better-design.yaml\")\n : null,\n detect: () => dirExists(home, \".continue\") || dirExists(process.cwd(), \".continue\"),\n },\n];\n\nexport function clientById(id: string): Client | undefined {\n return CLIENTS.find((c) => c.id === id);\n}\n\n/** Clients that appear installed on this machine. */\nexport function detectInstalled(): Client[] {\n return CLIENTS.filter((c) => {\n try {\n return c.detect();\n } catch {\n return false;\n }\n });\n}\n","/**\n * Constants for the `better-design setup` installer.\n *\n * MCP_NAME / MCP_URL and the per-client config shapes live in\n * @better-design/shared/mcp/clients (the single source of truth shared with the\n * website install pages). Re-exported here for the installer's local imports.\n */\n\nexport { MCP_NAME, MCP_URL } from \"@better-design/shared/mcp/clients\";\n\nexport const DASHBOARD_URL = \"https://better-design.com/mcp\";\n\n/** Marker fences so the rule block can be found, replaced, or removed idempotently. */\nexport const RULE_START = \"<!-- better-design:start -->\";\nexport const RULE_END = \"<!-- better-design:end -->\";\n\n/** The auto-invoke rule written into CLAUDE.md / client rules files. */\nexport const RULE_BODY = `## Better Design\n\nAlways use the Better Design MCP tools for any frontend, UI, UX, interaction, flow, form, navigation, dialog, error, onboarding, component, or styling work, without me having to explicitly ask. Load visual guidance with \\`get-ui-principle\\`, load flow/behavior guidance with \\`get-ux-principle\\`, and self-review against \\`get-review-rules\\` after. Use \\`create-design-system\\` to generate the user's own brand (the default for building an app), or \\`find-design-system\\` / \\`get-design-system-docs\\` to install an existing catalog system.`;\n\nexport const RULE_BLOCK = `${RULE_START}\\n${RULE_BODY}\\n${RULE_END}`;\n","/** Filesystem helpers shared by the config and rule writers. */\n\nimport { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport function ensureDir(filePath: string): void {\n mkdirSync(path.dirname(filePath), { recursive: true });\n}\n\nexport function readIfExists(filePath: string): string | null {\n return existsSync(filePath) ? readFileSync(filePath, \"utf8\") : null;\n}\n\nconst BACKUP_DIR = path.join(os.homedir(), \".better-design\", \"backups\");\n\n/**\n * Back up a file before we modify it. Backups live in ~/.better-design/backups\n * (not next to the original) so project-scope edits don't litter the repo, and\n * are keyed by the original path so each file keeps exactly one backup.\n */\nexport function backup(filePath: string): string {\n const dest = path.join(BACKUP_DIR, `${filePath.replace(/[/\\\\:]/g, \"__\")}.bak`);\n mkdirSync(BACKUP_DIR, { recursive: true });\n // Create the backup owner-only from the start (no copy-then-chmod window where\n // a bearer token would be world-readable), then chmod to also cover overwrites.\n writeFileSync(dest, readFileSync(filePath), { mode: 0o600 });\n chmodSync(dest, 0o600);\n return dest;\n}\n","/**\n * Reads, backs up, merges, and writes MCP client config files.\n *\n * Core guarantee: never clobber a user's OTHER servers. JSON/JSONC files are\n * parsed and merged (a pre-existing better-design entry is replaced on re-run);\n * on a malformed config or unsupported shape we skip the write and hand back a\n * manual snippet instead of risking corruption.\n */\n\nimport { chmodSync, writeFileSync } from \"node:fs\";\nimport { spawnSync } from \"node:child_process\";\nimport {\n applyEdits,\n modify,\n parse,\n printParseErrorCode,\n type ParseError,\n} from \"jsonc-parser\";\n\nimport { MCP_NAME } from \"./constants.js\";\nimport type { Client, Scope } from \"./clients.js\";\nimport { backup, ensureDir, readIfExists } from \"./fs-utils.js\";\n\n/** External commands shouldn't hang the installer. */\nconst COMMAND_TIMEOUT_MS = 60_000;\nconst JSON_FORMATTING = { insertSpaces: true, tabSize: 2, eol: \"\\n\" };\n\n/**\n * Write a config file that holds a bearer token, then force owner-only perms.\n * The `mode` write option only applies when CREATING a file, so we chmod after\n * to also lock down a pre-existing world-readable config we just rewrote.\n */\nfunction writeSecret(filePath: string, data: string): void {\n writeFileSync(filePath, data, { encoding: \"utf8\", mode: 0o600 });\n chmodSync(filePath, 0o600);\n}\n\nexport type WriteAction =\n | \"added\"\n | \"updated\"\n | \"skipped\"\n | \"manual\"\n | \"error\";\n\nexport interface WriteResult {\n client: string;\n action: WriteAction;\n filePath?: string;\n /** Detail shown to the user (manual snippet, error reason, etc.). */\n message?: string;\n}\n\n/** Skipped result for a client that has no config path at this scope. */\nfunction noPath(clientId: string, scope: Scope): WriteResult {\n return { client: clientId, action: \"skipped\", message: `no ${scope} config path` };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseJsonConfig(content: string): { root?: Record<string, unknown>; error?: string } {\n if (!content.trim()) return { root: {} };\n\n const errors: ParseError[] = [];\n const parsed = parse(content, errors, { allowTrailingComma: true, disallowComments: false });\n if (errors.length > 0) {\n const first = errors[0];\n return {\n error: `invalid JSON/JSONC (${printParseErrorCode(first.error)} at offset ${first.offset})`,\n };\n }\n if (!isPlainObject(parsed)) return { error: \"config root is not an object\" };\n return { root: parsed };\n}\n\n// ─── JSON clients ──────────────────────────────────────────────────────────\n\nfunction applyJsonClient(\n client: Extract<Client, { kind: \"json\" }>,\n apiKey: string,\n scope: Scope,\n): WriteResult {\n const filePath = client.pathFor(scope);\n if (!filePath) return noPath(client.id, scope);\n\n const entry = client.buildEntry(apiKey);\n const existing = readIfExists(filePath) ?? \"\";\n\n const manual = (reason: string): WriteResult => ({\n client: client.id,\n action: \"manual\",\n filePath,\n message: manualJsonSnippet(client, entry, reason, apiKey),\n });\n\n const parsed = parseJsonConfig(existing);\n if (parsed.error) return manual(parsed.error);\n const root = parsed.root ?? {};\n\n // Bail rather than clobber if the root key holds something other than an object.\n const rawBucket = root[client.rootKey];\n if (rawBucket !== undefined && !isPlainObject(rawBucket)) {\n return manual(`${client.rootKey} is not an object`);\n }\n const bucket = (rawBucket as Record<string, unknown> | undefined) ?? {};\n const isUpdate = Object.prototype.hasOwnProperty.call(bucket, MCP_NAME);\n bucket[MCP_NAME] = entry;\n root[client.rootKey] = bucket;\n\n if (existing) backup(filePath);\n ensureDir(filePath);\n const next = existing.trim()\n ? applyEdits(\n existing,\n modify(existing, [client.rootKey, MCP_NAME], entry, { formattingOptions: JSON_FORMATTING }),\n )\n : JSON.stringify(root, null, 2);\n writeSecret(filePath, `${next.trimEnd()}\\n`);\n return { client: client.id, action: isUpdate ? \"updated\" : \"added\", filePath };\n}\n\nfunction manualJsonSnippet(\n client: Extract<Client, { kind: \"json\" }>,\n entry: Record<string, unknown>,\n reason: string,\n apiKey: string,\n): string {\n const snippet = { [client.rootKey]: { [MCP_NAME]: redactSecret(entry, apiKey) } };\n return `Couldn't safely auto-edit (${reason}). Add this manually:\\n${JSON.stringify(snippet, null, 2)}`;\n}\n\nfunction redactSecret(value: unknown, secret: string): unknown {\n if (!secret) return value;\n if (typeof value === \"string\") return value.split(secret).join(\"<BETTER_DESIGN_API_KEY>\");\n if (Array.isArray(value)) return value.map((item) => redactSecret(item, secret));\n if (isPlainObject(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, redactSecret(item, secret)]),\n );\n }\n return value;\n}\n\n// ─── TOML clients (block replace/append) ─────────────────────────────────────\n\nfunction applyTomlClient(\n client: Extract<Client, { kind: \"toml\" }>,\n apiKey: string,\n scope: Scope,\n): WriteResult {\n const filePath = client.pathFor(scope);\n if (!filePath) return noPath(client.id, scope);\n\n const block = client.buildBlock(apiKey);\n const existing = readIfExists(filePath) ?? \"\";\n const next = upsertTomlBlock(existing, client.blockHeader, block);\n const isUpdate = existing.includes(client.blockHeader);\n\n if (existing) backup(filePath);\n ensureDir(filePath);\n writeSecret(filePath, next);\n return { client: client.id, action: isUpdate ? \"updated\" : \"added\", filePath };\n}\n\n/** Replace an existing `[header]` section in-place, else append it. */\nfunction upsertTomlBlock(content: string, header: string, block: string): string {\n const lines = content.split(\"\\n\");\n const start = lines.findIndex((l) => l.trim() === header);\n\n if (start === -1) {\n const base = content.trimEnd();\n return base ? `${base}\\n\\n${block}\\n` : `${block}\\n`;\n }\n\n let end = start + 1;\n while (end < lines.length && !lines[end].trimStart().startsWith(\"[\")) end++;\n const before = lines.slice(0, start).join(\"\\n\").trimEnd();\n const after = lines.slice(end).join(\"\\n\").trimStart();\n return [before, block, after].filter((s) => s.length > 0).join(\"\\n\\n\").trimEnd() + \"\\n\";\n}\n\n// ─── Dedicated-file clients (e.g. Continue YAML) ─────────────────────────────\n\nfunction applyFileClient(\n client: Extract<Client, { kind: \"file\" }>,\n apiKey: string,\n scope: Scope,\n): WriteResult {\n const filePath = client.pathFor(scope);\n if (!filePath) return noPath(client.id, scope);\n\n const content = client.buildContent(apiKey);\n const existing = readIfExists(filePath);\n if (existing === content) {\n return { client: client.id, action: \"skipped\", filePath, message: \"already configured\" };\n }\n\n if (existing) backup(filePath);\n ensureDir(filePath);\n writeSecret(filePath, content);\n return { client: client.id, action: existing ? \"updated\" : \"added\", filePath };\n}\n\n// ─── Command clients (e.g. `claude mcp add`) ─────────────────────────────────\n\nfunction applyCommandClient(\n client: Extract<Client, { kind: \"command\" }>,\n apiKey: string,\n scope: Scope,\n): WriteResult {\n const { bin, args } = client.buildCommand(apiKey, scope);\n\n // `claude mcp add` rejects a duplicate name, so drop any existing entry first\n // (ignoring failure when there is nothing to remove) to make re-runs idempotent.\n const remove = client.buildRemoveCommand?.(scope);\n if (remove) spawnSync(remove.bin, remove.args, { encoding: \"utf8\", timeout: COMMAND_TIMEOUT_MS });\n\n const res = spawnSync(bin, args, { encoding: \"utf8\", timeout: COMMAND_TIMEOUT_MS });\n if (res.error || res.status !== 0) {\n const reason = res.error?.message ?? res.stderr?.trim() ?? `exit ${res.status}`;\n return { client: client.id, action: \"error\", message: reason };\n }\n return { client: client.id, action: \"added\", message: `${bin} mcp add` };\n}\n\n// ─── Dispatch ────────────────────────────────────────────────────────────────\n\nexport function applyClient(\n client: Client,\n apiKey: string,\n scope: Scope,\n): WriteResult {\n try {\n switch (client.kind) {\n case \"json\":\n return applyJsonClient(client, apiKey, scope);\n case \"toml\":\n return applyTomlClient(client, apiKey, scope);\n case \"file\":\n return applyFileClient(client, apiKey, scope);\n case \"command\":\n return applyCommandClient(client, apiKey, scope);\n }\n } catch (err) {\n return {\n client: client.id,\n action: \"error\",\n message: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\n/** The scope to use for a client: the requested one if supported, else its first. */\nexport function resolveScope(client: Client, requested: Scope): Scope {\n return client.scopes.includes(requested) ? requested : client.scopes[0];\n}\n","/**\n * Writes the auto-invoke rule into the file each client reads: CLAUDE.md for\n * Claude Code, AGENTS.md for the cross-tool clients, .continue/rules for\n * Continue, and documented global rule files where available. This is the\n * trigger mechanism: MCP server instructions alone are unreliable across\n * clients (truncated / dropped by several hosts).\n *\n * The block is fenced with markers so re-running setup updates it in place\n * instead of appending duplicates.\n */\n\nimport { writeFileSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { RULE_BLOCK, RULE_END, RULE_START } from \"./constants.js\";\nimport type { Scope } from \"./clients.js\";\nimport { backup, ensureDir, readIfExists } from \"./fs-utils.js\";\n\nexport interface RuleResult {\n filePath: string;\n action: \"added\" | \"updated\" | \"skipped\";\n message?: string;\n}\n\n/** Clients that read the cross-tool AGENTS.md standard from the project root. */\nconst AGENTS_MD_CLIENTS = new Set([\n \"cursor\",\n \"vscode\",\n \"windsurf\",\n \"zed\",\n \"cline\",\n \"amp\",\n \"opencode\",\n]);\n\nexport interface RuleTargetRequest {\n clientId: string;\n scope: Scope;\n}\n\nexport interface RulePlan {\n /** Rule files to write (deduped). */\n files: string[];\n /** Clients whose rule lives in a settings UI, not a file we can write. */\n manual: string[];\n}\n\n/**\n * The rule file a client reads at a given scope, or null when it has no\n * writable rule file there (e.g. global rules configured in a settings UI).\n *\n * Claude Code reads CLAUDE.md only. Codex, OpenCode, and Windsurf have\n * documented writable global rule files. Everything else in AGENTS_MD_CLIENTS\n * reads the cross-tool AGENTS.md from project scope. Continue uses its own\n * .continue/rules directory.\n */\nfunction ruleFileFor(clientId: string, scope: Scope): string | null {\n const cwd = process.cwd();\n const home = os.homedir();\n\n switch (clientId) {\n case \"claude-code\":\n return scope === \"global\"\n ? path.join(home, \".claude\", \"CLAUDE.md\")\n : path.join(cwd, \"CLAUDE.md\");\n case \"codex\":\n return scope === \"global\"\n ? path.join(home, \".codex\", \"AGENTS.md\")\n : path.join(cwd, \"AGENTS.md\");\n case \"windsurf\":\n return scope === \"global\"\n ? path.join(home, \".codeium\", \"windsurf\", \"memories\", \"global_rules.md\")\n : path.join(cwd, \"AGENTS.md\");\n case \"opencode\":\n return scope === \"global\"\n ? path.join(home, \".config\", \"opencode\", \"AGENTS.md\")\n : path.join(cwd, \"AGENTS.md\");\n case \"continue\":\n return scope === \"project\"\n ? path.join(cwd, \".continue\", \"rules\", \"better-design.md\")\n : null;\n case \"claude-desktop\":\n return null; // desktop app, no project rule file\n default:\n return AGENTS_MD_CLIENTS.has(clientId) && scope === \"project\"\n ? path.join(cwd, \"AGENTS.md\")\n : null;\n }\n}\n\n/** Resolve which rule files to write and which clients need a manual step. */\nexport function ruleTargets(targets: RuleTargetRequest[]): RulePlan {\n const files = new Set<string>();\n const manual: string[] = [];\n\n for (const { clientId: id, scope } of targets) {\n const file = ruleFileFor(id, scope);\n if (file) files.add(file);\n else if (id !== \"claude-desktop\") manual.push(id);\n }\n\n return { files: [...files], manual };\n}\n\n/** Insert or replace the fenced rule block, preserving surrounding content. */\nfunction upsertBlock(content: string, start: number, end: number): string {\n const before = start === -1 ? content : content.slice(0, start);\n const after = start === -1 ? \"\" : content.slice(end + RULE_END.length);\n return [before.trim(), RULE_BLOCK, after.trim()].filter(Boolean).join(\"\\n\\n\") + \"\\n\";\n}\n\nexport function writeRule(filePath: string): RuleResult {\n const existing = readIfExists(filePath) ?? \"\";\n const start = existing.indexOf(RULE_START);\n const end = start === -1 ? -1 : existing.indexOf(RULE_END, start);\n\n // Start marker without a matching end = hand-edited/corrupted. Don't risk\n // truncating everything after it; leave the file untouched.\n if (start !== -1 && end === -1) {\n return {\n filePath,\n action: \"skipped\",\n message: \"unterminated better-design marker; left unchanged\",\n };\n }\n\n if (existing) backup(filePath);\n ensureDir(filePath);\n writeFileSync(filePath, upsertBlock(existing, start, end), \"utf8\");\n return { filePath, action: start === -1 ? \"added\" : \"updated\" };\n}\n","/** Parses argv for `better-design setup`. */\n\nimport type { Scope } from \"./clients.js\";\n\nexport interface SetupArgs {\n scope?: Scope;\n help: boolean;\n /**\n * BD-170: run non-interactively — skip every prompt and auto-mint an\n * anonymous key. Set by `-y`/`--yes`, and implied whenever there's no TTY\n * (an agent installing). Honest name: \"assume yes\", not \"log in\".\n */\n autoKey: boolean;\n}\n\nexport function parseArgs(argv: string[]): SetupArgs {\n const args: SetupArgs = { help: false, autoKey: false };\n\n for (const arg of argv) {\n switch (arg) {\n case \"--global\":\n args.scope = \"global\";\n break;\n case \"--project\":\n args.scope = \"project\";\n break;\n // `setup` is the implicit command; tolerate it appearing in argv.\n case \"setup\":\n break;\n // Non-interactive: skip prompts, auto-mint a key.\n case \"-y\":\n case \"--yes\":\n args.autoKey = true;\n break;\n case \"--help\":\n case \"-h\":\n args.help = true;\n break;\n }\n }\n\n return args;\n}\n\nexport const HELP_TEXT = `better-design: connect Better Design to your AI coding tools\n\nUsage:\n npx better-design Set up Better Design (auto-creates a key, no signup)\n npx better-design setup Same as the bare command, with options below\n\nOptions:\n -y, --yes Non-interactive: skip all prompts and auto-create a key\n --global Install at user/global scope (default)\n --project Install at project scope (current directory)\n --help, -h Show this help\n\nNo API key? You don't need one up front. The installer creates a free key for\nyou automatically (no account required) so you can start using Better Design\nright away. Create an account later to keep your key and lift the free limit.\n\nAlready have a key? Set BETTER_DESIGN_API_KEY and it will be used instead.\n\nManage your account or keys at https://better-design.com/mcp`;\n","/** Thin wrapper over @clack/prompts that turns Ctrl-C / cancel into a clean exit. */\n\nimport * as clack from \"@clack/prompts\";\n\nexport { clack };\n\n/** Unwrap a prompt result, exiting cleanly if the user cancelled. */\nexport function ensure<T>(value: T | symbol): T {\n if (clack.isCancel(value)) {\n clack.cancel(\"Setup cancelled.\");\n process.exit(0);\n }\n return value as T;\n}\n","/**\n * BD-170: provision a Better Design API key with no signup, so an agent (or a\n * human who'd rather not create an account yet) can run `npx better-design`\n * and just work. Hits the public `POST /api/api-keys/provision` endpoint, which\n * mints an anonymous account + key. The key works immediately on a small\n * lifetime free budget; the returned `claimUrl` lets the user upgrade later,\n * carrying the same key + history onto a real account.\n */\n\nimport { DASHBOARD_URL } from \"./constants.js\";\n\n// API_URL is an internal dev override (point the CLI at localhost); not a\n// public knob. Falls through to prod.\nconst API_URL = process.env.API_URL ?? \"https://better-design.com\";\n\nexport interface ProvisionResult {\n key: string;\n /** Where the user signs up later to keep this key + go unlimited. */\n claimUrl: string;\n}\n\nexport async function provisionApiKey(): Promise<ProvisionResult> {\n const res = await fetch(`${API_URL}/api/api-keys/provision`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n signal: AbortSignal.timeout(15000),\n });\n\n if (!res.ok) {\n const body = (await res.json().catch(() => ({}))) as { message?: string };\n throw new Error(\n body.message ??\n `Could not create a key automatically (HTTP ${res.status}). Create one at ${DASHBOARD_URL}`,\n );\n }\n\n const body = (await res.json()) as { key?: string; claimUrl?: string };\n if (!body.key) {\n throw new Error(`Provisioning endpoint returned no key. Create one at ${DASHBOARD_URL}`);\n }\n return { key: body.key, claimUrl: body.claimUrl ?? \"\" };\n}\n","/**\n * `better-design setup` — interactive installer.\n *\n * Detects installed MCP clients, writes the Better Design server config into\n * each chosen client (merge-safe, backed up), and drops an auto-invoke rule\n * into CLAUDE.md so agents reach for Better Design on UI work automatically.\n */\n\nimport { CLIENTS, clientById, detectInstalled, type Client, type Scope } from \"./clients.js\";\nimport { applyClient, resolveScope, type WriteResult } from \"./config-writer.js\";\nimport { ruleTargets, writeRule } from \"./rule-writer.js\";\nimport { spawn } from \"node:child_process\";\nimport { parseArgs, HELP_TEXT, type SetupArgs } from \"./args.js\";\nimport { clack, ensure } from \"./prompts.js\";\nimport { DASHBOARD_URL } from \"./constants.js\";\nimport { provisionApiKey } from \"./provision.js\";\n\nexport async function runSetup(argv: string[]): Promise<void> {\n const args = parseArgs(argv);\n if (args.help) {\n console.log(HELP_TEXT);\n return;\n }\n\n const interactive = Boolean(process.stdin.isTTY);\n\n clack.intro(\"Better Design setup\");\n\n const apiKey = await getApiKey(interactive, args.autoKey);\n const clients = await pickClients(interactive);\n if (clients.length === 0) {\n clack.outro(\"No clients selected. Run again and select at least one client.\");\n process.exit(interactive ? 0 : 1);\n }\n const scope = await pickScope(args, interactive);\n\n const writeRuleChoice = await confirmRule(interactive);\n\n const installPlan = clients.map((client) => ({ client, scope: resolveScope(client, scope) }));\n const results = applyAll(installPlan, apiKey, scope);\n const rulePlan = writeRuleChoice\n ? ruleTargets(\n installPlan.map(({ client, scope: usedScope }) => ({\n clientId: client.id,\n scope: usedScope,\n })),\n )\n : { files: [], manual: [] };\n const ruleResults = rulePlan.files.map((f) => writeRule(f));\n\n printSummary(results, ruleResults, rulePlan.manual);\n}\n\n/**\n * Resolve an API key WITHOUT forcing the user to sign up first. [BD-170]\n * - BETTER_DESIGN_API_KEY set → use it.\n * - non-interactive (agent) or login → auto-mint an anonymous key, no browser.\n * - interactive human → offer: mint now / browser account / paste.\n */\nasync function getApiKey(interactive: boolean, autoKey: boolean): Promise<string> {\n const fromEnv = process.env.BETTER_DESIGN_API_KEY;\n if (fromEnv) return fromEnv.trim();\n\n // Agents (no TTY) and `login` never block on a prompt — just mint a key.\n if (!interactive || autoKey) {\n return provisionFlow();\n }\n\n const choice = ensure(\n await clack.select({\n message: \"No API key found. How do you want to connect?\",\n options: [\n { value: \"browser\", label: \"Sign in / create an account\", hint: \"opens browser, unlimited, recommended\" },\n { value: \"generate\", label: \"Create a free key now\", hint: \"no account\" },\n ],\n initialValue: \"browser\",\n }),\n ) as \"browser\" | \"generate\";\n\n if (choice === \"browser\") return browserFlow();\n return provisionFlow();\n}\n\n/** Mint an anonymous key via the provisioning endpoint. */\nasync function provisionFlow(): Promise<string> {\n const spinner = clack.spinner();\n spinner.start(\"Creating a free Better Design key\");\n try {\n const { key, claimUrl } = await provisionApiKey();\n spinner.stop(\"Created a free Better Design key (no account needed)\");\n if (claimUrl) {\n clack.note(\n `You're on the free tier with a limited number of queries.\\nCreate an account to keep this key and go unlimited:\\n${claimUrl}`,\n \"Heads up\",\n );\n }\n return key;\n } catch (error) {\n spinner.stop(\"Couldn't create a key automatically\");\n throw error instanceof Error ? error : new Error(String(error));\n }\n}\n\n/** Open the dashboard so the human signs up, then paste the key back. */\nasync function browserFlow(): Promise<string> {\n openUrl(DASHBOARD_URL);\n clack.note(\n `Opened ${DASHBOARD_URL} in your browser.\\nSign in, copy your API key, then paste it here.`,\n \"Sign in\",\n );\n return pasteFlow();\n}\n\nasync function pasteFlow(): Promise<string> {\n const key = ensure(\n await clack.password({\n message: `Paste your Better Design API key (get one at ${DASHBOARD_URL})`,\n validate: (v) => (v && v.trim().length > 0 ? undefined : \"API key is required\"),\n }),\n );\n return key.trim();\n}\n\n/** Best-effort cross-platform \"open this URL in the default browser\". */\nfunction openUrl(url: string): void {\n const cmd = process.platform === \"darwin\" ? \"open\" : process.platform === \"win32\" ? \"start\" : \"xdg-open\";\n try {\n spawn(cmd, [url], { stdio: \"ignore\", detached: true, shell: process.platform === \"win32\" }).unref();\n } catch {\n // If we can't launch a browser, the note still shows the URL to open manually.\n }\n}\n\nasync function pickClients(interactive: boolean): Promise<Client[]> {\n const detected = detectInstalled();\n if (!interactive) return detected;\n\n const detectedIds = new Set(detected.map((c) => c.id));\n const selected = ensure(\n await clack.multiselect({\n message: \"Which clients should I configure?\",\n options: CLIENTS.map((c) => ({\n value: c.id,\n label: c.label,\n hint: detectedIds.has(c.id) ? \"detected\" : undefined,\n })),\n initialValues: detected.map((c) => c.id),\n required: true,\n }),\n );\n return (selected as string[]).map((id) => clientById(id)!);\n}\n\nasync function pickScope(args: SetupArgs, interactive: boolean): Promise<Scope> {\n if (args.scope) return args.scope;\n if (!interactive) return \"global\";\n return ensure(\n await clack.select({\n message: \"Install scope?\",\n options: [\n { value: \"global\" as Scope, label: \"Global\", hint: \"all projects\" },\n { value: \"project\" as Scope, label: \"Project\", hint: \"current directory only\" },\n ],\n initialValue: \"global\" as Scope,\n }),\n );\n}\n\nasync function confirmRule(interactive: boolean): Promise<boolean> {\n if (!interactive) return true;\n return ensure(\n await clack.confirm({\n message: \"Add an auto-invoke rule to CLAUDE.md so agents use Better Design for UI work?\",\n initialValue: true,\n }),\n );\n}\n\nfunction applyAll(\n installPlan: { client: Client; scope: Scope }[],\n apiKey: string,\n requestedScope: Scope,\n): WriteResult[] {\n const spinner = clack.spinner();\n spinner.start(\"Writing client configs\");\n const results = installPlan.map(({ client, scope }) => {\n const result = applyClient(client, apiKey, scope);\n if (scope !== requestedScope && !result.message) {\n result.message = `installed ${scope} (only scope this client supports)`;\n }\n return result;\n });\n spinner.stop(\"Wrote client configs\");\n return results;\n}\n\nfunction printSummary(\n results: WriteResult[],\n ruleResults: { filePath: string; action: string; message?: string }[],\n ruleManual: string[],\n): void {\n const lines = results.map((r) => formatLine(r.action, r.client, r.filePath, r.message));\n for (const rule of ruleResults) {\n lines.push(formatLine(rule.action, \"rule\", rule.filePath, rule.message));\n }\n for (const id of ruleManual) {\n lines.push(formatLine(\"manual\", `rule (${id})`, undefined, \"add it in this client's settings rules\"));\n }\n clack.note(lines.join(\"\\n\"), \"Summary\");\n\n // A skipped rule write means the auto-invoke trigger was NOT written — surface it.\n const failed =\n results.filter((r) => r.action === \"error\" || r.action === \"manual\").length +\n ruleResults.filter((r) => r.action === \"skipped\").length;\n if (failed > 0) {\n clack.outro(\"Done with warnings. Resolve the items above, then restart your client.\");\n } else {\n clack.outro(\"Done. Restart your AI client to load the Better Design tools.\");\n }\n}\n\nfunction formatLine(action: string, label: string, filePath?: string, message?: string): string {\n let line = `${icon(action)} ${label}${filePath ? ` ${filePath}` : \"\"}`;\n if (message) {\n line += action === \"manual\" || action === \"error\" ? `\\n ${message}` : ` (${message})`;\n }\n return line;\n}\n\nfunction icon(action: string): string {\n switch (action) {\n case \"added\":\n case \"updated\":\n return \"✓\";\n case \"skipped\":\n return \"–\";\n default:\n return \"✗\";\n }\n}\n","// Kept under 2KB on purpose: Claude Code truncates MCP server instructions at\n// 2048 bytes, so the trigger sentence and core tool chain must come first.\n// Detailed per-tool guidance lives in each tool's own description (loaded on\n// demand), not here.\nexport const INSTRUCTIONS = `# Better Design\n\nUse these tools for ANY frontend, UI, component, or styling work, without being asked.\n\nTools (exact names): find-design-system, get-design-system-docs, preview-design-system (SHOW in-chat), create-design-system, get-design-system-status (poll after create), get-ui-principle, get-ux-principle, get-review-rules, find-icon-library, find-icons, install-icons, detect-icon-library.\n\n## Build an app (even if the user never says \"design\" or \"brand\")\nOn any \"build/make me <app>\" request, create the user's BRAND design system FIRST, then build with it:\n1. create-design-system({ prompt }) — derive the prompt from the app (name, domain, vibe) -> a custom brand (tokens + components). Share the project URL so the user watches it build.\n2. get-design-system-status({ projectId }) — poll; it SHOWS the generated brand inline.\n3. Build the app with that brand. Brand first, not raw UI.\n\n## Building / modifying UI\n1. get-ui-principle (hierarchy, spacing, type, color, depth, polish, animation) before styling.\n2. get-ux-principle (forms, nav, errors, dialogs, onboarding, microcopy) before behavior.\n3. Use the project's own tokens/components. Semantic HTML, aria, keyboard nav, WCAG AA.\n4. get-review-rules after; fix every critical/serious issue before presenting.\n\n## Only if the user explicitly names an existing catalog DS\nDefault is create-design-system (above). Just to install a named catalog system: find-design-system(query) -> get-design-system-docs({ designSystemId }) -> run BOTH bash lines (installs globals.css + components into components/ui/; use only their tokens). Icons: detect-icon-library / find-icon-library -> find-icons -> install-icons. Never runtime @iconify/react.\n`.trim();\n","import { createHash } from \"node:crypto\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport type { DataProvider } from \"../data-provider\";\nimport type { DsTopResult } from \"../../design-systems/record-search\";\n\nconst MAX_OUTPUT_PREVIEW = 1000;\n\nexport const ICONIFY_FETCH_TIMEOUT_MS = 10_000;\nexport const ICONIFY_API_BASE = \"https://api.iconify.design\";\n\nexport const REGISTRY_BASE_URL =\n process.env.BETTER_DESIGN_REGISTRY_URL ??\n \"https://better-design.com/registry\";\n\nexport const APP_BASE_URL =\n process.env.BETTER_DESIGN_APP_URL ??\n \"https://better-design.com\";\n\nexport const WIDGET_RESOURCE_DOMAINS = [\n \"https://fonts.googleapis.com\",\n \"https://fonts.gstatic.com\",\n];\n\n// Origins the widget may embed as a nested iframe. The preview widget iframes the\n// REAL /design-systems/<id> (or /projects/<id>) page so the showcase is the\n// actual React components, not a token approximation. Maps to CSP frame-src.\n// ChatGPT honors this; claude.ai hardcodes frame-src and ignores it\n// (anthropics/claude-ai-mcp#40), so the widget falls back to an open-in-browser\n// link there. [BD-117]\nexport const WIDGET_FRAME_DOMAINS = [APP_BASE_URL];\n\n\nexport const WIDGET_APP_DOMAIN = `${createHash(\"sha256\")\n .update(`${APP_BASE_URL}/api/mcp`)\n .digest(\"hex\")\n .slice(0, 32)}.claudemcpcontent.com`;\n\nexport const REQUIREMENTS_MD = `> **Requirements:** these components target **Tailwind v4**. The installed \\`globals.css\\` uses the v4 entry point (\\`@import \"tailwindcss\"\\`), so the project needs \\`tailwindcss@^4\\` with \\`@tailwindcss/postcss\\` in its PostCSS config (or the \\`@tailwindcss/vite\\` plugin). On a Tailwind v3 project, migrate to v4 first, otherwise the build throws the \"trying to use tailwindcss directly as a PostCSS plugin\" error.\\n`;\n\nexport const ANTI_MOCKUP_MD = `\\n**Run the install. Do not substitute it.** Never hand-write these components from memory and never build a standalone HTML mockup as a stand-in: both skip the real design tokens, drift from the registry source, and cannot \\`import\\` from \\`@/components/ui/*\\`. The only correct output is running the command above in a real project, then composing the installed files.`;\n\n// Single source of truth for the React-vs-HTML build-target decision. Surfaced in\n// the get-design-system-html / get-design-system-docs tool descriptions and\n// outputs (tool text is NOT subject to the ~2KB server-instructions truncation in\n// Claude Code, so the rule reliably reaches every host). The gate is keyed on\n// CAPABILITY, not host name: Claude Desktop has a filesystem + shell, so it must\n// build React too — host name alone can't tell it apart from claude.ai web. [BD-147]\nexport const BUILD_TARGET_RULE = `**Pick the build target by capability, not by habit:**\n- **You can write files into a project and run a terminal** (Claude Code, Cursor, Windsurf, an IDE agent, Claude Desktop with filesystem/shell tools, any checked-out repo): use \\`get-design-system-docs\\`, run the shadcn install, and build **real React components**. This is the default for any actual project.\n- **You are in a pure inline chat canvas with NO file writes and NO terminal** (ChatGPT canvas, a Claude.ai chat artifact): use \\`get-design-system-html\\` and build with the framework-free HTML/CSS kit.\n\nEmitting a single standalone \\`.html\\` file as \"the app\" when you could run the React install is a bug: it can't \\`import @/components/ui/*\\`, drifts from the registry, and discards the real components.`;\n\n// Best-effort secondary signal on top of BUILD_TARGET_RULE: if the MCP client\n// identifies as a known code editor / agent (a host that always has a filesystem),\n// return its name so the caller can hard-steer it away from the inline HTML kit.\n// Returns undefined for chat hosts and unknown clients (the capability rule covers\n// those; we never want to wrongly push a chat canvas toward React). [BD-147]\nconst CODING_HOST_RE =\n /claude[- ]?code|cursor|windsurf|cline|continue|codeium|codex|zed|vs[- ]?code|vscode|jetbrains|intellij|webstorm|pycharm|goland|rider|neovim|nvim/i;\n\nexport function codingHostName(server: McpServer): string | undefined {\n try {\n const name = server.server.getClientVersion?.()?.name;\n return name && CODING_HOST_RE.test(name) ? name : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport const PREVIEW_OUTPUT_SCHEMA = z.object({\n status: z.string().describe(\"completed | error | pending | generating | selected\"),\n name: z.string().describe(\"Display name of the design system or project.\"),\n viewUrl: z.string().optional().describe(\"Owner-facing Better Design page (the human 'Open' link). May require login.\"),\n previewUrl: z.string().optional().describe(\"Public, cookieless showcase URL to embed in an iframe (sandboxed hosts can't carry the user's session). Falls back to viewUrl.\"),\n shotUrl: z.string().optional().describe(\"Real screenshot of the showcase page, for hosts that can't iframe it.\"),\n installCommand: z.string().optional().describe(\"shadcn install command, when complete.\"),\n step: z.string().optional().describe(\"Current generation step, while generating.\"),\n tokensCss: z.string().describe(\"CSS custom-property stylesheet for the system's tokens.\"),\n});\n\nexport interface ToolUsageContext {\n /** MCP client name from the initialize handshake (e.g. \"claude-ai\", \"cursor-vscode\", \"windsurf\"). */\n clientName?: string;\n /** MCP client version from the initialize handshake. */\n clientVersion?: string;\n /** Wall-clock time the tool took, in milliseconds. For the trace span latency [BD-109]. */\n durationMs?: number;\n /** Error message when isError is true. */\n errorMessage?: string;\n /** Whether the tool threw / returned an error. */\n isError?: boolean;\n /** First ~1000 chars of the tool's text response, used for eval inspection in PostHog. */\n outputPreview?: string;\n}\n\nexport type TrackMeta = Omit<ToolUsageContext, \"clientName\" | \"clientVersion\">;\n\nexport type McpAuthContext =\n | { kind: \"api-key\"; apiKey: string }\n | { kind: \"oauth\"; accessToken: string };\n\nexport type TrackToolUsage = (\n tool: string,\n params: Record<string, unknown>,\n meta?: TrackMeta,\n) => void;\n\nexport interface SearchCapture {\n query?: string;\n topic?: string;\n topResults: DsTopResult[];\n}\n\nexport type TrackedToolRunner = <TArgs, TResult>(\n tool: string,\n args: TArgs,\n run: () => Promise<TResult>,\n) => Promise<TResult>;\n\nexport interface RegisterToolDeps {\n server: McpServer;\n provider: DataProvider;\n tracked: TrackedToolRunner;\n track: TrackToolUsage;\n authContext?: McpAuthContext;\n}\n\nexport const SEARCH_TOOLS: ReadonlySet<string> = new Set([\n \"find-design-system\",\n \"get-ui-principle\",\n \"get-ux-principle\",\n \"get-review-rules\",\n \"find-icon-library\",\n \"find-icons\",\n \"create-design-system\",\n]);\n\nexport function extractOutputPreview(result: unknown): string | undefined {\n const content = (result as { content?: Array<{ type?: unknown; text?: unknown }> } | null | undefined)?.content;\n if (!Array.isArray(content)) return undefined;\n const first = content.find((c) => c?.type === \"text\" && typeof c.text === \"string\");\n const text = first?.text;\n if (typeof text !== \"string\" || !text) return undefined;\n return text.length > MAX_OUTPUT_PREVIEW\n ? text.slice(0, MAX_OUTPUT_PREVIEW) + \"…\"\n : text;\n}\n\nexport function createTracking(\n server: McpServer,\n onToolUsage?: (\n tool: string,\n params: Record<string, unknown>,\n context: ToolUsageContext,\n ) => void,\n): { track: TrackToolUsage; tracked: TrackedToolRunner } {\n const track: TrackToolUsage = (tool, params, meta) => {\n if (!onToolUsage) return;\n try {\n const info = server.server.getClientVersion?.();\n onToolUsage(tool, params, {\n clientName: info?.name,\n clientVersion: info?.version,\n durationMs: meta?.durationMs,\n errorMessage: meta?.errorMessage,\n isError: meta?.isError,\n outputPreview: meta?.outputPreview,\n });\n } catch {\n // analytics must never break MCP tool responses\n }\n };\n\n // Record successful and thrown tool calls so failed calls are not invisible in\n // session telemetry. [BD-109]\n const tracked: TrackedToolRunner = async (tool, args, run) => {\n const start = Date.now();\n try {\n const result = await run();\n track(tool, args as Record<string, unknown>, {\n durationMs: Date.now() - start,\n isError: false,\n outputPreview: extractOutputPreview(result),\n });\n return result;\n } catch (error) {\n track(tool, args as Record<string, unknown>, {\n durationMs: Date.now() - start,\n errorMessage: error instanceof Error ? error.message : String(error),\n isError: true,\n });\n throw error;\n }\n };\n\n return { track, tracked };\n}\n\nexport function trackSearch<T>(\n track: TrackToolUsage,\n tool: string,\n capture: SearchCapture,\n start: number,\n response: T,\n isError = false,\n errorMessage?: string,\n): T {\n track(\n tool,\n { query: capture.query, topic: capture.topic, topResults: capture.topResults },\n {\n durationMs: Date.now() - start,\n errorMessage,\n isError,\n outputPreview: extractOutputPreview(response),\n },\n );\n return response;\n}\n\nexport async function fetchWithTimeout(\n url: string,\n timeoutMs = ICONIFY_FETCH_TIMEOUT_MS,\n): Promise<Response> {\n const controller = new AbortController();\n const id = setTimeout(() => controller.abort(), timeoutMs);\n try {\n return await globalThis.fetch(url, { signal: controller.signal });\n } finally {\n clearTimeout(id);\n }\n}\n\nexport function truncateToTokens(text: string, maxTokens: number): string {\n const maxChars = maxTokens * 4;\n if (text.length <= maxChars) return text;\n return text.slice(0, maxChars) + `\\n\\n...(truncated to ~${maxTokens} tokens)`;\n}\n","export function normalizePrincipleTopic(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/^principle-/, \"\")\n .replace(/&/g, \"and\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n","import { z } from \"zod\";\nimport type { DataProvider, PrincipleArea } from \"../data-provider\";\nimport type { DsTopResult } from \"../../design-systems/record-search\";\nimport { normalizePrincipleTopic } from \"../../foundational-docs/topic-utils\";\nimport type { RegisterToolDeps } from \"./shared\";\nimport { trackSearch, truncateToTokens } from \"./shared\";\n\ntype PrincipleListItem = Awaited<ReturnType<DataProvider[\"listPrinciples\"]>>[number];\n\ninterface ToolTextResponse {\n content: { type: \"text\"; text: string }[];\n [x: string]: unknown;\n}\n\ninterface PrincipleRun {\n response: ToolTextResponse;\n capture: { query?: string; topic?: string; topResults: DsTopResult[] };\n}\n\nfunction levenshteinDistance(a: string, b: string): number {\n const previous = Array.from({ length: b.length + 1 }, (_, index) => index);\n for (let i = 1; i <= a.length; i += 1) {\n const current = [i];\n for (let j = 1; j <= b.length; j += 1) {\n current[j] = Math.min(\n current[j - 1] + 1,\n previous[j] + 1,\n previous[j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1),\n );\n }\n previous.splice(0, previous.length, ...current);\n }\n return previous[b.length];\n}\n\nfunction formatPrincipleIndex(\n principles: PrincipleListItem[],\n toolName: string,\n label: string,\n): string {\n const indexText = principles\n .map((principle) => {\n const topic = principle.topic ?? principle.id.replace(\"principle-\", \"\");\n const aliases = principle.aliases?.length\n ? ` (aliases: ${principle.aliases.slice(0, 5).join(\", \")})`\n : \"\";\n return `- **${topic}**: ${principle.title}${aliases}`;\n })\n .join(\"\\n\");\n\n return `# Available ${label} Principles\\n\\nUse \\`${toolName}({ topic: \"...\" })\\` to load a specific principle:\\n\\n${indexText}\\n\\nOr use \\`${toolName}({ query: \"...\" })\\` to search by natural language.`;\n}\n\nfunction formatTopicNotFound(\n topic: string,\n principles: PrincipleListItem[],\n toolName: string,\n): string {\n const needle = normalizePrincipleTopic(topic);\n const suggestions = principles\n .map((principle) => {\n const candidates = [\n principle.topic ?? principle.id.replace(\"principle-\", \"\"),\n principle.title,\n ...(principle.aliases ?? []),\n ];\n const distance = Math.min(\n ...candidates.map((candidate) => levenshteinDistance(needle, normalizePrincipleTopic(candidate))),\n );\n return { principle, distance };\n })\n .sort((a, b) => a.distance - b.distance)\n .slice(0, 5)\n .map(({ principle }) => principle.topic ?? principle.id.replace(\"principle-\", \"\"));\n\n return [\n `Principle '${topic}' not found.`,\n suggestions.length ? `Closest topics: ${suggestions.map((item) => `\\`${item}\\``).join(\", \")}.` : \"\",\n `Call \\`${toolName}({})\\` for the full index.`,\n ].filter(Boolean).join(\"\\n\");\n}\n\nasync function runPrincipleTool(\n provider: DataProvider,\n area: PrincipleArea,\n label: string,\n toolName: string,\n args: { topic?: string; query?: string; maxTokens?: number },\n): Promise<PrincipleRun> {\n const { topic, query, maxTokens } = args;\n\n if (topic && query) {\n return {\n response: {\n content: [{\n type: \"text\" as const,\n text: `Pass either 'topic' or 'query' to ${toolName}, not both.`,\n }],\n },\n capture: { query, topic, topResults: [] },\n };\n }\n\n if (topic) {\n const principle = await provider.getPrincipleByTopic(topic, area);\n if (!principle) {\n const principles = await provider.listPrinciples(area);\n return {\n response: { content: [{ type: \"text\" as const, text: formatTopicNotFound(topic, principles, toolName) }] },\n capture: { topic, topResults: [] },\n };\n }\n\n const topicLine = principle.topic ? `\\n\\nTopic: ${principle.topic}` : \"\";\n const aliasesLine = principle.aliases?.length ? `\\nAliases: ${principle.aliases.join(\", \")}` : \"\";\n let text = `# ${principle.title}${topicLine}${aliasesLine}\\n\\n${principle.content}`;\n if (maxTokens) text = truncateToTokens(text, maxTokens);\n return {\n response: { content: [{ type: \"text\" as const, text }] },\n capture: { topic, topResults: [{ id: principle.id }] },\n };\n }\n\n if (query) {\n const results = await provider.searchPrinciples(query, 5, area);\n const topResults = results.map((result) => ({ id: result.id, score: result.matchScore }));\n\n if (results.length === 0) {\n return {\n response: { content: [{ type: \"text\" as const, text: `No matching ${label.toLowerCase()} guidelines found. Try a different query.` }] },\n capture: { query, topResults },\n };\n }\n\n const formatted = results\n .map((result) =>\n `## ${result.title} (${result.matchScore}% match)\\n\\n${result.content.substring(0, 1500)}${result.content.length > 1500 ? \"\\n\\n...(truncated)\" : \"\"}`,\n )\n .join(\"\\n\\n---\\n\\n\");\n\n let text = `# ${label} Guidelines matching \"${query}\"\\n\\n${formatted}`;\n if (maxTokens) text = truncateToTokens(text, maxTokens);\n return {\n response: { content: [{ type: \"text\" as const, text }] },\n capture: { query, topResults },\n };\n }\n\n const principles = await provider.listPrinciples(area);\n\n if (principles.length === 0) {\n return {\n response: { content: [{ type: \"text\" as const, text: `No ${label.toLowerCase()} principles found.` }] },\n capture: { topResults: [] },\n };\n }\n\n return {\n response: {\n content: [{\n type: \"text\" as const,\n text: formatPrincipleIndex(principles, toolName, label),\n }],\n },\n capture: { topResults: [] },\n };\n}\n\nexport function registerPrincipleTools({ server, provider, track }: RegisterToolDeps): void {\n server.registerTool(\n \"get-ui-principle\",\n {\n title: \"Get UI Design Principle\",\n description: `Load visual UI design principles into context on-demand.\n\nUse this for visual surface decisions: hierarchy, spacing/layout, typography, color, depth, images, polish, and animation. For behavior, flows, forms, navigation, notifications, errors, search, onboarding, microcopy, or psychology/cognitive laws, use get-ux-principle instead.\n\nYou can either:\n1. Request a specific topic: get-ui-principle({ topic: \"spacing\" })\n2. Semantic search: get-ui-principle({ query: \"animation easing\" })\n3. Get index of all principles: get-ui-principle({})\n\nUse maxTokens to keep responses focused (recommended: 5000–10000).`,\n inputSchema: z.object({\n topic: z.string().trim().min(1).max(120).optional()\n .describe(\"Specific UI topic or alias to load, e.g. spacing, hierarchy, color, depth, animation.\"),\n query: z.string().trim().min(1).max(500).optional()\n .describe(\"Natural language search query to find relevant principles.\"),\n maxTokens: z.number().min(500).max(50000).optional()\n .describe(\"Maximum tokens to return. Truncates content to fit. Recommended: 5000-10000.\"),\n }),\n annotations: { readOnlyHint: true },\n },\n async ({ topic, query, maxTokens }) => {\n const start = Date.now();\n try {\n const { response, capture } = await runPrincipleTool(provider, \"ui\", \"UI\", \"get-ui-principle\", { topic, query, maxTokens });\n return trackSearch(track, \"get-ui-principle\", capture, start, response);\n } catch (error) {\n return trackSearch(\n track,\n \"get-ui-principle\",\n { query, topic, topResults: [] },\n start,\n { content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }] },\n true,\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n );\n\n server.registerTool(\n \"get-ux-principle\",\n {\n title: \"Get UX Design Principle\",\n description: `Load UX behavior and product-flow principles into context on-demand.\n\nUse this before implementing flows or interactive behavior: forms, navigation, notifications, errors, dialogs, search, onboarding, responsive behavior, microcopy, interaction patterns, mobile patterns, sound, anti-patterns, understanding users, and cognitive laws / psychology / behavioral science.\n\nYou can either:\n1. Request a specific topic: get-ux-principle({ topic: \"forms\" })\n2. Use an alias: get-ux-principle({ topic: \"psychology\" })\n3. Semantic search: get-ux-principle({ query: \"psycho biases in pricing cards\" })\n4. Get index of all UX principles: get-ux-principle({})\n\nUse maxTokens to keep responses focused (recommended: 5000–10000).`,\n inputSchema: z.object({\n topic: z.string().trim().min(1).max(120).optional()\n .describe(\"Specific UX topic or alias to load, e.g. forms, navigation, notifications, errors, search, onboarding, microcopy, cognitive-laws, psychology.\"),\n query: z.string().trim().min(1).max(500).optional()\n .describe(\"Natural language search query to find relevant UX principles.\"),\n maxTokens: z.number().min(500).max(50000).optional()\n .describe(\"Maximum tokens to return. Truncates content to fit. Recommended: 5000-10000.\"),\n }),\n annotations: { readOnlyHint: true },\n },\n async ({ topic, query, maxTokens }) => {\n const start = Date.now();\n try {\n const { response, capture } = await runPrincipleTool(provider, \"ux\", \"UX\", \"get-ux-principle\", { topic, query, maxTokens });\n return trackSearch(track, \"get-ux-principle\", capture, start, response);\n } catch (error) {\n return trackSearch(\n track,\n \"get-ux-principle\",\n { query, topic, topResults: [] },\n start,\n { content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }] },\n true,\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n );\n\n server.registerTool(\n \"get-review-rules\",\n {\n title: \"Get Code Review Rules\",\n description: `Retrieves accessibility (WCAG 2.1) and visual design review rules for analyzing code.\n\nYou MUST call this after writing UI code to self-review your output.\n\n**Accessibility (WCAG 2.1):**\n- Critical: Images without alt text, icon buttons without aria-labels, form inputs without labels\n- Serious: Focus outline removed, missing keyboard handlers, color-only information\n\n**Visual Design:**\n- Layout & Spacing: Inconsistent spacing, overflow issues, z-index conflicts\n- Typography: Mixed fonts, line-height issues, missing fallbacks\n- Color & Contrast: Contrast below 4.5:1, missing hover/focus states\n\nUse maxTokens to keep responses focused (recommended: 5000–10000).`,\n inputSchema: z.object({\n category: z.enum([\"accessibility\", \"visual-design\", \"all\"]).optional()\n .describe(\"Filter rules by category (defaults to 'all')\"),\n maxTokens: z.number().min(500).max(50000).optional()\n .describe(\"Maximum tokens to return. Truncates content to fit. Recommended: 5000–10000.\"),\n }),\n annotations: { readOnlyHint: true },\n },\n async ({ category = \"all\", maxTokens }) => {\n const start = Date.now();\n try {\n const rules = await provider.getReviewRules(category);\n const topResults = rules.map((rule) => ({ id: rule.id }));\n\n if (rules.length === 0) {\n return trackSearch(\n track,\n \"get-review-rules\",\n { query: category, topic: category, topResults },\n start,\n { content: [{ type: \"text\" as const, text: \"No review rules found.\" }] },\n );\n }\n\n const rulesOutput = rules\n .map((rule) => `# ${rule.title}\\n\\n${rule.content}`)\n .join(\"\\n\\n---\\n\\n\");\n\n let text = `# Code Review Rules\\n\\n${rulesOutput}\\n\\n---\\n\\n## Scoring System\\n\\n- **Critical issues:** -20 points each (max -100)\\n- **Serious issues:** -10 points each\\n- **Moderate issues:** -5 points each\\n\\nStart at 100. Minimum score is 0.\\n\\n90-100: Excellent | 75-89: Good | 60-74: Needs improvement | 0-59: Poor`;\n\n if (maxTokens) text = truncateToTokens(text, maxTokens);\n\n return trackSearch(\n track,\n \"get-review-rules\",\n { query: category, topic: category, topResults },\n start,\n { content: [{ type: \"text\" as const, text }] },\n );\n } catch (error) {\n return trackSearch(\n track,\n \"get-review-rules\",\n { query: category, topic: category, topResults: [] },\n start,\n { content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }] },\n true,\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n );\n}\n","// Helpers for the `install-icons` MCP tool — fetch SVGs from the Iconify\n// public API and turn them into React component files the agent writes to\n// disk in the user's project.\n\nexport interface ParsedSvg {\n viewBox: string;\n body: string;\n}\n\n/**\n * SVG attributes that JSX requires in camelCase. Anything not in this list\n * we leave alone (it'll either already be camelCase or will be passed\n * through as a data-/aria-/xmlns: attribute which JSX accepts as-is).\n */\nconst KEBAB_TO_CAMEL_ATTRS: Record<string, string> = {\n \"stroke-width\": \"strokeWidth\",\n \"stroke-linecap\": \"strokeLinecap\",\n \"stroke-linejoin\": \"strokeLinejoin\",\n \"stroke-dasharray\": \"strokeDasharray\",\n \"stroke-dashoffset\": \"strokeDashoffset\",\n \"stroke-miterlimit\": \"strokeMiterlimit\",\n \"stroke-opacity\": \"strokeOpacity\",\n \"fill-opacity\": \"fillOpacity\",\n \"fill-rule\": \"fillRule\",\n \"clip-path\": \"clipPath\",\n \"clip-rule\": \"clipRule\",\n \"color-interpolation-filters\": \"colorInterpolationFilters\",\n \"flood-color\": \"floodColor\",\n \"flood-opacity\": \"floodOpacity\",\n \"stop-color\": \"stopColor\",\n \"stop-opacity\": \"stopOpacity\",\n \"text-anchor\": \"textAnchor\",\n \"vector-effect\": \"vectorEffect\",\n \"paint-order\": \"paintOrder\",\n \"shape-rendering\": \"shapeRendering\",\n};\n\n/**\n * Convert SVG attribute names from kebab-case to JSX-friendly camelCase so\n * the inlined body is valid React TSX.\n */\nexport function jsxifyAttrs(svgBody: string): string {\n let out = svgBody;\n for (const [from, to] of Object.entries(KEBAB_TO_CAMEL_ATTRS)) {\n out = out.replace(new RegExp(`\\\\b${from}=`, \"g\"), `${to}=`);\n }\n return out;\n}\n\n/**\n * Convert an Iconify icon name (kebab-case, may include a prefix) into a\n * PascalCase React component identifier with an \"Icon\" suffix.\n *\n * Examples:\n * home -> HomeIcon\n * arrow-left -> ArrowLeftIcon\n * tabler:arrow-left -> ArrowLeftIcon\n * brand-github -> BrandGithubIcon\n * 1-circle -> Icon1Circle (component names cannot start with a digit)\n */\nexport function toPascalCase(rawName: string): string {\n const stripped = stripPrefix(rawName);\n const parts = stripped\n .split(/[-_]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1));\n const joined = parts.join(\"\");\n const safe = /^[0-9]/.test(joined) ? `Icon${joined}` : `${joined}Icon`;\n return safe;\n}\n\n/**\n * Strip an Iconify prefix (`tabler:`, `phosphor:`, etc.) from an icon name.\n */\nexport function stripPrefix(name: string): string {\n const idx = name.indexOf(\":\");\n return idx === -1 ? name : name.slice(idx + 1);\n}\n\n/**\n * Extract the viewBox attribute and inner body of an `<svg>` element from a\n * raw Iconify-served SVG string. Falls back to `0 0 24 24` if no viewBox is\n * present.\n */\nexport function parseSvg(rawSvg: string): ParsedSvg {\n const match = rawSvg.match(/<svg([^>]*)>([\\s\\S]*)<\\/svg>/i);\n if (!match) {\n return { viewBox: \"0 0 24 24\", body: rawSvg.trim() };\n }\n const attrs = match[1] ?? \"\";\n const body = (match[2] ?? \"\").trim();\n const viewBoxMatch = attrs.match(/viewBox\\s*=\\s*\"([^\"]+)\"/i);\n const viewBox = viewBoxMatch?.[1] ?? \"0 0 24 24\";\n return { viewBox, body };\n}\n\nexport interface BuildTsxOptions {\n libraryName: string;\n iconName: string; // original Iconify name (e.g. \"tabler:home\" or \"home\")\n viewBox: string;\n body: string;\n}\n\n/**\n * Detect whether the SVG body declares its own `fill=` or `stroke=` attribute\n * on any child element. Outline-style icons (Tabler, Lucide, Feather) typically\n * leave fill/stroke off and inherit it from the parent `<svg>`. Filled/duotone\n * icons (Material Symbols Filled, Phosphor Fill, Solar Bold-Duotone) declare\n * their own fill/stroke on child paths — in that case we must NOT emit\n * SVG-level defaults or they'll override the body and break rendering.\n */\nexport function hasOwnStrokeOrFill(body: string): boolean {\n return /\\b(fill|stroke)=/.test(body);\n}\n\n/**\n * Generate the source for a single `<Name>Icon` React component file.\n * Inlines the SVG body so there is no runtime CDN fetch.\n */\nexport function buildTsxComponent(opts: BuildTsxOptions): string {\n const componentName = toPascalCase(opts.iconName);\n const indentedBody = jsxifyAttrs(opts.body)\n .split(\"\\n\")\n .map((line) => (line.length ? ` ${line}` : line))\n .join(\"\\n\");\n const useOutlineDefaults = !hasOwnStrokeOrFill(opts.body);\n const svgAttrs = useOutlineDefaults\n ? ` fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n`\n : \"\";\n return `// From ${opts.libraryName} — used via Iconify (https://iconify.design)\nimport type { SVGProps } from \"react\";\n\nexport function ${componentName}(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"${opts.viewBox}\"\n${svgAttrs} {...props}\n >\n${indentedBody}\n </svg>\n );\n}\n`;\n}\n\nexport interface BarrelEntry {\n /** PascalCase component name, e.g. \"HomeIcon\". */\n componentName: string;\n /** File stem to import from (no extension), e.g. \"./home\". */\n importPath: string;\n}\n\nexport interface BuildBarrelOptions {\n /** Human-readable library name, e.g. \"Tabler Icons\". */\n libraryName?: string;\n /** Iconify prefix, e.g. \"tabler\" or \"ph\". */\n prefix?: string;\n}\n\n/**\n * Build a barrel `index.ts` that re-exports every icon component.\n * The agent is instructed to merge this with any existing barrel rather\n * than overwrite, so duplicate exports stay the caller's problem.\n *\n * When `libraryName` and `prefix` are provided, a header comment is\n * prepended that names the locked library and points at follow-up tools.\n */\nexport function buildBarrel(\n entries: BarrelEntry[],\n options: BuildBarrelOptions = {},\n): string {\n if (entries.length === 0) return \"\";\n const lines = entries\n .map((e) => `export { ${e.componentName} } from \"${e.importPath}\";`)\n .join(\"\\n\");\n const body = `${lines}\\n`;\n const { libraryName, prefix } = options;\n if (!libraryName || !prefix) return body;\n const header = [\n `// Icons from ${libraryName} (https://iconify.design/?prefix=${prefix}).`,\n `// To add more: invoke the install-icons MCP tool with libraryId=\"${prefix}\",`,\n `// or run \\`bun run add-icon <name>\\` if scripts/add-icon.ts exists in this repo.`,\n `// Do NOT mix in icons from other libraries — see .library.json for the locked choice.`,\n ``,\n ``,\n ].join(\"\\n\");\n return `${header}${body}`;\n}\n\n/**\n * Convert an icon name (with or without prefix) into a filesystem-safe\n * kebab-case file stem. Sanitises to `[a-z0-9-]` so a malicious or\n * malformed icon name (path separators, dots, control chars) can never\n * escape the target directory or produce an invalid filename. Throws if\n * the resulting stem would be empty so the caller can report it cleanly\n * via the skipped-list mechanism.\n */\nexport function toFileStem(rawName: string): string {\n const stem = stripPrefix(rawName).toLowerCase().replace(/[^a-z0-9-]/g, \"\");\n if (!stem) {\n throw new Error(`Icon name \"${rawName}\" sanitizes to empty stem.`);\n }\n return stem;\n}\n\n/**\n * Validate a user-supplied `targetDir` for the install-icons tool. Allowed:\n * relative paths only, no `..` segments, no leading `/`, no Windows drive\n * letters, no backslashes (Windows traversal), no null bytes. Trims trailing\n * slashes. Returns a discriminated-union result so callers can surface the\n * error via the existing MCP error-content pattern rather than throwing.\n */\nexport function validateTargetDir(\n input: string | undefined,\n): { ok: true; dir: string } | { ok: false; error: string } {\n const dir = (input ?? \"components/icons\").replace(/\\/+$/g, \"\");\n if (!dir) return { ok: false, error: \"targetDir cannot be empty.\" };\n if (dir.startsWith(\"/\") || /^[A-Za-z]:/.test(dir)) {\n return { ok: false, error: \"targetDir must be a relative path.\" };\n }\n if (dir.split(\"/\").some((seg) => seg === \"..\")) {\n return { ok: false, error: \"targetDir cannot contain '..' segments.\" };\n }\n if (dir.includes(\"\\\\\")) {\n return { ok: false, error: \"targetDir cannot contain backslashes.\" };\n }\n if (/\\0/.test(dir)) {\n return { ok: false, error: \"targetDir contains invalid characters.\" };\n }\n return { ok: true, dir };\n}\n","import { z } from \"zod\";\nimport {\n buildBarrel,\n buildTsxComponent,\n parseSvg,\n stripPrefix,\n toFileStem,\n toPascalCase,\n validateTargetDir,\n} from \"../icon-installer\";\nimport type { RegisterToolDeps } from \"./shared\";\nimport {\n fetchWithTimeout,\n ICONIFY_API_BASE,\n ICONIFY_FETCH_TIMEOUT_MS,\n trackSearch,\n} from \"./shared\";\n\nexport function registerIconTools({ server, provider, tracked, track }: RegisterToolDeps): void {\n const iconLibraryConfig = {\n title: \"Find Icon Library\",\n description: `Search for icon libraries matching a design style or personality using semantic search.\n\nUse this to find an icon library that matches your design system's personality:\n- Style traits (minimal, bold, rounded, sharp, outlined, filled)\n- Mood (friendly, professional, playful, serious, warm, elegant)\n- Use case (consumer, enterprise, developer, dashboard, mobile)\n\nExamples:\n- \"minimal clean professional\" → Iconoir, Feather Icons\n- \"friendly rounded warm\" → Phosphor, MingCute\n- \"bold technical enterprise\" → Tabler, Carbon`,\n inputSchema: z.object({\n query: z.string().describe(\"Style description or personality traits to match.\"),\n }),\n annotations: { readOnlyHint: true },\n };\n\n const makeIconLibraryHandler =\n (toolName: string) =>\n async ({ query }: { query: string }) => {\n const start = Date.now();\n try {\n const results = await provider.searchIconLibraries(query, 5);\n const topResults = results.map((result) => ({ id: result.id, score: result.matchScore }));\n\n if (results.length === 0) {\n return trackSearch(\n track,\n toolName,\n { query, topResults },\n start,\n { content: [{ type: \"text\" as const, text: \"No icon libraries found matching your query.\" }] },\n );\n }\n\n const formatted = results\n .map((r) => {\n const lines = [\n `**ID:** ${r.id}`,\n `**Name:** ${r.name}`,\n `**Prefix:** ${r.prefix}`,\n `**Style:** ${r.tags.join(\", \")}`,\n ];\n if (r.variants?.length) {\n lines.push(`**Variants:** ${r.variants.join(\", \")}`);\n lines.push(`**Default Variant:** ${r.defaultVariant || r.variants[0]}`);\n }\n lines.push(`**Match Score:** ${r.matchScore}%`);\n return lines.join(\"\\n\");\n })\n .join(\"\\n\\n----------\\n\\n\");\n\n return trackSearch(\n track,\n toolName,\n { query, topResults },\n start,\n {\n content: [{\n type: \"text\" as const,\n text: `# Matching Icon Libraries\\n\\nUse the prefix with Iconify: \\`<Icon icon=\"prefix:icon-name\" />\\`\\n\\n---\\n\\n${formatted}`,\n }],\n },\n );\n } catch (error) {\n return trackSearch(\n track,\n toolName,\n { query, topResults: [] },\n start,\n { content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }] },\n true,\n error instanceof Error ? error.message : String(error),\n );\n }\n };\n\n // find-icon-library (renamed from resolve-icon-library). [BD-173]\n server.registerTool(\"find-icon-library\", iconLibraryConfig, makeIconLibraryHandler(\"find-icon-library\"));\n\n const iconSearchConfig = {\n title: \"Find Icons\",\n description: `Search for specific icons within an icon library.\n\nUse this after find-icon-library to find specific icons by name/concept.\n\n**Query with a single canonical noun** (\"inbox\", \"calendar\", \"paperclip\"), not a multi-word phrase. The underlying index keyword-matches, so \"home\" beats \"home house dwelling\". Multi-word queries still work (they fall back to a per-keyword union) but a single noun gives the best ranking. Search once per concept; you don't need to retry with synonyms.\n\nExamples:\n- find-icons({ query: \"home\", libraryId: \"phosphor\" })\n- find-icons({ query: \"settings\", libraryId: \"tabler\" })\n\nReturns icons formatted for use with Iconify React. If you pass a variant, Better Design will try standard Iconify naming first, such as \\`home-bold\\`, then fall back to alternate naming and the bare icon name.`,\n inputSchema: z.object({\n query: z.string().describe(\"What icon you need (e.g., 'home', 'settings', 'user')\"),\n libraryId: z.string().describe(\"The icon library ID from find-icon-library\"),\n variant: z.string().optional().describe(\"Optional variant style (e.g., 'bold', 'outline', 'duotone').\"),\n }),\n annotations: { readOnlyHint: true },\n };\n\n const makeIconSearchHandler =\n (toolName: string) =>\n async ({ query, libraryId, variant }: { query: string; libraryId: string; variant?: string }) => {\n const start = Date.now();\n try {\n const library = await provider.getIconLibraryById(libraryId);\n if (!library) {\n return trackSearch(\n track,\n toolName,\n { query, topResults: [] },\n start,\n { content: [{ type: \"text\" as const, text: `Icon library '${libraryId}' not found.` }] },\n );\n }\n\n const icons = await provider.searchIconsInLibrary(query, library, variant, 15);\n const topResults = icons.map((icon) => ({ id: icon }));\n\n if (icons.length === 0) {\n return trackSearch(\n track,\n toolName,\n { query, topResults },\n start,\n { content: [{ type: \"text\" as const, text: `No icons found in ${library.name}.` }] },\n );\n }\n\n const lines = [\n `# Icons from ${library.name}`,\n \"\",\n \"**Next step:** call `install-icons` with these names to scaffold them as SSR-clean React component files in the user's repo. Avoid the runtime `<Icon icon=\\\"...\\\" />` import, it requires a CDN fetch on every page load.\",\n \"\",\n \"```ts\",\n `install-icons({ libraryId: \"${library.id}\", names: [${icons.slice(0, 3).map((i) => `\"${stripPrefix(i)}\"`).join(\", \")}${icons.length > 3 ? \", ...\" : \"\"}] })`,\n \"```\",\n \"\",\n \"Found icons:\",\n \"\",\n ...icons.map((icon) => `- \\`${icon}\\``),\n ];\n\n return trackSearch(\n track,\n toolName,\n { query, topResults },\n start,\n { content: [{ type: \"text\" as const, text: lines.join(\"\\n\") }] },\n );\n } catch (error) {\n return trackSearch(\n track,\n toolName,\n { query, topResults: [] },\n start,\n { content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }] },\n true,\n error instanceof Error ? error.message : String(error),\n );\n }\n };\n\n // find-icons (renamed from search-icons). [BD-173]\n server.registerTool(\"find-icons\", iconSearchConfig, makeIconSearchHandler(\"find-icons\"));\n\n server.registerTool(\n \"install-icons\",\n {\n title: \"Install Icons as React Components\",\n description: `Scaffold SVG icons as React component files (.tsx) into the user's repo.\n\nCall this after \\`find-icons\\` to materialise the chosen icons as owned, SSR-clean component files, with no runtime CDN fetch from \\`api.iconify.design\\` and no first-paint flash.\n\nThe tool fetches each SVG from the public Iconify API, inlines its viewBox + body into a small \\`<Name>Icon\\` React component, and returns a list of \\`<file path=\"...\">\\`-tagged blocks for the agent to write to disk. A barrel \\`index.ts\\` is also returned.\n\nUsage after writing the files:\n\\`\\`\\`tsx\nimport { HomeIcon } from \"@/components/icons\";\n<HomeIcon className=\"size-4\" />\n\\`\\`\\`\n\nIf \\`components/icons/index.ts\\` already exists in the project, MERGE the new exports into it rather than overwriting.`,\n inputSchema: z.object({\n libraryId: z.string().describe(\"Icon library ID from find-icon-library (e.g. 'tabler', 'phosphor').\"),\n names: z.array(z.string()).min(1).describe(\"Icon names to install. May be bare (e.g. 'home') or prefixed (e.g. 'tabler:home').\"),\n targetDir: z.string().optional().describe(\"Directory inside the project to write into. Defaults to 'components/icons'.\"),\n format: z.enum([\"tsx\", \"svg\"]).optional().describe(\"Output format. 'tsx' (default) generates React components; 'svg' generates raw .svg files.\"),\n variant: z.string().optional().describe(\"Optional library variant (e.g. 'outline', 'filled').\"),\n }),\n annotations: { readOnlyHint: true },\n },\n async ({ libraryId, names, targetDir, format, variant }) => tracked(\n \"install-icons\",\n { libraryId, count: names.length, format: format ?? \"tsx\" },\n async () => {\n try {\n const dirResult = validateTargetDir(targetDir);\n if (!dirResult.ok) {\n return { content: [{ type: \"text\" as const, text: `Invalid targetDir: ${dirResult.error}` }] };\n }\n const dir = dirResult.dir;\n\n const library = await provider.getIconLibraryById(libraryId);\n if (!library) {\n return { content: [{ type: \"text\" as const, text: `Icon library '${libraryId}' not found. Call find-icon-library first.` }] };\n }\n const outFormat = format ?? \"tsx\";\n const prefix = library.prefix;\n\n interface IconFile {\n path: string;\n content: string;\n componentName: string;\n stem: string;\n }\n const generated: IconFile[] = [];\n const skipped: { name: string; reason: string }[] = [];\n const duplicates: string[] = [];\n\n const seenStems = new Set<string>();\n const uniqueNames: string[] = [];\n for (const rawName of names) {\n let stem: string;\n try {\n stem = toFileStem(rawName);\n } catch {\n uniqueNames.push(rawName);\n continue;\n }\n if (seenStems.has(stem)) {\n duplicates.push(rawName);\n continue;\n }\n seenStems.add(stem);\n uniqueNames.push(rawName);\n }\n\n const seenComponentNames = new Set<string>();\n\n for (const rawName of uniqueNames) {\n const bare = stripPrefix(rawName);\n let stem: string;\n try {\n stem = toFileStem(rawName);\n } catch (err) {\n skipped.push({\n name: rawName,\n reason: err instanceof Error ? err.message : \"invalid name\",\n });\n continue;\n }\n const candidateNames = variant && !bare.endsWith(`-${variant}`) && !bare.startsWith(`${variant}-`)\n ? [`${bare}-${variant}`, `${variant}-${bare}`, bare]\n : [bare];\n\n let rawSvg: string | null = null;\n let lastFailureReason = \"fetch failed\";\n for (const candidateName of candidateNames) {\n const url = `${ICONIFY_API_BASE}/${prefix}/${candidateName}.svg`;\n try {\n const res = await fetchWithTimeout(url);\n if (!res.ok) {\n lastFailureReason = `HTTP ${res.status}`;\n continue;\n }\n\n const candidateSvg = await res.text();\n if (candidateSvg.includes('width=\"1\"') && candidateSvg.includes('height=\"1\"') && !candidateSvg.includes(\"<path\") && !candidateSvg.includes(\"<g\")) {\n lastFailureReason = \"not found in library\";\n continue;\n }\n\n rawSvg = candidateSvg;\n break;\n } catch (err) {\n const isAbort = err instanceof Error && err.name === \"AbortError\";\n lastFailureReason = isAbort\n ? `timeout after ${ICONIFY_FETCH_TIMEOUT_MS}ms`\n : err instanceof Error\n ? err.message\n : \"fetch failed\";\n }\n }\n\n if (!rawSvg) {\n skipped.push({ name: rawName, reason: lastFailureReason });\n continue;\n }\n\n if (outFormat === \"svg\") {\n generated.push({\n path: `${dir}/${stem}.svg`,\n content: rawSvg.trim() + \"\\n\",\n componentName: \"\",\n stem,\n });\n continue;\n }\n\n const { viewBox, body } = parseSvg(rawSvg);\n const componentName = toPascalCase(rawName);\n if (seenComponentNames.has(componentName)) {\n duplicates.push(rawName);\n continue;\n }\n seenComponentNames.add(componentName);\n const content = buildTsxComponent({\n libraryName: library.name,\n iconName: rawName,\n viewBox,\n body,\n });\n generated.push({\n path: `${dir}/${stem}.tsx`,\n content,\n componentName,\n stem,\n });\n }\n\n const parts: string[] = [\n `# Install icons from ${library.name}`,\n \"\",\n \"Write each file below to disk in the user's project. Then import via:\",\n \"\",\n \"```tsx\",\n `import { HomeIcon } from \"@/${dir}\";`,\n `<HomeIcon className=\\\"size-4\\\" />`,\n \"```\",\n \"\",\n `If \\`${dir}/index.ts\\` already exists, **merge** the new exports into it instead of overwriting.`,\n \"\",\n `If \\`${dir}/.library.json\\` already exists, **merge** the new \\`icons\\` array into the existing one (set-union, sorted) and update \\`installedAt\\`. Do not overwrite the file blindly.`,\n \"\",\n \"## Files\",\n \"\",\n ];\n\n for (const file of generated) {\n parts.push(`<file path=\"${file.path}\">`);\n parts.push(file.content.trimEnd());\n parts.push(`</file>`);\n parts.push(\"\");\n }\n\n if (outFormat === \"tsx\" && generated.length > 0) {\n const barrel = buildBarrel(\n generated.map((f) => ({\n componentName: f.componentName,\n importPath: `./${f.stem}`,\n })),\n { libraryName: library.name, prefix: library.prefix },\n );\n parts.push(`<file path=\"${dir}/index.ts\">`);\n parts.push(barrel.trimEnd());\n parts.push(`</file>`);\n parts.push(\"\");\n }\n\n if (generated.length > 0) {\n const installedIcons = Array.from(\n new Set(generated.map((f) => f.stem)),\n ).sort();\n const manifest = {\n library: library.id,\n prefix: library.prefix,\n source: \"iconify\" as const,\n installedAt: new Date().toISOString(),\n icons: installedIcons,\n };\n parts.push(`<file path=\"${dir}/.library.json\">`);\n parts.push(JSON.stringify(manifest, null, 2));\n parts.push(`</file>`);\n parts.push(\"\");\n }\n\n if (skipped.length > 0) {\n parts.push(\"## Skipped (fetch failed)\");\n parts.push(\"\");\n for (const s of skipped) {\n parts.push(`- \\`${s.name}\\`: ${s.reason}`);\n }\n parts.push(\"\");\n }\n\n if (duplicates.length > 0) {\n parts.push(\"## Duplicates (skipped)\");\n parts.push(\"\");\n parts.push(\"These names resolved to the same file stem or component name as an earlier entry:\");\n parts.push(\"\");\n for (const name of duplicates) {\n parts.push(`- \\`${name}\\``);\n }\n parts.push(\"\");\n }\n\n if (generated.length === 0) {\n parts.push(\"\");\n parts.push(\"No icons were generated. Check the icon names and try again.\");\n }\n\n return { content: [{ type: \"text\" as const, text: parts.join(\"\\n\") }] };\n } catch (error) {\n return { content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }] };\n }\n },\n ),\n );\n\n server.registerTool(\n \"detect-icon-library\",\n {\n title: \"Detect Existing Icon Library\",\n description: `Check if the user's project already has an icon library installed via Better Design.\n\nReads <targetDir>/.library.json (default targetDir: \"components/icons\") if it exists and returns the locked library + installed icon list.\n\nCall this BEFORE find-icon-library / install-icons. If a library is already locked, use it for any new icon work. Do NOT switch libraries mid-project.\n\nReturns either:\n- The locked library info + installed icon list, with a hint to call install-icons using that libraryId, OR\n- A \"no library detected\" response, prompting the agent to call find-icon-library normally.`,\n inputSchema: z.object({\n manifestContent: z.string().optional()\n .describe(\"Contents of the project's components/icons/.library.json file, if it exists. The agent should attempt to read this file from disk and pass it here. If the file doesn't exist or can't be read, omit this field.\"),\n }),\n annotations: { readOnlyHint: true },\n },\n async ({ manifestContent }) => tracked(\"detect-icon-library\", { hasManifest: Boolean(manifestContent) }, async () => {\n if (!manifestContent || !manifestContent.trim()) {\n return { content: [{ type: \"text\" as const, text: \"No `.library.json` manifest found. Proceed by calling `find-icon-library` to pick a library, then `install-icons` to scaffold icons. The library you pick will be locked for subsequent installs.\" }] };\n }\n try {\n const parsed = JSON.parse(manifestContent);\n const lines = [\n `# Locked icon library: ${parsed.library ?? \"(unknown)\"}`,\n \"\",\n `- Prefix: \\`${parsed.prefix ?? \"?\"}\\``,\n `- Source: ${parsed.source ?? \"?\"}`,\n `- Installed at: ${parsed.installedAt ?? \"?\"}`,\n `- Already-installed icons: ${Array.isArray(parsed.icons) ? parsed.icons.length : 0}`,\n \"\",\n \"**Use this library for any new icon work.** Call `install-icons` with `libraryId: \\\"\" + (parsed.library ?? \"\") + \"\\\"`. Do NOT pick a different library.\",\n ];\n return { content: [{ type: \"text\" as const, text: lines.join(\"\\n\") }] };\n } catch (err) {\n return { content: [{ type: \"text\" as const, text: `Failed to parse .library.json: ${err instanceof Error ? err.message : \"unknown error\"}\\n\\nProceed by calling \\`find-icon-library\\` to pick a library.` }] };\n }\n }),\n );\n}\n","// Design-system guardrails shipped into a consumer project after a Better\n// Design scaffold. The MCP tools (`get-design-system-docs`, `create-design-system`)\n// surface GUARDRAILS_SETUP_MD as text so the calling agent wires these up, and\n// the per-project shadcn registry route writes the two namespaced files\n// deterministically via `registry:file` + target.\n//\n// Why this exists: the MCP installs ~90 components into `components/ui/` but\n// nothing previously stopped the agent from hand-rolling its own `<button>`,\n// `<table>`, or faking a ⌘K palette / dropdown / notification with bare divs\n// (the styling still matched because both read the same globals.css tokens, but\n// the interactive fakes ended up dead). These guardrails make \"compose the\n// installed components, never rebuild a primitive\" durable across context\n// compaction and tool ecosystems (Claude Code, Cursor, Codex).\n//\n// SINGLE SOURCE OF TRUTH: edit the content here only. Both the registry route\n// and the MCP install text read these constants — do not duplicate the prose.\n\n// Written to `.better-design/rules.md`. A namespaced file the user does not own,\n// so it is always safe to (over)write. Referenced from CLAUDE.md / AGENTS.md.\nexport const DS_RULES_MD = `# Design system rules\n\nThe files in \\`components/ui/*\\` ARE the design system installed by Better Design.\n\n**Compose them. Never hand-roll a primitive the DS already ships.** Rebuilding\n\\`Button\\` as a raw \\`<button>\\`, a table as a raw \\`<table>\\`, or faking a ⌘K palette,\naccount menu, or notification bell with bare \\`<div>\\`s is a bug even when it looks\nright: it only matches because both read the same \\`app/globals.css\\` tokens, and the\nfaked interactive pieces end up dead (the search opens nothing, the menu has no\nitems, the bell does nothing).\n\nMap each UI need to the installed component BEFORE writing markup:\n\n- buttons, nav links (use \\`asChild\\`) -> \\`button\\`\n- panels, cards, KPI tiles, section containers -> \\`card\\`\n- tabular data -> \\`table\\` (not a raw \\`<table>\\`)\n- status pills, tags, labels -> \\`badge\\`\n- ⌘K / search palette -> \\`command\\` (\\`CommandDialog\\`)\n- account / overflow / context menus -> \\`dropdown-menu\\`\n- notification bell, flyouts -> \\`popover\\` + \\`notification\\`\n- transient confirmations -> \\`use-toast\\` + \\`toaster\\`\n- tooltips -> \\`tooltip\\` (wrap the app in \\`TooltipProvider\\`)\n- modals -> \\`dialog\\`; tab switchers -> \\`tabs\\`; avatars -> \\`avatar\\`; dividers -> \\`separator\\`\n- form fields -> \\`input\\` / \\`textarea\\` / \\`select\\` / \\`checkbox\\` / \\`switch\\` / \\`radio-group\\`\n\nRead a component's source from \\`components/ui/\\` to learn its props/exports. Use only\nthe design tokens in \\`app/globals.css\\`; never invent colors, spacing, or radii.\n`;\n\n// Written to `.better-design/eslint-design-system.mjs`. A flat-config fragment the\n// project's eslint.config.mjs spreads in. `warn` (not `error`) so it surfaces in\n// the agent's lint run without hard-failing legitimate one-off raw elements;\n// bump to \"error\" to gate CI.\nexport const DS_ESLINT_CONFIG = `// Better Design — design-system guardrail (flat ESLint config fragment).\n// Flags raw HTML primitives in feature code when the installed DS ships an\n// equivalent in components/ui/*. Wire it into eslint.config.mjs:\n//\n// import dsGuardrail from \"./.better-design/eslint-design-system.mjs\"; // better-design-guardrail\n// export default [ ...dsGuardrail, /* ...your config */ ];\n//\n// Scoped to app/** and components/** but NOT components/ui/** (the DS itself).\n// Bump \"warn\" -> \"error\" to fail lint/CI on violations.\nconst banned = [\n { selector: \"JSXOpeningElement[name.name='button']\", message: \"Use <Button> from @/components/ui/button instead of a raw <button>.\" },\n { selector: \"JSXOpeningElement[name.name='table']\", message: \"Use <Table> from @/components/ui/table instead of a raw <table>.\" },\n { selector: \"JSXOpeningElement[name.name='input']\", message: \"Use <Input> from @/components/ui/input instead of a raw <input>.\" },\n { selector: \"JSXOpeningElement[name.name='select']\", message: \"Use <Select> from @/components/ui/select instead of a raw <select>.\" },\n { selector: \"JSXOpeningElement[name.name='textarea']\", message: \"Use <Textarea> from @/components/ui/textarea instead of a raw <textarea>.\" },\n];\n\nexport default [\n {\n files: [\"app/**/*.{tsx,jsx}\", \"components/**/*.{tsx,jsx}\"],\n // Exclude the DS itself and co-located tests, which legitimately render raw\n // <button>/<input> for queries/assertions and would otherwise emit noise.\n ignores: [\"components/ui/**\", \"**/*.{test,spec}.{tsx,jsx}\", \"**/__tests__/**\"],\n rules: { \"no-restricted-syntax\": [\"warn\", ...banned] },\n },\n];\n`;\n\n// Per-project icon-library directive, appended to `.better-design/rules.md` so it\n// is durable on disk. The MCP server is frequently NOT loaded when the agent runs\n// `npx shadcn add` (it works straight from the installed files), so guidance that\n// lives only in MCP `meta` never reaches the agent — it then defaults to\n// lucide-react and clashes with the generated DS. Shipping it in the rules file the\n// agent already reads fixes that. [BD-118]\nexport function iconLibraryRule(\n { name, prefix, variant }: { name: string; prefix: string; variant: string },\n): string {\n return `\n\n## Icons — use ${name}\n\nThis project's design system is paired with **${name}** icons (Iconify prefix \\`${prefix}\\`, variant \\`${variant}\\`). Use this library for EVERY icon in the app. Do NOT use \\`lucide-react\\` or mix icon sets — that breaks visual consistency with the installed components.\n\nAdd icons as SSR-clean inline React components (no runtime CDN fetch, no first-paint flash): fetch each from \\`https://api.iconify.design/${prefix}/<name>.svg\\` and inline it as a component, or use the Better Design \\`install-icons\\` MCP tool when available. Avoid the runtime \\`<Icon icon=\"${prefix}:name\" />\\` pattern.\n`;\n}\n\n// shadcn `registry:file` entries that write the two namespaced files. Returned\n// from the per-project registry route so a single `shadcn add` drops them\n// alongside components/ui/*. Namespaced paths the user does not own -> safe.\n// `iconRule` (from `iconLibraryRule`) is appended to the rules doc so the chosen\n// icon library is recorded on disk per project.\nexport function guardrailRegistryFiles(\n opts?: { iconRule?: string },\n): Array<{\n path: string;\n content: string;\n type: \"registry:file\";\n target: string;\n}> {\n return [\n {\n path: \".better-design/rules.md\",\n content: opts?.iconRule ? DS_RULES_MD + opts.iconRule : DS_RULES_MD,\n type: \"registry:file\",\n target: \".better-design/rules.md\",\n },\n {\n path: \".better-design/eslint-design-system.mjs\",\n content: DS_ESLINT_CONFIG,\n type: \"registry:file\",\n target: \".better-design/eslint-design-system.mjs\",\n },\n ];\n}\n\n// MCP-text setup step appended to both scaffold flows. Embeds the file contents\n// so the `get-design-system-docs` flow (which installs per-component seed URLs,\n// NOT the project all.json) can create them too. All writes are idempotent and\n// MUST NOT overwrite user-owned files (CLAUDE.md / AGENTS.md / eslint.config.mjs).\nexport const GUARDRAILS_SETUP_MD = `## Set up the design-system guardrails (one-time, idempotent)\n\nThese keep feature code composing the installed components instead of re-building\nprimitives. Apply all three; never overwrite a user-owned file, only create-if-missing\nor append a guarded block.\n\n**1. Rules doc** — write \\`.better-design/rules.md\\` (skip if the install already wrote it):\n\n\\`\\`\\`md\n${DS_RULES_MD}\\`\\`\\`\n\n**2. Reference it from the agent config files** (create if missing, append if absent, never clobber):\n- \\`CLAUDE.md\\`: ensure it contains the line \\`@.better-design/rules.md\\`.\n- \\`AGENTS.md\\`: AGENTS.md has no import mechanic, so inline the rule in a marker block. Append if \\`better-design:start\\` is absent; replace between markers if present:\n \\`\\`\\`\n <!-- better-design:start -->\n Compose the installed components/ui/* primitives; never hand-roll a <button>/<table>/<input>/<dialog> or fake a ⌘K palette / menu / notification bell. Use only app/globals.css design tokens. See .better-design/rules.md.\n <!-- better-design:end -->\n \\`\\`\\`\n\n**3. ESLint guardrail** — write \\`.better-design/eslint-design-system.mjs\\` (skip if the install already wrote it):\n\n\\`\\`\\`js\n${DS_ESLINT_CONFIG}\\`\\`\\`\n\nThen wire it into the project's \\`eslint.config.mjs\\` (flat config), guarded so re-runs don't duplicate — skip if the marker \\`// better-design-guardrail\\` is already present:\n\n\\`\\`\\`js\nimport dsGuardrail from \"./.better-design/eslint-design-system.mjs\"; // better-design-guardrail\n// spread ...dsGuardrail into the exported config array\n\\`\\`\\`\n\nAfter wiring, \\`npm run lint\\` flags raw primitives in feature code (warnings; bump to \"error\" to gate CI).\n`;\n","// DS-as-HTML/CSS export kit for \"Journey B\": vibecoding an app INLINE inside a\n// ChatGPT/Claude artifact, where there is no npm, no build step and no Tailwind\n// compile, so the real shadcn React components cannot be installed. This ships\n// the system as plain, framework-free HTML + CSS: the token globals.css plus a\n// curated set of token-driven component classes the agent can paste into a\n// single <style> and use immediately. [BD-98]\n//\n// Every component reads a DS token with an oklch fallback, so the same kit works\n// for any system (light or dark) and degrades gracefully if a token is missing.\n\n// Curated, framework-free component CSS. Class names are `ds-`-prefixed so they\n// never collide with the agent's own markup. Mirrors the real components'\n// token contract (oklch tokens, --radius scale, --shadow-* depth) without\n// requiring Tailwind. Keep this self-contained: it is pasted verbatim.\nexport const DS_KIT_CSS = `*,*::before,*::after{box-sizing:border-box}\n:where(.ds){font-family:var(--font-sans,ui-sans-serif,system-ui,sans-serif);color:var(--foreground,oklch(0.2 0 0));background:var(--background,oklch(1 0 0));line-height:1.5}\n.ds h1,.ds h2,.ds h3,.ds h4{font-family:var(--font-serif,var(--font-sans,ui-sans-serif));font-weight:600;margin:0 0 .5em;color:var(--foreground,oklch(0.2 0 0))}\n.ds a{color:var(--primary,oklch(0.45 0.15 264));text-decoration:none}\n.ds a:hover{text-decoration:underline}\n.ds p{margin:0 0 1em}\n.ds-muted{color:var(--muted-foreground,oklch(0.55 0 0))}\n\n/* Button */\n.ds-btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;font:inherit;font-size:.875rem;font-weight:500;line-height:1;padding:.6rem 1rem;border-radius:var(--radius-md,calc(var(--radius,0.5rem) - 2px));border:1px solid transparent;cursor:pointer;transition:opacity .15s,background .15s;text-decoration:none}\n.ds-btn:hover{opacity:.9}\n.ds-btn:focus-visible{outline:2px solid var(--ring,var(--primary,oklch(0.45 0.15 264)));outline-offset:2px}\n.ds-btn:disabled{opacity:.5;cursor:not-allowed}\n.ds-btn-primary{background:var(--primary,oklch(0.45 0.15 264));color:var(--primary-foreground,oklch(1 0 0));box-shadow:var(--shadow-sm,var(--shadow-xs,none))}\n.ds-btn-secondary{background:var(--secondary,oklch(0.96 0 0));color:var(--secondary-foreground,oklch(0.25 0 0));box-shadow:var(--shadow-xs,none)}\n.ds-btn-outline{background:transparent;color:var(--foreground,oklch(0.2 0 0));border-color:var(--border,oklch(0.85 0 0))}\n.ds-btn-ghost{background:transparent;color:var(--foreground,oklch(0.2 0 0))}\n.ds-btn-ghost:hover{background:var(--accent,oklch(0.96 0 0));opacity:1}\n.ds-btn-sm{padding:.4rem .7rem;font-size:.8125rem}\n.ds-btn-lg{padding:.75rem 1.4rem;font-size:1rem}\n\n/* Form fields */\n.ds-label{display:block;font-size:.8125rem;font-weight:500;margin-bottom:.4rem;color:var(--foreground,oklch(0.2 0 0))}\n.ds-input,.ds-textarea,.ds-select{width:100%;font:inherit;font-size:.875rem;padding:.55rem .75rem;border-radius:var(--radius-md,calc(var(--radius,0.5rem) - 2px));border:1px solid var(--input,var(--border,oklch(0.85 0 0)));background:var(--background,oklch(1 0 0));color:var(--foreground,oklch(0.2 0 0));box-shadow:var(--shadow-2xs,none)}\n.ds-input::placeholder,.ds-textarea::placeholder{color:var(--muted-foreground,oklch(0.6 0 0))}\n.ds-input:focus,.ds-textarea:focus,.ds-select:focus{outline:2px solid var(--ring,var(--primary,oklch(0.45 0.15 264)));outline-offset:1px;border-color:transparent}\n.ds-textarea{min-height:5rem;resize:vertical}\n\n/* Card */\n.ds-card{background:var(--card,var(--background,oklch(1 0 0)));color:var(--card-foreground,var(--foreground,oklch(0.2 0 0)));border:1px solid var(--border,oklch(0.9 0 0));border-radius:var(--radius-xl,calc(var(--radius,0.5rem) + 4px));box-shadow:var(--shadow-glass,var(--shadow-md,var(--shadow-sm,none)));overflow:hidden}\n.ds-card-header{padding:1.1rem 1.25rem .5rem}\n.ds-card-body{padding:.5rem 1.25rem 1.1rem}\n.ds-card-footer{padding:.9rem 1.25rem;border-top:1px solid var(--border,oklch(0.92 0 0));display:flex;gap:.5rem;align-items:center}\n.ds-card-title{font-size:1.05rem;margin:0 0 .25rem}\n.ds-card-desc{font-size:.875rem;color:var(--muted-foreground,oklch(0.55 0 0));margin:0}\n\n/* Badge */\n.ds-badge{display:inline-flex;align-items:center;font-size:.6875rem;font-weight:600;padding:.15rem .55rem;border-radius:999px;background:var(--secondary,oklch(0.96 0 0));color:var(--secondary-foreground,oklch(0.25 0 0));line-height:1.4}\n.ds-badge-primary{background:var(--primary,oklch(0.45 0.15 264));color:var(--primary-foreground,oklch(1 0 0))}\n.ds-badge-outline{background:transparent;border:1px solid var(--border,oklch(0.85 0 0));color:var(--foreground,oklch(0.2 0 0))}\n\n/* Alert */\n.ds-alert{border:1px solid var(--border,oklch(0.9 0 0));border-radius:var(--radius-lg,var(--radius,0.5rem));padding:.9rem 1rem;background:var(--card,var(--background,oklch(1 0 0)));color:var(--card-foreground,var(--foreground,oklch(0.2 0 0)));font-size:.875rem}\n.ds-alert-title{font-weight:600;margin:0 0 .2rem}\n\n/* Avatar + misc */\n.ds-avatar{width:2.25rem;height:2.25rem;border-radius:999px;background:var(--muted,oklch(0.95 0 0));color:var(--muted-foreground,oklch(0.45 0 0));display:inline-flex;align-items:center;justify-content:center;font-size:.8125rem;font-weight:600}\n.ds-divider{height:1px;background:var(--border,oklch(0.9 0 0));border:0;margin:1rem 0}\n.ds-row{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center}\n.ds-field{margin-bottom:1rem}\n.ds-container{max-width:42rem;margin:0 auto;padding:1.5rem}\n\n/* Switch */\n.ds-switch{display:inline-flex;align-items:center;gap:.6rem;font-size:.875rem;cursor:pointer}\n.ds-switch-track{width:2.25rem;height:1.25rem;border-radius:999px;background:var(--muted,oklch(0.9 0 0));position:relative;transition:background .15s;flex:none}\n.ds-switch-track.on{background:var(--primary,oklch(0.45 0.15 264))}\n.ds-switch-thumb{position:absolute;top:2px;left:2px;width:calc(1.25rem - 4px);height:calc(1.25rem - 4px);border-radius:999px;background:var(--background,oklch(1 0 0));box-shadow:var(--shadow-sm,0 1px 2px oklch(0 0 0 / 0.2));transition:transform .15s}\n.ds-switch-track.on .ds-switch-thumb{transform:translateX(1rem)}\n\n/* Tabs */\n.ds-tabs{display:inline-flex;gap:.15rem;padding:.25rem;border-radius:var(--radius-lg,var(--radius,0.5rem));background:var(--muted,oklch(0.96 0 0))}\n.ds-tab{font:inherit;font-size:.8125rem;font-weight:500;padding:.4rem .8rem;border:0;border-radius:var(--radius-md,calc(var(--radius,0.5rem) - 2px));background:transparent;color:var(--muted-foreground,oklch(0.5 0 0));cursor:pointer}\n.ds-tab.active{background:var(--background,oklch(1 0 0));color:var(--foreground,oklch(0.2 0 0));box-shadow:var(--shadow-sm,var(--shadow-xs,none))}\n\n/* Progress */\n.ds-progress{height:.5rem;border-radius:999px;background:var(--muted,oklch(0.92 0 0));overflow:hidden}\n.ds-progress-bar{height:100%;border-radius:999px;background:var(--primary,oklch(0.45 0.15 264))}\n\n/* Table */\n.ds-table{width:100%;border-collapse:collapse;font-size:.8125rem}\n.ds-table th,.ds-table td{text-align:left;padding:.5rem .75rem;border-bottom:1px solid var(--border,oklch(0.92 0 0))}\n.ds-table th{font-weight:600;color:var(--muted-foreground,oklch(0.5 0 0));font-size:.6875rem;text-transform:uppercase;letter-spacing:.04em}\n\n/* Chip / keyboard key */\n.ds-chip{display:inline-flex;align-items:center;gap:.35rem;font-size:.8125rem;padding:.3rem .7rem;border-radius:999px;border:1px solid var(--border,oklch(0.88 0 0));background:var(--background,oklch(1 0 0));color:var(--foreground,oklch(0.2 0 0))}\n.ds-kbd{font-family:var(--font-mono,ui-monospace,monospace);font-size:.75rem;padding:.1rem .4rem;border-radius:var(--radius-sm,4px);border:1px solid var(--border,oklch(0.85 0 0));background:var(--muted,oklch(0.97 0 0));color:var(--foreground,oklch(0.2 0 0))}\n\n/* Selection adopts the accent, matching the real systems */\n.ds ::selection{background:var(--primary,oklch(0.45 0.15 264));color:var(--primary-foreground,oklch(1 0 0))}`;\n\n// A small example page wired to the kit so the agent has a working starting\n// point to riff on.\nexport const DS_KIT_EXAMPLE_HTML = `<div class=\"ds ds-container\">\n <div class=\"ds-row\" style=\"justify-content:space-between;margin-bottom:1.25rem\">\n <h1 style=\"margin:0\">Dashboard</h1>\n <button class=\"ds-btn ds-btn-primary\">New project</button>\n </div>\n\n <div class=\"ds-card\">\n <div class=\"ds-card-header\">\n <h3 class=\"ds-card-title\">Welcome back</h3>\n <p class=\"ds-card-desc\">Everything below is styled by the design system's tokens.</p>\n </div>\n <div class=\"ds-card-body\">\n <div class=\"ds-field\">\n <label class=\"ds-label\" for=\"email\">Email</label>\n <input class=\"ds-input\" id=\"email\" type=\"email\" placeholder=\"you@example.com\" />\n </div>\n <div class=\"ds-row\">\n <span class=\"ds-badge ds-badge-primary\">Pro</span>\n <span class=\"ds-badge\">Beta</span>\n <span class=\"ds-badge ds-badge-outline\">v2</span>\n </div>\n </div>\n <div class=\"ds-card-footer\">\n <button class=\"ds-btn ds-btn-primary\">Save</button>\n <button class=\"ds-btn ds-btn-outline\">Cancel</button>\n </div>\n </div>\n</div>`;\n\nfunction fence(lang: string, body: string): string {\n return \"```\" + lang + \"\\n\" + body + \"\\n```\";\n}\n\nexport interface DsHtmlKitInput {\n name: string;\n /** Token stylesheet: `:root{--background:...}` etc. from the registry. */\n tokensCss: string;\n /** Link to the full live showcase / project page. */\n viewUrl?: string;\n /**\n * Per-DS `.ds-*` overrides carrying THIS system's real component material\n * (card depth, switch checked fill, badge radius, etc.) plus the covered /\n * excluded manifest, from buildDsComponentCss. Omit for the generic shell. [BD-149]\n */\n componentKit?: { css: string; covered: string[]; excluded: string[] };\n}\n\n// Build the Markdown the MCP tool returns: paste-ready tokens + component CSS +\n// example, with a short usage guide. This is the \"Journey B\" deliverable.\nexport function buildDsHtmlKit({ name, tokensCss, viewUrl, componentKit }: DsHtmlKitInput): string {\n const materialCss = componentKit?.css?.trim();\n return [\n `# ${name} — HTML/CSS kit`,\n \"\",\n \"Framework-free build kit for vibecoding an app **inline** (ChatGPT canvas / Claude artifact), where you cannot run the shadcn React install. Paste both stylesheets into one `<style>`, wrap your UI in a `.ds` element, and use the `ds-` classes. Every value comes from this system's real tokens.\",\n \"\",\n \"## 1. Design tokens (paste first)\",\n \"These are the system's actual oklch tokens, fonts, radius and shadow scale.\",\n \"\",\n fence(\"css\", tokensCss.trim()),\n \"\",\n \"## 2. Component CSS (paste second)\",\n \"Token-driven, vanilla CSS. No Tailwind, no build step.\",\n \"\",\n fence(\"css\", DS_KIT_CSS),\n \"\",\n ...(materialCss\n ? [\n \"## 2b. This system's real component material (paste last)\",\n \"Pulled from this DS's actual components: card depth, the switch's checked fill, badge radius, the hero button's gradient/rim. Overrides the generic shell so the kit looks like THIS system, not a neutral default. Paste after the block above.\",\n \"\",\n fence(\"css\", materialCss),\n \"\",\n ]\n : []),\n \"## 3. Example to riff on\",\n \"\",\n fence(\"html\", DS_KIT_EXAMPLE_HTML),\n \"\",\n \"## How to use\",\n \"- Put all CSS blocks in a single `<style>` tag (tokens first, real material last).\",\n \"- Wrap your app in `<div class=\\\"ds\\\">` so the base type/color apply.\",\n \"- Components: `ds-btn` (`ds-btn-primary|secondary|outline|ghost`, `ds-btn-sm|lg`), `ds-input` / `ds-textarea` / `ds-select` + `ds-label`, `ds-card` (`ds-card-header|body|footer`, `ds-card-title|desc`), `ds-badge` (`ds-badge-primary|outline`), `ds-alert`, `ds-avatar`, `ds-divider`, layout helpers `ds-row` / `ds-field` / `ds-container`.\",\n \"- Build any layout you want with these tokens, do not invent new colors. For the full React component set in a real project, use `get-design-system-docs` instead.\",\n ...(componentKit?.excluded?.length\n ? [\n \"\",\n \"## Not in this kit (use the real components)\",\n `Interactive components can't be reproduced as static HTML in their real look: ${componentKit.excluded.join(\", \")}. For these, install the real React components with \\`get-design-system-docs\\`${viewUrl ? ` or see the live showcase: ${viewUrl}` : \"\"}.`,\n ]\n : []),\n viewUrl ? `\\nFull live showcase: ${viewUrl}` : \"\",\n ].join(\"\\n\");\n}\n","// AUTO-GENERATED by scripts/build-preview-widget-sdk.ts — DO NOT EDIT BY HAND.\n// Minified IIFE bundle of the hand-rolled MCP Apps client\n// (scripts/preview-widget-mini-client.ts) that assigns\n// window.__bdMcp = { App, applyDocumentTheme, applyHostFonts }. The DS preview\n// widget inlines this so the client runs without a runtime CDN import\n// (Claude's sandbox CSP blocks dynamic esm.sh imports). Zero deps (no zod);\n// regenerate with `bun run build:preview-widget`. [BD-92, BD-117]\nexport const PREVIEW_WIDGET_SDK_JS = \"(()=>{class E{appInfo;nextId=1;pending=new Map;connected=!1;connecting=!1;closed=!1;hostContext={};resizeObserver=null;ontoolresult=null;ontoolinput=null;onhostcontextchanged=null;constructor(q){this.appInfo=q,window.addEventListener(\\\"message\\\",this.onMessage)}post(q){if(window.parent&&window.parent!==window)window.parent.postMessage(q,\\\"*\\\")}request(q,w){let z=this.nextId++;return new Promise((B,C)=>{let G=setTimeout(()=>{if(this.pending.delete(z))C(Error(`MCP Apps request timed out: ${q}`))},30000);this.pending.set(z,{resolve:B,reject:C,timer:G}),this.post({jsonrpc:\\\"2.0\\\",id:z,method:q,params:w})})}notify(q,w){this.post({jsonrpc:\\\"2.0\\\",method:q,params:w??{}})}onMessage=(q)=>{if(q.source!==window.parent)return;let w=q.data;if(!w||w.jsonrpc!==\\\"2.0\\\")return;if(typeof w.id===\\\"number\\\"&&((\\\"result\\\"in w)||(\\\"error\\\"in w))){let z=this.pending.get(w.id);if(!z)return;if(this.pending.delete(w.id),clearTimeout(z.timer),\\\"error\\\"in w&&w.error){let B=w.error;z.reject(Error(B.message??\\\"MCP Apps request failed\\\"))}else z.resolve(w.result??{});return}if(typeof w.method===\\\"string\\\")this.handleNotification(w.method,w.params??{})};handleNotification(q,w){switch(q){case\\\"ui/notifications/tool-result\\\":this.ontoolresult?.(w);break;case\\\"ui/notifications/tool-input\\\":case\\\"ui/notifications/tool-input-partial\\\":this.ontoolinput?.(w);break;case\\\"ui/notifications/host-context-changed\\\":this.hostContext={...this.hostContext,...w},this.onhostcontextchanged?.(this.hostContext);break;case\\\"ui/notifications/request-teardown\\\":this.close();break;default:break}}async connect(){if(this.closed)throw Error(\\\"App is closed\\\");if(this.connected||this.connecting)return;this.connecting=!0;try{let q=await this.request(\\\"ui/initialize\\\",{appInfo:this.appInfo,appCapabilities:{availableDisplayModes:[\\\"inline\\\",\\\"fullscreen\\\"]},protocolVersion:\\\"2026-01-26\\\"});if(q.hostContext)this.hostContext=q.hostContext;this.notify(\\\"ui/notifications/initialized\\\"),this.connected=!0}finally{this.connecting=!1}if(this.onhostcontextchanged&&Object.keys(this.hostContext).length)this.onhostcontextchanged(this.hostContext);this.setupSizeChangedNotifications()}getHostContext(){return this.hostContext}async requestDisplayMode(q){return{mode:(await this.request(\\\"ui/request-display-mode\\\",{mode:q.mode})).mode??q.mode}}async openLink(q){await this.request(\\\"ui/open-link\\\",{url:q.url})}async callServerTool(q){return this.request(\\\"tools/call\\\",{name:q.name,arguments:q.arguments??{}})}sendSizeChanged(){let q=document.documentElement;this.notify(\\\"ui/notifications/size-changed\\\",{width:q.scrollWidth,height:q.scrollHeight})}setupSizeChangedNotifications(){if(this.sendSizeChanged(),typeof ResizeObserver>\\\"u\\\")return()=>{};let q=new ResizeObserver(()=>this.sendSizeChanged());if(q.observe(document.documentElement),document.body)q.observe(document.body);return this.resizeObserver=q,()=>{q.disconnect(),this.resizeObserver=null}}close(){if(window.removeEventListener(\\\"message\\\",this.onMessage),this.resizeObserver)this.resizeObserver.disconnect(),this.resizeObserver=null;this.connected=!1,this.closed=!0;for(let{reject:q,timer:w}of this.pending.values())clearTimeout(w),q(Error(\\\"App closed\\\"));this.pending.clear()}}function J(q){let w=q===\\\"dark\\\";document.documentElement.classList.toggle(\\\"dark\\\",w)}function K(q){let w=typeof q===\\\"string\\\"?q:\\\"\\\";if(!w)return;let z=document.getElementById(\\\"bd-host-fonts\\\");if(!z)z=document.createElement(\\\"style\\\"),z.id=\\\"bd-host-fonts\\\",document.head.appendChild(z);z.textContent=w}window.__bdMcp={App:E,applyDocumentTheme:J,applyHostFonts:K};})();\\n\";\n","// Static HTML/CSS preview of a design system, rendered from its design tokens.\n//\n// Hosted chat clients cannot run the React showcase, so previews are plain\n// HTML styled exclusively with the DS's own CSS custom properties:\n// - ChatGPT renders DS_PREVIEW_WIDGET_HTML inline as an Apps SDK widget\n// (registered as a ui:// resource; data arrives via window.openai.toolOutput).\n// - Claude and other clients get a self-contained document from\n// buildDsPreviewDocument() to render as an HTML artifact.\n//\n// Fidelity note: real component bodies are Tailwind-built and need a Tailwind\n// pass, so the preview shows the system's actual tokens (palette, type, radius,\n// shadows) on representative components rather than pixel-perfect React output.\n\n// Minified IIFE bundle of the MCP Apps SDK, inlined into the widget so it runs\n// without a runtime CDN import (Claude's sandbox CSP blocks dynamic esm.sh\n// imports). Generated by `bun run build:preview-widget`. [BD-92]\nimport { PREVIEW_WIDGET_SDK_JS } from \"./preview-widget-sdk.generated\";\n// Framework-free component-kit CSS (.ds-* classes), styled entirely by the DS\n// tokens. Inlined in the widget so the in-widget component showcase renders the\n// real component families in the system's own look. [BD-117]\nimport { DS_KIT_CSS } from \"./html-kit\";\n\nexport interface DsPreviewData {\n /** Display name of the design system or generated project. */\n name: string;\n /** CSS that defines the token custom properties (`:root{--background:...}`). */\n tokensCss: string;\n /** Owner-facing project / DS page on better-design.com (the \"Open\" link). May require login. */\n viewUrl?: string;\n /** Public, cookieless showcase URL to embed in the iframe. Falls back to viewUrl. */\n previewUrl?: string;\n /** shadcn install command, when generation has completed. */\n installCommand?: string;\n}\n\n/** Rebuild a `:root{}` / `.dark{}` token stylesheet from shadcn registry cssVars. */\nexport function cssFromRegistryVars(cssVars: {\n light?: Record<string, string>;\n dark?: Record<string, string>;\n theme?: Record<string, string>;\n}): string {\n const block = (vars: Record<string, string> | undefined) =>\n Object.entries(vars ?? {})\n .map(([k, v]) => ` --${k.replace(/^--/, \"\")}: ${v};`)\n .join(\"\\n\");\n const root = block({ ...cssVars.theme, ...cssVars.light });\n const dark = block(cssVars.dark);\n return [`:root {\\n${root}\\n}`, dark ? `.dark {\\n${dark}\\n}` : \"\"].filter(Boolean).join(\"\\n\");\n}\n\n/**\n * Pull the system's typography out of its raw globals.css. The `--font-*`\n * declarations live in the file's `@theme inline` block, which the registry's\n * parsed `cssVars` does NOT carry, and the webfonts themselves are loaded by\n * the Next app (next/font), not by the stylesheet. Without both, previews fall\n * back to system fonts. Returns the font variable declarations plus a Google\n * Fonts `@import` for every named family (the catalog and the generation\n * pipeline both use Google-Fonts-available families); the import must be\n * placed first in the stylesheet. Degrades to the var's own fallback stack if\n * the host blocks external fonts. [BD-84]\n */\nexport function extractFontCss(rawGlobalsCss: string): { fontVars: string; fontImport: string } {\n const decls: string[] = rawGlobalsCss.match(/--font-(?:sans|serif|mono)\\s*:[^;]+;/g) ?? [];\n // Generated projects declare no --font-* vars; their globals set a plain\n // `font-family:` on body instead. Map the first such stack onto --font-sans\n // so the preview picks up the project's body font. [BD-86]\n if (!decls.length) {\n // Prefer the body rule's stack; only fall back to the first declaration\n // anywhere (which could be a @font-face or component rule) when body\n // declares none.\n const bodyRule = rawGlobalsCss.match(/(?:^|[}\\s,])body\\s*(?:,[^{]*)?\\{[^}]*?font-family\\s*:\\s*([^;}]+)/);\n const stack = bodyRule?.[1]?.trim() ?? rawGlobalsCss.match(/font-family\\s*:\\s*([^;}]+)/)?.[1]?.trim();\n if (stack) decls.push(`--font-sans: ${stack};`);\n }\n const families = new Set<string>();\n for (const decl of decls) {\n const value = decl.replace(/^--font-(?:sans|serif|mono)\\s*:\\s*/, \"\").replace(/;$/, \"\");\n for (const m of value.matchAll(/[\"']([^\"']+)[\"']/g)) addFontFamily(families, m[1]);\n if (!/[\"']/.test(value)) addFontFamily(families, value.split(\",\")[0] ?? \"\");\n }\n const fontImport = families.size\n ? `@import url(\"https://fonts.googleapis.com/css2?${[...families]\n .map((f) => `family=${encodeURIComponent(f).replace(/%20/g, \"+\")}:wght@400;500;600;700`)\n .join(\"&\")}&display=swap\");`\n : \"\";\n const fontVars = decls.length ? `:root {\\n ${decls.join(\"\\n \")}\\n}` : \"\";\n return { fontVars, fontImport };\n}\n\nconst SYSTEM_FONT_FAMILIES = new Set([\n \"arial\",\n \"georgia\",\n \"helvetica\",\n \"menlo\",\n \"monaco\",\n \"sans-serif\",\n \"serif\",\n \"sfmono-regular\",\n \"system-ui\",\n \"times new roman\",\n \"ui-monospace\",\n \"ui-sans-serif\",\n \"ui-serif\",\n]);\n\nfunction addFontFamily(families: Set<string>, raw: string): void {\n const family = raw.trim().replace(/^[\"']|[\"']$/g, \"\");\n if (!family || family.startsWith(\"var(\") || SYSTEM_FONT_FAMILIES.has(family.toLowerCase())) return;\n families.add(family);\n}\n\n// Tailwind rounded-* utility -> CSS value, honoring the DS's own radius scale\n// (catalog systems define --radius-sm/md/lg in @theme per the no-arbitrary-\n// values rule; 2xl/3xl fall back to Tailwind defaults).\nconst RADIUS_CLASS_TO_CSS: Record<string, string> = {\n \"rounded-none\": \"0\",\n \"rounded-sm\": \"var(--radius-sm, calc(var(--radius, 0.5rem) - 4px))\",\n \"rounded-md\": \"var(--radius-md, calc(var(--radius, 0.5rem) - 2px))\",\n \"rounded-lg\": \"var(--radius-lg, var(--radius, 0.5rem))\",\n \"rounded-xl\": \"var(--radius-xl, calc(var(--radius, 0.5rem) + 4px))\",\n \"rounded-2xl\": \"var(--radius-2xl, 1rem)\",\n \"rounded-3xl\": \"var(--radius-3xl, 1.5rem)\",\n rounded: \"0.25rem\",\n \"rounded-full\": \"9999px\",\n};\n\n/**\n * Mirror each component's AUTHORED corner radius instead of guessing from the\n * base token: a DS may give its hero button rounded-full while inputs sit at\n * rounded-2xl (editorial-warm does exactly that), so one raw `--radius` on\n * everything reads wrong. Scans the registry/project sources for the button,\n * input, card and badge files and emits override rules for the preview's\n * sample components. Files missing (or no rounded-* class found) keep the\n * base-CSS shadcn-scale fallbacks. [BD-84]\n */\nexport function componentRadiusCss(files: Array<{ path?: string; content?: string }>): string {\n const radiusFor = (pattern: RegExp): string | null => {\n const file = files.find((f) => f.path && pattern.test(f.path));\n if (!file?.content) return null;\n const m = file.content.match(/rounded(?:-(?:none|sm|md|lg|xl|2xl|3xl|full))?(?=[\\s\"'])/);\n return m ? (RADIUS_CLASS_TO_CSS[m[0]] ?? null) : null;\n };\n const rules: string[] = [];\n // Override both the legacy `.bd-*` primitives and the component-showcase\n // `.ds-*` kit classes, so the showcase honors the DS's authored radii. [BD-117]\n const button = radiusFor(/(^|\\/)button\\.(tsx|jsx)$/);\n if (button) rules.push(`.bd-btn, .bd-view, .ds-btn { border-radius: ${button}; }`);\n const input = radiusFor(/(^|\\/)input\\.(tsx|jsx)$/);\n if (input) rules.push(`.bd-input, .ds-input, .ds-textarea, .ds-select { border-radius: ${input}; }`);\n const card = radiusFor(/(^|\\/)card\\.(tsx|jsx)$/);\n if (card) rules.push(`.bd-card, .ds-card { border-radius: ${card}; }`);\n return rules.join(\"\\n\");\n}\n\n/**\n * Mirror the DS's primary button MATERIAL, not just its color. The signature\n * fill (custom shadow token, gloss gradient) lives in the button component's\n * `default`/hero cva variant as Tailwind classes (e.g.\n * `shadow-[var(--shadow-pillow-primary)]`, `bg-[linear-gradient(...)]`), which\n * no design token carries. Without this the preview button is a flat\n * `var(--primary)` fill + generic `--shadow-sm`, so every DS reads the same and\n * textured systems look broken. We scope parsing to the `default` variant (the\n * hero treatment per the DS convention) so we never pick up the destructive /\n * secondary shadow, and we only emit overrides when the button actually defines\n * an arbitrary shadow/background — a deliberately FLAT button (plain\n * `bg-primary`, `shadow-none`, or no shadow class) emits nothing and keeps the\n * neutral base, mirroring the DS instead of inventing depth. [BD-116]\n */\n// Underscores are spaces in Tailwind arbitrary values (`\\_` is a literal\n// underscore). Reject anything that could break out of the CSS rule.\nfunction decodeArbitrary(raw: string): string | null {\n const value = raw.replace(/(?<!\\\\)_/g, \" \").replace(/\\\\_/g, \"_\").trim();\n return value && !/[<>{};]/.test(value) ? value : null;\n}\n\n// Pull a RESTING-state CSS value from a class scope, supporting BOTH Tailwind\n// idioms our inputs use, because the AI generation pipeline writes a different\n// one than the hand-authored catalog:\n// utility-arbitrary: shadow-[...] bg-[...] (catalog convention)\n// property-arbitrary: [box-shadow:...] [background:...] (generator convention)\n// State-prefixed variants (hover:/focus:/active:/data-[..]:/group-*:) are skipped\n// so we read the resting look, not the hover/checked treatment. [BD-158]\nfunction restingValue(scope: string, cssProp: string, utilPrefixes: string[]): string | null {\n for (const prefix of utilPrefixes) {\n // Not preceded by a word char / `:` (a state modifier like `hover:`) / `.`.\n const m = scope.match(new RegExp(`(?<![\\\\w:.\\\\-])${prefix}-\\\\[([^\\\\]]+)\\\\]`));\n if (m) {\n const v = decodeArbitrary(m[1]);\n if (v) return v;\n }\n }\n // `[box-shadow:...]` not preceded by `:` excludes `hover:[box-shadow:...]`.\n const pm = scope.match(new RegExp(`(?<!:)\\\\[${cssProp}:([^\\\\]]+)\\\\]`));\n return pm ? decodeArbitrary(pm[1]) : null;\n}\n\n// Body (class string) of a named cva variant, up to the next variant key. The\n// value may be several concatenated quoted strings (`\"a \" + \"b \"`). [BD-158]\nfunction variantBody(content: string, name: string): string | null {\n const vi = content.search(/variant\\s*:\\s*\\{/);\n const hay = vi !== -1 ? content.slice(vi) : content;\n const m = hay.match(\n new RegExp(`[\\\\s{,]${name}\\\\s*:\\\\s*([\\\\s\\\\S]*?)(?:\\\\n\\\\s*[A-Za-z_][\\\\w-]*\\\\s*:|\\\\n\\\\s*\\\\},)`),\n );\n return m ? m[1] : null;\n}\n\nexport function componentDepthCss(files: Array<{ path?: string; content?: string }>): string {\n const btn = files.find((f) => f.path && /(^|\\/)button\\.(tsx|jsx)$/.test(f.path));\n if (!btn?.content) return \"\";\n const content = btn.content;\n // Hero-CTA scope: prefer the `primary` variant — the AI generator puts the\n // signature fill there and makes `default` a secondary style — then the\n // `default` variant (catalog convention: default IS the hero), then the whole\n // file (systems that set the signature shadow on the cva base). [BD-158]\n const scope = variantBody(content, \"primary\") ?? variantBody(content, \"default\") ?? content;\n const shadow = /(?:^|\\s|\"|')shadow-none(?=\\s|\"|'|$)/.test(scope)\n ? \"none\"\n : restingValue(scope, \"box-shadow\", [\"shadow\"]);\n const background =\n restingValue(scope, \"background\", [\"bg\"]) ?? restingValue(scope, \"background-image\", []);\n // Apply to BOTH the legacy `.bd-*` primitives and the component-showcase\n // `.ds-btn-primary` (the kit class the in-widget showcase renders), so the\n // showcase's hero button carries the DS's real material, not a flat fill. [BD-117]\n const sel = \".bd-btn-primary, .bd-view, .ds-btn-primary\";\n const rules: string[] = [];\n if (shadow) rules.push(`${sel} { box-shadow: ${shadow}; }`);\n if (background) rules.push(`${sel} { background: ${background}; }`);\n return rules.join(\"\\n\");\n}\n\n// Interactive Radix surfaces have no meaningful resting-state static HTML in the\n// kit (their material lives in open/portal state), so the kit can't reproduce\n// them. We enumerate the ones a DS actually ships so get-design-system-html can\n// tell the model what's NOT covered and route it to the real components instead\n// of silently implying full coverage. [BD-149]\nconst KIT_INTERACTIVE_EXCLUDED = [\n \"dialog\", \"drawer\", \"sheet\", \"dropdown-menu\", \"context-menu\", \"menubar\",\n \"navigation-menu\", \"command\", \"combobox\", \"popover\", \"hover-card\", \"tooltip\",\n \"select\", \"accordion\", \"calendar\", \"carousel\", \"sonner\", \"toast\", \"collapsible\",\n];\n\nexport interface DsComponentKit {\n /** `.ds-*` override rules carrying THIS system's real component material. */\n css: string;\n /** Primitives the kit renders in the system's own look. */\n covered: string[];\n /** Interactive components the kit can't reproduce (use the real React components). */\n excluded: string[];\n}\n\n/**\n * Lift each DS's REAL component material onto the framework-free kit classes, so\n * an inline (canvas/artifact) build looks like the system instead of a generic\n * shell. Pure string extraction (no Tailwind compile) so it runs in BOTH the\n * build-time registry generator and the Worker, giving catalog and generated\n * DSes the same fidelity tier. [BD-149]\n *\n * Reuses the proven button radius/depth extraction (componentRadiusCss/\n * componentDepthCss) and extends it to the other static-able primitives: card\n * depth, the switch's CHECKED track material (rule-8 filled control), and badge\n * radius. We read the components' authored Tailwind class strings — including the\n * `data-[state=checked]` / arbitrary `shadow-[...]` material that no design token\n * carries — and only emit when the DS actually defines it (a flat DS emits\n * nothing and keeps the neutral shell). Mirrors the DS, never invents depth.\n */\nexport function buildDsComponentCss(files: Array<{ path?: string; content?: string }>): DsComponentKit {\n const contentOf = (re: RegExp) => files.find((f) => f.path && re.test(f.path))?.content ?? \"\";\n const has = (name: string) => Boolean(contentOf(new RegExp(`(^|/)${name}\\\\.(tsx|jsx)$`)));\n // Arbitrary Tailwind value `prefix-[...]`: underscores are spaces; reject\n // anything that could break out of the CSS rule. Same contract as componentDepthCss.\n const arbitrary = (scope: string, re: RegExp): string | null => {\n const m = scope.match(re);\n if (!m) return null;\n const value = m[1].replace(/(?<!\\\\)_/g, \" \").replace(/\\\\_/g, \"_\").trim();\n return value && !/[<>{};]/.test(value) ? value : null;\n };\n const rules: string[] = [componentRadiusCss(files), componentDepthCss(files)];\n const covered = new Set<string>();\n for (const name of [\"button\", \"input\", \"alert\", \"avatar\", \"table\", \"tabs\", \"progress\"]) {\n if (has(name)) covered.add(name);\n }\n\n // Card: signature depth (soft shadow + edge glow) is an arbitrary shadow on the\n // base class — as a `shadow-[...]` utility OR a `[box-shadow:...]` property. [BD-158]\n const card = contentOf(/(^|\\/)card\\.(tsx|jsx)$/);\n if (card) {\n covered.add(\"card\");\n const shadow = /shadow-none(?=[\\s\"'])/.test(card)\n ? \"none\"\n : restingValue(card, \"box-shadow\", [\"shadow\"]);\n if (shadow) rules.push(`.ds-card { box-shadow: ${shadow}; }`);\n }\n\n // Switch: the CHECKED track is the filled material (rule 8). Mirror the real\n // data-[state=checked] background + shadow onto the kit's `.on` track, reading\n // both the `:shadow-[...]` utility and the `:[box-shadow:...]` property. [BD-158]\n const sw = contentOf(/(^|\\/)switch\\.(tsx|jsx)$/);\n if (sw) {\n covered.add(\"switch\");\n const bg =\n arbitrary(sw, /data-\\[state=checked\\]:bg-\\[([^\\]]+)\\]/) ??\n arbitrary(sw, /data-\\[state=checked\\]:\\[background(?:-image)?:([^\\]]+)\\]/);\n const shadow =\n arbitrary(sw, /data-\\[state=checked\\]:shadow-\\[([^\\]]+)\\]/) ??\n arbitrary(sw, /data-\\[state=checked\\]:\\[box-shadow:([^\\]]+)\\]/);\n if (bg) rules.push(`.ds-switch-track.on { background: ${bg}; }`);\n if (shadow) rules.push(`.ds-switch-track.on { box-shadow: ${shadow}; }`);\n }\n\n // Badge: authored corner radius (often rounded-full) onto the kit badge.\n const badge = contentOf(/(^|\\/)badge\\.(tsx|jsx)$/);\n if (badge) {\n covered.add(\"badge\");\n const rm = badge.match(/rounded(?:-(?:none|sm|md|lg|xl|2xl|3xl|full))?(?=[\\s\"'])/);\n const radius = rm ? RADIUS_CLASS_TO_CSS[rm[0]] : null;\n if (radius) rules.push(`.ds-badge, .ds-badge-primary { border-radius: ${radius}; }`);\n }\n\n const excluded = KIT_INTERACTIVE_EXCLUDED.filter((name) => has(name));\n return { css: rules.filter(Boolean).join(\"\\n\"), covered: [...covered].sort(), excluded };\n}\n\n/** Radius scale declarations from the raw globals.css (@theme block), which parsed cssVars omit. */\nexport function extractRadiusScaleCss(rawGlobalsCss: string): string {\n const decls = rawGlobalsCss.match(/--radius-[a-z0-9]+\\s*:[^;]+;/g) ?? [];\n return decls.length ? `:root {\\n ${decls.join(\"\\n \")}\\n}` : \"\";\n}\n\n/**\n * Shadow scale declarations from the raw globals.css, which parsed cssVars omit\n * just like fonts and the radius scale (BD-84/BD-86). This is what gives a\n * preview its depth and a DS its signature surface: the soft `--shadow-*` ramp\n * plus any inset-highlight \"glass\" tokens (`--shadow-glass*`). The value match\n * is `[^;]+` so multi-line shadow stacks (inset + outer on separate lines) are\n * captured whole. Without this the preview renders flat. [BD-98]\n */\nexport function extractShadowScaleCss(rawGlobalsCss: string): string {\n const decls = rawGlobalsCss.match(/--shadow[a-z0-9-]*\\s*:[^;]+;/gi) ?? [];\n return decls.length ? `:root {\\n ${decls.join(\"\\n \")}\\n}` : \"\";\n}\n\n// Shared look for both the widget and the standalone document. Every color\n// reads a DS token with an oklch fallback so a missing variable degrades to a\n// neutral scheme instead of broken styling.\nconst PREVIEW_BASE_CSS = `\n .bd-preview { background: var(--background, oklch(1 0 0)); color: var(--foreground, oklch(0.2 0 0)); font-family: var(--font-sans, ui-sans-serif, system-ui, sans-serif); border: 1px solid var(--border, oklch(0.9 0 0)); border-radius: calc(var(--radius, 0.5rem) + 4px); padding: 20px; max-width: 720px; box-shadow: var(--shadow-md, var(--shadow, none)); }\n .bd-view { box-shadow: var(--shadow-sm, var(--shadow-xs, none)); }\n .bd-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 14px; }\n .bd-name { font-family: var(--font-serif, var(--font-sans, ui-sans-serif)); font-size: 22px; font-weight: 600; margin: 0; }\n .bd-sub { color: var(--muted-foreground, oklch(0.55 0 0)); font-size: 12px; }\n .bd-swatches { display: flex; gap: 6px; margin: 12px 0; }\n .bd-swatch { width: 34px; height: 34px; border-radius: 9999px; border: 1px solid var(--border, oklch(0.9 0 0)); }\n .bd-row { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 12px 0; }\n .bd-btn { font: inherit; font-size: 14px; font-weight: 500; padding: 8px 16px; border-radius: var(--radius-md, calc(var(--radius, 0.5rem) - 2px)); border: 1px solid transparent; cursor: pointer; }\n .bd-btn-primary { background: var(--primary, oklch(0.3 0 0)); color: var(--primary-foreground, oklch(1 0 0)); box-shadow: var(--shadow-sm, var(--shadow-xs, var(--shadow, none))); }\n .bd-btn-secondary { background: var(--secondary, oklch(0.95 0 0)); color: var(--secondary-foreground, oklch(0.25 0 0)); box-shadow: var(--shadow-xs, var(--shadow-2xs, none)); }\n .bd-btn-outline { background: transparent; color: var(--foreground, oklch(0.2 0 0)); border-color: var(--border, oklch(0.85 0 0)); box-shadow: var(--shadow-2xs, none); }\n .bd-input { font: inherit; font-size: 14px; padding: 8px 12px; border-radius: var(--radius-md, calc(var(--radius, 0.5rem) - 2px)); border: 1px solid var(--input, var(--border, oklch(0.85 0 0))); background: var(--background, oklch(1 0 0)); color: var(--foreground, oklch(0.2 0 0)); min-width: 180px; box-shadow: var(--shadow-2xs, none); }\n .bd-input:focus { outline: 2px solid var(--ring, var(--primary, oklch(0.3 0 0))); outline-offset: 1px; }\n .bd-card { background: var(--card, var(--background, oklch(1 0 0))); color: var(--card-foreground, var(--foreground, oklch(0.2 0 0))); border: 1px solid var(--border, oklch(0.9 0 0)); border-radius: var(--radius-xl, calc(var(--radius, 0.5rem) + 4px)); padding: 14px 16px; margin: 12px 0; box-shadow: var(--shadow-glass, var(--shadow-md, var(--shadow-sm, none))); }\n .bd-card h3 { font-family: var(--font-serif, var(--font-sans, ui-sans-serif)); margin: 0 0 4px; font-size: 16px; }\n .bd-card p { margin: 0; font-size: 13px; color: var(--muted-foreground, oklch(0.55 0 0)); }\n .bd-badge { display: inline-block; font-size: 11px; font-weight: 600; padding: 2px 9px; border-radius: 999px; background: var(--accent, var(--secondary, oklch(0.95 0 0))); color: var(--accent-foreground, var(--secondary-foreground, oklch(0.25 0 0))); }\n .bd-mono { font-family: var(--font-mono, ui-monospace, monospace); font-size: 12px; color: var(--muted-foreground, oklch(0.55 0 0)); }\n .bd-foot { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-top: 16px; border-top: 1px solid var(--border, oklch(0.92 0 0)); padding-top: 12px; }\n .bd-view { font-size: 13px; font-weight: 600; text-decoration: none; padding: 7px 14px; border-radius: var(--radius-md, calc(var(--radius, 0.5rem) - 2px)); background: var(--primary, oklch(0.3 0 0)); color: var(--primary-foreground, oklch(1 0 0)); }\n .bd-links { font-size: 12px; display: flex; gap: 12px; }\n .bd-links a { color: var(--muted-foreground, oklch(0.5 0 0)); }\n .bd-progress { font-size: 13px; color: var(--muted-foreground, oklch(0.5 0 0)); margin: 10px 0; }\n .bd-app { display: flex; flex-direction: column; gap: 12px; }\n .bd-appbar { display: flex; align-items: center; justify-content: space-between; }\n .bd-logo { font-family: var(--font-serif, var(--font-sans, ui-sans-serif)); font-weight: 700; font-size: 16px; color: var(--foreground, oklch(0.2 0 0)); }\n .bd-hero-card { background: var(--card, var(--background, oklch(1 0 0))); color: var(--card-foreground, var(--foreground, oklch(0.2 0 0))); border: 1px solid var(--border, oklch(0.9 0 0)); border-radius: var(--radius-xl, calc(var(--radius, 0.5rem) + 4px)); padding: 16px 18px; box-shadow: var(--shadow-glass, var(--shadow-md, var(--shadow-sm, none))); }\n .bd-h { font-family: var(--font-serif, var(--font-sans, ui-sans-serif)); font-size: 20px; font-weight: 600; margin: 0 0 6px; }\n .bd-p { margin: 0 0 14px; font-size: 13px; line-height: 1.5; color: var(--muted-foreground, oklch(0.55 0 0)); max-width: 48ch; }\n .bd-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }\n .bd-stat { background: var(--card, var(--background, oklch(1 0 0))); border: 1px solid var(--border, oklch(0.9 0 0)); border-radius: var(--radius-lg, var(--radius, 0.5rem)); padding: 12px 14px; }\n .bd-stat-n { display: block; font-size: 20px; font-weight: 700; color: var(--foreground, oklch(0.2 0 0)); font-family: var(--font-serif, var(--font-sans, ui-sans-serif)); }\n .bd-stat-l { font-size: 11px; color: var(--muted-foreground, oklch(0.55 0 0)); }\n .bd-list { background: var(--card, var(--background, oklch(1 0 0))); border: 1px solid var(--border, oklch(0.9 0 0)); border-radius: var(--radius-lg, var(--radius, 0.5rem)); overflow: hidden; }\n .bd-li { display: flex; align-items: center; gap: 10px; padding: 10px 14px; font-size: 13px; color: var(--foreground, oklch(0.2 0 0)); border-top: 1px solid var(--border, oklch(0.93 0 0)); }\n .bd-li:first-child { border-top: 0; }\n .bd-grow { flex: 1; }\n .bd-dot { width: 8px; height: 8px; border-radius: 9999px; background: var(--primary, oklch(0.3 0 0)); flex: none; }\n .bd-pill { font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 999px; background: var(--secondary, oklch(0.95 0 0)); color: var(--secondary-foreground, oklch(0.25 0 0)); }\n`;\n\nconst SWATCH_TOKENS = [\"background\", \"foreground\", \"primary\", \"secondary\", \"accent\", \"muted\", \"border\"];\n\n// A small, realistic app vignette rendered entirely from the system's tokens\n// (type, color, radius, depth) so the preview reads like a real product screen\n// in the DS's style, not a token inventory. Shared structure with the widget's\n// client-side fallbackBody — keep the two in sync. [BD-92]\nfunction dsVignetteHtml(name: string, swatches: string): string {\n const nm = escapeHtml(name);\n return `<div class=\"bd-app\">\n <div class=\"bd-appbar\"><span class=\"bd-logo\">${nm}</span></div>\n <div class=\"bd-hero-card\">\n <h3 class=\"bd-h\">Build something in ${nm}.</h3>\n <p class=\"bd-p\">A starter screen styled entirely with this system's tokens: type, color, radius and depth, ready to vibecode on.</p>\n <div class=\"bd-row\"><button class=\"bd-btn bd-btn-primary\">Get started</button><button class=\"bd-btn bd-btn-outline\">Learn more</button></div>\n </div>\n <div class=\"bd-grid\">\n <div class=\"bd-stat\"><span class=\"bd-stat-n\">2,481</span><span class=\"bd-stat-l\">Active users</span></div>\n <div class=\"bd-stat\"><span class=\"bd-stat-n\">98%</span><span class=\"bd-stat-l\">Uptime</span></div>\n <div class=\"bd-stat\"><span class=\"bd-stat-n\">4.9</span><span class=\"bd-stat-l\">Rating</span></div>\n </div>\n <div class=\"bd-list\">\n <div class=\"bd-li\"><span class=\"bd-dot\"></span><span class=\"bd-grow\">New project created</span><span class=\"bd-pill\">now</span></div>\n <div class=\"bd-li\"><span class=\"bd-dot\"></span><span class=\"bd-grow\">Components installed</span><span class=\"bd-pill\">87</span></div>\n <div class=\"bd-li\"><span class=\"bd-dot\"></span><span class=\"bd-grow\">Theme applied</span><span class=\"bd-badge\">done</span></div>\n </div>\n <div class=\"bd-swatches\">${swatches}</div>\n </div>`;\n}\n\nfunction previewBodyHtml(d: DsPreviewData): string {\n const swatches = SWATCH_TOKENS.map(\n (t) => `<div class=\"bd-swatch\" style=\"background: var(--${t}, transparent)\" title=\"--${t}\"></div>`,\n ).join(\"\");\n return `\n ${dsVignetteHtml(d.name, swatches)}\n ${\n d.viewUrl\n ? `<div class=\"bd-foot\"><div class=\"bd-links\"></div><a class=\"bd-view\" href=\"${escapeHtml(d.viewUrl)}\" target=\"_blank\" rel=\"noopener\">View in Better Design</a></div>`\n : \"\"\n }`;\n}\n\n// Registry-supplied CSS lands verbatim inside a <style> block; a literal\n// \"</style\" sequence would close it early and let markup escape into the\n// document. \"<\" never appears in valid CSS outside strings/comments, so\n// neutralizing the sequence is lossless for real stylesheets.\nfunction sanitizeCss(css: string): string {\n return css.replace(/<\\/style/gi, \"<\\\\/style\");\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\n\n/** Self-contained preview page: render as an HTML artifact (Claude) or serve as a file. */\nexport function buildDsPreviewDocument(d: DsPreviewData): string {\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>${escapeHtml(d.name)} preview</title>\n<style>\n${sanitizeCss(d.tokensCss)}\nbody { margin: 0; padding: 24px; background: var(--background, oklch(0.98 0 0)); display: flex; justify-content: center; }\n${PREVIEW_BASE_CSS}\n</style>\n</head>\n<body>\n${previewBodyHtml(d)}\n</body>\n</html>`;\n}\n\n/**\n * Cross-client MCP Apps widget (renders inline in BOTH Claude and ChatGPT).\n *\n * Data delivery is dual-bridge:\n * - MCP Apps SDK (`App.ontoolresult` -> structuredContent) - what Claude and\n * any compliant MCP Apps host speaks. The SDK is INLINED (bundled IIFE,\n * `window.__bdMcp`), not imported from a CDN: Claude's sandboxed view CSP\n * blocks a dynamic `import(\"https://esm.sh/...\")`, which previously left the\n * widget blank. The official ext-apps examples bundle the SDK the same way.\n * - `window.openai.toolOutput` fallback for ChatGPT's OpenAI Apps bridge.\n * Whichever fires first renders; both call the same render().\n *\n * structuredContent shape: { name, tokensCss, viewUrl, installCommand, status, step }.\n * Layout: a token-rendered mini-UI of the system as the hero (pure CSS from the\n * DS tokens, no iframe since Claude restricts cross-origin frameDomains), with a\n * \"Preview Project\" CTA bottom-right linking to the durable project page. [BD-92]\n */\n// STABLE URI — DO NOT version-bump on markup changes. The URI is a discovery\n// key: it must match between the tool result's `openai/outputTemplate` /\n// `ui/resourceUri` and the connector's cached `resources/list`. Bumping it\n// desyncs every already-connected client (their cached list still has the old\n// URI) so the host fetches a template URI it doesn't know → ChatGPT shows\n// \"Failed to fetch template\", and a connector Refresh doesn't reliably re-pull\n// it. The Worker serves the CURRENT widget HTML at this URI on every deploy, so\n// content changes ship without ever changing the URI. Frozen at the value all\n// live connectors already synced (was bumped v12→v20 in BD-117, which broke\n// ChatGPT). [BD-117]\nexport const DS_PREVIEW_WIDGET_URI = \"ui://widget/ds-preview-v12.html\";\n\nexport const DS_PREVIEW_WIDGET_HTML = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<style>\n/* Base font for the whole widget: without this, text that doesn't set its own\n font-family (body copy, labels, list rows, buttons via font:inherit) inherits\n the browser default = Times serif. Anchoring the DS --font-sans here makes the\n preview use the system's font everywhere; headings opt into --font-serif. [BD-120] */\nhtml, body { margin: 0; padding: 0; background: transparent; font-family: var(--font-sans, ui-sans-serif, system-ui, sans-serif); color: var(--foreground, oklch(0.2 0 0)); }\n${PREVIEW_BASE_CSS}\n/* Square + flush: no radius, no shadow. The host (claude.ai bubble / ChatGPT\n widget frame) already provides the card chrome, so an inner rounded+shadowed\n shell read as an awkward card-in-a-card and clipped the screenshot corners.\n overflow:hidden stays to contain children. [BD-136] */\n.bd-card-shell { background: var(--background, oklch(1 0 0)); overflow: hidden; }\n.bd-app { padding: 16px; }\n.bd-cta-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 16px; background: var(--card, var(--background, oklch(1 0 0))); border-top: 1px solid var(--border, oklch(0.92 0 0)); }\n.bd-cta-name { font-weight: 600; font-size: 14px; color: var(--foreground, oklch(0.2 0 0)); font-family: var(--font-serif, var(--font-sans, ui-sans-serif)); }\n.bd-cta { font: inherit; font-size: 14px; font-weight: 700; text-decoration: none; color: var(--primary, oklch(0.45 0 0)); display: inline-flex; align-items: center; gap: 6px; }\n.bd-cta:hover { opacity: 0.7; }\n.bd-cta-actions { display: inline-flex; align-items: center; gap: 14px; }\n.bd-expand { font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; background: none; border: 0; padding: 0; color: var(--muted-foreground, oklch(0.5 0 0)); display: inline-flex; align-items: center; gap: 5px; }\n.bd-expand:hover { color: var(--foreground, oklch(0.2 0 0)); }\n.bd-progress { padding: 6px 16px 12px; }\n/* Fullscreen: the DS preview rendered IN-WIDGET (token-driven), full-bleed. No\n iframe — claude.ai's sandbox blocks nested cross-origin frames and the\n ext-apps model is in-widget rendering. requestDisplayMode just grants room. */\n.bd-fs { position: fixed; inset: 0; display: flex; flex-direction: column; background: var(--background, oklch(1 0 0)); }\n.bd-fs-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 16px; border-bottom: 1px solid var(--border, oklch(0.92 0 0)); background: var(--card, var(--background, oklch(1 0 0))); flex: none; }\n.bd-fs-body { flex: 1; overflow-y: auto; padding: 20px; max-width: 860px; width: 100%; margin: 0 auto; }\n.bd-sampler { display: flex; flex-direction: column; gap: 14px; margin-top: 16px; }\n.bd-sample { display: flex; flex-direction: column; gap: 8px; }\n.bd-sample-l { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted-foreground, oklch(0.55 0 0)); }\n/* .bd-row carries margin:12px 0 from the base CSS; reset it inside the sampler so the\n 8px column gap is the only spacing (else label<->row reads ~20px, too loose). */\n.bd-sampler .bd-row { margin: 0; }\n/* Error state: a static, theme-neutral note (errorBody). No DS tokens are\n loaded, so it falls back to a light ramp on the white fallback card. */\n.bd-skel-app { padding: 16px; display: flex; flex-direction: column; gap: 12px; font-family: ui-sans-serif, system-ui, sans-serif; }\n.bd-skel-name { font-weight: 600; font-size: 14px; color: var(--muted-foreground, oklch(0.45 0 0)); }\n.bd-skel-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; }\n.bd-skel-card { border: 1px solid var(--border, oklch(0.9 0 0)); border-radius: 14px; padding: 16px 18px; display: flex; flex-direction: column; gap: 10px; }\n/* No DS font is loaded while generating, so keep the footer name neutral sans\n too — otherwise a host-injected serif that doesn't load in the sandbox falls\n back to Times New Roman. */\n.bd-skel-app ~ .bd-cta-row .bd-cta-name { font-family: ui-sans-serif, system-ui, sans-serif; }\n\n/* The real component-kit classes (.ds-*), styled by the DS tokens. */\n${DS_KIT_CSS}\n\n/* In-widget component showcase. Mirrors the real /design-systems/<id> page 1:1:\n page header (h1 + description), then a 3-column layout — left \"Sections\" nav,\n center SectionHeader + DemoCard grid, right token palette. All CSS values are\n copied from component-showcase.tsx (DemoCard/SectionHeader/Grid/asides), NOT\n invented. All sans (no serif). Inline hides both asides exactly like the real\n page does below lg/xl; fullscreen shows them. [BD-117] */\n.bd-show { background: var(--background, oklch(1 0 0)); font-family: var(--font-sans, ui-sans-serif, system-ui, sans-serif); }\n.bd-show :is(h1, h2, h3, h4) { font-family: var(--font-sans, ui-sans-serif, system-ui, sans-serif); }\n/* Page header (component-showcase.tsx:2065-2075). */\n.bd-head { padding: 24px 28px 18px; }\n.bd-head-name { font-size: 28px; font-weight: 700; color: var(--foreground, oklch(0.2 0 0)); line-height: 1.2; margin: 0; }\n.bd-head-desc { font-size: 14px; color: var(--muted-foreground, oklch(0.5 0 0)); margin: 6px 0 0; }\n/* 3-column layout (component-showcase.tsx:2078). */\n.bd-cols { display: flex; align-items: flex-start; }\n.bd-main { flex: 1; min-width: 0; padding: 0 16px 16px; }\n/* Left \"Sections\" nav card (component-showcase.tsx:2081-2142). Asides only in\n fullscreen, matching the real page's hidden lg:block / hidden xl:block. */\n.bd-nav, .bd-pal { display: none; }\n.bd-fs .bd-nav, .bd-fs .bd-pal { display: block; width: 200px; flex-shrink: 0; position: sticky; top: 0; align-self: flex-start; max-height: 100vh; overflow-y: auto; padding: 16px; }\n.bd-fs .bd-pal { width: 196px; }\n.bd-nav-card, .bd-pal-card { border: 1px solid var(--border, oklch(0.9 0 0)); border-radius: 8px; background: var(--card, var(--background, oklch(1 0 0))); overflow: clip; }\n.bd-nav-h, .bd-pal-h { padding: 10px 12px; border-bottom: 1px solid var(--border, oklch(0.9 0 0)); font-size: 10px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted-foreground, oklch(0.5 0 0)); opacity: 0.6; }\n.bd-nav-list { display: flex; flex-direction: column; gap: 1px; padding: 6px 6px 8px; }\n.bd-nav-item { display: flex; align-items: center; gap: 8px; width: 100%; text-align: left; padding: 5px 8px; font: inherit; font-size: 12px; font-weight: 400; color: var(--muted-foreground, oklch(0.5 0 0)); background: transparent; border-radius: 5px; border: none; cursor: pointer; line-height: 1.4; }\n.bd-nav-item:hover, .bd-nav-item.active { font-weight: 500; color: var(--foreground, oklch(0.2 0 0)); background: var(--muted, oklch(0.95 0 0)); }\n.bd-nav-dot { width: 5px; height: 5px; border-radius: 50%; flex-shrink: 0; background: var(--border, oklch(0.85 0 0)); }\n.bd-nav-item.active .bd-nav-dot { background: var(--primary, oklch(0.45 0.15 264)); }\n/* SectionHeader (component-showcase.tsx:1659-1680). */\n.bd-sh { margin-bottom: 20px; margin-top: 64px; padding-top: 48px; border-top: 1px solid var(--border, oklch(0.9 0 0)); }\n.bd-sh.first { margin-top: 28px; padding-top: 0; border-top: none; }\n.bd-sh-t { font-size: 11px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted-foreground, oklch(0.5 0 0)); }\n/* Grid (component-showcase.tsx:1565-1571 — cols-1 / sm:2 / xl:3, gap-3 = 12px).\n Own class (not the vignette's .bd-grid) + explicit responsive columns capped\n at 3, so the fullscreen main never renders a 4th column. [BD-117] */\n.bd-show-grid { display: grid; grid-template-columns: 1fr; gap: 12px; }\n@media (min-width: 640px) { .bd-show-grid { grid-template-columns: repeat(2, 1fr); } }\n@media (min-width: 1024px) { .bd-show-grid { grid-template-columns: repeat(3, 1fr); } }\n/* DemoCard (component-showcase.tsx:1629-1656). */\n.bd-dc { border-radius: 8px; border: 1px solid var(--border, oklch(0.9 0 0)); font-size: 13px; display: flex; flex-direction: column; overflow: hidden; }\n.bd-dc-demo { padding: 20px 16px; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 10px; flex: 1; min-height: 110px; background: var(--background, oklch(1 0 0)); color: var(--foreground, oklch(0.2 0 0)); }\n.bd-dc-foot { font-size: 11px; font-weight: 500; color: var(--muted-foreground, oklch(0.5 0 0)); padding: 5px 10px 7px; border-top: 1px solid var(--border, oklch(0.9 0 0)); background: var(--card, var(--background, oklch(1 0 0))); }\n/* Right token palette (component-showcase.tsx:3634 TokenPalette). */\n.bd-pal-list { display: flex; flex-direction: column; gap: 1px; padding: 6px; }\n.bd-tok { display: flex; align-items: center; gap: 8px; padding: 4px 6px; font-size: 11px; color: var(--muted-foreground, oklch(0.5 0 0)); }\n.bd-tok-sw { width: 18px; height: 18px; border-radius: 5px; border: 1px solid var(--border, oklch(0.85 0 0)); flex: none; }\n.bd-ico { width: 15px; height: 15px; flex: none; }\n/* Inline = capped height + fade, exactly the real page's main column (no asides). */\n.bd-show-scroll { max-height: 420px; overflow: hidden; position: relative; -webkit-mask-image: linear-gradient(to bottom, #000 86%, transparent); mask-image: linear-gradient(to bottom, #000 86%, transparent); }\n.bd-fs .bd-show-scroll { max-height: none; overflow: visible; -webkit-mask-image: none; mask-image: none; }\n.bd-fs .bd-main { max-width: 920px; }\n/* Real-page iframe (ChatGPT). Inline = capped height + footer; fullscreen =\n full viewport + a Back bar. The iframe shows the actual /design-systems/<id>\n page (?embed=1, no app nav), so the components are real, not approximated. */\n.bd-frame-wrap { display: flex; flex-direction: column; background: var(--background, oklch(1 0 0)); }\n.bd-frame { width: 100%; border: 0; display: block; background: var(--background, oklch(1 0 0)); height: 460px; }\n.bd-frame-wrap.bd-fs { position: fixed; inset: 0; height: 100vh; }\n.bd-frame-wrap.bd-fs .bd-frame { flex: 1; height: auto; }\n/* Real-page screenshot (claude.ai, which can't iframe). Inline = capped + fade;\n fullscreen = scrollable. [BD-136] */\n.bd-shot-wrap { min-height: 240px; max-height: 540px; overflow: hidden; position: relative; background: var(--card, var(--background, oklch(0.97 0 0))); -webkit-mask-image: linear-gradient(to bottom, #000 90%, transparent); mask-image: linear-gradient(to bottom, #000 90%, transparent); }\n.bd-shot-wrap.bd-fs { min-height: 0; max-height: 100vh; overflow: auto; -webkit-mask-image: none; mask-image: none; }\n.bd-shot { display: block; width: 100%; height: auto; }\n.bd-frame-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 9px 14px; border-top: 1px solid var(--border, oklch(0.92 0 0)); background: var(--card, var(--background, oklch(1 0 0))); }\n.bd-cta-name { font-weight: 600; font-size: 13px; color: var(--foreground, oklch(0.2 0 0)); }\n.bd-cta-actions { display: inline-flex; align-items: center; gap: 14px; }\n/* claude.ai link-out card (can't iframe). */\n.bd-link-card { padding: 22px 20px; display: flex; flex-direction: column; gap: 6px; align-items: flex-start; }\n.bd-link-title { font-size: 17px; font-weight: 600; color: var(--foreground, oklch(0.2 0 0)); }\n.bd-link-desc { font-size: 13px; color: var(--muted-foreground, oklch(0.5 0 0)); margin: 0 0 6px; }\n.bd-cta-lg { font-size: 14px; padding: 9px 16px; border-radius: var(--radius-md, 8px); background: var(--primary, oklch(0.45 0.15 264)); color: var(--primary-foreground, oklch(1 0 0)); }\n</style>\n<style id=\"bd-tokens\"></style>\n</head>\n<body>\n<div id=\"bd-root\"></div>\n<script>${PREVIEW_WIDGET_SDK_JS.replace(/<\\/script/gi, \"<\\\\/script\")}</script>\n<script>\n(function () {\n var root = document.getElementById(\"bd-root\");\n var tokens = document.getElementById(\"bd-tokens\");\n var bdApp = null; // MCP Apps instance, set once the bridge connects (for openLink)\n\n // Clear inline-SVG icons (a bare chevron reads as decoration, not an action).\n // currentColor + sized via .bd-ico so they match their label. [BD-117]\n var ICON_EXPAND = '<svg class=\"bd-ico\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3M21 8V5a2 2 0 0 0-2-2h-3M3 16v3a2 2 0 0 0 2 2h3M16 21h3a2 2 0 0 0 2-2v-3\"/></svg>';\n var ICON_EXTERNAL = '<svg class=\"bd-ico\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M15 3h6v6M10 14 21 3M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/></svg>';\n\n function esc(s) {\n return String(s == null ? \"\" : s).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n }\n\n // Only http(s) URLs are safe to use as an iframe src / link href; reject\n // javascript:/data:/etc. so a hostile MCP payload can't inject a scheme that\n // executes in the widget sandbox. Returns \"\" for anything else.\n function safeUrl(u) {\n u = String(u == null ? \"\" : u).trim();\n var lower = u.toLowerCase();\n // indexOf, not a regex: this whole script is inlined inside a TS template\n // literal, so regex backslashes (\\\\/) get mangled by the outer template.\n return (lower.indexOf(\"https://\") === 0 || lower.indexOf(\"http://\") === 0) ? u : \"\";\n }\n\n // Component sections, grouped + titled exactly like the real page's SECTIONS\n // (component-showcase.tsx:624). Framework-free .ds-* markup styled entirely by\n // the DS tokens, so no server round-trip. Each section: [id, title, items[]];\n // each item: [name, demoHtml]. [BD-117]\n function showcaseSections() {\n return [\n [\"forms-inputs\", \"Forms & Inputs\", [\n [\"Button\", '<button class=\"ds-btn ds-btn-primary\">Primary</button><button class=\"ds-btn ds-btn-secondary\">Secondary</button><button class=\"ds-btn ds-btn-outline\">Outline</button><button class=\"ds-btn ds-btn-ghost\">Ghost</button>'],\n [\"Button sizes\", '<button class=\"ds-btn ds-btn-primary ds-btn-sm\">Small</button><button class=\"ds-btn ds-btn-primary\">Default</button><button class=\"ds-btn ds-btn-primary ds-btn-lg\">Large</button>'],\n [\"Input\", '<div style=\"width:100%;max-width:220px\"><label class=\"ds-label\">Email</label><input class=\"ds-input\" placeholder=\"you@example.com\" /></div>'],\n [\"Textarea\", '<div style=\"width:100%;max-width:220px\"><label class=\"ds-label\">Message</label><textarea class=\"ds-textarea\" placeholder=\"Write something…\"></textarea></div>'],\n [\"Switch\", '<span class=\"ds-switch\"><span class=\"ds-switch-track on\"><span class=\"ds-switch-thumb\"></span></span> On</span><span class=\"ds-switch\"><span class=\"ds-switch-track\"><span class=\"ds-switch-thumb\"></span></span> Off</span>'],\n ]],\n [\"data-display\", \"Data Display\", [\n [\"Avatar\", '<span class=\"ds-avatar\">MK</span><span class=\"ds-avatar\">AB</span><span class=\"ds-avatar\">+5</span>'],\n [\"Badge\", '<span class=\"ds-badge ds-badge-primary\">Pro</span><span class=\"ds-badge\">Beta</span><span class=\"ds-badge ds-badge-outline\">v2</span>'],\n [\"Progress\", '<div style=\"width:100%;max-width:200px;display:flex;flex-direction:column;gap:8px\"><div class=\"ds-progress\"><div class=\"ds-progress-bar\" style=\"width:72%\"></div></div><div class=\"ds-progress\"><div class=\"ds-progress-bar\" style=\"width:34%\"></div></div></div>'],\n [\"Table\", '<table class=\"ds-table\" style=\"width:100%;max-width:240px\"><thead><tr><th>Name</th><th>Role</th></tr></thead><tbody><tr><td>Ada</td><td>Owner</td></tr><tr><td>Lin</td><td>Editor</td></tr></tbody></table>'],\n ]],\n [\"navigation\", \"Navigation\", [\n [\"Tabs\", '<div class=\"ds-tabs\"><button class=\"ds-tab active\">Overview</button><button class=\"ds-tab\">Activity</button><button class=\"ds-tab\">Settings</button></div>'],\n [\"Chips\", '<span class=\"ds-chip\">Filter</span><span class=\"ds-chip\">Status: Active</span><span class=\"ds-chip\"><span class=\"ds-kbd\">⌘</span> K</span>'],\n ]],\n [\"layout-structure\", \"Layout & Structure\", [\n [\"Card\", '<div class=\"ds-card\" style=\"width:100%;max-width:240px\"><div class=\"ds-card-header\"><h3 class=\"ds-card-title\">Welcome back</h3><p class=\"ds-card-desc\">Styled by the system tokens.</p></div><div class=\"ds-card-footer\"><button class=\"ds-btn ds-btn-primary ds-btn-sm\">Open</button><button class=\"ds-btn ds-btn-outline ds-btn-sm\">Dismiss</button></div></div>'],\n ]],\n [\"feedback\", \"Feedback\", [\n [\"Alert\", '<div class=\"ds-alert\" style=\"max-width:100%\"><div class=\"ds-alert-title\">Heads up</div>Your changes are saved automatically.</div>'],\n ]],\n ];\n }\n\n // A section = SectionHeader + a grid of DemoCards (component-showcase.tsx\n // SectionHeader:1659 + Grid:1565 + DemoCard:1629). first removes the top rule.\n function sectionsHtml() {\n return showcaseSections().map(function (s, i) {\n var cards = s[2].map(function (it) {\n return '<div class=\"bd-dc\" data-name=\"' + esc(it[0].toLowerCase()) + '\">' +\n '<div class=\"bd-dc-demo\">' + it[1] + '</div>' +\n '<div class=\"bd-dc-foot\">' + esc(it[0]) + '</div>' +\n '</div>';\n }).join(\"\");\n return '<section class=\"bd-sec\" data-sec=\"' + esc(s[0]) + '\">' +\n '<div class=\"bd-sh' + (i === 0 ? \" first\" : \"\") + '\"><div class=\"bd-sh-t\">' + esc(s[1]) + '</div></div>' +\n '<div class=\"bd-show-grid\">' + cards + '</div>' +\n '</section>';\n }).join(\"\");\n }\n\n // Left \"Sections\" nav card (component-showcase.tsx:2081). Buttons scroll to\n // their section. Shown in fullscreen only (CSS), like the real hidden lg:block.\n function navHtml() {\n return '<aside class=\"bd-nav\"><div class=\"bd-nav-card\"><div class=\"bd-nav-h\">Sections</div><nav class=\"bd-nav-list\">' +\n showcaseSections().map(function (s, i) {\n return '<button type=\"button\" class=\"bd-nav-item' + (i === 0 ? \" active\" : \"\") + '\" data-bd-jump=\"' + esc(s[0]) + '\"><span class=\"bd-nav-dot\"></span>' + esc(s[1]) + '</button>';\n }).join(\"\") + '</nav></div></aside>';\n }\n\n // Right token palette (component-showcase.tsx:3634 TokenPalette): swatch + name\n // for each semantic color token. Fullscreen only (CSS). [BD-117]\n function paletteHtml() {\n var TOK = [[\"Background\", \"background\"], [\"Foreground\", \"foreground\"], [\"Primary\", \"primary\"], [\"Secondary\", \"secondary\"], [\"Accent\", \"accent\"], [\"Muted\", \"muted\"], [\"Card\", \"card\"], [\"Border\", \"border\"], [\"Destructive\", \"destructive\"], [\"Ring\", \"ring\"]];\n return '<aside class=\"bd-pal\"><div class=\"bd-pal-card\"><div class=\"bd-pal-h\">Tokens</div><div class=\"bd-pal-list\">' +\n TOK.map(function (t) {\n return '<div class=\"bd-tok\"><span class=\"bd-tok-sw\" style=\"background: var(--' + t[1] + ', transparent)\"></span>' + esc(t[0]) + '</div>';\n }).join(\"\") + '</div></div></aside>';\n }\n\n // The full showcase. Mirrors the real page: a header (h1 + description), then a\n // 3-column layout (left nav + main sections + right palette). Same render on\n // BOTH hosts (no iframe). Inline caps the height + hides asides via CSS exactly\n // like the real page below lg/xl; fullscreen shows everything. [BD-117]\n function showcaseBody(out, full) {\n var nm = esc(out.name || \"Design system\");\n // No Back button: the host shows a native close in fullscreen. [BD-136]\n var head = '<div class=\"bd-head\"><h1 class=\"bd-head-name\">' + nm + '</h1>' +\n (out.description ? '<p class=\"bd-head-desc\">' + esc(out.description) + '</p>' : \"\") +\n '</div>';\n var main = '<div class=\"bd-main\">' + sectionsHtml() + '</div>';\n var cols = '<div class=\"bd-cols\">' + navHtml() + main + paletteHtml() + '</div>';\n var inner = head + cols;\n var wrapped = full ? inner : '<div class=\"bd-show-scroll\">' + inner + '</div>';\n return '<div class=\"bd-show ds' + (full ? \" bd-fs\" : \"\") + '\">' + wrapped + '</div>';\n }\n\n // Generation failed: a static (non-shimmer) note. A shimmering \"loading\"\n // skeleton would falsely read as still-in-progress, and the token vignette\n // can't render (no tokens). The CTA below links to the project page to retry.\n function errorBody(out) {\n var nm = esc(out.name || \"Design system\");\n return '<div class=\"bd-skel-app\">' +\n '<div class=\"bd-skel-row\"><span class=\"bd-skel-name\">' + nm + '</span></div>' +\n '<div class=\"bd-skel-card\" style=\"align-items:flex-start;gap:6px\">' +\n '<span class=\"bd-skel-name\" style=\"font-size:15px\">Generation failed</span>' +\n '<span class=\"bd-skel-name\" style=\"font-weight:400;opacity:0.7\">Open the project to see what happened and retry.</span>' +\n '</div>' +\n '</div>';\n }\n\n // Last tool output + current host display mode, so a display-mode change can\n // re-render (inline card <-> fullscreen) without a new tool result.\n var lastOut = null;\n var displayMode = (window.openai && window.openai.displayMode) || \"inline\";\n // Set once the host first advertises availableDisplayModes, so the\n // capability re-render fires exactly once (see onhostcontextchanged). [BD-117]\n var sawDisplayModes = false;\n // Set if the screenshot image fails to load, so render falls back to the\n // token showcase instead of a broken image. [BD-136]\n var shotFailed = false;\n // Host-supplied font payload (from onhostcontextchanged). Applied ONLY while\n // the DS has no tokens of its own; see syncHostFonts. [BD-120]\n var hostFontsPayload = null;\n var applyHostFontsFn = null;\n\n // The host (claude.ai) injects its reading font into --font-sans inline on the\n // root, which overrides the DS's own font; that host font often isn't loadable\n // in the sandbox and degrades to Times. So: once the DS provides tokens, strip\n // the host's inline font vars (DS --font-* from the bd-tokens stylesheet wins);\n // only adopt host fonts in the empty/generating state, where there is no DS\n // font to honor. [BD-120]\n function syncHostFonts() {\n var hasDsTokens = !!(lastOut && lastOut.tokensCss);\n var de = document.documentElement.style;\n if (hasDsTokens) {\n de.removeProperty(\"--font-sans\");\n de.removeProperty(\"--font-serif\");\n de.removeProperty(\"--font-mono\");\n } else if (hostFontsPayload && applyHostFontsFn) {\n try { applyHostFontsFn(hostFontsPayload); } catch (e) {}\n }\n }\n\n // Ask the host to switch display mode (MCP Apps or OpenAI Apps), then re-render\n // from the mode the host actually granted (it may decline fullscreen).\n function setDisplayMode(mode) {\n // Keep the CURRENT mode when the host's response is ambiguous (null / no\n // mode field = declined); only switch to what it actually granted.\n var apply = function (m) { displayMode = m || displayMode; if (lastOut) render(lastOut); };\n try {\n if (bdApp && bdApp.requestDisplayMode) {\n bdApp.requestDisplayMode({ mode: mode }).then(function (r) { apply(r && r.mode); }, function () {});\n return;\n }\n if (window.openai && window.openai.requestDisplayMode) {\n Promise.resolve(window.openai.requestDisplayMode({ mode: mode })).then(function (r) { apply(r && r.mode); }, function () {});\n return;\n }\n } catch (e) {}\n apply(mode);\n }\n\n // Wire the fullscreen left \"Sections\" nav: clicking a section scrolls it into\n // view and marks it active (component-showcase.tsx scrollToSection). Local DOM\n // only, no bridge round-trip.\n function wireShowcase() {\n var items = root.querySelectorAll(\"[data-bd-jump]\");\n for (var i = 0; i < items.length; i++) {\n items[i].addEventListener(\"click\", function (e) {\n var id = e.currentTarget.getAttribute(\"data-bd-jump\");\n var sec = root.querySelector('[data-sec=\"' + id + '\"]');\n if (sec && sec.scrollIntoView) sec.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n for (var j = 0; j < items.length; j++) items[j].classList.remove(\"active\");\n e.currentTarget.classList.add(\"active\");\n });\n }\n }\n\n // Does the current host support the fullscreen display mode? ChatGPT (OpenAI\n // Apps) does; claude.ai / MCP Apps only when it advertised \"fullscreen\" in\n // availableDisplayModes. Claude docs confirm desktop advertises\n // [\"inline\",\"fullscreen\"]; mobile / minimal hosts may not, so gate on it.\n function canFullscreen() {\n if (window.openai) return true;\n var hc = bdApp && bdApp.getHostContext ? bdApp.getHostContext() : null;\n var modes = hc && hc.availableDisplayModes;\n return !!(modes && modes.indexOf && modes.indexOf(\"fullscreen\") !== -1);\n }\n\n // ChatGPT (OpenAI Apps) honors frameDomains, so we can iframe our own origin;\n // claude.ai hardcodes frame-src and ignores frameDomains (anthropics/claude-ai\n // -mcp#40), so it can never iframe — there we link out instead. [BD-117]\n //\n // Identify ChatGPT by window.openai ALONE. Do NOT also test !bdApp: bdApp is\n // our OWN inlined MCP-Apps client (window.__bdMcp), instantiated\n // unconditionally on every host, so it is always set after first paint. The\n // old check (window.openai AND not bdApp) therefore flipped to false on every\n // re-render (Fullscreen, set_globals), wrongly showing the claude.ai link card\n // on ChatGPT. window.openai is absent on claude.ai, so it is the right signal.\n function canIframe() {\n return !!window.openai;\n }\n\n // The real page, with ?embed=1 so it renders the showcase WITHOUT the app nav\n // (clean component showcase to embed). [BD-117]\n function embedUrl(view) {\n if (!view) return \"\";\n return view + (view.indexOf(\"?\") === -1 ? \"?embed=1\" : \"&embed=1\");\n }\n\n // Embed the REAL /design-systems/<id> (or /projects/<id>) page — the actual\n // React components, not a token approximation. Inline = capped height + a\n // footer (Fullscreen + Open). Fullscreen = full-bleed iframe with NO header of\n // our own: both hosts render a native close button in fullscreen (ChatGPT's\n // top bar, claude.ai's native header), so our own Back bar was redundant and\n // visually broken (misaligned, disliked chevron). [BD-136]\n // embed = the PUBLIC, cookieless URL we iframe (the sandbox carries no\n // session cookie, so an owner-scoped page would 404 inside it). open = the\n // owner-facing page for the human \"Open\" link (they have the cookie). [BD-164]\n function iframeBody(out, embed, open, full) {\n var nm = esc(out.name || \"Design system\");\n var frame = '<iframe class=\"bd-frame\" src=\"' + esc(embedUrl(embed)) + '\" title=\"' + nm + ' showcase\" referrerpolicy=\"no-referrer-when-downgrade\"></iframe>';\n if (full) {\n return '<div class=\"bd-frame-wrap bd-fs\">' + frame + '</div>';\n }\n var openHref = open || embed;\n return '<div class=\"bd-frame-wrap\">' + frame +\n '<div class=\"bd-frame-foot\"><span class=\"bd-cta-name\">' + nm + '</span><span class=\"bd-cta-actions\">' +\n (canFullscreen() ? '<button class=\"bd-expand\" data-bd-fullscreen type=\"button\">Fullscreen' + ICON_EXPAND + '</button>' : \"\") +\n '<a class=\"bd-cta\" data-bd-open href=\"' + esc(openHref) + '\" target=\"_blank\" rel=\"noopener\">Open' + ICON_EXTERNAL + '</a>' +\n '</span></div>' +\n '</div>';\n }\n\n // claude.ai can't iframe — surface the REAL page as a browser link (no\n // approximation, just not embedded). [BD-117]\n function linkBody(out, view) {\n var nm = esc(out.name || \"Design system\");\n return '<div class=\"bd-link-card\">' +\n '<div class=\"bd-link-title\">' + nm + '</div>' +\n '<p class=\"bd-link-desc\">Open the live showcase to see every component, styled by this system.</p>' +\n '<a class=\"bd-cta bd-cta-lg\" data-bd-open href=\"' + esc(view) + '\" target=\"_blank\" rel=\"noopener\">Open live showcase' + ICON_EXTERNAL + '</a>' +\n '</div>';\n }\n\n // The name + Fullscreen + Open footer, shared by the iframe / screenshot /\n // token previews. Name left, actions right (CSS handles the split). [BD-136]\n function footHtml(out) {\n var view = safeUrl(out.viewUrl);\n return '<div class=\"bd-frame-foot\"><span class=\"bd-cta-name\">' + esc(out.name || \"Design system\") + '</span><span class=\"bd-cta-actions\">' +\n (canFullscreen() ? '<button class=\"bd-expand\" data-bd-fullscreen type=\"button\">Fullscreen' + ICON_EXPAND + '</button>' : \"\") +\n (view ? '<a class=\"bd-cta\" data-bd-open href=\"' + esc(view) + '\" target=\"_blank\" rel=\"noopener\">Open' + ICON_EXTERNAL + '</a>' : \"\") +\n '</span></div>';\n }\n\n // A REAL screenshot of the showcase page (server-rendered via Cloudflare\n // Browser Rendering), shown where the page can't be iframed (claude.ai). Real\n // components + real CSS, just a flat image. inline = capped + fade; fullscreen\n // = scrollable. Falls back to the token render if the image fails. [BD-136]\n function shotBody(out, full) {\n return '<div class=\"bd-shot-wrap' + (full ? \" bd-fs\" : \"\") + '\">' +\n '<img class=\"bd-shot\" data-bd-shot src=\"' + esc(safeUrl(out.shotUrl)) + '\" alt=\"' + esc(out.name || \"Design system\") + ' showcase\" />' +\n '</div>';\n }\n\n // If the screenshot 404s / errors, drop to the token render so claude.ai still\n // shows a preview rather than a broken image. [BD-136]\n function wireShotFallback() {\n var img = root.querySelector(\"[data-bd-shot]\");\n if (!img) return;\n img.addEventListener(\"error\", function () { shotFailed = true; if (lastOut) render(lastOut); });\n // The screenshot loads async; its real height only exists after it decodes.\n // claude.ai reads the widget's documentElement height from the DOM, so re-pin\n // the iframe height once the image has dimensions (a cached image may already\n // be complete before this runs). [BD-136]\n img.addEventListener(\"load\", scheduleResize);\n if (img.complete && img.naturalHeight) scheduleResize();\n }\n\n function render(out) {\n if (!out) { root.innerHTML = \"\"; return; }\n lastOut = out;\n tokens.textContent = out.tokensCss || \"\";\n syncHostFonts();\n // Only an http(s) URL is usable; reject any other scheme up front.\n var view = safeUrl(out.viewUrl);\n // The iframe must load a PUBLIC, cookieless URL (the sandbox has no session\n // cookie). previewUrl points at /preview/<fragmentId>; fall back to view if\n // the host didn't supply one (e.g. catalog DSes, whose view is public). [BD-164]\n var embed = safeUrl(out.previewUrl) || view;\n var isError = out.status === \"error\";\n var generating = out.status && out.status !== \"completed\" && !isError;\n var completed = !isError && !generating;\n // claude.ai (can't iframe): prefer a REAL screenshot; fall back to the token\n // render if there's no shotUrl or the image failed to load.\n var useShot = !shotFailed && !!safeUrl(out.shotUrl);\n\n // ChatGPT's fullscreen \"Open in <app>\" button defaults to the iframe's\n // current path, which is now the PUBLIC /preview page. Repoint it at the\n // owner's editable /projects/<id> (they have the session cookie on the web,\n // so it loads for them) so fullscreen Open still reaches their project. [BD-164]\n if (completed && view && window.openai && window.openai.setOpenInAppUrl) {\n try { window.openai.setOpenInAppUrl({ href: view }); } catch (e) {}\n }\n\n // Fullscreen: ChatGPT iframes the real page; claude.ai shows the full\n // screenshot (scrollable) or the token showcase. [BD-136]\n if (displayMode === \"fullscreen\" && completed) {\n if (canIframe() && embed) { root.innerHTML = iframeBody(out, embed, view, true); return; }\n if (useShot) { root.innerHTML = '<div class=\"bd-card-shell bd-fs\">' + shotBody(out, true) + footHtml(out) + '</div>'; wireShotFallback(); }\n else { root.innerHTML = showcaseBody(out, true); wireShowcase(); }\n return;\n }\n\n // Inline completed: ChatGPT = real-page iframe; claude.ai = real screenshot\n // (capped) or token showcase, + a footer (Fullscreen + Open). [BD-136]\n if (completed) {\n if (canIframe() && embed) {\n root.innerHTML = '<div class=\"bd-card-shell\">' + iframeBody(out, embed, view, false) + '</div>';\n return;\n }\n var body = useShot ? shotBody(out, false) : showcaseBody(out, false);\n root.innerHTML = '<div class=\"bd-card-shell\">' + body + footHtml(out) + '</div>';\n if (useShot) wireShotFallback();\n return;\n }\n\n // Generating: render nothing — no fake skeleton. The widget stays empty\n // until the system is completed (or errors). [BD-164]\n if (generating) { root.innerHTML = \"\"; return; }\n // Error / no-url: static note + optional open link.\n var hero = errorBody(out);\n var cta = view\n ? '<div class=\"bd-cta-row\"><span class=\"bd-cta-name\">' + esc(out.name || \"Design system\") + '</span>' +\n '<a class=\"bd-cta\" data-bd-open href=\"' + esc(view) + '\" target=\"_blank\" rel=\"noopener\">Open' + ICON_EXTERNAL + '</a></div>'\n : \"\";\n root.innerHTML = '<div class=\"bd-card-shell\">' + hero + cta + \"</div>\";\n }\n\n // ── Sizing ────────────────────────────────────────────────────────────────\n // The MCP Apps client emits ui/notifications/size-changed (ResizeObserver on\n // documentElement + body); ChatGPT honors that and auto-sizes its widget.\n // claude.ai web does NOT honor size-changed — it reads the widget's\n // documentElement height straight from the DOM and pins the iframe to whatever\n // inline height the document carries. With no explicit height the iframe stays\n // at 0 (verified live: a single size-changed{0,0} then the iframe sits at 0px;\n // claude-ai-mcp#69). So on the DOM-reading hosts we set\n // document.documentElement.style.height ourselves, AFTER content + the async\n // screenshot have real height. [BD-136]\n var lastAppliedH = 0;\n function measureCardHeight() {\n var card = root.firstElementChild; // .bd-card-shell / fullscreen shell\n return Math.ceil(Math.max(\n (card && card.scrollHeight) || 0,\n root.scrollHeight || 0,\n document.body ? document.body.scrollHeight : 0,\n ));\n }\n function applyClaudeHeight() {\n // ChatGPT (window.openai) auto-sizes via its own bridge — never fight it.\n if (window.openai) return;\n var de = document.documentElement;\n // Fullscreen content is position:fixed (out of flow), so its scrollHeight is\n // meaningless — clear the pin and let the host own the viewport.\n if (displayMode === \"fullscreen\") { de.style.height = \"\"; lastAppliedH = 0; return; }\n var h = measureCardHeight();\n if (h > 0 && Math.abs(h - lastAppliedH) > 1) {\n lastAppliedH = h;\n de.style.height = h + \"px\";\n }\n }\n // Measure across two frames (layout settle + image decode) so we never pin a\n // pre-render / pre-image height that claude.ai would latch onto.\n function scheduleResize() {\n if (typeof requestAnimationFrame !== \"function\") { applyClaudeHeight(); return; }\n requestAnimationFrame(function () { applyClaudeHeight(); requestAnimationFrame(applyClaudeHeight); });\n }\n // Re-pin on every render swap (#bd-root mutations) and on any late layout growth\n // (fonts, reflow). The screenshot's own load event is wired in wireShotFallback.\n try {\n if (typeof MutationObserver === \"function\") {\n new MutationObserver(scheduleResize).observe(root, { childList: true, subtree: true });\n }\n } catch (e) {}\n try {\n if (typeof ResizeObserver === \"function\") {\n new ResizeObserver(scheduleResize).observe(root);\n }\n } catch (e) {}\n\n // The widget runs in a sandboxed iframe (claude.ai); a bare <a target=_blank>\n // cannot open a tab or navigate the top frame, so the CTA looks dead. Route the\n // click through the host: MCP Apps app.openLink({url}) or OpenAI Apps\n // openai.openExternal({href}). Falls through to the native anchor for hosts\n // (or the standalone artifact) where that already works. Delegated so it\n // survives render()'s innerHTML rewrites.\n root.addEventListener(\"click\", function (e) {\n var t = e.target;\n if (!t || !t.closest) return;\n if (t.closest(\"[data-bd-fullscreen]\")) { e.preventDefault(); setDisplayMode(\"fullscreen\"); return; }\n if (t.closest(\"[data-bd-collapse]\")) { e.preventDefault(); setDisplayMode(\"inline\"); return; }\n var a = t.closest(\"a[data-bd-open]\");\n if (!a) return;\n var url = a.getAttribute(\"href\");\n if (!url) return;\n if (bdApp && bdApp.openLink) {\n e.preventDefault();\n try { bdApp.openLink({ url: url }); } catch (err) {}\n return;\n }\n if (window.openai && window.openai.openExternal) {\n e.preventDefault();\n try { window.openai.openExternal({ href: url }); } catch (err) {}\n }\n });\n\n // ChatGPT bridge (OpenAI Apps): render immediately + on globals update.\n if (window.openai) {\n render(window.openai.toolOutput);\n window.addEventListener(\"openai:set_globals\", function (event) {\n // The host pushes displayMode changes through set_globals too — track it so\n // a host-driven inline<->fullscreen switch re-renders the right view.\n if (window.openai.displayMode) displayMode = window.openai.displayMode;\n var g = event && event.detail && event.detail.globals;\n render((g && g.toolOutput) || (window.openai && window.openai.toolOutput));\n });\n }\n\n // MCP Apps bridge (Claude + any compliant host): the SDK is INLINED above as\n // window.__bdMcp (bundled IIFE), so there is no runtime CDN import for the\n // sandbox CSP to block.\n try {\n var mcp = window.__bdMcp;\n if (mcp && mcp.App) {\n var app = new mcp.App({ name: \"Better Design Preview\", version: \"1.0.0\" });\n bdApp = app; // expose to the CTA click handler for openLink\n app.ontoolresult = function (params) {\n var sc = params && (params.structuredContent || (params.result && params.result.structuredContent));\n if (sc) render(sc);\n };\n app.onhostcontextchanged = function (ctx) {\n try {\n if (ctx && ctx.theme && mcp.applyDocumentTheme) mcp.applyDocumentTheme(ctx.theme);\n // Stash host fonts but don't apply blindly — syncHostFonts only adopts\n // them when the DS has no font of its own (else the host font clobbers\n // the DS and degrades to Times in the sandbox). [BD-120]\n if (ctx && ctx.styles && ctx.styles.css && ctx.styles.css.fonts && mcp.applyHostFonts) {\n hostFontsPayload = ctx.styles.css.fonts;\n applyHostFontsFn = mcp.applyHostFonts;\n syncHostFonts();\n }\n // Track host-driven display-mode changes so the view follows them.\n if (ctx && ctx.displayMode && ctx.displayMode !== displayMode) { displayMode = ctx.displayMode; if (lastOut) render(lastOut); }\n // Re-render ONCE, the first time the host advertises its display modes,\n // so the capability-gated Fullscreen button appears (or stays hidden).\n // Guard with sawDisplayModes — ctx is the merged hostContext, so without\n // this every later host-context-changed (theme/font) would rebuild the\n // DOM and lose scroll + active-section state in fullscreen. [BD-117]\n else if (ctx && ctx.availableDisplayModes && !sawDisplayModes && lastOut) { sawDisplayModes = true; render(lastOut); }\n } catch (e) {}\n };\n if (app.connect) app.connect().catch(function () {});\n }\n } catch (e) { /* host without MCP Apps support; OpenAI bridge or static text covers it */ }\n})();\n</script>\n</body>\n</html>`;\n","import { z } from \"zod\";\nimport type { DsTopResult } from \"../../design-systems/record-search\";\nimport { GUARDRAILS_SETUP_MD } from \"../guardrails\";\nimport { buildDsHtmlKit } from \"../html-kit\";\nimport {\n buildDsComponentCss,\n componentDepthCss,\n componentRadiusCss,\n cssFromRegistryVars,\n extractFontCss,\n extractRadiusScaleCss,\n extractShadowScaleCss,\n DS_PREVIEW_WIDGET_URI,\n} from \"../preview-html\";\nimport type { McpAuthContext, RegisterToolDeps } from \"./shared\";\nimport {\n ANTI_MOCKUP_MD,\n APP_BASE_URL,\n BUILD_TARGET_RULE,\n codingHostName,\n extractOutputPreview,\n PREVIEW_OUTPUT_SCHEMA,\n REGISTRY_BASE_URL,\n REQUIREMENTS_MD,\n} from \"./shared\";\n\nconst REGISTRY_ITEM_SCHEMA = z.object({\n cssVars: z\n .object({\n light: z.record(z.string(), z.string()).optional(),\n dark: z.record(z.string(), z.string()).optional(),\n theme: z.record(z.string(), z.string()).optional(),\n })\n .optional(),\n files: z.array(z.object({ path: z.string().optional(), content: z.string().optional() })).optional(),\n});\n\nconst SHADCN_INIT_IF_MISSING = \"[ -f components.json ] || npx shadcn@latest init -d -y\";\nconst SAFE_COMPONENT_NAME_RE = /^[a-z0-9][a-z0-9-]*$/i;\n\nfunction installCommandWithInit(installCommand: string): string {\n return `${SHADCN_INIT_IF_MISSING}\\n\\n${installCommand}`;\n}\n\n/**\n * Token stylesheet for the DS preview from a shadcn registry payload: parsed\n * cssVars give the color/radius/shadow tokens; the raw globals.css inside\n * `files` supplies the `--font-*` vars + the Google Fonts import that the\n * parsed vars never carry (see extractFontCss). [BD-84]\n */\nfunction tokensCssFromRegistry(json: {\n cssVars?: { light?: Record<string, string>; dark?: Record<string, string>; theme?: Record<string, string> };\n files?: Array<{ path?: string; content?: string }>;\n meta?: { globalsCss?: string };\n}): string {\n const files = json.files ?? [];\n const vars = json.cssVars ? cssFromRegistryVars(json.cssVars) : \"\";\n // Generated-project registries don't ship globals.css as a file (it is\n // parsed into cssVars); the raw source rides in meta.globalsCss instead so\n // the preview keeps the project's fonts + radius scale. [BD-86]\n const globals =\n files.find((f) => f.path?.endsWith(\"globals.css\"))?.content ?? json.meta?.globalsCss ?? \"\";\n const { fontVars, fontImport } = extractFontCss(globals);\n return [\n fontImport,\n vars,\n fontVars,\n extractRadiusScaleCss(globals),\n extractShadowScaleCss(globals),\n componentRadiusCss(files),\n componentDepthCss(files),\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction authHeaders(authContext?: McpAuthContext): Record<string, string> {\n if (!authContext) return {};\n const bearer = authContext.kind === \"api-key\" ? authContext.apiKey : authContext.accessToken;\n return { Authorization: `Bearer ${bearer}` };\n}\n\n/**\n * Inline-build steering: a model building an app INSIDE a ChatGPT canvas /\n * Claude artifact has no npm or Tailwind, so the shadcn install can't run.\n * Point it at get-design-system-html (framework-free token + CSS kit) instead of\n * letting it ad-lib unstyled HTML that ignores the system. [BD-146]\n */\nfunction inlineBuildMd(projectId: string): string {\n return `\\n**Building inline (ChatGPT canvas / Claude artifact)?** There is no npm or Tailwind there, so the install above can't run. Call \\`get-design-system-html\\` with projectId \\`${projectId}\\` to get this system's real tokens + a framework-free CSS kit you paste into one \\`<style>\\` and build with immediately.`;\n}\n\n/**\n * Token stylesheet for a *generated project* DS (vs a catalog DS). A freshly\n * created system has only a projectId, not a catalog id, so its tokens live in\n * the project's shadcn registry, not under /registry/<id>/. Lets\n * get-design-system-html export a custom DS for inline (canvas/artifact) builds\n * where the shadcn install can't run. [BD-146]\n */\ntype RegistryFile = { path?: string; content?: string };\n\nasync function fetchProjectTokensCss(\n projectId: string,\n authContext?: McpAuthContext,\n): Promise<{ tokensCss: string; name?: string; files: RegistryFile[] } | null> {\n try {\n const res = await fetch(`${APP_BASE_URL}/api/projects/${projectId}/registry/all.json`, {\n headers: authHeaders(authContext),\n });\n if (!res.ok) return null;\n const json = (await res.json()) as Parameters<typeof tokensCssFromRegistry>[0] & { name?: string };\n return { tokensCss: tokensCssFromRegistry(json), name: json.name, files: json.files ?? [] };\n } catch {\n return null;\n }\n}\n\n// Components fetched for the catalog HTML kit: tokens come from globals, real\n// component material (radius/depth/fill) is extracted from these sources. [BD-149]\nconst CATALOG_KIT_COMPONENTS = [\"button\", \"input\", \"card\", \"badge\", \"switch\"];\n\nasync function fetchCatalog(\n designSystemId: string,\n): Promise<{ tokensCss: string; files: RegistryFile[] }> {\n try {\n const [globalsRes, ...componentResults] = await Promise.all([\n fetch(`${REGISTRY_BASE_URL}/${designSystemId}/globals.json`),\n ...CATALOG_KIT_COMPONENTS.map((c) =>\n fetch(`${REGISTRY_BASE_URL}/${designSystemId}/${c}.json`).catch(() => null),\n ),\n ]);\n if (!globalsRes.ok) return { tokensCss: \"\", files: [] };\n const globals = REGISTRY_ITEM_SCHEMA.safeParse(await globalsRes.json());\n if (!globals.success) return { tokensCss: \"\", files: [] };\n const files = [...(globals.data.files ?? [])];\n for (const res of componentResults) {\n if (!res?.ok) continue;\n const item = REGISTRY_ITEM_SCHEMA.safeParse(await res.json().catch(() => null));\n if (item.success && item.data.files) files.push(...item.data.files);\n }\n return { tokensCss: tokensCssFromRegistry({ cssVars: globals.data.cssVars, files }), files };\n } catch {\n return { tokensCss: \"\", files: [] };\n }\n}\n\nasync function fetchCatalogTokensCss(designSystemId: string): Promise<string> {\n return (await fetchCatalog(designSystemId)).tokensCss;\n}\n\nexport function registerDesignSystemTools({\n server,\n provider,\n tracked,\n track,\n authContext,\n}: RegisterToolDeps): void {\n const searchInputSchema = z.object({\n query: z.string().describe(\"Natural language query describing the type of UI you're building.\"),\n });\n\n const searchDescription = (): string =>\n `Search the Better Design catalog for an EXISTING design system via semantic search, and return its ID.\n\nFor building an app, generate the user's OWN brand with create-design-system instead. Use this only to browse or inspect catalog systems (the user names one, or wants to preview before installing).\n\nSearch by:\n- Industry (fintech, education, travel, developer tools)\n- Personality traits (professional, playful, minimal, warm)\n- Natural language descriptions of the UI you want\n\nExamples:\n- \"fintech startup\" → Stripe design system\n- \"playful education app\" → Duolingo design system\n- \"minimal developer tools\" → Linear design system`;\n\n const makeSearchHandler =\n (toolName: string) =>\n async ({ query }: { query: string }) => {\n const start = Date.now();\n const finish = <T>(response: T, topResults: DsTopResult[], isError = false, errorMessage?: string): T => {\n track(toolName, { query, topResults }, {\n durationMs: Date.now() - start,\n errorMessage,\n isError,\n outputPreview: extractOutputPreview(response),\n });\n return response;\n };\n try {\n const results = await provider.searchDesignSystems(query, 5);\n const topResults = results.map((r) => ({ id: r.id, score: r.matchScore }));\n\n if (results.length === 0) {\n return finish(\n { content: [{ type: \"text\" as const, text: \"No design systems found matching your query.\" }] },\n topResults,\n );\n }\n\n const formatted = results\n .map((r) =>\n [\n `**ID:** ${r.id}`,\n `**Title:** ${r.title}`,\n `**Description:** ${r.description}`,\n `**Personality:** ${r.personality.join(\", \")}`,\n `**Industry:** ${r.industry.join(\", \")}`,\n `**Components:** ${r.componentCount}`,\n `**Match Score:** ${r.matchScore}%`,\n `**Registry:** ${REGISTRY_BASE_URL}/${r.id}`,\n ].join(\"\\n\"),\n )\n .join(\"\\n\\n----------\\n\\n\");\n\n return finish(\n {\n content: [{\n type: \"text\" as const,\n text: `# Available Design Systems\\n\\nEach result includes an **ID** to use with get-design-system-docs.\\n\\n---\\n\\n${formatted}`,\n }],\n },\n topResults,\n );\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n return finish(\n { content: [{ type: \"text\" as const, text: `Error: ${message}` }] },\n [],\n true,\n message,\n );\n }\n };\n\n // find-design-system is the catalog-search tool. [BD-173]\n server.registerTool(\n \"find-design-system\",\n {\n title: \"Find Design System\",\n description: searchDescription(),\n inputSchema: searchInputSchema,\n annotations: { readOnlyHint: true },\n },\n makeSearchHandler(\"find-design-system\"),\n );\n\n server.registerTool(\n \"get-design-system-docs\",\n {\n title: \"Get Design System Documentation\",\n description: `Scaffolds a design system into the user's project.\n\nYou must call 'find-design-system' first to obtain the design system ID.\n\n**Default behavior (recommended): install the full design system.**\nCall with only a designSystemId and this tool returns ONE shadcn command that\ninstalls every component (globals + all UI primitives) into components/ui/ in\none shot. Run that command before writing feature code so the agent has the\nfull component library available.\n\nPass 'component' only when the user explicitly asks to inspect or customise a\nspecific component's source code. In that mode the tool returns the requested\ncomponents, a scoped install command, and their source code.`,\n inputSchema: z.object({\n designSystemId: z.string().describe(\"The design system ID from find-design-system\"),\n component: z.union([z.string(), z.array(z.string())]).optional()\n .describe('Optional. Only pass this when the user asks to inspect specific component source code. Examples: \"button\", [\"button\", \"card\"]. Omit to scaffold the entire design system.'),\n }),\n outputSchema: PREVIEW_OUTPUT_SCHEMA,\n annotations: { readOnlyHint: true },\n _meta: {\n ui: { resourceUri: DS_PREVIEW_WIDGET_URI },\n \"ui/resourceUri\": DS_PREVIEW_WIDGET_URI,\n \"openai/outputTemplate\": DS_PREVIEW_WIDGET_URI,\n },\n },\n async ({ designSystemId, component }) => tracked(\"get-design-system-docs\", { designSystemId, component }, async () => {\n try {\n const system = await provider.getDesignSystemById(designSystemId);\n if (!system) {\n return {\n content: [{ type: \"text\" as const, text: `Design system '${designSystemId}' not found.` }],\n structuredContent: { status: \"error\", name: designSystemId, tokensCss: \"\" },\n };\n }\n\n const { metadata, components: allComponents } = system;\n const previewViewUrl = `${APP_BASE_URL}/design-systems/${metadata.id}`;\n const previewStructured = {\n status: \"completed\",\n name: metadata.title,\n viewUrl: previewViewUrl,\n tokensCss: await fetchCatalogTokensCss(metadata.id),\n };\n\n const header: string[] = [\n `# ${metadata.title}\\n`,\n `**Description:** ${metadata.description}`,\n `**Personality:** ${metadata.personality.join(\", \")}`,\n `**Industry:** ${metadata.industry.join(\", \")}`,\n ];\n if (metadata.primaryColor) header.push(`**Primary Color:** ${metadata.primaryColor}`);\n if (metadata.borderRadius) header.push(`**Border Radius:** ${metadata.borderRadius}`);\n if (metadata.font) header.push(`**Font:** ${metadata.font}`);\n header.push(`**Preview (see it live):** ${APP_BASE_URL}/design-systems/${metadata.id}`);\n\n if (!component) {\n const installNames = [\n \"globals\",\n ...allComponents.map((c) => c.name).sort(),\n ];\n const installUrls = installNames\n .map((name) => `${REGISTRY_BASE_URL}/${metadata.id}/${name}.json`)\n .join(\" \\\\\\n \");\n\n const installCommand = `npx shadcn@latest add \\\\\\n ${installUrls}`;\n const structuredInstallCommand = installCommandWithInit(installCommand);\n const parts = [\n ...header,\n \"\\n## Scaffold the full design system\\n\",\n \"_This is the React path, the right call whenever you have a filesystem + terminal. Build real components from `components/ui/`. Only fall back to `get-design-system-html` for inline chat canvases (ChatGPT / Claude artifacts) that cannot run a build._\\n\",\n REQUIREMENTS_MD,\n `Run these commands in the user's project root. The first **conditionally** runs \\`shadcn init\\` only when the project hasn't been set up yet (no \\`components.json\\`); the second installs **all ${installNames.length} pieces** (globals.css + ${allComponents.length} components) into \\`components/ui/\\` with a single shadcn invocation:`,\n \"```bash\",\n `# 1. Initialize shadcn if not already set up (creates components.json,`,\n `# components/ui/, lib/utils.ts, hooks up globals.css). Idempotent.`,\n SHADCN_INIT_IF_MISSING,\n \"\",\n `# 2. Install Better Design's full DS into components/ui/`,\n installCommand,\n \"```\",\n ANTI_MOCKUP_MD,\n \"\\nAfter the install completes, read files from `components/ui/` directly when writing feature code. Do not ask this tool for component source unless the user wants to inspect or customise a specific file.\",\n \"\\n## Included components\\n\",\n installNames.map((n) => `- \\`${n}\\``).join(\"\\n\"),\n \"\\n\" + GUARDRAILS_SETUP_MD,\n ];\n\n return {\n content: [{ type: \"text\" as const, text: parts.join(\"\\n\") }],\n structuredContent: { ...previewStructured, installCommand: structuredInstallCommand },\n };\n }\n\n const componentNames = Array.isArray(component) ? component : [component];\n const components = allComponents.filter((c) => componentNames.includes(c.name));\n const resolvedNames = components.map((c) => c.name);\n\n if (resolvedNames.length === 0) {\n const requestedNames = componentNames\n .filter((name) => SAFE_COMPONENT_NAME_RE.test(name))\n .map((name) => `- \\`${name}\\``);\n return {\n content: [{\n type: \"text\" as const,\n text: [\n `No matching components found in ${metadata.title}.`,\n ...(requestedNames.length > 0 ? [\"\", \"Requested components:\", ...requestedNames] : []),\n \"\",\n \"Available components:\",\n ...allComponents.map((c) => `- \\`${c.name}\\``),\n ].join(\"\\n\"),\n }],\n structuredContent: {\n status: \"error\",\n name: metadata.title,\n viewUrl: previewViewUrl,\n tokensCss: previewStructured.tokensCss,\n },\n };\n }\n\n const scopedUrls = resolvedNames\n .map((name) => `${REGISTRY_BASE_URL}/${metadata.id}/${name}.json`)\n .join(\" \\\\\\n \");\n const installCommand = `npx shadcn@latest add \\\\\\n ${scopedUrls}`;\n const structuredInstallCommand = installCommandWithInit(installCommand);\n\n const parts = [\n ...header,\n \"\\n## Install just these components\\n\",\n REQUIREMENTS_MD,\n \"```bash\",\n `# Init shadcn if missing (idempotent, skips when components.json exists)`,\n SHADCN_INIT_IF_MISSING,\n \"\",\n installCommand,\n \"```\",\n ANTI_MOCKUP_MD,\n \"\\n---\\n\",\n ];\n\n for (const comp of components) {\n const name = comp.name.charAt(0).toUpperCase() + comp.name.slice(1);\n parts.push(`## ${name}`);\n if (comp.description) parts.push(`**Description:** ${comp.description}`);\n parts.push(\"\");\n parts.push(\"```tsx\");\n parts.push(comp.code);\n parts.push(\"```\");\n parts.push(\"\");\n }\n\n return {\n content: [{ type: \"text\" as const, text: parts.join(\"\\n\") }],\n structuredContent: { ...previewStructured, installCommand: structuredInstallCommand },\n };\n } catch (error) {\n return {\n content: [{ type: \"text\" as const, text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}` }],\n structuredContent: { status: \"error\", name: designSystemId, tokensCss: \"\" },\n };\n }\n }),\n );\n\n server.registerTool(\n \"create-design-system\",\n {\n title: \"Create a New Design System\",\n description: `Generate a brand new design system tailored to the user's product, and return a single shadcn install command that lands the entire set of components + tokens (globals.css) into the user's Next.js project.\n\n**Use this PROACTIVELY on any \"build/make me <app>\" request — even when the user never mentions design or branding.** A design system IS the app's brand/visual identity, so creating one first is the right first step for building an app: derive the \\`prompt\\` from the app (its name, domain, and vibe), generate the brand, show it with \\`get-design-system-status\\`, then build the app with that brand. Also use it when the user explicitly wants a **custom** design system instead of installing an existing one via 'get-design-system-docs'.\n\nHow it works:\n1. Sends the user's prompt to Better Design's generation pipeline (same flow the web chat input uses) and returns IMMEDIATELY with the project id + project URL.\n2. Generation runs in the background and typically takes 1-3 minutes.\n3. Call \\`get-design-system-status\\` with the returned project id (wait ~60 seconds first) to get the live preview URL and the final \\`npx shadcn add <registry-url>\\` install command once it completes.\n\nShare the project URL with the user right away so they can watch the generation live.`,\n inputSchema: z.object({\n prompt: z.string().min(1).max(10000).describe(\"Describe the design system the user wants. E.g. 'A warm, minimal design system for a personal finance app, soft pastels, rounded corners' or 'A brutalist developer tool aesthetic with sharp edges and monospace type'.\"),\n baseDesignSystemId: z.string().optional().describe(\"Optional. Pass a design system ID from `find-design-system` to bias generation toward an existing aesthetic (e.g. apply a theme tweak on top of Linear). Leave empty for a fully custom DS.\"),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n openWorldHint: false,\n },\n },\n async ({ prompt, baseDesignSystemId }) => tracked(\"create-design-system\", { query: prompt, hasBase: Boolean(baseDesignSystemId) }, async () => {\n const startUrl = `${APP_BASE_URL}/api/projects/anonymous`;\n let projectId: string;\n const requestHeaders: Record<string, string> = { \"Content-Type\": \"application/json\" };\n if (authContext) {\n const bearer =\n authContext.kind === \"api-key\" ? authContext.apiKey : authContext.accessToken;\n requestHeaders.Authorization = `Bearer ${bearer}`;\n }\n try {\n const startRes = await fetch(startUrl, {\n method: \"POST\",\n headers: requestHeaders,\n body: JSON.stringify({\n value: prompt,\n ...(baseDesignSystemId ? { designSystemId: baseDesignSystemId } : {}),\n }),\n });\n if (!startRes.ok) {\n const text = await startRes.text().catch(() => \"\");\n return { content: [{ type: \"text\" as const, text: `Failed to start generation (HTTP ${startRes.status}). ${text.slice(0, 500)}` }] };\n }\n const body = (await startRes.json()) as { id?: string };\n if (!body.id) {\n return { content: [{ type: \"text\" as const, text: \"Generation endpoint did not return a project id.\" }] };\n }\n projectId = body.id;\n } catch (err) {\n return { content: [{ type: \"text\" as const, text: `Network error calling ${startUrl}: ${err instanceof Error ? err.message : String(err)}` }] };\n }\n\n const projectUrl = `${APP_BASE_URL}/projects/${projectId}`;\n const lines = [\n `# Generation started`,\n \"\",\n `Project id: \\`${projectId}\\``,\n \"\",\n ...(authContext\n ? [`Saved to your Better Design account. Watch it generate live:`]\n : [`Watch it generate live:`]),\n projectUrl,\n \"\",\n `Generation takes 1-3 minutes. Share the project link with the user now, wait ~60 seconds, then call \\`get-design-system-status\\` with the project id to get the live preview URL and the final install command.`,\n inlineBuildMd(projectId),\n ];\n return { content: [{ type: \"text\" as const, text: lines.join(\"\\n\") }] };\n }),\n );\n\n // Shared body for the status tool + its hidden alias. [BD-173]\n const runDesignSystemStatus = async (projectId: string) => {\n const headers: Record<string, string> = {};\n if (authContext) {\n const bearer =\n authContext.kind === \"api-key\" ? authContext.apiKey : authContext.accessToken;\n headers.Authorization = `Bearer ${bearer}`;\n }\n const statusUrl = `${APP_BASE_URL}/api/projects/${projectId}`;\n let project: { name?: string; designSystemStatus?: string; currentStep?: string | null; previewFragmentId?: string | null };\n try {\n const res = await fetch(statusUrl, { headers });\n if (!res.ok) {\n return { content: [{ type: \"text\" as const, text: `Could not read project ${projectId} (HTTP ${res.status}). Check the id, or view it at ${APP_BASE_URL}/projects/${projectId}.` }] };\n }\n project = (await res.json()) as typeof project;\n } catch (err) {\n return { content: [{ type: \"text\" as const, text: `Network error calling ${statusUrl}: ${err instanceof Error ? err.message : String(err)}` }] };\n }\n\n const projectUrl = `${APP_BASE_URL}/projects/${projectId}`;\n if (project.designSystemStatus === \"COMPLETED\") {\n const registryUrl = `${APP_BASE_URL}/api/projects/${projectId}/registry/all.json`;\n let body = `\\`\\`\\`bash\\nnpx shadcn@latest add ${registryUrl}\\n\\`\\`\\``;\n let tokensCss = \"\";\n let dsName = `Project ${projectId.slice(0, 8)}`;\n try {\n const res = await fetch(registryUrl);\n if (res.ok) {\n const json = (await res.json()) as {\n name?: string;\n cssVars?: { light?: Record<string, string>; dark?: Record<string, string>; theme?: Record<string, string> };\n files?: Array<{ path?: string; content?: string }>;\n meta?: { installInstructions?: string; globalsCss?: string };\n };\n if (json.meta?.installInstructions) body = json.meta.installInstructions;\n tokensCss = tokensCssFromRegistry(json);\n if (project.name) dsName = project.name;\n else if (json.name) dsName = json.name;\n }\n } catch {\n // keep fallbacks\n }\n // The interactive widget (DS_PREVIEW_WIDGET via _meta outputTemplate) is\n // the canonical preview. We deliberately do NOT ask the model to render a\n // standalone HTML artifact: a hand-rendered token document never matches\n // the DS's real shadows/material and reads as a flat look-alike. Tell the\n // model not to fabricate one. [BD-121]\n const lines = [\n `# Design system ready`,\n \"\",\n ...(authContext\n ? [`Saved to your Better Design account. View, preview, and re-grab the install command anytime here:`]\n : [`View and preview your design system anytime here:`]),\n projectUrl,\n \"\",\n `Project id: \\`${projectId}\\``,\n \"\",\n `To install it into a local project (Cursor, Claude Code, a checked-out repo):`,\n \"\",\n REQUIREMENTS_MD,\n body,\n ANTI_MOCKUP_MD,\n inlineBuildMd(projectId),\n \"\",\n `In a real codebase, run the install above; do NOT hand-build an HTML/React copy of the components. The preview widget already shows it, and ${projectUrl} has the full showcase.`,\n ];\n // The widget iframes previewUrl (the PUBLIC /preview/<fragmentId> page),\n // not projectUrl: a sandboxed host iframe carries no session cookie, so\n // the owner-scoped /projects/<id> page renders \"Project not found\"\n // inside it. The public preview shows the same generated DS. The human\n // \"Open\" link still points at projectUrl (they have the cookie). [BD-164]\n const previewUrl = project.previewFragmentId\n ? `${APP_BASE_URL}/preview/${project.previewFragmentId}`\n : projectUrl;\n // claude.ai can't iframe at all, so it renders a real screenshot of the\n // showcase instead. Point it at a shot of the PUBLIC /preview page so a\n // generated DS shows its actual material, not the generic token fallback\n // (which reads as \"0 match\" to the real system). Only when we have a\n // fragment to screenshot. [BD-164]\n const shotUrl = project.previewFragmentId\n ? `${APP_BASE_URL}/api/og/preview?fragment=${project.previewFragmentId}`\n : undefined;\n return {\n content: [{ type: \"text\" as const, text: lines.join(\"\\n\") }],\n structuredContent: {\n status: \"completed\",\n name: dsName,\n viewUrl: projectUrl,\n previewUrl,\n ...(shotUrl ? { shotUrl } : {}),\n installCommand: `npx shadcn@latest add ${registryUrl}`,\n tokensCss,\n },\n };\n }\n if (project.designSystemStatus === \"ERROR\") {\n return {\n content: [{ type: \"text\" as const, text: `Generation failed for project ${projectId}. Last step: ${project.currentStep ?? \"(none)\"}. The user can retry from ${projectUrl}.` }],\n structuredContent: { status: \"error\", name: `Project ${projectId.slice(0, 8)}`, viewUrl: projectUrl, tokensCss: \"\" },\n };\n }\n const step = project.currentStep ? project.currentStep.replace(/^[a-z]+:/, \"\") : undefined;\n const stepNote = step ? ` Current step: ${step}.` : \"\";\n return {\n content: [{ type: \"text\" as const, text: `Still generating (status: ${project.designSystemStatus ?? \"PENDING\"}).${stepNote}\\nCheck again in ~30 seconds. Watch it live on the project page: ${projectUrl}` }],\n structuredContent: {\n status: (project.designSystemStatus ?? \"PENDING\").toLowerCase(),\n name: `Project ${projectId.slice(0, 8)}`,\n viewUrl: projectUrl,\n step,\n tokensCss: \"\",\n },\n };\n };\n\n const statusConfig = {\n title: \"Get Design System Generation Status\",\n description: `Check on a design system generation started with 'create-design-system'. Returns progress while generating, and the live preview URL + the \\`npx shadcn add\\` install command once complete. Generation typically takes 1-3 minutes; poll every ~30 seconds until it reports ready.`,\n inputSchema: z.object({\n projectId: z.string().min(1).describe(\"The project id returned by create-design-system.\"),\n }),\n outputSchema: PREVIEW_OUTPUT_SCHEMA,\n annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false },\n _meta: {\n ui: { resourceUri: DS_PREVIEW_WIDGET_URI },\n \"ui/resourceUri\": DS_PREVIEW_WIDGET_URI,\n \"openai/outputTemplate\": DS_PREVIEW_WIDGET_URI,\n \"openai/toolInvocation/invoking\": \"Checking your design system...\",\n \"openai/toolInvocation/invoked\": \"Design system status ready\",\n },\n };\n\n // get-design-system-status (renamed from check-design-system-status). [BD-173]\n server.registerTool(\n \"get-design-system-status\",\n statusConfig,\n ({ projectId }) => tracked(\"get-design-system-status\", {}, () => runDesignSystemStatus(projectId)),\n );\n\n server.registerTool(\n \"preview-design-system\",\n {\n title: \"Preview a Design System\",\n description: `Show the user a visual preview of a design system from the catalog (use the id from 'find-design-system'). Returns a token-true HTML preview: palette, typography, buttons, card, input, badge, plus a link to the full live showcase. Use this when the user wants to SEE a design system before installing it.`,\n inputSchema: z.object({\n designSystemId: z.string().min(1).describe(\"Design system id from find-design-system, e.g. 'linear', 'editorial-warm'.\"),\n }),\n outputSchema: PREVIEW_OUTPUT_SCHEMA,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n openWorldHint: false,\n },\n _meta: {\n ui: { resourceUri: DS_PREVIEW_WIDGET_URI },\n \"ui/resourceUri\": DS_PREVIEW_WIDGET_URI,\n \"openai/outputTemplate\": DS_PREVIEW_WIDGET_URI,\n \"openai/toolInvocation/invoking\": \"Building the preview...\",\n \"openai/toolInvocation/invoked\": \"Preview ready\",\n },\n },\n async ({ designSystemId }) => tracked(\"preview-design-system\", { designSystemId }, async () => {\n const ds = await provider.getDesignSystemById(designSystemId);\n if (!ds) {\n return {\n content: [{ type: \"text\" as const, text: `Design system \"${designSystemId}\" not found. Call find-design-system first to get a valid id.` }],\n structuredContent: { status: \"error\", name: designSystemId, tokensCss: \"\" },\n };\n }\n const tokensCss = await fetchCatalogTokensCss(designSystemId);\n const viewUrl = `${APP_BASE_URL}/design-systems/${designSystemId}`;\n if (!tokensCss) {\n return {\n content: [{ type: \"text\" as const, text: `Could not load tokens for \"${designSystemId}\". The full live showcase is at ${viewUrl}.` }],\n structuredContent: { status: \"error\", name: ds.metadata.title, viewUrl, tokensCss: \"\" },\n };\n }\n // Canonical preview is the interactive widget (_meta outputTemplate); do not\n // ask the model to hand-render an HTML artifact — a token document never\n // matches the DS's real shadows/material and looks like a flat copy. [BD-121]\n const text = [\n `# ${ds.metadata.title}`,\n \"\",\n ds.metadata.description,\n \"\",\n `Full live showcase (every component): ${viewUrl}`,\n \"\",\n `Do NOT hand-build or render an HTML/React preview of this design system; it will not match the real components. The preview widget already shows it, and ${viewUrl} has the full showcase.`,\n ].join(\"\\n\");\n return {\n content: [{ type: \"text\" as const, text }],\n structuredContent: {\n status: \"completed\",\n name: ds.metadata.title,\n viewUrl,\n // Real screenshot of the showcase, for hosts that can't iframe it\n // (claude.ai). The widget shows this as the inline image. [BD-136]\n shotUrl: `${APP_BASE_URL}/api/og/preview?id=${encodeURIComponent(designSystemId)}`,\n tokensCss,\n },\n };\n }),\n );\n\n server.registerTool(\n \"get-design-system-html\",\n {\n title: \"Get a Design System as HTML/CSS\",\n description: `Export a design system as plain, framework-free HTML + CSS for building an app INLINE (ChatGPT canvas / Claude artifact) where npm and a Tailwind build are unavailable. Returns the system's real design tokens (globals.css) plus a token-driven component CSS kit (button, input, card, badge, alert, etc.) and an example to riff on.\n\nWorks for BOTH a catalog system (pass \\`designSystemId\\` from find-design-system) AND a custom system you just generated (pass \\`projectId\\` from create-design-system / get-design-system-status).\n\n${BUILD_TARGET_RULE}`,\n inputSchema: z.object({\n designSystemId: z.string().min(1).optional().describe(\"Catalog design system id from find-design-system, e.g. 'linear', 'editorial-warm'. Pass this OR projectId.\"),\n projectId: z.string().min(1).optional().describe(\"Project id from create-design-system / get-design-system-status, for a custom generated DS. Pass this OR designSystemId.\"),\n }),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n openWorldHint: false,\n },\n },\n async ({ designSystemId, projectId }) => tracked(\"get-design-system-html\", { designSystemId, projectId }, async () => {\n if (projectId) {\n const result = await fetchProjectTokensCss(projectId, authContext);\n const viewUrl = `${APP_BASE_URL}/projects/${projectId}`;\n if (!result?.tokensCss) {\n return {\n content: [{ type: \"text\" as const, text: `Could not load tokens for project \"${projectId}\". It may still be generating, or the id is wrong. Check ${viewUrl}.` }],\n };\n }\n const componentKit = buildDsComponentCss(result.files);\n const text = buildDsHtmlKit({ name: result.name ?? `Project ${projectId.slice(0, 8)}`, tokensCss: result.tokensCss, viewUrl, componentKit });\n return { content: [{ type: \"text\" as const, text }] };\n }\n if (!designSystemId) {\n return {\n content: [{ type: \"text\" as const, text: \"Pass either a catalog designSystemId (from find-design-system) or a projectId (from create-design-system).\" }],\n };\n }\n const ds = await provider.getDesignSystemById(designSystemId);\n if (!ds) {\n return {\n content: [{ type: \"text\" as const, text: `Design system \"${designSystemId}\" not found. Call find-design-system first to get a valid id, or pass a projectId for a generated system.` }],\n };\n }\n const viewUrl = `${APP_BASE_URL}/design-systems/${designSystemId}`;\n // If the client is a known code editor / agent (always has a filesystem),\n // hard-steer to the React install instead of shipping a standalone HTML\n // file. The capability rule in the description covers other hosts. [BD-147]\n const host = codingHostName(server);\n const steer = host\n ? `> ⚠️ **You appear to be in ${host}, a coding environment with a filesystem.** Build this as real React components: call \\`get-design-system-docs\\` and run the shadcn install instead of shipping a standalone HTML file. The kit below is only for inline chat canvases (ChatGPT / Claude artifacts) that cannot run a build.\\n\\n`\n : \"\";\n\n // Prefer the stored framework-free doc (every component rendered + the exact\n // compiled Tailwind CSS inline, no JS) when it has been seeded — this is the\n // faithful version. Fall back to the generic registry kit when absent. [BD-172]\n if (ds.metadata.html) {\n const intro = `Framework-free HTML/CSS version of **${ds.metadata.title}**. One self-contained document: every component rendered with the exact compiled CSS inline, no JS, no build. Render it directly in a ChatGPT canvas / Claude artifact, or lift the markup + \\`<style>\\` you need. Full live showcase: ${viewUrl}\\n\\n`;\n // Fence with more backticks than the longest run in the doc, so embedded\n // ``` (e.g. a rendered code block) can't terminate it early. [BD-172]\n const longestRun = Math.max(0, ...[...ds.metadata.html.matchAll(/`+/g)].map((m) => m[0].length));\n const fence = \"`\".repeat(Math.max(3, longestRun + 1));\n return { content: [{ type: \"text\" as const, text: `${steer}${intro}${fence}html\\n${ds.metadata.html}\\n${fence}` }] };\n }\n\n const { tokensCss, files } = await fetchCatalog(designSystemId);\n if (!tokensCss) {\n return {\n content: [{ type: \"text\" as const, text: `Could not load tokens for \"${designSystemId}\". The full live showcase is at ${viewUrl}.` }],\n };\n }\n const componentKit = buildDsComponentCss(files);\n const text = buildDsHtmlKit({ name: ds.metadata.title, tokensCss, viewUrl, componentKit });\n return { content: [{ type: \"text\" as const, text: steer + text }] };\n }),\n );\n}\n","import {\n DS_PREVIEW_WIDGET_HTML,\n DS_PREVIEW_WIDGET_URI,\n} from \"../preview-html\";\nimport type { RegisterToolDeps } from \"./shared\";\nimport {\n APP_BASE_URL,\n WIDGET_APP_DOMAIN,\n WIDGET_FRAME_DOMAINS,\n WIDGET_RESOURCE_DOMAINS,\n} from \"./shared\";\n\n// Widget _meta, shared by the resources/list registration AND the read result\n// (both must carry it). Two CSP surfaces:\n// - `ui.csp` (camelCase): the standard MCP Apps CSP (Claude + new ChatGPT).\n// - `openai/widgetCSP` (snake_case): the LEGACY ChatGPT compatibility key. The\n// OpenAI Apps SDK reads this to actually apply iframe/connect/resource\n// allowances; without it ChatGPT shows \"CSP off\" and refuses the nested\n// iframe (broken image). frame_domains opts the widget into iframe embeds;\n// redirect_domains allowlists window.openai.openExternal targets. [BD-136]\nconst PREVIEW_UI_META = {\n ui: {\n prefersBorder: true,\n csp: {\n connectDomains: [APP_BASE_URL, ...WIDGET_RESOURCE_DOMAINS],\n resourceDomains: [APP_BASE_URL, ...WIDGET_RESOURCE_DOMAINS],\n frameDomains: WIDGET_FRAME_DOMAINS,\n },\n domain: WIDGET_APP_DOMAIN,\n },\n \"openai/widgetCSP\": {\n connect_domains: [APP_BASE_URL, ...WIDGET_RESOURCE_DOMAINS],\n resource_domains: [APP_BASE_URL, ...WIDGET_RESOURCE_DOMAINS],\n frame_domains: WIDGET_FRAME_DOMAINS,\n redirect_domains: [APP_BASE_URL],\n },\n} as const;\n\nexport function registerPreviewResource({ server }: RegisterToolDeps): void {\n server.registerResource(\n \"ds-preview-widget\",\n DS_PREVIEW_WIDGET_URI,\n {\n mimeType: \"text/html;profile=mcp-app\",\n _meta: PREVIEW_UI_META,\n },\n async () => ({\n contents: [\n {\n uri: DS_PREVIEW_WIDGET_URI,\n mimeType: \"text/html;profile=mcp-app\",\n text: DS_PREVIEW_WIDGET_HTML,\n _meta: PREVIEW_UI_META,\n },\n ],\n }),\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { DataProvider } from \"./data-provider\";\nimport {\n createTracking,\n type ToolUsageContext,\n type McpAuthContext,\n} from \"./tools/shared\";\nimport { registerPrincipleTools } from \"./tools/principle-tools\";\nimport { registerIconTools } from \"./tools/icon-tools\";\nimport { registerDesignSystemTools } from \"./tools/design-system-tools\";\nimport { registerPreviewResource } from \"./tools/preview-resource\";\n\nexport type { ToolUsageContext, McpAuthContext };\nexport { SEARCH_TOOLS } from \"./tools/shared\";\n\nexport function registerAllTools(\n server: McpServer,\n provider: DataProvider,\n onToolUsage?: (\n tool: string,\n params: Record<string, unknown>,\n context: ToolUsageContext,\n ) => void,\n authContext?: McpAuthContext,\n): void {\n const { track, tracked } = createTracking(server, onToolUsage);\n const deps = { server, provider, track, tracked, authContext };\n\n registerPrincipleTools(deps);\n registerIconTools(deps);\n registerDesignSystemTools(deps);\n registerPreviewResource(deps);\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { DataProvider } from \"./data-provider\";\nimport { INSTRUCTIONS } from \"./instructions\";\nimport { registerAllTools, type ToolUsageContext, type McpAuthContext } from \"./tools\";\n\nexport type { ToolUsageContext, McpAuthContext };\nexport { SEARCH_TOOLS } from \"./tools\";\n\nexport interface CreateMcpServerOptions {\n provider: DataProvider;\n name?: string;\n version?: string;\n /** Optional hook called on every tool invocation for analytics. */\n onToolUsage?: (\n tool: string,\n params: Record<string, unknown>,\n context: ToolUsageContext,\n ) => void;\n /**\n * Caller identity for the current MCP request. When set, tools that hit\n * upstream Better Design endpoints (notably `create-design-system`) forward\n * the bearer so the server can meter per-user credits instead of falling\n * back to the IP-keyed anonymous quota.\n */\n authContext?: McpAuthContext;\n}\n\nexport function createMcpServer(options: CreateMcpServerOptions): McpServer {\n const {\n provider,\n name = \"BetterDesign\",\n version = \"3.0.0\",\n onToolUsage,\n authContext,\n } = options;\n\n const server = new McpServer(\n { name, version },\n { instructions: INSTRUCTIONS },\n );\n\n registerAllTools(server, provider, onToolUsage, authContext);\n\n return server;\n}\n\n// Re-exports\nexport type { DataProvider };\nexport type {\n DesignSystemSearchResult,\n DesignSystemMetadata,\n DesignSystemComponent,\n DesignSystemWithComponents,\n FoundationalDoc,\n FoundationalDocSearchResult,\n IconLibrarySearchResult,\n IconLibraryInfo,\n PrincipleArea,\n} from \"./data-provider\";\nexport { INSTRUCTIONS } from \"./instructions\";\n","/**\n * Thin HTTP client for the Better Design API.\n * All data flows through the backend — the MCP never touches the DB directly.\n */\n\nimport { createHash } from \"node:crypto\";\n\nconst API_URL = process.env.API_URL ?? \"https://better-design.com\";\nconst API_KEY = process.env.BETTER_DESIGN_API_KEY;\n\nconst API_KEY_HASH = API_KEY\n ? createHash(\"sha256\").update(API_KEY).digest(\"hex\")\n : undefined;\n\nclass ApiError extends Error {\n constructor(\n public status: number,\n message: string,\n ) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n\nasync function request<T>(path: string): Promise<T> {\n if (!API_KEY) {\n throw new ApiError(\n 401,\n \"BETTER_DESIGN_API_KEY is not set. Run `npx better-design` to create a free key (no account needed), or get one at https://better-design.com/mcp\",\n );\n }\n\n const res = await fetch(`${API_URL}/api${path}`, {\n headers: {\n Authorization: `Bearer ${API_KEY}`,\n \"Content-Type\": \"application/json\",\n },\n signal: AbortSignal.timeout(15000),\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ message: res.statusText }));\n throw new ApiError(res.status, (body as { message?: string }).message ?? `API error ${res.status}`);\n }\n\n return res.json() as Promise<T>;\n}\n\n// ─── Design Systems ──────────────────────────────────────────────────────\n\nexport interface SearchResult {\n id: string;\n title: string;\n description: string;\n personality: string[];\n industry: string[];\n componentCount: number;\n matchScore: number;\n}\n\nexport async function searchDesignSystems(query: string, limit = 5) {\n return request<{ results: SearchResult[] }>(\n `/v1/design-systems/search?q=${encodeURIComponent(query)}&limit=${limit}`,\n );\n}\n\nexport interface DesignSystemMetadata {\n id: string;\n title: string;\n description: string;\n personality: string[];\n industry: string[];\n componentCount: number;\n primaryColor?: string;\n borderRadius?: string;\n font?: string;\n}\n\nexport interface Component {\n id: string;\n name: string;\n description: string;\n code: string;\n}\n\nexport async function getDesignSystem(id: string) {\n return request<{ metadata: DesignSystemMetadata; componentCount: number }>(\n `/v1/design-systems/${encodeURIComponent(id)}`,\n );\n}\n\nexport async function getDesignSystemComponents(id: string, names?: string[]) {\n const params = names?.length ? `?names=${names.map(encodeURIComponent).join(\",\")}` : \"\";\n return request<{ components: Component[] }>(\n `/v1/design-systems/${encodeURIComponent(id)}/components${params}`,\n );\n}\n\n// ─── Principles ──────────────────────────────────────────────────────────\n\nexport interface Principle {\n id: string;\n title: string;\n content: string;\n area?: \"ui\" | \"ux\" | null;\n topic?: string | null;\n aliases?: string[];\n sourceFile?: string | null;\n chunkType?: \"parent\" | \"section\" | null;\n}\n\nexport interface PrincipleSearchResult extends Principle {\n matchScore: number;\n}\n\nexport async function listPrinciples(area?: \"ui\" | \"ux\") {\n const params = area ? `?area=${area}` : \"\";\n return request<{ principles: { id: string; title: string; topic?: string | null; aliases?: string[] }[] }>(`/v1/principles${params}`);\n}\n\nexport async function getPrinciple(topic: string, area?: \"ui\" | \"ux\") {\n const params = area ? `?area=${area}` : \"\";\n return request<Principle>(`/v1/principles/${encodeURIComponent(topic)}${params}`);\n}\n\nexport async function searchPrinciples(query: string, limit = 5, area?: \"ui\" | \"ux\") {\n const params = new URLSearchParams({ q: query, limit: String(limit) });\n if (area) params.set(\"area\", area);\n return request<{ results: PrincipleSearchResult[] }>(\n `/v1/principles/search?${params}`,\n );\n}\n\n// ─── Icon Libraries ──────────────────────────────────────────────────────\n\nexport interface IconLibraryResult {\n id: string;\n name: string;\n prefix: string;\n category: string | null;\n tags: string[];\n matchScore: number;\n variants: string[] | null;\n defaultVariant: string | null;\n}\n\nexport async function searchIconLibraries(query: string, limit = 5) {\n return request<{ results: IconLibraryResult[] }>(\n `/v1/icon-libraries/search?q=${encodeURIComponent(query)}&limit=${limit}`,\n );\n}\n\nexport async function searchIcons(libraryId: string, query: string, variant?: string, limit = 15) {\n const params = new URLSearchParams({ q: query, limit: String(limit) });\n if (variant) params.set(\"variant\", variant);\n return request<{ icons: string[]; library: { id: string; name: string; prefix: string } }>(\n `/v1/icon-libraries/${encodeURIComponent(libraryId)}/icons?${params}`,\n );\n}\n\n// ─── Review Rules ────────────────────────────────────────────────────────\n\nexport interface ReviewRule {\n id: string;\n title: string;\n content: string;\n}\n\nexport async function getReviewRules(category: string = \"all\") {\n const params = category !== \"all\" ? `?category=${encodeURIComponent(category)}` : \"\";\n return request<{ rules: ReviewRule[] }>(`/v1/review-rules${params}`);\n}\n\n// ─── Alerts ──────────────────────────────────────────────────────────────\n\nexport interface ToolUsageContext {\n clientName?: string;\n clientVersion?: string;\n outputPreview?: string;\n durationMs?: number;\n isError?: boolean;\n errorMessage?: string;\n}\n\nfunction postAlert(body: Record<string, unknown>) {\n fetch(`${API_URL}/api/internal/alert`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n signal: AbortSignal.timeout(5000),\n }).catch(() => {});\n}\n\nexport function trackToolUsage(\n tool: string,\n params: Record<string, unknown>,\n context: ToolUsageContext = {},\n) {\n postAlert({\n type: \"mcp-usage\",\n tool,\n params,\n apiKeyHash: API_KEY_HASH,\n clientName: context.clientName,\n clientVersion: context.clientVersion,\n mcpVersion: process.env.npm_package_version,\n outputPreview: context.outputPreview,\n durationMs: context.durationMs,\n isError: context.isError,\n errorMessage: context.errorMessage,\n });\n}\n\nexport function trackMcpInstalled(opts: { clientName?: string; clientVersion?: string }) {\n postAlert({\n type: \"mcp-installed\",\n apiKeyHash: API_KEY_HASH,\n clientName: opts.clientName,\n clientVersion: opts.clientVersion,\n mcpVersion: process.env.npm_package_version,\n });\n}\n","import type { DataProvider, IconLibraryInfo, PrincipleArea } from \"@better-design/shared/mcp\";\nimport {\n searchDesignSystems as apiSearchDesignSystems,\n getDesignSystem,\n getDesignSystemComponents,\n listPrinciples as apiListPrinciples,\n getPrinciple,\n searchPrinciples as apiSearchPrinciples,\n getReviewRules as apiGetReviewRules,\n searchIconLibraries as apiSearchIconLibraries,\n searchIcons as apiSearchIcons,\n} from \"./api-client.js\";\n\nexport function createHttpDataProvider(): DataProvider {\n return {\n async searchDesignSystems(query: string, limit = 5) {\n const { results } = await apiSearchDesignSystems(query, limit);\n return results;\n },\n\n async getDesignSystemById(id: string) {\n const [systemRes, componentsRes] = await Promise.all([\n getDesignSystem(id),\n getDesignSystemComponents(id),\n ]);\n return {\n metadata: systemRes.metadata,\n components: componentsRes.components,\n };\n },\n\n async listPrinciples(area?: PrincipleArea) {\n const { principles } = await apiListPrinciples(area);\n return principles;\n },\n\n async getPrincipleByTopic(topic: string, area?: PrincipleArea) {\n try {\n return await getPrinciple(topic, area);\n } catch {\n return null;\n }\n },\n\n async searchPrinciples(query: string, limit = 5, area?: PrincipleArea) {\n const { results } = await apiSearchPrinciples(query, limit, area);\n return results;\n },\n\n async getReviewRules(category = \"all\") {\n const { rules } = await apiGetReviewRules(category);\n return rules;\n },\n\n async searchIconLibraries(query: string, limit = 5) {\n const { results } = await apiSearchIconLibraries(query, limit);\n return results;\n },\n\n async getIconLibraryById(id: string) {\n // The search-icons endpoint handles library lookup server-side.\n // We do a lightweight search to get the library info.\n const { results } = await apiSearchIconLibraries(id, 1);\n const match = results.find((r) => r.id === id);\n if (!match) return null;\n return {\n id: match.id,\n name: match.name,\n prefix: match.prefix,\n variants: match.variants,\n defaultVariant: match.defaultVariant,\n variantFormat: null,\n };\n },\n\n async searchIconsInLibrary(\n query: string,\n library: IconLibraryInfo,\n variant?: string,\n limit = 15,\n ) {\n const { icons } = await apiSearchIcons(library.id, query, variant, limit);\n return icons;\n },\n };\n}\n","const argv = process.argv.slice(2);\nconst command = argv[0];\n\n// The installer runs for the bare command, `setup`, or any leading flag\n// (`-y`, `--global`, `--help`). Anything else is treated as a server command.\n// parseArgs tolerates the leading token, so pass argv whole.\nif (!command || command.startsWith(\"-\") || command === \"setup\") {\n const { runSetup } = await import(\"./setup/index.js\");\n runSetup(argv).catch((error) => {\n console.error(error);\n process.exit(1);\n });\n} else {\n startServer().catch((error) => {\n console.error(\"Fatal error:\", error);\n process.exit(1);\n });\n}\n\nasync function startServer() {\n const { StdioServerTransport } = await import(\"@modelcontextprotocol/sdk/server/stdio.js\");\n const { createMcpServer } = await import(\"@better-design/shared/mcp\");\n const { createHttpDataProvider } = await import(\"./lib/http-data-provider.js\");\n const { trackToolUsage, trackMcpInstalled } = await import(\"./lib/api-client.js\");\n\n const server = createMcpServer({\n provider: createHttpDataProvider(),\n name: \"DesignSystems\",\n version: \"3.0.0\",\n onToolUsage: trackToolUsage,\n });\n\n server.server.oninitialized = () => {\n try {\n const info = server.server.getClientVersion?.();\n trackMcpInstalled({ clientName: info?.name, clientVersion: info?.version });\n } catch {\n // analytics must never break MCP startup\n }\n };\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error(\"Better Design MCP Server v3.0 running on stdio\");\n}\n"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["init_clients","existsSync","os","path","chmodSync","writeFileSync","writeFileSync","os","path","home","argv","body","argv","init_clients","z","principles","z","icon","z","bearer","installCommand","structuredInstallCommand","parts","viewUrl","componentKit","text","fence","createHash","path","API_URL","runSetup","createMcpServer","createHttpDataProvider","trackToolUsage","trackMcpInstalled"]}