@fluid-app/rep-core 0.1.0 → 0.1.2

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.
Files changed (179) hide show
  1. package/dist/chunk-2IFFXFJL.js +621 -0
  2. package/dist/chunk-2IFFXFJL.js.map +1 -0
  3. package/dist/chunk-2SIG55BD.cjs +131 -0
  4. package/dist/chunk-2SIG55BD.cjs.map +1 -0
  5. package/dist/chunk-2SPTFZRC.js +72 -0
  6. package/dist/chunk-2SPTFZRC.js.map +1 -0
  7. package/dist/chunk-3I5Y3PEO.js +23 -0
  8. package/dist/chunk-3I5Y3PEO.js.map +1 -0
  9. package/dist/chunk-46PUWB7C.cjs +69 -0
  10. package/dist/chunk-46PUWB7C.cjs.map +1 -0
  11. package/dist/chunk-4WFDFEHC.js +134 -0
  12. package/dist/chunk-4WFDFEHC.js.map +1 -0
  13. package/dist/chunk-5NYM4UTW.cjs +58 -0
  14. package/dist/chunk-5NYM4UTW.cjs.map +1 -0
  15. package/dist/chunk-BWHUEED3.cjs +32 -0
  16. package/dist/chunk-BWHUEED3.cjs.map +1 -0
  17. package/dist/chunk-CMXYKDHC.cjs +666 -0
  18. package/dist/chunk-CMXYKDHC.cjs.map +1 -0
  19. package/dist/chunk-ESYAYVNK.cjs +136 -0
  20. package/dist/chunk-ESYAYVNK.cjs.map +1 -0
  21. package/dist/{chunk-6QLUUNJL.cjs → chunk-GDY76JA6.cjs} +2 -2
  22. package/dist/chunk-GDY76JA6.cjs.map +1 -0
  23. package/dist/chunk-HGVSPZEL.cjs +119 -0
  24. package/dist/chunk-HGVSPZEL.cjs.map +1 -0
  25. package/dist/chunk-HIDJYVKJ.js +54 -0
  26. package/dist/chunk-HIDJYVKJ.js.map +1 -0
  27. package/dist/chunk-HUR3MSO4.js +25 -0
  28. package/dist/chunk-HUR3MSO4.js.map +1 -0
  29. package/dist/chunk-LVLNO2YQ.cjs +28 -0
  30. package/dist/chunk-LVLNO2YQ.cjs.map +1 -0
  31. package/dist/chunk-N2K6W7FX.cjs +169 -0
  32. package/dist/chunk-N2K6W7FX.cjs.map +1 -0
  33. package/dist/chunk-NAMNXRI5.js +129 -0
  34. package/dist/chunk-NAMNXRI5.js.map +1 -0
  35. package/dist/chunk-OWU7MFJ2.cjs +15 -0
  36. package/dist/chunk-OWU7MFJ2.cjs.map +1 -0
  37. package/dist/chunk-PVTQWD4I.js +166 -0
  38. package/dist/chunk-PVTQWD4I.js.map +1 -0
  39. package/dist/chunk-PZ6BM57A.js +30 -0
  40. package/dist/chunk-PZ6BM57A.js.map +1 -0
  41. package/dist/chunk-SJQPHJL4.cjs +26 -0
  42. package/dist/chunk-SJQPHJL4.cjs.map +1 -0
  43. package/dist/chunk-V7D3QUE6.cjs +42 -0
  44. package/dist/chunk-V7D3QUE6.cjs.map +1 -0
  45. package/dist/chunk-VRF7QEID.js +67 -0
  46. package/dist/chunk-VRF7QEID.js.map +1 -0
  47. package/dist/chunk-WASVMCZB.js +13 -0
  48. package/dist/chunk-WASVMCZB.js.map +1 -0
  49. package/dist/chunk-WYOHFNNW.js +117 -0
  50. package/dist/chunk-WYOHFNNW.js.map +1 -0
  51. package/dist/chunk-XCNBVV4T.js +38 -0
  52. package/dist/chunk-XCNBVV4T.js.map +1 -0
  53. package/dist/{chunk-EWR5EIBP.js → chunk-YKF5ZFF5.js} +2 -2
  54. package/dist/chunk-YKF5ZFF5.js.map +1 -0
  55. package/dist/chunk-YXJMBVXO.cjs +76 -0
  56. package/dist/chunk-YXJMBVXO.cjs.map +1 -0
  57. package/dist/data-sources/DataAwareWidget.cjs +59 -0
  58. package/dist/data-sources/DataAwareWidget.cjs.map +1 -0
  59. package/dist/data-sources/DataAwareWidget.d.cts +30 -0
  60. package/dist/data-sources/DataAwareWidget.d.ts +30 -0
  61. package/dist/data-sources/DataAwareWidget.js +57 -0
  62. package/dist/data-sources/DataAwareWidget.js.map +1 -0
  63. package/dist/data-sources/ErrorState.cjs +12 -0
  64. package/dist/data-sources/ErrorState.cjs.map +1 -0
  65. package/dist/data-sources/ErrorState.d.cts +5 -0
  66. package/dist/data-sources/ErrorState.d.ts +5 -0
  67. package/dist/data-sources/ErrorState.js +3 -0
  68. package/dist/data-sources/ErrorState.js.map +1 -0
  69. package/dist/data-sources/context.cjs +10 -20
  70. package/dist/data-sources/context.cjs.map +1 -1
  71. package/dist/data-sources/context.d.cts +2 -2
  72. package/dist/data-sources/context.d.ts +2 -2
  73. package/dist/data-sources/context.js +1 -21
  74. package/dist/data-sources/context.js.map +1 -1
  75. package/dist/data-sources/fetchers/api.cjs +12 -0
  76. package/dist/data-sources/fetchers/api.cjs.map +1 -0
  77. package/dist/data-sources/fetchers/api.d.cts +8 -0
  78. package/dist/data-sources/fetchers/api.d.ts +8 -0
  79. package/dist/data-sources/fetchers/api.js +3 -0
  80. package/dist/data-sources/fetchers/api.js.map +1 -0
  81. package/dist/data-sources/fetchers/custom.cjs +12 -0
  82. package/dist/data-sources/fetchers/custom.cjs.map +1 -0
  83. package/dist/data-sources/fetchers/custom.d.cts +15 -0
  84. package/dist/data-sources/fetchers/custom.d.ts +15 -0
  85. package/dist/data-sources/fetchers/custom.js +3 -0
  86. package/dist/data-sources/fetchers/custom.js.map +1 -0
  87. package/dist/data-sources/fetchers/static.cjs +16 -0
  88. package/dist/data-sources/fetchers/static.cjs.map +1 -0
  89. package/dist/data-sources/fetchers/static.d.cts +38 -0
  90. package/dist/data-sources/fetchers/static.d.ts +38 -0
  91. package/dist/data-sources/fetchers/static.js +3 -0
  92. package/dist/data-sources/fetchers/static.js.map +1 -0
  93. package/dist/data-sources/registry-context.cjs +26 -0
  94. package/dist/data-sources/registry-context.cjs.map +1 -0
  95. package/dist/data-sources/registry-context.d.cts +41 -0
  96. package/dist/data-sources/registry-context.d.ts +41 -0
  97. package/dist/data-sources/registry-context.js +9 -0
  98. package/dist/data-sources/registry-context.js.map +1 -0
  99. package/dist/data-sources/registry.cjs +20 -0
  100. package/dist/data-sources/registry.cjs.map +1 -0
  101. package/dist/data-sources/registry.d.cts +17 -0
  102. package/dist/data-sources/registry.d.ts +17 -0
  103. package/dist/data-sources/registry.js +7 -0
  104. package/dist/data-sources/registry.js.map +1 -0
  105. package/dist/data-sources/transformers.cjs +12 -0
  106. package/dist/data-sources/transformers.cjs.map +1 -0
  107. package/dist/data-sources/transformers.d.cts +23 -0
  108. package/dist/data-sources/transformers.d.ts +23 -0
  109. package/dist/data-sources/transformers.js +3 -0
  110. package/dist/data-sources/transformers.js.map +1 -0
  111. package/dist/data-sources/types.d.cts +37 -2
  112. package/dist/data-sources/types.d.ts +37 -2
  113. package/dist/data-sources/use-widget-data.cjs +19 -0
  114. package/dist/data-sources/use-widget-data.cjs.map +1 -0
  115. package/dist/data-sources/use-widget-data.d.cts +16 -0
  116. package/dist/data-sources/use-widget-data.d.ts +16 -0
  117. package/dist/data-sources/use-widget-data.js +10 -0
  118. package/dist/data-sources/use-widget-data.js.map +1 -0
  119. package/dist/registries/index.cjs +8 -15
  120. package/dist/registries/index.cjs.map +1 -1
  121. package/dist/registries/index.d.cts +20 -7
  122. package/dist/registries/index.d.ts +20 -7
  123. package/dist/registries/index.js +8 -15
  124. package/dist/registries/index.js.map +1 -1
  125. package/dist/shareable-item-DkgWpwoU.d.cts +21 -0
  126. package/dist/shareable-item-DkgWpwoU.d.ts +21 -0
  127. package/dist/shell/AppShellLayout.cjs +14 -0
  128. package/dist/shell/AppShellLayout.cjs.map +1 -0
  129. package/dist/shell/AppShellLayout.d.cts +30 -0
  130. package/dist/shell/AppShellLayout.d.ts +30 -0
  131. package/dist/shell/AppShellLayout.js +5 -0
  132. package/dist/shell/AppShellLayout.js.map +1 -0
  133. package/dist/shell/ThemeModeContext.cjs +20 -0
  134. package/dist/shell/ThemeModeContext.cjs.map +1 -0
  135. package/dist/shell/ThemeModeContext.d.cts +27 -0
  136. package/dist/shell/ThemeModeContext.d.ts +27 -0
  137. package/dist/shell/ThemeModeContext.js +3 -0
  138. package/dist/shell/ThemeModeContext.js.map +1 -0
  139. package/dist/shell/index.cjs +135 -0
  140. package/dist/shell/index.cjs.map +1 -0
  141. package/dist/shell/index.d.cts +8 -0
  142. package/dist/shell/index.d.ts +8 -0
  143. package/dist/shell/index.js +6 -0
  144. package/dist/shell/index.js.map +1 -0
  145. package/dist/shell/sidebar.cjs +105 -0
  146. package/dist/shell/sidebar.cjs.map +1 -0
  147. package/dist/shell/sidebar.d.cts +73 -0
  148. package/dist/shell/sidebar.d.ts +73 -0
  149. package/dist/shell/sidebar.js +4 -0
  150. package/dist/shell/sidebar.js.map +1 -0
  151. package/dist/shell/use-mobile.cjs +20 -0
  152. package/dist/shell/use-mobile.cjs.map +1 -0
  153. package/dist/shell/use-mobile.d.cts +5 -0
  154. package/dist/shell/use-mobile.d.ts +5 -0
  155. package/dist/shell/use-mobile.js +3 -0
  156. package/dist/shell/use-mobile.js.map +1 -0
  157. package/dist/theme/index.cjs +599 -970
  158. package/dist/theme/index.cjs.map +1 -1
  159. package/dist/theme/index.d.cts +106 -2655
  160. package/dist/theme/index.d.ts +106 -2655
  161. package/dist/theme/index.js +570 -917
  162. package/dist/theme/index.js.map +1 -1
  163. package/dist/types/index.cjs +17 -17
  164. package/dist/types/index.d.cts +28 -4
  165. package/dist/types/index.d.ts +28 -4
  166. package/dist/types/index.js +1 -1
  167. package/dist/types-R1kV_DKF.d.cts +80 -0
  168. package/dist/types-R1kV_DKF.d.ts +80 -0
  169. package/dist/{shareable-item-DPmNZkE1.d.cts → widget-schema-36uGUTWL.d.cts} +5 -21
  170. package/dist/{shareable-item-DPmNZkE1.d.ts → widget-schema-DxdlJD8E.d.ts} +5 -21
  171. package/dist/widget-utils/index.cjs +3 -3
  172. package/dist/widget-utils/index.d.cts +3 -1
  173. package/dist/widget-utils/index.d.ts +3 -1
  174. package/dist/widget-utils/index.js +1 -1
  175. package/package.json +84 -13
  176. package/dist/chunk-6QLUUNJL.cjs.map +0 -1
  177. package/dist/chunk-EWR5EIBP.js.map +0 -1
  178. package/dist/theme-DrMUYZTO.d.cts +0 -22
  179. package/dist/theme-DrMUYZTO.d.ts +0 -22
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/theme/theme-engine.ts","../../src/theme/index.ts"],"names":["oklchString"],"mappings":"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","file":"index.js","sourcesContent":["// ──────────────────────────────────────────────────────────────\n// Enhanced OKLCH Theme Engine (2025 Edition)\n// ──────────────────────────────────────────────────────────────\n// Improvements:\n// • ΔE-ok contrast for accurate foreground resolution\n// • Adaptive surface lightening\n// • Smart text fallback based on light/dark\n// • Chroma normalization utilities\n// • Safer hue rotations with chroma clamping\n// • Keeps object form internally; stringifies at end\n// ──────────────────────────────────────────────────────────────\n\nimport type { Theme, ThemeConfig } from \"../types/theme\";\n\nexport type Oklch = { l: number; c: number; h: number };\n\nexport type CoreColors = {\n // Base\n base: Oklch;\n text: Oklch;\n body: Oklch;\n muted: Oklch;\n mutedForeground: Oklch;\n\n // Color\n primary: Oklch;\n primaryForeground: Oklch;\n secondary: Oklch;\n secondaryForeground: Oklch;\n accent: Oklch;\n accentForeground: Oklch;\n destructive: Oklch;\n destructiveForeground: Oklch;\n};\n\nexport interface Font {\n readonly headerFont: string;\n readonly bodyFont: string;\n\n readonly extraSmall: string;\n readonly small: string;\n readonly regular: string;\n readonly large: string;\n readonly extraLarge: string;\n readonly giant: string;\n}\n\nexport interface Spacing {\n readonly globalSpacing: string;\n\n readonly radiusSmall: string;\n readonly radiusMedium: string;\n readonly radiusLarge: string;\n readonly radiusExtraLarge: string;\n}\n\n/**\n * Combined non-color theme fields.\n * Uses interface extends for better performance and clearer error messages\n * compared to type intersection (&).\n */\nexport interface CoreNonColorFields extends Font, Spacing {}\n\n// Re-export ThemeConfig from canonical source for consumers of this module\nexport type { ThemeConfig };\n\n// ──────────────────────────────────────────────────────────────\n// OKLCH Utility Functions\n// ──────────────────────────────────────────────────────────────\n\nexport const oklchString = (c: Oklch) =>\n `oklch(${c.l.toFixed(3)} ${c.c.toFixed(3)} ${c.h.toFixed(1)})`;\n\n/** Parse OKLCH string back to object */\nexport const parseOklch = (oklchStr: string): Oklch => {\n const match = oklchStr.match(/oklch\\(([\\d.]+)\\s+([\\d.]+)\\s+([\\d.]+)\\)/);\n if (!match) {\n return { l: 0, c: 0, h: 0 };\n }\n return {\n l: parseFloat(match[1] || \"0\"),\n c: parseFloat(match[2] || \"0\"),\n h: parseFloat(match[3] || \"0\"),\n };\n};\n\n/** Safe modification of OKLCH */\nexport const mod = (c: Oklch, dl = 0, dc = 0, dh = 0): Oklch => ({\n l: Math.max(0, Math.min(1, c.l + dl)),\n c: Math.max(0, c.c + dc),\n h: (c.h + dh + 360) % 360,\n});\n\n/** Rotate hue safely */\nexport const rotateHue = (c: Oklch, degrees: number): Oklch =>\n mod(c, 0, 0, degrees);\n\n/** Chroma clamping (Catppuccin-like softness) */\nexport const clampChroma = (c: Oklch, maxC = 0.15): Oklch => ({\n ...c,\n c: Math.min(c.c, maxC),\n});\n\n/** Safer hue rotation (preserve L/C of original) */\nexport const rotateSoft = (c: Oklch, deg: number, maxC = 0.15): Oklch =>\n clampChroma(rotateHue(c, deg), maxC);\n\nexport const getForegroundColor = (foreground: Oklch, color: Oklch): string => {\n const contrast = Math.abs(foreground.l - color.l);\n\n if (contrast < 0.7) {\n foreground.l = 1 - foreground.l;\n return oklchString(foreground);\n }\n return oklchString(foreground);\n};\n\n// ──────────────────────────────────────────────────────────────\n// Color Swatches\n// ──────────────────────────────────────────────────────────────\n\nexport const shadeColor = (\n color: Oklch,\n lightnessShift: number,\n chromaShift: number,\n) => {\n return oklchString({\n l: color.l + lightnessShift,\n c: color.c > 0.003 ? color.c + chromaShift : color.c,\n h: color.h,\n });\n};\n\n/**\n * Generate 9 color swatches (shades) from a base color\n * Generates from lightest (90% lightness) to darkest (10% lightness)\n * @param oklchString - Base OKLCH string\n * @returns Array of 9 hex color strings representing shades\n */\nexport function generateColorSwatches(oklchString: string): string[] {\n try {\n const color = parseOklch(oklchString);\n\n const safeMax = color.l >= 0.885 ? 0.995 : 0.97;\n const safeMin = color.l <= 0.33 ? 0 : 0.21;\n const lightBase = (safeMax - color.l) / 5;\n const darkBase = -(color.l - safeMin) / 8;\n\n return [\n // Light shades\n shadeColor(color, 5 * lightBase, -0.00375),\n shadeColor(color, 4 * lightBase, -0.00375),\n shadeColor(color, 3 * lightBase, -0.00375),\n shadeColor(color, 2 * lightBase, -0.00375),\n shadeColor(color, lightBase, -0.00375),\n // Dark shades\n shadeColor(color, 1.6 * darkBase, 0.025),\n shadeColor(color, 1.875 * 2 * darkBase, 0.05),\n shadeColor(color, 3 * 2 * darkBase, 0.075),\n shadeColor(color, 4 * 2 * darkBase, 0.1),\n ];\n } catch (error) {\n console.error(`Failed to generate swatches for ${oklchString}:`, error);\n // Return grayscale swatches as fallback\n return [\n \"#f5f5f5\",\n \"#e0e0e0\",\n \"#cccccc\",\n \"#b3b3b3\",\n \"#999999\",\n \"#666666\",\n \"#4d4d4d\",\n \"#333333\",\n \"#1a1a1a\",\n ];\n }\n}\n\n// ──────────────────────────────────────────────────────────────\n// Color Handling\n// ──────────────────────────────────────────────────────────────\n\n/** Core color keys for iteration */\nexport const CORE_COLOR_KEYS = [\n \"base\",\n \"text\",\n \"body\",\n \"muted\",\n \"mutedForeground\",\n\n \"primary\",\n \"primaryForeground\",\n \"secondary\",\n \"secondaryForeground\",\n \"accent\",\n \"accentForeground\",\n \"destructive\",\n \"destructiveForeground\",\n] as const;\n\n/** Default core colors (fallbacks) */\nexport const DEFAULT_CORE_COLORS: CoreColors = {\n base: { l: 1, c: 0, h: 0 },\n text: { l: 0, c: 0, h: 0 },\n body: { l: 0.2046, c: 0, h: 0 },\n muted: { l: 0.94, c: 0, h: 0 },\n mutedForeground: { l: 0.4997, c: 0, h: 0 },\n\n primary: { l: 0.6231, c: 0.188, h: 259.81 },\n primaryForeground: { l: 1, c: 0, h: 0 },\n secondary: { l: 0.6056, c: 0.2189, h: 292.72 },\n secondaryForeground: { l: 1, c: 0, h: 0 },\n accent: { l: 0.6959, c: 0.1491, h: 162.48 },\n accentForeground: { l: 1, c: 0, h: 0 },\n destructive: { l: 0.6368, c: 0.2078, h: 25.33 },\n destructiveForeground: { l: 1, c: 0, h: 0 },\n};\n\n/** Convert a theme config (CSS string values) to CoreColors */\nexport const themeConfigToCoreColors = (config: ThemeConfig): CoreColors => ({\n base: parseOklch(\n config.background || config.base || oklchString(DEFAULT_CORE_COLORS.base),\n ),\n text: parseOklch(\n config.foreground || config.text || oklchString(DEFAULT_CORE_COLORS.text),\n ),\n body: parseOklch(config.body || oklchString(DEFAULT_CORE_COLORS.body)),\n muted: parseOklch(config.muted || oklchString(DEFAULT_CORE_COLORS.muted)),\n mutedForeground: parseOklch(\n config.mutedForeground ||\n config.muted_foreground ||\n oklchString(DEFAULT_CORE_COLORS.mutedForeground),\n ),\n\n primary: parseOklch(\n config.primary || oklchString(DEFAULT_CORE_COLORS.primary),\n ),\n primaryForeground: parseOklch(\n config.primaryForeground ||\n config.primary_foreground ||\n oklchString(DEFAULT_CORE_COLORS.primaryForeground),\n ),\n secondary: parseOklch(\n config.secondary || oklchString(DEFAULT_CORE_COLORS.secondary),\n ),\n secondaryForeground: parseOklch(\n config.secondaryForeground ||\n config.secondary_foreground ||\n oklchString(DEFAULT_CORE_COLORS.secondaryForeground),\n ),\n accent: parseOklch(config.accent || oklchString(DEFAULT_CORE_COLORS.accent)),\n accentForeground: parseOklch(\n config.accentForeground ||\n config.accent_foreground ||\n oklchString(DEFAULT_CORE_COLORS.accentForeground),\n ),\n destructive: parseOklch(\n config.destructive || oklchString(DEFAULT_CORE_COLORS.destructive),\n ),\n destructiveForeground: parseOklch(\n config.destructiveForeground ||\n config.destructive_foreground ||\n oklchString(DEFAULT_CORE_COLORS.destructiveForeground),\n ),\n});\n\n/** Convert CoreColors to a record of OKLCH strings */\nexport const coreColorsToConfig = (\n colors: CoreColors,\n): Record<string, string> => {\n const config: Record<string, string> = {};\n for (const key of CORE_COLOR_KEYS) {\n config[key] = oklchString(colors[key]);\n }\n return config;\n};\n\nexport const DEFAULT_CORE_COLORS_CONFIG =\n coreColorsToConfig(DEFAULT_CORE_COLORS);\n\n// ──────────────────────────────────────────────────────────────\n// Theme Mode Detection & Conversion\n// ──────────────────────────────────────────────────────────────\n\n/**\n * Theme mode constant - single source of truth for mode values.\n * Use THEME_MODES.light instead of \"light\" for type-safe comparisons.\n */\nexport const THEME_MODES = {\n light: \"light\",\n dark: \"dark\",\n} as const;\n\n/**\n * Union type of theme modes, derived from THEME_MODES constant.\n * @see deriving-typeof-for-object-keys pattern\n */\nexport type ThemeMode = (typeof THEME_MODES)[keyof typeof THEME_MODES];\n\n/**\n * Detect whether the core colors represent a light or dark theme.\n * Based on the lightness of the base color.\n */\nexport const detectThemeMode = (core: CoreColors): ThemeMode => {\n return core.base.l < 0.5 ? THEME_MODES.dark : THEME_MODES.light;\n};\n\n/** Convert core colors to work in dark mode (dark base) */\nexport const toDarkMode = (core: CoreColors): CoreColors => {\n const isDark = core.base.l < 0.5;\n if (isDark) return core; // Already dark\n\n return {\n // Base\n base: mod(core.base, 1 - core.base.l * 2), // Make base dark\n text: mod(core.text, core.text.l > 0.5 ? 0 : 0.5), // Ensure text is light\n body: mod(core.body, core.body.l > 0.5 ? 0 : 0.5),\n muted: mod(core.muted, 1 - core.muted.l * 2),\n mutedForeground: mod(\n core.mutedForeground,\n core.mutedForeground.l > 0.5 ? 0 : 0.4,\n ),\n\n // Color\n primary: core.primary,\n primaryForeground: core.primaryForeground,\n secondary: core.secondary,\n secondaryForeground: core.secondaryForeground,\n accent: core.accent,\n accentForeground: core.accentForeground,\n destructive: core.destructive,\n destructiveForeground: core.destructiveForeground,\n };\n};\n\n/** Convert core colors to work in light mode (light base) */\nexport const toLightMode = (core: CoreColors): CoreColors => {\n const isLight = core.base.l > 0.5;\n if (isLight) return core; // Already light\n\n return {\n // Base\n base: mod(core.base, 1 - core.base.l * 2), // Make base light\n text: mod(core.text, core.text.l < 0.5 ? 0.5 : -0.5), // Ensure text is dark\n body: mod(core.body, core.body.l < 0.5 ? 0.5 : -0.5),\n muted: mod(core.muted, 1 - core.muted.l * 2),\n mutedForeground: mod(\n core.mutedForeground,\n core.mutedForeground.l < 0.5 ? 0.5 : -0.4,\n ),\n\n // Color\n primary: core.primary,\n primaryForeground: core.primaryForeground,\n secondary: core.secondary,\n secondaryForeground: core.secondaryForeground,\n accent: core.accent,\n accentForeground: core.accentForeground,\n destructive: core.destructive,\n destructiveForeground: core.destructiveForeground,\n };\n};\n\n// ──────────────────────────────────────────────────────────────\n// Font Handling\n// ──────────────────────────────────────────────────────────────\n\nexport const FONT_OPTIONS = {\n Inter: \"var(--font-inter)\",\n Eina: \"var(--font-eina)\",\n};\n\nexport const CORE_FONT_KEYS = [\n \"headerFont\",\n \"bodyFont\",\n \"extraSmall\",\n \"small\",\n \"regular\",\n \"large\",\n \"extraLarge\",\n \"giant\",\n] as const;\n\nexport const DEFAULT_FONT = {\n headerFont: FONT_OPTIONS.Inter,\n bodyFont: FONT_OPTIONS.Inter,\n extraSmall: \"0.75rem\",\n small: \"0.875rem\",\n regular: \"1rem\",\n large: \"1.125rem\",\n extraLarge: \"1.25rem\",\n giant: \"1.5rem\",\n};\n\nexport const fontConfigToCoreFont = (config: ThemeConfig): Font => {\n return {\n headerFont: config.headerFont || DEFAULT_FONT.headerFont,\n bodyFont: config.bodyFont || DEFAULT_FONT.bodyFont,\n extraSmall: config.extraSmall || DEFAULT_FONT.extraSmall,\n small: config.small || DEFAULT_FONT.small,\n regular: config.regular || DEFAULT_FONT.regular,\n large: config.large || DEFAULT_FONT.large,\n extraLarge: config.extraLarge || DEFAULT_FONT.extraLarge,\n giant: config.giant || DEFAULT_FONT.giant,\n };\n};\n\n// ──────────────────────────────────────────────────────────────\n// Spacing Handling\n// ──────────────────────────────────────────────────────────────\n\nexport const CORE_SPACING_KEYS = [\n \"globalSpacing\",\n \"radiusSmall\",\n \"radiusMedium\",\n \"radiusLarge\",\n \"radiusExtraLarge\",\n] as const;\n\nexport const DEFAULT_SPACING = {\n globalSpacing: \"0.25rem\",\n\n radiusSmall: \"0.25rem\",\n radiusMedium: \"0.375rem\",\n radiusLarge: \"0.5rem\",\n radiusExtraLarge: \"0.75rem\",\n};\n\nexport const spacingConfigToCoreSpacing = (config: ThemeConfig): Spacing => {\n return {\n globalSpacing: config.globalSpacing || DEFAULT_SPACING.globalSpacing,\n radiusSmall: config.radiusSmall || DEFAULT_SPACING.radiusSmall,\n radiusMedium: config.radiusMedium || DEFAULT_SPACING.radiusMedium,\n radiusLarge: config.radiusLarge || DEFAULT_SPACING.radiusLarge,\n radiusExtraLarge:\n config.radiusExtraLarge || DEFAULT_SPACING.radiusExtraLarge,\n };\n};\n\n// ──────────────────────────────────────────────────────────────\n// Non Color Fields Handling\n// ──────────────────────────────────────────────────────────────\n\nexport const CORE_NON_COLOR_KEYS = [\n ...CORE_FONT_KEYS,\n ...CORE_SPACING_KEYS,\n] as const;\n\nexport const separatedThemeConfig = (config: ThemeConfig) => {\n // Type assertions in reduce: Required because we're building an object dynamically.\n // The key is typed as string from array iteration, but we know it's a valid ThemeConfig key.\n // The {} as ThemeConfig seed is necessary for TypeScript to type the accumulator.\n const ensuredConfig: ThemeConfig = [\n ...CORE_NON_COLOR_KEYS,\n ...CORE_COLOR_KEYS,\n ].reduce((acc, key) => {\n acc[key] =\n config[key] ||\n DEFAULT_CORE_COLORS_CONFIG[key] ||\n DEFAULT_FONT[key as keyof Font] ||\n DEFAULT_SPACING[key as keyof Spacing];\n return acc;\n }, {} as ThemeConfig);\n\n // Type assertions for .includes(): Required because TypeScript's readonly tuple types\n // don't directly support .includes() with string parameters. The filter ensures we\n // only include keys that are in the respective key arrays.\n const colorConfig = Object.fromEntries(\n Object.entries(ensuredConfig).filter(([key]) =>\n (CORE_COLOR_KEYS as readonly string[]).includes(key as string),\n ),\n );\n const otherConfig = Object.fromEntries(\n Object.entries(ensuredConfig).filter(([key]) =>\n (CORE_NON_COLOR_KEYS as readonly string[]).includes(key as string),\n ),\n );\n\n return {\n colorConfig,\n otherConfig,\n };\n};\n\nexport const themeConfigToCoreNonColorFields = (\n config: ThemeConfig,\n): CoreNonColorFields => {\n return {\n ...fontConfigToCoreFont(config),\n ...spacingConfigToCoreSpacing(config),\n };\n};\n\n// ──────────────────────────────────────────────────────────────\n// Theme Generator\n// ──────────────────────────────────────────────────────────────\n\nexport const globalCSSOverride = {\n \"--color-background-foreground\": \"var(--color-foreground)\",\n \"--color-foreground-foreground\": \"var(--color-background)\",\n\n \"--sidebar-ring\": \"var(--color-primary)\",\n \"--sidebar-border\": \"var(--color-border)\",\n \"--sidebar-accent-foreground\": \"var(--color-accent-foreground)\",\n \"--sidebar-accent\": \"var(--color-accent)\",\n \"--sidebar-primary-foreground\": \"var(--color-primary-foreground)\",\n \"--sidebar-primary\": \"var(--color-primary)\",\n \"--sidebar-foreground\": \"var(--color-muted-foreground)\",\n \"--sidebar\": \"var(--color-muted)\",\n \"--ring\": \"var(--color-primary)\",\n \"--popover\": \"var(--color-background)\",\n \"--popover-foreground\": \"var(--color-foreground)\",\n \"--card\": \"var(--color-muted)\",\n \"--card-foreground\": \"var(--color-muted-foreground)\",\n\n \"--spacing\": \"var(--global-spacing)\",\n \"--radius-sm\": \"var(--radius-small)\",\n \"--radius-md\": \"var(--radius-medium)\",\n \"--radius-lg\": \"var(--radius-large)\",\n \"--radius-xl\": \"var(--radius-extra-large)\",\n \"--text-xs\": \"var(--text-extra-small)\",\n \"--text-sm\": \"var(--text-small)\",\n \"--text-base\": \"var(--text-regular)\",\n \"--text-lg\": \"var(--text-large)\",\n \"--text-xl\": \"var(--text-extra-large)\",\n \"--text-2xl\": \"var(--text-giant)\",\n \"--font-sans\": \"var(--font-body)\",\n \"--font-mono\": \"var(--font-header)\",\n};\n\n/**\n * Generate CSS variables from a hex color config and theme mode\n */\nexport function generateThemeCssVars(\n config: ThemeConfig,\n mode: ThemeMode,\n): Record<string, string> {\n // Ensure core\n const coreColors = themeConfigToCoreColors(config);\n const coreOther = themeConfigToCoreNonColorFields(config);\n\n // Generate theme using the theme engine\n const theme = generateTheme(\"preview\", coreColors, mode, coreOther);\n\n // Convert theme config to CSS variables\n const cssVars: Record<string, string> = { ...globalCSSOverride };\n Object.entries(theme.config).forEach(([key, value]) => {\n const cssKey = `--${key.replace(/_/g, \"-\")}`;\n cssVars[cssKey] = String(value);\n\n if (value.startsWith(\"oklch(\")) {\n const colorVariable = cssKey.replace(/^--/, \"--color-\");\n cssVars[colorVariable] = String(value);\n const swatches = generateColorSwatches(value);\n swatches.forEach((swatch, index) => {\n const swatchKey = `--color-${key.replace(/_/g, \"-\")}-${index + 1}00`;\n cssVars[swatchKey] = String(swatch);\n });\n }\n });\n\n return cssVars;\n}\n\nexport const generateTheme = (\n name: string,\n colorFields: CoreColors,\n mode: ThemeMode = THEME_MODES.dark,\n otherFields?: CoreNonColorFields,\n) => {\n // Convert colors to appropriate mode\n const modeCore =\n mode === \"dark\" ? toDarkMode(colorFields) : toLightMode(colorFields);\n\n // Adaptive surface lighten (proportional, not absolute)\n const surface = mod(modeCore.base, (1 - modeCore.base.l) * 0.1);\n\n // Apply optional global chroma dampening\n const normalize = (c: Oklch) => c;\n\n // Base\n const base = normalize(modeCore.base);\n const text = normalize(modeCore.text);\n const body = normalize(modeCore.body);\n const muted = normalize(modeCore.muted);\n const mutedForeground = normalize(modeCore.mutedForeground);\n // Color\n const primary = normalize(modeCore.primary);\n const primaryForeground = normalize(modeCore.primaryForeground);\n const secondary = normalize(modeCore.secondary);\n const secondaryForeground = normalize(modeCore.secondaryForeground);\n const accent = normalize(modeCore.accent);\n const accentForeground = normalize(modeCore.accentForeground);\n const destructive = normalize(modeCore.destructive);\n const destructiveForeground = normalize(modeCore.destructiveForeground);\n\n // Chart hues using soft rotations\n const chart1 = accent;\n const chart2 = primary;\n const chart3 = secondary;\n const chart4 = rotateSoft(primary, 60);\n const chart5 = rotateSoft(primary, 120);\n\n const otherConfig = otherFields ?? {\n ...DEFAULT_FONT,\n ...DEFAULT_SPACING,\n };\n\n return {\n name,\n mode,\n config: {\n // Base\n background: oklchString(base),\n foreground: oklchString(text),\n\n // Body\n body: oklchString(body),\n\n // Popover\n popover: oklchString(base),\n popover_foreground: oklchString(text),\n\n // Primary\n primary: oklchString(primary),\n primary_foreground: oklchString(primaryForeground),\n\n // Secondary\n secondary: oklchString(secondary),\n secondary_foreground: oklchString(secondaryForeground),\n\n // muted\n muted: oklchString(muted),\n muted_foreground: oklchString(mutedForeground),\n\n // Accent\n accent: oklchString(accent),\n accent_foreground: oklchString(accentForeground),\n\n // Destructive\n destructive: oklchString(destructive),\n destructive_foreground: oklchString(destructiveForeground),\n\n // Border / input / ring\n border: oklchString(surface),\n input: oklchString(surface),\n\n // Charts\n chart_1: oklchString(chart1),\n chart_2: oklchString(chart2),\n chart_3: oklchString(chart3),\n chart_4: oklchString(chart4),\n chart_5: oklchString(chart5),\n\n // Font\n font_header: otherConfig.headerFont || DEFAULT_FONT.headerFont,\n font_body: otherConfig.bodyFont || DEFAULT_FONT.bodyFont,\n text_extra_small: otherConfig.extraSmall || DEFAULT_FONT.extraSmall,\n text_small: otherConfig.small || DEFAULT_FONT.small,\n text_regular: otherConfig.regular || DEFAULT_FONT.regular,\n text_large: otherConfig.large || DEFAULT_FONT.large,\n text_extra_large: otherConfig.extraLarge || DEFAULT_FONT.extraLarge,\n text_giant: otherConfig.giant || DEFAULT_FONT.giant,\n\n // Spacing\n global_spacing:\n otherConfig.globalSpacing || DEFAULT_SPACING.globalSpacing,\n radius_small: otherConfig.radiusSmall || DEFAULT_SPACING.radiusSmall,\n radius_medium: otherConfig.radiusMedium || DEFAULT_SPACING.radiusMedium,\n radius_large: otherConfig.radiusLarge || DEFAULT_SPACING.radiusLarge,\n radius_extra_large:\n otherConfig.radiusExtraLarge || DEFAULT_SPACING.radiusExtraLarge,\n },\n default: false,\n };\n};\n\n// ──────────────────────────────────────────────────────────────\n// Dual-Mode Theme Generator\n// ──────────────────────────────────────────────────────────────\n\n/**\n * Generate both light and dark themes from the same core colors.\n * Returns an object with 'light' and 'dark' theme variants.\n */\nexport const generateDualTheme = (name: string, core: CoreColors) => {\n return {\n light: generateTheme(name, core, \"light\"),\n dark: generateTheme(name, core, \"dark\"),\n };\n};\n\n/**\n * Smart dual theme generation that detects the original mode\n * and generates the opposite mode automatically.\n * Useful when you have a user-created theme and want to offer both modes.\n */\nexport const generateSmartDualTheme = (name: string, core: CoreColors) => {\n const detectedMode = detectThemeMode(core);\n\n return {\n light: generateTheme(name, core, \"light\"),\n dark: generateTheme(name, core, \"dark\"),\n detectedMode, // Returns which mode the original core colors represent\n };\n};\n\n// ──────────────────────────────────────────────────────────────\n// Theme Identifier\n// ──────────────────────────────────────────────────────────────\n\n/**\n * Gets a unique identifier for a theme\n * Prefers ID (converted to string) over name for uniqueness\n */\nexport const getThemeIdentifier = (theme: Theme): string => {\n return theme.id !== undefined ? theme.id.toString() : theme.name;\n};\n\n/**\n * Finds a theme by identifier (ID or name)\n * First attempts to match by ID, then falls back to name matching\n */\nexport const findThemeByIdentifier = (\n themes: Theme[],\n identifier: number | string,\n): Theme | undefined => {\n // If identifier is a number, try to find by ID first\n if (typeof identifier === \"number\") {\n return themes.find((t) => t.id === identifier);\n }\n\n // If identifier is a string, try to parse as number for ID match\n const numericId = parseInt(identifier, 10);\n if (!isNaN(numericId)) {\n const byId = themes.find((t) => t.id === numericId);\n if (byId) return byId;\n }\n\n // Fall back to name matching\n return themes.find((t) => t.name === identifier);\n};\n\n/**\n * Checks if two themes are the same based on their identifiers\n */\nexport const isSameTheme = (\n theme1: Theme | undefined,\n theme2: Theme,\n): boolean => {\n if (!theme1) return false;\n\n // If both have IDs, compare by ID\n if (theme1.id !== undefined && theme2.id !== undefined) {\n return theme1.id === theme2.id;\n }\n\n // Fall back to name comparison\n return theme1.name === theme2.name;\n};\n","import { DEFAULT_CORE_COLORS, generateTheme, parseOklch } from \"./theme-engine\";\n\n// Re-export theme engine functions\nexport * from \"./theme-engine\";\nexport type { Oklch, CoreColors, ThemeConfig } from \"./theme-engine\";\n\n// --------------------------------------------------------------------\n// Official Themes\n// --------------------------------------------------------------------\n\nexport const dracula = generateTheme(\"Dracula\", {\n // Base - Official: draculatheme.com/spec\n base: { l: 0.2882, c: 0.0221, h: 277.51 }, // Official: #282A36 (Background)\n text: { l: 0.9775, c: 0.0079, h: 106.55 }, // Official: #F8F8F2 (Foreground)\n body: { l: 0.75, c: 0.02, h: 300 }, // Body text\n muted: { l: 0.4028, c: 0.0322, h: 277.83 }, // Surface/Card bg - Official: #44475A (Current Line)\n mutedForeground: { l: 0.5598, c: 0.0803, h: 270.09 }, // Official: #6272A4 (Comment)\n\n // Color\n primary: { l: 0.742, c: 0.1485, h: 301.88 }, // Official: #BD93F9 (Purple)\n primaryForeground: { l: 0.15, c: 0.01, h: 275 },\n secondary: { l: 0.5598, c: 0.0803, h: 270.09 }, // Official: #6272A4 (Comment)\n secondaryForeground: { l: 0.15, c: 0.01, h: 245 },\n accent: { l: 0.871, c: 0.2195, h: 148.02 }, // Official: #50FA7B (Green)\n accentForeground: { l: 0.15, c: 0.01, h: 110 },\n destructive: { l: 0.6822, c: 0.2063, h: 24.43 }, // Official: #FF5555 (Red)\n destructiveForeground: { l: 0.15, c: 0.01, h: 30 },\n});\n\nexport const solarized = generateTheme(\n \"Solarized\",\n {\n // Base - Official: ethanschoonover.com/solarized\n base: { l: 0.9735, c: 0.0261, h: 90.1 }, // Official: #fdf6e3 (base3)\n text: { l: 0.3092, c: 0.0518, h: 219.65 }, // Official: #073642 (base02)\n body: { l: 0.523, c: 0.0283, h: 219.14 }, // Official: #586e75 (base01)\n muted: { l: 0.9306, c: 0.026, h: 92.4 }, // Surface/Card bg - Official: #eee8d5 (base2)\n mutedForeground: { l: 0.5682, c: 0.0285, h: 221.9 }, // Official: #657b83 (base00)\n\n // Color\n primary: { l: 0.6437, c: 0.1019, h: 187.38 }, // Official: #2aa198 (cyan)\n primaryForeground: { l: 0.98, c: 0.01, h: 180 },\n secondary: { l: 0.6444, c: 0.1508, h: 118.6 }, // Official: #859900 (green)\n secondaryForeground: { l: 0.15, c: 0.01, h: 145 },\n accent: { l: 0.6545, c: 0.134, h: 85.72 }, // Official: #b58900 (yellow)\n accentForeground: { l: 0.15, c: 0.01, h: 85 },\n destructive: { l: 0.5863, c: 0.2064, h: 27.12 }, // Official: #dc322f (red)\n destructiveForeground: { l: 0.98, c: 0.01, h: 30 },\n },\n \"light\",\n);\n\nexport const gruvbox = generateTheme(\n \"Gruvbox\",\n {\n // Base - Official: github.com/morhetz/gruvbox (Light mode)\n base: { l: 0.9555, c: 0.0555, h: 96.15 }, // Official: #fbf1c7 (bg0 light)\n text: { l: 0.3441, c: 0.0066, h: 48.52 }, // Official: #3c3836 (fg1 light)\n body: { l: 0.411, c: 0.0115, h: 51.87 }, // Official: #504945 (fg2 light)\n muted: { l: 0.8941, c: 0.0566, h: 89.24 }, // Surface/Card bg - Official: #ebdbb2 (bg1 light)\n mutedForeground: { l: 0.5505, c: 0.0234, h: 62.57 }, // Official: #7c6f64 (gray)\n\n // Color\n primary: { l: 0.7251, c: 0.1429, h: 77.71 }, // Official: #d79921 (yellow)\n primaryForeground: { l: 0.15, c: 0.01, h: 80 },\n secondary: { l: 0.6564, c: 0.1354, h: 109.12 }, // Official: #98971a (green)\n secondaryForeground: { l: 0.15, c: 0.01, h: 145 },\n accent: { l: 0.6217, c: 0.1707, h: 45.81 }, // Official: #d65d0e (orange)\n accentForeground: { l: 0.15, c: 0.01, h: 35 },\n destructive: { l: 0.5458, c: 0.203, h: 28.66 }, // Official: #cc241d (red)\n destructiveForeground: { l: 0.98, c: 0.01, h: 30 },\n },\n \"light\",\n);\n\nexport const monokai = generateTheme(\"Monokai\", {\n // Base - Official: Sublime Text Monokai\n base: { l: 0.2737, c: 0.0109, h: 114.8 }, // Official: #272822 (Background)\n text: { l: 0.9775, c: 0.0079, h: 106.55 }, // Official: #F8F8F2 (Foreground)\n body: { l: 0.75, c: 0.04, h: 90 }, // Body text\n muted: { l: 0.3574, c: 0.0184, h: 103 }, // Surface/Card bg - Official: #3E3D32 (Line hig\n mutedForeground: { l: 0.5467, c: 0.0288, h: 97.39 }, // Official: #75715E (Comment)\n\n // Color\n primary: { l: 0.8792, c: 0.1255, h: 103.18 }, // Official: #E6DB74 (Yellow)\n primaryForeground: { l: 0.15, c: 0.01, h: 60 },\n secondary: { l: 0.6416, c: 0.24, h: 7.47 }, // Official: #F92672 (Pink)\n secondaryForeground: { l: 0.15, c: 0.01, h: 300 },\n accent: { l: 0.8414, c: 0.2044, h: 127.29 }, // Official: #A6E22E (Green)\n accentForeground: { l: 0.15, c: 0.01, h: 110 },\n destructive: { l: 0.6416, c: 0.24, h: 7.47 }, // Official: #F92672 (Red/Pink)\n destructiveForeground: { l: 0.98, c: 0.01, h: 20 },\n});\n\nexport const tokyoNight = generateTheme(\"Tokyo Night\", {\n // Base - Official: github.com/folke/tokyonight.nvim\n base: { l: 0.2263, c: 0.0214, h: 280.49 }, // Official: #1a1b26 (bg)\n text: { l: 0.8456, c: 0.0611, h: 274.76 }, // Official: #c0caf5 (fg)\n body: { l: 0.7666, c: 0.0537, h: 275.49 }, // Official: #a9b1d6 (fg_dark)\n muted: { l: 0.2819, c: 0.0355, h: 274.75 }, // Surface/Card bg - Official: #24283b (bg_highlight)\n mutedForeground: { l: 0.4955, c: 0.0682, h: 274.37 }, // Official: #565f89 (comment)\n\n // Color\n primary: { l: 0.719, c: 0.1322, h: 264.2 }, // Official: #7aa2f7 (blue)\n primaryForeground: { l: 0.15, c: 0.01, h: 260 },\n secondary: { l: 0.7515, c: 0.1344, h: 299.5 }, // Official: #bb9af7 (magenta)\n secondaryForeground: { l: 0.15, c: 0.01, h: 295 },\n accent: { l: 0.7839, c: 0.1057, h: 75.43 }, // Official: #e0af68 (yellow)\n accentForeground: { l: 0.15, c: 0.01, h: 80 },\n destructive: { l: 0.7227, c: 0.1589, h: 10.28 }, // Official: #f7768e (red)\n destructiveForeground: { l: 0.15, c: 0.01, h: 20 },\n});\n\nexport const rosePine = generateTheme(\"Rose Pine\", {\n // Base - Official: rosepinetheme.com/palette\n base: { l: 0.2134, c: 0.0255, h: 291.13 }, // Official: #191724 (Base)\n text: { l: 0.9088, c: 0.0299, h: 289.97 }, // Official: #e0def4 (Text)\n body: { l: 0.6539, c: 0.0444, h: 291.23 }, // Official: #908caa (Subtle)\n muted: { l: 0.2413, c: 0.0322, h: 289.14 }, // Surface/Card bg - Official: #1f1d2e (Surface)\n mutedForeground: { l: 0.5383, c: 0.0435, h: 291.41 }, // Official: #6e6a86 (Muted)\n\n // Color\n primary: { l: 0.8363, c: 0.0544, h: 21.14 }, // Official: #ebbcba (Rose)\n primaryForeground: { l: 0.15, c: 0.01, h: 345 },\n secondary: { l: 0.5277, c: 0.0793, h: 227.72 }, // Official: #31748f (Pine)\n secondaryForeground: { l: 0.15, c: 0.01, h: 155 },\n accent: { l: 0.776, c: 0.0945, h: 304.99 }, // Official: #c4a7e7 (Iris)\n accentForeground: { l: 0.15, c: 0.01, h: 270 },\n destructive: { l: 0.6977, c: 0.1565, h: 4.22 }, // Official: #eb6f92 (Love)\n destructiveForeground: { l: 0.15, c: 0.01, h: 25 },\n});\n\nexport const everforest = generateTheme(\n \"Everforest\",\n {\n // Base - Official: github.com/sainnhe/everforest (Light mode)\n base: { l: 0.9735, c: 0.0261, h: 90.1 }, // Official: #fdf6e3 (bg0 light medium)\n text: { l: 0.5154, c: 0.0212, h: 232.87 }, // Official: #5c6a72 (fg)\n body: { l: 0.6398, c: 0.0292, h: 143.51 }, // Official: #829181 (grey2)\n muted: { l: 0.9522, c: 0.0306, h: 98.86 }, // Surface/Card bg - Official: #f4f0d9 (bg1 light)\n mutedForeground: { l: 0.6888, c: 0.0243, h: 141.21 }, // Official: #939f91 (grey1)\n\n // Color\n primary: { l: 0.6697, c: 0.156, h: 118.23 }, // Official: #8da101 (green)\n primaryForeground: { l: 0.98, c: 0.01, h: 140 },\n secondary: { l: 0.7466, c: 0.1545, h: 80.27 }, // Official: #dfa000 (yellow)\n secondaryForeground: { l: 0.15, c: 0.01, h: 60 },\n accent: { l: 0.7147, c: 0.1729, h: 50.75 }, // Official: #f57d26 (orange)\n accentForeground: { l: 0.15, c: 0.01, h: 30 },\n destructive: { l: 0.6707, c: 0.1996, h: 25.2 }, // Official: #f85552 (red)\n destructiveForeground: { l: 0.98, c: 0.01, h: 20 },\n },\n \"light\",\n);\n\nexport const nord = generateTheme(\"Nord\", {\n // Base - Official: nordtheme.com\n base: { l: 0.3244, c: 0.0229, h: 264.18 }, // Official: #2e3440 (nord0 - Polar Night)\n text: { l: 0.9513, c: 0.0074, h: 260.73 }, // Official: #eceff4 (nord6 - Snow Storm)\n body: { l: 0.8993, c: 0.0164, h: 262.75 }, // Official: #d8dee9 (nord4 - Snow Storm)\n muted: { l: 0.3792, c: 0.029, h: 266.47 }, // Surface/Card bg - Official: #3b4252 (nord1)\n mutedForeground: { l: 0.4523, c: 0.0352, h: 264.13 }, // Official: #4c566a (nord3)\n\n // Color\n primary: { l: 0.7746, c: 0.0622, h: 217.47 }, // Official: #88c0d0 (nord8 - Frost)\n primaryForeground: { l: 0.15, c: 0.01, h: 210 },\n secondary: { l: 0.7629, c: 0.0477, h: 194.49 }, // Official: #8fbcbb (nord7 - Frost)\n secondaryForeground: { l: 0.15, c: 0.01, h: 190 },\n accent: { l: 0.6921, c: 0.0625, h: 332.66 }, // Official: #b48ead (nord15 - Aurora)\n accentForeground: { l: 0.15, c: 0.01, h: 250 },\n destructive: { l: 0.6061, c: 0.1206, h: 15.34 }, // Official: #bf616a (nord11 - Aurora)\n destructiveForeground: { l: 0.98, c: 0.01, h: 25 },\n});\n\nexport const catppuccinMocha = generateTheme(\"Catppuccin Mocha\", {\n // Base - Official: catppuccin.com/palette (Mocha variant)\n base: { l: 0.2429, c: 0.0304, h: 283.91 }, // Official: #1e1e2e (Base)\n text: { l: 0.8787, c: 0.0426, h: 272.28 }, // Official: #cdd6f4 (Text)\n body: { l: 0.8168, c: 0.0403, h: 272.86 }, // Official: #bac2de (Subtext 1)\n muted: { l: 0.2155, c: 0.0254, h: 284.06 }, // Surface/Card bg - Official: #181825 (Mantle)\n mutedForeground: { l: 0.751, c: 0.0396, h: 273.93 }, // Official: #a6adc8 (Subtext 0)\n\n // Color\n primary: { l: 0.7664, c: 0.1113, h: 259.88 }, // Official: #89b4fa (Blue)\n primaryForeground: { l: 0.15, c: 0.01, h: 255 },\n secondary: { l: 0.7871, c: 0.1187, h: 304.77 }, // Official: #cba6f7 (Mauve)\n secondaryForeground: { l: 0.15, c: 0.01, h: 294 },\n accent: { l: 0.9193, c: 0.0704, h: 86.53 }, // Official: #f9e2af (Yellow)\n accentForeground: { l: 0.15, c: 0.01, h: 72 },\n destructive: { l: 0.7556, c: 0.1297, h: 2.76 }, // Official: #f38ba8 (Red)\n destructiveForeground: { l: 0.15, c: 0.01, h: 22 },\n});\n\n// --------------------------------------------------------------------\n// Combined Themes\n// --------------------------------------------------------------------\n\nexport const nordifiedCatppuccin = generateTheme(\"Nordified Catppuccin\", {\n // Base - Custom hybrid: Nord backgrounds + Catppuccin accents\n base: parseOklch(nord.config.background),\n text: parseOklch(nord.config.foreground),\n body: parseOklch(nord.config.body),\n muted: parseOklch(nord.config.muted),\n mutedForeground: parseOklch(nord.config.muted_foreground),\n\n // Color - Catppuccin accent colors\n primary: parseOklch(catppuccinMocha.config.primary),\n primaryForeground: parseOklch(catppuccinMocha.config.primary_foreground),\n secondary: parseOklch(catppuccinMocha.config.secondary),\n secondaryForeground: parseOklch(catppuccinMocha.config.secondary_foreground),\n accent: parseOklch(catppuccinMocha.config.accent),\n accentForeground: parseOklch(catppuccinMocha.config.accent_foreground),\n destructive: parseOklch(catppuccinMocha.config.destructive),\n destructiveForeground: parseOklch(\n catppuccinMocha.config.destructive_foreground,\n ),\n});\n\n// --------------------------------------------------------------------\n// Custom Themes\n// --------------------------------------------------------------------\n\nexport const christmas = generateTheme(\"Christmas\", {\n // Base - Custom holiday theme\n base: { l: 0.22, c: 0.04, h: 150 }, // Dark forest green\n text: { l: 0.95, c: 0.02, h: 100 }, // Snow white\n body: { l: 0.85, c: 0.02, h: 100 }, // Body text\n muted: { l: 0.15, c: 0.04, h: 150 }, // Surface/Card bg - Darker green\n mutedForeground: { l: 0.65, c: 0.02, h: 100 }, // Muted snow\n\n // Color\n primary: { l: 0.6, c: 0.15, h: 30 }, // Christmas red\n primaryForeground: { l: 0.98, c: 0.01, h: 30 },\n secondary: { l: 0.7, c: 0.12, h: 140 }, // Bright holiday green\n secondaryForeground: { l: 0.15, c: 0.01, h: 140 },\n accent: { l: 0.85, c: 0.12, h: 90 }, // Warm gold highlight\n accentForeground: { l: 0.15, c: 0.01, h: 90 },\n destructive: { l: 0.55, c: 0.18, h: 25 }, // Stronger red\n destructiveForeground: { l: 0.98, c: 0.01, h: 25 },\n});\n\nexport const pastel = generateTheme(\"Pastel\", {\n // Base - Custom soft pastel theme\n base: { l: 0.95, c: 0.03, h: 210 }, // Soft light blue-tinted base\n text: { l: 0.25, c: 0.03, h: 210 }, // Soft dark text\n body: { l: 0.35, c: 0.03, h: 210 }, // Body text\n muted: { l: 0.89, c: 0.03, h: 210 }, // Surface/Card bg - Slightly darker\n mutedForeground: { l: 0.5, c: 0.03, h: 210 }, // Muted foreground\n\n // Color\n primary: { l: 0.55, c: 0.12, h: 200 }, // Pastel blue\n primaryForeground: { l: 0.98, c: 0.01, h: 200 },\n secondary: { l: 0.55, c: 0.12, h: 320 }, // Pastel pink\n secondaryForeground: { l: 0.98, c: 0.01, h: 320 },\n accent: { l: 0.6, c: 0.13, h: 80 }, // Pastel yellow\n accentForeground: { l: 0.98, c: 0.01, h: 80 },\n destructive: { l: 0.5, c: 0.15, h: 25 }, // Pastel red\n destructiveForeground: { l: 0.98, c: 0.01, h: 25 },\n});\n\nexport const neon = generateTheme(\"Neon\", {\n // Base - Custom vibrant neon theme\n base: { l: 0.1, c: 0.03, h: 260 }, // Deep dark purple-tinted base\n text: { l: 0.9, c: 0.05, h: 260 }, // Bright neon text\n body: { l: 0.8, c: 0.04, h: 260 }, // Body text\n muted: { l: 0.18, c: 0.02, h: 260 }, // Surface/Card bg - Slightly lighter\n mutedForeground: { l: 0.55, c: 0.04, h: 260 }, // Muted foreground\n\n // Color - High saturation neon accents\n primary: { l: 0.6, c: 0.2, h: 180 }, // Neon cyan\n primaryForeground: { l: 0.1, c: 0.01, h: 180 },\n secondary: { l: 0.6, c: 0.2, h: 300 }, // Neon magenta\n secondaryForeground: { l: 0.1, c: 0.01, h: 300 },\n accent: { l: 0.55, c: 0.2, h: 90 }, // Neon green\n accentForeground: { l: 0.1, c: 0.01, h: 90 },\n destructive: { l: 0.55, c: 0.22, h: 20 }, // Neon red\n destructiveForeground: { l: 0.1, c: 0.01, h: 20 },\n});\n\nexport const highContrast = generateTheme(\"High Contrast\", {\n // Base - Custom accessibility theme (max contrast)\n base: { l: 0.0, c: 0.0, h: 0 }, // Pure black #000000\n text: { l: 1.0, c: 0.0, h: 0 }, // Pure white #ffffff\n body: { l: 0.9, c: 0.0, h: 0 }, // Body text\n muted: { l: 0.12, c: 0.0, h: 0 }, // Surface/Card bg - Near black\n mutedForeground: { l: 0.6, c: 0.0, h: 0 }, // Muted gray\n\n // Color - Maximum saturation for visibility\n primary: { l: 0.5, c: 0.25, h: 260 }, // Saturated blue\n primaryForeground: { l: 1.0, c: 0.0, h: 0 },\n secondary: { l: 0.5, c: 0.25, h: 120 }, // Saturated green\n secondaryForeground: { l: 1.0, c: 0.0, h: 0 },\n accent: { l: 0.5, c: 0.25, h: 60 }, // Saturated yellow\n accentForeground: { l: 0.0, c: 0.0, h: 0 },\n destructive: { l: 0.5, c: 0.25, h: 0 }, // Saturated red\n destructiveForeground: { l: 1.0, c: 0.0, h: 0 },\n});\n\nexport const ocean = generateTheme(\n \"Ocean\",\n {\n // Base - Custom blue ocean theme\n base: { l: 0.25, c: 0.03, h: 220 }, // Deep ocean blue\n text: { l: 0.85, c: 0.02, h: 220 }, // Light seafoam text\n body: { l: 0.75, c: 0.02, h: 220 }, // Body text\n muted: { l: 0.33, c: 0.02, h: 220 }, // Surface/Card bg - Lighter ocean\n mutedForeground: { l: 0.55, c: 0.02, h: 220 }, // Muted foreground\n\n // Color\n primary: { l: 0.65, c: 0.12, h: 200 }, // Ocean blue\n primaryForeground: { l: 0.15, c: 0.01, h: 200 },\n secondary: { l: 0.7, c: 0.1, h: 180 }, // Teal\n secondaryForeground: { l: 0.15, c: 0.01, h: 180 },\n accent: { l: 0.75, c: 0.08, h: 160 }, // Aqua\n accentForeground: { l: 0.15, c: 0.01, h: 160 },\n destructive: { l: 0.6, c: 0.14, h: 25 }, // Coral red\n destructiveForeground: { l: 0.98, c: 0.01, h: 25 },\n },\n \"light\",\n);\n\nexport const forest = generateTheme(\n \"Forest\",\n {\n // Base - Custom nature green theme\n base: { l: 0.28, c: 0.04, h: 140 }, // Deep forest green\n text: { l: 0.88, c: 0.03, h: 100 }, // Light cream text\n body: { l: 0.78, c: 0.03, h: 100 }, // Body text\n muted: { l: 0.36, c: 0.03, h: 140 }, // Surface/Card bg - Lighter forest\n mutedForeground: { l: 0.58, c: 0.03, h: 100 }, // Muted foreground\n\n // Color\n primary: { l: 0.65, c: 0.12, h: 145 }, // Forest green\n primaryForeground: { l: 0.15, c: 0.01, h: 145 },\n secondary: { l: 0.7, c: 0.1, h: 80 }, // Olive\n secondaryForeground: { l: 0.15, c: 0.01, h: 80 },\n accent: { l: 0.8, c: 0.1, h: 60 }, // Golden\n accentForeground: { l: 0.15, c: 0.01, h: 60 },\n destructive: { l: 0.6, c: 0.14, h: 30 }, // Burnt orange\n destructiveForeground: { l: 0.98, c: 0.01, h: 30 },\n },\n \"light\",\n);\n\nexport const sunset = generateTheme(\n \"Sunset\",\n {\n // Base - Custom warm sunset theme\n base: { l: 0.26, c: 0.04, h: 30 }, // Deep warm brown\n text: { l: 0.9, c: 0.03, h: 60 }, // Warm cream text\n body: { l: 0.8, c: 0.03, h: 60 }, // Body text\n muted: { l: 0.34, c: 0.03, h: 30 }, // Surface/Card bg - Lighter warm brown\n mutedForeground: { l: 0.58, c: 0.03, h: 60 }, // Muted foreground\n\n // Color\n primary: { l: 0.7, c: 0.15, h: 25 }, // Warm orange\n primaryForeground: { l: 0.15, c: 0.01, h: 25 },\n secondary: { l: 0.68, c: 0.16, h: 350 }, // Pink\n secondaryForeground: { l: 0.15, c: 0.01, h: 350 },\n accent: { l: 0.75, c: 0.14, h: 50 }, // Yellow-orange\n accentForeground: { l: 0.15, c: 0.01, h: 50 },\n destructive: { l: 0.6, c: 0.18, h: 20 }, // Red\n destructiveForeground: { l: 0.98, c: 0.01, h: 20 },\n },\n \"light\",\n);\n\nexport const defaultTheme = generateTheme(\n \"Default\",\n DEFAULT_CORE_COLORS,\n \"light\",\n);\n\nexport const BUILT_IN_THEMES = {\n Default: defaultTheme,\n Dracula: dracula,\n Solarized: solarized,\n Gruvbox: gruvbox,\n Monokai: monokai,\n \"Tokyo Night\": tokyoNight,\n \"Rose Pine\": rosePine,\n Everforest: everforest,\n Nord: nord,\n \"Catppuccin Mocha\": catppuccinMocha,\n \"Nordified Catppuccin\": nordifiedCatppuccin,\n Christmas: christmas,\n Pastel: pastel,\n Neon: neon,\n \"High Contrast\": highContrast,\n Ocean: ocean,\n Forest: forest,\n Sunset: sunset,\n};\n\n// Legacy alias for backwards compatibility\nexport const allThemes = BUILT_IN_THEMES;\n"]}
1
+ {"version":3,"sources":["../../src/theme/types.ts","../../src/theme/color-engine.ts","../../src/theme/tailwind-overrides.ts","../../src/theme/css-generator.ts","../../src/theme/defaults.ts","../../src/theme/serialisation.ts","../../src/theme/transforms.ts","../../src/theme/theme-applicator.ts"],"names":["Color"],"mappings":";;;;;AAGO,IAAM,oBAAA,GAAuB;AAAA,EAClC,YAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF;AAGO,IAAM,WAAA,GAAc;AAAA,EACzB,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK;AAC1C;AAGO,IAAM,cAAA,GAAiB;AAAA,EAC5B,YAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF;AAGO,IAAM,gBAAA,GAAmB,CAAC,QAAA,EAAU,MAAM;AAG1C,IAAM,WAAA,GAAc,CAAC,OAAA,EAAS,QAAA,EAAU,SAAS,YAAY;;;ACb7D,SAAS,WAAW,KAAA,EAAsB;AAC/C,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,KAAA,GAAQ,IAAI,KAAK,CAAA,CAAA;AAAA,EACnB;AACA,EAAA,IAAI;AACF,IAAA,OAAO,IAAIA,OAAM,KAAK,CAAA;AAAA,EACxB,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,IAAA,CAAK,gCAAA,EAAkC,KAAA,EAAO,KAAK,CAAA;AAC3D,IAAA,OAAO,IAAIA,MAAA,CAAM,OAAA,EAAS,CAAC,GAAA,EAAK,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,EACvC;AACF;AAOO,SAAS,kBAAA,CAAmB,YAAmB,KAAA,EAAqB;AACzE,EAAA,IAAI,WAAW,KAAA,CAAM,CAAA,IAAK,QAAQ,KAAA,CAAM,KAAA,CAAM,KAAK,IAAA,EAAM;AACvD,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,YAAA,CAAa,UAAU,CAAA;AAE9C,EAAA,IAAI,WAAW,EAAA,EAAI;AACjB,IAAA,OAAO,IAAIA,OAAM,OAAA,EAAS;AAAA,MACxB,KAAA,CAAM,KAAA,CAAM,CAAA,GAAI,GAAA,GAAM,IAAA,GAAO,IAAA;AAAA,MAC7B,UAAA,CAAW,MAAM,CAAA,IAAK,CAAA;AAAA,MACtB,UAAA,CAAW,MAAM,CAAA,IAAK;AAAA,KACvB,CAAA;AAAA,EACH;AACA,EAAA,OAAO,UAAA;AACT;AASO,SAAS,eAAe,IAAA,EAAuC;AACpE,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAA,IAAK,CAAA;AAC1B,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAA,IAAK,CAAA;AAC1B,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAA,IAAK,CAAA;AAE1B,EAAA,MAAM,OAAA,GAAU,CAAA,IAAK,KAAA,GAAQ,KAAA,GAAQ,IAAA;AACrC,EAAA,MAAM,OAAA,GAAU,CAAA,IAAK,IAAA,GAAO,CAAA,GAAI,IAAA;AAEhC,EAAA,MAAM,SAAA,GAAA,CAAa,UAAU,CAAA,IAAK,CAAA;AAClC,EAAA,MAAM,QAAA,GAAW,EAAE,CAAA,GAAI,OAAA,CAAA,GAAW,CAAA;AAElC,EAAA,MAAM,KAAA,GAAQ,CAAC,MAAA,EAAgB,MAAA,KAA0B;AACvD,IAAA,OAAO,IAAIA,OAAM,OAAA,EAAS;AAAA,MACxB,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA,GAAI,MAAM,CAAC,CAAA;AAAA,MACnC,KAAK,IAAA,GAAQ,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,IAAI,MAAM,CAAA;AAAA,MACvC;AAAA,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,KAAA,CAAM,CAAA,GAAI,SAAA,EAAW,OAAQ,CAAA;AAAA,IAClC,GAAA,EAAK,KAAA,CAAM,CAAA,GAAI,SAAA,EAAW,OAAQ,CAAA;AAAA,IAClC,GAAA,EAAK,KAAA,CAAM,CAAA,GAAI,SAAA,EAAW,OAAQ,CAAA;AAAA,IAClC,GAAA,EAAK,KAAA,CAAM,CAAA,GAAI,SAAA,EAAW,OAAQ,CAAA;AAAA,IAClC,GAAA,EAAK,IAAIA,MAAA,CAAM,OAAA,EAAS,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACjC,GAAA,EAAK,KAAA,CAAM,GAAA,GAAM,QAAA,EAAU,KAAK,CAAA;AAAA,IAChC,GAAA,EAAK,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,UAAU,IAAI,CAAA;AAAA,IACrC,GAAA,EAAK,KAAA,CAAM,CAAA,GAAI,CAAA,GAAI,UAAU,KAAK,CAAA;AAAA,IAClC,GAAA,EAAK,KAAA,CAAM,CAAA,GAAI,CAAA,GAAI,UAAU,GAAG;AAAA,GAClC;AACF;AASA,IAAM,sBAAA,GAOF;AAAA,EACF,UAAA,EAAY,EAAE,aAAA,EAAe,IAAA,EAAM,aAAa,IAAA,EAAK;AAAA,EACrD,UAAA,EAAY,EAAE,aAAA,EAAe,IAAA,EAAM,aAAa,IAAA,EAAK;AAAA,EACrD,KAAA,EAAO,EAAE,aAAA,EAAe,IAAA,EAAM,aAAa,IAAA,EAAK;AAAA,EAChD,SAAS,EAAE,aAAA,EAAe,UAAU,WAAA,EAAa,IAAA,EAAM,aAAa,GAAA,EAAI;AAAA,EACxE,WAAW,EAAE,aAAA,EAAe,UAAU,WAAA,EAAa,IAAA,EAAM,aAAa,IAAA,EAAK;AAAA,EAC3E,QAAQ,EAAE,aAAA,EAAe,UAAU,WAAA,EAAa,IAAA,EAAM,aAAa,GAAA,EAAI;AAAA,EACvE,WAAA,EAAa;AAAA,IACX,aAAA,EAAe,QAAA;AAAA,IACf,WAAA,EAAa,IAAA;AAAA,IACb,WAAA,EAAa;AAAA;AAEjB,CAAA;AAGA,SAAS,gBAAgB,CAAA,EAAmB;AAC1C,EAAA,MAAM,WAAW,CAAA,GAAI,CAAA;AACrB,EAAA,OAAO,KAAK,GAAA,CAAI,IAAA,EAAM,KAAK,GAAA,CAAI,IAAA,EAAM,QAAQ,CAAC,CAAA;AAChD;AAKO,SAAS,iBAAA,CACd,MACA,KAAA,EACiB;AACjB,EAAA,MAAM,MAAA,GAAS,uBAAuB,IAAI,CAAA;AAC1C,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,CAAA;AAE1C,EAAA,MAAM,aAAA,GACJ,MAAA,CAAO,aAAA,KAAkB,QAAA,GACrB,eAAA,CAAgB,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAA,IAAK,CAAC,CAAA,GACvC,MAAA,CAAO,aAAA;AAEb,EAAA,MAAM,WAAA,GACJ,MAAA,CAAO,WAAA,KAAgB,QAAA,GACnB,eAAA,CAAgB,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,CAAA,IAAK,CAAC,CAAA,GAC7C,MAAA,CAAO,WAAA;AAEb,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,IAAIA,MAAA,CAAM,OAAA,EAAS;AAAA,MACvB,aAAA;AAAA,MAAA,CACC,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAA,IAAK,CAAA,IAAK,WAAA;AAAA,MAC5B,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAA,IAAK;AAAA,KACvB,CAAA;AAAA,IACD,UAAA,EAAY,IAAIA,MAAA,CAAM,OAAA,EAAS;AAAA,MAC7B,WAAA;AAAA,MAAA,CACC,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,CAAA,IAAK,CAAA,IAAK,WAAA;AAAA,MAClC,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,CAAA,IAAK;AAAA,KAC7B;AAAA,GACH;AACF;AASO,SAAS,mBACd,GAAA,EAC4C;AAC5C,EAAA,MAAM,aAAa,EAAC;AAEpB,EAAA,KAAA,MAAW,QAAQ,oBAAA,EAAsB;AACvC,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AACjC,IAAA,MAAM,YAAA,GAAe,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAElC,IAAA,IAAI,YAAA,EAAc,IAAA,IAAQ,YAAA,EAAc,UAAA,EAAY;AAClD,MAAA,UAAA,CAAW,IAAI,CAAA,GAAI,YAAA;AAAA,IACrB,WAAW,YAAA,EAAc;AACvB,MAAA,MAAM,OACJ,YAAA,CAAa,IAAA,IAAQ,iBAAA,CAAkB,IAAA,EAAM,UAAU,CAAA,CAAE,IAAA;AAC3D,MAAA,UAAA,CAAW,IAAI,CAAA,GAAI;AAAA,QACjB,IAAA;AAAA,QACA,UAAA,EACE,aAAa,UAAA,IACb,kBAAA,CAAmB,IAAI,KAAA,CAAM,UAAA,CAAW,MAAM,IAAI;AAAA,OACtD;AAAA,IACF,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,IAAI,CAAA,GAAI,iBAAA,CAAkB,IAAA,EAAM,UAAU,CAAA;AAAA,IACvD;AAAA,EACF;AAEA,EAAA,OAAO,UAAA;AACT;AAIA,SAAS,gBACP,MAAA,EACkB;AAClB,EAAA,MAAM,WAAW,EAAC;AAElB,EAAA,KAAA,MAAW,QAAQ,oBAAA,EAAsB;AACvC,IAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AACzB,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA;AACxC,IAAA,MAAM,iBAAiB,EAAC;AAExB,IAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,MAAA,cAAA,CAAe,IAAI,CAAA,GAAI,MAAA,CAAO,IAAI,CAAA;AAAA,IACpC;AAEA,IAAA,QAAA,CAAS,IAAI,CAAA,GAAI;AAAA,MACf,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,KAAA,EAAM;AAAA,MACvB,UAAA,EAAY,KAAA,CAAM,UAAA,CAAW,KAAA,EAAM;AAAA,MACnC,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAMO,SAAS,aAAa,GAAA,EAAqC;AAChE,EAAA,OAAO;AAAA,IACL,IAAI,GAAA,CAAI,EAAA;AAAA,IACR,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,KAAA,EAAO,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AAAA,IAChC,IAAA,EAAM,eAAA,CAAgB,kBAAA,CAAmB,GAAG,CAAC,CAAA;AAAA,IAC7C,SAAA,EAAW,EAAE,GAAG,GAAA,CAAI,SAAA,EAAU;AAAA,IAC9B,YAAA,EAAc,EAAE,GAAG,GAAA,CAAI,YAAA,EAAa;AAAA,IACpC,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,KAAA,EAAO,EAAE,GAAG,GAAA,CAAI,KAAA;AAAM,GACxB;AACF;;;ACtOA,IAAM,SAAA,GAA6C;AAAA,EACjD,iBAAA,EAAmB,oBAAA;AAAA,EACnB,kBAAA,EAAoB,wBAAA;AAAA,EACpB,kBAAA,EAAoB;AACtB,CAAA;AAMA,SAAS,gBAAgB,KAAA,EAA6B;AACpD,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,OAAA,CAAQ,KAAK,CAAA;AAC5C,EAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,MAAA,GAAS,CAAA,GAAI,UAAA;AAC/C,EAAA,OAAO,WAAA,CAAY,aAAa,CAAA,IAAK,GAAA;AACvC;AAKO,SAAS,qBAAA,CAAsB,WAAoB,KAAA,EAAiB;AACzE,EAAA,MAAM,kBAAA,GAAwD;AAAA,IAC5D,IAAA,EAAM,YAAA;AAAA,IACN,GAAA,EAAK,aAAA;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAEA,EAAA,MAAM,eAAA,GAAkB;AAAA,IACtB,EAAA;AAAA,IAAI,GAAA;AAAA,IAAK,GAAA;AAAA,IAAK,GAAA;AAAA,IAAK,GAAA;AAAA,IAAK,GAAA;AAAA,IAAK,GAAA;AAAA,IAAK,GAAA;AAAA,IAAK,GAAA;AAAA,IAAK,GAAA;AAAA,IAAK;AAAA,GACnD;AACA,EAAA,MAAM,WAAA,GAAkD;AAAA,IACtD,EAAA,EAAI,GAAA;AAAA,IACJ,GAAA,EAAK;AAAA,GACP;AAEA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,kBAAkB,CAAA,EAAG;AACnE,IAAA,KAAA,MAAW,SAAS,eAAA,EAAiB;AACnC,MAAA,MAAM,IAAA,GAAQ,WAAA,CAAY,KAAK,CAAA,IAAK,KAAA;AACpC,MAAA,MAAM,WAAW,SAAA,CAAU,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AACvD,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,WAAW,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,EAAK,QAAA,GAAW,WAAW,CAAA,YAAA,EAAe,QAAQ,CAAA,CAAA,EAAI,QAAA,KAAa,gBAAgB,QAAA,KAAa,IAAA,GAAO,gBAAgB,IAAI,CAAA,GAAI,IAAI,CAAA,CAAA,CAAG,CAAA,CAAA;AAAA,OAClK;AAAA,IACF;AAAA,EACF;AAEA,EAAA,KAAA,CAAM,KAAK,yCAAyC,CAAA;AACpD,EAAA,KAAA,CAAM,KAAK,yCAAyC,CAAA;AAEpD,EAAA,OAAO,KAAA;AACT;;;AC5CA,SAAS,WAAW,KAAA,EAA6C;AAC/D,EAAA,MAAM,SAAS,KAAA,CAAM,QAAA,CAAS,EAAE,MAAA,EAAQ,SAAS,CAAA;AACjD,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AAC1B,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,0DAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,gBAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,aAAa,GAAA,EAAqB;AACzC,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,iBAAA,EAAmB,OAAO,EAAE,WAAA,EAAY;AAC7D;AAMA,SAAS,cAAc,MAAA,EAAoC;AACzD,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,KAAA,MAAW,QAAQ,oBAAA,EAAsB;AACvC,IAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AACzB,IAAA,KAAA,CAAM,IAAA,CAAK,WAAW,IAAI,CAAA,EAAA,EAAK,WAAW,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AACxD,IAAA,KAAA,CAAM,IAAA,CAAK,WAAW,IAAI,CAAA,aAAA,EAAgB,WAAW,KAAA,CAAM,UAAU,CAAC,CAAA,CAAA,CAAG,CAAA;AACzE,IAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,UAAA,CAAW,KAAA,CAAM,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,IAC1E;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAKA,SAAS,iBAAiB,KAAA,EAAgC;AACxD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,OAAO,cAAA,EAAgB;AAChC,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,YAAA,CAAa,GAAG,CAAC,KAAK,KAAA,CAAM,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EACzE;AACA,EAAA,KAAA,MAAW,OAAO,gBAAA,EAAkB;AAClC,IAAA,KAAA,CAAM,IAAA,CAAK,UAAU,GAAG,CAAA,EAAA,EAAK,MAAM,YAAA,CAAa,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EACzD;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,KAAA,CAAM,OAAO,CAAA,CAAA,CAAG,CAAA;AACzC,EAAA,KAAA,MAAW,OAAO,WAAA,EAAa;AAC7B,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,YAAA,CAAa,GAAG,CAAC,KAAK,KAAA,CAAM,KAAA,CAAM,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,KAAA;AACT;AAMA,IAAM,iBAAA,GAAoB;AAAA,EACxB,yDAAA;AAAA,EACA,yDAAA;AAAA,EACA,GAAG,qBAAqB,GAAA,CAAI,CAAC,UAAU,CAAA,EAAA,EAAK,KAAK,CAAA,cAAA,EAAiB,KAAK,CAAA,EAAA,CAAI,CAAA;AAAA,EAC3E,GAAG,oBAAA,CAAqB,GAAA;AAAA,IACtB,CAAC,KAAA,KAAU,CAAA,EAAA,EAAK,KAAK,4BAA4B,KAAK,CAAA,aAAA;AAAA,GACxD;AAAA,EAEA,uCAAA;AAAA,EACA,wCAAA;AAAA,EACA,8DAAA;AAAA,EACA,wCAAA;AAAA,EACA,gEAAA;AAAA,EACA,0CAAA;AAAA,EACA,sDAAA;AAAA,EACA,gCAAA;AAAA,EACA,wCAAA;AAAA,EACA,+BAAA;AAAA,EACA,qCAAA;AAAA,EACA,gDAAA;AAAA,EACA,6BAAA;AAAA,EACA,mDAAA;AAAA,EAEA,mCAAA;AAAA,EACA,oCAAA;AAAA,EACA,mCAAA;AAAA,EACA,yCAAA;AAAA,EACA,0CAAA;AAAA,EACA,oCAAA;AAAA,EACA,wCAAA;AAAA,EACA,oCAAA;AAAA,EACA,0CAAA;AAAA,EACA,qCAAA;AAAA,EACA,gCAAA;AAAA;AAAA,EAEA;AACF,CAAA;AAKA,IAAM,qBAAA,GAAwB,CAAC,wCAAwC,CAAA;AAchE,SAAS,gBAAA,CACd,KAAA,EACA,OAAA,GAAmC,EAAC,EAC5B;AACR,EAAA,MAAM,GAAA,GAAM,CAAA,aAAA,EAAgB,KAAA,CAAM,EAAE,CAAA,EAAA,CAAA;AACpC,EAAA,MAAM,EAAA,GAAK,QAAQ,iBAAA,IAAqB,IAAA;AACxC,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,EAAA,CAAI,CAAA;AACtB,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,iBAAiB,CAAA;AAChC,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,gBAAA,CAAiB,KAAK,CAAC,CAAA;AACtC,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,aAAA,CAAc,KAAA,CAAM,KAAK,CAAC,CAAA;AACzC,EAAA,IAAI,EAAA,EAAI,MAAA,CAAO,IAAA,CAAK,GAAG,uBAAuB,CAAA;AAC9C,EAAA,MAAA,CAAO,KAAK,CAAA,CAAA,CAAG,CAAA;AAGf,EAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,0BAAA,CAA4B,CAAA;AAC9C,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,qBAAqB,CAAA;AACpC,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,aAAA,CAAc,KAAA,CAAM,IAAI,CAAC,CAAA;AACxC,EAAA,IAAI,IAAI,MAAA,CAAO,IAAA,CAAK,GAAG,qBAAA,CAAsB,IAAI,CAAC,CAAA;AAClD,EAAA,MAAA,CAAO,KAAK,CAAA,CAAA,CAAG,CAAA;AAGf,EAAA,IAAI,CAAC,QAAQ,gBAAA,EAAkB;AAC7B,IAAA,MAAA,CAAO,KAAK,CAAA,qCAAA,CAAuC,CAAA;AACnD,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,yBAAA,CAA2B,CAAA;AAC7C,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,qBAAqB,CAAA;AACpC,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,aAAA,CAAc,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAC,CAAA,CAAE,CAAC,CAAA;AAC3D,IAAA,IAAI,EAAA,EAAI,MAAA,CAAO,IAAA,CAAK,GAAG,qBAAA,CAAsB,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AACrE,IAAA,MAAA,CAAO,KAAK,CAAA,CAAA,CAAG,CAAA;AACf,IAAA,MAAA,CAAO,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,EACjB;AAEA,EAAA,OAAO,MAAA,CAAO,KAAK,IAAI,CAAA;AACzB;ACnJO,IAAM,kBAAA,GAAkD;AAAA,EAC7D,UAAA,EAAY,SAAA;AAAA,EACZ,KAAA,EAAO,UAAA;AAAA,EACP,OAAA,EAAS,MAAA;AAAA,EACT,KAAA,EAAO,UAAA;AAAA,EACP,UAAA,EAAY,SAAA;AAAA,EACZ,KAAA,EAAO;AACT;AAEO,IAAM,qBAAA,GAAuD;AAAA,EAClE,MAAA,EAAQ,mBAAA;AAAA,EACR,IAAA,EAAM;AACR;AAEO,IAAM,eAAA,GAAkB;AAExB,IAAM,aAAA,GAA2C;AAAA,EACtD,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,UAAA,EAAY;AACd;AAIO,IAAM,cAAA,GAAiB;AAAA,EAC5B,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,OAAA,EAAS,SAAA;AAAA,EACT,SAAA,EAAW,SAAA;AAAA,EACX,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,WAAA,EAAa,SAAA;AAAA,EACb,eAAA,EAAiB;AACnB;AAIO,IAAM,gBAAA,GAAmB;AACzB,IAAM,kBAAA,GAAqB;AAQ3B,SAAS,yBAAA,GAA6C;AAC3D,EAAA,MAAM,EAAA,GAAK,IAAIA,MAAAA,CAAM,cAAA,CAAe,UAAU,CAAA;AAC9C,EAAA,MAAM,EAAA,GAAK,IAAIA,MAAAA,CAAM,cAAA,CAAe,UAAU,CAAA;AAC9C,EAAA,MAAM,OAAA,GAAU,IAAIA,MAAAA,CAAM,cAAA,CAAe,OAAO,CAAA;AAChD,EAAA,MAAM,SAAA,GAAY,IAAIA,MAAAA,CAAM,cAAA,CAAe,SAAS,CAAA;AACpD,EAAA,MAAM,MAAA,GAAS,IAAIA,MAAAA,CAAM,cAAA,CAAe,MAAM,CAAA;AAC9C,EAAA,MAAM,KAAA,GAAQ,IAAIA,MAAAA,CAAM,cAAA,CAAe,KAAK,CAAA;AAC5C,EAAA,MAAM,WAAA,GAAc,IAAIA,MAAAA,CAAM,cAAA,CAAe,WAAW,CAAA;AACxD,EAAA,MAAM,OAAA,GAAU,IAAIA,MAAAA,CAAM,cAAA,CAAe,eAAe,CAAA;AAExD,EAAA,MAAM,MAAA,GAAS,IAAIA,MAAAA,CAAM,SAAS,CAAA;AAClC,EAAA,MAAM,MAAA,GAAS,IAAIA,MAAAA,CAAM,SAAS,CAAA;AAClC,EAAA,MAAM,SAAA,GAAY,IAAIA,MAAAA,CAAM,SAAS,CAAA;AACrC,EAAA,MAAM,mBAAA,GAAsB,IAAIA,MAAAA,CAAM,SAAS,CAAA;AAE/C,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,gBAAA;AAAA,IACJ,IAAA,EAAM,kBAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,UAAA,EAAY,EAAE,IAAA,EAAM,EAAA,EAAI,YAAY,EAAA,EAAG;AAAA,MACvC,UAAA,EAAY,EAAE,IAAA,EAAM,EAAA,EAAI,YAAY,EAAA,EAAG;AAAA,MACvC,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,OAAA;AAAA,QACN,UAAA,EAAY,kBAAA,CAAmB,EAAA,EAAI,OAAO;AAAA,OAC5C;AAAA,MACA,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,SAAA;AAAA,QACN,UAAA,EAAY,kBAAA,CAAmB,EAAA,EAAI,SAAS;AAAA,OAC9C;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,MAAA;AAAA,QACN,UAAA,EAAY,kBAAA,CAAmB,EAAA,EAAI,MAAM;AAAA,OAC3C;AAAA,MACA,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA,EAAO,YAAY,OAAA,EAAQ;AAAA,MAC1C,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,WAAA;AAAA,QACN,UAAA,EAAY,kBAAA,CAAmB,EAAA,EAAI,WAAW;AAAA;AAChD,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,UAAA,EAAY,EAAE,IAAA,EAAM,MAAA,EAAQ,YAAY,MAAA,EAAO;AAAA,MAC/C,UAAA,EAAY,EAAE,IAAA,EAAM,MAAA,EAAQ,YAAY,MAAA,EAAO;AAAA,MAC/C,KAAA,EAAO,EAAE,IAAA,EAAM,SAAA,EAAW,YAAY,mBAAA;AAAoB,KAC5D;AAAA,IACA,SAAA,EAAW,EAAE,GAAG,kBAAA,EAAmB;AAAA,IACnC,YAAA,EAAc,EAAE,GAAG,qBAAA,EAAsB;AAAA,IACzC,OAAA,EAAS,eAAA;AAAA,IACT,KAAA,EAAO,EAAE,GAAG,aAAA;AAAc,GAC5B;AACF;;;ACvFA,SAAS,aAAa,KAAA,EAA0B;AAC9C,EAAA,OAAO;AAAA,IACL,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAA,IAAK,CAAA;AAAA,IACpB,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAA,IAAK,CAAA;AAAA,IACpB,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAA,IAAK;AAAA,GACtB;AACF;AAEA,SAAS,aAAa,KAAA,EAA0B;AAC9C,EAAA,OAAO,IAAIA,MAAAA,CAAM,OAAA,EAAS,CAAC,KAAA,CAAM,GAAG,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA;AACvD;AAMO,SAAS,eAAe,GAAA,EAAoC;AACjE,EAAA,MAAM,QAAQ,EAAC;AACf,EAAA,KAAA,MAAW,QAAQ,oBAAA,EAAsB;AACvC,IAAA,KAAA,CAAM,IAAI,CAAA,GAAI;AAAA,MACZ,MAAM,YAAA,CAAa,GAAA,CAAI,KAAA,CAAM,IAAI,EAAE,IAAI,CAAA;AAAA,MACvC,YAAY,YAAA,CAAa,GAAA,CAAI,KAAA,CAAM,IAAI,EAAE,UAAU;AAAA,KACrD;AAAA,EACF;AAEA,EAAA,MAAM,OAA6B,EAAC;AACpC,EAAA,KAAA,MAAW,CAAC,MAAM,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AACpD,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,IAAA,CAAK,IAAyB,CAAA,GAAI;AAAA,MAChC,GAAI,KAAA,CAAM,IAAA,GAAO,EAAE,IAAA,EAAM,aAAa,KAAA,CAAM,IAAI,CAAA,EAAE,GAAI,EAAC;AAAA,MACvD,GAAI,KAAA,CAAM,UAAA,GACN,EAAE,UAAA,EAAY,aAAa,KAAA,CAAM,UAAU,CAAA,EAAE,GAC7C;AAAC,KACP;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAI,GAAA,CAAI,EAAA;AAAA,IACR,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,KAAA;AAAA,IACA,IAAA;AAAA,IACA,SAAA,EAAW,EAAE,GAAG,GAAA,CAAI,SAAA,EAAU;AAAA,IAC9B,YAAA,EAAc,EAAE,GAAG,GAAA,CAAI,YAAA,EAAa;AAAA,IACpC,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,KAAA,EAAO,EAAE,GAAG,GAAA,CAAI,KAAA;AAAM,GACxB;AACF;AAOO,SAAS,iBACd,OAAA,EACiB;AACjB,EAAA,MAAM,QAAA,GAAa,OAAA,CAAQ,KAAA,IACzB,EAAC;AACH,EAAA,MAAM,OAAA,GAAY,OAAA,CAAQ,IAAA,IACxB,EAAC;AAEH,EAAA,MAAM,WAAW,yBAAA,EAA0B;AAC3C,EAAA,MAAM,QAAQ,EAAC;AACf,EAAA,KAAA,MAAW,QAAQ,oBAAA,EAAsB;AACvC,IAAA,MAAM,KAAA,GAAQ,SAAS,IAAI,CAAA;AAC3B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,KAAA,CAAM,IAAI,CAAA,GAAI;AAAA,QACZ,IAAA,EAAM,YAAA,CAAa,KAAA,CAAM,IAAI,CAAA;AAAA,QAC7B,UAAA,EAAY,YAAA,CAAa,KAAA,CAAM,UAAU;AAAA,OAC3C;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,kDAAkD,IAAI,CAAA,gBAAA;AAAA,OACxD;AACA,MAAA,KAAA,CAAM,IAAI,CAAA,GAAI,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAAA,IACnC;AAAA,EACF;AAEA,EAAA,MAAM,OAAqE,EAAC;AAC5E,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACnD,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,IAAA,CAAK,IAAyB,CAAA,GAAI;AAAA,MAChC,GAAI,KAAA,CAAM,IAAA,GAAO,EAAE,IAAA,EAAM,aAAa,KAAA,CAAM,IAAI,CAAA,EAAE,GAAI,EAAC;AAAA,MACvD,GAAI,KAAA,CAAM,UAAA,GACN,EAAE,UAAA,EAAY,aAAa,KAAA,CAAM,UAAU,CAAA,EAAE,GAC7C;AAAC,KACP;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,KAAA;AAAA,IACA,IAAA;AAAA,IACA,SAAA,EAAY,QAAQ,SAAA,IAAa,kBAAA;AAAA,IAIjC,YAAA,EAAe,QAAQ,YAAA,IAAgB,qBAAA;AAAA,IAIvC,OAAA,EAAU,QAAQ,OAAA,IAAsB,eAAA;AAAA,IACxC,KAAA,EAAQ,QAAQ,KAAA,IAAS;AAAA,GAC3B;AACF;;;AChGA,SAAS,iBAAiB,MAAA,EAA0C;AAClE,EAAA,OAAO,MAAA,CAAO,KAAA,IAAS,IAAA,IAAQ,OAAO,OAAO,KAAA,KAAU,QAAA;AACzD;AAMA,SAAS,wBAAA,CACP,EAAA,EACA,IAAA,EACA,MAAA,EACiB;AACjB,EAAA,MAAM,EAAA,GAAK,UAAA;AAAA,IACT,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,UAAA,IAAc,cAAA,CAAe;AAAA,GACrD;AACA,EAAA,MAAM,EAAA,GAAK,UAAA;AAAA,IACT,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,UAAA,IAAc,cAAA,CAAe;AAAA,GACrD;AACA,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,MAAA,CAAO,OAAA,IAAW,eAAe,OAAO,CAAA;AACnE,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,MAAA,CAAO,SAAA,IAAa,eAAe,SAAS,CAAA;AACzE,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,MAAA,CAAO,MAAA,IAAU,eAAe,MAAM,CAAA;AAChE,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,MAAA,CAAO,KAAA,IAAS,eAAe,KAAK,CAAA;AAC7D,EAAA,MAAM,WAAA,GAAc,UAAA;AAAA,IAClB,MAAA,CAAO,eAAe,cAAA,CAAe;AAAA,GACvC;AACA,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd,MAAA,CAAO,mBAAmB,cAAA,CAAe;AAAA,GAC3C;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,OAAO,EAAE,CAAA;AAAA,IACb,IAAA;AAAA,IACA,KAAA,EAAO;AAAA,MACL,UAAA,EAAY,EAAE,IAAA,EAAM,EAAA,EAAI,YAAY,EAAA,EAAG;AAAA,MACvC,UAAA,EAAY,EAAE,IAAA,EAAM,EAAA,EAAI,YAAY,EAAA,EAAG;AAAA,MACvC,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,OAAA;AAAA,QACN,UAAA,EAAY,kBAAA,CAAmB,EAAA,EAAI,OAAO;AAAA,OAC5C;AAAA,MACA,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,SAAA;AAAA,QACN,UAAA,EAAY,kBAAA,CAAmB,EAAA,EAAI,SAAS;AAAA,OAC9C;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,MAAA;AAAA,QACN,UAAA,EAAY,kBAAA,CAAmB,EAAA,EAAI,MAAM;AAAA,OAC3C;AAAA,MACA,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA,EAAO,YAAY,OAAA,EAAQ;AAAA,MAC1C,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,WAAA;AAAA,QACN,UAAA,EAAY,kBAAA,CAAmB,EAAA,EAAI,WAAW;AAAA;AAChD,KACF;AAAA,IACA,MAAM,EAAC;AAAA,IACP,SAAA,EAAW;AAAA,MACT,UAAA,EAAY,MAAA,CAAO,UAAA,IAAc,kBAAA,CAAmB,UAAA;AAAA,MACpD,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,kBAAA,CAAmB,KAAA;AAAA,MAC1C,OAAA,EAAS,MAAA,CAAO,OAAA,IAAW,kBAAA,CAAmB,OAAA;AAAA,MAC9C,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,kBAAA,CAAmB,KAAA;AAAA,MAC1C,UAAA,EAAY,MAAA,CAAO,UAAA,IAAc,kBAAA,CAAmB,UAAA;AAAA,MACpD,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,kBAAA,CAAmB;AAAA,KAC5C;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,MAAA,EAAQ,MAAA,CAAO,UAAA,IAAc,qBAAA,CAAsB,MAAA;AAAA,MACnD,IAAA,EAAM,MAAA,CAAO,QAAA,IAAY,qBAAA,CAAsB;AAAA,KACjD;AAAA,IACA,OAAA,EAAS,OAAO,aAAA,IAAiB,eAAA;AAAA,IACjC,KAAA,EAAO;AAAA,MACL,KAAA,EAAO,MAAA,CAAO,WAAA,IAAe,aAAA,CAAc,KAAA;AAAA,MAC3C,MAAA,EAAQ,MAAA,CAAO,YAAA,IAAgB,aAAA,CAAc,MAAA;AAAA,MAC7C,KAAA,EAAO,MAAA,CAAO,WAAA,IAAe,aAAA,CAAc,KAAA;AAAA,MAC3C,UAAA,EAAY,MAAA,CAAO,gBAAA,IAAoB,aAAA,CAAc;AAAA;AACvD,GACF;AACF;AAMO,SAAS,qBAAqB,KAAA,EAAqC;AACxE,EAAA,MAAM,MAAA,GAAU,KAAA,CAAM,MAAA,IAAU,EAAC;AAEjC,EAAA,IAAI,gBAAA,CAAiB,MAAM,CAAA,EAAG;AAC5B,IAAA,OAAO,gBAAA,CAAiB;AAAA,MACtB,GAAG,MAAA;AAAA,MACH,EAAA,EAAI,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA;AAAA,MACnB,IAAA,EAAM,MAAM,IAAA,IAAQ;AAAA,KACrB,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,wBAAA;AAAA,IACL,KAAA,CAAM,EAAA;AAAA,IACN,MAAM,IAAA,IAAQ,gBAAA;AAAA,IACd;AAAA,GACF;AACF;AAMO,SAAS,gBAAgB,MAAA,EAA0C;AACxE,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC/B,IAAA,IAAI;AACF,MAAA,OAAO,CAAC,oBAAA,CAAqB,KAAK,CAAC,CAAA;AAAA,IACrC,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,iCAAA,EAAoC,KAAA,CAAM,EAAE,KAAK,KAAK,CAAA;AACpE,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF,CAAC,CAAA;AACH;AAMO,SAAS,iBAAiB,MAAA,EAA2C;AAC1E,EAAA,MAAM,MAAA,GAAS,OAAO,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,MAAM,CAAA,IAAK,MAAA,CAAO,CAAC,CAAA;AACvD,EAAA,OAAO,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA,GAAI,MAAA;AACtC;;;AClJA,IAAM,YAAA,GAAe,cAAA;AAQd,SAAS,UAAA,CACd,OACA,OAAA,EACM;AACN,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AAErC,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,YAAY,CAAA,EAAG,MAAM,EAAE,CAAA,CAAA;AAC1C,IAAA,IAAI,EAAA,GAAK,QAAA,CAAS,cAAA,CAAe,OAAO,CAAA;AAExC,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,EAAA,GAAK,QAAA,CAAS,cAAc,OAAO,CAAA;AACnC,MAAA,EAAA,CAAG,EAAA,GAAK,OAAA;AACR,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,EAAE,CAAA;AAAA,IAC9B;AAEA,IAAA,EAAA,CAAG,WAAA,GAAc,gBAAA,CAAiB,KAAA,EAAO,OAAO,CAAA;AAAA,EAClD,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,+BAAA,EAAkC,KAAA,CAAM,EAAE,MAAM,KAAK,CAAA;AAAA,EACrE;AACF;AAGO,SAAS,YAAY,OAAA,EAAuB;AACjD,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,EAAA,QAAA,CAAS,eAAe,CAAA,EAAG,YAAY,GAAG,OAAO,CAAA,CAAE,GAAG,MAAA,EAAO;AAC/D;AAGO,SAAS,eAAA,GAAwB;AACtC,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,EAAA,QAAA,CACG,gBAAA,CAAiB,CAAA,WAAA,EAAc,YAAY,CAAA,EAAA,CAAI,CAAA,CAC/C,QAAQ,CAAC,EAAA,KAAO,EAAA,CAAG,MAAA,EAAQ,CAAA;AAChC","file":"index.js","sourcesContent":["import type Color from \"colorjs.io\";\n\n// Semantic color names - matches rep-widgets tailwind.config.ts and field-types.ts\nexport const SEMANTIC_COLOR_NAMES = [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"destructive\",\n] as const;\nexport type SemanticColorName = (typeof SEMANTIC_COLOR_NAMES)[number];\n\nexport const SHADE_STEPS = [\n 100, 200, 300, 400, 500, 600, 700, 800, 900,\n] as const;\nexport type ShadeStep = (typeof SHADE_STEPS)[number];\n\nexport const FONT_SIZE_KEYS = [\n \"extraSmall\",\n \"small\",\n \"regular\",\n \"large\",\n \"extraLarge\",\n \"giant\",\n] as const;\nexport type FontSizeKey = (typeof FONT_SIZE_KEYS)[number];\n\nexport const FONT_FAMILY_KEYS = [\"header\", \"body\"] as const;\nexport type FontFamilyKey = (typeof FONT_FAMILY_KEYS)[number];\n\nexport const RADIUS_KEYS = [\"small\", \"medium\", \"large\", \"extraLarge\"] as const;\nexport type RadiusKey = (typeof RADIUS_KEYS)[number];\n\n/** Author-time color input (what the user configures) */\nexport interface ThemeColorInput {\n base: Color;\n foreground: Color;\n}\n\n/** Complete theme definition — stored in-memory with Color objects */\nexport interface ThemeDefinition {\n id: string;\n name: string;\n /** Light mode — always fully specified */\n light: Record<SemanticColorName, ThemeColorInput>;\n /**\n * Dark mode — only user-overridden colors.\n * Missing keys are auto-derived from `light` at resolve time.\n */\n dark: Partial<Record<SemanticColorName, Partial<ThemeColorInput>>>;\n fontSizes: Record<FontSizeKey, string>;\n fontFamilies: Record<FontFamilyKey, string>;\n spacing: string;\n radii: Record<RadiusKey, string>;\n}\n\n/** Resolved semantic color with generated shade ramp */\nexport interface ResolvedSemanticColor {\n base: Color;\n foreground: Color;\n shades: Record<ShadeStep, Color>;\n}\n\n/** Complete resolved color set for one mode */\nexport type ResolvedColorSet = Record<SemanticColorName, ResolvedSemanticColor>;\n\n/** Fully resolved theme — all colors materialised for both modes */\nexport interface ResolvedTheme {\n id: string;\n name: string;\n light: ResolvedColorSet;\n dark: ResolvedColorSet;\n fontSizes: ThemeDefinition[\"fontSizes\"];\n fontFamilies: ThemeDefinition[\"fontFamilies\"];\n spacing: string;\n radii: ThemeDefinition[\"radii\"];\n}\n\n/** Plain OKLCH triplet for JSON serialisation (no Color dependency) */\nexport interface OklchPlain {\n l: number;\n c: number;\n h: number;\n}\n\n/** Serialised color pair as stored in the backend payload */\nexport interface ThemeColorPlain {\n base: OklchPlain;\n foreground: OklchPlain;\n}\n\n/** Backend payload — plain JSON, no Color objects */\nexport interface ThemePayload {\n [key: string]: unknown;\n id: string;\n name: string;\n light: Record<SemanticColorName, ThemeColorPlain>;\n dark: Partial<\n Record<SemanticColorName, { base?: OklchPlain; foreground?: OklchPlain }>\n >;\n fontSizes: Record<FontSizeKey, string>;\n fontFamilies: Record<FontFamilyKey, string>;\n spacing: string;\n radii: Record<RadiusKey, string>;\n}\n","import Color from \"colorjs.io\";\nimport {\n SEMANTIC_COLOR_NAMES,\n SHADE_STEPS,\n type SemanticColorName,\n type ShadeStep,\n type ThemeColorInput,\n type ThemeDefinition,\n type ResolvedColorSet,\n type ResolvedTheme,\n} from \"./types\";\n\n/**\n * Attempt to convert any string into a Color using colorjs.io.\n * If the string is exactly 6 characters it is assumed to be a bare hex value\n * (e.g. \"3b82f6\") and a \"#\" prefix is added before parsing.\n *\n * @returns the parsed Color, or a neutral gray (`oklch(0.5 0 0)`) on failure\n */\nexport function parseColor(value: string): Color {\n if (value.length === 6) {\n value = `#${value}`;\n }\n try {\n return new Color(value);\n } catch (error) {\n console.warn(\"[theme] Failed to parse color:\", value, error);\n return new Color(\"oklch\", [0.5, 0, 0]);\n }\n}\n\n/**\n * Returns either the original foreground or a corrected lightness variant,\n * whichever provides better contrast against `color`.\n * Inversion triggers when the APCA contrast is below 50.\n */\nexport function getForegroundColor(foreground: Color, color: Color): Color {\n if (foreground.oklch.l == null || color.oklch.l == null) {\n return foreground;\n }\n const contrast = color.contrastAPCA(foreground);\n\n if (contrast < 50) {\n return new Color(\"oklch\", [\n color.oklch.l < 0.7 ? 0.95 : 0.15,\n foreground.oklch.c || 0,\n foreground.oklch.h || 0,\n ]);\n }\n return foreground;\n}\n\n/**\n * Generate a 100–900 shade ramp from a base color.\n * Base anchors at 500. Light shades (100–400) step toward white,\n * dark shades (600–900) step toward black. Dark steps use an asymmetric\n * multiplier (1.6×, 1.875×, 3×, 4× of `darkStep`) for a more gradual\n * initial descent. Chroma is nudged per step for perceptually natural ramps.\n */\nexport function generateShades(base: Color): Record<ShadeStep, Color> {\n const l = base.oklch.l ?? 0;\n const c = base.oklch.c ?? 0;\n const h = base.oklch.h ?? 0;\n\n const safeMax = l >= 0.885 ? 0.995 : 0.97;\n const safeMin = l <= 0.33 ? 0 : 0.21;\n\n const lightStep = (safeMax - l) / 5;\n const darkStep = -(l - safeMin) / 8;\n\n const shade = (lDelta: number, cDelta: number): Color => {\n return new Color(\"oklch\", [\n Math.max(0, Math.min(1, l + lDelta)),\n c <= 0.001 ? c : Math.max(0, c + cDelta),\n h,\n ]);\n };\n\n return {\n 100: shade(5 * lightStep, -0.00375),\n 200: shade(4 * lightStep, -0.00375),\n 300: shade(3 * lightStep, -0.00375),\n 400: shade(2 * lightStep, -0.00375),\n 500: new Color(\"oklch\", [l, c, h]),\n 600: shade(1.6 * darkStep, 0.025),\n 700: shade(1.875 * 2 * darkStep, 0.05),\n 800: shade(3 * 2 * darkStep, 0.075),\n 900: shade(4 * 2 * darkStep, 0.1),\n };\n}\n\n// ── Dark Mode Derivation ────────────────────────────────────────────\n//\n// Dark-mode colors are derived from their light counterparts by adjusting\n// OKLCH lightness and optionally scaling chroma. Neutral slots (background,\n// foreground, muted) use fixed lightness values while chromatic slots\n// (primary, secondary, accent, destructive) invert lightness around 0.5.\n\nconst DARK_DERIVATION_CONFIG: Record<\n SemanticColorName,\n {\n baseLightness: number | \"invert\";\n fgLightness: number | \"invert\";\n chromaScale?: number;\n }\n> = {\n background: { baseLightness: 0.15, fgLightness: 0.93 },\n foreground: { baseLightness: 0.93, fgLightness: 0.15 },\n muted: { baseLightness: 0.22, fgLightness: 0.75 },\n primary: { baseLightness: \"invert\", fgLightness: 0.95, chromaScale: 0.9 },\n secondary: { baseLightness: \"invert\", fgLightness: 0.93, chromaScale: 0.85 },\n accent: { baseLightness: \"invert\", fgLightness: 0.95, chromaScale: 0.9 },\n destructive: {\n baseLightness: \"invert\",\n fgLightness: 0.95,\n chromaScale: 0.95,\n },\n};\n\n/** Invert OKLCH lightness (1 - l), clamped to [0.35, 0.75] to avoid extremes. */\nfunction invertLightness(l: number): number {\n const inverted = 1 - l;\n return Math.max(0.35, Math.min(0.75, inverted));\n}\n\n/**\n * Derive a dark-mode ThemeColorInput from its light-mode counterpart.\n */\nexport function deriveDarkVariant(\n name: SemanticColorName,\n light: ThemeColorInput,\n): ThemeColorInput {\n const config = DARK_DERIVATION_CONFIG[name];\n const chromaScale = config.chromaScale ?? 1;\n\n const baseLightness =\n config.baseLightness === \"invert\"\n ? invertLightness(light.base.oklch.l ?? 0)\n : config.baseLightness;\n\n const fgLightness =\n config.fgLightness === \"invert\"\n ? invertLightness(light.foreground.oklch.l ?? 0)\n : config.fgLightness;\n\n return {\n base: new Color(\"oklch\", [\n baseLightness,\n (light.base.oklch.c || 0) * chromaScale,\n light.base.oklch.h || 0,\n ]),\n foreground: new Color(\"oklch\", [\n fgLightness,\n (light.foreground.oklch.c || 0) * chromaScale,\n light.foreground.oklch.h || 0,\n ]),\n };\n}\n\n// ── Dark Mode Merge ─────────────────────────────────────────────────\n\n/**\n * Merge auto-derived dark colors with any user-specified overrides.\n * For each semantic color, if the user has fully overridden both base and\n * foreground those are used; otherwise the missing channels are derived.\n */\nexport function mergeDarkOverrides(\n def: ThemeDefinition,\n): Record<SemanticColorName, ThemeColorInput> {\n const darkColors = {} as Record<SemanticColorName, ThemeColorInput>;\n\n for (const name of SEMANTIC_COLOR_NAMES) {\n const lightInput = def.light[name];\n const darkOverride = def.dark[name];\n\n if (darkOverride?.base && darkOverride?.foreground) {\n darkColors[name] = darkOverride as ThemeColorInput;\n } else if (darkOverride) {\n const base =\n darkOverride.base ?? deriveDarkVariant(name, lightInput).base;\n darkColors[name] = {\n base: base,\n foreground:\n darkOverride.foreground ??\n getForegroundColor(def.light.foreground.base, base),\n };\n } else {\n darkColors[name] = deriveDarkVariant(name, lightInput);\n }\n }\n\n return darkColors;\n}\n\n// ── Theme Resolution ────────────────────────────────────────────────\n\nfunction resolveColorSet(\n colors: Record<SemanticColorName, ThemeColorInput>,\n): ResolvedColorSet {\n const resolved = {} as ResolvedColorSet;\n\n for (const name of SEMANTIC_COLOR_NAMES) {\n const input = colors[name];\n const shades = generateShades(input.base);\n const resolvedShades = {} as Record<ShadeStep, Color>;\n\n for (const step of SHADE_STEPS) {\n resolvedShades[step] = shades[step];\n }\n\n resolved[name] = {\n base: input.base.clone(),\n foreground: input.foreground.clone(),\n shades: resolvedShades,\n };\n }\n\n return resolved;\n}\n\n/**\n * Resolve a ThemeDefinition into a complete ResolvedTheme.\n * Dark mode colors are derived from light where not overridden.\n */\nexport function resolveTheme(def: ThemeDefinition): ResolvedTheme {\n return {\n id: def.id,\n name: def.name,\n light: resolveColorSet(def.light),\n dark: resolveColorSet(mergeDarkOverrides(def)),\n fontSizes: { ...def.fontSizes },\n fontFamilies: { ...def.fontFamilies },\n spacing: def.spacing,\n radii: { ...def.radii },\n };\n}\n","import { SHADE_STEPS, type SemanticColorName, type ShadeStep } from \"./types\";\n\n/**\n * Specific overrides, otherwise all the overrides are generated using emitTailwindOverrides\n */\nconst OVERRIDES: Partial<Record<string, string>> = {\n \"--color-gray-50\": \"var(--color-muted)\",\n \"--color-gray-100\": \"var(--color-muted-600)\",\n \"--color-gray-200\": \"var(--color-border)\",\n} as const;\n\n/**\n * Returns the inverted shade for dark mode foreground colors.\n * In dark mode, light shades (50, 100) should map to dark values (950, 900) and vice versa.\n */\nfunction getInvertedStep(shade: ShadeStep): ShadeStep {\n const shadeIndex = SHADE_STEPS.indexOf(shade);\n const invertedIndex = SHADE_STEPS.length - 1 - shadeIndex;\n return SHADE_STEPS[invertedIndex] || 500;\n}\n\n/**\n * Map semantic colors to Tailwind built-in color names.\n */\nexport function emitTailwindOverrides(darkMode: boolean = false): string[] {\n const TAILWIND_COLOR_MAP: Record<string, SemanticColorName> = {\n gray: \"foreground\",\n red: \"destructive\",\n blue: \"primary\",\n green: \"accent\",\n };\n\n const TAILWIND_SHADES = [\n 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950,\n ] as const;\n const SHADE_REMAP: Partial<Record<number, ShadeStep>> = {\n 50: 100,\n 950: 900,\n };\n\n const lines: string[] = [];\n for (const [twName, semantic] of Object.entries(TAILWIND_COLOR_MAP)) {\n for (const shade of TAILWIND_SHADES) {\n const step = (SHADE_REMAP[shade] ?? shade) as ShadeStep;\n const override = OVERRIDES[`--color-${twName}-${shade}`];\n lines.push(\n `--color-${twName}-${shade}: ${override ? override : `var(--color-${semantic}-${semantic === \"foreground\" && darkMode === true ? getInvertedStep(step) : step})`};`,\n );\n }\n }\n\n lines.push(\"--color-white: var(--color-background);\");\n lines.push(\"--color-black: var(--color-foreground);\");\n\n return lines;\n}\n","import { emitTailwindOverrides } from \"./tailwind-overrides\";\nimport {\n SEMANTIC_COLOR_NAMES,\n SHADE_STEPS,\n FONT_SIZE_KEYS,\n FONT_FAMILY_KEYS,\n RADIUS_KEYS,\n type ResolvedColorSet,\n type ResolvedTheme,\n} from \"./types\";\n\nfunction colorToCSS(color: import(\"colorjs.io\").default): string {\n const result = color.toString({ format: \"oklch\" });\n if (result.includes(\"NaN\")) {\n console.warn(\n \"[theme] colorToCSS produced NaN, using neutral fallback:\",\n result,\n );\n return \"oklch(0.5 0 0)\";\n }\n return result;\n}\n\nfunction camelToKebab(str: string): string {\n return str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\n/**\n * Emit --color-{name}, --color-{name}-foreground, --color-{name}-{shade} vars.\n * Uses --color- prefix to match rep-widgets/tailwind.config.ts.\n */\nfunction emitColorVars(colors: ResolvedColorSet): string[] {\n const lines: string[] = [];\n\n for (const name of SEMANTIC_COLOR_NAMES) {\n const color = colors[name];\n lines.push(`--color-${name}: ${colorToCSS(color.base)};`);\n lines.push(`--color-${name}-foreground: ${colorToCSS(color.foreground)};`);\n for (const step of SHADE_STEPS) {\n lines.push(`--color-${name}-${step}: ${colorToCSS(color.shades[step])};`);\n }\n }\n\n return lines;\n}\n\n/**\n * Emit non-color CSS variables (font sizes, families, spacing, radii).\n */\nfunction emitNonColorVars(theme: ResolvedTheme): string[] {\n const lines: string[] = [];\n for (const key of FONT_SIZE_KEYS) {\n lines.push(`--font-size-${camelToKebab(key)}: ${theme.fontSizes[key]};`);\n }\n for (const key of FONT_FAMILY_KEYS) {\n lines.push(`--font-${key}: ${theme.fontFamilies[key]};`);\n }\n lines.push(`--spacing: ${theme.spacing};`);\n for (const key of RADIUS_KEYS) {\n lines.push(`--radius-${camelToKebab(key)}: ${theme.radii[key]};`);\n }\n return lines;\n}\n\n/**\n * Static CSS alias variables that bridge theme var names to Tailwind/component conventions.\n * These are always emitted and not mode-dependent.\n */\nconst globalCSSOverride = [\n \"--color-background-foreground: var(--color-foreground);\",\n \"--color-foreground-foreground: var(--color-background);\",\n ...SEMANTIC_COLOR_NAMES.map((value) => `--${value}: var(--color-${value});`),\n ...SEMANTIC_COLOR_NAMES.map(\n (value) => `--${value}-foreground: var(--color-${value}-foreground);`,\n ),\n\n \"--sidebar-ring: var(--color-primary);\",\n \"--sidebar-border: var(--color-border);\",\n \"--sidebar-accent-foreground: var(--color-accent-foreground);\",\n \"--sidebar-accent: var(--color-accent);\",\n \"--sidebar-primary-foreground: var(--color-primary-foreground);\",\n \"--sidebar-primary: var(--color-primary);\",\n \"--sidebar-foreground: var(--color-muted-foreground);\",\n \"--sidebar: var(--color-muted);\",\n \"--border: var(--color-background-600);\",\n \"--ring: var(--color-primary);\",\n \"--popover: var(--color-background);\",\n \"--popover-foreground: var(--color-foreground);\",\n \"--card: var(--color-muted);\",\n \"--card-foreground: var(--color-muted-foreground);\",\n\n \"--radius-sm: var(--radius-small);\",\n \"--radius-md: var(--radius-medium);\",\n \"--radius-lg: var(--radius-large);\",\n \"--radius-xl: var(--radius-extra-large);\",\n \"--text-xs: var(--font-size-extra-small);\",\n \"--text-sm: var(--font-size-small);\",\n \"--text-base: var(--font-size-regular);\",\n \"--text-lg: var(--font-size-large);\",\n \"--text-xl: var(--font-size-extra-large);\",\n \"--text-2xl: var(--font-size-giant);\",\n \"--font-sans: var(--font-body);\",\n // Tailwind's font-mono is repurposed as the display/header font\n \"--font-mono: var(--font-header);\",\n];\n\n/**\n * Overrides for global tailwindcss for specifically dark mode.\n */\nconst globalDarkCSSOverride = [\"--border: var(--color-background-400);\"];\n\nexport interface GenerateThemeCSSOptions {\n /** Whether or not to allow prefers-color-scheme to choose the theme mode */\n disableAutoTheme?: boolean;\n /** Whether to emit Tailwind built-in color overrides (default true) */\n mapTailwindColors?: boolean;\n}\n\n/**\n * Generate a complete CSS string for a resolved theme.\n * Outputs 2–3 blocks: light default, dark explicit via `[data-theme-mode=\"dark\"]`,\n * and (unless `disableAutoTheme`) a `prefers-color-scheme: dark` media query block.\n */\nexport function generateThemeCSS(\n theme: ResolvedTheme,\n options: GenerateThemeCSSOptions = {},\n): string {\n const sel = `[data-theme=\"${theme.id}\"]`;\n const tw = options.mapTailwindColors ?? true;\n const blocks: string[] = [];\n\n // Light mode (default)\n blocks.push(`${sel} {`);\n blocks.push(...globalCSSOverride);\n blocks.push(...emitNonColorVars(theme));\n blocks.push(...emitColorVars(theme.light));\n if (tw) blocks.push(...emitTailwindOverrides());\n blocks.push(`}`);\n\n // Dark mode: explicit via attribute\n blocks.push(`${sel}[data-theme-mode=\"dark\"] {`);\n blocks.push(...globalDarkCSSOverride);\n blocks.push(...emitColorVars(theme.dark));\n if (tw) blocks.push(...emitTailwindOverrides(true));\n blocks.push(`}`);\n\n // Dark mode: auto via system preference\n if (!options.disableAutoTheme) {\n blocks.push(`@media (prefers-color-scheme: dark) {`);\n blocks.push(`${sel}:not([data-theme-mode]) {`);\n blocks.push(...globalDarkCSSOverride);\n blocks.push(...emitColorVars(theme.dark).map((l) => `${l}`));\n if (tw) blocks.push(...emitTailwindOverrides(true).map((l) => `${l}`));\n blocks.push(`}`);\n blocks.push(`}`);\n }\n\n return blocks.join(\"\\n\");\n}\n","import Color from \"colorjs.io\";\nimport type {\n FontSizeKey,\n FontFamilyKey,\n RadiusKey,\n ThemeDefinition,\n} from \"./types\";\nimport { getForegroundColor } from \"./color-engine\";\n\n// ── Non-color defaults ──────────────────────────────────────────────\n\nexport const DEFAULT_FONT_SIZES: Record<FontSizeKey, string> = {\n extraSmall: \"0.75rem\",\n small: \"0.875rem\",\n regular: \"1rem\",\n large: \"1.125rem\",\n extraLarge: \"1.25rem\",\n giant: \"1.5rem\",\n};\n\nexport const DEFAULT_FONT_FAMILIES: Record<FontFamilyKey, string> = {\n header: \"var(--font-inter)\",\n body: \"var(--font-inter)\",\n};\n\nexport const DEFAULT_SPACING = \"0.25rem\";\n\nexport const DEFAULT_RADII: Record<RadiusKey, string> = {\n small: \"0.25rem\",\n medium: \"0.5rem\",\n large: \"0.75rem\",\n extraLarge: \"1rem\",\n};\n\n// ── Default colors (hex) ────────────────────────────────────────────\n\nexport const DEFAULT_COLORS = {\n background: \"#ffffff\",\n foreground: \"#1a1a1a\",\n primary: \"#3b82f6\",\n secondary: \"#6b7280\",\n accent: \"#10b981\",\n muted: \"#f3f4f6\",\n destructive: \"#ef4444\",\n mutedForeground: \"#6b7280\",\n} as const;\n\n// ── Default theme identity ──────────────────────────────────────────\n\nexport const DEFAULT_THEME_ID = \"default\";\nexport const DEFAULT_THEME_NAME = \"Default Theme\";\n\n// ── Factory ─────────────────────────────────────────────────────────\n\n/**\n * Build a fresh ThemeDefinition populated with all defaults.\n * Returns a new object each call because Color instances are mutable — do not cache the result.\n */\nexport function getDefaultThemeDefinition(): ThemeDefinition {\n const bg = new Color(DEFAULT_COLORS.background);\n const fg = new Color(DEFAULT_COLORS.foreground);\n const primary = new Color(DEFAULT_COLORS.primary);\n const secondary = new Color(DEFAULT_COLORS.secondary);\n const accent = new Color(DEFAULT_COLORS.accent);\n const muted = new Color(DEFAULT_COLORS.muted);\n const destructive = new Color(DEFAULT_COLORS.destructive);\n const mutedFg = new Color(DEFAULT_COLORS.mutedForeground);\n\n const darkBg = new Color(\"#0a0a0a\");\n const darkFg = new Color(\"#fafafa\");\n const darkMuted = new Color(\"#171717\");\n const darkMutedForeground = new Color(\"#dddddd\");\n\n return {\n id: DEFAULT_THEME_ID,\n name: DEFAULT_THEME_NAME,\n light: {\n background: { base: bg, foreground: fg },\n foreground: { base: fg, foreground: bg },\n primary: {\n base: primary,\n foreground: getForegroundColor(fg, primary),\n },\n secondary: {\n base: secondary,\n foreground: getForegroundColor(fg, secondary),\n },\n accent: {\n base: accent,\n foreground: getForegroundColor(fg, accent),\n },\n muted: { base: muted, foreground: mutedFg },\n destructive: {\n base: destructive,\n foreground: getForegroundColor(fg, destructive),\n },\n },\n dark: {\n background: { base: darkBg, foreground: darkFg },\n foreground: { base: darkFg, foreground: darkBg },\n muted: { base: darkMuted, foreground: darkMutedForeground },\n },\n fontSizes: { ...DEFAULT_FONT_SIZES },\n fontFamilies: { ...DEFAULT_FONT_FAMILIES },\n spacing: DEFAULT_SPACING,\n radii: { ...DEFAULT_RADII },\n };\n}\n","import Color from \"colorjs.io\";\nimport {\n SEMANTIC_COLOR_NAMES,\n type SemanticColorName,\n type ThemeColorInput,\n type ThemeDefinition,\n type ThemePayload,\n type OklchPlain,\n type FontSizeKey,\n type FontFamilyKey,\n type RadiusKey,\n} from \"./types\";\nimport {\n DEFAULT_FONT_SIZES,\n DEFAULT_FONT_FAMILIES,\n DEFAULT_SPACING,\n DEFAULT_RADII,\n getDefaultThemeDefinition,\n} from \"./defaults\";\n\nfunction colorToPlain(color: Color): OklchPlain {\n return {\n l: color.oklch.l ?? 0,\n c: color.oklch.c ?? 0,\n h: color.oklch.h ?? 0,\n };\n}\n\nfunction plainToColor(plain: OklchPlain): Color {\n return new Color(\"oklch\", [plain.l, plain.c, plain.h]);\n}\n\n/**\n * Serialise a ThemeDefinition (with Color objects) to a plain JSON payload\n * suitable for backend storage.\n */\nexport function serialiseTheme(def: ThemeDefinition): ThemePayload {\n const light = {} as ThemePayload[\"light\"];\n for (const name of SEMANTIC_COLOR_NAMES) {\n light[name] = {\n base: colorToPlain(def.light[name].base),\n foreground: colorToPlain(def.light[name].foreground),\n };\n }\n\n const dark: ThemePayload[\"dark\"] = {};\n for (const [name, value] of Object.entries(def.dark)) {\n if (!value) continue;\n dark[name as SemanticColorName] = {\n ...(value.base ? { base: colorToPlain(value.base) } : {}),\n ...(value.foreground\n ? { foreground: colorToPlain(value.foreground) }\n : {}),\n };\n }\n\n return {\n id: def.id,\n name: def.name,\n light,\n dark,\n fontSizes: { ...def.fontSizes },\n fontFamilies: { ...def.fontFamilies },\n spacing: def.spacing,\n radii: { ...def.radii },\n };\n}\n\n/**\n * Deserialise a backend payload into a ThemeDefinition with Color objects.\n * Accepts `Record<string, unknown>` because API data is untyped at the boundary.\n * Falls back to default colors for any missing light-mode entries.\n */\nexport function deserialiseTheme(\n payload: Record<string, unknown>,\n): ThemeDefinition {\n const lightRaw = ((payload.light as Record<string, unknown> | undefined) ??\n {}) as Record<string, { base: OklchPlain; foreground: OklchPlain }>;\n const darkRaw = ((payload.dark as Record<string, unknown> | undefined) ??\n {}) as Record<string, { base?: OklchPlain; foreground?: OklchPlain }>;\n\n const defaults = getDefaultThemeDefinition();\n const light = {} as Record<SemanticColorName, ThemeColorInput>;\n for (const name of SEMANTIC_COLOR_NAMES) {\n const entry = lightRaw[name];\n if (entry) {\n light[name] = {\n base: plainToColor(entry.base),\n foreground: plainToColor(entry.foreground),\n };\n } else {\n console.warn(\n `[theme] deserialiseTheme: missing light color \"${name}\", using default`,\n );\n light[name] = defaults.light[name];\n }\n }\n\n const dark: Partial<Record<SemanticColorName, Partial<ThemeColorInput>>> = {};\n for (const [name, value] of Object.entries(darkRaw)) {\n if (!value) continue;\n dark[name as SemanticColorName] = {\n ...(value.base ? { base: plainToColor(value.base) } : {}),\n ...(value.foreground\n ? { foreground: plainToColor(value.foreground) }\n : {}),\n };\n }\n\n return {\n id: payload.id as string,\n name: payload.name as string,\n light,\n dark,\n fontSizes: (payload.fontSizes ?? DEFAULT_FONT_SIZES) as Record<\n FontSizeKey,\n string\n >,\n fontFamilies: (payload.fontFamilies ?? DEFAULT_FONT_FAMILIES) as Record<\n FontFamilyKey,\n string\n >,\n spacing: (payload.spacing as string) ?? DEFAULT_SPACING,\n radii: (payload.radii ?? DEFAULT_RADII) as Record<RadiusKey, string>,\n };\n}\n","/**\n * Theme Transforms\n * Convert raw API theme objects to ThemeDefinition format.\n * Handles both new structured format (OKLCH) and legacy flat format (hex strings).\n */\n\nimport type { ThemeDefinition } from \"./types\";\nimport { deserialiseTheme } from \"./serialisation\";\nimport { parseColor, getForegroundColor } from \"./color-engine\";\nimport {\n DEFAULT_COLORS,\n DEFAULT_FONT_SIZES,\n DEFAULT_FONT_FAMILIES,\n DEFAULT_SPACING,\n DEFAULT_RADII,\n} from \"./defaults\";\n\n/** Shape of a raw theme from the FluidOS API */\nexport interface RawApiTheme {\n id: number;\n config?: Record<string, unknown> | null;\n active?: boolean | null;\n name?: string | null;\n}\n\n/**\n * Check if a theme config uses the new structured format (has a `light` key\n * that is an object) vs the legacy flat format.\n */\nfunction isNewThemeFormat(config: Record<string, unknown>): boolean {\n return config.light != null && typeof config.light === \"object\";\n}\n\n/**\n * Convert a legacy flat config to a ThemeDefinition.\n * Legacy format: { base: \"#fff\", text: \"#000\", primary: \"oklch(0.6 0.2 250)\", ... }\n */\nfunction legacyConfigToDefinition(\n id: number,\n name: string,\n config: Record<string, string>,\n): ThemeDefinition {\n const bg = parseColor(\n config.base ?? config.background ?? DEFAULT_COLORS.background,\n );\n const fg = parseColor(\n config.text ?? config.foreground ?? DEFAULT_COLORS.foreground,\n );\n const primary = parseColor(config.primary ?? DEFAULT_COLORS.primary);\n const secondary = parseColor(config.secondary ?? DEFAULT_COLORS.secondary);\n const accent = parseColor(config.accent ?? DEFAULT_COLORS.accent);\n const muted = parseColor(config.muted ?? DEFAULT_COLORS.muted);\n const destructive = parseColor(\n config.destructive ?? DEFAULT_COLORS.destructive,\n );\n const mutedFg = parseColor(\n config.mutedForeground ?? DEFAULT_COLORS.mutedForeground,\n );\n\n return {\n id: String(id),\n name,\n light: {\n background: { base: bg, foreground: fg },\n foreground: { base: fg, foreground: bg },\n primary: {\n base: primary,\n foreground: getForegroundColor(fg, primary),\n },\n secondary: {\n base: secondary,\n foreground: getForegroundColor(fg, secondary),\n },\n accent: {\n base: accent,\n foreground: getForegroundColor(fg, accent),\n },\n muted: { base: muted, foreground: mutedFg },\n destructive: {\n base: destructive,\n foreground: getForegroundColor(fg, destructive),\n },\n },\n dark: {},\n fontSizes: {\n extraSmall: config.extraSmall ?? DEFAULT_FONT_SIZES.extraSmall,\n small: config.small ?? DEFAULT_FONT_SIZES.small,\n regular: config.regular ?? DEFAULT_FONT_SIZES.regular,\n large: config.large ?? DEFAULT_FONT_SIZES.large,\n extraLarge: config.extraLarge ?? DEFAULT_FONT_SIZES.extraLarge,\n giant: config.giant ?? DEFAULT_FONT_SIZES.giant,\n },\n fontFamilies: {\n header: config.headerFont ?? DEFAULT_FONT_FAMILIES.header,\n body: config.bodyFont ?? DEFAULT_FONT_FAMILIES.body,\n },\n spacing: config.globalSpacing ?? DEFAULT_SPACING,\n radii: {\n small: config.radiusSmall ?? DEFAULT_RADII.small,\n medium: config.radiusMedium ?? DEFAULT_RADII.medium,\n large: config.radiusLarge ?? DEFAULT_RADII.large,\n extraLarge: config.radiusExtraLarge ?? DEFAULT_RADII.extraLarge,\n },\n };\n}\n\n/**\n * Build a ThemeDefinition from a single API theme object.\n * Handles both new structured format and legacy flat format.\n */\nexport function buildThemeDefinition(theme: RawApiTheme): ThemeDefinition {\n const config = (theme.config ?? {}) as Record<string, unknown>;\n\n if (isNewThemeFormat(config)) {\n return deserialiseTheme({\n ...config,\n id: String(theme.id),\n name: theme.name ?? \"Untitled Theme\",\n });\n }\n\n return legacyConfigToDefinition(\n theme.id,\n theme.name ?? \"Untitled Theme\",\n config as Record<string, string>,\n );\n}\n\n/**\n * Transform raw API themes to ThemeDefinition[].\n * Catches and logs errors per theme (graceful degradation).\n */\nexport function transformThemes(themes: RawApiTheme[]): ThemeDefinition[] {\n return themes.flatMap((theme) => {\n try {\n return [buildThemeDefinition(theme)];\n } catch (error) {\n console.error(`[theme] Failed to build theme id=${theme.id}:`, error);\n return [];\n }\n });\n}\n\n/**\n * Get the active theme ID from a list of raw API themes.\n * Falls back to the first theme if none is marked active.\n */\nexport function getActiveThemeId(themes: RawApiTheme[]): string | undefined {\n const active = themes.find((t) => t.active) ?? themes[0];\n return active ? String(active.id) : undefined;\n}\n","import { generateThemeCSS } from \"./css-generator\";\nimport type { ResolvedTheme } from \"./types\";\nimport type { GenerateThemeCSSOptions } from \"./css-generator\";\n\nconst STYLE_PREFIX = \"theme-style-\";\n\n/**\n * Inject or update a `<style>` element in `<head>` for the given theme.\n * The element ID is deterministic (`theme-style-{themeId}`) so repeated calls\n * for the same theme are idempotent — the existing element is updated in place.\n * No-op when `document` is unavailable (SSR).\n */\nexport function applyTheme(\n theme: ResolvedTheme,\n options?: GenerateThemeCSSOptions,\n): void {\n if (typeof document === \"undefined\") return;\n\n try {\n const styleId = `${STYLE_PREFIX}${theme.id}`;\n let el = document.getElementById(styleId) as HTMLStyleElement | null;\n\n if (!el) {\n el = document.createElement(\"style\");\n el.id = styleId;\n document.head.appendChild(el);\n }\n\n el.textContent = generateThemeCSS(theme, options);\n } catch (error) {\n console.error(`[theme] applyTheme failed for \"${theme.id}\":`, error);\n }\n}\n\n/** Remove an injected theme stylesheet. No-op during SSR. */\nexport function removeTheme(themeId: string): void {\n if (typeof document === \"undefined\") return;\n document.getElementById(`${STYLE_PREFIX}${themeId}`)?.remove();\n}\n\n/** Remove all injected theme stylesheets. No-op during SSR. */\nexport function removeAllThemes(): void {\n if (typeof document === \"undefined\") return;\n document\n .querySelectorAll(`style[id^=\"${STYLE_PREFIX}\"]`)\n .forEach((el) => el.remove());\n}\n"]}
@@ -1,72 +1,72 @@
1
1
  'use strict';
