ai-diagrams-mcp 0.0.1 → 1.0.1

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/README.md CHANGED
@@ -1,45 +1,131 @@
1
1
  # ai-diagrams-mcp
2
2
 
3
- ## ⚠️ IMPORTANT NOTICE ⚠️
3
+ An MCP (Model Context Protocol) server that renders Mermaid diagrams to an interactive HTML viewer with zoom/pan capabilities. Zero configuration required.
4
4
 
5
- **This package is created solely for the purpose of setting up OIDC (OpenID Connect) trusted publishing with npm.**
5
+ ## Features
6
6
 
7
- This is **NOT** a functional package and contains **NO** code or functionality beyond the OIDC setup configuration.
7
+ - **Interactive Viewer** - Pan and zoom diagrams with pinch gestures or buttons
8
+ - **Multiple Diagrams** - Render multiple diagrams in a single view
9
+ - **Mermaid Themes** - Support for default, dark, forest, and neutral themes
10
+ - **Light/Dark Mode** - Automatic system preference detection with manual toggle
11
+ - **Cross-Platform** - Works on macOS, Linux, and Windows
8
12
 
9
- ## Purpose
13
+ ## Installation
10
14
 
11
- This package exists to:
12
- 1. Configure OIDC trusted publishing for the package name `ai-diagrams-mcp`
13
- 2. Enable secure, token-less publishing from CI/CD workflows
14
- 3. Establish provenance for packages published under this name
15
+ ### Option 1: Use with npx (recommended)
15
16
 
16
- ## What is OIDC Trusted Publishing?
17
+ No installation needed. Configure your MCP client to use:
17
18
 
18
- OIDC trusted publishing allows package maintainers to publish packages directly from their CI/CD workflows without needing to manage npm access tokens. Instead, it uses OpenID Connect to establish trust between the CI/CD provider (like GitHub Actions) and npm.
19
+ ```json
20
+ {
21
+ "mcpServers": {
22
+ "ai-diagrams": {
23
+ "command": "npx",
24
+ "args": ["-y", "ai-diagrams-mcp"]
25
+ }
26
+ }
27
+ }
28
+ ```
19
29
 
20
- ## Setup Instructions
30
+ ### Option 2: Global install
21
31
 
22
- To properly configure OIDC trusted publishing for this package:
32
+ ```bash
33
+ npm install -g ai-diagrams-mcp
34
+ ```
23
35
 
