@arviahq/language-server 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.cjs","names":["MarkupKind","CompletionItemKind","LineIndex","InlayHintKind","LineIndex","path","fs","SymbolKind","path","fs","LineIndex","TextDocuments","TextDocument","TextDocumentSyncKind"],"sources":["../src/ast-query.ts","../src/cssdata.ts","../src/hover.ts","../src/walk.ts","../src/colors.ts","../src/completion.ts","../src/definition.ts","../src/diagnostics.ts","../src/documents.ts","../src/inlay-hints.ts","../src/rename.ts","../src/symbols.ts","../src/workspace.ts","../src/server.ts"],"sourcesContent":["import type {\n ArviaFile,\n ComponentDecl,\n Declaration,\n DefaultEntry,\n KeyframesDecl,\n RawValue,\n RecipeDecl,\n Span,\n StyleBody,\n StyleDecl,\n StyleItem,\n TokenGroup,\n ValueWord,\n VariantDecl,\n VariantValue,\n} from \"@arviahq/compiler\";\n\nexport type RefWord = Extract<ValueWord, { kind: \"ref\" }>;\n\nexport type AstTarget =\n | { kind: \"token-ref\"; word: RefWord; component: ComponentDecl | null }\n | { kind: \"use-recipe\"; name: string; span: Span }\n | {\n kind: \"token-entry\";\n group: TokenGroup;\n name: string;\n span: Span;\n value: string;\n doc: string | null;\n owner: \"theme\" | \"component\";\n component: ComponentDecl | null;\n }\n | { kind: \"component-name\"; component: ComponentDecl }\n | { kind: \"style-name\"; style: StyleDecl }\n | { kind: \"recipe-name\"; recipe: RecipeDecl }\n | { kind: \"keyframes-name\"; keyframes: KeyframesDecl }\n | { kind: \"variant-name\"; component: ComponentDecl; variant: VariantDecl }\n | {\n kind: \"variant-value-name\";\n component: ComponentDecl;\n variant: VariantDecl;\n value: VariantValue;\n }\n | { kind: \"slot-name\"; component: ComponentDecl; name: string; span: Span }\n | {\n kind: \"variant-setting\";\n component: ComponentDecl;\n entry: DefaultEntry;\n part: \"variant\" | \"value\";\n context: \"defaults\" | \"compound\" | \"responsive\" | \"container\";\n }\n | {\n kind: \"conditional-key\";\n component: ComponentDecl;\n key: string;\n span: Span;\n context: \"responsive\" | \"container\";\n }\n | { kind: \"css-property\"; name: string; span: Span };\n\nconst inSpan = (offset: number, span: Span) => offset >= span.start && offset < span.end;\n/** Name spans are hit-tested inclusively so a cursor at the end still matches. */\nconst onSpan = (offset: number, span: Span) => offset >= span.start && offset <= span.end;\n\nexport function nodeAtOffset(ast: ArviaFile, offset: number): AstTarget | null {\n for (const item of ast.items) {\n if (!inSpan(offset, item.span) && !onSpan(offset, item.span)) continue;\n switch (item.kind) {\n case \"theme\": {\n for (const group of item.groups) {\n const hit = tokenGroupTarget(group, offset, \"theme\", null);\n if (hit) return hit;\n }\n break;\n }\n case \"recipe\": {\n if (onSpan(offset, item.nameSpan)) return { kind: \"recipe-name\", recipe: item };\n const hit = styleItemsTarget(item.items, offset, null);\n if (hit) return hit;\n break;\n }\n case \"keyframes\": {\n if (onSpan(offset, item.nameSpan)) return { kind: \"keyframes-name\", keyframes: item };\n for (const step of item.steps) {\n for (const decl of step.decls) {\n const hit = declTarget(decl, offset, null);\n if (hit) return hit;\n }\n }\n break;\n }\n case \"styledecl\": {\n if (onSpan(offset, item.nameSpan)) return { kind: \"style-name\", style: item };\n const hit = styleItemsTarget(item.items, offset, null);\n if (hit) return hit;\n break;\n }\n case \"component\": {\n const hit = componentTarget(item, offset);\n if (hit) return hit;\n break;\n }\n case \"global\": {\n for (const rule of item.rules) {\n for (const decl of rule.decls) {\n const hit = declTarget(decl, offset, null);\n if (hit) return hit;\n }\n }\n break;\n }\n }\n }\n return null;\n}\n\nfunction componentTarget(component: ComponentDecl, offset: number): AstTarget | null {\n if (onSpan(offset, component.nameSpan)) return { kind: \"component-name\", component };\n\n for (const item of component.items) {\n switch (item.kind) {\n case \"decl\": {\n const hit = declTarget(item, offset, component);\n if (hit) return hit;\n break;\n }\n case \"use\":\n if (onSpan(offset, item.recipeSpan)) {\n return { kind: \"use-recipe\", name: item.recipe, span: item.recipeSpan };\n }\n break;\n case \"base\": {\n const hit = styleBodyTarget(item.body, offset, component);\n if (hit) return hit;\n break;\n }\n case \"slots\": {\n for (const slot of item.slots) {\n if (onSpan(offset, slot.nameSpan)) {\n return { kind: \"slot-name\", component, name: slot.name, span: slot.nameSpan };\n }\n const hit = styleItemsTarget(slot.items, offset, component);\n if (hit) return hit;\n }\n break;\n }\n case \"variants\": {\n for (const variant of item.variants) {\n if (onSpan(offset, variant.nameSpan)) return { kind: \"variant-name\", component, variant };\n for (const value of variant.values) {\n if (onSpan(offset, value.nameSpan)) {\n return { kind: \"variant-value-name\", component, variant, value };\n }\n const hit = styleBodyTarget(value.body, offset, component);\n if (hit) return hit;\n }\n }\n break;\n }\n case \"defaults\": {\n const hit = settingsTarget(item.entries, offset, component, \"defaults\");\n if (hit) return hit;\n break;\n }\n case \"responsive\": {\n for (const entry of item.entries) {\n if (onSpan(offset, entry.breakpointSpan)) {\n return {\n kind: \"conditional-key\",\n component,\n key: entry.breakpoint,\n span: entry.breakpointSpan,\n context: \"responsive\",\n };\n }\n const hit = settingsTarget(entry.variants, offset, component, \"responsive\");\n if (hit) return hit;\n }\n break;\n }\n case \"container\": {\n for (const entry of item.entries) {\n if (onSpan(offset, entry.containerSpan)) {\n return {\n kind: \"conditional-key\",\n component,\n key: entry.container,\n span: entry.containerSpan,\n context: \"container\",\n };\n }\n const hit = settingsTarget(entry.variants, offset, component, \"container\");\n if (hit) return hit;\n }\n break;\n }\n case \"compound\": {\n const hit = settingsTarget(item.matchers, offset, component, \"compound\");\n if (hit) return hit;\n for (const slot of item.slots) {\n if (onSpan(offset, slot.nameSpan)) {\n return { kind: \"slot-name\", component, name: slot.name, span: slot.nameSpan };\n }\n const inner = styleItemsTarget(slot.items, offset, component);\n if (inner) return inner;\n }\n break;\n }\n case \"tokens\": {\n for (const group of item.groups) {\n const hit = tokenGroupTarget(group, offset, \"component\", component);\n if (hit) return hit;\n }\n break;\n }\n }\n }\n return null;\n}\n\nfunction tokenGroupTarget(\n group: TokenGroup,\n offset: number,\n owner: \"theme\" | \"component\",\n component: ComponentDecl | null,\n): AstTarget | null {\n const entries = [...group.entries, ...group.overrides.flatMap((o) => o.entries)];\n for (const entry of entries) {\n // Alias refs inside the entry value (`accent = color.base;`).\n const valueHit = valueTarget(entry.value, offset, component);\n if (valueHit) return valueHit;\n if (onSpan(offset, entry.nameSpan)) {\n return {\n kind: \"token-entry\",\n group,\n name: entry.name,\n span: entry.nameSpan,\n value: entry.value.text,\n doc: entry.doc,\n owner,\n component,\n };\n }\n }\n return null;\n}\n\nfunction styleBodyTarget(\n body: StyleBody,\n offset: number,\n component: ComponentDecl | null,\n): AstTarget | null {\n for (const item of body.items) {\n if (item.kind === \"slotblock\") {\n if (component && onSpan(offset, item.nameSpan)) {\n return { kind: \"slot-name\", component, name: item.name, span: item.nameSpan };\n }\n const hit = styleItemsTarget(item.items, offset, component);\n if (hit) return hit;\n } else {\n const hit = styleItemsTarget([item], offset, component);\n if (hit) return hit;\n }\n }\n return null;\n}\n\nfunction styleItemsTarget(\n items: StyleItem[],\n offset: number,\n component: ComponentDecl | null,\n): AstTarget | null {\n for (const item of items) {\n if (item.kind === \"decl\") {\n const hit = declTarget(item, offset, component);\n if (hit) return hit;\n } else if (item.kind === \"use\") {\n if (onSpan(offset, item.recipeSpan)) {\n return { kind: \"use-recipe\", name: item.recipe, span: item.recipeSpan };\n }\n } else {\n for (const decl of item.items) {\n const hit = declTarget(decl, offset, component);\n if (hit) return hit;\n }\n // Cross-slot blocks inside states (\"group hover\").\n for (const slot of item.slots) {\n if (component && onSpan(offset, slot.nameSpan)) {\n return { kind: \"slot-name\", component, name: slot.name, span: slot.nameSpan };\n }\n for (const decl of slot.items) {\n if (decl.kind !== \"decl\") continue;\n const hit = declTarget(decl, offset, component);\n if (hit) return hit;\n }\n }\n }\n }\n return null;\n}\n\nfunction declTarget(\n decl: Declaration,\n offset: number,\n component: ComponentDecl | null,\n): AstTarget | null {\n const propSpan: Span = {\n start: decl.span.start,\n end: decl.span.start + decl.property.length,\n line: decl.span.line,\n col: decl.span.col,\n };\n if (onSpan(offset, propSpan)) {\n return { kind: \"css-property\", name: decl.property, span: propSpan };\n }\n return valueTarget(decl.value, offset, component);\n}\n\nfunction valueTarget(\n value: RawValue,\n offset: number,\n component: ComponentDecl | null,\n): AstTarget | null {\n if (!onSpan(offset, value.span)) return null;\n for (const word of value.words) {\n if (word.kind === \"ref\" && onSpan(offset, word.span)) {\n return { kind: \"token-ref\", word, component };\n }\n }\n return null;\n}\n\nfunction settingsTarget(\n entries: DefaultEntry[],\n offset: number,\n component: ComponentDecl,\n context: \"defaults\" | \"compound\" | \"responsive\" | \"container\",\n): AstTarget | null {\n for (const entry of entries) {\n if (onSpan(offset, entry.variantSpan)) {\n return { kind: \"variant-setting\", component, entry, part: \"variant\", context };\n }\n if (onSpan(offset, entry.valueSpan)) {\n return { kind: \"variant-setting\", component, entry, part: \"value\", context };\n }\n }\n return null;\n}\n","import { getDefaultCSSDataProvider } from \"vscode-css-languageservice\";\nimport type { IPropertyData } from \"vscode-css-languageservice\";\n\nlet propertyIndex: Map<string, IPropertyData> | null = null;\n\n/** MDN-sourced CSS property data (the dataset behind VS Code's CSS hover). */\nexport function cssProperty(name: string): IPropertyData | undefined {\n if (!propertyIndex) {\n propertyIndex = new Map();\n for (const property of getDefaultCSSDataProvider().provideProperties()) {\n propertyIndex.set(property.name, property);\n }\n }\n return propertyIndex.get(name);\n}\n\nexport function allCssProperties(): IPropertyData[] {\n cssProperty(\"color\"); // ensure index\n return [...propertyIndex!.values()];\n}\n\nexport function propertyDescription(property: IPropertyData): string {\n const desc = property.description;\n if (!desc) return \"\";\n return typeof desc === \"string\" ? desc : desc.value;\n}\n\n/** Markdown hover card for a CSS property (or custom property). */\nexport function cssPropertyHover(name: string): string | null {\n if (name.startsWith(\"--\")) {\n return `**${name}** — CSS custom property`;\n }\n const property = cssProperty(name);\n if (!property) return null;\n const parts = [`**${name}**`];\n const description = propertyDescription(property);\n if (description) parts.push(description);\n if (property.syntax) parts.push(`\\`\\`\\`\\n${property.syntax}\\n\\`\\`\\``);\n const mdn = property.references?.find((r) => r.name.includes(\"MDN\"));\n if (mdn) parts.push(`[MDN Reference](${mdn.url})`);\n return parts.join(\"\\n\\n\");\n}\n","import type { Hover, Range } from \"vscode-languageserver\";\nimport { MarkupKind } from \"vscode-languageserver\";\nimport type { ArviaFile, ComponentDecl, Span, ThemeEnv } from \"@arviahq/compiler\";\nimport { nodeAtOffset, type AstTarget, type RefWord } from \"./ast-query.js\";\nimport { cssPropertyHover } from \"./cssdata.js\";\nimport type { DocumentAnalysis } from \"./documents.js\";\nimport type { WorkspaceState } from \"./workspace.js\";\n\nexport function getHover(\n analysis: DocumentAnalysis,\n offset: number,\n workspace: WorkspaceState,\n): Hover | null {\n const target = nodeAtOffset(analysis.ast, offset);\n if (!target) return null;\n const markdown = renderHover(target, analysis, workspace);\n if (!markdown) return null;\n return {\n contents: { kind: MarkupKind.Markdown, value: markdown },\n range: rangeOf(analysis, targetSpan(target)),\n };\n}\n\nfunction targetSpan(target: AstTarget): Span {\n switch (target.kind) {\n case \"token-ref\":\n return target.word.span;\n case \"use-recipe\":\n case \"slot-name\":\n case \"conditional-key\":\n case \"token-entry\":\n return target.span;\n case \"component-name\":\n return target.component.nameSpan;\n case \"style-name\":\n return target.style.nameSpan;\n case \"recipe-name\":\n return target.recipe.nameSpan;\n case \"keyframes-name\":\n return target.keyframes.nameSpan;\n case \"variant-name\":\n return target.variant.nameSpan;\n case \"variant-value-name\":\n return target.value.nameSpan;\n case \"variant-setting\":\n return target.part === \"variant\" ? target.entry.variantSpan : target.entry.valueSpan;\n case \"css-property\":\n return target.span;\n }\n}\n\nexport function rangeOf(analysis: DocumentAnalysis, span: Span): Range {\n const range = analysis.index.spanToRange(span);\n return {\n start: { line: range.start.line - 1, character: range.start.col - 1 },\n end: { line: range.end.line - 1, character: range.end.col - 1 },\n };\n}\n\nfunction renderHover(\n target: AstTarget,\n analysis: DocumentAnalysis,\n workspace: WorkspaceState,\n): string | null {\n const env = analysis.env;\n switch (target.kind) {\n case \"token-ref\":\n return target.word.group === \"keyframes\"\n ? keyframesRefHover(target.word, analysis, workspace)\n : tokenRefHover(target.word, target.component, env);\n case \"use-recipe\":\n return recipeHover(target.name, env);\n case \"recipe-name\":\n return recipeHover(target.recipe.name, env);\n case \"token-entry\": {\n const heading =\n target.owner === \"component\"\n ? `**${target.group.name}.${target.name}** — local to \\`${target.component?.name}\\``\n : `**${target.group.name}.${target.name}**`;\n const doc = target.doc ? `\\n\\n${target.doc}` : \"\";\n return `${heading}\\n\\n\\`\\`\\`css\\n${target.value}\\n\\`\\`\\`${doc}`;\n }\n case \"component-name\":\n return componentHover(target.component);\n case \"style-name\":\n return `**style ${target.style.name}** — exported class\\n\\n\\`\\`\\`ts\\nexport const ${target.style.name}: string;\\n\\`\\`\\``;\n case \"keyframes-name\":\n return keyframesDeclHover(target.keyframes.name, analysis.ast);\n case \"variant-name\": {\n const values = target.variant.values.map((v) => v.name).join(\" | \");\n return `**variant ${target.variant.name}** of \\`${target.component.name}\\`\\n\\n\\`\\`\\`ts\\n${target.variant.name}?: ${values || \"never\"}\\n\\`\\`\\``;\n }\n case \"variant-value-name\":\n return `**${target.variant.name}: ${target.value.name}** — variant value of \\`${target.component.name}\\``;\n case \"slot-name\":\n return `**slot ${target.name}** of \\`${target.component.name}\\``;\n case \"variant-setting\": {\n const variant = findVariant(target.component, target.entry.variant);\n if (!variant) return null;\n if (target.part === \"variant\") {\n const values = variant.values.map((v) => v.name).join(\" | \");\n return `**variant ${variant.name}** of \\`${target.component.name}\\`\\n\\n\\`\\`\\`ts\\n${variant.name}?: ${values || \"never\"}\\n\\`\\`\\``;\n }\n return `**${target.entry.variant}: ${target.entry.value}** (${target.context})`;\n }\n case \"conditional-key\": {\n const size =\n target.context === \"responsive\" ? env.breakpoints[target.key] : env.containers[target.key];\n const label = target.context === \"responsive\" ? \"breakpoint\" : \"container size\";\n return size ? `**${label} ${target.key}**\\n\\n\\`\\`\\`css\\nmin-width: ${size}\\n\\`\\`\\`` : null;\n }\n case \"css-property\":\n return cssPropertyHover(target.name);\n }\n}\n\nfunction tokenRefHover(\n word: RefWord,\n component: ComponentDecl | null,\n env: ThemeEnv,\n): string | null {\n // Component-local tokens shadow the theme.\n const local = component ? findLocalToken(component, word.group, word.name) : null;\n if (local) {\n const doc = local.doc ? `\\n\\n${local.doc}` : \"\";\n return `**${word.group}.${word.name}** — local to \\`${component!.name}\\`\\n\\n\\`\\`\\`css\\n${local.value}\\n\\`\\`\\`${doc}`;\n }\n\n const entry = env.tokens[word.group]?.[word.name];\n if (entry === undefined) return null;\n\n let body: string;\n if (typeof entry === \"string\") {\n body = `\\`\\`\\`css\\n${entry}\\n\\`\\`\\``;\n } else {\n const rows = Object.entries(entry)\n .map(([mode, value]) => `| ${mode} | \\`${value}\\` |`)\n .join(\"\\n\");\n body = `| mode | value |\\n| --- | --- |\\n${rows}`;\n }\n\n const doc = env.tokenDocs[word.group]?.[word.name];\n const docLine = doc ? `\\n\\n${doc}` : \"\";\n const cssVar = env.modes ? `\\n\\n\\`var(--arvia-${word.group}-${word.name})\\`` : \"\";\n return `**${word.group}.${word.name}**\\n\\n${body}${docLine}${cssVar}`;\n}\n\nfunction recipeHover(name: string, env: ThemeEnv): string | null {\n const recipe = env.recipes[name];\n if (!recipe) return null;\n const shown = recipe.decls.slice(0, 8);\n const lines = shown.map((d) => `${d.property}: ${d.value};`);\n if (recipe.decls.length > shown.length) {\n lines.push(`/* +${recipe.decls.length - shown.length} more */`);\n }\n const selectorList = recipe.states\n .flatMap((s) => s.selectors)\n .map((sel) => `\\`&${sel.trim()}\\``)\n .join(\", \");\n const states =\n recipe.states.length > 0\n ? `\\n\\n${recipe.states.length} state${recipe.states.length === 1 ? \"\" : \"s\"}: ${selectorList}`\n : \"\";\n return `**recipe ${name}**\\n\\n\\`\\`\\`css\\n${lines.join(\"\\n\")}\\n\\`\\`\\`${states}`;\n}\n\nfunction componentHover(component: ComponentDecl): string {\n const slots = new Set<string>([\"root\"]);\n const variants: string[] = [];\n for (const item of component.items) {\n if (item.kind === \"slots\") {\n for (const slot of item.slots) slots.add(slot.name);\n }\n if (item.kind === \"variants\") {\n for (const variant of item.variants) {\n variants.push(`${variant.name}: ${variant.values.map((v) => v.name).join(\" | \")}`);\n }\n }\n }\n const lines = [\n `slots: ${[...slots].join(\", \")}`,\n ...(variants.length > 0 ? variants : [\"(no variants)\"]),\n ];\n return `**component ${component.name}**\\n\\n\\`\\`\\`\\n${lines.join(\"\\n\")}\\n\\`\\`\\``;\n}\n\nfunction keyframesRefHover(\n word: RefWord,\n analysis: DocumentAnalysis,\n workspace: WorkspaceState,\n): string | null {\n const local = keyframesDeclHover(word.name, analysis.ast);\n if (local) return local;\n const theme = workspace.themeFor(analysis.file);\n return theme ? keyframesDeclHover(word.name, theme.ast) : null;\n}\n\nfunction keyframesDeclHover(name: string, ast: ArviaFile): string | null {\n for (const item of ast.items) {\n if (item.kind !== \"keyframes\" || item.name !== name) continue;\n const steps = item.steps.map((s) => s.selector).join(\" → \");\n return `**keyframes ${name}**\\n\\n\\`\\`\\`\\n${steps || \"(no steps)\"}\\n\\`\\`\\``;\n }\n return null;\n}\n\nfunction findVariant(component: ComponentDecl, name: string) {\n for (const item of component.items) {\n if (item.kind !== \"variants\") continue;\n const variant = item.variants.find((v) => v.name === name);\n if (variant) return variant;\n }\n return undefined;\n}\n\nexport function findLocalToken(\n component: ComponentDecl,\n group: string,\n name: string,\n): { value: string; doc: string | null; span: Span } | null {\n for (const item of component.items) {\n if (item.kind !== \"tokens\") continue;\n for (const g of item.groups) {\n if (g.name !== group) continue;\n for (const entry of g.entries) {\n if (entry.name === name) {\n return { value: entry.value.text, doc: entry.doc, span: entry.nameSpan };\n }\n }\n }\n }\n return null;\n}\n","import type {\n ArviaFile,\n ComponentDecl,\n Declaration,\n RawValue,\n Span,\n StyleItem,\n TokenEntry,\n TokenGroup,\n} from \"@arviahq/compiler\";\n\nexport interface DeclVisit {\n decl: Declaration;\n component: ComponentDecl | null;\n}\n\nexport interface EntryVisit {\n entry: TokenEntry;\n group: TokenGroup;\n owner: \"theme\" | \"component\";\n component: ComponentDecl | null;\n}\n\n/** Every CSS declaration in the file, with its owning component (if any). */\nexport function walkDeclarations(ast: ArviaFile): DeclVisit[] {\n const out: DeclVisit[] = [];\n const visitItems = (items: StyleItem[], component: ComponentDecl | null) => {\n for (const item of items) {\n if (item.kind === \"decl\") out.push({ decl: item, component });\n else if (item.kind === \"state\") {\n for (const decl of item.items) out.push({ decl, component });\n for (const slot of item.slots) {\n for (const decl of slot.items) {\n if (decl.kind === \"decl\") out.push({ decl, component });\n }\n }\n }\n }\n };\n\n for (const top of ast.items) {\n switch (top.kind) {\n case \"global\":\n for (const rule of top.rules) {\n for (const decl of rule.decls) out.push({ decl, component: null });\n }\n break;\n case \"keyframes\":\n for (const step of top.steps) {\n for (const decl of step.decls) out.push({ decl, component: null });\n }\n break;\n case \"recipe\":\n case \"styledecl\":\n visitItems(top.items, null);\n break;\n case \"component\": {\n for (const item of top.items) {\n switch (item.kind) {\n case \"decl\":\n out.push({ decl: item, component: top });\n break;\n case \"base\":\n for (const part of item.body.items) {\n if (part.kind === \"slotblock\") visitItems(part.items, top);\n else visitItems([part], top);\n }\n break;\n case \"slots\":\n for (const slot of item.slots) visitItems(slot.items, top);\n break;\n case \"variants\":\n for (const variant of item.variants) {\n for (const value of variant.values) {\n for (const part of value.body.items) {\n if (part.kind === \"slotblock\") visitItems(part.items, top);\n else visitItems([part], top);\n }\n }\n }\n break;\n case \"compound\":\n for (const slot of item.slots) visitItems(slot.items, top);\n break;\n }\n }\n break;\n }\n }\n }\n return out;\n}\n\n/** Every token entry (theme + component tokens, incl. mode overrides). */\nexport function walkTokenEntries(ast: ArviaFile): EntryVisit[] {\n const out: EntryVisit[] = [];\n const visitGroup = (\n group: TokenGroup,\n owner: \"theme\" | \"component\",\n component: ComponentDecl | null,\n ) => {\n for (const entry of group.entries) out.push({ entry, group, owner, component });\n for (const override of group.overrides) {\n for (const entry of override.entries) out.push({ entry, group, owner, component });\n }\n };\n for (const top of ast.items) {\n if (top.kind === \"theme\") {\n for (const group of top.groups) visitGroup(group, \"theme\", null);\n }\n if (top.kind === \"component\") {\n for (const item of top.items) {\n if (item.kind !== \"tokens\") continue;\n for (const group of item.groups) visitGroup(group, \"component\", top);\n }\n }\n }\n return out;\n}\n\n/** Every RawValue in the file (declaration values + token entry values). */\nexport function walkValues(ast: ArviaFile): { value: RawValue; component: ComponentDecl | null }[] {\n return [\n ...walkDeclarations(ast).map(({ decl, component }) => ({ value: decl.value, component })),\n ...walkTokenEntries(ast).map(({ entry, component }) => ({ value: entry.value, component })),\n ];\n}\n\n/** Every `use Recipe;` statement in the file. */\nexport function walkUses(ast: ArviaFile): { recipe: string; recipeSpan: Span }[] {\n const out: { recipe: string; recipeSpan: Span }[] = [];\n const visitItems = (items: StyleItem[]) => {\n for (const item of items) {\n if (item.kind === \"use\") out.push({ recipe: item.recipe, recipeSpan: item.recipeSpan });\n }\n };\n for (const top of ast.items) {\n switch (top.kind) {\n case \"recipe\":\n case \"styledecl\":\n visitItems(top.items);\n break;\n case \"component\":\n for (const item of top.items) {\n if (item.kind === \"use\") out.push({ recipe: item.recipe, recipeSpan: item.recipeSpan });\n if (item.kind === \"base\") {\n for (const part of item.body.items) {\n if (part.kind === \"slotblock\") visitItems(part.items);\n else visitItems([part]);\n }\n }\n if (item.kind === \"slots\") {\n for (const slot of item.slots) visitItems(slot.items);\n }\n if (item.kind === \"variants\") {\n for (const variant of item.variants) {\n for (const value of variant.values) {\n for (const part of value.body.items) {\n if (part.kind === \"slotblock\") visitItems(part.items);\n else visitItems([part]);\n }\n }\n }\n }\n if (item.kind === \"compound\") {\n for (const slot of item.slots) visitItems(slot.items);\n }\n }\n break;\n }\n }\n return out;\n}\n","import type { ColorInformation, ColorPresentation, Color } from \"vscode-languageserver\";\nimport type { DocumentAnalysis } from \"./documents.js\";\nimport { rangeOf } from \"./hover.js\";\nimport { walkValues } from \"./walk.js\";\n\nconst HEX_RE = /^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;\nconst FN_RE = /^(rgba?|hsla?)\\(([^)]*)\\)$/;\n\nconst to255 = (v: number) => Math.round(v * 255);\nconst rgbChannel = (raw: string) =>\n raw.endsWith(\"%\") ? parseFloat(raw) / 100 : parseFloat(raw) / 255;\n\n/** Inline color swatches for literal color values (hex / rgb / hsl). */\nexport function getDocumentColors(analysis: DocumentAnalysis): ColorInformation[] {\n const out: ColorInformation[] = [];\n for (const { value } of walkValues(analysis.ast)) {\n for (const word of value.words) {\n if (word.kind !== \"literal\") continue;\n const color = parseColor(word.text);\n if (color) out.push({ range: rangeOf(analysis, word.span), color });\n }\n }\n return out;\n}\n\nexport function getColorPresentations(\n color: Color,\n span: { start: number; end: number },\n): ColorPresentation[] {\n void span;\n const hex2 = (v: number) => to255(v).toString(16).padStart(2, \"0\");\n const hex =\n color.alpha < 1\n ? `#${hex2(color.red)}${hex2(color.green)}${hex2(color.blue)}${hex2(color.alpha)}`\n : `#${hex2(color.red)}${hex2(color.green)}${hex2(color.blue)}`;\n const rgb =\n color.alpha < 1\n ? `rgba(${to255(color.red)}, ${to255(color.green)}, ${to255(color.blue)}, ${Math.round(color.alpha * 100) / 100})`\n : `rgb(${to255(color.red)}, ${to255(color.green)}, ${to255(color.blue)})`;\n return [{ label: hex }, { label: rgb }];\n}\n\nexport function parseColor(text: string): Color | null {\n if (HEX_RE.test(text)) return parseHex(text);\n const fn = FN_RE.exec(text);\n if (fn) {\n const args = fn[2]!\n .split(/[,\\s/]+/)\n .map((a) => a.trim())\n .filter(Boolean);\n if (args.length < 3) return null;\n if (fn[1]!.startsWith(\"rgb\")) return parseRgbArgs(args);\n return parseHslArgs(args);\n }\n return null;\n}\n\nfunction parseHex(text: string): Color {\n const hex = text.slice(1);\n const wide = hex.length >= 6;\n const step = wide ? 2 : 1;\n const channel = (i: number) => {\n const part = hex.slice(i * step, i * step + step);\n const value = parseInt(wide ? part : part + part, 16);\n return value / 255;\n };\n const hasAlpha = hex.length === 4 || hex.length === 8;\n return {\n red: channel(0),\n green: channel(1),\n blue: channel(2),\n alpha: hasAlpha ? channel(3) : 1,\n };\n}\n\nfunction parseRgbArgs(args: string[]): Color | null {\n const [r, g, b] = [rgbChannel(args[0]!), rgbChannel(args[1]!), rgbChannel(args[2]!)];\n if ([r, g, b].some((v) => Number.isNaN(v))) return null;\n const alpha = args[3] !== undefined ? parseAlpha(args[3]) : 1;\n return { red: clamp01(r), green: clamp01(g), blue: clamp01(b), alpha };\n}\n\nfunction parseHslArgs(args: string[]): Color | null {\n const h = parseFloat(args[0]!);\n const s = parseFloat(args[1]!) / 100;\n const l = parseFloat(args[2]!) / 100;\n if ([h, s, l].some((v) => Number.isNaN(v))) return null;\n const alpha = args[3] !== undefined ? parseAlpha(args[3]) : 1;\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const hp = (((h % 360) + 360) % 360) / 60;\n const x = c * (1 - Math.abs((hp % 2) - 1));\n const [r1, g1, b1] =\n hp < 1\n ? [c, x, 0]\n : hp < 2\n ? [x, c, 0]\n : hp < 3\n ? [0, c, x]\n : hp < 4\n ? [0, x, c]\n : hp < 5\n ? [x, 0, c]\n : [c, 0, x];\n const m = l - c / 2;\n return { red: clamp01(r1 + m), green: clamp01(g1 + m), blue: clamp01(b1 + m), alpha };\n}\n\nfunction parseAlpha(raw: string): number {\n return clamp01(raw.endsWith(\"%\") ? parseFloat(raw) / 100 : parseFloat(raw));\n}\n\nfunction clamp01(v: number): number {\n return Math.max(0, Math.min(1, v));\n}\n","import type { CompletionItem } from \"vscode-languageserver\";\nimport { CompletionItemKind } from \"vscode-languageserver\";\nimport type { ComponentDecl, ThemeEnv } from \"@arviahq/compiler\";\nimport { allCssProperties, propertyDescription } from \"./cssdata.js\";\nimport type { DocumentAnalysis } from \"./documents.js\";\n\nconst SECTION_KEYWORDS = [\n \"base\",\n \"slots\",\n \"variants\",\n \"defaults\",\n \"responsive\",\n \"container\",\n \"compound\",\n \"tokens\",\n];\nconst TOP_KEYWORDS = [\"theme\", \"global\", \"recipe\", \"keyframes\", \"style\", \"component\"];\nconst DEFAULT_GROUPS = [\n \"color\",\n \"space\",\n \"radius\",\n \"font\",\n \"breakpoint\",\n \"container\",\n \"duration\",\n \"easing\",\n];\n\nfunction item(label: string, kind: CompletionItemKind, detail?: string): CompletionItem {\n return { label, kind, detail };\n}\n\nfunction tokenKind(group: string, value: string): CompletionItemKind {\n return group === \"color\" || /^#|rgb|hsl|oklch/.test(value)\n ? CompletionItemKind.Color\n : CompletionItemKind.Constant;\n}\n\n/** Returns the component whose span contains the offset, if any. */\nfunction enclosingComponent(analysis: DocumentAnalysis, offset: number): ComponentDecl | null {\n for (const top of analysis.ast.items) {\n if (top.kind === \"component\" && offset >= top.span.start && offset <= top.span.end) {\n return top;\n }\n }\n return null;\n}\n\nfunction localTokenGroups(component: ComponentDecl | null): Map<string, Map<string, string>> {\n const groups = new Map<string, Map<string, string>>();\n if (!component) return groups;\n for (const part of component.items) {\n if (part.kind !== \"tokens\") continue;\n for (const group of part.groups) {\n const bucket = groups.get(group.name) ?? new Map<string, string>();\n for (const entry of group.entries) bucket.set(entry.name, entry.value.text);\n groups.set(group.name, bucket);\n }\n }\n return groups;\n}\n\nfunction tokenValueOf(env: ThemeEnv, group: string, name: string): string {\n const entry = env.tokens[group]?.[name];\n if (entry === undefined) return \"\";\n if (typeof entry === \"string\") return entry;\n return Object.entries(entry)\n .map(([mode, value]) => `${mode}: ${value}`)\n .join(\", \");\n}\n\nexport function getCompletions(analysis: DocumentAnalysis, offset: number): CompletionItem[] {\n const source = analysis.source;\n const env = analysis.env;\n const before = source.slice(0, offset);\n const lineStart = before.lastIndexOf(\"\\n\") + 1;\n const linePrefix = before.slice(lineStart);\n const component = enclosingComponent(analysis, offset);\n const locals = localTokenGroups(component);\n\n const items: CompletionItem[] = [];\n\n // `<group>.` → token names with values.\n const groupDot = linePrefix.match(/([A-Za-z_][A-Za-z0-9_-]*)\\.$/);\n if (groupDot) {\n const group = groupDot[1]!;\n const localBucket = locals.get(group);\n if (localBucket) {\n for (const [name, value] of localBucket) {\n items.push({\n label: name,\n kind: tokenKind(group, value),\n detail: `${value} — local to ${component!.name}`,\n });\n }\n }\n const bucket = env.tokens[group];\n if (bucket) {\n for (const name of Object.keys(bucket)) {\n if (localBucket?.has(name)) continue;\n const value = tokenValueOf(env, group, name);\n const doc = env.tokenDocs[group]?.[name];\n items.push({\n label: name,\n kind: tokenKind(group, value),\n detail: value,\n documentation: doc,\n });\n }\n }\n if (group === \"keyframes\") {\n for (const name of Object.keys(env.keyframes)) {\n items.push(item(name, CompletionItemKind.Event, \"keyframes\"));\n }\n }\n if (items.length > 0) return items;\n }\n\n // `use ` → recipes from the merged env (file + theme).\n if (/\\buse\\s+$/.test(linePrefix)) {\n for (const [name, recipe] of Object.entries(env.recipes)) {\n items.push(item(name, CompletionItemKind.Reference, `recipe — ${recipe.decls.length} decls`));\n }\n return items;\n }\n\n // `@` inside token groups → declared mode names.\n if (linePrefix.endsWith(\"@\")) {\n for (const mode of env.modes ?? []) {\n items.push(item(mode, CompletionItemKind.EnumMember, \"theme mode\"));\n }\n return items;\n }\n\n const atBlockStart = /^\\s*$/.test(linePrefix) && before.trimEnd().endsWith(\"{\");\n if (atBlockStart) {\n if (/\\b(theme|tokens)\\s*\\{\\s*$/.test(before.slice(-40))) {\n if (/\\btheme\\s*\\{\\s*$/.test(before.slice(-40))) {\n items.push(item(\"modes:\", CompletionItemKind.Keyword, \"light | dark;\"));\n }\n const groups = new Set([...DEFAULT_GROUPS, ...Object.keys(env.tokens)]);\n for (const group of groups) {\n items.push(item(group, CompletionItemKind.Module, \"token group\"));\n }\n }\n if (/\\bcomponent\\s+[\\w$]+\\s*\\{\\s*$/.test(before)) {\n for (const kw of SECTION_KEYWORDS) {\n items.push(item(kw, CompletionItemKind.Keyword));\n }\n }\n if (/\\b(defaults|compound)\\s*\\{\\s*$/.test(before.slice(-24)) && component) {\n for (const variant of variantsOf(component)) {\n items.push(item(variant.name, CompletionItemKind.Enum, variant.values.join(\" | \")));\n }\n }\n if (/\\bresponsive\\s*\\{\\s*$/.test(before.slice(-20))) {\n for (const [bp, size] of Object.entries(env.breakpoints)) {\n items.push(item(bp, CompletionItemKind.Variable, `min-width: ${size}`));\n }\n }\n if (/\\bcontainer\\s*\\{\\s*$/.test(before.slice(-20))) {\n for (const [cq, size] of Object.entries(env.containers)) {\n items.push(item(cq, CompletionItemKind.Variable, `min-width: ${size}`));\n }\n }\n if (items.length > 0) return items;\n }\n\n // `variant: ` inside defaults/compound/responsive/container → value names.\n const settingMatch = linePrefix.match(/^\\s*([A-Za-z_][\\w$-]*)\\s*:\\s*$/);\n if (settingMatch && component) {\n const variant = variantsOf(component).find((v) => v.name === settingMatch[1]);\n if (variant) {\n for (const value of variant.values) {\n items.push(item(value, CompletionItemKind.EnumMember, `value of ${variant.name}`));\n }\n return items;\n }\n }\n\n // Value position: token groups + CSS keywords.\n if (/:\\s*[^;]*$/.test(linePrefix)) {\n const groups = new Set([...Object.keys(env.tokens), ...locals.keys()]);\n for (const group of groups) {\n items.push(item(group, CompletionItemKind.Module, \"token group\"));\n }\n if (Object.keys(env.keyframes).length > 0) {\n items.push(item(\"keyframes\", CompletionItemKind.Module, \"animations\"));\n }\n return items;\n }\n\n // Property/keyword position: the full MDN-sourced property list.\n for (const prop of allCssProperties()) {\n items.push({\n label: prop.name,\n kind: CompletionItemKind.Property,\n detail: prop.syntax,\n documentation: propertyDescription(prop) || undefined,\n });\n }\n if (items.length > 0 && component) return items;\n\n for (const kw of [...TOP_KEYWORDS, ...SECTION_KEYWORDS, \"use\"]) {\n items.push(item(kw, CompletionItemKind.Keyword));\n }\n return items;\n}\n\nfunction variantsOf(component: ComponentDecl): { name: string; values: string[] }[] {\n const out: { name: string; values: string[] }[] = [];\n for (const part of component.items) {\n if (part.kind !== \"variants\") continue;\n for (const variant of part.variants) {\n out.push({ name: variant.name, values: variant.values.map((v) => v.name) });\n }\n }\n return out;\n}\n","import { pathToFileURL } from \"node:url\";\nimport type { Location } from \"vscode-languageserver\";\nimport type { ArviaFile, LineIndex, Span } from \"@arviahq/compiler\";\nimport { nodeAtOffset } from \"./ast-query.js\";\nimport type { DocumentAnalysis } from \"./documents.js\";\nimport { findLocalToken } from \"./hover.js\";\nimport type { WorkspaceState } from \"./workspace.js\";\n\nexport function getDefinition(\n analysis: DocumentAnalysis,\n offset: number,\n workspace: WorkspaceState,\n): Location | null {\n const target = nodeAtOffset(analysis.ast, offset);\n if (!target) return null;\n\n const theme = workspace.themeFor(analysis.file);\n const isThemeDoc = theme !== null && theme.path === analysis.file;\n\n const local = (span: Span): Location => locationFor(analysis.file, analysis.index, span);\n const inTheme = (span: Span): Location | null =>\n theme && !isThemeDoc ? locationFor(theme.path, theme.index, span) : null;\n\n switch (target.kind) {\n case \"token-ref\": {\n if (target.word.group === \"keyframes\") {\n const own = findKeyframes(analysis.ast, target.word.name);\n if (own) return local(own);\n const themed = theme && findKeyframes(theme.ast, target.word.name);\n return themed ? inTheme(themed) : null;\n }\n // Component-local tokens shadow the theme.\n if (target.component) {\n const localToken = findLocalToken(target.component, target.word.group, target.word.name);\n if (localToken) return local(localToken.span);\n }\n const own = findThemeEntry(analysis.ast, target.word.group, target.word.name);\n if (own) return local(own);\n const themed = theme && findThemeEntry(theme.ast, target.word.group, target.word.name);\n return themed ? inTheme(themed) : null;\n }\n case \"use-recipe\": {\n const own = findRecipe(analysis.ast, target.name);\n if (own) return local(own);\n const themed = theme && findRecipe(theme.ast, target.name);\n return themed ? inTheme(themed) : null;\n }\n case \"variant-setting\": {\n const variant = findVariantSpans(target.component, target.entry.variant);\n if (!variant) return null;\n if (target.part === \"variant\") return local(variant.nameSpan);\n const value = variant.values.find((v) => v.name === target.entry.value);\n return value ? local(value.nameSpan) : local(variant.nameSpan);\n }\n case \"conditional-key\": {\n const group = target.context === \"responsive\" ? \"breakpoint\" : \"container\";\n const own = findThemeEntry(analysis.ast, group, target.key);\n if (own) return local(own);\n const themed = theme && findThemeEntry(theme.ast, group, target.key);\n return themed ? inTheme(themed) : null;\n }\n default:\n return null;\n }\n}\n\nfunction locationFor(file: string, index: LineIndex, span: Span): Location {\n const range = index.spanToRange(span);\n return {\n uri: pathToFileURL(file).toString(),\n range: {\n start: { line: range.start.line - 1, character: range.start.col - 1 },\n end: { line: range.end.line - 1, character: range.end.col - 1 },\n },\n };\n}\n\nfunction findThemeEntry(ast: ArviaFile, group: string, name: string): Span | null {\n for (const item of ast.items) {\n if (item.kind !== \"theme\") continue;\n for (const g of item.groups) {\n if (g.name !== group) continue;\n for (const entry of g.entries) {\n if (entry.name === name) return entry.nameSpan;\n }\n }\n }\n return null;\n}\n\nfunction findRecipe(ast: ArviaFile, name: string): Span | null {\n for (const item of ast.items) {\n if (item.kind === \"recipe\" && item.name === name) return item.nameSpan;\n }\n return null;\n}\n\nfunction findKeyframes(ast: ArviaFile, name: string): Span | null {\n for (const item of ast.items) {\n if (item.kind === \"keyframes\" && item.name === name) return item.nameSpan;\n }\n return null;\n}\n\nfunction findVariantSpans(\n component: import(\"@arviahq/compiler\").ComponentDecl,\n name: string,\n): { nameSpan: Span; values: { name: string; nameSpan: Span }[] } | null {\n for (const item of component.items) {\n if (item.kind !== \"variants\") continue;\n const variant = item.variants.find((v) => v.name === name);\n if (variant) {\n return {\n nameSpan: variant.nameSpan,\n values: variant.values.map((v) => ({ name: v.name, nameSpan: v.nameSpan })),\n };\n }\n }\n return null;\n}\n","import type { Diagnostic as LspDiagnostic } from \"vscode-languageserver\";\nimport type { DocumentAnalysis } from \"./documents.js\";\n\n/** Maps compiler diagnostics to LSP diagnostics with full (start+end) ranges. */\nexport function toLspDiagnostics(analysis: DocumentAnalysis): LspDiagnostic[] {\n return analysis.diagnostics.map((d) => {\n const range = analysis.index.spanToRange(d.span);\n return {\n severity: d.severity === \"error\" ? 1 : 2,\n range: {\n start: { line: range.start.line - 1, character: range.start.col - 1 },\n end: { line: range.end.line - 1, character: range.end.col - 1 },\n },\n message: d.hint ? `${d.message} (${d.hint})` : d.message,\n source: \"arvia\",\n code: d.code,\n };\n });\n}\n","import { analyze, LineIndex, type AnalyzeResult } from \"@arviahq/compiler\";\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport type { WorkspaceState } from \"./workspace.js\";\n\nexport interface DocumentAnalysis extends AnalyzeResult {\n index: LineIndex;\n file: string;\n source: string;\n}\n\nexport function fileForUri(uri: string): string {\n return uri.startsWith(\"file://\") ? decodeURIComponent(uri.slice(7)) : uri;\n}\n\n/** Per-document analysis cache keyed by document version. */\nexport class DocumentStore {\n private cache = new Map<string, { version: number; analysis: DocumentAnalysis }>();\n\n constructor(private readonly workspaceFor: (uri: string) => WorkspaceState) {}\n\n analysisFor(doc: TextDocument): DocumentAnalysis {\n const cached = this.cache.get(doc.uri);\n if (cached && cached.version === doc.version) return cached.analysis;\n const file = fileForUri(doc.uri);\n const source = doc.getText();\n const env = this.workspaceFor(doc.uri).envFor(file);\n const result = analyze(source, { filename: file, env });\n const analysis: DocumentAnalysis = {\n ...result,\n index: new LineIndex(source),\n file,\n source,\n };\n this.cache.set(doc.uri, { version: doc.version, analysis });\n return analysis;\n }\n\n invalidate(uri: string): void {\n this.cache.delete(uri);\n }\n\n invalidateAll(): void {\n this.cache.clear();\n }\n}\n","import type { InlayHint, Range } from \"vscode-languageserver\";\nimport { InlayHintKind } from \"vscode-languageserver\";\nimport type { ComponentDecl } from \"@arviahq/compiler\";\nimport type { DocumentAnalysis } from \"./documents.js\";\nimport { findLocalToken } from \"./hover.js\";\nimport { walkDeclarations } from \"./walk.js\";\n\nconst MAX_HINT_LENGTH = 28;\n\n/** `padding: space.4` → ghost text ` = 16px` after the ref. */\nexport function getInlayHints(analysis: DocumentAnalysis, range: Range): InlayHint[] {\n const startOffset = analysis.index.offsetAt({\n line: range.start.line + 1,\n col: range.start.character + 1,\n });\n const endOffset = analysis.index.offsetAt({\n line: range.end.line + 1,\n col: range.end.character + 1,\n });\n\n const hints: InlayHint[] = [];\n for (const { decl, component } of walkDeclarations(analysis.ast)) {\n for (const word of decl.value.words) {\n if (word.kind !== \"ref\" || word.group === \"keyframes\") continue;\n if (word.span.end < startOffset || word.span.start > endOffset) continue;\n const resolved = resolveForHint(analysis, word.group, word.name, component);\n if (!resolved || resolved === word.text) continue;\n const position = analysis.index.positionAt(word.span.end);\n hints.push({\n position: { line: position.line - 1, character: position.col - 1 },\n label: ` = ${truncate(resolved)}`,\n kind: InlayHintKind.Type,\n paddingLeft: false,\n });\n }\n }\n return hints;\n}\n\nfunction resolveForHint(\n analysis: DocumentAnalysis,\n group: string,\n name: string,\n component: ComponentDecl | null,\n): string | null {\n if (component) {\n const local = findLocalToken(component, group, name);\n if (local) return local.value;\n }\n const entry = analysis.env.tokens[group]?.[name];\n if (entry === undefined) return null;\n if (typeof entry === \"string\") return entry;\n const modes = analysis.env.modes;\n const first = modes?.[0];\n return (first && entry[first]) ?? Object.values(entry)[0] ?? null;\n}\n\nfunction truncate(value: string): string {\n return value.length > MAX_HINT_LENGTH ? `${value.slice(0, MAX_HINT_LENGTH - 1)}…` : value;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { Range, TextEdit, WorkspaceEdit } from \"vscode-languageserver\";\nimport { LineIndex, parse, type ArviaFile, type ComponentDecl, type Span } from \"@arviahq/compiler\";\nimport { nodeAtOffset } from \"./ast-query.js\";\nimport type { DocumentAnalysis } from \"./documents.js\";\nimport { findLocalToken, rangeOf } from \"./hover.js\";\nimport { walkDeclarations, walkTokenEntries, walkUses, walkValues } from \"./walk.js\";\nimport type { WorkspaceState } from \"./workspace.js\";\n\nconst NAME_RE = /^[A-Za-z_][A-Za-z0-9_-]*$/;\nconst TOKEN_NAME_RE = /^[A-Za-z0-9_][A-Za-z0-9_-]*$/;\n\ntype RenameIdentity =\n | { kind: \"token\"; group: string; name: string; component: ComponentDecl | null }\n | { kind: \"recipe\"; name: string }\n | { kind: \"keyframes\"; name: string }\n | { kind: \"variant\"; component: ComponentDecl; name: string }\n | { kind: \"variant-value\"; component: ComponentDecl; variant: string; name: string }\n | { kind: \"slot\"; component: ComponentDecl; name: string };\n\nexport function prepareRename(\n analysis: DocumentAnalysis,\n offset: number,\n): { range: Range; placeholder: string } | null {\n const resolved = identityAt(analysis, offset);\n if (!resolved) return null;\n return { range: rangeOf(analysis, resolved.span), placeholder: resolved.placeholder };\n}\n\nexport function getRenameEdits(\n analysis: DocumentAnalysis,\n offset: number,\n newName: string,\n workspace: WorkspaceState,\n contentFor: (file: string) => string | null,\n): WorkspaceEdit | null {\n const resolved = identityAt(analysis, offset);\n if (!resolved) return null;\n const { identity } = resolved;\n\n const validName = identity.kind === \"token\" ? TOKEN_NAME_RE : NAME_RE;\n if (!validName.test(newName)) return null;\n\n const changes: Record<string, TextEdit[]> = {};\n const addEdits = (file: string, source: string, ast: ArviaFile) => {\n const index = new LineIndex(source);\n const edits = editsInFile(ast, identity, newName);\n if (edits.length === 0) return;\n const uri = pathToFileURL(file).toString();\n changes[uri] = edits.map(({ span, text }) => ({\n range: lspRange(index, span),\n newText: text,\n }));\n };\n\n // Current document first.\n addEdits(analysis.file, analysis.source, analysis.ast);\n\n // Shared-theme identities propagate to every file that resolves to it.\n if (crossFileKinds.has(identity.kind) && isSharedThemeMember(analysis, workspace)) {\n const themePath = path.resolve(analysis.file);\n for (const file of listArvFiles(workspace.root)) {\n const resolvedFile = path.resolve(file);\n if (resolvedFile === path.resolve(analysis.file)) continue;\n if (workspace.themePathFor(resolvedFile) !== themePath) continue;\n const source = contentFor(resolvedFile);\n if (source === null) continue;\n addEdits(resolvedFile, source, parse(source, resolvedFile).ast);\n }\n }\n\n return Object.keys(changes).length > 0 ? { changes } : null;\n}\n\nconst crossFileKinds = new Set([\"token\", \"recipe\", \"keyframes\"]);\n\n/** True when the current document is a theme other files can resolve to. */\nfunction isSharedThemeMember(analysis: DocumentAnalysis, workspace: WorkspaceState): boolean {\n return workspace.themePathFor(analysis.file) === path.resolve(analysis.file);\n}\n\nfunction identityAt(\n analysis: DocumentAnalysis,\n offset: number,\n): { identity: RenameIdentity; span: Span; placeholder: string } | null {\n const target = nodeAtOffset(analysis.ast, offset);\n if (!target) return null;\n switch (target.kind) {\n case \"token-ref\": {\n if (target.word.group === \"keyframes\") {\n return {\n identity: { kind: \"keyframes\", name: target.word.name },\n span: target.word.span,\n placeholder: target.word.name,\n };\n }\n const local = target.component\n ? findLocalToken(target.component, target.word.group, target.word.name)\n : null;\n return {\n identity: {\n kind: \"token\",\n group: target.word.group,\n name: target.word.name,\n component: local ? target.component : null,\n },\n span: target.word.span,\n placeholder: target.word.name,\n };\n }\n case \"token-entry\":\n return {\n identity: {\n kind: \"token\",\n group: target.group.name,\n name: target.name,\n component: target.owner === \"component\" ? target.component : null,\n },\n span: target.span,\n placeholder: target.name,\n };\n case \"use-recipe\":\n return {\n identity: { kind: \"recipe\", name: target.name },\n span: target.span,\n placeholder: target.name,\n };\n case \"recipe-name\":\n return {\n identity: { kind: \"recipe\", name: target.recipe.name },\n span: target.recipe.nameSpan,\n placeholder: target.recipe.name,\n };\n case \"keyframes-name\":\n return {\n identity: { kind: \"keyframes\", name: target.keyframes.name },\n span: target.keyframes.nameSpan,\n placeholder: target.keyframes.name,\n };\n case \"variant-name\":\n return {\n identity: { kind: \"variant\", component: target.component, name: target.variant.name },\n span: target.variant.nameSpan,\n placeholder: target.variant.name,\n };\n case \"variant-value-name\":\n return {\n identity: {\n kind: \"variant-value\",\n component: target.component,\n variant: target.variant.name,\n name: target.value.name,\n },\n span: target.value.nameSpan,\n placeholder: target.value.name,\n };\n case \"variant-setting\": {\n if (target.part === \"variant\") {\n return {\n identity: { kind: \"variant\", component: target.component, name: target.entry.variant },\n span: target.entry.variantSpan,\n placeholder: target.entry.variant,\n };\n }\n return {\n identity: {\n kind: \"variant-value\",\n component: target.component,\n variant: target.entry.variant,\n name: target.entry.value,\n },\n span: target.entry.valueSpan,\n placeholder: target.entry.value,\n };\n }\n case \"slot-name\":\n return {\n identity: { kind: \"slot\", component: target.component, name: target.name },\n span: target.span,\n placeholder: target.name,\n };\n default:\n // Components and styles are TS exports — renaming them here would\n // silently break .tsx imports, so it is not offered.\n return null;\n }\n}\n\nfunction editsInFile(\n ast: ArviaFile,\n identity: RenameIdentity,\n newName: string,\n): { span: Span; text: string }[] {\n const edits: { span: Span; text: string }[] = [];\n switch (identity.kind) {\n case \"token\": {\n const scoped = identity.component;\n for (const visit of walkTokenEntries(ast)) {\n if (visit.group.name !== identity.group || visit.entry.name !== identity.name) continue;\n if (scoped ? visit.component !== scoped : visit.owner !== \"theme\") continue;\n edits.push({ span: visit.entry.nameSpan, text: newName });\n }\n for (const { decl, component } of walkDeclarations(ast)) {\n for (const word of decl.value.words) {\n if (word.kind !== \"ref\" || word.group !== identity.group || word.name !== identity.name) {\n continue;\n }\n const shadowed = component\n ? findLocalToken(component, identity.group, identity.name) !== null\n : false;\n if (scoped ? component !== scoped : shadowed) continue;\n edits.push({ span: word.span, text: `${identity.group}.${newName}` });\n }\n }\n // Theme alias values reference tokens too.\n if (!scoped) {\n for (const visit of walkTokenEntries(ast)) {\n for (const word of visit.entry.value.words) {\n if (\n word.kind === \"ref\" &&\n word.group === identity.group &&\n word.name === identity.name\n ) {\n edits.push({ span: word.span, text: `${identity.group}.${newName}` });\n }\n }\n }\n }\n break;\n }\n case \"recipe\": {\n for (const item of ast.items) {\n if (item.kind === \"recipe\" && item.name === identity.name) {\n edits.push({ span: item.nameSpan, text: newName });\n }\n }\n for (const use of walkUses(ast)) {\n if (use.recipe === identity.name) edits.push({ span: use.recipeSpan, text: newName });\n }\n break;\n }\n case \"keyframes\": {\n for (const item of ast.items) {\n if (item.kind === \"keyframes\" && item.name === identity.name) {\n edits.push({ span: item.nameSpan, text: newName });\n }\n }\n for (const { value } of walkValues(ast)) {\n for (const word of value.words) {\n if (word.kind === \"ref\" && word.group === \"keyframes\" && word.name === identity.name) {\n edits.push({ span: word.span, text: `keyframes.${newName}` });\n }\n }\n }\n break;\n }\n case \"variant\":\n case \"variant-value\":\n case \"slot\": {\n const component = findComponent(ast, identity.component.name);\n if (component) edits.push(...componentEdits(component, identity, newName));\n break;\n }\n }\n return edits;\n}\n\nfunction componentEdits(\n component: ComponentDecl,\n identity: Extract<RenameIdentity, { kind: \"variant\" | \"variant-value\" | \"slot\" }>,\n newName: string,\n): { span: Span; text: string }[] {\n const edits: { span: Span; text: string }[] = [];\n const settingEntries = (\n entries: { variant: string; variantSpan: Span; value: string; valueSpan: Span }[],\n ) => {\n for (const entry of entries) {\n if (identity.kind === \"variant\" && entry.variant === identity.name) {\n edits.push({ span: entry.variantSpan, text: newName });\n }\n if (\n identity.kind === \"variant-value\" &&\n entry.variant === identity.variant &&\n entry.value === identity.name\n ) {\n edits.push({ span: entry.valueSpan, text: newName });\n }\n }\n };\n const slotName = (name: string, span: Span) => {\n if (identity.kind === \"slot\" && name === identity.name) edits.push({ span, text: newName });\n };\n\n for (const item of component.items) {\n switch (item.kind) {\n case \"slots\":\n for (const slot of item.slots) slotName(slot.name, slot.nameSpan);\n break;\n case \"base\":\n for (const part of item.body.items) {\n if (part.kind === \"slotblock\") slotName(part.name, part.nameSpan);\n if (part.kind === \"state\") {\n for (const slot of part.slots) slotName(slot.name, slot.nameSpan);\n }\n }\n break;\n case \"variants\":\n for (const variant of item.variants) {\n if (identity.kind === \"variant\" && variant.name === identity.name) {\n edits.push({ span: variant.nameSpan, text: newName });\n }\n for (const value of variant.values) {\n if (\n identity.kind === \"variant-value\" &&\n variant.name === identity.variant &&\n value.name === identity.name\n ) {\n edits.push({ span: value.nameSpan, text: newName });\n }\n for (const part of value.body.items) {\n if (part.kind === \"slotblock\") slotName(part.name, part.nameSpan);\n if (part.kind === \"state\") {\n for (const slot of part.slots) slotName(slot.name, slot.nameSpan);\n }\n }\n }\n }\n break;\n case \"defaults\":\n settingEntries(item.entries);\n break;\n case \"responsive\":\n case \"container\":\n for (const entry of item.entries) settingEntries(entry.variants);\n break;\n case \"compound\":\n settingEntries(item.matchers);\n for (const slot of item.slots) slotName(slot.name, slot.nameSpan);\n break;\n }\n }\n return edits;\n}\n\nfunction findComponent(ast: ArviaFile, name: string): ComponentDecl | null {\n for (const item of ast.items) {\n if (item.kind === \"component\" && item.name === name) return item;\n }\n return null;\n}\n\nfunction lspRange(index: LineIndex, span: Span): Range {\n const range = index.spanToRange(span);\n return {\n start: { line: range.start.line - 1, character: range.start.col - 1 },\n end: { line: range.end.line - 1, character: range.end.col - 1 },\n };\n}\n\nconst SKIP_DIRS = new Set([\"node_modules\", \"dist\", \".git\", \"build\", \"coverage\"]);\n\nexport function listArvFiles(root: string): string[] {\n const out: string[] = [];\n const walk = (dir: string) => {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (!SKIP_DIRS.has(entry.name)) walk(path.join(dir, entry.name));\n } else if (entry.name.endsWith(\".arv\")) {\n out.push(path.join(dir, entry.name));\n }\n }\n };\n walk(root);\n return out;\n}\n\nexport function readFileOr(file: string): string | null {\n try {\n return fs.readFileSync(file, \"utf8\");\n } catch {\n return null;\n }\n}\n","import type { DocumentSymbol } from \"vscode-languageserver\";\nimport { SymbolKind } from \"vscode-languageserver\";\nimport type { Span } from \"@arviahq/compiler\";\nimport type { DocumentAnalysis } from \"./documents.js\";\n\nexport function getDocumentSymbols(analysis: DocumentAnalysis): DocumentSymbol[] {\n const symbol = (\n name: string,\n kind: SymbolKind,\n span: Span,\n nameSpan: Span,\n children?: DocumentSymbol[],\n detail?: string,\n ): DocumentSymbol => {\n const full = analysis.index.spanToRange(span);\n const sel = analysis.index.spanToRange(nameSpan);\n return {\n name,\n kind,\n detail,\n range: {\n start: { line: full.start.line - 1, character: full.start.col - 1 },\n end: { line: full.end.line - 1, character: full.end.col - 1 },\n },\n selectionRange: {\n start: { line: sel.start.line - 1, character: sel.start.col - 1 },\n end: { line: sel.end.line - 1, character: sel.end.col - 1 },\n },\n children,\n };\n };\n\n const out: DocumentSymbol[] = [];\n for (const item of analysis.ast.items) {\n switch (item.kind) {\n case \"theme\": {\n const groups = item.groups.map((group) =>\n symbol(\n group.name,\n SymbolKind.Namespace,\n group.span,\n group.nameSpan,\n group.entries.map((entry) =>\n symbol(\n entry.name,\n SymbolKind.Constant,\n entry.span,\n entry.nameSpan,\n undefined,\n entry.value.text,\n ),\n ),\n ),\n );\n out.push(symbol(\"theme\", SymbolKind.Module, item.span, item.span, groups));\n break;\n }\n case \"global\":\n out.push(symbol(\"global\", SymbolKind.Module, item.span, item.span));\n break;\n case \"recipe\":\n out.push(\n symbol(item.name, SymbolKind.Function, item.span, item.nameSpan, undefined, \"recipe\"),\n );\n break;\n case \"keyframes\":\n out.push(\n symbol(item.name, SymbolKind.Event, item.span, item.nameSpan, undefined, \"keyframes\"),\n );\n break;\n case \"styledecl\":\n out.push(\n symbol(item.name, SymbolKind.Constant, item.span, item.nameSpan, undefined, \"style\"),\n );\n break;\n case \"component\": {\n const children: DocumentSymbol[] = [];\n for (const part of item.items) {\n if (part.kind === \"slots\") {\n for (const slot of part.slots) {\n children.push(\n symbol(slot.name, SymbolKind.Field, slot.span, slot.nameSpan, undefined, \"slot\"),\n );\n }\n }\n if (part.kind === \"variants\") {\n for (const variant of part.variants) {\n children.push(\n symbol(\n variant.name,\n SymbolKind.Enum,\n variant.span,\n variant.nameSpan,\n variant.values.map((value) =>\n symbol(value.name, SymbolKind.EnumMember, value.span, value.nameSpan),\n ),\n \"variant\",\n ),\n );\n }\n }\n if (part.kind === \"tokens\") {\n for (const group of part.groups) {\n children.push(\n symbol(\n group.name,\n SymbolKind.Namespace,\n group.span,\n group.nameSpan,\n group.entries.map((entry) =>\n symbol(\n entry.name,\n SymbolKind.Constant,\n entry.span,\n entry.nameSpan,\n undefined,\n entry.value.text,\n ),\n ),\n \"local tokens\",\n ),\n );\n }\n }\n }\n out.push(\n symbol(item.name, SymbolKind.Class, item.span, item.nameSpan, children, \"component\"),\n );\n break;\n }\n }\n }\n return out;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { analyze, LineIndex, type ArviaFile, type ThemeEnv } from \"@arviahq/compiler\";\n\nexport interface ThemeInfo {\n path: string;\n /** undefined when the theme itself has errors. */\n env: ThemeEnv | undefined;\n ast: ArviaFile;\n source: string;\n index: LineIndex;\n}\n\nexport class WorkspaceState {\n /** themePath → loaded theme (null = path unreadable). */\n private themes = new Map<string, ThemeInfo | null>();\n /** directory → resolved theme path for documents in it (null = none found). */\n private themeByDir = new Map<string, string | null>();\n\n constructor(readonly root: string) {}\n\n /**\n * Nearest theme for a document: starting at its directory and walking up to\n * the workspace root, check `theme.arv` then `src/theme.arv` at each level.\n * Supports monorepos with one theme per app/package.\n */\n themePathFor(file: string): string | null {\n const resolved = path.resolve(file);\n if (path.basename(resolved) === \"theme.arv\") return resolved;\n\n let dir = path.dirname(resolved);\n const visited: string[] = [];\n let result: string | null = null;\n for (;;) {\n const cached = this.themeByDir.get(dir);\n if (cached !== undefined) {\n result = cached;\n break;\n }\n visited.push(dir);\n const direct = path.join(dir, \"theme.arv\");\n if (fs.existsSync(direct)) {\n result = direct;\n break;\n }\n const conventional = path.join(dir, \"src\", \"theme.arv\");\n if (fs.existsSync(conventional)) {\n result = conventional;\n break;\n }\n const parent = path.dirname(dir);\n if (dir === path.resolve(this.root) || parent === dir) {\n result = null;\n break;\n }\n dir = parent;\n }\n for (const d of visited) this.themeByDir.set(d, result);\n return result;\n }\n\n themeFor(file: string): ThemeInfo | null {\n const themePath = this.themePathFor(file);\n if (!themePath) return null;\n let info = this.themes.get(themePath);\n if (info === undefined) {\n info = this.loadTheme(themePath);\n this.themes.set(themePath, info);\n }\n return info;\n }\n\n /** Shared env for a document — undefined for the theme file itself. */\n envFor(file: string): ThemeEnv | undefined {\n const theme = this.themeFor(file);\n if (!theme || theme.path === path.resolve(file)) return undefined;\n return theme.env;\n }\n\n private loadTheme(themePath: string): ThemeInfo | null {\n let source: string;\n try {\n source = fs.readFileSync(themePath, \"utf8\");\n } catch {\n return null;\n }\n const result = analyze(source, { filename: themePath });\n const hasErrors = result.diagnostics.some((d) => d.severity === \"error\");\n return {\n path: themePath,\n env: hasErrors ? undefined : result.env,\n ast: result.ast,\n source,\n index: new LineIndex(source),\n };\n }\n\n /** Drops caches for a changed/created/deleted .arv file. */\n invalidate(file: string): void {\n this.themes.delete(path.resolve(file));\n // Creation/deletion can change which theme any directory resolves to.\n this.themeByDir.clear();\n }\n\n invalidateAll(): void {\n this.themes.clear();\n this.themeByDir.clear();\n }\n}\n\nexport function workspaceRootFor(file: string): string {\n let dir = path.dirname(file);\n for (;;) {\n if (fs.existsSync(path.join(dir, \"package.json\"))) return dir;\n const parent = path.dirname(dir);\n if (parent === dir) return path.dirname(file);\n dir = parent;\n }\n}\n","#!/usr/bin/env node\nimport { pathToFileURL } from \"node:url\";\nimport {\n createConnection,\n TextDocumentSyncKind,\n TextDocuments,\n} from \"vscode-languageserver/node.js\";\nimport type { InitializeParams, InitializeResult } from \"vscode-languageserver\";\nimport { TextDocument } from \"vscode-languageserver-textdocument\";\nimport { getColorPresentations, getDocumentColors } from \"./colors.js\";\nimport { getCompletions } from \"./completion.js\";\nimport { getDefinition } from \"./definition.js\";\nimport { toLspDiagnostics } from \"./diagnostics.js\";\nimport { DocumentStore, fileForUri } from \"./documents.js\";\nimport { getHover } from \"./hover.js\";\nimport { getInlayHints } from \"./inlay-hints.js\";\nimport { getRenameEdits, prepareRename, readFileOr } from \"./rename.js\";\nimport { getDocumentSymbols } from \"./symbols.js\";\nimport { WorkspaceState, workspaceRootFor } from \"./workspace.js\";\n\nconst DIAGNOSTICS_DEBOUNCE_MS = 200;\n\nconst connection = createConnection();\nconst documents = new TextDocuments(TextDocument);\nconst workspaces = new Map<string, WorkspaceState>();\n\nfunction pathToFileUri(file: string): string {\n return pathToFileURL(file).toString();\n}\n\nfunction workspaceFor(uri: string): WorkspaceState {\n const root = workspaceRootFor(fileForUri(uri));\n let ws = workspaces.get(root);\n if (!ws) {\n ws = new WorkspaceState(root);\n workspaces.set(root, ws);\n }\n return ws;\n}\n\nconst store = new DocumentStore(workspaceFor);\nconst diagnosticTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\nfunction publishDiagnostics(doc: TextDocument): void {\n const analysis = store.analysisFor(doc);\n connection.sendDiagnostics({ uri: doc.uri, diagnostics: toLspDiagnostics(analysis) });\n}\n\nfunction scheduleDiagnostics(doc: TextDocument, immediate = false): void {\n const pending = diagnosticTimers.get(doc.uri);\n if (pending) clearTimeout(pending);\n if (immediate) {\n publishDiagnostics(doc);\n return;\n }\n diagnosticTimers.set(\n doc.uri,\n setTimeout(() => {\n diagnosticTimers.delete(doc.uri);\n const current = documents.get(doc.uri);\n if (current) publishDiagnostics(current);\n }, DIAGNOSTICS_DEBOUNCE_MS),\n );\n}\n\nconnection.onInitialize((_params: InitializeParams): InitializeResult => {\n return {\n capabilities: {\n textDocumentSync: TextDocumentSyncKind.Incremental,\n completionProvider: { triggerCharacters: [\":\", \".\", \"@\", \" \"] },\n hoverProvider: true,\n definitionProvider: true,\n documentSymbolProvider: true,\n colorProvider: true,\n inlayHintProvider: true,\n renameProvider: { prepareProvider: true },\n },\n };\n});\n\ndocuments.onDidOpen((event) => {\n scheduleDiagnostics(event.document, true);\n});\n\ndocuments.onDidChangeContent((event) => {\n scheduleDiagnostics(event.document);\n});\n\ndocuments.onDidSave((event) => {\n scheduleDiagnostics(event.document, true);\n});\n\ndocuments.onDidClose((event) => {\n const pending = diagnosticTimers.get(event.document.uri);\n if (pending) clearTimeout(pending);\n diagnosticTimers.delete(event.document.uri);\n store.invalidate(event.document.uri);\n connection.sendDiagnostics({ uri: event.document.uri, diagnostics: [] });\n});\n\n// A changed .arv anywhere may be a theme another document depends on:\n// invalidate and re-validate everything open.\nconnection.onDidChangeWatchedFiles((params) => {\n for (const change of params.changes) {\n const file = fileForUri(change.uri);\n for (const ws of workspaces.values()) ws.invalidate(file);\n }\n store.invalidateAll();\n for (const doc of documents.all()) scheduleDiagnostics(doc);\n});\n\nconnection.onCompletion((params) => {\n const doc = documents.get(params.textDocument.uri);\n if (!doc) return [];\n return getCompletions(store.analysisFor(doc), doc.offsetAt(params.position));\n});\n\nconnection.onHover((params) => {\n const doc = documents.get(params.textDocument.uri);\n if (!doc) return null;\n const ws = workspaceFor(params.textDocument.uri);\n return getHover(store.analysisFor(doc), doc.offsetAt(params.position), ws);\n});\n\nconnection.onDefinition((params) => {\n const doc = documents.get(params.textDocument.uri);\n if (!doc) return null;\n const ws = workspaceFor(params.textDocument.uri);\n return getDefinition(store.analysisFor(doc), doc.offsetAt(params.position), ws);\n});\n\nconnection.onDocumentSymbol((params) => {\n const doc = documents.get(params.textDocument.uri);\n if (!doc) return [];\n return getDocumentSymbols(store.analysisFor(doc));\n});\n\nconnection.onDocumentColor((params) => {\n const doc = documents.get(params.textDocument.uri);\n if (!doc) return [];\n return getDocumentColors(store.analysisFor(doc));\n});\n\nconnection.onColorPresentation((params) => {\n const doc = documents.get(params.textDocument.uri);\n if (!doc) return [];\n return getColorPresentations(params.color, {\n start: doc.offsetAt(params.range.start),\n end: doc.offsetAt(params.range.end),\n });\n});\n\nconnection.languages.inlayHint.on((params) => {\n const doc = documents.get(params.textDocument.uri);\n if (!doc) return [];\n return getInlayHints(store.analysisFor(doc), params.range);\n});\n\nconnection.onPrepareRename((params) => {\n const doc = documents.get(params.textDocument.uri);\n if (!doc) return null;\n return prepareRename(store.analysisFor(doc), doc.offsetAt(params.position));\n});\n\nconnection.onRenameRequest((params) => {\n const doc = documents.get(params.textDocument.uri);\n if (!doc) return null;\n const ws = workspaceFor(params.textDocument.uri);\n return getRenameEdits(\n store.analysisFor(doc),\n doc.offsetAt(params.position),\n params.newName,\n ws,\n (file) => {\n const open = documents.get(pathToFileUri(file));\n return open ? open.getText() : readFileOr(file);\n },\n );\n});\n\ndocuments.listen(connection);\nconnection.listen();\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DA,MAAM,UAAU,QAAgB,SAAe,UAAU,KAAK,SAAS,SAAS,KAAK;;AAErF,MAAM,UAAU,QAAgB,SAAe,UAAU,KAAK,SAAS,UAAU,KAAK;AAEtF,SAAgB,aAAa,KAAgB,QAAkC;CAC7E,KAAK,MAAM,QAAQ,IAAI,OAAO;EAC5B,IAAI,CAAC,OAAO,QAAQ,KAAK,IAAI,KAAK,CAAC,OAAO,QAAQ,KAAK,IAAI,GAAG;EAC9D,QAAQ,KAAK,MAAb;GACE,KAAK;IACH,KAAK,MAAM,SAAS,KAAK,QAAQ;KAC/B,MAAM,MAAM,iBAAiB,OAAO,QAAQ,SAAS,IAAI;KACzD,IAAI,KAAK,OAAO;IAClB;IACA;GAEF,KAAK,UAAU;IACb,IAAI,OAAO,QAAQ,KAAK,QAAQ,GAAG,OAAO;KAAE,MAAM;KAAe,QAAQ;IAAK;IAC9E,MAAM,MAAM,iBAAiB,KAAK,OAAO,QAAQ,IAAI;IACrD,IAAI,KAAK,OAAO;IAChB;GACF;GACA,KAAK;IACH,IAAI,OAAO,QAAQ,KAAK,QAAQ,GAAG,OAAO;KAAE,MAAM;KAAkB,WAAW;IAAK;IACpF,KAAK,MAAM,QAAQ,KAAK,OACtB,KAAK,MAAM,QAAQ,KAAK,OAAO;KAC7B,MAAM,MAAM,WAAW,MAAM,QAAQ,IAAI;KACzC,IAAI,KAAK,OAAO;IAClB;IAEF;GAEF,KAAK,aAAa;IAChB,IAAI,OAAO,QAAQ,KAAK,QAAQ,GAAG,OAAO;KAAE,MAAM;KAAc,OAAO;IAAK;IAC5E,MAAM,MAAM,iBAAiB,KAAK,OAAO,QAAQ,IAAI;IACrD,IAAI,KAAK,OAAO;IAChB;GACF;GACA,KAAK,aAAa;IAChB,MAAM,MAAM,gBAAgB,MAAM,MAAM;IACxC,IAAI,KAAK,OAAO;IAChB;GACF;GACA,KAAK;IACH,KAAK,MAAM,QAAQ,KAAK,OACtB,KAAK,MAAM,QAAQ,KAAK,OAAO;KAC7B,MAAM,MAAM,WAAW,MAAM,QAAQ,IAAI;KACzC,IAAI,KAAK,OAAO;IAClB;IAEF;EAEJ;CACF;CACA,OAAO;AACT;AAEA,SAAS,gBAAgB,WAA0B,QAAkC;CACnF,IAAI,OAAO,QAAQ,UAAU,QAAQ,GAAG,OAAO;EAAE,MAAM;EAAkB;CAAU;CAEnF,KAAK,MAAM,QAAQ,UAAU,OAC3B,QAAQ,KAAK,MAAb;EACE,KAAK,QAAQ;GACX,MAAM,MAAM,WAAW,MAAM,QAAQ,SAAS;GAC9C,IAAI,KAAK,OAAO;GAChB;EACF;EACA,KAAK;GACH,IAAI,OAAO,QAAQ,KAAK,UAAU,GAChC,OAAO;IAAE,MAAM;IAAc,MAAM,KAAK;IAAQ,MAAM,KAAK;GAAW;GAExE;EACF,KAAK,QAAQ;GACX,MAAM,MAAM,gBAAgB,KAAK,MAAM,QAAQ,SAAS;GACxD,IAAI,KAAK,OAAO;GAChB;EACF;EACA,KAAK;GACH,KAAK,MAAM,QAAQ,KAAK,OAAO;IAC7B,IAAI,OAAO,QAAQ,KAAK,QAAQ,GAC9B,OAAO;KAAE,MAAM;KAAa;KAAW,MAAM,KAAK;KAAM,MAAM,KAAK;IAAS;IAE9E,MAAM,MAAM,iBAAiB,KAAK,OAAO,QAAQ,SAAS;IAC1D,IAAI,KAAK,OAAO;GAClB;GACA;EAEF,KAAK;GACH,KAAK,MAAM,WAAW,KAAK,UAAU;IACnC,IAAI,OAAO,QAAQ,QAAQ,QAAQ,GAAG,OAAO;KAAE,MAAM;KAAgB;KAAW;IAAQ;IACxF,KAAK,MAAM,SAAS,QAAQ,QAAQ;KAClC,IAAI,OAAO,QAAQ,MAAM,QAAQ,GAC/B,OAAO;MAAE,MAAM;MAAsB;MAAW;MAAS;KAAM;KAEjE,MAAM,MAAM,gBAAgB,MAAM,MAAM,QAAQ,SAAS;KACzD,IAAI,KAAK,OAAO;IAClB;GACF;GACA;EAEF,KAAK,YAAY;GACf,MAAM,MAAM,eAAe,KAAK,SAAS,QAAQ,WAAW,UAAU;GACtE,IAAI,KAAK,OAAO;GAChB;EACF;EACA,KAAK;GACH,KAAK,MAAM,SAAS,KAAK,SAAS;IAChC,IAAI,OAAO,QAAQ,MAAM,cAAc,GACrC,OAAO;KACL,MAAM;KACN;KACA,KAAK,MAAM;KACX,MAAM,MAAM;KACZ,SAAS;IACX;IAEF,MAAM,MAAM,eAAe,MAAM,UAAU,QAAQ,WAAW,YAAY;IAC1E,IAAI,KAAK,OAAO;GAClB;GACA;EAEF,KAAK;GACH,KAAK,MAAM,SAAS,KAAK,SAAS;IAChC,IAAI,OAAO,QAAQ,MAAM,aAAa,GACpC,OAAO;KACL,MAAM;KACN;KACA,KAAK,MAAM;KACX,MAAM,MAAM;KACZ,SAAS;IACX;IAEF,MAAM,MAAM,eAAe,MAAM,UAAU,QAAQ,WAAW,WAAW;IACzE,IAAI,KAAK,OAAO;GAClB;GACA;EAEF,KAAK,YAAY;GACf,MAAM,MAAM,eAAe,KAAK,UAAU,QAAQ,WAAW,UAAU;GACvE,IAAI,KAAK,OAAO;GAChB,KAAK,MAAM,QAAQ,KAAK,OAAO;IAC7B,IAAI,OAAO,QAAQ,KAAK,QAAQ,GAC9B,OAAO;KAAE,MAAM;KAAa;KAAW,MAAM,KAAK;KAAM,MAAM,KAAK;IAAS;IAE9E,MAAM,QAAQ,iBAAiB,KAAK,OAAO,QAAQ,SAAS;IAC5D,IAAI,OAAO,OAAO;GACpB;GACA;EACF;EACA,KAAK;GACH,KAAK,MAAM,SAAS,KAAK,QAAQ;IAC/B,MAAM,MAAM,iBAAiB,OAAO,QAAQ,aAAa,SAAS;IAClE,IAAI,KAAK,OAAO;GAClB;GACA;CAEJ;CAEF,OAAO;AACT;AAEA,SAAS,iBACP,OACA,QACA,OACA,WACkB;CAClB,MAAM,UAAU,CAAC,GAAG,MAAM,SAAS,GAAG,MAAM,UAAU,SAAS,MAAM,EAAE,OAAO,CAAC;CAC/E,KAAK,MAAM,SAAS,SAAS;EAE3B,MAAM,WAAW,YAAY,MAAM,OAAO,QAAQ,SAAS;EAC3D,IAAI,UAAU,OAAO;EACrB,IAAI,OAAO,QAAQ,MAAM,QAAQ,GAC/B,OAAO;GACL,MAAM;GACN;GACA,MAAM,MAAM;GACZ,MAAM,MAAM;GACZ,OAAO,MAAM,MAAM;GACnB,KAAK,MAAM;GACX;GACA;EACF;CAEJ;CACA,OAAO;AACT;AAEA,SAAS,gBACP,MACA,QACA,WACkB;CAClB,KAAK,MAAM,QAAQ,KAAK,OACtB,IAAI,KAAK,SAAS,aAAa;EAC7B,IAAI,aAAa,OAAO,QAAQ,KAAK,QAAQ,GAC3C,OAAO;GAAE,MAAM;GAAa;GAAW,MAAM,KAAK;GAAM,MAAM,KAAK;EAAS;EAE9E,MAAM,MAAM,iBAAiB,KAAK,OAAO,QAAQ,SAAS;EAC1D,IAAI,KAAK,OAAO;CAClB,OAAO;EACL,MAAM,MAAM,iBAAiB,CAAC,IAAI,GAAG,QAAQ,SAAS;EACtD,IAAI,KAAK,OAAO;CAClB;CAEF,OAAO;AACT;AAEA,SAAS,iBACP,OACA,QACA,WACkB;CAClB,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,SAAS,QAAQ;EACxB,MAAM,MAAM,WAAW,MAAM,QAAQ,SAAS;EAC9C,IAAI,KAAK,OAAO;CAClB,OAAO,IAAI,KAAK,SAAS;MACnB,OAAO,QAAQ,KAAK,UAAU,GAChC,OAAO;GAAE,MAAM;GAAc,MAAM,KAAK;GAAQ,MAAM,KAAK;EAAW;CAAA,OAEnE;EACL,KAAK,MAAM,QAAQ,KAAK,OAAO;GAC7B,MAAM,MAAM,WAAW,MAAM,QAAQ,SAAS;GAC9C,IAAI,KAAK,OAAO;EAClB;EAEA,KAAK,MAAM,QAAQ,KAAK,OAAO;GAC7B,IAAI,aAAa,OAAO,QAAQ,KAAK,QAAQ,GAC3C,OAAO;IAAE,MAAM;IAAa;IAAW,MAAM,KAAK;IAAM,MAAM,KAAK;GAAS;GAE9E,KAAK,MAAM,QAAQ,KAAK,OAAO;IAC7B,IAAI,KAAK,SAAS,QAAQ;IAC1B,MAAM,MAAM,WAAW,MAAM,QAAQ,SAAS;IAC9C,IAAI,KAAK,OAAO;GAClB;EACF;CACF;CAEF,OAAO;AACT;AAEA,SAAS,WACP,MACA,QACA,WACkB;CAClB,MAAM,WAAiB;EACrB,OAAO,KAAK,KAAK;EACjB,KAAK,KAAK,KAAK,QAAQ,KAAK,SAAS;EACrC,MAAM,KAAK,KAAK;EAChB,KAAK,KAAK,KAAK;CACjB;CACA,IAAI,OAAO,QAAQ,QAAQ,GACzB,OAAO;EAAE,MAAM;EAAgB,MAAM,KAAK;EAAU,MAAM;CAAS;CAErE,OAAO,YAAY,KAAK,OAAO,QAAQ,SAAS;AAClD;AAEA,SAAS,YACP,OACA,QACA,WACkB;CAClB,IAAI,CAAC,OAAO,QAAQ,MAAM,IAAI,GAAG,OAAO;CACxC,KAAK,MAAM,QAAQ,MAAM,OACvB,IAAI,KAAK,SAAS,SAAS,OAAO,QAAQ,KAAK,IAAI,GACjD,OAAO;EAAE,MAAM;EAAa;EAAM;CAAU;CAGhD,OAAO;AACT;AAEA,SAAS,eACP,SACA,QACA,WACA,SACkB;CAClB,KAAK,MAAM,SAAS,SAAS;EAC3B,IAAI,OAAO,QAAQ,MAAM,WAAW,GAClC,OAAO;GAAE,MAAM;GAAmB;GAAW;GAAO,MAAM;GAAW;EAAQ;EAE/E,IAAI,OAAO,QAAQ,MAAM,SAAS,GAChC,OAAO;GAAE,MAAM;GAAmB;GAAW;GAAO,MAAM;GAAS;EAAQ;CAE/E;CACA,OAAO;AACT;;;ACzVA,IAAI,gBAAmD;;AAGvD,SAAgB,YAAY,MAAyC;CACnE,IAAI,CAAC,eAAe;EAClB,gCAAgB,IAAI,IAAI;EACxB,KAAK,MAAM,aAAA,GAAA,2BAAA,0BAAA,CAAsC,CAAC,CAAC,kBAAkB,GACnE,cAAc,IAAI,SAAS,MAAM,QAAQ;CAE7C;CACA,OAAO,cAAc,IAAI,IAAI;AAC/B;AAEA,SAAgB,mBAAoC;CAClD,YAAY,OAAO;CACnB,OAAO,CAAC,GAAG,cAAe,OAAO,CAAC;AACpC;AAEA,SAAgB,oBAAoB,UAAiC;CACnE,MAAM,OAAO,SAAS;CACtB,IAAI,CAAC,MAAM,OAAO;CAClB,OAAO,OAAO,SAAS,WAAW,OAAO,KAAK;AAChD;;AAGA,SAAgB,iBAAiB,MAA6B;CAC5D,IAAI,KAAK,WAAW,IAAI,GACtB,OAAO,KAAK,KAAK;CAEnB,MAAM,WAAW,YAAY,IAAI;CACjC,IAAI,CAAC,UAAU,OAAO;CACtB,MAAM,QAAQ,CAAC,KAAK,KAAK,GAAG;CAC5B,MAAM,cAAc,oBAAoB,QAAQ;CAChD,IAAI,aAAa,MAAM,KAAK,WAAW;CACvC,IAAI,SAAS,QAAQ,MAAM,KAAK,WAAW,SAAS,OAAO,SAAS;CACpE,MAAM,MAAM,SAAS,YAAY,MAAM,MAAM,EAAE,KAAK,SAAS,KAAK,CAAC;CACnE,IAAI,KAAK,MAAM,KAAK,mBAAmB,IAAI,IAAI,EAAE;CACjD,OAAO,MAAM,KAAK,MAAM;AAC1B;;;ACjCA,SAAgB,SACd,UACA,QACA,WACc;CACd,MAAM,SAAS,aAAa,SAAS,KAAK,MAAM;CAChD,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,WAAW,YAAY,QAAQ,UAAU,SAAS;CACxD,IAAI,CAAC,UAAU,OAAO;CACtB,OAAO;EACL,UAAU;GAAE,MAAMA,sBAAAA,WAAW;GAAU,OAAO;EAAS;EACvD,OAAO,QAAQ,UAAU,WAAW,MAAM,CAAC;CAC7C;AACF;AAEA,SAAS,WAAW,QAAyB;CAC3C,QAAQ,OAAO,MAAf;EACE,KAAK,aACH,OAAO,OAAO,KAAK;EACrB,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,eACH,OAAO,OAAO;EAChB,KAAK,kBACH,OAAO,OAAO,UAAU;EAC1B,KAAK,cACH,OAAO,OAAO,MAAM;EACtB,KAAK,eACH,OAAO,OAAO,OAAO;EACvB,KAAK,kBACH,OAAO,OAAO,UAAU;EAC1B,KAAK,gBACH,OAAO,OAAO,QAAQ;EACxB,KAAK,sBACH,OAAO,OAAO,MAAM;EACtB,KAAK,mBACH,OAAO,OAAO,SAAS,YAAY,OAAO,MAAM,cAAc,OAAO,MAAM;EAC7E,KAAK,gBACH,OAAO,OAAO;CAClB;AACF;AAEA,SAAgB,QAAQ,UAA4B,MAAmB;CACrE,MAAM,QAAQ,SAAS,MAAM,YAAY,IAAI;CAC7C,OAAO;EACL,OAAO;GAAE,MAAM,MAAM,MAAM,OAAO;GAAG,WAAW,MAAM,MAAM,MAAM;EAAE;EACpE,KAAK;GAAE,MAAM,MAAM,IAAI,OAAO;GAAG,WAAW,MAAM,IAAI,MAAM;EAAE;CAChE;AACF;AAEA,SAAS,YACP,QACA,UACA,WACe;CACf,MAAM,MAAM,SAAS;CACrB,QAAQ,OAAO,MAAf;EACE,KAAK,aACH,OAAO,OAAO,KAAK,UAAU,cACzB,kBAAkB,OAAO,MAAM,UAAU,SAAS,IAClD,cAAc,OAAO,MAAM,OAAO,WAAW,GAAG;EACtD,KAAK,cACH,OAAO,YAAY,OAAO,MAAM,GAAG;EACrC,KAAK,eACH,OAAO,YAAY,OAAO,OAAO,MAAM,GAAG;EAC5C,KAAK,eAAe;GAClB,MAAM,UACJ,OAAO,UAAU,cACb,KAAK,OAAO,MAAM,KAAK,GAAG,OAAO,KAAK,kBAAkB,OAAO,WAAW,KAAK,MAC/E,KAAK,OAAO,MAAM,KAAK,GAAG,OAAO,KAAK;GAC5C,MAAM,MAAM,OAAO,MAAM,OAAO,OAAO,QAAQ;GAC/C,OAAO,GAAG,QAAQ,iBAAiB,OAAO,MAAM,UAAU;EAC5D;EACA,KAAK,kBACH,OAAO,eAAe,OAAO,SAAS;EACxC,KAAK,cACH,OAAO,WAAW,OAAO,MAAM,KAAK,gDAAgD,OAAO,MAAM,KAAK;EACxG,KAAK,kBACH,OAAO,mBAAmB,OAAO,UAAU,MAAM,SAAS,GAAG;EAC/D,KAAK,gBAAgB;GACnB,MAAM,SAAS,OAAO,QAAQ,OAAO,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK;GAClE,OAAO,aAAa,OAAO,QAAQ,KAAK,UAAU,OAAO,UAAU,KAAK,kBAAkB,OAAO,QAAQ,KAAK,KAAK,UAAU,QAAQ;EACvI;EACA,KAAK,sBACH,OAAO,KAAK,OAAO,QAAQ,KAAK,IAAI,OAAO,MAAM,KAAK,0BAA0B,OAAO,UAAU,KAAK;EACxG,KAAK,aACH,OAAO,UAAU,OAAO,KAAK,UAAU,OAAO,UAAU,KAAK;EAC/D,KAAK,mBAAmB;GACtB,MAAM,UAAU,YAAY,OAAO,WAAW,OAAO,MAAM,OAAO;GAClE,IAAI,CAAC,SAAS,OAAO;GACrB,IAAI,OAAO,SAAS,WAAW;IAC7B,MAAM,SAAS,QAAQ,OAAO,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK;IAC3D,OAAO,aAAa,QAAQ,KAAK,UAAU,OAAO,UAAU,KAAK,kBAAkB,QAAQ,KAAK,KAAK,UAAU,QAAQ;GACzH;GACA,OAAO,KAAK,OAAO,MAAM,QAAQ,IAAI,OAAO,MAAM,MAAM,MAAM,OAAO,QAAQ;EAC/E;EACA,KAAK,mBAAmB;GACtB,MAAM,OACJ,OAAO,YAAY,eAAe,IAAI,YAAY,OAAO,OAAO,IAAI,WAAW,OAAO;GACxF,MAAM,QAAQ,OAAO,YAAY,eAAe,eAAe;GAC/D,OAAO,OAAO,KAAK,MAAM,GAAG,OAAO,IAAI,8BAA8B,KAAK,YAAY;EACxF;EACA,KAAK,gBACH,OAAO,iBAAiB,OAAO,IAAI;CACvC;AACF;AAEA,SAAS,cACP,MACA,WACA,KACe;CAEf,MAAM,QAAQ,YAAY,eAAe,WAAW,KAAK,OAAO,KAAK,IAAI,IAAI;CAC7E,IAAI,OAAO;EACT,MAAM,MAAM,MAAM,MAAM,OAAO,MAAM,QAAQ;EAC7C,OAAO,KAAK,KAAK,MAAM,GAAG,KAAK,KAAK,kBAAkB,UAAW,KAAK,mBAAmB,MAAM,MAAM,UAAU;CACjH;CAEA,MAAM,QAAQ,IAAI,OAAO,KAAK,MAAM,GAAG,KAAK;CAC5C,IAAI,UAAU,KAAA,GAAW,OAAO;CAEhC,IAAI;CACJ,IAAI,OAAO,UAAU,UACnB,OAAO,cAAc,MAAM;MAK3B,OAAO,oCAHM,OAAO,QAAQ,KAAK,CAAC,CAC/B,KAAK,CAAC,MAAM,WAAW,KAAK,KAAK,OAAO,MAAM,KAAK,CAAC,CACpD,KAAK,IACsC;CAGhD,MAAM,MAAM,IAAI,UAAU,KAAK,MAAM,GAAG,KAAK;CAC7C,MAAM,UAAU,MAAM,OAAO,QAAQ;CACrC,MAAM,SAAS,IAAI,QAAQ,qBAAqB,KAAK,MAAM,GAAG,KAAK,KAAK,OAAO;CAC/E,OAAO,KAAK,KAAK,MAAM,GAAG,KAAK,KAAK,QAAQ,OAAO,UAAU;AAC/D;AAEA,SAAS,YAAY,MAAc,KAA8B;CAC/D,MAAM,SAAS,IAAI,QAAQ;CAC3B,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,QAAQ,OAAO,MAAM,MAAM,GAAG,CAAC;CACrC,MAAM,QAAQ,MAAM,KAAK,MAAM,GAAG,EAAE,SAAS,IAAI,EAAE,MAAM,EAAE;CAC3D,IAAI,OAAO,MAAM,SAAS,MAAM,QAC9B,MAAM,KAAK,OAAO,OAAO,MAAM,SAAS,MAAM,OAAO,SAAS;CAEhE,MAAM,eAAe,OAAO,OACzB,SAAS,MAAM,EAAE,SAAS,CAAC,CAC3B,KAAK,QAAQ,MAAM,IAAI,KAAK,EAAE,GAAG,CAAC,CAClC,KAAK,IAAI;CACZ,MAAM,SACJ,OAAO,OAAO,SAAS,IACnB,OAAO,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAO,WAAW,IAAI,KAAK,IAAI,IAAI,iBAC9E;CACN,OAAO,YAAY,KAAK,mBAAmB,MAAM,KAAK,IAAI,EAAE,UAAU;AACxE;AAEA,SAAS,eAAe,WAAkC;CACxD,MAAM,QAAQ,IAAI,IAAY,CAAC,MAAM,CAAC;CACtC,MAAM,WAAqB,CAAC;CAC5B,KAAK,MAAM,QAAQ,UAAU,OAAO;EAClC,IAAI,KAAK,SAAS,SAChB,KAAK,MAAM,QAAQ,KAAK,OAAO,MAAM,IAAI,KAAK,IAAI;EAEpD,IAAI,KAAK,SAAS,YAChB,KAAK,MAAM,WAAW,KAAK,UACzB,SAAS,KAAK,GAAG,QAAQ,KAAK,IAAI,QAAQ,OAAO,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG;CAGvF;CACA,MAAM,QAAQ,CACZ,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,IAAI,KAC9B,GAAI,SAAS,SAAS,IAAI,WAAW,CAAC,eAAe,CACvD;CACA,OAAO,eAAe,UAAU,KAAK,gBAAgB,MAAM,KAAK,IAAI,EAAE;AACxE;AAEA,SAAS,kBACP,MACA,UACA,WACe;CACf,MAAM,QAAQ,mBAAmB,KAAK,MAAM,SAAS,GAAG;CACxD,IAAI,OAAO,OAAO;CAClB,MAAM,QAAQ,UAAU,SAAS,SAAS,IAAI;CAC9C,OAAO,QAAQ,mBAAmB,KAAK,MAAM,MAAM,GAAG,IAAI;AAC5D;AAEA,SAAS,mBAAmB,MAAc,KAA+B;CACvE,KAAK,MAAM,QAAQ,IAAI,OAAO;EAC5B,IAAI,KAAK,SAAS,eAAe,KAAK,SAAS,MAAM;EAErD,OAAO,eAAe,KAAK,gBADb,KAAK,MAAM,KAAK,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KACN,KAAK,aAAa;CACnE;CACA,OAAO;AACT;AAEA,SAAS,YAAY,WAA0B,MAAc;CAC3D,KAAK,MAAM,QAAQ,UAAU,OAAO;EAClC,IAAI,KAAK,SAAS,YAAY;EAC9B,MAAM,UAAU,KAAK,SAAS,MAAM,MAAM,EAAE,SAAS,IAAI;EACzD,IAAI,SAAS,OAAO;CACtB;AAEF;AAEA,SAAgB,eACd,WACA,OACA,MAC0D;CAC1D,KAAK,MAAM,QAAQ,UAAU,OAAO;EAClC,IAAI,KAAK,SAAS,UAAU;EAC5B,KAAK,MAAM,KAAK,KAAK,QAAQ;GAC3B,IAAI,EAAE,SAAS,OAAO;GACtB,KAAK,MAAM,SAAS,EAAE,SACpB,IAAI,MAAM,SAAS,MACjB,OAAO;IAAE,OAAO,MAAM,MAAM;IAAM,KAAK,MAAM;IAAK,MAAM,MAAM;GAAS;EAG7E;CACF;CACA,OAAO;AACT;;;;AChNA,SAAgB,iBAAiB,KAA6B;CAC5D,MAAM,MAAmB,CAAC;CAC1B,MAAM,cAAc,OAAoB,cAAoC;EAC1E,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,SAAS,QAAQ,IAAI,KAAK;GAAE,MAAM;GAAM;EAAU,CAAC;OACvD,IAAI,KAAK,SAAS,SAAS;GAC9B,KAAK,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAK;IAAE;IAAM;GAAU,CAAC;GAC3D,KAAK,MAAM,QAAQ,KAAK,OACtB,KAAK,MAAM,QAAQ,KAAK,OACtB,IAAI,KAAK,SAAS,QAAQ,IAAI,KAAK;IAAE;IAAM;GAAU,CAAC;EAG5D;CAEJ;CAEA,KAAK,MAAM,OAAO,IAAI,OACpB,QAAQ,IAAI,MAAZ;EACE,KAAK;GACH,KAAK,MAAM,QAAQ,IAAI,OACrB,KAAK,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAK;IAAE;IAAM,WAAW;GAAK,CAAC;GAEnE;EACF,KAAK;GACH,KAAK,MAAM,QAAQ,IAAI,OACrB,KAAK,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAK;IAAE;IAAM,WAAW;GAAK,CAAC;GAEnE;EACF,KAAK;EACL,KAAK;GACH,WAAW,IAAI,OAAO,IAAI;GAC1B;EACF,KAAK;GACH,KAAK,MAAM,QAAQ,IAAI,OACrB,QAAQ,KAAK,MAAb;IACE,KAAK;KACH,IAAI,KAAK;MAAE,MAAM;MAAM,WAAW;KAAI,CAAC;KACvC;IACF,KAAK;KACH,KAAK,MAAM,QAAQ,KAAK,KAAK,OAC3B,IAAI,KAAK,SAAS,aAAa,WAAW,KAAK,OAAO,GAAG;UACpD,WAAW,CAAC,IAAI,GAAG,GAAG;KAE7B;IACF,KAAK;KACH,KAAK,MAAM,QAAQ,KAAK,OAAO,WAAW,KAAK,OAAO,GAAG;KACzD;IACF,KAAK;KACH,KAAK,MAAM,WAAW,KAAK,UACzB,KAAK,MAAM,SAAS,QAAQ,QAC1B,KAAK,MAAM,QAAQ,MAAM,KAAK,OAC5B,IAAI,KAAK,SAAS,aAAa,WAAW,KAAK,OAAO,GAAG;UACpD,WAAW,CAAC,IAAI,GAAG,GAAG;KAIjC;IACF,KAAK;KACH,KAAK,MAAM,QAAQ,KAAK,OAAO,WAAW,KAAK,OAAO,GAAG;KACzD;GACJ;GAEF;CAEJ;CAEF,OAAO;AACT;;AAGA,SAAgB,iBAAiB,KAA8B;CAC7D,MAAM,MAAoB,CAAC;CAC3B,MAAM,cACJ,OACA,OACA,cACG;EACH,KAAK,MAAM,SAAS,MAAM,SAAS,IAAI,KAAK;GAAE;GAAO;GAAO;GAAO;EAAU,CAAC;EAC9E,KAAK,MAAM,YAAY,MAAM,WAC3B,KAAK,MAAM,SAAS,SAAS,SAAS,IAAI,KAAK;GAAE;GAAO;GAAO;GAAO;EAAU,CAAC;CAErF;CACA,KAAK,MAAM,OAAO,IAAI,OAAO;EAC3B,IAAI,IAAI,SAAS,SACf,KAAK,MAAM,SAAS,IAAI,QAAQ,WAAW,OAAO,SAAS,IAAI;EAEjE,IAAI,IAAI,SAAS,aACf,KAAK,MAAM,QAAQ,IAAI,OAAO;GAC5B,IAAI,KAAK,SAAS,UAAU;GAC5B,KAAK,MAAM,SAAS,KAAK,QAAQ,WAAW,OAAO,aAAa,GAAG;EACrE;CAEJ;CACA,OAAO;AACT;;AAGA,SAAgB,WAAW,KAAwE;CACjG,OAAO,CACL,GAAG,iBAAiB,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,iBAAiB;EAAE,OAAO,KAAK;EAAO;CAAU,EAAE,GACxF,GAAG,iBAAiB,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,iBAAiB;EAAE,OAAO,MAAM;EAAO;CAAU,EAAE,CAC5F;AACF;;AAGA,SAAgB,SAAS,KAAwD;CAC/E,MAAM,MAA8C,CAAC;CACrD,MAAM,cAAc,UAAuB;EACzC,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,SAAS,OAAO,IAAI,KAAK;GAAE,QAAQ,KAAK;GAAQ,YAAY,KAAK;EAAW,CAAC;CAE1F;CACA,KAAK,MAAM,OAAO,IAAI,OACpB,QAAQ,IAAI,MAAZ;EACE,KAAK;EACL,KAAK;GACH,WAAW,IAAI,KAAK;GACpB;EACF,KAAK;GACH,KAAK,MAAM,QAAQ,IAAI,OAAO;IAC5B,IAAI,KAAK,SAAS,OAAO,IAAI,KAAK;KAAE,QAAQ,KAAK;KAAQ,YAAY,KAAK;IAAW,CAAC;IACtF,IAAI,KAAK,SAAS,QAChB,KAAK,MAAM,QAAQ,KAAK,KAAK,OAC3B,IAAI,KAAK,SAAS,aAAa,WAAW,KAAK,KAAK;SAC/C,WAAW,CAAC,IAAI,CAAC;IAG1B,IAAI,KAAK,SAAS,SAChB,KAAK,MAAM,QAAQ,KAAK,OAAO,WAAW,KAAK,KAAK;IAEtD,IAAI,KAAK,SAAS,YAChB,KAAK,MAAM,WAAW,KAAK,UACzB,KAAK,MAAM,SAAS,QAAQ,QAC1B,KAAK,MAAM,QAAQ,MAAM,KAAK,OAC5B,IAAI,KAAK,SAAS,aAAa,WAAW,KAAK,KAAK;SAC/C,WAAW,CAAC,IAAI,CAAC;IAK9B,IAAI,KAAK,SAAS,YAChB,KAAK,MAAM,QAAQ,KAAK,OAAO,WAAW,KAAK,KAAK;GAExD;GACA;CACJ;CAEF,OAAO;AACT;;;ACvKA,MAAM,SAAS;AACf,MAAM,QAAQ;AAEd,MAAM,SAAS,MAAc,KAAK,MAAM,IAAI,GAAG;AAC/C,MAAM,cAAc,QAClB,IAAI,SAAS,GAAG,IAAI,WAAW,GAAG,IAAI,MAAM,WAAW,GAAG,IAAI;;AAGhE,SAAgB,kBAAkB,UAAgD;CAChF,MAAM,MAA0B,CAAC;CACjC,KAAK,MAAM,EAAE,WAAW,WAAW,SAAS,GAAG,GAC7C,KAAK,MAAM,QAAQ,MAAM,OAAO;EAC9B,IAAI,KAAK,SAAS,WAAW;EAC7B,MAAM,QAAQ,WAAW,KAAK,IAAI;EAClC,IAAI,OAAO,IAAI,KAAK;GAAE,OAAO,QAAQ,UAAU,KAAK,IAAI;GAAG;EAAM,CAAC;CACpE;CAEF,OAAO;AACT;AAEA,SAAgB,sBACd,OACA,MACqB;CAErB,MAAM,QAAQ,MAAc,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG;CACjE,MAAM,MACJ,MAAM,QAAQ,IACV,IAAI,KAAK,MAAM,GAAG,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,KAAK,MAC7E,IAAI,KAAK,MAAM,GAAG,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,MAAM,IAAI;CAC/D,MAAM,MACJ,MAAM,QAAQ,IACV,QAAQ,MAAM,MAAM,GAAG,EAAE,IAAI,MAAM,MAAM,KAAK,EAAE,IAAI,MAAM,MAAM,IAAI,EAAE,IAAI,KAAK,MAAM,MAAM,QAAQ,GAAG,IAAI,IAAI,KAC9G,OAAO,MAAM,MAAM,GAAG,EAAE,IAAI,MAAM,MAAM,KAAK,EAAE,IAAI,MAAM,MAAM,IAAI,EAAE;CAC3E,OAAO,CAAC,EAAE,OAAO,IAAI,GAAG,EAAE,OAAO,IAAI,CAAC;AACxC;AAEA,SAAgB,WAAW,MAA4B;CACrD,IAAI,OAAO,KAAK,IAAI,GAAG,OAAO,SAAS,IAAI;CAC3C,MAAM,KAAK,MAAM,KAAK,IAAI;CAC1B,IAAI,IAAI;EACN,MAAM,OAAO,GAAG,EAAE,CACf,MAAM,SAAS,CAAC,CAChB,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,CACpB,OAAO,OAAO;EACjB,IAAI,KAAK,SAAS,GAAG,OAAO;EAC5B,IAAI,GAAG,EAAE,CAAE,WAAW,KAAK,GAAG,OAAO,aAAa,IAAI;EACtD,OAAO,aAAa,IAAI;CAC1B;CACA,OAAO;AACT;AAEA,SAAS,SAAS,MAAqB;CACrC,MAAM,MAAM,KAAK,MAAM,CAAC;CACxB,MAAM,OAAO,IAAI,UAAU;CAC3B,MAAM,OAAO,OAAO,IAAI;CACxB,MAAM,WAAW,MAAc;EAC7B,MAAM,OAAO,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI;EAEhD,OADc,SAAS,OAAO,OAAO,OAAO,MAAM,EACvC,IAAI;CACjB;CACA,MAAM,WAAW,IAAI,WAAW,KAAK,IAAI,WAAW;CACpD,OAAO;EACL,KAAK,QAAQ,CAAC;EACd,OAAO,QAAQ,CAAC;EAChB,MAAM,QAAQ,CAAC;EACf,OAAO,WAAW,QAAQ,CAAC,IAAI;CACjC;AACF;AAEA,SAAS,aAAa,MAA8B;CAClD,MAAM,CAAC,GAAG,GAAG,KAAK;EAAC,WAAW,KAAK,EAAG;EAAG,WAAW,KAAK,EAAG;EAAG,WAAW,KAAK,EAAG;CAAC;CACnF,IAAI;EAAC;EAAG;EAAG;CAAC,CAAC,CAAC,MAAM,MAAM,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;CACnD,MAAM,QAAQ,KAAK,OAAO,KAAA,IAAY,WAAW,KAAK,EAAE,IAAI;CAC5D,OAAO;EAAE,KAAK,QAAQ,CAAC;EAAG,OAAO,QAAQ,CAAC;EAAG,MAAM,QAAQ,CAAC;EAAG;CAAM;AACvE;AAEA,SAAS,aAAa,MAA8B;CAClD,MAAM,IAAI,WAAW,KAAK,EAAG;CAC7B,MAAM,IAAI,WAAW,KAAK,EAAG,IAAI;CACjC,MAAM,IAAI,WAAW,KAAK,EAAG,IAAI;CACjC,IAAI;EAAC;EAAG;EAAG;CAAC,CAAC,CAAC,MAAM,MAAM,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;CACnD,MAAM,QAAQ,KAAK,OAAO,KAAA,IAAY,WAAW,KAAK,EAAE,IAAI;CAC5D,MAAM,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK;CACtC,MAAM,MAAQ,IAAI,MAAO,OAAO,MAAO;CACvC,MAAM,IAAI,KAAK,IAAI,KAAK,IAAK,KAAK,IAAK,CAAC;CACxC,MAAM,CAAC,IAAI,IAAI,MACb,KAAK,IACD;EAAC;EAAG;EAAG;CAAC,IACR,KAAK,IACH;EAAC;EAAG;EAAG;CAAC,IACR,KAAK,IACH;EAAC;EAAG;EAAG;CAAC,IACR,KAAK,IACH;EAAC;EAAG;EAAG;CAAC,IACR,KAAK,IACH;EAAC;EAAG;EAAG;CAAC,IACR;EAAC;EAAG;EAAG;CAAC;CACtB,MAAM,IAAI,IAAI,IAAI;CAClB,OAAO;EAAE,KAAK,QAAQ,KAAK,CAAC;EAAG,OAAO,QAAQ,KAAK,CAAC;EAAG,MAAM,QAAQ,KAAK,CAAC;EAAG;CAAM;AACtF;AAEA,SAAS,WAAW,KAAqB;CACvC,OAAO,QAAQ,IAAI,SAAS,GAAG,IAAI,WAAW,GAAG,IAAI,MAAM,WAAW,GAAG,CAAC;AAC5E;AAEA,SAAS,QAAQ,GAAmB;CAClC,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;AACnC;;;AC3GA,MAAM,mBAAmB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AACA,MAAM,eAAe;CAAC;CAAS;CAAU;CAAU;CAAa;CAAS;AAAW;AACpF,MAAM,iBAAiB;CACrB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,SAAS,KAAK,OAAe,MAA0B,QAAiC;CACtF,OAAO;EAAE;EAAO;EAAM;CAAO;AAC/B;AAEA,SAAS,UAAU,OAAe,OAAmC;CACnE,OAAO,UAAU,WAAW,mBAAmB,KAAK,KAAK,IACrDC,sBAAAA,mBAAmB,QACnBA,sBAAAA,mBAAmB;AACzB;;AAGA,SAAS,mBAAmB,UAA4B,QAAsC;CAC5F,KAAK,MAAM,OAAO,SAAS,IAAI,OAC7B,IAAI,IAAI,SAAS,eAAe,UAAU,IAAI,KAAK,SAAS,UAAU,IAAI,KAAK,KAC7E,OAAO;CAGX,OAAO;AACT;AAEA,SAAS,iBAAiB,WAAmE;CAC3F,MAAM,yBAAS,IAAI,IAAiC;CACpD,IAAI,CAAC,WAAW,OAAO;CACvB,KAAK,MAAM,QAAQ,UAAU,OAAO;EAClC,IAAI,KAAK,SAAS,UAAU;EAC5B,KAAK,MAAM,SAAS,KAAK,QAAQ;GAC/B,MAAM,SAAS,OAAO,IAAI,MAAM,IAAI,qBAAK,IAAI,IAAoB;GACjE,KAAK,MAAM,SAAS,MAAM,SAAS,OAAO,IAAI,MAAM,MAAM,MAAM,MAAM,IAAI;GAC1E,OAAO,IAAI,MAAM,MAAM,MAAM;EAC/B;CACF;CACA,OAAO;AACT;AAEA,SAAS,aAAa,KAAe,OAAe,MAAsB;CACxE,MAAM,QAAQ,IAAI,OAAO,MAAM,GAAG;CAClC,IAAI,UAAU,KAAA,GAAW,OAAO;CAChC,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,OAAO,OAAO,QAAQ,KAAK,CAAC,CACzB,KAAK,CAAC,MAAM,WAAW,GAAG,KAAK,IAAI,OAAO,CAAC,CAC3C,KAAK,IAAI;AACd;AAEA,SAAgB,eAAe,UAA4B,QAAkC;CAC3F,MAAM,SAAS,SAAS;CACxB,MAAM,MAAM,SAAS;CACrB,MAAM,SAAS,OAAO,MAAM,GAAG,MAAM;CACrC,MAAM,YAAY,OAAO,YAAY,IAAI,IAAI;CAC7C,MAAM,aAAa,OAAO,MAAM,SAAS;CACzC,MAAM,YAAY,mBAAmB,UAAU,MAAM;CACrD,MAAM,SAAS,iBAAiB,SAAS;CAEzC,MAAM,QAA0B,CAAC;CAGjC,MAAM,WAAW,WAAW,MAAM,8BAA8B;CAChE,IAAI,UAAU;EACZ,MAAM,QAAQ,SAAS;EACvB,MAAM,cAAc,OAAO,IAAI,KAAK;EACpC,IAAI,aACF,KAAK,MAAM,CAAC,MAAM,UAAU,aAC1B,MAAM,KAAK;GACT,OAAO;GACP,MAAM,UAAU,OAAO,KAAK;GAC5B,QAAQ,GAAG,MAAM,cAAc,UAAW;EAC5C,CAAC;EAGL,MAAM,SAAS,IAAI,OAAO;EAC1B,IAAI,QACF,KAAK,MAAM,QAAQ,OAAO,KAAK,MAAM,GAAG;GACtC,IAAI,aAAa,IAAI,IAAI,GAAG;GAC5B,MAAM,QAAQ,aAAa,KAAK,OAAO,IAAI;GAC3C,MAAM,MAAM,IAAI,UAAU,MAAM,GAAG;GACnC,MAAM,KAAK;IACT,OAAO;IACP,MAAM,UAAU,OAAO,KAAK;IAC5B,QAAQ;IACR,eAAe;GACjB,CAAC;EACH;EAEF,IAAI,UAAU,aACZ,KAAK,MAAM,QAAQ,OAAO,KAAK,IAAI,SAAS,GAC1C,MAAM,KAAK,KAAK,MAAMA,sBAAAA,mBAAmB,OAAO,WAAW,CAAC;EAGhE,IAAI,MAAM,SAAS,GAAG,OAAO;CAC/B;CAGA,IAAI,YAAY,KAAK,UAAU,GAAG;EAChC,KAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,IAAI,OAAO,GACrD,MAAM,KAAK,KAAK,MAAMA,sBAAAA,mBAAmB,WAAW,YAAY,OAAO,MAAM,OAAO,OAAO,CAAC;EAE9F,OAAO;CACT;CAGA,IAAI,WAAW,SAAS,GAAG,GAAG;EAC5B,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,GAC/B,MAAM,KAAK,KAAK,MAAMA,sBAAAA,mBAAmB,YAAY,YAAY,CAAC;EAEpE,OAAO;CACT;CAGA,IADqB,QAAQ,KAAK,UAAU,KAAK,OAAO,QAAQ,CAAC,CAAC,SAAS,GAAG,GAC5D;EAChB,IAAI,4BAA4B,KAAK,OAAO,MAAM,GAAG,CAAC,GAAG;GACvD,IAAI,mBAAmB,KAAK,OAAO,MAAM,GAAG,CAAC,GAC3C,MAAM,KAAK,KAAK,UAAUA,sBAAAA,mBAAmB,SAAS,eAAe,CAAC;GAExE,MAAM,SAAS,IAAI,IAAI,CAAC,GAAG,gBAAgB,GAAG,OAAO,KAAK,IAAI,MAAM,CAAC,CAAC;GACtE,KAAK,MAAM,SAAS,QAClB,MAAM,KAAK,KAAK,OAAOA,sBAAAA,mBAAmB,QAAQ,aAAa,CAAC;EAEpE;EACA,IAAI,gCAAgC,KAAK,MAAM,GAC7C,KAAK,MAAM,MAAM,kBACf,MAAM,KAAK,KAAK,IAAIA,sBAAAA,mBAAmB,OAAO,CAAC;EAGnD,IAAI,iCAAiC,KAAK,OAAO,MAAM,GAAG,CAAC,KAAK,WAC9D,KAAK,MAAM,WAAW,WAAW,SAAS,GACxC,MAAM,KAAK,KAAK,QAAQ,MAAMA,sBAAAA,mBAAmB,MAAM,QAAQ,OAAO,KAAK,KAAK,CAAC,CAAC;EAGtF,IAAI,wBAAwB,KAAK,OAAO,MAAM,GAAG,CAAC,GAChD,KAAK,MAAM,CAAC,IAAI,SAAS,OAAO,QAAQ,IAAI,WAAW,GACrD,MAAM,KAAK,KAAK,IAAIA,sBAAAA,mBAAmB,UAAU,cAAc,MAAM,CAAC;EAG1E,IAAI,uBAAuB,KAAK,OAAO,MAAM,GAAG,CAAC,GAC/C,KAAK,MAAM,CAAC,IAAI,SAAS,OAAO,QAAQ,IAAI,UAAU,GACpD,MAAM,KAAK,KAAK,IAAIA,sBAAAA,mBAAmB,UAAU,cAAc,MAAM,CAAC;EAG1E,IAAI,MAAM,SAAS,GAAG,OAAO;CAC/B;CAGA,MAAM,eAAe,WAAW,MAAM,gCAAgC;CACtE,IAAI,gBAAgB,WAAW;EAC7B,MAAM,UAAU,WAAW,SAAS,CAAC,CAAC,MAAM,MAAM,EAAE,SAAS,aAAa,EAAE;EAC5E,IAAI,SAAS;GACX,KAAK,MAAM,SAAS,QAAQ,QAC1B,MAAM,KAAK,KAAK,OAAOA,sBAAAA,mBAAmB,YAAY,YAAY,QAAQ,MAAM,CAAC;GAEnF,OAAO;EACT;CACF;CAGA,IAAI,aAAa,KAAK,UAAU,GAAG;EACjC,MAAM,SAAS,IAAI,IAAI,CAAC,GAAG,OAAO,KAAK,IAAI,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,CAAC;EACrE,KAAK,MAAM,SAAS,QAClB,MAAM,KAAK,KAAK,OAAOA,sBAAAA,mBAAmB,QAAQ,aAAa,CAAC;EAElE,IAAI,OAAO,KAAK,IAAI,SAAS,CAAC,CAAC,SAAS,GACtC,MAAM,KAAK,KAAK,aAAaA,sBAAAA,mBAAmB,QAAQ,YAAY,CAAC;EAEvE,OAAO;CACT;CAGA,KAAK,MAAM,QAAQ,iBAAiB,GAClC,MAAM,KAAK;EACT,OAAO,KAAK;EACZ,MAAMA,sBAAAA,mBAAmB;EACzB,QAAQ,KAAK;EACb,eAAe,oBAAoB,IAAI,KAAK,KAAA;CAC9C,CAAC;CAEH,IAAI,MAAM,SAAS,KAAK,WAAW,OAAO;CAE1C,KAAK,MAAM,MAAM;EAAC,GAAG;EAAc,GAAG;EAAkB;CAAK,GAC3D,MAAM,KAAK,KAAK,IAAIA,sBAAAA,mBAAmB,OAAO,CAAC;CAEjD,OAAO;AACT;AAEA,SAAS,WAAW,WAAgE;CAClF,MAAM,MAA4C,CAAC;CACnD,KAAK,MAAM,QAAQ,UAAU,OAAO;EAClC,IAAI,KAAK,SAAS,YAAY;EAC9B,KAAK,MAAM,WAAW,KAAK,UACzB,IAAI,KAAK;GAAE,MAAM,QAAQ;GAAM,QAAQ,QAAQ,OAAO,KAAK,MAAM,EAAE,IAAI;EAAE,CAAC;CAE9E;CACA,OAAO;AACT;;;AClNA,SAAgB,cACd,UACA,QACA,WACiB;CACjB,MAAM,SAAS,aAAa,SAAS,KAAK,MAAM;CAChD,IAAI,CAAC,QAAQ,OAAO;CAEpB,MAAM,QAAQ,UAAU,SAAS,SAAS,IAAI;CAC9C,MAAM,aAAa,UAAU,QAAQ,MAAM,SAAS,SAAS;CAE7D,MAAM,SAAS,SAAyB,YAAY,SAAS,MAAM,SAAS,OAAO,IAAI;CACvF,MAAM,WAAW,SACf,SAAS,CAAC,aAAa,YAAY,MAAM,MAAM,MAAM,OAAO,IAAI,IAAI;CAEtE,QAAQ,OAAO,MAAf;EACE,KAAK,aAAa;GAChB,IAAI,OAAO,KAAK,UAAU,aAAa;IACrC,MAAM,MAAM,cAAc,SAAS,KAAK,OAAO,KAAK,IAAI;IACxD,IAAI,KAAK,OAAO,MAAM,GAAG;IACzB,MAAM,SAAS,SAAS,cAAc,MAAM,KAAK,OAAO,KAAK,IAAI;IACjE,OAAO,SAAS,QAAQ,MAAM,IAAI;GACpC;GAEA,IAAI,OAAO,WAAW;IACpB,MAAM,aAAa,eAAe,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,KAAK,IAAI;IACvF,IAAI,YAAY,OAAO,MAAM,WAAW,IAAI;GAC9C;GACA,MAAM,MAAM,eAAe,SAAS,KAAK,OAAO,KAAK,OAAO,OAAO,KAAK,IAAI;GAC5E,IAAI,KAAK,OAAO,MAAM,GAAG;GACzB,MAAM,SAAS,SAAS,eAAe,MAAM,KAAK,OAAO,KAAK,OAAO,OAAO,KAAK,IAAI;GACrF,OAAO,SAAS,QAAQ,MAAM,IAAI;EACpC;EACA,KAAK,cAAc;GACjB,MAAM,MAAM,WAAW,SAAS,KAAK,OAAO,IAAI;GAChD,IAAI,KAAK,OAAO,MAAM,GAAG;GACzB,MAAM,SAAS,SAAS,WAAW,MAAM,KAAK,OAAO,IAAI;GACzD,OAAO,SAAS,QAAQ,MAAM,IAAI;EACpC;EACA,KAAK,mBAAmB;GACtB,MAAM,UAAU,iBAAiB,OAAO,WAAW,OAAO,MAAM,OAAO;GACvE,IAAI,CAAC,SAAS,OAAO;GACrB,IAAI,OAAO,SAAS,WAAW,OAAO,MAAM,QAAQ,QAAQ;GAC5D,MAAM,QAAQ,QAAQ,OAAO,MAAM,MAAM,EAAE,SAAS,OAAO,MAAM,KAAK;GACtE,OAAO,QAAQ,MAAM,MAAM,QAAQ,IAAI,MAAM,QAAQ,QAAQ;EAC/D;EACA,KAAK,mBAAmB;GACtB,MAAM,QAAQ,OAAO,YAAY,eAAe,eAAe;GAC/D,MAAM,MAAM,eAAe,SAAS,KAAK,OAAO,OAAO,GAAG;GAC1D,IAAI,KAAK,OAAO,MAAM,GAAG;GACzB,MAAM,SAAS,SAAS,eAAe,MAAM,KAAK,OAAO,OAAO,GAAG;GACnE,OAAO,SAAS,QAAQ,MAAM,IAAI;EACpC;EACA,SACE,OAAO;CACX;AACF;AAEA,SAAS,YAAY,MAAc,OAAkB,MAAsB;CACzE,MAAM,QAAQ,MAAM,YAAY,IAAI;CACpC,OAAO;EACL,MAAA,GAAA,SAAA,cAAA,CAAmB,IAAI,CAAC,CAAC,SAAS;EAClC,OAAO;GACL,OAAO;IAAE,MAAM,MAAM,MAAM,OAAO;IAAG,WAAW,MAAM,MAAM,MAAM;GAAE;GACpE,KAAK;IAAE,MAAM,MAAM,IAAI,OAAO;IAAG,WAAW,MAAM,IAAI,MAAM;GAAE;EAChE;CACF;AACF;AAEA,SAAS,eAAe,KAAgB,OAAe,MAA2B;CAChF,KAAK,MAAM,QAAQ,IAAI,OAAO;EAC5B,IAAI,KAAK,SAAS,SAAS;EAC3B,KAAK,MAAM,KAAK,KAAK,QAAQ;GAC3B,IAAI,EAAE,SAAS,OAAO;GACtB,KAAK,MAAM,SAAS,EAAE,SACpB,IAAI,MAAM,SAAS,MAAM,OAAO,MAAM;EAE1C;CACF;CACA,OAAO;AACT;AAEA,SAAS,WAAW,KAAgB,MAA2B;CAC7D,KAAK,MAAM,QAAQ,IAAI,OACrB,IAAI,KAAK,SAAS,YAAY,KAAK,SAAS,MAAM,OAAO,KAAK;CAEhE,OAAO;AACT;AAEA,SAAS,cAAc,KAAgB,MAA2B;CAChE,KAAK,MAAM,QAAQ,IAAI,OACrB,IAAI,KAAK,SAAS,eAAe,KAAK,SAAS,MAAM,OAAO,KAAK;CAEnE,OAAO;AACT;AAEA,SAAS,iBACP,WACA,MACuE;CACvE,KAAK,MAAM,QAAQ,UAAU,OAAO;EAClC,IAAI,KAAK,SAAS,YAAY;EAC9B,MAAM,UAAU,KAAK,SAAS,MAAM,MAAM,EAAE,SAAS,IAAI;EACzD,IAAI,SACF,OAAO;GACL,UAAU,QAAQ;GAClB,QAAQ,QAAQ,OAAO,KAAK,OAAO;IAAE,MAAM,EAAE;IAAM,UAAU,EAAE;GAAS,EAAE;EAC5E;CAEJ;CACA,OAAO;AACT;;;;ACnHA,SAAgB,iBAAiB,UAA6C;CAC5E,OAAO,SAAS,YAAY,KAAK,MAAM;EACrC,MAAM,QAAQ,SAAS,MAAM,YAAY,EAAE,IAAI;EAC/C,OAAO;GACL,UAAU,EAAE,aAAa,UAAU,IAAI;GACvC,OAAO;IACL,OAAO;KAAE,MAAM,MAAM,MAAM,OAAO;KAAG,WAAW,MAAM,MAAM,MAAM;IAAE;IACpE,KAAK;KAAE,MAAM,MAAM,IAAI,OAAO;KAAG,WAAW,MAAM,IAAI,MAAM;IAAE;GAChE;GACA,SAAS,EAAE,OAAO,GAAG,EAAE,QAAQ,IAAI,EAAE,KAAK,KAAK,EAAE;GACjD,QAAQ;GACR,MAAM,EAAE;EACV;CACF,CAAC;AACH;;;ACRA,SAAgB,WAAW,KAAqB;CAC9C,OAAO,IAAI,WAAW,SAAS,IAAI,mBAAmB,IAAI,MAAM,CAAC,CAAC,IAAI;AACxE;;AAGA,IAAa,gBAAb,MAA2B;CAGI;CAF7B,wBAAgB,IAAI,IAA6D;CAEjF,YAAY,cAAgE;EAA/C,KAAA,eAAA;CAAgD;CAE7E,YAAY,KAAqC;EAC/C,MAAM,SAAS,KAAK,MAAM,IAAI,IAAI,GAAG;EACrC,IAAI,UAAU,OAAO,YAAY,IAAI,SAAS,OAAO,OAAO;EAC5D,MAAM,OAAO,WAAW,IAAI,GAAG;EAC/B,MAAM,SAAS,IAAI,QAAQ;EAG3B,MAAM,WAA6B;GACjC,IAAA,GAAA,kBAAA,QAAA,CAFqB,QAAQ;IAAE,UAAU;IAAM,KADrC,KAAK,aAAa,IAAI,GAAG,CAAC,CAAC,OAAO,IACK;GAAE,CAE3C;GACR,OAAO,IAAIC,kBAAAA,UAAU,MAAM;GAC3B;GACA;EACF;EACA,KAAK,MAAM,IAAI,IAAI,KAAK;GAAE,SAAS,IAAI;GAAS;EAAS,CAAC;EAC1D,OAAO;CACT;CAEA,WAAW,KAAmB;EAC5B,KAAK,MAAM,OAAO,GAAG;CACvB;CAEA,gBAAsB;EACpB,KAAK,MAAM,MAAM;CACnB;AACF;;;ACrCA,MAAM,kBAAkB;;AAGxB,SAAgB,cAAc,UAA4B,OAA2B;CACnF,MAAM,cAAc,SAAS,MAAM,SAAS;EAC1C,MAAM,MAAM,MAAM,OAAO;EACzB,KAAK,MAAM,MAAM,YAAY;CAC/B,CAAC;CACD,MAAM,YAAY,SAAS,MAAM,SAAS;EACxC,MAAM,MAAM,IAAI,OAAO;EACvB,KAAK,MAAM,IAAI,YAAY;CAC7B,CAAC;CAED,MAAM,QAAqB,CAAC;CAC5B,KAAK,MAAM,EAAE,MAAM,eAAe,iBAAiB,SAAS,GAAG,GAC7D,KAAK,MAAM,QAAQ,KAAK,MAAM,OAAO;EACnC,IAAI,KAAK,SAAS,SAAS,KAAK,UAAU,aAAa;EACvD,IAAI,KAAK,KAAK,MAAM,eAAe,KAAK,KAAK,QAAQ,WAAW;EAChE,MAAM,WAAW,eAAe,UAAU,KAAK,OAAO,KAAK,MAAM,SAAS;EAC1E,IAAI,CAAC,YAAY,aAAa,KAAK,MAAM;EACzC,MAAM,WAAW,SAAS,MAAM,WAAW,KAAK,KAAK,GAAG;EACxD,MAAM,KAAK;GACT,UAAU;IAAE,MAAM,SAAS,OAAO;IAAG,WAAW,SAAS,MAAM;GAAE;GACjE,OAAO,MAAM,SAAS,QAAQ;GAC9B,MAAMC,sBAAAA,cAAc;GACpB,aAAa;EACf,CAAC;CACH;CAEF,OAAO;AACT;AAEA,SAAS,eACP,UACA,OACA,MACA,WACe;CACf,IAAI,WAAW;EACb,MAAM,QAAQ,eAAe,WAAW,OAAO,IAAI;EACnD,IAAI,OAAO,OAAO,MAAM;CAC1B;CACA,MAAM,QAAQ,SAAS,IAAI,OAAO,MAAM,GAAG;CAC3C,IAAI,UAAU,KAAA,GAAW,OAAO;CAChC,IAAI,OAAO,UAAU,UAAU,OAAO;CAEtC,MAAM,QADQ,SAAS,IAAI,QACL;CACtB,QAAQ,SAAS,MAAM,WAAW,OAAO,OAAO,KAAK,CAAC,CAAC,MAAM;AAC/D;AAEA,SAAS,SAAS,OAAuB;CACvC,OAAO,MAAM,SAAS,kBAAkB,GAAG,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,KAAK;AACtF;;;AChDA,MAAM,UAAU;AAChB,MAAM,gBAAgB;AAUtB,SAAgB,cACd,UACA,QAC8C;CAC9C,MAAM,WAAW,WAAW,UAAU,MAAM;CAC5C,IAAI,CAAC,UAAU,OAAO;CACtB,OAAO;EAAE,OAAO,QAAQ,UAAU,SAAS,IAAI;EAAG,aAAa,SAAS;CAAY;AACtF;AAEA,SAAgB,eACd,UACA,QACA,SACA,WACA,YACsB;CACtB,MAAM,WAAW,WAAW,UAAU,MAAM;CAC5C,IAAI,CAAC,UAAU,OAAO;CACtB,MAAM,EAAE,aAAa;CAGrB,IAAI,EADc,SAAS,SAAS,UAAU,gBAAgB,QAAA,CAC/C,KAAK,OAAO,GAAG,OAAO;CAErC,MAAM,UAAsC,CAAC;CAC7C,MAAM,YAAY,MAAc,QAAgB,QAAmB;EACjE,MAAM,QAAQ,IAAIC,kBAAAA,UAAU,MAAM;EAClC,MAAM,QAAQ,YAAY,KAAK,UAAU,OAAO;EAChD,IAAI,MAAM,WAAW,GAAG;EACxB,MAAM,OAAA,GAAA,SAAA,cAAA,CAAoB,IAAI,CAAC,CAAC,SAAS;EACzC,QAAQ,OAAO,MAAM,KAAK,EAAE,MAAM,YAAY;GAC5C,OAAO,SAAS,OAAO,IAAI;GAC3B,SAAS;EACX,EAAE;CACJ;CAGA,SAAS,SAAS,MAAM,SAAS,QAAQ,SAAS,GAAG;CAGrD,IAAI,eAAe,IAAI,SAAS,IAAI,KAAK,oBAAoB,UAAU,SAAS,GAAG;EACjF,MAAM,YAAYC,UAAAA,QAAK,QAAQ,SAAS,IAAI;EAC5C,KAAK,MAAM,QAAQ,aAAa,UAAU,IAAI,GAAG;GAC/C,MAAM,eAAeA,UAAAA,QAAK,QAAQ,IAAI;GACtC,IAAI,iBAAiBA,UAAAA,QAAK,QAAQ,SAAS,IAAI,GAAG;GAClD,IAAI,UAAU,aAAa,YAAY,MAAM,WAAW;GACxD,MAAM,SAAS,WAAW,YAAY;GACtC,IAAI,WAAW,MAAM;GACrB,SAAS,cAAc,SAAA,GAAA,kBAAA,MAAA,CAAc,QAAQ,YAAY,CAAC,CAAC,GAAG;EAChE;CACF;CAEA,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC,SAAS,IAAI,EAAE,QAAQ,IAAI;AACzD;AAEA,MAAM,iBAAiB,IAAI,IAAI;CAAC;CAAS;CAAU;AAAW,CAAC;;AAG/D,SAAS,oBAAoB,UAA4B,WAAoC;CAC3F,OAAO,UAAU,aAAa,SAAS,IAAI,MAAMA,UAAAA,QAAK,QAAQ,SAAS,IAAI;AAC7E;AAEA,SAAS,WACP,UACA,QACsE;CACtE,MAAM,SAAS,aAAa,SAAS,KAAK,MAAM;CAChD,IAAI,CAAC,QAAQ,OAAO;CACpB,QAAQ,OAAO,MAAf;EACE,KAAK,aAAa;GAChB,IAAI,OAAO,KAAK,UAAU,aACxB,OAAO;IACL,UAAU;KAAE,MAAM;KAAa,MAAM,OAAO,KAAK;IAAK;IACtD,MAAM,OAAO,KAAK;IAClB,aAAa,OAAO,KAAK;GAC3B;GAEF,MAAM,QAAQ,OAAO,YACjB,eAAe,OAAO,WAAW,OAAO,KAAK,OAAO,OAAO,KAAK,IAAI,IACpE;GACJ,OAAO;IACL,UAAU;KACR,MAAM;KACN,OAAO,OAAO,KAAK;KACnB,MAAM,OAAO,KAAK;KAClB,WAAW,QAAQ,OAAO,YAAY;IACxC;IACA,MAAM,OAAO,KAAK;IAClB,aAAa,OAAO,KAAK;GAC3B;EACF;EACA,KAAK,eACH,OAAO;GACL,UAAU;IACR,MAAM;IACN,OAAO,OAAO,MAAM;IACpB,MAAM,OAAO;IACb,WAAW,OAAO,UAAU,cAAc,OAAO,YAAY;GAC/D;GACA,MAAM,OAAO;GACb,aAAa,OAAO;EACtB;EACF,KAAK,cACH,OAAO;GACL,UAAU;IAAE,MAAM;IAAU,MAAM,OAAO;GAAK;GAC9C,MAAM,OAAO;GACb,aAAa,OAAO;EACtB;EACF,KAAK,eACH,OAAO;GACL,UAAU;IAAE,MAAM;IAAU,MAAM,OAAO,OAAO;GAAK;GACrD,MAAM,OAAO,OAAO;GACpB,aAAa,OAAO,OAAO;EAC7B;EACF,KAAK,kBACH,OAAO;GACL,UAAU;IAAE,MAAM;IAAa,MAAM,OAAO,UAAU;GAAK;GAC3D,MAAM,OAAO,UAAU;GACvB,aAAa,OAAO,UAAU;EAChC;EACF,KAAK,gBACH,OAAO;GACL,UAAU;IAAE,MAAM;IAAW,WAAW,OAAO;IAAW,MAAM,OAAO,QAAQ;GAAK;GACpF,MAAM,OAAO,QAAQ;GACrB,aAAa,OAAO,QAAQ;EAC9B;EACF,KAAK,sBACH,OAAO;GACL,UAAU;IACR,MAAM;IACN,WAAW,OAAO;IAClB,SAAS,OAAO,QAAQ;IACxB,MAAM,OAAO,MAAM;GACrB;GACA,MAAM,OAAO,MAAM;GACnB,aAAa,OAAO,MAAM;EAC5B;EACF,KAAK;GACH,IAAI,OAAO,SAAS,WAClB,OAAO;IACL,UAAU;KAAE,MAAM;KAAW,WAAW,OAAO;KAAW,MAAM,OAAO,MAAM;IAAQ;IACrF,MAAM,OAAO,MAAM;IACnB,aAAa,OAAO,MAAM;GAC5B;GAEF,OAAO;IACL,UAAU;KACR,MAAM;KACN,WAAW,OAAO;KAClB,SAAS,OAAO,MAAM;KACtB,MAAM,OAAO,MAAM;IACrB;IACA,MAAM,OAAO,MAAM;IACnB,aAAa,OAAO,MAAM;GAC5B;EAEF,KAAK,aACH,OAAO;GACL,UAAU;IAAE,MAAM;IAAQ,WAAW,OAAO;IAAW,MAAM,OAAO;GAAK;GACzE,MAAM,OAAO;GACb,aAAa,OAAO;EACtB;EACF,SAGE,OAAO;CACX;AACF;AAEA,SAAS,YACP,KACA,UACA,SACgC;CAChC,MAAM,QAAwC,CAAC;CAC/C,QAAQ,SAAS,MAAjB;EACE,KAAK,SAAS;GACZ,MAAM,SAAS,SAAS;GACxB,KAAK,MAAM,SAAS,iBAAiB,GAAG,GAAG;IACzC,IAAI,MAAM,MAAM,SAAS,SAAS,SAAS,MAAM,MAAM,SAAS,SAAS,MAAM;IAC/E,IAAI,SAAS,MAAM,cAAc,SAAS,MAAM,UAAU,SAAS;IACnE,MAAM,KAAK;KAAE,MAAM,MAAM,MAAM;KAAU,MAAM;IAAQ,CAAC;GAC1D;GACA,KAAK,MAAM,EAAE,MAAM,eAAe,iBAAiB,GAAG,GACpD,KAAK,MAAM,QAAQ,KAAK,MAAM,OAAO;IACnC,IAAI,KAAK,SAAS,SAAS,KAAK,UAAU,SAAS,SAAS,KAAK,SAAS,SAAS,MACjF;IAEF,MAAM,WAAW,YACb,eAAe,WAAW,SAAS,OAAO,SAAS,IAAI,MAAM,OAC7D;IACJ,IAAI,SAAS,cAAc,SAAS,UAAU;IAC9C,MAAM,KAAK;KAAE,MAAM,KAAK;KAAM,MAAM,GAAG,SAAS,MAAM,GAAG;IAAU,CAAC;GACtE;GAGF,IAAI,CAAC;SACE,MAAM,SAAS,iBAAiB,GAAG,GACtC,KAAK,MAAM,QAAQ,MAAM,MAAM,MAAM,OACnC,IACE,KAAK,SAAS,SACd,KAAK,UAAU,SAAS,SACxB,KAAK,SAAS,SAAS,MAEvB,MAAM,KAAK;KAAE,MAAM,KAAK;KAAM,MAAM,GAAG,SAAS,MAAM,GAAG;IAAU,CAAC;GAAA;GAK5E;EACF;EACA,KAAK;GACH,KAAK,MAAM,QAAQ,IAAI,OACrB,IAAI,KAAK,SAAS,YAAY,KAAK,SAAS,SAAS,MACnD,MAAM,KAAK;IAAE,MAAM,KAAK;IAAU,MAAM;GAAQ,CAAC;GAGrD,KAAK,MAAM,OAAO,SAAS,GAAG,GAC5B,IAAI,IAAI,WAAW,SAAS,MAAM,MAAM,KAAK;IAAE,MAAM,IAAI;IAAY,MAAM;GAAQ,CAAC;GAEtF;EAEF,KAAK;GACH,KAAK,MAAM,QAAQ,IAAI,OACrB,IAAI,KAAK,SAAS,eAAe,KAAK,SAAS,SAAS,MACtD,MAAM,KAAK;IAAE,MAAM,KAAK;IAAU,MAAM;GAAQ,CAAC;GAGrD,KAAK,MAAM,EAAE,WAAW,WAAW,GAAG,GACpC,KAAK,MAAM,QAAQ,MAAM,OACvB,IAAI,KAAK,SAAS,SAAS,KAAK,UAAU,eAAe,KAAK,SAAS,SAAS,MAC9E,MAAM,KAAK;IAAE,MAAM,KAAK;IAAM,MAAM,aAAa;GAAU,CAAC;GAIlE;EAEF,KAAK;EACL,KAAK;EACL,KAAK,QAAQ;GACX,MAAM,YAAY,cAAc,KAAK,SAAS,UAAU,IAAI;GAC5D,IAAI,WAAW,MAAM,KAAK,GAAG,eAAe,WAAW,UAAU,OAAO,CAAC;GACzE;EACF;CACF;CACA,OAAO;AACT;AAEA,SAAS,eACP,WACA,UACA,SACgC;CAChC,MAAM,QAAwC,CAAC;CAC/C,MAAM,kBACJ,YACG;EACH,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAI,SAAS,SAAS,aAAa,MAAM,YAAY,SAAS,MAC5D,MAAM,KAAK;IAAE,MAAM,MAAM;IAAa,MAAM;GAAQ,CAAC;GAEvD,IACE,SAAS,SAAS,mBAClB,MAAM,YAAY,SAAS,WAC3B,MAAM,UAAU,SAAS,MAEzB,MAAM,KAAK;IAAE,MAAM,MAAM;IAAW,MAAM;GAAQ,CAAC;EAEvD;CACF;CACA,MAAM,YAAY,MAAc,SAAe;EAC7C,IAAI,SAAS,SAAS,UAAU,SAAS,SAAS,MAAM,MAAM,KAAK;GAAE;GAAM,MAAM;EAAQ,CAAC;CAC5F;CAEA,KAAK,MAAM,QAAQ,UAAU,OAC3B,QAAQ,KAAK,MAAb;EACE,KAAK;GACH,KAAK,MAAM,QAAQ,KAAK,OAAO,SAAS,KAAK,MAAM,KAAK,QAAQ;GAChE;EACF,KAAK;GACH,KAAK,MAAM,QAAQ,KAAK,KAAK,OAAO;IAClC,IAAI,KAAK,SAAS,aAAa,SAAS,KAAK,MAAM,KAAK,QAAQ;IAChE,IAAI,KAAK,SAAS,SAChB,KAAK,MAAM,QAAQ,KAAK,OAAO,SAAS,KAAK,MAAM,KAAK,QAAQ;GAEpE;GACA;EACF,KAAK;GACH,KAAK,MAAM,WAAW,KAAK,UAAU;IACnC,IAAI,SAAS,SAAS,aAAa,QAAQ,SAAS,SAAS,MAC3D,MAAM,KAAK;KAAE,MAAM,QAAQ;KAAU,MAAM;IAAQ,CAAC;IAEtD,KAAK,MAAM,SAAS,QAAQ,QAAQ;KAClC,IACE,SAAS,SAAS,mBAClB,QAAQ,SAAS,SAAS,WAC1B,MAAM,SAAS,SAAS,MAExB,MAAM,KAAK;MAAE,MAAM,MAAM;MAAU,MAAM;KAAQ,CAAC;KAEpD,KAAK,MAAM,QAAQ,MAAM,KAAK,OAAO;MACnC,IAAI,KAAK,SAAS,aAAa,SAAS,KAAK,MAAM,KAAK,QAAQ;MAChE,IAAI,KAAK,SAAS,SAChB,KAAK,MAAM,QAAQ,KAAK,OAAO,SAAS,KAAK,MAAM,KAAK,QAAQ;KAEpE;IACF;GACF;GACA;EACF,KAAK;GACH,eAAe,KAAK,OAAO;GAC3B;EACF,KAAK;EACL,KAAK;GACH,KAAK,MAAM,SAAS,KAAK,SAAS,eAAe,MAAM,QAAQ;GAC/D;EACF,KAAK;GACH,eAAe,KAAK,QAAQ;GAC5B,KAAK,MAAM,QAAQ,KAAK,OAAO,SAAS,KAAK,MAAM,KAAK,QAAQ;GAChE;CACJ;CAEF,OAAO;AACT;AAEA,SAAS,cAAc,KAAgB,MAAoC;CACzE,KAAK,MAAM,QAAQ,IAAI,OACrB,IAAI,KAAK,SAAS,eAAe,KAAK,SAAS,MAAM,OAAO;CAE9D,OAAO;AACT;AAEA,SAAS,SAAS,OAAkB,MAAmB;CACrD,MAAM,QAAQ,MAAM,YAAY,IAAI;CACpC,OAAO;EACL,OAAO;GAAE,MAAM,MAAM,MAAM,OAAO;GAAG,WAAW,MAAM,MAAM,MAAM;EAAE;EACpE,KAAK;GAAE,MAAM,MAAM,IAAI,OAAO;GAAG,WAAW,MAAM,IAAI,MAAM;EAAE;CAChE;AACF;AAEA,MAAM,YAAY,IAAI,IAAI;CAAC;CAAgB;CAAQ;CAAQ;CAAS;AAAU,CAAC;AAE/E,SAAgB,aAAa,MAAwB;CACnD,MAAM,MAAgB,CAAC;CACvB,MAAM,QAAQ,QAAgB;EAC5B,IAAI;EACJ,IAAI;GACF,UAAUC,QAAAA,QAAG,YAAY,KAAK,EAAE,eAAe,KAAK,CAAC;EACvD,QAAQ;GACN;EACF;EACA,KAAK,MAAM,SAAS,SAClB,IAAI,MAAM,YAAY;OAChB,CAAC,UAAU,IAAI,MAAM,IAAI,GAAG,KAAKD,UAAAA,QAAK,KAAK,KAAK,MAAM,IAAI,CAAC;EAAA,OAC1D,IAAI,MAAM,KAAK,SAAS,MAAM,GACnC,IAAI,KAAKA,UAAAA,QAAK,KAAK,KAAK,MAAM,IAAI,CAAC;CAGzC;CACA,KAAK,IAAI;CACT,OAAO;AACT;AAEA,SAAgB,WAAW,MAA6B;CACtD,IAAI;EACF,OAAOC,QAAAA,QAAG,aAAa,MAAM,MAAM;CACrC,QAAQ;EACN,OAAO;CACT;AACF;;;ACjYA,SAAgB,mBAAmB,UAA8C;CAC/E,MAAM,UACJ,MACA,MACA,MACA,UACA,UACA,WACmB;EACnB,MAAM,OAAO,SAAS,MAAM,YAAY,IAAI;EAC5C,MAAM,MAAM,SAAS,MAAM,YAAY,QAAQ;EAC/C,OAAO;GACL;GACA;GACA;GACA,OAAO;IACL,OAAO;KAAE,MAAM,KAAK,MAAM,OAAO;KAAG,WAAW,KAAK,MAAM,MAAM;IAAE;IAClE,KAAK;KAAE,MAAM,KAAK,IAAI,OAAO;KAAG,WAAW,KAAK,IAAI,MAAM;IAAE;GAC9D;GACA,gBAAgB;IACd,OAAO;KAAE,MAAM,IAAI,MAAM,OAAO;KAAG,WAAW,IAAI,MAAM,MAAM;IAAE;IAChE,KAAK;KAAE,MAAM,IAAI,IAAI,OAAO;KAAG,WAAW,IAAI,IAAI,MAAM;IAAE;GAC5D;GACA;EACF;CACF;CAEA,MAAM,MAAwB,CAAC;CAC/B,KAAK,MAAM,QAAQ,SAAS,IAAI,OAC9B,QAAQ,KAAK,MAAb;EACE,KAAK,SAAS;GACZ,MAAM,SAAS,KAAK,OAAO,KAAK,UAC9B,OACE,MAAM,MACNC,sBAAAA,WAAW,WACX,MAAM,MACN,MAAM,UACN,MAAM,QAAQ,KAAK,UACjB,OACE,MAAM,MACNA,sBAAAA,WAAW,UACX,MAAM,MACN,MAAM,UACN,KAAA,GACA,MAAM,MAAM,IACd,CACF,CACF,CACF;GACA,IAAI,KAAK,OAAO,SAASA,sBAAAA,WAAW,QAAQ,KAAK,MAAM,KAAK,MAAM,MAAM,CAAC;GACzE;EACF;EACA,KAAK;GACH,IAAI,KAAK,OAAO,UAAUA,sBAAAA,WAAW,QAAQ,KAAK,MAAM,KAAK,IAAI,CAAC;GAClE;EACF,KAAK;GACH,IAAI,KACF,OAAO,KAAK,MAAMA,sBAAAA,WAAW,UAAU,KAAK,MAAM,KAAK,UAAU,KAAA,GAAW,QAAQ,CACtF;GACA;EACF,KAAK;GACH,IAAI,KACF,OAAO,KAAK,MAAMA,sBAAAA,WAAW,OAAO,KAAK,MAAM,KAAK,UAAU,KAAA,GAAW,WAAW,CACtF;GACA;EACF,KAAK;GACH,IAAI,KACF,OAAO,KAAK,MAAMA,sBAAAA,WAAW,UAAU,KAAK,MAAM,KAAK,UAAU,KAAA,GAAW,OAAO,CACrF;GACA;EACF,KAAK,aAAa;GAChB,MAAM,WAA6B,CAAC;GACpC,KAAK,MAAM,QAAQ,KAAK,OAAO;IAC7B,IAAI,KAAK,SAAS,SAChB,KAAK,MAAM,QAAQ,KAAK,OACtB,SAAS,KACP,OAAO,KAAK,MAAMA,sBAAAA,WAAW,OAAO,KAAK,MAAM,KAAK,UAAU,KAAA,GAAW,MAAM,CACjF;IAGJ,IAAI,KAAK,SAAS,YAChB,KAAK,MAAM,WAAW,KAAK,UACzB,SAAS,KACP,OACE,QAAQ,MACRA,sBAAAA,WAAW,MACX,QAAQ,MACR,QAAQ,UACR,QAAQ,OAAO,KAAK,UAClB,OAAO,MAAM,MAAMA,sBAAAA,WAAW,YAAY,MAAM,MAAM,MAAM,QAAQ,CACtE,GACA,SACF,CACF;IAGJ,IAAI,KAAK,SAAS,UAChB,KAAK,MAAM,SAAS,KAAK,QACvB,SAAS,KACP,OACE,MAAM,MACNA,sBAAAA,WAAW,WACX,MAAM,MACN,MAAM,UACN,MAAM,QAAQ,KAAK,UACjB,OACE,MAAM,MACNA,sBAAAA,WAAW,UACX,MAAM,MACN,MAAM,UACN,KAAA,GACA,MAAM,MAAM,IACd,CACF,GACA,cACF,CACF;GAGN;GACA,IAAI,KACF,OAAO,KAAK,MAAMA,sBAAAA,WAAW,OAAO,KAAK,MAAM,KAAK,UAAU,UAAU,WAAW,CACrF;GACA;EACF;CACF;CAEF,OAAO;AACT;;;ACxHA,IAAa,iBAAb,MAA4B;CAML;;CAJrB,yBAAiB,IAAI,IAA8B;;CAEnD,6BAAqB,IAAI,IAA2B;CAEpD,YAAY,MAAuB;EAAd,KAAA,OAAA;CAAe;;;;;;CAOpC,aAAa,MAA6B;EACxC,MAAM,WAAWC,UAAAA,QAAK,QAAQ,IAAI;EAClC,IAAIA,UAAAA,QAAK,SAAS,QAAQ,MAAM,aAAa,OAAO;EAEpD,IAAI,MAAMA,UAAAA,QAAK,QAAQ,QAAQ;EAC/B,MAAM,UAAoB,CAAC;EAC3B,IAAI,SAAwB;EAC5B,SAAS;GACP,MAAM,SAAS,KAAK,WAAW,IAAI,GAAG;GACtC,IAAI,WAAW,KAAA,GAAW;IACxB,SAAS;IACT;GACF;GACA,QAAQ,KAAK,GAAG;GAChB,MAAM,SAASA,UAAAA,QAAK,KAAK,KAAK,WAAW;GACzC,IAAIC,QAAAA,QAAG,WAAW,MAAM,GAAG;IACzB,SAAS;IACT;GACF;GACA,MAAM,eAAeD,UAAAA,QAAK,KAAK,KAAK,OAAO,WAAW;GACtD,IAAIC,QAAAA,QAAG,WAAW,YAAY,GAAG;IAC/B,SAAS;IACT;GACF;GACA,MAAM,SAASD,UAAAA,QAAK,QAAQ,GAAG;GAC/B,IAAI,QAAQA,UAAAA,QAAK,QAAQ,KAAK,IAAI,KAAK,WAAW,KAAK;IACrD,SAAS;IACT;GACF;GACA,MAAM;EACR;EACA,KAAK,MAAM,KAAK,SAAS,KAAK,WAAW,IAAI,GAAG,MAAM;EACtD,OAAO;CACT;CAEA,SAAS,MAAgC;EACvC,MAAM,YAAY,KAAK,aAAa,IAAI;EACxC,IAAI,CAAC,WAAW,OAAO;EACvB,IAAI,OAAO,KAAK,OAAO,IAAI,SAAS;EACpC,IAAI,SAAS,KAAA,GAAW;GACtB,OAAO,KAAK,UAAU,SAAS;GAC/B,KAAK,OAAO,IAAI,WAAW,IAAI;EACjC;EACA,OAAO;CACT;;CAGA,OAAO,MAAoC;EACzC,MAAM,QAAQ,KAAK,SAAS,IAAI;EAChC,IAAI,CAAC,SAAS,MAAM,SAASA,UAAAA,QAAK,QAAQ,IAAI,GAAG,OAAO,KAAA;EACxD,OAAO,MAAM;CACf;CAEA,UAAkB,WAAqC;EACrD,IAAI;EACJ,IAAI;GACF,SAASC,QAAAA,QAAG,aAAa,WAAW,MAAM;EAC5C,QAAQ;GACN,OAAO;EACT;EACA,MAAM,UAAA,GAAA,kBAAA,QAAA,CAAiB,QAAQ,EAAE,UAAU,UAAU,CAAC;EAEtD,OAAO;GACL,MAAM;GACN,KAHgB,OAAO,YAAY,MAAM,MAAM,EAAE,aAAa,OAGjD,IAAI,KAAA,IAAY,OAAO;GACpC,KAAK,OAAO;GACZ;GACA,OAAO,IAAIC,kBAAAA,UAAU,MAAM;EAC7B;CACF;;CAGA,WAAW,MAAoB;EAC7B,KAAK,OAAO,OAAOF,UAAAA,QAAK,QAAQ,IAAI,CAAC;EAErC,KAAK,WAAW,MAAM;CACxB;CAEA,gBAAsB;EACpB,KAAK,OAAO,MAAM;EAClB,KAAK,WAAW,MAAM;CACxB;AACF;AAEA,SAAgB,iBAAiB,MAAsB;CACrD,IAAI,MAAMA,UAAAA,QAAK,QAAQ,IAAI;CAC3B,SAAS;EACP,IAAIC,QAAAA,QAAG,WAAWD,UAAAA,QAAK,KAAK,KAAK,cAAc,CAAC,GAAG,OAAO;EAC1D,MAAM,SAASA,UAAAA,QAAK,QAAQ,GAAG;EAC/B,IAAI,WAAW,KAAK,OAAOA,UAAAA,QAAK,QAAQ,IAAI;EAC5C,MAAM;CACR;AACF;;;AClGA,MAAM,0BAA0B;AAEhC,MAAM,cAAA,GAAA,8BAAA,iBAAA,CAA8B;AACpC,MAAM,YAAY,IAAIG,8BAAAA,cAAcC,mCAAAA,YAAY;AAChD,MAAM,6BAAa,IAAI,IAA4B;AAEnD,SAAS,cAAc,MAAsB;CAC3C,QAAA,GAAA,SAAA,cAAA,CAAqB,IAAI,CAAC,CAAC,SAAS;AACtC;AAEA,SAAS,aAAa,KAA6B;CACjD,MAAM,OAAO,iBAAiB,WAAW,GAAG,CAAC;CAC7C,IAAI,KAAK,WAAW,IAAI,IAAI;CAC5B,IAAI,CAAC,IAAI;EACP,KAAK,IAAI,eAAe,IAAI;EAC5B,WAAW,IAAI,MAAM,EAAE;CACzB;CACA,OAAO;AACT;AAEA,MAAM,QAAQ,IAAI,cAAc,YAAY;AAC5C,MAAM,mCAAmB,IAAI,IAA2C;AAExE,SAAS,mBAAmB,KAAyB;CACnD,MAAM,WAAW,MAAM,YAAY,GAAG;CACtC,WAAW,gBAAgB;EAAE,KAAK,IAAI;EAAK,aAAa,iBAAiB,QAAQ;CAAE,CAAC;AACtF;AAEA,SAAS,oBAAoB,KAAmB,YAAY,OAAa;CACvE,MAAM,UAAU,iBAAiB,IAAI,IAAI,GAAG;CAC5C,IAAI,SAAS,aAAa,OAAO;CACjC,IAAI,WAAW;EACb,mBAAmB,GAAG;EACtB;CACF;CACA,iBAAiB,IACf,IAAI,KACJ,iBAAiB;EACf,iBAAiB,OAAO,IAAI,GAAG;EAC/B,MAAM,UAAU,UAAU,IAAI,IAAI,GAAG;EACrC,IAAI,SAAS,mBAAmB,OAAO;CACzC,GAAG,uBAAuB,CAC5B;AACF;AAEA,WAAW,cAAc,YAAgD;CACvE,OAAO,EACL,cAAc;EACZ,kBAAkBC,8BAAAA,qBAAqB;EACvC,oBAAoB,EAAE,mBAAmB;GAAC;GAAK;GAAK;GAAK;EAAG,EAAE;EAC9D,eAAe;EACf,oBAAoB;EACpB,wBAAwB;EACxB,eAAe;EACf,mBAAmB;EACnB,gBAAgB,EAAE,iBAAiB,KAAK;CAC1C,EACF;AACF,CAAC;AAED,UAAU,WAAW,UAAU;CAC7B,oBAAoB,MAAM,UAAU,IAAI;AAC1C,CAAC;AAED,UAAU,oBAAoB,UAAU;CACtC,oBAAoB,MAAM,QAAQ;AACpC,CAAC;AAED,UAAU,WAAW,UAAU;CAC7B,oBAAoB,MAAM,UAAU,IAAI;AAC1C,CAAC;AAED,UAAU,YAAY,UAAU;CAC9B,MAAM,UAAU,iBAAiB,IAAI,MAAM,SAAS,GAAG;CACvD,IAAI,SAAS,aAAa,OAAO;CACjC,iBAAiB,OAAO,MAAM,SAAS,GAAG;CAC1C,MAAM,WAAW,MAAM,SAAS,GAAG;CACnC,WAAW,gBAAgB;EAAE,KAAK,MAAM,SAAS;EAAK,aAAa,CAAC;CAAE,CAAC;AACzE,CAAC;AAID,WAAW,yBAAyB,WAAW;CAC7C,KAAK,MAAM,UAAU,OAAO,SAAS;EACnC,MAAM,OAAO,WAAW,OAAO,GAAG;EAClC,KAAK,MAAM,MAAM,WAAW,OAAO,GAAG,GAAG,WAAW,IAAI;CAC1D;CACA,MAAM,cAAc;CACpB,KAAK,MAAM,OAAO,UAAU,IAAI,GAAG,oBAAoB,GAAG;AAC5D,CAAC;AAED,WAAW,cAAc,WAAW;CAClC,MAAM,MAAM,UAAU,IAAI,OAAO,aAAa,GAAG;CACjD,IAAI,CAAC,KAAK,OAAO,CAAC;CAClB,OAAO,eAAe,MAAM,YAAY,GAAG,GAAG,IAAI,SAAS,OAAO,QAAQ,CAAC;AAC7E,CAAC;AAED,WAAW,SAAS,WAAW;CAC7B,MAAM,MAAM,UAAU,IAAI,OAAO,aAAa,GAAG;CACjD,IAAI,CAAC,KAAK,OAAO;CACjB,MAAM,KAAK,aAAa,OAAO,aAAa,GAAG;CAC/C,OAAO,SAAS,MAAM,YAAY,GAAG,GAAG,IAAI,SAAS,OAAO,QAAQ,GAAG,EAAE;AAC3E,CAAC;AAED,WAAW,cAAc,WAAW;CAClC,MAAM,MAAM,UAAU,IAAI,OAAO,aAAa,GAAG;CACjD,IAAI,CAAC,KAAK,OAAO;CACjB,MAAM,KAAK,aAAa,OAAO,aAAa,GAAG;CAC/C,OAAO,cAAc,MAAM,YAAY,GAAG,GAAG,IAAI,SAAS,OAAO,QAAQ,GAAG,EAAE;AAChF,CAAC;AAED,WAAW,kBAAkB,WAAW;CACtC,MAAM,MAAM,UAAU,IAAI,OAAO,aAAa,GAAG;CACjD,IAAI,CAAC,KAAK,OAAO,CAAC;CAClB,OAAO,mBAAmB,MAAM,YAAY,GAAG,CAAC;AAClD,CAAC;AAED,WAAW,iBAAiB,WAAW;CACrC,MAAM,MAAM,UAAU,IAAI,OAAO,aAAa,GAAG;CACjD,IAAI,CAAC,KAAK,OAAO,CAAC;CAClB,OAAO,kBAAkB,MAAM,YAAY,GAAG,CAAC;AACjD,CAAC;AAED,WAAW,qBAAqB,WAAW;CACzC,MAAM,MAAM,UAAU,IAAI,OAAO,aAAa,GAAG;CACjD,IAAI,CAAC,KAAK,OAAO,CAAC;CAClB,OAAO,sBAAsB,OAAO,OAAO;EACzC,OAAO,IAAI,SAAS,OAAO,MAAM,KAAK;EACtC,KAAK,IAAI,SAAS,OAAO,MAAM,GAAG;CACpC,CAAC;AACH,CAAC;AAED,WAAW,UAAU,UAAU,IAAI,WAAW;CAC5C,MAAM,MAAM,UAAU,IAAI,OAAO,aAAa,GAAG;CACjD,IAAI,CAAC,KAAK,OAAO,CAAC;CAClB,OAAO,cAAc,MAAM,YAAY,GAAG,GAAG,OAAO,KAAK;AAC3D,CAAC;AAED,WAAW,iBAAiB,WAAW;CACrC,MAAM,MAAM,UAAU,IAAI,OAAO,aAAa,GAAG;CACjD,IAAI,CAAC,KAAK,OAAO;CACjB,OAAO,cAAc,MAAM,YAAY,GAAG,GAAG,IAAI,SAAS,OAAO,QAAQ,CAAC;AAC5E,CAAC;AAED,WAAW,iBAAiB,WAAW;CACrC,MAAM,MAAM,UAAU,IAAI,OAAO,aAAa,GAAG;CACjD,IAAI,CAAC,KAAK,OAAO;CACjB,MAAM,KAAK,aAAa,OAAO,aAAa,GAAG;CAC/C,OAAO,eACL,MAAM,YAAY,GAAG,GACrB,IAAI,SAAS,OAAO,QAAQ,GAC5B,OAAO,SACP,KACC,SAAS;EACR,MAAM,OAAO,UAAU,IAAI,cAAc,IAAI,CAAC;EAC9C,OAAO,OAAO,KAAK,QAAQ,IAAI,WAAW,IAAI;CAChD,CACF;AACF,CAAC;AAED,UAAU,OAAO,UAAU;AAC3B,WAAW,OAAO"}
@@ -0,0 +1 @@
1
+ export { };
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@arviahq/language-server",
3
+ "version": "0.2.0",
4
+ "description": "Language Server Protocol implementation for .arv files.",
5
+ "homepage": "https://github.com/Fausto95/arvia#readme",
6
+ "bugs": {
7
+ "url": "https://github.com/Fausto95/arvia/issues"
8
+ },
9
+ "license": "MIT",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/Fausto95/arvia.git",
13
+ "directory": "packages/language-server"
14
+ },
15
+ "bin": {
16
+ "arvia-language-server": "./bin/arvia-language-server.cjs"
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "bin"
21
+ ],
22
+ "type": "commonjs",
23
+ "main": "./dist/server.cjs",
24
+ "types": "./dist/server.d.cts",
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/server.d.cts",
28
+ "require": "./dist/server.cjs"
29
+ },
30
+ "./dist/server.cjs": "./dist/server.cjs"
31
+ },
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "dependencies": {
36
+ "vscode-css-languageservice": "^6.3.10",
37
+ "vscode-languageserver": "^9.0.1",
38
+ "vscode-languageserver-textdocument": "^1.0.12",
39
+ "@arviahq/compiler": "0.2.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^25.9.3"
43
+ },
44
+ "scripts": {
45
+ "build": "tsdown --config-loader unrun",
46
+ "dev": "tsdown --config-loader unrun --watch",
47
+ "typecheck": "tsc --noEmit"
48
+ }
49
+ }