2
2
 
3
- var chunk6QLUUNJL_cjs = require('../chunk-6QLUUNJL.cjs');
3
+ var chunkGDY76JA6_cjs = require('../chunk-GDY76JA6.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "BACKGROUND_TYPES", {
8
8
  enumerable: true,
9
- get: function () { return chunk6QLUUNJL_cjs.BACKGROUND_TYPES; }
9
+ get: function () { return chunkGDY76JA6_cjs.BACKGROUND_TYPES; }
10
10
  });
11
11
  Object.defineProperty(exports, "BORDER_RADIUS_OPTIONS", {
12
12
  enumerable: true,
13
- get: function () { return chunk6QLUUNJL_cjs.BORDER_RADIUS_OPTIONS; }
13
+ get: function () { return chunkGDY76JA6_cjs.BORDER_RADIUS_OPTIONS; }
14
14
  });
15
15
  Object.defineProperty(exports, "BUTTON_SIZE_OPTIONS", {
16
16
  enumerable: true,
17
- get: function () { return chunk6QLUUNJL_cjs.BUTTON_SIZE_OPTIONS; }
17
+ get: function () { return chunkGDY76JA6_cjs.BUTTON_SIZE_OPTIONS; }
18
18
  });
19
19
  Object.defineProperty(exports, "COLOR_OPTIONS", {
20
20
  enumerable: true,
21
- get: function () { return chunk6QLUUNJL_cjs.COLOR_OPTIONS; }
21
+ get: function () { return chunkGDY76JA6_cjs.COLOR_OPTIONS; }
22
22
  });