24
- 1. Go to [npmjs.com](https://www.npmjs.com/) and navigate to your package settings
25
- 2. Configure the trusted publisher (e.g., GitHub Actions)
26
- 3. Specify the repository and workflow that should be allowed to publish
27
- 4. Use the configured workflow to publish your actual package
36
+ Then configure:
28
37
 
29
- ## DO NOT USE THIS PACKAGE
38
+ ```json
39
+ {
40
+ "mcpServers": {
41
+ "ai-diagrams": {
42
+ "command": "ai-diagrams-mcp"
43
+ }
44
+ }
45
+ }
46
+ ```
30
47
 
31
- This package is a placeholder for OIDC configuration only. It:
32
- - Contains no executable code
33
- - Provides no functionality
34
- - Should not be installed as a dependency
35
- - Exists only for administrative purposes
48
+ ## Configuration for Claude Code
36
49
 
37
- ## More Information
50
+ Add to your Claude Code MCP settings (`~/.claude/claude_desktop_config.json` or project `.mcp.json`):
38
51
 
39
- For more details about npm's trusted publishing feature, see:
40
- - [npm Trusted Publishing Documentation](https://docs.npmjs.com/generating-provenance-statements)
41
- - [GitHub Actions OIDC Documentation](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect)
52
+ ```json
53
+ {
54
+ "mcpServers": {
55
+ "ai-diagrams": {
56
+ "command": "npx",
57
+ "args": ["-y", "ai-diagrams-mcp"]
58
+ }
59
+ }
60
+ }
61
+ ```
62
+
63
+ ## Usage
64
+
65
+ Once configured, you can ask Claude to render diagrams:
66
+
67
+ > "Create a flowchart showing the user authentication process"
68
+
69
+ > "Draw a sequence diagram for the API request flow"
70
+
71
+ > "Generate an ER diagram for a blog database"
72
+
73
+ The `render_diagram` tool accepts:
74
+
75
+ - **diagrams** - Array of `{ title?: string, code: string }` objects
76
+ - **theme** - Optional: `'default'` | `'dark'` | `'forest'` | `'neutral'`
77
+
78
+ ## Example
79
+
80
+ ```javascript
81
+ // Tool call
82
+ {
83
+ "diagrams": [
84
+ {
85
+ "title": "Authentication Flow",
86
+ "code": "graph TD\n A[User] -->|Login| B[Auth Server]\n B -->|Token| A"
87
+ }
88
+ ],
89
+ "theme": "dark"
90
+ }
91
+ ```
92
+
93
+ ## Viewer Features
94
+
95
+ - **Zoom Controls** - Use +/- buttons or pinch gesture on trackpad
96
+ - **Pan** - Click and drag to move around
97
+ - **Reset** - Return to original view
98
+ - **Theme Toggle** - Switch between light, dark, and system modes
99
+
100
+ ## Development
101
+
102
+ ```bash
103
+ # Install dependencies
104
+ npm install
105
+ cd viewer && npm install && cd ..
106
+
107
+ # Build everything
108
+ npm run build
109
+
110
+ # Run tests
111
+ npm test
112
+
113
+ # Start the server
114
+ npm start
115
+ ```
116
+
117
+ ## Tech Stack
118
+
119
+ - **Runtime**: Node.js 22+
120
+ - **Frontend**: Vue 3 + Tailwind CSS 4 + Vite
121
+ - **Diagrams**: Mermaid.js v11 (via CDN)
122
+ - **Zoom/Pan**: @panzoom/panzoom
123
+ - **MCP SDK**: @modelcontextprotocol/sdk
124
+
125
+ ## License
126
+
127
+ MIT
42
128
 
43
129
  ---
44
130
 
45
- **Maintained for OIDC setup purposes only**
131
+ Made by [LaserFocused OÜ](https://laserfocused.ee)
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { renderDiagram, renderDiagramSchema } from './tools/render-diagram.js';
5
+ const server = new McpServer({
6
+ name: 'ai-diagrams-mcp',
7
+ version: '0.1.0',
8
+ });
9
+ // Register the render_diagram tool
10
+ server.tool('render_diagram', 'Renders one or more Mermaid diagrams to an interactive HTML viewer with zoom and pan capabilities. Opens automatically in the default browser.', renderDiagramSchema.shape, async (input) => {
11
+ try {
12
+ const result = await renderDiagram(input);
13
+ return {
14
+ content: [
15
+ {
16
+ type: 'text',
17
+ text: result,
18
+ },
19
+ ],
20
+ };
21
+ }
22
+ catch (error) {
23
+ const message = error instanceof Error ? error.message : 'Unknown error occurred';
24
+ return {
25
+ content: [
26
+ {
27
+ type: 'text',
28
+ text: `Error rendering diagram: ${message}`,
29
+ },
30
+ ],
31
+ isError: true,
32
+ };
33
+ }
34
+ });
35
+ // Start the server
36
+ async function main() {
37
+ const transport = new StdioServerTransport();
38
+ await server.connect(transport);
39
+ }
40
+ main().catch((error) => {
41
+ console.error('Failed to start server:', error);
42
+ process.exit(1);
43
+ });
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAE/E,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,mCAAmC;AACnC,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,gJAAgJ,EAChJ,mBAAmB,CAAC,KAAK,EACzB,KAAK,EAAE,KAAK,EAAE,EAAE;IACd,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;iBACb;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;QAClF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,4BAA4B,OAAO,EAAE;iBAC5C;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,mBAAmB;AACnB,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface DiagramInput {
2
+ title?: string;
3
+ code: string;
4
+ }
5
+ export type MermaidTheme = 'default' | 'dark' | 'forest' | 'neutral';
6
+ export interface ViewerOptions {
7
+ diagrams: DiagramInput[];
8
+ theme?: MermaidTheme;
9
+ }
10
+ export declare function generateViewerHTML(options: ViewerOptions): string;
11
+ //# sourceMappingURL=viewer-bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewer-bundle.d.ts","sourceRoot":"","sources":["../../src/templates/viewer-bundle.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAiBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAiCjE"}
@@ -0,0 +1,44 @@
1
+ // AUTO-GENERATED FILE - DO NOT EDIT
2
+ // Generated by scripts/generate-template.js from the Vue viewer build
3
+ // Escaped CSS content
4
+ const VIEWER_CSS = "@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--font-weight-medium:500;--font-weight-semibold:600;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.right-3{right:calc(var(--spacing)*3)}.bottom-3{bottom:calc(var(--spacing)*3)}.z-10{z-index:10}.mx-auto{margin-inline:auto}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-auto{margin-top:auto}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.flex{display:flex}.hidden{display:none}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.min-h-\\[60vh\\]{min-height:60vh}.min-h-\\[400px\\]{min-height:400px}.min-h-screen{min-height:100vh}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-grab{cursor:grab}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-slate-200{border-color:var(--color-slate-200)}.border-violet-200{border-color:var(--color-violet-200)}.border-t-violet-500{border-top-color:var(--color-violet-500)}.bg-red-100{background-color:var(--color-red-100)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-violet-100{background-color:var(--color-violet-100)}.bg-white{background-color:var(--color-white)}.bg-white\\/80{background-color:#fffc}@supports (color:color-mix(in lab,red,red)){.bg-white\\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-slate-100{--tw-gradient-from:var(--color-slate-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-violet-500{--tw-gradient-from:var(--color-violet-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-violet-500\\/20{--tw-gradient-from:#8d54ff33}@supports (color:color-mix(in lab,red,red)){.from-violet-500\\/20{--tw-gradient-from:color-mix(in oklab,var(--color-violet-500)20%,transparent)}}.from-violet-500\\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-slate-50{--tw-gradient-via:var(--color-slate-50);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-fuchsia-500{--tw-gradient-to:var(--color-fuchsia-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-fuchsia-500\\/20{--tw-gradient-to:#e12afb33}@supports (color:color-mix(in lab,red,red)){.to-fuchsia-500\\/20{--tw-gradient-to:color-mix(in oklab,var(--color-fuchsia-500)20%,transparent)}}.to-fuchsia-500\\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-2{padding:calc(var(--spacing)*2)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-1{padding-block:calc(var(--spacing)*1)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.text-center{text-align:center}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-red-500{color:var(--color-red-500)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-900{color:var(--color-slate-900)}.text-violet-600{color:var(--color-violet-600)}.text-violet-700{color:var(--color-violet-700)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.opacity-0{opacity:0}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-violet-500\\/25{--tw-shadow-color:#8d54ff40}@supports (color:color-mix(in lab,red,red)){.shadow-violet-500\\/25{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-violet-500)25%,transparent)var(--tw-shadow-alpha),transparent)}}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media(hover:hover){.hover\\:bg-slate-200:hover{background-color:var(--color-slate-200)}.hover\\:text-slate-900:hover{color:var(--color-slate-900)}.hover\\:underline:hover{text-decoration-line:underline}}.active\\:cursor-grabbing:active{cursor:grabbing}@media(min-width:40rem){.sm\\:flex{display:flex}.sm\\:px-6{padding-inline:calc(var(--spacing)*6)}}@media(min-width:64rem){.lg\\:px-8{padding-inline:calc(var(--spacing)*8)}}.dark\\:border-slate-700\\/50:where(.dark,.dark *){border-color:#31415880}@supports (color:color-mix(in lab,red,red)){.dark\\:border-slate-700\\/50:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-slate-700)50%,transparent)}}.dark\\:border-violet-500\\/30:where(.dark,.dark *){border-color:#8d54ff4d}@supports (color:color-mix(in lab,red,red)){.dark\\:border-violet-500\\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-violet-500)30%,transparent)}}.dark\\:bg-red-500\\/20:where(.dark,.dark *){background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.dark\\:bg-red-500\\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.dark\\:bg-slate-700:where(.dark,.dark *){background-color:var(--color-slate-700)}.dark\\:bg-slate-700\\/50:where(.dark,.dark *){background-color:#31415880}@supports (color:color-mix(in lab,red,red)){.dark\\:bg-slate-700\\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-700)50%,transparent)}}.dark\\:bg-slate-800\\/50:where(.dark,.dark *){background-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.dark\\:bg-slate-800\\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-800)50%,transparent)}}.dark\\:bg-slate-800\\/80:where(.dark,.dark *){background-color:#1d293dcc}@supports (color:color-mix(in lab,red,red)){.dark\\:bg-slate-800\\/80:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-800)80%,transparent)}}.dark\\:bg-slate-900\\/50:where(.dark,.dark *){background-color:#0f172b80}@supports (color:color-mix(in lab,red,red)){.dark\\:bg-slate-900\\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-slate-900)50%,transparent)}}.dark\\:bg-violet-500\\/20:where(.dark,.dark *){background-color:#8d54ff33}@supports (color:color-mix(in lab,red,red)){.dark\\:bg-violet-500\\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-violet-500)20%,transparent)}}.dark\\:from-slate-900:where(.dark,.dark *){--tw-gradient-from:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\\:via-slate-800:where(.dark,.dark *){--tw-gradient-via:var(--color-slate-800);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.dark\\:to-slate-900:where(.dark,.dark *){--tw-gradient-to:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\\:text-slate-300:where(.dark,.dark *){color:var(--color-slate-300)}.dark\\:text-slate-400:where(.dark,.dark *){color:var(--color-slate-400)}.dark\\:text-violet-300:where(.dark,.dark *){color:var(--color-violet-300)}.dark\\:text-violet-400:where(.dark,.dark *){color:var(--color-violet-400)}.dark\\:text-white:where(.dark,.dark *){color:var(--color-white)}@media(hover:hover){.dark\\:hover\\:bg-slate-700:where(.dark,.dark *):hover{background-color:var(--color-slate-700)}.dark\\:hover\\:text-white:where(.dark,.dark *):hover{color:var(--color-white)}}.scrollbar-thin{scrollbar-width:thin}.scrollbar-thin::-webkit-scrollbar{width:8px;height:8px}.scrollbar-thin::-webkit-scrollbar-track{background:#1d293d;border-radius:4px}.scrollbar-thin::-webkit-scrollbar-thumb{background:#45556c;border-radius:4px}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background:#62748e}}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:\"*\";inherits:false}@property --tw-gradient-from{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:\"*\";inherits:false}@property --tw-gradient-via-stops{syntax:\"*\";inherits:false}@property --tw-gradient-from-position{syntax:\"<length-percentage>\";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:\"<length-percentage>\";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:\"<length-percentage>\";inherits:false;initial-value:100%}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}.diagram-content[data-v-e83d82c6] svg{max-width:none!important;height:auto!important}\n";
5
+ // Escaped JS content
6
+ const VIEWER_JS = "(function(){const t=document.createElement(\"link\").relList;if(t&&t.supports&&t.supports(\"modulepreload\"))return;for(const s of document.querySelectorAll('link[rel=\"modulepreload\"]'))r(s);new MutationObserver(s=>{for(const i of s)if(i.type===\"childList\")for(const o of i.addedNodes)o.tagName===\"LINK\"&&o.rel===\"modulepreload\"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin===\"use-credentials\"?i.credentials=\"include\":s.crossOrigin===\"anonymous\"?i.credentials=\"omit\":i.credentials=\"same-origin\",i}function r(s){if(s.ep)return;s.ep=!0;const i=n(s);fetch(s.href,i)}})();function Yn(e){const t=Object.create(null);for(const n of e.split(\",\"))t[n]=1;return n=>n in t}const Q={},yt=[],Ve=()=>{},Gr=()=>!1,fn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Xn=e=>e.startsWith(\"onUpdate:\"),oe=Object.assign,Gn=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},oi=Object.prototype.hasOwnProperty,K=(e,t)=>oi.call(e,t),L=Array.isArray,wt=e=>un(e)===\"[object Map]\",qr=e=>un(e)===\"[object Set]\",$=e=>typeof e==\"function\",ne=e=>typeof e==\"string\",at=e=>typeof e==\"symbol\",ee=e=>e!==null&&typeof e==\"object\",Jr=e=>(ee(e)||$(e))&&$(e.then)&&$(e.catch),Zr=Object.prototype.toString,un=e=>Zr.call(e),li=e=>un(e).slice(8,-1),Qr=e=>un(e)===\"[object Object]\",qn=e=>ne(e)&&e!==\"NaN\"&&e[0]!==\"-\"&&\"\"+parseInt(e,10)===e,It=Yn(\",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"),dn=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},ci=/-\\w/g,lt=dn(e=>e.replace(ci,t=>t.slice(1).toUpperCase())),ai=/\\B([A-Z])/g,mt=dn(e=>e.replace(ai,\"-$1\").toLowerCase()),es=dn(e=>e.charAt(0).toUpperCase()+e.slice(1)),_n=dn(e=>e?`on${es(e)}`:\"\"),ot=(e,t)=>!Object.is(e,t),yn=(e,...t)=>{for(let n=0;n<e.length;n++)e[n](...t)},ts=(e,t,n,r=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},fi=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let br;const hn=()=>br||(br=typeof globalThis<\"u\"?globalThis:typeof self<\"u\"?self:typeof window<\"u\"?window:typeof global<\"u\"?global:{});function Jn(e){if(L(e)){const t={};for(let n=0;n<e.length;n++){const r=e[n],s=ne(r)?pi(r):Jn(r);if(s)for(const i in s)t[i]=s[i]}return t}else if(ne(e)||ee(e))return e}const ui=/;(?![^(]*\\))/g,di=/:([^]+)/,hi=/\\/\\*[^]*?\\*\\//g;function pi(e){const t={};return e.replace(hi,\"\").split(ui).forEach(n=>{if(n){const r=n.split(di);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function pn(e){let t=\"\";if(ne(e))t=e;else if(L(e))for(let n=0;n<e.length;n++){const r=pn(e[n]);r&&(t+=r+\" \")}else if(ee(e))for(const n in e)e[n]&&(t+=n+\" \");return t.trim()}const gi=\"itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly\",mi=Yn(gi);function ns(e){return!!e||e===\"\"}const rs=e=>!!(e&&e.__v_isRef===!0),$e=e=>ne(e)?e:e==null?\"\":L(e)||ee(e)&&(e.toString===Zr||!$(e.toString))?rs(e)?$e(e.value):JSON.stringify(e,ss,2):String(e),ss=(e,t)=>rs(t)?ss(e,t.value):wt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],i)=>(n[wn(r,i)+\" =>\"]=s,n),{})}:qr(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>wn(n))}:at(t)?wn(t):ee(t)&&!L(t)&&!Qr(t)?String(t):t,wn=(e,t=\"\")=>{var n;return at(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let be;class vi{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=be,!t&&be&&(this.index=(be.scopes||(be.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].pause();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].resume();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].resume()}}run(t){if(this._active){const n=be;try{return be=this,t()}finally{be=n}}}on(){++this._on===1&&(this.prevScope=be,be=this)}off(){this._on>0&&--this._on===0&&(be=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,r;for(n=0,r=this.effects.length;n<r;n++)this.effects[n].stop();for(this.effects.length=0,n=0,r=this.cleanups.length;n<r;n++)this.cleanups[n]();if(this.cleanups.length=0,this.scopes){for(n=0,r=this.scopes.length;n<r;n++)this.scopes[n].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){const s=this.parent.scopes.pop();s&&s!==this&&(this.parent.scopes[this.index]=s,s.index=this.index)}this.parent=void 0}}}function bi(){return be}let Z;const Sn=new WeakSet;class is{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,be&&be.active&&be.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,Sn.has(this)&&(Sn.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||ls(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,xr(this),cs(this);const t=Z,n=Oe;Z=this,Oe=!0;try{return this.fn()}finally{as(this),Z=t,Oe=n,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)er(t);this.deps=this.depsTail=void 0,xr(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?Sn.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){kn(this)&&this.run()}get dirty(){return kn(this)}}let os=0,Rt,Ft;function ls(e,t=!1){if(e.flags|=8,t){e.next=Ft,Ft=e;return}e.next=Rt,Rt=e}function Zn(){os++}function Qn(){if(--os>0)return;if(Ft){let t=Ft;for(Ft=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Rt;){let t=Rt;for(Rt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function cs(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function as(e){let t,n=e.depsTail,r=n;for(;r;){const s=r.prevDep;r.version===-1?(r===n&&(n=s),er(r),xi(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=s}e.deps=t,e.depsTail=n}function kn(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(fs(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function fs(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===jt)||(e.globalVersion=jt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!kn(e))))return;e.flags|=2;const t=e.dep,n=Z,r=Oe;Z=e,Oe=!0;try{cs(e);const s=e.fn(e._value);(t.version===0||ot(s,e._value))&&(e.flags|=128,e._value=s,t.version++)}catch(s){throw t.version++,s}finally{Z=n,Oe=r,as(e),e.flags&=-3}}function er(e,t=!1){const{dep:n,prevSub:r,nextSub:s}=e;if(r&&(r.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)er(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function xi(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Oe=!0;const us=[];function Ge(){us.push(Oe),Oe=!1}function qe(){const e=us.pop();Oe=e===void 0?!0:e}function xr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Z;Z=void 0;try{t()}finally{Z=n}}}let jt=0;class _i{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class tr{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Z||!Oe||Z===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Z)n=this.activeLink=new _i(Z,this),Z.deps?(n.prevDep=Z.depsTail,Z.depsTail.nextDep=n,Z.depsTail=n):Z.deps=Z.depsTail=n,ds(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=Z.depsTail,n.nextDep=void 0,Z.depsTail.nextDep=n,Z.depsTail=n,Z.deps===n&&(Z.deps=r)}return n}trigger(t){this.version++,jt++,this.notify(t)}notify(t){Zn();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Qn()}}}function ds(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)ds(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Ln=new WeakMap,pt=Symbol(\"\"),Nn=Symbol(\"\"),$t=Symbol(\"\");function ce(e,t,n){if(Oe&&Z){let r=Ln.get(e);r||Ln.set(e,r=new Map);let s=r.get(n);s||(r.set(n,s=new tr),s.map=r,s.key=n),s.track()}}function Xe(e,t,n,r,s,i){const o=Ln.get(e);if(!o){jt++;return}const l=c=>{c&&c.trigger()};if(Zn(),t===\"clear\")o.forEach(l);else{const c=L(e),d=c&&qn(n);if(c&&n===\"length\"){const u=Number(r);o.forEach((p,S)=>{(S===\"length\"||S===$t||!at(S)&&S>=u)&&l(p)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),d&&l(o.get($t)),t){case\"add\":c?d&&l(o.get(\"length\")):(l(o.get(pt)),wt(e)&&l(o.get(Nn)));break;case\"delete\":c||(l(o.get(pt)),wt(e)&&l(o.get(Nn)));break;case\"set\":wt(e)&&l(o.get(pt));break}}Qn()}function bt(e){const t=W(e);return t===e?t:(ce(t,\"iterate\",$t),Me(e)?t:t.map(Pe))}function gn(e){return ce(e=W(e),\"iterate\",$t),e}function nt(e,t){return Je(e)?Et(gt(e)?Pe(t):t):Pe(t)}const yi={__proto__:null,[Symbol.iterator](){return Cn(this,Symbol.iterator,e=>nt(this,e))},concat(...e){return bt(this).concat(...e.map(t=>L(t)?bt(t):t))},entries(){return Cn(this,\"entries\",e=>(e[1]=nt(this,e[1]),e))},every(e,t){return ze(this,\"every\",e,t,void 0,arguments)},filter(e,t){return ze(this,\"filter\",e,t,n=>n.map(r=>nt(this,r)),arguments)},find(e,t){return ze(this,\"find\",e,t,n=>nt(this,n),arguments)},findIndex(e,t){return ze(this,\"findIndex\",e,t,void 0,arguments)},findLast(e,t){return ze(this,\"findLast\",e,t,n=>nt(this,n),arguments)},findLastIndex(e,t){return ze(this,\"findLastIndex\",e,t,void 0,arguments)},forEach(e,t){return ze(this,\"forEach\",e,t,void 0,arguments)},includes(...e){return En(this,\"includes\",e)},indexOf(...e){return En(this,\"indexOf\",e)},join(e){return bt(this).join(e)},lastIndexOf(...e){return En(this,\"lastIndexOf\",e)},map(e,t){return ze(this,\"map\",e,t,void 0,arguments)},pop(){return At(this,\"pop\")},push(...e){return At(this,\"push\",e)},reduce(e,...t){return _r(this,\"reduce\",e,t)},reduceRight(e,...t){return _r(this,\"reduceRight\",e,t)},shift(){return At(this,\"shift\")},some(e,t){return ze(this,\"some\",e,t,void 0,arguments)},splice(...e){return At(this,\"splice\",e)},toReversed(){return bt(this).toReversed()},toSorted(e){return bt(this).toSorted(e)},toSpliced(...e){return bt(this).toSpliced(...e)},unshift(...e){return At(this,\"unshift\",e)},values(){return Cn(this,\"values\",e=>nt(this,e))}};function Cn(e,t,n){const r=gn(e),s=r[t]();return r!==e&&!Me(e)&&(s._next=s.next,s.next=()=>{const i=s._next();return i.done||(i.value=n(i.value)),i}),s}const wi=Array.prototype;function ze(e,t,n,r,s,i){const o=gn(e),l=o!==e&&!Me(e),c=o[t];if(c!==wi[t]){const p=c.apply(e,i);return l?Pe(p):p}let d=n;o!==e&&(l?d=function(p,S){return n.call(this,nt(e,p),S,e)}:n.length>2&&(d=function(p,S){return n.call(this,p,S,e)}));const u=c.call(o,d,r);return l&&s?s(u):u}function _r(e,t,n,r){const s=gn(e);let i=n;return s!==e&&(Me(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,nt(e,l),c,e)}),s[t](i,...r)}function En(e,t,n){const r=W(e);ce(r,\"iterate\",$t);const s=r[t](...n);return(s===-1||s===!1)&&ir(n[0])?(n[0]=W(n[0]),r[t](...n)):s}function At(e,t,n=[]){Ge(),Zn();const r=W(e)[t].apply(e,n);return Qn(),qe(),r}const Si=Yn(\"__proto__,__v_isRef,__isVue\"),hs=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!==\"arguments\"&&e!==\"caller\").map(e=>Symbol[e]).filter(at));function Ci(e){at(e)||(e=String(e));const t=W(this);return ce(t,\"has\",e),t.hasOwnProperty(e)}class ps{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){if(n===\"__v_skip\")return t.__v_skip;const s=this._isReadonly,i=this._isShallow;if(n===\"__v_isReactive\")return!s;if(n===\"__v_isReadonly\")return s;if(n===\"__v_isShallow\")return i;if(n===\"__v_raw\")return r===(s?i?Di:bs:i?vs:ms).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const o=L(t);if(!s){let c;if(o&&(c=yi[n]))return c;if(n===\"hasOwnProperty\")return Ci}const l=Reflect.get(t,n,ae(t)?t:r);if((at(n)?hs.has(n):Si(n))||(s||ce(t,\"get\",n),i))return l;if(ae(l)){const c=o&&qn(n)?l:l.value;return s&&ee(c)?$n(c):c}return ee(l)?s?$n(l):rr(l):l}}class gs extends ps{constructor(t=!1){super(!1,t)}set(t,n,r,s){let i=t[n];const o=L(t)&&qn(n);if(!this._isShallow){const d=Je(i);if(!Me(r)&&!Je(r)&&(i=W(i),r=W(r)),!o&&ae(i)&&!ae(r))return d||(i.value=r),!0}const l=o?Number(n)<t.length:K(t,n),c=Reflect.set(t,n,r,ae(t)?t:s);return t===W(s)&&(l?ot(r,i)&&Xe(t,\"set\",n,r):Xe(t,\"add\",n,r)),c}deleteProperty(t,n){const r=K(t,n);t[n];const s=Reflect.deleteProperty(t,n);return s&&r&&Xe(t,\"delete\",n,void 0),s}has(t,n){const r=Reflect.has(t,n);return(!at(n)||!hs.has(n))&&ce(t,\"has\",n),r}ownKeys(t){return ce(t,\"iterate\",L(t)?\"length\":pt),Reflect.ownKeys(t)}}class Ei extends ps{constructor(t=!1){super(!0,t)}set(t,n){return!0}deleteProperty(t,n){return!0}}const Mi=new gs,Ti=new Ei,Ai=new gs(!0);const jn=e=>e,zt=e=>Reflect.getPrototypeOf(e);function Oi(e,t,n){return function(...r){const s=this.__v_raw,i=W(s),o=wt(i),l=e===\"entries\"||e===Symbol.iterator&&o,c=e===\"keys\"&&o,d=s[e](...r),u=n?jn:t?Et:Pe;return!t&&ce(i,\"iterate\",c?Nn:pt),oe(Object.create(d),{next(){const{value:p,done:S}=d.next();return S?{value:p,done:S}:{value:l?[u(p[0]),u(p[1])]:u(p),done:S}}})}}function Yt(e){return function(...t){return e===\"delete\"?!1:e===\"clear\"?void 0:this}}function Pi(e,t){const n={get(s){const i=this.__v_raw,o=W(i),l=W(s);e||(ot(s,l)&&ce(o,\"get\",s),ce(o,\"get\",l));const{has:c}=zt(o),d=t?jn:e?Et:Pe;if(c.call(o,s))return d(i.get(s));if(c.call(o,l))return d(i.get(l));i!==o&&i.get(s)},get size(){const s=this.__v_raw;return!e&&ce(W(s),\"iterate\",pt),s.size},has(s){const i=this.__v_raw,o=W(i),l=W(s);return e||(ot(s,l)&&ce(o,\"has\",s),ce(o,\"has\",l)),s===l?i.has(s):i.has(s)||i.has(l)},forEach(s,i){const o=this,l=o.__v_raw,c=W(l),d=t?jn:e?Et:Pe;return!e&&ce(c,\"iterate\",pt),l.forEach((u,p)=>s.call(i,d(u),d(p),o))}};return oe(n,e?{add:Yt(\"add\"),set:Yt(\"set\"),delete:Yt(\"delete\"),clear:Yt(\"clear\")}:{add(s){!t&&!Me(s)&&!Je(s)&&(s=W(s));const i=W(this);return zt(i).has.call(i,s)||(i.add(s),Xe(i,\"add\",s,s)),this},set(s,i){!t&&!Me(i)&&!Je(i)&&(i=W(i));const o=W(this),{has:l,get:c}=zt(o);let d=l.call(o,s);d||(s=W(s),d=l.call(o,s));const u=c.call(o,s);return o.set(s,i),d?ot(i,u)&&Xe(o,\"set\",s,i):Xe(o,\"add\",s,i),this},delete(s){const i=W(this),{has:o,get:l}=zt(i);let c=o.call(i,s);c||(s=W(s),c=o.call(i,s)),l&&l.call(i,s);const d=i.delete(s);return c&&Xe(i,\"delete\",s,void 0),d},clear(){const s=W(this),i=s.size!==0,o=s.clear();return i&&Xe(s,\"clear\",void 0,void 0),o}}),[\"keys\",\"values\",\"entries\",Symbol.iterator].forEach(s=>{n[s]=Oi(s,e,t)}),n}function nr(e,t){const n=Pi(e,t);return(r,s,i)=>s===\"__v_isReactive\"?!e:s===\"__v_isReadonly\"?e:s===\"__v_raw\"?r:Reflect.get(K(n,s)&&s in r?n:r,s,i)}const Ii={get:nr(!1,!1)},Ri={get:nr(!1,!0)},Fi={get:nr(!0,!1)};const ms=new WeakMap,vs=new WeakMap,bs=new WeakMap,Di=new WeakMap;function ki(e){switch(e){case\"Object\":case\"Array\":return 1;case\"Map\":case\"Set\":case\"WeakMap\":case\"WeakSet\":return 2;default:return 0}}function Li(e){return e.__v_skip||!Object.isExtensible(e)?0:ki(li(e))}function rr(e){return Je(e)?e:sr(e,!1,Mi,Ii,ms)}function Ni(e){return sr(e,!1,Ai,Ri,vs)}function $n(e){return sr(e,!0,Ti,Fi,bs)}function sr(e,t,n,r,s){if(!ee(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=Li(e);if(i===0)return e;const o=s.get(e);if(o)return o;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function gt(e){return Je(e)?gt(e.__v_raw):!!(e&&e.__v_isReactive)}function Je(e){return!!(e&&e.__v_isReadonly)}function Me(e){return!!(e&&e.__v_isShallow)}function ir(e){return e?!!e.__v_raw:!1}function W(e){const t=e&&e.__v_raw;return t?W(t):e}function ji(e){return!K(e,\"__v_skip\")&&Object.isExtensible(e)&&ts(e,\"__v_skip\",!0),e}const Pe=e=>ee(e)?rr(e):e,Et=e=>ee(e)?$n(e):e;function ae(e){return e?e.__v_isRef===!0:!1}function Te(e){return $i(e,!1)}function $i(e,t){return ae(e)?e:new Hi(e,t)}class Hi{constructor(t,n){this.dep=new tr,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:W(t),this._value=n?t:Pe(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||Me(t)||Je(t);t=r?t:W(t),ot(t,n)&&(this._rawValue=t,this._value=r?t:Pe(t),this.dep.trigger())}}function Vi(e){return ae(e)?e.value:e}const Bi={get:(e,t,n)=>t===\"__v_raw\"?e:Vi(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return ae(s)&&!ae(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function xs(e){return gt(e)?e:new Proxy(e,Bi)}class Ui{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new tr(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=jt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&Z!==this)return ls(this,!0),!0}get value(){const t=this.dep.track();return fs(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Wi(e,t,n=!1){let r,s;return $(e)?r=e:(r=e.get,s=e.set),new Ui(r,s,n)}const Xt={},rn=new WeakMap;let ht;function Ki(e,t=!1,n=ht){if(n){let r=rn.get(n);r||rn.set(n,r=[]),r.push(e)}}function zi(e,t,n=Q){const{immediate:r,deep:s,once:i,scheduler:o,augmentJob:l,call:c}=n,d=R=>s?R:Me(R)||s===!1||s===0?it(R,1):it(R);let u,p,S,E,N=!1,M=!1;if(ae(e)?(p=()=>e.value,N=Me(e)):gt(e)?(p=()=>d(e),N=!0):L(e)?(M=!0,N=e.some(R=>gt(R)||Me(R)),p=()=>e.map(R=>{if(ae(R))return R.value;if(gt(R))return d(R);if($(R))return c?c(R,2):R()})):$(e)?t?p=c?()=>c(e,2):e:p=()=>{if(S){Ge();try{S()}finally{qe()}}const R=ht;ht=u;try{return c?c(e,3,[E]):e(E)}finally{ht=R}}:p=Ve,t&&s){const R=p,te=s===!0?1/0:s;p=()=>it(R(),te)}const H=bi(),V=()=>{u.stop(),H&&H.active&&Gn(H.effects,u)};if(i&&t){const R=t;t=(...te)=>{R(...te),V()}}let z=M?new Array(e.length).fill(Xt):Xt;const X=R=>{if(!(!(u.flags&1)||!u.dirty&&!R))if(t){const te=u.run();if(s||N||(M?te.some((_e,fe)=>ot(_e,z[fe])):ot(te,z))){S&&S();const _e=ht;ht=u;try{const fe=[te,z===Xt?void 0:M&&z[0]===Xt?[]:z,E];z=te,c?c(t,3,fe):t(...fe)}finally{ht=_e}}}else u.run()};return l&&l(X),u=new is(p),u.scheduler=o?()=>o(X,!1):X,E=R=>Ki(R,!1,u),S=u.onStop=()=>{const R=rn.get(u);if(R){if(c)c(R,4);else for(const te of R)te();rn.delete(u)}},t?r?X(!0):z=u.run():o?o(X.bind(null,!0),!0):u.run(),V.pause=u.pause.bind(u),V.resume=u.resume.bind(u),V.stop=V,V}function it(e,t=1/0,n){if(t<=0||!ee(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,ae(e))it(e.value,t,n);else if(L(e))for(let r=0;r<e.length;r++)it(e[r],t,n);else if(qr(e)||wt(e))e.forEach(r=>{it(r,t,n)});else if(Qr(e)){for(const r in e)it(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&it(e[r],t,n)}return e}function Wt(e,t,n,r){try{return r?e(...r):e()}catch(s){mn(s,t,n)}}function Ue(e,t,n,r){if($(e)){const s=Wt(e,t,n,r);return s&&Jr(s)&&s.catch(i=>{mn(i,t,n)}),s}if(L(e)){const s=[];for(let i=0;i<e.length;i++)s.push(Ue(e[i],t,n,r));return s}}function mn(e,t,n,r=!0){const s=t?t.vnode:null,{errorHandler:i,throwUnhandledErrorInProduction:o}=t&&t.appContext.config||Q;if(t){let l=t.parent;const c=t.proxy,d=`https://vuejs.org/error-reference/#runtime-${n}`;for(;l;){const u=l.ec;if(u){for(let p=0;p<u.length;p++)if(u[p](e,c,d)===!1)return}l=l.parent}if(i){Ge(),Wt(i,null,10,[e,c,d]),qe();return}}Yi(e,n,s,r,o)}function Yi(e,t,n,r=!0,s=!1){if(s)throw e;console.error(e)}const pe=[];let Ne=-1;const St=[];let rt=null,xt=0;const _s=Promise.resolve();let sn=null;function ys(e){const t=sn||_s;return e?t.then(this?e.bind(this):e):t}function Xi(e){let t=Ne+1,n=pe.length;for(;t<n;){const r=t+n>>>1,s=pe[r],i=Ht(s);i<e||i===e&&s.flags&2?t=r+1:n=r}return t}function or(e){if(!(e.flags&1)){const t=Ht(e),n=pe[pe.length-1];!n||!(e.flags&2)&&t>=Ht(n)?pe.push(e):pe.splice(Xi(t),0,e),e.flags|=1,ws()}}function ws(){sn||(sn=_s.then(Cs))}function Gi(e){L(e)?St.push(...e):rt&&e.id===-1?rt.splice(xt+1,0,e):e.flags&1||(St.push(e),e.flags|=1),ws()}function yr(e,t,n=Ne+1){for(;n<pe.length;n++){const r=pe[n];if(r&&r.flags&2){if(e&&r.id!==e.uid)continue;pe.splice(n,1),n--,r.flags&4&&(r.flags&=-2),r(),r.flags&4||(r.flags&=-2)}}}function Ss(e){if(St.length){const t=[...new Set(St)].sort((n,r)=>Ht(n)-Ht(r));if(St.length=0,rt){rt.push(...t);return}for(rt=t,xt=0;xt<rt.length;xt++){const n=rt[xt];n.flags&4&&(n.flags&=-2),n.flags&8||n(),n.flags&=-2}rt=null,xt=0}}const Ht=e=>e.id==null?e.flags&2?-1:1/0:e.id;function Cs(e){try{for(Ne=0;Ne<pe.length;Ne++){const t=pe[Ne];t&&!(t.flags&8)&&(t.flags&4&&(t.flags&=-2),Wt(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2))}}finally{for(;Ne<pe.length;Ne++){const t=pe[Ne];t&&(t.flags&=-2)}Ne=-1,pe.length=0,Ss(),sn=null,(pe.length||St.length)&&Cs()}}let He=null,Es=null;function on(e){const t=He;return He=e,Es=e&&e.type.__scopeId||null,t}function qi(e,t=He,n){if(!t||e._n)return e;const r=(...s)=>{r._d&&Ir(-1);const i=on(t);let o;try{o=e(...s)}finally{on(i),r._d&&Ir(1)}return o};return r._n=!0,r._c=!0,r._d=!0,r}function ut(e,t,n,r){const s=e.dirs,i=t&&t.dirs;for(let o=0;o<s.length;o++){const l=s[o];i&&(l.oldValue=i[o].value);let c=l.dir[r];c&&(Ge(),Ue(c,n,8,[e.el,l,e,t]),qe())}}function Ji(e,t){if(ge){let n=ge.provides;const r=ge.parent&&ge.parent.provides;r===n&&(n=ge.provides=Object.create(r)),n[e]=t}}function Zt(e,t,n=!1){const r=Zo();if(r||Ct){let s=Ct?Ct._context.provides:r?r.parent==null||r.ce?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides:void 0;if(s&&e in s)return s[e];if(arguments.length>1)return n&&$(t)?t.call(r&&r.proxy):t}}const Zi=Symbol.for(\"v-scx\"),Qi=()=>Zt(Zi);function Qt(e,t,n){return Ms(e,t,n)}function Ms(e,t,n=Q){const{immediate:r,deep:s,flush:i,once:o}=n,l=oe({},n),c=t&&r||!t&&i!==\"post\";let d;if(Bt){if(i===\"sync\"){const E=Qi();d=E.__watcherHandles||(E.__watcherHandles=[])}else if(!c){const E=()=>{};return E.stop=Ve,E.resume=Ve,E.pause=Ve,E}}const u=ge;l.call=(E,N,M)=>Ue(E,u,N,M);let p=!1;i===\"post\"?l.scheduler=E=>{Ce(E,u&&u.suspense)}:i!==\"sync\"&&(p=!0,l.scheduler=(E,N)=>{N?E():or(E)}),l.augmentJob=E=>{t&&(E.flags|=4),p&&(E.flags|=2,u&&(E.id=u.uid,E.i=u))};const S=zi(e,t,l);return Bt&&(d?d.push(S):c&&S()),S}function eo(e,t,n){const r=this.proxy,s=ne(e)?e.includes(\".\")?Ts(r,e):()=>r[e]:e.bind(r,r);let i;$(t)?i=t:(i=t.handler,n=t);const o=Kt(this),l=Ms(s,i.bind(r),n);return o(),l}function Ts(e,t){const n=t.split(\".\");return()=>{let r=e;for(let s=0;s<n.length&&r;s++)r=r[n[s]];return r}}const to=Symbol(\"_vte\"),no=e=>e.__isTeleport,ro=Symbol(\"_leaveCb\");function lr(e,t){e.shapeFlag&6&&e.component?(e.transition=t,lr(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function As(e,t){return $(e)?oe({name:e.name},t,{setup:e}):e}function Os(e){e.ids=[e.ids[0]+e.ids[2]+++\"-\",0,0]}const ln=new WeakMap;function Dt(e,t,n,r,s=!1){if(L(e)){e.forEach((N,M)=>Dt(N,t&&(L(t)?t[M]:t),n,r,s));return}if(kt(r)&&!s){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&Dt(e,t,n,r.component.subTree);return}const i=r.shapeFlag&4?hr(r.component):r.el,o=s?null:i,{i:l,r:c}=e,d=t&&t.r,u=l.refs===Q?l.refs={}:l.refs,p=l.setupState,S=W(p),E=p===Q?Gr:N=>K(S,N);if(d!=null&&d!==c){if(wr(t),ne(d))u[d]=null,E(d)&&(p[d]=null);else if(ae(d)){d.value=null;const N=t;N.k&&(u[N.k]=null)}}if($(c))Wt(c,l,12,[o,u]);else{const N=ne(c),M=ae(c);if(N||M){const H=()=>{if(e.f){const V=N?E(c)?p[c]:u[c]:c.value;if(s)L(V)&&Gn(V,i);else if(L(V))V.includes(i)||V.push(i);else if(N)u[c]=[i],E(c)&&(p[c]=u[c]);else{const z=[i];c.value=z,e.k&&(u[e.k]=z)}}else N?(u[c]=o,E(c)&&(p[c]=o)):M&&(c.value=o,e.k&&(u[e.k]=o))};if(o){const V=()=>{H(),ln.delete(e)};V.id=-1,ln.set(e,V),Ce(V,n)}else wr(e),H()}}}function wr(e){const t=ln.get(e);t&&(t.flags|=8,ln.delete(e))}hn().requestIdleCallback;hn().cancelIdleCallback;const kt=e=>!!e.type.__asyncLoader,Ps=e=>e.type.__isKeepAlive;function so(e,t){Is(e,\"a\",t)}function io(e,t){Is(e,\"da\",t)}function Is(e,t,n=ge){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(vn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)Ps(s.parent.vnode)&&oo(r,t,n,s),s=s.parent}}function oo(e,t,n,r){const s=vn(t,e,r,!0);ar(()=>{Gn(r[t],s)},n)}function vn(e,t,n=ge,r=!1){if(n){const s=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{Ge();const l=Kt(n),c=Ue(t,n,e,o);return l(),qe(),c});return r?s.unshift(i):s.push(i),i}}const Ze=e=>(t,n=ge)=>{(!Bt||e===\"sp\")&&vn(e,(...r)=>t(...r),n)},lo=Ze(\"bm\"),cr=Ze(\"m\"),co=Ze(\"bu\"),ao=Ze(\"u\"),fo=Ze(\"bum\"),ar=Ze(\"um\"),uo=Ze(\"sp\"),ho=Ze(\"rtg\"),po=Ze(\"rtc\");function go(e,t=ge){vn(\"ec\",e,t)}const mo=Symbol.for(\"v-ndc\");function vo(e,t,n,r){let s;const i=n,o=L(e);if(o||ne(e)){const l=o&&gt(e);let c=!1,d=!1;l&&(c=!Me(e),d=Je(e),e=gn(e)),s=new Array(e.length);for(let u=0,p=e.length;u<p;u++)s[u]=t(c?d?Et(Pe(e[u])):Pe(e[u]):e[u],u,void 0,i)}else if(typeof e==\"number\"){s=new Array(e);for(let l=0;l<e;l++)s[l]=t(l+1,l,void 0,i)}else if(ee(e))if(e[Symbol.iterator])s=Array.from(e,(l,c)=>t(l,c,void 0,i));else{const l=Object.keys(e);s=new Array(l.length);for(let c=0,d=l.length;c<d;c++){const u=l[c];s[c]=t(e[u],u,c,i)}}else s=[];return s}const Hn=e=>e?Qs(e)?hr(e):Hn(e.parent):null,Lt=oe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Hn(e.parent),$root:e=>Hn(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Fs(e),$forceUpdate:e=>e.f||(e.f=()=>{or(e.update)}),$nextTick:e=>e.n||(e.n=ys.bind(e.proxy)),$watch:e=>eo.bind(e)}),Mn=(e,t)=>e!==Q&&!e.__isScriptSetup&&K(e,t),bo={get({_:e},t){if(t===\"__v_skip\")return!0;const{ctx:n,setupState:r,data:s,props:i,accessCache:o,type:l,appContext:c}=e;if(t[0]!==\"$\"){const S=o[t];if(S!==void 0)switch(S){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return i[t]}else{if(Mn(r,t))return o[t]=1,r[t];if(s!==Q&&K(s,t))return o[t]=2,s[t];if(K(i,t))return o[t]=3,i[t];if(n!==Q&&K(n,t))return o[t]=4,n[t];Vn&&(o[t]=0)}}const d=Lt[t];let u,p;if(d)return t===\"$attrs\"&&ce(e.attrs,\"get\",\"\"),d(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(n!==Q&&K(n,t))return o[t]=4,n[t];if(p=c.config.globalProperties,K(p,t))return p[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:i}=e;return Mn(s,t)?(s[t]=n,!0):r!==Q&&K(r,t)?(r[t]=n,!0):K(e.props,t)||t[0]===\"$\"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,props:i,type:o}},l){let c;return!!(n[l]||e!==Q&&l[0]!==\"$\"&&K(e,l)||Mn(t,l)||K(i,l)||K(r,l)||K(Lt,l)||K(s.config.globalProperties,l)||(c=o.__cssModules)&&c[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:K(n,\"value\")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Sr(e){return L(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Vn=!0;function xo(e){const t=Fs(e),n=e.proxy,r=e.ctx;Vn=!1,t.beforeCreate&&Cr(t.beforeCreate,e,\"bc\");const{data:s,computed:i,methods:o,watch:l,provide:c,inject:d,created:u,beforeMount:p,mounted:S,beforeUpdate:E,updated:N,activated:M,deactivated:H,beforeDestroy:V,beforeUnmount:z,destroyed:X,unmounted:R,render:te,renderTracked:_e,renderTriggered:fe,errorCaptured:ye,serverPrefetch:We,expose:Ie,inheritAttrs:Re,components:ue,directives:Qe,filters:ft}=t;if(d&&_o(d,r,null),o)for(const q in o){const G=o[q];$(G)&&(r[q]=G.bind(n))}if(s){const q=s.call(n,n);ee(q)&&(e.data=rr(q))}if(Vn=!0,i)for(const q in i){const G=i[q],y=$(G)?G.bind(n,n):$(G.get)?G.get.bind(n,n):Ve,T=!$(G)&&$(G.set)?G.set.bind(n):Ve,F=ti({get:y,set:T});Object.defineProperty(r,q,{enumerable:!0,configurable:!0,get:()=>F.value,set:j=>F.value=j})}if(l)for(const q in l)Rs(l[q],r,n,q);if(c){const q=$(c)?c.call(n):c;Reflect.ownKeys(q).forEach(G=>{Ji(G,q[G])})}u&&Cr(u,e,\"c\");function re(q,G){L(G)?G.forEach(y=>q(y.bind(n))):G&&q(G.bind(n))}if(re(lo,p),re(cr,S),re(co,E),re(ao,N),re(so,M),re(io,H),re(go,ye),re(po,_e),re(ho,fe),re(fo,z),re(ar,R),re(uo,We),L(Ie))if(Ie.length){const q=e.exposed||(e.exposed={});Ie.forEach(G=>{Object.defineProperty(q,G,{get:()=>n[G],set:y=>n[G]=y,enumerable:!0})})}else e.exposed||(e.exposed={});te&&e.render===Ve&&(e.render=te),Re!=null&&(e.inheritAttrs=Re),ue&&(e.components=ue),Qe&&(e.directives=Qe),We&&Os(e)}function _o(e,t,n=Ve){L(e)&&(e=Bn(e));for(const r in e){const s=e[r];let i;ee(s)?\"default\"in s?i=Zt(s.from||r,s.default,!0):i=Zt(s.from||r):i=Zt(s),ae(i)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[r]=i}}function Cr(e,t,n){Ue(L(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Rs(e,t,n,r){let s=r.includes(\".\")?Ts(n,r):()=>n[r];if(ne(e)){const i=t[e];$(i)&&Qt(s,i)}else if($(e))Qt(s,e.bind(n));else if(ee(e))if(L(e))e.forEach(i=>Rs(i,t,n,r));else{const i=$(e.handler)?e.handler.bind(n):t[e.handler];$(i)&&Qt(s,i,e)}}function Fs(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!s.length&&!n&&!r?c=t:(c={},s.length&&s.forEach(d=>cn(c,d,o,!0)),cn(c,t,o)),ee(t)&&i.set(t,c),c}function cn(e,t,n,r=!1){const{mixins:s,extends:i}=t;i&&cn(e,i,n,!0),s&&s.forEach(o=>cn(e,o,n,!0));for(const o in t)if(!(r&&o===\"expose\")){const l=yo[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const yo={data:Er,props:Mr,emits:Mr,methods:Pt,computed:Pt,beforeCreate:he,created:he,beforeMount:he,mounted:he,beforeUpdate:he,updated:he,beforeDestroy:he,beforeUnmount:he,destroyed:he,unmounted:he,activated:he,deactivated:he,errorCaptured:he,serverPrefetch:he,components:Pt,directives:Pt,watch:So,provide:Er,inject:wo};function Er(e,t){return t?e?function(){return oe($(e)?e.call(this,this):e,$(t)?t.call(this,this):t)}:t:e}function wo(e,t){return Pt(Bn(e),Bn(t))}function Bn(e){if(L(e)){const t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function he(e,t){return e?[...new Set([].concat(e,t))]:t}function Pt(e,t){return e?oe(Object.create(null),e,t):t}function Mr(e,t){return e?L(e)&&L(t)?[...new Set([...e,...t])]:oe(Object.create(null),Sr(e),Sr(t??{})):t}function So(e,t){if(!e)return t;if(!t)return e;const n=oe(Object.create(null),e);for(const r in t)n[r]=he(e[r],t[r]);return n}function Ds(){return{app:null,config:{isNativeTag:Gr,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Co=0;function Eo(e,t){return function(r,s=null){$(r)||(r=oe({},r)),s!=null&&!ee(s)&&(s=null);const i=Ds(),o=new WeakSet,l=[];let c=!1;const d=i.app={_uid:Co++,_component:r,_props:s,_container:null,_context:i,_instance:null,version:sl,get config(){return i.config},set config(u){},use(u,...p){return o.has(u)||(u&&$(u.install)?(o.add(u),u.install(d,...p)):$(u)&&(o.add(u),u(d,...p))),d},mixin(u){return i.mixins.includes(u)||i.mixins.push(u),d},component(u,p){return p?(i.components[u]=p,d):i.components[u]},directive(u,p){return p?(i.directives[u]=p,d):i.directives[u]},mount(u,p,S){if(!c){const E=d._ceVNode||Be(r,s);return E.appContext=i,S===!0?S=\"svg\":S===!1&&(S=void 0),e(E,u,S),c=!0,d._container=u,u.__vue_app__=d,hr(E.component)}},onUnmount(u){l.push(u)},unmount(){c&&(Ue(l,d._instance,16),e(null,d._container),delete d._container.__vue_app__)},provide(u,p){return i.provides[u]=p,d},runWithContext(u){const p=Ct;Ct=d;try{return u()}finally{Ct=p}}};return d}}let Ct=null;const Mo=(e,t)=>t===\"modelValue\"||t===\"model-value\"?e.modelModifiers:e[`${t}Modifiers`]||e[`${lt(t)}Modifiers`]||e[`${mt(t)}Modifiers`];function To(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||Q;let s=n;const i=t.startsWith(\"update:\"),o=i&&Mo(r,t.slice(7));o&&(o.trim&&(s=n.map(u=>ne(u)?u.trim():u)),o.number&&(s=n.map(fi)));let l,c=r[l=_n(t)]||r[l=_n(lt(t))];!c&&i&&(c=r[l=_n(mt(t))]),c&&Ue(c,e,6,s);const d=r[l+\"Once\"];if(d){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ue(d,e,6,s)}}const Ao=new WeakMap;function ks(e,t,n=!1){const r=n?Ao:t.emitsCache,s=r.get(e);if(s!==void 0)return s;const i=e.emits;let o={},l=!1;if(!$(e)){const c=d=>{const u=ks(d,t,!0);u&&(l=!0,oe(o,u))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ee(e)&&r.set(e,null),null):(L(i)?i.forEach(c=>o[c]=null):oe(o,i),ee(e)&&r.set(e,o),o)}function bn(e,t){return!e||!fn(t)?!1:(t=t.slice(2).replace(/Once$/,\"\"),K(e,t[0].toLowerCase()+t.slice(1))||K(e,mt(t))||K(e,t))}function Tr(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[i],slots:o,attrs:l,emit:c,render:d,renderCache:u,props:p,data:S,setupState:E,ctx:N,inheritAttrs:M}=e,H=on(e);let V,z;try{if(n.shapeFlag&4){const R=s||r,te=R;V=je(d.call(te,R,u,p,E,S,N)),z=l}else{const R=t;V=je(R.length>1?R(p,{attrs:l,slots:o,emit:c}):R(p,null)),z=t.props?l:Oo(l)}}catch(R){Nt.length=0,mn(R,e,1),V=Be(ct)}let X=V;if(z&&M!==!1){const R=Object.keys(z),{shapeFlag:te}=X;R.length&&te&7&&(i&&R.some(Xn)&&(z=Po(z,i)),X=Mt(X,z,!1,!0))}return n.dirs&&(X=Mt(X,null,!1,!0),X.dirs=X.dirs?X.dirs.concat(n.dirs):n.dirs),n.transition&&lr(X,n.transition),V=X,on(H),V}const Oo=e=>{let t;for(const n in e)(n===\"class\"||n===\"style\"||fn(n))&&((t||(t={}))[n]=e[n]);return t},Po=(e,t)=>{const n={};for(const r in e)(!Xn(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Io(e,t,n){const{props:r,children:s,component:i}=e,{props:o,children:l,patchFlag:c}=t,d=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?Ar(r,o,d):!!o;if(c&8){const u=t.dynamicProps;for(let p=0;p<u.length;p++){const S=u[p];if(o[S]!==r[S]&&!bn(d,S))return!0}}}else return(s||l)&&(!l||!l.$stable)?!0:r===o?!1:r?o?Ar(r,o,d):!0:!!o;return!1}function Ar(e,t,n){const r=Object.keys(t);if(r.length!==Object.keys(e).length)return!0;for(let s=0;s<r.length;s++){const i=r[s];if(t[i]!==e[i]&&!bn(n,i))return!0}return!1}function Ro({vnode:e,parent:t},n){for(;t;){const r=t.subTree;if(r.suspense&&r.suspense.activeBranch===e&&(r.el=e.el),r===e)(e=t.vnode).el=n,t=t.parent;else break}}const Ls={},Ns=()=>Object.create(Ls),js=e=>Object.getPrototypeOf(e)===Ls;function Fo(e,t,n,r=!1){const s={},i=Ns();e.propsDefaults=Object.create(null),$s(e,t,s,i);for(const o in e.propsOptions[0])o in s||(s[o]=void 0);n?e.props=r?s:Ni(s):e.type.props?e.props=s:e.props=i,e.attrs=i}function Do(e,t,n,r){const{props:s,attrs:i,vnode:{patchFlag:o}}=e,l=W(s),[c]=e.propsOptions;let d=!1;if((r||o>0)&&!(o&16)){if(o&8){const u=e.vnode.dynamicProps;for(let p=0;p<u.length;p++){let S=u[p];if(bn(e.emitsOptions,S))continue;const E=t[S];if(c)if(K(i,S))E!==i[S]&&(i[S]=E,d=!0);else{const N=lt(S);s[N]=Un(c,l,N,E,e,!1)}else E!==i[S]&&(i[S]=E,d=!0)}}}else{$s(e,t,s,i)&&(d=!0);let u;for(const p in l)(!t||!K(t,p)&&((u=mt(p))===p||!K(t,u)))&&(c?n&&(n[p]!==void 0||n[u]!==void 0)&&(s[p]=Un(c,l,p,void 0,e,!0)):delete s[p]);if(i!==l)for(const p in i)(!t||!K(t,p))&&(delete i[p],d=!0)}d&&Xe(e.attrs,\"set\",\"\")}function $s(e,t,n,r){const[s,i]=e.propsOptions;let o=!1,l;if(t)for(let c in t){if(It(c))continue;const d=t[c];let u;s&&K(s,u=lt(c))?!i||!i.includes(u)?n[u]=d:(l||(l={}))[u]=d:bn(e.emitsOptions,c)||(!(c in r)||d!==r[c])&&(r[c]=d,o=!0)}if(i){const c=W(n),d=l||Q;for(let u=0;u<i.length;u++){const p=i[u];n[p]=Un(s,c,p,d[p],e,!K(d,p))}}return o}function Un(e,t,n,r,s,i){const o=e[n];if(o!=null){const l=K(o,\"default\");if(l&&r===void 0){const c=o.default;if(o.type!==Function&&!o.skipFactory&&$(c)){const{propsDefaults:d}=s;if(n in d)r=d[n];else{const u=Kt(s);r=d[n]=c.call(null,t),u()}}else r=c;s.ce&&s.ce._setProp(n,r)}o[0]&&(i&&!l?r=!1:o[1]&&(r===\"\"||r===mt(n))&&(r=!0))}return r}const ko=new WeakMap;function Hs(e,t,n=!1){const r=n?ko:t.propsCache,s=r.get(e);if(s)return s;const i=e.props,o={},l=[];let c=!1;if(!$(e)){const u=p=>{c=!0;const[S,E]=Hs(p,t,!0);oe(o,S),E&&l.push(...E)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!i&&!c)return ee(e)&&r.set(e,yt),yt;if(L(i))for(let u=0;u<i.length;u++){const p=lt(i[u]);Or(p)&&(o[p]=Q)}else if(i)for(const u in i){const p=lt(u);if(Or(p)){const S=i[u],E=o[p]=L(S)||$(S)?{type:S}:oe({},S),N=E.type;let M=!1,H=!0;if(L(N))for(let V=0;V<N.length;++V){const z=N[V],X=$(z)&&z.name;if(X===\"Boolean\"){M=!0;break}else X===\"String\"&&(H=!1)}else M=$(N)&&N.name===\"Boolean\";E[0]=M,E[1]=H,(M||K(E,\"default\"))&&l.push(p)}}const d=[o,l];return ee(e)&&r.set(e,d),d}function Or(e){return e[0]!==\"$\"&&!It(e)}const fr=e=>e===\"_\"||e===\"_ctx\"||e===\"$stable\",ur=e=>L(e)?e.map(je):[je(e)],Lo=(e,t,n)=>{if(t._n)return t;const r=qi((...s)=>ur(t(...s)),n);return r._c=!1,r},Vs=(e,t,n)=>{const r=e._ctx;for(const s in e){if(fr(s))continue;const i=e[s];if($(i))t[s]=Lo(s,i,r);else if(i!=null){const o=ur(i);t[s]=()=>o}}},Bs=(e,t)=>{const n=ur(t);e.slots.default=()=>n},Us=(e,t,n)=>{for(const r in t)(n||!fr(r))&&(e[r]=t[r])},No=(e,t,n)=>{const r=e.slots=Ns();if(e.vnode.shapeFlag&32){const s=t._;s?(Us(r,t,n),n&&ts(r,\"_\",s,!0)):Vs(t,r)}else t&&Bs(e,t)},jo=(e,t,n)=>{const{vnode:r,slots:s}=e;let i=!0,o=Q;if(r.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:Us(s,t,n):(i=!t.$stable,Vs(t,s)),o=t}else t&&(Bs(e,t),o={default:1});if(i)for(const l in s)!fr(l)&&o[l]==null&&delete s[l]},Ce=Uo;function $o(e){return Ho(e)}function Ho(e,t){const n=hn();n.__VUE__=!0;const{insert:r,remove:s,patchProp:i,createElement:o,createText:l,createComment:c,setText:d,setElementText:u,parentNode:p,nextSibling:S,setScopeId:E=Ve,insertStaticContent:N}=e,M=(a,f,h,g=null,m=null,v=null,w=void 0,_=null,x=!!f.dynamicChildren)=>{if(a===f)return;a&&!Ot(a,f)&&(g=de(a),j(a,m,v,!0),a=null),f.patchFlag===-2&&(x=!1,f.dynamicChildren=null);const{type:b,ref:P,shapeFlag:C}=f;switch(b){case xn:H(a,f,h,g);break;case ct:V(a,f,h,g);break;case en:a==null&&z(f,h,g,w);break;case Ae:ue(a,f,h,g,m,v,w,_,x);break;default:C&1?te(a,f,h,g,m,v,w,_,x):C&6?Qe(a,f,h,g,m,v,w,_,x):(C&64||C&128)&&b.process(a,f,h,g,m,v,w,_,x,we)}P!=null&&m?Dt(P,a&&a.ref,v,f||a,!f):P==null&&a&&a.ref!=null&&Dt(a.ref,null,v,a,!0)},H=(a,f,h,g)=>{if(a==null)r(f.el=l(f.children),h,g);else{const m=f.el=a.el;f.children!==a.children&&d(m,f.children)}},V=(a,f,h,g)=>{a==null?r(f.el=c(f.children||\"\"),h,g):f.el=a.el},z=(a,f,h,g)=>{[a.el,a.anchor]=N(a.children,f,h,g,a.el,a.anchor)},X=({el:a,anchor:f},h,g)=>{let m;for(;a&&a!==f;)m=S(a),r(a,h,g),a=m;r(f,h,g)},R=({el:a,anchor:f})=>{let h;for(;a&&a!==f;)h=S(a),s(a),a=h;s(f)},te=(a,f,h,g,m,v,w,_,x)=>{if(f.type===\"svg\"?w=\"svg\":f.type===\"math\"&&(w=\"mathml\"),a==null)_e(f,h,g,m,v,w,_,x);else{const b=a.el&&a.el._isVueCE?a.el:null;try{b&&b._beginPatch(),We(a,f,m,v,w,_,x)}finally{b&&b._endPatch()}}},_e=(a,f,h,g,m,v,w,_)=>{let x,b;const{props:P,shapeFlag:C,transition:O,dirs:D}=a;if(x=a.el=o(a.type,v,P&&P.is,P),C&8?u(x,a.children):C&16&&ye(a.children,x,null,g,m,Tn(a,v),w,_),D&&ut(a,null,g,\"created\"),fe(x,a,a.scopeId,w,g),P){for(const J in P)J!==\"value\"&&!It(J)&&i(x,J,null,P[J],v,g);\"value\"in P&&i(x,\"value\",null,P.value,v),(b=P.onVnodeBeforeMount)&&Le(b,g,a)}D&&ut(a,null,g,\"beforeMount\");const B=Vo(m,O);B&&O.beforeEnter(x),r(x,f,h),((b=P&&P.onVnodeMounted)||B||D)&&Ce(()=>{b&&Le(b,g,a),B&&O.enter(x),D&&ut(a,null,g,\"mounted\")},m)},fe=(a,f,h,g,m)=>{if(h&&E(a,h),g)for(let v=0;v<g.length;v++)E(a,g[v]);if(m){let v=m.subTree;if(f===v||Ys(v.type)&&(v.ssContent===f||v.ssFallback===f)){const w=m.vnode;fe(a,w,w.scopeId,w.slotScopeIds,m.parent)}}},ye=(a,f,h,g,m,v,w,_,x=0)=>{for(let b=x;b<a.length;b++){const P=a[b]=_?st(a[b]):je(a[b]);M(null,P,f,h,g,m,v,w,_)}},We=(a,f,h,g,m,v,w)=>{const _=f.el=a.el;let{patchFlag:x,dynamicChildren:b,dirs:P}=f;x|=a.patchFlag&16;const C=a.props||Q,O=f.props||Q;let D;if(h&&dt(h,!1),(D=O.onVnodeBeforeUpdate)&&Le(D,h,f,a),P&&ut(f,a,h,\"beforeUpdate\"),h&&dt(h,!0),(C.innerHTML&&O.innerHTML==null||C.textContent&&O.textContent==null)&&u(_,\"\"),b?Ie(a.dynamicChildren,b,_,h,g,Tn(f,m),v):w||G(a,f,_,null,h,g,Tn(f,m),v,!1),x>0){if(x&16)Re(_,C,O,h,m);else if(x&2&&C.class!==O.class&&i(_,\"class\",null,O.class,m),x&4&&i(_,\"style\",C.style,O.style,m),x&8){const B=f.dynamicProps;for(let J=0;J<B.length;J++){const Y=B[J],me=C[Y],ve=O[Y];(ve!==me||Y===\"value\")&&i(_,Y,me,ve,m,h)}}x&1&&a.children!==f.children&&u(_,f.children)}else!w&&b==null&&Re(_,C,O,h,m);((D=O.onVnodeUpdated)||P)&&Ce(()=>{D&&Le(D,h,f,a),P&&ut(f,a,h,\"updated\")},g)},Ie=(a,f,h,g,m,v,w)=>{for(let _=0;_<f.length;_++){const x=a[_],b=f[_],P=x.el&&(x.type===Ae||!Ot(x,b)||x.shapeFlag&198)?p(x.el):h;M(x,b,P,null,g,m,v,w,!0)}},Re=(a,f,h,g,m)=>{if(f!==h){if(f!==Q)for(const v in f)!It(v)&&!(v in h)&&i(a,v,f[v],null,m,g);for(const v in h){if(It(v))continue;const w=h[v],_=f[v];w!==_&&v!==\"value\"&&i(a,v,_,w,m,g)}\"value\"in h&&i(a,\"value\",f.value,h.value,m)}},ue=(a,f,h,g,m,v,w,_,x)=>{const b=f.el=a?a.el:l(\"\"),P=f.anchor=a?a.anchor:l(\"\");let{patchFlag:C,dynamicChildren:O,slotScopeIds:D}=f;D&&(_=_?_.concat(D):D),a==null?(r(b,h,g),r(P,h,g),ye(f.children||[],h,P,m,v,w,_,x)):C>0&&C&64&&O&&a.dynamicChildren&&a.dynamicChildren.length===O.length?(Ie(a.dynamicChildren,O,h,m,v,w,_),(f.key!=null||m&&f===m.subTree)&&Ws(a,f,!0)):G(a,f,h,P,m,v,w,_,x)},Qe=(a,f,h,g,m,v,w,_,x)=>{f.slotScopeIds=_,a==null?f.shapeFlag&512?m.ctx.activate(f,h,g,w,x):ft(f,h,g,m,v,w,x):vt(a,f,x)},ft=(a,f,h,g,m,v,w)=>{const _=a.component=Jo(a,g,m);if(Ps(a)&&(_.ctx.renderer=we),Qo(_,!1,w),_.asyncDep){if(m&&m.registerDep(_,re,w),!a.el){const x=_.subTree=Be(ct);V(null,x,f,h),a.placeholder=x.el}}else re(_,a,f,h,m,v,w)},vt=(a,f,h)=>{const g=f.component=a.component;if(Io(a,f,h))if(g.asyncDep&&!g.asyncResolved){q(g,f,h);return}else g.next=f,g.update();else f.el=a.el,g.vnode=f},re=(a,f,h,g,m,v,w)=>{const _=()=>{if(a.isMounted){let{next:C,bu:O,u:D,parent:B,vnode:J}=a;{const De=Ks(a);if(De){C&&(C.el=J.el,q(a,C,w)),De.asyncDep.then(()=>{a.isUnmounted||_()});return}}let Y=C,me;dt(a,!1),C?(C.el=J.el,q(a,C,w)):C=J,O&&yn(O),(me=C.props&&C.props.onVnodeBeforeUpdate)&&Le(me,B,C,J),dt(a,!0);const ve=Tr(a),Fe=a.subTree;a.subTree=ve,M(Fe,ve,p(Fe.el),de(Fe),a,m,v),C.el=ve.el,Y===null&&Ro(a,ve.el),D&&Ce(D,m),(me=C.props&&C.props.onVnodeUpdated)&&Ce(()=>Le(me,B,C,J),m)}else{let C;const{el:O,props:D}=f,{bm:B,m:J,parent:Y,root:me,type:ve}=a,Fe=kt(f);dt(a,!1),B&&yn(B),!Fe&&(C=D&&D.onVnodeBeforeMount)&&Le(C,Y,f),dt(a,!0);{me.ce&&me.ce._def.shadowRoot!==!1&&me.ce._injectChildStyle(ve);const De=a.subTree=Tr(a);M(null,De,h,g,a,m,v),f.el=De.el}if(J&&Ce(J,m),!Fe&&(C=D&&D.onVnodeMounted)){const De=f;Ce(()=>Le(C,Y,De),m)}(f.shapeFlag&256||Y&&kt(Y.vnode)&&Y.vnode.shapeFlag&256)&&a.a&&Ce(a.a,m),a.isMounted=!0,f=h=g=null}};a.scope.on();const x=a.effect=new is(_);a.scope.off();const b=a.update=x.run.bind(x),P=a.job=x.runIfDirty.bind(x);P.i=a,P.id=a.uid,x.scheduler=()=>or(P),dt(a,!0),b()},q=(a,f,h)=>{f.component=a;const g=a.vnode.props;a.vnode=f,a.next=null,Do(a,f.props,g,h),jo(a,f.children,h),Ge(),yr(a),qe()},G=(a,f,h,g,m,v,w,_,x=!1)=>{const b=a&&a.children,P=a?a.shapeFlag:0,C=f.children,{patchFlag:O,shapeFlag:D}=f;if(O>0){if(O&128){T(b,C,h,g,m,v,w,_,x);return}else if(O&256){y(b,C,h,g,m,v,w,_,x);return}}D&8?(P&16&&se(b,m,v),C!==b&&u(h,C)):P&16?D&16?T(b,C,h,g,m,v,w,_,x):se(b,m,v,!0):(P&8&&u(h,\"\"),D&16&&ye(C,h,g,m,v,w,_,x))},y=(a,f,h,g,m,v,w,_,x)=>{a=a||yt,f=f||yt;const b=a.length,P=f.length,C=Math.min(b,P);let O;for(O=0;O<C;O++){const D=f[O]=x?st(f[O]):je(f[O]);M(a[O],D,h,null,m,v,w,_,x)}b>P?se(a,m,v,!0,!1,C):ye(f,h,g,m,v,w,_,x,C)},T=(a,f,h,g,m,v,w,_,x)=>{let b=0;const P=f.length;let C=a.length-1,O=P-1;for(;b<=C&&b<=O;){const D=a[b],B=f[b]=x?st(f[b]):je(f[b]);if(Ot(D,B))M(D,B,h,null,m,v,w,_,x);else break;b++}for(;b<=C&&b<=O;){const D=a[C],B=f[O]=x?st(f[O]):je(f[O]);if(Ot(D,B))M(D,B,h,null,m,v,w,_,x);else break;C--,O--}if(b>C){if(b<=O){const D=O+1,B=D<P?f[D].el:g;for(;b<=O;)M(null,f[b]=x?st(f[b]):je(f[b]),h,B,m,v,w,_,x),b++}}else if(b>O)for(;b<=C;)j(a[b],m,v,!0),b++;else{const D=b,B=b,J=new Map;for(b=B;b<=O;b++){const Se=f[b]=x?st(f[b]):je(f[b]);Se.key!=null&&J.set(Se.key,b)}let Y,me=0;const ve=O-B+1;let Fe=!1,De=0;const Tt=new Array(ve);for(b=0;b<ve;b++)Tt[b]=0;for(b=D;b<=C;b++){const Se=a[b];if(me>=ve){j(Se,m,v,!0);continue}let ke;if(Se.key!=null)ke=J.get(Se.key);else for(Y=B;Y<=O;Y++)if(Tt[Y-B]===0&&Ot(Se,f[Y])){ke=Y;break}ke===void 0?j(Se,m,v,!0):(Tt[ke-B]=b+1,ke>=De?De=ke:Fe=!0,M(Se,f[ke],h,null,m,v,w,_,x),me++)}const gr=Fe?Bo(Tt):yt;for(Y=gr.length-1,b=ve-1;b>=0;b--){const Se=B+b,ke=f[Se],mr=f[Se+1],vr=Se+1<P?mr.el||zs(mr):g;Tt[b]===0?M(null,ke,h,vr,m,v,w,_,x):Fe&&(Y<0||b!==gr[Y]?F(ke,h,vr,2):Y--)}}},F=(a,f,h,g,m=null)=>{const{el:v,type:w,transition:_,children:x,shapeFlag:b}=a;if(b&6){F(a.component.subTree,f,h,g);return}if(b&128){a.suspense.move(f,h,g);return}if(b&64){w.move(a,f,h,we);return}if(w===Ae){r(v,f,h);for(let C=0;C<x.length;C++)F(x[C],f,h,g);r(a.anchor,f,h);return}if(w===en){X(a,f,h);return}if(g!==2&&b&1&&_)if(g===0)_.beforeEnter(v),r(v,f,h),Ce(()=>_.enter(v),m);else{const{leave:C,delayLeave:O,afterLeave:D}=_,B=()=>{a.ctx.isUnmounted?s(v):r(v,f,h)},J=()=>{v._isLeaving&&v[ro](!0),C(v,()=>{B(),D&&D()})};O?O(v,B,J):J()}else r(v,f,h)},j=(a,f,h,g=!1,m=!1)=>{const{type:v,props:w,ref:_,children:x,dynamicChildren:b,shapeFlag:P,patchFlag:C,dirs:O,cacheIndex:D}=a;if(C===-2&&(m=!1),_!=null&&(Ge(),Dt(_,null,h,a,!0),qe()),D!=null&&(f.renderCache[D]=void 0),P&256){f.ctx.deactivate(a);return}const B=P&1&&O,J=!kt(a);let Y;if(J&&(Y=w&&w.onVnodeBeforeUnmount)&&Le(Y,f,a),P&6)k(a.component,h,g);else{if(P&128){a.suspense.unmount(h,g);return}B&&ut(a,null,f,\"beforeUnmount\"),P&64?a.type.remove(a,f,h,we,g):b&&!b.hasOnce&&(v!==Ae||C>0&&C&64)?se(b,f,h,!1,!0):(v===Ae&&C&384||!m&&P&16)&&se(x,f,h),g&&A(a)}(J&&(Y=w&&w.onVnodeUnmounted)||B)&&Ce(()=>{Y&&Le(Y,f,a),B&&ut(a,null,f,\"unmounted\")},h)},A=a=>{const{type:f,el:h,anchor:g,transition:m}=a;if(f===Ae){U(h,g);return}if(f===en){R(a);return}const v=()=>{s(h),m&&!m.persisted&&m.afterLeave&&m.afterLeave()};if(a.shapeFlag&1&&m&&!m.persisted){const{leave:w,delayLeave:_}=m,x=()=>w(h,v);_?_(a.el,v,x):x()}else v()},U=(a,f)=>{let h;for(;a!==f;)h=S(a),s(a),a=h;s(f)},k=(a,f,h)=>{const{bum:g,scope:m,job:v,subTree:w,um:_,m:x,a:b}=a;Pr(x),Pr(b),g&&yn(g),m.stop(),v&&(v.flags|=8,j(w,a,f,h)),_&&Ce(_,f),Ce(()=>{a.isUnmounted=!0},f)},se=(a,f,h,g=!1,m=!1,v=0)=>{for(let w=v;w<a.length;w++)j(a[w],f,h,g,m)},de=a=>{if(a.shapeFlag&6)return de(a.component.subTree);if(a.shapeFlag&128)return a.suspense.next();const f=S(a.anchor||a.el),h=f&&f[to];return h?S(h):f};let Ke=!1;const et=(a,f,h)=>{let g;a==null?f._vnode&&(j(f._vnode,null,null,!0),g=f._vnode.component):M(f._vnode||null,a,f,null,null,null,h),f._vnode=a,Ke||(Ke=!0,yr(g),Ss(),Ke=!1)},we={p:M,um:j,m:F,r:A,mt:ft,mc:ye,pc:G,pbc:Ie,n:de,o:e};return{render:et,hydrate:void 0,createApp:Eo(et)}}function Tn({type:e,props:t},n){return n===\"svg\"&&e===\"foreignObject\"||n===\"mathml\"&&e===\"annotation-xml\"&&t&&t.encoding&&t.encoding.includes(\"html\")?void 0:n}function dt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Vo(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ws(e,t,n=!1){const r=e.children,s=t.children;if(L(r)&&L(s))for(let i=0;i<r.length;i++){const o=r[i];let l=s[i];l.shapeFlag&1&&!l.dynamicChildren&&((l.patchFlag<=0||l.patchFlag===32)&&(l=s[i]=st(s[i]),l.el=o.el),!n&&l.patchFlag!==-2&&Ws(o,l)),l.type===xn&&(l.patchFlag!==-1?l.el=o.el:l.__elIndex=i+(e.type===Ae?1:0)),l.type===ct&&!l.el&&(l.el=o.el)}}function Bo(e){const t=e.slice(),n=[0];let r,s,i,o,l;const c=e.length;for(r=0;r<c;r++){const d=e[r];if(d!==0){if(s=n[n.length-1],e[s]<d){t[r]=s,n.push(r);continue}for(i=0,o=n.length-1;i<o;)l=i+o>>1,e[n[l]]<d?i=l+1:o=l;d<e[n[i]]&&(i>0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Ks(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Ks(t)}function Pr(e){if(e)for(let t=0;t<e.length;t++)e[t].flags|=8}function zs(e){if(e.placeholder)return e.placeholder;const t=e.component;return t?zs(t.subTree):null}const Ys=e=>e.__isSuspense;function Uo(e,t){t&&t.pendingBranch?L(e)?t.effects.push(...e):t.effects.push(e):Gi(e)}const Ae=Symbol.for(\"v-fgt\"),xn=Symbol.for(\"v-txt\"),ct=Symbol.for(\"v-cmt\"),en=Symbol.for(\"v-stc\"),Nt=[];let Ee=null;function le(e=!1){Nt.push(Ee=e?null:[])}function Wo(){Nt.pop(),Ee=Nt[Nt.length-1]||null}let Vt=1;function Ir(e,t=!1){Vt+=e,e<0&&Ee&&t&&(Ee.hasOnce=!0)}function Xs(e){return e.dynamicChildren=Vt>0?Ee||yt:null,Wo(),Vt>0&&Ee&&Ee.push(e),e}function xe(e,t,n,r,s,i){return Xs(I(e,t,n,r,s,i,!0))}function Gs(e,t,n,r,s){return Xs(Be(e,t,n,r,s,!0))}function qs(e){return e?e.__v_isVNode===!0:!1}function Ot(e,t){return e.type===t.type&&e.key===t.key}const Js=({key:e})=>e??null,tn=({ref:e,ref_key:t,ref_for:n})=>(typeof e==\"number\"&&(e=\"\"+e),e!=null?ne(e)||ae(e)||$(e)?{i:He,r:e,k:t,f:!!n}:e:null);function I(e,t=null,n=null,r=0,s=null,i=e===Ae?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Js(t),ref:t&&tn(t),scopeId:Es,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:He};return l?(dr(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=ne(n)?8:16),Vt>0&&!o&&Ee&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ee.push(c),c}const Be=Ko;function Ko(e,t=null,n=null,r=0,s=null,i=!1){if((!e||e===mo)&&(e=ct),qs(e)){const l=Mt(e,t,!0);return n&&dr(l,n),Vt>0&&!i&&Ee&&(l.shapeFlag&6?Ee[Ee.indexOf(e)]=l:Ee.push(l)),l.patchFlag=-2,l}if(rl(e)&&(e=e.__vccOpts),t){t=zo(t);let{class:l,style:c}=t;l&&!ne(l)&&(t.class=pn(l)),ee(c)&&(ir(c)&&!L(c)&&(c=oe({},c)),t.style=Jn(c))}const o=ne(e)?1:Ys(e)?128:no(e)?64:ee(e)?4:$(e)?2:0;return I(e,t,n,r,s,o,i,!0)}function zo(e){return e?ir(e)||js(e)?oe({},e):e:null}function Mt(e,t,n=!1,r=!1){const{props:s,ref:i,patchFlag:o,children:l,transition:c}=e,d=t?Xo(s||{},t):s,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:d,key:d&&Js(d),ref:t&&t.ref?n&&i?L(i)?i.concat(tn(t)):[i,tn(t)]:tn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ae?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Mt(e.ssContent),ssFallback:e.ssFallback&&Mt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&lr(u,c.clone(u)),u}function Yo(e=\" \",t=0){return Be(xn,null,e,t)}function Rr(e,t){const n=Be(en,null,e);return n.staticCount=t,n}function Zs(e=\"\",t=!1){return t?(le(),Gs(ct,null,e)):Be(ct,null,e)}function je(e){return e==null||typeof e==\"boolean\"?Be(ct):L(e)?Be(Ae,null,e.slice()):qs(e)?st(e):Be(xn,null,String(e))}function st(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Mt(e)}function dr(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(L(t))n=16;else if(typeof t==\"object\")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),dr(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!js(t)?t._ctx=He:s===3&&He&&(He.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else $(t)?(t={default:t,_ctx:He},n=32):(t=String(t),r&64?(n=16,t=[Yo(t)]):n=8);e.children=t,e.shapeFlag|=n}function Xo(...e){const t={};for(let n=0;n<e.length;n++){const r=e[n];for(const s in r)if(s===\"class\")t.class!==r.class&&(t.class=pn([t.class,r.class]));else if(s===\"style\")t.style=Jn([t.style,r.style]);else if(fn(s)){const i=t[s],o=r[s];o&&i!==o&&!(L(i)&&i.includes(o))&&(t[s]=i?[].concat(i,o):o)}else s!==\"\"&&(t[s]=r[s])}return t}function Le(e,t,n,r=null){Ue(e,t,7,[n,r])}const Go=Ds();let qo=0;function Jo(e,t,n){const r=e.type,s=(t?t.appContext:e.appContext)||Go,i={uid:qo++,vnode:e,type:r,parent:t,appContext:s,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new vi(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(s.provides),ids:t?t.ids:[\"\",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Hs(r,s),emitsOptions:ks(r,s),emit:null,emitted:null,propsDefaults:Q,inheritAttrs:r.inheritAttrs,ctx:Q,data:Q,props:Q,attrs:Q,slots:Q,refs:Q,setupState:Q,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return i.ctx={_:i},i.root=t?t.root:i,i.emit=To.bind(null,i),e.ce&&e.ce(i),i}let ge=null;const Zo=()=>ge||He;let an,Wn;{const e=hn(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),i=>{s.length>1?s.forEach(o=>o(i)):s[0](i)}};an=t(\"__VUE_INSTANCE_SETTERS__\",n=>ge=n),Wn=t(\"__VUE_SSR_SETTERS__\",n=>Bt=n)}const Kt=e=>{const t=ge;return an(e),e.scope.on(),()=>{e.scope.off(),an(t)}},Fr=()=>{ge&&ge.scope.off(),an(null)};function Qs(e){return e.vnode.shapeFlag&4}let Bt=!1;function Qo(e,t=!1,n=!1){t&&Wn(t);const{props:r,children:s}=e.vnode,i=Qs(e);Fo(e,r,i,t),No(e,s,n||t);const o=i?el(e,t):void 0;return t&&Wn(!1),o}function el(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,bo);const{setup:r}=n;if(r){Ge();const s=e.setupContext=r.length>1?nl(e):null,i=Kt(e),o=Wt(r,e,0,[e.props,s]),l=Jr(o);if(qe(),i(),(l||e.sp)&&!kt(e)&&Os(e),l){if(o.then(Fr,Fr),t)return o.then(c=>{Dr(e,c)}).catch(c=>{mn(c,e,0)});e.asyncDep=o}else Dr(e,o)}else ei(e)}function Dr(e,t,n){$(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ee(t)&&(e.setupState=xs(t)),ei(e)}function ei(e,t,n){const r=e.type;e.render||(e.render=r.render||Ve);{const s=Kt(e);Ge();try{xo(e)}finally{qe(),s()}}}const tl={get(e,t){return ce(e,\"get\",\"\"),e[t]}};function nl(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,tl),slots:e.slots,emit:e.emit,expose:t}}function hr(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(xs(ji(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Lt)return Lt[n](e)},has(t,n){return n in t||n in Lt}})):e.proxy}function rl(e){return $(e)&&\"__vccOpts\"in e}const ti=(e,t)=>Wi(e,t,Bt),sl=\"3.5.27\";let Kn;const kr=typeof window<\"u\"&&window.trustedTypes;if(kr)try{Kn=kr.createPolicy(\"vue\",{createHTML:e=>e})}catch{}const ni=Kn?e=>Kn.createHTML(e):e=>e,il=\"http://www.w3.org/2000/svg\",ol=\"http://www.w3.org/1998/Math/MathML\",Ye=typeof document<\"u\"?document:null,Lr=Ye&&Ye.createElement(\"template\"),ll={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t===\"svg\"?Ye.createElementNS(il,e):t===\"mathml\"?Ye.createElementNS(ol,e):n?Ye.createElement(e,{is:n}):Ye.createElement(e);return e===\"select\"&&r&&r.multiple!=null&&s.setAttribute(\"multiple\",r.multiple),s},createText:e=>Ye.createTextNode(e),createComment:e=>Ye.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ye.querySelector(e),setScopeId(e,t){e.setAttribute(t,\"\")},insertStaticContent(e,t,n,r,s,i){const o=n?n.previousSibling:t.lastChild;if(s&&(s===i||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===i||!(s=s.nextSibling)););else{Lr.innerHTML=ni(r===\"svg\"?`<svg>${e}</svg>`:r===\"mathml\"?`<math>${e}</math>`:e);const l=Lr.content;if(r===\"svg\"||r===\"mathml\"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},cl=Symbol(\"_vtc\");function al(e,t,n){const r=e[cl];r&&(t=(t?[t,...r]:[...r]).join(\" \")),t==null?e.removeAttribute(\"class\"):n?e.setAttribute(\"class\",t):e.className=t}const Nr=Symbol(\"_vod\"),fl=Symbol(\"_vsh\"),ul=Symbol(\"\"),dl=/(?:^|;)\\s*display\\s*:/;function hl(e,t,n){const r=e.style,s=ne(n);let i=!1;if(n&&!s){if(t)if(ne(t))for(const o of t.split(\";\")){const l=o.slice(0,o.indexOf(\":\")).trim();n[l]==null&&nn(r,l,\"\")}else for(const o in t)n[o]==null&&nn(r,o,\"\");for(const o in n)o===\"display\"&&(i=!0),nn(r,o,n[o])}else if(s){if(t!==n){const o=r[ul];o&&(n+=\";\"+o),r.cssText=n,i=dl.test(n)}}else t&&e.removeAttribute(\"style\");Nr in e&&(e[Nr]=i?r.display:\"\",e[fl]&&(r.display=\"none\"))}const jr=/\\s*!important$/;function nn(e,t,n){if(L(n))n.forEach(r=>nn(e,t,r));else if(n==null&&(n=\"\"),t.startsWith(\"--\"))e.setProperty(t,n);else{const r=pl(e,t);jr.test(n)?e.setProperty(mt(r),n.replace(jr,\"\"),\"important\"):e[r]=n}}const $r=[\"Webkit\",\"Moz\",\"ms\"],An={};function pl(e,t){const n=An[t];if(n)return n;let r=lt(t);if(r!==\"filter\"&&r in e)return An[t]=r;r=es(r);for(let s=0;s<$r.length;s++){const i=$r[s]+r;if(i in e)return An[t]=i}return t}const Hr=\"http://www.w3.org/1999/xlink\";function Vr(e,t,n,r,s,i=mi(t)){r&&t.startsWith(\"xlink:\")?n==null?e.removeAttributeNS(Hr,t.slice(6,t.length)):e.setAttributeNS(Hr,t,n):n==null||i&&!ns(n)?e.removeAttribute(t):e.setAttribute(t,i?\"\":at(n)?String(n):n)}function Br(e,t,n,r,s){if(t===\"innerHTML\"||t===\"textContent\"){n!=null&&(e[t]=t===\"innerHTML\"?ni(n):n);return}const i=e.tagName;if(t===\"value\"&&i!==\"PROGRESS\"&&!i.includes(\"-\")){const l=i===\"OPTION\"?e.getAttribute(\"value\")||\"\":e.value,c=n==null?e.type===\"checkbox\"?\"on\":\"\":String(n);(l!==c||!(\"_value\"in e))&&(e.value=c),n==null&&e.removeAttribute(t),e._value=n;return}let o=!1;if(n===\"\"||n==null){const l=typeof e[t];l===\"boolean\"?n=ns(n):n==null&&l===\"string\"?(n=\"\",o=!0):l===\"number\"&&(n=0,o=!0)}try{e[t]=n}catch{}o&&e.removeAttribute(s||t)}function gl(e,t,n,r){e.addEventListener(t,n,r)}function ml(e,t,n,r){e.removeEventListener(t,n,r)}const Ur=Symbol(\"_vei\");function vl(e,t,n,r,s=null){const i=e[Ur]||(e[Ur]={}),o=i[t];if(r&&o)o.value=r;else{const[l,c]=bl(t);if(r){const d=i[t]=yl(r,s);gl(e,l,d,c)}else o&&(ml(e,l,o,c),i[t]=void 0)}}const Wr=/(?:Once|Passive|Capture)$/;function bl(e){let t;if(Wr.test(e)){t={};let r;for(;r=e.match(Wr);)e=e.slice(0,e.length-r[0].length),t[r[0].toLowerCase()]=!0}return[e[2]===\":\"?e.slice(3):mt(e.slice(2)),t]}let On=0;const xl=Promise.resolve(),_l=()=>On||(xl.then(()=>On=0),On=Date.now());function yl(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Ue(wl(r,n.value),t,5,[r])};return n.value=e,n.attached=_l(),n}function wl(e,t){if(L(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const Kr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Sl=(e,t,n,r,s,i)=>{const o=s===\"svg\";t===\"class\"?al(e,r,o):t===\"style\"?hl(e,n,r):fn(t)?Xn(t)||vl(e,t,n,r,i):(t[0]===\".\"?(t=t.slice(1),!0):t[0]===\"^\"?(t=t.slice(1),!1):Cl(e,t,r,o))?(Br(e,t,r),!e.tagName.includes(\"-\")&&(t===\"value\"||t===\"checked\"||t===\"selected\")&&Vr(e,t,r,o,i,t!==\"value\")):e._isVueCE&&(/[A-Z]/.test(t)||!ne(r))?Br(e,lt(t),r,i,t):(t===\"true-value\"?e._trueValue=r:t===\"false-value\"&&(e._falseValue=r),Vr(e,t,r,o))};function Cl(e,t,n,r){if(r)return!!(t===\"innerHTML\"||t===\"textContent\"||t in e&&Kr(t)&&$(n));if(t===\"spellcheck\"||t===\"draggable\"||t===\"translate\"||t===\"autocorrect\"||t===\"sandbox\"&&e.tagName===\"IFRAME\"||t===\"form\"||t===\"list\"&&e.tagName===\"INPUT\"||t===\"type\"&&e.tagName===\"TEXTAREA\")return!1;if(t===\"width\"||t===\"height\"){const s=e.tagName;if(s===\"IMG\"||s===\"VIDEO\"||s===\"CANVAS\"||s===\"SOURCE\")return!1}return Kr(t)&&ne(n)?!1:t in e}const El=oe({patchProp:Sl},ll);let zr;function Ml(){return zr||(zr=$o(El))}const Tl=((...e)=>{const t=Ml().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=Ol(r);if(!s)return;const i=t._component;!$(i)&&!i.render&&!i.template&&(i.template=s.innerHTML),s.nodeType===1&&(s.textContent=\"\");const o=n(s,!1,Al(s));return s instanceof Element&&(s.removeAttribute(\"v-cloak\"),s.setAttribute(\"data-v-app\",\"\")),o},t});function Al(e){if(e instanceof SVGElement)return\"svg\";if(typeof MathMLElement==\"function\"&&e instanceof MathMLElement)return\"mathml\"}function Ol(e){return ne(e)?document.querySelector(e):e}var ie=function(){return ie=Object.assign||function(t){for(var n,r=1,s=arguments.length;r<s;r++){n=arguments[r];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},ie.apply(this,arguments)};typeof window<\"u\"&&(window.NodeList&&!NodeList.prototype.forEach&&(NodeList.prototype.forEach=Array.prototype.forEach),typeof window.CustomEvent!=\"function\"&&(window.CustomEvent=function(t,n){n=n||{bubbles:!1,cancelable:!1,detail:null};var r=document.createEvent(\"CustomEvent\");return r.initCustomEvent(t,n.bubbles,n.cancelable,n.detail),r}));var Pl=typeof document<\"u\"&&!!document.documentMode,Pn;function Il(){return Pn||(Pn=document.createElement(\"div\").style)}var Yr=[\"webkit\",\"moz\",\"ms\"],Gt={};function pr(e){if(Gt[e])return Gt[e];var t=Il();if(e in t)return Gt[e]=e;for(var n=e[0].toUpperCase()+e.slice(1),r=Yr.length;r--;){var s=\"\".concat(Yr[r]).concat(n);if(s in t)return Gt[e]=s}}function qt(e,t){return parseFloat(t[pr(e)])||0}function Jt(e,t,n){n===void 0&&(n=window.getComputedStyle(e));var r=t===\"border\"?\"Width\":\"\";return{left:qt(\"\".concat(t,\"Left\").concat(r),n),right:qt(\"\".concat(t,\"Right\").concat(r),n),top:qt(\"\".concat(t,\"Top\").concat(r),n),bottom:qt(\"\".concat(t,\"Bottom\").concat(r),n)}}function _t(e,t,n){e.style[pr(t)]=n}function Rl(e,t){var n=pr(\"transform\");_t(e,\"transition\",\"\".concat(n,\" \").concat(t.duration,\"ms \").concat(t.easing))}function Fl(e,t,n){var r=t.x,s=t.y,i=t.scale,o=t.isSVG;if(_t(e,\"transform\",\"scale(\".concat(i,\") translate(\").concat(r,\"px, \").concat(s,\"px)\")),o&&Pl){var l=window.getComputedStyle(e).getPropertyValue(\"transform\");e.setAttribute(\"transform\",l)}}function In(e){var t=e.parentNode,n=window.getComputedStyle(e),r=window.getComputedStyle(t),s=e.getBoundingClientRect(),i=t.getBoundingClientRect();return{elem:{style:n,width:s.width,height:s.height,top:s.top,bottom:s.bottom,left:s.left,right:s.right,margin:Jt(e,\"margin\",n),border:Jt(e,\"border\",n)},parent:{style:r,width:i.width,height:i.height,top:i.top,bottom:i.bottom,left:i.left,right:i.right,padding:Jt(t,\"padding\",r),border:Jt(t,\"border\",r)}}}var Ut={down:\"mousedown\",move:\"mousemove\",up:\"mouseup mouseleave\"};typeof window<\"u\"&&(typeof window.PointerEvent==\"function\"?Ut={down:\"pointerdown\",move:\"pointermove\",up:\"pointerup pointerleave pointercancel\"}:typeof window.TouchEvent==\"function\"&&(Ut={down:\"touchstart\",move:\"touchmove\",up:\"touchend touchcancel\"}));function Rn(e,t,n,r){Ut[e].split(\" \").forEach(function(s){t.addEventListener(s,n,r)})}function Fn(e,t,n){Ut[e].split(\" \").forEach(function(r){t.removeEventListener(r,n)})}function ri(e,t){for(var n=e.length;n--;)if(e[n].pointerId===t.pointerId)return n;return-1}function zn(e,t){var n;if(t.touches){n=0;for(var r=0,s=t.touches;r<s.length;r++){var i=s[r];i.pointerId=n++,zn(e,i)}return}n=ri(e,t),n>-1&&e.splice(n,1),e.push(t)}function Dl(e,t){if(t.touches){for(;e.length;)e.pop();return}var n=ri(e,t);n>-1&&e.splice(n,1)}function Xr(e){e=e.slice(0);for(var t=e.pop(),n;n=e.pop();)t={clientX:(n.clientX-t.clientX)/2+t.clientX,clientY:(n.clientY-t.clientY)/2+t.clientY};return t}function Dn(e){if(e.length<2)return 0;var t=e[0],n=e[1];return Math.sqrt(Math.pow(Math.abs(n.clientX-t.clientX),2)+Math.pow(Math.abs(n.clientY-t.clientY),2))}function kl(e){for(var t=e;t&&t.parentNode;){if(t.parentNode===document)return!0;t=t.parentNode instanceof ShadowRoot?t.parentNode.host:t.parentNode}return!1}function Ll(e){return(e.getAttribute(\"class\")||\"\").trim()}function Nl(e,t){return e.nodeType===1&&\" \".concat(Ll(e),\" \").indexOf(\" \".concat(t,\" \"))>-1}function jl(e,t){for(var n=e;n!=null;n=n.parentNode)if(Nl(n,t.excludeClass)||t.exclude.indexOf(n)>-1)return!0;return!1}var $l=/^http:[\\w\\.\\/]+svg$/;function Hl(e){return $l.test(e.namespaceURI)&&e.nodeName.toLowerCase()!==\"svg\"}function Vl(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var si={animate:!1,canvas:!1,cursor:\"move\",disablePan:!1,disableZoom:!1,disableXAxis:!1,disableYAxis:!1,duration:200,easing:\"ease-in-out\",exclude:[],excludeClass:\"panzoom-exclude\",handleStartEvent:function(e){e.preventDefault(),e.stopPropagation()},maxScale:4,minScale:.125,overflow:\"hidden\",panOnlyWhenZoomed:!1,pinchAndPan:!1,relative:!1,setTransform:Fl,startX:0,startY:0,startScale:1,step:.3,touchAction:\"none\"};function ii(e,t){if(!e)throw new Error(\"Panzoom requires an element as an argument\");if(e.nodeType!==1)throw new Error(\"Panzoom requires an element with a nodeType of 1\");if(!kl(e))throw new Error(\"Panzoom should be called on elements that have been attached to the DOM\");t=ie(ie({},si),t);var n=Hl(e),r=e.parentNode;r.style.overflow=t.overflow,r.style.userSelect=\"none\",r.style.touchAction=t.touchAction,(t.canvas?r:e).style.cursor=t.cursor,e.style.userSelect=\"none\",e.style.touchAction=t.touchAction,_t(e,\"transformOrigin\",typeof t.origin==\"string\"?t.origin:n?\"0 0\":\"50% 50%\");function s(){r.style.overflow=\"\",r.style.userSelect=\"\",r.style.touchAction=\"\",r.style.cursor=\"\",e.style.cursor=\"\",e.style.userSelect=\"\",e.style.touchAction=\"\",_t(e,\"transformOrigin\",\"\")}function i(y){y===void 0&&(y={});for(var T in y)y.hasOwnProperty(T)&&(t[T]=y[T]);(y.hasOwnProperty(\"cursor\")||y.hasOwnProperty(\"canvas\"))&&(r.style.cursor=e.style.cursor=\"\",(t.canvas?r:e).style.cursor=t.cursor),y.hasOwnProperty(\"overflow\")&&(r.style.overflow=y.overflow),y.hasOwnProperty(\"touchAction\")&&(r.style.touchAction=y.touchAction,e.style.touchAction=y.touchAction)}var o=0,l=0,c=1,d=!1;M(t.startScale,{animate:!1,force:!0}),setTimeout(function(){N(t.startX,t.startY,{animate:!1,force:!0})});function u(y,T,F){if(!F.silent){var j=new CustomEvent(y,{detail:T});e.dispatchEvent(j)}}function p(y,T,F){var j={x:o,y:l,scale:c,isSVG:n,originalEvent:F};return requestAnimationFrame(function(){typeof T.animate==\"boolean\"&&(T.animate?Rl(e,T):_t(e,\"transition\",\"none\")),T.setTransform(e,j,T),u(y,j,T),u(\"panzoomchange\",j,T)}),j}function S(y,T,F,j){var A=ie(ie({},t),j),U={x:o,y:l,opts:A};if(!j?.force&&(A.disablePan||A.panOnlyWhenZoomed&&c===A.startScale))return U;if(y=parseFloat(y),T=parseFloat(T),A.disableXAxis||(U.x=(A.relative?o:0)+y),A.disableYAxis||(U.y=(A.relative?l:0)+T),A.contain){var k=In(e),se=k.elem.width/c,de=k.elem.height/c,Ke=se*F,et=de*F,we=(Ke-se)/2,tt=(et-de)/2;if(A.contain===\"inside\"){var a=(-k.elem.margin.left-k.parent.padding.left+we)/F,f=(k.parent.width-Ke-k.parent.padding.left-k.elem.margin.left-k.parent.border.left-k.parent.border.right+we)/F;U.x=Math.max(Math.min(U.x,f),a);var h=(-k.elem.margin.top-k.parent.padding.top+tt)/F,g=(k.parent.height-et-k.parent.padding.top-k.elem.margin.top-k.parent.border.top-k.parent.border.bottom+tt)/F;U.y=Math.max(Math.min(U.y,g),h)}else if(A.contain===\"outside\"){var a=(-(Ke-k.parent.width)-k.parent.padding.left-k.parent.border.left-k.parent.border.right+we)/F,f=(we-k.parent.padding.left)/F;U.x=Math.max(Math.min(U.x,f),a);var h=(-(et-k.parent.height)-k.parent.padding.top-k.parent.border.top-k.parent.border.bottom+tt)/F,g=(tt-k.parent.padding.top)/F;U.y=Math.max(Math.min(U.y,g),h)}}return A.roundPixels&&(U.x=Math.round(U.x),U.y=Math.round(U.y)),U}function E(y,T){var F=ie(ie({},t),T),j={scale:c,opts:F};if(!T?.force&&F.disableZoom)return j;var A=t.minScale,U=t.maxScale;if(F.contain){var k=In(e),se=k.elem.width/c,de=k.elem.height/c;if(se>1&&de>1){var Ke=k.parent.width-k.parent.border.left-k.parent.border.right,et=k.parent.height-k.parent.border.top-k.parent.border.bottom,we=Ke/se,tt=et/de;t.contain===\"inside\"?U=Math.min(U,we,tt):t.contain===\"outside\"&&(A=Math.max(A,we,tt))}}return j.scale=Math.min(Math.max(y,A),U),j}function N(y,T,F,j){var A=S(y,T,c,F);return o!==A.x||l!==A.y?(o=A.x,l=A.y,p(\"panzoompan\",A.opts,j)):{x:o,y:l,scale:c,isSVG:n,originalEvent:j}}function M(y,T,F){var j=E(y,T),A=j.opts;if(!(!T?.force&&A.disableZoom)){y=j.scale;var U=o,k=l;if(A.focal){var se=A.focal;U=(se.x/y-se.x/c+o*y)/y,k=(se.y/y-se.y/c+l*y)/y}var de=S(U,k,y,{relative:!1,force:!0});return o=de.x,l=de.y,c=y,p(\"panzoomzoom\",A,F)}}function H(y,T){var F=ie(ie(ie({},t),{animate:!0}),T);return M(c*Math.exp((y?1:-1)*F.step),F)}function V(y){return H(!0,y)}function z(y){return H(!1,y)}function X(y,T,F,j){var A=In(e),U={width:A.parent.width-A.parent.padding.left-A.parent.padding.right-A.parent.border.left-A.parent.border.right,height:A.parent.height-A.parent.padding.top-A.parent.padding.bottom-A.parent.border.top-A.parent.border.bottom},k=T.clientX-A.parent.left-A.parent.padding.left-A.parent.border.left-A.elem.margin.left,se=T.clientY-A.parent.top-A.parent.padding.top-A.parent.border.top-A.elem.margin.top;n||(k-=A.elem.width/c/2,se-=A.elem.height/c/2);var de={x:k/U.width*(U.width*y),y:se/U.height*(U.height*y)};return M(y,ie(ie({},F),{animate:!1,focal:de}),j)}function R(y,T){y.preventDefault();var F=ie(ie(ie({},t),T),{animate:!1}),j=y.deltaY===0&&y.deltaX?y.deltaX:y.deltaY,A=j<0?1:-1,U=E(c*Math.exp(A*F.step/3),F).scale;return X(U,y,F,y)}function te(y){var T=ie(ie(ie({},t),{animate:!0,force:!0}),y);c=E(T.startScale,T).scale;var F=S(T.startX,T.startY,c,T);return o=F.x,l=F.y,p(\"panzoomreset\",T)}var _e,fe,ye,We,Ie,Re,ue=[];function Qe(y){if(!jl(y.target,t)){zn(ue,y),d=!0,t.handleStartEvent(y),_e=o,fe=l,u(\"panzoomstart\",{x:o,y:l,scale:c,isSVG:n,originalEvent:y},t);var T=Xr(ue);ye=T.clientX,We=T.clientY,Ie=c,Re=Dn(ue)}}function ft(y){if(!(!d||_e===void 0||fe===void 0||ye===void 0||We===void 0)){zn(ue,y);var T=Xr(ue),F=ue.length>1,j=c;if(F){Re===0&&(Re=Dn(ue));var A=Dn(ue)-Re;j=E(A*t.step/80+Ie).scale,X(j,T,{animate:!1},y)}(!F||t.pinchAndPan)&&N(_e+(T.clientX-ye)/j,fe+(T.clientY-We)/j,{animate:!1},y)}}function vt(y){ue.length===1&&u(\"panzoomend\",{x:o,y:l,scale:c,isSVG:n,originalEvent:y},t),Dl(ue,y),d&&(d=!1,_e=fe=ye=We=void 0)}var re=!1;function q(){re||(re=!0,Rn(\"down\",t.canvas?r:e,Qe),Rn(\"move\",document,ft,{passive:!0}),Rn(\"up\",document,vt,{passive:!0}))}function G(){re=!1,Fn(\"down\",t.canvas?r:e,Qe),Fn(\"move\",document,ft),Fn(\"up\",document,vt)}return t.noBind||q(),{bind:q,destroy:G,eventNames:Ut,getPan:function(){return{x:o,y:l}},getScale:function(){return c},getOptions:function(){return Vl(t)},handleDown:Qe,handleMove:ft,handleUp:vt,pan:N,reset:te,resetStyle:s,setOptions:i,setStyle:function(y,T){return _t(e,y,T)},zoom:M,zoomIn:V,zoomOut:z,zoomToPoint:X,zoomWithWheel:R}}ii.defaultOptions=si;const Bl={class:\"bg-white dark:bg-slate-800/50 rounded-2xl border border-slate-200 dark:border-slate-700/50 overflow-hidden shadow-xl transition-colors\"},Ul={class:\"px-6 py-4 border-b border-slate-200 dark:border-slate-700/50 flex items-center justify-between transition-colors\"},Wl={class:\"flex items-center gap-3\"},Kl={class:\"w-8 h-8 rounded-lg bg-gradient-to-br from-violet-500/20 to-fuchsia-500/20 flex items-center justify-center\"},zl={class:\"text-sm font-semibold text-violet-600 dark:text-violet-400\"},Yl={key:0,class:\"text-lg font-medium text-slate-900 dark:text-white\"},Xl={key:1,class:\"text-slate-500 dark:text-slate-400 text-sm\"},Gl={class:\"flex items-center gap-2\"},ql={class:\"text-xs text-slate-500 mr-2\"},Jl={key:0,class:\"absolute inset-0 flex items-center justify-center\"},Zl={class:\"text-center p-6\"},Ql={class:\"text-slate-500 text-xs max-w-sm\"},ec={key:1,class:\"absolute inset-0 flex items-center justify-center\"},tc=As({__name:\"DiagramCard\",props:{diagram:{},theme:{},index:{}},setup(e){const t=e,n=Te(null),r=Te(null),s=Te(null),i=Te(!1),o=Te(null),l=Te(1),c=Te(!1);cr(async()=>{c.value||(mermaid.initialize({startOnLoad:!1,theme:t.theme,securityLevel:\"loose\",flowchart:{useMaxWidth:!1,htmlLabels:!0}}),c.value=!0),await d()}),ar(()=>{s.value&&s.value.destroy()});async function d(){if(n.value)try{const M=`mermaid-${t.index}-${Date.now()}`,{svg:H}=await mermaid.render(M,t.diagram.code);n.value.innerHTML=H,i.value=!0,await ys(),u()}catch(M){o.value=M instanceof Error?M.message:\"Failed to render diagram\",console.error(\"Mermaid render error:\",M)}}function u(){!n.value||!r.value||(s.value=ii(n.value,{maxScale:5,minScale:.25,cursor:\"grab\",disableZoom:!1,startScale:1,animate:!0}),r.value.addEventListener(\"wheel\",p,{passive:!1}),n.value.addEventListener(\"panzoomchange\",M=>{const H=M.detail;l.value=Math.round(H.scale*100)/100}))}function p(M){if(M.ctrlKey&&s.value){M.preventDefault();const H={clientX:M.clientX,clientY:M.clientY},V=M.deltaY>0?.95:1.05,z=l.value*V,X=Math.max(.25,Math.min(5,z));s.value.zoomToPoint(X,H)}}function S(){s.value?.reset(),l.value=1}function E(){if(s.value){const M=Math.min(l.value*1.25,5);s.value.zoom(M,{animate:!0})}}function N(){if(s.value){const M=Math.max(l.value*.8,.25);s.value.zoom(M,{animate:!0})}}return(M,H)=>(le(),xe(\"div\",Bl,[I(\"div\",Ul,[I(\"div\",Wl,[I(\"div\",Kl,[I(\"span\",zl,$e(e.index+1),1)]),e.diagram.title?(le(),xe(\"h2\",Yl,$e(e.diagram.title),1)):(le(),xe(\"span\",Xl,\"Diagram \"+$e(e.index+1),1))]),I(\"div\",Gl,[I(\"span\",ql,$e(Math.round(l.value*100))+\"%\",1),I(\"button\",{onClick:N,class:\"p-2 rounded-lg bg-slate-100 dark:bg-slate-700/50 hover:bg-slate-200 dark:hover:bg-slate-700 text-slate-600 dark:text-slate-300 hover:text-slate-900 dark:hover:text-white transition-colors\",title:\"Zoom out\"},[...H[0]||(H[0]=[I(\"svg\",{class:\"w-4 h-4\",fill:\"none\",stroke:\"currentColor\",viewBox:\"0 0 24 24\"},[I(\"path\",{\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"stroke-width\":\"2\",d:\"M20 12H4\"})],-1)])]),I(\"button\",{onClick:E,class:\"p-2 rounded-lg bg-slate-100 dark:bg-slate-700/50 hover:bg-slate-200 dark:hover:bg-slate-700 text-slate-600 dark:text-slate-300 hover:text-slate-900 dark:hover:text-white transition-colors\",title:\"Zoom in\"},[...H[1]||(H[1]=[I(\"svg\",{class:\"w-4 h-4\",fill:\"none\",stroke:\"currentColor\",viewBox:\"0 0 24 24\"},[I(\"path\",{\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"stroke-width\":\"2\",d:\"M12 4v16m8-8H4\"})],-1)])]),I(\"button\",{onClick:S,class:\"p-2 rounded-lg bg-slate-100 dark:bg-slate-700/50 hover:bg-slate-200 dark:hover:bg-slate-700 text-slate-600 dark:text-slate-300 hover:text-slate-900 dark:hover:text-white transition-colors\",title:\"Reset view\"},[...H[2]||(H[2]=[I(\"svg\",{class:\"w-4 h-4\",fill:\"none\",stroke:\"currentColor\",viewBox:\"0 0 24 24\"},[I(\"path\",{\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"stroke-width\":\"2\",d:\"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4\"})],-1)])])])]),I(\"div\",{ref_key:\"containerRef\",ref:r,class:\"relative bg-slate-50 dark:bg-slate-900/50 min-h-[400px] overflow-hidden cursor-grab active:cursor-grabbing transition-colors\"},[o.value?(le(),xe(\"div\",Jl,[I(\"div\",Zl,[H[3]||(H[3]=I(\"div\",{class:\"w-12 h-12 mx-auto mb-3 rounded-full bg-red-100 dark:bg-red-500/20 flex items-center justify-center\"},[I(\"svg\",{class:\"w-6 h-6 text-red-500 dark:text-red-400\",fill:\"none\",stroke:\"currentColor\",viewBox:\"0 0 24 24\"},[I(\"path\",{\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"stroke-width\":\"2\",d:\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"})])],-1)),H[4]||(H[4]=I(\"p\",{class:\"text-red-500 dark:text-red-400 text-sm font-medium mb-1\"},\"Render Error\",-1)),I(\"p\",Ql,$e(o.value),1)])])):i.value?Zs(\"\",!0):(le(),xe(\"div\",ec,[...H[5]||(H[5]=[I(\"div\",{class:\"animate-pulse flex flex-col items-center gap-3\"},[I(\"div\",{class:\"w-8 h-8 rounded-full border-2 border-violet-200 dark:border-violet-500/30 border-t-violet-500 animate-spin\"}),I(\"span\",{class:\"text-sm text-slate-500\"},\"Rendering...\")],-1)])])),I(\"div\",{ref_key:\"diagramRef\",ref:n,class:pn([\"diagram-content p-8 flex items-center justify-center min-h-[400px]\",{\"opacity-0\":!i.value&&!o.value}])},null,2),H[6]||(H[6]=I(\"div\",{class:\"absolute bottom-3 right-3 text-xs text-slate-500 bg-white/80 dark:bg-slate-800/80 px-2 py-1 rounded shadow-sm\"},\" Pinch to zoom • Drag to pan \",-1))],512)]))}}),nc=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},rc=nc(tc,[[\"__scopeId\",\"data-v-e83d82c6\"]]),sc={class:\"min-h-screen bg-gradient-to-br from-slate-100 via-slate-50 to-white dark:from-slate-900 dark:via-slate-800 dark:to-slate-900 transition-colors\"},ic={class:\"border-b border-slate-200 dark:border-slate-700/50 bg-white/80 dark:bg-slate-900/50 backdrop-blur-sm sticky top-0 z-10 transition-colors\"},oc={class:\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4\"},lc={class:\"flex items-center justify-between\"},cc={class:\"flex items-center gap-3\"},ac={key:0,class:\"hidden sm:flex items-center gap-2\"},fc={class:\"px-3 py-1 rounded-full text-xs font-medium bg-slate-100 dark:bg-slate-700 text-slate-600 dark:text-slate-300\"},uc={class:\"px-3 py-1 rounded-full text-xs font-medium bg-violet-100 dark:bg-violet-500/20 text-violet-700 dark:text-violet-300 capitalize\"},dc=[\"title\"],hc={key:0,class:\"w-5 h-5\",fill:\"none\",stroke:\"currentColor\",viewBox:\"0 0 24 24\"},pc={key:1,class:\"w-5 h-5\",fill:\"none\",stroke:\"currentColor\",viewBox:\"0 0 24 24\"},gc={key:2,class:\"w-5 h-5\",fill:\"none\",stroke:\"currentColor\",viewBox:\"0 0 24 24\"},mc={class:\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8\"},vc={key:0,class:\"flex items-center justify-center min-h-[60vh]\"},bc={class:\"text-center\"},xc={class:\"text-slate-500 dark:text-slate-400 max-w-md\"},_c={key:1,class:\"flex items-center justify-center min-h-[60vh]\"},yc={key:2,class:\"space-y-6\"},wc=As({__name:\"App\",setup(e){const t=Te(null),n=Te(null),r=Te(\"system\"),s=Te(!1),i=ti(()=>r.value===\"system\"?s.value:r.value===\"dark\");Qt(i,l=>{l?document.documentElement.classList.add(\"dark\"):document.documentElement.classList.remove(\"dark\")},{immediate:!0});function o(){const l=[\"light\",\"dark\",\"system\"],d=(l.indexOf(r.value)+1)%l.length;r.value=l[d]}return cr(()=>{const l=window.matchMedia(\"(prefers-color-scheme: dark)\");s.value=l.matches,l.addEventListener(\"change\",d=>{s.value=d.matches});const c=window.__DIAGRAM_DATA__;c?t.value=c:n.value=\"No diagram data found. This viewer expects data to be provided via __DIAGRAM_DATA__ global.\"}),(l,c)=>(le(),xe(\"div\",sc,[I(\"header\",ic,[I(\"div\",oc,[I(\"div\",lc,[c[3]||(c[3]=Rr('<div class=\"flex items-center gap-3\"><div class=\"w-10 h-10 rounded-xl bg-gradient-to-br from-violet-500 to-fuchsia-500 flex items-center justify-center shadow-lg shadow-violet-500/25\"><svg class=\"w-6 h-6 text-white\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 17V7m0 10a2 2 0 01-2 2H5a2 2 0 01-2-2V7a2 2 0 012-2h2a2 2 0 012 2m0 10a2 2 0 002 2h2a2 2 0 002-2M9 7a2 2 0 012-2h2a2 2 0 012 2m0 10V7m0 10a2 2 0 002 2h2a2 2 0 002-2V7a2 2 0 00-2-2h-2a2 2 0 00-2 2\"></path></svg></div><div><h1 class=\"text-xl font-semibold text-slate-900 dark:text-white\">Diagram Viewer</h1><p class=\"text-sm text-slate-500 dark:text-slate-400\">Interactive Mermaid diagrams</p></div></div>',1)),I(\"div\",cc,[t.value?(le(),xe(\"div\",ac,[I(\"span\",fc,$e(t.value.diagrams.length)+\" diagram\"+$e(t.value.diagrams.length!==1?\"s\":\"\"),1),I(\"span\",uc,$e(t.value.theme),1)])):Zs(\"\",!0),I(\"button\",{onClick:o,class:\"p-2 rounded-lg bg-slate-100 dark:bg-slate-700/50 hover:bg-slate-200 dark:hover:bg-slate-700 text-slate-600 dark:text-slate-300 transition-colors\",title:`Color mode: ${r.value}`},[r.value===\"light\"?(le(),xe(\"svg\",hc,[...c[0]||(c[0]=[I(\"path\",{\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"stroke-width\":\"2\",d:\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z\"},null,-1)])])):r.value===\"dark\"?(le(),xe(\"svg\",pc,[...c[1]||(c[1]=[I(\"path\",{\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"stroke-width\":\"2\",d:\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\"},null,-1)])])):(le(),xe(\"svg\",gc,[...c[2]||(c[2]=[I(\"path\",{\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"stroke-width\":\"2\",d:\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"},null,-1)])]))],8,dc)])])])]),I(\"main\",mc,[n.value?(le(),xe(\"div\",vc,[I(\"div\",bc,[c[4]||(c[4]=I(\"div\",{class:\"w-16 h-16 mx-auto mb-4 rounded-full bg-red-100 dark:bg-red-500/20 flex items-center justify-center\"},[I(\"svg\",{class:\"w-8 h-8 text-red-500 dark:text-red-400\",fill:\"none\",stroke:\"currentColor\",viewBox:\"0 0 24 24\"},[I(\"path\",{\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"stroke-width\":\"2\",d:\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"})])],-1)),c[5]||(c[5]=I(\"h2\",{class:\"text-xl font-semibold text-slate-900 dark:text-white mb-2\"},\"No Data Found\",-1)),I(\"p\",xc,$e(n.value),1)])])):t.value?(le(),xe(\"div\",yc,[(le(!0),xe(Ae,null,vo(t.value.diagrams,(d,u)=>(le(),Gs(rc,{key:u,diagram:d,theme:t.value.theme,index:u},null,8,[\"diagram\",\"theme\",\"index\"]))),128))])):(le(),xe(\"div\",_c,[...c[6]||(c[6]=[I(\"div\",{class:\"animate-pulse flex flex-col items-center gap-4\"},[I(\"div\",{class:\"w-12 h-12 rounded-full border-4 border-violet-200 dark:border-violet-500/30 border-t-violet-500 animate-spin\"}),I(\"p\",{class:\"text-slate-500 dark:text-slate-400\"},\"Loading diagrams...\")],-1)])]))]),c[7]||(c[7]=Rr('<footer class=\"border-t border-slate-200 dark:border-slate-700/50 mt-auto transition-colors\"><div class=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4\"><p class=\"text-center text-sm text-slate-500\"> Generated by <span class=\"text-violet-600 dark:text-violet-400\">ai-diagrams-mcp</span> • Pinch to zoom • Click and drag to pan </p><p class=\"text-center text-xs text-slate-400 mt-2\"> Made by <a href=\"https://laserfocused.ee\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-violet-600 dark:text-violet-400 hover:underline\">LaserFocused OÜ</a></p></div></footer>',1))]))}});Tl(wc).mount(\"#app\");\n";
7
+ // Chunk files
8
+ const CHUNKS = {};
9
+ // Escape </script> in JSON to prevent XSS
10
+ function escapeJsonForScript(json) {
11
+ return json.replace(/<\//g, '<\\/');
12
+ }
13
+ export function generateViewerHTML(options) {
14
+ const { diagrams, theme = 'default' } = options;
15
+ // Prepare the data to inject (escaped for script context)
16
+ const diagramData = escapeJsonForScript(JSON.stringify({
17
+ diagrams,
18
+ theme,
19
+ }));
20
+ // Generate chunk script tags
21
+ const chunkScripts = Object.entries(CHUNKS)
22
+ .map(([, content]) => `<script type="module">${content}</script>`)
23
+ .join('\n');
24
+ return `<!DOCTYPE html>
25
+ <html lang="en">
26
+ <head>
27
+ <meta charset="UTF-8">
28
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
29
+ <title>Diagram Viewer - ai-diagrams-mcp</title>
30
+ <style>${VIEWER_CSS}</style>
31
+ <!-- Mermaid from CDN -->
32
+ <script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script>
33
+ </head>
34
+ <body>
35
+ <div id="app"></div>
36
+ <script>
37
+ window.__DIAGRAM_DATA__ = ${diagramData};
38
+ </script>
39
+ ${chunkScripts}
40
+ <script type="module">${VIEWER_JS}</script>
41
+ </body>
42
+ </html>`;
43
+ }
44
+ //# sourceMappingURL=viewer-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewer-bundle.js","sourceRoot":"","sources":["../../src/templates/viewer-bundle.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sEAAsE;AActE,sBAAsB;AACtB,MAAM,UAAU,GAAG,sprBAAsprB,CAAC;AAE1qrB,qBAAqB;AACrB,MAAM,SAAS,GAAG,u/hFAAu/hF,CAAC;AAE1giF,cAAc;AACd,MAAM,MAAM,GAA2B,EACtC,CAAC;AAEF,0CAA0C;AAC1C,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAsB;IACvD,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC;IAEhD,0DAA0D;IAC1D,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;QACrD,QAAQ;QACR,KAAK;KACN,CAAC,CAAC,CAAC;IAEJ,6BAA6B;IAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,yBAAyB,OAAO,WAAW,CAAC;SACjE,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;;;;WAME,UAAU;;;;;;;gCAOW,WAAW;;IAEvC,YAAY;0BACU,SAAS;;QAE3B,CAAC;AACT,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=viewer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewer.test.d.ts","sourceRoot":"","sources":["../../src/templates/viewer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,83 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert';
3
+ import { generateViewerHTML } from './viewer-bundle.js';
4
+ describe('generateViewerHTML', () => {
5
+ it('generates valid HTML structure', () => {
6
+ const diagrams = [{ code: 'graph TD\n A-->B' }];
7
+ const html = generateViewerHTML({ diagrams });
8
+ assert.ok(html.includes('<!DOCTYPE html>'), 'should include doctype');
9
+ assert.ok(html.includes('<html lang="en">'), 'should include html tag');
10
+ assert.ok(html.includes('<div id="app">'), 'should include Vue mount point');
11
+ assert.ok(html.includes('__DIAGRAM_DATA__'), 'should include data injection');
12
+ });
13
+ it('injects diagram data correctly', () => {
14
+ const diagrams = [
15
+ { title: 'Test Diagram', code: 'graph TD\n A-->B' },
16
+ ];
17
+ const html = generateViewerHTML({ diagrams });
18
+ // The data should be JSON stringified in the HTML
19
+ assert.ok(html.includes('"title":"Test Diagram"'), 'should include title in data');
20
+ assert.ok(html.includes('graph TD'), 'should include diagram code in data');
21
+ });
22
+ it('injects multiple diagrams', () => {
23
+ const diagrams = [
24
+ { title: 'First', code: 'graph TD\n A-->B' },
25
+ { title: 'Second', code: 'graph LR\n C-->D' },
26
+ ];
27
+ const html = generateViewerHTML({ diagrams });
28
+ assert.ok(html.includes('"title":"First"'), 'should include first title');
29
+ assert.ok(html.includes('"title":"Second"'), 'should include second title');
30
+ });
31
+ it('uses default theme when not specified', () => {
32
+ const diagrams = [{ code: 'graph TD\n A-->B' }];
33
+ const html = generateViewerHTML({ diagrams });
34
+ assert.ok(html.includes('"theme":"default"'), 'should use default theme');
35
+ });
36
+ it('applies custom theme', () => {
37
+ const themes = ['dark', 'forest', 'neutral'];
38
+ for (const theme of themes) {
39
+ const diagrams = [{ code: 'graph TD\n A-->B' }];
40
+ const html = generateViewerHTML({ diagrams, theme });
41
+ assert.ok(html.includes(`"theme":"${theme}"`), `should use ${theme} theme`);
42
+ }
43
+ });
44
+ it('includes Vue application bundle', () => {
45
+ const diagrams = [{ code: 'graph TD\n A-->B' }];
46
+ const html = generateViewerHTML({ diagrams });
47
+ // Should include the bundled Vue app
48
+ assert.ok(html.includes('<script type="module">'), 'should include module scripts');
49
+ assert.ok(html.includes('<style>'), 'should include styles');
50
+ });
51
+ it('handles diagram without title', () => {
52
+ const diagrams = [{ code: 'graph TD\n A-->B' }];
53
+ const html = generateViewerHTML({ diagrams });
54
+ // Data should not have a title key if not provided
55
+ const dataMatch = html.match(/window\.__DIAGRAM_DATA__\s*=\s*(\{[\s\S]*?\});/);
56
+ assert.ok(dataMatch, 'should have data injection');
57
+ const data = JSON.parse(dataMatch[1]);
58
+ assert.strictEqual(data.diagrams[0].title, undefined, 'should not have title');
59
+ });
60
+ it('handles diagram with title', () => {
61
+ const diagrams = [{ title: 'My Diagram', code: 'graph TD\n A-->B' }];
62
+ const html = generateViewerHTML({ diagrams });
63
+ const dataMatch = html.match(/window\.__DIAGRAM_DATA__\s*=\s*(\{[\s\S]*?\});/);
64
+ assert.ok(dataMatch, 'should have data injection');
65
+ const data = JSON.parse(dataMatch[1]);
66
+ assert.strictEqual(data.diagrams[0].title, 'My Diagram', 'should have title');
67
+ });
68
+ it('properly escapes JSON in script tag', () => {
69
+ // Test with code that could break out of JSON/script context
70
+ const diagrams = [
71
+ { code: 'graph TD\n A["</script><script>alert(1)"]-->B' },
72
+ ];
73
+ const html = generateViewerHTML({ diagrams });
74
+ // The </script> should be escaped as <\/script> in the JSON
75
+ // This prevents XSS by not allowing the script to be closed prematurely
76
+ assert.ok(html.includes('<\\/script>'), 'should escape </script> as <\\/script> in JSON data');
77
+ // The raw </script> should NOT appear inside the data injection
78
+ const dataSection = html.match(/window\.__DIAGRAM_DATA__\s*=\s*[^;]+;/);
79
+ assert.ok(dataSection, 'should have data section');
80
+ assert.ok(!dataSection[0].includes('</script>'), 'data section should not contain raw </script>');
81
+ });
82
+ });
83
+ //# sourceMappingURL=viewer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewer.test.js","sourceRoot":"","sources":["../../src/templates/viewer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod';
2
+ export declare const renderDiagramSchema: z.ZodObject<{
3
+ diagrams: z.ZodArray<z.ZodObject<{
4
+ title: z.ZodOptional<z.ZodString>;
5
+ code: z.ZodString;
6
+ }, z.core.$strip>>;
7
+ theme: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
8
+ default: "default";
9
+ dark: "dark";
10
+ forest: "forest";
11
+ neutral: "neutral";
12
+ }>>>;
13
+ }, z.core.$strip>;
14
+ export type RenderDiagramInput = z.infer<typeof renderDiagramSchema>;
15
+ export declare function renderDiagram(input: RenderDiagramInput): Promise<string>;
16
+ //# sourceMappingURL=render-diagram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-diagram.d.ts","sourceRoot":"","sources":["../../src/tools/render-diagram.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB;;;;;;;;;;;iBAe9B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErE,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyB9E"}
@@ -0,0 +1,42 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { writeFile } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import open from 'open';
6
+ import { z } from 'zod';
7
+ import { generateViewerHTML } from '../templates/viewer-bundle.js';
8
+ export const renderDiagramSchema = z.object({
9
+ diagrams: z
10
+ .array(z.object({
11
+ title: z.string().optional().describe('Optional title for the diagram'),
12
+ code: z.string().describe('Mermaid diagram code'),
13
+ }))
14
+ .min(1)
15
+ .describe('Array of diagrams to render'),
16
+ theme: z
17
+ .enum(['default', 'dark', 'forest', 'neutral'])
18
+ .optional()
19
+ .default('default')
20
+ .describe('Mermaid theme to use'),
21
+ });
22
+ export async function renderDiagram(input) {
23
+ // Validate input
24
+ const validated = renderDiagramSchema.parse(input);
25
+ // Generate HTML
26
+ const html = generateViewerHTML({
27
+ diagrams: validated.diagrams,
28
+ theme: validated.theme,
29
+ });
30
+ // Create unique filename in temp directory
31
+ const filename = `mermaid-viewer-${randomUUID()}.html`;
32
+ const filepath = join(tmpdir(), filename);
33
+ // Write HTML file
34
+ await writeFile(filepath, html, 'utf-8');
35
+ // Open in default browser
36
+ await open(filepath);
37
+ // Return success message
38
+ const diagramCount = validated.diagrams.length;
39
+ const diagramWord = diagramCount === 1 ? 'diagram' : 'diagrams';
40
+ return `Successfully rendered ${diagramCount} ${diagramWord} and opened in browser.\nFile saved to: ${filepath}`;
41
+ }
42
+ //# sourceMappingURL=render-diagram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-diagram.js","sourceRoot":"","sources":["../../src/tools/render-diagram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAqB,MAAM,+BAA+B,CAAC;AAEtF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,QAAQ,EAAE,CAAC;SACR,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACvE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KAClD,CAAC,CACH;SACA,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,6BAA6B,CAAC;IAC1C,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;SAC9C,QAAQ,EAAE;SACV,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CAAC,sBAAsB,CAAC;CACpC,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAyB;IAC3D,iBAAiB;IACjB,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEnD,gBAAgB;IAChB,MAAM,IAAI,GAAG,kBAAkB,CAAC;QAC9B,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,KAAK,EAAE,SAAS,CAAC,KAAqB;KACvC,CAAC,CAAC;IAEH,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,kBAAkB,UAAU,EAAE,OAAO,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;IAE1C,kBAAkB;IAClB,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAEzC,0BAA0B;IAC1B,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,yBAAyB;IACzB,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC/C,MAAM,WAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;IAEhE,OAAO,yBAAyB,YAAY,IAAI,WAAW,2CAA2C,QAAQ,EAAE,CAAC;AACnH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=render-diagram.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-diagram.test.d.ts","sourceRoot":"","sources":["../../src/tools/render-diagram.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,90 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert';
3
+ import { renderDiagramSchema } from './render-diagram.js';
4
+ describe('renderDiagramSchema', () => {
5
+ it('validates valid input with single diagram', () => {
6
+ const input = {
7
+ diagrams: [{ code: 'graph TD\n A-->B' }],
8
+ };
9
+ const result = renderDiagramSchema.safeParse(input);
10
+ assert.ok(result.success, 'should validate successfully');
11
+ if (result.success) {
12
+ assert.strictEqual(result.data.diagrams.length, 1);
13
+ assert.strictEqual(result.data.theme, 'default');
14
+ }
15
+ });
16
+ it('validates input with multiple diagrams', () => {
17
+ const input = {
18
+ diagrams: [
19
+ { title: 'First', code: 'graph TD\n A-->B' },
20
+ { code: 'graph LR\n C-->D' },
21
+ ],
22
+ };
23
+ const result = renderDiagramSchema.safeParse(input);
24
+ assert.ok(result.success, 'should validate successfully');
25
+ if (result.success) {
26
+ assert.strictEqual(result.data.diagrams.length, 2);
27
+ assert.strictEqual(result.data.diagrams[0].title, 'First');
28
+ assert.strictEqual(result.data.diagrams[1].title, undefined);
29
+ }
30
+ });
31
+ it('validates input with theme', () => {
32
+ const themes = ['default', 'dark', 'forest', 'neutral'];
33
+ for (const theme of themes) {
34
+ const input = {
35
+ diagrams: [{ code: 'graph TD\n A-->B' }],
36
+ theme,
37
+ };
38
+ const result = renderDiagramSchema.safeParse(input);
39
+ assert.ok(result.success, `should validate theme: ${theme}`);
40
+ if (result.success) {
41
+ assert.strictEqual(result.data.theme, theme);
42
+ }
43
+ }
44
+ });
45
+ it('rejects empty diagrams array', () => {
46
+ const input = {
47
+ diagrams: [],
48
+ };
49
+ const result = renderDiagramSchema.safeParse(input);
50
+ assert.ok(!result.success, 'should reject empty diagrams array');
51
+ });
52
+ it('rejects missing diagrams', () => {
53
+ const input = {};
54
+ const result = renderDiagramSchema.safeParse(input);
55
+ assert.ok(!result.success, 'should reject missing diagrams');
56
+ });
57
+ it('rejects invalid theme', () => {
58
+ const input = {
59
+ diagrams: [{ code: 'graph TD\n A-->B' }],
60
+ theme: 'invalid-theme',
61
+ };
62
+ const result = renderDiagramSchema.safeParse(input);
63
+ assert.ok(!result.success, 'should reject invalid theme');
64
+ });
65
+ it('rejects diagram without code', () => {
66
+ const input = {
67
+ diagrams: [{ title: 'No code' }],
68
+ };
69
+ const result = renderDiagramSchema.safeParse(input);
70
+ assert.ok(!result.success, 'should reject diagram without code');
71
+ });
72
+ it('accepts diagram with only code', () => {
73
+ const input = {
74
+ diagrams: [{ code: 'graph TD\n A-->B' }],
75
+ };
76
+ const result = renderDiagramSchema.safeParse(input);
77
+ assert.ok(result.success, 'should accept diagram with only code');
78
+ });
79
+ it('uses default theme when not specified', () => {
80
+ const input = {
81
+ diagrams: [{ code: 'graph TD\n A-->B' }],
82
+ };
83
+ const result = renderDiagramSchema.safeParse(input);
84
+ assert.ok(result.success, 'should validate successfully');
85
+ if (result.success) {
86
+ assert.strictEqual(result.data.theme, 'default');
87
+ }
88
+ });
89
+ });
90
+ //# sourceMappingURL=render-diagram.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-diagram.test.js","sourceRoot":"","sources":["../../src/tools/render-diagram.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,52 @@
1
1
  {
2
2
  "name": "ai-diagrams-mcp",
3
- "version": "0.0.1",
4
- "description": "OIDC trusted publishing setup package for ai-diagrams-mcp",
3
+ "version": "1.0.1",
4
+ "description": "MCP server for rendering Mermaid diagrams with interactive zoom/pan viewer",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "bin": {
8
+ "ai-diagrams-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build:viewer": "npm run build --prefix viewer",
15
+ "build:template": "node scripts/generate-template.js",
16
+ "build:server": "tsc",
17
+ "build": "npm run build:viewer && npm run build:template && npm run build:server",
18
+ "dev": "tsc --watch",
19
+ "start": "node dist/index.js",
20
+ "test": "npm run build:server && node --test dist/**/*.test.js"
21
+ },
5
22
  "keywords": [
6
- "oidc",
7
- "trusted-publishing",
8
- "setup"
9
- ]
23
+ "mcp",
24
+ "mermaid",
25
+ "diagrams",
26
+ "ai",
27
+ "claude",
28
+ "model-context-protocol"
29
+ ],
30
+ "author": "LaserFocused OÜ <hello@laserfocused.ee>",
31
+ "license": "MIT",
32
+ "homepage": "https://github.com/LaserFocused-ee/ai-diagrams-mcp#readme",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/LaserFocused-ee/ai-diagrams-mcp.git"
36
+ },
37
+ "bugs": {
38
+ "url": "https://github.com/LaserFocused-ee/ai-diagrams-mcp/issues"
39
+ },
40
+ "engines": {
41
+ "node": ">=18"
42
+ },
43
+ "dependencies": {
44
+ "@modelcontextprotocol/sdk": "latest",
45
+ "open": "latest",
46
+ "zod": "latest"
47
+ },
48
+ "devDependencies": {
49
+ "@types/node": "latest",
50
+ "typescript": "latest"
51
+ }
10
52
  }