aplance-ui 1.5.2 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/api.d.ts +2 -1
- package/dist/api.js +103 -68
- package/dist/api.js.map +1 -1
- package/dist/frameworks/vite-react/vite.config.ts.template +1 -1
- package/dist/index.js +103 -68
- package/dist/index.js.map +1 -1
- package/package.json +12 -6
- package/registry/components/primitives/modal/modal.module.css +9 -3
- package/registry/components/primitives/popover/popover-context.ts +2 -0
- package/registry/components/primitives/popover/popover.tsx +47 -2
- package/registry/components/ui/chart/chart.tsx +51 -30
- package/registry/components/ui/chart/types.ts +5 -1
- package/registry/components/ui/data-table/checkbox-column.tsx +12 -8
- package/registry/components/ui/data-table/data-table.module.css +41 -19
- package/registry/components/ui/data-table/data-table.tsx +1285 -1238
- package/registry/components/ui/data-table/filter-bar.tsx +56 -13
- package/registry/components/ui/data-table/filter-modal.tsx +16 -82
- package/registry/components/ui/data-table/filter-sheet.tsx +97 -0
- package/registry/components/ui/data-table/filters.tsx +21 -21
- package/registry/components/ui/data-table/pagination-bar.tsx +4 -6
- package/registry/components/ui/data-table/types.ts +149 -80
- package/registry/components/ui/data-table/useDataTable.tsx +35 -16
- package/registry/components/ui/data-table/utils.ts +691 -471
- package/registry/components/ui/input-fields/date-picker/calendar.tsx +7 -15
- package/registry/components/ui/input-fields/date-picker/date-picker.tsx +1 -1
- package/registry/components/ui/input-fields/date-picker/types.ts +3 -3
- package/registry/components/ui/input-fields/emoji-picker/emoji-palette.tsx +1 -1
- package/registry/registry.json +16 -11
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/init.ts","../src/lib/fs-ops.ts","../src/lib/errors.ts","../src/lib/logger.ts","../src/lib/ui.ts","../src/lib/styles.ts","../src/lib/registry.ts","../src/lib/components.ts","../src/lib/css-orchestrate.ts","../src/lib/templates.ts","../src/frameworks/shared.ts","../src/lib/postcss-plugins.ts","../src/frameworks/vite-react/index.ts","../src/frameworks/next/index.ts","../src/frameworks/tanstack-start/index.ts","../src/frameworks/astro/index.ts","../src/frameworks/electron-vite/index.ts","../src/frameworks/renderers.ts","../src/lib/css-config.ts","../src/lib/css-inline.ts","../src/lib/detect.ts","../src/frameworks/meta.ts","../src/lib/config.ts","../src/lib/units.ts","../src/lib/installer.ts","../src/lib/unit-hints.ts","../src/commands/add.ts","../src/commands/list.ts"],"sourcesContent":["import { join, relative } from \"node:path\";\nimport pc from \"picocolors\";\n\nimport { applyFileOps, type ConflictMode, type FileOp } from \"../lib/fs-ops.js\";\nimport { planStylesOps, planUtilitiesGitignoreOp } from \"../lib/styles.js\";\nimport { planComponentOps } from \"../lib/components.js\";\nimport { planCssConfigOps } from \"../lib/css-orchestrate.js\";\nimport {\n detectProject,\n describeProject,\n suggestTemplate,\n type ProjectInfo,\n} from \"../lib/detect.js\";\nimport {\n getFrameworkLabel,\n getInlineHostPath,\n supportsPrettyCssModules,\n} from \"../frameworks/meta.js\";\nimport {\n CSS_CONFIG_PLACEMENTS,\n SUPPORTED_TEMPLATES,\n type CssConfigPlacement,\n type ComponentsConfig,\n type FrameworkTemplate,\n configExists,\n loadConfig,\n makeDefaultConfig,\n resolvePaths,\n} from \"../lib/config.js\";\nimport {\n findColor,\n findRadius,\n findSpacing,\n loadRegistry,\n resolveUnits,\n type LoadedRegistry,\n} from \"../lib/registry.js\";\nimport { groupedUnitOptions } from \"../lib/units.js\";\nimport {\n headline,\n goodbye,\n select,\n multiselect,\n confirm,\n note,\n step,\n info,\n warn,\n} from \"../lib/ui.js\";\nimport { logger } from \"../lib/logger.js\";\nimport {\n buildInstallCommands,\n computeDependencyPlan,\n describePlan,\n detectPackageManager,\n runInstall,\n type PackageManager,\n} from \"../lib/installer.js\";\nimport { getUnitHints } from \"../lib/unit-hints.js\";\n\nexport interface InitCommandOptions {\n cwd: string;\n template?: FrameworkTemplate;\n srcDir?: string;\n alias?: string;\n color?: string;\n radius?: string;\n spacing?: string;\n yes?: boolean;\n force?: boolean;\n dryRun?: boolean;\n skipStyles?: boolean;\n skipCssConfig?: boolean;\n withUtilities?: boolean;\n cssConfigPlacement?: CssConfigPlacement;\n prettyCssModules?: boolean;\n /** Rewrite components.json even if it already exists */\n overwriteConfig?: boolean;\n /** Pre-selected component names to copy during init. If omitted and yes=false, an interactive multi-select runs. */\n components?: string[];\n /** Copy every unit in the registry (library mode). Overrides `components` when true. */\n all?: boolean;\n /** Scaffold styles + tokens + postcss config + components.json only. No components/hooks/libs. */\n skipComponents?: boolean;\n /**\n * Auto-install runtime + dev dependencies after scaffolding. `true` by default.\n * When unset and `yes` is false, the CLI prompts for confirmation.\n * Force-disable with `install: false` (programmatic use) or `--no-install`.\n */\n install?: boolean;\n /** Force a specific package manager instead of auto-detecting from lockfiles. */\n packageManager?: PackageManager;\n}\n\nconst resolveConflictMode = (opts: InitCommandOptions): ConflictMode => {\n if (opts.dryRun) return \"dry-run\";\n if (opts.force) return \"force\";\n return \"prompt\";\n};\n\ntype EffectiveCssPlacement = Exclude<CssConfigPlacement, \"auto\">;\n\ninterface ResolvedPlacement {\n preference: CssConfigPlacement;\n effective: EffectiveCssPlacement;\n hostPath: string | null;\n fallbackReason?: string;\n}\n\n/**\n * Resolve the user's `cssConfig.placement` preference into a concrete\n * effective placement (`inline` or `file`). Next.js is locked to `file`;\n * `auto` chooses `inline` when a host config (vite.config.ts, etc.) is\n * detected and `file` otherwise; `inline` falls back to `file` with a\n * warning when no host config is present.\n */\nconst resolveEffectivePlacement = (\n template: FrameworkTemplate,\n preference: CssConfigPlacement,\n project: ProjectInfo,\n): ResolvedPlacement => {\n const hostPath = getInlineHostPath(template, project);\n\n if (template === \"next\") {\n return {\n preference,\n effective: \"file\",\n hostPath: null,\n fallbackReason:\n preference === \"file\"\n ? undefined\n : \"Next.js uses a standalone postcss.config.js in this CLI.\",\n };\n }\n if (preference === \"auto\") {\n // `file` is the default for `auto` because a standalone postcss.config.*\n // keeps plugin types out of the host config (vite.config.ts, etc.) - which\n // otherwise triggers TS dual-module resolution errors when the consumer\n // and Vite bundle different `postcss` versions.\n return { preference, effective: \"file\", hostPath };\n }\n if (preference === \"inline\" && !hostPath) {\n return {\n preference,\n effective: \"file\",\n hostPath,\n fallbackReason:\n \"No inline config host was detected for this template; using standalone PostCSS config.\",\n };\n }\n return { preference, effective: preference, hostPath };\n};\n\nconst promptForConfig = async (\n opts: InitCommandOptions,\n project: ProjectInfo,\n registry: LoadedRegistry,\n): Promise<ComponentsConfig> => {\n const suggestedTemplate = suggestTemplate(project);\n\n const template = opts.template\n ? opts.template\n : opts.yes\n ? suggestedTemplate ?? \"vite-react\"\n : await select<FrameworkTemplate>({\n message: \"Which framework are you scaffolding for?\",\n options: SUPPORTED_TEMPLATES.map((t) => ({\n value: t,\n label: getFrameworkLabel(t) + (t === suggestedTemplate ? pc.dim(\" (detected)\") : \"\"),\n })),\n initialValue: suggestedTemplate ?? \"vite-react\",\n });\n\n const colorOptions = registry.themes.colors.map((t) => ({\n value: t.id,\n label: t.label,\n hint: t.description,\n }));\n const color = opts.color\n ? opts.color\n : opts.yes\n ? \"default\"\n : await select<string>({\n message: \"Pick a color palette\",\n options: colorOptions,\n initialValue: \"default\",\n });\n\n const radiusOptions = registry.themes.radii.map((t) => ({\n value: t.id,\n label: t.label,\n hint: t.description,\n }));\n const radius = opts.radius\n ? opts.radius\n : opts.yes\n ? \"default\"\n : await select<string>({\n message: \"Pick a radius scale\",\n options: radiusOptions,\n initialValue: \"default\",\n });\n\n const spacingOptions = registry.themes.spacing.map((t) => ({\n value: t.id,\n label: t.label,\n hint: t.description,\n }));\n const spacing = opts.spacing\n ? opts.spacing\n : opts.yes\n ? \"default\"\n : await select<string>({\n message: \"Pick a spacing scale\",\n options: spacingOptions,\n initialValue: \"default\",\n });\n\n let pretty = opts.prettyCssModules ?? false;\n if (!opts.yes && supportsPrettyCssModules(template) && opts.prettyCssModules === undefined) {\n pretty = await confirm({\n message: \"Use human-readable CSS Modules class names? (great in devtools)\",\n initialValue: true,\n });\n }\n\n let utilities = opts.withUtilities ?? false;\n if (!opts.yes && opts.withUtilities === undefined) {\n utilities = await confirm({\n message: \"Include postcss-token-utilities? (adds token-driven utility classes like p-4, bg-primary)\",\n initialValue: false,\n });\n }\n\n let placement: CssConfigPlacement = opts.cssConfigPlacement ?? \"auto\";\n if (!opts.yes && opts.cssConfigPlacement === undefined && template !== \"next\") {\n const hostPath = getInlineHostPath(template, project);\n const hostLabel = hostPath\n ? relative(opts.cwd, hostPath) || hostPath\n : \"none detected\";\n placement = await select<CssConfigPlacement>({\n message: \"How should CSS plugins be wired?\",\n options: CSS_CONFIG_PLACEMENTS.map((p) => ({\n value: p,\n label: p,\n hint:\n p === \"auto\"\n ? \"recommended: standalone postcss.config.*\"\n : p === \"inline\"\n ? `inject into ${hostLabel}`\n : \"write a standalone postcss.config.*\",\n })),\n initialValue: \"auto\",\n });\n }\n\n return makeDefaultConfig({\n template,\n srcDir: opts.srcDir,\n alias: opts.alias,\n color,\n radius,\n spacing,\n pretty,\n utilities,\n cssConfigPlacement: placement,\n });\n};\n\nconst resolveConfig = async (\n opts: InitCommandOptions,\n project: ProjectInfo,\n registry: LoadedRegistry,\n): Promise<{ cfg: ComponentsConfig; existed: boolean }> => {\n if (configExists(opts.cwd) && !opts.overwriteConfig) {\n const cfg = loadConfig(opts.cwd);\n if (opts.srcDir) cfg.srcDir = opts.srcDir;\n if (opts.alias) cfg.alias = opts.alias;\n if (opts.color) cfg.theme.color = opts.color;\n if (opts.radius) cfg.theme.radius = opts.radius;\n if (opts.spacing) cfg.theme.spacing = opts.spacing;\n if (opts.prettyCssModules !== undefined) cfg.cssModules.pretty = opts.prettyCssModules;\n if (opts.withUtilities !== undefined) cfg.utilities.enabled = opts.withUtilities;\n if (opts.cssConfigPlacement !== undefined) cfg.cssConfig.placement = opts.cssConfigPlacement;\n return { cfg, existed: true };\n }\n const cfg = await promptForConfig(opts, project, registry);\n return { cfg, existed: false };\n};\n\nconst pickInitialComponents = async (\n opts: InitCommandOptions,\n registry: LoadedRegistry,\n): Promise<string[]> => {\n if (opts.skipComponents) return [];\n if (opts.all) return registry.units.map((u) => u.name);\n if (opts.components && opts.components.length > 0) return opts.components;\n if (opts.yes) return [];\n\n const addNow = await confirm({\n message: \"Copy components/hooks into your project now?\",\n initialValue: false,\n });\n if (!addNow) return [];\n\n return multiselect({\n message: `Select units to copy ${pc.dim(\"(space to toggle, enter to confirm - leave empty to skip)\")}`,\n options: groupedUnitOptions(registry.units),\n initialValues: [],\n required: false,\n });\n};\n\nexport const runInit = async (opts: InitCommandOptions): Promise<void> => {\n if (opts.skipComponents && (opts.all || (opts.components && opts.components.length > 0))) {\n throw new Error(\"error: --skip-components cannot be combined with --all or --components\");\n }\n\n headline(\"Scaffold tokens, theme, PostCSS, and optionally copy components.\");\n\n const registry = loadRegistry();\n const project = detectProject(opts.cwd);\n const { cfg, existed } = await resolveConfig(opts, project, registry);\n findColor(registry, cfg.theme.color);\n findRadius(registry, cfg.theme.radius);\n findSpacing(registry, cfg.theme.spacing);\n const placement = resolveEffectivePlacement(\n cfg.template,\n cfg.cssConfig.placement,\n project,\n );\n const paths = resolvePaths(opts.cwd, cfg);\n\n const detected =\n project.isVite || project.isNext || project.isAstro ||\n project.isTanstackStart || project.isElectronVite;\n const summary = [\n `${pc.bold(\"framework\")} ${cfg.template}`,\n `${pc.bold(\"color\")} ${cfg.theme.color}`,\n `${pc.bold(\"radius\")} ${cfg.theme.radius}`,\n `${pc.bold(\"spacing\")} ${cfg.theme.spacing}`,\n `${pc.bold(\"srcDir\")} ${cfg.srcDir}`,\n `${pc.bold(\"alias\")} ${cfg.alias}`,\n `${pc.bold(\"css\")} ${placement.preference} → ${placement.effective}`,\n detected ? `${pc.bold(\"detected\")} ${describeProject(project)}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n note(summary, \"configuration\");\n\n if (placement.fallbackReason) warn(placement.fallbackReason);\n\n const componentNames = await pickInitialComponents(opts, registry);\n const units = componentNames.length ? resolveUnits(registry, componentNames) : [];\n\n const ops: FileOp[] = [];\n const snippetsToPrint: Array<{ title: string; content: string }> = [];\n\n // ── components.json ───────────────────────────────────────────────────────\n if (!existed || opts.overwriteConfig) {\n ops.push({\n target: join(opts.cwd, \"components.json\"),\n content: JSON.stringify(cfg, null, 2) + \"\\n\",\n label: \"components.json\",\n });\n }\n\n // ── styles (with theme override) ──────────────────────────────────────────\n if (!opts.skipStyles) {\n ops.push(\n ...planStylesOps({\n registry,\n targetStylesDir: paths.stylesDir,\n color: cfg.theme.color,\n radius: cfg.theme.radius,\n spacing: cfg.theme.spacing,\n }),\n );\n }\n\n // Opted-in token utilities generate `utilities.gen.css` on every build.\n // Co-locate a `.gitignore` so consumers don't check the generated file in.\n if (cfg.utilities.enabled) {\n ops.push(planUtilitiesGitignoreOp({ targetStylesDir: paths.stylesDir }));\n }\n\n // ── CSS config ────────────────────────────────────────────────────────────\n if (!opts.skipCssConfig) {\n const css = planCssConfigOps({ cwd: opts.cwd, cfg, placement, project });\n ops.push(...css.ops);\n snippetsToPrint.push(...css.snippets);\n for (const w of css.warnings) warn(w);\n }\n\n // ── selected components ──────────────────────────────────────────────────\n if (units.length > 0) {\n ops.push(\n ...planComponentOps({\n registry,\n targetSrcDir: paths.srcDir,\n units,\n paths: cfg.paths,\n template: cfg.template,\n }),\n );\n info(`planned ${units.length} unit${units.length === 1 ? \"\" : \"s\"} to copy`);\n }\n\n step(\"Writing files…\");\n const result = await applyFileOps(ops, {\n cwd: opts.cwd,\n mode: resolveConflictMode(opts),\n });\n\n const summaryLine = `${result.written} written · ${result.skipped} skipped · ${result.unchanged} unchanged`;\n\n // ── dependency install ────────────────────────────────────────────────────\n const plan = computeDependencyPlan({ registry, units, cfg, project });\n const pm = opts.packageManager ?? detectPackageManager(opts.cwd);\n const installCommands = buildInstallCommands(pm, plan);\n const hasWork = installCommands.length > 0;\n\n if (opts.dryRun) {\n note(summaryLine, \"dry run\");\n if (hasWork) {\n note(\n [\n describePlan(plan),\n \"\",\n `would run with ${pm}:`,\n ...installCommands.map((c) => ` ${c.label}`),\n ].join(\"\\n\"),\n \"dry run · install\",\n );\n }\n goodbye(\"Preview only - no files were touched.\");\n return;\n }\n\n let willInstall: boolean;\n if (!hasWork) {\n willInstall = false;\n } else if (opts.install === false) {\n willInstall = false;\n } else if (opts.install === true || opts.yes) {\n willInstall = true;\n } else {\n note(describePlan(plan), `install with ${pm}`);\n willInstall = await confirm({\n message: `Run ${pm} now to install the dependencies above?`,\n initialValue: true,\n });\n }\n\n if (willInstall) {\n step(`Installing dependencies with ${pm}…`);\n await runInstall(installCommands, {\n cwd: opts.cwd,\n onCommand: (cmd) => logger.action(`$ ${cmd.label}`),\n });\n logger.ok(\n `installed ${Object.keys(plan.dependencies).length} runtime + ${Object.keys(plan.devDependencies).length} dev dependenc${\n Object.keys(plan.dependencies).length +\n Object.keys(plan.devDependencies).length ===\n 1\n ? \"y\"\n : \"ies\"\n }`,\n );\n } else if (hasWork) {\n // User skipped install - surface the exact commands so they can run them\n // manually with the same package manager we detected.\n note(\n [\n describePlan(plan),\n \"\",\n \"run:\",\n ...installCommands.map((c) => ` ${c.label}`),\n ].join(\"\\n\"),\n `manual install (skipped)`,\n );\n }\n\n const unitHints = getUnitHints({ cfg, units });\n if (unitHints.length > 0) {\n note(unitHints.join(\"\\n\\n\"), \"usage hints\");\n }\n\n // ── next steps note ───────────────────────────────────────────────────────\n const steps: string[] = [\n `${pc.cyan(\"1\")} ${pc.bold(\"Import styles once at your app entry\")}\\n import \"./${cfg.paths.styles}/globals.css\";`,\n ];\n let stepIdx = 2;\n for (const snippet of snippetsToPrint) {\n steps.push(`${pc.cyan(String(stepIdx++))} ${pc.bold(snippet.title)}\\n${snippet.content.split(\"\\n\").map((l) => \" \" + l).join(\"\\n\")}`);\n }\n steps.push(\n `${pc.cyan(String(stepIdx++))} ${pc.bold(\"Add more components anytime\")}\\n npx aplance-ui add <name> ${pc.dim(\"# e.g. button modal tooltip\")}\\n npx aplance-ui add ${pc.dim(\"# interactive multi-select\")}\\n npx aplance-ui list ${pc.dim(\"# see everything available\")}`,\n );\n\n note(steps.join(\"\\n\\n\"), \"next steps\");\n logger.info(summaryLine);\n goodbye(\"All set.\");\n};\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, relative } from \"node:path\";\nimport pc from \"picocolors\";\nimport * as p from \"@clack/prompts\";\nimport { AbortError } from \"./errors.js\";\nimport { logger } from \"./logger.js\";\nimport { unwrap } from \"./ui.js\";\n\nexport interface FileOp {\n target: string;\n content: string | Buffer;\n label: string;\n}\n\nexport type ConflictMode = \"prompt\" | \"force\" | \"skip\" | \"dry-run\";\n\nexport interface ApplyOptions {\n cwd: string;\n mode: ConflictMode;\n}\n\nexport interface ApplyResult {\n written: number;\n skipped: number;\n unchanged: number;\n}\n\nconst ensureDir = (filePath: string) => {\n const dir = dirname(filePath);\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n};\n\nconst sameContent = (target: string, content: string | Buffer): boolean => {\n if (!existsSync(target)) return false;\n try {\n if (Buffer.isBuffer(content)) {\n return readFileSync(target).equals(content);\n }\n return readFileSync(target, \"utf8\") === content;\n } catch {\n return false;\n }\n};\n\ntype PlanItem = { op: FileOp; action: \"write\" | \"skip\" | \"unchanged\" };\n\nconst planActions = async (\n ops: FileOp[],\n opts: ApplyOptions,\n): Promise<PlanItem[]> => {\n const plan: PlanItem[] = [];\n let bulk: \"all\" | \"skip-all\" | null = null;\n\n for (const op of ops) {\n if (sameContent(op.target, op.content)) {\n plan.push({ op, action: \"unchanged\" });\n continue;\n }\n if (!existsSync(op.target)) {\n plan.push({ op, action: \"write\" });\n continue;\n }\n\n if (opts.mode === \"force\") {\n plan.push({ op, action: \"write\" });\n continue;\n }\n if (opts.mode === \"skip\") {\n plan.push({ op, action: \"skip\" });\n continue;\n }\n if (opts.mode === \"dry-run\") {\n plan.push({ op, action: \"write\" });\n continue;\n }\n\n if (bulk === \"all\") {\n plan.push({ op, action: \"write\" });\n continue;\n }\n if (bulk === \"skip-all\") {\n plan.push({ op, action: \"skip\" });\n continue;\n }\n\n const choice = unwrap(\n await p.select({\n message: `${pc.yellow(\"exists\")} ${op.label}`,\n options: [\n { value: \"overwrite\", label: \"Overwrite\" },\n { value: \"skip\", label: \"Skip\" },\n { value: \"all\", label: \"Overwrite all remaining\" },\n { value: \"skip-all\", label: \"Skip all remaining\" },\n { value: \"abort\", label: \"Abort\" },\n ],\n initialValue: \"skip\",\n }),\n ) as \"overwrite\" | \"skip\" | \"all\" | \"skip-all\" | \"abort\";\n\n if (choice === \"abort\") throw new AbortError();\n if (choice === \"all\") {\n bulk = \"all\";\n plan.push({ op, action: \"write\" });\n } else if (choice === \"skip-all\") {\n bulk = \"skip-all\";\n plan.push({ op, action: \"skip\" });\n } else {\n plan.push({ op, action: choice === \"overwrite\" ? \"write\" : \"skip\" });\n }\n }\n\n return plan;\n};\n\nexport const applyFileOps = async (\n ops: FileOp[],\n opts: ApplyOptions,\n): Promise<ApplyResult> => {\n const plan = await planActions(ops, opts);\n\n if (opts.mode === \"dry-run\") {\n for (const { op, action } of plan) {\n const rel = relative(opts.cwd, op.target);\n if (action === \"write\") logger.action(`would write ${rel}`);\n else if (action === \"skip\") logger.action(`would skip ${rel}`);\n else logger.action(`unchanged ${logger.dim(rel)}`);\n }\n return {\n written: plan.filter((x) => x.action === \"write\").length,\n skipped: plan.filter((x) => x.action === \"skip\").length,\n unchanged: plan.filter((x) => x.action === \"unchanged\").length,\n };\n }\n\n let written = 0;\n let skipped = 0;\n let unchanged = 0;\n\n for (const { op, action } of plan) {\n const rel = relative(opts.cwd, op.target);\n if (action === \"write\") {\n try {\n ensureDir(op.target);\n writeFileSync(op.target, op.content);\n } catch (err) {\n const cause = err instanceof Error ? err.message : String(err);\n throw new Error(\n `Failed to write ${rel}: ${cause}\\n` +\n `${written} file(s) were already written before this failure. ` +\n `Fix the underlying issue (permissions? disk space?) and re-run - ` +\n `identical files will be detected as unchanged and skipped.`,\n );\n }\n logger.ok(`wrote ${rel}`);\n written++;\n } else if (action === \"skip\") {\n logger.action(`skip ${logger.dim(rel)}`);\n skipped++;\n } else {\n unchanged++;\n }\n }\n\n return { written, skipped, unchanged };\n};\n","export type CliErrorCode =\n | \"E_CONFIG_INVALID\"\n | \"E_CONFIG_MISSING\"\n | \"E_TEMPLATE_MISSING\"\n | \"E_TEMPLATE_RENDER\"\n | \"E_REGISTRY_MISSING\"\n | \"E_UNKNOWN_UNIT\"\n | \"E_UNKNOWN_THEME\"\n | \"E_UNKNOWN_TEMPLATE\"\n | \"E_ABORTED\";\n\nexport class CliError extends Error {\n code: CliErrorCode;\n hint?: string;\n\n constructor(code: CliErrorCode, message: string, hint?: string) {\n super(message);\n this.name = \"CliError\";\n this.code = code;\n this.hint = hint;\n }\n}\n\nexport class ConfigError extends CliError {\n constructor(\n code: \"E_CONFIG_INVALID\" | \"E_CONFIG_MISSING\",\n message: string,\n hint?: string,\n ) {\n super(code, message, hint);\n this.name = \"ConfigError\";\n }\n}\n\nexport class TemplateError extends CliError {\n constructor(\n code: \"E_TEMPLATE_MISSING\" | \"E_TEMPLATE_RENDER\" | \"E_UNKNOWN_TEMPLATE\",\n message: string,\n hint?: string,\n ) {\n super(code, message, hint);\n this.name = \"TemplateError\";\n }\n}\n\nexport class RegistryError extends CliError {\n constructor(\n code: \"E_REGISTRY_MISSING\" | \"E_UNKNOWN_UNIT\" | \"E_UNKNOWN_THEME\",\n message: string,\n hint?: string,\n ) {\n super(code, message, hint);\n this.name = \"RegistryError\";\n }\n}\n\nexport class AbortError extends CliError {\n constructor(message = \"Aborted by user.\") {\n super(\"E_ABORTED\", message);\n this.name = \"AbortError\";\n }\n}\n\nexport const isCliError = (err: unknown): err is CliError =>\n err instanceof CliError;\n","import pc from \"picocolors\";\n\n/**\n * Line-oriented logger for non-prompt output.\n *\n * Prompt-style intro/outro/note/spinners live in `ui.ts` and delegate to\n * @clack/prompts. Use this when you want a one-line log entry (wrote/skip/etc.)\n * that plays nicely around clack's UI.\n */\nconst indent = (s: string, level: number) =>\n s\n .split(\"\\n\")\n .map((line) => \" \".repeat(level) + line)\n .join(\"\\n\");\n\nexport const logger = {\n ok: (msg: string, level = 0) =>\n console.log(indent(`${pc.green(\"✓\")} ${msg}`, level)),\n info: (msg: string, level = 0) =>\n console.log(indent(`${pc.cyan(\"◆\")} ${msg}`, level)),\n action: (msg: string, level = 0) =>\n console.log(indent(`${pc.gray(\"→\")} ${msg}`, level)),\n warn: (msg: string, level = 0) =>\n console.log(indent(`${pc.yellow(\"▲\")} ${msg}`, level)),\n error: (msg: string, level = 0) =>\n console.error(indent(`${pc.red(\"✗\")} ${msg}`, level)),\n dim: (msg: string) => pc.dim(msg),\n};\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { AbortError } from \"./errors.js\";\n\n/** Clack returns a symbol for cancelled prompts; this throws a friendly abort. */\nexport const unwrap = <T>(value: T | symbol): T => {\n if (p.isCancel(value)) throw new AbortError();\n return value as T;\n};\n\nconst brand = () => {\n const colours = [pc.magenta, pc.cyan, pc.blue];\n const gradient = \"aplance-ui\"\n .split(\"\")\n .map((ch, i) => colours[i % colours.length](ch))\n .join(\"\");\n return `${gradient} ${pc.dim(\"·\")} ${pc.dim(\"design system scaffolder\")}`;\n};\n\nexport const headline = (subtitle?: string) => {\n p.intro(brand());\n if (subtitle) p.log.message(pc.dim(subtitle));\n};\n\nexport const goodbye = (message: string) => p.outro(pc.green(message));\nexport const aborted = (message = \"Aborted.\") => p.outro(pc.yellow(message));\n\ninterface ChoiceOption<T> {\n value: T;\n label?: string;\n hint?: string;\n}\n\nexport const select = async <T extends string>(opts: {\n message: string;\n options: Array<ChoiceOption<T>>;\n initialValue?: T;\n}): Promise<T> =>\n unwrap(await p.select(opts as Parameters<typeof p.select<T>>[0]));\n\nexport const multiselect = async <T extends string>(opts: {\n message: string;\n options: Array<ChoiceOption<T>>;\n initialValues?: T[];\n required?: boolean;\n}): Promise<T[]> =>\n unwrap(await p.multiselect(opts as Parameters<typeof p.multiselect<T>>[0]));\n\nexport const confirm = async (opts: {\n message: string;\n initialValue?: boolean;\n}): Promise<boolean> => unwrap(await p.confirm(opts));\n\nexport const note = (body: string, title?: string): void => p.note(body, title);\nexport const step = (message: string): void => p.log.step(message);\nexport const info = (message: string): void => p.log.info(message);\nexport const warn = (message: string): void => p.log.warn(message);\n","import { readdirSync, readFileSync, statSync, existsSync } from \"node:fs\";\nimport { join, relative, sep, posix } from \"node:path\";\nimport type { FileOp } from \"./fs-ops.js\";\nimport type { LoadedRegistry, ThemeDescriptor } from \"./registry.js\";\nimport { findColor, findRadius, findSpacing } from \"./registry.js\";\n\nexport interface StylesOptions {\n registry: LoadedRegistry;\n /** Absolute path to the consumer's target styles directory */\n targetStylesDir: string;\n /** Color palette id - \"default\" means no override */\n color: string;\n /** Radius scale id - \"default\" means no override */\n radius: string;\n /** Spacing scale id - \"default\" means no override */\n spacing: string;\n}\n\nexport interface UtilitiesGitignoreOptions {\n /** Absolute path to the consumer's target styles directory */\n targetStylesDir: string;\n}\n\n/**\n * When `postcss-token-utilities` is opted in, the build emits\n * `<stylesDir>/utilities.gen.css` on every run. Commit would churn\n * (content changes with every class-usage diff), so we co-locate a\n * `.gitignore` alongside the generated file. If the consumer already\n * has a `.gitignore` in that dir, `applyFileOps` surfaces the conflict\n * prompt and the user can merge by hand.\n */\nexport const planUtilitiesGitignoreOp = (\n opts: UtilitiesGitignoreOptions,\n): FileOp => ({\n target: join(opts.targetStylesDir, \".gitignore\"),\n content: GITIGNORE_BODY,\n label: \"styles/.gitignore\",\n});\n\nconst GITIGNORE_BODY =\n \"# Generated by postcss-token-utilities on every build - do not commit.\\n\" +\n \"utilities.gen.css\\n\";\n\nconst EXCLUDE_PATTERNS = [/\\.gen\\.css$/];\nconst BINARY_EXTENSIONS = /\\.(woff2?|ttf|otf|eot|png|jpe?g|gif|webp|avif|ico)$/i;\n\nconst toPosix = (p: string) => p.split(sep).join(posix.sep);\n\nconst walkStyles = (dir: string, base: string): string[] => {\n const out: string[] = [];\n for (const entry of readdirSync(dir)) {\n const full = join(dir, entry);\n if (statSync(full).isDirectory()) {\n out.push(...walkStyles(full, base));\n } else {\n const rel = toPosix(relative(base, full));\n if (EXCLUDE_PATTERNS.some((re) => re.test(rel))) continue;\n out.push(rel);\n }\n }\n return out;\n};\n\ninterface ThemeOverride {\n id: string;\n kind: \"color\" | \"radius\" | \"spacing\";\n css: string;\n}\n\nconst readOverride = (\n registry: LoadedRegistry,\n theme: ThemeDescriptor,\n kind: ThemeOverride[\"kind\"],\n): ThemeOverride | null => {\n if (!theme.file) return null;\n const abs = join(registry.root, theme.file);\n if (!existsSync(abs)) return null;\n return { id: theme.id, kind, css: readFileSync(abs, \"utf8\") };\n};\n\nexport const planStylesOps = (opts: StylesOptions): FileOp[] => {\n const sourceStylesDir = join(opts.registry.root, \"styles\");\n const relFiles = walkStyles(sourceStylesDir, sourceStylesDir);\n\n const overrides: ThemeOverride[] = [];\n const colorOverride = readOverride(\n opts.registry,\n findColor(opts.registry, opts.color),\n \"color\",\n );\n if (colorOverride) overrides.push(colorOverride);\n const radiusOverride = readOverride(\n opts.registry,\n findRadius(opts.registry, opts.radius),\n \"radius\",\n );\n if (radiusOverride) overrides.push(radiusOverride);\n const spacingOverride = readOverride(\n opts.registry,\n findSpacing(opts.registry, opts.spacing),\n \"spacing\",\n );\n if (spacingOverride) overrides.push(spacingOverride);\n\n return relFiles.map((relPath) => {\n const sourceAbs = join(sourceStylesDir, relPath);\n const targetAbs = join(opts.targetStylesDir, relPath);\n const isApp = relPath === \"app.css\";\n const content: string | Buffer = BINARY_EXTENSIONS.test(sourceAbs)\n ? readFileSync(sourceAbs)\n : isApp && overrides.length > 0\n ? mergeOverrides(readFileSync(sourceAbs, \"utf8\"), overrides)\n : readFileSync(sourceAbs, \"utf8\");\n return {\n target: targetAbs,\n content,\n label: `styles/${relPath}`,\n };\n });\n};\n\ninterface OverrideBlock {\n selector: string;\n vars: Array<[name: string, value: string]>;\n}\n\nconst escapeRegex = (s: string): string => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n/**\n * Parse a theme override CSS file into a flat list of selector blocks\n * with their custom-property declarations. Comments are stripped; the\n * shipped override files contain only `:root` and `[data-theme=\"...\"]`\n * blocks at the top level (no nesting), so a brace-balanced regex is\n * sufficient - no postcss dependency.\n */\nconst parseOverrideBlocks = (css: string): OverrideBlock[] => {\n const stripped = css.replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\");\n const blocks: OverrideBlock[] = [];\n const blockRe = /([^{}]+?)\\{([^{}]*)\\}/g;\n let m: RegExpExecArray | null;\n while ((m = blockRe.exec(stripped)) !== null) {\n const selector = m[1].trim();\n if (!selector) continue;\n const vars: Array<[string, string]> = [];\n const varRe = /(--[a-zA-Z0-9_-]+)\\s*:\\s*([^;]+);/g;\n let vm: RegExpExecArray | null;\n while ((vm = varRe.exec(m[2])) !== null) {\n vars.push([vm[1], vm[2].trim()]);\n }\n if (vars.length > 0) blocks.push({ selector, vars });\n }\n return blocks;\n};\n\n/**\n * Locate a top-level `selector { ... }` block in the base stylesheet,\n * returning the body slice bounds and the indentation used by existing\n * declarations (for inserting new ones).\n */\nconst findTopLevelBlock = (\n css: string,\n selector: string,\n): { bodyStart: number; bodyEnd: number; indent: string } | null => {\n const re = new RegExp(`(^|\\\\n)${escapeRegex(selector)}\\\\s*\\\\{`, \"g\");\n const m = re.exec(css);\n if (!m) return null;\n const bodyStart = css.indexOf(\"{\", m.index + m[1].length) + 1;\n let depth = 0;\n for (let i = bodyStart; i < css.length; i++) {\n const c = css[i];\n if (c === \"{\") depth++;\n else if (c === \"}\") {\n if (depth === 0) {\n const sample = css.slice(bodyStart, i).match(/\\n([ \\t]+)\\S/);\n return { bodyStart, bodyEnd: i, indent: sample ? sample[1] : \" \" };\n }\n depth--;\n }\n }\n return null;\n};\n\n/**\n * Merge variant overrides into the base stylesheet by patching `:root`\n * and `[data-theme=\"...\"]` blocks in place - replacing existing\n * declarations and inserting new ones - so the output reads as a\n * single hand-tuned file rather than appended duplicate blocks. If a\n * selector isn't present in the base, the whole block is appended.\n */\nconst mergeOverrides = (base: string, overrides: ThemeOverride[]): string => {\n let out = base;\n for (const o of overrides) {\n for (const block of parseOverrideBlocks(o.css)) {\n out = mergeBlock(out, block);\n }\n }\n return out;\n};\n\nconst mergeBlock = (base: string, block: OverrideBlock): string => {\n const loc = findTopLevelBlock(base, block.selector);\n if (!loc) {\n const lines = [\n `${block.selector} {`,\n ...block.vars.map(([n, v]) => ` ${n}: ${v};`),\n `}`,\n ];\n return `${base.replace(/\\s*$/, \"\")}\\n\\n${lines.join(\"\\n\")}\\n`;\n }\n let body = base.slice(loc.bodyStart, loc.bodyEnd);\n for (const [name, value] of block.vars) {\n const varRe = new RegExp(`(${escapeRegex(name)}\\\\s*:\\\\s*)[^;]+;`);\n if (varRe.test(body)) {\n body = body.replace(varRe, `$1${value};`);\n } else {\n body = body.replace(/([ \\t]*)$/, `${loc.indent}${name}: ${value};\\n$1`);\n }\n }\n return base.slice(0, loc.bodyStart) + body + base.slice(loc.bodyEnd);\n};\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { RegistryError } from \"./errors.js\";\n\n/**\n * Locate the bundled `registry/` directory that ships inside this CLI.\n *\n * Layout after publish: `<pkg>/dist/index.js` + `<pkg>/registry/*`.\n * Layout in dev (tsup watch): same - `packages/cli/dist/` + `packages/cli/registry/`.\n * Layout in source (unbundled, e.g. tests importing api.ts): walk up to find it.\n */\nconst resolveRegistryRoot = (): string => {\n const here = dirname(fileURLToPath(import.meta.url));\n for (const depth of [1, 2, 3, 4]) {\n const candidate = join(here, ...Array(depth).fill(\"..\"), \"registry\");\n if (existsSync(join(candidate, \"registry.json\"))) return candidate;\n }\n throw new RegistryError(\n \"E_REGISTRY_MISSING\",\n `Bundled registry not found next to the CLI binary.`,\n `This indicates a packaging problem - reinstall the aplance-ui CLI.`,\n );\n};\n\nexport type UnitKind = \"component\" | \"hook\" | \"lib\";\nexport type UnitGroup = \"ui\" | \"primitives\" | null;\n\nexport interface RegistryUnit {\n name: string;\n kind: UnitKind;\n group: UnitGroup;\n files: string[];\n /** Source files that should receive a Next.js \"use client\" directive. */\n clientFiles?: string[];\n deps: string[];\n /**\n * External npm packages (root specifiers, e.g. `react`, `@tanstack/react-table`)\n * this unit's source imports. The CLI uses `installMeta.packageVersions` to\n * resolve version ranges for each entry.\n */\n externalDeps: string[];\n}\n\nexport interface InstallMeta {\n baseDependencies: Record<string, string>;\n baseDevDependencies: Record<string, string>;\n utilitiesDevDependencies: Record<string, string>;\n packageVersions: Record<string, string>;\n}\n\nexport interface ThemeDescriptor {\n id: string;\n label: string;\n description: string;\n /** posix-style, relative to registry root. Empty string for the \"default\" variant. */\n file: string;\n}\n\nexport interface ThemeRegistry {\n colors: ThemeDescriptor[];\n radii: ThemeDescriptor[];\n spacing: ThemeDescriptor[];\n}\n\nexport interface Registry {\n version: number;\n generated: string;\n units: RegistryUnit[];\n themes?: ThemeRegistry;\n installMeta?: InstallMeta;\n}\n\nexport interface LoadedRegistry extends Registry {\n /** Absolute path to the bundled registry root (contains registry.json + sources). */\n root: string;\n themes: ThemeRegistry;\n installMeta: InstallMeta;\n}\n\nconst EXPECTED_VERSION = 4;\n\nconst EMPTY_INSTALL_META: InstallMeta = {\n baseDependencies: {},\n baseDevDependencies: {},\n utilitiesDevDependencies: {},\n packageVersions: {},\n};\n\nexport const loadRegistry = (): LoadedRegistry => {\n const root = resolveRegistryRoot();\n const manifestPath = join(root, \"registry.json\");\n const raw = readFileSync(manifestPath, \"utf8\");\n const parsed = JSON.parse(raw) as Registry;\n if (parsed.version !== EXPECTED_VERSION) {\n throw new RegistryError(\n \"E_REGISTRY_MISSING\",\n `Unsupported registry version ${parsed.version}. This CLI expects version ${EXPECTED_VERSION}.`,\n );\n }\n return {\n ...parsed,\n themes: parsed.themes ?? { colors: [], radii: [], spacing: [] },\n installMeta: parsed.installMeta ?? EMPTY_INSTALL_META,\n root,\n };\n};\n\nexport const resolveUnits = (\n registry: Registry,\n names: string[],\n): RegistryUnit[] => {\n const byName = new Map(registry.units.map((u) => [u.name, u]));\n\n for (const name of names) {\n if (!byName.has(name)) {\n throw new RegistryError(\n \"E_UNKNOWN_UNIT\",\n `Unknown unit \"${name}\".`,\n `Run \\`aplance-ui list\\` to see every available unit.`,\n );\n }\n }\n\n const visited = new Set<string>();\n const result: RegistryUnit[] = [];\n\n const visit = (name: string) => {\n if (visited.has(name)) return;\n visited.add(name);\n const unit = byName.get(name);\n if (!unit) return;\n for (const dep of unit.deps) visit(dep);\n result.push(unit);\n };\n\n for (const name of names) visit(name);\n return result;\n};\n\nexport const allUnitsInOrder = (registry: Registry): RegistryUnit[] =>\n resolveUnits(registry, registry.units.map((u) => u.name));\n\nconst pickVariant = (\n list: ThemeDescriptor[],\n id: string,\n dimensionLabel: string,\n): ThemeDescriptor => {\n const match = list.find((t) => t.id === id);\n if (!match) {\n const available = list.map((t) => t.id).join(\", \");\n throw new RegistryError(\n \"E_UNKNOWN_THEME\",\n `Unknown ${dimensionLabel} \"${id}\". Available: ${available}.`,\n );\n }\n return match;\n};\n\nexport const findColor = (registry: LoadedRegistry, id: string) =>\n pickVariant(registry.themes.colors, id, \"color\");\n\nexport const findRadius = (registry: LoadedRegistry, id: string) =>\n pickVariant(registry.themes.radii, id, \"radius\");\n\nexport const findSpacing = (registry: LoadedRegistry, id: string) =>\n pickVariant(registry.themes.spacing, id, \"spacing\");\n","import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { FileOp } from \"./fs-ops.js\";\nimport type { LoadedRegistry, RegistryUnit } from \"./registry.js\";\nimport type { ComponentsConfig, FrameworkTemplate } from \"./config.js\";\n\nexport interface ComponentsOptions {\n registry: LoadedRegistry;\n /** Absolute path to the consumer's target src/ directory */\n targetSrcDir: string;\n /** Units to copy (already dep-resolved and deduped) */\n units: RegistryUnit[];\n /** Remap rules for the first path segment (components / hooks / lib → configured names) */\n paths: ComponentsConfig[\"paths\"];\n /** Framework template controls framework-specific source adjustments. */\n template: FrameworkTemplate;\n}\n\nconst DEFAULT_SEGMENTS = [\"components\", \"hooks\", \"lib\"] as const;\ntype DefaultSegment = (typeof DEFAULT_SEGMENTS)[number];\n\nconst remap = (\n relFile: string,\n paths: ComponentsConfig[\"paths\"],\n): string => {\n const idx = relFile.indexOf(\"/\");\n if (idx === -1) return relFile;\n const head = relFile.slice(0, idx) as DefaultSegment | string;\n const tail = relFile.slice(idx + 1);\n if ((DEFAULT_SEGMENTS as readonly string[]).includes(head)) {\n const override = paths[head as DefaultSegment];\n return `${override}/${tail}`;\n }\n return relFile;\n};\n\nconst hasUseClientDirective = (content: string): boolean =>\n /^\\s*[\"']use client[\"'];?/.test(content);\n\nconst withUseClientDirective = (content: string): string =>\n hasUseClientDirective(content) ? content : `\"use client\";\\n\\n${content}`;\n\nexport const planComponentOps = (opts: ComponentsOptions): FileOp[] => {\n const ops: FileOp[] = [];\n for (const unit of opts.units) {\n const nextClientFiles = new Set(unit.clientFiles ?? []);\n for (const relFile of unit.files) {\n const sourceAbs = join(opts.registry.root, relFile);\n const mapped = remap(relFile, opts.paths);\n const targetAbs = join(opts.targetSrcDir, mapped);\n const sourceContent = readFileSync(sourceAbs, \"utf8\");\n const content =\n opts.template === \"next\" && nextClientFiles.has(relFile)\n ? withUseClientDirective(sourceContent)\n : sourceContent;\n ops.push({\n target: targetAbs,\n content,\n label: mapped,\n });\n }\n }\n return ops;\n};\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join, relative } from \"node:path\";\nimport type { ComponentsConfig, CssConfigPlacement } from \"./config.js\";\nimport {\n renderCssConfig,\n type CssConfigResult,\n type CssConfigSnippet,\n} from \"./css-config.js\";\nimport { applyInlineCssConfig } from \"./css-inline.js\";\nimport type { ProjectInfo } from \"./detect.js\";\nimport type { FileOp } from \"./fs-ops.js\";\n\nexport interface PlanCssConfigInput {\n cwd: string;\n cfg: ComponentsConfig;\n /** Already-resolved placement (auto → inline|file decided by init flow) */\n placement: {\n effective: Exclude<CssConfigPlacement, \"auto\">;\n hostPath: string | null;\n };\n project: ProjectInfo;\n}\n\nexport interface PlanCssConfigResult {\n ops: FileOp[];\n snippets: CssConfigSnippet[];\n warnings: string[];\n}\n\n/**\n * Plan the file operations + manual snippets for the CSS-plugin chain.\n *\n * Handles three outcomes uniformly:\n * - **standalone file** - render `postcss.config.*` (or framework variant)\n * and emit a write op.\n * - **inline injection** - patch the host config (`vite.config.ts`, …)\n * and emit a write op for that single file.\n * - **inline failure** - host config exists but couldn't be patched\n * safely (e.g. it already declares a `postcss:` block); fall back to a\n * standalone file, **and** push the manual snippet so the user can\n * wire it up by hand.\n */\nexport const planCssConfigOps = (input: PlanCssConfigInput): PlanCssConfigResult => {\n const { cwd, cfg, placement, project } = input;\n const ops: FileOp[] = [];\n const snippets: CssConfigSnippet[] = [];\n const warnings: string[] = [];\n\n const render = (p: Exclude<CssConfigPlacement, \"auto\">): CssConfigResult =>\n renderCssConfig({\n template: cfg.template,\n srcDir: cfg.srcDir,\n alias: cfg.alias,\n stylesRel: cfg.paths.styles,\n options: {\n withTokenUtilities: cfg.utilities.enabled,\n prettyCssModuleNames: cfg.cssModules.pretty,\n },\n placement: p,\n viteConfigExists: Boolean(project.viteConfigPath),\n });\n\n let result = render(placement.effective);\n\n if (placement.effective === \"inline\" && result.inline) {\n const hostPath = placement.hostPath;\n if (!hostPath || !existsSync(hostPath)) {\n warnings.push(\"Inline host config not found at apply-time. Falling back to standalone PostCSS config.\");\n result = render(\"file\");\n } else {\n const inline = applyInlineCssConfig({\n source: readFileSync(hostPath, \"utf8\"),\n plan: result.inline,\n });\n\n if (inline.ok && inline.content) {\n ops.push({\n target: hostPath,\n content: inline.content,\n label: relative(cwd, hostPath) || hostPath,\n });\n snippets.push(...result.snippets);\n result = { files: [], snippets: [] };\n } else {\n warnings.push(`Could not inline CSS plugins (${inline.reason ?? \"unknown reason\"}). Falling back to standalone PostCSS config.`);\n snippets.push(result.inline.manualSnippet);\n const fallback = render(\"file\");\n result = {\n files: fallback.files,\n snippets: [...result.snippets, ...fallback.snippets],\n };\n }\n }\n }\n\n for (const file of result.files) {\n ops.push({\n target: join(cwd, file.filename),\n content: file.content,\n label: file.label,\n });\n }\n snippets.push(...result.snippets);\n\n return { ops, snippets, warnings };\n};\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { TemplateError } from \"./errors.js\";\n\nconst HERE = dirname(fileURLToPath(import.meta.url));\n// Templates are collocated with each framework's renderer under\n// `src/frameworks/<name>/` (source) or `dist/frameworks/<name>/` (bundled).\n// Walk up until we find a sibling `frameworks/` dir so both layouts work.\nconst TEMPLATES_DIR = (() => {\n for (const depth of [0, 1, 2, 3]) {\n const candidate = join(HERE, ...Array(depth).fill(\"..\"), \"frameworks\");\n if (existsSync(candidate)) return candidate;\n }\n return join(HERE, \"..\", \"frameworks\");\n})();\n\nexport type TemplateVars = Record<string, string | boolean | undefined>;\n\nconst truthy = (v: unknown): boolean => Boolean(v);\n\nconst resolveTemplatePath = (name: string): string => {\n const p = join(TEMPLATES_DIR, name);\n if (!existsSync(p)) {\n throw new TemplateError(\n \"E_TEMPLATE_MISSING\",\n `Template not found: ${name} (looked in ${TEMPLATES_DIR}).`,\n `This is a CLI packaging bug - please file an issue.`,\n );\n }\n return p;\n};\n\nexport const loadTemplate = (name: string): string =>\n readFileSync(resolveTemplatePath(name), \"utf8\");\n\nexport const renderTemplate = (name: string, vars: TemplateVars): string => {\n let src = loadTemplate(name);\n\n // Conditional blocks (process first so {{var}} inside kept blocks still\n // resolve in the second pass).\n src = src.replace(\n /\\{\\{#(if|unless)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\}\\}([\\s\\S]*?)\\{\\{\\/\\1\\}\\}\\n?/g,\n (_full, kind: string, key: string, body: string) => {\n const keep = kind === \"if\" ? truthy(vars[key]) : !truthy(vars[key]);\n return keep ? body : \"\";\n },\n );\n\n // Simple substitution.\n src = src.replace(\n /\\{\\{\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\}\\}/g,\n (_full, key: string) => {\n if (!(key in vars)) {\n throw new TemplateError(\n \"E_TEMPLATE_RENDER\",\n `Template ${name} references unknown variable {{${key}}}.`,\n `This is a CLI bug - please file an issue.`,\n );\n }\n const v = vars[key];\n return v === undefined || v === false ? \"\" : String(v);\n },\n );\n\n return src;\n};\n\n","import { posix, sep } from \"node:path\";\r\nimport { renderTemplate } from \"../lib/templates.js\";\r\nimport { indent, renderPluginChain } from \"../lib/postcss-plugins.js\";\r\nimport type {\r\n CssConfigInlinePlan,\r\n CssConfigOptions,\r\n InlineConfigTarget,\r\n} from \"../lib/css-config.js\";\r\n\r\nexport const toPosix = (p: string): string => p.split(sep).join(posix.sep);\r\n\r\nexport const renderPluginStrings = (\r\n opts: CssConfigOptions,\r\n context: {\r\n srcDir: string;\r\n stylesRel: string;\r\n contentExtensions?: string[];\r\n },\r\n indentInvocations: number,\r\n): { imports: string; invocations: string } => {\r\n const chain = renderPluginChain({\r\n withTokenUtilities: opts.withTokenUtilities,\r\n srcDir: context.srcDir,\r\n stylesRel: context.stylesRel,\r\n contentExtensions: context.contentExtensions,\r\n });\r\n const imports = chain.imports.join(\"\\n\");\r\n const invocations = chain.invocations\r\n .map((inv) => indent(inv, indentInvocations))\r\n .join(\"\\n\");\r\n return { imports, invocations };\r\n};\r\n\r\nexport const toCommonJsImports = (imports: string): string =>\r\n imports\r\n .split(\"\\n\")\r\n .map((line) => {\r\n const trimmed = line.trim();\r\n const m = trimmed.match(/^import\\s+([A-Za-z_$][\\w$]*)\\s+from\\s+\"([^\"]+)\";?$/);\r\n if (!m) return line;\r\n return `const ${m[1]} = require(\"${m[2]}\");`;\r\n })\r\n .join(\"\\n\");\r\n\r\nexport const renderInlinePlan = (args: {\r\n target: InlineConfigTarget;\r\n title: string;\r\n templatePath: string;\r\n options: CssConfigOptions;\r\n context: {\r\n srcDir: string;\r\n stylesRel: string;\r\n contentExtensions?: string[];\r\n };\r\n snippetInvocationIndent: number;\r\n extraTemplateVars?: Record<string, unknown>;\r\n}): CssConfigInlinePlan => {\r\n const chain = renderPluginChain({\r\n withTokenUtilities: args.options.withTokenUtilities,\r\n srcDir: args.context.srcDir,\r\n stylesRel: args.context.stylesRel,\r\n contentExtensions: args.context.contentExtensions,\r\n });\r\n const snippetInvocations = chain.invocations\r\n .map((inv) => indent(inv, args.snippetInvocationIndent))\r\n .join(\"\\n\");\r\n\r\n return {\r\n target: args.target,\r\n imports: chain.imports,\r\n invocations: chain.invocations,\r\n manualSnippet: {\r\n title: args.title,\r\n content: renderTemplate(args.templatePath, {\r\n imports: chain.imports.join(\"\\n\"),\r\n invocations: snippetInvocations,\r\n ...(args.extraTemplateVars ?? {}),\r\n }),\r\n },\r\n };\r\n};\r\n","export interface PluginChainOptions {\r\n withTokenUtilities: boolean;\r\n /** Posix-ish project source dir (e.g. \"src\" or \"src/renderer/src\") */\r\n srcDir: string;\r\n /** Styles dir relative to srcDir (usually \"styles\") */\r\n stylesRel: string;\r\n /** File extensions to scan for class names */\r\n contentExtensions?: string[];\r\n}\r\n\r\nexport interface RenderedPluginChain {\r\n /** Import lines (one per plugin) as TS/JS source */\r\n imports: string[];\r\n /** Plugin invocations in order, as TS/JS source inside a `plugins: [...]` array */\r\n invocations: string[];\r\n}\r\n\r\nexport const renderPluginChain = (\r\n opts: PluginChainOptions,\r\n): RenderedPluginChain => {\r\n const normalizeRel = (value: string): string =>\r\n value\r\n .replace(/\\\\/g, \"/\")\r\n .replace(/^\\.\\//, \"\")\r\n .replace(/^\\/+/, \"\")\r\n .replace(/\\/+$/, \"\");\r\n\r\n const rel = (...parts: string[]): string =>\r\n `./${parts\r\n .map(normalizeRel)\r\n .filter(Boolean)\r\n .join(\"/\")\r\n .replace(/\\/+/g, \"/\")}`;\r\n\r\n const srcDir = normalizeRel(opts.srcDir);\r\n const stylesRel = normalizeRel(opts.stylesRel);\r\n const stylesDir = rel(srcDir, stylesRel);\r\n const mediaSource = `${stylesDir}/media.css`;\r\n const tokenSource = `${stylesDir}/app.css`;\r\n const generatedPath = `${stylesDir}/utilities.gen.css`;\r\n const extensions =\r\n opts.contentExtensions && opts.contentExtensions.length > 0\r\n ? opts.contentExtensions\r\n : [\"tsx\", \"ts\", \"jsx\", \"js\"];\r\n const contentGlob = rel(srcDir, \"**\", `*.{${extensions.join(\",\")}}`);\r\n\r\n const imports: string[] = [\r\n `import postcssPresetEnv from \"postcss-preset-env\";`,\r\n `import postcssGlobalData from \"@csstools/postcss-global-data\";`,\r\n `import autoprefixer from \"autoprefixer\";`,\r\n ];\r\n if (opts.withTokenUtilities) {\r\n imports.push(`import tokenUtilities from \"postcss-token-utilities\";`);\r\n }\r\n\r\n const invocations: string[] = [];\r\n\r\n invocations.push(\r\n `postcssGlobalData({\\n files: [\"${mediaSource}\"],\\n}),`,\r\n );\r\n\r\n if (opts.withTokenUtilities) {\r\n invocations.push(\r\n `tokenUtilities({\\n` +\r\n ` designTokenSource: \"${tokenSource}\",\\n` +\r\n ` customMediaSource: \"${mediaSource}\",\\n` +\r\n ` content: [\"${contentGlob}\"],\\n` +\r\n ` classMatcher: [\"optionClassName\"],\\n` +\r\n ` generated: {\\n` +\r\n ` path: \"${generatedPath}\",\\n` +\r\n ` },\\n` +\r\n `}),`,\r\n );\r\n }\r\n\r\n invocations.push(\r\n `postcssPresetEnv({\\n` +\r\n ` stage: 2,\\n` +\r\n ` preserve: true,\\n` +\r\n ` features: {\\n` +\r\n ` \"nesting-rules\": true,\\n` +\r\n ` \"custom-media-queries\": true,\\n` +\r\n ` \"color-mix\": true,\\n` +\r\n ` },\\n` +\r\n `}),`,\r\n );\r\n\r\n invocations.push(`autoprefixer(),`);\r\n\r\n return { imports, invocations };\r\n};\r\n\r\nexport const indent = (src: string, level = 1): string => {\r\n const pad = \" \".repeat(level);\r\n return src\r\n .split(\"\\n\")\r\n .map((line) => (line.length ? pad + line : line))\r\n .join(\"\\n\");\r\n};\r\n","import { renderTemplate } from \"../../lib/templates.js\";\nimport type { CssConfigRenderInput, CssConfigResult } from \"../../lib/css-config.js\";\nimport type { FrameworkRenderContext } from \"../types.js\";\nimport { renderInlinePlan, renderPluginStrings } from \"../shared.js\";\n\nexport const renderViteReactCssConfig = (\n input: CssConfigRenderInput,\n context: FrameworkRenderContext,\n): CssConfigResult => {\n const files: CssConfigResult[\"files\"] = [];\n const snippets: CssConfigResult[\"snippets\"] = [];\n\n if (input.placement === \"inline\") {\n return {\n files,\n snippets,\n inline: renderInlinePlan({\n target: \"vite\",\n title: \"Merge this into your existing vite.config.ts\",\n templatePath: \"vite-react/vite-inline.snippet.md\",\n context: context.pluginCtx,\n options: input.options,\n snippetInvocationIndent: 2,\n extraTemplateVars: { pretty: input.options.prettyCssModuleNames },\n }),\n };\n }\n\n if (input.viteConfigExists) {\n const inline = renderInlinePlan({\n target: \"vite\",\n title: \"Optional: move the PostCSS chain into vite.config.ts\",\n templatePath: \"vite-react/vite-inline.snippet.md\",\n context: context.pluginCtx,\n options: input.options,\n snippetInvocationIndent: 2,\n extraTemplateVars: { pretty: input.options.prettyCssModuleNames },\n });\n snippets.push(inline.manualSnippet);\n\n const pc = renderPluginStrings(input.options, context.pluginCtx, 2);\n files.push({\n filename: \"postcss.config.ts\",\n content: renderTemplate(\"vite-react/postcss.config.ts.template\", {\n imports: pc.imports,\n invocations: pc.invocations,\n }),\n label: \"postcss.config.ts\",\n });\n return { files, snippets };\n }\n\n const { imports, invocations } = renderPluginStrings(\n input.options,\n context.pluginCtx,\n 4,\n );\n files.push({\n filename: \"vite.config.ts\",\n content: renderTemplate(\"vite-react/vite.config.ts.template\", {\n imports,\n invocations,\n alias: input.alias,\n srcDir: context.posixSrc,\n pretty: input.options.prettyCssModuleNames,\n }),\n label: \"vite.config.ts\",\n });\n\n return { files, snippets };\n};\n","import { renderTemplate } from \"../../lib/templates.js\";\nimport type { CssConfigRenderInput, CssConfigResult } from \"../../lib/css-config.js\";\nimport type { FrameworkRenderContext } from \"../types.js\";\nimport { renderPluginStrings, toCommonJsImports } from \"../shared.js\";\n\nexport const renderNextCssConfig = (\n input: CssConfigRenderInput,\n context: FrameworkRenderContext,\n): CssConfigResult => {\n const files: CssConfigResult[\"files\"] = [];\n const snippets: CssConfigResult[\"snippets\"] = [];\n\n const { imports: esmImports, invocations } = renderPluginStrings(\n input.options,\n context.pluginCtx,\n 2,\n );\n const imports = toCommonJsImports(esmImports);\n\n files.push({\n filename: \"postcss.config.js\",\n content: renderTemplate(\"next/postcss.config.js.template\", {\n imports,\n invocations,\n }),\n label: \"postcss.config.js\",\n });\n snippets.push({\n title: \"Wire globals.css into app/layout.tsx\",\n content: renderTemplate(\"next/layout-import.snippet.md\", {\n srcDir: context.posixSrc,\n stylesRel: context.posixStyles,\n utilities: input.options.withTokenUtilities,\n }),\n });\n snippets.push({\n title: \"Ensure next.config.* transpiles @aplance-ui/core\",\n content: renderTemplate(\"next/next.config.snippet.md\", {}),\n });\n\n return { files, snippets };\n};\n","import { renderTemplate } from \"../../lib/templates.js\";\nimport type { CssConfigRenderInput, CssConfigResult } from \"../../lib/css-config.js\";\nimport type { FrameworkRenderContext } from \"../types.js\";\nimport { renderInlinePlan, renderPluginStrings } from \"../shared.js\";\n\nexport const renderTanstackStartCssConfig = (\n input: CssConfigRenderInput,\n context: FrameworkRenderContext,\n): CssConfigResult => {\n const files: CssConfigResult[\"files\"] = [];\n const snippets: CssConfigResult[\"snippets\"] = [];\n\n if (input.placement === \"inline\") {\n return {\n files,\n snippets,\n inline: renderInlinePlan({\n target: \"tanstack-start\",\n title: \"Merge this into app.config.ts (vite block)\",\n templatePath: \"tanstack-start/vite-inline.snippet.md\",\n context: context.pluginCtx,\n options: input.options,\n snippetInvocationIndent: 4,\n }),\n };\n }\n\n const { imports, invocations } = renderPluginStrings(\n input.options,\n context.pluginCtx,\n 2,\n );\n files.push({\n filename: \"postcss.config.ts\",\n content: renderTemplate(\"tanstack-start/postcss.config.ts.template\", {\n imports,\n invocations,\n }),\n label: \"postcss.config.ts\",\n });\n\n const inline = renderInlinePlan({\n target: \"tanstack-start\",\n title: \"Optional: move the PostCSS chain into app.config.ts\",\n templatePath: \"tanstack-start/vite-inline.snippet.md\",\n context: context.pluginCtx,\n options: input.options,\n snippetInvocationIndent: 4,\n });\n snippets.push(inline.manualSnippet);\n\n return { files, snippets };\n};\n","import { renderTemplate } from \"../../lib/templates.js\";\nimport type { CssConfigRenderInput, CssConfigResult } from \"../../lib/css-config.js\";\nimport type { FrameworkRenderContext } from \"../types.js\";\nimport { renderInlinePlan, renderPluginStrings } from \"../shared.js\";\n\nconst ASTRO_PLUGIN_CONTEXT = {\n contentExtensions: [\"tsx\", \"ts\", \"jsx\", \"js\", \"astro\"],\n};\n\nexport const renderAstroCssConfig = (\n input: CssConfigRenderInput,\n context: FrameworkRenderContext,\n): CssConfigResult => {\n const files: CssConfigResult[\"files\"] = [];\n const snippets: CssConfigResult[\"snippets\"] = [];\n\n snippets.push({\n title: \"Wire the React integration + global styles\",\n content: renderTemplate(\"astro/astro.config.snippet.md\", {\n stylesRel: context.posixStyles,\n utilities: input.options.withTokenUtilities,\n }),\n });\n\n if (input.placement === \"inline\") {\n return {\n files,\n snippets,\n inline: renderInlinePlan({\n target: \"astro\",\n title: \"Merge this into astro.config.* (vite block)\",\n templatePath: \"astro/vite-inline.snippet.md\",\n context: {\n ...context.pluginCtx,\n ...ASTRO_PLUGIN_CONTEXT,\n },\n options: input.options,\n snippetInvocationIndent: 6,\n }),\n };\n }\n\n const { imports, invocations } = renderPluginStrings(\n input.options,\n {\n ...context.pluginCtx,\n ...ASTRO_PLUGIN_CONTEXT,\n },\n 2,\n );\n files.push({\n filename: \"postcss.config.mjs\",\n content: renderTemplate(\"astro/postcss.config.mjs.template\", {\n imports,\n invocations,\n }),\n label: \"postcss.config.mjs\",\n });\n\n return { files, snippets };\n};\n","import { renderTemplate } from \"../../lib/templates.js\";\nimport type { CssConfigRenderInput, CssConfigResult } from \"../../lib/css-config.js\";\nimport type { FrameworkRenderContext } from \"../types.js\";\nimport { renderInlinePlan, renderPluginStrings } from \"../shared.js\";\n\nexport const renderElectronViteCssConfig = (\n input: CssConfigRenderInput,\n context: FrameworkRenderContext,\n): CssConfigResult => {\n const files: CssConfigResult[\"files\"] = [];\n const snippets: CssConfigResult[\"snippets\"] = [];\n\n if (input.placement === \"inline\") {\n return {\n files,\n snippets,\n inline: renderInlinePlan({\n target: \"electron-vite\",\n title: \"Merge this into electron.vite.config.ts (renderer block)\",\n templatePath: \"electron-vite/vite.config.snippet.md\",\n context: context.pluginCtx,\n options: input.options,\n snippetInvocationIndent: 5,\n extraTemplateVars: {\n alias: input.alias,\n srcDir: context.posixSrc,\n stylesRel: context.posixStyles,\n utilities: input.options.withTokenUtilities,\n },\n }),\n };\n }\n\n const { imports, invocations } = renderPluginStrings(\n input.options,\n context.pluginCtx,\n 2,\n );\n files.push({\n filename: \"postcss.config.ts\",\n content: renderTemplate(\"vite-react/postcss.config.ts.template\", {\n imports,\n invocations,\n }),\n label: \"postcss.config.ts\",\n });\n\n return { files, snippets };\n};\n","import type { FrameworkTemplate } from \"../lib/config.js\";\r\nimport type { FrameworkCssRenderer } from \"./types.js\";\r\nimport { renderViteReactCssConfig } from \"./vite-react/index.js\";\r\nimport { renderNextCssConfig } from \"./next/index.js\";\r\nimport { renderTanstackStartCssConfig } from \"./tanstack-start/index.js\";\r\nimport { renderAstroCssConfig } from \"./astro/index.js\";\r\nimport { renderElectronViteCssConfig } from \"./electron-vite/index.js\";\r\n\r\nexport const FRAMEWORK_CSS_RENDERERS: Record<\r\n FrameworkTemplate,\r\n FrameworkCssRenderer\r\n> = {\r\n \"vite-react\": renderViteReactCssConfig,\r\n next: renderNextCssConfig,\r\n \"tanstack-start\": renderTanstackStartCssConfig,\r\n astro: renderAstroCssConfig,\r\n \"electron-vite\": renderElectronViteCssConfig,\r\n};\r\n","import type { CssConfigPlacement, FrameworkTemplate } from \"./config.js\";\r\nimport { TemplateError } from \"./errors.js\";\r\nimport { FRAMEWORK_CSS_RENDERERS } from \"../frameworks/renderers.js\";\r\nimport { toPosix } from \"../frameworks/shared.js\";\r\nimport type { FrameworkRenderContext } from \"../frameworks/types.js\";\r\n\r\nexport interface CssConfigOptions {\r\n withTokenUtilities: boolean;\r\n /** Human-readable CSS-Modules class names. Vite-only. */\r\n prettyCssModuleNames: boolean;\r\n}\r\n\r\nexport interface CssConfigRenderInput {\r\n template: FrameworkTemplate;\r\n /** Posix-style srcDir relative to cwd - the framework-specific default or user override */\r\n srcDir: string;\r\n /** Path-alias prefix without trailing /* */\r\n alias: string;\r\n /** Posix-style path of the styles directory, relative to srcDir */\r\n stylesRel: string;\r\n options: CssConfigOptions;\r\n /** Effective placement selected by init flow (`auto` is resolved before calling this). */\r\n placement: Exclude<CssConfigPlacement, \"auto\">;\r\n /** Only matters for vite-react: did we find an existing vite.config.*? */\r\n viteConfigExists: boolean;\r\n}\r\n\r\nexport interface CssConfigFile {\r\n filename: string;\r\n content: string;\r\n label: string;\r\n}\r\n\r\nexport interface CssConfigSnippet {\r\n title: string;\r\n content: string;\r\n}\r\n\r\nexport type InlineConfigTarget =\r\n | \"vite\"\r\n | \"astro\"\r\n | \"tanstack-start\"\r\n | \"electron-vite\";\r\n\r\nexport interface CssConfigInlinePlan {\r\n target: InlineConfigTarget;\r\n imports: string[];\r\n invocations: string[];\r\n manualSnippet: CssConfigSnippet;\r\n}\r\n\r\nexport interface CssConfigResult {\r\n files: CssConfigFile[];\r\n snippets: CssConfigSnippet[];\r\n inline?: CssConfigInlinePlan;\r\n}\r\n\r\nexport const renderCssConfig = (input: CssConfigRenderInput): CssConfigResult => {\r\n const posixSrc = toPosix(input.srcDir);\r\n const posixStyles = toPosix(input.stylesRel);\r\n const context: FrameworkRenderContext = {\r\n posixSrc,\r\n posixStyles,\r\n pluginCtx: {\r\n srcDir: posixSrc,\r\n stylesRel: posixStyles,\r\n },\r\n };\r\n\r\n const renderer = FRAMEWORK_CSS_RENDERERS[input.template];\r\n if (!renderer) {\r\n const exhaustive = input.template;\r\n throw new TemplateError(\r\n \"E_UNKNOWN_TEMPLATE\",\r\n `Unknown framework template: ${String(exhaustive)}.`,\r\n );\r\n }\r\n return renderer(input, context);\r\n};\r\n","import type { CssConfigInlinePlan } from \"./css-config.js\";\r\n\r\nexport interface ApplyInlineCssConfigInput {\r\n source: string;\r\n plan: CssConfigInlinePlan;\r\n}\r\n\r\nexport interface ApplyInlineCssConfigResult {\r\n ok: boolean;\r\n content?: string;\r\n reason?: string;\r\n}\r\n\r\nconst TOP_LEVEL_OBJECT_PATTERNS = [\r\n /^[ \\t]*export\\s+default\\s+defineConfig\\s*\\(\\s*\\{/m,\r\n /^[ \\t]*defineConfig\\s*\\(\\s*\\{/m,\r\n /^[ \\t]*export\\s+default\\s*\\{/m,\r\n];\r\n\r\nconst extractModuleSpecifier = (line: string): string | null => {\r\n const fromMatch = line.match(/from\\s+\"([^\"]+)\"/) ?? line.match(/from\\s+'([^']+)'/);\r\n if (fromMatch?.[1]) return fromMatch[1];\r\n\r\n const requireMatch =\r\n line.match(/require\\(\\s*\"([^\"]+)\"\\s*\\)/) ??\r\n line.match(/require\\(\\s*'([^']+)'\\s*\\)/);\r\n return requireMatch?.[1] ?? null;\r\n};\r\n\r\nconst escapeRegExp = (value: string): string =>\r\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\nconst ensureImports = (source: string, imports: string[]): string => {\r\n const missing = imports.filter((line) => {\r\n const moduleName = extractModuleSpecifier(line);\r\n if (moduleName) {\r\n const modulePattern = new RegExp(\r\n `from\\\\s+[\"']${escapeRegExp(moduleName)}[\"']|require\\\\(\\\\s*[\"']${escapeRegExp(moduleName)}[\"']\\\\s*\\\\)`,\r\n );\r\n return !modulePattern.test(source);\r\n }\r\n return !source.includes(line.trim());\r\n });\r\n\r\n if (missing.length === 0) return source;\r\n\r\n const importMatches = Array.from(source.matchAll(/^import[^\\n]*$/gm));\r\n if (importMatches.length === 0) {\r\n return `${missing.join(\"\\n\")}\\n\\n${source}`;\r\n }\r\n\r\n const lastImport = importMatches[importMatches.length - 1];\r\n const insertAt = lastImport.index! + lastImport[0].length;\r\n return `${source.slice(0, insertAt)}\\n${missing.join(\"\\n\")}${source.slice(insertAt)}`;\r\n};\r\n\r\nconst renderIndentedBlock = (source: string, indent: string): string =>\r\n source\r\n .split(\"\\n\")\r\n .map((line) => (line.length > 0 ? `${indent}${line}` : line))\r\n .join(\"\\n\");\r\n\r\nconst buildCssPostcssBlock = (invocations: string[], cssIndent: string): string => {\r\n const postcssIndent = `${cssIndent} `;\r\n const pluginsIndent = `${postcssIndent} `;\r\n const itemIndent = `${pluginsIndent} `;\r\n const plugins = invocations\r\n .map((invocation) => renderIndentedBlock(invocation, itemIndent))\r\n .join(\"\\n\");\r\n\r\n return [\r\n `${cssIndent}css: {`,\r\n `${postcssIndent}postcss: {`,\r\n `${pluginsIndent}plugins: [`,\r\n plugins,\r\n `${pluginsIndent}],`,\r\n `${postcssIndent}},`,\r\n `${cssIndent}},`,\r\n ].join(\"\\n\");\r\n};\r\n\r\nconst buildViteBlock = (invocations: string[], viteIndent: string): string =>\r\n [\r\n `${viteIndent}vite: {`,\r\n buildCssPostcssBlock(invocations, `${viteIndent} `),\r\n `${viteIndent}},`,\r\n ].join(\"\\n\");\r\n\r\nconst insertIntoTopLevelObject = (\r\n source: string,\r\n blockFactory: (childIndent: string) => string,\r\n): string | null => {\r\n for (const pattern of TOP_LEVEL_OBJECT_PATTERNS) {\r\n const match = pattern.exec(source);\r\n if (!match) continue;\r\n\r\n const lineIndent = (match[0].match(/^[ \\t]*/) ?? [\"\"])[0];\r\n const insertAt = match.index + match[0].length;\r\n const block = blockFactory(`${lineIndent} `);\r\n return `${source.slice(0, insertAt)}\\n${block}${source.slice(insertAt)}`;\r\n }\r\n return null;\r\n};\r\n\r\nconst findNamedObjectProperty = (\r\n source: string,\r\n propertyName: string,\r\n): { insertAt: number; childIndent: string } | null => {\r\n const pattern = new RegExp(`(^[ \\\\t]*)${escapeRegExp(propertyName)}\\\\s*:\\\\s*\\\\{`, \"m\");\r\n const match = pattern.exec(source);\r\n if (!match) return null;\r\n\r\n return {\r\n insertAt: match.index + match[0].length,\r\n childIndent: `${match[1] ?? \"\"} `,\r\n };\r\n};\r\n\r\nconst insertIntoNamedObjectProperty = (\r\n source: string,\r\n propertyName: string,\r\n blockFactory: (childIndent: string) => string,\r\n): string | null => {\r\n const found = findNamedObjectProperty(source, propertyName);\r\n if (!found) return null;\r\n const block = blockFactory(found.childIndent);\r\n return `${source.slice(0, found.insertAt)}\\n${block}${source.slice(found.insertAt)}`;\r\n};\r\n\r\nconst hasPostcssConfig = (source: string): boolean => /\\bpostcss\\s*:/.test(source);\r\n\r\nconst applyViteInline = (source: string, invocations: string[]): string | null =>\r\n insertIntoTopLevelObject(source, (childIndent) =>\r\n buildCssPostcssBlock(invocations, childIndent),\r\n );\r\n\r\nconst applyVitePropertyInline = (\r\n source: string,\r\n invocations: string[],\r\n): string | null => {\r\n const inVite = insertIntoNamedObjectProperty(source, \"vite\", (childIndent) =>\r\n buildCssPostcssBlock(invocations, childIndent),\r\n );\r\n if (inVite) return inVite;\r\n\r\n return insertIntoTopLevelObject(source, (childIndent) =>\r\n buildViteBlock(invocations, childIndent),\r\n );\r\n};\r\n\r\nconst applyElectronRendererInline = (\r\n source: string,\r\n invocations: string[],\r\n): string | null =>\r\n insertIntoNamedObjectProperty(source, \"renderer\", (childIndent) =>\r\n buildCssPostcssBlock(invocations, childIndent),\r\n );\r\n\r\nexport const applyInlineCssConfig = (\r\n input: ApplyInlineCssConfigInput,\r\n): ApplyInlineCssConfigResult => {\r\n if (hasPostcssConfig(input.source)) {\r\n return {\r\n ok: false,\r\n reason: \"Config already contains a postcss block.\",\r\n };\r\n }\r\n\r\n const withImports = ensureImports(input.source, input.plan.imports);\r\n\r\n const patched = (() => {\r\n switch (input.plan.target) {\r\n case \"vite\":\r\n return applyViteInline(withImports, input.plan.invocations);\r\n case \"astro\":\r\n case \"tanstack-start\":\r\n return applyVitePropertyInline(withImports, input.plan.invocations);\r\n case \"electron-vite\":\r\n return applyElectronRendererInline(withImports, input.plan.invocations);\r\n default:\r\n return null;\r\n }\r\n })();\r\n\r\n if (!patched) {\r\n return {\r\n ok: false,\r\n reason: `Could not locate a writable ${input.plan.target} config object.`,\r\n };\r\n }\r\n\r\n return { ok: true, content: patched };\r\n};\r\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { FrameworkTemplate } from \"./config.js\";\n\nexport interface ProjectInfo {\n /** Does the project appear to be Vite-based? */\n isVite: boolean;\n /** Absolute path to the detected vite config, if any. */\n viteConfigPath: string | null;\n /** Does the project appear to be Next.js-based? */\n isNext: boolean;\n /** Absolute path to next.config.*, if any. */\n nextConfigPath: string | null;\n /** Does the project appear to be Astro-based? */\n isAstro: boolean;\n /** Absolute path to astro.config.*, if any. */\n astroConfigPath: string | null;\n /** Does the project appear to use TanStack Start? */\n isTanstackStart: boolean;\n /** Absolute path to app.config.* (TanStack Start), if any. */\n tanstackConfigPath: string | null;\n /** Does the project appear to use electron-vite? */\n isElectronVite: boolean;\n /** Absolute path to electron.vite.config.*, if any. */\n electronViteConfigPath: string | null;\n /** Absolute path to a package.json at cwd, if it exists */\n packageJsonPath: string | null;\n /** Declared dependencies (deps + devDeps + peerDeps merged) */\n declaredDeps: Set<string>;\n}\n\nconst VITE_CONFIG_NAMES = [\n \"vite.config.ts\",\n \"vite.config.mts\",\n \"vite.config.js\",\n \"vite.config.mjs\",\n];\n\nconst NEXT_CONFIG_NAMES = [\n \"next.config.ts\",\n \"next.config.js\",\n \"next.config.mjs\",\n];\n\nconst ASTRO_CONFIG_NAMES = [\n \"astro.config.ts\",\n \"astro.config.js\",\n \"astro.config.mjs\",\n];\n\nconst ELECTRON_VITE_CONFIG_NAMES = [\n \"electron.vite.config.ts\",\n \"electron.vite.config.js\",\n \"electron.vite.config.mjs\",\n];\n\nconst TANSTACK_APP_CONFIG_NAMES = [\n \"app.config.ts\",\n \"app.config.mts\",\n \"app.config.js\",\n \"app.config.mjs\",\n];\n\nconst firstExisting = (cwd: string, names: string[]): string | null => {\n for (const name of names) {\n const p = join(cwd, name);\n if (existsSync(p)) return p;\n }\n return null;\n};\n\nconst readDeclaredDeps = (packageJsonPath: string): Set<string> => {\n try {\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n };\n return new Set([\n ...Object.keys(pkg.dependencies ?? {}),\n ...Object.keys(pkg.devDependencies ?? {}),\n ...Object.keys(pkg.peerDependencies ?? {}),\n ]);\n } catch {\n return new Set();\n }\n};\n\nexport const detectProject = (cwd: string): ProjectInfo => {\n const packageJsonPath = existsSync(join(cwd, \"package.json\"))\n ? join(cwd, \"package.json\")\n : null;\n const declaredDeps = packageJsonPath\n ? readDeclaredDeps(packageJsonPath)\n : new Set<string>();\n\n const viteConfigPath = firstExisting(cwd, VITE_CONFIG_NAMES);\n const nextConfigPath = firstExisting(cwd, NEXT_CONFIG_NAMES);\n const astroConfigPath = firstExisting(cwd, ASTRO_CONFIG_NAMES);\n const electronViteConfigPath = firstExisting(cwd, ELECTRON_VITE_CONFIG_NAMES);\n const tanstackConfigPath = firstExisting(cwd, TANSTACK_APP_CONFIG_NAMES);\n\n return {\n isVite: Boolean(viteConfigPath) || declaredDeps.has(\"vite\"),\n viteConfigPath,\n isNext: Boolean(nextConfigPath) || declaredDeps.has(\"next\"),\n nextConfigPath,\n isAstro: Boolean(astroConfigPath) || declaredDeps.has(\"astro\"),\n astroConfigPath,\n isTanstackStart:\n Boolean(tanstackConfigPath) ||\n declaredDeps.has(\"@tanstack/start\") ||\n declaredDeps.has(\"@tanstack/react-start\"),\n tanstackConfigPath,\n isElectronVite:\n Boolean(electronViteConfigPath) || declaredDeps.has(\"electron-vite\"),\n electronViteConfigPath,\n packageJsonPath,\n declaredDeps,\n };\n};\n\nexport const suggestTemplate = (p: ProjectInfo): FrameworkTemplate | null => {\n if (p.isElectronVite) return \"electron-vite\";\n if (p.isNext) return \"next\";\n if (p.isAstro) return \"astro\";\n if (p.isTanstackStart) return \"tanstack-start\";\n if (p.isVite) return \"vite-react\";\n return null;\n};\n\nexport const describeProject = (p: ProjectInfo): string => {\n const parts: string[] = [];\n if (p.isElectronVite) parts.push(\"electron-vite\");\n else if (p.isNext) parts.push(\"Next.js\");\n else if (p.isAstro) parts.push(\"Astro\");\n else if (p.isTanstackStart) parts.push(\"TanStack Start\");\n else if (p.isVite) parts.push(\"Vite\");\n return parts.length ? parts.join(\", \") : \"unknown framework\";\n};\n","import type { FrameworkTemplate } from \"../lib/config.js\";\r\nimport type { ProjectInfo } from \"../lib/detect.js\";\r\n\r\ninterface FrameworkMeta {\r\n label: string;\r\n supportsPrettyCssModuleNames: boolean;\r\n resolveInlineHostPath: (project: ProjectInfo) => string | null;\r\n}\r\n\r\nexport const FRAMEWORK_META: Record<FrameworkTemplate, FrameworkMeta> = {\r\n \"vite-react\": {\r\n label: \"Vite + React\",\r\n supportsPrettyCssModuleNames: true,\r\n resolveInlineHostPath: (project) => project.viteConfigPath,\r\n },\r\n next: {\r\n label: \"Next.js (App Router)\",\r\n supportsPrettyCssModuleNames: false,\r\n resolveInlineHostPath: () => null,\r\n },\r\n \"tanstack-start\": {\r\n label: \"TanStack Start\",\r\n supportsPrettyCssModuleNames: true,\r\n resolveInlineHostPath: (project) => project.tanstackConfigPath,\r\n },\r\n astro: {\r\n label: \"Astro\",\r\n supportsPrettyCssModuleNames: false,\r\n resolveInlineHostPath: (project) => project.astroConfigPath,\r\n },\r\n \"electron-vite\": {\r\n label: \"Electron + Vite\",\r\n supportsPrettyCssModuleNames: true,\r\n resolveInlineHostPath: (project) => project.electronViteConfigPath,\r\n },\r\n};\r\n\r\nexport const getFrameworkLabel = (template: FrameworkTemplate): string =>\r\n FRAMEWORK_META[template].label;\r\n\r\nexport const supportsPrettyCssModules = (\r\n template: FrameworkTemplate,\r\n): boolean => FRAMEWORK_META[template].supportsPrettyCssModuleNames;\r\n\r\nexport const getInlineHostPath = (\r\n template: FrameworkTemplate,\r\n project: ProjectInfo,\r\n): string | null => FRAMEWORK_META[template].resolveInlineHostPath(project);\r\n","import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { isAbsolute, join } from \"node:path\";\nimport { ConfigError } from \"./errors.js\";\n\nexport const CONFIG_FILE_NAME = \"components.json\";\nexport const CONFIG_SCHEMA_URL = \"https://ui.aplance.com/components.schema.json\";\n\nexport const SUPPORTED_TEMPLATES = [\n \"vite-react\",\n \"next\",\n \"tanstack-start\",\n \"astro\",\n \"electron-vite\",\n] as const;\nexport type FrameworkTemplate = (typeof SUPPORTED_TEMPLATES)[number];\n\nexport const CSS_CONFIG_PLACEMENTS = [\"auto\", \"inline\", \"file\"] as const;\nexport type CssConfigPlacement = (typeof CSS_CONFIG_PLACEMENTS)[number];\n\nexport interface ComponentsConfig {\n $schema: string;\n template: FrameworkTemplate;\n /** Posix-style, relative to cwd. \"src\" by default; \"src/renderer/src\" for Electron-Vite. */\n srcDir: string;\n /** Path-alias prefix without trailing /* (e.g. \"@\" → \"@/*\") */\n alias: string;\n /**\n * Active theme - three independent dimensions.\n * `color` selects the palette (slate, zinc, rose, …).\n * `radius` selects the corner-radius scale (sharp, rounded, pill, …).\n * `spacing` selects the gutter scale (compact, spacious, …).\n * `default` on any axis means \"no override\".\n */\n theme: {\n color: string;\n radius: string;\n spacing: string;\n };\n /** Subpaths under srcDir - tweakable but sensible defaults cover 95% of projects */\n paths: {\n styles: string;\n components: string;\n hooks: string;\n lib: string;\n };\n cssModules: {\n /** Human-readable CSS-Modules class names. Vite-only; ignored elsewhere. */\n pretty: boolean;\n };\n utilities: {\n /** Enable postcss-token-utilities in the generated CSS config */\n enabled: boolean;\n };\n cssConfig: {\n placement: CssConfigPlacement;\n };\n}\n\nexport interface ResolvedPaths {\n srcDir: string;\n stylesDir: string;\n componentsDir: string;\n hooksDir: string;\n libDir: string;\n}\n\nexport const DEFAULT_PATHS: ComponentsConfig[\"paths\"] = {\n styles: \"styles\",\n components: \"components\",\n hooks: \"hooks\",\n lib: \"lib\",\n};\n\nexport interface MakeDefaultOptions {\n template: FrameworkTemplate;\n srcDir?: string;\n alias?: string;\n color?: string;\n radius?: string;\n spacing?: string;\n pretty?: boolean;\n utilities?: boolean;\n cssConfigPlacement?: CssConfigPlacement;\n}\n\nconst TEMPLATE_DEFAULT_SRCDIR: Record<FrameworkTemplate, string> = {\n \"vite-react\": \"src\",\n next: \"src\",\n \"tanstack-start\": \"src\",\n astro: \"src\",\n \"electron-vite\": \"src/renderer/src\",\n};\n\nexport const configPath = (cwd: string): string => join(cwd, CONFIG_FILE_NAME);\n\nexport const configExists = (cwd: string): boolean =>\n existsSync(configPath(cwd));\n\nexport const loadConfig = (cwd: string): ComponentsConfig => {\n const p = configPath(cwd);\n if (!existsSync(p)) {\n throw new ConfigError(\n \"E_CONFIG_MISSING\",\n `No ${CONFIG_FILE_NAME} found at ${p}.`,\n `Run \\`aplance-ui init\\` once to create it.`,\n );\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(readFileSync(p, \"utf8\"));\n } catch (err) {\n throw new ConfigError(\n \"E_CONFIG_INVALID\",\n `Failed to parse ${p}: ${(err as Error).message}`,\n `Delete ${CONFIG_FILE_NAME} and re-run \\`aplance-ui init\\` to recreate it.`,\n );\n }\n return validateConfig(parsed, p);\n};\n\nexport const writeConfig = (cwd: string, cfg: ComponentsConfig): void => {\n writeFileSync(configPath(cwd), JSON.stringify(cfg, null, 2) + \"\\n\");\n};\n\nexport const resolvePaths = (\n cwd: string,\n cfg: ComponentsConfig,\n): ResolvedPaths => {\n assertSafeRelativePath(\"srcDir\", cfg.srcDir);\n for (const key of [\"styles\", \"components\", \"hooks\", \"lib\"] as const) {\n assertSafeRelativePath(`paths.${key}`, cfg.paths[key]);\n }\n const srcDir = join(cwd, cfg.srcDir);\n return {\n srcDir,\n stylesDir: join(srcDir, cfg.paths.styles),\n componentsDir: join(srcDir, cfg.paths.components),\n hooksDir: join(srcDir, cfg.paths.hooks),\n libDir: join(srcDir, cfg.paths.lib),\n };\n};\n\n/**\n * Accept both shapes for backwards compatibility with configs written before\n * the two-dimension split: legacy `theme: \"slate\"` → `{ color: \"slate\", radius: \"default\" }`.\n */\nconst normalizeTheme = (raw: unknown): ComponentsConfig[\"theme\"] => {\n if (typeof raw === \"string\") {\n return { color: raw, radius: \"default\", spacing: \"default\" };\n }\n if (raw && typeof raw === \"object\") {\n const t = raw as Partial<ComponentsConfig[\"theme\"]>;\n return {\n color: typeof t.color === \"string\" ? t.color : \"default\",\n radius: typeof t.radius === \"string\" ? t.radius : \"default\",\n spacing: typeof t.spacing === \"string\" ? t.spacing : \"default\",\n };\n }\n return { color: \"default\", radius: \"default\", spacing: \"default\" };\n};\n\nconst isSafeRelativePath = (value: string): boolean => {\n if (value.includes(\"\\0\") || isAbsolute(value)) return false;\n return !value.split(/[\\\\/]+/).some((segment) => segment === \"..\");\n};\n\nconst assertSafeRelativePath = (label: string, value: string): void => {\n if (!isSafeRelativePath(value)) {\n throw new ConfigError(\n \"E_CONFIG_INVALID\",\n `${label} must be a relative path inside the project.`,\n );\n }\n};\n\nexport const makeDefaultConfig = (opts: MakeDefaultOptions): ComponentsConfig => {\n const srcDir = opts.srcDir ?? TEMPLATE_DEFAULT_SRCDIR[opts.template];\n assertSafeRelativePath(\"srcDir\", srcDir);\n\n return {\n $schema: CONFIG_SCHEMA_URL,\n template: opts.template,\n srcDir,\n alias: opts.alias ?? \"@\",\n theme: {\n color: opts.color ?? \"default\",\n radius: opts.radius ?? \"default\",\n spacing: opts.spacing ?? \"default\",\n },\n paths: { ...DEFAULT_PATHS },\n cssModules: { pretty: opts.pretty ?? false },\n utilities: { enabled: opts.utilities ?? false },\n cssConfig: { placement: opts.cssConfigPlacement ?? \"auto\" },\n };\n};\n\nconst validateConfig = (raw: unknown, file: string): ComponentsConfig => {\n if (!raw || typeof raw !== \"object\") {\n throw new ConfigError(\n \"E_CONFIG_INVALID\",\n `${file} is not a JSON object.`,\n );\n }\n const c = raw as Partial<ComponentsConfig>;\n const must = (cond: unknown, msg: string) => {\n if (!cond) throw new ConfigError(\"E_CONFIG_INVALID\", `${file}: ${msg}`);\n };\n\n must(typeof c.template === \"string\", `\"template\" must be a string.`);\n must(\n SUPPORTED_TEMPLATES.includes(c.template as FrameworkTemplate),\n `\"template\" must be one of: ${SUPPORTED_TEMPLATES.join(\", \")} (got \"${c.template}\").`,\n );\n must(typeof c.srcDir === \"string\" && c.srcDir.length > 0, `\"srcDir\" must be a non-empty string.`);\n must(isSafeRelativePath(c.srcDir!), `\"srcDir\" must be a relative path inside the project.`);\n must(typeof c.alias === \"string\" && c.alias.length > 0, `\"alias\" must be a non-empty string.`);\n must(c.paths && typeof c.paths === \"object\", `\"paths\" must be an object.`);\n const ps = c.paths as Partial<ComponentsConfig[\"paths\"]>;\n for (const k of [\"styles\", \"components\", \"hooks\", \"lib\"] as const) {\n must(typeof ps[k] === \"string\" && (ps[k] as string).length > 0, `\"paths.${k}\" must be a non-empty string.`);\n must(isSafeRelativePath(ps[k] as string), `\"paths.${k}\" must be a relative path inside \"srcDir\".`);\n }\n must(c.cssModules && typeof c.cssModules === \"object\", `\"cssModules\" must be an object.`);\n must(typeof c.cssModules!.pretty === \"boolean\", `\"cssModules.pretty\" must be a boolean.`);\n must(c.utilities && typeof c.utilities === \"object\", `\"utilities\" must be an object.`);\n must(typeof c.utilities!.enabled === \"boolean\", `\"utilities.enabled\" must be a boolean.`);\n\n if (c.cssConfig !== undefined) {\n must(c.cssConfig && typeof c.cssConfig === \"object\", `\"cssConfig\" must be an object.`);\n must(\n CSS_CONFIG_PLACEMENTS.includes(c.cssConfig.placement as CssConfigPlacement),\n `\"cssConfig.placement\" must be one of: ${CSS_CONFIG_PLACEMENTS.join(\", \")} (got \"${String(c.cssConfig.placement)}\").`,\n );\n }\n\n return {\n $schema: c.$schema ?? CONFIG_SCHEMA_URL,\n template: c.template as FrameworkTemplate,\n srcDir: c.srcDir!,\n alias: c.alias!,\n theme: normalizeTheme(c.theme),\n paths: ps as ComponentsConfig[\"paths\"],\n cssModules: { pretty: c.cssModules!.pretty! },\n utilities: { enabled: c.utilities!.enabled! },\n cssConfig: {\n placement:\n (c.cssConfig?.placement as CssConfigPlacement | undefined) ?? \"auto\",\n },\n };\n};\n","import type { RegistryUnit } from \"./registry.js\";\n\ninterface UnitOption {\n value: string;\n label: string;\n hint: string;\n}\n\nconst BUCKETS: Array<{ label: string; predicate: (u: RegistryUnit) => boolean }> = [\n { label: \"ui\", predicate: (u) => u.kind === \"component\" && u.group === \"ui\" },\n { label: \"primitive\", predicate: (u) => u.kind === \"component\" && u.group === \"primitives\" },\n { label: \"hook\", predicate: (u) => u.kind === \"hook\" },\n { label: \"lib\", predicate: (u) => u.kind === \"lib\" },\n];\n\n/**\n * Build the option list shown by interactive multi-select prompts in\n * `init` and `add`. Units are grouped by kind/group so the picker reads\n * top-down: UI components → primitives → hooks → libs.\n */\nexport const groupedUnitOptions = (units: RegistryUnit[]): UnitOption[] =>\n BUCKETS.flatMap(({ label, predicate }) =>\n units.filter(predicate).map((u) => ({\n value: u.name,\n label: u.name,\n hint: `${label}${u.deps.length ? ` · deps: ${u.deps.join(\", \")}` : \"\"}`,\n })),\n );\n","import { spawn } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { ComponentsConfig } from \"./config.js\";\nimport type { ProjectInfo } from \"./detect.js\";\nimport type { InstallMeta, RegistryUnit } from \"./registry.js\";\n\nexport const PACKAGE_MANAGERS = [\"npm\", \"pnpm\", \"yarn\", \"bun\"] as const;\nexport type PackageManager = (typeof PACKAGE_MANAGERS)[number];\n\n/**\n * Detect the consumer's package manager. Priority:\n * 1. Explicit `packageManager` field in their package.json (Corepack).\n * 2. Lockfile present at cwd - pnpm > yarn > bun > npm.\n * 3. Fallback to npm.\n */\nexport const detectPackageManager = (cwd: string): PackageManager => {\n const pkgJsonPath = join(cwd, \"package.json\");\n if (existsSync(pkgJsonPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgJsonPath, \"utf8\")) as {\n packageManager?: string;\n };\n if (typeof pkg.packageManager === \"string\") {\n const name = pkg.packageManager.split(\"@\")[0].trim();\n if ((PACKAGE_MANAGERS as readonly string[]).includes(name)) {\n return name as PackageManager;\n }\n }\n } catch {\n // ignore - fall back to lockfile detection\n }\n }\n\n if (existsSync(join(cwd, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (existsSync(join(cwd, \"yarn.lock\"))) return \"yarn\";\n if (existsSync(join(cwd, \"bun.lockb\"))) return \"bun\";\n if (existsSync(join(cwd, \"bun.lock\"))) return \"bun\";\n if (existsSync(join(cwd, \"package-lock.json\"))) return \"npm\";\n return \"npm\";\n};\n\n/**\n * Dependency plan computed from the user's selection + what is already in\n * their package.json. `skipped` lists packages that are already declared\n * (any version) so the CLI can surface \"kept foo@^1.2.3\" to the user.\n */\nexport interface DependencyPlan {\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n skipped: { name: string; reason: \"already-declared\" }[];\n}\n\nexport interface ComputePlanInput {\n registry: { installMeta: InstallMeta };\n units: RegistryUnit[];\n cfg: ComponentsConfig;\n project: ProjectInfo;\n}\n\n/**\n * Compute the runtime/dev install plan for the given selection of units.\n * Filters out packages the consumer already declares (any version) so we\n * never clobber a pinned dependency.\n */\nexport const computeDependencyPlan = (\n input: ComputePlanInput,\n): DependencyPlan => {\n const { registry, units, cfg, project } = input;\n const meta = registry.installMeta;\n\n const dependencies: Record<string, string> = { ...meta.baseDependencies };\n const devDependencies: Record<string, string> = { ...meta.baseDevDependencies };\n if (cfg.utilities.enabled) {\n Object.assign(devDependencies, meta.utilitiesDevDependencies);\n }\n\n for (const unit of units) {\n for (const pkg of unit.externalDeps) {\n if (pkg in dependencies) continue;\n const version = meta.packageVersions[pkg];\n if (!version) continue; // silently skip unknown - builder should have caught it\n dependencies[pkg] = version;\n }\n }\n\n const skipped: DependencyPlan[\"skipped\"] = [];\n const filter = (bag: Record<string, string>) => {\n for (const name of Object.keys(bag)) {\n if (project.declaredDeps.has(name)) {\n skipped.push({ name, reason: \"already-declared\" });\n delete bag[name];\n }\n }\n };\n filter(dependencies);\n filter(devDependencies);\n\n return { dependencies, devDependencies, skipped };\n};\n\n/**\n * Shape the dep plan into the argv each package manager expects. The\n * returned command is always safe to spawn with argv spreading (no shell).\n */\nexport const buildInstallCommands = (\n pm: PackageManager,\n plan: DependencyPlan,\n): { bin: string; args: string[]; label: string }[] => {\n const commands: { bin: string; args: string[]; label: string }[] = [];\n\n const runtimeSpecs = Object.entries(plan.dependencies).map(\n ([name, v]) => `${name}@${v}`,\n );\n const devSpecs = Object.entries(plan.devDependencies).map(\n ([name, v]) => `${name}@${v}`,\n );\n\n const runtimeArgs = installArgs(pm, runtimeSpecs, false);\n const devArgs = installArgs(pm, devSpecs, true);\n\n if (runtimeSpecs.length > 0) {\n commands.push({\n bin: pm,\n args: runtimeArgs,\n label: `${pm} ${runtimeArgs.join(\" \")}`,\n });\n }\n if (devSpecs.length > 0) {\n commands.push({\n bin: pm,\n args: devArgs,\n label: `${pm} ${devArgs.join(\" \")}`,\n });\n }\n return commands;\n};\n\nconst installArgs = (\n pm: PackageManager,\n specs: string[],\n dev: boolean,\n): string[] => {\n switch (pm) {\n case \"npm\":\n return [\n \"install\",\n dev ? \"--save-dev\" : \"--save\",\n \"--no-fund\",\n \"--no-audit\",\n ...specs,\n ];\n case \"pnpm\":\n return [\"add\", dev ? \"--save-dev\" : \"\", ...specs].filter(Boolean);\n case \"yarn\":\n return [\"add\", dev ? \"--dev\" : \"\", ...specs].filter(Boolean);\n case \"bun\":\n return [\"add\", dev ? \"--dev\" : \"\", ...specs].filter(Boolean);\n }\n};\n\nexport interface RunInstallOptions {\n cwd: string;\n /** Extra env passed to the package-manager child. */\n env?: NodeJS.ProcessEnv;\n /** Called with each command before execution; return false to skip it. */\n onCommand?: (cmd: { bin: string; args: string[]; label: string }) => void;\n}\n\n/**\n * Execute an install plan. Runs each command sequentially so errors surface\n * immediately, and streams stdout/stderr straight to the parent process so\n * the user sees normal package-manager output.\n */\nexport const runInstall = async (\n commands: { bin: string; args: string[]; label: string }[],\n opts: RunInstallOptions,\n): Promise<void> => {\n for (const cmd of commands) {\n opts.onCommand?.(cmd);\n await new Promise<void>((resolve, reject) => {\n const child = spawn(cmd.bin, cmd.args, {\n cwd: opts.cwd,\n stdio: \"inherit\",\n env: { ...process.env, ...opts.env },\n shell: process.platform === \"win32\",\n });\n child.on(\"error\", reject);\n child.on(\"close\", (code) => {\n if (code === 0) resolve();\n else\n reject(\n new Error(\n `${cmd.label} exited with code ${code ?? \"null\"}. Aborting install.`,\n ),\n );\n });\n });\n }\n};\n\n/**\n * Format a dependency plan for human display: three sections that line up\n * and are safe to print from inside a clack `note(...)` box.\n */\nexport const describePlan = (plan: DependencyPlan): string => {\n const lines: string[] = [];\n const rows = (bag: Record<string, string>) =>\n Object.entries(bag)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([name, v]) => ` ${name} ${v}`);\n\n if (Object.keys(plan.dependencies).length) {\n lines.push(\"dependencies:\");\n lines.push(...rows(plan.dependencies));\n }\n if (Object.keys(plan.devDependencies).length) {\n if (lines.length) lines.push(\"\");\n lines.push(\"devDependencies:\");\n lines.push(...rows(plan.devDependencies));\n }\n if (plan.skipped.length) {\n if (lines.length) lines.push(\"\");\n lines.push(\"already declared (kept as-is):\");\n lines.push(...plan.skipped.map((s) => ` ${s.name}`));\n }\n if (!lines.length) lines.push(\"nothing to install - all deps already declared.\");\n return lines.join(\"\\n\");\n};\n","import type { ComponentsConfig } from \"./config.js\";\nimport type { RegistryUnit } from \"./registry.js\";\n\nexport interface UnitHintInput {\n cfg: ComponentsConfig;\n units: RegistryUnit[];\n}\n\nconst importPath = (cfg: ComponentsConfig, path: string): string =>\n `${cfg.alias}/${path}`.replace(/\\/+/g, \"/\");\n\nexport const getUnitHints = ({ cfg, units }: UnitHintInput): string[] => {\n const selected = new Set(units.map((unit) => unit.name));\n const hints: string[] = [];\n\n if (selected.has(\"toast\")) {\n const toastImport = importPath(\n cfg,\n `${cfg.paths.components}/ui/toast/toast`,\n );\n hints.push(\n [\n \"Toast needs one app-level Toaster mount before toast calls render.\",\n `import { Toaster } from \"${toastImport}\";`,\n cfg.template === \"next\"\n ? \"For Next.js, place it in a small Client Component such as app/providers.tsx.\"\n : \"Place it once near your app root.\",\n ].join(\"\\n\"),\n );\n }\n\n if (\n cfg.template === \"next\" &&\n units.some((unit) => (unit.clientFiles?.length ?? 0) > 0)\n ) {\n hints.push(\n 'Next.js output adds \"use client\" only to files that need client runtime APIs.',\n );\n }\n\n return hints;\n};\n","import pc from \"picocolors\";\nimport { applyFileOps, type ConflictMode, type FileOp } from \"../lib/fs-ops.js\";\nimport { planComponentOps } from \"../lib/components.js\";\nimport { planUtilitiesGitignoreOp } from \"../lib/styles.js\";\nimport { loadConfig, resolvePaths } from \"../lib/config.js\";\nimport { loadRegistry, resolveUnits, type RegistryUnit } from \"../lib/registry.js\";\nimport { groupedUnitOptions } from \"../lib/units.js\";\nimport {\n headline,\n goodbye,\n confirm,\n multiselect,\n note,\n step,\n} from \"../lib/ui.js\";\nimport { logger } from \"../lib/logger.js\";\nimport { detectProject } from \"../lib/detect.js\";\nimport {\n buildInstallCommands,\n describePlan,\n detectPackageManager,\n runInstall,\n type PackageManager,\n} from \"../lib/installer.js\";\nimport { getUnitHints } from \"../lib/unit-hints.js\";\n\nexport interface AddCommandOptions {\n cwd: string;\n names: string[];\n yes?: boolean;\n force?: boolean;\n dryRun?: boolean;\n all?: boolean;\n /** Auto-install runtime dependencies for the added units. Defaults to true. */\n install?: boolean;\n /** Force a specific package manager instead of auto-detecting. */\n packageManager?: PackageManager;\n}\n\nconst resolveConflictMode = (opts: AddCommandOptions): ConflictMode => {\n if (opts.dryRun) return \"dry-run\";\n if (opts.force) return \"force\";\n return \"prompt\";\n};\n\nexport const runAdd = async (opts: AddCommandOptions): Promise<void> => {\n headline(\"Add components/hooks/utilities from the registry.\");\n\n const cfg = loadConfig(opts.cwd);\n const paths = resolvePaths(opts.cwd, cfg);\n const registry = loadRegistry();\n\n let names = opts.names;\n if (opts.all) names = registry.units.map((u) => u.name);\n\n if (names.length === 0) {\n if (opts.yes) {\n goodbye(\"Nothing to add. Pass unit names, --all, or run without --yes for interactive mode.\");\n return;\n }\n names = await pickUnits(registry.units);\n if (names.length === 0) {\n goodbye(\"Nothing selected.\");\n return;\n }\n }\n\n const units = resolveUnits(registry, names);\n const depsAdded = units.filter((u) => !names.includes(u.name));\n\n if (depsAdded.length > 0) {\n note(\n depsAdded.map((u) => `${pc.dim(\"+\")} ${u.name} ${pc.dim(\"(dep)\")}`).join(\"\\n\"),\n `transitive dependencies (${depsAdded.length})`,\n );\n }\n\n const ops: FileOp[] = planComponentOps({\n registry,\n targetSrcDir: paths.srcDir,\n units,\n paths: cfg.paths,\n template: cfg.template,\n });\n\n // Idempotent safety net: if token utilities are opted in (whether `add`\n // is the first run on an older project, or the user flipped the flag\n // by hand), ensure the generated-file gitignore is present. A matching\n // file is detected as `unchanged` by the plan and produces no noise.\n if (cfg.utilities.enabled) {\n ops.push(planUtilitiesGitignoreOp({ targetStylesDir: paths.stylesDir }));\n }\n\n step(`Writing ${units.length} unit${units.length === 1 ? \"\" : \"s\"} (${ops.length} file${ops.length === 1 ? \"\" : \"s\"})…`);\n const result = await applyFileOps(ops, {\n cwd: opts.cwd,\n mode: resolveConflictMode(opts),\n });\n\n const summary = `${result.written} written · ${result.skipped} skipped · ${result.unchanged} unchanged`;\n\n // ── runtime deps for the newly-added units ────────────────────────────────\n const project = detectProject(opts.cwd);\n const plan = computeRuntimePlan(registry, units, project);\n const pm = opts.packageManager ?? detectPackageManager(opts.cwd);\n const installCommands = buildInstallCommands(pm, plan);\n const hasWork = installCommands.length > 0;\n\n if (opts.dryRun) {\n note(summary, \"dry run\");\n if (hasWork) {\n note(\n [\n describePlan(plan),\n \"\",\n `would run with ${pm}:`,\n ...installCommands.map((c) => ` ${c.label}`),\n ].join(\"\\n\"),\n \"dry run · install\",\n );\n }\n goodbye(\"Preview only - no files were touched.\");\n return;\n }\n\n let willInstall: boolean;\n if (!hasWork) {\n willInstall = false;\n } else if (opts.install === false) {\n willInstall = false;\n } else if (opts.install === true || opts.yes) {\n willInstall = true;\n } else {\n note(describePlan(plan), `install with ${pm}`);\n willInstall = await confirm({\n message: `Run ${pm} now to install the dependencies above?`,\n initialValue: true,\n });\n }\n\n if (willInstall) {\n step(`Installing dependencies with ${pm}…`);\n await runInstall(installCommands, {\n cwd: opts.cwd,\n onCommand: (cmd) => logger.action(`$ ${cmd.label}`),\n });\n } else if (hasWork) {\n note(\n [\n describePlan(plan),\n \"\",\n \"run:\",\n ...installCommands.map((c) => ` ${c.label}`),\n ].join(\"\\n\"),\n \"manual install (skipped)\",\n );\n }\n\n const unitHints = getUnitHints({ cfg, units });\n if (unitHints.length > 0) {\n note(unitHints.join(\"\\n\\n\"), \"usage hints\");\n }\n\n logger.info(summary);\n goodbye(`Added ${units.length} unit${units.length === 1 ? \"\" : \"s\"}.`);\n};\n\n/**\n * `add` only installs runtime deps for the new units - the PostCSS chain is\n * `init`'s responsibility. We still reuse `computeDependencyPlan`'s\n * already-declared filter so a consumer who pinned `clsx` keeps that pin.\n */\nconst computeRuntimePlan = (\n registry: ReturnType<typeof loadRegistry>,\n units: RegistryUnit[],\n project: ReturnType<typeof detectProject>,\n) => {\n const dependencies: Record<string, string> = {};\n const skipped: { name: string; reason: \"already-declared\" }[] = [];\n const meta = registry.installMeta;\n for (const unit of units) {\n for (const pkg of unit.externalDeps) {\n const version = meta.packageVersions[pkg];\n if (!version) continue;\n if (project.declaredDeps.has(pkg)) {\n if (!skipped.some((entry) => entry.name === pkg)) {\n skipped.push({ name: pkg, reason: \"already-declared\" });\n }\n continue;\n }\n dependencies[pkg] = version;\n }\n }\n return { dependencies, devDependencies: {}, skipped };\n};\n\nconst pickUnits = async (all: RegistryUnit[]): Promise<string[]> =>\n multiselect({\n message: `Select units to add ${pc.dim(\"(space to toggle, enter to confirm)\")}`,\n options: groupedUnitOptions(all),\n required: false,\n });\n","import pc from \"picocolors\";\nimport {\n loadRegistry,\n type RegistryUnit,\n type ThemeDescriptor,\n} from \"../lib/registry.js\";\nimport { headline, goodbye, note } from \"../lib/ui.js\";\n\nexport interface ListCommandOptions {\n cwd: string;\n json?: boolean;\n}\n\nexport const runList = (opts: ListCommandOptions): void => {\n const registry = loadRegistry();\n\n if (opts.json) {\n process.stdout.write(JSON.stringify(registry, null, 2) + \"\\n\");\n return;\n }\n\n const colorCount = registry.themes.colors.length;\n const radiusCount = registry.themes.radii.length;\n const spacingCount = registry.themes.spacing.length;\n headline(\n `${registry.units.length} units · ${colorCount} colors · ${radiusCount} radii · ${spacingCount} spacing`,\n );\n\n const ui = registry.units.filter((u) => u.kind === \"component\" && u.group === \"ui\");\n const primitives = registry.units.filter((u) => u.kind === \"component\" && u.group === \"primitives\");\n const hooks = registry.units.filter((u) => u.kind === \"hook\");\n const libs = registry.units.filter((u) => u.kind === \"lib\");\n\n const renderBucket = (title: string, units: RegistryUnit[]) => {\n if (units.length === 0) return null;\n const body = units\n .map((u) => {\n const deps = u.deps.length ? pc.dim(` deps: ${u.deps.join(\", \")}`) : \"\";\n return ` ${pc.cyan(u.name.padEnd(22))}${deps}`;\n })\n .join(\"\\n\");\n return `${pc.bold(title)} ${pc.dim(`(${units.length})`)}\\n${body}`;\n };\n\n const blocks = [\n renderBucket(\"UI components\", ui),\n renderBucket(\"Primitives\", primitives),\n renderBucket(\"Hooks\", hooks),\n renderBucket(\"Utilities\", libs),\n ].filter(Boolean) as string[];\n\n note(blocks.join(\"\\n\\n\"), \"registry\");\n\n const renderVariants = (title: string, variants: ThemeDescriptor[]) => {\n if (variants.length === 0) return;\n const body = variants\n .map((t) => ` ${pc.cyan(t.id.padEnd(12))}${pc.dim(t.description)}`)\n .join(\"\\n\");\n note(body, title);\n };\n\n renderVariants(\"colors\", registry.themes.colors);\n renderVariants(\"radii\", registry.themes.radii);\n renderVariants(\"spacing\", registry.themes.spacing);\n\n goodbye(`Use ${pc.cyan(\"aplance-ui add <name>\")} to install anything above.`);\n};\n"],"mappings":";AAAA,SAAS,QAAAA,OAAM,YAAAC,iBAAgB;AAC/B,OAAOC,SAAQ;;;ACDf,SAAS,YAAY,WAAW,cAAc,qBAAqB;AACnE,SAAS,SAAS,gBAAgB;AAClC,OAAOC,SAAQ;AACf,YAAYC,QAAO;;;ACQZ,IAAM,WAAN,cAAuB,MAAM;AAAA,EAClC;AAAA,EACA;AAAA,EAEA,YAAY,MAAoB,SAAiB,MAAe;AAC9D,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,cAAN,cAA0B,SAAS;AAAA,EACxC,YACE,MACA,SACA,MACA;AACA,UAAM,MAAM,SAAS,IAAI;AACzB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gBAAN,cAA4B,SAAS;AAAA,EAC1C,YACE,MACA,SACA,MACA;AACA,UAAM,MAAM,SAAS,IAAI;AACzB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gBAAN,cAA4B,SAAS;AAAA,EAC1C,YACE,MACA,SACA,MACA;AACA,UAAM,MAAM,SAAS,IAAI;AACzB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,aAAN,cAAyB,SAAS;AAAA,EACvC,YAAY,UAAU,oBAAoB;AACxC,UAAM,aAAa,OAAO;AAC1B,SAAK,OAAO;AAAA,EACd;AACF;;;AC7DA,OAAO,QAAQ;AASf,IAAM,SAAS,CAAC,GAAW,UACzB,EACG,MAAM,IAAI,EACV,IAAI,CAAC,SAAS,KAAK,OAAO,KAAK,IAAI,IAAI,EACvC,KAAK,IAAI;AAEP,IAAM,SAAS;AAAA,EACpB,IAAI,CAAC,KAAa,QAAQ,MACxB,QAAQ,IAAI,OAAO,GAAG,GAAG,MAAM,QAAG,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC;AAAA,EACtD,MAAM,CAAC,KAAa,QAAQ,MAC1B,QAAQ,IAAI,OAAO,GAAG,GAAG,KAAK,QAAG,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC;AAAA,EACrD,QAAQ,CAAC,KAAa,QAAQ,MAC5B,QAAQ,IAAI,OAAO,GAAG,GAAG,KAAK,QAAG,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC;AAAA,EACrD,MAAM,CAAC,KAAa,QAAQ,MAC1B,QAAQ,IAAI,OAAO,GAAG,GAAG,OAAO,QAAG,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC;AAAA,EACvD,OAAO,CAAC,KAAa,QAAQ,MAC3B,QAAQ,MAAM,OAAO,GAAG,GAAG,IAAI,QAAG,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC;AAAA,EACtD,KAAK,CAAC,QAAgB,GAAG,IAAI,GAAG;AAClC;;;AC3BA,YAAY,OAAO;AACnB,OAAOC,SAAQ;AAIR,IAAM,SAAS,CAAI,UAAyB;AACjD,MAAM,WAAS,KAAK,EAAG,OAAM,IAAI,WAAW;AAC5C,SAAO;AACT;AAEA,IAAM,QAAQ,MAAM;AAClB,QAAM,UAAU,CAACC,IAAG,SAASA,IAAG,MAAMA,IAAG,IAAI;AAC7C,QAAM,WAAW,aACd,MAAM,EAAE,EACR,IAAI,CAAC,IAAI,MAAM,QAAQ,IAAI,QAAQ,MAAM,EAAE,EAAE,CAAC,EAC9C,KAAK,EAAE;AACV,SAAO,GAAG,QAAQ,IAAIA,IAAG,IAAI,MAAG,CAAC,IAAIA,IAAG,IAAI,0BAA0B,CAAC;AACzE;AAEO,IAAM,WAAW,CAAC,aAAsB;AAC7C,EAAE,QAAM,MAAM,CAAC;AACf,MAAI,SAAU,CAAE,MAAI,QAAQA,IAAG,IAAI,QAAQ,CAAC;AAC9C;AAEO,IAAM,UAAU,CAAC,YAAsB,QAAMA,IAAG,MAAM,OAAO,CAAC;AAS9D,IAAMC,UAAS,OAAyB,SAK7C,OAAO,MAAQ,SAAO,IAAyC,CAAC;AAE3D,IAAMC,eAAc,OAAyB,SAMlD,OAAO,MAAQ,cAAY,IAA8C,CAAC;AAErE,IAAMC,WAAU,OAAO,SAGN,OAAO,MAAQ,UAAQ,IAAI,CAAC;AAE7C,IAAMC,QAAO,CAAC,MAAc,UAA2B,OAAK,MAAM,KAAK;AACvE,IAAM,OAAO,CAAC,YAA4B,MAAI,KAAK,OAAO;AAC1D,IAAM,OAAO,CAAC,YAA4B,MAAI,KAAK,OAAO;AAC1D,IAAM,OAAO,CAAC,YAA4B,MAAI,KAAK,OAAO;;;AH7BjE,IAAM,YAAY,CAAC,aAAqB;AACtC,QAAM,MAAM,QAAQ,QAAQ;AAC5B,MAAI,CAAC,WAAW,GAAG,EAAG,WAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAC1D;AAEA,IAAM,cAAc,CAAC,QAAgB,YAAsC;AACzE,MAAI,CAAC,WAAW,MAAM,EAAG,QAAO;AAChC,MAAI;AACF,QAAI,OAAO,SAAS,OAAO,GAAG;AAC5B,aAAO,aAAa,MAAM,EAAE,OAAO,OAAO;AAAA,IAC5C;AACA,WAAO,aAAa,QAAQ,MAAM,MAAM;AAAA,EAC1C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAIA,IAAM,cAAc,OAClB,KACA,SACwB;AACxB,QAAM,OAAmB,CAAC;AAC1B,MAAI,OAAkC;AAEtC,aAAW,MAAM,KAAK;AACpB,QAAI,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG;AACtC,WAAK,KAAK,EAAE,IAAI,QAAQ,YAAY,CAAC;AACrC;AAAA,IACF;AACA,QAAI,CAAC,WAAW,GAAG,MAAM,GAAG;AAC1B,WAAK,KAAK,EAAE,IAAI,QAAQ,QAAQ,CAAC;AACjC;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,SAAS;AACzB,WAAK,KAAK,EAAE,IAAI,QAAQ,QAAQ,CAAC;AACjC;AAAA,IACF;AACA,QAAI,KAAK,SAAS,QAAQ;AACxB,WAAK,KAAK,EAAE,IAAI,QAAQ,OAAO,CAAC;AAChC;AAAA,IACF;AACA,QAAI,KAAK,SAAS,WAAW;AAC3B,WAAK,KAAK,EAAE,IAAI,QAAQ,QAAQ,CAAC;AACjC;AAAA,IACF;AAEA,QAAI,SAAS,OAAO;AAClB,WAAK,KAAK,EAAE,IAAI,QAAQ,QAAQ,CAAC;AACjC;AAAA,IACF;AACA,QAAI,SAAS,YAAY;AACvB,WAAK,KAAK,EAAE,IAAI,QAAQ,OAAO,CAAC;AAChC;AAAA,IACF;AAEA,UAAM,SAAS;AAAA,MACb,MAAQ,UAAO;AAAA,QACb,SAAS,GAAGC,IAAG,OAAO,QAAQ,CAAC,KAAK,GAAG,KAAK;AAAA,QAC5C,SAAS;AAAA,UACP,EAAE,OAAO,aAAa,OAAO,YAAY;AAAA,UACzC,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,UAC/B,EAAE,OAAO,OAAO,OAAO,0BAA0B;AAAA,UACjD,EAAE,OAAO,YAAY,OAAO,qBAAqB;AAAA,UACjD,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,QACnC;AAAA,QACA,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AAEA,QAAI,WAAW,QAAS,OAAM,IAAI,WAAW;AAC7C,QAAI,WAAW,OAAO;AACpB,aAAO;AACP,WAAK,KAAK,EAAE,IAAI,QAAQ,QAAQ,CAAC;AAAA,IACnC,WAAW,WAAW,YAAY;AAChC,aAAO;AACP,WAAK,KAAK,EAAE,IAAI,QAAQ,OAAO,CAAC;AAAA,IAClC,OAAO;AACL,WAAK,KAAK,EAAE,IAAI,QAAQ,WAAW,cAAc,UAAU,OAAO,CAAC;AAAA,IACrE;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,eAAe,OAC1B,KACA,SACyB;AACzB,QAAM,OAAO,MAAM,YAAY,KAAK,IAAI;AAExC,MAAI,KAAK,SAAS,WAAW;AAC3B,eAAW,EAAE,IAAI,OAAO,KAAK,MAAM;AACjC,YAAM,MAAM,SAAS,KAAK,KAAK,GAAG,MAAM;AACxC,UAAI,WAAW,QAAS,QAAO,OAAO,gBAAgB,GAAG,EAAE;AAAA,eAClD,WAAW,OAAQ,QAAO,OAAO,gBAAgB,GAAG,EAAE;AAAA,UAC1D,QAAO,OAAO,gBAAgB,OAAO,IAAI,GAAG,CAAC,EAAE;AAAA,IACtD;AACA,WAAO;AAAA,MACL,SAAS,KAAK,OAAO,CAAC,MAAM,EAAE,WAAW,OAAO,EAAE;AAAA,MAClD,SAAS,KAAK,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,EAAE;AAAA,MACjD,WAAW,KAAK,OAAO,CAAC,MAAM,EAAE,WAAW,WAAW,EAAE;AAAA,IAC1D;AAAA,EACF;AAEA,MAAI,UAAU;AACd,MAAI,UAAU;AACd,MAAI,YAAY;AAEhB,aAAW,EAAE,IAAI,OAAO,KAAK,MAAM;AACjC,UAAM,MAAM,SAAS,KAAK,KAAK,GAAG,MAAM;AACxC,QAAI,WAAW,SAAS;AACtB,UAAI;AACF,kBAAU,GAAG,MAAM;AACnB,sBAAc,GAAG,QAAQ,GAAG,OAAO;AAAA,MACrC,SAAS,KAAK;AACZ,cAAM,QAAQ,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC7D,cAAM,IAAI;AAAA,UACR,mBAAmB,GAAG,KAAK,KAAK;AAAA,EAC3B,OAAO;AAAA,QAGd;AAAA,MACF;AACA,aAAO,GAAG,UAAU,GAAG,EAAE;AACzB;AAAA,IACF,WAAW,WAAW,QAAQ;AAC5B,aAAO,OAAO,UAAU,OAAO,IAAI,GAAG,CAAC,EAAE;AACzC;AAAA,IACF,OAAO;AACL;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,SAAS,UAAU;AACvC;;;AIpKA,SAAS,aAAa,gBAAAC,eAAc,UAAU,cAAAC,mBAAkB;AAChE,SAAS,QAAAC,OAAM,YAAAC,WAAU,KAAK,aAAa;;;ACD3C,SAAS,cAAAC,aAAY,gBAAAC,qBAAoB;AACzC,SAAS,WAAAC,UAAS,YAAY;AAC9B,SAAS,qBAAqB;AAU9B,IAAM,sBAAsB,MAAc;AACxC,QAAM,OAAOC,SAAQ,cAAc,YAAY,GAAG,CAAC;AACnD,aAAW,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG;AAChC,UAAM,YAAY,KAAK,MAAM,GAAG,MAAM,KAAK,EAAE,KAAK,IAAI,GAAG,UAAU;AACnE,QAAIC,YAAW,KAAK,WAAW,eAAe,CAAC,EAAG,QAAO;AAAA,EAC3D;AACA,QAAM,IAAI;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAyDA,IAAM,mBAAmB;AAEzB,IAAM,qBAAkC;AAAA,EACtC,kBAAkB,CAAC;AAAA,EACnB,qBAAqB,CAAC;AAAA,EACtB,0BAA0B,CAAC;AAAA,EAC3B,iBAAiB,CAAC;AACpB;AAEO,IAAM,eAAe,MAAsB;AAChD,QAAM,OAAO,oBAAoB;AACjC,QAAM,eAAe,KAAK,MAAM,eAAe;AAC/C,QAAM,MAAMC,cAAa,cAAc,MAAM;AAC7C,QAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,MAAI,OAAO,YAAY,kBAAkB;AACvC,UAAM,IAAI;AAAA,MACR;AAAA,MACA,gCAAgC,OAAO,OAAO,8BAA8B,gBAAgB;AAAA,IAC9F;AAAA,EACF;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ,OAAO,UAAU,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,GAAG,SAAS,CAAC,EAAE;AAAA,IAC9D,aAAa,OAAO,eAAe;AAAA,IACnC;AAAA,EACF;AACF;AAEO,IAAM,eAAe,CAC1B,UACA,UACmB;AACnB,QAAM,SAAS,IAAI,IAAI,SAAS,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAE7D,aAAW,QAAQ,OAAO;AACxB,QAAI,CAAC,OAAO,IAAI,IAAI,GAAG;AACrB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,iBAAiB,IAAI;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,oBAAI,IAAY;AAChC,QAAM,SAAyB,CAAC;AAEhC,QAAM,QAAQ,CAAC,SAAiB;AAC9B,QAAI,QAAQ,IAAI,IAAI,EAAG;AACvB,YAAQ,IAAI,IAAI;AAChB,UAAM,OAAO,OAAO,IAAI,IAAI;AAC5B,QAAI,CAAC,KAAM;AACX,eAAW,OAAO,KAAK,KAAM,OAAM,GAAG;AACtC,WAAO,KAAK,IAAI;AAAA,EAClB;AAEA,aAAW,QAAQ,MAAO,OAAM,IAAI;AACpC,SAAO;AACT;AAEO,IAAM,kBAAkB,CAAC,aAC9B,aAAa,UAAU,SAAS,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAE1D,IAAM,cAAc,CAClB,MACA,IACA,mBACoB;AACpB,QAAM,QAAQ,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE;AAC1C,MAAI,CAAC,OAAO;AACV,UAAM,YAAY,KAAK,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,IAAI;AACjD,UAAM,IAAI;AAAA,MACR;AAAA,MACA,WAAW,cAAc,KAAK,EAAE,iBAAiB,SAAS;AAAA,IAC5D;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,YAAY,CAAC,UAA0B,OAClD,YAAY,SAAS,OAAO,QAAQ,IAAI,OAAO;AAE1C,IAAM,aAAa,CAAC,UAA0B,OACnD,YAAY,SAAS,OAAO,OAAO,IAAI,QAAQ;AAE1C,IAAM,cAAc,CAAC,UAA0B,OACpD,YAAY,SAAS,OAAO,SAAS,IAAI,SAAS;;;ADvI7C,IAAM,2BAA2B,CACtC,UACY;AAAA,EACZ,QAAQC,MAAK,KAAK,iBAAiB,YAAY;AAAA,EAC/C,SAAS;AAAA,EACT,OAAO;AACT;AAEA,IAAM,iBACJ;AAGF,IAAM,mBAAmB,CAAC,aAAa;AACvC,IAAM,oBAAoB;AAE1B,IAAM,UAAU,CAACC,OAAcA,GAAE,MAAM,GAAG,EAAE,KAAK,MAAM,GAAG;AAE1D,IAAM,aAAa,CAAC,KAAa,SAA2B;AAC1D,QAAM,MAAgB,CAAC;AACvB,aAAW,SAAS,YAAY,GAAG,GAAG;AACpC,UAAM,OAAOD,MAAK,KAAK,KAAK;AAC5B,QAAI,SAAS,IAAI,EAAE,YAAY,GAAG;AAChC,UAAI,KAAK,GAAG,WAAW,MAAM,IAAI,CAAC;AAAA,IACpC,OAAO;AACL,YAAM,MAAM,QAAQE,UAAS,MAAM,IAAI,CAAC;AACxC,UAAI,iBAAiB,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAG;AACjD,UAAI,KAAK,GAAG;AAAA,IACd;AAAA,EACF;AACA,SAAO;AACT;AAQA,IAAM,eAAe,CACnB,UACA,OACA,SACyB;AACzB,MAAI,CAAC,MAAM,KAAM,QAAO;AACxB,QAAM,MAAMF,MAAK,SAAS,MAAM,MAAM,IAAI;AAC1C,MAAI,CAACG,YAAW,GAAG,EAAG,QAAO;AAC7B,SAAO,EAAE,IAAI,MAAM,IAAI,MAAM,KAAKC,cAAa,KAAK,MAAM,EAAE;AAC9D;AAEO,IAAM,gBAAgB,CAAC,SAAkC;AAC9D,QAAM,kBAAkBJ,MAAK,KAAK,SAAS,MAAM,QAAQ;AACzD,QAAM,WAAW,WAAW,iBAAiB,eAAe;AAE5D,QAAM,YAA6B,CAAC;AACpC,QAAM,gBAAgB;AAAA,IACpB,KAAK;AAAA,IACL,UAAU,KAAK,UAAU,KAAK,KAAK;AAAA,IACnC;AAAA,EACF;AACA,MAAI,cAAe,WAAU,KAAK,aAAa;AAC/C,QAAM,iBAAiB;AAAA,IACrB,KAAK;AAAA,IACL,WAAW,KAAK,UAAU,KAAK,MAAM;AAAA,IACrC;AAAA,EACF;AACA,MAAI,eAAgB,WAAU,KAAK,cAAc;AACjD,QAAM,kBAAkB;AAAA,IACtB,KAAK;AAAA,IACL,YAAY,KAAK,UAAU,KAAK,OAAO;AAAA,IACvC;AAAA,EACF;AACA,MAAI,gBAAiB,WAAU,KAAK,eAAe;AAEnD,SAAO,SAAS,IAAI,CAAC,YAAY;AAC/B,UAAM,YAAYA,MAAK,iBAAiB,OAAO;AAC/C,UAAM,YAAYA,MAAK,KAAK,iBAAiB,OAAO;AACpD,UAAM,QAAQ,YAAY;AAC1B,UAAM,UAA2B,kBAAkB,KAAK,SAAS,IAC7DI,cAAa,SAAS,IACtB,SAAS,UAAU,SAAS,IAC1B,eAAeA,cAAa,WAAW,MAAM,GAAG,SAAS,IACzDA,cAAa,WAAW,MAAM;AACpC,WAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA,OAAO,UAAU,OAAO;AAAA,IAC1B;AAAA,EACF,CAAC;AACH;AAOA,IAAM,cAAc,CAAC,MAAsB,EAAE,QAAQ,uBAAuB,MAAM;AASlF,IAAM,sBAAsB,CAAC,QAAiC;AAC5D,QAAM,WAAW,IAAI,QAAQ,qBAAqB,EAAE;AACpD,QAAM,SAA0B,CAAC;AACjC,QAAM,UAAU;AAChB,MAAI;AACJ,UAAQ,IAAI,QAAQ,KAAK,QAAQ,OAAO,MAAM;AAC5C,UAAM,WAAW,EAAE,CAAC,EAAE,KAAK;AAC3B,QAAI,CAAC,SAAU;AACf,UAAM,OAAgC,CAAC;AACvC,UAAM,QAAQ;AACd,QAAI;AACJ,YAAQ,KAAK,MAAM,KAAK,EAAE,CAAC,CAAC,OAAO,MAAM;AACvC,WAAK,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AAAA,IACjC;AACA,QAAI,KAAK,SAAS,EAAG,QAAO,KAAK,EAAE,UAAU,KAAK,CAAC;AAAA,EACrD;AACA,SAAO;AACT;AAOA,IAAM,oBAAoB,CACxB,KACA,aACkE;AAClE,QAAM,KAAK,IAAI,OAAO,UAAU,YAAY,QAAQ,CAAC,WAAW,GAAG;AACnE,QAAM,IAAI,GAAG,KAAK,GAAG;AACrB,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,YAAY,IAAI,QAAQ,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,IAAI;AAC5D,MAAI,QAAQ;AACZ,WAAS,IAAI,WAAW,IAAI,IAAI,QAAQ,KAAK;AAC3C,UAAM,IAAI,IAAI,CAAC;AACf,QAAI,MAAM,IAAK;AAAA,aACN,MAAM,KAAK;AAClB,UAAI,UAAU,GAAG;AACf,cAAM,SAAS,IAAI,MAAM,WAAW,CAAC,EAAE,MAAM,cAAc;AAC3D,eAAO,EAAE,WAAW,SAAS,GAAG,QAAQ,SAAS,OAAO,CAAC,IAAI,KAAK;AAAA,MACpE;AACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AASA,IAAM,iBAAiB,CAAC,MAAc,cAAuC;AAC3E,MAAI,MAAM;AACV,aAAW,KAAK,WAAW;AACzB,eAAW,SAAS,oBAAoB,EAAE,GAAG,GAAG;AAC9C,YAAM,WAAW,KAAK,KAAK;AAAA,IAC7B;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,aAAa,CAAC,MAAc,UAAiC;AACjE,QAAM,MAAM,kBAAkB,MAAM,MAAM,QAAQ;AAClD,MAAI,CAAC,KAAK;AACR,UAAM,QAAQ;AAAA,MACZ,GAAG,MAAM,QAAQ;AAAA,MACjB,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG;AAAA,MAC7C;AAAA,IACF;AACA,WAAO,GAAG,KAAK,QAAQ,QAAQ,EAAE,CAAC;AAAA;AAAA,EAAO,MAAM,KAAK,IAAI,CAAC;AAAA;AAAA,EAC3D;AACA,MAAI,OAAO,KAAK,MAAM,IAAI,WAAW,IAAI,OAAO;AAChD,aAAW,CAAC,MAAM,KAAK,KAAK,MAAM,MAAM;AACtC,UAAM,QAAQ,IAAI,OAAO,IAAI,YAAY,IAAI,CAAC,kBAAkB;AAChE,QAAI,MAAM,KAAK,IAAI,GAAG;AACpB,aAAO,KAAK,QAAQ,OAAO,KAAK,KAAK,GAAG;AAAA,IAC1C,OAAO;AACL,aAAO,KAAK,QAAQ,aAAa,GAAG,IAAI,MAAM,GAAG,IAAI,KAAK,KAAK;AAAA,GAAO;AAAA,IACxE;AAAA,EACF;AACA,SAAO,KAAK,MAAM,GAAG,IAAI,SAAS,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO;AACrE;;;AE3NA,SAAS,gBAAAC,qBAAoB;AAC7B,SAAS,QAAAC,aAAY;AAiBrB,IAAM,mBAAmB,CAAC,cAAc,SAAS,KAAK;AAGtD,IAAM,QAAQ,CACZ,SACA,UACW;AACX,QAAM,MAAM,QAAQ,QAAQ,GAAG;AAC/B,MAAI,QAAQ,GAAI,QAAO;AACvB,QAAM,OAAO,QAAQ,MAAM,GAAG,GAAG;AACjC,QAAM,OAAO,QAAQ,MAAM,MAAM,CAAC;AAClC,MAAK,iBAAuC,SAAS,IAAI,GAAG;AAC1D,UAAM,WAAW,MAAM,IAAsB;AAC7C,WAAO,GAAG,QAAQ,IAAI,IAAI;AAAA,EAC5B;AACA,SAAO;AACT;AAEA,IAAM,wBAAwB,CAAC,YAC7B,2BAA2B,KAAK,OAAO;AAEzC,IAAM,yBAAyB,CAAC,YAC9B,sBAAsB,OAAO,IAAI,UAAU;AAAA;AAAA,EAAoB,OAAO;AAEjE,IAAM,mBAAmB,CAAC,SAAsC;AACrE,QAAM,MAAgB,CAAC;AACvB,aAAW,QAAQ,KAAK,OAAO;AAC7B,UAAM,kBAAkB,IAAI,IAAI,KAAK,eAAe,CAAC,CAAC;AACtD,eAAW,WAAW,KAAK,OAAO;AAChC,YAAM,YAAYA,MAAK,KAAK,SAAS,MAAM,OAAO;AAClD,YAAM,SAAS,MAAM,SAAS,KAAK,KAAK;AACxC,YAAM,YAAYA,MAAK,KAAK,cAAc,MAAM;AAChD,YAAM,gBAAgBD,cAAa,WAAW,MAAM;AACpD,YAAM,UACJ,KAAK,aAAa,UAAU,gBAAgB,IAAI,OAAO,IACnD,uBAAuB,aAAa,IACpC;AACN,UAAI,KAAK;AAAA,QACP,QAAQ;AAAA,QACR;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;;;AC/DA,SAAS,cAAAE,aAAY,gBAAAC,qBAAoB;AACzC,SAAS,QAAAC,OAAM,YAAAC,iBAAgB;;;ACD/B,SAAS,cAAAC,aAAY,gBAAAC,qBAAoB;AACzC,SAAS,WAAAC,UAAS,QAAAC,aAAY;AAC9B,SAAS,iBAAAC,sBAAqB;AAG9B,IAAM,OAAOC,SAAQC,eAAc,YAAY,GAAG,CAAC;AAInD,IAAM,iBAAiB,MAAM;AAC3B,aAAW,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG;AAChC,UAAM,YAAYC,MAAK,MAAM,GAAG,MAAM,KAAK,EAAE,KAAK,IAAI,GAAG,YAAY;AACrE,QAAIC,YAAW,SAAS,EAAG,QAAO;AAAA,EACpC;AACA,SAAOD,MAAK,MAAM,MAAM,YAAY;AACtC,GAAG;AAIH,IAAM,SAAS,CAAC,MAAwB,QAAQ,CAAC;AAEjD,IAAM,sBAAsB,CAAC,SAAyB;AACpD,QAAME,KAAIF,MAAK,eAAe,IAAI;AAClC,MAAI,CAACC,YAAWC,EAAC,GAAG;AAClB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,uBAAuB,IAAI,eAAe,aAAa;AAAA,MACvD;AAAA,IACF;AAAA,EACF;AACA,SAAOA;AACT;AAEO,IAAM,eAAe,CAAC,SAC3BC,cAAa,oBAAoB,IAAI,GAAG,MAAM;AAEzC,IAAM,iBAAiB,CAAC,MAAc,SAA+B;AAC1E,MAAI,MAAM,aAAa,IAAI;AAI3B,QAAM,IAAI;AAAA,IACR;AAAA,IACA,CAAC,OAAO,MAAc,KAAa,SAAiB;AAClD,YAAM,OAAO,SAAS,OAAO,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC;AAClE,aAAO,OAAO,OAAO;AAAA,IACvB;AAAA,EACF;AAGA,QAAM,IAAI;AAAA,IACR;AAAA,IACA,CAAC,OAAO,QAAgB;AACtB,UAAI,EAAE,OAAO,OAAO;AAClB,cAAM,IAAI;AAAA,UACR;AAAA,UACA,YAAY,IAAI,kCAAkC,GAAG;AAAA,UACrD;AAAA,QACF;AAAA,MACF;AACA,YAAM,IAAI,KAAK,GAAG;AAClB,aAAO,MAAM,UAAa,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IACvD;AAAA,EACF;AAEA,SAAO;AACT;;;AClEA,SAAS,SAAAC,QAAO,OAAAC,YAAW;;;ACiBpB,IAAM,oBAAoB,CAC/B,SACwB;AACxB,QAAM,eAAe,CAAC,UACpB,MACG,QAAQ,OAAO,GAAG,EAClB,QAAQ,SAAS,EAAE,EACnB,QAAQ,QAAQ,EAAE,EAClB,QAAQ,QAAQ,EAAE;AAEvB,QAAM,MAAM,IAAI,UACd,KAAK,MACF,IAAI,YAAY,EAChB,OAAO,OAAO,EACd,KAAK,GAAG,EACR,QAAQ,QAAQ,GAAG,CAAC;AAEzB,QAAM,SAAS,aAAa,KAAK,MAAM;AACvC,QAAM,YAAY,aAAa,KAAK,SAAS;AAC7C,QAAM,YAAY,IAAI,QAAQ,SAAS;AACvC,QAAM,cAAc,GAAG,SAAS;AAChC,QAAM,cAAc,GAAG,SAAS;AAChC,QAAM,gBAAgB,GAAG,SAAS;AAClC,QAAM,aACJ,KAAK,qBAAqB,KAAK,kBAAkB,SAAS,IACtD,KAAK,oBACL,CAAC,OAAO,MAAM,OAAO,IAAI;AAC/B,QAAM,cAAc,IAAI,QAAQ,MAAM,MAAM,WAAW,KAAK,GAAG,CAAC,GAAG;AAEnE,QAAM,UAAoB;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,KAAK,oBAAoB;AAC3B,YAAQ,KAAK,uDAAuD;AAAA,EACtE;AAEA,QAAM,cAAwB,CAAC;AAE/B,cAAY;AAAA,IACV;AAAA,aAAmC,WAAW;AAAA;AAAA,EAChD;AAEA,MAAI,KAAK,oBAAoB;AAC3B,gBAAY;AAAA,MACV;AAAA,wBAC2B,WAAW;AAAA,wBACX,WAAW;AAAA,eACpB,WAAW;AAAA;AAAA;AAAA,aAGb,aAAa;AAAA;AAAA;AAAA,IAG/B;AAAA,EACF;AAEA,cAAY;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASF;AAEA,cAAY,KAAK,iBAAiB;AAElC,SAAO,EAAE,SAAS,YAAY;AAChC;AAEO,IAAMC,UAAS,CAAC,KAAa,QAAQ,MAAc;AACxD,QAAM,MAAM,KAAK,OAAO,KAAK;AAC7B,SAAO,IACJ,MAAM,IAAI,EACV,IAAI,CAAC,SAAU,KAAK,SAAS,MAAM,OAAO,IAAK,EAC/C,KAAK,IAAI;AACd;;;ADzFO,IAAMC,WAAU,CAACC,OAAsBA,GAAE,MAAMC,IAAG,EAAE,KAAKC,OAAM,GAAG;AAElE,IAAM,sBAAsB,CACjC,MACA,SAKA,sBAC6C;AAC7C,QAAM,QAAQ,kBAAkB;AAAA,IAC9B,oBAAoB,KAAK;AAAA,IACzB,QAAQ,QAAQ;AAAA,IAChB,WAAW,QAAQ;AAAA,IACnB,mBAAmB,QAAQ;AAAA,EAC7B,CAAC;AACD,QAAM,UAAU,MAAM,QAAQ,KAAK,IAAI;AACvC,QAAM,cAAc,MAAM,YACvB,IAAI,CAAC,QAAQC,QAAO,KAAK,iBAAiB,CAAC,EAC3C,KAAK,IAAI;AACZ,SAAO,EAAE,SAAS,YAAY;AAChC;AAEO,IAAM,oBAAoB,CAAC,YAChC,QACG,MAAM,IAAI,EACV,IAAI,CAAC,SAAS;AACb,QAAM,UAAU,KAAK,KAAK;AAC1B,QAAM,IAAI,QAAQ,MAAM,oDAAoD;AAC5E,MAAI,CAAC,EAAG,QAAO;AACf,SAAO,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;AACzC,CAAC,EACA,KAAK,IAAI;AAEP,IAAM,mBAAmB,CAAC,SAYN;AACzB,QAAM,QAAQ,kBAAkB;AAAA,IAC9B,oBAAoB,KAAK,QAAQ;AAAA,IACjC,QAAQ,KAAK,QAAQ;AAAA,IACrB,WAAW,KAAK,QAAQ;AAAA,IACxB,mBAAmB,KAAK,QAAQ;AAAA,EAClC,CAAC;AACD,QAAM,qBAAqB,MAAM,YAC9B,IAAI,CAAC,QAAQA,QAAO,KAAK,KAAK,uBAAuB,CAAC,EACtD,KAAK,IAAI;AAEZ,SAAO;AAAA,IACL,QAAQ,KAAK;AAAA,IACb,SAAS,MAAM;AAAA,IACf,aAAa,MAAM;AAAA,IACnB,eAAe;AAAA,MACb,OAAO,KAAK;AAAA,MACZ,SAAS,eAAe,KAAK,cAAc;AAAA,QACzC,SAAS,MAAM,QAAQ,KAAK,IAAI;AAAA,QAChC,aAAa;AAAA,QACb,GAAI,KAAK,qBAAqB,CAAC;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;AE3EO,IAAM,2BAA2B,CACtC,OACA,YACoB;AACpB,QAAM,QAAkC,CAAC;AACzC,QAAM,WAAwC,CAAC;AAE/C,MAAI,MAAM,cAAc,UAAU;AAChC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ,iBAAiB;AAAA,QACvB,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,cAAc;AAAA,QACd,SAAS,QAAQ;AAAA,QACjB,SAAS,MAAM;AAAA,QACf,yBAAyB;AAAA,QACzB,mBAAmB,EAAE,QAAQ,MAAM,QAAQ,qBAAqB;AAAA,MAClE,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,MAAM,kBAAkB;AAC1B,UAAM,SAAS,iBAAiB;AAAA,MAC9B,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,cAAc;AAAA,MACd,SAAS,QAAQ;AAAA,MACjB,SAAS,MAAM;AAAA,MACf,yBAAyB;AAAA,MACzB,mBAAmB,EAAE,QAAQ,MAAM,QAAQ,qBAAqB;AAAA,IAClE,CAAC;AACD,aAAS,KAAK,OAAO,aAAa;AAElC,UAAMC,MAAK,oBAAoB,MAAM,SAAS,QAAQ,WAAW,CAAC;AAClE,UAAM,KAAK;AAAA,MACT,UAAU;AAAA,MACV,SAAS,eAAe,yCAAyC;AAAA,QAC/D,SAASA,IAAG;AAAA,QACZ,aAAaA,IAAG;AAAA,MAClB,CAAC;AAAA,MACD,OAAO;AAAA,IACT,CAAC;AACD,WAAO,EAAE,OAAO,SAAS;AAAA,EAC3B;AAEA,QAAM,EAAE,SAAS,YAAY,IAAI;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR;AAAA,EACF;AACA,QAAM,KAAK;AAAA,IACT,UAAU;AAAA,IACV,SAAS,eAAe,sCAAsC;AAAA,MAC5D;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,QAAQ,QAAQ;AAAA,MAChB,QAAQ,MAAM,QAAQ;AAAA,IACxB,CAAC;AAAA,IACD,OAAO;AAAA,EACT,CAAC;AAED,SAAO,EAAE,OAAO,SAAS;AAC3B;;;ACjEO,IAAM,sBAAsB,CACjC,OACA,YACoB;AACpB,QAAM,QAAkC,CAAC;AACzC,QAAM,WAAwC,CAAC;AAE/C,QAAM,EAAE,SAAS,YAAY,YAAY,IAAI;AAAA,IAC3C,MAAM;AAAA,IACN,QAAQ;AAAA,IACR;AAAA,EACF;AACA,QAAM,UAAU,kBAAkB,UAAU;AAE5C,QAAM,KAAK;AAAA,IACT,UAAU;AAAA,IACV,SAAS,eAAe,mCAAmC;AAAA,MACzD;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,OAAO;AAAA,EACT,CAAC;AACD,WAAS,KAAK;AAAA,IACZ,OAAO;AAAA,IACP,SAAS,eAAe,iCAAiC;AAAA,MACvD,QAAQ,QAAQ;AAAA,MAChB,WAAW,QAAQ;AAAA,MACnB,WAAW,MAAM,QAAQ;AAAA,IAC3B,CAAC;AAAA,EACH,CAAC;AACD,WAAS,KAAK;AAAA,IACZ,OAAO;AAAA,IACP,SAAS,eAAe,+BAA+B,CAAC,CAAC;AAAA,EAC3D,CAAC;AAED,SAAO,EAAE,OAAO,SAAS;AAC3B;;;ACpCO,IAAM,+BAA+B,CAC1C,OACA,YACoB;AACpB,QAAM,QAAkC,CAAC;AACzC,QAAM,WAAwC,CAAC;AAE/C,MAAI,MAAM,cAAc,UAAU;AAChC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ,iBAAiB;AAAA,QACvB,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,cAAc;AAAA,QACd,SAAS,QAAQ;AAAA,QACjB,SAAS,MAAM;AAAA,QACf,yBAAyB;AAAA,MAC3B,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,EAAE,SAAS,YAAY,IAAI;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR;AAAA,EACF;AACA,QAAM,KAAK;AAAA,IACT,UAAU;AAAA,IACV,SAAS,eAAe,6CAA6C;AAAA,MACnE;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,OAAO;AAAA,EACT,CAAC;AAED,QAAM,SAAS,iBAAiB;AAAA,IAC9B,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,cAAc;AAAA,IACd,SAAS,QAAQ;AAAA,IACjB,SAAS,MAAM;AAAA,IACf,yBAAyB;AAAA,EAC3B,CAAC;AACD,WAAS,KAAK,OAAO,aAAa;AAElC,SAAO,EAAE,OAAO,SAAS;AAC3B;;;AC/CA,IAAM,uBAAuB;AAAA,EAC3B,mBAAmB,CAAC,OAAO,MAAM,OAAO,MAAM,OAAO;AACvD;AAEO,IAAM,uBAAuB,CAClC,OACA,YACoB;AACpB,QAAM,QAAkC,CAAC;AACzC,QAAM,WAAwC,CAAC;AAE/C,WAAS,KAAK;AAAA,IACZ,OAAO;AAAA,IACP,SAAS,eAAe,iCAAiC;AAAA,MACvD,WAAW,QAAQ;AAAA,MACnB,WAAW,MAAM,QAAQ;AAAA,IAC3B,CAAC;AAAA,EACH,CAAC;AAED,MAAI,MAAM,cAAc,UAAU;AAChC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ,iBAAiB;AAAA,QACvB,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,cAAc;AAAA,QACd,SAAS;AAAA,UACP,GAAG,QAAQ;AAAA,UACX,GAAG;AAAA,QACL;AAAA,QACA,SAAS,MAAM;AAAA,QACf,yBAAyB;AAAA,MAC3B,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,EAAE,SAAS,YAAY,IAAI;AAAA,IAC/B,MAAM;AAAA,IACN;AAAA,MACE,GAAG,QAAQ;AAAA,MACX,GAAG;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACA,QAAM,KAAK;AAAA,IACT,UAAU;AAAA,IACV,SAAS,eAAe,qCAAqC;AAAA,MAC3D;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,OAAO;AAAA,EACT,CAAC;AAED,SAAO,EAAE,OAAO,SAAS;AAC3B;;;ACvDO,IAAM,8BAA8B,CACzC,OACA,YACoB;AACpB,QAAM,QAAkC,CAAC;AACzC,QAAM,WAAwC,CAAC;AAE/C,MAAI,MAAM,cAAc,UAAU;AAChC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ,iBAAiB;AAAA,QACvB,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,cAAc;AAAA,QACd,SAAS,QAAQ;AAAA,QACjB,SAAS,MAAM;AAAA,QACf,yBAAyB;AAAA,QACzB,mBAAmB;AAAA,UACjB,OAAO,MAAM;AAAA,UACb,QAAQ,QAAQ;AAAA,UAChB,WAAW,QAAQ;AAAA,UACnB,WAAW,MAAM,QAAQ;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,EAAE,SAAS,YAAY,IAAI;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR;AAAA,EACF;AACA,QAAM,KAAK;AAAA,IACT,UAAU;AAAA,IACV,SAAS,eAAe,yCAAyC;AAAA,MAC/D;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,OAAO;AAAA,EACT,CAAC;AAED,SAAO,EAAE,OAAO,SAAS;AAC3B;;;ACxCO,IAAM,0BAGT;AAAA,EACF,cAAc;AAAA,EACd,MAAM;AAAA,EACN,kBAAkB;AAAA,EAClB,OAAO;AAAA,EACP,iBAAiB;AACnB;;;ACwCO,IAAM,kBAAkB,CAAC,UAAiD;AAC/E,QAAM,WAAWC,SAAQ,MAAM,MAAM;AACrC,QAAM,cAAcA,SAAQ,MAAM,SAAS;AAC3C,QAAM,UAAkC;AAAA,IACtC;AAAA,IACA;AAAA,IACA,WAAW;AAAA,MACT,QAAQ;AAAA,MACR,WAAW;AAAA,IACb;AAAA,EACF;AAEA,QAAM,WAAW,wBAAwB,MAAM,QAAQ;AACvD,MAAI,CAAC,UAAU;AACb,UAAM,aAAa,MAAM;AACzB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,+BAA+B,OAAO,UAAU,CAAC;AAAA,IACnD;AAAA,EACF;AACA,SAAO,SAAS,OAAO,OAAO;AAChC;;;ACjEA,IAAM,4BAA4B;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,yBAAyB,CAAC,SAAgC;AAC9D,QAAM,YAAY,KAAK,MAAM,kBAAkB,KAAK,KAAK,MAAM,kBAAkB;AACjF,MAAI,YAAY,CAAC,EAAG,QAAO,UAAU,CAAC;AAEtC,QAAM,eACJ,KAAK,MAAM,4BAA4B,KACvC,KAAK,MAAM,4BAA4B;AACzC,SAAO,eAAe,CAAC,KAAK;AAC9B;AAEA,IAAM,eAAe,CAAC,UACpB,MAAM,QAAQ,uBAAuB,MAAM;AAE7C,IAAM,gBAAgB,CAAC,QAAgB,YAA8B;AACnE,QAAM,UAAU,QAAQ,OAAO,CAAC,SAAS;AACvC,UAAM,aAAa,uBAAuB,IAAI;AAC9C,QAAI,YAAY;AACd,YAAM,gBAAgB,IAAI;AAAA,QACxB,eAAe,aAAa,UAAU,CAAC,0BAA0B,aAAa,UAAU,CAAC;AAAA,MAC3F;AACA,aAAO,CAAC,cAAc,KAAK,MAAM;AAAA,IACnC;AACA,WAAO,CAAC,OAAO,SAAS,KAAK,KAAK,CAAC;AAAA,EACrC,CAAC;AAED,MAAI,QAAQ,WAAW,EAAG,QAAO;AAEjC,QAAM,gBAAgB,MAAM,KAAK,OAAO,SAAS,kBAAkB,CAAC;AACpE,MAAI,cAAc,WAAW,GAAG;AAC9B,WAAO,GAAG,QAAQ,KAAK,IAAI,CAAC;AAAA;AAAA,EAAO,MAAM;AAAA,EAC3C;AAEA,QAAM,aAAa,cAAc,cAAc,SAAS,CAAC;AACzD,QAAM,WAAW,WAAW,QAAS,WAAW,CAAC,EAAE;AACnD,SAAO,GAAG,OAAO,MAAM,GAAG,QAAQ,CAAC;AAAA,EAAK,QAAQ,KAAK,IAAI,CAAC,GAAG,OAAO,MAAM,QAAQ,CAAC;AACrF;AAEA,IAAM,sBAAsB,CAAC,QAAgBC,YAC3C,OACG,MAAM,IAAI,EACV,IAAI,CAAC,SAAU,KAAK,SAAS,IAAI,GAAGA,OAAM,GAAG,IAAI,KAAK,IAAK,EAC3D,KAAK,IAAI;AAEd,IAAM,uBAAuB,CAAC,aAAuB,cAA8B;AACjF,QAAM,gBAAgB,GAAG,SAAS;AAClC,QAAM,gBAAgB,GAAG,aAAa;AACtC,QAAM,aAAa,GAAG,aAAa;AACnC,QAAM,UAAU,YACb,IAAI,CAAC,eAAe,oBAAoB,YAAY,UAAU,CAAC,EAC/D,KAAK,IAAI;AAEZ,SAAO;AAAA,IACL,GAAG,SAAS;AAAA,IACZ,GAAG,aAAa;AAAA,IAChB,GAAG,aAAa;AAAA,IAChB;AAAA,IACA,GAAG,aAAa;AAAA,IAChB,GAAG,aAAa;AAAA,IAChB,GAAG,SAAS;AAAA,EACd,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,iBAAiB,CAAC,aAAuB,eAC7C;AAAA,EACE,GAAG,UAAU;AAAA,EACb,qBAAqB,aAAa,GAAG,UAAU,IAAI;AAAA,EACnD,GAAG,UAAU;AACf,EAAE,KAAK,IAAI;AAEb,IAAM,2BAA2B,CAC/B,QACA,iBACkB;AAClB,aAAW,WAAW,2BAA2B;AAC/C,UAAM,QAAQ,QAAQ,KAAK,MAAM;AACjC,QAAI,CAAC,MAAO;AAEZ,UAAM,cAAc,MAAM,CAAC,EAAE,MAAM,SAAS,KAAK,CAAC,EAAE,GAAG,CAAC;AACxD,UAAM,WAAW,MAAM,QAAQ,MAAM,CAAC,EAAE;AACxC,UAAM,QAAQ,aAAa,GAAG,UAAU,IAAI;AAC5C,WAAO,GAAG,OAAO,MAAM,GAAG,QAAQ,CAAC;AAAA,EAAK,KAAK,GAAG,OAAO,MAAM,QAAQ,CAAC;AAAA,EACxE;AACA,SAAO;AACT;AAEA,IAAM,0BAA0B,CAC9B,QACA,iBACqD;AACrD,QAAM,UAAU,IAAI,OAAO,aAAa,aAAa,YAAY,CAAC,gBAAgB,GAAG;AACrF,QAAM,QAAQ,QAAQ,KAAK,MAAM;AACjC,MAAI,CAAC,MAAO,QAAO;AAEnB,SAAO;AAAA,IACL,UAAU,MAAM,QAAQ,MAAM,CAAC,EAAE;AAAA,IACjC,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE;AAAA,EAChC;AACF;AAEA,IAAM,gCAAgC,CACpC,QACA,cACA,iBACkB;AAClB,QAAM,QAAQ,wBAAwB,QAAQ,YAAY;AAC1D,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,QAAQ,aAAa,MAAM,WAAW;AAC5C,SAAO,GAAG,OAAO,MAAM,GAAG,MAAM,QAAQ,CAAC;AAAA,EAAK,KAAK,GAAG,OAAO,MAAM,MAAM,QAAQ,CAAC;AACpF;AAEA,IAAM,mBAAmB,CAAC,WAA4B,gBAAgB,KAAK,MAAM;AAEjF,IAAM,kBAAkB,CAAC,QAAgB,gBACvC;AAAA,EAAyB;AAAA,EAAQ,CAAC,gBAChC,qBAAqB,aAAa,WAAW;AAC/C;AAEF,IAAM,0BAA0B,CAC9B,QACA,gBACkB;AAClB,QAAM,SAAS;AAAA,IAA8B;AAAA,IAAQ;AAAA,IAAQ,CAAC,gBAC5D,qBAAqB,aAAa,WAAW;AAAA,EAC/C;AACA,MAAI,OAAQ,QAAO;AAEnB,SAAO;AAAA,IAAyB;AAAA,IAAQ,CAAC,gBACvC,eAAe,aAAa,WAAW;AAAA,EACzC;AACF;AAEA,IAAM,8BAA8B,CAClC,QACA,gBAEA;AAAA,EAA8B;AAAA,EAAQ;AAAA,EAAY,CAAC,gBACjD,qBAAqB,aAAa,WAAW;AAC/C;AAEK,IAAM,uBAAuB,CAClC,UAC+B;AAC/B,MAAI,iBAAiB,MAAM,MAAM,GAAG;AAClC,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,cAAc,cAAc,MAAM,QAAQ,MAAM,KAAK,OAAO;AAElE,QAAM,WAAW,MAAM;AACrB,YAAQ,MAAM,KAAK,QAAQ;AAAA,MACzB,KAAK;AACH,eAAO,gBAAgB,aAAa,MAAM,KAAK,WAAW;AAAA,MAC5D,KAAK;AAAA,MACL,KAAK;AACH,eAAO,wBAAwB,aAAa,MAAM,KAAK,WAAW;AAAA,MACpE,KAAK;AACH,eAAO,4BAA4B,aAAa,MAAM,KAAK,WAAW;AAAA,MACxE;AACE,eAAO;AAAA,IACX;AAAA,EACF,GAAG;AAEH,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,QAAQ,+BAA+B,MAAM,KAAK,MAAM;AAAA,IAC1D;AAAA,EACF;AAEA,SAAO,EAAE,IAAI,MAAM,SAAS,QAAQ;AACtC;;;AXtJO,IAAM,mBAAmB,CAAC,UAAmD;AAClF,QAAM,EAAE,KAAK,KAAK,WAAW,QAAQ,IAAI;AACzC,QAAM,MAAgB,CAAC;AACvB,QAAM,WAA+B,CAAC;AACtC,QAAM,WAAqB,CAAC;AAE5B,QAAM,SAAS,CAACC,OACd,gBAAgB;AAAA,IACd,UAAU,IAAI;AAAA,IACd,QAAQ,IAAI;AAAA,IACZ,OAAO,IAAI;AAAA,IACX,WAAW,IAAI,MAAM;AAAA,IACrB,SAAS;AAAA,MACP,oBAAoB,IAAI,UAAU;AAAA,MAClC,sBAAsB,IAAI,WAAW;AAAA,IACvC;AAAA,IACA,WAAWA;AAAA,IACX,kBAAkB,QAAQ,QAAQ,cAAc;AAAA,EAClD,CAAC;AAEH,MAAI,SAAS,OAAO,UAAU,SAAS;AAEvC,MAAI,UAAU,cAAc,YAAY,OAAO,QAAQ;AACrD,UAAM,WAAW,UAAU;AAC3B,QAAI,CAAC,YAAY,CAACC,YAAW,QAAQ,GAAG;AACtC,eAAS,KAAK,wFAAwF;AACtG,eAAS,OAAO,MAAM;AAAA,IACxB,OAAO;AACL,YAAM,SAAS,qBAAqB;AAAA,QAClC,QAAQC,cAAa,UAAU,MAAM;AAAA,QACrC,MAAM,OAAO;AAAA,MACf,CAAC;AAED,UAAI,OAAO,MAAM,OAAO,SAAS;AAC/B,YAAI,KAAK;AAAA,UACP,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,UAChB,OAAOC,UAAS,KAAK,QAAQ,KAAK;AAAA,QACpC,CAAC;AACD,iBAAS,KAAK,GAAG,OAAO,QAAQ;AAChC,iBAAS,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,EAAE;AAAA,MACrC,OAAO;AACL,iBAAS,KAAK,iCAAiC,OAAO,UAAU,gBAAgB,+CAA+C;AAC/H,iBAAS,KAAK,OAAO,OAAO,aAAa;AACzC,cAAM,WAAW,OAAO,MAAM;AAC9B,iBAAS;AAAA,UACP,OAAO,SAAS;AAAA,UAChB,UAAU,CAAC,GAAG,OAAO,UAAU,GAAG,SAAS,QAAQ;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,aAAW,QAAQ,OAAO,OAAO;AAC/B,QAAI,KAAK;AAAA,MACP,QAAQC,MAAK,KAAK,KAAK,QAAQ;AAAA,MAC/B,SAAS,KAAK;AAAA,MACd,OAAO,KAAK;AAAA,IACd,CAAC;AAAA,EACH;AACA,WAAS,KAAK,GAAG,OAAO,QAAQ;AAEhC,SAAO,EAAE,KAAK,UAAU,SAAS;AACnC;;;AYzGA,SAAS,cAAAC,aAAY,gBAAAC,qBAAoB;AACzC,SAAS,QAAAC,aAAY;AA8BrB,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,qBAAqB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,6BAA6B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,4BAA4B;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,gBAAgB,CAAC,KAAa,UAAmC;AACrE,aAAW,QAAQ,OAAO;AACxB,UAAMC,KAAID,MAAK,KAAK,IAAI;AACxB,QAAIF,YAAWG,EAAC,EAAG,QAAOA;AAAA,EAC5B;AACA,SAAO;AACT;AAEA,IAAM,mBAAmB,CAAC,oBAAyC;AACjE,MAAI;AACF,UAAM,MAAM,KAAK,MAAMF,cAAa,iBAAiB,MAAM,CAAC;AAK5D,WAAO,oBAAI,IAAI;AAAA,MACb,GAAG,OAAO,KAAK,IAAI,gBAAgB,CAAC,CAAC;AAAA,MACrC,GAAG,OAAO,KAAK,IAAI,mBAAmB,CAAC,CAAC;AAAA,MACxC,GAAG,OAAO,KAAK,IAAI,oBAAoB,CAAC,CAAC;AAAA,IAC3C,CAAC;AAAA,EACH,QAAQ;AACN,WAAO,oBAAI,IAAI;AAAA,EACjB;AACF;AAEO,IAAM,gBAAgB,CAAC,QAA6B;AACzD,QAAM,kBAAkBD,YAAWE,MAAK,KAAK,cAAc,CAAC,IACxDA,MAAK,KAAK,cAAc,IACxB;AACJ,QAAM,eAAe,kBACjB,iBAAiB,eAAe,IAChC,oBAAI,IAAY;AAEpB,QAAM,iBAAiB,cAAc,KAAK,iBAAiB;AAC3D,QAAM,iBAAiB,cAAc,KAAK,iBAAiB;AAC3D,QAAM,kBAAkB,cAAc,KAAK,kBAAkB;AAC7D,QAAM,yBAAyB,cAAc,KAAK,0BAA0B;AAC5E,QAAM,qBAAqB,cAAc,KAAK,yBAAyB;AAEvE,SAAO;AAAA,IACL,QAAQ,QAAQ,cAAc,KAAK,aAAa,IAAI,MAAM;AAAA,IAC1D;AAAA,IACA,QAAQ,QAAQ,cAAc,KAAK,aAAa,IAAI,MAAM;AAAA,IAC1D;AAAA,IACA,SAAS,QAAQ,eAAe,KAAK,aAAa,IAAI,OAAO;AAAA,IAC7D;AAAA,IACA,iBACE,QAAQ,kBAAkB,KAC1B,aAAa,IAAI,iBAAiB,KAClC,aAAa,IAAI,uBAAuB;AAAA,IAC1C;AAAA,IACA,gBACE,QAAQ,sBAAsB,KAAK,aAAa,IAAI,eAAe;AAAA,IACrE;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,kBAAkB,CAACC,OAA6C;AAC3E,MAAIA,GAAE,eAAgB,QAAO;AAC7B,MAAIA,GAAE,OAAQ,QAAO;AACrB,MAAIA,GAAE,QAAS,QAAO;AACtB,MAAIA,GAAE,gBAAiB,QAAO;AAC9B,MAAIA,GAAE,OAAQ,QAAO;AACrB,SAAO;AACT;AAEO,IAAM,kBAAkB,CAACA,OAA2B;AACzD,QAAM,QAAkB,CAAC;AACzB,MAAIA,GAAE,eAAgB,OAAM,KAAK,eAAe;AAAA,WACvCA,GAAE,OAAQ,OAAM,KAAK,SAAS;AAAA,WAC9BA,GAAE,QAAS,OAAM,KAAK,OAAO;AAAA,WAC7BA,GAAE,gBAAiB,OAAM,KAAK,gBAAgB;AAAA,WAC9CA,GAAE,OAAQ,OAAM,KAAK,MAAM;AACpC,SAAO,MAAM,SAAS,MAAM,KAAK,IAAI,IAAI;AAC3C;;;AClIO,IAAM,iBAA2D;AAAA,EACtE,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,8BAA8B;AAAA,IAC9B,uBAAuB,CAAC,YAAY,QAAQ;AAAA,EAC9C;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,8BAA8B;AAAA,IAC9B,uBAAuB,MAAM;AAAA,EAC/B;AAAA,EACA,kBAAkB;AAAA,IAChB,OAAO;AAAA,IACP,8BAA8B;AAAA,IAC9B,uBAAuB,CAAC,YAAY,QAAQ;AAAA,EAC9C;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,8BAA8B;AAAA,IAC9B,uBAAuB,CAAC,YAAY,QAAQ;AAAA,EAC9C;AAAA,EACA,iBAAiB;AAAA,IACf,OAAO;AAAA,IACP,8BAA8B;AAAA,IAC9B,uBAAuB,CAAC,YAAY,QAAQ;AAAA,EAC9C;AACF;AAEO,IAAM,oBAAoB,CAAC,aAChC,eAAe,QAAQ,EAAE;AAEpB,IAAM,2BAA2B,CACtC,aACY,eAAe,QAAQ,EAAE;AAEhC,IAAM,oBAAoB,CAC/B,UACA,YACkB,eAAe,QAAQ,EAAE,sBAAsB,OAAO;;;AC/C1E,SAAS,cAAAC,aAAY,gBAAAC,eAAc,iBAAAC,sBAAqB;AACxD,SAAS,YAAY,QAAAC,aAAY;AAG1B,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAE1B,IAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,wBAAwB,CAAC,QAAQ,UAAU,MAAM;AAkDvD,IAAM,gBAA2C;AAAA,EACtD,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,KAAK;AACP;AAcA,IAAM,0BAA6D;AAAA,EACjE,cAAc;AAAA,EACd,MAAM;AAAA,EACN,kBAAkB;AAAA,EAClB,OAAO;AAAA,EACP,iBAAiB;AACnB;AAEO,IAAM,aAAa,CAAC,QAAwBC,MAAK,KAAK,gBAAgB;AAEtE,IAAM,eAAe,CAAC,QAC3BC,YAAW,WAAW,GAAG,CAAC;AAErB,IAAM,aAAa,CAAC,QAAkC;AAC3D,QAAMC,KAAI,WAAW,GAAG;AACxB,MAAI,CAACD,YAAWC,EAAC,GAAG;AAClB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,MAAM,gBAAgB,aAAaA,EAAC;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AACA,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAMC,cAAaD,IAAG,MAAM,CAAC;AAAA,EAC7C,SAAS,KAAK;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,MACA,mBAAmBA,EAAC,KAAM,IAAc,OAAO;AAAA,MAC/C,UAAU,gBAAgB;AAAA,IAC5B;AAAA,EACF;AACA,SAAO,eAAe,QAAQA,EAAC;AACjC;AAMO,IAAM,eAAe,CAC1B,KACA,QACkB;AAClB,yBAAuB,UAAU,IAAI,MAAM;AAC3C,aAAW,OAAO,CAAC,UAAU,cAAc,SAAS,KAAK,GAAY;AACnE,2BAAuB,SAAS,GAAG,IAAI,IAAI,MAAM,GAAG,CAAC;AAAA,EACvD;AACA,QAAM,SAASE,MAAK,KAAK,IAAI,MAAM;AACnC,SAAO;AAAA,IACL;AAAA,IACA,WAAWA,MAAK,QAAQ,IAAI,MAAM,MAAM;AAAA,IACxC,eAAeA,MAAK,QAAQ,IAAI,MAAM,UAAU;AAAA,IAChD,UAAUA,MAAK,QAAQ,IAAI,MAAM,KAAK;AAAA,IACtC,QAAQA,MAAK,QAAQ,IAAI,MAAM,GAAG;AAAA,EACpC;AACF;AAMA,IAAM,iBAAiB,CAAC,QAA4C;AAClE,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO,EAAE,OAAO,KAAK,QAAQ,WAAW,SAAS,UAAU;AAAA,EAC7D;AACA,MAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,UAAM,IAAI;AACV,WAAO;AAAA,MACL,OAAO,OAAO,EAAE,UAAU,WAAW,EAAE,QAAQ;AAAA,MAC/C,QAAQ,OAAO,EAAE,WAAW,WAAW,EAAE,SAAS;AAAA,MAClD,SAAS,OAAO,EAAE,YAAY,WAAW,EAAE,UAAU;AAAA,IACvD;AAAA,EACF;AACA,SAAO,EAAE,OAAO,WAAW,QAAQ,WAAW,SAAS,UAAU;AACnE;AAEA,IAAM,qBAAqB,CAAC,UAA2B;AACrD,MAAI,MAAM,SAAS,IAAI,KAAK,WAAW,KAAK,EAAG,QAAO;AACtD,SAAO,CAAC,MAAM,MAAM,QAAQ,EAAE,KAAK,CAAC,YAAY,YAAY,IAAI;AAClE;AAEA,IAAM,yBAAyB,CAAC,OAAe,UAAwB;AACrE,MAAI,CAAC,mBAAmB,KAAK,GAAG;AAC9B,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AACF;AAEO,IAAM,oBAAoB,CAAC,SAA+C;AAC/E,QAAM,SAAS,KAAK,UAAU,wBAAwB,KAAK,QAAQ;AACnE,yBAAuB,UAAU,MAAM;AAEvC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,UAAU,KAAK;AAAA,IACf;AAAA,IACA,OAAO,KAAK,SAAS;AAAA,IACrB,OAAO;AAAA,MACL,OAAO,KAAK,SAAS;AAAA,MACrB,QAAQ,KAAK,UAAU;AAAA,MACvB,SAAS,KAAK,WAAW;AAAA,IAC3B;AAAA,IACA,OAAO,EAAE,GAAG,cAAc;AAAA,IAC1B,YAAY,EAAE,QAAQ,KAAK,UAAU,MAAM;AAAA,IAC3C,WAAW,EAAE,SAAS,KAAK,aAAa,MAAM;AAAA,IAC9C,WAAW,EAAE,WAAW,KAAK,sBAAsB,OAAO;AAAA,EAC5D;AACF;AAEA,IAAM,iBAAiB,CAAC,KAAc,SAAmC;AACvE,MAAI,CAAC,OAAO,OAAO,QAAQ,UAAU;AACnC,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI;AAAA,IACT;AAAA,EACF;AACA,QAAM,IAAI;AACV,QAAM,OAAO,CAAC,MAAe,QAAgB;AAC3C,QAAI,CAAC,KAAM,OAAM,IAAI,YAAY,oBAAoB,GAAG,IAAI,KAAK,GAAG,EAAE;AAAA,EACxE;AAEA,OAAK,OAAO,EAAE,aAAa,UAAU,8BAA8B;AACnE;AAAA,IACE,oBAAoB,SAAS,EAAE,QAA6B;AAAA,IAC5D,8BAA8B,oBAAoB,KAAK,IAAI,CAAC,UAAU,EAAE,QAAQ;AAAA,EAClF;AACA,OAAK,OAAO,EAAE,WAAW,YAAY,EAAE,OAAO,SAAS,GAAG,sCAAsC;AAChG,OAAK,mBAAmB,EAAE,MAAO,GAAG,sDAAsD;AAC1F,OAAK,OAAO,EAAE,UAAU,YAAY,EAAE,MAAM,SAAS,GAAG,qCAAqC;AAC7F,OAAK,EAAE,SAAS,OAAO,EAAE,UAAU,UAAU,4BAA4B;AACzE,QAAM,KAAK,EAAE;AACb,aAAW,KAAK,CAAC,UAAU,cAAc,SAAS,KAAK,GAAY;AACjE,SAAK,OAAO,GAAG,CAAC,MAAM,YAAa,GAAG,CAAC,EAAa,SAAS,GAAG,UAAU,CAAC,+BAA+B;AAC1G,SAAK,mBAAmB,GAAG,CAAC,CAAW,GAAG,UAAU,CAAC,4CAA4C;AAAA,EACnG;AACA,OAAK,EAAE,cAAc,OAAO,EAAE,eAAe,UAAU,iCAAiC;AACxF,OAAK,OAAO,EAAE,WAAY,WAAW,WAAW,wCAAwC;AACxF,OAAK,EAAE,aAAa,OAAO,EAAE,cAAc,UAAU,gCAAgC;AACrF,OAAK,OAAO,EAAE,UAAW,YAAY,WAAW,wCAAwC;AAExF,MAAI,EAAE,cAAc,QAAW;AAC7B,SAAK,EAAE,aAAa,OAAO,EAAE,cAAc,UAAU,gCAAgC;AACrF;AAAA,MACE,sBAAsB,SAAS,EAAE,UAAU,SAA+B;AAAA,MAC1E,yCAAyC,sBAAsB,KAAK,IAAI,CAAC,UAAU,OAAO,EAAE,UAAU,SAAS,CAAC;AAAA,IAClH;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS,EAAE,WAAW;AAAA,IACtB,UAAU,EAAE;AAAA,IACZ,QAAQ,EAAE;AAAA,IACV,OAAO,EAAE;AAAA,IACT,OAAO,eAAe,EAAE,KAAK;AAAA,IAC7B,OAAO;AAAA,IACP,YAAY,EAAE,QAAQ,EAAE,WAAY,OAAQ;AAAA,IAC5C,WAAW,EAAE,SAAS,EAAE,UAAW,QAAS;AAAA,IAC5C,WAAW;AAAA,MACT,WACG,EAAE,WAAW,aAAgD;AAAA,IAClE;AAAA,EACF;AACF;;;ACjPA,IAAM,UAA6E;AAAA,EACjF,EAAE,OAAO,MAAM,WAAW,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,UAAU,KAAK;AAAA,EAC5E,EAAE,OAAO,aAAa,WAAW,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,UAAU,aAAa;AAAA,EAC3F,EAAE,OAAO,QAAQ,WAAW,CAAC,MAAM,EAAE,SAAS,OAAO;AAAA,EACrD,EAAE,OAAO,OAAO,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM;AACrD;AAOO,IAAM,qBAAqB,CAAC,UACjC,QAAQ;AAAA,EAAQ,CAAC,EAAE,OAAO,UAAU,MAClC,MAAM,OAAO,SAAS,EAAE,IAAI,CAAC,OAAO;AAAA,IAClC,OAAO,EAAE;AAAA,IACT,OAAO,EAAE;AAAA,IACT,MAAM,GAAG,KAAK,GAAG,EAAE,KAAK,SAAS,eAAY,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;AAAA,EACvE,EAAE;AACJ;;;AC3BF,SAAS,aAAa;AACtB,SAAS,cAAAC,aAAY,gBAAAC,qBAAoB;AACzC,SAAS,QAAAC,aAAY;AAKd,IAAM,mBAAmB,CAAC,OAAO,QAAQ,QAAQ,KAAK;AAStD,IAAM,uBAAuB,CAAC,QAAgC;AACnE,QAAM,cAAcA,MAAK,KAAK,cAAc;AAC5C,MAAIF,YAAW,WAAW,GAAG;AAC3B,QAAI;AACF,YAAM,MAAM,KAAK,MAAMC,cAAa,aAAa,MAAM,CAAC;AAGxD,UAAI,OAAO,IAAI,mBAAmB,UAAU;AAC1C,cAAM,OAAO,IAAI,eAAe,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK;AACnD,YAAK,iBAAuC,SAAS,IAAI,GAAG;AAC1D,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,MAAID,YAAWE,MAAK,KAAK,gBAAgB,CAAC,EAAG,QAAO;AACpD,MAAIF,YAAWE,MAAK,KAAK,WAAW,CAAC,EAAG,QAAO;AAC/C,MAAIF,YAAWE,MAAK,KAAK,WAAW,CAAC,EAAG,QAAO;AAC/C,MAAIF,YAAWE,MAAK,KAAK,UAAU,CAAC,EAAG,QAAO;AAC9C,MAAIF,YAAWE,MAAK,KAAK,mBAAmB,CAAC,EAAG,QAAO;AACvD,SAAO;AACT;AAyBO,IAAM,wBAAwB,CACnC,UACmB;AACnB,QAAM,EAAE,UAAU,OAAO,KAAK,QAAQ,IAAI;AAC1C,QAAM,OAAO,SAAS;AAEtB,QAAM,eAAuC,EAAE,GAAG,KAAK,iBAAiB;AACxE,QAAM,kBAA0C,EAAE,GAAG,KAAK,oBAAoB;AAC9E,MAAI,IAAI,UAAU,SAAS;AACzB,WAAO,OAAO,iBAAiB,KAAK,wBAAwB;AAAA,EAC9D;AAEA,aAAW,QAAQ,OAAO;AACxB,eAAW,OAAO,KAAK,cAAc;AACnC,UAAI,OAAO,aAAc;AACzB,YAAM,UAAU,KAAK,gBAAgB,GAAG;AACxC,UAAI,CAAC,QAAS;AACd,mBAAa,GAAG,IAAI;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,UAAqC,CAAC;AAC5C,QAAM,SAAS,CAAC,QAAgC;AAC9C,eAAW,QAAQ,OAAO,KAAK,GAAG,GAAG;AACnC,UAAI,QAAQ,aAAa,IAAI,IAAI,GAAG;AAClC,gBAAQ,KAAK,EAAE,MAAM,QAAQ,mBAAmB,CAAC;AACjD,eAAO,IAAI,IAAI;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AACA,SAAO,YAAY;AACnB,SAAO,eAAe;AAEtB,SAAO,EAAE,cAAc,iBAAiB,QAAQ;AAClD;AAMO,IAAM,uBAAuB,CAClC,IACA,SACqD;AACrD,QAAM,WAA6D,CAAC;AAEpE,QAAM,eAAe,OAAO,QAAQ,KAAK,YAAY,EAAE;AAAA,IACrD,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC;AAAA,EAC7B;AACA,QAAM,WAAW,OAAO,QAAQ,KAAK,eAAe,EAAE;AAAA,IACpD,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC;AAAA,EAC7B;AAEA,QAAM,cAAc,YAAY,IAAI,cAAc,KAAK;AACvD,QAAM,UAAU,YAAY,IAAI,UAAU,IAAI;AAE9C,MAAI,aAAa,SAAS,GAAG;AAC3B,aAAS,KAAK;AAAA,MACZ,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO,GAAG,EAAE,IAAI,YAAY,KAAK,GAAG,CAAC;AAAA,IACvC,CAAC;AAAA,EACH;AACA,MAAI,SAAS,SAAS,GAAG;AACvB,aAAS,KAAK;AAAA,MACZ,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO,GAAG,EAAE,IAAI,QAAQ,KAAK,GAAG,CAAC;AAAA,IACnC,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEA,IAAM,cAAc,CAClB,IACA,OACA,QACa;AACb,UAAQ,IAAI;AAAA,IACV,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,MAAM,eAAe;AAAA,QACrB;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL;AAAA,IACF,KAAK;AACH,aAAO,CAAC,OAAO,MAAM,eAAe,IAAI,GAAG,KAAK,EAAE,OAAO,OAAO;AAAA,IAClE,KAAK;AACH,aAAO,CAAC,OAAO,MAAM,UAAU,IAAI,GAAG,KAAK,EAAE,OAAO,OAAO;AAAA,IAC7D,KAAK;AACH,aAAO,CAAC,OAAO,MAAM,UAAU,IAAI,GAAG,KAAK,EAAE,OAAO,OAAO;AAAA,EAC/D;AACF;AAeO,IAAM,aAAa,OACxB,UACA,SACkB;AAClB,aAAW,OAAO,UAAU;AAC1B,SAAK,YAAY,GAAG;AACpB,UAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,YAAM,QAAQ,MAAM,IAAI,KAAK,IAAI,MAAM;AAAA,QACrC,KAAK,KAAK;AAAA,QACV,OAAO;AAAA,QACP,KAAK,EAAE,GAAG,QAAQ,KAAK,GAAG,KAAK,IAAI;AAAA,QACnC,OAAO,QAAQ,aAAa;AAAA,MAC9B,CAAC;AACD,YAAM,GAAG,SAAS,MAAM;AACxB,YAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,YAAI,SAAS,EAAG,SAAQ;AAAA;AAEtB;AAAA,YACE,IAAI;AAAA,cACF,GAAG,IAAI,KAAK,qBAAqB,QAAQ,MAAM;AAAA,YACjD;AAAA,UACF;AAAA,MACJ,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAMO,IAAM,eAAe,CAAC,SAAiC;AAC5D,QAAM,QAAkB,CAAC;AACzB,QAAM,OAAO,CAAC,QACZ,OAAO,QAAQ,GAAG,EACf,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,EACrC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,EAAE;AAExC,MAAI,OAAO,KAAK,KAAK,YAAY,EAAE,QAAQ;AACzC,UAAM,KAAK,eAAe;AAC1B,UAAM,KAAK,GAAG,KAAK,KAAK,YAAY,CAAC;AAAA,EACvC;AACA,MAAI,OAAO,KAAK,KAAK,eAAe,EAAE,QAAQ;AAC5C,QAAI,MAAM,OAAQ,OAAM,KAAK,EAAE;AAC/B,UAAM,KAAK,kBAAkB;AAC7B,UAAM,KAAK,GAAG,KAAK,KAAK,eAAe,CAAC;AAAA,EAC1C;AACA,MAAI,KAAK,QAAQ,QAAQ;AACvB,QAAI,MAAM,OAAQ,OAAM,KAAK,EAAE;AAC/B,UAAM,KAAK,gCAAgC;AAC3C,UAAM,KAAK,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,KAAK,EAAE,IAAI,EAAE,CAAC;AAAA,EACtD;AACA,MAAI,CAAC,MAAM,OAAQ,OAAM,KAAK,iDAAiD;AAC/E,SAAO,MAAM,KAAK,IAAI;AACxB;;;AC5NA,IAAM,aAAa,CAAC,KAAuB,SACzC,GAAG,IAAI,KAAK,IAAI,IAAI,GAAG,QAAQ,QAAQ,GAAG;AAErC,IAAM,eAAe,CAAC,EAAE,KAAK,MAAM,MAA+B;AACvE,QAAM,WAAW,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;AACvD,QAAM,QAAkB,CAAC;AAEzB,MAAI,SAAS,IAAI,OAAO,GAAG;AACzB,UAAM,cAAc;AAAA,MAClB;AAAA,MACA,GAAG,IAAI,MAAM,UAAU;AAAA,IACzB;AACA,UAAM;AAAA,MACJ;AAAA,QACE;AAAA,QACA,4BAA4B,WAAW;AAAA,QACvC,IAAI,aAAa,SACb,iFACA;AAAA,MACN,EAAE,KAAK,IAAI;AAAA,IACb;AAAA,EACF;AAEA,MACE,IAAI,aAAa,UACjB,MAAM,KAAK,CAAC,UAAU,KAAK,aAAa,UAAU,KAAK,CAAC,GACxD;AACA,UAAM;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;AzBqDA,IAAM,sBAAsB,CAAC,SAA2C;AACtE,MAAI,KAAK,OAAQ,QAAO;AACxB,MAAI,KAAK,MAAO,QAAO;AACvB,SAAO;AACT;AAkBA,IAAM,4BAA4B,CAChC,UACA,YACA,YACsB;AACtB,QAAM,WAAW,kBAAkB,UAAU,OAAO;AAEpD,MAAI,aAAa,QAAQ;AACvB,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX,UAAU;AAAA,MACV,gBACE,eAAe,SACX,SACA;AAAA,IACR;AAAA,EACF;AACA,MAAI,eAAe,QAAQ;AAKzB,WAAO,EAAE,YAAY,WAAW,QAAQ,SAAS;AAAA,EACnD;AACA,MAAI,eAAe,YAAY,CAAC,UAAU;AACxC,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA,gBACE;AAAA,IACJ;AAAA,EACF;AACA,SAAO,EAAE,YAAY,WAAW,YAAY,SAAS;AACvD;AAEA,IAAM,kBAAkB,OACtB,MACA,SACA,aAC8B;AAC9B,QAAM,oBAAoB,gBAAgB,OAAO;AAEjD,QAAM,WAAW,KAAK,WAClB,KAAK,WACL,KAAK,MACH,qBAAqB,eACrB,MAAMC,QAA0B;AAAA,IAC9B,SAAS;AAAA,IACT,SAAS,oBAAoB,IAAI,CAAC,OAAO;AAAA,MACvC,OAAO;AAAA,MACP,OAAO,kBAAkB,CAAC,KAAK,MAAM,oBAAoBC,IAAG,IAAI,aAAa,IAAI;AAAA,IACnF,EAAE;AAAA,IACF,cAAc,qBAAqB;AAAA,EACrC,CAAC;AAEP,QAAM,eAAe,SAAS,OAAO,OAAO,IAAI,CAAC,OAAO;AAAA,IACtD,OAAO,EAAE;AAAA,IACT,OAAO,EAAE;AAAA,IACT,MAAM,EAAE;AAAA,EACV,EAAE;AACF,QAAM,QAAQ,KAAK,QACf,KAAK,QACL,KAAK,MACH,YACA,MAAMD,QAAe;AAAA,IACnB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,cAAc;AAAA,EAChB,CAAC;AAEP,QAAM,gBAAgB,SAAS,OAAO,MAAM,IAAI,CAAC,OAAO;AAAA,IACtD,OAAO,EAAE;AAAA,IACT,OAAO,EAAE;AAAA,IACT,MAAM,EAAE;AAAA,EACV,EAAE;AACF,QAAM,SAAS,KAAK,SAChB,KAAK,SACL,KAAK,MACH,YACA,MAAMA,QAAe;AAAA,IACnB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,cAAc;AAAA,EAChB,CAAC;AAEP,QAAM,iBAAiB,SAAS,OAAO,QAAQ,IAAI,CAAC,OAAO;AAAA,IACzD,OAAO,EAAE;AAAA,IACT,OAAO,EAAE;AAAA,IACT,MAAM,EAAE;AAAA,EACV,EAAE;AACF,QAAM,UAAU,KAAK,UACjB,KAAK,UACL,KAAK,MACH,YACA,MAAMA,QAAe;AAAA,IACnB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,cAAc;AAAA,EAChB,CAAC;AAEP,MAAI,SAAS,KAAK,oBAAoB;AACtC,MAAI,CAAC,KAAK,OAAO,yBAAyB,QAAQ,KAAK,KAAK,qBAAqB,QAAW;AAC1F,aAAS,MAAME,SAAQ;AAAA,MACrB,SAAS;AAAA,MACT,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,MAAI,YAAY,KAAK,iBAAiB;AACtC,MAAI,CAAC,KAAK,OAAO,KAAK,kBAAkB,QAAW;AACjD,gBAAY,MAAMA,SAAQ;AAAA,MACxB,SAAS;AAAA,MACT,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,MAAI,YAAgC,KAAK,sBAAsB;AAC/D,MAAI,CAAC,KAAK,OAAO,KAAK,uBAAuB,UAAa,aAAa,QAAQ;AAC7E,UAAM,WAAW,kBAAkB,UAAU,OAAO;AACpD,UAAM,YAAY,WACdC,UAAS,KAAK,KAAK,QAAQ,KAAK,WAChC;AACJ,gBAAY,MAAMH,QAA2B;AAAA,MAC3C,SAAS;AAAA,MACT,SAAS,sBAAsB,IAAI,CAACI,QAAO;AAAA,QACzC,OAAOA;AAAA,QACP,OAAOA;AAAA,QACP,MACEA,OAAM,SACF,6CACAA,OAAM,WACJ,eAAe,SAAS,KACxB;AAAA,MACV,EAAE;AAAA,MACF,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,SAAO,kBAAkB;AAAA,IACvB;AAAA,IACA,QAAQ,KAAK;AAAA,IACb,OAAO,KAAK;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,EACtB,CAAC;AACH;AAEA,IAAM,gBAAgB,OACpB,MACA,SACA,aACyD;AACzD,MAAI,aAAa,KAAK,GAAG,KAAK,CAAC,KAAK,iBAAiB;AACnD,UAAMC,OAAM,WAAW,KAAK,GAAG;AAC/B,QAAI,KAAK,OAAQ,CAAAA,KAAI,SAAS,KAAK;AACnC,QAAI,KAAK,MAAO,CAAAA,KAAI,QAAQ,KAAK;AACjC,QAAI,KAAK,MAAO,CAAAA,KAAI,MAAM,QAAQ,KAAK;AACvC,QAAI,KAAK,OAAQ,CAAAA,KAAI,MAAM,SAAS,KAAK;AACzC,QAAI,KAAK,QAAS,CAAAA,KAAI,MAAM,UAAU,KAAK;AAC3C,QAAI,KAAK,qBAAqB,OAAW,CAAAA,KAAI,WAAW,SAAS,KAAK;AACtE,QAAI,KAAK,kBAAkB,OAAW,CAAAA,KAAI,UAAU,UAAU,KAAK;AACnE,QAAI,KAAK,uBAAuB,OAAW,CAAAA,KAAI,UAAU,YAAY,KAAK;AAC1E,WAAO,EAAE,KAAAA,MAAK,SAAS,KAAK;AAAA,EAC9B;AACA,QAAM,MAAM,MAAM,gBAAgB,MAAM,SAAS,QAAQ;AACzD,SAAO,EAAE,KAAK,SAAS,MAAM;AAC/B;AAEA,IAAM,wBAAwB,OAC5B,MACA,aACsB;AACtB,MAAI,KAAK,eAAgB,QAAO,CAAC;AACjC,MAAI,KAAK,IAAK,QAAO,SAAS,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI;AACrD,MAAI,KAAK,cAAc,KAAK,WAAW,SAAS,EAAG,QAAO,KAAK;AAC/D,MAAI,KAAK,IAAK,QAAO,CAAC;AAEtB,QAAM,SAAS,MAAMH,SAAQ;AAAA,IAC3B,SAAS;AAAA,IACT,cAAc;AAAA,EAChB,CAAC;AACD,MAAI,CAAC,OAAQ,QAAO,CAAC;AAErB,SAAOI,aAAY;AAAA,IACjB,SAAS,wBAAwBL,IAAG,IAAI,2DAA2D,CAAC;AAAA,IACpG,SAAS,mBAAmB,SAAS,KAAK;AAAA,IAC1C,eAAe,CAAC;AAAA,IAChB,UAAU;AAAA,EACZ,CAAC;AACH;AAEO,IAAM,UAAU,OAAO,SAA4C;AACxE,MAAI,KAAK,mBAAmB,KAAK,OAAQ,KAAK,cAAc,KAAK,WAAW,SAAS,IAAK;AACxF,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAC1F;AAEA,WAAS,kEAAkE;AAE3E,QAAM,WAAW,aAAa;AAC9B,QAAM,UAAU,cAAc,KAAK,GAAG;AACtC,QAAM,EAAE,KAAK,QAAQ,IAAI,MAAM,cAAc,MAAM,SAAS,QAAQ;AACpE,YAAU,UAAU,IAAI,MAAM,KAAK;AACnC,aAAW,UAAU,IAAI,MAAM,MAAM;AACrC,cAAY,UAAU,IAAI,MAAM,OAAO;AACvC,QAAM,YAAY;AAAA,IAChB,IAAI;AAAA,IACJ,IAAI,UAAU;AAAA,IACd;AAAA,EACF;AACA,QAAM,QAAQ,aAAa,KAAK,KAAK,GAAG;AAExC,QAAM,WACJ,QAAQ,UAAU,QAAQ,UAAU,QAAQ,WAC5C,QAAQ,mBAAmB,QAAQ;AACrC,QAAM,UAAU;AAAA,IACd,GAAGA,IAAG,KAAK,WAAW,CAAC,KAAK,IAAI,QAAQ;AAAA,IACxC,GAAGA,IAAG,KAAK,OAAO,CAAC,SAAS,IAAI,MAAM,KAAK;AAAA,IAC3C,GAAGA,IAAG,KAAK,QAAQ,CAAC,QAAQ,IAAI,MAAM,MAAM;AAAA,IAC5C,GAAGA,IAAG,KAAK,SAAS,CAAC,OAAO,IAAI,MAAM,OAAO;AAAA,IAC7C,GAAGA,IAAG,KAAK,QAAQ,CAAC,QAAQ,IAAI,MAAM;AAAA,IACtC,GAAGA,IAAG,KAAK,OAAO,CAAC,SAAS,IAAI,KAAK;AAAA,IACrC,GAAGA,IAAG,KAAK,KAAK,CAAC,WAAW,UAAU,UAAU,WAAM,UAAU,SAAS;AAAA,IACzE,WAAW,GAAGA,IAAG,KAAK,UAAU,CAAC,MAAM,gBAAgB,OAAO,CAAC,KAAK;AAAA,EACtE,EACG,OAAO,OAAO,EACd,KAAK,IAAI;AACZ,EAAAM,MAAK,SAAS,eAAe;AAE7B,MAAI,UAAU,eAAgB,MAAK,UAAU,cAAc;AAE3D,QAAM,iBAAiB,MAAM,sBAAsB,MAAM,QAAQ;AACjE,QAAM,QAAQ,eAAe,SAAS,aAAa,UAAU,cAAc,IAAI,CAAC;AAEhF,QAAM,MAAgB,CAAC;AACvB,QAAM,kBAA6D,CAAC;AAGpE,MAAI,CAAC,WAAW,KAAK,iBAAiB;AACpC,QAAI,KAAK;AAAA,MACP,QAAQC,MAAK,KAAK,KAAK,iBAAiB;AAAA,MACxC,SAAS,KAAK,UAAU,KAAK,MAAM,CAAC,IAAI;AAAA,MACxC,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAGA,MAAI,CAAC,KAAK,YAAY;AACpB,QAAI;AAAA,MACF,GAAG,cAAc;AAAA,QACf;AAAA,QACA,iBAAiB,MAAM;AAAA,QACvB,OAAO,IAAI,MAAM;AAAA,QACjB,QAAQ,IAAI,MAAM;AAAA,QAClB,SAAS,IAAI,MAAM;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,EACF;AAIA,MAAI,IAAI,UAAU,SAAS;AACzB,QAAI,KAAK,yBAAyB,EAAE,iBAAiB,MAAM,UAAU,CAAC,CAAC;AAAA,EACzE;AAGA,MAAI,CAAC,KAAK,eAAe;AACvB,UAAM,MAAM,iBAAiB,EAAE,KAAK,KAAK,KAAK,KAAK,WAAW,QAAQ,CAAC;AACvE,QAAI,KAAK,GAAG,IAAI,GAAG;AACnB,oBAAgB,KAAK,GAAG,IAAI,QAAQ;AACpC,eAAW,KAAK,IAAI,SAAU,MAAK,CAAC;AAAA,EACtC;AAGA,MAAI,MAAM,SAAS,GAAG;AACpB,QAAI;AAAA,MACF,GAAG,iBAAiB;AAAA,QAClB;AAAA,QACA,cAAc,MAAM;AAAA,QACpB;AAAA,QACA,OAAO,IAAI;AAAA,QACX,UAAU,IAAI;AAAA,MAChB,CAAC;AAAA,IACH;AACA,SAAK,WAAW,MAAM,MAAM,QAAQ,MAAM,WAAW,IAAI,KAAK,GAAG,UAAU;AAAA,EAC7E;AAEA,OAAK,qBAAgB;AACrB,QAAM,SAAS,MAAM,aAAa,KAAK;AAAA,IACrC,KAAK,KAAK;AAAA,IACV,MAAM,oBAAoB,IAAI;AAAA,EAChC,CAAC;AAED,QAAM,cAAc,GAAG,OAAO,OAAO,iBAAc,OAAO,OAAO,iBAAc,OAAO,SAAS;AAG/F,QAAM,OAAO,sBAAsB,EAAE,UAAU,OAAO,KAAK,QAAQ,CAAC;AACpE,QAAM,KAAK,KAAK,kBAAkB,qBAAqB,KAAK,GAAG;AAC/D,QAAM,kBAAkB,qBAAqB,IAAI,IAAI;AACrD,QAAM,UAAU,gBAAgB,SAAS;AAEzC,MAAI,KAAK,QAAQ;AACf,IAAAD,MAAK,aAAa,SAAS;AAC3B,QAAI,SAAS;AACX,MAAAA;AAAA,QACE;AAAA,UACE,aAAa,IAAI;AAAA,UACjB;AAAA,UACA,kBAAkB,EAAE;AAAA,UACpB,GAAG,gBAAgB,IAAI,CAAC,MAAM,KAAK,EAAE,KAAK,EAAE;AAAA,QAC9C,EAAE,KAAK,IAAI;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACA,YAAQ,uCAAuC;AAC/C;AAAA,EACF;AAEA,MAAI;AACJ,MAAI,CAAC,SAAS;AACZ,kBAAc;AAAA,EAChB,WAAW,KAAK,YAAY,OAAO;AACjC,kBAAc;AAAA,EAChB,WAAW,KAAK,YAAY,QAAQ,KAAK,KAAK;AAC5C,kBAAc;AAAA,EAChB,OAAO;AACL,IAAAA,MAAK,aAAa,IAAI,GAAG,gBAAgB,EAAE,EAAE;AAC7C,kBAAc,MAAML,SAAQ;AAAA,MAC1B,SAAS,OAAO,EAAE;AAAA,MAClB,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,MAAI,aAAa;AACf,SAAK,gCAAgC,EAAE,QAAG;AAC1C,UAAM,WAAW,iBAAiB;AAAA,MAChC,KAAK,KAAK;AAAA,MACV,WAAW,CAAC,QAAQ,OAAO,OAAO,KAAK,IAAI,KAAK,EAAE;AAAA,IACpD,CAAC;AACD,WAAO;AAAA,MACL,aAAa,OAAO,KAAK,KAAK,YAAY,EAAE,MAAM,cAAc,OAAO,KAAK,KAAK,eAAe,EAAE,MAAM,iBACtG,OAAO,KAAK,KAAK,YAAY,EAAE,SAC7B,OAAO,KAAK,KAAK,eAAe,EAAE,WACpC,IACI,MACA,KACN;AAAA,IACF;AAAA,EACF,WAAW,SAAS;AAGlB,IAAAK;AAAA,MACE;AAAA,QACE,aAAa,IAAI;AAAA,QACjB;AAAA,QACA;AAAA,QACA,GAAG,gBAAgB,IAAI,CAAC,MAAM,KAAK,EAAE,KAAK,EAAE;AAAA,MAC9C,EAAE,KAAK,IAAI;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,aAAa,EAAE,KAAK,MAAM,CAAC;AAC7C,MAAI,UAAU,SAAS,GAAG;AACxB,IAAAA,MAAK,UAAU,KAAK,MAAM,GAAG,aAAa;AAAA,EAC5C;AAGA,QAAM,QAAkB;AAAA,IACtB,GAAGN,IAAG,KAAK,GAAG,CAAC,KAAKA,IAAG,KAAK,sCAAsC,CAAC;AAAA,gBAAmB,IAAI,MAAM,MAAM;AAAA,EACxG;AACA,MAAI,UAAU;AACd,aAAW,WAAW,iBAAiB;AACrC,UAAM,KAAK,GAAGA,IAAG,KAAK,OAAO,SAAS,CAAC,CAAC,KAAKA,IAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,EAAK,QAAQ,QAAQ,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,EACzI;AACA,QAAM;AAAA,IACJ,GAAGA,IAAG,KAAK,OAAO,SAAS,CAAC,CAAC,KAAKA,IAAG,KAAK,6BAA6B,CAAC;AAAA,oCAAuCA,IAAG,IAAI,6BAA6B,CAAC;AAAA,qCAAwCA,IAAG,IAAI,4BAA4B,CAAC;AAAA,qCAAwCA,IAAG,IAAI,4BAA4B,CAAC;AAAA,EAC9S;AAEA,EAAAM,MAAK,MAAM,KAAK,MAAM,GAAG,YAAY;AACrC,SAAO,KAAK,WAAW;AACvB,UAAQ,UAAU;AACpB;;;A0BvfA,OAAOE,SAAQ;AAuCf,IAAMC,uBAAsB,CAAC,SAA0C;AACrE,MAAI,KAAK,OAAQ,QAAO;AACxB,MAAI,KAAK,MAAO,QAAO;AACvB,SAAO;AACT;AAEO,IAAM,SAAS,OAAO,SAA2C;AACtE,WAAS,mDAAmD;AAE5D,QAAM,MAAM,WAAW,KAAK,GAAG;AAC/B,QAAM,QAAQ,aAAa,KAAK,KAAK,GAAG;AACxC,QAAM,WAAW,aAAa;AAE9B,MAAI,QAAQ,KAAK;AACjB,MAAI,KAAK,IAAK,SAAQ,SAAS,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI;AAEtD,MAAI,MAAM,WAAW,GAAG;AACtB,QAAI,KAAK,KAAK;AACZ,cAAQ,oFAAoF;AAC5F;AAAA,IACF;AACA,YAAQ,MAAM,UAAU,SAAS,KAAK;AACtC,QAAI,MAAM,WAAW,GAAG;AACtB,cAAQ,mBAAmB;AAC3B;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAQ,aAAa,UAAU,KAAK;AAC1C,QAAM,YAAY,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,SAAS,EAAE,IAAI,CAAC;AAE7D,MAAI,UAAU,SAAS,GAAG;AACxB,IAAAC;AAAA,MACE,UAAU,IAAI,CAAC,MAAM,GAAGC,IAAG,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,IAAIA,IAAG,IAAI,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI;AAAA,MAC7E,4BAA4B,UAAU,MAAM;AAAA,IAC9C;AAAA,EACF;AAEA,QAAM,MAAgB,iBAAiB;AAAA,IACrC;AAAA,IACA,cAAc,MAAM;AAAA,IACpB;AAAA,IACA,OAAO,IAAI;AAAA,IACX,UAAU,IAAI;AAAA,EAChB,CAAC;AAMD,MAAI,IAAI,UAAU,SAAS;AACzB,QAAI,KAAK,yBAAyB,EAAE,iBAAiB,MAAM,UAAU,CAAC,CAAC;AAAA,EACzE;AAEA,OAAK,WAAW,MAAM,MAAM,QAAQ,MAAM,WAAW,IAAI,KAAK,GAAG,KAAK,IAAI,MAAM,QAAQ,IAAI,WAAW,IAAI,KAAK,GAAG,SAAI;AACvH,QAAM,SAAS,MAAM,aAAa,KAAK;AAAA,IACrC,KAAK,KAAK;AAAA,IACV,MAAMF,qBAAoB,IAAI;AAAA,EAChC,CAAC;AAED,QAAM,UAAU,GAAG,OAAO,OAAO,iBAAc,OAAO,OAAO,iBAAc,OAAO,SAAS;AAG3F,QAAM,UAAU,cAAc,KAAK,GAAG;AACtC,QAAM,OAAO,mBAAmB,UAAU,OAAO,OAAO;AACxD,QAAM,KAAK,KAAK,kBAAkB,qBAAqB,KAAK,GAAG;AAC/D,QAAM,kBAAkB,qBAAqB,IAAI,IAAI;AACrD,QAAM,UAAU,gBAAgB,SAAS;AAEzC,MAAI,KAAK,QAAQ;AACf,IAAAC,MAAK,SAAS,SAAS;AACvB,QAAI,SAAS;AACX,MAAAA;AAAA,QACE;AAAA,UACE,aAAa,IAAI;AAAA,UACjB;AAAA,UACA,kBAAkB,EAAE;AAAA,UACpB,GAAG,gBAAgB,IAAI,CAAC,MAAM,KAAK,EAAE,KAAK,EAAE;AAAA,QAC9C,EAAE,KAAK,IAAI;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACA,YAAQ,uCAAuC;AAC/C;AAAA,EACF;AAEA,MAAI;AACJ,MAAI,CAAC,SAAS;AACZ,kBAAc;AAAA,EAChB,WAAW,KAAK,YAAY,OAAO;AACjC,kBAAc;AAAA,EAChB,WAAW,KAAK,YAAY,QAAQ,KAAK,KAAK;AAC5C,kBAAc;AAAA,EAChB,OAAO;AACL,IAAAA,MAAK,aAAa,IAAI,GAAG,gBAAgB,EAAE,EAAE;AAC7C,kBAAc,MAAME,SAAQ;AAAA,MAC1B,SAAS,OAAO,EAAE;AAAA,MAClB,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,MAAI,aAAa;AACf,SAAK,gCAAgC,EAAE,QAAG;AAC1C,UAAM,WAAW,iBAAiB;AAAA,MAChC,KAAK,KAAK;AAAA,MACV,WAAW,CAAC,QAAQ,OAAO,OAAO,KAAK,IAAI,KAAK,EAAE;AAAA,IACpD,CAAC;AAAA,EACH,WAAW,SAAS;AAClB,IAAAF;AAAA,MACE;AAAA,QACE,aAAa,IAAI;AAAA,QACjB;AAAA,QACA;AAAA,QACA,GAAG,gBAAgB,IAAI,CAAC,MAAM,KAAK,EAAE,KAAK,EAAE;AAAA,MAC9C,EAAE,KAAK,IAAI;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,aAAa,EAAE,KAAK,MAAM,CAAC;AAC7C,MAAI,UAAU,SAAS,GAAG;AACxB,IAAAA,MAAK,UAAU,KAAK,MAAM,GAAG,aAAa;AAAA,EAC5C;AAEA,SAAO,KAAK,OAAO;AACnB,UAAQ,SAAS,MAAM,MAAM,QAAQ,MAAM,WAAW,IAAI,KAAK,GAAG,GAAG;AACvE;AAOA,IAAM,qBAAqB,CACzB,UACA,OACA,YACG;AACH,QAAM,eAAuC,CAAC;AAC9C,QAAM,UAA0D,CAAC;AACjE,QAAM,OAAO,SAAS;AACtB,aAAW,QAAQ,OAAO;AACxB,eAAW,OAAO,KAAK,cAAc;AACnC,YAAM,UAAU,KAAK,gBAAgB,GAAG;AACxC,UAAI,CAAC,QAAS;AACd,UAAI,QAAQ,aAAa,IAAI,GAAG,GAAG;AACjC,YAAI,CAAC,QAAQ,KAAK,CAAC,UAAU,MAAM,SAAS,GAAG,GAAG;AAChD,kBAAQ,KAAK,EAAE,MAAM,KAAK,QAAQ,mBAAmB,CAAC;AAAA,QACxD;AACA;AAAA,MACF;AACA,mBAAa,GAAG,IAAI;AAAA,IACtB;AAAA,EACF;AACA,SAAO,EAAE,cAAc,iBAAiB,CAAC,GAAG,QAAQ;AACtD;AAEA,IAAM,YAAY,OAAO,QACvBG,aAAY;AAAA,EACV,SAAS,uBAAuBF,IAAG,IAAI,qCAAqC,CAAC;AAAA,EAC7E,SAAS,mBAAmB,GAAG;AAAA,EAC/B,UAAU;AACZ,CAAC;;;ACzMH,OAAOG,SAAQ;AAaR,IAAM,UAAU,CAAC,SAAmC;AACzD,QAAM,WAAW,aAAa;AAE9B,MAAI,KAAK,MAAM;AACb,YAAQ,OAAO,MAAM,KAAK,UAAU,UAAU,MAAM,CAAC,IAAI,IAAI;AAC7D;AAAA,EACF;AAEA,QAAM,aAAa,SAAS,OAAO,OAAO;AAC1C,QAAM,cAAc,SAAS,OAAO,MAAM;AAC1C,QAAM,eAAe,SAAS,OAAO,QAAQ;AAC7C;AAAA,IACE,GAAG,SAAS,MAAM,MAAM,eAAY,UAAU,gBAAa,WAAW,eAAY,YAAY;AAAA,EAChG;AAEA,QAAM,KAAK,SAAS,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,UAAU,IAAI;AAClF,QAAM,aAAa,SAAS,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,UAAU,YAAY;AAClG,QAAM,QAAQ,SAAS,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM;AAC5D,QAAM,OAAO,SAAS,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK;AAE1D,QAAM,eAAe,CAAC,OAAe,UAA0B;AAC7D,QAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,UAAM,OAAO,MACV,IAAI,CAAC,MAAM;AACV,YAAM,OAAO,EAAE,KAAK,SAASC,IAAG,IAAI,WAAW,EAAE,KAAK,KAAK,IAAI,CAAC,EAAE,IAAI;AACtE,aAAO,KAAKA,IAAG,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI;AAAA,IAC/C,CAAC,EACA,KAAK,IAAI;AACZ,WAAO,GAAGA,IAAG,KAAK,KAAK,CAAC,IAAIA,IAAG,IAAI,IAAI,MAAM,MAAM,GAAG,CAAC;AAAA,EAAK,IAAI;AAAA,EAClE;AAEA,QAAM,SAAS;AAAA,IACb,aAAa,iBAAiB,EAAE;AAAA,IAChC,aAAa,cAAc,UAAU;AAAA,IACrC,aAAa,SAAS,KAAK;AAAA,IAC3B,aAAa,aAAa,IAAI;AAAA,EAChC,EAAE,OAAO,OAAO;AAEhB,EAAAC,MAAK,OAAO,KAAK,MAAM,GAAG,UAAU;AAEpC,QAAM,iBAAiB,CAAC,OAAe,aAAgC;AACrE,QAAI,SAAS,WAAW,EAAG;AAC3B,UAAM,OAAO,SACV,IAAI,CAAC,MAAM,KAAKD,IAAG,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,GAAGA,IAAG,IAAI,EAAE,WAAW,CAAC,EAAE,EAClE,KAAK,IAAI;AACZ,IAAAC,MAAK,MAAM,KAAK;AAAA,EAClB;AAEA,iBAAe,UAAU,SAAS,OAAO,MAAM;AAC/C,iBAAe,SAAS,SAAS,OAAO,KAAK;AAC7C,iBAAe,WAAW,SAAS,OAAO,OAAO;AAEjD,UAAQ,OAAOD,IAAG,KAAK,uBAAuB,CAAC,6BAA6B;AAC9E;","names":["join","relative","pc","pc","p","pc","pc","select","multiselect","confirm","note","pc","readFileSync","existsSync","join","relative","existsSync","readFileSync","dirname","dirname","existsSync","readFileSync","join","p","relative","existsSync","readFileSync","readFileSync","join","existsSync","readFileSync","join","relative","existsSync","readFileSync","dirname","join","fileURLToPath","dirname","fileURLToPath","join","existsSync","p","readFileSync","posix","sep","indent","toPosix","p","sep","posix","indent","pc","toPosix","indent","p","existsSync","readFileSync","relative","join","existsSync","readFileSync","join","p","existsSync","readFileSync","writeFileSync","join","join","existsSync","p","readFileSync","join","existsSync","readFileSync","join","select","pc","confirm","relative","p","cfg","multiselect","note","join","pc","resolveConflictMode","note","pc","confirm","multiselect","pc","pc","note"]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/init.ts","../src/lib/fs-ops.ts","../src/lib/errors.ts","../src/lib/logger.ts","../src/lib/ui.ts","../src/lib/styles.ts","../src/lib/registry.ts","../src/lib/components.ts","../src/lib/css-orchestrate.ts","../src/lib/templates.ts","../src/frameworks/shared.ts","../src/lib/postcss-plugins.ts","../src/frameworks/vite-react/index.ts","../src/frameworks/next/index.ts","../src/frameworks/tanstack-start/index.ts","../src/frameworks/astro/index.ts","../src/frameworks/electron-vite/index.ts","../src/frameworks/renderers.ts","../src/lib/css-config.ts","../src/lib/css-inline.ts","../src/lib/detect.ts","../src/frameworks/meta.ts","../src/lib/config.ts","../src/lib/units.ts","../src/lib/installer.ts","../src/lib/unit-hints.ts","../src/commands/add.ts","../src/commands/list.ts"],"sourcesContent":["import { join, relative } from \"node:path\";\nimport pc from \"picocolors\";\n\nimport { applyFileOps, type ConflictMode, type FileOp } from \"../lib/fs-ops.js\";\nimport { planStylesOps, planUtilitiesGitignoreOp } from \"../lib/styles.js\";\nimport { planComponentOps } from \"../lib/components.js\";\nimport { planCssConfigOps } from \"../lib/css-orchestrate.js\";\nimport {\n detectProject,\n describeProject,\n suggestTemplate,\n type ProjectInfo,\n} from \"../lib/detect.js\";\nimport {\n getFrameworkLabel,\n getInlineHostPath,\n supportsPrettyCssModules,\n} from \"../frameworks/meta.js\";\nimport {\n CSS_CONFIG_PLACEMENTS,\n SUPPORTED_TEMPLATES,\n type CssConfigPlacement,\n type ComponentsConfig,\n type FrameworkTemplate,\n configExists,\n loadConfig,\n makeDefaultConfig,\n resolvePaths,\n} from \"../lib/config.js\";\nimport {\n findColor,\n findRadius,\n findSpacing,\n loadRegistry,\n resolveUnits,\n type LoadedRegistry,\n} from \"../lib/registry.js\";\nimport { groupedUnitOptions } from \"../lib/units.js\";\nimport {\n headline,\n goodbye,\n select,\n multiselect,\n confirm,\n note,\n step,\n info,\n warn,\n} from \"../lib/ui.js\";\nimport { logger } from \"../lib/logger.js\";\nimport {\n buildInstallCommands,\n computeDependencyPlan,\n describePlan,\n detectPackageManager,\n runInstall,\n type PackageManager,\n} from \"../lib/installer.js\";\nimport { getUnitHints } from \"../lib/unit-hints.js\";\n\nexport interface InitCommandOptions {\n cwd: string;\n template?: FrameworkTemplate;\n srcDir?: string;\n alias?: string;\n color?: string;\n radius?: string;\n spacing?: string;\n yes?: boolean;\n force?: boolean;\n dryRun?: boolean;\n skipStyles?: boolean;\n skipCssConfig?: boolean;\n withUtilities?: boolean;\n cssConfigPlacement?: CssConfigPlacement;\n prettyCssModules?: boolean;\n /** Rewrite components.json even if it already exists */\n overwriteConfig?: boolean;\n /** Pre-selected component names to copy during init. If omitted and yes=false, an interactive multi-select runs. */\n components?: string[];\n /** Copy every unit in the registry (library mode). Overrides `components` when true. */\n all?: boolean;\n /** Scaffold styles + tokens + postcss config + components.json only. No components/hooks/libs. */\n skipComponents?: boolean;\n /**\n * Auto-install runtime + dev dependencies after scaffolding. `true` by default.\n * When unset and `yes` is false, the CLI prompts for confirmation.\n * Force-disable with `install: false` (programmatic use) or `--no-install`.\n */\n install?: boolean;\n /** Force a specific package manager instead of auto-detecting from lockfiles. */\n packageManager?: PackageManager;\n}\n\nconst resolveConflictMode = (opts: InitCommandOptions): ConflictMode => {\n if (opts.dryRun) return \"dry-run\";\n if (opts.force) return \"force\";\n return \"prompt\";\n};\n\ntype EffectiveCssPlacement = Exclude<CssConfigPlacement, \"auto\">;\n\ninterface ResolvedPlacement {\n preference: CssConfigPlacement;\n effective: EffectiveCssPlacement;\n hostPath: string | null;\n fallbackReason?: string;\n}\n\n/**\n * Resolve the user's `cssConfig.placement` preference into a concrete\n * effective placement (`inline` or `file`). Next.js is locked to `file`;\n * `auto` chooses `inline` when a host config (vite.config.ts, etc.) is\n * detected and `file` otherwise; `inline` falls back to `file` with a\n * warning when no host config is present.\n */\nconst resolveEffectivePlacement = (\n template: FrameworkTemplate,\n preference: CssConfigPlacement,\n project: ProjectInfo,\n): ResolvedPlacement => {\n const hostPath = getInlineHostPath(template, project);\n\n if (template === \"next\") {\n return {\n preference,\n effective: \"file\",\n hostPath: null,\n fallbackReason:\n preference === \"file\"\n ? undefined\n : \"Next.js uses a standalone postcss.config.js in this CLI.\",\n };\n }\n if (preference === \"auto\") {\n // `file` is the default for `auto` because a standalone postcss.config.*\n // keeps plugin types out of the host config (vite.config.ts, etc.) - which\n // otherwise triggers TS dual-module resolution errors when the consumer\n // and Vite bundle different `postcss` versions.\n return { preference, effective: \"file\", hostPath };\n }\n if (preference === \"inline\" && !hostPath) {\n return {\n preference,\n effective: \"file\",\n hostPath,\n fallbackReason:\n \"No inline config host was detected for this template; using standalone PostCSS config.\",\n };\n }\n return { preference, effective: preference, hostPath };\n};\n\nconst promptForConfig = async (\n opts: InitCommandOptions,\n project: ProjectInfo,\n registry: LoadedRegistry,\n): Promise<ComponentsConfig> => {\n const suggestedTemplate = suggestTemplate(project);\n\n const template = opts.template\n ? opts.template\n : opts.yes\n ? suggestedTemplate ?? \"vite-react\"\n : await select<FrameworkTemplate>({\n message: \"Which framework are you scaffolding for?\",\n options: SUPPORTED_TEMPLATES.map((t) => ({\n value: t,\n label: getFrameworkLabel(t) + (t === suggestedTemplate ? pc.dim(\" (detected)\") : \"\"),\n })),\n initialValue: suggestedTemplate ?? \"vite-react\",\n });\n\n const colorOptions = registry.themes.colors.map((t) => ({\n value: t.id,\n label: t.label,\n hint: t.description,\n }));\n const color = opts.color\n ? opts.color\n : opts.yes\n ? \"default\"\n : await select<string>({\n message: \"Pick a color palette\",\n options: colorOptions,\n initialValue: \"default\",\n });\n\n const radiusOptions = registry.themes.radii.map((t) => ({\n value: t.id,\n label: t.label,\n hint: t.description,\n }));\n const radius = opts.radius\n ? opts.radius\n : opts.yes\n ? \"default\"\n : await select<string>({\n message: \"Pick a radius scale\",\n options: radiusOptions,\n initialValue: \"default\",\n });\n\n const spacingOptions = registry.themes.spacing.map((t) => ({\n value: t.id,\n label: t.label,\n hint: t.description,\n }));\n const spacing = opts.spacing\n ? opts.spacing\n : opts.yes\n ? \"default\"\n : await select<string>({\n message: \"Pick a spacing scale\",\n options: spacingOptions,\n initialValue: \"default\",\n });\n\n let pretty = opts.prettyCssModules ?? false;\n if (!opts.yes && supportsPrettyCssModules(template) && opts.prettyCssModules === undefined) {\n pretty = await confirm({\n message: \"Use human-readable CSS Modules class names? (great in devtools)\",\n initialValue: true,\n });\n }\n\n let utilities = opts.withUtilities ?? false;\n if (!opts.yes && opts.withUtilities === undefined) {\n utilities = await confirm({\n message: \"Include postcss-token-utilities? (adds token-driven utility classes like p-4, bg-primary)\",\n initialValue: false,\n });\n }\n\n let placement: CssConfigPlacement = opts.cssConfigPlacement ?? \"auto\";\n if (!opts.yes && opts.cssConfigPlacement === undefined && template !== \"next\") {\n const hostPath = getInlineHostPath(template, project);\n const hostLabel = hostPath\n ? relative(opts.cwd, hostPath) || hostPath\n : \"none detected\";\n placement = await select<CssConfigPlacement>({\n message: \"How should CSS plugins be wired?\",\n options: CSS_CONFIG_PLACEMENTS.map((p) => ({\n value: p,\n label: p,\n hint:\n p === \"auto\"\n ? \"recommended: standalone postcss.config.*\"\n : p === \"inline\"\n ? `inject into ${hostLabel}`\n : \"write a standalone postcss.config.*\",\n })),\n initialValue: \"auto\",\n });\n }\n\n return makeDefaultConfig({\n template,\n srcDir: opts.srcDir,\n alias: opts.alias,\n color,\n radius,\n spacing,\n pretty,\n utilities,\n cssConfigPlacement: placement,\n });\n};\n\nconst resolveConfig = async (\n opts: InitCommandOptions,\n project: ProjectInfo,\n registry: LoadedRegistry,\n): Promise<{ cfg: ComponentsConfig; existed: boolean }> => {\n if (configExists(opts.cwd) && !opts.overwriteConfig) {\n const cfg = loadConfig(opts.cwd);\n if (opts.srcDir) cfg.srcDir = opts.srcDir;\n if (opts.alias) cfg.alias = opts.alias;\n if (opts.color) cfg.theme.color = opts.color;\n if (opts.radius) cfg.theme.radius = opts.radius;\n if (opts.spacing) cfg.theme.spacing = opts.spacing;\n if (opts.prettyCssModules !== undefined) cfg.cssModules.pretty = opts.prettyCssModules;\n if (opts.withUtilities !== undefined) cfg.utilities.enabled = opts.withUtilities;\n if (opts.cssConfigPlacement !== undefined) cfg.cssConfig.placement = opts.cssConfigPlacement;\n return { cfg, existed: true };\n }\n const cfg = await promptForConfig(opts, project, registry);\n return { cfg, existed: false };\n};\n\nconst pickInitialComponents = async (\n opts: InitCommandOptions,\n registry: LoadedRegistry,\n): Promise<string[]> => {\n if (opts.skipComponents) return [];\n if (opts.all) return registry.units.map((u) => u.name);\n if (opts.components && opts.components.length > 0) return opts.components;\n if (opts.yes) return [];\n\n const addNow = await confirm({\n message: \"Copy components/hooks into your project now?\",\n initialValue: false,\n });\n if (!addNow) return [];\n\n return multiselect({\n message: `Select units to copy ${pc.dim(\"(space to toggle, enter to confirm - leave empty to skip)\")}`,\n options: groupedUnitOptions(registry.units),\n initialValues: [],\n required: false,\n });\n};\n\nexport const runInit = async (opts: InitCommandOptions): Promise<void> => {\n if (opts.skipComponents && (opts.all || (opts.components && opts.components.length > 0))) {\n throw new Error(\"error: --skip-components cannot be combined with --all or --components\");\n }\n\n headline(\"Scaffold tokens, theme, PostCSS, and optionally copy components.\");\n\n const registry = loadRegistry();\n const project = detectProject(opts.cwd);\n const { cfg, existed } = await resolveConfig(opts, project, registry);\n findColor(registry, cfg.theme.color);\n findRadius(registry, cfg.theme.radius);\n findSpacing(registry, cfg.theme.spacing);\n const placement = resolveEffectivePlacement(\n cfg.template,\n cfg.cssConfig.placement,\n project,\n );\n const paths = resolvePaths(opts.cwd, cfg);\n\n const detected =\n project.isVite || project.isNext || project.isAstro ||\n project.isTanstackStart || project.isElectronVite;\n const summary = [\n `${pc.bold(\"framework\")} ${cfg.template}`,\n `${pc.bold(\"color\")} ${cfg.theme.color}`,\n `${pc.bold(\"radius\")} ${cfg.theme.radius}`,\n `${pc.bold(\"spacing\")} ${cfg.theme.spacing}`,\n `${pc.bold(\"srcDir\")} ${cfg.srcDir}`,\n `${pc.bold(\"alias\")} ${cfg.alias}`,\n `${pc.bold(\"css\")} ${placement.preference} → ${placement.effective}`,\n detected ? `${pc.bold(\"detected\")} ${describeProject(project)}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n note(summary, \"configuration\");\n\n if (placement.fallbackReason) warn(placement.fallbackReason);\n\n const componentNames = await pickInitialComponents(opts, registry);\n const units = componentNames.length ? resolveUnits(registry, componentNames) : [];\n\n const ops: FileOp[] = [];\n const snippetsToPrint: Array<{ title: string; content: string }> = [];\n\n // ── components.json ───────────────────────────────────────────────────────\n if (!existed || opts.overwriteConfig) {\n ops.push({\n target: join(opts.cwd, \"components.json\"),\n content: JSON.stringify(cfg, null, 2) + \"\\n\",\n label: \"components.json\",\n });\n }\n\n // ── styles (with theme override) ──────────────────────────────────────────\n if (!opts.skipStyles) {\n ops.push(\n ...planStylesOps({\n registry,\n targetStylesDir: paths.stylesDir,\n color: cfg.theme.color,\n radius: cfg.theme.radius,\n spacing: cfg.theme.spacing,\n }),\n );\n }\n\n // Opted-in token utilities generate `utilities.gen.css` on every build.\n // Co-locate a `.gitignore` so consumers don't check the generated file in.\n if (cfg.utilities.enabled) {\n ops.push(planUtilitiesGitignoreOp({ targetStylesDir: paths.stylesDir }));\n }\n\n // ── CSS config ────────────────────────────────────────────────────────────\n if (!opts.skipCssConfig) {\n const css = planCssConfigOps({ cwd: opts.cwd, cfg, placement, project });\n ops.push(...css.ops);\n snippetsToPrint.push(...css.snippets);\n for (const w of css.warnings) warn(w);\n }\n\n // ── selected components ──────────────────────────────────────────────────\n if (units.length > 0) {\n ops.push(\n ...planComponentOps({\n registry,\n targetSrcDir: paths.srcDir,\n units,\n paths: cfg.paths,\n template: cfg.template,\n }),\n );\n info(`planned ${units.length} unit${units.length === 1 ? \"\" : \"s\"} to copy`);\n }\n\n step(\"Writing files…\");\n const result = await applyFileOps(ops, {\n cwd: opts.cwd,\n mode: resolveConflictMode(opts),\n });\n\n const summaryLine = `${result.written} written · ${result.skipped} skipped · ${result.unchanged} unchanged`;\n\n // ── dependency install ────────────────────────────────────────────────────\n const plan = computeDependencyPlan({ registry, units, cfg, project });\n const pm = opts.packageManager ?? detectPackageManager(opts.cwd);\n const installCommands = buildInstallCommands(pm, plan);\n const hasWork = installCommands.length > 0;\n\n if (opts.dryRun) {\n note(summaryLine, \"dry run\");\n if (hasWork) {\n note(\n [\n describePlan(plan),\n \"\",\n `would run with ${pm}:`,\n ...installCommands.map((c) => ` ${c.label}`),\n ].join(\"\\n\"),\n \"dry run · install\",\n );\n }\n goodbye(\"Preview only - no files were touched.\");\n return;\n }\n\n let willInstall: boolean;\n if (!hasWork) {\n willInstall = false;\n } else if (opts.install === false) {\n willInstall = false;\n } else if (opts.install === true || opts.yes) {\n willInstall = true;\n } else {\n note(describePlan(plan), `install with ${pm}`);\n willInstall = await confirm({\n message: `Run ${pm} now to install the dependencies above?`,\n initialValue: true,\n });\n }\n\n if (willInstall) {\n step(`Installing dependencies with ${pm}…`);\n await runInstall(installCommands, {\n cwd: opts.cwd,\n onCommand: (cmd) => logger.action(`$ ${cmd.label}`),\n });\n logger.ok(\n `installed ${Object.keys(plan.dependencies).length} runtime + ${Object.keys(plan.devDependencies).length} dev dependenc${\n Object.keys(plan.dependencies).length +\n Object.keys(plan.devDependencies).length ===\n 1\n ? \"y\"\n : \"ies\"\n }`,\n );\n } else if (hasWork) {\n // User skipped install - surface the exact commands so they can run them\n // manually with the same package manager we detected.\n note(\n [\n describePlan(plan),\n \"\",\n \"run:\",\n ...installCommands.map((c) => ` ${c.label}`),\n ].join(\"\\n\"),\n `manual install (skipped)`,\n );\n }\n\n const unitHints = getUnitHints({ cfg, units });\n if (unitHints.length > 0) {\n note(unitHints.join(\"\\n\\n\"), \"usage hints\");\n }\n\n // ── next steps note ───────────────────────────────────────────────────────\n const steps: string[] = [\n `${pc.cyan(\"1\")} ${pc.bold(\"Import styles once at your app entry\")}\\n import \"./${cfg.paths.styles}/globals.css\";`,\n ];\n let stepIdx = 2;\n for (const snippet of snippetsToPrint) {\n steps.push(`${pc.cyan(String(stepIdx++))} ${pc.bold(snippet.title)}\\n${snippet.content.split(\"\\n\").map((l) => \" \" + l).join(\"\\n\")}`);\n }\n steps.push(\n `${pc.cyan(String(stepIdx))} ${pc.bold(\"Add more components anytime\")}\\n npx aplance-ui add <name> ${pc.dim(\"# e.g. button modal tooltip\")}\\n npx aplance-ui add ${pc.dim(\"# interactive multi-select\")}\\n npx aplance-ui list ${pc.dim(\"# see everything available\")}`,\n );\n\n note(steps.join(\"\\n\\n\"), \"next steps\");\n logger.info(summaryLine);\n goodbye(\"All set.\");\n};\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, relative } from \"node:path\";\nimport pc from \"picocolors\";\nimport * as p from \"@clack/prompts\";\nimport { AbortError } from \"./errors.js\";\nimport { logger } from \"./logger.js\";\nimport { unwrap } from \"./ui.js\";\n\nexport interface FileOp {\n target: string;\n content: string | Buffer;\n label: string;\n}\n\nexport type ConflictMode = \"prompt\" | \"force\" | \"skip\" | \"dry-run\";\n\nexport interface ApplyOptions {\n cwd: string;\n mode: ConflictMode;\n}\n\nexport interface ApplyResult {\n written: number;\n skipped: number;\n unchanged: number;\n}\n\nconst ensureDir = (filePath: string) => {\n const dir = dirname(filePath);\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n};\n\nconst sameContent = (target: string, content: string | Buffer): boolean => {\n if (!existsSync(target)) return false;\n try {\n if (Buffer.isBuffer(content)) {\n return readFileSync(target).equals(content);\n }\n return readFileSync(target, \"utf8\") === content;\n } catch {\n return false;\n }\n};\n\ntype PlanItem = { op: FileOp; action: \"write\" | \"skip\" | \"unchanged\" };\n\nconst planActions = async (\n ops: FileOp[],\n opts: ApplyOptions,\n): Promise<PlanItem[]> => {\n const plan: PlanItem[] = [];\n let bulk: \"all\" | \"skip-all\" | null = null;\n\n for (const op of ops) {\n if (sameContent(op.target, op.content)) {\n plan.push({ op, action: \"unchanged\" });\n continue;\n }\n if (!existsSync(op.target)) {\n plan.push({ op, action: \"write\" });\n continue;\n }\n\n if (opts.mode === \"force\") {\n plan.push({ op, action: \"write\" });\n continue;\n }\n if (opts.mode === \"skip\") {\n plan.push({ op, action: \"skip\" });\n continue;\n }\n if (opts.mode === \"dry-run\") {\n plan.push({ op, action: \"write\" });\n continue;\n }\n\n if (bulk === \"all\") {\n plan.push({ op, action: \"write\" });\n continue;\n }\n if (bulk === \"skip-all\") {\n plan.push({ op, action: \"skip\" });\n continue;\n }\n\n const choice = unwrap(\n await p.select({\n message: `${pc.yellow(\"exists\")} ${op.label}`,\n options: [\n { value: \"overwrite\", label: \"Overwrite\" },\n { value: \"skip\", label: \"Skip\" },\n { value: \"all\", label: \"Overwrite all remaining\" },\n { value: \"skip-all\", label: \"Skip all remaining\" },\n { value: \"abort\", label: \"Abort\" },\n ],\n initialValue: \"skip\",\n }),\n ) as \"overwrite\" | \"skip\" | \"all\" | \"skip-all\" | \"abort\";\n\n if (choice === \"abort\") throw new AbortError();\n if (choice === \"all\") {\n bulk = \"all\";\n plan.push({ op, action: \"write\" });\n } else if (choice === \"skip-all\") {\n bulk = \"skip-all\";\n plan.push({ op, action: \"skip\" });\n } else {\n plan.push({ op, action: choice === \"overwrite\" ? \"write\" : \"skip\" });\n }\n }\n\n return plan;\n};\n\nexport const applyFileOps = async (\n ops: FileOp[],\n opts: ApplyOptions,\n): Promise<ApplyResult> => {\n const plan = await planActions(ops, opts);\n\n if (opts.mode === \"dry-run\") {\n for (const { op, action } of plan) {\n const rel = relative(opts.cwd, op.target);\n if (action === \"write\") logger.action(`would write ${rel}`);\n else if (action === \"skip\") logger.action(`would skip ${rel}`);\n else logger.action(`unchanged ${logger.dim(rel)}`);\n }\n return {\n written: plan.filter((x) => x.action === \"write\").length,\n skipped: plan.filter((x) => x.action === \"skip\").length,\n unchanged: plan.filter((x) => x.action === \"unchanged\").length,\n };\n }\n\n let written = 0;\n let skipped = 0;\n let unchanged = 0;\n\n for (const { op, action } of plan) {\n const rel = relative(opts.cwd, op.target);\n if (action === \"write\") {\n try {\n ensureDir(op.target);\n writeFileSync(op.target, op.content);\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n throw new Error(\n `Failed to write ${rel}: ${reason}\\n` +\n `${written} file(s) were already written before this failure. ` +\n `Fix the underlying issue (permissions? disk space?) and re-run - ` +\n `identical files will be detected as unchanged and skipped.`,\n { cause: err },\n );\n }\n logger.ok(`wrote ${rel}`);\n written++;\n } else if (action === \"skip\") {\n logger.action(`skip ${logger.dim(rel)}`);\n skipped++;\n } else {\n unchanged++;\n }\n }\n\n return { written, skipped, unchanged };\n};\n","export type CliErrorCode =\n | \"E_CONFIG_INVALID\"\n | \"E_CONFIG_MISSING\"\n | \"E_TEMPLATE_MISSING\"\n | \"E_TEMPLATE_RENDER\"\n | \"E_REGISTRY_MISSING\"\n | \"E_UNKNOWN_UNIT\"\n | \"E_UNKNOWN_THEME\"\n | \"E_UNKNOWN_TEMPLATE\"\n | \"E_ABORTED\";\n\nexport class CliError extends Error {\n code: CliErrorCode;\n hint?: string;\n\n constructor(code: CliErrorCode, message: string, hint?: string) {\n super(message);\n this.name = \"CliError\";\n this.code = code;\n this.hint = hint;\n }\n}\n\nexport class ConfigError extends CliError {\n constructor(\n code: \"E_CONFIG_INVALID\" | \"E_CONFIG_MISSING\",\n message: string,\n hint?: string,\n ) {\n super(code, message, hint);\n this.name = \"ConfigError\";\n }\n}\n\nexport class TemplateError extends CliError {\n constructor(\n code: \"E_TEMPLATE_MISSING\" | \"E_TEMPLATE_RENDER\" | \"E_UNKNOWN_TEMPLATE\",\n message: string,\n hint?: string,\n ) {\n super(code, message, hint);\n this.name = \"TemplateError\";\n }\n}\n\nexport class RegistryError extends CliError {\n constructor(\n code: \"E_REGISTRY_MISSING\" | \"E_UNKNOWN_UNIT\" | \"E_UNKNOWN_THEME\",\n message: string,\n hint?: string,\n ) {\n super(code, message, hint);\n this.name = \"RegistryError\";\n }\n}\n\nexport class AbortError extends CliError {\n constructor(message = \"Aborted by user.\") {\n super(\"E_ABORTED\", message);\n this.name = \"AbortError\";\n }\n}\n\nexport const isCliError = (err: unknown): err is CliError =>\n err instanceof CliError;\n","import pc from \"picocolors\";\n\n/**\n * Line-oriented logger for non-prompt output.\n *\n * Prompt-style intro/outro/note/spinners live in `ui.ts` and delegate to\n * @clack/prompts. Use this when you want a one-line log entry (wrote/skip/etc.)\n * that plays nicely around clack's UI.\n */\nconst indent = (s: string, level: number) =>\n s\n .split(\"\\n\")\n .map((line) => \" \".repeat(level) + line)\n .join(\"\\n\");\n\nexport const logger = {\n ok: (msg: string, level = 0) =>\n console.log(indent(`${pc.green(\"✓\")} ${msg}`, level)),\n info: (msg: string, level = 0) =>\n console.log(indent(`${pc.cyan(\"◆\")} ${msg}`, level)),\n action: (msg: string, level = 0) =>\n console.log(indent(`${pc.gray(\"→\")} ${msg}`, level)),\n warn: (msg: string, level = 0) =>\n console.log(indent(`${pc.yellow(\"▲\")} ${msg}`, level)),\n error: (msg: string, level = 0) =>\n console.error(indent(`${pc.red(\"✗\")} ${msg}`, level)),\n dim: (msg: string) => pc.dim(msg),\n};\n","import * as p from \"@clack/prompts\";\nimport type { MultiSelectOptions, SelectOptions } from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { AbortError } from \"./errors.js\";\n\n/** Clack resolves a cancelled prompt to `CANCEL_SYMBOL`; this throws a friendly abort instead. */\nexport const unwrap = <T>(value: T | typeof p.CANCEL_SYMBOL): T => {\n if (p.isCancel(value)) throw new AbortError();\n return value;\n};\n\nconst brand = () => {\n const colours = [pc.magenta, pc.cyan, pc.blue];\n const gradient = \"aplance-ui\"\n .split(\"\")\n .map((ch, i) => colours[i % colours.length](ch))\n .join(\"\");\n return `${gradient} ${pc.dim(\"·\")} ${pc.dim(\"design system scaffolder\")}`;\n};\n\nexport const headline = (subtitle?: string) => {\n p.intro(brand());\n if (subtitle) p.log.message(pc.dim(subtitle));\n};\n\nexport const goodbye = (message: string) => p.outro(pc.green(message));\nexport const aborted = (message = \"Aborted.\") => p.outro(pc.yellow(message));\n\n// Clack's own option types, so callers' explicit type arguments\n// (`select<FrameworkTemplate>(...)`) resolve its `Option<T>` against a\n// concrete value type and no cast is needed.\nexport const select = async <T extends string>(\n opts: SelectOptions<T>,\n): Promise<T> => unwrap(await p.select(opts));\n\nexport const multiselect = async <T extends string>(\n opts: MultiSelectOptions<T>,\n): Promise<T[]> => unwrap(await p.multiselect(opts));\n\nexport const confirm = async (opts: {\n message: string;\n initialValue?: boolean;\n}): Promise<boolean> => unwrap(await p.confirm(opts));\n\nexport const note = (body: string, title?: string): void => p.note(body, title);\nexport const step = (message: string): void => p.log.step(message);\nexport const info = (message: string): void => p.log.info(message);\nexport const warn = (message: string): void => p.log.warn(message);\n","import { readdirSync, readFileSync, statSync, existsSync } from \"node:fs\";\nimport { join, relative, sep, posix } from \"node:path\";\nimport type { FileOp } from \"./fs-ops.js\";\nimport type { LoadedRegistry, ThemeDescriptor } from \"./registry.js\";\nimport { findColor, findRadius, findSpacing } from \"./registry.js\";\n\nexport interface StylesOptions {\n registry: LoadedRegistry;\n /** Absolute path to the consumer's target styles directory */\n targetStylesDir: string;\n /** Color palette id - \"default\" means no override */\n color: string;\n /** Radius scale id - \"default\" means no override */\n radius: string;\n /** Spacing scale id - \"default\" means no override */\n spacing: string;\n}\n\nexport interface UtilitiesGitignoreOptions {\n /** Absolute path to the consumer's target styles directory */\n targetStylesDir: string;\n}\n\n/**\n * When `postcss-token-utilities` is opted in, the build emits\n * `<stylesDir>/utilities.gen.css` on every run. Commit would churn\n * (content changes with every class-usage diff), so we co-locate a\n * `.gitignore` alongside the generated file. If the consumer already\n * has a `.gitignore` in that dir, `applyFileOps` surfaces the conflict\n * prompt and the user can merge by hand.\n */\nexport const planUtilitiesGitignoreOp = (\n opts: UtilitiesGitignoreOptions,\n): FileOp => ({\n target: join(opts.targetStylesDir, \".gitignore\"),\n content: GITIGNORE_BODY,\n label: \"styles/.gitignore\",\n});\n\nconst GITIGNORE_BODY =\n \"# Generated by postcss-token-utilities on every build - do not commit.\\n\" +\n \"utilities.gen.css\\n\";\n\nconst EXCLUDE_PATTERNS = [/\\.gen\\.css$/];\nconst BINARY_EXTENSIONS = /\\.(woff2?|ttf|otf|eot|png|jpe?g|gif|webp|avif|ico)$/i;\n\nconst toPosix = (p: string) => p.split(sep).join(posix.sep);\n\nconst walkStyles = (dir: string, base: string): string[] => {\n const out: string[] = [];\n for (const entry of readdirSync(dir)) {\n const full = join(dir, entry);\n if (statSync(full).isDirectory()) {\n out.push(...walkStyles(full, base));\n } else {\n const rel = toPosix(relative(base, full));\n if (EXCLUDE_PATTERNS.some((re) => re.test(rel))) continue;\n out.push(rel);\n }\n }\n return out;\n};\n\ninterface ThemeOverride {\n id: string;\n kind: \"color\" | \"radius\" | \"spacing\";\n css: string;\n}\n\nconst readOverride = (\n registry: LoadedRegistry,\n theme: ThemeDescriptor,\n kind: ThemeOverride[\"kind\"],\n): ThemeOverride | null => {\n if (!theme.file) return null;\n const abs = join(registry.root, theme.file);\n if (!existsSync(abs)) return null;\n return { id: theme.id, kind, css: readFileSync(abs, \"utf8\") };\n};\n\nexport const planStylesOps = (opts: StylesOptions): FileOp[] => {\n const sourceStylesDir = join(opts.registry.root, \"styles\");\n const relFiles = walkStyles(sourceStylesDir, sourceStylesDir);\n\n const overrides: ThemeOverride[] = [];\n const colorOverride = readOverride(\n opts.registry,\n findColor(opts.registry, opts.color),\n \"color\",\n );\n if (colorOverride) overrides.push(colorOverride);\n const radiusOverride = readOverride(\n opts.registry,\n findRadius(opts.registry, opts.radius),\n \"radius\",\n );\n if (radiusOverride) overrides.push(radiusOverride);\n const spacingOverride = readOverride(\n opts.registry,\n findSpacing(opts.registry, opts.spacing),\n \"spacing\",\n );\n if (spacingOverride) overrides.push(spacingOverride);\n\n return relFiles.map((relPath) => {\n const sourceAbs = join(sourceStylesDir, relPath);\n const targetAbs = join(opts.targetStylesDir, relPath);\n const isApp = relPath === \"app.css\";\n const content: string | Buffer = BINARY_EXTENSIONS.test(sourceAbs)\n ? readFileSync(sourceAbs)\n : isApp && overrides.length > 0\n ? mergeOverrides(readFileSync(sourceAbs, \"utf8\"), overrides)\n : readFileSync(sourceAbs, \"utf8\");\n return {\n target: targetAbs,\n content,\n label: `styles/${relPath}`,\n };\n });\n};\n\ninterface OverrideBlock {\n selector: string;\n vars: Array<[name: string, value: string]>;\n}\n\nconst escapeRegex = (s: string): string => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n/**\n * Parse a theme override CSS file into a flat list of selector blocks\n * with their custom-property declarations. Comments are stripped; the\n * shipped override files contain only `:root` and `[data-theme=\"...\"]`\n * blocks at the top level (no nesting), so a brace-balanced regex is\n * sufficient - no postcss dependency.\n */\nconst parseOverrideBlocks = (css: string): OverrideBlock[] => {\n const stripped = css.replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\");\n const blocks: OverrideBlock[] = [];\n const blockRe = /([^{}]+?)\\{([^{}]*)\\}/g;\n let m: RegExpExecArray | null;\n while ((m = blockRe.exec(stripped)) !== null) {\n const selector = m[1].trim();\n if (!selector) continue;\n const vars: Array<[string, string]> = [];\n const varRe = /(--[a-zA-Z0-9_-]+)\\s*:\\s*([^;]+);/g;\n let vm: RegExpExecArray | null;\n while ((vm = varRe.exec(m[2])) !== null) {\n vars.push([vm[1], vm[2].trim()]);\n }\n if (vars.length > 0) blocks.push({ selector, vars });\n }\n return blocks;\n};\n\n/**\n * Locate a top-level `selector { ... }` block in the base stylesheet,\n * returning the body slice bounds and the indentation used by existing\n * declarations (for inserting new ones).\n */\nconst findTopLevelBlock = (\n css: string,\n selector: string,\n): { bodyStart: number; bodyEnd: number; indent: string } | null => {\n const re = new RegExp(`(^|\\\\n)${escapeRegex(selector)}\\\\s*\\\\{`, \"g\");\n const m = re.exec(css);\n if (!m) return null;\n const bodyStart = css.indexOf(\"{\", m.index + m[1].length) + 1;\n let depth = 0;\n for (let i = bodyStart; i < css.length; i++) {\n const c = css[i];\n if (c === \"{\") depth++;\n else if (c === \"}\") {\n if (depth === 0) {\n const sample = css.slice(bodyStart, i).match(/\\n([ \\t]+)\\S/);\n return { bodyStart, bodyEnd: i, indent: sample ? sample[1] : \" \" };\n }\n depth--;\n }\n }\n return null;\n};\n\n/**\n * Merge variant overrides into the base stylesheet by patching `:root`\n * and `[data-theme=\"...\"]` blocks in place - replacing existing\n * declarations and inserting new ones - so the output reads as a\n * single hand-tuned file rather than appended duplicate blocks. If a\n * selector isn't present in the base, the whole block is appended.\n */\nconst mergeOverrides = (base: string, overrides: ThemeOverride[]): string => {\n let out = base;\n for (const o of overrides) {\n for (const block of parseOverrideBlocks(o.css)) {\n out = mergeBlock(out, block);\n }\n }\n return out;\n};\n\nconst mergeBlock = (base: string, block: OverrideBlock): string => {\n const loc = findTopLevelBlock(base, block.selector);\n if (!loc) {\n const lines = [\n `${block.selector} {`,\n ...block.vars.map(([n, v]) => ` ${n}: ${v};`),\n `}`,\n ];\n return `${base.replace(/\\s*$/, \"\")}\\n\\n${lines.join(\"\\n\")}\\n`;\n }\n let body = base.slice(loc.bodyStart, loc.bodyEnd);\n for (const [name, value] of block.vars) {\n const varRe = new RegExp(`(${escapeRegex(name)}\\\\s*:\\\\s*)[^;]+;`);\n if (varRe.test(body)) {\n body = body.replace(varRe, `$1${value};`);\n } else {\n body = body.replace(/([ \\t]*)$/, `${loc.indent}${name}: ${value};\\n$1`);\n }\n }\n return base.slice(0, loc.bodyStart) + body + base.slice(loc.bodyEnd);\n};\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { RegistryError } from \"./errors.js\";\n\n/**\n * Locate the bundled `registry/` directory that ships inside this CLI.\n *\n * Layout after publish: `<pkg>/dist/index.js` + `<pkg>/registry/*`.\n * Layout in dev (tsup watch): same - `packages/cli/dist/` + `packages/cli/registry/`.\n * Layout in source (unbundled, e.g. tests importing api.ts): walk up to find it.\n */\nconst resolveRegistryRoot = (): string => {\n const here = dirname(fileURLToPath(import.meta.url));\n for (const depth of [1, 2, 3, 4]) {\n const candidate = join(here, ...Array(depth).fill(\"..\"), \"registry\");\n if (existsSync(join(candidate, \"registry.json\"))) return candidate;\n }\n throw new RegistryError(\n \"E_REGISTRY_MISSING\",\n `Bundled registry not found next to the CLI binary.`,\n `This indicates a packaging problem - reinstall the aplance-ui CLI.`,\n );\n};\n\nexport type UnitKind = \"component\" | \"hook\" | \"lib\";\nexport type UnitGroup = \"ui\" | \"primitives\" | null;\n\nexport interface RegistryUnit {\n name: string;\n kind: UnitKind;\n group: UnitGroup;\n files: string[];\n /** Source files that should receive a Next.js \"use client\" directive. */\n clientFiles?: string[];\n deps: string[];\n /**\n * External npm packages (root specifiers, e.g. `react`, `@tanstack/react-table`)\n * this unit's source imports. The CLI uses `installMeta.packageVersions` to\n * resolve version ranges for each entry.\n */\n externalDeps: string[];\n}\n\nexport interface InstallMeta {\n baseDependencies: Record<string, string>;\n baseDevDependencies: Record<string, string>;\n utilitiesDevDependencies: Record<string, string>;\n packageVersions: Record<string, string>;\n}\n\nexport interface ThemeDescriptor {\n id: string;\n label: string;\n description: string;\n /** posix-style, relative to registry root. Empty string for the \"default\" variant. */\n file: string;\n}\n\nexport interface ThemeRegistry {\n colors: ThemeDescriptor[];\n radii: ThemeDescriptor[];\n spacing: ThemeDescriptor[];\n}\n\nexport interface Registry {\n version: number;\n generated: string;\n units: RegistryUnit[];\n themes?: ThemeRegistry;\n installMeta?: InstallMeta;\n}\n\nexport interface LoadedRegistry extends Registry {\n /** Absolute path to the bundled registry root (contains registry.json + sources). */\n root: string;\n themes: ThemeRegistry;\n installMeta: InstallMeta;\n}\n\nconst EXPECTED_VERSION = 4;\n\nconst EMPTY_INSTALL_META: InstallMeta = {\n baseDependencies: {},\n baseDevDependencies: {},\n utilitiesDevDependencies: {},\n packageVersions: {},\n};\n\nexport const loadRegistry = (): LoadedRegistry => {\n const root = resolveRegistryRoot();\n const manifestPath = join(root, \"registry.json\");\n const raw = readFileSync(manifestPath, \"utf8\");\n const parsed = JSON.parse(raw) as Registry;\n if (parsed.version !== EXPECTED_VERSION) {\n throw new RegistryError(\n \"E_REGISTRY_MISSING\",\n `Unsupported registry version ${parsed.version}. This CLI expects version ${EXPECTED_VERSION}.`,\n );\n }\n return {\n ...parsed,\n themes: parsed.themes ?? { colors: [], radii: [], spacing: [] },\n installMeta: parsed.installMeta ?? EMPTY_INSTALL_META,\n root,\n };\n};\n\nexport const resolveUnits = (\n registry: Registry,\n names: string[],\n): RegistryUnit[] => {\n const byName = new Map(registry.units.map((u) => [u.name, u]));\n\n for (const name of names) {\n if (!byName.has(name)) {\n throw new RegistryError(\n \"E_UNKNOWN_UNIT\",\n `Unknown unit \"${name}\".`,\n `Run \\`aplance-ui list\\` to see every available unit.`,\n );\n }\n }\n\n const visited = new Set<string>();\n const result: RegistryUnit[] = [];\n\n const visit = (name: string) => {\n if (visited.has(name)) return;\n visited.add(name);\n const unit = byName.get(name);\n if (!unit) return;\n for (const dep of unit.deps) visit(dep);\n result.push(unit);\n };\n\n for (const name of names) visit(name);\n return result;\n};\n\nexport const allUnitsInOrder = (registry: Registry): RegistryUnit[] =>\n resolveUnits(registry, registry.units.map((u) => u.name));\n\nconst pickVariant = (\n list: ThemeDescriptor[],\n id: string,\n dimensionLabel: string,\n): ThemeDescriptor => {\n const match = list.find((t) => t.id === id);\n if (!match) {\n const available = list.map((t) => t.id).join(\", \");\n throw new RegistryError(\n \"E_UNKNOWN_THEME\",\n `Unknown ${dimensionLabel} \"${id}\". Available: ${available}.`,\n );\n }\n return match;\n};\n\nexport const findColor = (registry: LoadedRegistry, id: string) =>\n pickVariant(registry.themes.colors, id, \"color\");\n\nexport const findRadius = (registry: LoadedRegistry, id: string) =>\n pickVariant(registry.themes.radii, id, \"radius\");\n\nexport const findSpacing = (registry: LoadedRegistry, id: string) =>\n pickVariant(registry.themes.spacing, id, \"spacing\");\n","import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { FileOp } from \"./fs-ops.js\";\nimport type { LoadedRegistry, RegistryUnit } from \"./registry.js\";\nimport type { ComponentsConfig, FrameworkTemplate } from \"./config.js\";\n\nexport interface ComponentsOptions {\n registry: LoadedRegistry;\n /** Absolute path to the consumer's target src/ directory */\n targetSrcDir: string;\n /** Units to copy (already dep-resolved and deduped) */\n units: RegistryUnit[];\n /** Remap rules for the first path segment (components / hooks / lib → configured names) */\n paths: ComponentsConfig[\"paths\"];\n /** Framework template controls framework-specific source adjustments. */\n template: FrameworkTemplate;\n}\n\nconst DEFAULT_SEGMENTS = [\"components\", \"hooks\", \"lib\"] as const;\ntype DefaultSegment = (typeof DEFAULT_SEGMENTS)[number];\n\nconst remap = (\n relFile: string,\n paths: ComponentsConfig[\"paths\"],\n): string => {\n const idx = relFile.indexOf(\"/\");\n if (idx === -1) return relFile;\n const head = relFile.slice(0, idx) as DefaultSegment | string;\n const tail = relFile.slice(idx + 1);\n if ((DEFAULT_SEGMENTS as readonly string[]).includes(head)) {\n const override = paths[head as DefaultSegment];\n return `${override}/${tail}`;\n }\n return relFile;\n};\n\nconst hasUseClientDirective = (content: string): boolean =>\n /^\\s*[\"']use client[\"'];?/.test(content);\n\nconst withUseClientDirective = (content: string): string =>\n hasUseClientDirective(content) ? content : `\"use client\";\\n\\n${content}`;\n\nexport const planComponentOps = (opts: ComponentsOptions): FileOp[] => {\n const ops: FileOp[] = [];\n for (const unit of opts.units) {\n const nextClientFiles = new Set(unit.clientFiles ?? []);\n for (const relFile of unit.files) {\n const sourceAbs = join(opts.registry.root, relFile);\n const mapped = remap(relFile, opts.paths);\n const targetAbs = join(opts.targetSrcDir, mapped);\n const sourceContent = readFileSync(sourceAbs, \"utf8\");\n const content =\n opts.template === \"next\" && nextClientFiles.has(relFile)\n ? withUseClientDirective(sourceContent)\n : sourceContent;\n ops.push({\n target: targetAbs,\n content,\n label: mapped,\n });\n }\n }\n return ops;\n};\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join, relative } from \"node:path\";\nimport type { ComponentsConfig, CssConfigPlacement } from \"./config.js\";\nimport {\n renderCssConfig,\n type CssConfigResult,\n type CssConfigSnippet,\n} from \"./css-config.js\";\nimport { applyInlineCssConfig } from \"./css-inline.js\";\nimport type { ProjectInfo } from \"./detect.js\";\nimport type { FileOp } from \"./fs-ops.js\";\n\nexport interface PlanCssConfigInput {\n cwd: string;\n cfg: ComponentsConfig;\n /** Already-resolved placement (auto → inline|file decided by init flow) */\n placement: {\n effective: Exclude<CssConfigPlacement, \"auto\">;\n hostPath: string | null;\n };\n project: ProjectInfo;\n}\n\nexport interface PlanCssConfigResult {\n ops: FileOp[];\n snippets: CssConfigSnippet[];\n warnings: string[];\n}\n\n/**\n * Plan the file operations + manual snippets for the CSS-plugin chain.\n *\n * Handles three outcomes uniformly:\n * - **standalone file** - render `postcss.config.*` (or framework variant)\n * and emit a write op.\n * - **inline injection** - patch the host config (`vite.config.ts`, …)\n * and emit a write op for that single file.\n * - **inline failure** - host config exists but couldn't be patched\n * safely (e.g. it already declares a `postcss:` block); fall back to a\n * standalone file, **and** push the manual snippet so the user can\n * wire it up by hand.\n */\nexport const planCssConfigOps = (input: PlanCssConfigInput): PlanCssConfigResult => {\n const { cwd, cfg, placement, project } = input;\n const ops: FileOp[] = [];\n const snippets: CssConfigSnippet[] = [];\n const warnings: string[] = [];\n\n const render = (p: Exclude<CssConfigPlacement, \"auto\">): CssConfigResult =>\n renderCssConfig({\n template: cfg.template,\n srcDir: cfg.srcDir,\n alias: cfg.alias,\n stylesRel: cfg.paths.styles,\n options: {\n withTokenUtilities: cfg.utilities.enabled,\n prettyCssModuleNames: cfg.cssModules.pretty,\n },\n placement: p,\n viteConfigExists: Boolean(project.viteConfigPath),\n });\n\n let result = render(placement.effective);\n\n if (placement.effective === \"inline\" && result.inline) {\n const hostPath = placement.hostPath;\n if (!hostPath || !existsSync(hostPath)) {\n warnings.push(\"Inline host config not found at apply-time. Falling back to standalone PostCSS config.\");\n result = render(\"file\");\n } else {\n const inline = applyInlineCssConfig({\n source: readFileSync(hostPath, \"utf8\"),\n plan: result.inline,\n });\n\n if (inline.ok && inline.content) {\n ops.push({\n target: hostPath,\n content: inline.content,\n label: relative(cwd, hostPath) || hostPath,\n });\n snippets.push(...result.snippets);\n result = { files: [], snippets: [] };\n } else {\n warnings.push(`Could not inline CSS plugins (${inline.reason ?? \"unknown reason\"}). Falling back to standalone PostCSS config.`);\n snippets.push(result.inline.manualSnippet);\n const fallback = render(\"file\");\n result = {\n files: fallback.files,\n snippets: [...result.snippets, ...fallback.snippets],\n };\n }\n }\n }\n\n for (const file of result.files) {\n ops.push({\n target: join(cwd, file.filename),\n content: file.content,\n label: file.label,\n });\n }\n snippets.push(...result.snippets);\n\n return { ops, snippets, warnings };\n};\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { TemplateError } from \"./errors.js\";\n\nconst HERE = dirname(fileURLToPath(import.meta.url));\n// Templates are collocated with each framework's renderer under\n// `src/frameworks/<name>/` (source) or `dist/frameworks/<name>/` (bundled).\n// Walk up until we find a sibling `frameworks/` dir so both layouts work.\nconst TEMPLATES_DIR = (() => {\n for (const depth of [0, 1, 2, 3]) {\n const candidate = join(HERE, ...Array(depth).fill(\"..\"), \"frameworks\");\n if (existsSync(candidate)) return candidate;\n }\n return join(HERE, \"..\", \"frameworks\");\n})();\n\nexport type TemplateVars = Record<string, string | boolean | undefined>;\n\nconst truthy = (v: unknown): boolean => Boolean(v);\n\nconst resolveTemplatePath = (name: string): string => {\n const p = join(TEMPLATES_DIR, name);\n if (!existsSync(p)) {\n throw new TemplateError(\n \"E_TEMPLATE_MISSING\",\n `Template not found: ${name} (looked in ${TEMPLATES_DIR}).`,\n `This is a CLI packaging bug - please file an issue.`,\n );\n }\n return p;\n};\n\nexport const loadTemplate = (name: string): string =>\n readFileSync(resolveTemplatePath(name), \"utf8\");\n\nexport const renderTemplate = (name: string, vars: TemplateVars): string => {\n let src = loadTemplate(name);\n\n // Conditional blocks (process first so {{var}} inside kept blocks still\n // resolve in the second pass).\n src = src.replace(\n /\\{\\{#(if|unless)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\}\\}([\\s\\S]*?)\\{\\{\\/\\1\\}\\}\\n?/g,\n (_full, kind: string, key: string, body: string) => {\n const keep = kind === \"if\" ? truthy(vars[key]) : !truthy(vars[key]);\n return keep ? body : \"\";\n },\n );\n\n // Simple substitution.\n src = src.replace(\n /\\{\\{\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\}\\}/g,\n (_full, key: string) => {\n if (!(key in vars)) {\n throw new TemplateError(\n \"E_TEMPLATE_RENDER\",\n `Template ${name} references unknown variable {{${key}}}.`,\n `This is a CLI bug - please file an issue.`,\n );\n }\n const v = vars[key];\n return v === undefined || v === false ? \"\" : String(v);\n },\n );\n\n return src;\n};\n\n","import { posix, sep } from \"node:path\";\r\nimport { renderTemplate } from \"../lib/templates.js\";\r\nimport { indent, renderPluginChain } from \"../lib/postcss-plugins.js\";\r\nimport type {\r\n CssConfigInlinePlan,\r\n CssConfigOptions,\r\n InlineConfigTarget,\r\n} from \"../lib/css-config.js\";\r\n\r\nexport const toPosix = (p: string): string => p.split(sep).join(posix.sep);\r\n\r\nexport const renderPluginStrings = (\r\n opts: CssConfigOptions,\r\n context: {\r\n srcDir: string;\r\n stylesRel: string;\r\n contentExtensions?: string[];\r\n },\r\n indentInvocations: number,\r\n): { imports: string; invocations: string } => {\r\n const chain = renderPluginChain({\r\n withTokenUtilities: opts.withTokenUtilities,\r\n srcDir: context.srcDir,\r\n stylesRel: context.stylesRel,\r\n contentExtensions: context.contentExtensions,\r\n });\r\n const imports = chain.imports.join(\"\\n\");\r\n const invocations = chain.invocations\r\n .map((inv) => indent(inv, indentInvocations))\r\n .join(\"\\n\");\r\n return { imports, invocations };\r\n};\r\n\r\nexport const toCommonJsImports = (imports: string): string =>\r\n imports\r\n .split(\"\\n\")\r\n .map((line) => {\r\n const trimmed = line.trim();\r\n const m = trimmed.match(/^import\\s+([A-Za-z_$][\\w$]*)\\s+from\\s+\"([^\"]+)\";?$/);\r\n if (!m) return line;\r\n return `const ${m[1]} = require(\"${m[2]}\");`;\r\n })\r\n .join(\"\\n\");\r\n\r\nexport const renderInlinePlan = (args: {\r\n target: InlineConfigTarget;\r\n title: string;\r\n templatePath: string;\r\n options: CssConfigOptions;\r\n context: {\r\n srcDir: string;\r\n stylesRel: string;\r\n contentExtensions?: string[];\r\n };\r\n snippetInvocationIndent: number;\r\n extraTemplateVars?: Record<string, unknown>;\r\n}): CssConfigInlinePlan => {\r\n const chain = renderPluginChain({\r\n withTokenUtilities: args.options.withTokenUtilities,\r\n srcDir: args.context.srcDir,\r\n stylesRel: args.context.stylesRel,\r\n contentExtensions: args.context.contentExtensions,\r\n });\r\n const snippetInvocations = chain.invocations\r\n .map((inv) => indent(inv, args.snippetInvocationIndent))\r\n .join(\"\\n\");\r\n\r\n return {\r\n target: args.target,\r\n imports: chain.imports,\r\n invocations: chain.invocations,\r\n manualSnippet: {\r\n title: args.title,\r\n content: renderTemplate(args.templatePath, {\r\n imports: chain.imports.join(\"\\n\"),\r\n invocations: snippetInvocations,\r\n ...(args.extraTemplateVars ?? {}),\r\n }),\r\n },\r\n };\r\n};\r\n","export interface PluginChainOptions {\r\n withTokenUtilities: boolean;\r\n /** Posix-ish project source dir (e.g. \"src\" or \"src/renderer/src\") */\r\n srcDir: string;\r\n /** Styles dir relative to srcDir (usually \"styles\") */\r\n stylesRel: string;\r\n /** File extensions to scan for class names */\r\n contentExtensions?: string[];\r\n}\r\n\r\nexport interface RenderedPluginChain {\r\n /** Import lines (one per plugin) as TS/JS source */\r\n imports: string[];\r\n /** Plugin invocations in order, as TS/JS source inside a `plugins: [...]` array */\r\n invocations: string[];\r\n}\r\n\r\nexport const renderPluginChain = (\r\n opts: PluginChainOptions,\r\n): RenderedPluginChain => {\r\n const normalizeRel = (value: string): string =>\r\n value\r\n .replace(/\\\\/g, \"/\")\r\n .replace(/^\\.\\//, \"\")\r\n .replace(/^\\/+/, \"\")\r\n .replace(/\\/+$/, \"\");\r\n\r\n const rel = (...parts: string[]): string =>\r\n `./${parts\r\n .map(normalizeRel)\r\n .filter(Boolean)\r\n .join(\"/\")\r\n .replace(/\\/+/g, \"/\")}`;\r\n\r\n const srcDir = normalizeRel(opts.srcDir);\r\n const stylesRel = normalizeRel(opts.stylesRel);\r\n const stylesDir = rel(srcDir, stylesRel);\r\n const mediaSource = `${stylesDir}/media.css`;\r\n const tokenSource = `${stylesDir}/app.css`;\r\n const generatedPath = `${stylesDir}/utilities.gen.css`;\r\n const extensions =\r\n opts.contentExtensions && opts.contentExtensions.length > 0\r\n ? opts.contentExtensions\r\n : [\"tsx\", \"ts\", \"jsx\", \"js\"];\r\n const contentGlob = rel(srcDir, \"**\", `*.{${extensions.join(\",\")}}`);\r\n\r\n const imports: string[] = [\r\n `import postcssPresetEnv from \"postcss-preset-env\";`,\r\n `import postcssGlobalData from \"@csstools/postcss-global-data\";`,\r\n `import autoprefixer from \"autoprefixer\";`,\r\n ];\r\n if (opts.withTokenUtilities) {\r\n imports.push(`import tokenUtilities from \"postcss-token-utilities\";`);\r\n }\r\n\r\n const invocations: string[] = [];\r\n\r\n invocations.push(\r\n `postcssGlobalData({\\n files: [\"${mediaSource}\"],\\n}),`,\r\n );\r\n\r\n if (opts.withTokenUtilities) {\r\n invocations.push(\r\n `tokenUtilities({\\n` +\r\n ` designTokenSource: \"${tokenSource}\",\\n` +\r\n ` customMediaSource: \"${mediaSource}\",\\n` +\r\n ` content: [\"${contentGlob}\"],\\n` +\r\n ` classMatcher: [\"optionClassName\"],\\n` +\r\n ` generated: {\\n` +\r\n ` path: \"${generatedPath}\",\\n` +\r\n ` },\\n` +\r\n `}),`,\r\n );\r\n }\r\n\r\n invocations.push(\r\n `postcssPresetEnv({\\n` +\r\n ` stage: 2,\\n` +\r\n ` preserve: true,\\n` +\r\n ` features: {\\n` +\r\n ` \"nesting-rules\": true,\\n` +\r\n ` \"custom-media-queries\": true,\\n` +\r\n ` \"color-mix\": true,\\n` +\r\n ` },\\n` +\r\n `}),`,\r\n );\r\n\r\n invocations.push(`autoprefixer(),`);\r\n\r\n return { imports, invocations };\r\n};\r\n\r\nexport const indent = (src: string, level = 1): string => {\r\n const pad = \" \".repeat(level);\r\n return src\r\n .split(\"\\n\")\r\n .map((line) => (line.length ? pad + line : line))\r\n .join(\"\\n\");\r\n};\r\n","import { renderTemplate } from \"../../lib/templates.js\";\nimport type { CssConfigRenderInput, CssConfigResult } from \"../../lib/css-config.js\";\nimport type { FrameworkRenderContext } from \"../types.js\";\nimport { renderInlinePlan, renderPluginStrings } from \"../shared.js\";\n\nexport const renderViteReactCssConfig = (\n input: CssConfigRenderInput,\n context: FrameworkRenderContext,\n): CssConfigResult => {\n const files: CssConfigResult[\"files\"] = [];\n const snippets: CssConfigResult[\"snippets\"] = [];\n\n if (input.placement === \"inline\") {\n return {\n files,\n snippets,\n inline: renderInlinePlan({\n target: \"vite\",\n title: \"Merge this into your existing vite.config.ts\",\n templatePath: \"vite-react/vite-inline.snippet.md\",\n context: context.pluginCtx,\n options: input.options,\n snippetInvocationIndent: 2,\n extraTemplateVars: { pretty: input.options.prettyCssModuleNames },\n }),\n };\n }\n\n if (input.viteConfigExists) {\n const inline = renderInlinePlan({\n target: \"vite\",\n title: \"Optional: move the PostCSS chain into vite.config.ts\",\n templatePath: \"vite-react/vite-inline.snippet.md\",\n context: context.pluginCtx,\n options: input.options,\n snippetInvocationIndent: 2,\n extraTemplateVars: { pretty: input.options.prettyCssModuleNames },\n });\n snippets.push(inline.manualSnippet);\n\n const pc = renderPluginStrings(input.options, context.pluginCtx, 2);\n files.push({\n filename: \"postcss.config.ts\",\n content: renderTemplate(\"vite-react/postcss.config.ts.template\", {\n imports: pc.imports,\n invocations: pc.invocations,\n }),\n label: \"postcss.config.ts\",\n });\n return { files, snippets };\n }\n\n const { imports, invocations } = renderPluginStrings(\n input.options,\n context.pluginCtx,\n 4,\n );\n files.push({\n filename: \"vite.config.ts\",\n content: renderTemplate(\"vite-react/vite.config.ts.template\", {\n imports,\n invocations,\n alias: input.alias,\n srcDir: context.posixSrc,\n pretty: input.options.prettyCssModuleNames,\n }),\n label: \"vite.config.ts\",\n });\n\n return { files, snippets };\n};\n","import { renderTemplate } from \"../../lib/templates.js\";\nimport type { CssConfigRenderInput, CssConfigResult } from \"../../lib/css-config.js\";\nimport type { FrameworkRenderContext } from \"../types.js\";\nimport { renderPluginStrings, toCommonJsImports } from \"../shared.js\";\n\nexport const renderNextCssConfig = (\n input: CssConfigRenderInput,\n context: FrameworkRenderContext,\n): CssConfigResult => {\n const files: CssConfigResult[\"files\"] = [];\n const snippets: CssConfigResult[\"snippets\"] = [];\n\n const { imports: esmImports, invocations } = renderPluginStrings(\n input.options,\n context.pluginCtx,\n 2,\n );\n const imports = toCommonJsImports(esmImports);\n\n files.push({\n filename: \"postcss.config.js\",\n content: renderTemplate(\"next/postcss.config.js.template\", {\n imports,\n invocations,\n }),\n label: \"postcss.config.js\",\n });\n snippets.push({\n title: \"Wire globals.css into app/layout.tsx\",\n content: renderTemplate(\"next/layout-import.snippet.md\", {\n srcDir: context.posixSrc,\n stylesRel: context.posixStyles,\n utilities: input.options.withTokenUtilities,\n }),\n });\n snippets.push({\n title: \"Ensure next.config.* transpiles @aplance-ui/core\",\n content: renderTemplate(\"next/next.config.snippet.md\", {}),\n });\n\n return { files, snippets };\n};\n","import { renderTemplate } from \"../../lib/templates.js\";\nimport type { CssConfigRenderInput, CssConfigResult } from \"../../lib/css-config.js\";\nimport type { FrameworkRenderContext } from \"../types.js\";\nimport { renderInlinePlan, renderPluginStrings } from \"../shared.js\";\n\nexport const renderTanstackStartCssConfig = (\n input: CssConfigRenderInput,\n context: FrameworkRenderContext,\n): CssConfigResult => {\n const files: CssConfigResult[\"files\"] = [];\n const snippets: CssConfigResult[\"snippets\"] = [];\n\n if (input.placement === \"inline\") {\n return {\n files,\n snippets,\n inline: renderInlinePlan({\n target: \"tanstack-start\",\n title: \"Merge this into app.config.ts (vite block)\",\n templatePath: \"tanstack-start/vite-inline.snippet.md\",\n context: context.pluginCtx,\n options: input.options,\n snippetInvocationIndent: 4,\n }),\n };\n }\n\n const { imports, invocations } = renderPluginStrings(\n input.options,\n context.pluginCtx,\n 2,\n );\n files.push({\n filename: \"postcss.config.ts\",\n content: renderTemplate(\"tanstack-start/postcss.config.ts.template\", {\n imports,\n invocations,\n }),\n label: \"postcss.config.ts\",\n });\n\n const inline = renderInlinePlan({\n target: \"tanstack-start\",\n title: \"Optional: move the PostCSS chain into app.config.ts\",\n templatePath: \"tanstack-start/vite-inline.snippet.md\",\n context: context.pluginCtx,\n options: input.options,\n snippetInvocationIndent: 4,\n });\n snippets.push(inline.manualSnippet);\n\n return { files, snippets };\n};\n","import { renderTemplate } from \"../../lib/templates.js\";\nimport type { CssConfigRenderInput, CssConfigResult } from \"../../lib/css-config.js\";\nimport type { FrameworkRenderContext } from \"../types.js\";\nimport { renderInlinePlan, renderPluginStrings } from \"../shared.js\";\n\nconst ASTRO_PLUGIN_CONTEXT = {\n contentExtensions: [\"tsx\", \"ts\", \"jsx\", \"js\", \"astro\"],\n};\n\nexport const renderAstroCssConfig = (\n input: CssConfigRenderInput,\n context: FrameworkRenderContext,\n): CssConfigResult => {\n const files: CssConfigResult[\"files\"] = [];\n const snippets: CssConfigResult[\"snippets\"] = [];\n\n snippets.push({\n title: \"Wire the React integration + global styles\",\n content: renderTemplate(\"astro/astro.config.snippet.md\", {\n stylesRel: context.posixStyles,\n utilities: input.options.withTokenUtilities,\n }),\n });\n\n if (input.placement === \"inline\") {\n return {\n files,\n snippets,\n inline: renderInlinePlan({\n target: \"astro\",\n title: \"Merge this into astro.config.* (vite block)\",\n templatePath: \"astro/vite-inline.snippet.md\",\n context: {\n ...context.pluginCtx,\n ...ASTRO_PLUGIN_CONTEXT,\n },\n options: input.options,\n snippetInvocationIndent: 6,\n }),\n };\n }\n\n const { imports, invocations } = renderPluginStrings(\n input.options,\n {\n ...context.pluginCtx,\n ...ASTRO_PLUGIN_CONTEXT,\n },\n 2,\n );\n files.push({\n filename: \"postcss.config.mjs\",\n content: renderTemplate(\"astro/postcss.config.mjs.template\", {\n imports,\n invocations,\n }),\n label: \"postcss.config.mjs\",\n });\n\n return { files, snippets };\n};\n","import { renderTemplate } from \"../../lib/templates.js\";\nimport type { CssConfigRenderInput, CssConfigResult } from \"../../lib/css-config.js\";\nimport type { FrameworkRenderContext } from \"../types.js\";\nimport { renderInlinePlan, renderPluginStrings } from \"../shared.js\";\n\nexport const renderElectronViteCssConfig = (\n input: CssConfigRenderInput,\n context: FrameworkRenderContext,\n): CssConfigResult => {\n const files: CssConfigResult[\"files\"] = [];\n const snippets: CssConfigResult[\"snippets\"] = [];\n\n if (input.placement === \"inline\") {\n return {\n files,\n snippets,\n inline: renderInlinePlan({\n target: \"electron-vite\",\n title: \"Merge this into electron.vite.config.ts (renderer block)\",\n templatePath: \"electron-vite/vite.config.snippet.md\",\n context: context.pluginCtx,\n options: input.options,\n snippetInvocationIndent: 5,\n extraTemplateVars: {\n alias: input.alias,\n srcDir: context.posixSrc,\n stylesRel: context.posixStyles,\n utilities: input.options.withTokenUtilities,\n },\n }),\n };\n }\n\n const { imports, invocations } = renderPluginStrings(\n input.options,\n context.pluginCtx,\n 2,\n );\n files.push({\n filename: \"postcss.config.ts\",\n content: renderTemplate(\"vite-react/postcss.config.ts.template\", {\n imports,\n invocations,\n }),\n label: \"postcss.config.ts\",\n });\n\n return { files, snippets };\n};\n","import type { FrameworkTemplate } from \"../lib/config.js\";\r\nimport type { FrameworkCssRenderer } from \"./types.js\";\r\nimport { renderViteReactCssConfig } from \"./vite-react/index.js\";\r\nimport { renderNextCssConfig } from \"./next/index.js\";\r\nimport { renderTanstackStartCssConfig } from \"./tanstack-start/index.js\";\r\nimport { renderAstroCssConfig } from \"./astro/index.js\";\r\nimport { renderElectronViteCssConfig } from \"./electron-vite/index.js\";\r\n\r\nexport const FRAMEWORK_CSS_RENDERERS: Record<\r\n FrameworkTemplate,\r\n FrameworkCssRenderer\r\n> = {\r\n \"vite-react\": renderViteReactCssConfig,\r\n next: renderNextCssConfig,\r\n \"tanstack-start\": renderTanstackStartCssConfig,\r\n astro: renderAstroCssConfig,\r\n \"electron-vite\": renderElectronViteCssConfig,\r\n};\r\n","import type { CssConfigPlacement, FrameworkTemplate } from \"./config.js\";\r\nimport { TemplateError } from \"./errors.js\";\r\nimport { FRAMEWORK_CSS_RENDERERS } from \"../frameworks/renderers.js\";\r\nimport { toPosix } from \"../frameworks/shared.js\";\r\nimport type { FrameworkRenderContext } from \"../frameworks/types.js\";\r\n\r\nexport interface CssConfigOptions {\r\n withTokenUtilities: boolean;\r\n /** Human-readable CSS-Modules class names. Vite-only. */\r\n prettyCssModuleNames: boolean;\r\n}\r\n\r\nexport interface CssConfigRenderInput {\r\n template: FrameworkTemplate;\r\n /** Posix-style srcDir relative to cwd - the framework-specific default or user override */\r\n srcDir: string;\r\n /** Path-alias prefix without trailing /* */\r\n alias: string;\r\n /** Posix-style path of the styles directory, relative to srcDir */\r\n stylesRel: string;\r\n options: CssConfigOptions;\r\n /** Effective placement selected by init flow (`auto` is resolved before calling this). */\r\n placement: Exclude<CssConfigPlacement, \"auto\">;\r\n /** Only matters for vite-react: did we find an existing vite.config.*? */\r\n viteConfigExists: boolean;\r\n}\r\n\r\nexport interface CssConfigFile {\r\n filename: string;\r\n content: string;\r\n label: string;\r\n}\r\n\r\nexport interface CssConfigSnippet {\r\n title: string;\r\n content: string;\r\n}\r\n\r\nexport type InlineConfigTarget =\r\n | \"vite\"\r\n | \"astro\"\r\n | \"tanstack-start\"\r\n | \"electron-vite\";\r\n\r\nexport interface CssConfigInlinePlan {\r\n target: InlineConfigTarget;\r\n imports: string[];\r\n invocations: string[];\r\n manualSnippet: CssConfigSnippet;\r\n}\r\n\r\nexport interface CssConfigResult {\r\n files: CssConfigFile[];\r\n snippets: CssConfigSnippet[];\r\n inline?: CssConfigInlinePlan;\r\n}\r\n\r\nexport const renderCssConfig = (input: CssConfigRenderInput): CssConfigResult => {\r\n const posixSrc = toPosix(input.srcDir);\r\n const posixStyles = toPosix(input.stylesRel);\r\n const context: FrameworkRenderContext = {\r\n posixSrc,\r\n posixStyles,\r\n pluginCtx: {\r\n srcDir: posixSrc,\r\n stylesRel: posixStyles,\r\n },\r\n };\r\n\r\n const renderer = FRAMEWORK_CSS_RENDERERS[input.template];\r\n if (!renderer) {\r\n const exhaustive = input.template;\r\n throw new TemplateError(\r\n \"E_UNKNOWN_TEMPLATE\",\r\n `Unknown framework template: ${String(exhaustive)}.`,\r\n );\r\n }\r\n return renderer(input, context);\r\n};\r\n","import type { CssConfigInlinePlan } from \"./css-config.js\";\r\n\r\nexport interface ApplyInlineCssConfigInput {\r\n source: string;\r\n plan: CssConfigInlinePlan;\r\n}\r\n\r\nexport interface ApplyInlineCssConfigResult {\r\n ok: boolean;\r\n content?: string;\r\n reason?: string;\r\n}\r\n\r\nconst TOP_LEVEL_OBJECT_PATTERNS = [\r\n /^[ \\t]*export\\s+default\\s+defineConfig\\s*\\(\\s*\\{/m,\r\n /^[ \\t]*defineConfig\\s*\\(\\s*\\{/m,\r\n /^[ \\t]*export\\s+default\\s*\\{/m,\r\n];\r\n\r\nconst extractModuleSpecifier = (line: string): string | null => {\r\n const fromMatch = line.match(/from\\s+\"([^\"]+)\"/) ?? line.match(/from\\s+'([^']+)'/);\r\n if (fromMatch?.[1]) return fromMatch[1];\r\n\r\n const requireMatch =\r\n line.match(/require\\(\\s*\"([^\"]+)\"\\s*\\)/) ??\r\n line.match(/require\\(\\s*'([^']+)'\\s*\\)/);\r\n return requireMatch?.[1] ?? null;\r\n};\r\n\r\nconst escapeRegExp = (value: string): string =>\r\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\nconst ensureImports = (source: string, imports: string[]): string => {\r\n const missing = imports.filter((line) => {\r\n const moduleName = extractModuleSpecifier(line);\r\n if (moduleName) {\r\n const modulePattern = new RegExp(\r\n `from\\\\s+[\"']${escapeRegExp(moduleName)}[\"']|require\\\\(\\\\s*[\"']${escapeRegExp(moduleName)}[\"']\\\\s*\\\\)`,\r\n );\r\n return !modulePattern.test(source);\r\n }\r\n return !source.includes(line.trim());\r\n });\r\n\r\n if (missing.length === 0) return source;\r\n\r\n const importMatches = Array.from(source.matchAll(/^import[^\\n]*$/gm));\r\n if (importMatches.length === 0) {\r\n return `${missing.join(\"\\n\")}\\n\\n${source}`;\r\n }\r\n\r\n const lastImport = importMatches[importMatches.length - 1];\r\n const insertAt = lastImport.index! + lastImport[0].length;\r\n return `${source.slice(0, insertAt)}\\n${missing.join(\"\\n\")}${source.slice(insertAt)}`;\r\n};\r\n\r\nconst renderIndentedBlock = (source: string, indent: string): string =>\r\n source\r\n .split(\"\\n\")\r\n .map((line) => (line.length > 0 ? `${indent}${line}` : line))\r\n .join(\"\\n\");\r\n\r\nconst buildCssPostcssBlock = (invocations: string[], cssIndent: string): string => {\r\n const postcssIndent = `${cssIndent} `;\r\n const pluginsIndent = `${postcssIndent} `;\r\n const itemIndent = `${pluginsIndent} `;\r\n const plugins = invocations\r\n .map((invocation) => renderIndentedBlock(invocation, itemIndent))\r\n .join(\"\\n\");\r\n\r\n return [\r\n `${cssIndent}css: {`,\r\n `${postcssIndent}postcss: {`,\r\n `${pluginsIndent}plugins: [`,\r\n plugins,\r\n `${pluginsIndent}],`,\r\n `${postcssIndent}},`,\r\n `${cssIndent}},`,\r\n ].join(\"\\n\");\r\n};\r\n\r\nconst buildViteBlock = (invocations: string[], viteIndent: string): string =>\r\n [\r\n `${viteIndent}vite: {`,\r\n buildCssPostcssBlock(invocations, `${viteIndent} `),\r\n `${viteIndent}},`,\r\n ].join(\"\\n\");\r\n\r\nconst insertIntoTopLevelObject = (\r\n source: string,\r\n blockFactory: (childIndent: string) => string,\r\n): string | null => {\r\n for (const pattern of TOP_LEVEL_OBJECT_PATTERNS) {\r\n const match = pattern.exec(source);\r\n if (!match) continue;\r\n\r\n const lineIndent = (match[0].match(/^[ \\t]*/) ?? [\"\"])[0];\r\n const insertAt = match.index + match[0].length;\r\n const block = blockFactory(`${lineIndent} `);\r\n return `${source.slice(0, insertAt)}\\n${block}${source.slice(insertAt)}`;\r\n }\r\n return null;\r\n};\r\n\r\nconst findNamedObjectProperty = (\r\n source: string,\r\n propertyName: string,\r\n): { insertAt: number; childIndent: string } | null => {\r\n const pattern = new RegExp(`(^[ \\\\t]*)${escapeRegExp(propertyName)}\\\\s*:\\\\s*\\\\{`, \"m\");\r\n const match = pattern.exec(source);\r\n if (!match) return null;\r\n\r\n return {\r\n insertAt: match.index + match[0].length,\r\n childIndent: `${match[1] ?? \"\"} `,\r\n };\r\n};\r\n\r\nconst insertIntoNamedObjectProperty = (\r\n source: string,\r\n propertyName: string,\r\n blockFactory: (childIndent: string) => string,\r\n): string | null => {\r\n const found = findNamedObjectProperty(source, propertyName);\r\n if (!found) return null;\r\n const block = blockFactory(found.childIndent);\r\n return `${source.slice(0, found.insertAt)}\\n${block}${source.slice(found.insertAt)}`;\r\n};\r\n\r\nconst hasPostcssConfig = (source: string): boolean => /\\bpostcss\\s*:/.test(source);\r\n\r\nconst applyViteInline = (source: string, invocations: string[]): string | null =>\r\n insertIntoTopLevelObject(source, (childIndent) =>\r\n buildCssPostcssBlock(invocations, childIndent),\r\n );\r\n\r\nconst applyVitePropertyInline = (\r\n source: string,\r\n invocations: string[],\r\n): string | null => {\r\n const inVite = insertIntoNamedObjectProperty(source, \"vite\", (childIndent) =>\r\n buildCssPostcssBlock(invocations, childIndent),\r\n );\r\n if (inVite) return inVite;\r\n\r\n return insertIntoTopLevelObject(source, (childIndent) =>\r\n buildViteBlock(invocations, childIndent),\r\n );\r\n};\r\n\r\nconst applyElectronRendererInline = (\r\n source: string,\r\n invocations: string[],\r\n): string | null =>\r\n insertIntoNamedObjectProperty(source, \"renderer\", (childIndent) =>\r\n buildCssPostcssBlock(invocations, childIndent),\r\n );\r\n\r\nexport const applyInlineCssConfig = (\r\n input: ApplyInlineCssConfigInput,\r\n): ApplyInlineCssConfigResult => {\r\n if (hasPostcssConfig(input.source)) {\r\n return {\r\n ok: false,\r\n reason: \"Config already contains a postcss block.\",\r\n };\r\n }\r\n\r\n const withImports = ensureImports(input.source, input.plan.imports);\r\n\r\n const patched = (() => {\r\n switch (input.plan.target) {\r\n case \"vite\":\r\n return applyViteInline(withImports, input.plan.invocations);\r\n case \"astro\":\r\n case \"tanstack-start\":\r\n return applyVitePropertyInline(withImports, input.plan.invocations);\r\n case \"electron-vite\":\r\n return applyElectronRendererInline(withImports, input.plan.invocations);\r\n default:\r\n return null;\r\n }\r\n })();\r\n\r\n if (!patched) {\r\n return {\r\n ok: false,\r\n reason: `Could not locate a writable ${input.plan.target} config object.`,\r\n };\r\n }\r\n\r\n return { ok: true, content: patched };\r\n};\r\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { FrameworkTemplate } from \"./config.js\";\n\nexport interface ProjectInfo {\n /** Does the project appear to be Vite-based? */\n isVite: boolean;\n /** Absolute path to the detected vite config, if any. */\n viteConfigPath: string | null;\n /** Does the project appear to be Next.js-based? */\n isNext: boolean;\n /** Absolute path to next.config.*, if any. */\n nextConfigPath: string | null;\n /** Does the project appear to be Astro-based? */\n isAstro: boolean;\n /** Absolute path to astro.config.*, if any. */\n astroConfigPath: string | null;\n /** Does the project appear to use TanStack Start? */\n isTanstackStart: boolean;\n /** Absolute path to app.config.* (TanStack Start), if any. */\n tanstackConfigPath: string | null;\n /** Does the project appear to use electron-vite? */\n isElectronVite: boolean;\n /** Absolute path to electron.vite.config.*, if any. */\n electronViteConfigPath: string | null;\n /** Absolute path to a package.json at cwd, if it exists */\n packageJsonPath: string | null;\n /**\n * Declared dependencies, name -> declared spec (deps + devDeps + peerDeps\n * merged; a `dependencies` entry wins over the others).\n */\n declaredDeps: ReadonlyMap<string, string>;\n}\n\nconst VITE_CONFIG_NAMES = [\n \"vite.config.ts\",\n \"vite.config.mts\",\n \"vite.config.js\",\n \"vite.config.mjs\",\n];\n\nconst NEXT_CONFIG_NAMES = [\n \"next.config.ts\",\n \"next.config.js\",\n \"next.config.mjs\",\n];\n\nconst ASTRO_CONFIG_NAMES = [\n \"astro.config.ts\",\n \"astro.config.js\",\n \"astro.config.mjs\",\n];\n\nconst ELECTRON_VITE_CONFIG_NAMES = [\n \"electron.vite.config.ts\",\n \"electron.vite.config.js\",\n \"electron.vite.config.mjs\",\n];\n\nconst TANSTACK_APP_CONFIG_NAMES = [\n \"app.config.ts\",\n \"app.config.mts\",\n \"app.config.js\",\n \"app.config.mjs\",\n];\n\nconst firstExisting = (cwd: string, names: string[]): string | null => {\n for (const name of names) {\n const p = join(cwd, name);\n if (existsSync(p)) return p;\n }\n return null;\n};\n\nconst readDeclaredDeps = (packageJsonPath: string): Map<string, string> => {\n try {\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n };\n return new Map([\n ...Object.entries(pkg.peerDependencies ?? {}),\n ...Object.entries(pkg.devDependencies ?? {}),\n ...Object.entries(pkg.dependencies ?? {}),\n ]);\n } catch {\n return new Map();\n }\n};\n\nexport const detectProject = (cwd: string): ProjectInfo => {\n const packageJsonPath = existsSync(join(cwd, \"package.json\"))\n ? join(cwd, \"package.json\")\n : null;\n const declaredDeps = packageJsonPath\n ? readDeclaredDeps(packageJsonPath)\n : new Map<string, string>();\n\n const viteConfigPath = firstExisting(cwd, VITE_CONFIG_NAMES);\n const nextConfigPath = firstExisting(cwd, NEXT_CONFIG_NAMES);\n const astroConfigPath = firstExisting(cwd, ASTRO_CONFIG_NAMES);\n const electronViteConfigPath = firstExisting(cwd, ELECTRON_VITE_CONFIG_NAMES);\n const tanstackConfigPath = firstExisting(cwd, TANSTACK_APP_CONFIG_NAMES);\n\n return {\n isVite: Boolean(viteConfigPath) || declaredDeps.has(\"vite\"),\n viteConfigPath,\n isNext: Boolean(nextConfigPath) || declaredDeps.has(\"next\"),\n nextConfigPath,\n isAstro: Boolean(astroConfigPath) || declaredDeps.has(\"astro\"),\n astroConfigPath,\n isTanstackStart:\n Boolean(tanstackConfigPath) ||\n declaredDeps.has(\"@tanstack/start\") ||\n declaredDeps.has(\"@tanstack/react-start\"),\n tanstackConfigPath,\n isElectronVite:\n Boolean(electronViteConfigPath) || declaredDeps.has(\"electron-vite\"),\n electronViteConfigPath,\n packageJsonPath,\n declaredDeps,\n };\n};\n\nexport const suggestTemplate = (p: ProjectInfo): FrameworkTemplate | null => {\n if (p.isElectronVite) return \"electron-vite\";\n if (p.isNext) return \"next\";\n if (p.isAstro) return \"astro\";\n if (p.isTanstackStart) return \"tanstack-start\";\n if (p.isVite) return \"vite-react\";\n return null;\n};\n\nexport const describeProject = (p: ProjectInfo): string => {\n const parts: string[] = [];\n if (p.isElectronVite) parts.push(\"electron-vite\");\n else if (p.isNext) parts.push(\"Next.js\");\n else if (p.isAstro) parts.push(\"Astro\");\n else if (p.isTanstackStart) parts.push(\"TanStack Start\");\n else if (p.isVite) parts.push(\"Vite\");\n return parts.length ? parts.join(\", \") : \"unknown framework\";\n};\n","import type { FrameworkTemplate } from \"../lib/config.js\";\r\nimport type { ProjectInfo } from \"../lib/detect.js\";\r\n\r\ninterface FrameworkMeta {\r\n label: string;\r\n supportsPrettyCssModuleNames: boolean;\r\n resolveInlineHostPath: (project: ProjectInfo) => string | null;\r\n}\r\n\r\nexport const FRAMEWORK_META: Record<FrameworkTemplate, FrameworkMeta> = {\r\n \"vite-react\": {\r\n label: \"Vite + React\",\r\n supportsPrettyCssModuleNames: true,\r\n resolveInlineHostPath: (project) => project.viteConfigPath,\r\n },\r\n next: {\r\n label: \"Next.js (App Router)\",\r\n supportsPrettyCssModuleNames: false,\r\n resolveInlineHostPath: () => null,\r\n },\r\n \"tanstack-start\": {\r\n label: \"TanStack Start\",\r\n supportsPrettyCssModuleNames: true,\r\n resolveInlineHostPath: (project) => project.tanstackConfigPath,\r\n },\r\n astro: {\r\n label: \"Astro\",\r\n supportsPrettyCssModuleNames: false,\r\n resolveInlineHostPath: (project) => project.astroConfigPath,\r\n },\r\n \"electron-vite\": {\r\n label: \"Electron + Vite\",\r\n supportsPrettyCssModuleNames: true,\r\n resolveInlineHostPath: (project) => project.electronViteConfigPath,\r\n },\r\n};\r\n\r\nexport const getFrameworkLabel = (template: FrameworkTemplate): string =>\r\n FRAMEWORK_META[template].label;\r\n\r\nexport const supportsPrettyCssModules = (\r\n template: FrameworkTemplate,\r\n): boolean => FRAMEWORK_META[template].supportsPrettyCssModuleNames;\r\n\r\nexport const getInlineHostPath = (\r\n template: FrameworkTemplate,\r\n project: ProjectInfo,\r\n): string | null => FRAMEWORK_META[template].resolveInlineHostPath(project);\r\n","import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { isAbsolute, join } from \"node:path\";\nimport { ConfigError } from \"./errors.js\";\n\nexport const CONFIG_FILE_NAME = \"components.json\";\nexport const CONFIG_SCHEMA_URL = \"https://ui.aplance.com/components.schema.json\";\n\nexport const SUPPORTED_TEMPLATES = [\n \"vite-react\",\n \"next\",\n \"tanstack-start\",\n \"astro\",\n \"electron-vite\",\n] as const;\nexport type FrameworkTemplate = (typeof SUPPORTED_TEMPLATES)[number];\n\nexport const CSS_CONFIG_PLACEMENTS = [\"auto\", \"inline\", \"file\"] as const;\nexport type CssConfigPlacement = (typeof CSS_CONFIG_PLACEMENTS)[number];\n\nexport interface ComponentsConfig {\n $schema: string;\n template: FrameworkTemplate;\n /** Posix-style, relative to cwd. \"src\" by default; \"src/renderer/src\" for Electron-Vite. */\n srcDir: string;\n /** Path-alias prefix without trailing /* (e.g. \"@\" → \"@/*\") */\n alias: string;\n /**\n * Active theme - three independent dimensions.\n * `color` selects the palette (slate, zinc, rose, …).\n * `radius` selects the corner-radius scale (sharp, rounded, pill, …).\n * `spacing` selects the gutter scale (compact, spacious, …).\n * `default` on any axis means \"no override\".\n */\n theme: {\n color: string;\n radius: string;\n spacing: string;\n };\n /** Subpaths under srcDir - tweakable but sensible defaults cover 95% of projects */\n paths: {\n styles: string;\n components: string;\n hooks: string;\n lib: string;\n };\n cssModules: {\n /** Human-readable CSS-Modules class names. Vite-only; ignored elsewhere. */\n pretty: boolean;\n };\n utilities: {\n /** Enable postcss-token-utilities in the generated CSS config */\n enabled: boolean;\n };\n cssConfig: {\n placement: CssConfigPlacement;\n };\n}\n\nexport interface ResolvedPaths {\n srcDir: string;\n stylesDir: string;\n componentsDir: string;\n hooksDir: string;\n libDir: string;\n}\n\nexport const DEFAULT_PATHS: ComponentsConfig[\"paths\"] = {\n styles: \"styles\",\n components: \"components\",\n hooks: \"hooks\",\n lib: \"lib\",\n};\n\nexport interface MakeDefaultOptions {\n template: FrameworkTemplate;\n srcDir?: string;\n alias?: string;\n color?: string;\n radius?: string;\n spacing?: string;\n pretty?: boolean;\n utilities?: boolean;\n cssConfigPlacement?: CssConfigPlacement;\n}\n\nconst TEMPLATE_DEFAULT_SRCDIR: Record<FrameworkTemplate, string> = {\n \"vite-react\": \"src\",\n next: \"src\",\n \"tanstack-start\": \"src\",\n astro: \"src\",\n \"electron-vite\": \"src/renderer/src\",\n};\n\nexport const configPath = (cwd: string): string => join(cwd, CONFIG_FILE_NAME);\n\nexport const configExists = (cwd: string): boolean =>\n existsSync(configPath(cwd));\n\nexport const loadConfig = (cwd: string): ComponentsConfig => {\n const p = configPath(cwd);\n if (!existsSync(p)) {\n throw new ConfigError(\n \"E_CONFIG_MISSING\",\n `No ${CONFIG_FILE_NAME} found at ${p}.`,\n `Run \\`aplance-ui init\\` once to create it.`,\n );\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(readFileSync(p, \"utf8\"));\n } catch (err) {\n throw new ConfigError(\n \"E_CONFIG_INVALID\",\n `Failed to parse ${p}: ${(err as Error).message}`,\n `Delete ${CONFIG_FILE_NAME} and re-run \\`aplance-ui init\\` to recreate it.`,\n );\n }\n return validateConfig(parsed, p);\n};\n\nexport const writeConfig = (cwd: string, cfg: ComponentsConfig): void => {\n writeFileSync(configPath(cwd), JSON.stringify(cfg, null, 2) + \"\\n\");\n};\n\nexport const resolvePaths = (\n cwd: string,\n cfg: ComponentsConfig,\n): ResolvedPaths => {\n assertSafeRelativePath(\"srcDir\", cfg.srcDir);\n for (const key of [\"styles\", \"components\", \"hooks\", \"lib\"] as const) {\n assertSafeRelativePath(`paths.${key}`, cfg.paths[key]);\n }\n const srcDir = join(cwd, cfg.srcDir);\n return {\n srcDir,\n stylesDir: join(srcDir, cfg.paths.styles),\n componentsDir: join(srcDir, cfg.paths.components),\n hooksDir: join(srcDir, cfg.paths.hooks),\n libDir: join(srcDir, cfg.paths.lib),\n };\n};\n\n/**\n * Accept both shapes for backwards compatibility with configs written before\n * the two-dimension split: legacy `theme: \"slate\"` → `{ color: \"slate\", radius: \"default\" }`.\n */\nconst normalizeTheme = (raw: unknown): ComponentsConfig[\"theme\"] => {\n if (typeof raw === \"string\") {\n return { color: raw, radius: \"default\", spacing: \"default\" };\n }\n if (raw && typeof raw === \"object\") {\n const t = raw as Partial<ComponentsConfig[\"theme\"]>;\n return {\n color: typeof t.color === \"string\" ? t.color : \"default\",\n radius: typeof t.radius === \"string\" ? t.radius : \"default\",\n spacing: typeof t.spacing === \"string\" ? t.spacing : \"default\",\n };\n }\n return { color: \"default\", radius: \"default\", spacing: \"default\" };\n};\n\nconst isSafeRelativePath = (value: string): boolean => {\n if (value.includes(\"\\0\") || isAbsolute(value)) return false;\n return !value.split(/[\\\\/]+/).some((segment) => segment === \"..\");\n};\n\nconst assertSafeRelativePath = (label: string, value: string): void => {\n if (!isSafeRelativePath(value)) {\n throw new ConfigError(\n \"E_CONFIG_INVALID\",\n `${label} must be a relative path inside the project.`,\n );\n }\n};\n\nexport const makeDefaultConfig = (opts: MakeDefaultOptions): ComponentsConfig => {\n const srcDir = opts.srcDir ?? TEMPLATE_DEFAULT_SRCDIR[opts.template];\n assertSafeRelativePath(\"srcDir\", srcDir);\n\n return {\n $schema: CONFIG_SCHEMA_URL,\n template: opts.template,\n srcDir,\n alias: opts.alias ?? \"@\",\n theme: {\n color: opts.color ?? \"default\",\n radius: opts.radius ?? \"default\",\n spacing: opts.spacing ?? \"default\",\n },\n paths: { ...DEFAULT_PATHS },\n cssModules: { pretty: opts.pretty ?? false },\n utilities: { enabled: opts.utilities ?? false },\n cssConfig: { placement: opts.cssConfigPlacement ?? \"auto\" },\n };\n};\n\nconst validateConfig = (raw: unknown, file: string): ComponentsConfig => {\n if (!raw || typeof raw !== \"object\") {\n throw new ConfigError(\n \"E_CONFIG_INVALID\",\n `${file} is not a JSON object.`,\n );\n }\n const c = raw as Partial<ComponentsConfig>;\n const must = (cond: unknown, msg: string) => {\n if (!cond) throw new ConfigError(\"E_CONFIG_INVALID\", `${file}: ${msg}`);\n };\n\n must(typeof c.template === \"string\", `\"template\" must be a string.`);\n must(\n SUPPORTED_TEMPLATES.includes(c.template as FrameworkTemplate),\n `\"template\" must be one of: ${SUPPORTED_TEMPLATES.join(\", \")} (got \"${c.template}\").`,\n );\n must(typeof c.srcDir === \"string\" && c.srcDir.length > 0, `\"srcDir\" must be a non-empty string.`);\n must(isSafeRelativePath(c.srcDir!), `\"srcDir\" must be a relative path inside the project.`);\n must(typeof c.alias === \"string\" && c.alias.length > 0, `\"alias\" must be a non-empty string.`);\n must(c.paths && typeof c.paths === \"object\", `\"paths\" must be an object.`);\n const ps = c.paths as Partial<ComponentsConfig[\"paths\"]>;\n for (const k of [\"styles\", \"components\", \"hooks\", \"lib\"] as const) {\n must(typeof ps[k] === \"string\" && (ps[k] as string).length > 0, `\"paths.${k}\" must be a non-empty string.`);\n must(isSafeRelativePath(ps[k] as string), `\"paths.${k}\" must be a relative path inside \"srcDir\".`);\n }\n must(c.cssModules && typeof c.cssModules === \"object\", `\"cssModules\" must be an object.`);\n must(typeof c.cssModules!.pretty === \"boolean\", `\"cssModules.pretty\" must be a boolean.`);\n must(c.utilities && typeof c.utilities === \"object\", `\"utilities\" must be an object.`);\n must(typeof c.utilities!.enabled === \"boolean\", `\"utilities.enabled\" must be a boolean.`);\n\n if (c.cssConfig !== undefined) {\n must(c.cssConfig && typeof c.cssConfig === \"object\", `\"cssConfig\" must be an object.`);\n must(\n CSS_CONFIG_PLACEMENTS.includes(c.cssConfig.placement as CssConfigPlacement),\n `\"cssConfig.placement\" must be one of: ${CSS_CONFIG_PLACEMENTS.join(\", \")} (got \"${String(c.cssConfig.placement)}\").`,\n );\n }\n\n return {\n $schema: c.$schema ?? CONFIG_SCHEMA_URL,\n template: c.template as FrameworkTemplate,\n srcDir: c.srcDir!,\n alias: c.alias!,\n theme: normalizeTheme(c.theme),\n paths: ps as ComponentsConfig[\"paths\"],\n cssModules: { pretty: c.cssModules!.pretty! },\n utilities: { enabled: c.utilities!.enabled! },\n cssConfig: {\n placement:\n (c.cssConfig?.placement as CssConfigPlacement | undefined) ?? \"auto\",\n },\n };\n};\n","import type { RegistryUnit } from \"./registry.js\";\n\ninterface UnitOption {\n value: string;\n label: string;\n hint: string;\n}\n\nconst BUCKETS: Array<{ label: string; predicate: (u: RegistryUnit) => boolean }> = [\n { label: \"ui\", predicate: (u) => u.kind === \"component\" && u.group === \"ui\" },\n { label: \"primitive\", predicate: (u) => u.kind === \"component\" && u.group === \"primitives\" },\n { label: \"hook\", predicate: (u) => u.kind === \"hook\" },\n { label: \"lib\", predicate: (u) => u.kind === \"lib\" },\n];\n\n/**\n * Build the option list shown by interactive multi-select prompts in\n * `init` and `add`. Units are grouped by kind/group so the picker reads\n * top-down: UI components → primitives → hooks → libs.\n */\nexport const groupedUnitOptions = (units: RegistryUnit[]): UnitOption[] =>\n BUCKETS.flatMap(({ label, predicate }) =>\n units.filter(predicate).map((u) => ({\n value: u.name,\n label: u.name,\n hint: `${label}${u.deps.length ? ` · deps: ${u.deps.join(\", \")}` : \"\"}`,\n })),\n );\n","import { spawn } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { ComponentsConfig } from \"./config.js\";\nimport type { ProjectInfo } from \"./detect.js\";\nimport type { InstallMeta, RegistryUnit } from \"./registry.js\";\n\nexport const PACKAGE_MANAGERS = [\"npm\", \"pnpm\", \"yarn\", \"bun\"] as const;\nexport type PackageManager = (typeof PACKAGE_MANAGERS)[number];\n\n/**\n * Detect the consumer's package manager. Priority:\n * 1. Explicit `packageManager` field in their package.json (Corepack).\n * 2. Lockfile present at cwd - pnpm > yarn > bun > npm.\n * 3. Fallback to npm.\n */\nexport const detectPackageManager = (cwd: string): PackageManager => {\n const pkgJsonPath = join(cwd, \"package.json\");\n if (existsSync(pkgJsonPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgJsonPath, \"utf8\")) as {\n packageManager?: string;\n };\n if (typeof pkg.packageManager === \"string\") {\n const name = pkg.packageManager.split(\"@\")[0].trim();\n if ((PACKAGE_MANAGERS as readonly string[]).includes(name)) {\n return name as PackageManager;\n }\n }\n } catch {\n // ignore - fall back to lockfile detection\n }\n }\n\n if (existsSync(join(cwd, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (existsSync(join(cwd, \"yarn.lock\"))) return \"yarn\";\n if (existsSync(join(cwd, \"bun.lockb\"))) return \"bun\";\n if (existsSync(join(cwd, \"bun.lock\"))) return \"bun\";\n if (existsSync(join(cwd, \"package-lock.json\"))) return \"npm\";\n return \"npm\";\n};\n\n/**\n * Dependency plan computed from the user's selection + what is already in\n * their package.json.\n */\nexport interface DependencyPlan {\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n /** Declared at a version the scaffold works with: kept as-is. */\n skipped: { name: string; reason: \"already-declared\" }[];\n /**\n * Component libraries declared at an older major than the copied source\n * needs (e.g. `recharts@^2` for a chart written against v3). They stay in\n * `dependencies` at the needed range; `from` is the declared spec.\n */\n upgraded: { name: string; from: string; to: string }[];\n /**\n * The app's own toolchain (React, PostCSS) declared at an older major. Never\n * changed by the CLI - reported so the user can upgrade it deliberately.\n */\n outdated: { name: string; declared: string; required: string }[];\n}\n\ninterface PlanInput {\n registry: { installMeta: InstallMeta };\n units: RegistryUnit[];\n project: ProjectInfo;\n}\n\nexport interface ComputePlanInput extends PlanInput {\n cfg: ComponentsConfig;\n}\n\n/**\n * The leading major of a semver-style spec (`^2.15.0` -> 2, `>=19.0.0` -> 19,\n * `2.x` -> 2), or null for anything that can't be read safely: dist-tags, `*`,\n * unions, hyphen ranges, and protocol specs (`workspace:`, `npm:`, `file:`,\n * git or URL). A null major is always respected as declared.\n */\nconst leadingMajor = (spec: string): number | null => {\n const value = spec.trim();\n if (value.includes(\"||\") || value.includes(\":\") || /\\s-\\s/.test(value)) {\n return null;\n }\n const match = /^(?:\\^|~|>=|=|v)?\\s*(\\d+)(?:[.\\s]|$)/.exec(value);\n return match ? Number(match[1]) : null;\n};\n\nconst isOlderMajor = (declared: string, required: string): boolean => {\n const have = leadingMajor(declared);\n const need = leadingMajor(required);\n return have !== null && need !== null && have < need;\n};\n\n/** Each unit's external packages at the ranges core declares for them. */\nconst unitDependencies = (\n meta: InstallMeta,\n units: RegistryUnit[],\n): Record<string, string> => {\n const deps: Record<string, string> = {};\n for (const unit of units) {\n for (const pkg of unit.externalDeps) {\n const version = meta.packageVersions[pkg];\n if (version) deps[pkg] = version; // unknown = builder bug; it throws there\n }\n }\n return deps;\n};\n\n/**\n * Reconcile the planned packages with what the app declares:\n * - not declared: install it;\n * - declared at a compatible (or unreadable) version: keep it;\n * - a component library declared at an older major: install the needed\n * range, since the copied source can't run against the old API;\n * - the app's own toolchain at an older major: keep it, but report it.\n */\nconst settleDeclared = (\n bags: Record<string, string>[],\n meta: InstallMeta,\n project: ProjectInfo,\n): Pick<DependencyPlan, \"skipped\" | \"upgraded\" | \"outdated\"> => {\n const toolchain = new Set([\n ...Object.keys(meta.baseDependencies),\n ...Object.keys(meta.baseDevDependencies),\n ...Object.keys(meta.utilitiesDevDependencies),\n ]);\n const settled: Pick<DependencyPlan, \"skipped\" | \"upgraded\" | \"outdated\"> = {\n skipped: [],\n upgraded: [],\n outdated: [],\n };\n for (const bag of bags) {\n for (const [name, required] of Object.entries(bag)) {\n const declared = project.declaredDeps.get(name);\n if (declared === undefined) continue;\n if (!isOlderMajor(declared, required)) {\n settled.skipped.push({ name, reason: \"already-declared\" });\n } else if (toolchain.has(name)) {\n settled.outdated.push({ name, declared, required });\n } else {\n settled.upgraded.push({ name, from: declared, to: required });\n continue;\n }\n delete bag[name];\n }\n }\n return settled;\n};\n\n/**\n * `init`'s plan: the scaffold's runtime + PostCSS toolchain (+ token\n * utilities when enabled) and the external packages of the selected units.\n */\nexport const computeDependencyPlan = (\n input: ComputePlanInput,\n): DependencyPlan => {\n const { registry, units, cfg, project } = input;\n const meta = registry.installMeta;\n\n const dependencies: Record<string, string> = { ...meta.baseDependencies };\n for (const [name, range] of Object.entries(unitDependencies(meta, units))) {\n if (!(name in dependencies)) dependencies[name] = range;\n }\n const devDependencies: Record<string, string> = {\n ...meta.baseDevDependencies,\n ...(cfg.utilities.enabled ? meta.utilitiesDevDependencies : {}),\n };\n\n return {\n dependencies,\n devDependencies,\n ...settleDeclared([dependencies, devDependencies], meta, project),\n };\n};\n\n/**\n * `add`'s plan: only the external packages of the newly added units - the\n * PostCSS chain is `init`'s responsibility.\n */\nexport const computeUnitDependencyPlan = (input: PlanInput): DependencyPlan => {\n const meta = input.registry.installMeta;\n const dependencies = unitDependencies(meta, input.units);\n return {\n dependencies,\n devDependencies: {},\n ...settleDeclared([dependencies], meta, input.project),\n };\n};\n\nexport interface InstallCommand {\n bin: string;\n args: string[];\n /**\n * The exact command line: shown to the user, printed for a manual install,\n * and the line the Windows shell runs. Arguments are quoted where needed.\n */\n label: string;\n}\n\n/**\n * Quote one argument for a shell command line. Package specs carry `^`, `~`,\n * `<`, `>` and `|`, which cmd.exe reads as escape and redirect characters and\n * POSIX shells as redirects or pipes. Double quotes keep them literal in\n * cmd.exe, PowerShell and sh alike (names, specs and our flags never contain a\n * quote themselves).\n */\nconst quoteArg = (arg: string): string =>\n /^[\\w@./:=+-]+$/.test(arg) ? arg : `\"${arg}\"`;\n\n/** Shape the dep plan into the install command(s) each package manager expects. */\nexport const buildInstallCommands = (\n pm: PackageManager,\n plan: DependencyPlan,\n): InstallCommand[] => {\n const commands: InstallCommand[] = [];\n\n const runtimeSpecs = Object.entries(plan.dependencies).map(\n ([name, v]) => `${name}@${v}`,\n );\n const devSpecs = Object.entries(plan.devDependencies).map(\n ([name, v]) => `${name}@${v}`,\n );\n\n const runtimeArgs = installArgs(pm, runtimeSpecs, false);\n const devArgs = installArgs(pm, devSpecs, true);\n\n const command = (args: string[]): InstallCommand => ({\n bin: pm,\n args,\n label: [pm, ...args].map(quoteArg).join(\" \"),\n });\n if (runtimeSpecs.length > 0) commands.push(command(runtimeArgs));\n if (devSpecs.length > 0) commands.push(command(devArgs));\n return commands;\n};\n\nconst installArgs = (\n pm: PackageManager,\n specs: string[],\n dev: boolean,\n): string[] => {\n switch (pm) {\n case \"npm\":\n return [\n \"install\",\n dev ? \"--save-dev\" : \"--save\",\n \"--no-fund\",\n \"--no-audit\",\n ...specs,\n ];\n case \"pnpm\":\n return [\"add\", dev ? \"--save-dev\" : \"\", ...specs].filter(Boolean);\n case \"yarn\":\n return [\"add\", dev ? \"--dev\" : \"\", ...specs].filter(Boolean);\n case \"bun\":\n return [\"add\", dev ? \"--dev\" : \"\", ...specs].filter(Boolean);\n }\n};\n\nexport interface RunInstallOptions {\n cwd: string;\n /** Extra env passed to the package-manager child. */\n env?: NodeJS.ProcessEnv;\n /** Called with each command right before it runs. */\n onCommand?: (cmd: InstallCommand) => void;\n}\n\n/**\n * Execute an install plan. Runs each command sequentially so errors surface\n * immediately, and streams stdout/stderr straight to the parent process so\n * the user sees normal package-manager output.\n */\nexport const runInstall = async (\n commands: InstallCommand[],\n opts: RunInstallOptions,\n): Promise<void> => {\n for (const cmd of commands) {\n opts.onCommand?.(cmd);\n await new Promise<void>((resolve, reject) => {\n const spawnOptions = {\n cwd: opts.cwd,\n stdio: \"inherit\" as const,\n env: { ...process.env, ...opts.env },\n };\n // On Windows the package manager is a `.cmd` shim, which Node only runs\n // through a shell (CVE-2024-27980). That shell gets the quoted command\n // line: an args array with `shell: true` is joined unquoted (deprecated\n // as DEP0190), and cmd.exe then read `pkg@^1.2.3` as `pkg@1.2.3` and\n // `pkg@>=1` as a redirect.\n const child =\n process.platform === \"win32\"\n ? spawn(cmd.label, { ...spawnOptions, shell: true })\n : spawn(cmd.bin, cmd.args, spawnOptions);\n child.on(\"error\", reject);\n child.on(\"close\", (code) => {\n if (code === 0) resolve();\n else\n reject(\n new Error(\n `${cmd.label} exited with code ${code ?? \"null\"}. Aborting install.`,\n ),\n );\n });\n });\n }\n};\n\n/**\n * Format a dependency plan for human display: three sections that line up\n * and are safe to print from inside a clack `note(...)` box.\n */\nexport const describePlan = (plan: DependencyPlan): string => {\n const lines: string[] = [];\n const upgradedFrom = new Map(plan.upgraded.map((u) => [u.name, u.from]));\n const rows = (bag: Record<string, string>) =>\n Object.entries(bag)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([name, v]) => {\n const from = upgradedFrom.get(name);\n return ` ${name} ${v}${from ? ` (upgrades ${from})` : \"\"}`;\n });\n\n if (Object.keys(plan.dependencies).length) {\n lines.push(\"dependencies:\");\n lines.push(...rows(plan.dependencies));\n }\n if (Object.keys(plan.devDependencies).length) {\n if (lines.length) lines.push(\"\");\n lines.push(\"devDependencies:\");\n lines.push(...rows(plan.devDependencies));\n }\n if (plan.skipped.length) {\n if (lines.length) lines.push(\"\");\n lines.push(\"already declared (kept as-is):\");\n lines.push(...plan.skipped.map((s) => ` ${s.name}`));\n }\n if (plan.outdated.length) {\n if (lines.length) lines.push(\"\");\n lines.push(\"older major kept as-is (upgrade when you can):\");\n lines.push(\n ...plan.outdated.map((o) => ` ${o.name} ${o.declared} (scaffold expects ${o.required})`),\n );\n }\n if (!lines.length) lines.push(\"nothing to install - all deps already declared.\");\n return lines.join(\"\\n\");\n};\n","import type { ComponentsConfig } from \"./config.js\";\nimport type { RegistryUnit } from \"./registry.js\";\n\nexport interface UnitHintInput {\n cfg: ComponentsConfig;\n units: RegistryUnit[];\n}\n\nconst importPath = (cfg: ComponentsConfig, path: string): string =>\n `${cfg.alias}/${path}`.replace(/\\/+/g, \"/\");\n\nexport const getUnitHints = ({ cfg, units }: UnitHintInput): string[] => {\n const selected = new Set(units.map((unit) => unit.name));\n const hints: string[] = [];\n\n if (selected.has(\"toast\")) {\n const toastImport = importPath(\n cfg,\n `${cfg.paths.components}/ui/toast/toast`,\n );\n hints.push(\n [\n \"Toast needs one app-level Toaster mount before toast calls render.\",\n `import { Toaster } from \"${toastImport}\";`,\n cfg.template === \"next\"\n ? \"For Next.js, place it in a small Client Component such as app/providers.tsx.\"\n : \"Place it once near your app root.\",\n ].join(\"\\n\"),\n );\n }\n\n if (\n cfg.template === \"next\" &&\n units.some((unit) => (unit.clientFiles?.length ?? 0) > 0)\n ) {\n hints.push(\n 'Next.js output adds \"use client\" only to files that need client runtime APIs.',\n );\n }\n\n return hints;\n};\n","import pc from \"picocolors\";\nimport { applyFileOps, type ConflictMode, type FileOp } from \"../lib/fs-ops.js\";\nimport { planComponentOps } from \"../lib/components.js\";\nimport { planUtilitiesGitignoreOp } from \"../lib/styles.js\";\nimport { loadConfig, resolvePaths } from \"../lib/config.js\";\nimport { loadRegistry, resolveUnits, type RegistryUnit } from \"../lib/registry.js\";\nimport { groupedUnitOptions } from \"../lib/units.js\";\nimport {\n headline,\n goodbye,\n confirm,\n multiselect,\n note,\n step,\n} from \"../lib/ui.js\";\nimport { logger } from \"../lib/logger.js\";\nimport { detectProject } from \"../lib/detect.js\";\nimport {\n buildInstallCommands,\n computeUnitDependencyPlan,\n describePlan,\n detectPackageManager,\n runInstall,\n type PackageManager,\n} from \"../lib/installer.js\";\nimport { getUnitHints } from \"../lib/unit-hints.js\";\n\nexport interface AddCommandOptions {\n cwd: string;\n names: string[];\n yes?: boolean;\n force?: boolean;\n dryRun?: boolean;\n all?: boolean;\n /** Auto-install runtime dependencies for the added units. Defaults to true. */\n install?: boolean;\n /** Force a specific package manager instead of auto-detecting. */\n packageManager?: PackageManager;\n}\n\nconst resolveConflictMode = (opts: AddCommandOptions): ConflictMode => {\n if (opts.dryRun) return \"dry-run\";\n if (opts.force) return \"force\";\n return \"prompt\";\n};\n\nexport const runAdd = async (opts: AddCommandOptions): Promise<void> => {\n headline(\"Add components/hooks/utilities from the registry.\");\n\n const cfg = loadConfig(opts.cwd);\n const paths = resolvePaths(opts.cwd, cfg);\n const registry = loadRegistry();\n\n let names = opts.names;\n if (opts.all) names = registry.units.map((u) => u.name);\n\n if (names.length === 0) {\n if (opts.yes) {\n goodbye(\"Nothing to add. Pass unit names, --all, or run without --yes for interactive mode.\");\n return;\n }\n names = await pickUnits(registry.units);\n if (names.length === 0) {\n goodbye(\"Nothing selected.\");\n return;\n }\n }\n\n const units = resolveUnits(registry, names);\n const depsAdded = units.filter((u) => !names.includes(u.name));\n\n if (depsAdded.length > 0) {\n note(\n depsAdded.map((u) => `${pc.dim(\"+\")} ${u.name} ${pc.dim(\"(dep)\")}`).join(\"\\n\"),\n `transitive dependencies (${depsAdded.length})`,\n );\n }\n\n const ops: FileOp[] = planComponentOps({\n registry,\n targetSrcDir: paths.srcDir,\n units,\n paths: cfg.paths,\n template: cfg.template,\n });\n\n // Idempotent safety net: if token utilities are opted in (whether `add`\n // is the first run on an older project, or the user flipped the flag\n // by hand), ensure the generated-file gitignore is present. A matching\n // file is detected as `unchanged` by the plan and produces no noise.\n if (cfg.utilities.enabled) {\n ops.push(planUtilitiesGitignoreOp({ targetStylesDir: paths.stylesDir }));\n }\n\n step(`Writing ${units.length} unit${units.length === 1 ? \"\" : \"s\"} (${ops.length} file${ops.length === 1 ? \"\" : \"s\"})…`);\n const result = await applyFileOps(ops, {\n cwd: opts.cwd,\n mode: resolveConflictMode(opts),\n });\n\n const summary = `${result.written} written · ${result.skipped} skipped · ${result.unchanged} unchanged`;\n\n // ── runtime deps for the newly-added units ────────────────────────────────\n const project = detectProject(opts.cwd);\n const plan = computeUnitDependencyPlan({ registry, units, project });\n const pm = opts.packageManager ?? detectPackageManager(opts.cwd);\n const installCommands = buildInstallCommands(pm, plan);\n const hasWork = installCommands.length > 0;\n\n if (opts.dryRun) {\n note(summary, \"dry run\");\n if (hasWork) {\n note(\n [\n describePlan(plan),\n \"\",\n `would run with ${pm}:`,\n ...installCommands.map((c) => ` ${c.label}`),\n ].join(\"\\n\"),\n \"dry run · install\",\n );\n }\n goodbye(\"Preview only - no files were touched.\");\n return;\n }\n\n let willInstall: boolean;\n if (!hasWork) {\n willInstall = false;\n } else if (opts.install === false) {\n willInstall = false;\n } else if (opts.install === true || opts.yes) {\n willInstall = true;\n } else {\n note(describePlan(plan), `install with ${pm}`);\n willInstall = await confirm({\n message: `Run ${pm} now to install the dependencies above?`,\n initialValue: true,\n });\n }\n\n if (willInstall) {\n step(`Installing dependencies with ${pm}…`);\n await runInstall(installCommands, {\n cwd: opts.cwd,\n onCommand: (cmd) => logger.action(`$ ${cmd.label}`),\n });\n } else if (hasWork) {\n note(\n [\n describePlan(plan),\n \"\",\n \"run:\",\n ...installCommands.map((c) => ` ${c.label}`),\n ].join(\"\\n\"),\n \"manual install (skipped)\",\n );\n }\n\n const unitHints = getUnitHints({ cfg, units });\n if (unitHints.length > 0) {\n note(unitHints.join(\"\\n\\n\"), \"usage hints\");\n }\n\n logger.info(summary);\n goodbye(`Added ${units.length} unit${units.length === 1 ? \"\" : \"s\"}.`);\n};\n\nconst pickUnits = async (all: RegistryUnit[]): Promise<string[]> =>\n multiselect({\n message: `Select units to add ${pc.dim(\"(space to toggle, enter to confirm)\")}`,\n options: groupedUnitOptions(all),\n required: false,\n });\n","import pc from \"picocolors\";\nimport {\n loadRegistry,\n type RegistryUnit,\n type ThemeDescriptor,\n} from \"../lib/registry.js\";\nimport { headline, goodbye, note } from \"../lib/ui.js\";\n\nexport interface ListCommandOptions {\n cwd: string;\n json?: boolean;\n}\n\nexport const runList = (opts: ListCommandOptions): void => {\n const registry = loadRegistry();\n\n if (opts.json) {\n process.stdout.write(JSON.stringify(registry, null, 2) + \"\\n\");\n return;\n }\n\n const colorCount = registry.themes.colors.length;\n const radiusCount = registry.themes.radii.length;\n const spacingCount = registry.themes.spacing.length;\n headline(\n `${registry.units.length} units · ${colorCount} colors · ${radiusCount} radii · ${spacingCount} spacing`,\n );\n\n const ui = registry.units.filter((u) => u.kind === \"component\" && u.group === \"ui\");\n const primitives = registry.units.filter((u) => u.kind === \"component\" && u.group === \"primitives\");\n const hooks = registry.units.filter((u) => u.kind === \"hook\");\n const libs = registry.units.filter((u) => u.kind === \"lib\");\n\n const renderBucket = (title: string, units: RegistryUnit[]) => {\n if (units.length === 0) return null;\n const body = units\n .map((u) => {\n const deps = u.deps.length ? pc.dim(` deps: ${u.deps.join(\", \")}`) : \"\";\n return ` ${pc.cyan(u.name.padEnd(22))}${deps}`;\n })\n .join(\"\\n\");\n return `${pc.bold(title)} ${pc.dim(`(${units.length})`)}\\n${body}`;\n };\n\n const blocks = [\n renderBucket(\"UI components\", ui),\n renderBucket(\"Primitives\", primitives),\n renderBucket(\"Hooks\", hooks),\n renderBucket(\"Utilities\", libs),\n ].filter(Boolean) as string[];\n\n note(blocks.join(\"\\n\\n\"), \"registry\");\n\n const renderVariants = (title: string, variants: ThemeDescriptor[]) => {\n if (variants.length === 0) return;\n const body = variants\n .map((t) => ` ${pc.cyan(t.id.padEnd(12))}${pc.dim(t.description)}`)\n .join(\"\\n\");\n note(body, title);\n };\n\n renderVariants(\"colors\", registry.themes.colors);\n renderVariants(\"radii\", registry.themes.radii);\n renderVariants(\"spacing\", registry.themes.spacing);\n\n goodbye(`Use ${pc.cyan(\"aplance-ui add <name>\")} to install anything above.`);\n};\n"],"mappings":"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","names":["join","relative","pc","pc","p","pc","pc","select","multiselect","confirm","note","pc","readFileSync","existsSync","join","relative","existsSync","readFileSync","dirname","dirname","existsSync","readFileSync","join","p","relative","existsSync","readFileSync","readFileSync","join","existsSync","readFileSync","join","relative","existsSync","readFileSync","dirname","join","fileURLToPath","dirname","fileURLToPath","join","existsSync","p","readFileSync","posix","sep","indent","toPosix","p","sep","posix","indent","pc","toPosix","indent","p","existsSync","readFileSync","relative","join","existsSync","readFileSync","join","p","existsSync","readFileSync","writeFileSync","join","join","existsSync","p","readFileSync","join","existsSync","readFileSync","join","select","pc","confirm","relative","p","cfg","multiselect","note","join","pc","resolveConflictMode","note","pc","confirm","multiselect","pc","pc","note"]}
|