@fluid-app/rep-core 0.1.5 → 0.1.7

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 (48) hide show
  1. package/dist/{chunk-2IFFXFJL.js → chunk-4NBPTMT4.js} +3 -4
  2. package/dist/chunk-4NBPTMT4.js.map +1 -0
  3. package/dist/chunk-EMFSTGLP.cjs +38 -0
  4. package/dist/chunk-EMFSTGLP.cjs.map +1 -0
  5. package/dist/{chunk-PZ6BM57A.js → chunk-KZHNZ2NG.js} +10 -4
  6. package/dist/chunk-KZHNZ2NG.js.map +1 -0
  7. package/dist/{chunk-CMXYKDHC.cjs → chunk-M54NWBRO.cjs} +3 -4
  8. package/dist/chunk-M54NWBRO.cjs.map +1 -0
  9. package/dist/data-sources/DataAwareWidget.d.cts +1 -1
  10. package/dist/data-sources/DataAwareWidget.d.ts +1 -1
  11. package/dist/data-sources/use-widget-data.d.cts +1 -1
  12. package/dist/data-sources/use-widget-data.d.ts +1 -1
  13. package/dist/registries/index.cjs +9 -1
  14. package/dist/registries/index.cjs.map +1 -1
  15. package/dist/registries/index.d.cts +21 -4
  16. package/dist/registries/index.d.ts +21 -4
  17. package/dist/registries/index.js +9 -2
  18. package/dist/registries/index.js.map +1 -1
  19. package/dist/shell/AppShellLayout.cjs +3 -3
  20. package/dist/shell/AppShellLayout.js +2 -2
  21. package/dist/shell/index.cjs +98 -28
  22. package/dist/shell/index.cjs.map +1 -1
  23. package/dist/shell/index.d.cts +37 -2
  24. package/dist/shell/index.d.ts +37 -2
  25. package/dist/shell/index.js +72 -2
  26. package/dist/shell/index.js.map +1 -1
  27. package/dist/shell/sidebar.cjs +25 -25
  28. package/dist/shell/sidebar.js +1 -1
  29. package/dist/theme/index.cjs +4 -2
  30. package/dist/theme/index.cjs.map +1 -1
  31. package/dist/theme/index.d.cts +2 -2
  32. package/dist/theme/index.d.ts +2 -2
  33. package/dist/theme/index.js +4 -2
  34. package/dist/theme/index.js.map +1 -1
  35. package/dist/types/index.d.cts +4 -4
  36. package/dist/types/index.d.ts +4 -4
  37. package/dist/{types-R1kV_DKF.d.cts → types-CNIhy4JD.d.cts} +4 -1
  38. package/dist/{types-R1kV_DKF.d.ts → types-CNIhy4JD.d.ts} +4 -1
  39. package/dist/{widget-schema-DxdlJD8E.d.ts → widget-schema-D-ca3--K.d.ts} +1 -1
  40. package/dist/{widget-schema-36uGUTWL.d.cts → widget-schema-DvJdg1-B.d.cts} +1 -1
  41. package/dist/widget-utils/index.d.cts +1 -1
  42. package/dist/widget-utils/index.d.ts +1 -1
  43. package/package.json +21 -1
  44. package/dist/chunk-2IFFXFJL.js.map +0 -1
  45. package/dist/chunk-BWHUEED3.cjs +0 -32
  46. package/dist/chunk-BWHUEED3.cjs.map +0 -1
  47. package/dist/chunk-CMXYKDHC.cjs.map +0 -1
  48. package/dist/chunk-PZ6BM57A.js.map +0 -1
