{"version":3,"sources":["../src/theme/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/theme/tokens.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/theme/presets.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/theme/registry.ts"],"sourcesContent":["import {\n  type ColorPalette,\n  defaultColors,\n  defaultRadii,\n  defaultSpacing,\n  defaultTypography,\n  type RadiiConfig,\n  type SpacingConfig,\n  type ThemeConfig,\n  type ThemeVars,\n  type TypographyConfig\n} from './tokens';\n\nexport * from './presets';\nexport * from './registry';\nexport * from './tokens';\n\n/**\n * CSS variable prefix\n */\nconst CSS_PREFIX = '--color';\nconst RADII_PREFIX = '--radii';\nconst SPACING_PREFIX = '--spacing';\nconst TYPOGRAPHY_PREFIX = '--font';\n\n/**\n * Convert a nested object path to CSS variable name\n * e.g., ['gray', '100'] -> '--color-gray-100'\n */\nconst toVarName = (prefix: string, ...parts: (string | number)[]): string => `${prefix}-${parts.join('-')}`;\n\n/**\n * Generate CSS variables from a color scale\n */\nconst generateColorScaleVars = (\n  name: string,\n  scale: Record<string | number, string | undefined>\n): Record<string, string> => {\n  const vars: Record<string, string> = {};\n\n  for (const [level, value] of Object.entries(scale)) {\n    if (value !== undefined) {\n      vars[toVarName(CSS_PREFIX, name, level)] = value;\n    }\n  }\n\n  return vars;\n};\n\n/**\n * Add alpha to an OKLab/OKLCH color string.\n * Falls back to `color-mix()` for non-oklab/oklch formats.\n */\nconst withAlpha = (color: string, alpha: number): string => {\n  const trimmed = color.trim();\n  const match = /^(oklab|oklch)\\((.+)\\)$/.exec(trimmed);\n  if (match) {\n    const fn = match[1];\n    const innerRaw = match[2];\n\n    if (fn && innerRaw) {\n      const inner = innerRaw.trim();\n\n      // If the color already has an alpha, keep it as-is.\n      if (inner.includes('/')) {\n        return `${fn}(${inner})`;\n      }\n\n      return `${fn}(${inner} / ${alpha})`;\n    }\n  }\n\n  // Fallback: approximate alpha using color-mix\n  const pct = Math.round(alpha * 1000) / 10;\n  return `color-mix(in oklab, ${trimmed} ${pct}%, transparent)`;\n};\n\n/**\n * Generate CSS variables from a color palette\n */\nconst generateColorVars = (colors: ColorPalette): Record<string, string> => {\n  const vars: Record<string, string> = {};\n\n  if (colors.gray) {\n    Object.assign(vars, generateColorScaleVars('gray', colors.gray));\n  }\n\n  if (colors.blue) {\n    Object.assign(vars, generateColorScaleVars('blue', colors.blue));\n  }\n\n  // Derived convenience tokens used by some components\n  const blue = colors.blue as Record<string, string | undefined> | undefined;\n  if (blue?.['200']) {\n    vars[toVarName(CSS_PREFIX, 'blue', '100-50')] = withAlpha(blue['200'], 0.5);\n  }\n  if (blue?.['300']) {\n    vars[toVarName(CSS_PREFIX, 'blue', '300-40')] = withAlpha(blue['300'], 0.4);\n  }\n\n  if (colors.green) {\n    Object.assign(vars, generateColorScaleVars('green', colors.green));\n  }\n\n  if (colors.red) {\n    Object.assign(vars, generateColorScaleVars('red', colors.red));\n  }\n\n  if (colors.orange) {\n    Object.assign(vars, generateColorScaleVars('orange', colors.orange));\n  }\n\n  if (colors.yellow) {\n    Object.assign(vars, generateColorScaleVars('yellow', colors.yellow));\n  }\n\n  if (colors.white) {\n    vars[toVarName(CSS_PREFIX, 'white')] = colors.white;\n  }\n\n  if (colors.black) {\n    vars[toVarName(CSS_PREFIX, 'black')] = colors.black;\n  }\n\n  if (colors.whiteAlpha) {\n    for (const [level, value] of Object.entries(colors.whiteAlpha)) {\n      if (value !== undefined) {\n        vars[toVarName(CSS_PREFIX, 'white', level)] = value;\n      }\n    }\n  }\n\n  // Ensure `--color-white-0` exists (used by slider thumb gradients)\n  if (!vars[toVarName(CSS_PREFIX, 'white', 0)] && colors.white) {\n    vars[toVarName(CSS_PREFIX, 'white', 0)] = withAlpha(colors.white, 0);\n  }\n\n  if (colors.blackAlpha) {\n    for (const [level, value] of Object.entries(colors.blackAlpha)) {\n      if (value !== undefined) {\n        vars[toVarName(CSS_PREFIX, 'black', level)] = value;\n      }\n    }\n  }\n\n  if (colors.foreground) {\n    vars[toVarName(CSS_PREFIX, 'foreground')] = colors.foreground;\n  }\n\n  return vars;\n};\n\n/**\n * Resolve the theme target element.\n * This keeps the theme API SSR-safe (no-ops when `document` is not available).\n */\nconst resolveThemeTarget = (element?: HTMLElement | null): HTMLElement | null => {\n  if (element) {\n    return element;\n  }\n  if (typeof document === 'undefined') {\n    return null;\n  }\n  return document.documentElement;\n};\n\n/**\n * Generate CSS variables from radii config\n */\nconst generateRadiiVars = (radii: RadiiConfig): Record<string, string> => {\n  const vars: Record<string, string> = {};\n\n  for (const [name, value] of Object.entries(radii)) {\n    if (value !== undefined) {\n      vars[toVarName(RADII_PREFIX, name)] = value;\n    }\n  }\n\n  return vars;\n};\n\n/**\n * Generate CSS variables from spacing config\n */\nconst generateSpacingVars = (spacing: SpacingConfig): Record<string, string> => {\n  const vars: Record<string, string> = {};\n\n  for (const [name, value] of Object.entries(spacing)) {\n    if (value !== undefined) {\n      vars[toVarName(SPACING_PREFIX, name)] = value;\n    }\n  }\n\n  return vars;\n};\n\n/**\n * Generate CSS variables from typography config\n */\nconst generateTypographyVars = (typography: TypographyConfig): Record<string, string> => {\n  const vars: Record<string, string> = {};\n\n  if (typography.fontFamily) {\n    vars[toVarName(TYPOGRAPHY_PREFIX, 'family')] = typography.fontFamily;\n  }\n\n  if (typography.fontMono) {\n    vars[toVarName(TYPOGRAPHY_PREFIX, 'mono')] = typography.fontMono;\n  }\n\n  if (typography.fontSize) {\n    vars[toVarName(TYPOGRAPHY_PREFIX, 'size')] = typography.fontSize;\n  }\n\n  if (typography.lineHeight) {\n    vars[toVarName(TYPOGRAPHY_PREFIX, 'line-height')] = typography.lineHeight;\n  }\n\n  return vars;\n};\n\nconst normalizeCustomVarName = (name: string): string | null => {\n  const trimmed = name.trim();\n  if (!trimmed) {\n    return null;\n  }\n  return trimmed.startsWith('--') ? trimmed : `--${trimmed}`;\n};\n\nconst generateCustomVars = (vars: ThemeVars): Record<string, string> => {\n  const out: Record<string, string> = {};\n\n  for (const [key, value] of Object.entries(vars)) {\n    if (value === null || value === undefined) {\n      continue;\n    }\n\n    const name = normalizeCustomVarName(key);\n    if (!name) {\n      continue;\n    }\n\n    out[name] = String(value);\n  }\n\n  return out;\n};\n\n/**\n * Generate all CSS variables from a theme config\n */\nconst generateThemeVars = (config: ThemeConfig): Record<string, string> => {\n  const vars: Record<string, string> = {};\n\n  if (config.colors) {\n    Object.assign(vars, generateColorVars(config.colors));\n  }\n\n  if (config.radii) {\n    Object.assign(vars, generateRadiiVars(config.radii));\n  }\n\n  if (config.spacing) {\n    Object.assign(vars, generateSpacingVars(config.spacing));\n  }\n\n  if (config.typography) {\n    Object.assign(vars, generateTypographyVars(config.typography));\n  }\n\n  if (config.vars) {\n    Object.assign(vars, generateCustomVars(config.vars));\n  }\n\n  return vars;\n};\n\n/**\n * Create a CSS string from theme configuration\n *\n * @param config - Theme configuration object\n * @param selector - CSS selector to apply variables to (default: ':root')\n * @returns CSS string with variables\n *\n * @example\n * ```typescript\n * const css = createTheme({\n *   colors: {\n *     blue: { 500: '#3b82f6' }\n *   }\n * });\n * // Returns: ':root { --color-blue-500: #3b82f6; }'\n * ```\n */\nexport const createTheme = (config: ThemeConfig, selector = ':root'): string => {\n  const vars = generateThemeVars(config);\n  const declarations = Object.entries(vars)\n    .map(([name, value]) => `  ${name}: ${value};`)\n    .join('\\n');\n\n  return `${selector} {\\n${declarations}\\n}`;\n};\n\n/**\n * Apply theme configuration to an element (default: document root)\n *\n * @param config - Theme configuration object\n * @param element - Target element (default: document.documentElement)\n *\n * @example\n * ```typescript\n * // Apply to document root\n * defineTheme({\n *   colors: {\n *     blue: { 500: '#3b82f6' }\n *   }\n * });\n *\n * // Apply to specific element\n * defineTheme({ colors: { gray: { 900: '#111' } } }, myElement);\n * ```\n */\nexport const defineTheme = (config: ThemeConfig, element?: HTMLElement | null): void => {\n  const target = resolveThemeTarget(element);\n  if (!target) {\n    return;\n  }\n\n  const vars = generateThemeVars(config);\n\n  for (const [name, value] of Object.entries(vars)) {\n    target.style.setProperty(name, value);\n  }\n};\n\n/**\n * Remove theme configuration from an element\n *\n * @param config - Theme configuration object (to know which variables to remove)\n * @param element - Target element (default: document.documentElement)\n */\nexport const removeTheme = (config: ThemeConfig, element?: HTMLElement | null): void => {\n  const target = resolveThemeTarget(element);\n  if (!target) {\n    return;\n  }\n\n  const vars = generateThemeVars(config);\n\n  for (const name of Object.keys(vars)) {\n    target.style.removeProperty(name);\n  }\n};\n\n/**\n * Get the current value of a CSS theme variable\n *\n * @param token - Variable name (with or without '--' prefix)\n * @param element - Element to read from (default: document.documentElement)\n * @returns The computed value or empty string if not found\n *\n * @example\n * ```typescript\n * const blue500 = getThemeValue('color-blue-500');\n * const radius = getThemeValue('--radii-md');\n * ```\n */\nexport const getThemeValue = (token: string, element?: HTMLElement | null): string => {\n  const target = resolveThemeTarget(element);\n  if (!target || typeof getComputedStyle === 'undefined') {\n    return '';\n  }\n\n  const varName = token.startsWith('--') ? token : `--${token}`;\n  return getComputedStyle(target).getPropertyValue(varName).trim();\n};\n\n/**\n * Set a single theme variable\n *\n * @param token - Variable name (with or without '--' prefix)\n * @param value - Value to set\n * @param element - Target element (default: document.documentElement)\n *\n * @example\n * ```typescript\n * setThemeValue('color-blue-500', '#3b82f6');\n * ```\n */\nexport const setThemeValue = (token: string, value: string, element?: HTMLElement | null): void => {\n  const target = resolveThemeTarget(element);\n  if (!target) {\n    return;\n  }\n\n  const varName = token.startsWith('--') ? token : `--${token}`;\n  target.style.setProperty(varName, value);\n};\n\nexport type SystemThemeMode = 'dark' | 'light';\n\n/** Attribute used for CSS-based theme switching */\nexport const EASE_THEME_ATTRIBUTE = 'data-ease-theme';\n\n/**\n * Merge a theme with the library defaults (dark baseline).\n * Use this when you want to start from the built-in design tokens and override a few values.\n */\nexport const mergeTheme = (overrides: ThemeConfig = {}): ThemeConfig => {\n  return {\n    colors: {\n      ...defaultColors,\n      ...overrides.colors,\n      gray: { ...defaultColors.gray, ...overrides.colors?.gray },\n      blue: { ...defaultColors.blue, ...overrides.colors?.blue },\n      green: { ...defaultColors.green, ...overrides.colors?.green },\n      red: { ...defaultColors.red, ...overrides.colors?.red },\n      orange: { ...defaultColors.orange, ...overrides.colors?.orange },\n      yellow: { ...defaultColors.yellow, ...overrides.colors?.yellow },\n      whiteAlpha: { ...defaultColors.whiteAlpha, ...overrides.colors?.whiteAlpha },\n      blackAlpha: { ...defaultColors.blackAlpha, ...overrides.colors?.blackAlpha }\n    },\n    radii: { ...defaultRadii, ...overrides.radii },\n    spacing: { ...defaultSpacing, ...overrides.spacing },\n    typography: { ...defaultTypography, ...overrides.typography },\n    vars: overrides.vars ? { ...overrides.vars } : undefined\n  };\n};\n\n/**\n * Alias for `mergeTheme()`.\n * This package ships a dark baseline theme; light/custom themes should be provided by the consumer.\n */\nexport const createDarkTheme = (overrides: ThemeConfig = {}): ThemeConfig => mergeTheme(overrides);\n\nexport interface SetThemeNameOptions {\n  /** Target element (defaults to `document.documentElement` in the browser). */\n  element?: HTMLElement | null;\n  /** Attribute name to set (defaults to `data-ease-theme`). */\n  attribute?: string;\n  /** Optional `color-scheme` value to set on the target element. */\n  colorScheme?: SystemThemeMode;\n  /** Set `element.style.colorScheme` (default: true when `colorScheme` is provided). */\n  setColorScheme?: boolean;\n}\n\n/**\n * Set the active theme name on an element via `[data-ease-theme=\"<name>\"]`.\n * Useful for CSS-scoped themes.\n */\nexport const setThemeName = (name: string, options: SetThemeNameOptions = {}): void => {\n  const target = resolveThemeTarget(options.element);\n  if (!target) {\n    return;\n  }\n\n  const attribute = options.attribute ?? EASE_THEME_ATTRIBUTE;\n  target.setAttribute(attribute, name);\n\n  if (options.colorScheme && options.setColorScheme !== false) {\n    target.style.colorScheme = options.colorScheme;\n  }\n};\n\nexport const getThemeName = (element?: HTMLElement | null, attribute = EASE_THEME_ATTRIBUTE): string | null => {\n  const target = resolveThemeTarget(element);\n  if (!target) {\n    return null;\n  }\n\n  return target.getAttribute(attribute);\n};\n\nexport interface ApplyThemeOptions {\n  /** Target element (defaults to `document.documentElement` in the browser). */\n  element?: HTMLElement | null;\n  /** Optional theme name to set as `[data-ease-theme=\"<name>\"]`. */\n  name?: string;\n  /** Attribute name to use when `name` is provided. Defaults to `data-ease-theme`. */\n  attribute?: string;\n  /** Optional `color-scheme` value to set on the target element. */\n  colorScheme?: SystemThemeMode;\n  /** Set `[data-ease-theme]` when `name` is provided (default: true). */\n  setAttribute?: boolean;\n  /** Set `element.style.colorScheme` when `colorScheme` is provided (default: true). */\n  setColorScheme?: boolean;\n  /**\n   * If true, the provided theme is first merged with the library defaults via `mergeTheme()`.\n   * Use this when you only pass partial overrides.\n   */\n  mergeWithDefaults?: boolean;\n}\n\n/**\n * Apply a theme config (and optional theme name + color-scheme) to an element.\n * This is SSR-safe: it becomes a no-op when `document` is not available.\n */\nexport const applyTheme = (theme: ThemeConfig, options: ApplyThemeOptions = {}): ThemeConfig => {\n  const target = resolveThemeTarget(options.element);\n  const attribute = options.attribute ?? EASE_THEME_ATTRIBUTE;\n\n  const config = options.mergeWithDefaults ? mergeTheme(theme) : theme;\n\n  defineTheme(config, target);\n\n  if (!target) {\n    return config;\n  }\n\n  if (options.name && options.setAttribute !== false) {\n    target.setAttribute(attribute, options.name);\n  }\n\n  if (options.colorScheme && options.setColorScheme !== false) {\n    target.style.colorScheme = options.colorScheme;\n  }\n\n  return config;\n};\n\nexport const getSystemThemeMode = (): SystemThemeMode => {\n  if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n    return 'dark';\n  }\n  return window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark';\n};\n\nexport interface FollowSystemThemeOptions extends Omit<ApplyThemeOptions, 'name' | 'colorScheme'> {\n  /** Theme name for dark mode (default: 'dark'). */\n  darkName?: string;\n  /** Theme name for light mode (default: 'light'). */\n  lightName?: string;\n}\n\n/**\n * Follow `prefers-color-scheme` and apply the provided themes.\n *\n * This package does NOT ship a light theme preset; you supply both themes.\n * Returns a cleanup function to remove the media query listener.\n */\nexport const followSystemTheme = (\n  themes: { dark: ThemeConfig; light: ThemeConfig },\n  options: FollowSystemThemeOptions = {}\n): (() => void) => {\n  if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n    return () => {};\n  }\n\n  const media = window.matchMedia('(prefers-color-scheme: light)');\n  const apply = (): void => {\n    const mode: SystemThemeMode = media.matches ? 'light' : 'dark';\n    const theme = mode === 'light' ? themes.light : themes.dark;\n\n    applyTheme(theme, {\n      ...options,\n      name: mode === 'light' ? (options.lightName ?? 'light') : (options.darkName ?? 'dark'),\n      colorScheme: mode\n    });\n  };\n\n  apply();\n\n  media.addEventListener('change', apply);\n  return () => media.removeEventListener('change', apply);\n};\n","/**\n * Color scale levels\n */\nexport type ColorScale = {\n  100?: string;\n  200?: string;\n  300?: string;\n  400?: string;\n  500?: string;\n  600?: string;\n  700?: string;\n  800?: string;\n  900?: string;\n  1000?: string;\n  1100?: string;\n};\n\n/**\n * Gray color scale with additional intermediate values\n */\nexport type GrayScale = ColorScale & {\n  0?: string;\n  825?: string;\n  850?: string;\n  875?: string;\n};\n\n/**\n * Alpha color variations\n */\nexport type AlphaColors = {\n  0?: string;\n  1?: string;\n  2?: string;\n  4?: string;\n  6?: string;\n  8?: string;\n  10?: string;\n  12?: string;\n  15?: string;\n  20?: string;\n  30?: string;\n  40?: string;\n  50?: string;\n  70?: string;\n  80?: string;\n  90?: string;\n};\n\n/**\n * Color palette configuration\n */\nexport interface ColorPalette {\n  /** Gray scale colors */\n  gray?: GrayScale;\n  /** Blue scale colors */\n  blue?: ColorScale;\n  /** Green scale colors */\n  green?: ColorScale;\n  /** Red scale colors */\n  red?: ColorScale;\n  /** Orange scale colors */\n  orange?: ColorScale;\n  /** Yellow scale colors */\n  yellow?: ColorScale;\n  /** Base white color */\n  white?: string;\n  /** Base black color */\n  black?: string;\n  /** White alpha variations */\n  whiteAlpha?: AlphaColors;\n  /** Black alpha variations */\n  blackAlpha?: AlphaColors;\n  /** Foreground color */\n  foreground?: string;\n}\n\n/**\n * Border radius configuration\n */\nexport interface RadiiConfig {\n  /** Small radius (4px default) */\n  sm?: string;\n  /** Medium radius (8px default) */\n  md?: string;\n  /** Large radius (12px default) */\n  lg?: string;\n  /** Extra large radius (16px default) */\n  xl?: string;\n  /** Full/pill radius */\n  full?: string;\n}\n\n/**\n * Spacing configuration\n */\nexport interface SpacingConfig {\n  /** Extra small spacing */\n  xs?: string;\n  /** Small spacing */\n  sm?: string;\n  /** Medium spacing */\n  md?: string;\n  /** Large spacing */\n  lg?: string;\n  /** Extra large spacing */\n  xl?: string;\n}\n\n/**\n * Typography configuration\n */\nexport interface TypographyConfig {\n  /** Font family for body text */\n  fontFamily?: string;\n  /** Font family for monospace/code */\n  fontMono?: string;\n  /** Base font size */\n  fontSize?: string;\n  /** Line height */\n  lineHeight?: string;\n}\n\n/**\n * Arbitrary CSS custom properties to apply alongside the theme tokens.\n *\n * Keys may be provided with or without the `--` prefix.\n *\n * @example\n * ```ts\n * vars: {\n *   '--ease-panel-padding': '16px',\n *   'ease-field-label-width': '40%'\n * }\n * ```\n */\nexport type ThemeVars = Record<string, string | number | null | undefined>;\n\n/**\n * Complete theme configuration\n */\nexport interface ThemeConfig {\n  /** Color palette */\n  colors?: ColorPalette;\n  /** Border radii */\n  radii?: RadiiConfig;\n  /** Spacing values */\n  spacing?: SpacingConfig;\n  /** Typography settings */\n  typography?: TypographyConfig;\n  /**\n   * Extra CSS variables (component tokens, app tokens, etc).\n   * This is the recommended place to set `--ease-*` variables.\n   */\n  vars?: ThemeVars;\n}\n\n/**\n * Default color values (oklab)\n */\nexport const defaultColors: Required<ColorPalette> = {\n  gray: {\n    0: 'oklab(98.81% 0 0)',\n    100: 'oklab(97.64% 0.0004 -0.0013)',\n    300: 'oklab(93.49% 0.0011 -0.0039)',\n    400: 'oklab(89.52% 0.0009 -0.0068)',\n    500: 'oklab(81.71% -0.0002 -0.0073)',\n    600: 'oklab(65.21% -0.0019 -0.0144)',\n    700: 'oklab(37.92% -0.0006 -0.0179)',\n    800: 'oklab(28.45% -0.0012 -0.0118)',\n    825: 'oklab(26.45% -0.0012 -0.0105)',\n    850: 'oklab(24.50% -0.0012 -0.0105)',\n    875: 'oklab(22.66% -0.0009 -0.0097)',\n    900: 'oklab(20.68% -0.0006 -0.0065)',\n    1000: 'oklab(18.81% -0.0012 -0.006)'\n  },\n  blue: {\n    100: 'oklab(98.65% 0.0019 -0.0063)',\n    200: 'oklab(97.45% 0.0057 -0.0121)',\n    300: 'oklab(95.88% 0.0086 -0.0183)',\n    400: 'oklab(91.21% 0.0179 -0.0399)',\n    500: 'oklab(84.61% 0.0327 -0.0725)',\n    600: 'oklab(76.85% 0.0462 -0.1115)',\n    700: 'oklab(68.28% 0.0582 -0.1575)',\n    800: 'oklab(59.36% 0.0641 -0.2083)',\n    900: 'oklab(50.69% 0.0492 -0.2575)',\n    1000: 'oklab(46.82% 0.0475 -0.2273)',\n    1100: 'oklch(0.4013 0.171 284.66)'\n  },\n  green: {\n    100: 'oklab(98.44% -0.009 0.0042)',\n    200: 'oklab(97.57% -0.0127 0.0058)',\n    300: 'oklab(96.32% -0.0176 0.0071)',\n    400: 'oklab(93.66% -0.0341 0.0149)',\n    500: 'oklab(89.96% -0.0529 0.0237)',\n    600: 'oklab(85.44% -0.0759 0.0346)',\n    700: 'oklab(80.59% -0.1005 0.0484)',\n    800: 'oklab(75.87% -0.1245 0.0639)',\n    900: 'oklab(71.18% -0.1439 0.0799)',\n    1000: 'oklab(64.89% -0.1265 0.0677)'\n  },\n  red: {\n    100: 'oklab(99.04% 0.0031 0.0009)',\n    200: 'oklab(97.85% 0.0072 0.0022)',\n    300: 'oklab(95.52% 0.0159 0.0036)',\n    400: 'oklab(89.9% 0.037 0.0091)',\n    500: 'oklab(82.78% 0.0664 0.0181)',\n    600: 'oklab(74.46% 0.105 0.031)',\n    700: 'oklab(65.73% 0.1467 0.0503)',\n    800: 'oklab(58.28% 0.1811 0.0773)',\n    900: 'oklab(53.11% 0.1914 0.1028)',\n    1000: 'oklab(48.4% 0.1727 0.0903)'\n  },\n  orange: {\n    100: 'oklab(99.47% 0.0009 0.0044)',\n    200: 'oklab(98.95% 0.0018 0.0088)',\n    300: 'oklab(97.58% 0.0073 0.0133)',\n    400: 'oklab(94.81% 0.0136 0.0305)',\n    500: 'oklab(90.97% 0.0248 0.0519)',\n    600: 'oklab(86.55% 0.0389 0.0778)',\n    700: 'oklab(81.73% 0.0568 0.1053)',\n    800: 'oklab(77.05% 0.0777 0.1296)',\n    900: 'oklab(72.25% 0.108 0.143)',\n    1000: 'oklab(65.81% 0.092 0.1281)'\n  },\n  yellow: {\n    100: 'oklab(99.14% 0.0004 0.0098)',\n    200: 'oklab(97.98% 0.0003 0.0248)',\n    300: 'oklab(96.81% -0.0002 0.0409)',\n    400: 'oklab(95.68% -0.0003 0.0555)',\n    500: 'oklab(91.97% 0.0002 0.102)',\n    600: 'oklab(88.75% 0.0018 0.1409)',\n    700: 'oklab(85.67% 0.0101 0.1648)',\n    800: 'oklab(76.85% 0.0212 0.1568)'\n  },\n  white: 'oklab(95.14% -0.0013 -0.0186)',\n  black: 'oklab(0% 0 0)',\n  whiteAlpha: {\n    0: 'oklab(95.14% -0.0013 -0.0186 / 0)',\n    1: 'oklab(95.14% -0.0013 -0.0186 / 0.0125)',\n    2: 'oklab(95.14% -0.0013 -0.0186 / 0.02)',\n    4: 'oklab(95.14% -0.0013 -0.0186 / 0.04)',\n    6: 'oklab(95.14% -0.0013 -0.0186 / 0.06)',\n    8: 'oklab(95.14% -0.0013 -0.0186 / 0.08)',\n    10: 'oklab(95.14% -0.0013 -0.0186 / 0.1)',\n    12: 'oklab(95.14% -0.0013 -0.0186 / 0.12)',\n    15: 'oklab(95.14% -0.0013 -0.0186 / 0.15)',\n    20: 'oklab(95.14% -0.0013 -0.0186 / 0.2)',\n    30: 'oklab(95.14% -0.0013 -0.0186 / 0.3)',\n    40: 'oklab(95.14% -0.0013 -0.0186 / 0.4)',\n    50: 'oklab(95.14% -0.0013 -0.0186 / 0.5)',\n    70: 'oklab(95.14% -0.0013 -0.0186 / 0.7)',\n    80: 'oklab(95.14% -0.0013 -0.0186 / 0.8)',\n    90: 'oklab(95.14% -0.0013 -0.0186 / 0.9)'\n  },\n  blackAlpha: {\n    0: 'oklab(0% 0 0 / 0)',\n    2: 'oklab(0% 0 0 / 0.02)',\n    4: 'oklab(0% 0 0 / 0.04)',\n    6: 'oklab(0% 0 0 / 0.06)',\n    8: 'oklab(0% 0 0 / 0.08)',\n    10: 'oklab(0% 0 0 / 0.1)',\n    12: 'oklab(0% 0 0 / 0.12)',\n    15: 'oklab(0% 0 0 / 0.15)',\n    20: 'oklab(0% 0 0 / 0.2)',\n    30: 'oklab(0% 0 0 / 0.3)',\n    40: 'oklab(0% 0 0 / 0.4)',\n    50: 'oklab(0% 0 0 / 0.5)',\n    70: 'oklab(0% 0 0 / 0.7)',\n    80: 'oklab(0% 0 0 / 0.8)',\n    90: 'oklab(0% 0 0 / 0.9)'\n  },\n  foreground: 'var(--color-gray-0)'\n};\n\n/**\n * Default border radius values\n */\nexport const defaultRadii: Required<RadiiConfig> = {\n  sm: '4px',\n  md: '8px',\n  lg: '12px',\n  xl: '16px',\n  full: '9999px'\n};\n\n/**\n * Default spacing values\n */\nexport const defaultSpacing: Required<SpacingConfig> = {\n  xs: '4px',\n  sm: '8px',\n  md: '12px',\n  lg: '16px',\n  xl: '24px'\n};\n\n/**\n * Default typography values\n */\nexport const defaultTypography: Required<TypographyConfig> = {\n  fontFamily: '\"Instrument Sans\", system-ui, sans-serif',\n  fontMono: '\"Geist Mono\", monospace',\n  fontSize: '13px',\n  lineHeight: '1.5'\n};\n","import type { ThemeConfig, ThemeVars } from './tokens';\n\nimport { defaultColors, defaultRadii, defaultSpacing, defaultTypography } from './tokens';\n\n/**\n * Default ease UI kit CSS variables (--ease-*).\n * These are component-level design tokens that components consume.\n */\nexport const defaultEaseVars: ThemeVars = {\n  // Typography aliases\n  '--ease-font-family': 'var(--font-family)',\n  '--ease-font-mono': 'var(--font-mono)',\n  '--ease-font-size': 'var(--font-size)',\n  '--ease-font-size-sm': '12px',\n  '--ease-line-height': 'var(--font-line-height)',\n\n  // Panel (ease-state)\n  '--ease-panel-max-width': '332px',\n  '--ease-panel-padding': 'var(--spacing-md)',\n  '--ease-panel-radius': 'var(--radii-lg)',\n  '--ease-panel-border-color': 'var(--color-white-6)',\n  '--ease-panel-background': 'var(--color-gray-1000)',\n  '--ease-panel-shadow': '0 0 40px 0 var(--color-white-2) inset',\n  '--ease-panel-title-font-size': '14px',\n  '--ease-panel-title-font-weight': '500',\n  '--ease-panel-title-line-height': '24px',\n  '--ease-panel-title-color': 'var(--color-blue-100)',\n\n  // Panel additional tokens\n  '--ease-panel-gap': 'var(--spacing-md)',\n  '--ease-panel-headline-font-size': 'var(--ease-font-size)',\n  '--ease-panel-headline-font-weight': '500',\n  '--ease-panel-headline-line-height': '24px',\n  '--ease-panel-headline-color': 'var(--color-blue-100)',\n  '--ease-panel-header-spacing': 'var(--spacing-sm)',\n  '--ease-panel-fade-size': '12px',\n\n  // Panel tab tokens\n  '--ease-panel-tab-font-size': 'var(--ease-font-size)',\n  '--ease-panel-tab-font-weight': '500',\n  '--ease-panel-tab-color': 'var(--color-gray-600)',\n  '--ease-panel-tab-color-hover': 'var(--color-blue-100)',\n  '--ease-panel-tab-color-active': 'var(--color-blue-100)',\n  '--ease-panel-tab-background-active': 'var(--color-white-4)',\n  '--ease-panel-tab-radius': 'var(--radii-sm)',\n\n  // Folder (ease-folder)\n  '--ease-folder-padding': 'var(--spacing-sm)',\n  '--ease-folder-radius': 'var(--radii-md)',\n  '--ease-folder-border-color': 'var(--color-white-4)',\n  '--ease-folder-background': 'var(--color-white-1)',\n  '--ease-folder-shadow': '0 0 24px 0 var(--color-white-2) inset',\n  '--ease-folder-icon-color': 'var(--color-gray-0)',\n  '--ease-folder-chevron-color': 'var(--color-gray-600)',\n  '--ease-folder-chevron-color-hover': 'var(--color-gray-400)',\n  '--ease-folder-title-font-size': 'var(--ease-font-size)',\n  '--ease-folder-title-font-weight': '500',\n  '--ease-folder-title-color': 'var(--color-gray-400)',\n  '--ease-folder-gap': 'var(--spacing-sm)',\n  '--ease-folder-fade-size': '16px',\n\n  // Field (ease-field)\n  '--ease-field-label-width': '36%',\n  '--ease-field-column-gap': 'var(--spacing-md)',\n  '--ease-field-row-gap': '6px',\n  '--ease-field-min-height': '30px',\n  '--ease-field-label-font-size': 'var(--ease-font-size-sm)',\n  '--ease-field-label-color': 'var(--color-gray-600)',\n  '--ease-field-label-padding-left': '4px'\n};\n\n/**\n * The complete default (dark) theme configuration.\n * Includes colors, radii, spacing, typography, and component-level --ease-* vars.\n */\nexport const defaultThemeConfig: ThemeConfig = {\n  colors: defaultColors,\n  radii: defaultRadii,\n  spacing: defaultSpacing,\n  typography: defaultTypography,\n  vars: defaultEaseVars\n};\n\n/**\n * Default built-in theme name.\n */\nexport const DEFAULT_THEME_NAME = 'default' as const;\n\n/**\n * Legacy alias for the built-in dark theme.\n */\nexport const DARK_THEME_ALIAS = 'dark' as const;\n","import type { ThemeConfig } from './tokens';\n\nimport { DARK_THEME_ALIAS, DEFAULT_THEME_NAME, defaultThemeConfig } from './presets';\n\n// --------------------------\n// Type definitions\n// --------------------------\n\n/**\n * Built-in theme names that ship with the library.\n */\nexport type BuiltInThemeName = 'default' | 'dark';\n\n/**\n * Theme name type - accepts built-in names plus any custom string.\n * The built-in names provide autocomplete while allowing any string.\n */\nexport type WebKitThemeName = BuiltInThemeName | (string & {});\n\n/**\n * A strongly-typed theme reference.\n * Returned by `registerTheme()` for type-safe theme references.\n *\n * @example\n * ```ts\n * const myTheme = registerTheme('custom', { config: {...} });\n * initWebKit({ theme: myTheme }); // Type-safe reference\n * ```\n */\nexport interface WebKitThemeRef<Name extends string = string> {\n  readonly __brand: 'WebKitThemeRef';\n  readonly name: Name;\n}\n\n/**\n * Valid theme input for APIs: a theme name string, a theme ref, or an inline config.\n *\n * @example\n * ```ts\n * // All valid:\n * initWebKit({ theme: 'default' });           // Built-in name\n * initWebKit({ theme: 'my-custom-theme' });   // Custom string\n * initWebKit({ theme: myThemeRef });          // Theme ref from registerTheme()\n * initWebKit({ theme: { colors: {...} } });   // Inline config\n * ```\n */\nexport type ThemeInput = WebKitThemeName | WebKitThemeRef | ThemeConfig;\n\n/**\n * Options for registering a theme.\n */\nexport interface RegisterThemeOptions {\n  /**\n   * Base theme to extend from.\n   * - `'default'` (or any registered name) - extends that theme\n   * - `null` - no base, starts from scratch\n   * - `undefined` - defaults to `'default'`\n   */\n  base?: string | WebKitThemeRef | null;\n  /**\n   * Theme configuration (overrides on top of base).\n   */\n  config?: ThemeConfig;\n}\n\n/**\n * Resolved theme entry in the registry.\n */\ninterface ThemeEntry {\n  name: string;\n  base: string | null;\n  config: ThemeConfig;\n  resolved: ThemeConfig | null; // lazily computed\n}\n\n// --------------------------\n// Registry implementation\n// --------------------------\n\nconst registry = new Map<string, ThemeEntry>();\n\n/**\n * Deep merge two theme configs.\n */\nconst mergeConfigs = (base: ThemeConfig, overrides: ThemeConfig): ThemeConfig => {\n  return {\n    colors: {\n      ...base.colors,\n      ...overrides.colors,\n      gray: { ...base.colors?.gray, ...overrides.colors?.gray },\n      blue: { ...base.colors?.blue, ...overrides.colors?.blue },\n      green: { ...base.colors?.green, ...overrides.colors?.green },\n      red: { ...base.colors?.red, ...overrides.colors?.red },\n      orange: { ...base.colors?.orange, ...overrides.colors?.orange },\n      yellow: { ...base.colors?.yellow, ...overrides.colors?.yellow },\n      whiteAlpha: { ...base.colors?.whiteAlpha, ...overrides.colors?.whiteAlpha },\n      blackAlpha: { ...base.colors?.blackAlpha, ...overrides.colors?.blackAlpha }\n    },\n    radii: { ...base.radii, ...overrides.radii },\n    spacing: { ...base.spacing, ...overrides.spacing },\n    typography: { ...base.typography, ...overrides.typography },\n    vars: { ...base.vars, ...overrides.vars }\n  };\n};\n\n/**\n * Resolve a theme by name, following base chain.\n */\nconst resolveThemeConfig = (name: string, visited = new Set<string>()): ThemeConfig => {\n  if (visited.has(name)) {\n    throw new Error(`[web-kit] Circular theme dependency detected: ${Array.from(visited).join(' -> ')} -> ${name}`);\n  }\n\n  const entry = registry.get(name);\n  if (!entry) {\n    throw new Error(`[web-kit] Theme \"${name}\" is not registered.`);\n  }\n\n  // Return cached resolution\n  if (entry.resolved) {\n    return entry.resolved;\n  }\n\n  visited.add(name);\n\n  let resolved: ThemeConfig;\n  if (entry.base === null) {\n    // No base - use config as-is\n    resolved = entry.config;\n  } else {\n    // Resolve base first\n    const baseConfig = resolveThemeConfig(entry.base, visited);\n    resolved = mergeConfigs(baseConfig, entry.config);\n  }\n\n  // Cache the resolution\n  entry.resolved = resolved;\n  return resolved;\n};\n\n/**\n * Initialize built-in themes.\n */\nconst initBuiltInThemes = (): void => {\n  if (registry.has(DEFAULT_THEME_NAME)) {\n    return;\n  }\n\n  // Register 'default' theme\n  registry.set(DEFAULT_THEME_NAME, {\n    name: DEFAULT_THEME_NAME,\n    base: null,\n    config: defaultThemeConfig,\n    resolved: defaultThemeConfig\n  });\n\n  // Register 'dark' as alias to 'default'\n  registry.set(DARK_THEME_ALIAS, {\n    name: DARK_THEME_ALIAS,\n    base: DEFAULT_THEME_NAME,\n    config: {},\n    resolved: null\n  });\n};\n\n// Initialize on module load\ninitBuiltInThemes();\n\n// --------------------------\n// Public API\n// --------------------------\n\n/**\n * Check if a value is a theme ref.\n */\nexport const isThemeRef = (value: unknown): value is WebKitThemeRef =>\n  typeof value === 'object' && value !== null && '__brand' in value && value.__brand === 'WebKitThemeRef';\n\n/**\n * Check if a value is a theme config object.\n */\nexport const isThemeConfig = (value: unknown): value is ThemeConfig => {\n  if (typeof value !== 'object' || value === null) {\n    return false;\n  }\n  if (isThemeRef(value)) {\n    return false;\n  }\n  // Check if it looks like a ThemeConfig\n  const obj = value as Record<string, unknown>;\n  return (\n    obj.colors !== undefined ||\n    obj.radii !== undefined ||\n    obj.spacing !== undefined ||\n    obj.typography !== undefined ||\n    obj.vars !== undefined\n  );\n};\n\n/**\n * Register a custom theme.\n *\n * @param name - Theme name (must be unique)\n * @param options - Theme options (base + config)\n * @returns A typed theme reference\n *\n * @example\n * ```ts\n * const custom = registerTheme('custom', {\n *   base: 'default',\n *   config: {\n *     vars: { '--ease-panel-radius': '14px' }\n *   }\n * });\n *\n * initWebKit({ theme: custom });\n * ```\n */\nexport function registerTheme<Name extends string>(\n  name: Name,\n  options: RegisterThemeOptions = {}\n): WebKitThemeRef<Name> {\n  const { base = DEFAULT_THEME_NAME, config = {} } = options;\n\n  // Resolve base name\n  let baseName: string | null = null;\n  if (base !== null) {\n    baseName = isThemeRef(base) ? base.name : base;\n    // Validate base exists\n    if (!registry.has(baseName)) {\n      throw new Error(`[web-kit] Base theme \"${baseName}\" is not registered.`);\n    }\n  }\n\n  // Invalidate cache for themes that depend on this one (if re-registering)\n  if (registry.has(name)) {\n    for (const entry of registry.values()) {\n      if (entry.base === name) {\n        entry.resolved = null;\n      }\n    }\n  }\n\n  registry.set(name, {\n    name,\n    base: baseName,\n    config,\n    resolved: null\n  });\n\n  return {\n    __brand: 'WebKitThemeRef',\n    name\n  } as WebKitThemeRef<Name>;\n}\n\n/**\n * Get a theme's resolved configuration.\n *\n * @param theme - Theme name, ref, or inline config\n * @returns Resolved theme configuration\n */\nexport function getTheme(theme: ThemeInput): ThemeConfig {\n  if (isThemeConfig(theme)) {\n    return theme;\n  }\n\n  const name = isThemeRef(theme) ? theme.name : theme;\n  return resolveThemeConfig(name);\n}\n\n/**\n * Check if a theme is registered.\n */\nexport function hasTheme(name: string): boolean {\n  return registry.has(name);\n}\n\n/**\n * Get all registered theme names.\n */\nexport function getThemeNames(): string[] {\n  return Array.from(registry.keys());\n}\n\n/**\n * Create a theme ref for a registered theme name.\n * Throws if the theme is not registered.\n *\n * @example\n * ```ts\n * const ref = themeRef('default'); // Get ref for built-in theme\n * const customRef = themeRef('my-theme'); // Get ref for registered theme\n * ```\n */\nexport function themeRef<Name extends string>(name: Name): WebKitThemeRef<Name> {\n  if (!registry.has(name)) {\n    throw new Error(`[web-kit] Theme \"${name}\" is not registered.`);\n  }\n  return {\n    __brand: 'WebKitThemeRef',\n    name\n  } as WebKitThemeRef<Name>;\n}\n"],"mappings":"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","names":["defaultColors","gray","blue","green","red","orange","yellow","white","black","whiteAlpha","blackAlpha","foreground","defaultRadii","sm","md","lg","xl","full","defaultSpacing","xs","defaultTypography","fontFamily","fontMono","fontSize","lineHeight","defaultEaseVars","defaultThemeConfig","colors","defaultColors","radii","defaultRadii","spacing","defaultSpacing","typography","defaultTypography","vars","DEFAULT_THEME_NAME","DARK_THEME_ALIAS","registry","Map","mergeConfigs","base","overrides","colors","gray","blue","green","red","orange","yellow","whiteAlpha","blackAlpha","radii","spacing","typography","vars","resolveThemeConfig","name","visited","Set","has","Error","Array","from","join","entry","get","resolved","add","config","baseConfig","initBuiltInThemes","DEFAULT_THEME_NAME","set","defaultThemeConfig","DARK_THEME_ALIAS","isThemeRef","value","__brand","isThemeConfig","obj","undefined","registerTheme","options","baseName","values","getTheme","theme","hasTheme","getThemeNames","keys","themeRef","CSS_PREFIX","RADII_PREFIX","SPACING_PREFIX","TYPOGRAPHY_PREFIX","toVarName","prefix","parts","join","generateColorScaleVars","name","scale","vars","level","value","Object","entries","undefined","withAlpha","color","alpha","trimmed","trim","match","exec","fn","innerRaw","inner","includes","pct","Math","round","generateColorVars","colors","gray","assign","blue","green","red","orange","yellow","white","black","whiteAlpha","blackAlpha","foreground","resolveThemeTarget","element","document","documentElement","generateRadiiVars","radii","generateSpacingVars","spacing","generateTypographyVars","typography","fontFamily","fontMono","fontSize","lineHeight","normalizeCustomVarName","startsWith","generateCustomVars","out","key","String","generateThemeVars","config","createTheme","selector","declarations","map","defineTheme","target","style","setProperty","removeTheme","keys","removeProperty","getThemeValue","token","getComputedStyle","varName","getPropertyValue","setThemeValue","EASE_THEME_ATTRIBUTE","mergeTheme","overrides","defaultColors","defaultRadii","defaultSpacing","defaultTypography","createDarkTheme","setThemeName","options","attribute","setAttribute","colorScheme","setColorScheme","getThemeName","getAttribute","applyTheme","theme","mergeWithDefaults","getSystemThemeMode","window","matchMedia","matches","followSystemTheme","themes","media","apply","mode","light","dark","lightName","darkName","addEventListener","removeEventListener"]}