23
23
  Object.defineProperty(exports, "FONT_SIZE_OPTIONS", {
24
24
  enumerable: true,
25
- get: function () { return chunk6QLUUNJL_cjs.FONT_SIZE_OPTIONS; }
25
+ get: function () { return chunkGDY76JA6_cjs.FONT_SIZE_OPTIONS; }
26
26
  });
27
27
  Object.defineProperty(exports, "GAP_OPTIONS", {
28
28
  enumerable: true,
29
- get: function () { return chunk6QLUUNJL_cjs.GAP_OPTIONS; }
29
+ get: function () { return chunkGDY76JA6_cjs.GAP_OPTIONS; }
30
30
  });
31
31
  Object.defineProperty(exports, "HORIZONTAL_ALIGN_OPTIONS", {
32
32
  enumerable: true,
33
- get: function () { return chunk6QLUUNJL_cjs.HORIZONTAL_ALIGN_OPTIONS; }
33
+ get: function () { return chunkGDY76JA6_cjs.HORIZONTAL_ALIGN_OPTIONS; }
34
34
  });
35
35
  Object.defineProperty(exports, "PADDING_VALUES", {
36
36
  enumerable: true,
37
- get: function () { return chunk6QLUUNJL_cjs.PADDING_VALUES; }
37
+ get: function () { return chunkGDY76JA6_cjs.PADDING_VALUES; }
38
38
  });