@@ -1 +1 @@
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":"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","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
+ {"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":"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","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 /** When true, theme colors are re-derived from brand guidelines on every load */\n syncWithBrandColors?: boolean;\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 syncWithBrandColors?: boolean;\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 ...(def.syncWithBrandColors ? { syncWithBrandColors: true } : {}),\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 ...(payload.syncWithBrandColors === true\n ? { syncWithBrandColors: true }\n : {}),\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,7 +1,7 @@
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';
1
+ import { a as WidgetSchema } from '../widget-schema-DvJdg1-B.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 '../widget-schema-DvJdg1-B.cjs';
3
+ import { b as ThemeDefinition } from '../types-CNIhy4JD.cjs';
4
+ export { R as ResolvedTheme, T as ThemeColorInput, c as ThemePayload } from '../types-CNIhy4JD.cjs';
5
5
  import { components } from '@fluid-app/fluidos-api-client';
6
6
  import { S as ShareableItem } from '../shareable-item-DkgWpwoU.cjs';
7
7
  import 'react';
@@ -1,7 +1,7 @@
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';
1
+ import { a as WidgetSchema } from '../widget-schema-D-ca3--K.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 '../widget-schema-D-ca3--K.js';
3
+ import { b as ThemeDefinition } from '../types-CNIhy4JD.js';
4
+ export { R as ResolvedTheme, T as ThemeColorInput, c as ThemePayload } from '../types-CNIhy4JD.js';
5
5
  import { components } from '@fluid-app/fluidos-api-client';
6
6
  import { S as ShareableItem } from '../shareable-item-DkgWpwoU.js';
7
7
  import 'react';
@@ -30,6 +30,8 @@ interface ThemeDefinition {
30
30
  fontFamilies: Record<FontFamilyKey, string>;
31
31
  spacing: string;
32
32
  radii: Record<RadiusKey, string>;
33
+ /** When true, theme colors are re-derived from brand guidelines on every load */
34
+ syncWithBrandColors?: boolean;
33
35
  }
34
36
  /** Resolved semantic color with generated shade ramp */
35
37
  interface ResolvedSemanticColor {
@@ -75,6 +77,7 @@ interface ThemePayload {
75
77
  fontFamilies: Record<FontFamilyKey, string>;
76
78
  spacing: string;
77
79
  radii: Record<RadiusKey, string>;
80
+ syncWithBrandColors?: boolean;
78
81
  }
79
82
 
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 };
83
+ export { type FontSizeKey as F, type OklchPlain as O, type ResolvedTheme as R, type ShadeStep as S, type ThemeColorInput as T, type SemanticColorName as a, type ThemeDefinition as b, type ThemePayload 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 };
@@ -30,6 +30,8 @@ interface ThemeDefinition {
30
30
  fontFamilies: Record<FontFamilyKey, string>;
31
31
  spacing: string;
32
32
  radii: Record<RadiusKey, string>;
33
+ /** When true, theme colors are re-derived from brand guidelines on every load */
34
+ syncWithBrandColors?: boolean;
33
35
  }
34
36
  /** Resolved semantic color with generated shade ramp */
35
37
  interface ResolvedSemanticColor {
@@ -75,6 +77,7 @@ interface ThemePayload {
75
77
  fontFamilies: Record<FontFamilyKey, string>;
76
78
  spacing: string;
77
79
  radii: Record<RadiusKey, string>;
80
+ syncWithBrandColors?: boolean;
78
81
  }
79
82
 
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 };
83
+ export { type FontSizeKey as F, type OklchPlain as O, type ResolvedTheme as R, type ShadeStep as S, type ThemeColorInput as T, type SemanticColorName as a, type ThemeDefinition as b, type ThemePayload 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 };
@@ -119,4 +119,4 @@ declare function assertNever(value: never, context?: string): never;
119
119
  */
120
120
  declare function assertDefined<T>(value: T | undefined | null, name?: string): asserts value is T;
121
121
 
122
- export { type TypedWidgetSchema as T, type WidgetSchema as W, type WidgetPath as a, type WidgetType as b, type WidgetTypeName as c, type WidgetRegistry as d, WIDGET_TYPE_NAMES as e, isWidgetType as f, assertNever as g, assertDefined as h, isWidgetTypeName as i };
122
+ export { type TypedWidgetSchema as T, type WidgetPath as W, type WidgetSchema as a, type WidgetType as b, type WidgetTypeName as c, type WidgetRegistry as d, WIDGET_TYPE_NAMES as e, isWidgetType as f, assertNever as g, assertDefined as h, isWidgetTypeName as i };
@@ -119,4 +119,4 @@ declare function assertNever(value: never, context?: string): never;
119
119
  */
120
120
  declare function assertDefined<T>(value: T | undefined | null, name?: string): asserts value is T;
121
121
 
122
- export { type TypedWidgetSchema as T, type WidgetSchema as W, type WidgetPath as a, type WidgetType as b, type WidgetTypeName as c, type WidgetRegistry as d, WIDGET_TYPE_NAMES as e, isWidgetType as f, assertNever as g, assertDefined as h, isWidgetTypeName as i };
122
+ export { type TypedWidgetSchema as T, type WidgetPath as W, type WidgetSchema as a, type WidgetType as b, type WidgetTypeName as c, type WidgetRegistry as d, WIDGET_TYPE_NAMES as e, isWidgetType as f, assertNever as g, assertDefined as h, isWidgetTypeName as i };
@@ -1,4 +1,4 @@
1
- import { a as WidgetPath, W as WidgetSchema, T as TypedWidgetSchema } from '../widget-schema-36uGUTWL.cjs';
1
+ import { W as WidgetPath, a as WidgetSchema, T as TypedWidgetSchema } from '../widget-schema-DvJdg1-B.cjs';
2
2
  import { ComponentType } from 'react';
3
3
  import { S as ShareableItem } from '../shareable-item-DkgWpwoU.cjs';
4
4
  import '../data-sources/types.cjs';
@@ -1,4 +1,4 @@
1
- import { a as WidgetPath, W as WidgetSchema, T as TypedWidgetSchema } from '../widget-schema-DxdlJD8E.js';
1
+ import { W as WidgetPath, a as WidgetSchema, T as TypedWidgetSchema } from '../widget-schema-D-ca3--K.js';
2
2
  import { ComponentType } from 'react';
3
3
  import { S as ShareableItem } from '../shareable-item-DkgWpwoU.js';
4
4
  import '../data-sources/types.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluid-app/rep-core",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Core types, theme engine, and widget utilities for the Fluid rep platform",
5
5
  "type": "module",
6
6
  "exports": {
@@ -113,6 +113,26 @@
113
113
  "types": "./dist/shell/AppShellLayout.d.cts",
114
114
  "default": "./dist/shell/AppShellLayout.cjs"
115
115
  }
116
+ },
117
+ "./shell/ScreenHeader": {
118
+ "import": {
119
+ "types": "./dist/shell/ScreenHeader.d.ts",
120
+ "default": "./dist/shell/ScreenHeader.js"
121
+ },
122
+ "require": {
123
+ "types": "./dist/shell/ScreenHeader.d.cts",
124
+ "default": "./dist/shell/ScreenHeader.cjs"
125
+ }
126
+ },
127
+ "./shell/ScreenHeaderContext": {
128
+ "import": {
129
+ "types": "./dist/shell/ScreenHeaderContext.d.ts",
130
+ "default": "./dist/shell/ScreenHeaderContext.js"
131
+ },
132
+ "require": {
133
+ "types": "./dist/shell/ScreenHeaderContext.d.cts",
134
+ "default": "./dist/shell/ScreenHeaderContext.cjs"
135
+ }
116
136
  }
