@easemate/web-kit 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +204 -34
  2. package/build/decorators.cjs +7 -7
  3. package/build/decorators.cjs.map +1 -1
  4. package/build/decorators.js +7 -7
  5. package/build/decorators.js.map +1 -1
  6. package/build/elements.cjs +1902 -747
  7. package/build/elements.cjs.map +1 -1
  8. package/build/elements.d.cts +51 -2
  9. package/build/elements.d.ts +51 -2
  10. package/build/elements.js +1899 -746
  11. package/build/elements.js.map +1 -1
  12. package/build/{index-NzGpn7ai.d.cts → index-BKwMPyPy.d.cts} +3 -0
  13. package/build/{index-NzGpn7ai.d.ts → index-BKwMPyPy.d.ts} +3 -0
  14. package/build/index.cjs +7338 -3477
  15. package/build/index.cjs.map +1 -1
  16. package/build/index.d.cts +4 -4
  17. package/build/index.d.ts +4 -4
  18. package/build/index.js +7569 -3710
  19. package/build/index.js.map +1 -1
  20. package/build/{init-CaP7khA2.d.ts → init-C4Q5EEAr.d.ts} +1 -1
  21. package/build/{init-DmqoRv6_.d.cts → init-yLajTNMT.d.cts} +1 -1
  22. package/build/jsx.cjs.map +1 -1
  23. package/build/jsx.d.cts +61 -7
  24. package/build/jsx.d.ts +61 -7
  25. package/build/jsx.js.map +1 -1
  26. package/build/react.cjs +4402 -1658
  27. package/build/react.cjs.map +1 -1
  28. package/build/react.d.cts +4 -4
  29. package/build/react.d.ts +4 -4
  30. package/build/react.js +4403 -1659
  31. package/build/react.js.map +1 -1
  32. package/build/register.cjs +10895 -7033
  33. package/build/register.cjs.map +1 -1
  34. package/build/register.js +10877 -7015
  35. package/build/register.js.map +1 -1
  36. package/build/{registry-YCv1Ctoe.d.cts → registry-GVSJPmus.d.cts} +1 -0
  37. package/build/{registry-YCv1Ctoe.d.ts → registry-GVSJPmus.d.ts} +1 -0
  38. package/build/theme.cjs +34 -3
  39. package/build/theme.cjs.map +1 -1
  40. package/build/theme.d.cts +2 -2
  41. package/build/theme.d.ts +2 -2
  42. package/build/theme.js +34 -3
  43. package/build/theme.js.map +1 -1
  44. package/build/utils.cjs +3 -3
  45. package/build/utils.cjs.map +1 -1
  46. package/build/utils.js +3 -3
  47. package/build/utils.js.map +1 -1
  48. package/package.json +2 -12
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/web-kit/web-kit/packages/core/src/theme/tokens.ts","/home/runner/work/web-kit/web-kit/packages/core/src/theme/presets.ts","/home/runner/work/web-kit/web-kit/packages/core/src/theme/registry.ts","../src/theme/index.ts"],"sourcesContent":["/**\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 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 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 // 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","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"],"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"]}
1
+ {"version":3,"sources":["/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","../src/theme/index.ts"],"sourcesContent":["/**\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","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"],"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"]}
package/build/utils.cjs CHANGED
@@ -35,7 +35,7 @@ __export(utils_exports, {
35
35
  });
36
36
  module.exports = __toCommonJS(utils_exports);
37
37
 
38
- // swc:/home/runner/work/web-kit/web-kit/packages/core/src/utils/dismiss-controller.ts
38
+ // swc:/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/utils/dismiss-controller.ts
39
39
  var DismissController = class {
40
40
  #onDismiss;
41
41
  #context;
@@ -114,7 +114,7 @@ var DismissController = class {
114
114
  #handleKeyDown;
115
115
  };
116
116
 
117
- // swc:/home/runner/work/web-kit/web-kit/packages/core/src/utils/outside-click.ts
117
+ // swc:/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/utils/outside-click.ts
118
118
  var toDismissContext = (host, options) => {
119
119
  if (options.disabled?.(host)) {
120
120
  return null;
@@ -159,7 +159,7 @@ var createOutsideClickHandle = (host, onDismiss, options) => {
159
159
  };
160
160
  };
161
161
 
162
- // swc:/home/runner/work/web-kit/web-kit/packages/core/src/utils/template-helpers.ts
162
+ // swc:/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/utils/template-helpers.ts
163
163
  var import_lit_html = require("lit-html");
164
164
  var import_class_map = require("lit-html/directives/class-map.js");
165
165
  var import_if_defined = require("lit-html/directives/if-defined.js");
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/utils/dismiss-controller.ts","/home/runner/work/web-kit/web-kit/packages/core/src/utils/outside-click.ts","/home/runner/work/web-kit/web-kit/packages/core/src/utils/template-helpers.ts"],"sourcesContent":["export { DismissController } from './dismiss-controller';\nexport { createOutsideClickHandle } from './outside-click';\nexport {\n classMap,\n ifDefined,\n optionalAttribute,\n renderIf,\n renderList,\n repeat,\n styleMap,\n styleObject,\n unsafeHTML,\n when\n} from './template-helpers';\n","export interface DismissContext {\n owner: HTMLElement;\n content?: HTMLElement | null;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface DismissControllerOptions {\n onDismiss: (event: Event) => void;\n}\n\nexport class DismissController {\n #onDismiss: (event: Event) => void;\n #context: {\n owner: HTMLElement;\n content: HTMLElement | null;\n triggers: HTMLElement[];\n } | null = null;\n #active = false;\n\n constructor(options: DismissControllerOptions) {\n this.#onDismiss = options.onDismiss;\n }\n\n connect(context: DismissContext): void {\n this.#context = {\n owner: context.owner,\n content: context.content ?? null,\n triggers: (context.triggers ?? []).filter((el): el is HTMLElement => el instanceof HTMLElement)\n };\n\n if (!this.#active) {\n document.addEventListener('pointerdown', this.#handlePointerDown, true);\n document.addEventListener('keydown', this.#handleKeyDown, true);\n this.#active = true;\n }\n }\n\n disconnect(): void {\n if (!this.#active) {\n return;\n }\n\n document.removeEventListener('pointerdown', this.#handlePointerDown, true);\n document.removeEventListener('keydown', this.#handleKeyDown, true);\n this.#active = false;\n this.#context = null;\n }\n\n #handlePointerDown = (event: PointerEvent): void => {\n if (!this.#context) {\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.some((node) => node instanceof Element && node.hasAttribute('data-select-ignore'))) {\n return;\n }\n\n if (path.includes(owner)) {\n return;\n }\n\n if (content && path.includes(content)) {\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger))) {\n return;\n }\n\n this.#onDismiss(event);\n };\n\n #handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape' || !this.#context) {\n return;\n }\n\n event.preventDefault();\n\n const active = document.activeElement as HTMLElement | null;\n\n if (!active) {\n this.#onDismiss(event);\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.includes(owner) || owner.contains(active)) {\n this.#onDismiss(event);\n return;\n }\n\n if (content && (path.includes(content) || content.contains(active))) {\n this.#onDismiss(event);\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger) || trigger.contains(active))) {\n this.#onDismiss(event);\n }\n };\n}\n","import type { DismissContext } from './dismiss-controller';\n\nimport { DismissController } from './dismiss-controller';\n\nexport interface OutsideClickResolution {\n owner?: HTMLElement | null | undefined;\n content?: HTMLElement | null | undefined;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface OutsideClickHandle {\n update(): void;\n disconnect(): void;\n}\n\nexport interface OutsideClickHandleOptions<THost extends HTMLElement> {\n resolve: (host: THost) => OutsideClickResolution | null | undefined;\n disabled?: (host: THost) => boolean;\n}\n\nconst registry = new WeakMap<HTMLElement, Set<OutsideClickHandle>>();\n\nconst toDismissContext = <THost extends HTMLElement>(\n host: THost,\n options: OutsideClickHandleOptions<THost>\n): DismissContext | null => {\n if (options.disabled?.(host)) {\n return null;\n }\n\n const resolved = options.resolve(host);\n\n if (!resolved) {\n return null;\n }\n\n const owner = resolved.owner ?? host ?? null;\n\n if (!(owner instanceof HTMLElement)) {\n return null;\n }\n\n const content = resolved.content && resolved.content instanceof HTMLElement ? resolved.content : null;\n\n const triggers = resolved.triggers?.filter((element): element is HTMLElement => element instanceof HTMLElement) ?? [];\n\n return {\n owner,\n content,\n triggers\n };\n};\n\nexport const createOutsideClickHandle = <THost extends HTMLElement>(\n host: THost,\n onDismiss: (this: THost, event: Event) => void,\n options: OutsideClickHandleOptions<THost>\n): OutsideClickHandle => {\n const controller = new DismissController({\n onDismiss(event) {\n if (options.disabled?.(host)) {\n return;\n }\n\n onDismiss.call(host, event);\n }\n });\n\n return {\n update(): void {\n const context = toDismissContext(host, options);\n if (!context) {\n controller.disconnect();\n return;\n }\n\n controller.connect(context);\n },\n disconnect(): void {\n controller.disconnect();\n }\n };\n};\n\nexport const registerOutsideClickHandle = (host: HTMLElement, handle: OutsideClickHandle): void => {\n let handles = registry.get(host);\n\n if (!handles) {\n handles = new Set();\n registry.set(host, handles);\n }\n\n handles.add(handle);\n};\n\nexport const updateOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.update();\n });\n};\n\nexport const disconnectOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.disconnect();\n });\n};\n\nexport const requestOutsideClickUpdate = (host: HTMLElement): void => {\n updateOutsideClickHandles(host);\n};\n","import type { TemplateResult } from 'lit-html';\n\nimport { nothing } from 'lit-html';\nimport { classMap } from 'lit-html/directives/class-map.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport { repeat } from 'lit-html/directives/repeat.js';\nimport { styleMap } from 'lit-html/directives/style-map.js';\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js';\nimport { when } from 'lit-html/directives/when.js';\n\nexport { classMap, styleMap, when, repeat, unsafeHTML, ifDefined };\n\nexport function renderIf<T>(\n condition: T | undefined | null,\n template: TemplateResult | (() => TemplateResult)\n): TemplateResult | typeof nothing {\n if (!condition) {\n return nothing;\n }\n\n return typeof template === 'function' ? template() : template;\n}\n\nexport function renderList<T>(\n items: readonly T[],\n template: (item: T, index: number) => TemplateResult,\n key: (item: T, index: number) => unknown = (item) => item\n): ReturnType<typeof repeat> {\n return repeat(items, key, template);\n}\n\nexport function styleObject(input: Record<string, string | number | null | undefined>): ReturnType<typeof styleMap> {\n const definedEntries = Object.entries(input).reduce<Record<string, string>>((acc, [property, value]) => {\n if (value === null || value === undefined || value === '') {\n return acc;\n }\n\n acc[property] = typeof value === 'number' ? `${value}` : value;\n return acc;\n }, {});\n\n return styleMap(definedEntries);\n}\n\nexport const optionalAttribute = ifDefined;\n"],"mappings":"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","names":["DismissController","options","event","owner","content","triggers","path","composedPath","some","node","Element","hasAttribute","includes","trigger","key","preventDefault","active","document","activeElement","contains","onDismiss","connect","context","filter","el","HTMLElement","addEventListener","disconnect","removeEventListener","toDismissContext","host","options","disabled","resolved","resolve","owner","HTMLElement","content","triggers","filter","element","createOutsideClickHandle","onDismiss","controller","DismissController","event","call","update","context","disconnect","connect","renderIf","condition","template","nothing","renderList","items","key","item","repeat","styleObject","input","definedEntries","Object","entries","reduce","acc","property","value","undefined","styleMap","optionalAttribute","ifDefined"]}
1
+ {"version":3,"sources":["../src/utils/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/utils/dismiss-controller.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/utils/outside-click.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/utils/template-helpers.ts"],"sourcesContent":["export { DismissController } from './dismiss-controller';\nexport { createOutsideClickHandle } from './outside-click';\nexport {\n classMap,\n ifDefined,\n optionalAttribute,\n renderIf,\n renderList,\n repeat,\n styleMap,\n styleObject,\n unsafeHTML,\n when\n} from './template-helpers';\n","export interface DismissContext {\n owner: HTMLElement;\n content?: HTMLElement | null;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface DismissControllerOptions {\n onDismiss: (event: Event) => void;\n}\n\nexport class DismissController {\n #onDismiss: (event: Event) => void;\n #context: {\n owner: HTMLElement;\n content: HTMLElement | null;\n triggers: HTMLElement[];\n } | null = null;\n #active = false;\n\n constructor(options: DismissControllerOptions) {\n this.#onDismiss = options.onDismiss;\n }\n\n connect(context: DismissContext): void {\n this.#context = {\n owner: context.owner,\n content: context.content ?? null,\n triggers: (context.triggers ?? []).filter((el): el is HTMLElement => el instanceof HTMLElement)\n };\n\n if (!this.#active) {\n document.addEventListener('pointerdown', this.#handlePointerDown, true);\n document.addEventListener('keydown', this.#handleKeyDown, true);\n this.#active = true;\n }\n }\n\n disconnect(): void {\n if (!this.#active) {\n return;\n }\n\n document.removeEventListener('pointerdown', this.#handlePointerDown, true);\n document.removeEventListener('keydown', this.#handleKeyDown, true);\n this.#active = false;\n this.#context = null;\n }\n\n #handlePointerDown = (event: PointerEvent): void => {\n if (!this.#context) {\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.some((node) => node instanceof Element && node.hasAttribute('data-select-ignore'))) {\n return;\n }\n\n if (path.includes(owner)) {\n return;\n }\n\n if (content && path.includes(content)) {\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger))) {\n return;\n }\n\n this.#onDismiss(event);\n };\n\n #handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape' || !this.#context) {\n return;\n }\n\n event.preventDefault();\n\n const active = document.activeElement as HTMLElement | null;\n\n if (!active) {\n this.#onDismiss(event);\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.includes(owner) || owner.contains(active)) {\n this.#onDismiss(event);\n return;\n }\n\n if (content && (path.includes(content) || content.contains(active))) {\n this.#onDismiss(event);\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger) || trigger.contains(active))) {\n this.#onDismiss(event);\n }\n };\n}\n","import type { DismissContext } from './dismiss-controller';\n\nimport { DismissController } from './dismiss-controller';\n\nexport interface OutsideClickResolution {\n owner?: HTMLElement | null | undefined;\n content?: HTMLElement | null | undefined;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface OutsideClickHandle {\n update(): void;\n disconnect(): void;\n}\n\nexport interface OutsideClickHandleOptions<THost extends HTMLElement> {\n resolve: (host: THost) => OutsideClickResolution | null | undefined;\n disabled?: (host: THost) => boolean;\n}\n\nconst registry = new WeakMap<HTMLElement, Set<OutsideClickHandle>>();\n\nconst toDismissContext = <THost extends HTMLElement>(\n host: THost,\n options: OutsideClickHandleOptions<THost>\n): DismissContext | null => {\n if (options.disabled?.(host)) {\n return null;\n }\n\n const resolved = options.resolve(host);\n\n if (!resolved) {\n return null;\n }\n\n const owner = resolved.owner ?? host ?? null;\n\n if (!(owner instanceof HTMLElement)) {\n return null;\n }\n\n const content = resolved.content && resolved.content instanceof HTMLElement ? resolved.content : null;\n\n const triggers = resolved.triggers?.filter((element): element is HTMLElement => element instanceof HTMLElement) ?? [];\n\n return {\n owner,\n content,\n triggers\n };\n};\n\nexport const createOutsideClickHandle = <THost extends HTMLElement>(\n host: THost,\n onDismiss: (this: THost, event: Event) => void,\n options: OutsideClickHandleOptions<THost>\n): OutsideClickHandle => {\n const controller = new DismissController({\n onDismiss(event) {\n if (options.disabled?.(host)) {\n return;\n }\n\n onDismiss.call(host, event);\n }\n });\n\n return {\n update(): void {\n const context = toDismissContext(host, options);\n if (!context) {\n controller.disconnect();\n return;\n }\n\n controller.connect(context);\n },\n disconnect(): void {\n controller.disconnect();\n }\n };\n};\n\nexport const registerOutsideClickHandle = (host: HTMLElement, handle: OutsideClickHandle): void => {\n let handles = registry.get(host);\n\n if (!handles) {\n handles = new Set();\n registry.set(host, handles);\n }\n\n handles.add(handle);\n};\n\nexport const updateOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.update();\n });\n};\n\nexport const disconnectOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.disconnect();\n });\n};\n\nexport const requestOutsideClickUpdate = (host: HTMLElement): void => {\n updateOutsideClickHandles(host);\n};\n","import type { TemplateResult } from 'lit-html';\n\nimport { nothing } from 'lit-html';\nimport { classMap } from 'lit-html/directives/class-map.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport { repeat } from 'lit-html/directives/repeat.js';\nimport { styleMap } from 'lit-html/directives/style-map.js';\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js';\nimport { when } from 'lit-html/directives/when.js';\n\nexport { classMap, styleMap, when, repeat, unsafeHTML, ifDefined };\n\nexport function renderIf<T>(\n condition: T | undefined | null,\n template: TemplateResult | (() => TemplateResult)\n): TemplateResult | typeof nothing {\n if (!condition) {\n return nothing;\n }\n\n return typeof template === 'function' ? template() : template;\n}\n\nexport function renderList<T>(\n items: readonly T[],\n template: (item: T, index: number) => TemplateResult,\n key: (item: T, index: number) => unknown = (item) => item\n): ReturnType<typeof repeat> {\n return repeat(items, key, template);\n}\n\nexport function styleObject(input: Record<string, string | number | null | undefined>): ReturnType<typeof styleMap> {\n const definedEntries = Object.entries(input).reduce<Record<string, string>>((acc, [property, value]) => {\n if (value === null || value === undefined || value === '') {\n return acc;\n }\n\n acc[property] = typeof value === 'number' ? `${value}` : value;\n return acc;\n }, {});\n\n return styleMap(definedEntries);\n}\n\nexport const optionalAttribute = ifDefined;\n"],"mappings":"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","names":["DismissController","options","event","owner","content","triggers","path","composedPath","some","node","Element","hasAttribute","includes","trigger","key","preventDefault","active","document","activeElement","contains","onDismiss","connect","context","filter","el","HTMLElement","addEventListener","disconnect","removeEventListener","toDismissContext","host","options","disabled","resolved","resolve","owner","HTMLElement","content","triggers","filter","element","createOutsideClickHandle","onDismiss","controller","DismissController","event","call","update","context","disconnect","connect","renderIf","condition","template","nothing","renderList","items","key","item","repeat","styleObject","input","definedEntries","Object","entries","reduce","acc","property","value","undefined","styleMap","optionalAttribute","ifDefined"]}
package/build/utils.js CHANGED
@@ -1,4 +1,4 @@
1
- // swc:/home/runner/work/web-kit/web-kit/packages/core/src/utils/dismiss-controller.ts
1
+ // swc:/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/utils/dismiss-controller.ts
2
2
  var DismissController = class {
3
3
  #onDismiss;
4
4
  #context;
@@ -77,7 +77,7 @@ var DismissController = class {
77
77
  #handleKeyDown;
78
78
  };
79
79
 
80
- // swc:/home/runner/work/web-kit/web-kit/packages/core/src/utils/outside-click.ts
80
+ // swc:/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/utils/outside-click.ts
81
81
  var toDismissContext = (host, options) => {
82
82
  if (options.disabled?.(host)) {
83
83
  return null;
@@ -122,7 +122,7 @@ var createOutsideClickHandle = (host, onDismiss, options) => {
122
122
  };
123
123
  };
124
124
 
125
- // swc:/home/runner/work/web-kit/web-kit/packages/core/src/utils/template-helpers.ts
125
+ // swc:/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/utils/template-helpers.ts
126
126
  import { nothing } from "lit-html";
127
127
  import { classMap } from "lit-html/directives/class-map.js";
128
128
  import { ifDefined } from "lit-html/directives/if-defined.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/web-kit/web-kit/packages/core/src/utils/dismiss-controller.ts","/home/runner/work/web-kit/web-kit/packages/core/src/utils/outside-click.ts","/home/runner/work/web-kit/web-kit/packages/core/src/utils/template-helpers.ts"],"sourcesContent":["export interface DismissContext {\n owner: HTMLElement;\n content?: HTMLElement | null;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface DismissControllerOptions {\n onDismiss: (event: Event) => void;\n}\n\nexport class DismissController {\n #onDismiss: (event: Event) => void;\n #context: {\n owner: HTMLElement;\n content: HTMLElement | null;\n triggers: HTMLElement[];\n } | null = null;\n #active = false;\n\n constructor(options: DismissControllerOptions) {\n this.#onDismiss = options.onDismiss;\n }\n\n connect(context: DismissContext): void {\n this.#context = {\n owner: context.owner,\n content: context.content ?? null,\n triggers: (context.triggers ?? []).filter((el): el is HTMLElement => el instanceof HTMLElement)\n };\n\n if (!this.#active) {\n document.addEventListener('pointerdown', this.#handlePointerDown, true);\n document.addEventListener('keydown', this.#handleKeyDown, true);\n this.#active = true;\n }\n }\n\n disconnect(): void {\n if (!this.#active) {\n return;\n }\n\n document.removeEventListener('pointerdown', this.#handlePointerDown, true);\n document.removeEventListener('keydown', this.#handleKeyDown, true);\n this.#active = false;\n this.#context = null;\n }\n\n #handlePointerDown = (event: PointerEvent): void => {\n if (!this.#context) {\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.some((node) => node instanceof Element && node.hasAttribute('data-select-ignore'))) {\n return;\n }\n\n if (path.includes(owner)) {\n return;\n }\n\n if (content && path.includes(content)) {\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger))) {\n return;\n }\n\n this.#onDismiss(event);\n };\n\n #handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape' || !this.#context) {\n return;\n }\n\n event.preventDefault();\n\n const active = document.activeElement as HTMLElement | null;\n\n if (!active) {\n this.#onDismiss(event);\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.includes(owner) || owner.contains(active)) {\n this.#onDismiss(event);\n return;\n }\n\n if (content && (path.includes(content) || content.contains(active))) {\n this.#onDismiss(event);\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger) || trigger.contains(active))) {\n this.#onDismiss(event);\n }\n };\n}\n","import type { DismissContext } from './dismiss-controller';\n\nimport { DismissController } from './dismiss-controller';\n\nexport interface OutsideClickResolution {\n owner?: HTMLElement | null | undefined;\n content?: HTMLElement | null | undefined;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface OutsideClickHandle {\n update(): void;\n disconnect(): void;\n}\n\nexport interface OutsideClickHandleOptions<THost extends HTMLElement> {\n resolve: (host: THost) => OutsideClickResolution | null | undefined;\n disabled?: (host: THost) => boolean;\n}\n\nconst registry = new WeakMap<HTMLElement, Set<OutsideClickHandle>>();\n\nconst toDismissContext = <THost extends HTMLElement>(\n host: THost,\n options: OutsideClickHandleOptions<THost>\n): DismissContext | null => {\n if (options.disabled?.(host)) {\n return null;\n }\n\n const resolved = options.resolve(host);\n\n if (!resolved) {\n return null;\n }\n\n const owner = resolved.owner ?? host ?? null;\n\n if (!(owner instanceof HTMLElement)) {\n return null;\n }\n\n const content = resolved.content && resolved.content instanceof HTMLElement ? resolved.content : null;\n\n const triggers = resolved.triggers?.filter((element): element is HTMLElement => element instanceof HTMLElement) ?? [];\n\n return {\n owner,\n content,\n triggers\n };\n};\n\nexport const createOutsideClickHandle = <THost extends HTMLElement>(\n host: THost,\n onDismiss: (this: THost, event: Event) => void,\n options: OutsideClickHandleOptions<THost>\n): OutsideClickHandle => {\n const controller = new DismissController({\n onDismiss(event) {\n if (options.disabled?.(host)) {\n return;\n }\n\n onDismiss.call(host, event);\n }\n });\n\n return {\n update(): void {\n const context = toDismissContext(host, options);\n if (!context) {\n controller.disconnect();\n return;\n }\n\n controller.connect(context);\n },\n disconnect(): void {\n controller.disconnect();\n }\n };\n};\n\nexport const registerOutsideClickHandle = (host: HTMLElement, handle: OutsideClickHandle): void => {\n let handles = registry.get(host);\n\n if (!handles) {\n handles = new Set();\n registry.set(host, handles);\n }\n\n handles.add(handle);\n};\n\nexport const updateOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.update();\n });\n};\n\nexport const disconnectOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.disconnect();\n });\n};\n\nexport const requestOutsideClickUpdate = (host: HTMLElement): void => {\n updateOutsideClickHandles(host);\n};\n","import type { TemplateResult } from 'lit-html';\n\nimport { nothing } from 'lit-html';\nimport { classMap } from 'lit-html/directives/class-map.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport { repeat } from 'lit-html/directives/repeat.js';\nimport { styleMap } from 'lit-html/directives/style-map.js';\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js';\nimport { when } from 'lit-html/directives/when.js';\n\nexport { classMap, styleMap, when, repeat, unsafeHTML, ifDefined };\n\nexport function renderIf<T>(\n condition: T | undefined | null,\n template: TemplateResult | (() => TemplateResult)\n): TemplateResult | typeof nothing {\n if (!condition) {\n return nothing;\n }\n\n return typeof template === 'function' ? template() : template;\n}\n\nexport function renderList<T>(\n items: readonly T[],\n template: (item: T, index: number) => TemplateResult,\n key: (item: T, index: number) => unknown = (item) => item\n): ReturnType<typeof repeat> {\n return repeat(items, key, template);\n}\n\nexport function styleObject(input: Record<string, string | number | null | undefined>): ReturnType<typeof styleMap> {\n const definedEntries = Object.entries(input).reduce<Record<string, string>>((acc, [property, value]) => {\n if (value === null || value === undefined || value === '') {\n return acc;\n }\n\n acc[property] = typeof value === 'number' ? `${value}` : value;\n return acc;\n }, {});\n\n return styleMap(definedEntries);\n}\n\nexport const optionalAttribute = ifDefined;\n"],"mappings":"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","names":["DismissController","options","event","owner","content","triggers","path","composedPath","some","node","Element","hasAttribute","includes","trigger","key","preventDefault","active","document","activeElement","contains","onDismiss","connect","context","filter","el","HTMLElement","addEventListener","disconnect","removeEventListener","toDismissContext","host","options","disabled","resolved","resolve","owner","HTMLElement","content","triggers","filter","element","createOutsideClickHandle","onDismiss","controller","DismissController","event","call","update","context","disconnect","connect","nothing","classMap","ifDefined","repeat","styleMap","unsafeHTML","when","renderIf","condition","template","nothing","renderList","items","key","item","repeat","styleObject","input","definedEntries","Object","entries","reduce","acc","property","value","undefined","styleMap","optionalAttribute","ifDefined"]}
1
+ {"version":3,"sources":["/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/utils/dismiss-controller.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/utils/outside-click.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/utils/template-helpers.ts"],"sourcesContent":["export interface DismissContext {\n owner: HTMLElement;\n content?: HTMLElement | null;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface DismissControllerOptions {\n onDismiss: (event: Event) => void;\n}\n\nexport class DismissController {\n #onDismiss: (event: Event) => void;\n #context: {\n owner: HTMLElement;\n content: HTMLElement | null;\n triggers: HTMLElement[];\n } | null = null;\n #active = false;\n\n constructor(options: DismissControllerOptions) {\n this.#onDismiss = options.onDismiss;\n }\n\n connect(context: DismissContext): void {\n this.#context = {\n owner: context.owner,\n content: context.content ?? null,\n triggers: (context.triggers ?? []).filter((el): el is HTMLElement => el instanceof HTMLElement)\n };\n\n if (!this.#active) {\n document.addEventListener('pointerdown', this.#handlePointerDown, true);\n document.addEventListener('keydown', this.#handleKeyDown, true);\n this.#active = true;\n }\n }\n\n disconnect(): void {\n if (!this.#active) {\n return;\n }\n\n document.removeEventListener('pointerdown', this.#handlePointerDown, true);\n document.removeEventListener('keydown', this.#handleKeyDown, true);\n this.#active = false;\n this.#context = null;\n }\n\n #handlePointerDown = (event: PointerEvent): void => {\n if (!this.#context) {\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.some((node) => node instanceof Element && node.hasAttribute('data-select-ignore'))) {\n return;\n }\n\n if (path.includes(owner)) {\n return;\n }\n\n if (content && path.includes(content)) {\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger))) {\n return;\n }\n\n this.#onDismiss(event);\n };\n\n #handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape' || !this.#context) {\n return;\n }\n\n event.preventDefault();\n\n const active = document.activeElement as HTMLElement | null;\n\n if (!active) {\n this.#onDismiss(event);\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.includes(owner) || owner.contains(active)) {\n this.#onDismiss(event);\n return;\n }\n\n if (content && (path.includes(content) || content.contains(active))) {\n this.#onDismiss(event);\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger) || trigger.contains(active))) {\n this.#onDismiss(event);\n }\n };\n}\n","import type { DismissContext } from './dismiss-controller';\n\nimport { DismissController } from './dismiss-controller';\n\nexport interface OutsideClickResolution {\n owner?: HTMLElement | null | undefined;\n content?: HTMLElement | null | undefined;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface OutsideClickHandle {\n update(): void;\n disconnect(): void;\n}\n\nexport interface OutsideClickHandleOptions<THost extends HTMLElement> {\n resolve: (host: THost) => OutsideClickResolution | null | undefined;\n disabled?: (host: THost) => boolean;\n}\n\nconst registry = new WeakMap<HTMLElement, Set<OutsideClickHandle>>();\n\nconst toDismissContext = <THost extends HTMLElement>(\n host: THost,\n options: OutsideClickHandleOptions<THost>\n): DismissContext | null => {\n if (options.disabled?.(host)) {\n return null;\n }\n\n const resolved = options.resolve(host);\n\n if (!resolved) {\n return null;\n }\n\n const owner = resolved.owner ?? host ?? null;\n\n if (!(owner instanceof HTMLElement)) {\n return null;\n }\n\n const content = resolved.content && resolved.content instanceof HTMLElement ? resolved.content : null;\n\n const triggers = resolved.triggers?.filter((element): element is HTMLElement => element instanceof HTMLElement) ?? [];\n\n return {\n owner,\n content,\n triggers\n };\n};\n\nexport const createOutsideClickHandle = <THost extends HTMLElement>(\n host: THost,\n onDismiss: (this: THost, event: Event) => void,\n options: OutsideClickHandleOptions<THost>\n): OutsideClickHandle => {\n const controller = new DismissController({\n onDismiss(event) {\n if (options.disabled?.(host)) {\n return;\n }\n\n onDismiss.call(host, event);\n }\n });\n\n return {\n update(): void {\n const context = toDismissContext(host, options);\n if (!context) {\n controller.disconnect();\n return;\n }\n\n controller.connect(context);\n },\n disconnect(): void {\n controller.disconnect();\n }\n };\n};\n\nexport const registerOutsideClickHandle = (host: HTMLElement, handle: OutsideClickHandle): void => {\n let handles = registry.get(host);\n\n if (!handles) {\n handles = new Set();\n registry.set(host, handles);\n }\n\n handles.add(handle);\n};\n\nexport const updateOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.update();\n });\n};\n\nexport const disconnectOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.disconnect();\n });\n};\n\nexport const requestOutsideClickUpdate = (host: HTMLElement): void => {\n updateOutsideClickHandles(host);\n};\n","import type { TemplateResult } from 'lit-html';\n\nimport { nothing } from 'lit-html';\nimport { classMap } from 'lit-html/directives/class-map.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport { repeat } from 'lit-html/directives/repeat.js';\nimport { styleMap } from 'lit-html/directives/style-map.js';\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js';\nimport { when } from 'lit-html/directives/when.js';\n\nexport { classMap, styleMap, when, repeat, unsafeHTML, ifDefined };\n\nexport function renderIf<T>(\n condition: T | undefined | null,\n template: TemplateResult | (() => TemplateResult)\n): TemplateResult | typeof nothing {\n if (!condition) {\n return nothing;\n }\n\n return typeof template === 'function' ? template() : template;\n}\n\nexport function renderList<T>(\n items: readonly T[],\n template: (item: T, index: number) => TemplateResult,\n key: (item: T, index: number) => unknown = (item) => item\n): ReturnType<typeof repeat> {\n return repeat(items, key, template);\n}\n\nexport function styleObject(input: Record<string, string | number | null | undefined>): ReturnType<typeof styleMap> {\n const definedEntries = Object.entries(input).reduce<Record<string, string>>((acc, [property, value]) => {\n if (value === null || value === undefined || value === '') {\n return acc;\n }\n\n acc[property] = typeof value === 'number' ? `${value}` : value;\n return acc;\n }, {});\n\n return styleMap(definedEntries);\n}\n\nexport const optionalAttribute = ifDefined;\n"],"mappings":"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","names":["DismissController","options","event","owner","content","triggers","path","composedPath","some","node","Element","hasAttribute","includes","trigger","key","preventDefault","active","document","activeElement","contains","onDismiss","connect","context","filter","el","HTMLElement","addEventListener","disconnect","removeEventListener","toDismissContext","host","options","disabled","resolved","resolve","owner","HTMLElement","content","triggers","filter","element","createOutsideClickHandle","onDismiss","controller","DismissController","event","call","update","context","disconnect","connect","nothing","classMap","ifDefined","repeat","styleMap","unsafeHTML","when","renderIf","condition","template","nothing","renderList","items","key","item","repeat","styleObject","input","definedEntries","Object","entries","reduce","acc","property","value","undefined","styleMap","optionalAttribute","ifDefined"]}
package/package.json CHANGED
@@ -1,22 +1,12 @@
1
1
  {
2
2
  "name": "@easemate/web-kit",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
4
4
  "description": "UI kit of web components for easemate - a typescript animation library",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "build"
8
8
  ],
9
- "sideEffects": [
10
- "./build/register.js",
11
- "./build/register.cjs",
12
- "./build/register.server.js",
13
- "./build/register.server.cjs",
14
- "./build/react.js",
15
- "./build/react.cjs",
16
- "./build/jsx.js",
17
- "./build/jsx.cjs",
18
- "./build/styles/**/*.css"
19
- ],
9
+ "sideEffects": true,
20
10
  "scripts": {
21
11
  "clean": "rm -rf build",
22
12
  "build": "npm run clean && tsup",