39
39
  Object.defineProperty(exports, "SECTION_LAYOUT_CONFIG", {
40
40
  enumerable: true,
41
- get: function () { return chunk6QLUUNJL_cjs.SECTION_LAYOUT_CONFIG; }
41
+ get: function () { return chunkGDY76JA6_cjs.SECTION_LAYOUT_CONFIG; }
42
42
  });
43
43
  Object.defineProperty(exports, "VERTICAL_ALIGN_OPTIONS", {
44
44
  enumerable: true,
45
- get: function () { return chunk6QLUUNJL_cjs.VERTICAL_ALIGN_OPTIONS; }
45
+ get: function () { return chunkGDY76JA6_cjs.VERTICAL_ALIGN_OPTIONS; }
46
46
  });
47
47
  Object.defineProperty(exports, "WIDGET_TYPE_NAMES", {
48
48
  enumerable: true,
49
- get: function () { return chunk6QLUUNJL_cjs.WIDGET_TYPE_NAMES; }
49
+ get: function () { return chunkGDY76JA6_cjs.WIDGET_TYPE_NAMES; }
50
50
  });
51
51
  Object.defineProperty(exports, "assertDefined", {
52
52
  enumerable: true,
53
- get: function () { return chunk6QLUUNJL_cjs.assertDefined; }
53
+ get: function () { return chunkGDY76JA6_cjs.assertDefined; }
54
54
  });