117
137
  },
118
138
  "publishConfig": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/shell/sidebar.tsx"],"names":["open"],"mappings":"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","file":"chunk-2IFFXFJL.js","sourcesContent":["\"use client\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport * as React from \"react\";\n\nimport { useIsMobile } from \"./use-mobile\";\n\n// ---------------------------------------------------------------------------\n// Inlined utilities (avoid importing from builder's UI kit)\n// ---------------------------------------------------------------------------\n\nfunction cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n ...props\n}: React.ComponentPropsWithRef<\"div\"> & {\n orientation?: \"horizontal\" | \"vertical\";\n decorative?: boolean;\n}) {\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"h-full w-px\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst SIDEBAR_WIDTH = \"13rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n\n// ---------------------------------------------------------------------------\n// Sidebar Context\n// ---------------------------------------------------------------------------\n\ntype SidebarContextValue = {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n isPreviewMode: boolean;\n useBottomNav: boolean;\n};\n\nexport const SidebarContext = React.createContext<SidebarContextValue | null>(\n null,\n);\n\nfunction useSidebar(): SidebarContextValue {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\");\n }\n\n return context;\n}\n\n// ---------------------------------------------------------------------------\n// SidebarProvider\n// ---------------------------------------------------------------------------\n\nconst SidebarProvider = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n viewportWidth?: number;\n previewMode?: boolean;\n useBottomNav?: boolean;\n }\n>(\n (\n {\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n viewportWidth,\n previewMode,\n useBottomNav: useBottomNavProp = false,\n className,\n style,\n children,\n ...props\n },\n ref,\n ) => {\n const windowIsMobile = useIsMobile();\n // Use viewportWidth if provided, otherwise use actual window detection\n const isMobile =\n viewportWidth !== undefined ? viewportWidth < 768 : windowIsMobile;\n // Preview mode is active when viewportWidth is provided\n const isPreviewMode = viewportWidth !== undefined || !!previewMode;\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n },\n [setOpenProp, open],\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile\n ? setOpenMobile((open) => !open)\n : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n // check if composer is focused - if so, let the composer handle the shortcut\n const activeElement = document.activeElement;\n const isComposerFocused =\n activeElement?.closest(\".group\\\\/composer\") ||\n activeElement?.closest(\"[data-toolbar]\") ||\n activeElement?.classList.contains(\"ProseMirror\");\n\n if (isComposerFocused) {\n return; // let the composer handle the shortcut\n }\n\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextValue>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n isPreviewMode,\n useBottomNav: useBottomNavProp,\n }),\n [\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n isPreviewMode,\n useBottomNavProp,\n ],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper flex min-h-0 w-full flex-1\",\n className,\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n );\n },\n);\nSidebarProvider.displayName = \"SidebarProvider\";\n\n// ---------------------------------------------------------------------------\n// Sidebar\n// ---------------------------------------------------------------------------\n\nconst Sidebar = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n }\n>(\n (\n {\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const {\n isMobile,\n state,\n openMobile,\n setOpenMobile,\n isPreviewMode,\n useBottomNav,\n } = useSidebar();\n\n // Define CSS variables for expanded and collapsed sidebar widths\n const sidebarWidth =\n state === \"expanded\" ? SIDEBAR_WIDTH : SIDEBAR_WIDTH_ICON;\n\n // When bottom nav is active on mobile, hide the sidebar entirely\n if (useBottomNav && isMobile) {\n return null;\n }\n\n if (collapsible === \"none\") {\n return (\n <div\n className={cn(\n \"flex w-(--sidebar-width) flex-col rounded-tl-lg bg-sidebar text-sidebar-foreground\",\n isPreviewMode ? \"h-full\" : \"h-[97vh]\",\n className,\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n // For mobile, render a slide-out sidebar with overlay\n // Use absolute positioning in preview mode so it stays within the preview container\n const positionClass = isPreviewMode ? \"absolute\" : \"fixed\";\n return (\n <>\n {/* Overlay - only visible when sidebar is open */}\n {openMobile && (\n <div\n className={cn(positionClass, \"inset-0 z-40 bg-black/50\")}\n onClick={() => setOpenMobile(false)}\n aria-hidden=\"true\"\n />\n )}\n\n {/* Sidebar - slides in from left */}\n <div\n data-sidebar=\"sidebar\"\n data-mobile=\"true\"\n className={cn(\n positionClass,\n \"top-0 left-0 z-50 h-full w-[--sidebar-width] bg-sidebar p-0 text-sidebar-foreground transition-transform duration-300 ease-in-out\",\n openMobile ? \"translate-x-0\" : \"-translate-x-full\",\n className,\n )}\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n ref={ref}\n {...props}\n >\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </div>\n </>\n );\n }\n\n return (\n <div\n ref={ref}\n className=\"group peer hidden bg-sidebar text-sidebar-foreground md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n style={\n {\n \"--sidebar-width\": sidebarWidth,\n } as React.CSSProperties\n }\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n className={cn(\n \"relative bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\",\n )}\n />\n <div\n className={cn(\n \"relative inset-y-0 z-[20] hidden w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n isPreviewMode ? \"h-full\" : \"h-svh\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=right]:border-l\",\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n className=\"flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n },\n);\nSidebar.displayName = \"Sidebar\";\n\n// ---------------------------------------------------------------------------\n// SidebarRail\n// ---------------------------------------------------------------------------\n\nconst SidebarRail = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\">\n>(({ className, ...props }, ref) => {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n ref={ref}\n data-sidebar=\"rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"absolute inset-y-0 z-[10] hidden w-4 -translate-x-full transition-all ease-linear group-data-[side=left]:-right-[1.375rem] group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarRail.displayName = \"SidebarRail\";\n\n// ---------------------------------------------------------------------------\n// SidebarInset\n// ---------------------------------------------------------------------------\n\nconst SidebarInset = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"main\">\n>(({ className, ...props }, ref) => {\n const { isPreviewMode, isMobile, useBottomNav } = useSidebar();\n return (\n <main\n ref={ref}\n className={cn(\n \"relative flex flex-1 flex-col\",\n isPreviewMode\n ? \"max-h-[calc(100svh-(--spacing(13)))]\"\n : \"min-h-svh peer-data-[variant=inset]:min-h-[calc(100svh-(--spacing(4)))]\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n useBottomNav &&\n isMobile &&\n \"pb-[calc(4rem+env(safe-area-inset-bottom))]\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarInset.displayName = \"SidebarInset\";\n\n// ---------------------------------------------------------------------------\n// SidebarInput\n// ---------------------------------------------------------------------------\n\nconst SidebarInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentProps<\"input\">\n>(({ className, ...props }, ref) => {\n return (\n <input\n ref={ref}\n data-sidebar=\"input\"\n className={cn(\n \"h-8 w-full rounded-md border bg-background px-3 text-sm shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring focus-visible:outline-none\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarInput.displayName = \"SidebarInput\";\n\n// ---------------------------------------------------------------------------\n// SidebarHeader / Footer\n// ---------------------------------------------------------------------------\n\nconst SidebarHeader = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n});\nSidebarHeader.displayName = \"SidebarHeader\";\n\nconst SidebarFooter = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n});\nSidebarFooter.displayName = \"SidebarFooter\";\n\n// ---------------------------------------------------------------------------\n// SidebarSeparator\n// ---------------------------------------------------------------------------\n\nconst SidebarSeparator = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n orientation?: \"horizontal\" | \"vertical\";\n }\n>(({ className, ...props }, ref) => {\n return (\n <Separator\n ref={ref}\n data-sidebar=\"separator\"\n className={cn(\"mx-2 w-auto bg-sidebar-border\", className)}\n {...props}\n />\n );\n});\nSidebarSeparator.displayName = \"SidebarSeparator\";\n\n// ---------------------------------------------------------------------------\n// SidebarContent\n// ---------------------------------------------------------------------------\n\nconst SidebarContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"content\"\n className={cn(\n \"scrollbar-none flex min-h-0 flex-1 flex-col gap-2 overflow-auto rounded group-data-[collapsible=icon]:gap-0 group-data-[collapsible=icon]:overflow-hidden group-data-[collapsible=icon]:pt-3\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarContent.displayName = \"SidebarContent\";\n\n// ---------------------------------------------------------------------------\n// SidebarGroup\n// ---------------------------------------------------------------------------\n\nconst SidebarGroup = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"group\"\n className={cn(\n \"relative flex w-full min-w-0 flex-col p-2 group-data-[collapsible=icon]:py-0 group-data-[collapsible=icon]:pt-4\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarGroup.displayName = \"SidebarGroup\";\n\nconst SidebarGroupLabel = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & { asChild?: boolean }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"div\";\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-label\"\n className={cn(\n \"flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarGroupLabel.displayName = \"SidebarGroupLabel\";\n\nconst SidebarGroupAction = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & { asChild?: boolean }\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-action\"\n className={cn(\n \"absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarGroupAction.displayName = \"SidebarGroupAction\";\n\nconst SidebarGroupContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n));\nSidebarGroupContent.displayName = \"SidebarGroupContent\";\n\n// ---------------------------------------------------------------------------\n// SidebarMenu\n// ---------------------------------------------------------------------------\n\nconst SidebarMenu = React.forwardRef<\n HTMLUListElement,\n React.ComponentProps<\"ul\">\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n));\nSidebarMenu.displayName = \"SidebarMenu\";\n\nconst SidebarMenuItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentProps<\"li\">\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n));\nSidebarMenuItem.displayName = \"SidebarMenuItem\";\n\n// ---------------------------------------------------------------------------\n// SidebarMenuButton\n// ---------------------------------------------------------------------------\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-primary hover:text-sidebar-primary-foreground focus-visible:ring-2 active:bg-sidebar-primary active:text-sidebar-primary-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-primary data-[active=true]:font-medium data-[active=true]:text-sidebar-primary-foreground data-[state=open]:hover:bg-sidebar-primary data-[state=open]:hover:text-sidebar-primary-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"hover:bg-sidebar-primary hover:text-sidebar-primary-foreground\",\n outline:\n \"shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-primary hover:text-sidebar-primary-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-primary))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nconst SidebarMenuButton = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n isActive?: boolean;\n } & VariantProps<typeof sidebarMenuButtonVariants>\n>(\n (\n {\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n className,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"button\";\n\n const button = (\n <Comp\n ref={ref}\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n return button;\n },\n);\nSidebarMenuButton.displayName = \"SidebarMenuButton\";\n\n// ---------------------------------------------------------------------------\n// SidebarMenuAction / Badge / Skeleton\n// ---------------------------------------------------------------------------\n\nconst SidebarMenuAction = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n showOnHover?: boolean;\n }\n>(({ className, asChild = false, showOnHover = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-action\"\n className={cn(\n \"absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground data-[state=open]:opacity-100 md:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarMenuAction.displayName = \"SidebarMenuAction\";\n\nconst SidebarMenuBadge = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"menu-badge\"\n className={cn(\n \"pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n));\nSidebarMenuBadge.displayName = \"SidebarMenuBadge\";\n\nconst SidebarMenuSkeleton = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n showIcon?: boolean;\n }\n>(({ className, showIcon = false, ...props }, ref) => {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n ref={ref}\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n});\nSidebarMenuSkeleton.displayName = \"SidebarMenuSkeleton\";\n\n// ---------------------------------------------------------------------------\n// SidebarMenuSub\n// ---------------------------------------------------------------------------\n\nconst SidebarMenuSub = React.forwardRef<\n HTMLUListElement,\n React.ComponentProps<\"ul\">\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu-sub\"\n className={cn(\n \"mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n));\nSidebarMenuSub.displayName = \"SidebarMenuSub\";\n\nconst SidebarMenuSubItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentProps<\"li\">\n>(({ ...props }, ref) => <li ref={ref} {...props} />);\nSidebarMenuSubItem.displayName = \"SidebarMenuSubItem\";\n\nconst SidebarMenuSubButton = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentProps<\"a\"> & {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n }\n>(({ asChild = false, size = \"md\", isActive, className, ...props }, ref) => {\n const Comp = asChild ? Slot : \"a\";\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n});\nSidebarMenuSubButton.displayName = \"SidebarMenuSubButton\";\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n useSidebar,\n};\n"]}
