@teamvelix/cli 5.1.5 → 5.1.7

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.
@@ -0,0 +1,47 @@
1
+ import {
2
+ VERSION,
3
+ log,
4
+ showBanner
5
+ } from "./chunk-NP7HMX6A.js";
6
+
7
+ // commands/doctor.ts
8
+ import fs from "fs";
9
+ import pc from "picocolors";
10
+ async function doctorCommand() {
11
+ showBanner();
12
+ console.log(` ${pc.bold("Velix Doctor")}`);
13
+ log.blank();
14
+ const checks = [
15
+ { name: "Node.js version", check: () => {
16
+ const v = parseInt(process.version.slice(1));
17
+ return v >= 18 ? "\u2714" : "\u2716";
18
+ }, info: process.version },
19
+ { name: "velix.config.ts", check: () => fs.existsSync("velix.config.ts") || fs.existsSync("velix.config.js") ? "\u2714" : "\u2716", info: "" },
20
+ { name: "app/ directory", check: () => fs.existsSync("app") ? "\u2714" : "\u2716", info: "" },
21
+ { name: "package.json", check: () => fs.existsSync("package.json") ? "\u2714" : "\u2716", info: "" },
22
+ { name: "tsconfig.json", check: () => fs.existsSync("tsconfig.json") ? "\u2714" : "\u2716", info: "" },
23
+ { name: "node_modules", check: () => fs.existsSync("node_modules") ? "\u2714" : "\u26A0 Run npm install", info: "" }
24
+ ];
25
+ for (const { name, check, info } of checks) {
26
+ const result = check();
27
+ const icon = result === "\u2714" ? pc.green("\u2714") : result.startsWith("\u2716") ? pc.red("\u2716") : pc.yellow("\u26A0");
28
+ const infoStr = info ? ` ${pc.dim(info)}` : result.length > 1 ? ` ${pc.yellow(result.slice(2))}` : "";
29
+ console.log(` ${icon} ${name}${infoStr}`);
30
+ }
31
+ log.blank();
32
+ }
33
+ async function infoCommand() {
34
+ showBanner();
35
+ console.log(` ${pc.bold("Environment:")}`);
36
+ console.log(` Velix: ${pc.cyan(`v${VERSION}`)}`);
37
+ console.log(` Node: ${pc.dim(process.version)}`);
38
+ console.log(` Platform: ${pc.dim(process.platform)}`);
39
+ console.log(` Arch: ${pc.dim(process.arch)}`);
40
+ console.log(` CWD: ${pc.dim(process.cwd())}`);
41
+ log.blank();
42
+ }
43
+ export {
44
+ doctorCommand,
45
+ infoCommand
46
+ };
47
+ //# sourceMappingURL=doctor-YYTH474N.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../commands/doctor.ts"],"sourcesContent":["/**\n * `velix doctor` & `velix info`\n */\nimport fs from 'fs';\nimport pc from 'picocolors';\nimport { VERSION } from '../version.js';\nimport { showBanner, log } from './shared.js';\n\nexport async function doctorCommand() {\n showBanner();\n console.log(` ${pc.bold('Velix Doctor')}`);\n log.blank();\n\n const checks = [\n { name: 'Node.js version', check: () => { const v = parseInt(process.version.slice(1)); return v >= 18 ? '✔' : '✖'; }, info: process.version },\n { name: 'velix.config.ts', check: () => fs.existsSync('velix.config.ts') || fs.existsSync('velix.config.js') ? '✔' : '✖', info: '' },\n { name: 'app/ directory', check: () => fs.existsSync('app') ? '✔' : '✖', info: '' },\n { name: 'package.json', check: () => fs.existsSync('package.json') ? '✔' : '✖', info: '' },\n { name: 'tsconfig.json', check: () => fs.existsSync('tsconfig.json') ? '✔' : '✖', info: '' },\n { name: 'node_modules', check: () => fs.existsSync('node_modules') ? '✔' : '⚠ Run npm install', info: '' },\n ];\n\n for (const { name, check, info } of checks) {\n const result = check();\n const icon = result === '✔' ? pc.green('✔') : result.startsWith('✖') ? pc.red('✖') : pc.yellow('⚠');\n const infoStr = info ? ` ${pc.dim(info)}` : (result.length > 1 ? ` ${pc.yellow(result.slice(2))}` : '');\n console.log(` ${icon} ${name}${infoStr}`);\n }\n\n log.blank();\n}\n\nexport async function infoCommand() {\n showBanner();\n console.log(` ${pc.bold('Environment:')}`);\n console.log(` Velix: ${pc.cyan(`v${VERSION}`)}`);\n console.log(` Node: ${pc.dim(process.version)}`);\n console.log(` Platform: ${pc.dim(process.platform)}`);\n console.log(` Arch: ${pc.dim(process.arch)}`);\n console.log(` CWD: ${pc.dim(process.cwd())}`);\n log.blank();\n}\n"],"mappings":";;;;;;;AAGA,OAAO,QAAQ;AACf,OAAO,QAAQ;AAIf,eAAsB,gBAAgB;AACpC,aAAW;AACX,UAAQ,IAAI,KAAK,GAAG,KAAK,cAAc,CAAC,EAAE;AAC1C,MAAI,MAAM;AAEV,QAAM,SAAS;AAAA,IACb,EAAE,MAAM,mBAAmB,OAAO,MAAM;AAAE,YAAM,IAAI,SAAS,QAAQ,QAAQ,MAAM,CAAC,CAAC;AAAG,aAAO,KAAK,KAAK,WAAM;AAAA,IAAK,GAAG,MAAM,QAAQ,QAAQ;AAAA,IAC7I,EAAE,MAAM,mBAAmB,OAAO,MAAM,GAAG,WAAW,iBAAiB,KAAK,GAAG,WAAW,iBAAiB,IAAI,WAAM,UAAK,MAAM,GAAG;AAAA,IACnI,EAAE,MAAM,kBAAkB,OAAO,MAAM,GAAG,WAAW,KAAK,IAAI,WAAM,UAAK,MAAM,GAAG;AAAA,IAClF,EAAE,MAAM,gBAAgB,OAAO,MAAM,GAAG,WAAW,cAAc,IAAI,WAAM,UAAK,MAAM,GAAG;AAAA,IACzF,EAAE,MAAM,iBAAiB,OAAO,MAAM,GAAG,WAAW,eAAe,IAAI,WAAM,UAAK,MAAM,GAAG;AAAA,IAC3F,EAAE,MAAM,gBAAgB,OAAO,MAAM,GAAG,WAAW,cAAc,IAAI,WAAM,0BAAqB,MAAM,GAAG;AAAA,EAC3G;AAEA,aAAW,EAAE,MAAM,OAAO,KAAK,KAAK,QAAQ;AAC1C,UAAM,SAAS,MAAM;AACrB,UAAM,OAAO,WAAW,WAAM,GAAG,MAAM,QAAG,IAAI,OAAO,WAAW,QAAG,IAAI,GAAG,IAAI,QAAG,IAAI,GAAG,OAAO,QAAG;AAClG,UAAM,UAAU,OAAO,IAAI,GAAG,IAAI,IAAI,CAAC,KAAM,OAAO,SAAS,IAAI,IAAI,GAAG,OAAO,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK;AACpG,YAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,OAAO,EAAE;AAAA,EAC3C;AAEA,MAAI,MAAM;AACZ;AAEA,eAAsB,cAAc;AAClC,aAAW;AACX,UAAQ,IAAI,KAAK,GAAG,KAAK,cAAc,CAAC,EAAE;AAC1C,UAAQ,IAAI,kBAAkB,GAAG,KAAK,IAAI,OAAO,EAAE,CAAC,EAAE;AACtD,UAAQ,IAAI,kBAAkB,GAAG,IAAI,QAAQ,OAAO,CAAC,EAAE;AACvD,UAAQ,IAAI,kBAAkB,GAAG,IAAI,QAAQ,QAAQ,CAAC,EAAE;AACxD,UAAQ,IAAI,kBAAkB,GAAG,IAAI,QAAQ,IAAI,CAAC,EAAE;AACpD,UAAQ,IAAI,kBAAkB,GAAG,IAAI,QAAQ,IAAI,CAAC,CAAC,EAAE;AACrD,MAAI,MAAM;AACZ;","names":[]}
@@ -0,0 +1,192 @@
1
+ import {
2
+ camelCase,
3
+ capitalize,
4
+ log,
5
+ pascalCase
6
+ } from "./chunk-NP7HMX6A.js";
7
+
8
+ // commands/generate.ts
9
+ import fs from "fs";
10
+ import path from "path";
11
+ import pc from "picocolors";
12
+ import prompts from "prompts";
13
+ async function generateCommand(type, name) {
14
+ const validTypes = ["page", "layout", "component", "hook", "api", "action", "middleware", "context", "loading", "error", "not-found"];
15
+ if (!type) {
16
+ const { type: selectedType } = await prompts({
17
+ type: "select",
18
+ name: "type",
19
+ message: "What do you want to generate?",
20
+ choices: validTypes.map((t) => ({ title: t, value: t }))
21
+ });
22
+ type = selectedType;
23
+ if (!type) process.exit(0);
24
+ }
25
+ if (!validTypes.includes(type)) {
26
+ log.error(`Invalid type: ${type}. Valid: ${validTypes.join(", ")}`);
27
+ process.exit(1);
28
+ }
29
+ if (!name && !["loading", "error", "not-found"].includes(type)) {
30
+ const { name: inputName } = await prompts({
31
+ type: "text",
32
+ name: "name",
33
+ message: `${type} name:`
34
+ });
35
+ name = inputName;
36
+ if (!name) process.exit(0);
37
+ }
38
+ const templates = {
39
+ page: (n) => ({
40
+ path: `app/${n}/page.tsx`,
41
+ content: `export const metadata = {
42
+ title: "${capitalize(n)}",
43
+ };
44
+
45
+ export default function ${pascalCase(n)}Page() {
46
+ return (
47
+ <main>
48
+ <h1>${capitalize(n)}</h1>
49
+ </main>
50
+ );
51
+ }
52
+ `
53
+ }),
54
+ layout: (n) => ({
55
+ path: `app/${n}/layout.tsx`,
56
+ content: `export default function ${pascalCase(n)}Layout({ children }: { children: React.ReactNode }) {
57
+ return <div>{children}</div>;
58
+ }
59
+ `
60
+ }),
61
+ component: (n) => ({
62
+ path: `components/${pascalCase(n)}.tsx`,
63
+ content: `interface ${pascalCase(n)}Props {
64
+ // props
65
+ }
66
+
67
+ export default function ${pascalCase(n)}({}: ${pascalCase(n)}Props) {
68
+ return <div>${pascalCase(n)}</div>;
69
+ }
70
+ `
71
+ }),
72
+ hook: (n) => ({
73
+ path: `hooks/use${pascalCase(n)}.ts`,
74
+ content: `import { useState } from 'react';
75
+
76
+ export function use${pascalCase(n)}() {
77
+ const [state, setState] = useState(null);
78
+ return { state, setState };
79
+ }
80
+ `
81
+ }),
82
+ api: (n) => ({
83
+ path: `server/api/${n}.ts`,
84
+ content: `export function GET(_request: Request) {
85
+ return Response.json({ message: "Hello from ${n}" });
86
+ }
87
+
88
+ export function POST(_request: Request) {
89
+ return Response.json({ received: true });
90
+ }
91
+ `
92
+ }),
93
+ action: (n) => ({
94
+ path: `server/actions/${n}.ts`,
95
+ content: `'use server';
96
+
97
+ export async function ${camelCase(n)}Action(_prevState: unknown, formData: FormData) {
98
+ // Server action logic
99
+ return { success: true };
100
+ }
101
+ `
102
+ }),
103
+ middleware: (n) => ({
104
+ path: `middleware/${n}.ts`,
105
+ content: `export default async function ${camelCase(n)}Middleware(req: Request, res: Response, next: () => Promise<void>) {
106
+ // Middleware logic
107
+ await next();
108
+ }
109
+ `
110
+ }),
111
+ context: (n) => ({
112
+ path: `contexts/${pascalCase(n)}Context.tsx`,
113
+ content: `'use client';
114
+ import { createContext, useContext, type ReactNode } from 'react';
115
+
116
+ interface ${pascalCase(n)}ContextType {
117
+ // context values
118
+ }
119
+
120
+ const ${pascalCase(n)}Context = createContext<${pascalCase(n)}ContextType | null>(null);
121
+
122
+ export function ${pascalCase(n)}Provider({ children }: { children: ReactNode }) {
123
+ return <${pascalCase(n)}Context.Provider value={{}}>{children}</${pascalCase(n)}Context.Provider>;
124
+ }
125
+
126
+ export function use${pascalCase(n)}() {
127
+ const ctx = useContext(${pascalCase(n)}Context);
128
+ if (!ctx) throw new Error('use${pascalCase(n)} must be used within ${pascalCase(n)}Provider');
129
+ return ctx;
130
+ }
131
+ `
132
+ }),
133
+ loading: () => ({
134
+ path: `app/loading.tsx`,
135
+ content: `export default function Loading() {
136
+ return <div>Loading...</div>;
137
+ }
138
+ `
139
+ }),
140
+ error: () => ({
141
+ path: `app/error.tsx`,
142
+ content: `'use client';
143
+
144
+ export default function Error({ error, reset }: { error: Error; reset: () => void }) {
145
+ return (
146
+ <div>
147
+ <h2>Something went wrong!</h2>
148
+ <p>{error.message}</p>
149
+ <button onClick={reset}>Try again</button>
150
+ </div>
151
+ );
152
+ }
153
+ `
154
+ }),
155
+ "not-found": () => ({
156
+ path: `app/not-found.tsx`,
157
+ content: `export default function NotFound() {
158
+ return (
159
+ <div>
160
+ <h1>404 - Not Found</h1>
161
+ <p>The page you're looking for doesn't exist.</p>
162
+ </div>
163
+ );
164
+ }
165
+ `
166
+ })
167
+ };
168
+ const generator = templates[type];
169
+ if (!generator) {
170
+ log.error(`No template for type: ${type}`);
171
+ process.exit(1);
172
+ }
173
+ const { path: filePath, content } = generator(name || "");
174
+ const fullPath = path.resolve(process.cwd(), filePath);
175
+ if (fs.existsSync(fullPath)) {
176
+ log.warn(`File already exists: ${filePath}`);
177
+ const { overwrite } = await prompts({
178
+ type: "confirm",
179
+ name: "overwrite",
180
+ message: "Overwrite?",
181
+ initial: false
182
+ });
183
+ if (!overwrite) process.exit(0);
184
+ }
185
+ fs.mkdirSync(path.dirname(fullPath), { recursive: true });
186
+ fs.writeFileSync(fullPath, content);
187
+ log.success(`Created ${pc.cyan(filePath)}`);
188
+ }
189
+ export {
190
+ generateCommand
191
+ };
192
+ //# sourceMappingURL=generate-5KBJNW3M.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../commands/generate.ts"],"sourcesContent":["/**\n * `velix g <type> <name>` — Generate component/page/api/...\n */\nimport fs from 'fs';\nimport path from 'path';\nimport pc from 'picocolors';\nimport prompts from 'prompts';\nimport { log, writeFile, capitalize, pascalCase, camelCase } from './shared.js';\n\nexport async function generateCommand(type?: string, name?: string) {\n const validTypes = ['page', 'layout', 'component', 'hook', 'api', 'action', 'middleware', 'context', 'loading', 'error', 'not-found'];\n\n if (!type) {\n const { type: selectedType } = await prompts({\n type: 'select',\n name: 'type',\n message: 'What do you want to generate?',\n choices: validTypes.map(t => ({ title: t, value: t })),\n });\n type = selectedType;\n if (!type) process.exit(0);\n }\n\n if (!validTypes.includes(type)) {\n log.error(`Invalid type: ${type}. Valid: ${validTypes.join(', ')}`);\n process.exit(1);\n }\n\n if (!name && !['loading', 'error', 'not-found'].includes(type)) {\n const { name: inputName } = await prompts({\n type: 'text',\n name: 'name',\n message: `${type} name:`,\n });\n name = inputName;\n if (!name) process.exit(0);\n }\n\n const templates: Record<string, (n: string) => { path: string; content: string }> = {\n page: (n) => ({\n path: `app/${n}/page.tsx`,\n content: `export const metadata = {\\n title: \"${capitalize(n)}\",\\n};\\n\\nexport default function ${pascalCase(n)}Page() {\\n return (\\n <main>\\n <h1>${capitalize(n)}</h1>\\n </main>\\n );\\n}\\n`\n }),\n layout: (n) => ({\n path: `app/${n}/layout.tsx`,\n content: `export default function ${pascalCase(n)}Layout({ children }: { children: React.ReactNode }) {\\n return <div>{children}</div>;\\n}\\n`\n }),\n component: (n) => ({\n path: `components/${pascalCase(n)}.tsx`,\n content: `interface ${pascalCase(n)}Props {\\n // props\\n}\\n\\nexport default function ${pascalCase(n)}({}: ${pascalCase(n)}Props) {\\n return <div>${pascalCase(n)}</div>;\\n}\\n`\n }),\n hook: (n) => ({\n path: `hooks/use${pascalCase(n)}.ts`,\n content: `import { useState } from 'react';\\n\\nexport function use${pascalCase(n)}() {\\n const [state, setState] = useState(null);\\n return { state, setState };\\n}\\n`\n }),\n api: (n) => ({\n path: `server/api/${n}.ts`,\n content: `export function GET(_request: Request) {\\n return Response.json({ message: \"Hello from ${n}\" });\\n}\\n\\nexport function POST(_request: Request) {\\n return Response.json({ received: true });\\n}\\n`\n }),\n action: (n) => ({\n path: `server/actions/${n}.ts`,\n content: `'use server';\\n\\nexport async function ${camelCase(n)}Action(_prevState: unknown, formData: FormData) {\\n // Server action logic\\n return { success: true };\\n}\\n`\n }),\n middleware: (n) => ({\n path: `middleware/${n}.ts`,\n content: `export default async function ${camelCase(n)}Middleware(req: Request, res: Response, next: () => Promise<void>) {\\n // Middleware logic\\n await next();\\n}\\n`\n }),\n context: (n) => ({\n path: `contexts/${pascalCase(n)}Context.tsx`,\n content: `'use client';\\nimport { createContext, useContext, type ReactNode } from 'react';\\n\\ninterface ${pascalCase(n)}ContextType {\\n // context values\\n}\\n\\nconst ${pascalCase(n)}Context = createContext<${pascalCase(n)}ContextType | null>(null);\\n\\nexport function ${pascalCase(n)}Provider({ children }: { children: ReactNode }) {\\n return <${pascalCase(n)}Context.Provider value={{}}>{children}</${pascalCase(n)}Context.Provider>;\\n}\\n\\nexport function use${pascalCase(n)}() {\\n const ctx = useContext(${pascalCase(n)}Context);\\n if (!ctx) throw new Error('use${pascalCase(n)} must be used within ${pascalCase(n)}Provider');\\n return ctx;\\n}\\n`\n }),\n loading: () => ({\n path: `app/loading.tsx`,\n content: `export default function Loading() {\\n return <div>Loading...</div>;\\n}\\n`\n }),\n error: () => ({\n path: `app/error.tsx`,\n content: `'use client';\\n\\nexport default function Error({ error, reset }: { error: Error; reset: () => void }) {\\n return (\\n <div>\\n <h2>Something went wrong!</h2>\\n <p>{error.message}</p>\\n <button onClick={reset}>Try again</button>\\n </div>\\n );\\n}\\n`\n }),\n 'not-found': () => ({\n path: `app/not-found.tsx`,\n content: `export default function NotFound() {\\n return (\\n <div>\\n <h1>404 - Not Found</h1>\\n <p>The page you're looking for doesn't exist.</p>\\n </div>\\n );\\n}\\n`\n }),\n };\n\n const generator = templates[type!];\n if (!generator) { log.error(`No template for type: ${type}`); process.exit(1); }\n\n const { path: filePath, content } = generator(name || '');\n const fullPath = path.resolve(process.cwd(), filePath);\n\n if (fs.existsSync(fullPath)) {\n log.warn(`File already exists: ${filePath}`);\n const { overwrite } = await prompts({\n type: 'confirm', name: 'overwrite', message: 'Overwrite?', initial: false,\n });\n if (!overwrite) process.exit(0);\n }\n\n fs.mkdirSync(path.dirname(fullPath), { recursive: true });\n fs.writeFileSync(fullPath, content);\n log.success(`Created ${pc.cyan(filePath)}`);\n}\n"],"mappings":";;;;;;;;AAGA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,OAAO,aAAa;AAGpB,eAAsB,gBAAgB,MAAe,MAAe;AAClE,QAAM,aAAa,CAAC,QAAQ,UAAU,aAAa,QAAQ,OAAO,UAAU,cAAc,WAAW,WAAW,SAAS,WAAW;AAEpI,MAAI,CAAC,MAAM;AACT,UAAM,EAAE,MAAM,aAAa,IAAI,MAAM,QAAQ;AAAA,MAC3C,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,WAAW,IAAI,QAAM,EAAE,OAAO,GAAG,OAAO,EAAE,EAAE;AAAA,IACvD,CAAC;AACD,WAAO;AACP,QAAI,CAAC,KAAM,SAAQ,KAAK,CAAC;AAAA,EAC3B;AAEA,MAAI,CAAC,WAAW,SAAS,IAAI,GAAG;AAC9B,QAAI,MAAM,iBAAiB,IAAI,YAAY,WAAW,KAAK,IAAI,CAAC,EAAE;AAClE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,SAAS,WAAW,EAAE,SAAS,IAAI,GAAG;AAC9D,UAAM,EAAE,MAAM,UAAU,IAAI,MAAM,QAAQ;AAAA,MACxC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS,GAAG,IAAI;AAAA,IAClB,CAAC;AACD,WAAO;AACP,QAAI,CAAC,KAAM,SAAQ,KAAK,CAAC;AAAA,EAC3B;AAEA,QAAM,YAA8E;AAAA,IAClF,MAAM,CAAC,OAAO;AAAA,MACZ,MAAM,OAAO,CAAC;AAAA,MACd,SAAS;AAAA,YAAwC,WAAW,CAAC,CAAC;AAAA;AAAA;AAAA,0BAAqC,WAAW,CAAC,CAAC;AAAA;AAAA;AAAA,YAA+C,WAAW,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAC9K;AAAA,IACA,QAAQ,CAAC,OAAO;AAAA,MACd,MAAM,OAAO,CAAC;AAAA,MACd,SAAS,2BAA2B,WAAW,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IACnD;AAAA,IACA,WAAW,CAAC,OAAO;AAAA,MACjB,MAAM,cAAc,WAAW,CAAC,CAAC;AAAA,MACjC,SAAS,aAAa,WAAW,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,0BAAqD,WAAW,CAAC,CAAC,QAAQ,WAAW,CAAC,CAAC;AAAA,gBAA2B,WAAW,CAAC,CAAC;AAAA;AAAA;AAAA,IACpK;AAAA,IACA,MAAM,CAAC,OAAO;AAAA,MACZ,MAAM,YAAY,WAAW,CAAC,CAAC;AAAA,MAC/B,SAAS;AAAA;AAAA,qBAA2D,WAAW,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IACnF;AAAA,IACA,KAAK,CAAC,OAAO;AAAA,MACX,MAAM,cAAc,CAAC;AAAA,MACrB,SAAS;AAAA,gDAA2F,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IACvG;AAAA,IACA,QAAQ,CAAC,OAAO;AAAA,MACd,MAAM,kBAAkB,CAAC;AAAA,MACzB,SAAS;AAAA;AAAA,wBAA0C,UAAU,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IACjE;AAAA,IACA,YAAY,CAAC,OAAO;AAAA,MAClB,MAAM,cAAc,CAAC;AAAA,MACrB,SAAS,iCAAiC,UAAU,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IACxD;AAAA,IACA,SAAS,CAAC,OAAO;AAAA,MACf,MAAM,YAAY,WAAW,CAAC,CAAC;AAAA,MAC/B,SAAS;AAAA;AAAA;AAAA,YAAkG,WAAW,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,QAAkD,WAAW,CAAC,CAAC,2BAA2B,WAAW,CAAC,CAAC;AAAA;AAAA,kBAAiD,WAAW,CAAC,CAAC;AAAA,YAAgE,WAAW,CAAC,CAAC,2CAA2C,WAAW,CAAC,CAAC;AAAA;AAAA;AAAA,qBAA+C,WAAW,CAAC,CAAC;AAAA,2BAAkC,WAAW,CAAC,CAAC;AAAA,kCAA8C,WAAW,CAAC,CAAC,wBAAwB,WAAW,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAC/mB;AAAA,IACA,SAAS,OAAO;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA;AAAA;AAAA;AAAA,IACX;AAAA,IACA,OAAO,OAAO;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IACX;AAAA,IACA,aAAa,OAAO;AAAA,MAClB,MAAM;AAAA,MACN,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IACX;AAAA,EACF;AAEA,QAAM,YAAY,UAAU,IAAK;AACjC,MAAI,CAAC,WAAW;AAAE,QAAI,MAAM,yBAAyB,IAAI,EAAE;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AAE/E,QAAM,EAAE,MAAM,UAAU,QAAQ,IAAI,UAAU,QAAQ,EAAE;AACxD,QAAM,WAAW,KAAK,QAAQ,QAAQ,IAAI,GAAG,QAAQ;AAErD,MAAI,GAAG,WAAW,QAAQ,GAAG;AAC3B,QAAI,KAAK,wBAAwB,QAAQ,EAAE;AAC3C,UAAM,EAAE,UAAU,IAAI,MAAM,QAAQ;AAAA,MAClC,MAAM;AAAA,MAAW,MAAM;AAAA,MAAa,SAAS;AAAA,MAAc,SAAS;AAAA,IACtE,CAAC;AACD,QAAI,CAAC,UAAW,SAAQ,KAAK,CAAC;AAAA,EAChC;AAEA,KAAG,UAAU,KAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACxD,KAAG,cAAc,UAAU,OAAO;AAClC,MAAI,QAAQ,WAAW,GAAG,KAAK,QAAQ,CAAC,EAAE;AAC5C;","names":[]}