55
55
  Object.defineProperty(exports, "assertNever", {
56
56
  enumerable: true,
57
- get: function () { return chunk6QLUUNJL_cjs.assertNever; }
57
+ get: function () { return chunkGDY76JA6_cjs.assertNever; }
58
58
  });
59
59
  Object.defineProperty(exports, "isWidgetType", {
60
60
  enumerable: true,
61
- get: function () { return chunk6QLUUNJL_cjs.isWidgetType; }
61
+ get: function () { return chunkGDY76JA6_cjs.isWidgetType; }
62
62
  });
63
63
  Object.defineProperty(exports, "isWidgetTypeName", {
64
64
  enumerable: true,
65
- get: function () { return chunk6QLUUNJL_cjs.isWidgetTypeName; }
65
+ get: function () { return chunkGDY76JA6_cjs.isWidgetTypeName; }
66
66
  });
67
67
  Object.defineProperty(exports, "sectionLayoutConfig", {
68
68
  enumerable: true,
69
- get: function () { return chunk6QLUUNJL_cjs.sectionLayoutConfig; }
69
+ get: function () { return chunkGDY76JA6_cjs.sectionLayoutConfig; }
70
70
  });
71
71
  //# sourceMappingURL=index.cjs.map
72
72
  //# sourceMappingURL=index.cjs.map
