silvery 0.19.1 → 0.21.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 +9 -4
- package/dist/Text-Lq0dmj8-.mjs +239 -0
- package/dist/Text-Lq0dmj8-.mjs.map +1 -0
- package/dist/UPNG-Bo33r8rA.mjs +3 -0
- package/dist/UPNG-DosRPdF4.mjs +5075 -0
- package/dist/UPNG-DosRPdF4.mjs.map +1 -0
- package/dist/__vite-browser-external-2447137e-D_JM6skp.mjs +6 -0
- package/dist/__vite-browser-external-2447137e-D_JM6skp.mjs.map +1 -0
- package/dist/{animation-Cn64yepo.mjs → animation-ZMN2_XKv.mjs} +2 -2
- package/dist/animation-ZMN2_XKv.mjs.map +1 -0
- package/dist/{ansi-Cc33mW54.d.mts → ansi-2Xn0yatP.d.mts} +1 -1
- package/dist/{ansi-Cc33mW54.d.mts.map → ansi-2Xn0yatP.d.mts.map} +1 -1
- package/dist/{ansi-CLOitHKx.mjs → ansi-D1KQMAbf.mjs} +1 -1
- package/dist/{ansi-CLOitHKx.mjs.map → ansi-D1KQMAbf.mjs.map} +1 -1
- package/dist/ansi-yC4RyBNY.mjs +22441 -0
- package/dist/ansi-yC4RyBNY.mjs.map +1 -0
- package/dist/apng-CR08rIaH.mjs +58 -0
- package/dist/apng-CR08rIaH.mjs.map +1 -0
- package/dist/apng-DaHfVaVI.mjs +3 -0
- package/dist/assets/resvgjs.darwin-arm64-BtufyGW1.node +0 -0
- package/dist/assets/skia.darwin-arm64-DQs5sT6N.node +0 -0
- package/dist/backend-B-WYLUib.mjs +13396 -0
- package/dist/backend-B-WYLUib.mjs.map +1 -0
- package/dist/backends-CUtan80W.mjs +3 -0
- package/dist/backends-DIVYzKqd.mjs +1083 -0
- package/dist/backends-DIVYzKqd.mjs.map +1 -0
- package/dist/bound-term-0sPrrzH1.d.mts +4640 -0
- package/dist/bound-term-0sPrrzH1.d.mts.map +1 -0
- package/dist/canvas-1v7dPT-_.mjs +3 -0
- package/dist/canvas-CSuPOMNt.mjs +1442 -0
- package/dist/canvas-CSuPOMNt.mjs.map +1 -0
- package/dist/{chunk-Vs_PY4HZ.mjs → chunk-BSw8zbkd.mjs} +1 -1
- package/dist/cli-dvo0r2fs.mjs +4 -0
- package/dist/compare-CQodSH4G.mjs +376 -0
- package/dist/compare-CQodSH4G.mjs.map +1 -0
- package/dist/compare-DHlcxEYA.mjs +3 -0
- package/dist/context-BU5LkkIy.mjs.map +1 -1
- package/dist/devtools-CJdt5H0X.mjs +2 -0
- package/dist/{devtools-DxkSLXDA.mjs → devtools-DcQjgyjL.mjs} +5 -4
- package/dist/{devtools-DxkSLXDA.mjs.map → devtools-DcQjgyjL.mjs.map} +1 -1
- package/dist/easing-BI-ASGMO.d.mts +24 -0
- package/dist/easing-BI-ASGMO.d.mts.map +1 -0
- package/dist/{eta-Bb3RH3wh.mjs → eta-CJlGH06n.mjs} +1 -1
- package/dist/{eta-Bb3RH3wh.mjs.map → eta-CJlGH06n.mjs.map} +1 -1
- package/dist/flexily-zero-adapter-C3Vj0fPt.mjs +306 -0
- package/dist/flexily-zero-adapter-C3Vj0fPt.mjs.map +1 -0
- package/dist/{flexily-zero-adapter-CMxXhdOL.mjs → flexily-zero-adapter-C4lW_Ov5.mjs} +1 -1
- package/dist/fonts-BFmhXDv7.mjs +88 -0
- package/dist/fonts-BFmhXDv7.mjs.map +1 -0
- package/dist/gif-C_AjaT9d.mjs +188 -0
- package/dist/gif-C_AjaT9d.mjs.map +1 -0
- package/dist/gif-DaC4XrxA.mjs +3 -0
- package/dist/gifenc-BOUT-KFB.mjs +730 -0
- package/dist/gifenc-BOUT-KFB.mjs.map +1 -0
- package/dist/image-C2Birh2x.mjs +1252 -0
- package/dist/image-C2Birh2x.mjs.map +1 -0
- package/dist/index-BUMxS65f.d.mts +453 -0
- package/dist/index-BUMxS65f.d.mts.map +1 -0
- package/dist/{index-D3saHouR.d.mts → index-CSQf13CI.d.mts} +1057 -1133
- package/dist/index-CSQf13CI.d.mts.map +1 -0
- package/dist/{index-BXslOebb.d.mts → index-Cl9KKjQ_.d.mts} +4919 -3921
- package/dist/index-Cl9KKjQ_.d.mts.map +1 -0
- package/dist/index-XbNrPhWl.d.mts +336 -0
- package/dist/index-XbNrPhWl.d.mts.map +1 -0
- package/dist/index.d.mts +8 -5
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +14 -12
- package/dist/index.mjs.map +1 -1
- package/dist/key-mapping-CS-YD_cD.mjs +132 -0
- package/dist/key-mapping-CS-YD_cD.mjs.map +1 -0
- package/dist/key-mapping-Yn-Jgrij.mjs +3 -0
- package/dist/{layout-engine-B6Cdz1yZ.mjs → layout-engine-C07LEXWT.mjs} +1 -1
- package/dist/layout-engine-C2px0RJE.mjs +67 -0
- package/dist/layout-engine-C2px0RJE.mjs.map +1 -0
- package/dist/layout-signals-Cnw6xk8Q.mjs +988 -0
- package/dist/layout-signals-Cnw6xk8Q.mjs.map +1 -0
- package/dist/mouse-events-Dki3ISIp.mjs +1044 -0
- package/dist/mouse-events-Dki3ISIp.mjs.map +1 -0
- package/dist/{multi-progress-Bq9Oi_WI.mjs → multi-progress-CIRjrzma.mjs} +3 -3
- package/dist/{multi-progress-Bq9Oi_WI.mjs.map → multi-progress-CIRjrzma.mjs.map} +1 -1
- package/dist/{multi-progress-DAQC7eap.d.mts → multi-progress-DHZ2xUT2.d.mts} +2 -2
- package/dist/{multi-progress-DAQC7eap.d.mts.map → multi-progress-DHZ2xUT2.d.mts.map} +1 -1
- package/dist/{node-BeWlnCPY.mjs → node-CjM5Rt-M.mjs} +4 -4
- package/dist/node-CjM5Rt-M.mjs.map +1 -0
- package/dist/playwright-D5YiZcNS.mjs +76397 -0
- package/dist/playwright-D5YiZcNS.mjs.map +1 -0
- package/dist/png-codec-Dp84742B.mjs +36 -0
- package/dist/png-codec-Dp84742B.mjs.map +1 -0
- package/dist/png-codec-QwOtJ8Zs.mjs +3 -0
- package/dist/progress-DB_Xo071.mjs +675 -0
- package/dist/progress-DB_Xo071.mjs.map +1 -0
- package/dist/{progress-bar-CXE5Qfkd.mjs → progress-bar-oJwq22CR.mjs} +4 -4
- package/dist/{progress-bar-CXE5Qfkd.mjs.map → progress-bar-oJwq22CR.mjs.map} +1 -1
- package/dist/rasterizer-BRXrDdWx.mjs +3 -0
- package/dist/rasterizer-CpEhJvdR.mjs +296 -0
- package/dist/rasterizer-CpEhJvdR.mjs.map +1 -0
- package/dist/reconciler-DldIJB93.mjs +2083 -0
- package/dist/reconciler-DldIJB93.mjs.map +1 -0
- package/dist/{render-string-0mN37DLf.mjs → render-string-BcoCpjCB.mjs} +1 -1
- package/dist/{render-string-X-CxpTdZ.mjs → render-string-DkQacASz.mjs} +2728 -555
- package/dist/render-string-DkQacASz.mjs.map +1 -0
- package/dist/resvg-js-DkOndZI3.mjs +203 -0
- package/dist/resvg-js-DkOndZI3.mjs.map +1 -0
- package/dist/runtime.d.mts +3 -2
- package/dist/runtime.mjs +3 -3
- package/dist/schemes-JjNp4aSl.mjs +2611 -0
- package/dist/schemes-JjNp4aSl.mjs.map +1 -0
- package/dist/{spinner-CGo34vyR.d.mts → spinner-CZINHpkV.d.mts} +2 -2
- package/dist/{spinner-CGo34vyR.d.mts.map → spinner-CZINHpkV.d.mts.map} +1 -1
- package/dist/{spinner-CeOmcuw_.mjs → spinner-D9lrHr8s.mjs} +7 -7
- package/dist/spinner-D9lrHr8s.mjs.map +1 -0
- package/dist/src-5w9QR6_8.mjs +1071 -0
- package/dist/src-5w9QR6_8.mjs.map +1 -0
- package/dist/src-BNTToU7l.mjs +4387 -0
- package/dist/src-BNTToU7l.mjs.map +1 -0
- package/dist/{src-Bd7ezSgG.mjs → src-BR4xNwdG.mjs} +10436 -2622
- package/dist/src-BR4xNwdG.mjs.map +1 -0
- package/dist/{types-Bk2yw9Qj.mjs → src-DKp-_OFG.mjs} +34 -94
- package/dist/src-DKp-_OFG.mjs.map +1 -0
- package/dist/src-bt8wSrfJ.mjs +258 -0
- package/dist/src-bt8wSrfJ.mjs.map +1 -0
- package/dist/src-e33Y6kNJ.mjs +3 -0
- package/dist/src-iDwu25UD.mjs +1814 -0
- package/dist/src-iDwu25UD.mjs.map +1 -0
- package/dist/steps-Bp2uNqnn.d.mts +202 -0
- package/dist/steps-Bp2uNqnn.d.mts.map +1 -0
- package/dist/svg-15lZZzxq.mjs +486 -0
- package/dist/svg-15lZZzxq.mjs.map +1 -0
- package/dist/svg-Cz0UXcDj.mjs +255 -0
- package/dist/svg-Cz0UXcDj.mjs.map +1 -0
- package/dist/svg-DY72a4HK.mjs +3 -0
- package/dist/svg-g1D6ErwR.d.mts +82 -0
- package/dist/svg-g1D6ErwR.d.mts.map +1 -0
- package/dist/term.d.mts +3 -0
- package/dist/term.mjs +9 -0
- package/dist/term.mjs.map +1 -0
- package/dist/theme.d.mts +95 -2
- package/dist/theme.d.mts.map +1 -0
- package/dist/theme.mjs +9 -3
- package/dist/theme.mjs.map +1 -0
- package/dist/{types-BH_v3iMT.d.mts → types-kt_fKR37.d.mts} +2 -15
- package/dist/types-kt_fKR37.d.mts.map +1 -0
- package/dist/ui/animation.d.mts +2 -1
- package/dist/ui/animation.mjs +1 -1
- package/dist/ui/ansi.d.mts +1 -1
- package/dist/ui/ansi.mjs +1 -1
- package/dist/ui/cli.d.mts +3 -3
- package/dist/ui/cli.mjs +5 -5
- package/dist/ui/display.d.mts +1 -1
- package/dist/ui/image.d.mts +2 -2
- package/dist/ui/image.mjs +2 -2
- package/dist/ui/input.d.mts +1 -1
- package/dist/ui/input.mjs +4 -2
- package/dist/ui/input.mjs.map +1 -1
- package/dist/ui/progress.d.mts +5 -249
- package/dist/ui/progress.mjs +5 -858
- package/dist/ui/react.d.mts +1 -1
- package/dist/ui/react.mjs +2 -2
- package/dist/ui/recording-chrome-react.d.mts +21 -0
- package/dist/ui/recording-chrome-react.d.mts.map +1 -0
- package/dist/ui/recording-chrome-react.mjs +105 -0
- package/dist/ui/recording-chrome-react.mjs.map +1 -0
- package/dist/ui/recording-chrome.d.mts +2 -0
- package/dist/ui/recording-chrome.mjs +2 -0
- package/dist/ui/utils.mjs +1 -1
- package/dist/ui/wrappers.d.mts +3 -3
- package/dist/ui/wrappers.mjs +2 -2
- package/dist/ui.d.mts +7 -6
- package/dist/ui.mjs +8 -7
- package/dist/{useLatest-Bg2x4bfP.d.mts → useLatest-DRDDVwjh.d.mts} +5 -25
- package/dist/useLatest-DRDDVwjh.d.mts.map +1 -0
- package/dist/{with-text-input-CRfoiFFG.d.mts → with-text-input-YeohVLeo.d.mts} +4 -55
- package/dist/with-text-input-YeohVLeo.d.mts.map +1 -0
- package/dist/wrapper-C70ATkVv.mjs +3527 -0
- package/dist/wrapper-C70ATkVv.mjs.map +1 -0
- package/dist/{wrappers-UTADQkSY.mjs → wrappers-BCUYITrY.mjs} +5 -157
- package/dist/wrappers-BCUYITrY.mjs.map +1 -0
- package/dist/{yoga-adapter-8oRGRw8V.mjs → yoga-adapter-BnZX1PAY.mjs} +28 -2
- package/dist/yoga-adapter-BnZX1PAY.mjs.map +1 -0
- package/dist/yoga-adapter-DxgsQ_gg.mjs +2 -0
- package/dist/zipBundle-3nqeDRtm.mjs +3 -0
- package/dist/zipBundle-VNAYFmqJ.mjs +2003 -0
- package/dist/zipBundle-VNAYFmqJ.mjs.map +1 -0
- package/package.json +20 -9
- package/dist/animation-Cn64yepo.mjs.map +0 -1
- package/dist/cli-BKp0YtBD.mjs +0 -4
- package/dist/devtools-9QY4teqI.mjs +0 -2
- package/dist/flexily-zero-adapter-BlQa46nr.mjs +0 -3385
- package/dist/flexily-zero-adapter-BlQa46nr.mjs.map +0 -1
- package/dist/image-CTII5QWI.mjs +0 -477
- package/dist/image-CTII5QWI.mjs.map +0 -1
- package/dist/index-BXslOebb.d.mts.map +0 -1
- package/dist/index-BnA7mNpo.d.mts +0 -175
- package/dist/index-BnA7mNpo.d.mts.map +0 -1
- package/dist/index-D3saHouR.d.mts.map +0 -1
- package/dist/layout-engine-ClUgv6jB.mjs +0 -50
- package/dist/layout-engine-ClUgv6jB.mjs.map +0 -1
- package/dist/node-BeWlnCPY.mjs.map +0 -1
- package/dist/reconciler-Cwgm8hRR.mjs +0 -8459
- package/dist/reconciler-Cwgm8hRR.mjs.map +0 -1
- package/dist/render-string-X-CxpTdZ.mjs.map +0 -1
- package/dist/spinner-CeOmcuw_.mjs.map +0 -1
- package/dist/src-B5GjfG7g.mjs +0 -4305
- package/dist/src-B5GjfG7g.mjs.map +0 -1
- package/dist/src-Bd7ezSgG.mjs.map +0 -1
- package/dist/src-CChwjk0Z.mjs +0 -738
- package/dist/src-CChwjk0Z.mjs.map +0 -1
- package/dist/src-NCKb8kE5.mjs +0 -2660
- package/dist/src-NCKb8kE5.mjs.map +0 -1
- package/dist/types-BH_v3iMT.d.mts.map +0 -1
- package/dist/types-Bk2yw9Qj.mjs.map +0 -1
- package/dist/ui/progress.d.mts.map +0 -1
- package/dist/ui/progress.mjs.map +0 -1
- package/dist/useLatest-Bg2x4bfP.d.mts.map +0 -1
- package/dist/with-text-input-CRfoiFFG.d.mts.map +0 -1
- package/dist/wrappers-UTADQkSY.mjs.map +0 -1
- package/dist/yoga-adapter-8oRGRw8V.mjs.map +0 -1
- package/dist/yoga-adapter-D_CcxSt5.mjs +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src-5w9QR6_8.mjs","names":["isDarkColor","importBase16Internal"],"sources":["../packages/theme/src/generate.ts","../packages/theme/src/import/types.ts","../packages/theme/src/import/base16.ts","../packages/theme/src/generators.ts","../packages/theme/src/builder.ts","../packages/theme/src/auto-generate.ts","../packages/theme/src/validate.ts","../packages/theme/src/validate-theme.ts","../packages/theme/src/alias.ts","../packages/theme/src/css.ts","../packages/theme/src/export/base16.ts","../packages/theme/src/detect.ts","../packages/theme/src/sterling/index.ts","../packages/theme/src/theme.ts","../packages/theme/src/index.ts"],"sourcesContent":["/**\n * ANSI 16 theme generation — derives a complete Theme from a primary color + dark/light.\n *\n * All token values are hex strings. Terminal rendering quantizes hex to 4-bit\n * ANSI codes at paint time when colorLevel === \"ansi16\".\n */\n\nimport type { AnsiPrimary, Theme } from \"@silvery/ansi\"\nimport { deriveFields, DEFAULT_VARIANTS, ANSI16_SLOT_HEX } from \"@silvery/ansi\"\n\n// Re-export for consumers that import DEFAULT_VARIANTS from here.\nexport { DEFAULT_VARIANTS }\n\n/**\n * Resolve an ANSI16 slot name (e.g. \"yellow\", \"blueBright\") to its canonical\n * hex value. Falls back to the input string if not found (e.g., already hex).\n */\nfunction slotHex(name: string): string {\n return ANSI16_SLOT_HEX[name] ?? name\n}\n\n/**\n * Generate a complete ANSI 16 theme from a primary color + dark/light preference.\n *\n * All token values are hex strings (e.g. \"#808000\" for yellow).\n * Terminal rendering quantizes these to 4-bit ANSI codes at paint time\n * when colorLevel === \"ansi16\".\n */\nexport function generateTheme(primary: AnsiPrimary, dark: boolean): Theme {\n const primaryHex = slotHex(primary)\n const fgHex = slotHex(dark ? \"whiteBright\" : \"black\")\n const accentHex = primaryHex // generate.ts: accent = primary (single-color generator)\n const selectionbgHex = primaryHex\n const surfacebgHex = slotHex(dark ? \"black\" : \"white\")\n\n // Categorical ring — computed from dark flag alone (no ColorScheme available)\n const ring = {\n red: slotHex(dark ? \"redBright\" : \"red\"),\n orange: slotHex(dark ? \"redBright\" : \"red\"), // no orange slot in ANSI 16\n yellow: slotHex(\"yellow\"),\n green: slotHex(dark ? \"greenBright\" : \"green\"),\n teal: slotHex(\"cyan\"), // canonical: cyan (not cyanBright — aligned to deriveAnsi16Theme)\n blue: slotHex(dark ? \"blueBright\" : \"blue\"),\n purple: slotHex(\"magenta\"),\n pink: slotHex(dark ? \"magentaBright\" : \"magenta\"),\n }\n\n const derived = deriveFields({\n primary: primaryHex,\n accent: accentHex,\n fg: fgHex,\n selectionbg: selectionbgHex,\n surfacebg: surfacebgHex,\n ring,\n })\n\n return {\n name: `${dark ? \"dark\" : \"light\"}-${primary}`,\n\n // ── Root pair ─────────────────────────────────────────────────\n bg: \"\",\n fg: fgHex,\n\n // ── Surface pairs (base = text, *bg = background) ──────────\n muted: slotHex(dark ? \"white\" : \"blackBright\"),\n mutedbg: slotHex(dark ? \"black\" : \"white\"),\n surface: slotHex(dark ? \"whiteBright\" : \"black\"),\n surfacebg: surfacebgHex,\n popover: slotHex(dark ? \"whiteBright\" : \"black\"),\n popoverbg: slotHex(dark ? \"blackBright\" : \"white\"),\n inverse: slotHex(dark ? \"black\" : \"whiteBright\"),\n inversebg: slotHex(dark ? \"whiteBright\" : \"black\"),\n cursor: slotHex(\"black\"),\n cursorbg: primaryHex,\n selection: slotHex(\"black\"),\n selectionbg: primaryHex,\n\n // ── Accent pairs (base = area bg, *fg = text on area) ──────\n primary: primaryHex,\n primaryfg: slotHex(\"black\"),\n secondary: primaryHex,\n secondaryfg: slotHex(\"black\"),\n accent: primaryHex,\n accentfg: slotHex(\"black\"),\n error: slotHex(dark ? \"redBright\" : \"red\"),\n errorfg: slotHex(\"black\"),\n warning: primaryHex,\n warningfg: slotHex(\"black\"),\n success: slotHex(dark ? \"greenBright\" : \"green\"),\n successfg: slotHex(\"black\"),\n info: slotHex(dark ? \"cyanBright\" : \"cyan\"),\n infofg: slotHex(\"black\"),\n\n // ── Standalone ───────────────────────────────────────────────\n border: slotHex(\"gray\"),\n inputborder: slotHex(\"gray\"),\n focusborder: slotHex(dark ? \"blueBright\" : \"blue\"),\n disabledfg: slotHex(\"gray\"),\n\n // ── Palette ──────────────────────────────────────────────────\n palette: [\n slotHex(\"black\"),\n slotHex(\"red\"),\n slotHex(\"green\"),\n slotHex(\"yellow\"),\n slotHex(\"blue\"),\n slotHex(\"magenta\"),\n slotHex(\"cyan\"),\n slotHex(\"white\"),\n slotHex(\"blackBright\"),\n slotHex(\"redBright\"),\n slotHex(\"greenBright\"),\n slotHex(\"yellowBright\"),\n slotHex(\"blueBright\"),\n slotHex(\"magentaBright\"),\n slotHex(\"cyanBright\"),\n slotHex(\"whiteBright\"),\n ],\n\n // ── Derived fields (brand, ring, state variants, variants) ───\n ...derived,\n } as unknown as Theme\n}\n","/**\n * Base16 scheme type — the 16-color format used by hundreds of community themes.\n *\n * @see https://github.com/chriskempson/base16\n */\n\n/** A parsed Base16 color scheme. All hex values are WITHOUT `#` prefix. */\nexport interface Base16Scheme {\n scheme: string\n author: string\n base00: string\n base01: string\n base02: string\n base03: string\n base04: string\n base05: string\n base06: string\n base07: string\n base08: string\n base09: string\n base0A: string\n base0B: string\n base0C: string\n base0D: string\n base0E: string\n base0F: string\n}\n\n/** All Base16 color keys in order. */\nexport const BASE16_KEYS = [\n \"base00\",\n \"base01\",\n \"base02\",\n \"base03\",\n \"base04\",\n \"base05\",\n \"base06\",\n \"base07\",\n \"base08\",\n \"base09\",\n \"base0A\",\n \"base0B\",\n \"base0C\",\n \"base0D\",\n \"base0E\",\n \"base0F\",\n] as const\n","/**\n * Import Base16 YAML/JSON schemes into ColorScheme format.\n *\n * Base16 defines 16 colors (base00–base0F). We map them to ColorScheme's\n * 22 colors, deriving bright variants and special colors.\n *\n * @see https://github.com/chriskempson/base16\n */\n\nimport { darken, brighten, hexToRgb } from \"@silvery/color\"\nimport type { ColorScheme } from \"@silvery/ansi\"\nimport type { Base16Scheme } from \"./types\"\nimport { BASE16_KEYS } from \"./types\"\n\n// ============================================================================\n// YAML Parser (minimal — Base16 YAML is just `key: \"value\"` lines)\n// ============================================================================\n\n/**\n * Parse Base16 YAML into a Base16Scheme object.\n * Handles both quoted and unquoted values, comments, and blank lines.\n */\nfunction parseBase16Yaml(yaml: string): Base16Scheme {\n const result: Record<string, string> = {}\n\n for (const raw of yaml.split(\"\\n\")) {\n const line = raw.trim()\n if (!line || line.startsWith(\"#\")) continue\n\n const colonIdx = line.indexOf(\":\")\n if (colonIdx === -1) continue\n\n const key = line.slice(0, colonIdx).trim()\n let value = line.slice(colonIdx + 1).trim()\n\n // Strip surrounding quotes (single or double)\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1)\n }\n\n // Strip inline comments (only after unquoted values)\n const commentIdx = value.indexOf(\"#\")\n if (commentIdx > 0) {\n value = value.slice(0, commentIdx).trim()\n }\n\n result[key] = value\n }\n\n // Validate required fields\n if (!result.scheme) {\n throw new Error(\"Base16 YAML missing required field: scheme\")\n }\n\n for (const key of BASE16_KEYS) {\n if (!result[key]) {\n throw new Error(`Base16 YAML missing required color: ${key}`)\n }\n // Validate hex format (6 hex chars, no # prefix)\n if (!/^[0-9a-fA-F]{6}$/.test(result[key]!)) {\n throw new Error(\n `Base16 color ${key} must be a 6-digit hex string without '#', got: \"${result[key]}\"`,\n )\n }\n }\n\n return result as unknown as Base16Scheme\n}\n\n// ============================================================================\n// Luminance Detection\n// ============================================================================\n\n/** Compute relative luminance (WCAG 2.0) from a hex color with `#` prefix. */\nfunction luminance(hex: string): number {\n const rgb = hexToRgb(hex)\n if (!rgb) return 0\n const [r, g, b] = rgb.map((c) => {\n const s = c / 255\n return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4)\n })\n return 0.2126 * r! + 0.7152 * g! + 0.0722 * b!\n}\n\n// ============================================================================\n// Import\n// ============================================================================\n\n/** Normalize a bare hex string to `#RRGGBB` (uppercase). */\nfunction hex(bare: string): string {\n return `#${bare.toUpperCase()}`\n}\n\n/**\n * Import a Base16 YAML (or JSON) scheme into a ColorScheme.\n *\n * Mapping:\n * base00 → background, base01 → brightBlack, base02 → selectionBackground,\n * base03 → white (muted fg), base05 → foreground/brightWhite,\n * base08 → red, base09 → brightRed, base0A → yellow,\n * base0B → green, base0C → cyan, base0D → blue, base0E → magenta,\n * base0F → brightMagenta.\n *\n * Bright color variants are derived by brightening normals.\n * `dark` is inferred from base00 luminance.\n */\nexport function importBase16(yamlOrJson: string): ColorScheme {\n const scheme = parseBase16Yaml(yamlOrJson)\n return base16ToColorScheme(scheme)\n}\n\n/** Convert a parsed Base16Scheme to ColorScheme. */\nexport function base16ToColorScheme(scheme: Base16Scheme): ColorScheme {\n const bg = hex(scheme.base00)\n const fg = hex(scheme.base05)\n const isDark = luminance(bg) < 0.179\n\n const black = isDark ? darken(bg, 0.15) : brighten(bg, 0.15)\n const red = hex(scheme.base08)\n const green = hex(scheme.base0B)\n const yellow = hex(scheme.base0A)\n const blue = hex(scheme.base0D)\n const magenta = hex(scheme.base0E)\n const cyan = hex(scheme.base0C)\n\n return {\n name: scheme.scheme,\n dark: isDark,\n black,\n red,\n green,\n yellow,\n blue,\n magenta,\n cyan,\n white: hex(scheme.base03),\n brightBlack: hex(scheme.base01),\n brightRed: hex(scheme.base09),\n brightGreen: brighten(green, 0.15),\n brightYellow: brighten(yellow, 0.15),\n brightBlue: brighten(blue, 0.15),\n brightMagenta: hex(scheme.base0F),\n brightCyan: brighten(cyan, 0.15),\n brightWhite: fg,\n foreground: fg,\n background: bg,\n cursorColor: fg,\n cursorText: bg,\n selectionBackground: hex(scheme.base02),\n selectionForeground: fg,\n }\n}\n","/**\n * Palette generators — produce a ColorScheme from various inputs.\n *\n * All generators return a complete ColorScheme (22 fields).\n */\n\nimport { hexToOklch, oklchToHex, brighten, darken, blend, relativeLuminance } from \"@silvery/color\"\nimport { importBase16 as importBase16Internal } from \"./import/base16\"\nimport { getSchemeByName } from \"./schemes/index\"\nimport type { ColorScheme, HueName } from \"@silvery/ansi\"\n\n// ============================================================================\n// Luminance\n// ============================================================================\n\nfunction isDarkColor(hex: string): boolean {\n const L = relativeLuminance(hex)\n return L === null ? true : L < 0.5\n}\n\n// ============================================================================\n// Accent Generation\n// ============================================================================\n\n/**\n * Target hues for each accent slot, in OKLCH degrees.\n * OKLCH hues differ from HSL — red ≈ 29, green ≈ 142, blue ≈ 264. Calibrated\n * per Ottosson's reference ramps for perceptually-uniform accent generation.\n */\nconst targetHues: Record<HueName, number> = {\n red: 29,\n orange: 55,\n yellow: 90,\n green: 142,\n teal: 195,\n blue: 240,\n purple: 305,\n pink: 350,\n}\n\n/** Find which hue slot the primary color best matches by OKLCH hue angle proximity. */\nexport function assignPrimaryToSlot(primary: string): HueName {\n const o = hexToOklch(primary)\n if (!o) return \"blue\"\n const h = o.H\n const slots: [number, number, HueName][] = [\n [0, 15, \"red\"],\n [15, 42, \"orange\"],\n [42, 75, \"yellow\"],\n [75, 170, \"green\"],\n [170, 210, \"teal\"],\n [210, 275, \"blue\"],\n [275, 330, \"purple\"],\n [330, 360, \"pink\"],\n ]\n for (const [lo, hi, name] of slots) {\n if (h >= lo && h < hi) return name\n }\n // Fallback: red band wraps around 0 — anything >345 or <15 is red.\n return \"red\"\n}\n\n/** Generate 8 accent hues from a primary, placing it in its natural slot. */\nfunction generateAccentsFromPrimary(primary: string): Record<HueName, string> {\n const o = hexToOklch(primary)\n if (!o) {\n return {\n red: \"#BF616A\",\n orange: \"#D08770\",\n yellow: \"#EBCB8B\",\n green: \"#A3BE8C\",\n teal: \"#88C0D0\",\n blue: \"#5E81AC\",\n purple: \"#B48EAD\",\n pink: \"#D4879C\",\n }\n }\n const slot = assignPrimaryToSlot(primary)\n const result = {} as Record<HueName, string>\n for (const [name, targetH] of Object.entries(targetHues) as [HueName, number][]) {\n // Hue rotation in OKLCH preserves L + C so all accents have equal\n // perceived lightness and colorfulness — the defining property of a\n // visually-balanced accent ramp.\n result[name] = name === slot ? primary : oklchToHex({ L: o.L, C: o.C, H: targetH })\n }\n return result\n}\n\n// ============================================================================\n// fromBase16 — Base16 YAML → ColorScheme\n// ============================================================================\n\n/**\n * Generate a ColorScheme from a Base16 YAML scheme.\n *\n * Maps base00–base0F to ANSI palette colors, derives special colors.\n */\nexport function fromBase16(yamlOrJson: string): ColorScheme {\n return importBase16Internal(yamlOrJson)\n}\n\n// ============================================================================\n// fromColors — Generate full palette from 1-3 hex colors\n// ============================================================================\n\ninterface FromColorsOptions {\n /** Background color (infers dark/light). */\n background?: string\n /** Foreground/text color. Generated if omitted. */\n foreground?: string\n /** Primary accent color. Generated if omitted. */\n primary?: string\n /** Force dark mode. */\n dark?: boolean\n /** Theme name. */\n name?: string\n}\n\n/**\n * Generate a full ColorScheme from 1-3 hex colors.\n *\n * At minimum, provide `background` or `primary`. Missing colors are\n * generated via surface ramp (from bg) and hue rotation (from primary).\n */\nexport function fromColors(opts: FromColorsOptions): ColorScheme {\n const dark = opts.dark ?? (opts.background ? isDarkColor(opts.background) : true)\n const step = dark ? brighten : darken\n\n // Generate background if not provided\n const bg = opts.background ?? (dark ? \"#2E3440\" : \"#FFFFFF\")\n const fg = opts.foreground ?? step(bg, 0.85)\n\n // Generate accents from primary or defaults\n const accents = opts.primary\n ? generateAccentsFromPrimary(opts.primary)\n : {\n red: \"#BF616A\",\n orange: \"#D08770\",\n yellow: \"#EBCB8B\",\n green: \"#A3BE8C\",\n teal: \"#88C0D0\",\n blue: \"#5E81AC\",\n purple: \"#B48EAD\",\n pink: \"#D4879C\",\n }\n\n // Surface ramp for grayscale ANSI colors\n const black = dark ? darken(bg, 0.05) : darken(bg, 0.1)\n const white = dark ? blend(fg, bg, 0.3) : blend(bg, fg, 0.3)\n const brightBlack = step(bg, 0.15)\n const brightWhite = dark ? fg : brighten(fg, 0.1)\n\n return {\n name: opts.name ?? (dark ? \"generated-dark\" : \"generated-light\"),\n dark,\n primary: opts.primary,\n black,\n red: accents.red,\n green: accents.green,\n yellow: accents.yellow,\n blue: accents.blue,\n magenta: accents.purple,\n cyan: accents.teal,\n white,\n brightBlack,\n brightRed: accents.orange,\n brightGreen: brighten(accents.green, 0.15),\n brightYellow: brighten(accents.yellow, 0.15),\n brightBlue: brighten(accents.blue, 0.15),\n brightMagenta: accents.pink,\n brightCyan: brighten(accents.teal, 0.15),\n brightWhite,\n foreground: fg,\n background: bg,\n cursorColor: fg,\n cursorText: bg,\n selectionBackground: blend(bg, accents.blue, 0.3),\n selectionForeground: fg,\n }\n}\n\n// ============================================================================\n// fromPreset — Look up a built-in ColorScheme by name\n// ============================================================================\n\n/**\n * Look up a built-in palette by name.\n *\n * @returns The ColorScheme, or undefined if not found.\n */\nexport function fromPreset(name: string): ColorScheme | undefined {\n return getSchemeByName(name)\n}\n\n// ============================================================================\n// ThemePalette → ColorScheme conversion (migration helper)\n// ============================================================================\n\n/** Old ThemePalette shape for migration. */\ninterface OldThemePalette {\n name: string\n dark: boolean\n crust: string\n base: string\n surface: string\n overlay: string\n subtext: string\n text: string\n red: string\n orange: string\n yellow: string\n green: string\n teal: string\n blue: string\n purple: string\n pink: string\n}\n\n/**\n * Convert an old ThemePalette to a ColorScheme.\n *\n * Mapping:\n * black = crust, red/green/yellow/blue = direct, magenta = purple,\n * cyan = teal, white = subtext, brightBlack = surface,\n * brightRed = orange, bright{green,yellow,blue,cyan} = brighten(normal),\n * brightMagenta = pink, brightWhite = text,\n * foreground = text, background = base,\n * cursor = text/base, selection = overlay/text.\n */\nexport function themePaletteToColorScheme(p: OldThemePalette): ColorScheme {\n return {\n name: p.name,\n dark: p.dark,\n black: p.crust,\n red: p.red,\n green: p.green,\n yellow: p.yellow,\n blue: p.blue,\n magenta: p.purple,\n cyan: p.teal,\n white: p.subtext,\n brightBlack: p.surface,\n brightRed: p.orange,\n brightGreen: brighten(p.green, 0.15),\n brightYellow: brighten(p.yellow, 0.15),\n brightBlue: brighten(p.blue, 0.15),\n brightMagenta: p.pink,\n brightCyan: brighten(p.teal, 0.15),\n brightWhite: p.text,\n foreground: p.text,\n background: p.base,\n cursorColor: p.text,\n cursorText: p.base,\n selectionBackground: p.overlay,\n selectionForeground: p.text,\n }\n}\n","/**\n * Chainable theme builder — create themes from minimal input.\n *\n * @example\n * ```typescript\n * // Just a background color\n * const theme = createTheme().bg('#2E3440').build()\n *\n * // Primary + explicit dark mode\n * const theme = createTheme().primary('#EBCB8B').dark().build()\n *\n * // Three-color input (dark/light inferred from bg luminance)\n * const theme = createTheme()\n * .bg('#2E3440').fg('#ECEFF4').primary('#EBCB8B').build()\n *\n * // Preset with override\n * const theme = createTheme().preset('nord').primary('#A3BE8C').build()\n * ```\n */\n\nimport { hexToRgb } from \"@silvery/color\"\nimport { deriveTheme } from \"@silvery/ansi\"\nimport { fromColors, assignPrimaryToSlot } from \"./generators\"\nimport { getSchemeByName } from \"./schemes/index\"\nimport type { Theme, ColorScheme, HueName } from \"@silvery/ansi\"\n\n// ============================================================================\n// Luminance\n// ============================================================================\n\nfunction isDarkColor(hex: string): boolean {\n const rgb = hexToRgb(hex)\n if (!rgb) return true\n return (rgb[0] + rgb[1] + rgb[2]) / (255 * 3) < 0.5\n}\n\n// ============================================================================\n// Builder\n// ============================================================================\n\ninterface ThemeBuilderState {\n dark?: boolean\n bgColor?: string\n fgColor?: string\n primaryColor?: string\n colors: Partial<ColorScheme>\n presetPalette?: ColorScheme\n}\n\nexport interface ThemeBuilder {\n /** Set background color. */\n bg(color: string): ThemeBuilder\n /** Set foreground color. */\n fg(color: string): ThemeBuilder\n /** Set primary accent color. */\n primary(color: string): ThemeBuilder\n /** Alias for `.primary()`. */\n accent(color: string): ThemeBuilder\n /** Force dark mode. */\n dark(): ThemeBuilder\n /** Force light mode. */\n light(): ThemeBuilder\n /** Set any palette color by name. */\n color(name: keyof Omit<ColorScheme, \"name\" | \"dark\">, value: string): ThemeBuilder\n /** Set full palette at once. */\n palette(p: ColorScheme): ThemeBuilder\n /** Load a built-in palette by name. */\n preset(name: string): ThemeBuilder\n /** Derive the final Theme from accumulated state. */\n build(): Theme\n}\n\n/** Create a chainable theme builder. */\nexport function createTheme(): ThemeBuilder {\n const state: ThemeBuilderState = { colors: {} }\n\n const builder: ThemeBuilder = {\n bg(color) {\n state.bgColor = color\n return builder\n },\n fg(color) {\n state.fgColor = color\n return builder\n },\n primary(color) {\n state.primaryColor = color\n return builder\n },\n accent(color) {\n return builder.primary(color)\n },\n dark() {\n state.dark = true\n return builder\n },\n light() {\n state.dark = false\n return builder\n },\n color(name, value) {\n ;(state.colors as Record<string, string>)[name] = value\n return builder\n },\n palette(p) {\n state.presetPalette = p\n return builder\n },\n preset(name) {\n const p = getSchemeByName(name)\n if (p) state.presetPalette = p\n return builder\n },\n\n build(): Theme {\n const isDark = state.dark ?? (state.bgColor ? isDarkColor(state.bgColor) : true)\n\n let palette: ColorScheme\n\n if (state.presetPalette) {\n // Start from preset, apply overrides\n palette = { ...state.presetPalette }\n if (state.bgColor) palette.background = state.bgColor\n if (state.fgColor) palette.foreground = state.fgColor\n if (state.primaryColor) {\n // Set semantic primary seed so deriveTheme() uses it\n palette.primary = state.primaryColor\n // Also place in the appropriate ANSI slot for accent derivation\n const slot = assignPrimaryToSlot(state.primaryColor)\n const ansiName = hueToAnsiField(slot)\n ;(palette as unknown as Record<string, string>)[ansiName] = state.primaryColor\n }\n palette.dark = isDark\n } else {\n // Generate from minimal input\n palette = fromColors({\n background: state.bgColor,\n foreground: state.fgColor,\n primary: state.primaryColor,\n dark: isDark,\n })\n }\n\n // Apply explicit color overrides\n for (const [key, val] of Object.entries(state.colors)) {\n if (val !== undefined && typeof val === \"string\")\n (palette as unknown as Record<string, string>)[key] = val\n }\n\n return deriveTheme(palette)\n },\n }\n\n return builder\n}\n\n/** Map a HueName to the corresponding ColorScheme field. */\nfunction hueToAnsiField(hue: HueName): keyof ColorScheme {\n const map: Record<HueName, keyof ColorScheme> = {\n red: \"red\",\n orange: \"brightRed\",\n yellow: \"yellow\",\n green: \"green\",\n teal: \"cyan\",\n blue: \"blue\",\n purple: \"magenta\",\n pink: \"brightMagenta\",\n }\n return map[hue]\n}\n\n// ============================================================================\n// Convenience Functions\n// ============================================================================\n\n/**\n * Quick theme from a primary color or color name.\n *\n * @example\n * ```typescript\n * quickTheme('#EBCB8B', 'dark') // yellow primary, dark mode\n * quickTheme('blue') // blue primary, default dark\n * ```\n */\nexport function quickTheme(primaryOrHex: string, mode?: \"dark\" | \"light\"): Theme {\n const b = createTheme()\n if (primaryOrHex.startsWith(\"#\")) {\n b.primary(primaryOrHex)\n } else {\n const namedColors: Record<string, string> = {\n red: \"#BF616A\",\n orange: \"#D08770\",\n yellow: \"#EBCB8B\",\n green: \"#A3BE8C\",\n teal: \"#88C0D0\",\n cyan: \"#88C0D0\",\n blue: \"#5E81AC\",\n purple: \"#B48EAD\",\n pink: \"#D4879C\",\n magenta: \"#B48EAD\",\n white: \"#ECEFF4\",\n }\n b.primary(namedColors[primaryOrHex] ?? \"#5E81AC\")\n }\n if (mode === \"dark\") b.dark()\n else if (mode === \"light\") b.light()\n return b.build()\n}\n\n/**\n * Create a theme from a built-in preset name.\n *\n * @example\n * ```typescript\n * presetTheme('catppuccin-mocha')\n * presetTheme('nord')\n * ```\n */\nexport function presetTheme(name: string): Theme {\n return createTheme().preset(name).build()\n}\n","/**\n * Auto-generate themes — create a complete Theme from a single primary color.\n *\n * Uses OKLCH color manipulation to derive complementary and analogous colors\n * for the full palette from one input color. OKLCH preserves perceived\n * lightness and chroma across hue rotations, so accent ramps look balanced.\n */\n\nimport { hexToOklch, oklchToHex, blend } from \"@silvery/color\"\nimport { fromColors } from \"./generators\"\nimport { deriveTheme } from \"@silvery/ansi\"\nimport type { Theme } from \"@silvery/ansi\"\n\n/** Standard OKLCH hue positions for semantic accents (degrees).\n * OKLCH hues differ from HSL: red≈29, orange≈55, yellow≈90, green≈142,\n * teal≈195, blue≈240, purple≈305, pink≈350. Calibrated against Ottosson's\n * reference ramps. */\nconst HUE = {\n red: 29,\n orangeBright: 55,\n yellow: 90,\n green: 142,\n cyan: 195,\n blue: 240,\n magenta: 310,\n pinkBright: 350,\n} as const\n\n/**\n * Generate a complete Theme from a single primary color.\n *\n * Derives a full ColorScheme using OKLCH color manipulation:\n * - Background/foreground from lightness endpoints using the primary's hue\n * - Complementary and analogous accent colors from hue rotation\n * - Surface ramp from bg lightness offsets\n * - Status colors (error, warning, success, info) from standard hue positions\n *\n * @param primaryColor - A hex color string (e.g. \"#5E81AC\")\n * @param mode - \"dark\" or \"light\" theme mode\n * @returns A complete Theme with all 33 semantic tokens\n *\n * @example\n * ```typescript\n * const theme = autoGenerateTheme(\"#5E81AC\", \"dark\")\n * // Generates a full dark theme with blue as the primary accent\n *\n * const light = autoGenerateTheme(\"#E06C75\", \"light\")\n * // Generates a full light theme with red/rose as the primary accent\n * ```\n */\nexport function autoGenerateTheme(primaryColor: string, mode: \"dark\" | \"light\"): Theme {\n const o = hexToOklch(primaryColor)\n if (!o) {\n // Fallback: use default colors if input is not valid hex\n const palette = fromColors({ dark: mode === \"dark\" })\n return deriveTheme(palette)\n }\n\n const dark = mode === \"dark\"\n\n // Background and foreground — use the primary's hue at low chroma for subtle\n // tinting, OKLCH L endpoints calibrated perceptually.\n const bgL = dark ? 0.22 : 0.96\n const fgL = dark ? 0.9 : 0.2\n const bgC = Math.min(o.C, 0.03) // keep bg chroma low — it's a neutral\n const bg = oklchToHex({ L: bgL, C: bgC, H: o.H })\n const fg = oklchToHex({ L: fgL, C: bgC * 0.5, H: o.H })\n\n // Accent ring — same L and C as primary, different H. Preserves perceived\n // weight across the ramp so no one color pops more than another.\n const accentL = dark ? 0.72 : 0.52\n const accentC = Math.max(o.C, 0.1) // ensure accents are vivid enough\n const accent = (h: number) => oklchToHex({ L: accentL, C: accentC, H: h })\n\n const red = accent(HUE.red)\n const green = accent(HUE.green)\n const yellow = accent(HUE.yellow)\n const blue = accent(HUE.blue)\n const magenta = accent(HUE.magenta)\n const cyan = accent(HUE.cyan)\n\n // Bright variants — shift L by ±0.08 in the appropriate direction.\n const brightL = accentL + (dark ? 0.1 : -0.1)\n const brightAccent = (h: number) => oklchToHex({ L: brightL, C: accentC, H: h })\n\n const brightRed = brightAccent(HUE.orangeBright)\n const brightGreen = brightAccent(HUE.green)\n const brightYellow = brightAccent(HUE.yellow)\n const brightBlue = brightAccent(HUE.blue)\n const brightMagenta = brightAccent(HUE.pinkBright)\n const brightCyan = brightAccent(HUE.cyan)\n\n // Surface ramp — neutral grays at the bg's hue\n const black = oklchToHex({ L: dark ? bgL * 0.7 : bgL * 0.92, C: bgC, H: o.H })\n const white = oklchToHex({ L: dark ? 0.6 : 0.35, C: bgC * 0.3, H: o.H })\n const brightBlack = oklchToHex({ L: dark ? bgL + 0.1 : bgL - 0.08, C: bgC, H: o.H })\n const brightWhite = dark ? fg : oklchToHex({ L: fgL - 0.05, C: bgC * 0.5, H: o.H })\n\n const palette = {\n name: `generated-${mode}`,\n dark,\n primary: primaryColor,\n black,\n red,\n green,\n yellow,\n blue,\n magenta,\n cyan,\n white,\n brightBlack,\n brightRed,\n brightGreen,\n brightYellow,\n brightBlue,\n brightMagenta,\n brightCyan,\n brightWhite,\n foreground: fg,\n background: bg,\n cursorColor: fg,\n cursorText: bg,\n selectionBackground: blend(bg, primaryColor, 0.3),\n selectionForeground: fg,\n }\n\n // Primary seed is on the palette — deriveTheme() uses it directly,\n // ensuring contrast and deriving secondary/accent consistently.\n return deriveTheme(palette)\n}\n","/**\n * Palette validation — checks ColorScheme fields and contrast.\n */\n\nimport { hexToRgb } from \"@silvery/color\"\nimport { COLOR_SCHEME_FIELDS, type ColorScheme } from \"@silvery/ansi\"\n\n/** Validation result from validateColorScheme(). */\nexport interface ValidationResult {\n valid: boolean\n errors: string[]\n warnings: string[]\n}\n\n/**\n * Validate a ColorScheme.\n *\n * Checks:\n * - All 22 color fields are present and non-empty hex strings\n * - Warns on low-contrast foreground/background combinations\n */\nexport function validateColorScheme(p: ColorScheme): ValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n // Required color fields\n for (const field of COLOR_SCHEME_FIELDS) {\n const val = p[field]\n if (!val || typeof val !== \"string\") {\n errors.push(`${field} is required and must be a non-empty string`)\n }\n }\n\n // Contrast warnings (only for hex colors)\n if (p.foreground && p.background) {\n const fgRgb = hexToRgb(p.foreground)\n const bgRgb = hexToRgb(p.background)\n if (fgRgb && bgRgb) {\n const fgSum = fgRgb[0] + fgRgb[1] + fgRgb[2]\n const bgSum = bgRgb[0] + bgRgb[1] + bgRgb[2]\n const fgIsLight = fgSum > 384\n const bgIsLight = bgSum > 384\n if (fgIsLight === bgIsLight) {\n warnings.push(\n `Low contrast: foreground (${p.foreground}) and background (${p.background}) have similar lightness`,\n )\n }\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n }\n}\n","/**\n * Theme validation — checks that all required semantic tokens are present.\n *\n * Complements validateColorScheme() which validates the lower-level\n * ColorScheme. This validates the derived Theme object.\n */\n\n/**\n * Required semantic token keys on Theme (excludes `name` and `palette`).\n *\n * Sterling owns selection / inverse / link styling via flat tokens\n * (`bg-selected`, `fg-on-selected`, `bg-inverse`, `fg-on-inverse`, `fg-link`)\n * baked in by `inlineSterlingTokens`. The legacy single-hex aliases\n * (`selection`, `selectionbg`, `inverse`, `inversebg`, `link`) were removed\n * in 0.21.0 (sterling-purge-legacy-tokens).\n */\nexport const THEME_TOKEN_KEYS: readonly string[] = [\n // Root pair\n \"bg\",\n \"fg\",\n // Surface pairs (base = text, *bg = background)\n \"muted\",\n \"mutedbg\",\n \"surface\",\n \"surfacebg\",\n \"popover\",\n \"popoverbg\",\n \"cursor\",\n \"cursorbg\",\n // 7 accent pairs (base = area bg, *fg = text on area)\n \"primary\",\n \"primaryfg\",\n \"secondary\",\n \"secondaryfg\",\n \"accent\",\n \"accentfg\",\n \"error\",\n \"errorfg\",\n \"warning\",\n \"warningfg\",\n \"success\",\n \"successfg\",\n \"info\",\n \"infofg\",\n // Standalone tokens\n \"border\",\n \"inputborder\",\n \"focusborder\",\n \"disabledfg\",\n] as const\n\n/** Result of theme validation. */\nexport interface ThemeValidationResult {\n /** Whether the theme has all required tokens. */\n valid: boolean\n /** Token keys that are required but missing or empty. */\n missing: string[]\n /** Token keys that exist on the object but are not recognized theme tokens. */\n extra: string[]\n}\n\n/** All recognized keys on Theme (tokens + metadata). */\nconst ALL_KNOWN_KEYS = new Set([...THEME_TOKEN_KEYS, \"name\", \"palette\"])\n\n/**\n * Validate a Theme object — check that all required tokens are present.\n *\n * @param theme - The theme object to validate\n * @returns Validation result with missing and extra token lists\n *\n * @example\n * ```typescript\n * const result = validateTheme(myTheme)\n * if (!result.valid) {\n * console.log(\"Missing tokens:\", result.missing)\n * }\n * ```\n */\nexport function validateTheme(theme: Record<string, unknown>): ThemeValidationResult {\n const missing: string[] = []\n const extra: string[] = []\n\n // Check for missing or empty required tokens\n for (const key of THEME_TOKEN_KEYS) {\n const val = theme[key]\n if (val === undefined || val === null || val === \"\") {\n missing.push(key)\n }\n }\n\n // Check for unrecognized keys (exclude prototype properties)\n for (const key of Object.keys(theme)) {\n if (!ALL_KNOWN_KEYS.has(key)) {\n extra.push(key)\n }\n }\n\n return {\n valid: missing.length === 0,\n missing,\n extra,\n }\n}\n","/**\n * Token aliasing — resolve token values that reference other tokens.\n *\n * Supports alias chains (e.g. $button -> $primary -> #EBCB8B) with a\n * depth limit to prevent infinite loops from circular references.\n */\n\nimport type { Theme } from \"@silvery/ansi\"\n\n/** Maximum depth for alias chain resolution before treating as circular. */\nconst MAX_ALIAS_DEPTH = 10\n\n/**\n * Resolve all token aliases in a theme.\n *\n * Token values that start with `$` are treated as references to other tokens.\n * Alias chains are followed until a concrete (non-$) value is reached.\n * Circular references are detected via a depth limit and left unresolved.\n *\n * @param theme - A theme-like object where values may reference other tokens via `$name`\n * @returns A new object with all aliases resolved to concrete values\n *\n * @example\n * ```typescript\n * const themed = resolveAliases({\n * ...baseTheme,\n * button: \"$primary\", // resolves to the value of 'primary'\n * buttonHover: \"$button\", // chain: buttonHover -> button -> primary -> hex\n * })\n * ```\n */\nexport function resolveAliases(theme: Record<string, string>): Record<string, string> {\n const result: Record<string, string> = {}\n\n for (const key of Object.keys(theme)) {\n result[key] = resolveAlias(key, theme, 0)\n }\n\n return result\n}\n\n/**\n * Resolve a single token's alias chain.\n *\n * @param key - The token key to resolve\n * @param tokens - The full token map\n * @param depth - Current recursion depth (for loop detection)\n * @returns The resolved concrete value, or the raw alias string if unresolvable\n */\nfunction resolveAlias(key: string, tokens: Record<string, string>, depth: number): string {\n if (depth >= MAX_ALIAS_DEPTH) return tokens[key] ?? \"\"\n\n const value = tokens[key]\n if (value === undefined) return \"\"\n\n // Not an alias — return the concrete value\n if (!value.startsWith(\"$\")) return value\n\n // Strip the `$` prefix and look up the referenced token\n const refKey = value.slice(1)\n if (!(refKey in tokens)) return value // Unknown reference, return as-is\n\n return resolveAlias(refKey, tokens, depth + 1)\n}\n\n/**\n * Resolve a single alias value against a Theme.\n *\n * Useful for resolving individual values without processing the entire theme.\n *\n * @param value - The value to resolve (may be \"$tokenName\" or a concrete value)\n * @param theme - The theme to resolve against\n * @returns The resolved concrete value\n */\nexport function resolveTokenAlias(value: string, theme: Theme): string {\n if (!value.startsWith(\"$\")) return value\n\n const seen = new Set<string>()\n let current = value\n\n for (let i = 0; i < MAX_ALIAS_DEPTH; i++) {\n if (!current.startsWith(\"$\")) return current\n\n const key = current.slice(1) as keyof Theme\n if (seen.has(key)) return current // Circular reference\n seen.add(key)\n\n const resolved = theme[key]\n if (typeof resolved !== \"string\") return current\n current = resolved\n }\n\n return current\n}\n","/**\n * CSS variables export — convert theme tokens to CSS custom properties.\n *\n * Emits Sterling flat tokens (`--fg-accent`, `--bg-surface-subtle`,\n * `--border-focus`, …) as 1:1 CSS custom properties. The flat-token\n * grammar is the canonical web-facing surface — see\n * `hub/silvery/design/v10-terminal/design-system.md` §\"Flat — the\n * user-facing form\".\n *\n * Every shipped Theme has Sterling flat keys baked on at construction\n * (via `inlineSterlingTokens` in `./schemes/index.ts`) so this walk\n * produces a complete export without needing a separate derivation pass.\n */\n\nimport type { Theme } from \"@silvery/ansi\"\nimport { STERLING_FLAT_TOKENS } from \"@silvery/ansi\"\n\n/**\n * Convert a Theme to CSS custom properties.\n *\n * Token names mirror Sterling's flat grammar with a `--` prefix:\n * - `bg-surface-default` → `--bg-surface-default`\n * - `fg-accent` → `--fg-accent`\n * - `border-focus` → `--border-focus`\n * - Palette entries: `--color0` through `--color15`\n *\n * @param theme - The theme to convert (Sterling flat tokens must be populated)\n * @returns A record mapping CSS custom property names to color values\n *\n * @example\n * ```typescript\n * const vars = themeToCSSVars(myTheme)\n * // { \"--bg-surface-default\": \"#1E1E2E\", \"--fg-accent\": \"#F9E2AF\", ... }\n *\n * // Apply to an element:\n * Object.assign(element.style, vars)\n * ```\n */\nexport function themeToCSSVars(theme: Theme): Record<string, string> {\n const vars: Record<string, string> = {}\n\n // Sterling flat tokens — channel-role-state grammar.\n const flat = theme as unknown as Record<string, string | undefined>\n for (const key of STERLING_FLAT_TOKENS) {\n const value = flat[key]\n if (typeof value === \"string\") {\n vars[`--${key}`] = value\n }\n }\n\n // Palette colors — raw ANSI slots for app-level category coloring.\n if (theme.palette) {\n for (let i = 0; i < theme.palette.length; i++) {\n vars[`--color${i}`] = theme.palette[i]!\n }\n }\n\n return vars\n}\n","/**\n * Export ColorScheme to Base16 YAML format.\n *\n * Maps ColorScheme fields to base00–base0F. For fields that\n * ColorScheme doesn't store directly (base04/base06/base07),\n * we interpolate between neighboring values.\n *\n * @see https://github.com/chriskempson/base16\n */\n\nimport { blend } from \"@silvery/color\"\nimport type { ColorScheme } from \"@silvery/ansi\"\n\n/** Strip `#` prefix from a hex color string and uppercase. */\nfunction stripHash(hex: string): string {\n const bare = hex.startsWith(\"#\") ? hex.slice(1) : hex\n return bare.toUpperCase()\n}\n\n/**\n * Export a ColorScheme to Base16 YAML format.\n *\n * Mapping:\n * background → base00, brightBlack → base01, selectionBackground → base02,\n * white → base03, (interpolated) → base04, foreground → base05,\n * (interpolated) → base06, (interpolated) → base07,\n * red → base08, brightRed → base09, yellow → base0A, green → base0B,\n * cyan → base0C, blue → base0D, magenta → base0E, brightMagenta → base0F.\n */\nexport function exportBase16(palette: ColorScheme): string {\n const dark = palette.dark ?? true\n\n // base04: between white (base03/muted fg) and foreground (base05)\n const base04 = blend(palette.white, palette.foreground, 0.33)\n\n // base06: light foreground — between fg and the inverse extreme\n const base06 = dark\n ? blend(palette.foreground, \"#FFFFFF\", 0.15)\n : blend(palette.foreground, \"#000000\", 0.15)\n\n // base07: lightest background — use black (the deepest bg extreme)\n const base07 = palette.black\n\n const lines = [\n `scheme: \"${palette.name ?? \"exported\"}\"`,\n `author: \"\"`,\n `base00: \"${stripHash(palette.background)}\"`,\n `base01: \"${stripHash(palette.brightBlack)}\"`,\n `base02: \"${stripHash(palette.selectionBackground)}\"`,\n `base03: \"${stripHash(palette.white)}\"`,\n `base04: \"${stripHash(base04)}\"`,\n `base05: \"${stripHash(palette.foreground)}\"`,\n `base06: \"${stripHash(base06)}\"`,\n `base07: \"${stripHash(base07)}\"`,\n `base08: \"${stripHash(palette.red)}\"`,\n `base09: \"${stripHash(palette.brightRed)}\"`,\n `base0A: \"${stripHash(palette.yellow)}\"`,\n `base0B: \"${stripHash(palette.green)}\"`,\n `base0C: \"${stripHash(palette.cyan)}\"`,\n `base0D: \"${stripHash(palette.blue)}\"`,\n `base0E: \"${stripHash(palette.magenta)}\"`,\n `base0F: \"${stripHash(palette.brightMagenta)}\"`,\n ]\n\n return lines.join(\"\\n\") + \"\\n\"\n}\n","/**\n * Terminal palette detection — straight re-export from `@silvery/ansi`.\n *\n * `@silvery/ansi`'s `detectTheme` / `detectScheme` / `detectSchemeTheme` now\n * return themes with Sterling flat tokens (`$bg-accent`, `$bg-surface-overlay`,\n * `$border-default`, `$fg-muted`, …) baked in. There is one canonical Theme\n * shape; this module exists only so downstream code importing from\n * `@silvery/theme` (or `silvery`, via barrel re-export) continues to work.\n *\n * Historical note (km-silvery.fallback-theme-empty-bg-tokens): this file used\n * to wrap `@silvery/ansi`'s detection functions with `inlineSterlingTokens` to\n * compensate for `@silvery/ansi` producing \"partial\" themes. That split was\n * the root cause of the \"31/32 empty bg tokens on fallback\" regression —\n * every caller that reached past the wrapper hit the partial shape. The\n * fix was structural: move Sterling into `@silvery/ansi` so `deriveTheme`,\n * `loadTheme`, and all detection paths bake flat tokens in. This file no\n * longer transforms anything.\n *\n * @example\n * ```ts\n * import { detectTheme } from \"@silvery/theme\"\n * import { nord, catppuccinLatte } from \"@silvery/theme/schemes\"\n *\n * const theme = await detectTheme({ fallbackDark: nord, fallbackLight: catppuccinLatte })\n * ```\n */\n\nexport {\n probeColors,\n detectTerminalScheme,\n detectTheme,\n detectScheme,\n detectSchemeTheme,\n} from \"@silvery/ansi\"\n\nexport type {\n DetectedScheme,\n DetectThemeOptions,\n DetectSchemeOptions,\n DetectSchemeResult,\n DetectSource,\n SlotSource,\n} from \"@silvery/ansi\"\n","/**\n * `@silvery/theme/sterling` subpath — re-export from `@silvery/ansi`.\n *\n * Sterling (silvery's canonical design system) lives in `@silvery/ansi` so\n * `deriveTheme`, `loadTheme`, and shipped Theme constants automatically bake\n * its flat tokens. This subpath exists for backward compatibility — prefer\n * importing from `@silvery/ansi` directly.\n */\n\nexport {\n sterling,\n defineDesignSystem,\n sterlingDeriveTheme as deriveTheme,\n sterlingDeriveRoles as deriveRoles,\n sterlingMergePartial as mergePartial,\n inlineSterlingTokens,\n STERLING_FLAT_TOKENS,\n PUBLIC_TOKENS,\n FAMILY_ORDER,\n groupTokensByFamily,\n sterlingDefaultScheme as defaultScheme,\n WCAG_AA,\n sterlingAutoLift as autoLift,\n sterlingCheckAA as checkAA,\n SterlingContrastError as ContrastError,\n bakeFlat,\n defaultFlattenRule,\n} from \"@silvery/ansi\"\n\nexport type {\n AccentRole,\n BorderRole,\n SterlingContrastMode as ContrastMode,\n SterlingContrastViolation as ContrastViolation,\n CursorRole,\n SterlingDeepPartial as DeepPartial,\n SterlingDerivationStep as DerivationStep,\n SterlingDerivationTrace as DerivationTrace,\n SterlingDeriveOptions as DeriveOptions,\n DesignSystem,\n FlatToken,\n FlatTokens,\n FlattenRule,\n InlinedTheme,\n InteractiveRole,\n MutedRole,\n SterlingRoles as Roles,\n StatePair,\n SurfaceRole,\n SterlingTheme as Theme,\n ThemeShape,\n ColorScheme,\n TokenManifestEntry,\n} from \"@silvery/ansi\"\n","/**\n * @silvery/theme — Color scheme catalog for silvery.\n *\n * 84 built-in color schemes (the \"inspiration library\") for any platform.\n * Theme derivation and color utilities live in `@silvery/ansi` and `@silvery/color`.\n *\n * Two-layer architecture:\n * Layer 1: ColorScheme (22 terminal colors — universal pivot format)\n * Layer 2: Theme (33 semantic tokens — what UI apps consume, via @silvery/ansi deriveTheme)\n *\n * Pipeline: builtinPalettes → deriveTheme() → Theme\n *\n * @example\n * ```typescript\n * import { catppuccinMocha } from \"@silvery/theme\"\n * import { deriveTheme } from \"@silvery/ansi\"\n *\n * const theme = deriveTheme(catppuccinMocha)\n * ```\n *\n * @packageDocumentation\n */\n\n// Core types (ColorScheme lives here; Theme lives in @silvery/ansi)\nexport type { ColorScheme } from \"@silvery/ansi\"\nexport { COLOR_SCHEME_FIELDS } from \"@silvery/ansi\"\n\n// ANSI 16 theme generation (produces Theme from primary color, no ColorScheme needed)\nexport { generateTheme } from \"./generate\"\n\n// Palette generators (fromColors, fromPreset, assignPrimaryToSlot also in @silvery/ansi)\nexport { fromBase16, fromColors, fromPreset, assignPrimaryToSlot } from \"./generators\"\n\n// Builder API (convenience wrappers that use preset schemes from this package)\nexport { createTheme, quickTheme, presetTheme } from \"./builder\"\n\n// Auto-generate (also in @silvery/ansi; kept here for convenience)\nexport { autoGenerateTheme } from \"./auto-generate\"\n\n// Validation\nexport { validateColorScheme } from \"./validate\"\nexport type { ValidationResult } from \"./validate\"\nexport { validateTheme, THEME_TOKEN_KEYS } from \"./validate-theme\"\nexport type { ThemeValidationResult } from \"./validate-theme\"\n\n// Token aliasing\nexport { resolveAliases, resolveTokenAlias } from \"./alias\"\n\n// CSS variables export\nexport { themeToCSSVars } from \"./css\"\n\n// Base16 import/export\nexport { importBase16 } from \"./import/base16\"\nexport { exportBase16 } from \"./export/base16\"\nexport type { Base16Scheme } from \"./import/types\"\n\n// Built-in themes (pre-derived)\nexport {\n ansi16DarkTheme,\n ansi16LightTheme,\n defaultDarkTheme,\n defaultLightTheme,\n builtinThemes,\n getThemeByName,\n} from \"./schemes/index\"\n\n// Terminal detection — Sterling-aware wrappers around `@silvery/ansi`'s\n// detection layer. All four entry points run their result through\n// `inlineSterlingTokens` so `$border-default` etc. always resolve, and\n// re-export the underlying types unchanged.\n//\n// - `probeColors` — OSC 4/10/11 probe → 22-slot ColorScheme (canonical name)\n// - `detectTerminalScheme` — legacy alias for `probeColors`\n// - `detectTheme` — probe + derive (returns just a Theme, with fallbacks)\n// - `detectScheme` / `detectSchemeTheme` — full 4-layer cascade with\n// provenance (override → probe → fingerprint → fallback)\nexport {\n probeColors,\n detectTerminalScheme,\n detectTheme,\n detectScheme,\n detectSchemeTheme,\n} from \"./detect\"\nexport type {\n DetectedScheme,\n DetectThemeOptions,\n DetectSchemeOptions,\n DetectSchemeResult,\n DetectSource,\n SlotSource,\n} from \"./detect\"\n\n// Sterling — silvery's canonical design system.\n// See packages/theme/src/sterling/ and hub/silvery/design/v10-terminal/design-system.md.\n//\n// Sterling flat tokens (`bg-accent`, `fg-on-accent`, `border-focus`, …) are\n// baked into every shipped Theme at construction (see ./schemes/index.ts).\n// Consumers read flat keys directly off the Theme — no explicit augment call\n// is needed or available.\nexport { sterling } from \"./sterling/index\"\nexport {\n deriveTheme as sterlingDeriveTheme,\n deriveRoles as sterlingDeriveRoles,\n defaultScheme as sterlingDefaultScheme,\n defineDesignSystem,\n STERLING_FLAT_TOKENS,\n WCAG_AA,\n autoLift as sterlingAutoLift,\n checkAA as sterlingCheckAA,\n ContrastError as SterlingContrastError,\n // Generic flat-projection helper — re-exported from @silvery/ansi so every\n // DesignSystem (Sterling included) can bake its own Theme on demand.\n bakeFlat,\n defaultFlattenRule,\n} from \"./sterling/index\"\nexport type {\n AccentRole,\n BorderRole,\n ContrastMode as SterlingContrastMode,\n ContrastViolation as SterlingContrastViolation,\n CursorRole,\n DeepPartial as SterlingDeepPartial,\n DerivationStep as SterlingDerivationStep,\n DerivationTrace as SterlingDerivationTrace,\n DeriveOptions as SterlingDeriveOptions,\n DesignSystem,\n FlatToken as SterlingFlatToken,\n FlatTokens as SterlingFlatTokens,\n FlattenRule,\n InteractiveRole,\n MutedRole,\n Roles as SterlingRoles,\n StatePair,\n SurfaceRole,\n Theme as SterlingTheme,\n ThemeShape,\n} from \"./sterling/index\"\n\n// Built-in schemes (84 color schemes — see packages/theme/src/schemes/)\nexport {\n builtinPalettes,\n getSchemeByName,\n catppuccinMocha,\n catppuccinFrappe,\n catppuccinMacchiato,\n catppuccinLatte,\n nord,\n dracula,\n oneDark,\n solarizedDark,\n solarizedLight,\n gruvboxDark,\n gruvboxLight,\n tokyoNight,\n tokyoNightStorm,\n tokyoNightDay,\n rosePine,\n rosePineMoon,\n rosePineDawn,\n kanagawaWave,\n kanagawaDragon,\n kanagawaLotus,\n everforestDark,\n everforestLight,\n nightfox,\n dawnfox,\n monokai,\n monokaiPro,\n snazzy,\n materialDark,\n materialLight,\n palenight,\n ayuDark,\n ayuMirage,\n ayuLight,\n horizon,\n moonfly,\n nightfly,\n oxocarbonDark,\n oxocarbonLight,\n sonokai,\n edgeDark,\n edgeLight,\n modusVivendi,\n modusOperandi,\n} from \"./schemes/index\"\n","export * from \"./theme\"\n"],"mappings":"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"}
|