silvery 0.17.3 → 0.18.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 +7 -13
- package/dist/{UPNG-AVSMjiFE.mjs → UPNG-DvKjM6wE.mjs} +1 -1
- package/dist/{UPNG-AVSMjiFE.mjs.map → UPNG-DvKjM6wE.mjs.map} +1 -1
- package/dist/{__vite-browser-external-2447137e-D3GdsvS_.mjs → __vite-browser-external-2447137e-DPKHHqQK.mjs} +1 -1
- package/dist/{__vite-browser-external-2447137e-D3GdsvS_.mjs.map → __vite-browser-external-2447137e-DPKHHqQK.mjs.map} +1 -1
- package/dist/{animation-C_PTO0uH.mjs → animation-DhINOJk8.mjs} +1 -1
- package/dist/{animation-C_PTO0uH.mjs.map → animation-DhINOJk8.mjs.map} +1 -1
- package/dist/{ansi-CXLE_pt1.mjs → ansi-C6Qs1Wn2.mjs} +1 -1
- package/dist/{ansi-CXLE_pt1.mjs.map → ansi-C6Qs1Wn2.mjs.map} +1 -1
- package/dist/{ansi-zmNzgkPB.d.mts → ansi-CsjnZtAw.d.mts} +1 -1
- package/dist/{ansi-zmNzgkPB.d.mts.map → ansi-CsjnZtAw.d.mts.map} +1 -1
- package/dist/apng-CvSlLBtc.mjs +3 -0
- package/dist/{apng-ENBAJk-H.mjs → apng-DFFVOItr.mjs} +3 -3
- package/dist/{apng-ENBAJk-H.mjs.map → apng-DFFVOItr.mjs.map} +1 -1
- package/dist/{backend-CkIkIHR-.mjs → backend-DU0Y938U.mjs} +1 -1
- package/dist/{backend-CkIkIHR-.mjs.map → backend-DU0Y938U.mjs.map} +1 -1
- package/dist/{backends-CkvbG3js.mjs → backends-BihMKFY_.mjs} +3 -3
- package/dist/{backends-CkvbG3js.mjs.map → backends-BihMKFY_.mjs.map} +1 -1
- package/dist/backends-Dk_5G_gC.mjs +3 -0
- package/dist/cli-GwJ0S2In.mjs +4 -0
- package/dist/{context-QreF3UHr.mjs → context-BjWgrikx.mjs} +1 -1
- package/dist/{context-QreF3UHr.mjs.map → context-BjWgrikx.mjs.map} +1 -1
- package/dist/{derive-D7bFJdfU.d.mts → derive-O_Kb1Bk_.d.mts} +3 -3
- package/dist/derive-O_Kb1Bk_.d.mts.map +1 -0
- package/dist/{devtools-owvUPfBi.mjs → devtools-CeO9X_uv.mjs} +4 -4
- package/dist/{devtools-owvUPfBi.mjs.map → devtools-CeO9X_uv.mjs.map} +1 -1
- package/dist/devtools-nX4tj6OH.mjs +2 -0
- package/dist/{eta-DLiVPaSD.mjs → eta-BnQSZcWf.mjs} +1 -1
- package/dist/{eta-DLiVPaSD.mjs.map → eta-BnQSZcWf.mjs.map} +1 -1
- package/dist/{flexily-zero-adapter-DmG4Ge8t.mjs → flexily-zero-adapter-BOM0cl8R.mjs} +61 -9
- package/dist/flexily-zero-adapter-BOM0cl8R.mjs.map +1 -0
- package/dist/{flexily-zero-adapter-GHwEW11s.mjs → flexily-zero-adapter-V8R3HQtK.mjs} +1 -1
- package/dist/{gif-Bp6fIyN3.mjs → gif-B9Uq4qZA.mjs} +3 -3
- package/dist/{gif-Bp6fIyN3.mjs.map → gif-B9Uq4qZA.mjs.map} +1 -1
- package/dist/gif-BdrLRBmM.mjs +3 -0
- package/dist/{gifenc-GiVCZ9-3.mjs → gifenc-DfhOb4xr.mjs} +1 -1
- package/dist/{gifenc-GiVCZ9-3.mjs.map → gifenc-DfhOb4xr.mjs.map} +1 -1
- package/dist/{image-Dx7gYjkq.mjs → image-B0zMbVUr.mjs} +136 -5
- package/dist/image-B0zMbVUr.mjs.map +1 -0
- package/dist/index-Bh3U1K09.d.mts +10823 -0
- package/dist/index-Bh3U1K09.d.mts.map +1 -0
- package/dist/{index-p-wBs_wH.d.mts → index-C4vrhbud.d.mts} +1 -1
- package/dist/{index-p-wBs_wH.d.mts.map → index-C4vrhbud.d.mts.map} +1 -1
- package/dist/{index-DCVL3jHo.d.mts → index-dehZ18K-.d.mts} +144 -99
- package/dist/index-dehZ18K-.d.mts.map +1 -0
- package/dist/index.d.mts +7 -7219
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +13 -9343
- package/dist/index.mjs.map +1 -1
- package/dist/{key-mapping-BsUHe_nk.mjs → key-mapping-7k2ufK2b.mjs} +1 -1
- package/dist/{key-mapping-DsyfLEdC.mjs → key-mapping-WLUmxjx1.mjs} +1 -1
- package/dist/{key-mapping-DsyfLEdC.mjs.map → key-mapping-WLUmxjx1.mjs.map} +1 -1
- package/dist/{layout-engine-D_lSR4i9.mjs → layout-engine--drvrWjD.mjs} +1 -1
- package/dist/{layout-engine-B3dsnVLU.mjs → layout-engine-Dr3cY5U4.mjs} +3 -3
- package/dist/{layout-engine-B3dsnVLU.mjs.map → layout-engine-Dr3cY5U4.mjs.map} +1 -1
- package/dist/{multi-progress-CQVB9lES.mjs → multi-progress-CcdqJFlf.mjs} +3 -3
- package/dist/{multi-progress-CQVB9lES.mjs.map → multi-progress-CcdqJFlf.mjs.map} +1 -1
- package/dist/{multi-progress-C0-rkn86.d.mts → multi-progress-DQ-uUzLf.d.mts} +2 -2
- package/dist/{multi-progress-C0-rkn86.d.mts.map → multi-progress-DQ-uUzLf.d.mts.map} +1 -1
- package/dist/{node-Dedx-6xF.mjs → node-CP5WChgr.mjs} +1 -1
- package/dist/{node-Dedx-6xF.mjs.map → node-CP5WChgr.mjs.map} +1 -1
- package/dist/{progress-bar-COPSBlT9.mjs → progress-bar-IrUjkLfU.mjs} +4 -4
- package/dist/{progress-bar-COPSBlT9.mjs.map → progress-bar-IrUjkLfU.mjs.map} +1 -1
- package/dist/{reconciler-B-NaZvbO.mjs → reconciler-B8uxQxaU.mjs} +57 -81
- package/dist/reconciler-B8uxQxaU.mjs.map +1 -0
- package/dist/{render-string-CZKpuKXo.mjs → render-string-BwLG7rIX.mjs} +1 -1
- package/dist/{pipeline-BmfaZb1O.mjs → render-string-DVfgc8xr.mjs} +836 -508
- package/dist/render-string-DVfgc8xr.mjs.map +1 -0
- package/dist/{resvg-js-V6oMi8CY.mjs → resvg-js-Cwipz-_J.mjs} +1 -1
- package/dist/{resvg-js-V6oMi8CY.mjs.map → resvg-js-Cwipz-_J.mjs.map} +1 -1
- package/dist/runtime.d.mts +2 -2
- package/dist/runtime.mjs +3 -3
- package/dist/{spinner-Cgej6Vnb.d.mts → spinner-BRkaJI0N.d.mts} +2 -2
- package/dist/{spinner-Cgej6Vnb.d.mts.map → spinner-BRkaJI0N.d.mts.map} +1 -1
- package/dist/{spinner-DSByknyx.mjs → spinner-BmldKx0M.mjs} +3 -3
- package/dist/{spinner-DSByknyx.mjs.map → spinner-BmldKx0M.mjs.map} +1 -1
- package/dist/{src-C9f3hiVG.mjs → src-C0sOQW-t.mjs} +402 -156
- package/dist/src-C0sOQW-t.mjs.map +1 -0
- package/dist/src-CJPXf3fC.mjs +18348 -0
- package/dist/src-CJPXf3fC.mjs.map +1 -0
- package/dist/{src-fJVbhdn-.mjs → src-D8kLrQBT.mjs} +1 -1
- package/dist/{src-fJVbhdn-.mjs.map → src-D8kLrQBT.mjs.map} +1 -1
- package/dist/{src-9B5k0JmY.mjs → src-D_BS-as7.mjs} +1130 -100
- package/dist/src-D_BS-as7.mjs.map +1 -0
- package/dist/theme.d.mts +45 -30
- package/dist/theme.d.mts.map +1 -1
- package/dist/theme.mjs +3 -3
- package/dist/{types-CDgkE-Rw.d.mts → types-B4A8Ebba.d.mts} +1 -1
- package/dist/{types-CDgkE-Rw.d.mts.map → types-B4A8Ebba.d.mts.map} +1 -1
- package/dist/types-e4dpfbSa.mjs +468 -0
- package/dist/types-e4dpfbSa.mjs.map +1 -0
- package/dist/ui/animation.d.mts +1 -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 +2 -2
- package/dist/ui/display.mjs +1 -1
- package/dist/ui/display.mjs.map +1 -1
- package/dist/ui/image.d.mts +1 -1
- package/dist/ui/image.mjs +1 -1
- package/dist/ui/input.d.mts +3 -3
- package/dist/ui/input.mjs +2 -2
- package/dist/ui/input.mjs.map +1 -1
- package/dist/ui/progress.d.mts +3 -3
- package/dist/ui/progress.mjs +4 -4
- package/dist/ui/progress.mjs.map +1 -1
- package/dist/ui/react.d.mts +3 -3
- package/dist/ui/react.mjs +4 -4
- package/dist/ui/react.mjs.map +1 -1
- package/dist/ui/utils.mjs +1 -1
- package/dist/ui/wrappers.d.mts +2 -2
- package/dist/ui/wrappers.mjs +1 -1
- package/dist/ui.d.mts +5 -5
- package/dist/ui.mjs +6 -6
- package/dist/{useLatest-BMIYXd6e.d.mts → useLatest-6xqnGIU6.d.mts} +1 -1
- package/dist/{useLatest-BMIYXd6e.d.mts.map → useLatest-6xqnGIU6.d.mts.map} +1 -1
- package/dist/{with-text-input-CmHf_9d6.d.mts → with-text-input-lUh9gYAG.d.mts} +3 -3
- package/dist/{with-text-input-CmHf_9d6.d.mts.map → with-text-input-lUh9gYAG.d.mts.map} +1 -1
- package/dist/{wrapper-Dqh0zi2W.mjs → wrapper-CE6GQ27z.mjs} +1 -1
- package/dist/{wrapper-Dqh0zi2W.mjs.map → wrapper-CE6GQ27z.mjs.map} +1 -1
- package/dist/{wrappers-hhL8EQ_n.mjs → wrappers-JrEYTuKA.mjs} +4 -4
- package/dist/wrappers-JrEYTuKA.mjs.map +1 -0
- package/dist/yoga-adapter-B8LZpQcE.mjs +2 -0
- package/dist/{yoga-adapter-BJ9SOhTY.mjs → yoga-adapter-Bc8XT9cN.mjs} +11 -2
- package/dist/yoga-adapter-Bc8XT9cN.mjs.map +1 -0
- package/package.json +20 -17
- package/dist/apng-DCWY913R.mjs +0 -3
- package/dist/backends-CyJqNLeK.mjs +0 -3
- package/dist/cli-B-k7Bm56.mjs +0 -4
- package/dist/derive-D7bFJdfU.d.mts.map +0 -1
- package/dist/devtools-DS9NseGT.mjs +0 -2
- package/dist/flexily-zero-adapter-DmG4Ge8t.mjs.map +0 -1
- package/dist/gif-BaJNREpP.mjs +0 -3
- package/dist/image-Dx7gYjkq.mjs.map +0 -1
- package/dist/index-CBcSpGSM.d.mts +0 -3416
- package/dist/index-CBcSpGSM.d.mts.map +0 -1
- package/dist/index-DCVL3jHo.d.mts.map +0 -1
- package/dist/pipeline-BmfaZb1O.mjs.map +0 -1
- package/dist/reconciler-B-NaZvbO.mjs.map +0 -1
- package/dist/render-string-Bvh1XzBv.mjs +0 -201
- package/dist/render-string-Bvh1XzBv.mjs.map +0 -1
- package/dist/runtime-PH2xY1DM.mjs +0 -8723
- package/dist/runtime-PH2xY1DM.mjs.map +0 -1
- package/dist/src-9B5k0JmY.mjs.map +0 -1
- package/dist/src-C9f3hiVG.mjs.map +0 -1
- package/dist/types-Bhj5QkIQ.mjs +0 -13
- package/dist/types-Bhj5QkIQ.mjs.map +0 -1
- package/dist/useLayout-BG2cGl15.mjs +0 -139
- package/dist/useLayout-BG2cGl15.mjs.map +0 -1
- package/dist/wrappers-hhL8EQ_n.mjs.map +0 -1
- package/dist/yoga-adapter-BJ9SOhTY.mjs.map +0 -1
- package/dist/yoga-adapter-Daq6-dw1.mjs +0 -2
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"src-C9f3hiVG.mjs","names":["luminance","isDarkColor","importBase16Internal","ansi16DarkTheme","ansi16LightTheme","_detectTerminalPalette"],"sources":["../packages/theme/src/derive.ts","../packages/theme/src/color.ts","../packages/theme/src/palettes/catppuccin.ts","../packages/theme/src/palettes/nord.ts","../packages/theme/src/palettes/dracula.ts","../packages/theme/src/palettes/solarized.ts","../packages/theme/src/palettes/tokyo-night.ts","../packages/theme/src/palettes/one-dark.ts","../packages/theme/src/palettes/gruvbox.ts","../packages/theme/src/palettes/rose-pine.ts","../packages/theme/src/palettes/kanagawa.ts","../packages/theme/src/palettes/everforest.ts","../packages/theme/src/palettes/monokai.ts","../packages/theme/src/palettes/snazzy.ts","../packages/theme/src/palettes/material.ts","../packages/theme/src/palettes/palenight.ts","../packages/theme/src/palettes/ayu.ts","../packages/theme/src/palettes/nightfox.ts","../packages/theme/src/palettes/horizon.ts","../packages/theme/src/palettes/moonfly.ts","../packages/theme/src/palettes/nightfly.ts","../packages/theme/src/palettes/oxocarbon.ts","../packages/theme/src/palettes/sonokai.ts","../packages/theme/src/palettes/edge.ts","../packages/theme/src/palettes/modus.ts","../packages/theme/src/palettes/github.ts","../packages/theme/src/palettes/cobalt2.ts","../packages/theme/src/palettes/synthwave.ts","../packages/theme/src/palettes/tomorrow-night.ts","../packages/theme/src/palettes/zenburn.ts","../packages/theme/src/palettes/ubuntu.ts","../packages/theme/src/palettes/tango.ts","../packages/theme/src/palettes/cyberpunk.ts","../packages/theme/src/palettes/vscode.ts","../packages/theme/src/palettes/one-light.ts","../packages/theme/src/palettes/night-owl.ts","../packages/theme/src/palettes/shades-of-purple.ts","../packages/theme/src/palettes/homebrew.ts","../packages/theme/src/palettes/neon.ts","../packages/theme/src/palettes/challenger-deep.ts","../packages/theme/src/palettes/doom-one.ts","../packages/theme/src/palettes/mariana.ts","../packages/theme/src/palettes/darcula.ts","../packages/theme/src/palettes/espresso.ts","../packages/theme/src/palettes/iceberg.ts","../packages/theme/src/palettes/serendipity.ts","../packages/theme/src/palettes/twilight.ts","../packages/theme/src/palettes/breeze.ts","../packages/theme/src/palettes/andromeda.ts","../packages/theme/src/palettes/relaxed.ts","../packages/theme/src/palettes/index.ts","../packages/theme/src/state.ts","../packages/theme/src/ThemeContext.tsx","../packages/theme/src/types.ts","../packages/theme/src/resolve.ts","../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/validate.ts","../packages/theme/src/validate-theme.ts","../packages/theme/src/contrast.ts","../packages/theme/src/alias.ts","../packages/theme/src/css.ts","../packages/theme/src/auto-generate.ts","../packages/theme/src/export/base16.ts","../packages/theme/src/detect.ts","../packages/theme/src/theme.ts","../packages/theme/src/index.ts"],"sourcesContent":["/**\n * Theme derivation — re-exported from @silvery/ansi (canonical location).\n *\n * @silvery/theme consumers can continue importing from here.\n */\n\nexport { deriveTheme } from \"@silvery/ansi\"\nexport type { ThemeAdjustment } from \"@silvery/ansi\"\n","/**\n * Color manipulation utilities.\n *\n * Re-exports from @silvery/color — the canonical implementation.\n * This module exists to preserve @silvery/theme's public API.\n */\n\nexport {\n hexToRgb,\n rgbToHex,\n blend,\n brighten,\n darken,\n contrastFg,\n rgbToHsl,\n hslToHex,\n hexToHsl,\n desaturate,\n complement,\n} from \"@silvery/color\"\nexport type { HSL } from \"@silvery/color\"\n","/**\n * Catppuccin palettes — the most popular 4-flavor theme system.\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Catppuccin Mocha — the classic dark variant. */\nexport const catppuccinMocha: ColorPalette = {\n name: \"catppuccin-mocha\",\n dark: true,\n black: \"#11111B\",\n red: \"#F38BA8\",\n green: \"#A6E3A1\",\n yellow: \"#F9E2AF\",\n blue: \"#89B4FA\",\n magenta: \"#CBA6F7\",\n cyan: \"#94E2D5\",\n white: \"#A6ADC8\",\n brightBlack: \"#313244\",\n brightRed: \"#FAB387\",\n brightGreen: brighten(\"#A6E3A1\", 0.15),\n brightYellow: brighten(\"#F9E2AF\", 0.15),\n brightBlue: brighten(\"#89B4FA\", 0.15),\n brightMagenta: \"#F5C2E7\",\n brightCyan: brighten(\"#94E2D5\", 0.15),\n brightWhite: \"#CDD6F4\",\n foreground: \"#CDD6F4\",\n background: \"#1E1E2E\",\n cursorColor: \"#CDD6F4\",\n cursorText: \"#1E1E2E\",\n selectionBackground: \"#6C7086\",\n selectionForeground: \"#CDD6F4\",\n}\n\n/** Catppuccin Frappe — muted dark variant. */\nexport const catppuccinFrappe: ColorPalette = {\n name: \"catppuccin-frappe\",\n dark: true,\n black: \"#232634\",\n red: \"#E78284\",\n green: \"#A6D189\",\n yellow: \"#E5C890\",\n blue: \"#8CAAEE\",\n magenta: \"#CA9EE6\",\n cyan: \"#81C8BE\",\n white: \"#A5ADCE\",\n brightBlack: \"#414559\",\n brightRed: \"#EF9F76\",\n brightGreen: brighten(\"#A6D189\", 0.15),\n brightYellow: brighten(\"#E5C890\", 0.15),\n brightBlue: brighten(\"#8CAAEE\", 0.15),\n brightMagenta: \"#F4B8E4\",\n brightCyan: brighten(\"#81C8BE\", 0.15),\n brightWhite: \"#C6D0F5\",\n foreground: \"#C6D0F5\",\n background: \"#303446\",\n cursorColor: \"#C6D0F5\",\n cursorText: \"#303446\",\n selectionBackground: \"#737994\",\n selectionForeground: \"#C6D0F5\",\n}\n\n/** Catppuccin Macchiato — warm dark variant. */\nexport const catppuccinMacchiato: ColorPalette = {\n name: \"catppuccin-macchiato\",\n dark: true,\n black: \"#181926\",\n red: \"#ED8796\",\n green: \"#A6DA95\",\n yellow: \"#EED49F\",\n blue: \"#8AADF4\",\n magenta: \"#C6A0F6\",\n cyan: \"#8BD5CA\",\n white: \"#A5ADCB\",\n brightBlack: \"#363A4F\",\n brightRed: \"#F5A97F\",\n brightGreen: brighten(\"#A6DA95\", 0.15),\n brightYellow: brighten(\"#EED49F\", 0.15),\n brightBlue: brighten(\"#8AADF4\", 0.15),\n brightMagenta: \"#F5BDE6\",\n brightCyan: brighten(\"#8BD5CA\", 0.15),\n brightWhite: \"#CAD3F5\",\n foreground: \"#CAD3F5\",\n background: \"#24273A\",\n cursorColor: \"#CAD3F5\",\n cursorText: \"#24273A\",\n selectionBackground: \"#6E738D\",\n selectionForeground: \"#CAD3F5\",\n}\n\n/** Catppuccin Latte — the light variant. */\nexport const catppuccinLatte: ColorPalette = {\n name: \"catppuccin-latte\",\n dark: false,\n black: \"#DCE0E8\",\n red: \"#D20F39\",\n green: \"#40A02B\",\n yellow: \"#DF8E1D\",\n blue: \"#1E66F5\",\n magenta: \"#8839EF\",\n cyan: \"#179299\",\n white: \"#6C6F85\",\n brightBlack: \"#CCD0DA\",\n brightRed: \"#FE640B\",\n brightGreen: brighten(\"#40A02B\", 0.15),\n brightYellow: brighten(\"#DF8E1D\", 0.15),\n brightBlue: brighten(\"#1E66F5\", 0.15),\n brightMagenta: \"#EA76CB\",\n brightCyan: brighten(\"#179299\", 0.15),\n brightWhite: \"#4C4F69\",\n foreground: \"#4C4F69\",\n background: \"#EFF1F5\",\n cursorColor: \"#4C4F69\",\n cursorText: \"#EFF1F5\",\n selectionBackground: \"#9CA0B0\",\n selectionForeground: \"#4C4F69\",\n}\n","/**\n * Nord palette — Arctic, north-bluish clean.\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Nord — the classic dark arctic theme. */\nexport const nord: ColorPalette = {\n name: \"nord\",\n dark: true,\n black: \"#2E3440\",\n red: \"#BF616A\",\n green: \"#A3BE8C\",\n yellow: \"#EBCB8B\",\n blue: \"#5E81AC\",\n magenta: \"#B48EAD\",\n cyan: \"#8FBCBB\",\n white: \"#D8DEE9\",\n brightBlack: \"#3B4252\",\n brightRed: \"#D08770\",\n brightGreen: brighten(\"#A3BE8C\", 0.15),\n brightYellow: brighten(\"#EBCB8B\", 0.15),\n brightBlue: brighten(\"#5E81AC\", 0.15),\n brightMagenta: \"#B48EAD\",\n brightCyan: brighten(\"#8FBCBB\", 0.15),\n brightWhite: \"#ECEFF4\",\n foreground: \"#ECEFF4\",\n background: \"#2E3440\",\n cursorColor: \"#ECEFF4\",\n cursorText: \"#2E3440\",\n selectionBackground: \"#4C566A\",\n selectionForeground: \"#ECEFF4\",\n}\n","/**\n * Dracula palette — dark theme with vibrant accents.\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Dracula — vibrant dark theme. */\nexport const dracula: ColorPalette = {\n name: \"dracula\",\n dark: true,\n black: \"#21222C\",\n red: \"#FF5555\",\n green: \"#50FA7B\",\n yellow: \"#F1FA8C\",\n blue: \"#BD93F9\",\n magenta: \"#BD93F9\",\n cyan: \"#8BE9FD\",\n white: \"#6272A4\",\n brightBlack: \"#44475A\",\n brightRed: \"#FFB86C\",\n brightGreen: brighten(\"#50FA7B\", 0.15),\n brightYellow: brighten(\"#F1FA8C\", 0.15),\n brightBlue: brighten(\"#BD93F9\", 0.15),\n brightMagenta: \"#FF79C6\",\n brightCyan: brighten(\"#8BE9FD\", 0.15),\n brightWhite: \"#F8F8F2\",\n foreground: \"#F8F8F2\",\n background: \"#282A36\",\n cursorColor: \"#F8F8F2\",\n cursorText: \"#282A36\",\n selectionBackground: \"#6272A4\",\n selectionForeground: \"#F8F8F2\",\n}\n","/**\n * Solarized palettes — precision colors for machines and people.\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Solarized Dark — Ethan Schoonover's classic dark variant. */\nexport const solarizedDark: ColorPalette = {\n name: \"solarized-dark\",\n dark: true,\n black: \"#002B36\",\n red: \"#DC322F\",\n green: \"#859900\",\n yellow: \"#B58900\",\n blue: \"#268BD2\",\n magenta: \"#6C71C4\",\n cyan: \"#2AA198\",\n white: \"#839496\",\n brightBlack: \"#586E75\",\n brightRed: \"#CB4B16\",\n brightGreen: brighten(\"#859900\", 0.15),\n brightYellow: brighten(\"#B58900\", 0.15),\n brightBlue: brighten(\"#268BD2\", 0.15),\n brightMagenta: \"#D33682\",\n brightCyan: brighten(\"#2AA198\", 0.15),\n brightWhite: \"#FDF6E3\",\n foreground: \"#FDF6E3\",\n background: \"#073642\",\n cursorColor: \"#FDF6E3\",\n cursorText: \"#073642\",\n selectionBackground: \"#657B83\",\n selectionForeground: \"#FDF6E3\",\n}\n\n/** Solarized Light — Ethan Schoonover's classic light variant. */\nexport const solarizedLight: ColorPalette = {\n name: \"solarized-light\",\n dark: false,\n black: \"#FDF6E3\",\n red: \"#DC322F\",\n green: \"#859900\",\n yellow: \"#B58900\",\n blue: \"#268BD2\",\n magenta: \"#6C71C4\",\n cyan: \"#2AA198\",\n white: \"#657B83\",\n brightBlack: \"#DDD6C1\",\n brightRed: \"#CB4B16\",\n brightGreen: brighten(\"#859900\", 0.15),\n brightYellow: brighten(\"#B58900\", 0.15),\n brightBlue: brighten(\"#268BD2\", 0.15),\n brightMagenta: \"#D33682\",\n brightCyan: brighten(\"#2AA198\", 0.15),\n brightWhite: \"#073642\",\n foreground: \"#073642\",\n background: \"#EEE8D5\",\n cursorColor: \"#073642\",\n cursorText: \"#EEE8D5\",\n selectionBackground: \"#93A1A1\",\n selectionForeground: \"#073642\",\n}\n","/**\n * Tokyo Night palette — a clean dark theme inspired by Tokyo city lights.\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Tokyo Night — the default dark variant. */\nexport const tokyoNight: ColorPalette = {\n name: \"tokyo-night\",\n dark: true,\n black: \"#1A1B26\",\n red: \"#F7768E\",\n green: \"#9ECE6A\",\n yellow: \"#E0AF68\",\n blue: \"#7AA2F7\",\n magenta: \"#BB9AF7\",\n cyan: \"#73DACA\",\n white: \"#A9B1D6\",\n brightBlack: \"#292E42\",\n brightRed: \"#FF9E64\",\n brightGreen: brighten(\"#9ECE6A\", 0.15),\n brightYellow: brighten(\"#E0AF68\", 0.15),\n brightBlue: brighten(\"#7AA2F7\", 0.15),\n brightMagenta: \"#FF007C\",\n brightCyan: brighten(\"#73DACA\", 0.15),\n brightWhite: \"#C0CAF5\",\n foreground: \"#C0CAF5\",\n background: \"#24283B\",\n cursorColor: \"#C0CAF5\",\n cursorText: \"#24283B\",\n selectionBackground: \"#545C7E\",\n selectionForeground: \"#C0CAF5\",\n}\n\n/** Tokyo Night Storm — slightly lighter background. */\nexport const tokyoNightStorm: ColorPalette = {\n name: \"tokyo-night-storm\",\n dark: true,\n black: \"#1F2335\",\n red: \"#F7768E\",\n green: \"#9ECE6A\",\n yellow: \"#E0AF68\",\n blue: \"#7AA2F7\",\n magenta: \"#BB9AF7\",\n cyan: \"#73DACA\",\n white: \"#A9B1D6\",\n brightBlack: \"#292E42\",\n brightRed: \"#FF9E64\",\n brightGreen: brighten(\"#9ECE6A\", 0.15),\n brightYellow: brighten(\"#E0AF68\", 0.15),\n brightBlue: brighten(\"#7AA2F7\", 0.15),\n brightMagenta: \"#FF007C\",\n brightCyan: brighten(\"#73DACA\", 0.15),\n brightWhite: \"#C0CAF5\",\n foreground: \"#C0CAF5\",\n background: \"#24283B\",\n cursorColor: \"#C0CAF5\",\n cursorText: \"#24283B\",\n selectionBackground: \"#545C7E\",\n selectionForeground: \"#C0CAF5\",\n}\n\n/** Tokyo Night Day — the light variant. */\nexport const tokyoNightDay: ColorPalette = {\n name: \"tokyo-night-day\",\n dark: false,\n black: \"#E1E2E7\",\n red: \"#F52A65\",\n green: \"#587539\",\n yellow: \"#8C6C3E\",\n blue: \"#2E7DE9\",\n magenta: \"#9854F1\",\n cyan: \"#118C74\",\n white: \"#6172B0\",\n brightBlack: \"#C4C5CB\",\n brightRed: \"#B15C00\",\n brightGreen: brighten(\"#587539\", 0.15),\n brightYellow: brighten(\"#8C6C3E\", 0.15),\n brightBlue: brighten(\"#2E7DE9\", 0.15),\n brightMagenta: \"#F52A65\",\n brightCyan: brighten(\"#118C74\", 0.15),\n brightWhite: \"#3760BF\",\n foreground: \"#3760BF\",\n background: \"#D5D6DB\",\n cursorColor: \"#3760BF\",\n cursorText: \"#D5D6DB\",\n selectionBackground: \"#9699A3\",\n selectionForeground: \"#3760BF\",\n}\n","/**\n * One Dark palette — Atom's iconic dark theme.\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** One Dark — the classic Atom editor theme. */\nexport const oneDark: ColorPalette = {\n name: \"one-dark\",\n dark: true,\n black: \"#21252B\",\n red: \"#E06C75\",\n green: \"#98C379\",\n yellow: \"#E5C07B\",\n blue: \"#61AFEF\",\n magenta: \"#C678DD\",\n cyan: \"#56B6C2\",\n white: \"#ABB2BF\",\n brightBlack: \"#2C313A\",\n brightRed: \"#D19A66\",\n brightGreen: brighten(\"#98C379\", 0.15),\n brightYellow: brighten(\"#E5C07B\", 0.15),\n brightBlue: brighten(\"#61AFEF\", 0.15),\n brightMagenta: \"#E06C75\",\n brightCyan: brighten(\"#56B6C2\", 0.15),\n brightWhite: \"#ABB2BF\",\n foreground: \"#ABB2BF\",\n background: \"#282C34\",\n cursorColor: \"#ABB2BF\",\n cursorText: \"#282C34\",\n selectionBackground: \"#5C6370\",\n selectionForeground: \"#ABB2BF\",\n}\n","/**\n * Gruvbox palettes — retro groove color scheme.\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Gruvbox Dark — warm retro dark theme. */\nexport const gruvboxDark: ColorPalette = {\n name: \"gruvbox-dark\",\n dark: true,\n black: \"#1D2021\",\n red: \"#FB4934\",\n green: \"#B8BB26\",\n yellow: \"#FABD2F\",\n blue: \"#83A598\",\n magenta: \"#D3869B\",\n cyan: \"#8EC07C\",\n white: \"#BDAE93\",\n brightBlack: \"#3C3836\",\n brightRed: \"#FE8019\",\n brightGreen: brighten(\"#B8BB26\", 0.15),\n brightYellow: brighten(\"#FABD2F\", 0.15),\n brightBlue: brighten(\"#83A598\", 0.15),\n brightMagenta: \"#D3869B\",\n brightCyan: brighten(\"#8EC07C\", 0.15),\n brightWhite: \"#EBDBB2\",\n foreground: \"#EBDBB2\",\n background: \"#282828\",\n cursorColor: \"#EBDBB2\",\n cursorText: \"#282828\",\n selectionBackground: \"#665C54\",\n selectionForeground: \"#EBDBB2\",\n}\n\n/** Gruvbox Light — warm retro light theme. */\nexport const gruvboxLight: ColorPalette = {\n name: \"gruvbox-light\",\n dark: false,\n black: \"#F9F5D7\",\n red: \"#CC241D\",\n green: \"#98971A\",\n yellow: \"#D79921\",\n blue: \"#458588\",\n magenta: \"#B16286\",\n cyan: \"#689D6A\",\n white: \"#665C54\",\n brightBlack: \"#EBDBB2\",\n brightRed: \"#D65D0E\",\n brightGreen: brighten(\"#98971A\", 0.15),\n brightYellow: brighten(\"#D79921\", 0.15),\n brightBlue: brighten(\"#458588\", 0.15),\n brightMagenta: \"#B16286\",\n brightCyan: brighten(\"#689D6A\", 0.15),\n brightWhite: \"#3C3836\",\n foreground: \"#3C3836\",\n background: \"#FBF1C7\",\n cursorColor: \"#3C3836\",\n cursorText: \"#FBF1C7\",\n selectionBackground: \"#A89984\",\n selectionForeground: \"#3C3836\",\n}\n","/**\n * Rosé Pine palettes — all natural pine, faux fur and a bit of soho vibes.\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Rosé Pine — the main dark variant. */\nexport const rosePine: ColorPalette = {\n name: \"rose-pine\",\n dark: true,\n black: \"#191724\",\n red: \"#EB6F92\",\n green: \"#31748F\",\n yellow: \"#F6C177\",\n blue: \"#3E8FB0\",\n magenta: \"#C4A7E7\",\n cyan: \"#9CCFD8\",\n white: \"#908CAA\",\n brightBlack: \"#26233A\",\n brightRed: \"#EA9A97\",\n brightGreen: brighten(\"#31748F\", 0.15),\n brightYellow: brighten(\"#F6C177\", 0.15),\n brightBlue: brighten(\"#3E8FB0\", 0.15),\n brightMagenta: \"#EBBCBA\",\n brightCyan: brighten(\"#9CCFD8\", 0.15),\n brightWhite: \"#E0DEF4\",\n foreground: \"#E0DEF4\",\n background: \"#1F1D2E\",\n cursorColor: \"#E0DEF4\",\n cursorText: \"#1F1D2E\",\n selectionBackground: \"#6E6A86\",\n selectionForeground: \"#E0DEF4\",\n}\n\n/** Rosé Pine Moon — slightly lighter dark variant. */\nexport const rosePineMoon: ColorPalette = {\n name: \"rose-pine-moon\",\n dark: true,\n black: \"#232136\",\n red: \"#EB6F92\",\n green: \"#3E8FB0\",\n yellow: \"#F6C177\",\n blue: \"#3E8FB0\",\n magenta: \"#C4A7E7\",\n cyan: \"#9CCFD8\",\n white: \"#908CAA\",\n brightBlack: \"#393552\",\n brightRed: \"#EA9A97\",\n brightGreen: brighten(\"#3E8FB0\", 0.15),\n brightYellow: brighten(\"#F6C177\", 0.15),\n brightBlue: brighten(\"#3E8FB0\", 0.15),\n brightMagenta: \"#EA9A97\",\n brightCyan: brighten(\"#9CCFD8\", 0.15),\n brightWhite: \"#E0DEF4\",\n foreground: \"#E0DEF4\",\n background: \"#2A273F\",\n cursorColor: \"#E0DEF4\",\n cursorText: \"#2A273F\",\n selectionBackground: \"#6E6A86\",\n selectionForeground: \"#E0DEF4\",\n}\n\n/** Rosé Pine Dawn — the light variant. */\nexport const rosePineDawn: ColorPalette = {\n name: \"rose-pine-dawn\",\n dark: false,\n black: \"#FAF4ED\",\n red: \"#B4637A\",\n green: \"#286983\",\n yellow: \"#EA9D34\",\n blue: \"#286983\",\n magenta: \"#907AA9\",\n cyan: \"#56949F\",\n white: \"#797593\",\n brightBlack: \"#F2E9E1\",\n brightRed: \"#D7827E\",\n brightGreen: brighten(\"#286983\", 0.15),\n brightYellow: brighten(\"#EA9D34\", 0.15),\n brightBlue: brighten(\"#286983\", 0.15),\n brightMagenta: \"#D7827E\",\n brightCyan: brighten(\"#56949F\", 0.15),\n brightWhite: \"#575279\",\n foreground: \"#575279\",\n background: \"#FFFAF3\",\n cursorColor: \"#575279\",\n cursorText: \"#FFFAF3\",\n selectionBackground: \"#9893A5\",\n selectionForeground: \"#575279\",\n}\n","/**\n * Kanagawa palettes — inspired by Katsushika Hokusai's famous paintings.\n * Source: https://github.com/rebelot/kanagawa.nvim (palette.lua)\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Kanagawa Wave — the default dark variant, inspired by \"The Great Wave off Kanagawa\". */\nexport const kanagawaWave: ColorPalette = {\n name: \"kanagawa-wave\",\n dark: true,\n black: \"#16161D\", // sumiInk0\n red: \"#C34043\", // autumnRed\n green: \"#98BB6C\", // springGreen\n yellow: \"#E6C384\", // carpYellow\n blue: \"#7E9CD8\", // crystalBlue\n magenta: \"#957FB8\", // oniViolet\n cyan: \"#6A9589\", // waveAqua1\n white: \"#727169\", // fujiGray\n brightBlack: \"#2A2A37\", // sumiInk4\n brightRed: \"#FFA066\", // surimiOrange\n brightGreen: brighten(\"#98BB6C\", 0.15),\n brightYellow: brighten(\"#E6C384\", 0.15),\n brightBlue: brighten(\"#7E9CD8\", 0.15),\n brightMagenta: \"#D27E99\", // sakuraPink\n brightCyan: brighten(\"#6A9589\", 0.15),\n brightWhite: \"#DCD7BA\", // fujiWhite\n foreground: \"#DCD7BA\", // fujiWhite\n background: \"#1F1F28\", // sumiInk3\n cursorColor: \"#DCD7BA\", // fujiWhite\n cursorText: \"#1F1F28\", // sumiInk3\n selectionBackground: \"#54546D\", // sumiInk6\n selectionForeground: \"#DCD7BA\", // fujiWhite\n}\n\n/** Kanagawa Dragon — a muted, earthy dark variant. */\nexport const kanagawaDragon: ColorPalette = {\n name: \"kanagawa-dragon\",\n dark: true,\n black: \"#0d0c0c\", // dragonBlack0\n red: \"#c4746e\", // dragonRed\n green: \"#87a987\", // dragonGreen\n yellow: \"#c4b28a\", // dragonYellow\n blue: \"#8ba4b0\", // dragonBlue2\n magenta: \"#8992a7\", // dragonViolet\n cyan: \"#8ea4a2\", // dragonAqua\n white: \"#737c73\", // dragonAsh\n brightBlack: \"#282727\", // dragonBlack4\n brightRed: \"#b6927b\", // dragonOrange\n brightGreen: brighten(\"#87a987\", 0.15),\n brightYellow: brighten(\"#c4b28a\", 0.15),\n brightBlue: brighten(\"#8ba4b0\", 0.15),\n brightMagenta: \"#a292a3\", // dragonPink\n brightCyan: brighten(\"#8ea4a2\", 0.15),\n brightWhite: \"#c5c9c5\", // dragonWhite\n foreground: \"#c5c9c5\", // dragonWhite\n background: \"#181616\", // dragonBlack3\n cursorColor: \"#c5c9c5\", // dragonWhite\n cursorText: \"#181616\", // dragonBlack3\n selectionBackground: \"#625e5a\", // dragonBlack6\n selectionForeground: \"#c5c9c5\", // dragonWhite\n}\n\n/** Kanagawa Lotus — the light variant, inspired by lotus flowers. */\nexport const kanagawaLotus: ColorPalette = {\n name: \"kanagawa-lotus\",\n dark: false,\n black: \"#e5ddb0\", // lotusWhite2\n red: \"#c84053\", // lotusRed\n green: \"#6f894e\", // lotusGreen\n yellow: \"#de9800\", // lotusYellow3\n blue: \"#4d699b\", // lotusBlue4\n magenta: \"#624c83\", // lotusViolet4\n cyan: \"#597b75\", // lotusAqua\n white: \"#716e61\", // lotusGray2\n brightBlack: \"#dcd5ac\", // lotusWhite1\n brightRed: \"#cc6d00\", // lotusOrange\n brightGreen: brighten(\"#6f894e\", 0.15),\n brightYellow: brighten(\"#de9800\", 0.15),\n brightBlue: brighten(\"#4d699b\", 0.15),\n brightMagenta: \"#b35b79\", // lotusPink\n brightCyan: brighten(\"#597b75\", 0.15),\n brightWhite: \"#545464\", // lotusInk1\n foreground: \"#545464\", // lotusInk1\n background: \"#f2ecbc\", // lotusWhite3\n cursorColor: \"#545464\", // lotusInk1\n cursorText: \"#f2ecbc\", // lotusWhite3\n selectionBackground: \"#8a8980\", // lotusGray3\n selectionForeground: \"#545464\", // lotusInk1\n}\n","/**\n * Everforest palettes — a green-toned comfortable color scheme.\n * Source: https://github.com/sainnhe/everforest (medium background variants)\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Everforest Dark — warm green-based dark theme (medium background). */\nexport const everforestDark: ColorPalette = {\n name: \"everforest-dark\",\n dark: true,\n black: \"#232a2e\", // bg_dim\n red: \"#e67e80\",\n green: \"#a7c080\",\n yellow: \"#dbbc7f\",\n blue: \"#7fbbb3\",\n magenta: \"#d699b6\",\n cyan: \"#83c092\", // aqua\n white: \"#859289\", // grey1\n brightBlack: \"#343f44\", // bg1\n brightRed: \"#e69875\",\n brightGreen: brighten(\"#a7c080\", 0.15),\n brightYellow: brighten(\"#dbbc7f\", 0.15),\n brightBlue: brighten(\"#7fbbb3\", 0.15),\n brightMagenta: \"#e67e80\", // everforest has no distinct pink; reuse red\n brightCyan: brighten(\"#83c092\", 0.15),\n brightWhite: \"#d3c6aa\", // fg\n foreground: \"#d3c6aa\", // fg\n background: \"#2d353b\", // bg0\n cursorColor: \"#d3c6aa\", // fg\n cursorText: \"#2d353b\", // bg0\n selectionBackground: \"#4f585e\", // bg4\n selectionForeground: \"#d3c6aa\", // fg\n}\n\n/** Everforest Light — warm green-based light theme (medium background). */\nexport const everforestLight: ColorPalette = {\n name: \"everforest-light\",\n dark: false,\n black: \"#efebd4\", // bg_dim\n red: \"#f85552\",\n green: \"#8da101\",\n yellow: \"#dfa000\",\n blue: \"#3a94c5\",\n magenta: \"#df69ba\",\n cyan: \"#35a77c\", // aqua\n white: \"#939f91\", // grey1\n brightBlack: \"#f4f0d9\", // bg1\n brightRed: \"#f57d26\",\n brightGreen: brighten(\"#8da101\", 0.15),\n brightYellow: brighten(\"#dfa000\", 0.15),\n brightBlue: brighten(\"#3a94c5\", 0.15),\n brightMagenta: \"#f85552\", // everforest has no distinct pink; reuse red\n brightCyan: brighten(\"#35a77c\", 0.15),\n brightWhite: \"#5c6a72\", // fg\n foreground: \"#5c6a72\", // fg\n background: \"#fdf6e3\", // bg0\n cursorColor: \"#5c6a72\", // fg\n cursorText: \"#fdf6e3\", // bg0\n selectionBackground: \"#e0dcc7\", // bg4\n selectionForeground: \"#5c6a72\", // fg\n}\n","/**\n * Monokai palettes — the iconic syntax highlighting theme.\n * Classic source: Sublime Text default (Wimer Hazenberg, 2006)\n * Pro source: https://monokai.pro/ (default \"Pro\" filter)\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Monokai Classic — the original Sublime Text Monokai colors. */\nexport const monokai: ColorPalette = {\n name: \"monokai\",\n dark: true,\n black: \"#1a1a1a\", // darker than bg\n red: \"#F92672\", // keywords/pink-red\n green: \"#A6E22E\", // functions\n yellow: \"#E6DB74\", // strings\n blue: \"#66D9EF\", // classic Monokai has no distinct blue; cyan doubles\n magenta: \"#AE81FF\", // numbers/constants\n cyan: \"#66D9EF\", // types/builtins (cyan)\n white: \"#a59f85\", // muted text (between comments and fg)\n brightBlack: \"#3e3d32\", // line highlight\n brightRed: \"#FD971F\", // parameters/constants\n brightGreen: brighten(\"#A6E22E\", 0.15),\n brightYellow: brighten(\"#E6DB74\", 0.15),\n brightBlue: brighten(\"#66D9EF\", 0.15),\n brightMagenta: \"#F92672\", // classic Monokai pink == red\n brightCyan: brighten(\"#66D9EF\", 0.15),\n brightWhite: \"#F8F8F2\", // foreground\n foreground: \"#F8F8F2\", // foreground\n background: \"#272822\", // classic Monokai background\n cursorColor: \"#F8F8F2\", // foreground\n cursorText: \"#272822\", // classic Monokai background\n selectionBackground: \"#75715E\", // comments\n selectionForeground: \"#F8F8F2\", // foreground\n}\n\n/** Monokai Pro — the modern, refined Monokai with balanced colors. */\nexport const monokaiPro: ColorPalette = {\n name: \"monokai-pro\",\n dark: true,\n black: \"#221f22\", // darker than base\n red: \"#ff6188\", // keywords\n green: \"#a9dc76\", // functions\n yellow: \"#ffd866\", // strings/types\n blue: \"#78dce8\", // Pro shares cyan as blue\n magenta: \"#ab9df2\", // decorative/numbers\n cyan: \"#78dce8\", // cyan — support/builtins\n white: \"#939293\", // secondary text\n brightBlack: \"#403e41\", // raised surfaces\n brightRed: \"#fc9867\", // constants/parameters\n brightGreen: brighten(\"#a9dc76\", 0.15),\n brightYellow: brighten(\"#ffd866\", 0.15),\n brightBlue: brighten(\"#78dce8\", 0.15),\n brightMagenta: \"#ff6188\", // Pro pink == red\n brightCyan: brighten(\"#78dce8\", 0.15),\n brightWhite: \"#fcfcfa\", // foreground\n foreground: \"#fcfcfa\", // foreground\n background: \"#2d2a2e\", // editor background\n cursorColor: \"#fcfcfa\", // foreground\n cursorText: \"#2d2a2e\", // editor background\n selectionBackground: \"#727072\", // borders/muted chrome\n selectionForeground: \"#fcfcfa\", // foreground\n}\n","/**\n * Snazzy palette — elegant dark theme with vivid colors.\n * Source: https://github.com/sindresorhus/hyper-snazzy\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Snazzy — clean dark theme by Sindre Sorhus. */\nexport const snazzy: ColorPalette = {\n name: \"snazzy\",\n dark: true,\n black: \"#222430\", // border color (deepest)\n red: \"#ff5c57\",\n green: \"#5af78e\",\n yellow: \"#f3f99d\",\n blue: \"#57c7ff\",\n magenta: \"#b267e6\", // interpolated purple (between magenta and blue)\n cyan: \"#9aedfe\", // cyan\n white: \"#97979b\", // cursor/secondary text\n brightBlack: \"#34353e\", // slightly raised (interpolated)\n brightRed: \"#ff9f43\", // snazzy bright orange (warm interpolation)\n brightGreen: brighten(\"#5af78e\", 0.15),\n brightYellow: brighten(\"#f3f99d\", 0.15),\n brightBlue: brighten(\"#57c7ff\", 0.15),\n brightMagenta: \"#ff6ac1\", // magenta\n brightCyan: brighten(\"#9aedfe\", 0.15),\n brightWhite: \"#eff0eb\", // foreground\n foreground: \"#eff0eb\", // foreground\n background: \"#282a36\", // background\n cursorColor: \"#eff0eb\", // foreground\n cursorText: \"#282a36\", // background\n selectionBackground: \"#686868\", // light black / muted chrome\n selectionForeground: \"#eff0eb\", // foreground\n}\n","/**\n * Material Theme palettes — material design-inspired editor theme.\n * Source: https://github.com/kaicataldo/material.vim (material.vim)\n * Reference: https://material-theme.com/docs/reference/color-palette/\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Material Darker — the deep dark Material variant. */\nexport const materialDark: ColorPalette = {\n name: \"material-dark\",\n dark: true,\n black: \"#171717\", // line_highlight (deepest)\n red: \"#ff5370\",\n green: \"#c3e88d\",\n yellow: \"#ffcb6b\",\n blue: \"#82aaff\",\n magenta: \"#c792ea\",\n cyan: \"#89ddff\", // cyan\n white: \"#545454\", // comments\n brightBlack: \"#2c2c2c\", // selection\n brightRed: \"#f78c6c\",\n brightGreen: brighten(\"#c3e88d\", 0.15),\n brightYellow: brighten(\"#ffcb6b\", 0.15),\n brightBlue: brighten(\"#82aaff\", 0.15),\n brightMagenta: \"#f07178\",\n brightCyan: brighten(\"#89ddff\", 0.15),\n brightWhite: \"#eeffff\", // foreground\n foreground: \"#eeffff\", // foreground\n background: \"#212121\", // background\n cursorColor: \"#eeffff\", // foreground\n cursorText: \"#212121\", // background\n selectionBackground: \"#424242\", // guides/line_numbers\n selectionForeground: \"#eeffff\", // foreground\n}\n\n/** Material Lighter — the light Material variant. */\nexport const materialLight: ColorPalette = {\n name: \"material-light\",\n dark: false,\n black: \"#ecf0f1\", // line_highlight\n red: \"#e53935\",\n green: \"#91b859\",\n yellow: \"#ffb62c\",\n blue: \"#6182b8\",\n magenta: \"#7c4dff\",\n cyan: \"#39adb5\", // cyan\n white: \"#90a4ae\", // comments/fg\n brightBlack: \"#ebf4f3\", // selection\n brightRed: \"#f76d47\",\n brightGreen: brighten(\"#91b859\", 0.15),\n brightYellow: brighten(\"#ffb62c\", 0.15),\n brightBlue: brighten(\"#6182b8\", 0.15),\n brightMagenta: \"#ff5370\",\n brightCyan: brighten(\"#39adb5\", 0.15),\n brightWhite: \"#546E7A\", // foreground (darker than comments for light theme)\n foreground: \"#546E7A\", // foreground (darker than comments for light theme)\n background: \"#fafafa\", // background\n cursorColor: \"#546E7A\", // foreground\n cursorText: \"#fafafa\", // background\n selectionBackground: \"#cfd8dc\", // line_numbers\n selectionForeground: \"#546E7A\", // foreground\n}\n","/**\n * Palenight palette — Material Palenight variant.\n * Source: https://github.com/kaicataldo/material.vim (palenight style)\n * Reference: https://github.com/JonathanSpeek/palenight-iterm2\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Palenight — the soft, purple-tinted Material dark variant. */\nexport const palenight: ColorPalette = {\n name: \"palenight\",\n dark: true,\n black: \"#1c1f2b\", // line_highlight (deepest)\n red: \"#f07178\",\n green: \"#c3e88d\",\n yellow: \"#ffcb6b\",\n blue: \"#82aaff\",\n magenta: \"#c792ea\",\n cyan: \"#89ddff\", // cyan\n white: \"#676e95\", // comments\n brightBlack: \"#343b51\", // selection\n brightRed: \"#f78c6c\",\n brightGreen: brighten(\"#c3e88d\", 0.15),\n brightYellow: brighten(\"#ffcb6b\", 0.15),\n brightBlue: brighten(\"#82aaff\", 0.15),\n brightMagenta: \"#ff5370\",\n brightCyan: brighten(\"#89ddff\", 0.15),\n brightWhite: \"#a6accd\", // foreground\n foreground: \"#a6accd\", // foreground\n background: \"#292d3e\", // background\n cursorColor: \"#a6accd\", // foreground\n cursorText: \"#292d3e\", // background\n selectionBackground: \"#4e5579\", // guides/invisibles\n selectionForeground: \"#a6accd\", // foreground\n}\n","/**\n * Ayu palettes — warm, modern theme in three variants.\n * Source: https://github.com/ayu-theme/ayu-colors\n * Reference: https://github.com/Shatur/neovim-ayu\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Ayu Dark — deep dark variant with warm accents. */\nexport const ayuDark: ColorPalette = {\n name: \"ayu-dark\",\n dark: true,\n black: \"#05070A\",\n red: \"#D95757\",\n green: \"#AAD94C\",\n yellow: \"#E6B450\",\n blue: \"#59C2FF\",\n magenta: \"#D2A6FF\",\n cyan: \"#95E6CB\",\n white: \"#636A72\",\n brightBlack: \"#11151C\",\n brightRed: \"#F29668\",\n brightGreen: brighten(\"#AAD94C\", 0.15),\n brightYellow: brighten(\"#E6B450\", 0.15),\n brightBlue: brighten(\"#59C2FF\", 0.15),\n brightMagenta: \"#F07178\",\n brightCyan: brighten(\"#95E6CB\", 0.15),\n brightWhite: \"#BFBDB6\",\n foreground: \"#BFBDB6\",\n background: \"#0B0E14\",\n cursorColor: \"#BFBDB6\",\n cursorText: \"#0B0E14\",\n selectionBackground: \"#565B66\",\n selectionForeground: \"#BFBDB6\",\n}\n\n/** Ayu Mirage — balanced dark variant with softer contrast. */\nexport const ayuMirage: ColorPalette = {\n name: \"ayu-mirage\",\n dark: true,\n black: \"#101521\",\n red: \"#FF6666\",\n green: \"#D5FF80\",\n yellow: \"#FFCC66\",\n blue: \"#73D0FF\",\n magenta: \"#DFBFFF\",\n cyan: \"#95E6CB\",\n white: \"#6C7A8B\",\n brightBlack: \"#171B24\",\n brightRed: \"#F29E74\",\n brightGreen: brighten(\"#D5FF80\", 0.15),\n brightYellow: brighten(\"#FFCC66\", 0.15),\n brightBlue: brighten(\"#73D0FF\", 0.15),\n brightMagenta: \"#F28779\",\n brightCyan: brighten(\"#95E6CB\", 0.15),\n brightWhite: \"#CCCAC2\",\n foreground: \"#CCCAC2\",\n background: \"#1F2430\",\n cursorColor: \"#CCCAC2\",\n cursorText: \"#1F2430\",\n selectionBackground: \"#707A8C\",\n selectionForeground: \"#CCCAC2\",\n}\n\n/** Ayu Light — clean light variant. */\nexport const ayuLight: ColorPalette = {\n name: \"ayu-light\",\n dark: false,\n black: \"#E7EAED\",\n red: \"#E65050\",\n green: \"#86B300\",\n yellow: \"#FFAA33\",\n blue: \"#399EE6\",\n magenta: \"#A37ACC\",\n cyan: \"#4CBF99\",\n white: \"#ABADB1\",\n brightBlack: \"#F3F4F5\",\n brightRed: \"#ED9366\",\n brightGreen: brighten(\"#86B300\", 0.15),\n brightYellow: brighten(\"#FFAA33\", 0.15),\n brightBlue: brighten(\"#399EE6\", 0.15),\n brightMagenta: \"#F07171\",\n brightCyan: brighten(\"#4CBF99\", 0.15),\n brightWhite: \"#5C6166\",\n foreground: \"#5C6166\",\n background: \"#F8F9FA\",\n cursorColor: \"#5C6166\",\n cursorText: \"#F8F9FA\",\n selectionBackground: \"#8A9199\",\n selectionForeground: \"#5C6166\",\n}\n","/**\n * Nightfox palettes — rich, vibrant themes for Neovim.\n * Source: https://github.com/EdenEast/nightfox.nvim\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Nightfox — dark blue-toned variant. */\nexport const nightfox: ColorPalette = {\n name: \"nightfox\",\n dark: true,\n black: \"#131A24\",\n red: \"#C94F6D\",\n green: \"#81B29A\",\n yellow: \"#DBC074\",\n blue: \"#719CD6\",\n magenta: \"#9D79D6\",\n cyan: \"#63CDCF\",\n white: \"#71839B\",\n brightBlack: \"#212E3F\",\n brightRed: \"#F4A261\",\n brightGreen: brighten(\"#81B29A\", 0.15),\n brightYellow: brighten(\"#DBC074\", 0.15),\n brightBlue: brighten(\"#719CD6\", 0.15),\n brightMagenta: \"#D67AD2\",\n brightCyan: brighten(\"#63CDCF\", 0.15),\n brightWhite: \"#CDCECF\",\n foreground: \"#CDCECF\",\n background: \"#192330\",\n cursorColor: \"#CDCECF\",\n cursorText: \"#192330\",\n selectionBackground: \"#39506D\",\n selectionForeground: \"#CDCECF\",\n}\n\n/** Dawnfox — warm light variant inspired by Rose Pine Dawn. */\nexport const dawnfox: ColorPalette = {\n name: \"dawnfox\",\n dark: false,\n black: \"#EBE5DF\",\n red: \"#B4637A\",\n green: \"#618774\",\n yellow: \"#EA9D34\",\n blue: \"#286983\",\n magenta: \"#907AA9\",\n cyan: \"#56949F\",\n white: \"#A8A3B3\",\n brightBlack: \"#EBE0DF\",\n brightRed: \"#D7827E\",\n brightGreen: brighten(\"#618774\", 0.15),\n brightYellow: brighten(\"#EA9D34\", 0.15),\n brightBlue: brighten(\"#286983\", 0.15),\n brightMagenta: \"#D685AF\",\n brightCyan: brighten(\"#56949F\", 0.15),\n brightWhite: \"#575279\",\n foreground: \"#575279\",\n background: \"#FAF4ED\",\n cursorColor: \"#575279\",\n cursorText: \"#FAF4ED\",\n selectionBackground: \"#BDBFC9\",\n selectionForeground: \"#575279\",\n}\n","/**\n * Horizon palette — beautifully warm theme.\n * Source: https://github.com/jolaleye/horizon-theme-vscode\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Horizon — warm dark variant with vivid accents. */\nexport const horizon: ColorPalette = {\n name: \"horizon\",\n dark: true,\n black: \"#16161C\",\n red: \"#E95678\",\n green: \"#29D398\",\n yellow: \"#FAC29A\",\n blue: \"#26BBD9\",\n magenta: \"#B877DB\",\n cyan: \"#59E1E3\",\n white: \"#6C6F93\",\n brightBlack: \"#232530\",\n brightRed: \"#FAB795\",\n brightGreen: brighten(\"#29D398\", 0.15),\n brightYellow: brighten(\"#FAC29A\", 0.15),\n brightBlue: brighten(\"#26BBD9\", 0.15),\n brightMagenta: \"#EE64AC\",\n brightCyan: brighten(\"#59E1E3\", 0.15),\n brightWhite: \"#D5D8DA\",\n foreground: \"#D5D8DA\",\n background: \"#1C1E26\",\n cursorColor: \"#D5D8DA\",\n cursorText: \"#1C1E26\",\n selectionBackground: \"#2E303E\",\n selectionForeground: \"#D5D8DA\",\n}\n","/**\n * Moonfly palette — dark charcoal theme with pastel accents.\n * Source: https://github.com/bluz71/vim-moonfly-colors\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Moonfly — dark charcoal theme. */\nexport const moonfly: ColorPalette = {\n name: \"moonfly\",\n dark: true,\n black: \"#121212\",\n red: \"#FF5D5D\",\n green: \"#8CC85F\",\n yellow: \"#E3C78A\",\n blue: \"#80A0FF\",\n magenta: \"#AE81FF\",\n cyan: \"#79DAC8\",\n white: \"#808080\",\n brightBlack: \"#1C1C1C\",\n brightRed: \"#DE935F\",\n brightGreen: brighten(\"#8CC85F\", 0.15),\n brightYellow: brighten(\"#E3C78A\", 0.15),\n brightBlue: brighten(\"#80A0FF\", 0.15),\n brightMagenta: \"#FF5189\",\n brightCyan: brighten(\"#79DAC8\", 0.15),\n brightWhite: \"#C6C6C6\",\n foreground: \"#C6C6C6\",\n background: \"#080808\",\n cursorColor: \"#C6C6C6\",\n cursorText: \"#080808\",\n selectionBackground: \"#323437\",\n selectionForeground: \"#C6C6C6\",\n}\n","/**\n * Nightfly palette — dark midnight-blue theme with neon accents.\n * Source: https://github.com/bluz71/vim-nightfly-colors\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Nightfly — midnight-blue dark theme. */\nexport const nightfly: ColorPalette = {\n name: \"nightfly\",\n dark: true,\n black: \"#081E2F\",\n red: \"#FC514E\",\n green: \"#A1CD5E\",\n yellow: \"#E3D18A\",\n blue: \"#82AAFF\",\n magenta: \"#C792EA\",\n cyan: \"#7FDBCA\",\n white: \"#7C8F8F\",\n brightBlack: \"#0E293F\",\n brightRed: \"#F78C6C\",\n brightGreen: brighten(\"#A1CD5E\", 0.15),\n brightYellow: brighten(\"#E3D18A\", 0.15),\n brightBlue: brighten(\"#82AAFF\", 0.15),\n brightMagenta: \"#FF5874\",\n brightCyan: brighten(\"#7FDBCA\", 0.15),\n brightWhite: \"#C3CCDC\",\n foreground: \"#C3CCDC\",\n background: \"#011627\",\n cursorColor: \"#C3CCDC\",\n cursorText: \"#011627\",\n selectionBackground: \"#2C3043\",\n selectionForeground: \"#C3CCDC\",\n}\n","/**\n * Oxocarbon palettes — IBM Carbon Design-inspired theme.\n * Source: https://github.com/nyoom-engineering/oxocarbon.nvim\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Oxocarbon Dark — IBM Carbon-inspired dark variant. */\nexport const oxocarbonDark: ColorPalette = {\n name: \"oxocarbon-dark\",\n dark: true,\n black: \"#131313\",\n red: \"#EE5396\",\n green: \"#42BE65\",\n yellow: \"#82CFFF\",\n blue: \"#78A9FF\",\n magenta: \"#BE95FF\",\n cyan: \"#08BDBA\",\n white: \"#5C5C5C\",\n brightBlack: \"#2A2A2A\",\n brightRed: \"#FF7EB6\",\n brightGreen: brighten(\"#42BE65\", 0.15),\n brightYellow: brighten(\"#82CFFF\", 0.15),\n brightBlue: brighten(\"#78A9FF\", 0.15),\n brightMagenta: \"#FF7EB6\",\n brightCyan: brighten(\"#08BDBA\", 0.15),\n brightWhite: \"#F3F3F3\",\n foreground: \"#F3F3F3\",\n background: \"#161616\",\n cursorColor: \"#F3F3F3\",\n cursorText: \"#161616\",\n selectionBackground: \"#404040\",\n selectionForeground: \"#F3F3F3\",\n}\n\n/** Oxocarbon Light — IBM Carbon-inspired light variant. */\nexport const oxocarbonLight: ColorPalette = {\n name: \"oxocarbon-light\",\n dark: false,\n black: \"#F3F3F3\",\n red: \"#EE5396\",\n green: \"#42BE65\",\n yellow: \"#FFAB91\",\n blue: \"#0F62FE\",\n magenta: \"#BE95FF\",\n cyan: \"#08BDBA\",\n white: \"#90A4AE\",\n brightBlack: \"#D5D5D5\",\n brightRed: \"#FF6F00\",\n brightGreen: brighten(\"#42BE65\", 0.15),\n brightYellow: brighten(\"#FFAB91\", 0.15),\n brightBlue: brighten(\"#0F62FE\", 0.15),\n brightMagenta: \"#FF7EB6\",\n brightCyan: brighten(\"#08BDBA\", 0.15),\n brightWhite: \"#37474F\",\n foreground: \"#37474F\",\n background: \"#FFFFFF\",\n cursorColor: \"#37474F\",\n cursorText: \"#FFFFFF\",\n selectionBackground: \"#525252\",\n selectionForeground: \"#37474F\",\n}\n","/**\n * Sonokai palette — high-contrast vivid theme (Monokai Pro-inspired).\n * Source: https://github.com/sainnhe/sonokai (default style)\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Sonokai — vivid dark theme with Monokai-inspired accents. */\nexport const sonokai: ColorPalette = {\n name: \"sonokai\",\n dark: true,\n black: \"#181819\",\n red: \"#FC5D7C\",\n green: \"#9ED072\",\n yellow: \"#E7C664\",\n blue: \"#76CCE0\",\n magenta: \"#B39DF3\",\n cyan: \"#76CCE0\",\n white: \"#7F8490\",\n brightBlack: \"#33353F\",\n brightRed: \"#F39660\",\n brightGreen: brighten(\"#9ED072\", 0.15),\n brightYellow: brighten(\"#E7C664\", 0.15),\n brightBlue: brighten(\"#76CCE0\", 0.15),\n brightMagenta: \"#FC5D7C\",\n brightCyan: brighten(\"#76CCE0\", 0.15),\n brightWhite: \"#E2E2E3\",\n foreground: \"#E2E2E3\",\n background: \"#2C2E34\",\n cursorColor: \"#E2E2E3\",\n cursorText: \"#2C2E34\",\n selectionBackground: \"#414550\",\n selectionForeground: \"#E2E2E3\",\n}\n","/**\n * Edge palettes — clean, modern theme by sainnhe.\n * Source: https://github.com/sainnhe/edge (default style)\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Edge Dark — clean dark variant with balanced accents. */\nexport const edgeDark: ColorPalette = {\n name: \"edge-dark\",\n dark: true,\n black: \"#202023\",\n red: \"#EC7279\",\n green: \"#A0C980\",\n yellow: \"#DEB974\",\n blue: \"#6CB6EB\",\n magenta: \"#D38AEA\",\n cyan: \"#5DBBC1\",\n white: \"#758094\",\n brightBlack: \"#33353F\",\n brightRed: \"#DEB974\",\n brightGreen: brighten(\"#A0C980\", 0.15),\n brightYellow: brighten(\"#DEB974\", 0.15),\n brightBlue: brighten(\"#6CB6EB\", 0.15),\n brightMagenta: \"#EC7279\",\n brightCyan: brighten(\"#5DBBC1\", 0.15),\n brightWhite: \"#C5CDD9\",\n foreground: \"#C5CDD9\",\n background: \"#2C2E34\",\n cursorColor: \"#C5CDD9\",\n cursorText: \"#2C2E34\",\n selectionBackground: \"#414550\",\n selectionForeground: \"#C5CDD9\",\n}\n\n/** Edge Light — clean, readable light variant. */\nexport const edgeLight: ColorPalette = {\n name: \"edge-light\",\n dark: false,\n black: \"#DDE2E7\",\n red: \"#D05858\",\n green: \"#608E32\",\n yellow: \"#BE7E05\",\n blue: \"#5079BE\",\n magenta: \"#B05CCC\",\n cyan: \"#3A8B84\",\n white: \"#8790A0\",\n brightBlack: \"#EEF1F4\",\n brightRed: \"#BE7E05\",\n brightGreen: brighten(\"#608E32\", 0.15),\n brightYellow: brighten(\"#BE7E05\", 0.15),\n brightBlue: brighten(\"#5079BE\", 0.15),\n brightMagenta: \"#D05858\",\n brightCyan: brighten(\"#3A8B84\", 0.15),\n brightWhite: \"#4B505B\",\n foreground: \"#4B505B\",\n background: \"#FAFAFA\",\n cursorColor: \"#4B505B\",\n cursorText: \"#FAFAFA\",\n selectionBackground: \"#DDE2E7\",\n selectionForeground: \"#4B505B\",\n}\n","/**\n * Modus palettes — GNU Emacs themes conforming to WCAG AAA contrast.\n * Source: https://github.com/protesilaos/modus-themes\n */\n\nimport type { ColorPalette } from \"../types\"\nimport { brighten } from \"../color\"\n\n/** Modus Vivendi — elegant dark theme with maximum legibility. */\nexport const modusVivendi: ColorPalette = {\n name: \"modus-vivendi\",\n dark: true,\n black: \"#000000\",\n red: \"#FF5F59\",\n green: \"#44BC44\",\n yellow: \"#D0BC00\",\n blue: \"#2FAFFF\",\n magenta: \"#B6A0FF\",\n cyan: \"#00D3D0\",\n white: \"#989898\",\n brightBlack: \"#1E1E1E\",\n brightRed: \"#FEC43F\",\n brightGreen: brighten(\"#44BC44\", 0.15),\n brightYellow: brighten(\"#D0BC00\", 0.15),\n brightBlue: brighten(\"#2FAFFF\", 0.15),\n brightMagenta: \"#FEACD0\",\n brightCyan: brighten(\"#00D3D0\", 0.15),\n brightWhite: \"#FFFFFF\",\n foreground: \"#FFFFFF\",\n background: \"#000000\",\n cursorColor: \"#FFFFFF\",\n cursorText: \"#000000\",\n selectionBackground: \"#535353\",\n selectionForeground: \"#FFFFFF\",\n}\n\n/** Modus Operandi — elegant light theme with maximum legibility. */\nexport const modusOperandi: ColorPalette = {\n name: \"modus-operandi\",\n dark: false,\n black: \"#E0E0E0\",\n red: \"#A60000\",\n green: \"#006800\",\n yellow: \"#6F5500\",\n blue: \"#0031A9\",\n magenta: \"#531AB6\",\n cyan: \"#005E8B\",\n white: \"#595959\",\n brightBlack: \"#F2F2F2\",\n brightRed: \"#884900\",\n brightGreen: brighten(\"#006800\", 0.15),\n brightYellow: brighten(\"#6F5500\", 0.15),\n brightBlue: brighten(\"#0031A9\", 0.15),\n brightMagenta: \"#721045\",\n brightCyan: brighten(\"#005E8B\", 0.15),\n brightWhite: \"#000000\",\n foreground: \"#000000\",\n background: \"#FFFFFF\",\n cursorColor: \"#000000\",\n cursorText: \"#FFFFFF\",\n selectionBackground: \"#9F9F9F\",\n selectionForeground: \"#000000\",\n}\n","/**\n * GitHub palettes — GitHub's terminal color schemes.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** GitHub Dark — GitHub's dark terminal theme. */\nexport const githubDark: ColorPalette = {\n name: \"github-dark\",\n dark: true,\n black: \"#000000\",\n red: \"#f78166\",\n green: \"#56d364\",\n yellow: \"#e3b341\",\n blue: \"#6ca4f8\",\n magenta: \"#db61a2\",\n cyan: \"#2b7489\",\n white: \"#ffffff\",\n brightBlack: \"#4d4d4d\",\n brightRed: \"#f78166\",\n brightGreen: \"#56d364\",\n brightYellow: \"#e3b341\",\n brightBlue: \"#6ca4f8\",\n brightMagenta: \"#db61a2\",\n brightCyan: \"#2b7489\",\n brightWhite: \"#ffffff\",\n foreground: \"#8b949e\",\n background: \"#101216\",\n cursorColor: \"#c9d1d9\",\n cursorText: \"#101216\",\n selectionBackground: \"#3b5070\",\n selectionForeground: \"#c9d1d9\",\n}\n\n/** GitHub Light — GitHub's light terminal theme. */\nexport const githubLight: ColorPalette = {\n name: \"github-light\",\n dark: false,\n black: \"#3e3e3e\",\n red: \"#970b16\",\n green: \"#07962a\",\n yellow: \"#f8eec7\",\n blue: \"#003e8a\",\n magenta: \"#e94691\",\n cyan: \"#89d1ec\",\n white: \"#ffffff\",\n brightBlack: \"#666666\",\n brightRed: \"#de0000\",\n brightGreen: \"#87d5a2\",\n brightYellow: \"#f1d007\",\n brightBlue: \"#2e6cba\",\n brightMagenta: \"#ffa29f\",\n brightCyan: \"#1cfafe\",\n brightWhite: \"#ffffff\",\n foreground: \"#3e3e3e\",\n background: \"#f4f4f4\",\n cursorColor: \"#3f3f3f\",\n cursorText: \"#f4f4f4\",\n selectionBackground: \"#a9c1e2\",\n selectionForeground: \"#3e3e3e\",\n}\n","/**\n * Cobalt2 palette — Wes Bos's vibrant dark theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Cobalt2 — vibrant dark blue theme by Wes Bos. */\nexport const cobalt2: ColorPalette = {\n name: \"cobalt2\",\n dark: true,\n black: \"#000000\",\n red: \"#ff0000\",\n green: \"#38de21\",\n yellow: \"#ffe50a\",\n blue: \"#1460d2\",\n magenta: \"#ff005d\",\n cyan: \"#00bbbb\",\n white: \"#bbbbbb\",\n brightBlack: \"#555555\",\n brightRed: \"#f40e17\",\n brightGreen: \"#3bd01d\",\n brightYellow: \"#edc809\",\n brightBlue: \"#5555ff\",\n brightMagenta: \"#ff55ff\",\n brightCyan: \"#6ae3fa\",\n brightWhite: \"#ffffff\",\n foreground: \"#ffffff\",\n background: \"#132738\",\n cursorColor: \"#f0cc09\",\n cursorText: \"#132738\",\n selectionBackground: \"#18354f\",\n selectionForeground: \"#ffffff\",\n}\n","/**\n * Synthwave palettes — retro neon themes.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Synthwave — classic retro terminal neon. */\nexport const synthwave: ColorPalette = {\n name: \"synthwave\",\n dark: true,\n black: \"#000000\",\n red: \"#f6188f\",\n green: \"#1ebb2b\",\n yellow: \"#fdf834\",\n blue: \"#2186ec\",\n magenta: \"#f85a21\",\n cyan: \"#12c3e2\",\n white: \"#ffffff\",\n brightBlack: \"#000000\",\n brightRed: \"#f841a0\",\n brightGreen: \"#25c141\",\n brightYellow: \"#fdf454\",\n brightBlue: \"#2f9ded\",\n brightMagenta: \"#f97137\",\n brightCyan: \"#19cde6\",\n brightWhite: \"#ffffff\",\n foreground: \"#dad9c7\",\n background: \"#000000\",\n cursorColor: \"#19cde6\",\n cursorText: \"#000000\",\n selectionBackground: \"#19cde6\",\n selectionForeground: \"#000000\",\n}\n\n/** Synthwave '84 — the neon VS Code theme. */\nexport const synthwave84: ColorPalette = {\n name: \"synthwave-84\",\n dark: true,\n black: \"#fefefe\",\n red: \"#f97e72\",\n green: \"#72f1b8\",\n yellow: \"#fede5d\",\n blue: \"#6d77b3\",\n magenta: \"#c792ea\",\n cyan: \"#f772e0\",\n white: \"#fefefe\",\n brightBlack: \"#fefefe\",\n brightRed: \"#f88414\",\n brightGreen: \"#72f1b8\",\n brightYellow: \"#fff951\",\n brightBlue: \"#36f9f6\",\n brightMagenta: \"#e1acff\",\n brightCyan: \"#f92aad\",\n brightWhite: \"#fefefe\",\n foreground: \"#f0eff1\",\n background: \"#2a2139\",\n cursorColor: \"#72f1b8\",\n cursorText: \"#2a2139\",\n selectionBackground: \"#181521\",\n selectionForeground: \"#f0eff1\",\n}\n","/**\n * Tomorrow Night palettes — Chris Kempson's classic theme family.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Tomorrow Night — the original dark variant. */\nexport const tomorrowNight: ColorPalette = {\n name: \"tomorrow-night\",\n dark: true,\n black: \"#282a2e\",\n red: \"#cc6666\",\n green: \"#b5bd68\",\n yellow: \"#f0c674\",\n blue: \"#81a2be\",\n magenta: \"#b294bb\",\n cyan: \"#8abeb7\",\n white: \"#e0e0e0\",\n brightBlack: \"#373b41\",\n brightRed: \"#cc6666\",\n brightGreen: \"#b5bd68\",\n brightYellow: \"#f0c674\",\n brightBlue: \"#81a2be\",\n brightMagenta: \"#b294bb\",\n brightCyan: \"#8abeb7\",\n brightWhite: \"#ffffff\",\n foreground: \"#c5c8c6\",\n background: \"#1d1f21\",\n cursorColor: \"#c5c8c6\",\n cursorText: \"#1d1f21\",\n selectionBackground: \"#373b41\",\n selectionForeground: \"#c5c8c6\",\n}\n\n/** Tomorrow Night Blue — deep blue variant. */\nexport const tomorrowNightBlue: ColorPalette = {\n name: \"tomorrow-night-blue\",\n dark: true,\n black: \"#000000\",\n red: \"#ff9da4\",\n green: \"#d1f1a9\",\n yellow: \"#ffeead\",\n blue: \"#bbdaff\",\n magenta: \"#ebbbff\",\n cyan: \"#99ffff\",\n white: \"#ffffff\",\n brightBlack: \"#000000\",\n brightRed: \"#ff9da4\",\n brightGreen: \"#d1f1a9\",\n brightYellow: \"#ffeead\",\n brightBlue: \"#bbdaff\",\n brightMagenta: \"#ebbbff\",\n brightCyan: \"#99ffff\",\n brightWhite: \"#ffffff\",\n foreground: \"#ffffff\",\n background: \"#002451\",\n cursorColor: \"#ffffff\",\n cursorText: \"#002451\",\n selectionBackground: \"#003f8e\",\n selectionForeground: \"#ffffff\",\n}\n\n/** Tomorrow Night Eighties — muted retro variant. */\nexport const tomorrowNightEighties: ColorPalette = {\n name: \"tomorrow-night-eighties\",\n dark: true,\n black: \"#393939\",\n red: \"#f2777a\",\n green: \"#99cc99\",\n yellow: \"#ffcc66\",\n blue: \"#6699cc\",\n magenta: \"#cc99cc\",\n cyan: \"#66cccc\",\n white: \"#e0e0e0\",\n brightBlack: \"#515151\",\n brightRed: \"#f2777a\",\n brightGreen: \"#99cc99\",\n brightYellow: \"#ffcc66\",\n brightBlue: \"#6699cc\",\n brightMagenta: \"#cc99cc\",\n brightCyan: \"#66cccc\",\n brightWhite: \"#ffffff\",\n foreground: \"#cccccc\",\n background: \"#2d2d2d\",\n cursorColor: \"#cccccc\",\n cursorText: \"#2d2d2d\",\n selectionBackground: \"#515151\",\n selectionForeground: \"#cccccc\",\n}\n","/**\n * Zenburn palette — the classic low-contrast vim theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Zenburn — Jani Nurminen's low-contrast dark theme. */\nexport const zenburn: ColorPalette = {\n name: \"zenburn\",\n dark: true,\n black: \"#4d4d4d\",\n red: \"#705050\",\n green: \"#60b48a\",\n yellow: \"#f0dfaf\",\n blue: \"#506070\",\n magenta: \"#dc8cc3\",\n cyan: \"#8cd0d3\",\n white: \"#dcdccc\",\n brightBlack: \"#709080\",\n brightRed: \"#dca3a3\",\n brightGreen: \"#c3bf9f\",\n brightYellow: \"#e0cf9f\",\n brightBlue: \"#94bff3\",\n brightMagenta: \"#ec93d3\",\n brightCyan: \"#93e0e3\",\n brightWhite: \"#ffffff\",\n foreground: \"#dcdccc\",\n background: \"#3f3f3f\",\n cursorColor: \"#73635a\",\n cursorText: \"#3f3f3f\",\n selectionBackground: \"#21322f\",\n selectionForeground: \"#dcdccc\",\n}\n","/**\n * Ubuntu palette — the default Ubuntu terminal theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Ubuntu — the iconic purple terminal from Ubuntu Linux. */\nexport const ubuntu: ColorPalette = {\n name: \"ubuntu\",\n dark: true,\n black: \"#2e3436\",\n red: \"#cc0000\",\n green: \"#4e9a06\",\n yellow: \"#c4a000\",\n blue: \"#3465a4\",\n magenta: \"#75507b\",\n cyan: \"#06989a\",\n white: \"#d3d7cf\",\n brightBlack: \"#555753\",\n brightRed: \"#ef2929\",\n brightGreen: \"#8ae234\",\n brightYellow: \"#fce94f\",\n brightBlue: \"#729fcf\",\n brightMagenta: \"#ad7fa8\",\n brightCyan: \"#34e2e2\",\n brightWhite: \"#eeeeec\",\n foreground: \"#eeeeec\",\n background: \"#300a24\",\n cursorColor: \"#bbbbbb\",\n cursorText: \"#300a24\",\n selectionBackground: \"#b5d5ff\",\n selectionForeground: \"#300a24\",\n}\n","/**\n * Tango palettes — GNOME terminal defaults based on the Tango icon palette.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Tango Dark — GNOME terminal's classic dark Tango theme. */\nexport const tangoDark: ColorPalette = {\n name: \"tango-dark\",\n dark: true,\n black: \"#000000\",\n red: \"#cc0000\",\n green: \"#4e9a06\",\n yellow: \"#c4a000\",\n blue: \"#3465a4\",\n magenta: \"#75507b\",\n cyan: \"#06989a\",\n white: \"#d3d7cf\",\n brightBlack: \"#555753\",\n brightRed: \"#ef2929\",\n brightGreen: \"#8ae234\",\n brightYellow: \"#fce94f\",\n brightBlue: \"#729fcf\",\n brightMagenta: \"#ad7fa8\",\n brightCyan: \"#34e2e2\",\n brightWhite: \"#eeeeec\",\n foreground: \"#ffffff\",\n background: \"#000000\",\n cursorColor: \"#ffffff\",\n cursorText: \"#000000\",\n selectionBackground: \"#b5d5ff\",\n selectionForeground: \"#000000\",\n}\n\n/** Tango Light — GNOME terminal's light Tango variant. */\nexport const tangoLight: ColorPalette = {\n name: \"tango-light\",\n dark: false,\n black: \"#000000\",\n red: \"#cc0000\",\n green: \"#4e9a06\",\n yellow: \"#c4a000\",\n blue: \"#3465a4\",\n magenta: \"#75507b\",\n cyan: \"#06989a\",\n white: \"#d3d7cf\",\n brightBlack: \"#555753\",\n brightRed: \"#ef2929\",\n brightGreen: \"#8ae234\",\n brightYellow: \"#fce94f\",\n brightBlue: \"#729fcf\",\n brightMagenta: \"#ad7fa8\",\n brightCyan: \"#34e2e2\",\n brightWhite: \"#eeeeec\",\n foreground: \"#000000\",\n background: \"#ffffff\",\n cursorColor: \"#000000\",\n cursorText: \"#ffffff\",\n selectionBackground: \"#b5d5ff\",\n selectionForeground: \"#000000\",\n}\n","/**\n * Cyberpunk palette — neon-drenched futuristic theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Cyberpunk — neon colors on deep purple. */\nexport const cyberpunk: ColorPalette = {\n name: \"cyberpunk\",\n dark: true,\n black: \"#000000\",\n red: \"#ff7092\",\n green: \"#00fbac\",\n yellow: \"#fffa6a\",\n blue: \"#00bfff\",\n magenta: \"#df95ff\",\n cyan: \"#86cbfe\",\n white: \"#ffffff\",\n brightBlack: \"#000000\",\n brightRed: \"#ff8aa4\",\n brightGreen: \"#21f6bc\",\n brightYellow: \"#fff787\",\n brightBlue: \"#1bccfd\",\n brightMagenta: \"#e6aefe\",\n brightCyan: \"#99d6fc\",\n brightWhite: \"#ffffff\",\n foreground: \"#e5e5e5\",\n background: \"#332a57\",\n cursorColor: \"#21f6bc\",\n cursorText: \"#332a57\",\n selectionBackground: \"#c1deff\",\n selectionForeground: \"#332a57\",\n}\n","/**\n * VS Code palettes — Visual Studio Code's built-in terminal themes.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** VS Code Dark+ — the default VS Code dark terminal theme. */\nexport const vscodeDark: ColorPalette = {\n name: \"vscode-dark\",\n dark: true,\n black: \"#000000\",\n red: \"#cd3131\",\n green: \"#0dbc79\",\n yellow: \"#e5e510\",\n blue: \"#2472c8\",\n magenta: \"#bc3fbc\",\n cyan: \"#11a8cd\",\n white: \"#e5e5e5\",\n brightBlack: \"#666666\",\n brightRed: \"#f14c4c\",\n brightGreen: \"#23d18b\",\n brightYellow: \"#f5f543\",\n brightBlue: \"#3b8eea\",\n brightMagenta: \"#d670d6\",\n brightCyan: \"#29b8db\",\n brightWhite: \"#e5e5e5\",\n foreground: \"#cccccc\",\n background: \"#1e1e1e\",\n cursorColor: \"#ffffff\",\n cursorText: \"#1e1e1e\",\n selectionBackground: \"#3a3d41\",\n selectionForeground: \"#cccccc\",\n}\n","/**\n * One Light palette — Atom's iconic light theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** One Light — the classic Atom editor light theme. */\nexport const oneLight: ColorPalette = {\n name: \"one-light\",\n dark: false,\n black: \"#000000\",\n red: \"#de3e35\",\n green: \"#3f953a\",\n yellow: \"#d2b67c\",\n blue: \"#2f5af3\",\n magenta: \"#950095\",\n cyan: \"#3f953a\",\n white: \"#bbbbbb\",\n brightBlack: \"#000000\",\n brightRed: \"#de3e35\",\n brightGreen: \"#3f953a\",\n brightYellow: \"#d2b67c\",\n brightBlue: \"#2f5af3\",\n brightMagenta: \"#a00095\",\n brightCyan: \"#3f953a\",\n brightWhite: \"#ffffff\",\n foreground: \"#2a2c33\",\n background: \"#f9f9f9\",\n cursorColor: \"#bbbbbb\",\n cursorText: \"#f9f9f9\",\n selectionBackground: \"#ededed\",\n selectionForeground: \"#2a2c33\",\n}\n\n/** One Half Dark — sonph's One-inspired dark theme. */\nexport const oneHalfDark: ColorPalette = {\n name: \"one-half-dark\",\n dark: true,\n black: \"#282c34\",\n red: \"#e06c75\",\n green: \"#98c379\",\n yellow: \"#e5c07b\",\n blue: \"#61afef\",\n magenta: \"#c678dd\",\n cyan: \"#56b6c2\",\n white: \"#dcdfe4\",\n brightBlack: \"#282c34\",\n brightRed: \"#e06c75\",\n brightGreen: \"#98c379\",\n brightYellow: \"#e5c07b\",\n brightBlue: \"#61afef\",\n brightMagenta: \"#c678dd\",\n brightCyan: \"#56b6c2\",\n brightWhite: \"#dcdfe4\",\n foreground: \"#dcdfe4\",\n background: \"#282c34\",\n cursorColor: \"#a3b3cc\",\n cursorText: \"#282c34\",\n selectionBackground: \"#474e5d\",\n selectionForeground: \"#dcdfe4\",\n}\n\n/** One Half Light — sonph's One-inspired light theme. */\nexport const oneHalfLight: ColorPalette = {\n name: \"one-half-light\",\n dark: false,\n black: \"#383a42\",\n red: \"#e45649\",\n green: \"#50a14f\",\n yellow: \"#c18401\",\n blue: \"#0184bc\",\n magenta: \"#a626a4\",\n cyan: \"#0997b3\",\n white: \"#fafafa\",\n brightBlack: \"#4f525e\",\n brightRed: \"#e06c75\",\n brightGreen: \"#98c379\",\n brightYellow: \"#e5c07b\",\n brightBlue: \"#61afef\",\n brightMagenta: \"#c678dd\",\n brightCyan: \"#56b6c2\",\n brightWhite: \"#ffffff\",\n foreground: \"#383a42\",\n background: \"#fafafa\",\n cursorColor: \"#bfceff\",\n cursorText: \"#fafafa\",\n selectionBackground: \"#bfceff\",\n selectionForeground: \"#383a42\",\n}\n","/**\n * Night Owl palette — Sarah Drasner's popular VS Code theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Night Owl Light — the light variant by Sarah Drasner. */\nexport const nightOwlLight: ColorPalette = {\n name: \"night-owl-light\",\n dark: false,\n black: \"#011627\",\n red: \"#d3423e\",\n green: \"#2aa298\",\n yellow: \"#daaa01\",\n blue: \"#4876d6\",\n magenta: \"#403f53\",\n cyan: \"#08916a\",\n white: \"#7a8181\",\n brightBlack: \"#7a8181\",\n brightRed: \"#f76e6e\",\n brightGreen: \"#49d0c5\",\n brightYellow: \"#dac26b\",\n brightBlue: \"#5ca7e4\",\n brightMagenta: \"#697098\",\n brightCyan: \"#00c990\",\n brightWhite: \"#989fb1\",\n foreground: \"#403f53\",\n background: \"#ffffff\",\n cursorColor: \"#403f53\",\n cursorText: \"#ffffff\",\n selectionBackground: \"#f2f2f2\",\n selectionForeground: \"#403f53\",\n}\n","/**\n * Shades of Purple palette — Ahmad Awais's vibrant purple theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Shades of Purple — vivid purple-based dark theme. */\nexport const shadesOfPurple: ColorPalette = {\n name: \"shades-of-purple\",\n dark: true,\n black: \"#000000\",\n red: \"#d90429\",\n green: \"#3ad900\",\n yellow: \"#ffe700\",\n blue: \"#6943ff\",\n magenta: \"#ff2c70\",\n cyan: \"#00c5c7\",\n white: \"#c7c7c7\",\n brightBlack: \"#686868\",\n brightRed: \"#f92a1c\",\n brightGreen: \"#43d426\",\n brightYellow: \"#f1d000\",\n brightBlue: \"#6871ff\",\n brightMagenta: \"#ff77ff\",\n brightCyan: \"#79e8fb\",\n brightWhite: \"#ffffff\",\n foreground: \"#ffffff\",\n background: \"#1e1d40\",\n cursorColor: \"#fad000\",\n cursorText: \"#1e1d40\",\n selectionBackground: \"#b362ff\",\n selectionForeground: \"#ffffff\",\n}\n","/**\n * Homebrew palette — classic green-on-black terminal.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Homebrew — the classic green phosphor terminal look. */\nexport const homebrew: ColorPalette = {\n name: \"homebrew\",\n dark: true,\n black: \"#000000\",\n red: \"#990000\",\n green: \"#00a600\",\n yellow: \"#999900\",\n blue: \"#0000b2\",\n magenta: \"#b200b2\",\n cyan: \"#00a6b2\",\n white: \"#bfbfbf\",\n brightBlack: \"#666666\",\n brightRed: \"#e50000\",\n brightGreen: \"#00d900\",\n brightYellow: \"#e5e500\",\n brightBlue: \"#0000ff\",\n brightMagenta: \"#e500e5\",\n brightCyan: \"#00e5e5\",\n brightWhite: \"#e5e5e5\",\n foreground: \"#00ff00\",\n background: \"#000000\",\n cursorColor: \"#23ff18\",\n cursorText: \"#000000\",\n selectionBackground: \"#083905\",\n selectionForeground: \"#00ff00\",\n}\n","/**\n * Neon palette — high-saturation neon glow theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Neon — electric high-contrast neon colors. */\nexport const neon: ColorPalette = {\n name: \"neon\",\n dark: true,\n black: \"#000000\",\n red: \"#ff3045\",\n green: \"#5ffa74\",\n yellow: \"#fffc7e\",\n blue: \"#0208cb\",\n magenta: \"#f924e7\",\n cyan: \"#00fffc\",\n white: \"#c7c7c7\",\n brightBlack: \"#686868\",\n brightRed: \"#ff5a5a\",\n brightGreen: \"#75ff88\",\n brightYellow: \"#fffd96\",\n brightBlue: \"#3c40cb\",\n brightMagenta: \"#f15be5\",\n brightCyan: \"#88fffe\",\n brightWhite: \"#ffffff\",\n foreground: \"#00fffc\",\n background: \"#14161a\",\n cursorColor: \"#c7c7c7\",\n cursorText: \"#14161a\",\n selectionBackground: \"#0013ff\",\n selectionForeground: \"#ffffff\",\n}\n","/**\n * Challenger Deep palette — a dark, space-inspired theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Challenger Deep — dreamy purple-blue dark theme. */\nexport const challengerDeep: ColorPalette = {\n name: \"challenger-deep\",\n dark: true,\n black: \"#141228\",\n red: \"#ff5458\",\n green: \"#62d196\",\n yellow: \"#ffb378\",\n blue: \"#65b2ff\",\n magenta: \"#906cff\",\n cyan: \"#63f2f1\",\n white: \"#a6b3cc\",\n brightBlack: \"#565575\",\n brightRed: \"#ff8080\",\n brightGreen: \"#95ffa4\",\n brightYellow: \"#ffe9aa\",\n brightBlue: \"#91ddff\",\n brightMagenta: \"#c991e1\",\n brightCyan: \"#aaffe4\",\n brightWhite: \"#cbe3e7\",\n foreground: \"#cbe1e7\",\n background: \"#1e1c31\",\n cursorColor: \"#fbfcfc\",\n cursorText: \"#1e1c31\",\n selectionBackground: \"#cbe1e7\",\n selectionForeground: \"#1e1c31\",\n}\n","/**\n * Doom One palette — Emacs Doom's default dark theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Doom One — Henrik Lissner's Emacs Doom default theme. */\nexport const doomOne: ColorPalette = {\n name: \"doom-one\",\n dark: true,\n black: \"#000000\",\n red: \"#ff6c6b\",\n green: \"#98be65\",\n yellow: \"#ecbe7b\",\n blue: \"#a9a1e1\",\n magenta: \"#c678dd\",\n cyan: \"#51afef\",\n white: \"#bbc2cf\",\n brightBlack: \"#000000\",\n brightRed: \"#ff6655\",\n brightGreen: \"#99bb66\",\n brightYellow: \"#ecbe7b\",\n brightBlue: \"#a9a1e1\",\n brightMagenta: \"#c678dd\",\n brightCyan: \"#51afef\",\n brightWhite: \"#bfbfbf\",\n foreground: \"#bbc2cf\",\n background: \"#282c34\",\n cursorColor: \"#51afef\",\n cursorText: \"#282c34\",\n selectionBackground: \"#42444b\",\n selectionForeground: \"#bbc2cf\",\n}\n","/**\n * Mariana palette — Sublime Text's default dark theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Mariana — Sublime Text's oceanic dark theme. */\nexport const mariana: ColorPalette = {\n name: \"mariana\",\n dark: true,\n black: \"#000000\",\n red: \"#ec5f66\",\n green: \"#99c794\",\n yellow: \"#f9ae58\",\n blue: \"#6699cc\",\n magenta: \"#c695c6\",\n cyan: \"#5fb4b4\",\n white: \"#f7f7f7\",\n brightBlack: \"#333333\",\n brightRed: \"#f97b58\",\n brightGreen: \"#acd1a8\",\n brightYellow: \"#fac761\",\n brightBlue: \"#85add6\",\n brightMagenta: \"#d8b6d8\",\n brightCyan: \"#82c4c4\",\n brightWhite: \"#ffffff\",\n foreground: \"#d8dee9\",\n background: \"#343d46\",\n cursorColor: \"#fcbb6a\",\n cursorText: \"#343d46\",\n selectionBackground: \"#4e5a65\",\n selectionForeground: \"#d8dee9\",\n}\n","/**\n * Darcula palette — JetBrains' iconic dark theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Darcula — the JetBrains IDE dark theme. */\nexport const darcula: ColorPalette = {\n name: \"darcula\",\n dark: true,\n black: \"#000000\",\n red: \"#fa5355\",\n green: \"#126e00\",\n yellow: \"#c2c300\",\n blue: \"#4581eb\",\n magenta: \"#fa54ff\",\n cyan: \"#33c2c1\",\n white: \"#adadad\",\n brightBlack: \"#555555\",\n brightRed: \"#fb7172\",\n brightGreen: \"#67ff4f\",\n brightYellow: \"#ffff00\",\n brightBlue: \"#6d9df1\",\n brightMagenta: \"#fb82ff\",\n brightCyan: \"#60d3d1\",\n brightWhite: \"#eeeeee\",\n foreground: \"#adadad\",\n background: \"#202020\",\n cursorColor: \"#ffffff\",\n cursorText: \"#202020\",\n selectionBackground: \"#1a3272\",\n selectionForeground: \"#adadad\",\n}\n","/**\n * Espresso palette — the warm coffee-inspired dark theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Espresso — warm, balanced dark theme. */\nexport const espresso: ColorPalette = {\n name: \"espresso\",\n dark: true,\n black: \"#353535\",\n red: \"#d25252\",\n green: \"#a5c261\",\n yellow: \"#ffc66d\",\n blue: \"#6c99bb\",\n magenta: \"#d197d9\",\n cyan: \"#bed6ff\",\n white: \"#eeeeec\",\n brightBlack: \"#535353\",\n brightRed: \"#f00c0c\",\n brightGreen: \"#c2e075\",\n brightYellow: \"#e1e48b\",\n brightBlue: \"#8ab7d9\",\n brightMagenta: \"#efb5f7\",\n brightCyan: \"#dcf4ff\",\n brightWhite: \"#ffffff\",\n foreground: \"#ffffff\",\n background: \"#323232\",\n cursorColor: \"#d6d6d6\",\n cursorText: \"#323232\",\n selectionBackground: \"#5b5b5b\",\n selectionForeground: \"#ffffff\",\n}\n","/**\n * Iceberg palettes — cocopon's blue-tinged theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Iceberg Dark — cool blue dark theme. */\nexport const icebergDark: ColorPalette = {\n name: \"iceberg-dark\",\n dark: true,\n black: \"#1e2132\",\n red: \"#e27878\",\n green: \"#b4be82\",\n yellow: \"#e2a478\",\n blue: \"#84a0c6\",\n magenta: \"#a093c7\",\n cyan: \"#89b8c2\",\n white: \"#c6c8d1\",\n brightBlack: \"#6b7089\",\n brightRed: \"#e98989\",\n brightGreen: \"#c0ca8e\",\n brightYellow: \"#e9b189\",\n brightBlue: \"#91acd1\",\n brightMagenta: \"#ada0d3\",\n brightCyan: \"#95c4ce\",\n brightWhite: \"#d2d4de\",\n foreground: \"#c6c8d1\",\n background: \"#161821\",\n cursorColor: \"#c6c8d1\",\n cursorText: \"#161821\",\n selectionBackground: \"#c6c8d1\",\n selectionForeground: \"#161821\",\n}\n\n/** Iceberg Light — cool blue light theme. */\nexport const icebergLight: ColorPalette = {\n name: \"iceberg-light\",\n dark: false,\n black: \"#dcdfe7\",\n red: \"#cc517a\",\n green: \"#668e3d\",\n yellow: \"#c57339\",\n blue: \"#2d539e\",\n magenta: \"#7759b4\",\n cyan: \"#3f83a6\",\n white: \"#33374c\",\n brightBlack: \"#8389a3\",\n brightRed: \"#cc3768\",\n brightGreen: \"#598030\",\n brightYellow: \"#b6662d\",\n brightBlue: \"#22478e\",\n brightMagenta: \"#6845ad\",\n brightCyan: \"#327698\",\n brightWhite: \"#262a3f\",\n foreground: \"#33374c\",\n background: \"#e8e9ec\",\n cursorColor: \"#33374c\",\n cursorText: \"#e8e9ec\",\n selectionBackground: \"#33374c\",\n selectionForeground: \"#e8e9ec\",\n}\n","/**\n * Serendipity palettes — Michael Andreuzza's elegant themes.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Serendipity Midnight — deep dark variant. */\nexport const serendipityMidnight: ColorPalette = {\n name: \"serendipity-midnight\",\n dark: true,\n black: \"#232534\",\n red: \"#ee8679\",\n green: \"#9ccfd8\",\n yellow: \"#f8d2c9\",\n blue: \"#5ba2d0\",\n magenta: \"#a78bfa\",\n cyan: \"#94b8ff\",\n white: \"#dee0ef\",\n brightBlack: \"#8d8f9e\",\n brightRed: \"#ee8679\",\n brightGreen: \"#9ccfd8\",\n brightYellow: \"#f8d2c9\",\n brightBlue: \"#5ba2d0\",\n brightMagenta: \"#a78bfa\",\n brightCyan: \"#94b8ff\",\n brightWhite: \"#dee0ef\",\n foreground: \"#dee0ef\",\n background: \"#1c1e2d\",\n cursorColor: \"#6b6d7c\",\n cursorText: \"#1c1e2d\",\n selectionBackground: \"#2c2e3d\",\n selectionForeground: \"#dee0ef\",\n}\n\n/** Serendipity Morning — warm light variant. */\nexport const serendipityMorning: ColorPalette = {\n name: \"serendipity-morning\",\n dark: false,\n black: \"#f2e9de\",\n red: \"#d26a5d\",\n green: \"#77aab3\",\n yellow: \"#c8a299\",\n blue: \"#3788be\",\n magenta: \"#886cdb\",\n cyan: \"#7397de\",\n white: \"#575279\",\n brightBlack: \"#6e6a86\",\n brightRed: \"#d26a5d\",\n brightGreen: \"#77aab3\",\n brightYellow: \"#c8a299\",\n brightBlue: \"#3788be\",\n brightMagenta: \"#886cdb\",\n brightCyan: \"#7397de\",\n brightWhite: \"#575279\",\n foreground: \"#575279\",\n background: \"#fffaf3\",\n cursorColor: \"#9893a5\",\n cursorText: \"#fffaf3\",\n selectionBackground: \"#f4efea\",\n selectionForeground: \"#575279\",\n}\n","/**\n * Twilight palette — the warm, muted classic.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Twilight — warm earthy dark theme. */\nexport const twilight: ColorPalette = {\n name: \"twilight\",\n dark: true,\n black: \"#141414\",\n red: \"#c06d44\",\n green: \"#afb97a\",\n yellow: \"#c2a86c\",\n blue: \"#44474a\",\n magenta: \"#b4be7c\",\n cyan: \"#778385\",\n white: \"#ffffd4\",\n brightBlack: \"#262626\",\n brightRed: \"#de7c4c\",\n brightGreen: \"#ccd88c\",\n brightYellow: \"#e2c47e\",\n brightBlue: \"#5a5e62\",\n brightMagenta: \"#d0dc8e\",\n brightCyan: \"#8a989b\",\n brightWhite: \"#ffffd4\",\n foreground: \"#ffffd4\",\n background: \"#141414\",\n cursorColor: \"#ffffff\",\n cursorText: \"#141414\",\n selectionBackground: \"#313131\",\n selectionForeground: \"#ffffd4\",\n}\n","/**\n * Breeze palette — KDE's default terminal theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Breeze — KDE Plasma's clean dark theme. */\nexport const breeze: ColorPalette = {\n name: \"breeze\",\n dark: true,\n black: \"#31363b\",\n red: \"#ed1515\",\n green: \"#11d116\",\n yellow: \"#f67400\",\n blue: \"#1d99f3\",\n magenta: \"#9b59b6\",\n cyan: \"#1abc9c\",\n white: \"#eff0f1\",\n brightBlack: \"#7f8c8d\",\n brightRed: \"#c0392b\",\n brightGreen: \"#1cdc9a\",\n brightYellow: \"#fdbc4b\",\n brightBlue: \"#3daee9\",\n brightMagenta: \"#8e44ad\",\n brightCyan: \"#16a085\",\n brightWhite: \"#fcfcfc\",\n foreground: \"#eff0f1\",\n background: \"#31363b\",\n cursorColor: \"#eff0f1\",\n cursorText: \"#31363b\",\n selectionBackground: \"#eff0f1\",\n selectionForeground: \"#31363b\",\n}\n","/**\n * Andromeda palette — EliverLara's VS Code theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Andromeda — rich dark theme with balanced colors. */\nexport const andromeda: ColorPalette = {\n name: \"andromeda\",\n dark: true,\n black: \"#000000\",\n red: \"#cd3131\",\n green: \"#05bc79\",\n yellow: \"#e5e512\",\n blue: \"#2472c8\",\n magenta: \"#bc3fbc\",\n cyan: \"#0fa8cd\",\n white: \"#e5e5e5\",\n brightBlack: \"#666666\",\n brightRed: \"#cd3131\",\n brightGreen: \"#05bc79\",\n brightYellow: \"#e5e512\",\n brightBlue: \"#2472c8\",\n brightMagenta: \"#bc3fbc\",\n brightCyan: \"#0fa8cd\",\n brightWhite: \"#e5e5e5\",\n foreground: \"#e5e5e5\",\n background: \"#262a33\",\n cursorColor: \"#f8f8f0\",\n cursorText: \"#262a33\",\n selectionBackground: \"#5a5c62\",\n selectionForeground: \"#e5e5e5\",\n}\n","/**\n * Relaxed palette — a calm, muted dark theme.\n */\n\nimport type { ColorPalette } from \"../types\"\n\n/** Relaxed — low-contrast muted dark theme. */\nexport const relaxed: ColorPalette = {\n name: \"relaxed\",\n dark: true,\n black: \"#151515\",\n red: \"#bc5653\",\n green: \"#909d63\",\n yellow: \"#ebc17a\",\n blue: \"#6a8799\",\n magenta: \"#b06698\",\n cyan: \"#c9dfff\",\n white: \"#d9d9d9\",\n brightBlack: \"#636363\",\n brightRed: \"#bc5653\",\n brightGreen: \"#a0ac77\",\n brightYellow: \"#ebc17a\",\n brightBlue: \"#7eaac7\",\n brightMagenta: \"#b06698\",\n brightCyan: \"#acbbd0\",\n brightWhite: \"#f7f7f7\",\n foreground: \"#d9d9d9\",\n background: \"#353a44\",\n cursorColor: \"#d9d9d9\",\n cursorText: \"#353a44\",\n selectionBackground: \"#6a7985\",\n selectionForeground: \"#d9d9d9\",\n}\n","/**\n * Built-in themes and palette registry.\n *\n * Exports:\n * - Pre-derived Theme objects (ansi16Dark, ansi16Light, defaultDark, defaultLight)\n * - ColorPalette definitions from popular theme systems (70+ palettes)\n * - Registry functions (getThemeByName, getPaletteByName)\n */\n\nimport { deriveTheme } from \"../derive\"\nimport type { Theme, ColorPalette } from \"../types\"\n\n// ── Re-export all palette definitions ──────────────────────────────\nexport { catppuccinMocha, catppuccinFrappe, catppuccinMacchiato, catppuccinLatte } from \"./catppuccin\"\nexport { nord } from \"./nord\"\nexport { dracula } from \"./dracula\"\nexport { solarizedDark, solarizedLight } from \"./solarized\"\nexport { tokyoNight, tokyoNightStorm, tokyoNightDay } from \"./tokyo-night\"\nexport { oneDark } from \"./one-dark\"\nexport { gruvboxDark, gruvboxLight } from \"./gruvbox\"\nexport { rosePine, rosePineMoon, rosePineDawn } from \"./rose-pine\"\nexport { kanagawaWave, kanagawaDragon, kanagawaLotus } from \"./kanagawa\"\nexport { everforestDark, everforestLight } from \"./everforest\"\nexport { monokai, monokaiPro } from \"./monokai\"\nexport { snazzy } from \"./snazzy\"\nexport { materialDark, materialLight } from \"./material\"\nexport { palenight } from \"./palenight\"\nexport { ayuDark, ayuMirage, ayuLight } from \"./ayu\"\nexport { nightfox, dawnfox } from \"./nightfox\"\nexport { horizon } from \"./horizon\"\nexport { moonfly } from \"./moonfly\"\nexport { nightfly } from \"./nightfly\"\nexport { oxocarbonDark, oxocarbonLight } from \"./oxocarbon\"\nexport { sonokai } from \"./sonokai\"\nexport { edgeDark, edgeLight } from \"./edge\"\nexport { modusVivendi, modusOperandi } from \"./modus\"\n// New palettes\nexport { githubDark, githubLight } from \"./github\"\nexport { cobalt2 } from \"./cobalt2\"\nexport { synthwave, synthwave84 } from \"./synthwave\"\nexport { tomorrowNight, tomorrowNightBlue, tomorrowNightEighties } from \"./tomorrow-night\"\nexport { zenburn } from \"./zenburn\"\nexport { ubuntu } from \"./ubuntu\"\nexport { tangoDark, tangoLight } from \"./tango\"\nexport { cyberpunk } from \"./cyberpunk\"\nexport { vscodeDark } from \"./vscode\"\nexport { oneLight, oneHalfDark, oneHalfLight } from \"./one-light\"\nexport { nightOwlLight } from \"./night-owl\"\nexport { shadesOfPurple } from \"./shades-of-purple\"\nexport { homebrew } from \"./homebrew\"\nexport { neon } from \"./neon\"\nexport { challengerDeep } from \"./challenger-deep\"\nexport { doomOne } from \"./doom-one\"\nexport { mariana } from \"./mariana\"\nexport { darcula } from \"./darcula\"\nexport { espresso } from \"./espresso\"\nexport { icebergDark, icebergLight } from \"./iceberg\"\nexport { serendipityMidnight, serendipityMorning } from \"./serendipity\"\nexport { twilight } from \"./twilight\"\nexport { breeze } from \"./breeze\"\nexport { andromeda } from \"./andromeda\"\nexport { relaxed } from \"./relaxed\"\n\n// ── Import for registry ────────────────────────────────────────────\nimport { catppuccinMocha, catppuccinFrappe, catppuccinMacchiato, catppuccinLatte } from \"./catppuccin\"\nimport { nord } from \"./nord\"\nimport { dracula } from \"./dracula\"\nimport { solarizedDark, solarizedLight } from \"./solarized\"\nimport { tokyoNight, tokyoNightStorm, tokyoNightDay } from \"./tokyo-night\"\nimport { oneDark } from \"./one-dark\"\nimport { gruvboxDark, gruvboxLight } from \"./gruvbox\"\nimport { rosePine, rosePineMoon, rosePineDawn } from \"./rose-pine\"\nimport { kanagawaWave, kanagawaDragon, kanagawaLotus } from \"./kanagawa\"\nimport { everforestDark, everforestLight } from \"./everforest\"\nimport { monokai, monokaiPro } from \"./monokai\"\nimport { snazzy } from \"./snazzy\"\nimport { materialDark, materialLight } from \"./material\"\nimport { palenight } from \"./palenight\"\nimport { ayuDark, ayuMirage, ayuLight } from \"./ayu\"\nimport { nightfox, dawnfox } from \"./nightfox\"\nimport { horizon } from \"./horizon\"\nimport { moonfly } from \"./moonfly\"\nimport { nightfly } from \"./nightfly\"\nimport { oxocarbonDark, oxocarbonLight } from \"./oxocarbon\"\nimport { sonokai } from \"./sonokai\"\nimport { edgeDark, edgeLight } from \"./edge\"\nimport { modusVivendi, modusOperandi } from \"./modus\"\n// New palettes\nimport { githubDark, githubLight } from \"./github\"\nimport { cobalt2 } from \"./cobalt2\"\nimport { synthwave, synthwave84 } from \"./synthwave\"\nimport { tomorrowNight, tomorrowNightBlue, tomorrowNightEighties } from \"./tomorrow-night\"\nimport { zenburn } from \"./zenburn\"\nimport { ubuntu } from \"./ubuntu\"\nimport { tangoDark, tangoLight } from \"./tango\"\nimport { cyberpunk } from \"./cyberpunk\"\nimport { vscodeDark } from \"./vscode\"\nimport { oneLight, oneHalfDark, oneHalfLight } from \"./one-light\"\nimport { nightOwlLight } from \"./night-owl\"\nimport { shadesOfPurple } from \"./shades-of-purple\"\nimport { homebrew } from \"./homebrew\"\nimport { neon } from \"./neon\"\nimport { challengerDeep } from \"./challenger-deep\"\nimport { doomOne } from \"./doom-one\"\nimport { mariana } from \"./mariana\"\nimport { darcula } from \"./darcula\"\nimport { espresso } from \"./espresso\"\nimport { icebergDark, icebergLight } from \"./iceberg\"\nimport { serendipityMidnight, serendipityMorning } from \"./serendipity\"\nimport { twilight } from \"./twilight\"\nimport { breeze } from \"./breeze\"\nimport { andromeda } from \"./andromeda\"\nimport { relaxed } from \"./relaxed\"\n\n// ============================================================================\n// ANSI 16 Themes (no palette required — hardcoded for any terminal)\n// ============================================================================\n\n/** Dark ANSI 16 theme — works on any terminal. Primary = yellow. */\nexport const ansi16DarkTheme: Theme = {\n name: \"dark-ansi16\",\n bg: \"\",\n fg: \"whiteBright\",\n muted: \"white\",\n mutedbg: \"black\",\n surface: \"whiteBright\",\n surfacebg: \"black\",\n popover: \"whiteBright\",\n popoverbg: \"black\",\n inverse: \"black\",\n inversebg: \"whiteBright\",\n cursor: \"black\",\n cursorbg: \"yellow\",\n selection: \"black\",\n selectionbg: \"yellow\",\n primary: \"yellow\",\n primaryfg: \"black\",\n secondary: \"white\",\n secondaryfg: \"black\",\n accent: \"blueBright\",\n accentfg: \"black\",\n error: \"redBright\",\n errorfg: \"black\",\n warning: \"yellow\",\n warningfg: \"black\",\n success: \"greenBright\",\n successfg: \"black\",\n info: \"cyan\",\n infofg: \"black\",\n border: \"gray\",\n inputborder: \"gray\",\n focusborder: \"blueBright\",\n link: \"blueBright\",\n disabledfg: \"gray\",\n palette: [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"blackBright\",\n \"redBright\",\n \"greenBright\",\n \"yellowBright\",\n \"blueBright\",\n \"magentaBright\",\n \"cyanBright\",\n \"whiteBright\",\n ],\n}\n\n/** Light ANSI 16 theme — works on any terminal. Primary = blue. */\nexport const ansi16LightTheme: Theme = {\n name: \"light-ansi16\",\n bg: \"\",\n fg: \"black\",\n muted: \"blackBright\",\n mutedbg: \"white\",\n surface: \"black\",\n surfacebg: \"white\",\n popover: \"black\",\n popoverbg: \"white\",\n inverse: \"whiteBright\",\n inversebg: \"black\",\n cursor: \"black\",\n cursorbg: \"blue\",\n selection: \"black\",\n selectionbg: \"cyan\",\n primary: \"blue\",\n primaryfg: \"black\",\n secondary: \"blue\",\n secondaryfg: \"black\",\n accent: \"cyan\",\n accentfg: \"black\",\n error: \"red\",\n errorfg: \"black\",\n warning: \"yellow\",\n warningfg: \"black\",\n success: \"green\",\n successfg: \"black\",\n info: \"cyan\",\n infofg: \"black\",\n border: \"gray\",\n inputborder: \"gray\",\n focusborder: \"blue\",\n link: \"blueBright\",\n disabledfg: \"gray\",\n palette: [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"blackBright\",\n \"redBright\",\n \"greenBright\",\n \"yellowBright\",\n \"blueBright\",\n \"magentaBright\",\n \"cyanBright\",\n \"whiteBright\",\n ],\n}\n\n// ============================================================================\n// Default Truecolor Themes (derived from Nord palette)\n// ============================================================================\n\n/** Dark truecolor theme — derived from Nord. */\nexport const defaultDarkTheme: Theme = deriveTheme(nord)\n\n/** Light truecolor theme — derived from Catppuccin Latte. */\nexport const defaultLightTheme: Theme = deriveTheme(catppuccinLatte)\n\n// ============================================================================\n// Registry\n// ============================================================================\n\n/** All built-in ColorPalette definitions (70+ palettes). */\nexport const builtinPalettes: Record<string, ColorPalette> = {\n // Catppuccin\n \"catppuccin-mocha\": catppuccinMocha,\n \"catppuccin-frappe\": catppuccinFrappe,\n \"catppuccin-macchiato\": catppuccinMacchiato,\n \"catppuccin-latte\": catppuccinLatte,\n // Nord\n nord: nord,\n // Dracula\n dracula: dracula,\n // Solarized\n \"solarized-dark\": solarizedDark,\n \"solarized-light\": solarizedLight,\n // Tokyo Night\n \"tokyo-night\": tokyoNight,\n \"tokyo-night-storm\": tokyoNightStorm,\n \"tokyo-night-day\": tokyoNightDay,\n // One Dark\n \"one-dark\": oneDark,\n // Gruvbox\n \"gruvbox-dark\": gruvboxDark,\n \"gruvbox-light\": gruvboxLight,\n // Rose Pine\n \"rose-pine\": rosePine,\n \"rose-pine-moon\": rosePineMoon,\n \"rose-pine-dawn\": rosePineDawn,\n // Kanagawa\n \"kanagawa-wave\": kanagawaWave,\n \"kanagawa-dragon\": kanagawaDragon,\n \"kanagawa-lotus\": kanagawaLotus,\n // Everforest\n \"everforest-dark\": everforestDark,\n \"everforest-light\": everforestLight,\n // Monokai\n monokai: monokai,\n \"monokai-pro\": monokaiPro,\n // Snazzy\n snazzy: snazzy,\n // Material\n \"material-dark\": materialDark,\n \"material-light\": materialLight,\n // Palenight\n palenight: palenight,\n // Ayu\n \"ayu-dark\": ayuDark,\n \"ayu-mirage\": ayuMirage,\n \"ayu-light\": ayuLight,\n // Nightfox\n nightfox: nightfox,\n dawnfox: dawnfox,\n // Horizon\n horizon: horizon,\n // Moonfly\n moonfly: moonfly,\n // Nightfly\n nightfly: nightfly,\n // Oxocarbon\n \"oxocarbon-dark\": oxocarbonDark,\n \"oxocarbon-light\": oxocarbonLight,\n // Sonokai\n sonokai: sonokai,\n // Edge\n \"edge-dark\": edgeDark,\n \"edge-light\": edgeLight,\n // Modus\n \"modus-vivendi\": modusVivendi,\n \"modus-operandi\": modusOperandi,\n // GitHub\n \"github-dark\": githubDark,\n \"github-light\": githubLight,\n // Cobalt2\n cobalt2: cobalt2,\n // Synthwave\n synthwave: synthwave,\n \"synthwave-84\": synthwave84,\n // Tomorrow Night\n \"tomorrow-night\": tomorrowNight,\n \"tomorrow-night-blue\": tomorrowNightBlue,\n \"tomorrow-night-eighties\": tomorrowNightEighties,\n // Zenburn\n zenburn: zenburn,\n // Ubuntu\n ubuntu: ubuntu,\n // Tango\n \"tango-dark\": tangoDark,\n \"tango-light\": tangoLight,\n // Cyberpunk\n cyberpunk: cyberpunk,\n // VS Code\n \"vscode-dark\": vscodeDark,\n // One Light / One Half\n \"one-light\": oneLight,\n \"one-half-dark\": oneHalfDark,\n \"one-half-light\": oneHalfLight,\n // Night Owl\n \"night-owl-light\": nightOwlLight,\n // Shades of Purple\n \"shades-of-purple\": shadesOfPurple,\n // Homebrew\n homebrew: homebrew,\n // Neon\n neon: neon,\n // Challenger Deep\n \"challenger-deep\": challengerDeep,\n // Doom One\n \"doom-one\": doomOne,\n // Mariana\n mariana: mariana,\n // Darcula (JetBrains)\n darcula: darcula,\n // Espresso\n espresso: espresso,\n // Iceberg\n \"iceberg-dark\": icebergDark,\n \"iceberg-light\": icebergLight,\n // Serendipity\n \"serendipity-midnight\": serendipityMidnight,\n \"serendipity-morning\": serendipityMorning,\n // Twilight\n twilight: twilight,\n // Breeze (KDE)\n breeze: breeze,\n // Andromeda\n andromeda: andromeda,\n // Relaxed\n relaxed: relaxed,\n}\n\n/** All built-in themes, indexed by name (includes backward-compat aliases). */\nexport const builtinThemes: Record<string, Theme> = {\n // ANSI 16\n \"dark-ansi16\": ansi16DarkTheme,\n \"light-ansi16\": ansi16LightTheme,\n // Truecolor defaults\n \"dark-truecolor\": defaultDarkTheme,\n \"light-truecolor\": defaultLightTheme,\n // Old names as aliases\n dark: defaultDarkTheme,\n light: defaultLightTheme,\n \"ansi16-dark\": ansi16DarkTheme,\n \"ansi16-light\": ansi16LightTheme,\n}\n\n/** Resolve a theme by name. Defaults to dark-ansi16. */\nexport function getThemeByName(name?: string): Theme {\n if (!name) return ansi16DarkTheme\n // Check pre-built themes first\n const builtin = builtinThemes[name]\n if (builtin) return builtin\n // Check palettes (derive on first access)\n const palette = builtinPalettes[name]\n if (palette) return deriveTheme(palette)\n return ansi16DarkTheme\n}\n\n/** Resolve a palette by name. Returns undefined if not found. */\nexport function getPaletteByName(name: string): ColorPalette | undefined {\n return builtinPalettes[name]\n}\n","/**\n * Active theme state — module-level for pipeline access.\n *\n * This module has side effects (global mutable state).\n * Marked in package.json sideEffects for tree-shaking.\n *\n * Usage is optional — standalone users pass Theme objects explicitly\n * to resolveThemeColor(token, theme). The global state exists for\n * silvery's render pipeline where React context isn't accessible.\n */\n\nimport type { Theme } from \"./types\"\nimport { ansi16DarkTheme } from \"./palettes/index\"\n\n// ============================================================================\n// Active Theme\n// ============================================================================\n\n/**\n * The currently active theme, set by ThemeProvider during render.\n * Used by parseColor() to resolve $token strings without React context access.\n */\nlet _activeTheme: Theme = ansi16DarkTheme\n\n/** Set the active theme (called by ThemeProvider). */\nexport function setActiveTheme(theme: Theme): void {\n _activeTheme = theme\n}\n\n/** Get the active theme (called by parseColor in render-helpers). */\nexport function getActiveTheme(): Theme {\n return _contextStack.length > 0 ? _contextStack[_contextStack.length - 1]! : _activeTheme\n}\n\n// ============================================================================\n// Context Theme Stack (per-subtree overrides during render phase)\n// ============================================================================\n\n/**\n * Stack of per-subtree theme overrides, pushed/popped during render phase\n * tree walk. When a Box has a `theme` prop, its theme is pushed before\n * rendering children and popped after. getActiveTheme() checks this stack\n * first, falling back to _activeTheme.\n *\n * This enables CSS custom property-like cascading: the nearest ancestor\n * Box with a theme prop determines $token resolution for its subtree.\n */\nconst _contextStack: Theme[] = []\n\n/** Push a context theme (called by render phase for Box nodes with theme prop). */\nexport function pushContextTheme(theme: Theme): void {\n _contextStack.push(theme)\n}\n\n/** Pop a context theme (called by render phase after processing Box subtree). */\nexport function popContextTheme(): void {\n _contextStack.pop()\n}\n","/**\n * ThemeContext — delivers a Theme to the component tree.\n *\n * Wrap your app (or a subtree) in `<ThemeProvider theme={…}>` to make\n * `$token` color props resolve against that theme. Components call\n * `useTheme()` to read the current theme.\n *\n * @example\n * ```tsx\n * import { ThemeProvider, defaultDarkTheme } from '@silvery/ag-react'\n *\n * <ThemeProvider theme={defaultDarkTheme}>\n * <App />\n * </ThemeProvider>\n * ```\n */\n\nimport React, { createContext, useContext } from \"react\"\nimport type { Theme } from \"./types\"\nimport { setActiveTheme } from \"./state\"\nimport { defaultDarkTheme } from \"./palettes/index\"\n\n// ============================================================================\n// Context\n// ============================================================================\n\n/** @internal Exported for @silvery/ag-react ThemeProvider — not public API. */\nexport const ThemeContext = createContext<Theme>(defaultDarkTheme)\n\n// ============================================================================\n// Provider\n// ============================================================================\n\nexport interface ThemeProviderProps {\n theme: Theme\n children: React.ReactNode\n}\n\n/**\n * Provide a theme to the subtree.\n *\n * Components beneath this provider can use `useTheme()` or `$token`\n * color props (e.g. `color=\"$primary\"`).\n */\nexport function ThemeProvider({ theme, children }: ThemeProviderProps): React.ReactElement {\n // Set module-level active theme so parseColor() can resolve $token strings\n // during the render phase without needing React context access.\n setActiveTheme(theme)\n return React.createElement(ThemeContext.Provider, { value: theme }, children)\n}\n\n// ============================================================================\n// Hook\n// ============================================================================\n\n/**\n * Read the current theme from context.\n *\n * Returns `defaultDarkTheme` when no `ThemeProvider` is present.\n */\nexport function useTheme(): Theme {\n return useContext(ThemeContext)\n}\n","/**\n * Core type definitions — re-exported from @silvery/ansi (canonical location).\n *\n * @silvery/theme consumers can continue importing from here.\n */\n\nexport type { ColorPalette, Theme, AnsiColorName, AnsiPrimary, HueName } from \"@silvery/ansi\"\nexport { COLOR_PALETTE_FIELDS } from \"@silvery/ansi\"\n","/**\n * Token resolution — resolves `$token` strings against a Theme.\n *\n * Re-exports from @silvery/ansi which is the canonical implementation.\n * @silvery/theme consumers can continue importing from here.\n */\n\nexport { resolveThemeColor } from \"@silvery/ansi\"\n","/**\n * ANSI 16 theme generation — derives a complete Theme from a primary color + dark/light.\n *\n * Uses ANSI color names (not hex) so it works on any terminal without truecolor support.\n */\n\nimport type { AnsiPrimary, Theme } from \"./types\"\n\n/**\n * Generate a complete ANSI 16 theme from a primary color + dark/light preference.\n *\n * All token values are ANSI color names (e.g. \"yellow\", \"blueBright\").\n */\nexport function generateTheme(primary: AnsiPrimary, dark: boolean): Theme {\n return {\n name: `${dark ? \"dark\" : \"light\"}-${primary}`,\n\n // ── Root pair ─────────────────────────────────────────────────\n bg: \"\",\n fg: dark ? \"whiteBright\" : \"black\",\n\n // ── Surface pairs (base = text, *bg = background) ──────────\n muted: dark ? \"white\" : \"blackBright\",\n mutedbg: dark ? \"black\" : \"white\",\n surface: dark ? \"whiteBright\" : \"black\",\n surfacebg: dark ? \"black\" : \"white\",\n popover: dark ? \"whiteBright\" : \"black\",\n popoverbg: dark ? \"blackBright\" : \"white\",\n inverse: dark ? \"black\" : \"whiteBright\",\n inversebg: dark ? \"whiteBright\" : \"black\",\n cursor: \"black\",\n cursorbg: primary,\n selection: \"black\",\n selectionbg: primary,\n\n // ── Accent pairs (base = area bg, *fg = text on area) ──────\n primary,\n primaryfg: \"black\",\n secondary: primary,\n secondaryfg: \"black\",\n accent: primary,\n accentfg: \"black\",\n error: dark ? \"redBright\" : \"red\",\n errorfg: \"black\",\n warning: primary,\n warningfg: \"black\",\n success: dark ? \"greenBright\" : \"green\",\n successfg: \"black\",\n info: dark ? \"cyanBright\" : \"cyan\",\n infofg: \"black\",\n\n // ── Standalone ───────────────────────────────────────────────\n border: \"gray\",\n inputborder: \"gray\",\n focusborder: dark ? \"blueBright\" : \"blue\",\n link: \"blueBright\",\n disabledfg: \"gray\",\n\n // ── Palette ──────────────────────────────────────────────────\n palette: [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"blackBright\",\n \"redBright\",\n \"greenBright\",\n \"yellowBright\",\n \"blueBright\",\n \"magentaBright\",\n \"cyanBright\",\n \"whiteBright\",\n ],\n }\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 ColorPalette format.\n *\n * Base16 defines 16 colors (base00–base0F). We map them to ColorPalette'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 \"../color\"\nimport type { ColorPalette } from \"../types\"\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 ((value.startsWith('\"') && value.endsWith('\"')) || (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\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(`Base16 color ${key} must be a 6-digit hex string without '#', got: \"${result[key]}\"`)\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 ColorPalette.\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): ColorPalette {\n const scheme = parseBase16Yaml(yamlOrJson)\n return base16ToColorPalette(scheme)\n}\n\n/** Convert a parsed Base16Scheme to ColorPalette. */\nexport function base16ToColorPalette(scheme: Base16Scheme): ColorPalette {\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 ColorPalette from various inputs.\n *\n * All generators return a complete ColorPalette (22 fields).\n */\n\nimport { hexToRgb, hexToHsl, hslToHex, brighten, darken, blend } from \"./color\"\nimport { importBase16 as importBase16Internal } from \"./import/base16\"\nimport { getPaletteByName } from \"./palettes/index\"\nimport type { ColorPalette, HueName } from \"./types\"\n\n// ============================================================================\n// Luminance\n// ============================================================================\n\nfunction luminance(hex: string): number {\n const rgb = hexToRgb(hex)\n if (!rgb) return 0.5\n return (rgb[0] + rgb[1] + rgb[2]) / (255 * 3)\n}\n\nfunction isDarkColor(hex: string): boolean {\n return luminance(hex) < 0.5\n}\n\n// ============================================================================\n// Accent Generation\n// ============================================================================\n\n/** Target hues for each accent slot. */\nconst targetHues: Record<HueName, number> = {\n red: 0,\n orange: 30,\n yellow: 60,\n green: 120,\n teal: 180,\n blue: 220,\n purple: 280,\n pink: 330,\n}\n\n/** Find which hue slot the primary color best matches by hue angle proximity. */\nexport function assignPrimaryToSlot(primary: string): HueName {\n const hsl = hexToHsl(primary)\n if (!hsl) return \"blue\"\n const h = hsl[0]\n const slots: [number, number, HueName][] = [\n [0, 15, \"red\"],\n [15, 45, \"orange\"],\n [45, 75, \"yellow\"],\n [75, 165, \"green\"],\n [165, 200, \"teal\"],\n [200, 260, \"blue\"],\n [260, 310, \"purple\"],\n [310, 345, \"pink\"],\n [345, 360, \"red\"],\n ]\n for (const [lo, hi, name] of slots) {\n if (h >= lo && h < hi) return name\n }\n return \"blue\"\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 hsl = hexToHsl(primary)\n if (!hsl) {\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 [, s, l] = hsl\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 result[name] = name === slot ? primary : hslToHex(targetH, s, l)\n }\n return result\n}\n\n// ============================================================================\n// fromBase16 — Base16 YAML → ColorPalette\n// ============================================================================\n\n/**\n * Generate a ColorPalette from a Base16 YAML scheme.\n *\n * Maps base00–base0F to ANSI palette colors, derives special colors.\n */\nexport function fromBase16(yamlOrJson: string): ColorPalette {\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 ColorPalette 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): ColorPalette {\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 ColorPalette by name\n// ============================================================================\n\n/**\n * Look up a built-in palette by name.\n *\n * @returns The ColorPalette, or undefined if not found.\n */\nexport function fromPreset(name: string): ColorPalette | undefined {\n return getPaletteByName(name)\n}\n\n// ============================================================================\n// ThemePalette → ColorPalette 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 ColorPalette.\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 themePaletteToColorPalette(p: OldThemePalette): ColorPalette {\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 \"./color\"\nimport { deriveTheme } from \"./derive\"\nimport { fromColors, assignPrimaryToSlot } from \"./generators\"\nimport { getPaletteByName } from \"./palettes/index\"\nimport type { Theme, ColorPalette, HueName } from \"./types\"\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<ColorPalette>\n presetPalette?: ColorPalette\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<ColorPalette, \"name\" | \"dark\">, value: string): ThemeBuilder\n /** Set full palette at once. */\n palette(p: ColorPalette): 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 = getPaletteByName(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: ColorPalette\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\") (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 ColorPalette field. */\nfunction hueToAnsiField(hue: HueName): keyof ColorPalette {\n const map: Record<HueName, keyof ColorPalette> = {\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 * Palette validation — checks ColorPalette fields and contrast.\n */\n\nimport { hexToRgb } from \"./color\"\nimport { COLOR_PALETTE_FIELDS, type ColorPalette } from \"./types\"\n\n/** Validation result from validateColorPalette(). */\nexport interface ValidationResult {\n valid: boolean\n errors: string[]\n warnings: string[]\n}\n\n/**\n * Validate a ColorPalette.\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 validateColorPalette(p: ColorPalette): ValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n // Required color fields\n for (const field of COLOR_PALETTE_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 validateColorPalette() which validates the lower-level\n * ColorPalette. This validates the derived Theme object.\n */\n\n/** All 33 required semantic token keys on Theme (excludes `name` and `palette`). */\nexport const THEME_TOKEN_KEYS: readonly string[] = [\n // Root pair\n \"bg\",\n \"fg\",\n // 6 surface pairs (base = text, *bg = background)\n \"muted\",\n \"mutedbg\",\n \"surface\",\n \"surfacebg\",\n \"popover\",\n \"popoverbg\",\n \"inverse\",\n \"inversebg\",\n \"cursor\",\n \"cursorbg\",\n \"selection\",\n \"selectionbg\",\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 // 5 standalone tokens\n \"border\",\n \"inputborder\",\n \"focusborder\",\n \"link\",\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 * WCAG 2.1 contrast checking and enforcement.\n *\n * Re-exports from @silvery/color — the canonical implementation.\n * This module exists to preserve @silvery/theme's public API.\n */\n\nexport { checkContrast, ensureContrast } from \"@silvery/color\"\nexport type { ContrastResult } from \"@silvery/color\"\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 \"./types\"\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 * Generates a flat map of CSS custom property names to color values,\n * suitable for applying as inline styles or injecting into a stylesheet.\n */\n\nimport type { Theme } from \"./types\"\nimport { THEME_TOKEN_KEYS } from \"./validate-theme\"\n\n/**\n * Convert a Theme to CSS custom properties.\n *\n * Token names are kebab-cased with a `--` prefix:\n * - `bg` → `--bg`\n * - `surfacebg` → `--surfacebg`\n * - `disabledfg` → `--disabledfg`\n * - Palette entries: `--color0` through `--color15`\n *\n * @param theme - The theme to convert\n * @returns A record mapping CSS custom property names to color values\n *\n * @example\n * ```typescript\n * const vars = themeToCSSVars(myTheme)\n * // { \"--bg\": \"#1E1E2E\", \"--fg\": \"#CDD6F4\", \"--primary\": \"#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 // Semantic tokens\n for (const key of THEME_TOKEN_KEYS) {\n const value = theme[key as keyof Theme]\n if (typeof value === \"string\") {\n vars[`--${key}`] = value\n }\n }\n\n // Palette colors\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 * Auto-generate themes — create a complete Theme from a single primary color.\n *\n * Uses HSL color manipulation to derive complementary and analogous colors\n * for the full palette from one input color.\n */\n\nimport { hexToHsl, hslToHex, blend } from \"./color\"\nimport { fromColors } from \"./generators\"\nimport { deriveTheme } from \"./derive\"\nimport type { Theme } from \"./types\"\n\n/**\n * Generate a complete Theme from a single primary color.\n *\n * Derives a full ColorPalette using HSL color manipulation:\n * - Background/foreground from lightness inversion\n * - Complementary and analogous accent colors from hue rotation\n * - Surface ramp from background blending\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 hsl = hexToHsl(primaryColor)\n if (!hsl) {\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 [h, s] = hsl\n const dark = mode === \"dark\"\n\n // Generate background and foreground based on mode\n const bgL = dark ? 0.12 : 0.97\n const fgL = dark ? 0.87 : 0.13\n // Use low saturation for bg/fg to keep them neutral\n const bgS = Math.min(s, 0.15)\n const bg = hslToHex(h, bgS, bgL)\n const fg = hslToHex(h, bgS * 0.5, fgL)\n\n // Generate accent colors from hue rotations\n // Standard hue positions for semantic colors\n const redHue = 0\n const yellowHue = 45\n const greenHue = 130\n const cyanHue = 185\n const blueHue = 220\n const magentaHue = 300\n\n // Use the primary's saturation and adjust lightness for the mode\n const accentL = dark ? 0.65 : 0.45\n const accentS = Math.max(s, 0.5) // Ensure accents are reasonably saturated\n\n const red = hslToHex(redHue, accentS, accentL)\n const green = hslToHex(greenHue, accentS, accentL)\n const yellow = hslToHex(yellowHue, accentS, accentL)\n const blue = hslToHex(blueHue, accentS, accentL)\n const magenta = hslToHex(magentaHue, accentS, accentL)\n const cyan = hslToHex(cyanHue, accentS, accentL)\n\n // Bright variants: increase lightness slightly\n const brightOffset = dark ? 0.1 : -0.1\n const brightL = accentL + brightOffset\n const brightRed = hslToHex(30, accentS, brightL) // orange-ish\n const brightGreen = hslToHex(greenHue, accentS, brightL)\n const brightYellow = hslToHex(yellowHue, accentS, brightL)\n const brightBlue = hslToHex(blueHue, accentS, brightL)\n const brightMagenta = hslToHex(330, accentS, brightL) // pink-ish\n const brightCyan = hslToHex(cyanHue, accentS, brightL)\n\n // Surface colors from background\n const black = dark ? hslToHex(h, bgS, bgL * 0.7) : hslToHex(h, bgS, bgL * 0.92)\n const white = dark ? hslToHex(h, bgS * 0.3, 0.6) : hslToHex(h, bgS * 0.3, 0.35)\n const brightBlack = dark ? hslToHex(h, bgS, bgL + 0.08) : hslToHex(h, bgS, bgL - 0.08)\n const brightWhite = dark ? fg : hslToHex(h, bgS * 0.5, fgL - 0.05)\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 * Export ColorPalette to Base16 YAML format.\n *\n * Maps ColorPalette fields to base00–base0F. For fields that\n * ColorPalette 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 \"../color\"\nimport type { ColorPalette } from \"../types\"\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 ColorPalette 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: ColorPalette): 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 ? blend(palette.foreground, \"#FFFFFF\", 0.15) : 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 auto-detection via OSC queries.\n *\n * Enhanced version with named palette fallbacks (Nord dark, Catppuccin Latte light).\n * The base implementation lives in @silvery/ansi — this adds richer defaults.\n *\n * @silvery/theme consumers: import from here for named palette fallbacks.\n * Standalone consumers: import from @silvery/ansi for lightweight defaults.\n */\n\nimport type { ColorPalette, Theme } from \"./types\"\nimport { deriveTheme } from \"./derive\"\nimport {\n detectTerminalPalette as _detectTerminalPalette,\n queryMultiplePaletteColors,\n parsePaletteResponse,\n queryForegroundColor,\n queryBackgroundColor,\n ansi16DarkTheme,\n ansi16LightTheme,\n} from \"@silvery/ansi\"\nimport type { DetectedPalette } from \"@silvery/ansi\"\nimport { nord } from \"./palettes/nord\"\nimport { catppuccinLatte } from \"./palettes/catppuccin\"\n\n// Re-export the base detection — works standalone without named palettes\nexport { _detectTerminalPalette as detectTerminalPalette }\nexport type { DetectedPalette }\n\n// ============================================================================\n// detectTheme — high-level: detect terminal palette, fill gaps, derive theme\n// ============================================================================\n\nexport interface DetectThemeOptions {\n /** Fallback ColorPalette when detection fails or returns partial data.\n * Detected colors override matching fallback fields. */\n fallback?: ColorPalette\n /** Timeout per OSC query in ms (default 150). */\n timeoutMs?: number\n /** Terminal capabilities (from detectTerminalCaps). When provided:\n * - colorLevel \"none\"/\"basic\" skips OSC detection and returns ANSI 16 theme\n * - darkBackground informs fallback selection when detection fails */\n caps?: { colorLevel?: string; darkBackground?: boolean }\n}\n\n/**\n * Detect the terminal's color palette and derive a Theme.\n *\n * Enhanced version that uses Nord (dark) or Catppuccin Latte (light)\n * as fallback palettes for richer defaults than the base @silvery/ansi version.\n */\nexport async function detectTheme(opts: DetectThemeOptions = {}): Promise<Theme> {\n const colorLevel = opts.caps?.colorLevel\n if (colorLevel === \"none\" || colorLevel === \"basic\") {\n const isDark = opts.caps?.darkBackground ?? true\n return isDark ? ansi16DarkTheme : ansi16LightTheme\n }\n\n const detected = await _detectTerminalPalette(opts.timeoutMs)\n const isDark = detected?.dark ?? opts.caps?.darkBackground ?? true\n const fallback = opts.fallback ?? (isDark ? nord : catppuccinLatte)\n\n if (!detected) {\n return deriveTheme(fallback)\n }\n\n const merged: ColorPalette = { ...fallback, ...stripNulls(detected.palette) }\n return deriveTheme(merged)\n}\n\nfunction stripNulls(partial: Partial<ColorPalette>): Partial<ColorPalette> {\n const result: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(partial)) {\n if (v != null) result[k] = v\n }\n return result as Partial<ColorPalette>\n}\n","/**\n * @silvery/theme — Universal color themes for any platform.\n *\n * Two-layer architecture:\n * Layer 1: ColorPalette (22 terminal colors — universal pivot format)\n * Layer 2: Theme (33 semantic tokens — what UI apps consume)\n *\n * Pipeline: Palette generators → ColorPalette → deriveTheme() → Theme\n *\n * @example\n * ```typescript\n * import { createTheme, catppuccinMocha, resolveThemeColor } from \"@silvery/theme\"\n *\n * const theme = createTheme().preset('catppuccin-mocha').build()\n * const color = resolveThemeColor(\"$primary\", theme) // → \"#F9E2AF\"\n * ```\n *\n * @packageDocumentation\n */\n\n// React integration\nexport { ThemeProvider, useTheme } from \"./ThemeContext\"\nexport type { ThemeProviderProps } from \"./ThemeContext\"\n\n// Core types\nexport type { Theme, ColorPalette, HueName, AnsiPrimary, AnsiColorName } from \"./types\"\nexport { COLOR_PALETTE_FIELDS } from \"./types\"\n\n// Derivation\nexport { deriveTheme } from \"./derive\"\nexport type { ThemeAdjustment } from \"./derive\"\n\n// Color utilities\nexport {\n blend,\n brighten,\n darken,\n contrastFg,\n desaturate,\n complement,\n hexToRgb,\n rgbToHex,\n hexToHsl,\n hslToHex,\n rgbToHsl,\n} from \"./color\"\nexport type { HSL } from \"./color\"\n\n// Token resolution\nexport { resolveThemeColor } from \"./resolve\"\n\n// ANSI 16 theme generation\nexport { generateTheme } from \"./generate\"\n\n// Builder API\nexport { createTheme, quickTheme, presetTheme } from \"./builder\"\n\n// Palette generators\nexport { fromBase16, fromColors, fromPreset } from \"./generators\"\n\n// Active theme state (side-effectful)\nexport { setActiveTheme, getActiveTheme, pushContextTheme, popContextTheme } from \"./state\"\n\n// Validation\nexport { validateColorPalette } from \"./validate\"\nexport type { ValidationResult } from \"./validate\"\nexport { validateTheme, THEME_TOKEN_KEYS } from \"./validate-theme\"\nexport type { ThemeValidationResult } from \"./validate-theme\"\n\n// Contrast checking and enforcement\nexport { checkContrast, ensureContrast } from \"./contrast\"\nexport type { ContrastResult } from \"./contrast\"\n\n// Token aliasing\nexport { resolveAliases, resolveTokenAlias } from \"./alias\"\n\n// CSS variables export\nexport { themeToCSSVars } from \"./css\"\n\n// Auto-generate themes from a single color\nexport { autoGenerateTheme } from \"./auto-generate\"\n\n// Base16 import/export\nexport { importBase16 } from \"./import/base16\"\nexport { exportBase16 } from \"./export/base16\"\nexport type { Base16Scheme } from \"./import/types\"\n\n// Terminal detection\nexport { detectTerminalPalette, detectTheme } from \"./detect\"\nexport type { DetectedPalette, DetectThemeOptions } from \"./detect\"\n\n// Built-in themes (pre-derived)\nexport {\n ansi16DarkTheme,\n ansi16LightTheme,\n defaultDarkTheme,\n defaultLightTheme,\n builtinThemes,\n getThemeByName,\n} from \"./palettes/index\"\n\n// Built-in palettes (45 palettes from 15 theme families)\nexport {\n builtinPalettes,\n getPaletteByName,\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 \"./palettes/index\"\n","export * from \"./ThemeContext\"\nexport * from \"./theme\"\n"],"mappings":"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"}
|
package/dist/types-Bhj5QkIQ.mjs
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
//#region packages/ag/src/types.ts
|
|
2
|
-
/**
|
|
3
|
-
* Check if two rects are equal (same position and size).
|
|
4
|
-
*/
|
|
5
|
-
function rectEqual(a, b) {
|
|
6
|
-
if (a === b) return true;
|
|
7
|
-
if (!a || !b) return false;
|
|
8
|
-
return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
|
|
9
|
-
}
|
|
10
|
-
//#endregion
|
|
11
|
-
export { rectEqual as t };
|
|
12
|
-
|
|
13
|
-
//# sourceMappingURL=types-Bhj5QkIQ.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types-Bhj5QkIQ.mjs","names":[],"sources":["../packages/ag/src/types.ts"],"sourcesContent":["/**\n * Silvery Types\n *\n * Core types for the Silvery renderer architecture.\n */\n\nimport type { DragEventProps } from \"./drag-event-types\"\nimport type { FocusEventProps } from \"./focus-events\"\nimport type { LayoutNode } from \"./layout-types\"\nimport type { MouseEventProps } from \"./mouse-event-types\"\n\n// ============================================================================\n// Layout Types\n// ============================================================================\n\n// ============================================================================\n// Selection Types\n// ============================================================================\n\n/**\n * CSS user-select equivalent for controlling text selectability.\n * - \"auto\": inherit from parent (root resolves to \"text\")\n * - \"none\": not selectable\n * - \"text\": force selectable (overrides parent \"none\")\n * - \"contain\": selectable, but selection cannot escape this node's bounds\n */\nexport type UserSelect = \"auto\" | \"none\" | \"text\" | \"contain\"\n\n// ============================================================================\n// Layout Types\n// ============================================================================\n\n/**\n * A rectangle with position and size.\n * All values are in terminal columns/rows (integers).\n */\nexport interface Rect {\n /** X position (0-indexed terminal column) */\n x: number\n /** Y position (0-indexed terminal row) */\n y: number\n /** Width in terminal columns */\n width: number\n /** Height in terminal rows */\n height: number\n}\n\n/**\n * Check if two rects are equal (same position and size).\n */\nexport function rectEqual(a: Rect | null, b: Rect | null): boolean {\n if (a === b) return true\n if (!a || !b) return false\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height\n}\n\n// ============================================================================\n// Interactive State Types\n// ============================================================================\n\n/**\n * Per-node interactive state — written by pointer/selection/focus state machines,\n * read by theme/render for automatic styling.\n *\n * These are plain mutable booleans, NOT reactive signals. State machines set them\n * synchronously during event processing, and the next render reads them.\n * React re-renders are driven by the event processing, not signal subscriptions.\n *\n * The object is lazily created on first write to avoid overhead on non-interactive nodes.\n */\nexport interface InteractiveState {\n /** Pointer is over this node (mouseenter/mouseleave) */\n hovered: boolean\n /** Pointer-down on this node, awaiting pointer-up (will receive click) */\n armed: boolean\n /** Node is in the current selection set */\n selected: boolean\n /** Node has keyboard focus */\n focused: boolean\n /** A drag operation is hovering over this node */\n dropTarget: boolean\n}\n\n// ============================================================================\n// Node Types\n// ============================================================================\n\n/**\n * Silvery node types - the primitive elements in the render tree.\n */\nexport type AgNodeType = \"silvery-root\" | \"silvery-box\" | \"silvery-text\"\n\n/**\n * Flexbox properties that can be applied to Box nodes.\n */\nexport interface FlexboxProps {\n // Size\n width?: number | string\n height?: number | string\n minWidth?: number | string\n minHeight?: number | string\n maxWidth?: number | string\n maxHeight?: number | string\n\n // Flex\n flexGrow?: number\n flexShrink?: number\n flexBasis?: number | string\n flexDirection?: \"row\" | \"column\" | \"row-reverse\" | \"column-reverse\"\n flexWrap?: \"nowrap\" | \"wrap\" | \"wrap-reverse\"\n\n // Alignment\n alignItems?: \"flex-start\" | \"flex-end\" | \"center\" | \"stretch\" | \"baseline\"\n alignSelf?: \"auto\" | \"flex-start\" | \"flex-end\" | \"center\" | \"stretch\" | \"baseline\"\n alignContent?: \"flex-start\" | \"flex-end\" | \"center\" | \"stretch\" | \"space-between\" | \"space-around\" | \"space-evenly\"\n justifyContent?: \"flex-start\" | \"flex-end\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\"\n\n // Spacing\n padding?: number\n paddingTop?: number\n paddingBottom?: number\n paddingLeft?: number\n paddingRight?: number\n paddingX?: number\n paddingY?: number\n margin?: number\n marginTop?: number\n marginBottom?: number\n marginLeft?: number\n marginRight?: number\n marginX?: number\n marginY?: number\n gap?: number\n columnGap?: number\n rowGap?: number\n\n // Position\n position?: \"relative\" | \"absolute\" | \"sticky\" | \"static\"\n\n // Position offsets (used with position='absolute' or position='relative')\n top?: number | string\n left?: number | string\n bottom?: number | string\n right?: number | string\n\n // Sticky offsets (only used when position='sticky')\n // The element will \"stick\" when it reaches this offset from the container edge\n stickyTop?: number\n stickyBottom?: number\n\n // Aspect ratio\n aspectRatio?: number\n\n // Display\n display?: \"flex\" | \"none\"\n\n // Overflow\n overflow?: \"visible\" | \"hidden\" | \"scroll\"\n overflowX?: \"visible\" | \"hidden\"\n overflowY?: \"visible\" | \"hidden\"\n\n // Scroll control (only used when overflow='scroll')\n /** Child index to ensure visible (edge-based: only scrolls if off-screen) */\n scrollTo?: number\n /** Explicit scroll offset in rows (used when scrollTo is undefined for frozen scroll state) */\n scrollOffset?: number\n}\n\n/**\n * Props for testing and identification.\n * These props are stored in the node for DOM query access.\n */\nexport interface TestProps {\n /** Element ID for DOM queries and visual debugging */\n id?: string\n /** Test ID for querying nodes (like Playwright's data-testid) */\n testID?: string\n /** Allow arbitrary data-* attributes for testing */\n [key: `data-${string}`]: unknown\n}\n\n/**\n * Underline style variants (SGR 4:x codes).\n * - false: no underline\n * - 'single': standard underline (SGR 4 or 4:1)\n * - 'double': double underline (SGR 4:2)\n * - 'curly': curly/wavy underline (SGR 4:3)\n * - 'dotted': dotted underline (SGR 4:4)\n * - 'dashed': dashed underline (SGR 4:5)\n */\nexport type UnderlineStyle = false | \"single\" | \"double\" | \"curly\" | \"dotted\" | \"dashed\"\n\n/**\n * Style properties for text rendering.\n */\nexport interface StyleProps {\n color?: string\n backgroundColor?: string\n bold?: boolean\n dim?: boolean\n /** Alias for dim (Ink compatibility) */\n dimColor?: boolean\n italic?: boolean\n /** Enable underline. Use underlineStyle for style variants. */\n underline?: boolean\n /**\n * Underline style variant: 'single' | 'double' | 'curly' | 'dotted' | 'dashed'.\n * Setting this implies underline=true. Takes precedence over underline prop.\n */\n underlineStyle?: UnderlineStyle\n /**\n * Underline color (independent of text color).\n * Uses SGR 58 (underline color). Falls back to text color if not specified.\n */\n underlineColor?: string\n strikethrough?: boolean\n inverse?: boolean\n\n /**\n * Text size scale factor via OSC 66 (Kitty v0.40+).\n *\n * Float multiplier: 2.0 = double (headings), 1.0 = normal, 0.5 = half (small print).\n * The terminal renders subsequent text at this scale until reset.\n * Requires a terminal that supports the kitty text sizing protocol.\n * Terminals without support silently ignore the escape sequence.\n */\n textSize?: number\n}\n\n/**\n * Props for Box component.\n */\nexport interface BoxProps\n extends FlexboxProps, StyleProps, TestProps, MouseEventProps, DragEventProps, FocusEventProps {\n /** Text truncation mode for child text content (passed through to Text children). */\n wrap?:\n | \"wrap\"\n | \"hard\"\n | \"even\"\n | \"truncate\"\n | \"truncate-start\"\n | \"truncate-middle\"\n | \"truncate-end\"\n | \"clip\"\n | boolean\n borderStyle?: \"single\" | \"double\" | \"round\" | \"bold\" | \"singleDouble\" | \"doubleSingle\" | \"classic\"\n borderColor?: string\n /** Background color for all border sides (shorthand). Per-side props override this. */\n borderBackgroundColor?: string\n /** Background color for the top border (overrides borderBackgroundColor). */\n borderTopBackgroundColor?: string\n /** Background color for the bottom border (overrides borderBackgroundColor). */\n borderBottomBackgroundColor?: string\n /** Background color for the left border (overrides borderBackgroundColor). */\n borderLeftBackgroundColor?: string\n /** Background color for the right border (overrides borderBackgroundColor). */\n borderRightBackgroundColor?: string\n borderTop?: boolean\n borderBottom?: boolean\n borderLeft?: boolean\n borderRight?: boolean\n\n /**\n * Outline style — renders border characters at the box edges without affecting layout.\n *\n * Unlike `borderStyle` which adds border dimensions to the layout (making the content\n * area smaller), `outlineStyle` draws border characters that OVERLAP the content area.\n * The layout engine sees no border at all — outline is purely visual.\n *\n * Use cases: selection indicators, hover highlights, focus rings — anything that\n * should visually frame a box without shifting content.\n */\n outlineStyle?: \"single\" | \"double\" | \"round\" | \"bold\" | \"singleDouble\" | \"doubleSingle\" | \"classic\"\n /** Foreground color for the outline */\n outlineColor?: string\n /** Apply dim styling to the outline */\n outlineDimColor?: boolean\n /** Show top outline edge (default: true) */\n outlineTop?: boolean\n /** Show bottom outline edge (default: true) */\n outlineBottom?: boolean\n /** Show left outline edge (default: true) */\n outlineLeft?: boolean\n /** Show right outline edge (default: true) */\n outlineRight?: boolean\n\n /**\n * Override theme for this subtree — $token colors resolve against this theme.\n * Pushed onto the context theme stack during render phase tree walk.\n */\n theme?: import(\"@silvery/theme\").Theme\n\n /** CSS pointer-events equivalent. \"none\" makes this node and its subtree invisible to hit testing. */\n pointerEvents?: \"auto\" | \"none\"\n\n /**\n * CSS user-select equivalent. Controls whether text in this node is selectable.\n * - \"auto\" (default): inherit from parent. Root resolves to \"text\".\n * - \"none\": not selectable. Mouse-drag on this node does not start text selection.\n * - \"text\": force selectable, even if parent is \"none\".\n * - \"contain\": selectable, but selection range cannot escape this node's bounds.\n */\n userSelect?: UserSelect\n\n /**\n * Whether this node can be dragged via mouse.\n * When true, mousedown + drag past threshold initiates a node drag gesture\n * instead of text selection. Not inherited — only the node with draggable=true\n * is draggable, not its children.\n */\n draggable?: boolean\n\n onLayout?: (layout: Rect) => void\n\n /**\n * Show scroll overflow indicators (▲N / ▼N) for scrollable containers.\n *\n * For bordered containers, indicators appear on the border.\n * For borderless containers, indicators overlay the content at top-right/bottom-right.\n *\n * Only applies when overflow='scroll'.\n */\n overflowIndicator?: boolean\n}\n\n/**\n * Props for Text component.\n */\nexport interface TextProps extends StyleProps, TestProps, MouseEventProps {\n children?: React.ReactNode\n wrap?:\n | \"wrap\"\n | \"hard\"\n | \"even\"\n | \"truncate\"\n | \"truncate-start\"\n | \"truncate-middle\"\n | \"truncate-end\"\n | \"clip\"\n | boolean\n /** Internal transform function applied to each rendered line. Used by Transform component. */\n internal_transform?: (line: string, index: number) => string\n}\n\n/**\n * The core Silvery node - represents an element in the render tree.\n *\n * Each node has:\n * - A Yoga node for layout calculation\n * - Computed layout after Yoga runs\n * - Subscribers that get notified when layout changes\n * - Dirty flags for incremental updates\n */\nexport interface AgNode {\n /** Node type */\n type: AgNodeType\n\n /** Props passed to this node */\n props: BoxProps | TextProps | Record<string, unknown>\n\n /** Child nodes */\n children: AgNode[]\n\n /** Parent node (null for root) */\n parent: AgNode | null\n\n /** The layout node for layout calculation (null for raw text nodes) */\n layoutNode: LayoutNode | null\n\n /** Computed layout from previous render (for change detection) */\n prevLayout: Rect | null\n\n /**\n * Content-relative position (like CSS offsetTop/offsetLeft).\n * Position within the scrollable content, ignoring scroll offsets.\n * Set after layout phase.\n */\n boxRect: Rect | null\n\n /**\n * Screen-relative position (like CSS getBoundingClientRect).\n * Actual position on the terminal screen, accounting for scroll offsets.\n * Set after screen rect phase.\n *\n * Note: For sticky children, this reflects the node's layout position\n * adjusted for scroll offsets, NOT the actual render position. Use\n * `screenRect` for the actual pixel position on screen.\n */\n scrollRect: Rect | null\n\n /** Previous screen rect (for change detection in notifyLayoutSubscribers) */\n prevScrollRect: Rect | null\n\n /**\n * Actual render position on the terminal screen.\n * For non-sticky nodes, this equals `scrollRect`.\n * For sticky nodes (position=\"sticky\"), this accounts for sticky render\n * offsets — the position where pixels are actually painted.\n *\n * Use this for hit testing, cursor positioning, and any feature that\n * needs to know where a node visually appears on screen.\n * Set after screen rect phase.\n */\n screenRect: Rect | null\n\n /** Previous render rect (for change detection) */\n prevScreenRect: Rect | null\n\n /** Epoch when layout changed (position or size).\n * Set by propagateLayout in layout phase. Compared against renderEpoch by render phase.\n * This is the authoritative signal for \"did layout change?\" — unlike\n * !rectEqual(prevLayout, boxRect) which becomes stale when layout\n * phase skips (no dirty nodes).\n * Value: renderEpoch when dirty, INITIAL_EPOCH (-1) when clean. */\n layoutChangedThisFrame: number\n\n /** True if layout-affecting props changed and Yoga needs recalculation.\n * Set by reconciler on prop changes. Cleared after layout phase.\n * NOTE: layoutDirty stays boolean — it's cleared by layout phase (not render phase)\n * and has its own tracking set in dirty-tracking.ts. */\n layoutDirty: boolean\n\n /**\n * Bit-packed dirty flags for the current epoch.\n *\n * Seven dirty flags packed into a single number:\n * bit 0 (CONTENT_BIT): content changed (text content or content-affecting props)\n * bit 1 (STYLE_PROPS_BIT): visual props changed (color, bg, border, etc.)\n * bit 2 (BG_BIT): backgroundColor specifically changed\n * bit 3 (CHILDREN_BIT): direct children added/removed/reordered\n * bit 4 (SUBTREE_BIT): this node or any descendant has dirty content/layout\n * bit 5 (ABS_CHILD_BIT): absolute child had structural changes\n * bit 6 (DESC_OVERFLOW_BIT): descendant overflow changed\n *\n * Check: `isDirty(node.dirtyBits, node.dirtyEpoch, BIT)`\n * Set: `node.dirtyBits = setDirtyBit(node.dirtyBits, node.dirtyEpoch, BIT); node.dirtyEpoch = getRenderEpoch()`\n * Clear: `advanceRenderEpoch()` — all nodes instantly become clean\n *\n * NOTE: measure phase may clear CONTENT_BIT — STYLE_PROPS_BIT acts as the\n * surviving witness for style changes. See render-phase.ts contentAreaAffected.\n */\n dirtyBits: number\n\n /**\n * Epoch when dirtyBits was last written.\n * When `dirtyEpoch !== renderEpoch`, all bits are stale (node is clean).\n * Value: renderEpoch when any bit is dirty, INITIAL_EPOCH (-1) when clean.\n */\n dirtyEpoch: number\n\n /** Callbacks subscribed to layout changes (used by useBoxRect) */\n layoutSubscribers: Set<() => void>\n\n /** Text content for text nodes */\n textContent?: string\n\n /** True if this is a raw text node (created by createTextInstance) */\n isRawText?: boolean\n\n /** True if this node is hidden (for Suspense support) */\n hidden?: boolean\n\n /** Sticky children with computed render positions (for non-scroll containers).\n * When a parent has sticky children but is NOT a scroll container, this array\n * holds the computed render offsets. Same shape as scrollState.stickyChildren. */\n stickyChildren?: Array<{\n /** Index of the sticky child */\n index: number\n /** Computed Y offset to render at (relative to parent content area) */\n renderOffset: number\n /** Original natural Y position (relative to parent content area) */\n naturalTop: number\n /** Height of the sticky element */\n height: number\n }>\n\n /** Inline rects for virtual text nodes (no layout node). Computed during text rendering.\n * Array for wrapped text (one rect per line fragment). Enables hit testing on nested Text. */\n inlineRects?: Array<{ x: number; y: number; width: number; height: number }> | null\n\n /**\n * Interactive state signals — written by pointer/selection/focus state machines,\n * read by theme/render for automatic styling (hover highlights, focus rings, etc.).\n *\n * Lazily created on first write. Null means no interactive state has been set.\n * See InteractiveState for field docs.\n */\n interactiveState?: InteractiveState | null\n\n /** Scroll state for overflow='scroll' containers */\n scrollState?: {\n /** Current scroll offset (in terminal rows) */\n offset: number\n /** Previous scroll offset from last render (for incremental rendering) */\n prevOffset: number\n /** Total content height (all children) */\n contentHeight: number\n /** Visible height (container height minus borders/padding) */\n viewportHeight: number\n /** Index of first visible child */\n firstVisibleChild: number\n /** Index of last visible child */\n lastVisibleChild: number\n /** Previous first visible child from last render (for incremental rendering) */\n prevFirstVisibleChild: number\n /** Previous last visible child from last render (for incremental rendering) */\n prevLastVisibleChild: number\n /** Count of items hidden above viewport */\n hiddenAbove: number\n /** Count of items hidden below viewport */\n hiddenBelow: number\n /** Sticky children with their computed render positions */\n stickyChildren?: Array<{\n /** Index of the sticky child */\n index: number\n /** Computed Y offset to render at (relative to viewport, not content) */\n renderOffset: number\n /** Original natural Y position (before sticky adjustment) */\n naturalTop: number\n /** Height of the sticky element */\n height: number\n }>\n }\n}\n\n// ============================================================================\n// Terminal Buffer Types\n// ============================================================================\n\n/**\n * Text attributes that can be applied to a cell.\n */\nexport interface CellAttrs {\n bold?: boolean\n dim?: boolean\n italic?: boolean\n /** Simple underline flag (for backwards compatibility) */\n underline?: boolean\n /**\n * Underline style: 'single' | 'double' | 'curly' | 'dotted' | 'dashed'.\n * When set, takes precedence over the underline boolean.\n */\n underlineStyle?: UnderlineStyle\n strikethrough?: boolean\n inverse?: boolean\n}\n\n/**\n * A single cell in the terminal buffer.\n */\nexport interface Cell {\n /** The character (grapheme cluster) in this cell */\n char: string\n /** Foreground color (ANSI code or RGB) */\n fg: string | null\n /** Background color (ANSI code or RGB) */\n bg: string | null\n /** Text attributes */\n attrs: CellAttrs\n /** True if this is a wide character (CJK) that takes 2 cells */\n wide: boolean\n /** True if this cell is the continuation of a wide character */\n continuation: boolean\n}\n\n/**\n * Interface for the terminal buffer.\n */\nexport interface TerminalBuffer {\n readonly width: number\n readonly height: number\n getCell(x: number, y: number): Cell\n setCell(x: number, y: number, cell: Cell): void\n clear(): void\n}\n\n// ============================================================================\n// Event Types\n// ============================================================================\n\n/**\n * Keyboard event with key information and modifiers.\n */\nexport interface KeyEvent {\n type: \"key\"\n /** The key pressed (character or key name like 'ArrowUp') */\n key: string\n /** Ctrl modifier was held */\n ctrl?: boolean\n /** Meta/Alt modifier was held */\n meta?: boolean\n /** Shift modifier was held */\n shift?: boolean\n /** Alt/Option modifier was held */\n alt?: boolean\n /** Super/Cmd modifier was held. Requires Kitty protocol. */\n super?: boolean\n /** Hyper modifier was held. Requires Kitty protocol. */\n hyper?: boolean\n /** Kitty event type. Requires Kitty flag 2. */\n eventType?: \"press\" | \"repeat\" | \"release\"\n /** CapsLock is active. Kitty modifier bit 6. */\n capsLock?: boolean\n /** NumLock is active. Kitty modifier bit 7. */\n numLock?: boolean\n}\n\n/**\n * Mouse event with position and button information.\n */\nexport interface MouseEvent {\n type: \"mouse\"\n /** X position in terminal columns (0-indexed) */\n x: number\n /** Y position in terminal rows (0-indexed) */\n y: number\n /** Mouse button (0=left, 1=middle, 2=right) */\n button: number\n /** Event action */\n action: \"down\" | \"up\" | \"move\" | \"wheel\"\n /** Wheel delta for scroll events */\n delta?: number\n}\n\n/**\n * Terminal resize event.\n */\nexport interface ResizeEvent {\n type: \"resize\"\n /** New width in columns */\n width: number\n /** New height in rows */\n height: number\n}\n\n/**\n * Terminal focus event.\n */\nexport interface FocusEvent {\n type: \"focus\"\n}\n\n/**\n * Terminal blur event.\n */\nexport interface BlurEvent {\n type: \"blur\"\n}\n\n/**\n * Signal event (SIGINT, SIGTERM, etc.).\n */\nexport interface SignalEvent {\n type: \"signal\"\n /** Signal name (e.g., 'SIGINT', 'SIGTERM') */\n signal: string\n}\n\n/**\n * Custom event for extensibility.\n */\nexport interface CustomEvent {\n type: \"custom\"\n /** Event name */\n name: string\n /** Event data */\n data: unknown\n}\n\n/**\n * Union of all event types.\n *\n * Events drive the render loop in interactive mode. When events are present,\n * the render loop runs until exit() is called. When events are absent,\n * the render completes when the UI is stable.\n */\nexport type Event = KeyEvent | MouseEvent | ResizeEvent | FocusEvent | BlurEvent | SignalEvent | CustomEvent\n\n/**\n * Event source that can be subscribed to and unsubscribed from.\n */\nexport interface EventSource {\n /** Subscribe to events, returns unsubscribe function */\n subscribe(handler: (event: Event) => void): () => void\n /** Convert to async iterable */\n [Symbol.asyncIterator](): AsyncIterator<Event>\n}\n"],"mappings":";;;;AAkDA,SAAgB,UAAU,GAAgB,GAAyB;AACjE,KAAI,MAAM,EAAG,QAAO;AACpB,KAAI,CAAC,KAAK,CAAC,EAAG,QAAO;AACrB,QAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE"}
|