@@ -1,7 +1,11 @@
1
- import { a as WidgetSchema, S as ShareableItem } from '../shareable-item-DPmNZkE1.cjs';
2
- export { T as TypedWidgetSchema, e as WIDGET_TYPE_NAMES, W as WidgetPath, d as WidgetRegistry, b as WidgetType, c as WidgetTypeName, h as assertDefined, g as assertNever, f as isWidgetType, i as isWidgetTypeName } from '../shareable-item-DPmNZkE1.cjs';
3
- export { a as Theme, T as ThemeConfig } from '../theme-DrMUYZTO.cjs';
1
+ import { W as WidgetSchema } from '../widget-schema-36uGUTWL.cjs';
2
+ export { T as TypedWidgetSchema, e as WIDGET_TYPE_NAMES, a as WidgetPath, d as WidgetRegistry, b as WidgetType, c as WidgetTypeName, h as assertDefined, g as assertNever, f as isWidgetType, i as isWidgetTypeName } from '../widget-schema-36uGUTWL.cjs';
3
+ import { T as ThemeDefinition } from '../types-R1kV_DKF.cjs';
4
+ export { R as ResolvedTheme, a as ThemeColorInput, b as ThemePayload } from '../types-R1kV_DKF.cjs';
5
+ import { S as ShareableItem } from '../shareable-item-DkgWpwoU.cjs';
4
6
  import 'react';