@@ -1,32 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkCMXYKDHC_cjs = require('./chunk-CMXYKDHC.cjs');
4
- require('react');
5
- var jsxRuntime = require('react/jsx-runtime');
6
-
7
- function AppShellLayout({
8
- sidebarContent,
9
- headerContent,
10
- children,
11
- sidebarHeader,
12
- sidebarFooter,
13
- afterContent,
14
- useBottomNav = false
15
- }) {
16
- return /* @__PURE__ */ jsxRuntime.jsx(chunkCMXYKDHC_cjs.SidebarProvider, { useBottomNav, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex max-h-dvh w-full overflow-hidden bg-muted", children: [
17
- /* @__PURE__ */ jsxRuntime.jsxs(chunkCMXYKDHC_cjs.Sidebar, { children: [
18
- sidebarHeader && /* @__PURE__ */ jsxRuntime.jsx(chunkCMXYKDHC_cjs.SidebarHeader, { children: sidebarHeader }),
19
- /* @__PURE__ */ jsxRuntime.jsx(chunkCMXYKDHC_cjs.SidebarContent, { className: "p-4", children: sidebarContent }),
20
- sidebarFooter && /* @__PURE__ */ jsxRuntime.jsx(chunkCMXYKDHC_cjs.SidebarFooter, { children: sidebarFooter })
21
- ] }),
22
- /* @__PURE__ */ jsxRuntime.jsxs(chunkCMXYKDHC_cjs.SidebarInset, { className: "flex flex-1 flex-col overflow-hidden", children: [
23
- headerContent,
24
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-hidden bg-muted md:pr-4 md:pb-4", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "scrollbar-none h-full overflow-auto rounded-xl bg-background text-foreground shadow-lg", children }) })
25
- ] }),
26
- afterContent
27
- ] }) });
28
- }
29
-
30
- exports.AppShellLayout = AppShellLayout;
31
- //# sourceMappingURL=chunk-BWHUEED3.cjs.map
32
- //# sourceMappingURL=chunk-BWHUEED3.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/shell/AppShellLayout.tsx"],"names":["SidebarProvider","jsxs","Sidebar","jsx","SidebarHeader","SidebarContent","SidebarFooter","SidebarInset"],"mappings":";;;;;;AAqCO,SAAS,cAAA,CAAe;AAAA,EAC7B,cAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA,GAAe;AACjB,CAAA,EAAwB;AACtB,EAAA,sCACGA,iCAAA,EAAA,EAAgB,YAAA,EACf,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yDAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAACC,yBAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,aAAA,oBAAiBC,cAAA,CAACC,mCAAe,QAAA,EAAA,aAAA,EAAc,CAAA;AAAA,sBAChDD,cAAA,CAACE,gCAAA,EAAA,EAAe,SAAA,EAAU,KAAA,EAAO,QAAA,EAAA,cAAA,EAAe,CAAA;AAAA,MAC/C,aAAA,oBAAiBF,cAAA,CAACG,+BAAA,EAAA,EAAe,QAAA,EAAA,aAAA,EAAc;AAAA,KAAA,EAClD,CAAA;AAAA,oBAGAL,eAAA,CAACM,8BAAA,EAAA,EAAa,SAAA,EAAU,sCAAA,EAErB,QAAA,EAAA;AAAA,MAAA,aAAA;AAAA,sBAGDJ,cAAA,CAAC,SAAI,SAAA,EAAU,iDAAA,EACb,yCAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wFAAA,EACZ,QAAA,EACH,CAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,IAGC;AAAA,GAAA,EACH,CAAA,EACF,CAAA;AAEJ","file":"chunk-BWHUEED3.cjs","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarInset,\n SidebarProvider,\n} from \"./sidebar\";\n\nexport interface AppShellLayoutProps {\n /** Navigation content rendered inside the sidebar's scrollable area */\n sidebarContent: React.ReactNode;\n /** Header content rendered above the main content area */\n headerContent: React.ReactNode;\n /** Main page content */\n children: React.ReactNode;\n /** Optional slot at the top of the sidebar (e.g. logo, search) */\n sidebarHeader?: React.ReactNode;\n /** Optional slot at the bottom of the sidebar (e.g. user info) */\n sidebarFooter?: React.ReactNode;\n /** Content rendered after SidebarInset (e.g. MobileBottomNav) */\n afterContent?: React.ReactNode;\n /** Enable bottom nav mode (hides sidebar on mobile, adds bottom padding) */\n useBottomNav?: boolean;\n}\n\n/**\n * Pure visual frame that replicates the RepApp layout:\n * - 13rem collapsible sidebar\n * - 52px header area\n * - rounded-xl bg-background shadow-lg content area with bg-muted gutters\n *\n * This component handles zero business logic — it simply provides the visual shell.\n */\nexport function AppShellLayout({\n sidebarContent,\n headerContent,\n children,\n sidebarHeader,\n sidebarFooter,\n afterContent,\n useBottomNav = false,\n}: AppShellLayoutProps) {\n return (\n <SidebarProvider useBottomNav={useBottomNav}>\n <div className=\"relative flex max-h-dvh w-full overflow-hidden bg-muted\">\n {/* Navigation Sidebar */}\n <Sidebar>\n {sidebarHeader && <SidebarHeader>{sidebarHeader}</SidebarHeader>}\n <SidebarContent className=\"p-4\">{sidebarContent}</SidebarContent>\n {sidebarFooter && <SidebarFooter>{sidebarFooter}</SidebarFooter>}\n </Sidebar>\n\n {/* Main Content Area */}\n <SidebarInset className=\"flex flex-1 flex-col overflow-hidden\">\n {/* Header */}\n {headerContent}\n\n {/* Screen Content */}\n <div className=\"flex-1 overflow-hidden bg-muted md:pr-4 md:pb-4\">\n <div className=\"scrollbar-none h-full overflow-auto rounded-xl bg-background text-foreground shadow-lg\">\n {children}\n </div>\n </div>\n </SidebarInset>\n\n {/* After content (e.g. MobileBottomNav) */}\n {afterContent}\n </div>\n </SidebarProvider>\n );\n}\n"]}