@charstudios/pallet 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +454 -434
- package/dist/{chunk-3JRKA6NS.js → chunk-BCQMI6SW.js} +98 -97
- package/dist/chunk-BCQMI6SW.js.map +1 -0
- package/dist/{index-wWkmeDkd.d.ts → index-C8-t5s-1.d.ts} +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +96 -95
- package/dist/index.js.map +1 -1
- package/dist/presets/index.d.ts +1 -1
- package/dist/presets/index.js +1 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.js +1 -1
- package/dist/styles/index.css +16 -16
- package/dist/styles/variant-flat.css +215 -215
- package/dist/styles/variant-frosted.css +58 -203
- package/dist/styles/variant-toon.css +221 -159
- package/package.json +79 -79
- package/dist/chunk-3JRKA6NS.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/css-vars.ts","../src/core/merge.ts","../src/core/resolve.ts","../src/core/serialize.ts","../src/fonts/google-fonts.ts","../src/presets/flat.ts","../src/presets/frosted.ts","../src/presets/toon.ts","../src/presets/index.ts","../src/context.ts","../src/provider.tsx","../src/hooks/use-theme.ts","../src/hooks/use-theme-controls.ts","../src/hooks/use-preset.ts","../src/hooks/use-color-scheme.ts"],"names":["light","dark","defaultPreset","useMemo","useCallback"],"mappings":"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","file":"index.js","sourcesContent":["import type { CssVarMap } from \"./types\";\r\n\r\n/**\r\n * Applies a CSS variable map to a DOM element's inline style. Runs only in the\r\n * browser; on the server it is a no-op (SSR should use {@link themeToCss}).\r\n */\r\nexport function applyCssVars(element: HTMLElement | null | undefined, vars: CssVarMap): void {\r\n if (!element) return;\r\n for (const [name, value] of Object.entries(vars)) {\r\n element.style.setProperty(name, value);\r\n }\r\n}\r\n\r\n/** Removes the given CSS variable names from an element's inline style. */\r\nexport function clearCssVars(element: HTMLElement | null | undefined, names: string[]): void {\r\n if (!element) return;\r\n for (const name of names) {\r\n element.style.removeProperty(name);\r\n }\r\n}\r\n\r\n/** Serializes a CSS variable map into a `key:value;` declaration string. */\r\nexport function cssVarsToString(vars: CssVarMap): string {\r\n return Object.entries(vars)\r\n .map(([name, value]) => `${name}:${value};`)\r\n .join(\"\");\r\n}\r\n","import type { DeepPartial } from \"./types\";\r\n\r\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\r\n return (\r\n typeof value === \"object\" &&\r\n value !== null &&\r\n !Array.isArray(value) &&\r\n Object.getPrototypeOf(value) === Object.prototype\r\n );\r\n}\r\n\r\n/**\r\n * Deeply merges `override` onto `base`, returning a new object. Arrays and\r\n * primitives from `override` replace those in `base`; nested plain objects are\r\n * merged recursively. `undefined` values in the override are ignored.\r\n */\r\nexport function deepMerge<T>(base: T, override?: DeepPartial<T>): T {\r\n if (!override) return base;\r\n\r\n // Only plain objects are ever merged recursively (see the guard below), so a\r\n // shallow object clone is always the correct starting point here.\r\n const result: Record<string, unknown> = { ...(base as Record<string, unknown>) };\r\n\r\n for (const key of Object.keys(override)) {\r\n const overrideValue = (override as Record<string, unknown>)[key];\r\n if (overrideValue === undefined) continue;\r\n\r\n const baseValue = result[key];\r\n if (isPlainObject(baseValue) && isPlainObject(overrideValue)) {\r\n result[key] = deepMerge(baseValue, overrideValue as DeepPartial<typeof baseValue>);\r\n } else {\r\n result[key] = overrideValue;\r\n }\r\n }\r\n\r\n return result as T;\r\n}\r\n\r\n/** Merges any number of overrides left-to-right onto a base theme. */\r\nexport function mergeAll<T>(base: T, ...overrides: Array<DeepPartial<T> | undefined>): T {\r\n return overrides.reduce<T>((acc, override) => deepMerge(acc, override), base);\r\n}\r\n","import type {\r\n ColorScheme,\r\n ColorTokens,\r\n CssVarMap,\r\n RadiusScale,\r\n ThemeConfig,\r\n} from \"./types\";\r\n\r\n/** Default radius multipliers, mirroring shadcn's derived `--radius-*` scale. */\r\nexport const DEFAULT_RADIUS_SCALE: RadiusScale = {\r\n sm: 0.6,\r\n md: 0.8,\r\n lg: 1,\r\n xl: 1.4,\r\n \"2xl\": 1.8,\r\n \"3xl\": 2.2,\r\n \"4xl\": 2.6,\r\n};\r\n\r\n/** Maps a `ColorTokens` field to its shadcn CSS custom property name. */\r\nconst COLOR_VAR: Record<keyof ColorTokens, string> = {\r\n background: \"--background\",\r\n foreground: \"--foreground\",\r\n card: \"--card\",\r\n cardForeground: \"--card-foreground\",\r\n popover: \"--popover\",\r\n popoverForeground: \"--popover-foreground\",\r\n primary: \"--primary\",\r\n primaryForeground: \"--primary-foreground\",\r\n secondary: \"--secondary\",\r\n secondaryForeground: \"--secondary-foreground\",\r\n muted: \"--muted\",\r\n mutedForeground: \"--muted-foreground\",\r\n accent: \"--accent\",\r\n accentForeground: \"--accent-foreground\",\r\n destructive: \"--destructive\",\r\n destructiveForeground: \"--destructive-foreground\",\r\n border: \"--border\",\r\n input: \"--input\",\r\n ring: \"--ring\",\r\n chart1: \"--chart-1\",\r\n chart2: \"--chart-2\",\r\n chart3: \"--chart-3\",\r\n chart4: \"--chart-4\",\r\n chart5: \"--chart-5\",\r\n sidebar: \"--sidebar\",\r\n sidebarForeground: \"--sidebar-foreground\",\r\n sidebarPrimary: \"--sidebar-primary\",\r\n sidebarPrimaryForeground: \"--sidebar-primary-foreground\",\r\n sidebarAccent: \"--sidebar-accent\",\r\n sidebarAccentForeground: \"--sidebar-accent-foreground\",\r\n sidebarBorder: \"--sidebar-border\",\r\n sidebarRing: \"--sidebar-ring\",\r\n};\r\n\r\n/** Converts a single color scheme's tokens into a CSS variable map. */\r\nexport function colorTokensToVars(tokens: ColorTokens): CssVarMap {\r\n const vars: CssVarMap = {};\r\n for (const key of Object.keys(COLOR_VAR) as Array<keyof ColorTokens>) {\r\n vars[COLOR_VAR[key]] = tokens[key];\r\n }\r\n return vars;\r\n}\r\n\r\n/** Builds the scheme-independent CSS variables (radius, fonts, elevation, ...). */\r\nexport function structuralVars(theme: ThemeConfig): CssVarMap {\r\n const vars: CssVarMap = {};\r\n\r\n // Radius scale derived from the anchor radius.\r\n vars[\"--radius\"] = theme.radius.base;\r\n const scale = { ...DEFAULT_RADIUS_SCALE, ...theme.radius.scale };\r\n for (const key of Object.keys(scale) as Array<keyof RadiusScale>) {\r\n vars[`--radius-${key}`] = `calc(var(--radius) * ${scale[key]})`;\r\n }\r\n\r\n // Typography.\r\n vars[\"--font-sans\"] = theme.typography.sans;\r\n vars[\"--font-heading\"] = theme.typography.heading;\r\n vars[\"--font-mono\"] = theme.typography.mono;\r\n\r\n // Elevation / surface treatment.\r\n const { shadows } = theme.elevation;\r\n vars[\"--shadow-xs\"] = shadows.xs;\r\n vars[\"--shadow-sm\"] = shadows.sm;\r\n vars[\"--shadow-md\"] = shadows.md;\r\n vars[\"--shadow-lg\"] = shadows.lg;\r\n vars[\"--shadow-xl\"] = shadows.xl;\r\n vars[\"--surface-border-strength\"] = String(theme.elevation.borderStrength);\r\n vars[\"--elevation\"] =\r\n theme.elevation.level === \"none\" ? \"none\" : `var(--shadow-${theme.elevation.level})`;\r\n\r\n // Density / spacing.\r\n vars[\"--spacing\"] = theme.density.spacing;\r\n vars[\"--density\"] = String(theme.density.scale);\r\n\r\n // Motion.\r\n vars[\"--motion-duration\"] = `${theme.motion.duration}ms`;\r\n vars[\"--motion-ease\"] = theme.motion.easing;\r\n vars[\"--motion-intensity\"] = String(theme.motion.intensity);\r\n\r\n return vars;\r\n}\r\n\r\n/**\r\n * Resolves a full theme into the CSS variables for a given color scheme.\r\n * Combines the scheme's colors with the structural (scheme-independent) tokens.\r\n */\r\nexport function resolveTheme(theme: ThemeConfig, scheme: ColorScheme): CssVarMap {\r\n return {\r\n ...structuralVars(theme),\r\n ...colorTokensToVars(theme.colors[scheme]),\r\n };\r\n}\r\n\r\n/** Resolves only the color variables for a scheme (no structural tokens). */\r\nexport function resolveColors(theme: ThemeConfig, scheme: ColorScheme): CssVarMap {\r\n return colorTokensToVars(theme.colors[scheme]);\r\n}\r\n","import { cssVarsToString } from \"./css-vars\";\r\nimport { resolveColors, resolveTheme } from \"./resolve\";\r\nimport type { ColorScheme, ThemeConfig, ThemeOverride } from \"./types\";\r\n\r\nexport interface ThemeToCssOptions {\r\n /**\r\n * CSS selector the light-scheme variables are attached to. Defaults to\r\n * `:root`. Use e.g. `[data-pallet-scope]` to scope a theme to a subtree.\r\n */\r\n selector?: string;\r\n /**\r\n * Selector for dark-scheme colors. Defaults to `.dark`, combined with\r\n * `selector` (e.g. `.dark`, or `[data-pallet-scope].dark`). If you use the\r\n * `.dark` class strategy this default is what you want.\r\n */\r\n darkSelector?: string;\r\n /**\r\n * When true, also emit `data-pallet-variant` as an attribute selector note in\r\n * a comment. (The attribute itself is set by the provider or manually.)\r\n */\r\n includeVariantComment?: boolean;\r\n}\r\n\r\n/**\r\n * Renders a full theme to a static CSS string, safe to inline in a server\r\n * component (e.g. a Next.js layout) to avoid a flash of unstyled/incorrect\r\n * theme before hydration.\r\n *\r\n * Structural tokens (radius, fonts, elevation, spacing, motion) are emitted on\r\n * the light selector; dark-scheme *colors* are emitted on the dark selector.\r\n */\r\nexport function themeToCss(theme: ThemeConfig, options: ThemeToCssOptions = {}): string {\r\n const selector = options.selector ?? \":root\";\r\n const darkSelector = options.darkSelector ?? \".dark\";\r\n\r\n const light = resolveTheme(theme, \"light\");\r\n const darkColors = resolveColors(theme, \"dark\");\r\n\r\n const variantComment = options.includeVariantComment\r\n ? `/* pallet variant: ${theme.variant} (set data-pallet-variant=\"${theme.variant}\") */\\n`\r\n : \"\";\r\n\r\n return (\r\n variantComment +\r\n `${selector}{${cssVarsToString(light)}}` +\r\n `${darkSelector}{${cssVarsToString(darkColors)}}`\r\n );\r\n}\r\n\r\n/** Serializes a theme (or override) to a compact JSON string for persistence. */\r\nexport function serializeTheme(theme: ThemeConfig | ThemeOverride): string {\r\n return JSON.stringify(theme);\r\n}\r\n\r\n/** Parses a JSON string produced by {@link serializeTheme}. Returns null on error. */\r\nexport function deserializeTheme<T = ThemeOverride>(json: string): T | null {\r\n try {\r\n return JSON.parse(json) as T;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/** Produces the inline `style` attribute value for a scheme, for React usage. */\r\nexport function themeToInlineStyle(\r\n theme: ThemeConfig,\r\n scheme: ColorScheme\r\n): Record<string, string> {\r\n return resolveTheme(theme, scheme) as Record<string, string>;\r\n}\r\n","/**\r\n * Runtime Google Fonts loader. Injects a single stylesheet <link> for the given\r\n * font families. Safe to call repeatedly: each unique family set is only loaded\r\n * once, and the loader is a no-op on the server.\r\n */\r\n\r\nconst LINK_ID = \"pallet-google-fonts\";\r\nconst loaded = new Set<string>();\r\n\r\nexport interface GoogleFontsOptions {\r\n /** Weights to request per family. Defaults to a useful range. */\r\n weights?: number[];\r\n /** `font-display` strategy. Defaults to \"swap\". */\r\n display?: \"auto\" | \"block\" | \"swap\" | \"fallback\" | \"optional\";\r\n}\r\n\r\n/** Builds a Google Fonts CSS2 URL for the given families. */\r\nexport function buildGoogleFontsUrl(\r\n families: string[],\r\n options: GoogleFontsOptions = {}\r\n): string {\r\n const weights = options.weights ?? [400, 500, 600, 700];\r\n const display = options.display ?? \"swap\";\r\n const params = families\r\n .filter(Boolean)\r\n .map((family) => {\r\n const name = family.trim().replace(/\\s+/g, \"+\");\r\n return `family=${name}:wght@${weights.join(\";\")}`;\r\n })\r\n .join(\"&\");\r\n return `https://fonts.googleapis.com/css2?${params}&display=${display}`;\r\n}\r\n\r\n/**\r\n * Ensures the given Google Font families are loaded in the document. Returns the\r\n * injected/updated <link> element, or null when running on the server or when\r\n * there is nothing to load.\r\n */\r\nexport function loadGoogleFonts(\r\n families: string[],\r\n options: GoogleFontsOptions = {}\r\n): HTMLLinkElement | null {\r\n if (typeof document === \"undefined\") return null;\r\n const unique = Array.from(new Set(families.filter(Boolean)));\r\n if (unique.length === 0) return null;\r\n\r\n const key = unique.sort().join(\"|\") + JSON.stringify(options);\r\n if (loaded.has(key)) {\r\n return document.getElementById(LINK_ID) as HTMLLinkElement | null;\r\n }\r\n\r\n ensurePreconnect();\r\n\r\n let link = document.getElementById(LINK_ID) as HTMLLinkElement | null;\r\n if (!link) {\r\n link = document.createElement(\"link\");\r\n link.id = LINK_ID;\r\n link.rel = \"stylesheet\";\r\n document.head.appendChild(link);\r\n }\r\n link.href = buildGoogleFontsUrl(unique, options);\r\n loaded.add(key);\r\n return link;\r\n}\r\n\r\nfunction ensurePreconnect(): void {\r\n if (document.getElementById(\"pallet-gf-preconnect\")) return;\r\n const a = document.createElement(\"link\");\r\n a.id = \"pallet-gf-preconnect\";\r\n a.rel = \"preconnect\";\r\n a.href = \"https://fonts.googleapis.com\";\r\n document.head.appendChild(a);\r\n\r\n const b = document.createElement(\"link\");\r\n b.rel = \"preconnect\";\r\n b.href = \"https://fonts.gstatic.com\";\r\n b.crossOrigin = \"anonymous\";\r\n document.head.appendChild(b);\r\n}\r\n","import type { ColorTokens, ThemeConfig } from \"../core/types\";\r\n\r\nconst light: ColorTokens = {\r\n background: \"oklch(1 0 0)\",\r\n foreground: \"oklch(0.148 0.004 228.8)\",\r\n card: \"oklch(1 0 0)\",\r\n cardForeground: \"oklch(0.148 0.004 228.8)\",\r\n popover: \"oklch(1 0 0)\",\r\n popoverForeground: \"oklch(0.148 0.004 228.8)\",\r\n primary: \"oklch(0.514 0.222 16.935)\",\r\n primaryForeground: \"oklch(0.969 0.015 12.422)\",\r\n secondary: \"oklch(0.967 0.001 286.375)\",\r\n secondaryForeground: \"oklch(0.21 0.006 285.885)\",\r\n muted: \"oklch(0.963 0.002 197.1)\",\r\n mutedForeground: \"oklch(0.56 0.021 213.5)\",\r\n accent: \"oklch(0.963 0.002 197.1)\",\r\n accentForeground: \"oklch(0.218 0.008 223.9)\",\r\n destructive: \"oklch(0.577 0.245 27.325)\",\r\n destructiveForeground: \"oklch(0.985 0 0)\",\r\n border: \"oklch(0.925 0.005 214.3)\",\r\n input: \"oklch(0.925 0.005 214.3)\",\r\n ring: \"oklch(0.723 0.014 214.4)\",\r\n chart1: \"oklch(0.81 0.117 11.638)\",\r\n chart2: \"oklch(0.645 0.246 16.439)\",\r\n chart3: \"oklch(0.586 0.253 17.585)\",\r\n chart4: \"oklch(0.514 0.222 16.935)\",\r\n chart5: \"oklch(0.455 0.188 13.697)\",\r\n sidebar: \"oklch(0.987 0.002 197.1)\",\r\n sidebarForeground: \"oklch(0.148 0.004 228.8)\",\r\n sidebarPrimary: \"oklch(0.586 0.253 17.585)\",\r\n sidebarPrimaryForeground: \"oklch(0.969 0.015 12.422)\",\r\n sidebarAccent: \"oklch(0.963 0.002 197.1)\",\r\n sidebarAccentForeground: \"oklch(0.218 0.008 223.9)\",\r\n sidebarBorder: \"oklch(0.925 0.005 214.3)\",\r\n sidebarRing: \"oklch(0.723 0.014 214.4)\",\r\n};\r\n\r\nconst dark: ColorTokens = {\r\n background: \"oklch(0.148 0.004 228.8)\",\r\n foreground: \"oklch(0.987 0.002 197.1)\",\r\n card: \"oklch(0.218 0.008 223.9)\",\r\n cardForeground: \"oklch(0.987 0.002 197.1)\",\r\n popover: \"oklch(0.218 0.008 223.9)\",\r\n popoverForeground: \"oklch(0.987 0.002 197.1)\",\r\n primary: \"oklch(0.455 0.188 13.697)\",\r\n primaryForeground: \"oklch(0.969 0.015 12.422)\",\r\n secondary: \"oklch(0.274 0.006 286.033)\",\r\n secondaryForeground: \"oklch(0.985 0 0)\",\r\n muted: \"oklch(0.275 0.011 216.9)\",\r\n mutedForeground: \"oklch(0.723 0.014 214.4)\",\r\n accent: \"oklch(0.275 0.011 216.9)\",\r\n accentForeground: \"oklch(0.987 0.002 197.1)\",\r\n destructive: \"oklch(0.704 0.191 22.216)\",\r\n destructiveForeground: \"oklch(0.985 0 0)\",\r\n border: \"oklch(1 0 0 / 10%)\",\r\n input: \"oklch(1 0 0 / 15%)\",\r\n ring: \"oklch(0.56 0.021 213.5)\",\r\n chart1: \"oklch(0.81 0.117 11.638)\",\r\n chart2: \"oklch(0.645 0.246 16.439)\",\r\n chart3: \"oklch(0.586 0.253 17.585)\",\r\n chart4: \"oklch(0.514 0.222 16.935)\",\r\n chart5: \"oklch(0.455 0.188 13.697)\",\r\n sidebar: \"oklch(0.17 0.006 228.8)\",\r\n sidebarForeground: \"oklch(0.987 0.002 197.1)\",\r\n sidebarPrimary: \"oklch(0.514 0.222 16.935)\",\r\n sidebarPrimaryForeground: \"oklch(0.969 0.015 12.422)\",\r\n sidebarAccent: \"oklch(0.24 0.008 228.8)\",\r\n sidebarAccentForeground: \"oklch(0.987 0.002 197.1)\",\r\n sidebarBorder: \"oklch(1 0 0 / 10%)\",\r\n sidebarRing: \"oklch(0.56 0.021 213.5)\",\r\n};\r\n\r\n/**\r\n * The \"flat\" preset: crisp hairline borders, minimal shadows, tighter radius.\r\n * Mirrors the default Quill look and serves as the baseline variant.\r\n */\r\nexport const flat: ThemeConfig = {\r\n name: \"flat\",\r\n variant: \"flat\",\r\n colors: { light, dark },\r\n typography: {\r\n sans: 'ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif',\r\n heading:\r\n 'ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif',\r\n mono: 'ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace',\r\n googleFonts: [],\r\n },\r\n radius: {\r\n base: \"0.45rem\",\r\n },\r\n elevation: {\r\n shadows: {\r\n xs: \"0 1px 2px 0 oklch(0 0 0 / 0.04)\",\r\n sm: \"0 1px 3px 0 oklch(0 0 0 / 0.06), 0 1px 2px -1px oklch(0 0 0 / 0.06)\",\r\n md: \"0 2px 6px -1px oklch(0 0 0 / 0.07), 0 1px 4px -2px oklch(0 0 0 / 0.06)\",\r\n lg: \"0 8px 16px -4px oklch(0 0 0 / 0.08), 0 2px 6px -2px oklch(0 0 0 / 0.06)\",\r\n xl: \"0 16px 32px -8px oklch(0 0 0 / 0.10), 0 4px 10px -4px oklch(0 0 0 / 0.06)\",\r\n },\r\n borderStrength: 0.1,\r\n level: \"none\",\r\n },\r\n density: {\r\n spacing: \"0.25rem\",\r\n scale: 1,\r\n },\r\n motion: {\r\n duration: 200,\r\n easing: \"cubic-bezier(0.22, 1, 0.36, 1)\",\r\n intensity: 1,\r\n },\r\n};\r\n","import type { ColorTokens, ThemeConfig } from \"../core/types\";\r\n\r\n/**\r\n * Light palette for Frosted: cool icy neutrals with translucent surfaces and a\r\n * soft sky-blue accent — designed so backdrop-blur skins can show through.\r\n */\r\nconst light: ColorTokens = {\r\n background: \"oklch(0.94 0.02 240)\",\r\n foreground: \"oklch(0.24 0.03 255)\",\r\n card: \"oklch(1 0.01 240 / 55%)\",\r\n cardForeground: \"oklch(0.24 0.03 255)\",\r\n popover: \"oklch(1 0.01 240 / 62%)\",\r\n popoverForeground: \"oklch(0.24 0.03 255)\",\r\n primary: \"oklch(0.62 0.12 240)\",\r\n primaryForeground: \"oklch(0.99 0.005 240)\",\r\n secondary: \"oklch(0.92 0.02 240 / 70%)\",\r\n secondaryForeground: \"oklch(0.3 0.04 255)\",\r\n muted: \"oklch(0.93 0.015 240 / 65%)\",\r\n mutedForeground: \"oklch(0.5 0.03 250)\",\r\n accent: \"oklch(0.9 0.04 230 / 70%)\",\r\n accentForeground: \"oklch(0.35 0.08 245)\",\r\n destructive: \"oklch(0.6 0.2 25)\",\r\n destructiveForeground: \"oklch(0.99 0 0)\",\r\n border: \"oklch(0.85 0.02 240 / 55%)\",\r\n input: \"oklch(0.97 0.01 240 / 50%)\",\r\n ring: \"oklch(0.62 0.14 235)\",\r\n chart1: \"oklch(0.62 0.12 240)\",\r\n chart2: \"oklch(0.68 0.1 200)\",\r\n chart3: \"oklch(0.58 0.14 280)\",\r\n chart4: \"oklch(0.72 0.08 180)\",\r\n chart5: \"oklch(0.66 0.11 320)\",\r\n sidebar: \"oklch(0.96 0.015 240 / 55%)\",\r\n sidebarForeground: \"oklch(0.24 0.03 255)\",\r\n sidebarPrimary: \"oklch(0.62 0.12 240)\",\r\n sidebarPrimaryForeground: \"oklch(0.99 0.005 240)\",\r\n sidebarAccent: \"oklch(0.9 0.04 230 / 70%)\",\r\n sidebarAccentForeground: \"oklch(0.35 0.08 245)\",\r\n sidebarBorder: \"oklch(0.85 0.02 240 / 50%)\",\r\n sidebarRing: \"oklch(0.62 0.14 235)\",\r\n};\r\n\r\n/** Dark palette: deep indigo glass over a cool night background. */\r\nconst dark: ColorTokens = {\r\n background: \"oklch(0.18 0.03 260)\",\r\n foreground: \"oklch(0.96 0.01 240)\",\r\n card: \"oklch(0.28 0.04 260 / 45%)\",\r\n cardForeground: \"oklch(0.96 0.01 240)\",\r\n popover: \"oklch(0.3 0.04 260 / 52%)\",\r\n popoverForeground: \"oklch(0.96 0.01 240)\",\r\n primary: \"oklch(0.72 0.12 230)\",\r\n primaryForeground: \"oklch(0.18 0.03 260)\",\r\n secondary: \"oklch(0.32 0.03 260 / 55%)\",\r\n secondaryForeground: \"oklch(0.96 0.01 240)\",\r\n muted: \"oklch(0.3 0.03 260 / 50%)\",\r\n mutedForeground: \"oklch(0.72 0.03 250)\",\r\n accent: \"oklch(0.36 0.05 250 / 55%)\",\r\n accentForeground: \"oklch(0.92 0.03 230)\",\r\n destructive: \"oklch(0.68 0.18 22)\",\r\n destructiveForeground: \"oklch(0.99 0 0)\",\r\n border: \"oklch(1 0 0 / 14%)\",\r\n input: \"oklch(1 0 0 / 10%)\",\r\n ring: \"oklch(0.7 0.12 230)\",\r\n chart1: \"oklch(0.72 0.12 230)\",\r\n chart2: \"oklch(0.7 0.1 200)\",\r\n chart3: \"oklch(0.66 0.14 280)\",\r\n chart4: \"oklch(0.74 0.08 180)\",\r\n chart5: \"oklch(0.68 0.11 320)\",\r\n sidebar: \"oklch(0.22 0.035 260 / 50%)\",\r\n sidebarForeground: \"oklch(0.96 0.01 240)\",\r\n sidebarPrimary: \"oklch(0.72 0.12 230)\",\r\n sidebarPrimaryForeground: \"oklch(0.18 0.03 260)\",\r\n sidebarAccent: \"oklch(0.36 0.05 250 / 55%)\",\r\n sidebarAccentForeground: \"oklch(0.92 0.03 230)\",\r\n sidebarBorder: \"oklch(1 0 0 / 12%)\",\r\n sidebarRing: \"oklch(0.7 0.12 230)\",\r\n};\r\n\r\n/**\r\n * The \"frosted\" preset: icy translucent surfaces paired with\r\n * `styles/variant-frosted.css` for backdrop-blur glassmorphism across slots.\r\n */\r\nexport const frosted: ThemeConfig = {\r\n name: \"frosted\",\r\n variant: \"frosted\",\r\n colors: { light, dark },\r\n typography: {\r\n sans: '\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\r\n heading:\r\n '\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\r\n mono: 'ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace',\r\n googleFonts: [\"Inter\"],\r\n },\r\n radius: {\r\n base: \"1rem\",\r\n scale: {\r\n sm: 0.5,\r\n md: 0.75,\r\n lg: 1,\r\n xl: 1.25,\r\n \"2xl\": 1.5,\r\n \"3xl\": 1.75,\r\n \"4xl\": 2,\r\n },\r\n },\r\n elevation: {\r\n shadows: {\r\n xs: \"0 1px 2px 0 oklch(0.45 0.08 240 / 0.06)\",\r\n sm: \"0 2px 10px -2px oklch(0.45 0.08 240 / 0.12), 0 1px 3px -1px oklch(0 0 0 / 0.04)\",\r\n md: \"0 8px 24px -8px oklch(0.45 0.08 240 / 0.18), 0 2px 8px -2px oklch(0 0 0 / 0.05)\",\r\n lg: \"0 18px 40px -12px oklch(0.45 0.08 240 / 0.22), 0 6px 14px -6px oklch(0 0 0 / 0.06)\",\r\n xl: \"0 28px 56px -16px oklch(0.45 0.08 240 / 0.28), 0 10px 20px -8px oklch(0 0 0 / 0.07)\",\r\n },\r\n borderStrength: 0.65,\r\n level: \"lg\",\r\n },\r\n density: {\r\n spacing: \"0.25rem\",\r\n scale: 1.05,\r\n },\r\n motion: {\r\n duration: 260,\r\n easing: \"cubic-bezier(0.22, 1, 0.36, 1)\",\r\n intensity: 1,\r\n },\r\n};\r\n","import type { ColorTokens, ThemeConfig } from \"../core/types\";\r\n\r\n/**\r\n * Light palette from the Toon reference: airy off-white surfaces, near\r\n * borderless inputs, and a soft periwinkle primary with a brighter blue focus\r\n * ring.\r\n */\r\nconst light: ColorTokens = {\r\n background: \"oklch(0.98 0.003 264)\",\r\n foreground: \"oklch(0.21 0.03 264)\",\r\n card: \"oklch(1 0 0)\",\r\n cardForeground: \"oklch(0.21 0.03 264)\",\r\n popover: \"oklch(1 0 0)\",\r\n popoverForeground: \"oklch(0.21 0.03 264)\",\r\n primary: \"oklch(0.7 0.11 264)\",\r\n primaryForeground: \"oklch(0.99 0.002 264)\",\r\n secondary: \"oklch(0.965 0.006 264)\",\r\n secondaryForeground: \"oklch(0.3 0.03 264)\",\r\n muted: \"oklch(0.965 0.006 264)\",\r\n mutedForeground: \"oklch(0.55 0.03 264)\",\r\n accent: \"oklch(0.95 0.03 264)\",\r\n accentForeground: \"oklch(0.42 0.11 264)\",\r\n destructive: \"oklch(0.62 0.22 25)\",\r\n destructiveForeground: \"oklch(0.99 0 0)\",\r\n border: \"oklch(0.92 0.008 264)\",\r\n input: \"oklch(0.965 0.006 264)\",\r\n ring: \"oklch(0.6 0.19 264)\",\r\n chart1: \"oklch(0.7 0.11 264)\",\r\n chart2: \"oklch(0.62 0.15 264)\",\r\n chart3: \"oklch(0.55 0.19 264)\",\r\n chart4: \"oklch(0.72 0.1 210)\",\r\n chart5: \"oklch(0.68 0.13 300)\",\r\n sidebar: \"oklch(0.985 0.003 264)\",\r\n sidebarForeground: \"oklch(0.21 0.03 264)\",\r\n sidebarPrimary: \"oklch(0.7 0.11 264)\",\r\n sidebarPrimaryForeground: \"oklch(0.99 0.002 264)\",\r\n sidebarAccent: \"oklch(0.95 0.03 264)\",\r\n sidebarAccentForeground: \"oklch(0.42 0.11 264)\",\r\n sidebarBorder: \"oklch(0.92 0.008 264)\",\r\n sidebarRing: \"oklch(0.6 0.19 264)\",\r\n};\r\n\r\n/** Dark palette: deep desaturated navy with the same periwinkle accent. */\r\nconst dark: ColorTokens = {\r\n background: \"oklch(0.19 0.02 264)\",\r\n foreground: \"oklch(0.97 0.005 264)\",\r\n card: \"oklch(0.23 0.024 264)\",\r\n cardForeground: \"oklch(0.97 0.005 264)\",\r\n popover: \"oklch(0.23 0.024 264)\",\r\n popoverForeground: \"oklch(0.97 0.005 264)\",\r\n primary: \"oklch(0.72 0.12 264)\",\r\n primaryForeground: \"oklch(0.16 0.03 264)\",\r\n secondary: \"oklch(0.28 0.02 264)\",\r\n secondaryForeground: \"oklch(0.97 0.005 264)\",\r\n muted: \"oklch(0.28 0.02 264)\",\r\n mutedForeground: \"oklch(0.72 0.02 264)\",\r\n accent: \"oklch(0.32 0.05 264)\",\r\n accentForeground: \"oklch(0.9 0.05 264)\",\r\n destructive: \"oklch(0.7 0.19 22)\",\r\n destructiveForeground: \"oklch(0.99 0 0)\",\r\n border: \"oklch(1 0 0 / 10%)\",\r\n input: \"oklch(1 0 0 / 12%)\",\r\n ring: \"oklch(0.65 0.17 264)\",\r\n chart1: \"oklch(0.72 0.12 264)\",\r\n chart2: \"oklch(0.64 0.15 264)\",\r\n chart3: \"oklch(0.58 0.18 264)\",\r\n chart4: \"oklch(0.74 0.1 210)\",\r\n chart5: \"oklch(0.7 0.13 300)\",\r\n sidebar: \"oklch(0.21 0.022 264)\",\r\n sidebarForeground: \"oklch(0.97 0.005 264)\",\r\n sidebarPrimary: \"oklch(0.72 0.12 264)\",\r\n sidebarPrimaryForeground: \"oklch(0.16 0.03 264)\",\r\n sidebarAccent: \"oklch(0.32 0.05 264)\",\r\n sidebarAccentForeground: \"oklch(0.9 0.05 264)\",\r\n sidebarBorder: \"oklch(1 0 0 / 10%)\",\r\n sidebarRing: \"oklch(0.65 0.17 264)\",\r\n};\r\n\r\n/**\r\n * The \"toon\" preset: soft, elevated, and pill-shaped. Large radius, gentle\r\n * layered shadows, subtle borders and a little extra breathing room. Pairs with\r\n * `styles/variant-toon.css` which rounds controls into pills.\r\n */\r\nexport const toon: ThemeConfig = {\r\n name: \"toon\",\r\n variant: \"toon\",\r\n colors: { light, dark },\r\n typography: {\r\n sans: '\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\r\n heading:\r\n '\"Plus Jakarta Sans\", \"Inter\", ui-sans-serif, system-ui, -apple-system, sans-serif',\r\n mono: 'ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace',\r\n googleFonts: [\"Inter\", \"Plus Jakarta Sans\"],\r\n },\r\n radius: {\r\n base: \"1.25rem\",\r\n // A slightly gentler ramp so large elements do not over-round.\r\n scale: {\r\n sm: 0.4,\r\n md: 0.6,\r\n lg: 1,\r\n xl: 1.2,\r\n \"2xl\": 1.5,\r\n \"3xl\": 1.8,\r\n \"4xl\": 2.2,\r\n },\r\n },\r\n elevation: {\r\n shadows: {\r\n xs: \"0 1px 2px 0 oklch(0.55 0.19 264 / 0.06)\",\r\n sm: \"0 2px 8px -2px oklch(0.55 0.19 264 / 0.10), 0 1px 3px -1px oklch(0 0 0 / 0.05)\",\r\n md: \"0 6px 20px -6px oklch(0.55 0.19 264 / 0.16), 0 2px 6px -2px oklch(0 0 0 / 0.06)\",\r\n lg: \"0 14px 34px -10px oklch(0.55 0.19 264 / 0.20), 0 4px 10px -4px oklch(0 0 0 / 0.07)\",\r\n xl: \"0 24px 56px -16px oklch(0.55 0.19 264 / 0.26), 0 8px 18px -8px oklch(0 0 0 / 0.08)\",\r\n },\r\n borderStrength: 0.5,\r\n level: \"md\",\r\n },\r\n density: {\r\n spacing: \"0.26rem\",\r\n scale: 1.1,\r\n },\r\n motion: {\r\n duration: 240,\r\n easing: \"cubic-bezier(0.22, 1, 0.36, 1)\",\r\n intensity: 1,\r\n },\r\n};\r\n","import type { ThemeConfig, VariantName } from \"../core/types\";\r\nimport { flat } from \"./flat\";\r\nimport { frosted } from \"./frosted\";\r\nimport { toon } from \"./toon\";\r\n\r\nexport { flat } from \"./flat\";\r\nexport { frosted } from \"./frosted\";\r\nexport { toon } from \"./toon\";\r\n\r\n/** All built-in presets, keyed by name. */\r\nexport const presets = {\r\n flat,\r\n toon,\r\n frosted,\r\n} satisfies Record<string, ThemeConfig>;\r\n\r\nexport type PresetName = keyof typeof presets;\r\n\r\n/** Returns a built-in preset by name, or undefined if it is not registered. */\r\nexport function getPreset(name: VariantName): ThemeConfig | undefined {\r\n return (presets as Record<string, ThemeConfig>)[name];\r\n}\r\n\r\n/** The default preset used when none is specified. */\r\nexport const defaultPreset: ThemeConfig = flat;\r\n","import { createContext, useContext } from \"react\";\r\nimport type {\r\n ColorScheme,\r\n ThemeConfig,\r\n ThemeOverride,\r\n CssVarMap,\r\n} from \"./core/types\";\r\n\r\n/** Preference for the color scheme; \"system\" follows the OS setting. */\r\nexport type SchemePreference = ColorScheme | \"system\";\r\n\r\n/** The value exposed by {@link ThemeProvider} through {@link useTheme}. */\r\nexport interface PalletContextValue {\r\n /** The fully resolved theme (base preset with overrides applied). */\r\n theme: ThemeConfig;\r\n /** The base preset before overrides. */\r\n basePreset: ThemeConfig;\r\n /** The current user overrides layered on top of the preset. */\r\n overrides: ThemeOverride;\r\n /** The actual color scheme currently rendered. */\r\n scheme: ColorScheme;\r\n /** The user's scheme preference (may be \"system\"). */\r\n schemePreference: SchemePreference;\r\n /** Resolved CSS variables for the current scheme. */\r\n vars: CssVarMap;\r\n\r\n /** Replaces the entire theme with a new preset (by object). Clears overrides. */\r\n setTheme: (theme: ThemeConfig) => void;\r\n /** Applies a built-in/custom preset by name or object. Clears overrides. */\r\n applyPreset: (preset: ThemeConfig | string) => void;\r\n /** Merges a partial override on top of the current overrides. */\r\n updateTheme: (override: ThemeOverride) => void;\r\n /** Clears all overrides, returning to the base preset. */\r\n resetOverrides: () => void;\r\n /** Sets the color-scheme preference. */\r\n setSchemePreference: (preference: SchemePreference) => void;\r\n}\r\n\r\nexport const PalletContext = createContext<PalletContextValue | null>(null);\r\n\r\n/** Reads the Pallet context. Throws if used outside a `ThemeProvider`. */\r\nexport function usePalletContext(): PalletContextValue {\r\n const ctx = useContext(PalletContext);\r\n if (!ctx) {\r\n throw new Error(\"Pallet hooks must be used within a <ThemeProvider>.\");\r\n }\r\n return ctx;\r\n}\r\n","import * as React from \"react\";\r\n\r\nimport { applyCssVars } from \"./core/css-vars\";\r\nimport { deepMerge } from \"./core/merge\";\r\nimport { resolveTheme } from \"./core/resolve\";\r\nimport { themeToInlineStyle } from \"./core/serialize\";\r\nimport type { ColorScheme, ThemeConfig, ThemeOverride } from \"./core/types\";\r\nimport { loadGoogleFonts } from \"./fonts/google-fonts\";\r\nimport { presets as builtinPresets } from \"./presets\";\r\nimport {\r\n PalletContext,\r\n type PalletContextValue,\r\n type SchemePreference,\r\n} from \"./context\";\r\n\r\nexport interface ThemeProviderProps {\r\n children: React.ReactNode;\r\n /**\r\n * Preset to start from: a preset name (from built-ins or `presets`), or a\r\n * full `ThemeConfig` object. Defaults to \"flat\".\r\n */\r\n defaultPreset?: ThemeConfig | string;\r\n /** Initial overrides layered on top of the preset. */\r\n defaultOverride?: ThemeOverride;\r\n /** Initial color-scheme preference. Defaults to \"system\". */\r\n defaultScheme?: SchemePreference;\r\n /**\r\n * Extra presets available to `applyPreset(name)`, merged with the built-ins.\r\n */\r\n presets?: Record<string, ThemeConfig>;\r\n /**\r\n * Where CSS variables are written:\r\n * - \"root\" (default): on `document.documentElement`, plus the `.dark` class\r\n * and `data-pallet-variant` attribute. Best for app-wide theming.\r\n * - \"self\": on a wrapper `<div>` this provider renders. Best for scoped\r\n * theming / previews. Emits SSR inline styles to avoid a flash.\r\n */\r\n scope?: \"root\" | \"self\";\r\n /**\r\n * If set, overrides + preset name + scheme are persisted to localStorage\r\n * under this key and restored on mount.\r\n */\r\n storageKey?: string;\r\n /** Class name applied to the wrapper element when `scope` is \"self\". */\r\n className?: string;\r\n}\r\n\r\ninterface PersistedState {\r\n presetName?: string;\r\n override?: ThemeOverride;\r\n scheme?: SchemePreference;\r\n}\r\n\r\nfunction resolvePreset(\r\n preset: ThemeConfig | string,\r\n registry: Record<string, ThemeConfig>\r\n): ThemeConfig {\r\n if (typeof preset === \"string\") {\r\n const found = registry[preset];\r\n if (!found) {\r\n throw new Error(`Pallet: unknown preset \"${preset}\".`);\r\n }\r\n return found;\r\n }\r\n return preset;\r\n}\r\n\r\nfunction getSystemScheme(): ColorScheme {\r\n if (typeof window === \"undefined\" || !window.matchMedia) return \"light\";\r\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\r\n}\r\n\r\nexport function ThemeProvider({\r\n children,\r\n defaultPreset = \"flat\",\r\n defaultOverride,\r\n defaultScheme = \"system\",\r\n presets: extraPresets,\r\n scope = \"root\",\r\n storageKey,\r\n className,\r\n}: ThemeProviderProps) {\r\n const registry = React.useMemo<Record<string, ThemeConfig>>(\r\n () => ({ ...builtinPresets, ...extraPresets }),\r\n [extraPresets]\r\n );\r\n\r\n const initialPreset = React.useMemo(\r\n () => resolvePreset(defaultPreset, registry),\r\n // Only resolve the initial preset once from props.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n []\r\n );\r\n\r\n const [basePreset, setBasePreset] = React.useState<ThemeConfig>(initialPreset);\r\n const [overrides, setOverrides] = React.useState<ThemeOverride>(defaultOverride ?? {});\r\n const [schemePreference, setSchemePreference] =\r\n React.useState<SchemePreference>(defaultScheme);\r\n const [systemScheme, setSystemScheme] = React.useState<ColorScheme>(\"light\");\r\n const [hydrated, setHydrated] = React.useState(false);\r\n\r\n const selfRef = React.useRef<HTMLDivElement | null>(null);\r\n\r\n // Restore persisted state on mount.\r\n React.useEffect(() => {\r\n setSystemScheme(getSystemScheme());\r\n if (storageKey) {\r\n try {\r\n const raw = window.localStorage.getItem(storageKey);\r\n if (raw) {\r\n const parsed = JSON.parse(raw) as PersistedState;\r\n if (parsed.presetName && registry[parsed.presetName]) {\r\n setBasePreset(registry[parsed.presetName]!);\r\n }\r\n if (parsed.override) setOverrides(parsed.override);\r\n if (parsed.scheme) setSchemePreference(parsed.scheme);\r\n }\r\n } catch {\r\n /* ignore malformed storage */\r\n }\r\n }\r\n setHydrated(true);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n // Track system scheme changes.\r\n React.useEffect(() => {\r\n if (typeof window === \"undefined\" || !window.matchMedia) return;\r\n const mql = window.matchMedia(\"(prefers-color-scheme: dark)\");\r\n const onChange = () => setSystemScheme(mql.matches ? \"dark\" : \"light\");\r\n onChange();\r\n mql.addEventListener(\"change\", onChange);\r\n return () => mql.removeEventListener(\"change\", onChange);\r\n }, []);\r\n\r\n const theme = React.useMemo(\r\n () => deepMerge(basePreset, overrides),\r\n [basePreset, overrides]\r\n );\r\n\r\n const scheme: ColorScheme =\r\n schemePreference === \"system\" ? systemScheme : schemePreference;\r\n\r\n const vars = React.useMemo(() => resolveTheme(theme, scheme), [theme, scheme]);\r\n\r\n // Persist state.\r\n React.useEffect(() => {\r\n if (!storageKey || !hydrated) return;\r\n const state: PersistedState = {\r\n presetName: basePreset.name,\r\n override: overrides,\r\n scheme: schemePreference,\r\n };\r\n try {\r\n window.localStorage.setItem(storageKey, JSON.stringify(state));\r\n } catch {\r\n /* storage may be unavailable */\r\n }\r\n }, [storageKey, hydrated, basePreset, overrides, schemePreference]);\r\n\r\n // Apply variables + attributes to the chosen scope.\r\n React.useEffect(() => {\r\n const target =\r\n scope === \"self\" ? selfRef.current : document.documentElement;\r\n if (!target) return;\r\n applyCssVars(target, vars);\r\n target.setAttribute(\"data-pallet-variant\", theme.variant);\r\n target.classList.toggle(\"dark\", scheme === \"dark\");\r\n }, [scope, vars, theme.variant, scheme]);\r\n\r\n // Load configured Google fonts.\r\n React.useEffect(() => {\r\n const families = theme.typography.googleFonts ?? [];\r\n if (families.length > 0) loadGoogleFonts(families);\r\n }, [theme.typography.googleFonts]);\r\n\r\n const applyPreset = React.useCallback(\r\n (preset: ThemeConfig | string) => {\r\n setBasePreset(resolvePreset(preset, registry));\r\n setOverrides({});\r\n },\r\n [registry]\r\n );\r\n\r\n const setTheme = React.useCallback((next: ThemeConfig) => {\r\n setBasePreset(next);\r\n setOverrides({});\r\n }, []);\r\n\r\n const updateTheme = React.useCallback((override: ThemeOverride) => {\r\n setOverrides((prev) => deepMerge(prev, override));\r\n }, []);\r\n\r\n const resetOverrides = React.useCallback(() => setOverrides({}), []);\r\n\r\n const value = React.useMemo<PalletContextValue>(\r\n () => ({\r\n theme,\r\n basePreset,\r\n overrides,\r\n scheme,\r\n schemePreference,\r\n vars,\r\n setTheme,\r\n applyPreset,\r\n updateTheme,\r\n resetOverrides,\r\n setSchemePreference,\r\n }),\r\n [\r\n theme,\r\n basePreset,\r\n overrides,\r\n scheme,\r\n schemePreference,\r\n vars,\r\n setTheme,\r\n applyPreset,\r\n updateTheme,\r\n resetOverrides,\r\n ]\r\n );\r\n\r\n if (scope === \"self\") {\r\n // Emit inline styles on first render so SSR output already carries the theme.\r\n const inlineStyle = themeToInlineStyle(theme, scheme) as React.CSSProperties;\r\n return (\r\n <PalletContext.Provider value={value}>\r\n <div\r\n ref={selfRef}\r\n data-pallet-variant={theme.variant}\r\n className={[className, scheme === \"dark\" ? \"dark\" : undefined]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n style={inlineStyle}\r\n >\r\n {children}\r\n </div>\r\n </PalletContext.Provider>\r\n );\r\n }\r\n\r\n return <PalletContext.Provider value={value}>{children}</PalletContext.Provider>;\r\n}\r\n","import { usePalletContext, type PalletContextValue } from \"../context\";\r\n\r\n/**\r\n * Access the full theming context: the resolved theme, current scheme, resolved\r\n * CSS variables, and all mutation helpers. Must be used within a\r\n * `<ThemeProvider>`.\r\n */\r\nexport function useTheme(): PalletContextValue {\r\n return usePalletContext();\r\n}\r\n","import { useMemo } from \"react\";\r\n\r\nimport { usePalletContext } from \"../context\";\r\nimport type {\r\n ColorScheme,\r\n ColorTokens,\r\n Density,\r\n ElevationConfig,\r\n Motion,\r\n RadiusScale,\r\n ThemeOverride,\r\n VariantName,\r\n} from \"../core/types\";\r\n\r\n/** Which scheme(s) a color update targets. */\r\nexport type SchemeTarget = ColorScheme | \"both\";\r\n\r\nexport interface ThemeControls {\r\n /** Set a single color role for one or both schemes. */\r\n setColor: (role: keyof ColorTokens, value: string, target?: SchemeTarget) => void;\r\n /** Convenience for the primary color. */\r\n setPrimary: (value: string, target?: SchemeTarget) => void;\r\n /** Convenience for the accent color. */\r\n setAccent: (value: string, target?: SchemeTarget) => void;\r\n /** Merge multiple color roles at once for a given scheme. */\r\n setColors: (colors: Partial<ColorTokens>, target?: SchemeTarget) => void;\r\n\r\n /** Set the anchor radius (e.g. \"0.5rem\", \"1.25rem\"). */\r\n setRadius: (base: string) => void;\r\n /** Override individual radius-scale multipliers. */\r\n setRadiusScale: (scale: Partial<RadiusScale>) => void;\r\n\r\n /** Set one of the font stacks. */\r\n setFont: (kind: \"sans\" | \"heading\" | \"mono\", family: string) => void;\r\n /** Set the Google Font families to auto-load. */\r\n setGoogleFonts: (families: string[]) => void;\r\n\r\n /** Switch the visual variant/skin (sets `data-pallet-variant`). */\r\n setVariant: (variant: VariantName) => void;\r\n\r\n /** Set the default elevation level for surfaces. */\r\n setElevationLevel: (level: ElevationConfig[\"level\"]) => void;\r\n /** Override a single shadow ramp entry. */\r\n setShadow: (key: keyof ElevationConfig[\"shadows\"], value: string) => void;\r\n /** Set hairline border/ring strength (0-1). */\r\n setBorderStrength: (value: number) => void;\r\n\r\n /** Update spacing density. */\r\n setDensity: (density: Partial<Density>) => void;\r\n /** Update motion settings. */\r\n setMotion: (motion: Partial<Motion>) => void;\r\n\r\n /** Escape hatch: merge an arbitrary override. */\r\n update: (override: ThemeOverride) => void;\r\n /** Clear all overrides, returning to the base preset. */\r\n reset: () => void;\r\n}\r\n\r\n/**\r\n * Granular setters for building a theme-editor UI. Every setter layers an\r\n * override on top of the active preset, so `reset()` always returns to a clean\r\n * baseline. Colors default to updating both light and dark schemes; pass a\r\n * target to scope them.\r\n */\r\nexport function useThemeControls(): ThemeControls {\r\n const { updateTheme, resetOverrides } = usePalletContext();\r\n\r\n return useMemo<ThemeControls>(() => {\r\n const colorOverride = (\r\n colors: Partial<ColorTokens>,\r\n target: SchemeTarget\r\n ): ThemeOverride => {\r\n if (target === \"both\") {\r\n return { colors: { light: colors, dark: colors } };\r\n }\r\n return { colors: { [target]: colors } } as ThemeOverride;\r\n };\r\n\r\n const setColors = (colors: Partial<ColorTokens>, target: SchemeTarget = \"both\") =>\r\n updateTheme(colorOverride(colors, target));\r\n\r\n return {\r\n setColors,\r\n setColor: (role, value, target = \"both\") =>\r\n setColors({ [role]: value } as Partial<ColorTokens>, target),\r\n setPrimary: (value, target = \"both\") => setColors({ primary: value }, target),\r\n setAccent: (value, target = \"both\") => setColors({ accent: value }, target),\r\n\r\n setRadius: (base) => updateTheme({ radius: { base } }),\r\n setRadiusScale: (scale) => updateTheme({ radius: { scale } }),\r\n\r\n setFont: (kind, family) => updateTheme({ typography: { [kind]: family } }),\r\n setGoogleFonts: (families) => updateTheme({ typography: { googleFonts: families } }),\r\n\r\n setVariant: (variant) => updateTheme({ variant }),\r\n\r\n setElevationLevel: (level) => updateTheme({ elevation: { level } }),\r\n setShadow: (key, value) =>\r\n updateTheme({ elevation: { shadows: { [key]: value } } }),\r\n setBorderStrength: (value) => updateTheme({ elevation: { borderStrength: value } }),\r\n\r\n setDensity: (density) => updateTheme({ density }),\r\n setMotion: (motion) => updateTheme({ motion }),\r\n\r\n update: updateTheme,\r\n reset: resetOverrides,\r\n };\r\n }, [updateTheme, resetOverrides]);\r\n}\r\n","import { usePalletContext } from \"../context\";\r\nimport { presets as builtinPresets } from \"../presets\";\r\nimport type { ThemeConfig } from \"../core/types\";\r\n\r\nexport interface UsePresetResult {\r\n /** The active base preset. */\r\n preset: ThemeConfig;\r\n /** Names of the built-in presets. */\r\n builtinNames: string[];\r\n /** Apply a preset by name or object (clears overrides). */\r\n applyPreset: (preset: ThemeConfig | string) => void;\r\n}\r\n\r\n/** Read the active preset and switch between presets. */\r\nexport function usePreset(): UsePresetResult {\r\n const { basePreset, applyPreset } = usePalletContext();\r\n return {\r\n preset: basePreset,\r\n builtinNames: Object.keys(builtinPresets),\r\n applyPreset,\r\n };\r\n}\r\n","import { useCallback } from \"react\";\r\n\r\nimport { usePalletContext, type SchemePreference } from \"../context\";\r\nimport type { ColorScheme } from \"../core/types\";\r\n\r\nexport interface UseColorSchemeResult {\r\n /** The actual scheme currently rendered. */\r\n scheme: ColorScheme;\r\n /** The user's preference (may be \"system\"). */\r\n preference: SchemePreference;\r\n /** Set the preference explicitly. */\r\n setPreference: (preference: SchemePreference) => void;\r\n /** Toggle between light and dark (resolves \"system\" to its current value). */\r\n toggle: () => void;\r\n}\r\n\r\n/** Read and control the color scheme (light / dark / system). */\r\nexport function useColorScheme(): UseColorSchemeResult {\r\n const { scheme, schemePreference, setSchemePreference } = usePalletContext();\r\n\r\n const toggle = useCallback(() => {\r\n setSchemePreference(scheme === \"dark\" ? \"light\" : \"dark\");\r\n }, [scheme, setSchemePreference]);\r\n\r\n return {\r\n scheme,\r\n preference: schemePreference,\r\n setPreference: setSchemePreference,\r\n toggle,\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/css-vars.ts","../src/core/merge.ts","../src/core/resolve.ts","../src/core/serialize.ts","../src/fonts/google-fonts.ts","../src/presets/flat.ts","../src/presets/frosted.ts","../src/presets/toon.ts","../src/presets/index.ts","../src/context.ts","../src/provider.tsx","../src/hooks/use-theme.ts","../src/hooks/use-theme-controls.ts","../src/hooks/use-preset.ts","../src/hooks/use-color-scheme.ts"],"names":["light","dark","defaultPreset","useMemo","useCallback"],"mappings":"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","file":"index.js","sourcesContent":["import type { CssVarMap } from \"./types\";\r\n\r\n/**\r\n * Applies a CSS variable map to a DOM element's inline style. Runs only in the\r\n * browser; on the server it is a no-op (SSR should use {@link themeToCss}).\r\n */\r\nexport function applyCssVars(element: HTMLElement | null | undefined, vars: CssVarMap): void {\r\n if (!element) return;\r\n for (const [name, value] of Object.entries(vars)) {\r\n element.style.setProperty(name, value);\r\n }\r\n}\r\n\r\n/** Removes the given CSS variable names from an element's inline style. */\r\nexport function clearCssVars(element: HTMLElement | null | undefined, names: string[]): void {\r\n if (!element) return;\r\n for (const name of names) {\r\n element.style.removeProperty(name);\r\n }\r\n}\r\n\r\n/** Serializes a CSS variable map into a `key:value;` declaration string. */\r\nexport function cssVarsToString(vars: CssVarMap): string {\r\n return Object.entries(vars)\r\n .map(([name, value]) => `${name}:${value};`)\r\n .join(\"\");\r\n}\r\n","import type { DeepPartial } from \"./types\";\r\n\r\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\r\n return (\r\n typeof value === \"object\" &&\r\n value !== null &&\r\n !Array.isArray(value) &&\r\n Object.getPrototypeOf(value) === Object.prototype\r\n );\r\n}\r\n\r\n/**\r\n * Deeply merges `override` onto `base`, returning a new object. Arrays and\r\n * primitives from `override` replace those in `base`; nested plain objects are\r\n * merged recursively. `undefined` values in the override are ignored.\r\n */\r\nexport function deepMerge<T>(base: T, override?: DeepPartial<T>): T {\r\n if (!override) return base;\r\n\r\n // Only plain objects are ever merged recursively (see the guard below), so a\r\n // shallow object clone is always the correct starting point here.\r\n const result: Record<string, unknown> = { ...(base as Record<string, unknown>) };\r\n\r\n for (const key of Object.keys(override)) {\r\n const overrideValue = (override as Record<string, unknown>)[key];\r\n if (overrideValue === undefined) continue;\r\n\r\n const baseValue = result[key];\r\n if (isPlainObject(baseValue) && isPlainObject(overrideValue)) {\r\n result[key] = deepMerge(baseValue, overrideValue as DeepPartial<typeof baseValue>);\r\n } else {\r\n result[key] = overrideValue;\r\n }\r\n }\r\n\r\n return result as T;\r\n}\r\n\r\n/** Merges any number of overrides left-to-right onto a base theme. */\r\nexport function mergeAll<T>(base: T, ...overrides: Array<DeepPartial<T> | undefined>): T {\r\n return overrides.reduce<T>((acc, override) => deepMerge(acc, override), base);\r\n}\r\n","import type {\r\n ColorScheme,\r\n ColorTokens,\r\n CssVarMap,\r\n RadiusScale,\r\n ThemeConfig,\r\n} from \"./types\";\r\n\r\n/** Default radius multipliers, mirroring shadcn's derived `--radius-*` scale. */\r\nexport const DEFAULT_RADIUS_SCALE: RadiusScale = {\r\n sm: 0.6,\r\n md: 0.8,\r\n lg: 1,\r\n xl: 1.4,\r\n \"2xl\": 1.8,\r\n \"3xl\": 2.2,\r\n \"4xl\": 2.6,\r\n};\r\n\r\n/** Maps a `ColorTokens` field to its shadcn CSS custom property name. */\r\nconst COLOR_VAR: Record<keyof ColorTokens, string> = {\r\n background: \"--background\",\r\n foreground: \"--foreground\",\r\n card: \"--card\",\r\n cardForeground: \"--card-foreground\",\r\n popover: \"--popover\",\r\n popoverForeground: \"--popover-foreground\",\r\n primary: \"--primary\",\r\n primaryForeground: \"--primary-foreground\",\r\n secondary: \"--secondary\",\r\n secondaryForeground: \"--secondary-foreground\",\r\n muted: \"--muted\",\r\n mutedForeground: \"--muted-foreground\",\r\n accent: \"--accent\",\r\n accentForeground: \"--accent-foreground\",\r\n destructive: \"--destructive\",\r\n destructiveForeground: \"--destructive-foreground\",\r\n border: \"--border\",\r\n input: \"--input\",\r\n ring: \"--ring\",\r\n chart1: \"--chart-1\",\r\n chart2: \"--chart-2\",\r\n chart3: \"--chart-3\",\r\n chart4: \"--chart-4\",\r\n chart5: \"--chart-5\",\r\n sidebar: \"--sidebar\",\r\n sidebarForeground: \"--sidebar-foreground\",\r\n sidebarPrimary: \"--sidebar-primary\",\r\n sidebarPrimaryForeground: \"--sidebar-primary-foreground\",\r\n sidebarAccent: \"--sidebar-accent\",\r\n sidebarAccentForeground: \"--sidebar-accent-foreground\",\r\n sidebarBorder: \"--sidebar-border\",\r\n sidebarRing: \"--sidebar-ring\",\r\n};\r\n\r\n/** Converts a single color scheme's tokens into a CSS variable map. */\r\nexport function colorTokensToVars(tokens: ColorTokens): CssVarMap {\r\n const vars: CssVarMap = {};\r\n for (const key of Object.keys(COLOR_VAR) as Array<keyof ColorTokens>) {\r\n vars[COLOR_VAR[key]] = tokens[key];\r\n }\r\n return vars;\r\n}\r\n\r\n/** Builds the scheme-independent CSS variables (radius, fonts, elevation, ...). */\r\nexport function structuralVars(theme: ThemeConfig): CssVarMap {\r\n const vars: CssVarMap = {};\r\n\r\n // Radius scale derived from the anchor radius.\r\n vars[\"--radius\"] = theme.radius.base;\r\n const scale = { ...DEFAULT_RADIUS_SCALE, ...theme.radius.scale };\r\n for (const key of Object.keys(scale) as Array<keyof RadiusScale>) {\r\n vars[`--radius-${key}`] = `calc(var(--radius) * ${scale[key]})`;\r\n }\r\n\r\n // Typography.\r\n vars[\"--font-sans\"] = theme.typography.sans;\r\n vars[\"--font-heading\"] = theme.typography.heading;\r\n vars[\"--font-mono\"] = theme.typography.mono;\r\n\r\n // Elevation / surface treatment.\r\n const { shadows } = theme.elevation;\r\n vars[\"--shadow-xs\"] = shadows.xs;\r\n vars[\"--shadow-sm\"] = shadows.sm;\r\n vars[\"--shadow-md\"] = shadows.md;\r\n vars[\"--shadow-lg\"] = shadows.lg;\r\n vars[\"--shadow-xl\"] = shadows.xl;\r\n vars[\"--surface-border-strength\"] = String(theme.elevation.borderStrength);\r\n vars[\"--elevation\"] =\r\n theme.elevation.level === \"none\" ? \"none\" : `var(--shadow-${theme.elevation.level})`;\r\n\r\n // Density / spacing.\r\n vars[\"--spacing\"] = theme.density.spacing;\r\n vars[\"--density\"] = String(theme.density.scale);\r\n\r\n // Motion.\r\n vars[\"--motion-duration\"] = `${theme.motion.duration}ms`;\r\n vars[\"--motion-ease\"] = theme.motion.easing;\r\n vars[\"--motion-intensity\"] = String(theme.motion.intensity);\r\n\r\n return vars;\r\n}\r\n\r\n/**\r\n * Resolves a full theme into the CSS variables for a given color scheme.\r\n * Combines the scheme's colors with the structural (scheme-independent) tokens.\r\n */\r\nexport function resolveTheme(theme: ThemeConfig, scheme: ColorScheme): CssVarMap {\r\n return {\r\n ...structuralVars(theme),\r\n ...colorTokensToVars(theme.colors[scheme]),\r\n };\r\n}\r\n\r\n/** Resolves only the color variables for a scheme (no structural tokens). */\r\nexport function resolveColors(theme: ThemeConfig, scheme: ColorScheme): CssVarMap {\r\n return colorTokensToVars(theme.colors[scheme]);\r\n}\r\n","import { cssVarsToString } from \"./css-vars\";\r\nimport { resolveColors, resolveTheme } from \"./resolve\";\r\nimport type { ColorScheme, ThemeConfig, ThemeOverride } from \"./types\";\r\n\r\nexport interface ThemeToCssOptions {\r\n /**\r\n * CSS selector the light-scheme variables are attached to. Defaults to\r\n * `:root`. Use e.g. `[data-pallet-scope]` to scope a theme to a subtree.\r\n */\r\n selector?: string;\r\n /**\r\n * Selector for dark-scheme colors. Defaults to `.dark`, combined with\r\n * `selector` (e.g. `.dark`, or `[data-pallet-scope].dark`). If you use the\r\n * `.dark` class strategy this default is what you want.\r\n */\r\n darkSelector?: string;\r\n /**\r\n * When true, also emit `data-pallet-variant` as an attribute selector note in\r\n * a comment. (The attribute itself is set by the provider or manually.)\r\n */\r\n includeVariantComment?: boolean;\r\n}\r\n\r\n/**\r\n * Renders a full theme to a static CSS string, safe to inline in a server\r\n * component (e.g. a Next.js layout) to avoid a flash of unstyled/incorrect\r\n * theme before hydration.\r\n *\r\n * Structural tokens (radius, fonts, elevation, spacing, motion) are emitted on\r\n * the light selector; dark-scheme *colors* are emitted on the dark selector.\r\n */\r\nexport function themeToCss(theme: ThemeConfig, options: ThemeToCssOptions = {}): string {\r\n const selector = options.selector ?? \":root\";\r\n const darkSelector = options.darkSelector ?? \".dark\";\r\n\r\n const light = resolveTheme(theme, \"light\");\r\n const darkColors = resolveColors(theme, \"dark\");\r\n\r\n const variantComment = options.includeVariantComment\r\n ? `/* pallet variant: ${theme.variant} (set data-pallet-variant=\"${theme.variant}\") */\\n`\r\n : \"\";\r\n\r\n return (\r\n variantComment +\r\n `${selector}{${cssVarsToString(light)}}` +\r\n `${darkSelector}{${cssVarsToString(darkColors)}}`\r\n );\r\n}\r\n\r\n/** Serializes a theme (or override) to a compact JSON string for persistence. */\r\nexport function serializeTheme(theme: ThemeConfig | ThemeOverride): string {\r\n return JSON.stringify(theme);\r\n}\r\n\r\n/** Parses a JSON string produced by {@link serializeTheme}. Returns null on error. */\r\nexport function deserializeTheme<T = ThemeOverride>(json: string): T | null {\r\n try {\r\n return JSON.parse(json) as T;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/** Produces the inline `style` attribute value for a scheme, for React usage. */\r\nexport function themeToInlineStyle(\r\n theme: ThemeConfig,\r\n scheme: ColorScheme\r\n): Record<string, string> {\r\n return resolveTheme(theme, scheme) as Record<string, string>;\r\n}\r\n","/**\r\n * Runtime Google Fonts loader. Injects a single stylesheet <link> for the given\r\n * font families. Safe to call repeatedly: each unique family set is only loaded\r\n * once, and the loader is a no-op on the server.\r\n */\r\n\r\nconst LINK_ID = \"pallet-google-fonts\";\r\nconst loaded = new Set<string>();\r\n\r\nexport interface GoogleFontsOptions {\r\n /** Weights to request per family. Defaults to a useful range. */\r\n weights?: number[];\r\n /** `font-display` strategy. Defaults to \"swap\". */\r\n display?: \"auto\" | \"block\" | \"swap\" | \"fallback\" | \"optional\";\r\n}\r\n\r\n/** Builds a Google Fonts CSS2 URL for the given families. */\r\nexport function buildGoogleFontsUrl(\r\n families: string[],\r\n options: GoogleFontsOptions = {}\r\n): string {\r\n const weights = options.weights ?? [400, 500, 600, 700];\r\n const display = options.display ?? \"swap\";\r\n const params = families\r\n .filter(Boolean)\r\n .map((family) => {\r\n const name = family.trim().replace(/\\s+/g, \"+\");\r\n return `family=${name}:wght@${weights.join(\";\")}`;\r\n })\r\n .join(\"&\");\r\n return `https://fonts.googleapis.com/css2?${params}&display=${display}`;\r\n}\r\n\r\n/**\r\n * Ensures the given Google Font families are loaded in the document. Returns the\r\n * injected/updated <link> element, or null when running on the server or when\r\n * there is nothing to load.\r\n */\r\nexport function loadGoogleFonts(\r\n families: string[],\r\n options: GoogleFontsOptions = {}\r\n): HTMLLinkElement | null {\r\n if (typeof document === \"undefined\") return null;\r\n const unique = Array.from(new Set(families.filter(Boolean)));\r\n if (unique.length === 0) return null;\r\n\r\n const key = unique.sort().join(\"|\") + JSON.stringify(options);\r\n if (loaded.has(key)) {\r\n return document.getElementById(LINK_ID) as HTMLLinkElement | null;\r\n }\r\n\r\n ensurePreconnect();\r\n\r\n let link = document.getElementById(LINK_ID) as HTMLLinkElement | null;\r\n if (!link) {\r\n link = document.createElement(\"link\");\r\n link.id = LINK_ID;\r\n link.rel = \"stylesheet\";\r\n document.head.appendChild(link);\r\n }\r\n link.href = buildGoogleFontsUrl(unique, options);\r\n loaded.add(key);\r\n return link;\r\n}\r\n\r\nfunction ensurePreconnect(): void {\r\n if (document.getElementById(\"pallet-gf-preconnect\")) return;\r\n const a = document.createElement(\"link\");\r\n a.id = \"pallet-gf-preconnect\";\r\n a.rel = \"preconnect\";\r\n a.href = \"https://fonts.googleapis.com\";\r\n document.head.appendChild(a);\r\n\r\n const b = document.createElement(\"link\");\r\n b.rel = \"preconnect\";\r\n b.href = \"https://fonts.gstatic.com\";\r\n b.crossOrigin = \"anonymous\";\r\n document.head.appendChild(b);\r\n}\r\n","import type { ColorTokens, ThemeConfig } from \"../core/types\";\r\n\r\nconst light: ColorTokens = {\r\n background: \"oklch(1 0 0)\",\r\n foreground: \"oklch(0.148 0.004 228.8)\",\r\n card: \"oklch(1 0 0)\",\r\n cardForeground: \"oklch(0.148 0.004 228.8)\",\r\n popover: \"oklch(1 0 0)\",\r\n popoverForeground: \"oklch(0.148 0.004 228.8)\",\r\n primary: \"oklch(0.514 0.222 16.935)\",\r\n primaryForeground: \"oklch(0.969 0.015 12.422)\",\r\n secondary: \"oklch(0.967 0.001 286.375)\",\r\n secondaryForeground: \"oklch(0.21 0.006 285.885)\",\r\n muted: \"oklch(0.963 0.002 197.1)\",\r\n mutedForeground: \"oklch(0.56 0.021 213.5)\",\r\n accent: \"oklch(0.963 0.002 197.1)\",\r\n accentForeground: \"oklch(0.218 0.008 223.9)\",\r\n destructive: \"oklch(0.577 0.245 27.325)\",\r\n destructiveForeground: \"oklch(0.985 0 0)\",\r\n border: \"oklch(0.925 0.005 214.3)\",\r\n input: \"oklch(0.925 0.005 214.3)\",\r\n ring: \"oklch(0.723 0.014 214.4)\",\r\n chart1: \"oklch(0.81 0.117 11.638)\",\r\n chart2: \"oklch(0.645 0.246 16.439)\",\r\n chart3: \"oklch(0.586 0.253 17.585)\",\r\n chart4: \"oklch(0.514 0.222 16.935)\",\r\n chart5: \"oklch(0.455 0.188 13.697)\",\r\n sidebar: \"oklch(0.987 0.002 197.1)\",\r\n sidebarForeground: \"oklch(0.148 0.004 228.8)\",\r\n sidebarPrimary: \"oklch(0.586 0.253 17.585)\",\r\n sidebarPrimaryForeground: \"oklch(0.969 0.015 12.422)\",\r\n sidebarAccent: \"oklch(0.963 0.002 197.1)\",\r\n sidebarAccentForeground: \"oklch(0.218 0.008 223.9)\",\r\n sidebarBorder: \"oklch(0.925 0.005 214.3)\",\r\n sidebarRing: \"oklch(0.723 0.014 214.4)\",\r\n};\r\n\r\nconst dark: ColorTokens = {\r\n background: \"oklch(0.148 0.004 228.8)\",\r\n foreground: \"oklch(0.987 0.002 197.1)\",\r\n card: \"oklch(0.218 0.008 223.9)\",\r\n cardForeground: \"oklch(0.987 0.002 197.1)\",\r\n popover: \"oklch(0.218 0.008 223.9)\",\r\n popoverForeground: \"oklch(0.987 0.002 197.1)\",\r\n primary: \"oklch(0.455 0.188 13.697)\",\r\n primaryForeground: \"oklch(0.969 0.015 12.422)\",\r\n secondary: \"oklch(0.274 0.006 286.033)\",\r\n secondaryForeground: \"oklch(0.985 0 0)\",\r\n muted: \"oklch(0.275 0.011 216.9)\",\r\n mutedForeground: \"oklch(0.723 0.014 214.4)\",\r\n accent: \"oklch(0.275 0.011 216.9)\",\r\n accentForeground: \"oklch(0.987 0.002 197.1)\",\r\n destructive: \"oklch(0.704 0.191 22.216)\",\r\n destructiveForeground: \"oklch(0.985 0 0)\",\r\n border: \"oklch(1 0 0 / 10%)\",\r\n input: \"oklch(1 0 0 / 15%)\",\r\n ring: \"oklch(0.56 0.021 213.5)\",\r\n chart1: \"oklch(0.81 0.117 11.638)\",\r\n chart2: \"oklch(0.645 0.246 16.439)\",\r\n chart3: \"oklch(0.586 0.253 17.585)\",\r\n chart4: \"oklch(0.514 0.222 16.935)\",\r\n chart5: \"oklch(0.455 0.188 13.697)\",\r\n sidebar: \"oklch(0.17 0.006 228.8)\",\r\n sidebarForeground: \"oklch(0.987 0.002 197.1)\",\r\n sidebarPrimary: \"oklch(0.514 0.222 16.935)\",\r\n sidebarPrimaryForeground: \"oklch(0.969 0.015 12.422)\",\r\n sidebarAccent: \"oklch(0.24 0.008 228.8)\",\r\n sidebarAccentForeground: \"oklch(0.987 0.002 197.1)\",\r\n sidebarBorder: \"oklch(1 0 0 / 10%)\",\r\n sidebarRing: \"oklch(0.56 0.021 213.5)\",\r\n};\r\n\r\n/**\r\n * The \"flat\" preset: crisp hairline borders, minimal shadows, tighter radius.\r\n * Mirrors the default Quill look and serves as the baseline variant.\r\n */\r\nexport const flat: ThemeConfig = {\r\n name: \"flat\",\r\n variant: \"flat\",\r\n colors: { light, dark },\r\n typography: {\r\n sans: 'ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif',\r\n heading:\r\n 'ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif',\r\n mono: 'ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace',\r\n googleFonts: [],\r\n },\r\n radius: {\r\n base: \"0.45rem\",\r\n },\r\n elevation: {\r\n shadows: {\r\n xs: \"0 1px 2px 0 oklch(0 0 0 / 0.04)\",\r\n sm: \"0 1px 3px 0 oklch(0 0 0 / 0.06), 0 1px 2px -1px oklch(0 0 0 / 0.06)\",\r\n md: \"0 2px 6px -1px oklch(0 0 0 / 0.07), 0 1px 4px -2px oklch(0 0 0 / 0.06)\",\r\n lg: \"0 8px 16px -4px oklch(0 0 0 / 0.08), 0 2px 6px -2px oklch(0 0 0 / 0.06)\",\r\n xl: \"0 16px 32px -8px oklch(0 0 0 / 0.10), 0 4px 10px -4px oklch(0 0 0 / 0.06)\",\r\n },\r\n borderStrength: 0.1,\r\n level: \"none\",\r\n },\r\n density: {\r\n spacing: \"0.25rem\",\r\n scale: 1,\r\n },\r\n motion: {\r\n duration: 200,\r\n easing: \"cubic-bezier(0.22, 1, 0.36, 1)\",\r\n intensity: 1,\r\n },\r\n};\r\n","import type { ColorTokens, ThemeConfig } from \"../core/types\";\r\n\r\n/**\r\n * Light palette for Frosted: cool icy neutrals with translucent surfaces and a\r\n * soft sky-blue accent — designed so backdrop-blur skins can show through.\r\n */\r\nconst light: ColorTokens = {\r\n background: \"oklch(0.94 0.02 240)\",\r\n foreground: \"oklch(0.24 0.03 255)\",\r\n card: \"oklch(1 0.01 240 / 55%)\",\r\n cardForeground: \"oklch(0.24 0.03 255)\",\r\n popover: \"oklch(1 0.01 240 / 62%)\",\r\n popoverForeground: \"oklch(0.24 0.03 255)\",\r\n primary: \"oklch(0.62 0.12 240)\",\r\n primaryForeground: \"oklch(0.99 0.005 240)\",\r\n secondary: \"oklch(0.92 0.02 240 / 70%)\",\r\n secondaryForeground: \"oklch(0.3 0.04 255)\",\r\n muted: \"oklch(0.93 0.015 240 / 65%)\",\r\n mutedForeground: \"oklch(0.5 0.03 250)\",\r\n accent: \"oklch(0.9 0.04 230 / 70%)\",\r\n accentForeground: \"oklch(0.35 0.08 245)\",\r\n destructive: \"oklch(0.6 0.2 25)\",\r\n destructiveForeground: \"oklch(0.99 0 0)\",\r\n border: \"oklch(0.85 0.02 240 / 55%)\",\r\n input: \"oklch(0.97 0.01 240 / 50%)\",\r\n ring: \"oklch(0.62 0.14 235)\",\r\n chart1: \"oklch(0.62 0.12 240)\",\r\n chart2: \"oklch(0.68 0.1 200)\",\r\n chart3: \"oklch(0.58 0.14 280)\",\r\n chart4: \"oklch(0.72 0.08 180)\",\r\n chart5: \"oklch(0.66 0.11 320)\",\r\n sidebar: \"oklch(0.96 0.015 240 / 55%)\",\r\n sidebarForeground: \"oklch(0.24 0.03 255)\",\r\n sidebarPrimary: \"oklch(0.62 0.12 240)\",\r\n sidebarPrimaryForeground: \"oklch(0.99 0.005 240)\",\r\n sidebarAccent: \"oklch(0.9 0.04 230 / 70%)\",\r\n sidebarAccentForeground: \"oklch(0.35 0.08 245)\",\r\n sidebarBorder: \"oklch(0.85 0.02 240 / 50%)\",\r\n sidebarRing: \"oklch(0.62 0.14 235)\",\r\n};\r\n\r\n/** Dark palette: deep indigo glass over a cool night background. */\r\nconst dark: ColorTokens = {\r\n background: \"oklch(0.18 0.03 260)\",\r\n foreground: \"oklch(0.96 0.01 240)\",\r\n card: \"oklch(0.28 0.04 260 / 45%)\",\r\n cardForeground: \"oklch(0.96 0.01 240)\",\r\n popover: \"oklch(0.3 0.04 260 / 52%)\",\r\n popoverForeground: \"oklch(0.96 0.01 240)\",\r\n primary: \"oklch(0.72 0.12 230)\",\r\n primaryForeground: \"oklch(0.18 0.03 260)\",\r\n secondary: \"oklch(0.32 0.03 260 / 55%)\",\r\n secondaryForeground: \"oklch(0.96 0.01 240)\",\r\n muted: \"oklch(0.3 0.03 260 / 50%)\",\r\n mutedForeground: \"oklch(0.72 0.03 250)\",\r\n accent: \"oklch(0.36 0.05 250 / 55%)\",\r\n accentForeground: \"oklch(0.92 0.03 230)\",\r\n destructive: \"oklch(0.68 0.18 22)\",\r\n destructiveForeground: \"oklch(0.99 0 0)\",\r\n border: \"oklch(1 0 0 / 14%)\",\r\n input: \"oklch(1 0 0 / 10%)\",\r\n ring: \"oklch(0.7 0.12 230)\",\r\n chart1: \"oklch(0.72 0.12 230)\",\r\n chart2: \"oklch(0.7 0.1 200)\",\r\n chart3: \"oklch(0.66 0.14 280)\",\r\n chart4: \"oklch(0.74 0.08 180)\",\r\n chart5: \"oklch(0.68 0.11 320)\",\r\n sidebar: \"oklch(0.22 0.035 260 / 50%)\",\r\n sidebarForeground: \"oklch(0.96 0.01 240)\",\r\n sidebarPrimary: \"oklch(0.72 0.12 230)\",\r\n sidebarPrimaryForeground: \"oklch(0.18 0.03 260)\",\r\n sidebarAccent: \"oklch(0.36 0.05 250 / 55%)\",\r\n sidebarAccentForeground: \"oklch(0.92 0.03 230)\",\r\n sidebarBorder: \"oklch(1 0 0 / 12%)\",\r\n sidebarRing: \"oklch(0.7 0.12 230)\",\r\n};\r\n\r\n/**\r\n * The \"frosted\" preset: icy translucent surfaces paired with\r\n * `styles/variant-frosted.css` for backdrop-blur glassmorphism across slots.\r\n */\r\nexport const frosted: ThemeConfig = {\r\n name: \"frosted\",\r\n variant: \"frosted\",\r\n colors: { light, dark },\r\n typography: {\r\n sans: '\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\r\n heading:\r\n '\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\r\n mono: 'ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace',\r\n googleFonts: [\"Inter\"],\r\n },\r\n radius: {\r\n base: \"0.75rem\",\r\n scale: {\r\n sm: 0.55,\r\n md: 0.8,\r\n lg: 1,\r\n xl: 1.2,\r\n \"2xl\": 1.4,\r\n \"3xl\": 1.6,\r\n \"4xl\": 1.8,\r\n },\r\n },\r\n elevation: {\r\n shadows: {\r\n xs: \"none\",\r\n sm: \"none\",\r\n md: \"0 4px 16px -8px oklch(0.45 0.08 240 / 0.12)\",\r\n lg: \"0 10px 28px -12px oklch(0.45 0.08 240 / 0.16)\",\r\n xl: \"0 18px 40px -16px oklch(0.45 0.08 240 / 0.2)\",\r\n },\r\n borderStrength: 0.35,\r\n level: \"sm\",\r\n },\r\n density: {\r\n spacing: \"0.25rem\",\r\n scale: 1.05,\r\n },\r\n motion: {\r\n duration: 260,\r\n easing: \"cubic-bezier(0.22, 1, 0.36, 1)\",\r\n intensity: 1,\r\n },\r\n};\r\n","import type { ColorTokens, ThemeConfig } from \"../core/types\";\r\n\r\n/**\r\n * Light palette for Toon: clean dashboard neutrals with a solid blue accent.\r\n * Cel-shaded / neo-brutalist — depth comes from thick bottom borders, not shadows.\r\n */\r\nconst light: ColorTokens = {\r\n background: \"oklch(0.965 0.005 260)\",\r\n foreground: \"oklch(0.22 0.02 260)\",\r\n card: \"oklch(1 0 0)\",\r\n cardForeground: \"oklch(0.22 0.02 260)\",\r\n popover: \"oklch(1 0 0)\",\r\n popoverForeground: \"oklch(0.22 0.02 260)\",\r\n primary: \"oklch(0.55 0.19 255)\",\r\n primaryForeground: \"oklch(0.99 0.005 255)\",\r\n secondary: \"oklch(0.96 0.01 260)\",\r\n secondaryForeground: \"oklch(0.28 0.03 260)\",\r\n muted: \"oklch(0.95 0.008 260)\",\r\n mutedForeground: \"oklch(0.52 0.02 260)\",\r\n accent: \"oklch(0.94 0.03 255)\",\r\n accentForeground: \"oklch(0.4 0.12 255)\",\r\n destructive: \"oklch(0.58 0.22 25)\",\r\n destructiveForeground: \"oklch(0.99 0 0)\",\r\n border: \"oklch(0.82 0.015 260)\",\r\n input: \"oklch(1 0 0)\",\r\n ring: \"oklch(0.55 0.19 255)\",\r\n chart1: \"oklch(0.55 0.19 255)\",\r\n chart2: \"oklch(0.62 0.18 300)\",\r\n chart3: \"oklch(0.7 0.16 55)\",\r\n chart4: \"oklch(0.65 0.17 145)\",\r\n chart5: \"oklch(0.6 0.2 25)\",\r\n sidebar: \"oklch(1 0 0)\",\r\n sidebarForeground: \"oklch(0.22 0.02 260)\",\r\n sidebarPrimary: \"oklch(0.55 0.19 255)\",\r\n sidebarPrimaryForeground: \"oklch(0.99 0.005 255)\",\r\n sidebarAccent: \"oklch(0.94 0.03 255)\",\r\n sidebarAccentForeground: \"oklch(0.4 0.12 255)\",\r\n sidebarBorder: \"oklch(0.82 0.015 260)\",\r\n sidebarRing: \"oklch(0.55 0.19 255)\",\r\n};\r\n\r\n/** Dark palette: ink surfaces with the same punched blue accent. */\r\nconst dark: ColorTokens = {\r\n background: \"oklch(0.18 0.02 260)\",\r\n foreground: \"oklch(0.96 0.01 260)\",\r\n card: \"oklch(0.24 0.025 260)\",\r\n cardForeground: \"oklch(0.96 0.01 260)\",\r\n popover: \"oklch(0.24 0.025 260)\",\r\n popoverForeground: \"oklch(0.96 0.01 260)\",\r\n primary: \"oklch(0.68 0.16 255)\",\r\n primaryForeground: \"oklch(0.18 0.03 260)\",\r\n secondary: \"oklch(0.3 0.02 260)\",\r\n secondaryForeground: \"oklch(0.96 0.01 260)\",\r\n muted: \"oklch(0.3 0.02 260)\",\r\n mutedForeground: \"oklch(0.7 0.02 260)\",\r\n accent: \"oklch(0.32 0.05 255)\",\r\n accentForeground: \"oklch(0.85 0.06 255)\",\r\n destructive: \"oklch(0.68 0.18 22)\",\r\n destructiveForeground: \"oklch(0.99 0 0)\",\r\n border: \"oklch(1 0 0 / 16%)\",\r\n input: \"oklch(0.24 0.025 260)\",\r\n ring: \"oklch(0.68 0.16 255)\",\r\n chart1: \"oklch(0.68 0.16 255)\",\r\n chart2: \"oklch(0.7 0.15 300)\",\r\n chart3: \"oklch(0.75 0.14 55)\",\r\n chart4: \"oklch(0.7 0.14 145)\",\r\n chart5: \"oklch(0.68 0.18 25)\",\r\n sidebar: \"oklch(0.22 0.025 260)\",\r\n sidebarForeground: \"oklch(0.96 0.01 260)\",\r\n sidebarPrimary: \"oklch(0.68 0.16 255)\",\r\n sidebarPrimaryForeground: \"oklch(0.18 0.03 260)\",\r\n sidebarAccent: \"oklch(0.32 0.05 255)\",\r\n sidebarAccentForeground: \"oklch(0.85 0.06 255)\",\r\n sidebarBorder: \"oklch(1 0 0 / 14%)\",\r\n sidebarRing: \"oklch(0.68 0.16 255)\",\r\n};\r\n\r\n/**\r\n * The \"toon\" preset: cel-shaded / neo-brutalist. Moderate radius, flat color,\r\n * zero soft shadows. Depth comes from `variant-toon.css` thick bottom borders\r\n * auto-darkened from each surface fill via `--toon-fill`.\r\n */\r\nexport const toon: ThemeConfig = {\r\n name: \"toon\",\r\n variant: \"toon\",\r\n colors: { light, dark },\r\n typography: {\r\n sans: '\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\r\n heading:\r\n '\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\r\n mono: 'ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace',\r\n googleFonts: [\"Inter\"],\r\n },\r\n radius: {\r\n base: \"0.75rem\",\r\n scale: {\r\n sm: 0.55,\r\n md: 0.75,\r\n lg: 1,\r\n xl: 1.15,\r\n \"2xl\": 1.35,\r\n \"3xl\": 1.55,\r\n \"4xl\": 1.75,\r\n },\r\n },\r\n elevation: {\r\n // Hard lips live in the variant CSS — keep token shadows empty so utilities\r\n // like `shadow-sm` do not reintroduce soft elevation.\r\n shadows: {\r\n xs: \"none\",\r\n sm: \"none\",\r\n md: \"none\",\r\n lg: \"none\",\r\n xl: \"none\",\r\n },\r\n borderStrength: 1,\r\n level: \"none\",\r\n },\r\n density: {\r\n spacing: \"0.25rem\",\r\n scale: 1,\r\n },\r\n motion: {\r\n duration: 160,\r\n easing: \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\r\n intensity: 1,\r\n },\r\n};\r\n","import type { ThemeConfig, VariantName } from \"../core/types\";\nimport { flat } from \"./flat\";\nimport { frosted } from \"./frosted\";\nimport { toon } from \"./toon\";\n\nexport { flat } from \"./flat\";\nexport { frosted } from \"./frosted\";\nexport { toon } from \"./toon\";\n\n/** All built-in presets, keyed by name. */\nexport const presets = {\n flat,\n toon,\n frosted,\n} satisfies Record<string, ThemeConfig>;\n\nexport type PresetName = keyof typeof presets;\n\n/** Returns a built-in preset by name, or undefined if it is not registered. */\nexport function getPreset(name: VariantName): ThemeConfig | undefined {\n return (presets as Record<string, ThemeConfig>)[name];\n}\n\n/** The default preset used when none is specified. */\nexport const defaultPreset: ThemeConfig = flat;\n","import { createContext, useContext } from \"react\";\r\nimport type {\r\n ColorScheme,\r\n ThemeConfig,\r\n ThemeOverride,\r\n CssVarMap,\r\n} from \"./core/types\";\r\n\r\n/** Preference for the color scheme; \"system\" follows the OS setting. */\r\nexport type SchemePreference = ColorScheme | \"system\";\r\n\r\n/** The value exposed by {@link ThemeProvider} through {@link useTheme}. */\r\nexport interface PalletContextValue {\r\n /** The fully resolved theme (base preset with overrides applied). */\r\n theme: ThemeConfig;\r\n /** The base preset before overrides. */\r\n basePreset: ThemeConfig;\r\n /** The current user overrides layered on top of the preset. */\r\n overrides: ThemeOverride;\r\n /** The actual color scheme currently rendered. */\r\n scheme: ColorScheme;\r\n /** The user's scheme preference (may be \"system\"). */\r\n schemePreference: SchemePreference;\r\n /** Resolved CSS variables for the current scheme. */\r\n vars: CssVarMap;\r\n\r\n /** Replaces the entire theme with a new preset (by object). Clears overrides. */\r\n setTheme: (theme: ThemeConfig) => void;\r\n /** Applies a built-in/custom preset by name or object. Clears overrides. */\r\n applyPreset: (preset: ThemeConfig | string) => void;\r\n /** Merges a partial override on top of the current overrides. */\r\n updateTheme: (override: ThemeOverride) => void;\r\n /** Clears all overrides, returning to the base preset. */\r\n resetOverrides: () => void;\r\n /** Sets the color-scheme preference. */\r\n setSchemePreference: (preference: SchemePreference) => void;\r\n}\r\n\r\nexport const PalletContext = createContext<PalletContextValue | null>(null);\r\n\r\n/** Reads the Pallet context. Throws if used outside a `ThemeProvider`. */\r\nexport function usePalletContext(): PalletContextValue {\r\n const ctx = useContext(PalletContext);\r\n if (!ctx) {\r\n throw new Error(\"Pallet hooks must be used within a <ThemeProvider>.\");\r\n }\r\n return ctx;\r\n}\r\n","import * as React from \"react\";\r\n\r\nimport { applyCssVars } from \"./core/css-vars\";\r\nimport { deepMerge } from \"./core/merge\";\r\nimport { resolveTheme } from \"./core/resolve\";\r\nimport { themeToInlineStyle } from \"./core/serialize\";\r\nimport type { ColorScheme, ThemeConfig, ThemeOverride } from \"./core/types\";\r\nimport { loadGoogleFonts } from \"./fonts/google-fonts\";\r\nimport { presets as builtinPresets } from \"./presets\";\r\nimport {\r\n PalletContext,\r\n type PalletContextValue,\r\n type SchemePreference,\r\n} from \"./context\";\r\n\r\nexport interface ThemeProviderProps {\r\n children: React.ReactNode;\r\n /**\r\n * Preset to start from: a preset name (from built-ins or `presets`), or a\r\n * full `ThemeConfig` object. Defaults to \"flat\".\r\n */\r\n defaultPreset?: ThemeConfig | string;\r\n /** Initial overrides layered on top of the preset. */\r\n defaultOverride?: ThemeOverride;\r\n /** Initial color-scheme preference. Defaults to \"system\". */\r\n defaultScheme?: SchemePreference;\r\n /**\r\n * Extra presets available to `applyPreset(name)`, merged with the built-ins.\r\n */\r\n presets?: Record<string, ThemeConfig>;\r\n /**\r\n * Where CSS variables are written:\r\n * - \"root\" (default): on `document.documentElement`, plus the `.dark` class\r\n * and `data-pallet-variant` attribute. Best for app-wide theming.\r\n * - \"self\": on a wrapper `<div>` this provider renders. Best for scoped\r\n * theming / previews. Emits SSR inline styles to avoid a flash.\r\n */\r\n scope?: \"root\" | \"self\";\r\n /**\r\n * If set, overrides + preset name + scheme are persisted to localStorage\r\n * under this key and restored on mount.\r\n */\r\n storageKey?: string;\r\n /** Class name applied to the wrapper element when `scope` is \"self\". */\r\n className?: string;\r\n}\r\n\r\ninterface PersistedState {\r\n presetName?: string;\r\n override?: ThemeOverride;\r\n scheme?: SchemePreference;\r\n}\r\n\r\nfunction resolvePreset(\r\n preset: ThemeConfig | string,\r\n registry: Record<string, ThemeConfig>\r\n): ThemeConfig {\r\n if (typeof preset === \"string\") {\r\n const found = registry[preset];\r\n if (!found) {\r\n throw new Error(`Pallet: unknown preset \"${preset}\".`);\r\n }\r\n return found;\r\n }\r\n return preset;\r\n}\r\n\r\nfunction getSystemScheme(): ColorScheme {\r\n if (typeof window === \"undefined\" || !window.matchMedia) return \"light\";\r\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\r\n}\r\n\r\nexport function ThemeProvider({\r\n children,\r\n defaultPreset = \"flat\",\r\n defaultOverride,\r\n defaultScheme = \"system\",\r\n presets: extraPresets,\r\n scope = \"root\",\r\n storageKey,\r\n className,\r\n}: ThemeProviderProps) {\r\n const registry = React.useMemo<Record<string, ThemeConfig>>(\r\n () => ({ ...builtinPresets, ...extraPresets }),\r\n [extraPresets]\r\n );\r\n\r\n const initialPreset = React.useMemo(\r\n () => resolvePreset(defaultPreset, registry),\r\n // Only resolve the initial preset once from props.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n []\r\n );\r\n\r\n const [basePreset, setBasePreset] = React.useState<ThemeConfig>(initialPreset);\r\n const [overrides, setOverrides] = React.useState<ThemeOverride>(defaultOverride ?? {});\r\n const [schemePreference, setSchemePreference] =\r\n React.useState<SchemePreference>(defaultScheme);\r\n const [systemScheme, setSystemScheme] = React.useState<ColorScheme>(\"light\");\r\n const [hydrated, setHydrated] = React.useState(false);\r\n\r\n const selfRef = React.useRef<HTMLDivElement | null>(null);\r\n\r\n // Restore persisted state on mount.\r\n React.useEffect(() => {\r\n setSystemScheme(getSystemScheme());\r\n if (storageKey) {\r\n try {\r\n const raw = window.localStorage.getItem(storageKey);\r\n if (raw) {\r\n const parsed = JSON.parse(raw) as PersistedState;\r\n if (parsed.presetName && registry[parsed.presetName]) {\r\n setBasePreset(registry[parsed.presetName]!);\r\n }\r\n if (parsed.override) setOverrides(parsed.override);\r\n if (parsed.scheme) setSchemePreference(parsed.scheme);\r\n }\r\n } catch {\r\n /* ignore malformed storage */\r\n }\r\n }\r\n setHydrated(true);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n // Track system scheme changes.\r\n React.useEffect(() => {\r\n if (typeof window === \"undefined\" || !window.matchMedia) return;\r\n const mql = window.matchMedia(\"(prefers-color-scheme: dark)\");\r\n const onChange = () => setSystemScheme(mql.matches ? \"dark\" : \"light\");\r\n onChange();\r\n mql.addEventListener(\"change\", onChange);\r\n return () => mql.removeEventListener(\"change\", onChange);\r\n }, []);\r\n\r\n const theme = React.useMemo(\r\n () => deepMerge(basePreset, overrides),\r\n [basePreset, overrides]\r\n );\r\n\r\n const scheme: ColorScheme =\r\n schemePreference === \"system\" ? systemScheme : schemePreference;\r\n\r\n const vars = React.useMemo(() => resolveTheme(theme, scheme), [theme, scheme]);\r\n\r\n // Persist state.\r\n React.useEffect(() => {\r\n if (!storageKey || !hydrated) return;\r\n const state: PersistedState = {\r\n presetName: basePreset.name,\r\n override: overrides,\r\n scheme: schemePreference,\r\n };\r\n try {\r\n window.localStorage.setItem(storageKey, JSON.stringify(state));\r\n } catch {\r\n /* storage may be unavailable */\r\n }\r\n }, [storageKey, hydrated, basePreset, overrides, schemePreference]);\r\n\r\n // Apply variables + attributes to the chosen scope.\r\n React.useEffect(() => {\r\n const target =\r\n scope === \"self\" ? selfRef.current : document.documentElement;\r\n if (!target) return;\r\n applyCssVars(target, vars);\r\n target.setAttribute(\"data-pallet-variant\", theme.variant);\r\n target.classList.toggle(\"dark\", scheme === \"dark\");\r\n }, [scope, vars, theme.variant, scheme]);\r\n\r\n // Load configured Google fonts.\r\n React.useEffect(() => {\r\n const families = theme.typography.googleFonts ?? [];\r\n if (families.length > 0) loadGoogleFonts(families);\r\n }, [theme.typography.googleFonts]);\r\n\r\n const applyPreset = React.useCallback(\r\n (preset: ThemeConfig | string) => {\r\n setBasePreset(resolvePreset(preset, registry));\r\n setOverrides({});\r\n },\r\n [registry]\r\n );\r\n\r\n const setTheme = React.useCallback((next: ThemeConfig) => {\r\n setBasePreset(next);\r\n setOverrides({});\r\n }, []);\r\n\r\n const updateTheme = React.useCallback((override: ThemeOverride) => {\r\n setOverrides((prev) => deepMerge(prev, override));\r\n }, []);\r\n\r\n const resetOverrides = React.useCallback(() => setOverrides({}), []);\r\n\r\n const value = React.useMemo<PalletContextValue>(\r\n () => ({\r\n theme,\r\n basePreset,\r\n overrides,\r\n scheme,\r\n schemePreference,\r\n vars,\r\n setTheme,\r\n applyPreset,\r\n updateTheme,\r\n resetOverrides,\r\n setSchemePreference,\r\n }),\r\n [\r\n theme,\r\n basePreset,\r\n overrides,\r\n scheme,\r\n schemePreference,\r\n vars,\r\n setTheme,\r\n applyPreset,\r\n updateTheme,\r\n resetOverrides,\r\n ]\r\n );\r\n\r\n if (scope === \"self\") {\r\n // Emit inline styles on first render so SSR output already carries the theme.\r\n const inlineStyle = themeToInlineStyle(theme, scheme) as React.CSSProperties;\r\n return (\r\n <PalletContext.Provider value={value}>\r\n <div\r\n ref={selfRef}\r\n data-pallet-variant={theme.variant}\r\n className={[className, scheme === \"dark\" ? \"dark\" : undefined]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n style={inlineStyle}\r\n >\r\n {children}\r\n </div>\r\n </PalletContext.Provider>\r\n );\r\n }\r\n\r\n return <PalletContext.Provider value={value}>{children}</PalletContext.Provider>;\r\n}\r\n","import { usePalletContext, type PalletContextValue } from \"../context\";\r\n\r\n/**\r\n * Access the full theming context: the resolved theme, current scheme, resolved\r\n * CSS variables, and all mutation helpers. Must be used within a\r\n * `<ThemeProvider>`.\r\n */\r\nexport function useTheme(): PalletContextValue {\r\n return usePalletContext();\r\n}\r\n","import { useMemo } from \"react\";\r\n\r\nimport { usePalletContext } from \"../context\";\r\nimport type {\r\n ColorScheme,\r\n ColorTokens,\r\n Density,\r\n ElevationConfig,\r\n Motion,\r\n RadiusScale,\r\n ThemeOverride,\r\n VariantName,\r\n} from \"../core/types\";\r\n\r\n/** Which scheme(s) a color update targets. */\r\nexport type SchemeTarget = ColorScheme | \"both\";\r\n\r\nexport interface ThemeControls {\r\n /** Set a single color role for one or both schemes. */\r\n setColor: (role: keyof ColorTokens, value: string, target?: SchemeTarget) => void;\r\n /** Convenience for the primary color. */\r\n setPrimary: (value: string, target?: SchemeTarget) => void;\r\n /** Convenience for the accent color. */\r\n setAccent: (value: string, target?: SchemeTarget) => void;\r\n /** Merge multiple color roles at once for a given scheme. */\r\n setColors: (colors: Partial<ColorTokens>, target?: SchemeTarget) => void;\r\n\r\n /** Set the anchor radius (e.g. \"0.5rem\", \"1.25rem\"). */\r\n setRadius: (base: string) => void;\r\n /** Override individual radius-scale multipliers. */\r\n setRadiusScale: (scale: Partial<RadiusScale>) => void;\r\n\r\n /** Set one of the font stacks. */\r\n setFont: (kind: \"sans\" | \"heading\" | \"mono\", family: string) => void;\r\n /** Set the Google Font families to auto-load. */\r\n setGoogleFonts: (families: string[]) => void;\r\n\r\n /** Switch the visual variant/skin (sets `data-pallet-variant`). */\r\n setVariant: (variant: VariantName) => void;\r\n\r\n /** Set the default elevation level for surfaces. */\r\n setElevationLevel: (level: ElevationConfig[\"level\"]) => void;\r\n /** Override a single shadow ramp entry. */\r\n setShadow: (key: keyof ElevationConfig[\"shadows\"], value: string) => void;\r\n /** Set hairline border/ring strength (0-1). */\r\n setBorderStrength: (value: number) => void;\r\n\r\n /** Update spacing density. */\r\n setDensity: (density: Partial<Density>) => void;\r\n /** Update motion settings. */\r\n setMotion: (motion: Partial<Motion>) => void;\r\n\r\n /** Escape hatch: merge an arbitrary override. */\r\n update: (override: ThemeOverride) => void;\r\n /** Clear all overrides, returning to the base preset. */\r\n reset: () => void;\r\n}\r\n\r\n/**\r\n * Granular setters for building a theme-editor UI. Every setter layers an\r\n * override on top of the active preset, so `reset()` always returns to a clean\r\n * baseline. Colors default to updating both light and dark schemes; pass a\r\n * target to scope them.\r\n */\r\nexport function useThemeControls(): ThemeControls {\r\n const { updateTheme, resetOverrides } = usePalletContext();\r\n\r\n return useMemo<ThemeControls>(() => {\r\n const colorOverride = (\r\n colors: Partial<ColorTokens>,\r\n target: SchemeTarget\r\n ): ThemeOverride => {\r\n if (target === \"both\") {\r\n return { colors: { light: colors, dark: colors } };\r\n }\r\n return { colors: { [target]: colors } } as ThemeOverride;\r\n };\r\n\r\n const setColors = (colors: Partial<ColorTokens>, target: SchemeTarget = \"both\") =>\r\n updateTheme(colorOverride(colors, target));\r\n\r\n return {\r\n setColors,\r\n setColor: (role, value, target = \"both\") =>\r\n setColors({ [role]: value } as Partial<ColorTokens>, target),\r\n setPrimary: (value, target = \"both\") => setColors({ primary: value }, target),\r\n setAccent: (value, target = \"both\") => setColors({ accent: value }, target),\r\n\r\n setRadius: (base) => updateTheme({ radius: { base } }),\r\n setRadiusScale: (scale) => updateTheme({ radius: { scale } }),\r\n\r\n setFont: (kind, family) => updateTheme({ typography: { [kind]: family } }),\r\n setGoogleFonts: (families) => updateTheme({ typography: { googleFonts: families } }),\r\n\r\n setVariant: (variant) => updateTheme({ variant }),\r\n\r\n setElevationLevel: (level) => updateTheme({ elevation: { level } }),\r\n setShadow: (key, value) =>\r\n updateTheme({ elevation: { shadows: { [key]: value } } }),\r\n setBorderStrength: (value) => updateTheme({ elevation: { borderStrength: value } }),\r\n\r\n setDensity: (density) => updateTheme({ density }),\r\n setMotion: (motion) => updateTheme({ motion }),\r\n\r\n update: updateTheme,\r\n reset: resetOverrides,\r\n };\r\n }, [updateTheme, resetOverrides]);\r\n}\r\n","import { usePalletContext } from \"../context\";\r\nimport { presets as builtinPresets } from \"../presets\";\r\nimport type { ThemeConfig } from \"../core/types\";\r\n\r\nexport interface UsePresetResult {\r\n /** The active base preset. */\r\n preset: ThemeConfig;\r\n /** Names of the built-in presets. */\r\n builtinNames: string[];\r\n /** Apply a preset by name or object (clears overrides). */\r\n applyPreset: (preset: ThemeConfig | string) => void;\r\n}\r\n\r\n/** Read the active preset and switch between presets. */\r\nexport function usePreset(): UsePresetResult {\r\n const { basePreset, applyPreset } = usePalletContext();\r\n return {\r\n preset: basePreset,\r\n builtinNames: Object.keys(builtinPresets),\r\n applyPreset,\r\n };\r\n}\r\n","import { useCallback } from \"react\";\r\n\r\nimport { usePalletContext, type SchemePreference } from \"../context\";\r\nimport type { ColorScheme } from \"../core/types\";\r\n\r\nexport interface UseColorSchemeResult {\r\n /** The actual scheme currently rendered. */\r\n scheme: ColorScheme;\r\n /** The user's preference (may be \"system\"). */\r\n preference: SchemePreference;\r\n /** Set the preference explicitly. */\r\n setPreference: (preference: SchemePreference) => void;\r\n /** Toggle between light and dark (resolves \"system\" to its current value). */\r\n toggle: () => void;\r\n}\r\n\r\n/** Read and control the color scheme (light / dark / system). */\r\nexport function useColorScheme(): UseColorSchemeResult {\r\n const { scheme, schemePreference, setSchemePreference } = usePalletContext();\r\n\r\n const toggle = useCallback(() => {\r\n setSchemePreference(scheme === \"dark\" ? \"light\" : \"dark\");\r\n }, [scheme, setSchemePreference]);\r\n\r\n return {\r\n scheme,\r\n preference: schemePreference,\r\n setPreference: setSchemePreference,\r\n toggle,\r\n };\r\n}\r\n"]}
|
package/dist/presets/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { P as PresetName, h as defaultPreset, i as flat, j as frosted, k as getPreset, p as presets, t as toon } from '../index-
|
|
1
|
+
export { P as PresetName, h as defaultPreset, i as flat, j as frosted, k as getPreset, p as presets, t as toon } from '../index-C8-t5s-1.js';
|
package/dist/presets/index.js
CHANGED
package/dist/server.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { R as RadiusScale, C as ColorTokens, a as CssVarMap, T as ThemeConfig, b as ColorScheme, D as DeepPartial, c as ThemeOverride } from './index-
|
|
2
|
-
export { d as CssColor, e as Density, E as ElevationConfig, M as Motion, P as PresetName, f as RadiusConfig, g as Typography, V as VariantName, h as defaultPreset, i as flat, j as frosted, k as getPreset, p as presets, t as toon } from './index-
|
|
1
|
+
import { R as RadiusScale, C as ColorTokens, a as CssVarMap, T as ThemeConfig, b as ColorScheme, D as DeepPartial, c as ThemeOverride } from './index-C8-t5s-1.js';
|
|
2
|
+
export { d as CssColor, e as Density, E as ElevationConfig, M as Motion, P as PresetName, f as RadiusConfig, g as Typography, V as VariantName, h as defaultPreset, i as flat, j as frosted, k as getPreset, p as presets, t as toon } from './index-C8-t5s-1.js';
|
|
3
3
|
|
|
4
4
|
/** Default radius multipliers, mirroring shadcn's derived `--radius-*` scale. */
|
|
5
5
|
declare const DEFAULT_RADIUS_SCALE: RadiusScale;
|
package/dist/server.js
CHANGED
package/dist/styles/index.css
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Pallet styles bundle.
|
|
3
|
-
*
|
|
4
|
-
* Import once in your global stylesheet:
|
|
5
|
-
* @import "@charstudios/pallet/styles";
|
|
6
|
-
*
|
|
7
|
-
* This pulls in the base token fallbacks and every built-in variant skin. To
|
|
8
|
-
* ship only what you use, import individual files instead, e.g.
|
|
9
|
-
* @import "@charstudios/pallet/styles/base";
|
|
10
|
-
* @import "@charstudios/pallet/styles/frosted";
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
@import "./base.css";
|
|
14
|
-
@import "./variant-flat.css";
|
|
15
|
-
@import "./variant-toon.css";
|
|
16
|
-
@import "./variant-frosted.css";
|
|
1
|
+
/*
|
|
2
|
+
* Pallet styles bundle.
|
|
3
|
+
*
|
|
4
|
+
* Import once in your global stylesheet:
|
|
5
|
+
* @import "@charstudios/pallet/styles";
|
|
6
|
+
*
|
|
7
|
+
* This pulls in the base token fallbacks and every built-in variant skin. To
|
|
8
|
+
* ship only what you use, import individual files instead, e.g.
|
|
9
|
+
* @import "@charstudios/pallet/styles/base";
|
|
10
|
+
* @import "@charstudios/pallet/styles/frosted";
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
@import "./base.css";
|
|
14
|
+
@import "./variant-flat.css";
|
|
15
|
+
@import "./variant-toon.css";
|
|
16
|
+
@import "./variant-frosted.css";
|