7
+ import '../data-sources/types.cjs';
8
+ import 'colorjs.io';
5
9
 
6
10
  /**
7
11
  * Navigation item in the sidebar/menu structure
@@ -45,6 +49,26 @@ interface Navigation {
45
49
  navigation_items: NavigationItem[];
46
50
  screens: ScreenDefinition[];
47
51
  }
52
+ /** A rep app profile — themes, navigation, and definition reference. */
53
+ interface RepAppProfile {
54
+ name: string;
55
+ themes: ThemeDefinition[];
56
+ activeThemeId?: string;
57
+ navigation: Navigation;
58
+ mobile_navigation?: Navigation;
59
+ definition_id: number;
60
+ }
61
+ /** Full rep app data returned by the fluidos API or builder preview. */
62
+ interface RepAppData {
63
+ definition_id: number;
64
+ published_version: number;
65
+ screens: ScreenDefinition[];
66
+ profile: RepAppProfile;
67
+ }
68
+ /** Wrapper for the `/fluid_os/definitions/active` API response. */
69
+ interface RepAppManifest {
70
+ manifest: RepAppData;
71
+ }
48
72
 
49
73
  /**
50
74
  * Color options constant - single source of truth for color values.
@@ -224,4 +248,4 @@ declare const sectionLayoutConfig: {
224
248
 
225
249
  type StrictOmit<T, K extends keyof T> = Omit<T, K>;
226
250
 
227
- export { type AlignOptions, BACKGROUND_TYPES, BORDER_RADIUS_OPTIONS, BUTTON_SIZE_OPTIONS, type BackgroundType, type BackgroundValue, type BorderRadiusOptions, type ButtonSizeOptions, COLOR_OPTIONS, type ColorOptions, FONT_SIZE_OPTIONS, type FontSizeOptions, GAP_OPTIONS, type GapOptions, HORIZONTAL_ALIGN_OPTIONS, type HorizontalAlign, type Navigation, type NavigationItem, PADDING_VALUES, type PaddingOptions, SECTION_LAYOUT_CONFIG, type ScreenDefinition, type SectionLayoutType, ShareableItem, type StrictOmit, VERTICAL_ALIGN_OPTIONS, type VerticalAlign, WidgetSchema, sectionLayoutConfig };
251
+ export { type AlignOptions, BACKGROUND_TYPES, BORDER_RADIUS_OPTIONS, BUTTON_SIZE_OPTIONS, type BackgroundType, type BackgroundValue, type BorderRadiusOptions, type ButtonSizeOptions, COLOR_OPTIONS, type ColorOptions, FONT_SIZE_OPTIONS, type FontSizeOptions, GAP_OPTIONS, type GapOptions, HORIZONTAL_ALIGN_OPTIONS, type HorizontalAlign, type Navigation, type NavigationItem, PADDING_VALUES, type PaddingOptions, type RepAppData, type RepAppManifest, type RepAppProfile, SECTION_LAYOUT_CONFIG, type ScreenDefinition, type SectionLayoutType, ShareableItem, type StrictOmit, ThemeDefinition, VERTICAL_ALIGN_OPTIONS, type VerticalAlign, WidgetSchema, sectionLayoutConfig };
@@ -1,7 +1,11 @@
1
- import { a as WidgetSchema, S as ShareableItem } from '../shareable-item-DPmNZkE1.js';
2
- export { T as TypedWidgetSchema, e as WIDGET_TYPE_NAMES, W as WidgetPath, d as WidgetRegistry, b as WidgetType, c as WidgetTypeName, h as assertDefined, g as assertNever, f as isWidgetType, i as isWidgetTypeName } from '../shareable-item-DPmNZkE1.js';
3
- export { a as Theme, T as ThemeConfig } from '../theme-DrMUYZTO.js';
1
+ import { W as WidgetSchema } from '../widget-schema-DxdlJD8E.js';
2
+ export { T as TypedWidgetSchema, e as WIDGET_TYPE_NAMES, a as WidgetPath, d as WidgetRegistry, b as WidgetType, c as WidgetTypeName, h as assertDefined, g as assertNever, f as isWidgetType, i as isWidgetTypeName } from '../widget-schema-DxdlJD8E.js';
3
+ import { T as ThemeDefinition } from '../types-R1kV_DKF.js';
4
+ export { R as ResolvedTheme, a as ThemeColorInput, b as ThemePayload } from '../types-R1kV_DKF.js';
5
+ import { S as ShareableItem } from '../shareable-item-DkgWpwoU.js';
4
6
  import 'react';
7
+ import '../data-sources/types.js';
8
+ import 'colorjs.io';
5
9
 
6
10
  /**
7
11
  * Navigation item in the sidebar/menu structure
@@ -45,6 +49,26 @@ interface Navigation {
45
49
  navigation_items: NavigationItem[];
46
50
  screens: ScreenDefinition[];
47
51
  }
52
+ /** A rep app profile — themes, navigation, and definition reference. */
53
+ interface RepAppProfile {
54
+ name: string;
55
+ themes: ThemeDefinition[];
56
+ activeThemeId?: string;
57
+ navigation: Navigation;
58
+ mobile_navigation?: Navigation;
59
+ definition_id: number;
60
+ }
61
+ /** Full rep app data returned by the fluidos API or builder preview. */
62
+ interface RepAppData {
63
+ definition_id: number;
64
+ published_version: number;
65
+ screens: ScreenDefinition[];
66
+ profile: RepAppProfile;
67
+ }
68
+ /** Wrapper for the `/fluid_os/definitions/active` API response. */
69
+ interface RepAppManifest {
70
+ manifest: RepAppData;
71
+ }
48
72
 
