aplance-ui 1.0.1 → 1.1.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 +13 -5
- package/dist/api.d.ts +3 -1
- package/dist/api.js +97 -23
- package/dist/api.js.map +1 -1
- package/dist/index.js +97 -23
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/registry/components/primitives/modal/modal.tsx +4 -4
- package/registry/components/primitives/popover/popover.tsx +3 -3
- package/registry/components/ui/avatar/avatar.tsx +2 -4
- package/registry/components/ui/badge/badge.tsx +15 -4
- package/registry/components/ui/button/button.tsx +1 -1
- package/registry/components/ui/data-table/data-table.module.css +4 -6
- package/registry/components/ui/data-table/data-table.tsx +57 -43
- package/registry/components/ui/data-table/filter-bar.tsx +11 -11
- package/registry/components/ui/data-table/pagination-bar.tsx +16 -16
- package/registry/components/ui/empty-state/empty-state.tsx +1 -1
- package/registry/components/ui/tabs/tabs.tsx +1 -1
- package/registry/components/ui/tooltip/tooltip.tsx +1 -1
- package/registry/registry.json +163 -20
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../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/commands/add.ts","../src/commands/list.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { createRequire } from \"node:module\";\nimport { runInit } from \"./commands/init.js\";\nimport { runAdd } from \"./commands/add.js\";\nimport { runList } from \"./commands/list.js\";\nimport { isCliError } from \"./lib/errors.js\";\nimport { aborted } from \"./lib/ui.js\";\nimport { logger } from \"./lib/logger.js\";\nimport {\n CSS_CONFIG_PLACEMENTS,\n SUPPORTED_TEMPLATES,\n type CssConfigPlacement,\n type FrameworkTemplate,\n} from \"./lib/config.js\";\nimport { PACKAGE_MANAGERS, type PackageManager } from \"./lib/installer.js\";\n\nconst require = createRequire(import.meta.url);\nconst pkg = require(\"../package.json\") as { version: string };\n\nconst program = new Command();\n\nprogram\n .name(\"aplance-ui\")\n .description(\"Scaffold the aplance-ui design system and copy components into your project.\")\n .version(pkg.version);\n\n// ── init ────────────────────────────────────────────────────────────────────\nprogram\n .command(\"init\")\n .description(\"Scaffold styles, PostCSS config, theme, and (optionally) an initial set of components.\")\n .option(\"-t, --template <template>\", `framework: ${SUPPORTED_TEMPLATES.join(\" | \")}`)\n .option(\"--color <id>\", \"color palette: default | slate | zinc | stone | rose | blue | green | violet\")\n .option(\"--radius <id>\", \"radius scale: default | sharp | rounded | pill\")\n .option(\"--spacing <id>\", \"spacing scale: default | compact | spacious\")\n .option(\"--src-dir <path>\", \"project source root (overrides template default)\")\n .option(\"--alias <prefix>\", \"path-alias prefix (default '@')\")\n .option(\"-c, --components <names>\", \"comma-separated list of components/hooks/libs to copy during init\")\n .option(\"--all\", \"copy every unit in the registry\")\n .option(\"-y, --yes\", \"non-interactive: accept defaults, never prompt\")\n .option(\"-f, --force\", \"overwrite existing files without prompting\")\n .option(\"-d, --dry-run\", \"print what would be written without touching the filesystem\")\n .option(\"--skip-styles\", \"do not write the styles folder\")\n .option(\"--skip-css-config\", \"do not write postcss.config.* or per-framework CSS configs\")\n .option(\"--with-utilities\", \"enable postcss-token-utilities in the generated CSS config\")\n .option(\n \"--css-config-placement <placement>\",\n `css config placement: ${CSS_CONFIG_PLACEMENTS.join(\" | \")}`,\n )\n .option(\"--pretty-css-modules\", \"use human-readable CSS Modules class names (Vite-family templates)\")\n .option(\"--overwrite-config\", \"rewrite components.json even if it already exists\")\n .option(\"--no-install\", \"skip auto-installing runtime and dev dependencies\")\n .option(\n \"--package-manager <pm>\",\n `force a package manager: ${PACKAGE_MANAGERS.join(\" | \")} (default: auto-detect)`,\n )\n .action(async (opts) => {\n try {\n const template = opts.template as FrameworkTemplate | undefined;\n if (template && !(SUPPORTED_TEMPLATES as readonly string[]).includes(template)) {\n throw new Error(`--template must be one of: ${SUPPORTED_TEMPLATES.join(\", \")} (got '${template}').`);\n }\n const cssConfigPlacement = opts.cssConfigPlacement as CssConfigPlacement | undefined;\n if (cssConfigPlacement && !(CSS_CONFIG_PLACEMENTS as readonly string[]).includes(cssConfigPlacement)) {\n throw new Error(`--css-config-placement must be one of: ${CSS_CONFIG_PLACEMENTS.join(\", \")} (got '${cssConfigPlacement}').`);\n }\n const packageManager = opts.packageManager as PackageManager | undefined;\n if (packageManager && !(PACKAGE_MANAGERS as readonly string[]).includes(packageManager)) {\n throw new Error(\n `--package-manager must be one of: ${PACKAGE_MANAGERS.join(\", \")} (got '${packageManager}').`,\n );\n }\n const components = typeof opts.components === \"string\"\n ? opts.components.split(\",\").map((s: string) => s.trim()).filter(Boolean)\n : undefined;\n await runInit({\n cwd: process.cwd(),\n template,\n color: opts.color,\n radius: opts.radius,\n spacing: opts.spacing,\n srcDir: opts.srcDir,\n alias: opts.alias,\n components,\n all: opts.all,\n yes: opts.yes,\n force: opts.force,\n dryRun: opts.dryRun,\n skipStyles: opts.skipStyles,\n skipCssConfig: opts.skipCssConfig,\n withUtilities: opts.withUtilities,\n cssConfigPlacement,\n prettyCssModules: opts.prettyCssModules,\n overwriteConfig: opts.overwriteConfig,\n // commander inverts `--no-install` into opts.install === false\n install: opts.install,\n packageManager,\n });\n } catch (err) {\n handleError(err);\n }\n });\n\n// ── add ─────────────────────────────────────────────────────────────────────\nprogram\n .command(\"add [names...]\")\n .description(\"Copy components/hooks/utilities into your project (resolves transitive deps automatically).\")\n .option(\"--all\", \"copy every unit in the registry\")\n .option(\"-y, --yes\", \"non-interactive: never prompt for selection or conflicts\")\n .option(\"-f, --force\", \"overwrite existing files without prompting\")\n .option(\"-d, --dry-run\", \"print what would be written without touching the filesystem\")\n .option(\"--no-install\", \"skip auto-installing runtime dependencies for the added units\")\n .option(\n \"--package-manager <pm>\",\n `force a package manager: ${PACKAGE_MANAGERS.join(\" | \")} (default: auto-detect)`,\n )\n .action(async (names: string[] | undefined, opts) => {\n try {\n const packageManager = opts.packageManager as PackageManager | undefined;\n if (packageManager && !(PACKAGE_MANAGERS as readonly string[]).includes(packageManager)) {\n throw new Error(\n `--package-manager must be one of: ${PACKAGE_MANAGERS.join(\", \")} (got '${packageManager}').`,\n );\n }\n await runAdd({\n cwd: process.cwd(),\n names: names ?? [],\n all: opts.all,\n yes: opts.yes,\n force: opts.force,\n dryRun: opts.dryRun,\n install: opts.install,\n packageManager,\n });\n } catch (err) {\n handleError(err);\n }\n });\n\n// ── list ────────────────────────────────────────────────────────────────────\nprogram\n .command(\"list\")\n .description(\"List every unit and theme in the bundled registry.\")\n .option(\"--json\", \"emit the raw registry JSON (scriptable)\")\n .action((opts) => {\n try {\n runList({ cwd: process.cwd(), json: opts.json });\n } catch (err) {\n handleError(err);\n }\n });\n\nprogram.parseAsync(process.argv);\n\nfunction handleError(err: unknown): void {\n if (isCliError(err)) {\n if (err.code === \"E_ABORTED\") {\n aborted(\"Aborted by user.\");\n process.exit(1);\n }\n logger.error(`[${err.code}] ${err.message}`);\n if (err.hint) logger.info(err.hint);\n process.exit(1);\n }\n logger.error((err as Error).message || String(err));\n if (process.env.APLANCE_DEBUG) console.error((err as Error).stack);\n process.exit(1);\n}\n","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 { loadRegistry, resolveUnits, type LoadedRegistry } 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\";\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 /**\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.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 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 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 }),\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 // ── 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 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 = 3;\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 } 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}\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\nexport const planComponentOps = (opts: ComponentsOptions): FileOp[] => {\n const ops: FileOp[] = [];\n for (const unit of opts.units) {\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 ops.push({\n target: targetAbs,\n content: readFileSync(sourceAbs, \"utf8\"),\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 { join } from \"node:path\";\nimport { ConfigError } from \"./errors.js\";\n\nexport const CONFIG_FILE_NAME = \"components.json\";\nexport const CONFIG_SCHEMA_URL = \"https://aplance-ui.dev/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 makeDefaultConfig = (opts: MakeDefaultOptions): ComponentsConfig => ({\n $schema: CONFIG_SCHEMA_URL,\n template: opts.template,\n srcDir: opts.srcDir ?? TEMPLATE_DEFAULT_SRCDIR[opts.template],\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\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 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 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(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 }\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 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\";\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 });\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 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 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)) continue;\n dependencies[pkg] = version;\n }\n }\n return { dependencies, devDependencies: {}, skipped: [] as { name: string; reason: \"already-declared\" }[] };\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","pkg","existsSync","readFileSync","writeFileSync","join","join","existsSync","p","readFileSync","join","existsSync","readFileSync","join","pkg","select","pc","confirm","relative","p","cfg","multiselect","note","join","pc","resolveConflictMode","note","pc","confirm","pkg","multiselect","pc","pc","note","require"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../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 { Command } from \"commander\";\nimport { createRequire } from \"node:module\";\nimport { runInit } from \"./commands/init.js\";\nimport { runAdd } from \"./commands/add.js\";\nimport { runList } from \"./commands/list.js\";\nimport { isCliError } from \"./lib/errors.js\";\nimport { aborted } from \"./lib/ui.js\";\nimport { logger } from \"./lib/logger.js\";\nimport {\n CSS_CONFIG_PLACEMENTS,\n SUPPORTED_TEMPLATES,\n type CssConfigPlacement,\n type FrameworkTemplate,\n} from \"./lib/config.js\";\nimport { PACKAGE_MANAGERS, type PackageManager } from \"./lib/installer.js\";\n\nconst require = createRequire(import.meta.url);\nconst pkg = require(\"../package.json\") as { version: string };\n\nconst program = new Command();\n\nprogram\n .name(\"aplance-ui\")\n .description(\"Scaffold the aplance-ui design system and copy components into your project.\")\n .version(pkg.version);\n\n// ── init ────────────────────────────────────────────────────────────────────\nprogram\n .command(\"init\")\n .description(\"Scaffold styles, PostCSS config, theme, and (optionally) an initial set of components.\")\n .option(\"-t, --template <template>\", `framework: ${SUPPORTED_TEMPLATES.join(\" | \")}`)\n .option(\"--color <id>\", \"color palette: default | slate | zinc | stone | rose | blue | green | violet\")\n .option(\"--radius <id>\", \"radius scale: default | sharp | rounded | pill\")\n .option(\"--spacing <id>\", \"spacing scale: default | compact | spacious\")\n .option(\"--src-dir <path>\", \"project source root (overrides template default)\")\n .option(\"--alias <prefix>\", \"path-alias prefix (default '@')\")\n .option(\"-c, --components <names>\", \"comma-separated list of components/hooks/libs to copy during init\")\n .option(\"--all\", \"copy every unit in the registry\")\n .option(\"-y, --yes\", \"non-interactive: accept defaults, never prompt\")\n .option(\"-f, --force\", \"overwrite existing files without prompting\")\n .option(\"-d, --dry-run\", \"print what would be written without touching the filesystem\")\n .option(\"--skip-styles\", \"do not write the styles folder\")\n .option(\"--skip-css-config\", \"do not write postcss.config.* or per-framework CSS configs\")\n .option(\"--with-utilities\", \"enable postcss-token-utilities in the generated CSS config\")\n .option(\n \"--css-config-placement <placement>\",\n `css config placement: ${CSS_CONFIG_PLACEMENTS.join(\" | \")}`,\n )\n .option(\"--pretty-css-modules\", \"use human-readable CSS Modules class names (Vite-family templates)\")\n .option(\"--overwrite-config\", \"rewrite components.json even if it already exists\")\n .option(\"--no-install\", \"skip auto-installing runtime and dev dependencies\")\n .option(\n \"--package-manager <pm>\",\n `force a package manager: ${PACKAGE_MANAGERS.join(\" | \")} (default: auto-detect)`,\n )\n .action(async (opts) => {\n try {\n const template = opts.template as FrameworkTemplate | undefined;\n if (template && !(SUPPORTED_TEMPLATES as readonly string[]).includes(template)) {\n throw new Error(`--template must be one of: ${SUPPORTED_TEMPLATES.join(\", \")} (got '${template}').`);\n }\n const cssConfigPlacement = opts.cssConfigPlacement as CssConfigPlacement | undefined;\n if (cssConfigPlacement && !(CSS_CONFIG_PLACEMENTS as readonly string[]).includes(cssConfigPlacement)) {\n throw new Error(`--css-config-placement must be one of: ${CSS_CONFIG_PLACEMENTS.join(\", \")} (got '${cssConfigPlacement}').`);\n }\n const packageManager = opts.packageManager as PackageManager | undefined;\n if (packageManager && !(PACKAGE_MANAGERS as readonly string[]).includes(packageManager)) {\n throw new Error(\n `--package-manager must be one of: ${PACKAGE_MANAGERS.join(\", \")} (got '${packageManager}').`,\n );\n }\n const components = typeof opts.components === \"string\"\n ? opts.components.split(\",\").map((s: string) => s.trim()).filter(Boolean)\n : undefined;\n await runInit({\n cwd: process.cwd(),\n template,\n color: opts.color,\n radius: opts.radius,\n spacing: opts.spacing,\n srcDir: opts.srcDir,\n alias: opts.alias,\n components,\n all: opts.all,\n yes: opts.yes,\n force: opts.force,\n dryRun: opts.dryRun,\n skipStyles: opts.skipStyles,\n skipCssConfig: opts.skipCssConfig,\n withUtilities: opts.withUtilities,\n cssConfigPlacement,\n prettyCssModules: opts.prettyCssModules,\n overwriteConfig: opts.overwriteConfig,\n // commander inverts `--no-install` into opts.install === false\n install: opts.install,\n packageManager,\n });\n } catch (err) {\n handleError(err);\n }\n });\n\n// ── add ─────────────────────────────────────────────────────────────────────\nprogram\n .command(\"add [names...]\")\n .description(\"Copy components/hooks/utilities into your project (resolves transitive deps automatically).\")\n .option(\"--all\", \"copy every unit in the registry\")\n .option(\"-y, --yes\", \"non-interactive: never prompt for selection or conflicts\")\n .option(\"-f, --force\", \"overwrite existing files without prompting\")\n .option(\"-d, --dry-run\", \"print what would be written without touching the filesystem\")\n .option(\"--no-install\", \"skip auto-installing runtime dependencies for the added units\")\n .option(\n \"--package-manager <pm>\",\n `force a package manager: ${PACKAGE_MANAGERS.join(\" | \")} (default: auto-detect)`,\n )\n .action(async (names: string[] | undefined, opts) => {\n try {\n const packageManager = opts.packageManager as PackageManager | undefined;\n if (packageManager && !(PACKAGE_MANAGERS as readonly string[]).includes(packageManager)) {\n throw new Error(\n `--package-manager must be one of: ${PACKAGE_MANAGERS.join(\", \")} (got '${packageManager}').`,\n );\n }\n await runAdd({\n cwd: process.cwd(),\n names: names ?? [],\n all: opts.all,\n yes: opts.yes,\n force: opts.force,\n dryRun: opts.dryRun,\n install: opts.install,\n packageManager,\n });\n } catch (err) {\n handleError(err);\n }\n });\n\n// ── list ────────────────────────────────────────────────────────────────────\nprogram\n .command(\"list\")\n .description(\"List every unit and theme in the bundled registry.\")\n .option(\"--json\", \"emit the raw registry JSON (scriptable)\")\n .action((opts) => {\n try {\n runList({ cwd: process.cwd(), json: opts.json });\n } catch (err) {\n handleError(err);\n }\n });\n\nprogram.parseAsync(process.argv);\n\nfunction handleError(err: unknown): void {\n if (isCliError(err)) {\n if (err.code === \"E_ABORTED\") {\n aborted(\"Aborted by user.\");\n process.exit(1);\n }\n logger.error(`[${err.code}] ${err.message}`);\n if (err.hint) logger.info(err.hint);\n process.exit(1);\n }\n logger.error((err as Error).message || String(err));\n if (process.env.APLANCE_DEBUG) console.error((err as Error).stack);\n process.exit(1);\n}\n","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 /**\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.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 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":"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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","pkg","existsSync","readFileSync","writeFileSync","join","join","existsSync","p","readFileSync","join","existsSync","readFileSync","join","pkg","select","pc","confirm","relative","p","cfg","multiselect","note","join","pc","resolveConflictMode","note","pc","confirm","pkg","multiselect","pc","pc","note","require"]}
|