49
73
  /**
50
74
  * Color options constant - single source of truth for color values.
@@ -224,4 +248,4 @@ declare const sectionLayoutConfig: {
224
248
 
225
249
  type StrictOmit<T, K extends keyof T> = Omit<T, K>;
226
250
 
227
- export { type AlignOptions, BACKGROUND_TYPES, BORDER_RADIUS_OPTIONS, BUTTON_SIZE_OPTIONS, type BackgroundType, type BackgroundValue, type BorderRadiusOptions, type ButtonSizeOptions, COLOR_OPTIONS, type ColorOptions, FONT_SIZE_OPTIONS, type FontSizeOptions, GAP_OPTIONS, type GapOptions, HORIZONTAL_ALIGN_OPTIONS, type HorizontalAlign, type Navigation, type NavigationItem, PADDING_VALUES, type PaddingOptions, SECTION_LAYOUT_CONFIG, type ScreenDefinition, type SectionLayoutType, ShareableItem, type StrictOmit, VERTICAL_ALIGN_OPTIONS, type VerticalAlign, WidgetSchema, sectionLayoutConfig };
251
+ export { type AlignOptions, BACKGROUND_TYPES, BORDER_RADIUS_OPTIONS, BUTTON_SIZE_OPTIONS, type BackgroundType, type BackgroundValue, type BorderRadiusOptions, type ButtonSizeOptions, COLOR_OPTIONS, type ColorOptions, FONT_SIZE_OPTIONS, type FontSizeOptions, GAP_OPTIONS, type GapOptions, HORIZONTAL_ALIGN_OPTIONS, type HorizontalAlign, type Navigation, type NavigationItem, PADDING_VALUES, type PaddingOptions, type RepAppData, type RepAppManifest, type RepAppProfile, SECTION_LAYOUT_CONFIG, type ScreenDefinition, type SectionLayoutType, ShareableItem, type StrictOmit, ThemeDefinition, VERTICAL_ALIGN_OPTIONS, type VerticalAlign, WidgetSchema, sectionLayoutConfig };
@@ -1,3 +1,3 @@
1
- export { BACKGROUND_TYPES, BORDER_RADIUS_OPTIONS, BUTTON_SIZE_OPTIONS, COLOR_OPTIONS, FONT_SIZE_OPTIONS, GAP_OPTIONS, HORIZONTAL_ALIGN_OPTIONS, PADDING_VALUES, SECTION_LAYOUT_CONFIG, VERTICAL_ALIGN_OPTIONS, WIDGET_TYPE_NAMES, assertDefined, assertNever, isWidgetType, isWidgetTypeName, sectionLayoutConfig } from '../chunk-EWR5EIBP.js';
1
+ export { BACKGROUND_TYPES, BORDER_RADIUS_OPTIONS, BUTTON_SIZE_OPTIONS, COLOR_OPTIONS, FONT_SIZE_OPTIONS, GAP_OPTIONS, HORIZONTAL_ALIGN_OPTIONS, PADDING_VALUES, SECTION_LAYOUT_CONFIG, VERTICAL_ALIGN_OPTIONS, WIDGET_TYPE_NAMES, assertDefined, assertNever, isWidgetType, isWidgetTypeName, sectionLayoutConfig } from '../chunk-YKF5ZFF5.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,80 @@
1
+ import Color from 'colorjs.io';
2
+
3
+ declare const SEMANTIC_COLOR_NAMES: readonly ["background", "foreground", "primary", "secondary", "accent", "muted", "destructive"];
4
+ type SemanticColorName = (typeof SEMANTIC_COLOR_NAMES)[number];
5
+ declare const SHADE_STEPS: readonly [100, 200, 300, 400, 500, 600, 700, 800, 900];
6
+ type ShadeStep = (typeof SHADE_STEPS)[number];
7
+ declare const FONT_SIZE_KEYS: readonly ["extraSmall", "small", "regular", "large", "extraLarge", "giant"];
8
+ type FontSizeKey = (typeof FONT_SIZE_KEYS)[number];
9
+ declare const FONT_FAMILY_KEYS: readonly ["header", "body"];
10
+ type FontFamilyKey = (typeof FONT_FAMILY_KEYS)[number];
11
+ declare const RADIUS_KEYS: readonly ["small", "medium", "large", "extraLarge"];
12
+ type RadiusKey = (typeof RADIUS_KEYS)[number];
13
+ /** Author-time color input (what the user configures) */
14
+ interface ThemeColorInput {
15
+ base: Color;
16
+ foreground: Color;
17
+ }
18
+ /** Complete theme definition — stored in-memory with Color objects */
19
+ interface ThemeDefinition {
20
+ id: string;
21
+ name: string;
22
+ /** Light mode — always fully specified */
23
+ light: Record<SemanticColorName, ThemeColorInput>;
24
+ /**
25
+ * Dark mode — only user-overridden colors.
26
+ * Missing keys are auto-derived from `light` at resolve time.
27
+ */
28
+ dark: Partial<Record<SemanticColorName, Partial<ThemeColorInput>>>;
29
+ fontSizes: Record<FontSizeKey, string>;
30
+ fontFamilies: Record<FontFamilyKey, string>;
31
+ spacing: string;
32
+ radii: Record<RadiusKey, string>;
33
+ }
34
+ /** Resolved semantic color with generated shade ramp */
35
+ interface ResolvedSemanticColor {
36
+ base: Color;
37
+ foreground: Color;
38
+ shades: Record<ShadeStep, Color>;
39
+ }
40
+ /** Complete resolved color set for one mode */
41
+ type ResolvedColorSet = Record<SemanticColorName, ResolvedSemanticColor>;
42
+ /** Fully resolved theme — all colors materialised for both modes */
43
+ interface ResolvedTheme {
44
+ id: string;
45
+ name: string;
46
+ light: ResolvedColorSet;
47
+ dark: ResolvedColorSet;
48
+ fontSizes: ThemeDefinition["fontSizes"];
49
+ fontFamilies: ThemeDefinition["fontFamilies"];
50
+ spacing: string;
51
+ radii: ThemeDefinition["radii"];
52
+ }
53
+ /** Plain OKLCH triplet for JSON serialisation (no Color dependency) */
54
+ interface OklchPlain {
55
+ l: number;
56
+ c: number;
57
+ h: number;
58
+ }
59
+ /** Serialised color pair as stored in the backend payload */
60
+ interface ThemeColorPlain {
61
+ base: OklchPlain;
62
+ foreground: OklchPlain;
63
+ }
64
+ /** Backend payload — plain JSON, no Color objects */
65
+ interface ThemePayload {
66
+ [key: string]: unknown;
67
+ id: string;
68
+ name: string;
69
+ light: Record<SemanticColorName, ThemeColorPlain>;
70
+ dark: Partial<Record<SemanticColorName, {
71
+ base?: OklchPlain;
72
+ foreground?: OklchPlain;
73
+ }>>;
74
+ fontSizes: Record<FontSizeKey, string>;
75
+ fontFamilies: Record<FontFamilyKey, string>;
76
+ spacing: string;
77
+ radii: Record<RadiusKey, string>;
78
+ }
79
+
80
+ export { type FontSizeKey as F, type OklchPlain as O, type ResolvedTheme as R, type ShadeStep as S, type ThemeDefinition as T, type ThemeColorInput as a, type ThemePayload as b, type SemanticColorName as c, type FontFamilyKey as d, type RadiusKey as e, type ThemeColorPlain as f, type ResolvedSemanticColor as g, type ResolvedColorSet as h, SEMANTIC_COLOR_NAMES as i, SHADE_STEPS as j, FONT_SIZE_KEYS as k, FONT_FAMILY_KEYS as l, RADIUS_KEYS as m };