@kilivi/payloadcms-theme-management 0.1.13 → 0.1.16

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 (49) hide show
  1. package/dist/components/InitTheme.js +8 -8
  2. package/dist/components/InitTheme.js.map +1 -1
  3. package/dist/components/ServerThemeInjector.js +3 -3
  4. package/dist/components/ServerThemeInjector.js.map +1 -1
  5. package/dist/components/ThemePreview.js.map +1 -1
  6. package/dist/components/typographyPreviewUtils.js.map +1 -1
  7. package/dist/constants/themeFonts.js.map +1 -1
  8. package/dist/extended-presets.d.ts +62 -0
  9. package/dist/extended-presets.d.ts.map +1 -0
  10. package/dist/extended-presets.js +224 -0
  11. package/dist/extended-presets.js.map +1 -0
  12. package/dist/fields/ColorPickerField.js.map +1 -1
  13. package/dist/fields/RadiusField.js.map +1 -1
  14. package/dist/fields/ThemeColorPickerField.css +138 -138
  15. package/dist/fields/ThemeColorPickerField.js.map +1 -1
  16. package/dist/fields/ThemePreviewField.js.map +1 -1
  17. package/dist/fields/ThemeTokenSelectField.js.map +1 -1
  18. package/dist/fields/colorModeFields.js +1 -1
  19. package/dist/fields/colorModeFields.js.map +1 -1
  20. package/dist/fields/themeConfigurationField.js +5 -5
  21. package/dist/fields/themeConfigurationField.js.map +1 -1
  22. package/dist/index.d.ts +3 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +2 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/payload-types.js +3 -3
  27. package/dist/payload-types.js.map +1 -1
  28. package/dist/plugin.js.map +1 -1
  29. package/dist/presets.js.map +1 -1
  30. package/dist/providers/Theme/index.js.map +1 -1
  31. package/dist/providers/Theme/shared.js.map +1 -1
  32. package/dist/providers/Theme/themeConfig.js.map +1 -1
  33. package/dist/providers/Theme/types.js.map +1 -1
  34. package/dist/server.js.map +1 -1
  35. package/dist/types.js.map +1 -1
  36. package/dist/utils/extendedThemeHelpers.d.ts +119 -0
  37. package/dist/utils/extendedThemeHelpers.d.ts.map +1 -0
  38. package/dist/utils/extendedThemeHelpers.js +232 -0
  39. package/dist/utils/extendedThemeHelpers.js.map +1 -0
  40. package/dist/utils/resolveThemeConfiguration.js.map +1 -1
  41. package/dist/utils/themeAssets.js.map +1 -1
  42. package/dist/utils/themeColors.js.map +1 -1
  43. package/dist/utils/themeHtmlAttributes.js +12 -12
  44. package/dist/utils/themeHtmlAttributes.js.map +1 -1
  45. package/dist/utils/themeUtils.js +6 -6
  46. package/dist/utils/themeUtils.js.map +1 -1
  47. package/package.json +1 -1
  48. package/dist/src/--verbose/dist/fields/ThemeColorPickerField.scss +0 -138
  49. package/dist/src/dist/fields/ThemeColorPickerField.scss +0 -138
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fields/ThemeTokenSelectField.tsx"],"sourcesContent":["'use client'\r\n\r\nimport { useField } from '@payloadcms/ui'\r\nimport type { SelectFieldClientProps } from 'payload'\r\nimport { useCallback, useEffect, useState } from 'react'\r\nimport { defaultThemePresets } from '../presets.js'\r\nimport { resolveThemeConfiguration } from '../utils/resolveThemeConfiguration.js'\r\n\r\ninterface ThemeColorOption {\r\n value: string\r\n label: string\r\n color: string\r\n description?: string\r\n}\r\n\r\nconst FALLBACK_TOKENS: ThemeColorOption[] = [\r\n { value: 'background', label: 'Theme background', color: 'var(--background)' },\r\n { value: 'card', label: 'Card background', color: 'var(--card)' },\r\n { value: 'muted', label: 'Muted surface', color: 'var(--muted)' },\r\n { value: 'accent', label: 'Accent surface', color: 'var(--accent)' },\r\n { value: 'secondary', label: 'Secondary surface', color: 'var(--secondary)' },\r\n { value: 'primary', label: 'Primary surface', color: 'var(--primary)' },\r\n]\r\n\r\nasync function fetchThemeConfiguration(): Promise<Record<string, unknown> | null> {\r\n try {\r\n const response = await fetch('/api/site-settings')\r\n if (!response.ok) {\r\n return null\r\n }\r\n const data = await response.json()\r\n return data?.docs?.[0]?.themeConfiguration ?? null\r\n } catch (error) {\r\n console.warn('[ThemeTokenSelectField] Failed to fetch theme configuration:', error)\r\n return null\r\n }\r\n}\r\n\r\nfunction buildOptionsFromConfiguration(configuration: Record<string, unknown> | null): ThemeColorOption[] {\r\n if (!configuration) {\r\n return FALLBACK_TOKENS\r\n }\r\n\r\n const resolved = resolveThemeConfiguration(configuration)\r\n const lightMode = resolved.lightMode ?? defaultThemePresets[0]?.lightMode ?? {}\r\n const orderedKeys: string[] = [\r\n 'background',\r\n 'card',\r\n 'muted',\r\n 'accent',\r\n 'secondary',\r\n 'primary',\r\n 'popover',\r\n ]\r\n\r\n const typedLightMode = lightMode as Record<string, string | null | undefined>\r\n\r\n const tokens = orderedKeys\r\n .map((key) => {\r\n const value = typedLightMode?.[key]\r\n if (typeof value !== 'string' || value.trim().length === 0) {\r\n return null\r\n }\r\n\r\n const labelMap: Record<string, string> = {\r\n background: 'Theme background',\r\n card: 'Card background',\r\n muted: 'Muted surface',\r\n accent: 'Accent surface',\r\n secondary: 'Secondary surface',\r\n primary: 'Primary surface',\r\n popover: 'Popover surface',\r\n }\r\n\r\n return {\r\n value: key,\r\n label: labelMap[key] ?? key,\r\n color: value,\r\n }\r\n })\r\n .filter((token): token is ThemeColorOption => Boolean(token))\r\n\r\n return tokens.length > 0 ? tokens : FALLBACK_TOKENS\r\n}\r\n\r\nexport default function ThemeTokenSelectField(props: SelectFieldClientProps) {\r\n const { path, field } = props\r\n const { value, setValue } = useField<string>({ path })\r\n const [options, setOptions] = useState<ThemeColorOption[]>(FALLBACK_TOKENS)\r\n const selectedValue = value || 'background'\r\n\r\n useEffect(() => {\r\n let isMounted = true\r\n\r\n fetchThemeConfiguration().then((configuration) => {\r\n if (!isMounted) return\r\n setOptions(buildOptionsFromConfiguration(configuration))\r\n })\r\n\r\n return () => {\r\n isMounted = false\r\n }\r\n }, [])\r\n\r\n const handleSelect = useCallback(\r\n (nextValue: string) => {\r\n setValue(nextValue)\r\n },\r\n [setValue],\r\n )\r\n\r\n const label = typeof field.label === 'string' ? field.label : ''\r\n let description = ''\r\n if (typeof field.admin?.description === 'string') {\r\n description = field.admin.description\r\n } else if (\r\n field.admin?.description &&\r\n typeof field.admin.description === 'object' &&\r\n typeof field.admin.description.en === 'string'\r\n ) {\r\n description = field.admin.description.en\r\n }\r\n\r\n return (\r\n <div className=\"field-type theme-token-select\">\r\n {label && (\r\n <label\r\n className=\"field-label\"\r\n htmlFor={path}\r\n style={{ display: 'block', marginBottom: '8px' }}\r\n >\r\n {label}\r\n {field.required && <span className=\"required\">*</span>}\r\n </label>\r\n )}\r\n\r\n {description && (\r\n <div\r\n className=\"field-description\"\r\n style={{ marginBottom: '12px', fontSize: '13px', color: 'var(--theme-elevation-500)' }}\r\n >\r\n {description}\r\n </div>\r\n )}\r\n\r\n <div\r\n className=\"token-grid\"\r\n style={{\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(auto-fill, minmax(140px, 1fr))',\r\n gap: '10px',\r\n }}\r\n >\r\n {options.map((option) => {\r\n const isActive = option.value === selectedValue\r\n return (\r\n <button\r\n type=\"button\"\r\n key={option.value}\r\n onClick={() => handleSelect(option.value)}\r\n style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '10px',\r\n padding: '10px 12px',\r\n borderRadius: '10px',\r\n border: isActive\r\n ? '2px solid var(--theme-primary-500)'\r\n : '1px solid var(--theme-elevation-150)',\r\n backgroundColor: 'var(--theme-elevation-0)',\r\n boxShadow: isActive\r\n ? '0 10px 20px -10px rgba(59, 130, 246, 0.4)'\r\n : '0 1px 2px rgba(15, 23, 42, 0.08)',\r\n cursor: 'pointer',\r\n transition: 'border-color 0.2s ease, box-shadow 0.2s ease',\r\n }}\r\n >\r\n <span\r\n aria-hidden\r\n style={{\r\n width: '32px',\r\n height: '32px',\r\n borderRadius: '8px',\r\n border: '1px solid rgba(15, 23, 42, 0.08)',\r\n background: option.color,\r\n }}\r\n />\r\n <span\r\n style={{ fontSize: '13px', fontWeight: 600, color: 'var(--theme-elevation-800)' }}\r\n >\r\n {option.label}\r\n </span>\r\n </button>\r\n )\r\n })}\r\n </div>\r\n\r\n <select\r\n id={path}\r\n value={selectedValue}\r\n onChange={(event) => handleSelect(event.target.value)}\r\n style={{ display: 'none' }}\r\n >\r\n {options.map((option) => (\r\n <option key={option.value} value={option.value}>\r\n {option.label}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n )\r\n}\r\n"],"names":["useField","useCallback","useEffect","useState","defaultThemePresets","resolveThemeConfiguration","FALLBACK_TOKENS","value","label","color","fetchThemeConfiguration","response","fetch","ok","data","json","docs","themeConfiguration","error","console","warn","buildOptionsFromConfiguration","configuration","resolved","lightMode","orderedKeys","typedLightMode","tokens","map","key","trim","length","labelMap","background","card","muted","accent","secondary","primary","popover","filter","token","Boolean","ThemeTokenSelectField","props","path","field","setValue","options","setOptions","selectedValue","isMounted","then","handleSelect","nextValue","description","admin","en","div","className","htmlFor","style","display","marginBottom","required","span","fontSize","gridTemplateColumns","gap","option","isActive","button","type","onClick","alignItems","padding","borderRadius","border","backgroundColor","boxShadow","cursor","transition","aria-hidden","width","height","fontWeight","select","id","onChange","event","target"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/fields/ThemeTokenSelectField.tsx"],"sourcesContent":["'use client'\n\nimport { useField } from '@payloadcms/ui'\nimport type { SelectFieldClientProps } from 'payload'\nimport { useCallback, useEffect, useState } from 'react'\nimport { defaultThemePresets } from '../presets.js'\nimport { resolveThemeConfiguration } from '../utils/resolveThemeConfiguration.js'\n\ninterface ThemeColorOption {\n value: string\n label: string\n color: string\n description?: string\n}\n\nconst FALLBACK_TOKENS: ThemeColorOption[] = [\n { value: 'background', label: 'Theme background', color: 'var(--background)' },\n { value: 'card', label: 'Card background', color: 'var(--card)' },\n { value: 'muted', label: 'Muted surface', color: 'var(--muted)' },\n { value: 'accent', label: 'Accent surface', color: 'var(--accent)' },\n { value: 'secondary', label: 'Secondary surface', color: 'var(--secondary)' },\n { value: 'primary', label: 'Primary surface', color: 'var(--primary)' },\n]\n\nasync function fetchThemeConfiguration(): Promise<Record<string, unknown> | null> {\n try {\n const response = await fetch('/api/site-settings')\n if (!response.ok) {\n return null\n }\n const data = await response.json()\n return data?.docs?.[0]?.themeConfiguration ?? null\n } catch (error) {\n console.warn('[ThemeTokenSelectField] Failed to fetch theme configuration:', error)\n return null\n }\n}\n\nfunction buildOptionsFromConfiguration(configuration: Record<string, unknown> | null): ThemeColorOption[] {\n if (!configuration) {\n return FALLBACK_TOKENS\n }\n\n const resolved = resolveThemeConfiguration(configuration)\n const lightMode = resolved.lightMode ?? defaultThemePresets[0]?.lightMode ?? {}\n const orderedKeys: string[] = [\n 'background',\n 'card',\n 'muted',\n 'accent',\n 'secondary',\n 'primary',\n 'popover',\n ]\n\n const typedLightMode = lightMode as Record<string, string | null | undefined>\n\n const tokens = orderedKeys\n .map((key) => {\n const value = typedLightMode?.[key]\n if (typeof value !== 'string' || value.trim().length === 0) {\n return null\n }\n\n const labelMap: Record<string, string> = {\n background: 'Theme background',\n card: 'Card background',\n muted: 'Muted surface',\n accent: 'Accent surface',\n secondary: 'Secondary surface',\n primary: 'Primary surface',\n popover: 'Popover surface',\n }\n\n return {\n value: key,\n label: labelMap[key] ?? key,\n color: value,\n }\n })\n .filter((token): token is ThemeColorOption => Boolean(token))\n\n return tokens.length > 0 ? tokens : FALLBACK_TOKENS\n}\n\nexport default function ThemeTokenSelectField(props: SelectFieldClientProps) {\n const { path, field } = props\n const { value, setValue } = useField<string>({ path })\n const [options, setOptions] = useState<ThemeColorOption[]>(FALLBACK_TOKENS)\n const selectedValue = value || 'background'\n\n useEffect(() => {\n let isMounted = true\n\n fetchThemeConfiguration().then((configuration) => {\n if (!isMounted) return\n setOptions(buildOptionsFromConfiguration(configuration))\n })\n\n return () => {\n isMounted = false\n }\n }, [])\n\n const handleSelect = useCallback(\n (nextValue: string) => {\n setValue(nextValue)\n },\n [setValue],\n )\n\n const label = typeof field.label === 'string' ? field.label : ''\n let description = ''\n if (typeof field.admin?.description === 'string') {\n description = field.admin.description\n } else if (\n field.admin?.description &&\n typeof field.admin.description === 'object' &&\n typeof field.admin.description.en === 'string'\n ) {\n description = field.admin.description.en\n }\n\n return (\n <div className=\"field-type theme-token-select\">\n {label && (\n <label\n className=\"field-label\"\n htmlFor={path}\n style={{ display: 'block', marginBottom: '8px' }}\n >\n {label}\n {field.required && <span className=\"required\">*</span>}\n </label>\n )}\n\n {description && (\n <div\n className=\"field-description\"\n style={{ marginBottom: '12px', fontSize: '13px', color: 'var(--theme-elevation-500)' }}\n >\n {description}\n </div>\n )}\n\n <div\n className=\"token-grid\"\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(140px, 1fr))',\n gap: '10px',\n }}\n >\n {options.map((option) => {\n const isActive = option.value === selectedValue\n return (\n <button\n type=\"button\"\n key={option.value}\n onClick={() => handleSelect(option.value)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n padding: '10px 12px',\n borderRadius: '10px',\n border: isActive\n ? '2px solid var(--theme-primary-500)'\n : '1px solid var(--theme-elevation-150)',\n backgroundColor: 'var(--theme-elevation-0)',\n boxShadow: isActive\n ? '0 10px 20px -10px rgba(59, 130, 246, 0.4)'\n : '0 1px 2px rgba(15, 23, 42, 0.08)',\n cursor: 'pointer',\n transition: 'border-color 0.2s ease, box-shadow 0.2s ease',\n }}\n >\n <span\n aria-hidden\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '8px',\n border: '1px solid rgba(15, 23, 42, 0.08)',\n background: option.color,\n }}\n />\n <span\n style={{ fontSize: '13px', fontWeight: 600, color: 'var(--theme-elevation-800)' }}\n >\n {option.label}\n </span>\n </button>\n )\n })}\n </div>\n\n <select\n id={path}\n value={selectedValue}\n onChange={(event) => handleSelect(event.target.value)}\n style={{ display: 'none' }}\n >\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n )\n}\n"],"names":["useField","useCallback","useEffect","useState","defaultThemePresets","resolveThemeConfiguration","FALLBACK_TOKENS","value","label","color","fetchThemeConfiguration","response","fetch","ok","data","json","docs","themeConfiguration","error","console","warn","buildOptionsFromConfiguration","configuration","resolved","lightMode","orderedKeys","typedLightMode","tokens","map","key","trim","length","labelMap","background","card","muted","accent","secondary","primary","popover","filter","token","Boolean","ThemeTokenSelectField","props","path","field","setValue","options","setOptions","selectedValue","isMounted","then","handleSelect","nextValue","description","admin","en","div","className","htmlFor","style","display","marginBottom","required","span","fontSize","gridTemplateColumns","gap","option","isActive","button","type","onClick","alignItems","padding","borderRadius","border","backgroundColor","boxShadow","cursor","transition","aria-hidden","width","height","fontWeight","select","id","onChange","event","target"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const themeColorPickerComponentPath = '@payloadcms-plugins/theme-management/fields/ThemeColorPickerField';
1
+ const themeColorPickerComponentPath = '@kilivi/payloadcms-theme-management/fields/ThemeColorPickerField';
2
2
  const colorFieldKeys = [
3
3
  'background',
4
4
  'foreground',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fields/colorModeFields.ts"],"sourcesContent":["import type { Field } from 'payload'\r\n\r\nconst themeColorPickerComponentPath = '@payloadcms-plugins/theme-management/fields/ThemeColorPickerField'\r\n\r\ntype LocalizedText = Record<string, string>\r\n\r\nconst colorFieldKeys = [\r\n 'background',\r\n 'foreground',\r\n 'primary',\r\n 'primaryForeground',\r\n 'card',\r\n 'cardForeground',\r\n 'popover',\r\n 'popoverForeground',\r\n 'secondary',\r\n 'secondaryForeground',\r\n 'muted',\r\n 'mutedForeground',\r\n 'accent',\r\n 'accentForeground',\r\n 'destructive',\r\n 'destructiveForeground',\r\n 'border',\r\n 'input',\r\n 'ring',\r\n] as const\r\n\r\ntype ColorToken = (typeof colorFieldKeys)[number]\r\n\r\ninterface ColorFieldDefinition {\r\n name: ColorToken\r\n label: LocalizedText\r\n description: LocalizedText\r\n}\r\n\r\ntype ColorPalette = Record<ColorToken, string>\r\n\r\nconst colorFieldDefinitions: ColorFieldDefinition[] = [\r\n {\r\n name: 'background',\r\n label: { en: 'Background', cs: 'Pozadí' },\r\n description: { en: 'Main background color', cs: 'Hlavní barva pozadí' },\r\n },\r\n {\r\n name: 'foreground',\r\n label: { en: 'Foreground', cs: 'Popředí' },\r\n description: { en: 'Main text color', cs: 'Hlavní barva textu' },\r\n },\r\n {\r\n name: 'primary',\r\n label: { en: 'Primary', cs: 'Primární' },\r\n description: {\r\n en: 'Primary brand color for buttons, links',\r\n cs: 'Primární barva značky pro tlačítka, odkazy',\r\n },\r\n },\r\n {\r\n name: 'primaryForeground',\r\n label: { en: 'Primary Foreground', cs: 'Primární popředí' },\r\n description: {\r\n en: 'Text color on primary background',\r\n cs: 'Barva textu na primárním pozadí',\r\n },\r\n },\r\n {\r\n name: 'card',\r\n label: { en: 'Card', cs: 'Karta' },\r\n description: { en: 'Card background color', cs: 'Barva pozadí karty' },\r\n },\r\n {\r\n name: 'cardForeground',\r\n label: { en: 'Card Foreground', cs: 'Karta popředí' },\r\n description: {\r\n en: 'Text color on card background',\r\n cs: 'Barva textu na pozadí karty',\r\n },\r\n },\r\n {\r\n name: 'popover',\r\n label: { en: 'Popover', cs: 'Popover' },\r\n description: { en: 'Popover background color', cs: 'Barva pozadí popoveru' },\r\n },\r\n {\r\n name: 'popoverForeground',\r\n label: { en: 'Popover Foreground', cs: 'Popover popředí' },\r\n description: {\r\n en: 'Text color on popover background',\r\n cs: 'Barva textu na pozadí popoveru',\r\n },\r\n },\r\n {\r\n name: 'secondary',\r\n label: { en: 'Secondary', cs: 'Sekundární' },\r\n description: { en: 'Secondary UI elements', cs: 'Sekundární UI prvky' },\r\n },\r\n {\r\n name: 'secondaryForeground',\r\n label: { en: 'Secondary Foreground', cs: 'Sekundární popředí' },\r\n description: {\r\n en: 'Text color on secondary background',\r\n cs: 'Barva textu na sekundárním pozadí',\r\n },\r\n },\r\n {\r\n name: 'muted',\r\n label: { en: 'Muted', cs: 'Ztlumený' },\r\n description: { en: 'Muted backgrounds', cs: 'Ztlumená pozadí' },\r\n },\r\n {\r\n name: 'mutedForeground',\r\n label: { en: 'Muted Foreground', cs: 'Ztlumené popředí' },\r\n description: { en: 'Muted text color', cs: 'Ztlumená barva textu' },\r\n },\r\n {\r\n name: 'accent',\r\n label: { en: 'Accent', cs: 'Akcent' },\r\n description: { en: 'Accent color for highlights', cs: 'Akcentová barva pro zvýraznění' },\r\n },\r\n {\r\n name: 'accentForeground',\r\n label: { en: 'Accent Foreground', cs: 'Akcent popředí' },\r\n description: {\r\n en: 'Text color on accent background',\r\n cs: 'Barva textu na akcentovém pozadí',\r\n },\r\n },\r\n {\r\n name: 'destructive',\r\n label: { en: 'Destructive', cs: 'Destruktivní' },\r\n description: { en: 'Error and destructive actions', cs: 'Chyby a destruktivní akce' },\r\n },\r\n {\r\n name: 'destructiveForeground',\r\n label: { en: 'Destructive Foreground', cs: 'Destruktivní popředí' },\r\n description: {\r\n en: 'Text color on destructive background',\r\n cs: 'Barva textu na destruktivním pozadí',\r\n },\r\n },\r\n {\r\n name: 'border',\r\n label: { en: 'Border', cs: 'Okraj' },\r\n description: { en: 'Border color', cs: 'Barva okraje' },\r\n },\r\n {\r\n name: 'input',\r\n label: { en: 'Input', cs: 'Vstup' },\r\n description: { en: 'Input border color', cs: 'Barva okraje vstupů' },\r\n },\r\n {\r\n name: 'ring',\r\n label: { en: 'Ring', cs: 'Prstenec' },\r\n description: { en: 'Focus ring color', cs: 'Barva focus prstence' },\r\n },\r\n]\r\n\r\n// Light Mode Default Colors (Shadcn UI inspired defaults)\r\nexport const lightModeDefaults: ColorPalette = {\r\n background: '#ffffff',\r\n foreground: '#0a0a0a',\r\n card: '#ffffff',\r\n cardForeground: '#0a0a0a',\r\n popover: '#ffffff',\r\n popoverForeground: '#0a0a0a',\r\n primary: '#9372f7',\r\n primaryForeground: '#fafafa',\r\n secondary: '#f4f4f5',\r\n secondaryForeground: '#18181b',\r\n muted: '#f4f4f5',\r\n mutedForeground: '#71717a',\r\n accent: '#f4f4f5',\r\n accentForeground: '#18181b',\r\n destructive: '#ef4444',\r\n destructiveForeground: '#fafafa',\r\n border: '#e4e4e7',\r\n input: '#e4e4e7',\r\n ring: '#18181b',\r\n}\r\n\r\n// Dark Mode Default Colors (Shadcn UI inspired defaults)\r\nexport const darkModeDefaults: ColorPalette = {\r\n background: '#0a0a0a',\r\n foreground: '#fafafa',\r\n card: '#09090b',\r\n cardForeground: '#fafafa',\r\n popover: '#09090b',\r\n popoverForeground: '#fafafa',\r\n primary: '#9372f7',\r\n primaryForeground: '#09090b',\r\n secondary: '#27272a',\r\n secondaryForeground: '#fafafa',\r\n muted: '#27272a',\r\n mutedForeground: '#a1a1aa',\r\n accent: '#27272a',\r\n accentForeground: '#fafafa',\r\n destructive: '#7f1d1d',\r\n destructiveForeground: '#fafafa',\r\n border: '#27272a',\r\n input: '#27272a',\r\n ring: '#d4d4d8',\r\n}\r\n\r\nfunction createColorFields(defaults: ColorPalette): Field[] {\r\n return colorFieldDefinitions.map(({ name, label, description }) => ({\r\n name,\r\n type: 'text',\r\n label,\r\n defaultValue: defaults[name],\r\n admin: {\r\n components: {\r\n Field: themeColorPickerComponentPath,\r\n },\r\n description,\r\n },\r\n }))\r\n}\r\n\r\nexport const lightModeField: Field = {\r\n type: 'collapsible',\r\n label: {\r\n en: '☀️ Light Mode Colors',\r\n cs: '☀️ Barvy světlého režimu',\r\n },\r\n admin: {\r\n initCollapsed: true,\r\n description: {\r\n en: 'Configure colors for light mode',\r\n cs: 'Nakonfigurujte barvy pro světlý režim',\r\n },\r\n },\r\n fields: [\r\n {\r\n name: 'lightMode',\r\n type: 'group',\r\n fields: createColorFields(lightModeDefaults),\r\n },\r\n ],\r\n}\r\n\r\nexport const darkModeField: Field = {\r\n type: 'collapsible',\r\n label: {\r\n en: '🌙 Dark Mode Colors',\r\n cs: '🌙 Barvy tmavého režimu',\r\n },\r\n admin: {\r\n initCollapsed: true,\r\n description: {\r\n en: 'Configure colors for dark mode',\r\n cs: 'Nakonfigurujte barvy pro tmavý režim',\r\n },\r\n },\r\n fields: [\r\n {\r\n name: 'darkMode',\r\n type: 'group',\r\n fields: createColorFields(darkModeDefaults),\r\n },\r\n ],\r\n}\r\n"],"names":["themeColorPickerComponentPath","colorFieldKeys","colorFieldDefinitions","name","label","en","cs","description","lightModeDefaults","background","foreground","card","cardForeground","popover","popoverForeground","primary","primaryForeground","secondary","secondaryForeground","muted","mutedForeground","accent","accentForeground","destructive","destructiveForeground","border","input","ring","darkModeDefaults","createColorFields","defaults","map","type","defaultValue","admin","components","Field","lightModeField","initCollapsed","fields","darkModeField"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/fields/colorModeFields.ts"],"sourcesContent":["import type { Field } from 'payload'\n\nconst themeColorPickerComponentPath = '@kilivi/payloadcms-theme-management/fields/ThemeColorPickerField'\n\ntype LocalizedText = Record<string, string>\n\nconst colorFieldKeys = [\n 'background',\n 'foreground',\n 'primary',\n 'primaryForeground',\n 'card',\n 'cardForeground',\n 'popover',\n 'popoverForeground',\n 'secondary',\n 'secondaryForeground',\n 'muted',\n 'mutedForeground',\n 'accent',\n 'accentForeground',\n 'destructive',\n 'destructiveForeground',\n 'border',\n 'input',\n 'ring',\n] as const\n\ntype ColorToken = (typeof colorFieldKeys)[number]\n\ninterface ColorFieldDefinition {\n name: ColorToken\n label: LocalizedText\n description: LocalizedText\n}\n\ntype ColorPalette = Record<ColorToken, string>\n\nconst colorFieldDefinitions: ColorFieldDefinition[] = [\n {\n name: 'background',\n label: { en: 'Background', cs: 'Pozadí' },\n description: { en: 'Main background color', cs: 'Hlavní barva pozadí' },\n },\n {\n name: 'foreground',\n label: { en: 'Foreground', cs: 'Popředí' },\n description: { en: 'Main text color', cs: 'Hlavní barva textu' },\n },\n {\n name: 'primary',\n label: { en: 'Primary', cs: 'Primární' },\n description: {\n en: 'Primary brand color for buttons, links',\n cs: 'Primární barva značky pro tlačítka, odkazy',\n },\n },\n {\n name: 'primaryForeground',\n label: { en: 'Primary Foreground', cs: 'Primární popředí' },\n description: {\n en: 'Text color on primary background',\n cs: 'Barva textu na primárním pozadí',\n },\n },\n {\n name: 'card',\n label: { en: 'Card', cs: 'Karta' },\n description: { en: 'Card background color', cs: 'Barva pozadí karty' },\n },\n {\n name: 'cardForeground',\n label: { en: 'Card Foreground', cs: 'Karta popředí' },\n description: {\n en: 'Text color on card background',\n cs: 'Barva textu na pozadí karty',\n },\n },\n {\n name: 'popover',\n label: { en: 'Popover', cs: 'Popover' },\n description: { en: 'Popover background color', cs: 'Barva pozadí popoveru' },\n },\n {\n name: 'popoverForeground',\n label: { en: 'Popover Foreground', cs: 'Popover popředí' },\n description: {\n en: 'Text color on popover background',\n cs: 'Barva textu na pozadí popoveru',\n },\n },\n {\n name: 'secondary',\n label: { en: 'Secondary', cs: 'Sekundární' },\n description: { en: 'Secondary UI elements', cs: 'Sekundární UI prvky' },\n },\n {\n name: 'secondaryForeground',\n label: { en: 'Secondary Foreground', cs: 'Sekundární popředí' },\n description: {\n en: 'Text color on secondary background',\n cs: 'Barva textu na sekundárním pozadí',\n },\n },\n {\n name: 'muted',\n label: { en: 'Muted', cs: 'Ztlumený' },\n description: { en: 'Muted backgrounds', cs: 'Ztlumená pozadí' },\n },\n {\n name: 'mutedForeground',\n label: { en: 'Muted Foreground', cs: 'Ztlumené popředí' },\n description: { en: 'Muted text color', cs: 'Ztlumená barva textu' },\n },\n {\n name: 'accent',\n label: { en: 'Accent', cs: 'Akcent' },\n description: { en: 'Accent color for highlights', cs: 'Akcentová barva pro zvýraznění' },\n },\n {\n name: 'accentForeground',\n label: { en: 'Accent Foreground', cs: 'Akcent popředí' },\n description: {\n en: 'Text color on accent background',\n cs: 'Barva textu na akcentovém pozadí',\n },\n },\n {\n name: 'destructive',\n label: { en: 'Destructive', cs: 'Destruktivní' },\n description: { en: 'Error and destructive actions', cs: 'Chyby a destruktivní akce' },\n },\n {\n name: 'destructiveForeground',\n label: { en: 'Destructive Foreground', cs: 'Destruktivní popředí' },\n description: {\n en: 'Text color on destructive background',\n cs: 'Barva textu na destruktivním pozadí',\n },\n },\n {\n name: 'border',\n label: { en: 'Border', cs: 'Okraj' },\n description: { en: 'Border color', cs: 'Barva okraje' },\n },\n {\n name: 'input',\n label: { en: 'Input', cs: 'Vstup' },\n description: { en: 'Input border color', cs: 'Barva okraje vstupů' },\n },\n {\n name: 'ring',\n label: { en: 'Ring', cs: 'Prstenec' },\n description: { en: 'Focus ring color', cs: 'Barva focus prstence' },\n },\n]\n\n// Light Mode Default Colors (Shadcn UI inspired defaults)\nexport const lightModeDefaults: ColorPalette = {\n background: '#ffffff',\n foreground: '#0a0a0a',\n card: '#ffffff',\n cardForeground: '#0a0a0a',\n popover: '#ffffff',\n popoverForeground: '#0a0a0a',\n primary: '#9372f7',\n primaryForeground: '#fafafa',\n secondary: '#f4f4f5',\n secondaryForeground: '#18181b',\n muted: '#f4f4f5',\n mutedForeground: '#71717a',\n accent: '#f4f4f5',\n accentForeground: '#18181b',\n destructive: '#ef4444',\n destructiveForeground: '#fafafa',\n border: '#e4e4e7',\n input: '#e4e4e7',\n ring: '#18181b',\n}\n\n// Dark Mode Default Colors (Shadcn UI inspired defaults)\nexport const darkModeDefaults: ColorPalette = {\n background: '#0a0a0a',\n foreground: '#fafafa',\n card: '#09090b',\n cardForeground: '#fafafa',\n popover: '#09090b',\n popoverForeground: '#fafafa',\n primary: '#9372f7',\n primaryForeground: '#09090b',\n secondary: '#27272a',\n secondaryForeground: '#fafafa',\n muted: '#27272a',\n mutedForeground: '#a1a1aa',\n accent: '#27272a',\n accentForeground: '#fafafa',\n destructive: '#7f1d1d',\n destructiveForeground: '#fafafa',\n border: '#27272a',\n input: '#27272a',\n ring: '#d4d4d8',\n}\n\nfunction createColorFields(defaults: ColorPalette): Field[] {\n return colorFieldDefinitions.map(({ name, label, description }) => ({\n name,\n type: 'text',\n label,\n defaultValue: defaults[name],\n admin: {\n components: {\n Field: themeColorPickerComponentPath,\n },\n description,\n },\n }))\n}\n\nexport const lightModeField: Field = {\n type: 'collapsible',\n label: {\n en: '☀️ Light Mode Colors',\n cs: '☀️ Barvy světlého režimu',\n },\n admin: {\n initCollapsed: true,\n description: {\n en: 'Configure colors for light mode',\n cs: 'Nakonfigurujte barvy pro světlý režim',\n },\n },\n fields: [\n {\n name: 'lightMode',\n type: 'group',\n fields: createColorFields(lightModeDefaults),\n },\n ],\n}\n\nexport const darkModeField: Field = {\n type: 'collapsible',\n label: {\n en: '🌙 Dark Mode Colors',\n cs: '🌙 Barvy tmavého režimu',\n },\n admin: {\n initCollapsed: true,\n description: {\n en: 'Configure colors for dark mode',\n cs: 'Nakonfigurujte barvy pro tmavý režim',\n },\n },\n fields: [\n {\n name: 'darkMode',\n type: 'group',\n fields: createColorFields(darkModeDefaults),\n },\n ],\n}\n"],"names":["themeColorPickerComponentPath","colorFieldKeys","colorFieldDefinitions","name","label","en","cs","description","lightModeDefaults","background","foreground","card","cardForeground","popover","popoverForeground","primary","primaryForeground","secondary","secondaryForeground","muted","mutedForeground","accent","accentForeground","destructive","destructiveForeground","border","input","ring","darkModeDefaults","createColorFields","defaults","map","type","defaultValue","admin","components","Field","lightModeField","initCollapsed","fields","darkModeField"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { BASE_FONT_SIZE_OPTIONS, BODY_FONT_OPTIONS, HEADING_FONT_OPTIONS, LINE_HEIGHT_OPTIONS } from '../constants/themeFonts.js';
2
2
  import { darkModeField, lightModeField } from './colorModeFields.js';
3
- /**
4
- * Theme Configuration Field with Theme Selection as default value setter
5
- * Theme Selection populates lightMode/darkMode colors automatically
3
+ /**
4
+ * Theme Configuration Field with Theme Selection as default value setter
5
+ * Theme Selection populates lightMode/darkMode colors automatically
6
6
  */ export function createThemeConfigurationField(options) {
7
7
  const { themePresets, defaultTheme, includeColorModeToggle, includeCustomCSS, enableAdvancedFeatures = true } = options;
8
8
  const themeOptions = themePresets.map((preset)=>{
@@ -30,7 +30,7 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
30
30
  cs: 'Vyberte téma pro automatické předvyplnění barev. Po výběru můžete barvy upravit.'
31
31
  },
32
32
  components: {
33
- Field: '@payloadcms-plugins/theme-management/fields/ThemePreviewField'
33
+ Field: '@kilivi/payloadcms-theme-management/fields/ThemePreviewField'
34
34
  }
35
35
  }
36
36
  }
@@ -309,7 +309,7 @@ import { darkModeField, lightModeField } from './colorModeFields.js';
309
309
  ],
310
310
  admin: {
311
311
  components: {
312
- Field: '@payloadcms-plugins/theme-management/fields/RadiusField'
312
+ Field: '@kilivi/payloadcms-theme-management/fields/RadiusField'
313
313
  },
314
314
  width: '33%'
315
315
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fields/themeConfigurationField.ts"],"sourcesContent":["import type { Field } from 'payload'\r\nimport {\r\n BASE_FONT_SIZE_OPTIONS,\r\n BODY_FONT_OPTIONS,\r\n HEADING_FONT_OPTIONS,\r\n LINE_HEIGHT_OPTIONS,\r\n} from '../constants/themeFonts.js'\r\nimport type { ThemePreset } from '../index.js'\r\nimport { darkModeField, lightModeField } from './colorModeFields.js'\r\n\r\ninterface ThemeConfigurationFieldOptions {\r\n themePresets: ThemePreset[]\r\n defaultTheme: string\r\n includeColorModeToggle: boolean\r\n includeCustomCSS: boolean\r\n includeBrandIdentity: boolean\r\n enableAdvancedFeatures?: boolean\r\n}\r\n\r\n/**\r\n * Theme Configuration Field with Theme Selection as default value setter\r\n * Theme Selection populates lightMode/darkMode colors automatically\r\n */\r\nexport function createThemeConfigurationField(options: ThemeConfigurationFieldOptions): Field {\r\n const {\r\n themePresets,\r\n defaultTheme,\r\n includeColorModeToggle,\r\n includeCustomCSS,\r\n enableAdvancedFeatures = true,\r\n } = options\r\n\r\n const themeOptions = themePresets.map((preset) => {\r\n const previewColor = preset.preview?.colors.primary\r\n const label = previewColor ? `${preset.label} • ${previewColor}` : preset.label\r\n return {\r\n label,\r\n value: preset.name,\r\n }\r\n })\r\n\r\n const fields: Field[] = [\r\n {\r\n name: 'theme',\r\n type: 'select',\r\n required: true,\r\n defaultValue: defaultTheme,\r\n options: themeOptions,\r\n label: {\r\n en: '🎨 Theme Selection',\r\n cs: '🎨 Výběr tématu',\r\n },\r\n admin: {\r\n description: {\r\n en: 'Select a theme to auto-populate color values. You can customize colors after selection.',\r\n cs: 'Vyberte téma pro automatické předvyplnění barev. Po výběru můžete barvy upravit.',\r\n },\r\n components: {\r\n Field: '@payloadcms-plugins/theme-management/fields/ThemePreviewField',\r\n },\r\n },\r\n },\r\n ]\r\n\r\n // Color Mode Settings\r\n if (includeColorModeToggle) {\r\n fields.push({\r\n type: 'collapsible',\r\n label: {\r\n en: '🌗 Color Mode Settings',\r\n cs: '🌗 Nastavení barevného režimu',\r\n },\r\n admin: {\r\n initCollapsed: false,\r\n description: {\r\n en: 'Configure light and dark mode colors. Changes here override theme selection.',\r\n cs: 'Nakonfigurujte barvy světlého a tmavého režimu. Změny zde přepíší výběr tématu.',\r\n },\r\n },\r\n fields: [\r\n {\r\n type: 'row',\r\n fields: [\r\n {\r\n name: 'colorMode',\r\n type: 'select',\r\n label: {\r\n en: 'Default Color Mode',\r\n cs: 'Výchozí barevný režim',\r\n },\r\n defaultValue: 'auto',\r\n options: [\r\n {\r\n label: {\r\n en: 'Auto (System)',\r\n cs: 'Automaticky (Systém)',\r\n },\r\n value: 'auto',\r\n },\r\n {\r\n label: { en: 'Light', cs: 'Světlý' },\r\n value: 'light',\r\n },\r\n {\r\n label: { en: 'Dark', cs: 'Tmavý' },\r\n value: 'dark',\r\n },\r\n ],\r\n admin: {\r\n description: {\r\n en: 'Default color mode for visitors',\r\n cs: 'Výchozí barevný režim pro návštěvníky',\r\n },\r\n width: '50%',\r\n },\r\n },\r\n {\r\n name: 'allowColorModeToggle',\r\n type: 'checkbox',\r\n label: {\r\n en: 'Enable Mode Toggle',\r\n cs: 'Povolit přepínač režimu',\r\n },\r\n defaultValue: true,\r\n admin: {\r\n description: {\r\n en: 'Let visitors switch modes',\r\n cs: 'Umožnit návštěvníkům přepínat režimy',\r\n },\r\n width: '50%',\r\n },\r\n },\r\n ],\r\n },\r\n lightModeField,\r\n darkModeField,\r\n ],\r\n })\r\n }\r\n\r\n fields.push({\r\n type: 'collapsible',\r\n label: {\r\n en: '🅰️ Typography',\r\n cs: '🅰️ Typografie',\r\n },\r\n admin: {\r\n initCollapsed: true,\r\n description: {\r\n en: 'Choose font families and base typography settings. Leave fields on \"Use preset\" to inherit the theme defaults.',\r\n cs: 'Zvolte rodiny písem a základní typografické nastavení. Hodnota \"Použít výchozí\" zachová nastavení motivu.',\r\n },\r\n },\r\n fields: [\r\n {\r\n name: 'typography',\r\n type: 'group',\r\n fields: [\r\n {\r\n type: 'row',\r\n fields: [\r\n {\r\n name: 'bodyFont',\r\n type: 'select',\r\n label: {\r\n en: 'Body font',\r\n cs: 'Písmo pro text',\r\n },\r\n defaultValue: 'preset',\r\n options: BODY_FONT_OPTIONS.map((option) => ({\r\n label: option.label,\r\n value: option.value,\r\n })),\r\n admin: {\r\n width: '50%',\r\n },\r\n },\r\n {\r\n name: 'headingFont',\r\n type: 'select',\r\n label: {\r\n en: 'Heading font',\r\n cs: 'Písmo pro nadpisy',\r\n },\r\n defaultValue: 'preset',\r\n options: HEADING_FONT_OPTIONS.map((option) => ({\r\n label: option.label,\r\n value: option.value,\r\n })),\r\n admin: {\r\n width: '50%',\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n type: 'row',\r\n fields: [\r\n {\r\n name: 'bodyFontCustom',\r\n type: 'text',\r\n label: {\r\n en: 'Custom body font stack',\r\n cs: 'Vlastní písmo pro text',\r\n },\r\n admin: {\r\n width: '50%',\r\n placeholder: '\"IBM Plex Sans\", sans-serif',\r\n description: {\r\n en: 'Provide full CSS font-family stack when using a custom font.',\r\n cs: 'Při volbě vlastního písma zadejte celý CSS zápis font-family.',\r\n },\r\n condition: (_, siblingData) => siblingData?.bodyFont === 'custom',\r\n },\r\n },\r\n {\r\n name: 'headingFontCustom',\r\n type: 'text',\r\n label: {\r\n en: 'Custom heading font stack',\r\n cs: 'Vlastní písmo pro nadpisy',\r\n },\r\n admin: {\r\n width: '50%',\r\n placeholder: '\"Cormorant Garamond\", serif',\r\n description: {\r\n en: 'Provide full CSS font-family stack when using a custom heading font.',\r\n cs: 'Při volbě vlastního nadpisového písma zadejte celý CSS zápis font-family.',\r\n },\r\n condition: (_, siblingData) => siblingData?.headingFont === 'custom',\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n type: 'row',\r\n fields: [\r\n {\r\n name: 'baseFontSize',\r\n type: 'select',\r\n label: {\r\n en: 'Base font size',\r\n cs: 'Základní velikost písma',\r\n },\r\n defaultValue: 'preset',\r\n options: BASE_FONT_SIZE_OPTIONS.map((option) => ({\r\n label: option.label,\r\n value: option.value,\r\n })),\r\n admin: {\r\n width: '50%',\r\n },\r\n },\r\n {\r\n name: 'lineHeight',\r\n type: 'select',\r\n label: {\r\n en: 'Line height',\r\n cs: 'Řádkování',\r\n },\r\n defaultValue: 'preset',\r\n options: LINE_HEIGHT_OPTIONS.map((option) => ({\r\n label: option.label,\r\n value: option.value,\r\n })),\r\n admin: {\r\n width: '50%',\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n })\r\n\r\n // Design Customization\r\n fields.push({\r\n type: 'collapsible',\r\n label: {\r\n en: '✨ Design Customization',\r\n cs: '✨ Přizpůsobení designu',\r\n },\r\n admin: {\r\n initCollapsed: true,\r\n },\r\n fields: [\r\n {\r\n name: 'borderRadius',\r\n type: 'select',\r\n label: {\r\n en: 'Border Radius',\r\n cs: 'Zaoblení rohů',\r\n },\r\n defaultValue: 'medium',\r\n options: [\r\n { label: { en: 'None', cs: 'Žádné' }, value: 'none' },\r\n { label: { en: 'Small', cs: 'Malé' }, value: 'small' },\r\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\r\n { label: { en: 'Large', cs: 'Velké' }, value: 'large' },\r\n { label: { en: 'Full', cs: 'Plné' }, value: 'xl' },\r\n ],\r\n admin: {\r\n components: {\r\n Field: '@payloadcms-plugins/theme-management/fields/RadiusField',\r\n },\r\n width: '33%',\r\n },\r\n },\r\n {\r\n name: 'fontScale',\r\n type: 'select',\r\n label: {\r\n en: 'Font Scale',\r\n cs: 'Velikost písma',\r\n },\r\n defaultValue: 'medium',\r\n options: [\r\n { label: { en: 'Small', cs: 'Malé' }, value: 'small' },\r\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\r\n { label: { en: 'Large', cs: 'Velké' }, value: 'large' },\r\n ],\r\n admin: {\r\n width: '33%',\r\n },\r\n },\r\n {\r\n name: 'spacing',\r\n type: 'select',\r\n label: {\r\n en: 'Spacing',\r\n cs: 'Mezery',\r\n },\r\n defaultValue: 'medium',\r\n options: [\r\n { label: { en: 'Compact', cs: 'Kompaktní' }, value: 'compact' },\r\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\r\n { label: { en: 'Spacious', cs: 'Prostorné' }, value: 'spacious' },\r\n ],\r\n admin: {\r\n width: '34%',\r\n },\r\n },\r\n ],\r\n })\r\n\r\n // Advanced Settings\r\n if (enableAdvancedFeatures) {\r\n const advancedFields: Field[] = [\r\n {\r\n name: 'animationLevel',\r\n type: 'select',\r\n label: {\r\n en: 'Animation Level',\r\n cs: 'Úroveň animací',\r\n },\r\n defaultValue: 'medium',\r\n options: [\r\n { label: { en: 'None', cs: 'Žádné' }, value: 'none' },\r\n { label: { en: 'Reduced', cs: 'Snížené' }, value: 'reduced' },\r\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\r\n { label: { en: 'High', cs: 'Vysoké' }, value: 'high' },\r\n ],\r\n admin: {\r\n description: {\r\n en: 'Control website animations and transitions',\r\n cs: 'Kontrola animací a přechodů na webu',\r\n },\r\n width: '50%',\r\n },\r\n },\r\n ]\r\n\r\n if (includeCustomCSS) {\r\n advancedFields.push({\r\n name: 'customCSS',\r\n type: 'code',\r\n label: {\r\n en: 'Custom CSS',\r\n cs: 'Vlastní CSS',\r\n },\r\n admin: {\r\n language: 'css',\r\n description: {\r\n en: 'Add custom CSS to override default styles',\r\n cs: 'Přidejte vlastní CSS pro přepsání výchozích stylů',\r\n },\r\n // placeholder:\r\n // ':root {\\n --primary: #your-color;\\n --border-radius: 8px;\\n --font-family: \"Your Font\";\\n}\\n\\n.custom-class {\\n /* Your custom styles */\\n}',\r\n // rows: 8,\r\n },\r\n })\r\n }\r\n\r\n fields.push({\r\n type: 'collapsible',\r\n label: {\r\n en: '⚙️ Advanced Settings',\r\n cs: '⚙️ Pokročilé nastavení',\r\n },\r\n admin: {\r\n initCollapsed: true,\r\n },\r\n fields: advancedFields,\r\n })\r\n }\r\n\r\n return {\r\n name: 'themeConfiguration',\r\n type: 'group',\r\n label: false,\r\n admin: {\r\n description: {\r\n en: 'Configure website appearance and styling',\r\n cs: 'Nakonfigurujte vzhled a stylování webu',\r\n },\r\n },\r\n fields,\r\n }\r\n}\r\n"],"names":["BASE_FONT_SIZE_OPTIONS","BODY_FONT_OPTIONS","HEADING_FONT_OPTIONS","LINE_HEIGHT_OPTIONS","darkModeField","lightModeField","createThemeConfigurationField","options","themePresets","defaultTheme","includeColorModeToggle","includeCustomCSS","enableAdvancedFeatures","themeOptions","map","preset","previewColor","preview","colors","primary","label","value","name","fields","type","required","defaultValue","en","cs","admin","description","components","Field","push","initCollapsed","width","option","placeholder","condition","_","siblingData","bodyFont","headingFont","advancedFields","language"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/fields/themeConfigurationField.ts"],"sourcesContent":["import type { Field } from 'payload'\nimport {\n BASE_FONT_SIZE_OPTIONS,\n BODY_FONT_OPTIONS,\n HEADING_FONT_OPTIONS,\n LINE_HEIGHT_OPTIONS,\n} from '../constants/themeFonts.js'\nimport type { ThemePreset } from '../index.js'\nimport { darkModeField, lightModeField } from './colorModeFields.js'\n\ninterface ThemeConfigurationFieldOptions {\n themePresets: ThemePreset[]\n defaultTheme: string\n includeColorModeToggle: boolean\n includeCustomCSS: boolean\n includeBrandIdentity: boolean\n enableAdvancedFeatures?: boolean\n}\n\n/**\n * Theme Configuration Field with Theme Selection as default value setter\n * Theme Selection populates lightMode/darkMode colors automatically\n */\nexport function createThemeConfigurationField(options: ThemeConfigurationFieldOptions): Field {\n const {\n themePresets,\n defaultTheme,\n includeColorModeToggle,\n includeCustomCSS,\n enableAdvancedFeatures = true,\n } = options\n\n const themeOptions = themePresets.map((preset) => {\n const previewColor = preset.preview?.colors.primary\n const label = previewColor ? `${preset.label} • ${previewColor}` : preset.label\n return {\n label,\n value: preset.name,\n }\n })\n\n const fields: Field[] = [\n {\n name: 'theme',\n type: 'select',\n required: true,\n defaultValue: defaultTheme,\n options: themeOptions,\n label: {\n en: '🎨 Theme Selection',\n cs: '🎨 Výběr tématu',\n },\n admin: {\n description: {\n en: 'Select a theme to auto-populate color values. You can customize colors after selection.',\n cs: 'Vyberte téma pro automatické předvyplnění barev. Po výběru můžete barvy upravit.',\n },\n components: {\n Field: '@kilivi/payloadcms-theme-management/fields/ThemePreviewField',\n },\n },\n },\n ]\n\n // Color Mode Settings\n if (includeColorModeToggle) {\n fields.push({\n type: 'collapsible',\n label: {\n en: '🌗 Color Mode Settings',\n cs: '🌗 Nastavení barevného režimu',\n },\n admin: {\n initCollapsed: false,\n description: {\n en: 'Configure light and dark mode colors. Changes here override theme selection.',\n cs: 'Nakonfigurujte barvy světlého a tmavého režimu. Změny zde přepíší výběr tématu.',\n },\n },\n fields: [\n {\n type: 'row',\n fields: [\n {\n name: 'colorMode',\n type: 'select',\n label: {\n en: 'Default Color Mode',\n cs: 'Výchozí barevný režim',\n },\n defaultValue: 'auto',\n options: [\n {\n label: {\n en: 'Auto (System)',\n cs: 'Automaticky (Systém)',\n },\n value: 'auto',\n },\n {\n label: { en: 'Light', cs: 'Světlý' },\n value: 'light',\n },\n {\n label: { en: 'Dark', cs: 'Tmavý' },\n value: 'dark',\n },\n ],\n admin: {\n description: {\n en: 'Default color mode for visitors',\n cs: 'Výchozí barevný režim pro návštěvníky',\n },\n width: '50%',\n },\n },\n {\n name: 'allowColorModeToggle',\n type: 'checkbox',\n label: {\n en: 'Enable Mode Toggle',\n cs: 'Povolit přepínač režimu',\n },\n defaultValue: true,\n admin: {\n description: {\n en: 'Let visitors switch modes',\n cs: 'Umožnit návštěvníkům přepínat režimy',\n },\n width: '50%',\n },\n },\n ],\n },\n lightModeField,\n darkModeField,\n ],\n })\n }\n\n fields.push({\n type: 'collapsible',\n label: {\n en: '🅰️ Typography',\n cs: '🅰️ Typografie',\n },\n admin: {\n initCollapsed: true,\n description: {\n en: 'Choose font families and base typography settings. Leave fields on \"Use preset\" to inherit the theme defaults.',\n cs: 'Zvolte rodiny písem a základní typografické nastavení. Hodnota \"Použít výchozí\" zachová nastavení motivu.',\n },\n },\n fields: [\n {\n name: 'typography',\n type: 'group',\n fields: [\n {\n type: 'row',\n fields: [\n {\n name: 'bodyFont',\n type: 'select',\n label: {\n en: 'Body font',\n cs: 'Písmo pro text',\n },\n defaultValue: 'preset',\n options: BODY_FONT_OPTIONS.map((option) => ({\n label: option.label,\n value: option.value,\n })),\n admin: {\n width: '50%',\n },\n },\n {\n name: 'headingFont',\n type: 'select',\n label: {\n en: 'Heading font',\n cs: 'Písmo pro nadpisy',\n },\n defaultValue: 'preset',\n options: HEADING_FONT_OPTIONS.map((option) => ({\n label: option.label,\n value: option.value,\n })),\n admin: {\n width: '50%',\n },\n },\n ],\n },\n {\n type: 'row',\n fields: [\n {\n name: 'bodyFontCustom',\n type: 'text',\n label: {\n en: 'Custom body font stack',\n cs: 'Vlastní písmo pro text',\n },\n admin: {\n width: '50%',\n placeholder: '\"IBM Plex Sans\", sans-serif',\n description: {\n en: 'Provide full CSS font-family stack when using a custom font.',\n cs: 'Při volbě vlastního písma zadejte celý CSS zápis font-family.',\n },\n condition: (_, siblingData) => siblingData?.bodyFont === 'custom',\n },\n },\n {\n name: 'headingFontCustom',\n type: 'text',\n label: {\n en: 'Custom heading font stack',\n cs: 'Vlastní písmo pro nadpisy',\n },\n admin: {\n width: '50%',\n placeholder: '\"Cormorant Garamond\", serif',\n description: {\n en: 'Provide full CSS font-family stack when using a custom heading font.',\n cs: 'Při volbě vlastního nadpisového písma zadejte celý CSS zápis font-family.',\n },\n condition: (_, siblingData) => siblingData?.headingFont === 'custom',\n },\n },\n ],\n },\n {\n type: 'row',\n fields: [\n {\n name: 'baseFontSize',\n type: 'select',\n label: {\n en: 'Base font size',\n cs: 'Základní velikost písma',\n },\n defaultValue: 'preset',\n options: BASE_FONT_SIZE_OPTIONS.map((option) => ({\n label: option.label,\n value: option.value,\n })),\n admin: {\n width: '50%',\n },\n },\n {\n name: 'lineHeight',\n type: 'select',\n label: {\n en: 'Line height',\n cs: 'Řádkování',\n },\n defaultValue: 'preset',\n options: LINE_HEIGHT_OPTIONS.map((option) => ({\n label: option.label,\n value: option.value,\n })),\n admin: {\n width: '50%',\n },\n },\n ],\n },\n ],\n },\n ],\n })\n\n // Design Customization\n fields.push({\n type: 'collapsible',\n label: {\n en: '✨ Design Customization',\n cs: '✨ Přizpůsobení designu',\n },\n admin: {\n initCollapsed: true,\n },\n fields: [\n {\n name: 'borderRadius',\n type: 'select',\n label: {\n en: 'Border Radius',\n cs: 'Zaoblení rohů',\n },\n defaultValue: 'medium',\n options: [\n { label: { en: 'None', cs: 'Žádné' }, value: 'none' },\n { label: { en: 'Small', cs: 'Malé' }, value: 'small' },\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\n { label: { en: 'Large', cs: 'Velké' }, value: 'large' },\n { label: { en: 'Full', cs: 'Plné' }, value: 'xl' },\n ],\n admin: {\n components: {\n Field: '@kilivi/payloadcms-theme-management/fields/RadiusField',\n },\n width: '33%',\n },\n },\n {\n name: 'fontScale',\n type: 'select',\n label: {\n en: 'Font Scale',\n cs: 'Velikost písma',\n },\n defaultValue: 'medium',\n options: [\n { label: { en: 'Small', cs: 'Malé' }, value: 'small' },\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\n { label: { en: 'Large', cs: 'Velké' }, value: 'large' },\n ],\n admin: {\n width: '33%',\n },\n },\n {\n name: 'spacing',\n type: 'select',\n label: {\n en: 'Spacing',\n cs: 'Mezery',\n },\n defaultValue: 'medium',\n options: [\n { label: { en: 'Compact', cs: 'Kompaktní' }, value: 'compact' },\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\n { label: { en: 'Spacious', cs: 'Prostorné' }, value: 'spacious' },\n ],\n admin: {\n width: '34%',\n },\n },\n ],\n })\n\n // Advanced Settings\n if (enableAdvancedFeatures) {\n const advancedFields: Field[] = [\n {\n name: 'animationLevel',\n type: 'select',\n label: {\n en: 'Animation Level',\n cs: 'Úroveň animací',\n },\n defaultValue: 'medium',\n options: [\n { label: { en: 'None', cs: 'Žádné' }, value: 'none' },\n { label: { en: 'Reduced', cs: 'Snížené' }, value: 'reduced' },\n { label: { en: 'Medium', cs: 'Střední' }, value: 'medium' },\n { label: { en: 'High', cs: 'Vysoké' }, value: 'high' },\n ],\n admin: {\n description: {\n en: 'Control website animations and transitions',\n cs: 'Kontrola animací a přechodů na webu',\n },\n width: '50%',\n },\n },\n ]\n\n if (includeCustomCSS) {\n advancedFields.push({\n name: 'customCSS',\n type: 'code',\n label: {\n en: 'Custom CSS',\n cs: 'Vlastní CSS',\n },\n admin: {\n language: 'css',\n description: {\n en: 'Add custom CSS to override default styles',\n cs: 'Přidejte vlastní CSS pro přepsání výchozích stylů',\n },\n // placeholder:\n // ':root {\\n --primary: #your-color;\\n --border-radius: 8px;\\n --font-family: \"Your Font\";\\n}\\n\\n.custom-class {\\n /* Your custom styles */\\n}',\n // rows: 8,\n },\n })\n }\n\n fields.push({\n type: 'collapsible',\n label: {\n en: '⚙️ Advanced Settings',\n cs: '⚙️ Pokročilé nastavení',\n },\n admin: {\n initCollapsed: true,\n },\n fields: advancedFields,\n })\n }\n\n return {\n name: 'themeConfiguration',\n type: 'group',\n label: false,\n admin: {\n description: {\n en: 'Configure website appearance and styling',\n cs: 'Nakonfigurujte vzhled a stylování webu',\n },\n },\n fields,\n }\n}\n"],"names":["BASE_FONT_SIZE_OPTIONS","BODY_FONT_OPTIONS","HEADING_FONT_OPTIONS","LINE_HEIGHT_OPTIONS","darkModeField","lightModeField","createThemeConfigurationField","options","themePresets","defaultTheme","includeColorModeToggle","includeCustomCSS","enableAdvancedFeatures","themeOptions","map","preset","previewColor","preview","colors","primary","label","value","name","fields","type","required","defaultValue","en","cs","admin","description","components","Field","push","initCollapsed","width","option","placeholder","condition","_","siblingData","bodyFont","headingFont","advancedFields","language"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -9,6 +9,9 @@ export declare const getThemePreset: (themeName: string) => ThemePreset | null;
9
9
  export declare const getAvailableThemePresets: () => ThemePreset[];
10
10
  export { defaultThemePresets } from './presets.js';
11
11
  export type { ThemePreset, ThemeTypographyPreset } from './presets.js';
12
+ export { extendedThemePresets, extendedThemeToCSSVariables, } from './extended-presets.js';
13
+ export type { ExtendedThemePreset, ShadcnColorTokens } from './extended-presets.js';
14
+ export { applyExtendedTheme, generateExtendedThemeCSS, resetExtendedTheme, getExtendedThemeTokens, createUseExtendedTheme, getTailwindVarReferences, } from './utils/extendedThemeHelpers.js';
12
15
  export type { ThemeManagementPluginOptions, FetchThemeConfigurationOptions } from './types.js';
13
16
  export { DEFAULT_THEME_CONFIGURATION, resolveThemeConfiguration, } from './utils/resolveThemeConfiguration.js';
14
17
  export type { ResolvedThemeConfiguration } from './utils/resolveThemeConfiguration.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmC,MAAM,EAAE,MAAM,SAAS,CAAA;AAEtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,OAAO,KAAK,EACV,8BAA8B,EAC9B,4BAA4B,EAC7B,MAAM,YAAY,CAAA;AA2BnB,eAAO,MAAM,qBAAqB,GAAI,UAAS,4BAAiC,KAAG,MAqElF,CAAA;AAED,KAAK,iBAAiB,GAAG,MAAM,GAAG,8BAA8B,CAAA;AAEhE,eAAO,MAAM,uBAAuB,GAClC,UAAU,iBAAiB,KAC1B,OAAO,CAAC,sBAAsB,GAAG,IAAI,CA8CvC,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,WAAW,MAAM,KAAG,WAAW,GAAG,IAEhE,CAAA;AAED,eAAO,MAAM,wBAAwB,QAAO,WAAW,EAEtD,CAAA;AAID,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACtE,YAAY,EAAE,4BAA4B,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAA;AAC9F,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,sCAAsC,CAAA;AAC7C,YAAY,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAA;AACtF,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AAEvE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,eAAO,MAAM,qBAAqB,aApJa,4BAA4B,KAAQ,MAoJzB,CAAA;AAC1D,oDAAoD;AACpD,eAAO,MAAM,wBAAwB,aAtJU,4BAA4B,KAAQ,MAsJtB,CAAA;AAE7D,eAAe,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmC,MAAM,EAAE,MAAM,SAAS,CAAA;AAEtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,OAAO,KAAK,EACV,8BAA8B,EAC9B,4BAA4B,EAC7B,MAAM,YAAY,CAAA;AA2BnB,eAAO,MAAM,qBAAqB,GAAI,UAAS,4BAAiC,KAAG,MAqElF,CAAA;AAED,KAAK,iBAAiB,GAAG,MAAM,GAAG,8BAA8B,CAAA;AAEhE,eAAO,MAAM,uBAAuB,GAClC,UAAU,iBAAiB,KAC1B,OAAO,CAAC,sBAAsB,GAAG,IAAI,CA8CvC,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,WAAW,MAAM,KAAG,WAAW,GAAG,IAEhE,CAAA;AAED,eAAO,MAAM,wBAAwB,QAAO,WAAW,EAEtD,CAAA;AAID,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACtE,OAAO,EACL,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACnF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,iCAAiC,CAAA;AACxC,YAAY,EAAE,4BAA4B,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAA;AAC9F,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,sCAAsC,CAAA;AAC7C,YAAY,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAA;AACtF,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AAEvE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,eAAO,MAAM,qBAAqB,aAjKa,4BAA4B,KAAQ,MAiKzB,CAAA;AAC1D,oDAAoD;AACpD,eAAO,MAAM,wBAAwB,aAnKU,4BAA4B,KAAQ,MAmKtB,CAAA;AAE7D,eAAe,qBAAqB,CAAA"}
package/dist/index.js CHANGED
@@ -98,6 +98,8 @@ export const getAvailableThemePresets = ()=>{
98
98
  return defaultThemePresets;
99
99
  };
100
100
  export { defaultThemePresets } from './presets.js';
101
+ export { extendedThemePresets, extendedThemeToCSSVariables } from './extended-presets.js';
102
+ export { applyExtendedTheme, generateExtendedThemeCSS, resetExtendedTheme, getExtendedThemeTokens, createUseExtendedTheme, getTailwindVarReferences } from './utils/extendedThemeHelpers.js';
101
103
  export { DEFAULT_THEME_CONFIGURATION, resolveThemeConfiguration } from './utils/resolveThemeConfiguration.js';
102
104
  export { generateThemeColorsCss, hexToHsl } from './utils/themeColors.js';
103
105
  export { generateThemeCSS, getThemeStyles } from './utils/themeUtils.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { CollectionConfig, Config, Field, Plugin } from 'payload'\r\nimport { createThemeConfigurationField } from './fields/themeConfigurationField.js'\r\nimport type { SiteThemeConfiguration } from './payload-types.js'\r\nimport type { ThemePreset } from './presets.js'\r\nimport { defaultThemePresets } from './presets.js'\r\nimport type {\r\n FetchThemeConfigurationOptions,\r\n ThemeManagementPluginOptions,\r\n} from './types.js'\r\n\r\nconst THEME_FIELD_NAME = 'themeConfiguration'\r\n\r\nconst removeExistingThemeField = (fields: Field[] = []): Field[] =>\r\n fields.filter((field) => {\r\n const candidate = field as { name?: unknown }\r\n return candidate?.name !== THEME_FIELD_NAME\r\n })\r\n\r\nconst upsertThemeField = (\r\n fields: Field[] | undefined,\r\n themeField: Field,\r\n enableLogging: boolean,\r\n): Field[] => {\r\n const sanitized = removeExistingThemeField(fields ?? [])\r\n\r\n if (enableLogging) {\r\n console.log('🎨 Theme Management Plugin: injecting theme configuration field')\r\n }\r\n\r\n return [...sanitized, themeField]\r\n}\r\n\r\nconst ensureCollectionsArray = (collections: Config['collections']): CollectionConfig[] =>\r\n Array.isArray(collections) ? collections : []\r\n\r\nexport const themeManagementPlugin = (options: ThemeManagementPluginOptions = {}): Plugin => {\r\n return (config: Config): Config => {\r\n const {\r\n enabled = true,\r\n targetCollection = 'site-settings',\r\n themePresets = defaultThemePresets,\r\n defaultTheme = 'cool',\r\n includeColorModeToggle = true,\r\n includeCustomCSS = true,\r\n includeBrandIdentity = false,\r\n enableAdvancedFeatures = true,\r\n enableLogging = false,\r\n } = options\r\n\r\n if (!enabled) {\r\n if (enableLogging) {\r\n console.log('🎨 Theme Management Plugin: disabled via options, skipping.')\r\n }\r\n return config\r\n }\r\n\r\n const themeField = createThemeConfigurationField({\r\n themePresets,\r\n defaultTheme,\r\n includeColorModeToggle,\r\n includeCustomCSS,\r\n includeBrandIdentity: includeBrandIdentity ?? false,\r\n enableAdvancedFeatures,\r\n })\r\n\r\n let collectionTouched = false\r\n\r\n const collections = ensureCollectionsArray(config.collections).map((collection) => {\r\n if (collection.slug !== targetCollection) {\r\n return collection\r\n }\r\n\r\n collectionTouched = true\r\n\r\n if (enableLogging) {\r\n console.log(\r\n `🎨 Theme Management Plugin: enhancing collection \"${collection.slug}\"`,\r\n )\r\n }\r\n\r\n const existingFields = Array.isArray(collection.fields) ? collection.fields : []\r\n\r\n const fields = upsertThemeField(existingFields, themeField, enableLogging)\r\n\r\n return {\r\n ...collection,\r\n fields,\r\n }\r\n })\r\n\r\n if (!collectionTouched) {\r\n if (enableLogging) {\r\n console.warn(\r\n `🎨 Theme Management Plugin: collection \"${targetCollection}\" was not found, leaving config untouched.`,\r\n )\r\n }\r\n return config\r\n }\r\n\r\n return {\r\n ...config,\r\n collections,\r\n }\r\n }\r\n}\r\n\r\ntype FetchOptionsInput = string | FetchThemeConfigurationOptions\r\n\r\nexport const fetchThemeConfiguration = async (\r\n options?: FetchOptionsInput,\r\n): Promise<SiteThemeConfiguration | null> => {\r\n const normalizedOptions =\r\n typeof options === 'string'\r\n ? { tenantSlug: options }\r\n : options ?? {}\r\n\r\n const {\r\n tenantSlug,\r\n collectionSlug = 'site-settings',\r\n depth,\r\n locale,\r\n draft,\r\n queryParams = {},\r\n } = normalizedOptions\r\n\r\n const params = new URLSearchParams({ limit: '1' })\r\n\r\n if (typeof depth === 'number') params.set('depth', String(depth))\r\n if (tenantSlug) params.set('tenant', tenantSlug)\r\n if (locale) params.set('locale', locale)\r\n if (draft) params.set('draft', 'true')\r\n\r\n Object.entries(queryParams).forEach(([key, value]) => {\r\n if (value === undefined) return\r\n params.set(key, String(value))\r\n })\r\n\r\n const url = `/api/${collectionSlug}?${params.toString()}`\r\n\r\n try {\r\n const response = await fetch(url)\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch theme configuration (status ${response.status})`)\r\n }\r\n\r\n const data = (await response.json()) as {\r\n docs?: Array<{ themeConfiguration?: SiteThemeConfiguration }>\r\n }\r\n\r\n const doc = data.docs?.[0]\r\n\r\n return doc?.themeConfiguration ?? null\r\n } catch (error) {\r\n console.warn('Failed to fetch theme configuration:', error)\r\n return null\r\n }\r\n}\r\n\r\nexport const getThemePreset = (themeName: string): ThemePreset | null => {\r\n return defaultThemePresets.find((preset) => preset.name === themeName) || null\r\n}\r\n\r\nexport const getAvailableThemePresets = (): ThemePreset[] => {\r\n return defaultThemePresets\r\n}\r\n\r\n\r\n\r\nexport { defaultThemePresets } from './presets.js'\r\nexport type { ThemePreset, ThemeTypographyPreset } from './presets.js'\r\nexport type { ThemeManagementPluginOptions, FetchThemeConfigurationOptions } from './types.js'\r\nexport {\r\n DEFAULT_THEME_CONFIGURATION,\r\n resolveThemeConfiguration,\r\n} from './utils/resolveThemeConfiguration.js'\r\nexport type { ResolvedThemeConfiguration } from './utils/resolveThemeConfiguration.js'\r\nexport { generateThemeColorsCss, hexToHsl } from './utils/themeColors.js'\r\nexport { generateThemeCSS, getThemeStyles } from './utils/themeUtils.js'\r\nexport { getThemeHtmlAttributes } from './utils/themeHtmlAttributes.js'\r\n\r\nexport type { Mode, ThemeDefaults } from './providers/Theme/types.js'\r\nexport { ThemeProvider } from './providers/Theme/index.js'\r\n\r\nexport const ThemeManagementPlugin = themeManagementPlugin\r\n/** @deprecated use {@link themeManagementPlugin} */\r\nexport const themeConfigurationPlugin = themeManagementPlugin\r\n\r\nexport default themeManagementPlugin"],"names":["createThemeConfigurationField","defaultThemePresets","THEME_FIELD_NAME","removeExistingThemeField","fields","filter","field","candidate","name","upsertThemeField","themeField","enableLogging","sanitized","console","log","ensureCollectionsArray","collections","Array","isArray","themeManagementPlugin","options","config","enabled","targetCollection","themePresets","defaultTheme","includeColorModeToggle","includeCustomCSS","includeBrandIdentity","enableAdvancedFeatures","collectionTouched","map","collection","slug","existingFields","warn","fetchThemeConfiguration","normalizedOptions","tenantSlug","collectionSlug","depth","locale","draft","queryParams","params","URLSearchParams","limit","set","String","Object","entries","forEach","key","value","undefined","url","toString","response","fetch","ok","Error","status","data","json","doc","docs","themeConfiguration","error","getThemePreset","themeName","find","preset","getAvailableThemePresets","DEFAULT_THEME_CONFIGURATION","resolveThemeConfiguration","generateThemeColorsCss","hexToHsl","generateThemeCSS","getThemeStyles","getThemeHtmlAttributes","ThemeProvider","ThemeManagementPlugin","themeConfigurationPlugin"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { CollectionConfig, Config, Field, Plugin } from 'payload'\nimport { createThemeConfigurationField } from './fields/themeConfigurationField.js'\nimport type { SiteThemeConfiguration } from './payload-types.js'\nimport type { ThemePreset } from './presets.js'\nimport { defaultThemePresets } from './presets.js'\nimport type {\n FetchThemeConfigurationOptions,\n ThemeManagementPluginOptions,\n} from './types.js'\n\nconst THEME_FIELD_NAME = 'themeConfiguration'\n\nconst removeExistingThemeField = (fields: Field[] = []): Field[] =>\n fields.filter((field) => {\n const candidate = field as { name?: unknown }\n return candidate?.name !== THEME_FIELD_NAME\n })\n\nconst upsertThemeField = (\n fields: Field[] | undefined,\n themeField: Field,\n enableLogging: boolean,\n): Field[] => {\n const sanitized = removeExistingThemeField(fields ?? [])\n\n if (enableLogging) {\n console.log('🎨 Theme Management Plugin: injecting theme configuration field')\n }\n\n return [...sanitized, themeField]\n}\n\nconst ensureCollectionsArray = (collections: Config['collections']): CollectionConfig[] =>\n Array.isArray(collections) ? collections : []\n\nexport const themeManagementPlugin = (options: ThemeManagementPluginOptions = {}): Plugin => {\n return (config: Config): Config => {\n const {\n enabled = true,\n targetCollection = 'site-settings',\n themePresets = defaultThemePresets,\n defaultTheme = 'cool',\n includeColorModeToggle = true,\n includeCustomCSS = true,\n includeBrandIdentity = false,\n enableAdvancedFeatures = true,\n enableLogging = false,\n } = options\n\n if (!enabled) {\n if (enableLogging) {\n console.log('🎨 Theme Management Plugin: disabled via options, skipping.')\n }\n return config\n }\n\n const themeField = createThemeConfigurationField({\n themePresets,\n defaultTheme,\n includeColorModeToggle,\n includeCustomCSS,\n includeBrandIdentity: includeBrandIdentity ?? false,\n enableAdvancedFeatures,\n })\n\n let collectionTouched = false\n\n const collections = ensureCollectionsArray(config.collections).map((collection) => {\n if (collection.slug !== targetCollection) {\n return collection\n }\n\n collectionTouched = true\n\n if (enableLogging) {\n console.log(\n `🎨 Theme Management Plugin: enhancing collection \"${collection.slug}\"`,\n )\n }\n\n const existingFields = Array.isArray(collection.fields) ? collection.fields : []\n\n const fields = upsertThemeField(existingFields, themeField, enableLogging)\n\n return {\n ...collection,\n fields,\n }\n })\n\n if (!collectionTouched) {\n if (enableLogging) {\n console.warn(\n `🎨 Theme Management Plugin: collection \"${targetCollection}\" was not found, leaving config untouched.`,\n )\n }\n return config\n }\n\n return {\n ...config,\n collections,\n }\n }\n}\n\ntype FetchOptionsInput = string | FetchThemeConfigurationOptions\n\nexport const fetchThemeConfiguration = async (\n options?: FetchOptionsInput,\n): Promise<SiteThemeConfiguration | null> => {\n const normalizedOptions =\n typeof options === 'string'\n ? { tenantSlug: options }\n : options ?? {}\n\n const {\n tenantSlug,\n collectionSlug = 'site-settings',\n depth,\n locale,\n draft,\n queryParams = {},\n } = normalizedOptions\n\n const params = new URLSearchParams({ limit: '1' })\n\n if (typeof depth === 'number') params.set('depth', String(depth))\n if (tenantSlug) params.set('tenant', tenantSlug)\n if (locale) params.set('locale', locale)\n if (draft) params.set('draft', 'true')\n\n Object.entries(queryParams).forEach(([key, value]) => {\n if (value === undefined) return\n params.set(key, String(value))\n })\n\n const url = `/api/${collectionSlug}?${params.toString()}`\n\n try {\n const response = await fetch(url)\n if (!response.ok) {\n throw new Error(`Failed to fetch theme configuration (status ${response.status})`)\n }\n\n const data = (await response.json()) as {\n docs?: Array<{ themeConfiguration?: SiteThemeConfiguration }>\n }\n\n const doc = data.docs?.[0]\n\n return doc?.themeConfiguration ?? null\n } catch (error) {\n console.warn('Failed to fetch theme configuration:', error)\n return null\n }\n}\n\nexport const getThemePreset = (themeName: string): ThemePreset | null => {\n return defaultThemePresets.find((preset) => preset.name === themeName) || null\n}\n\nexport const getAvailableThemePresets = (): ThemePreset[] => {\n return defaultThemePresets\n}\n\n\n\nexport { defaultThemePresets } from './presets.js'\nexport type { ThemePreset, ThemeTypographyPreset } from './presets.js'\nexport { \n extendedThemePresets,\n extendedThemeToCSSVariables,\n} from './extended-presets.js'\nexport type { ExtendedThemePreset, ShadcnColorTokens } from './extended-presets.js'\nexport {\n applyExtendedTheme,\n generateExtendedThemeCSS,\n resetExtendedTheme,\n getExtendedThemeTokens,\n createUseExtendedTheme,\n getTailwindVarReferences,\n} from './utils/extendedThemeHelpers.js'\nexport type { ThemeManagementPluginOptions, FetchThemeConfigurationOptions } from './types.js'\nexport {\n DEFAULT_THEME_CONFIGURATION,\n resolveThemeConfiguration,\n} from './utils/resolveThemeConfiguration.js'\nexport type { ResolvedThemeConfiguration } from './utils/resolveThemeConfiguration.js'\nexport { generateThemeColorsCss, hexToHsl } from './utils/themeColors.js'\nexport { generateThemeCSS, getThemeStyles } from './utils/themeUtils.js'\nexport { getThemeHtmlAttributes } from './utils/themeHtmlAttributes.js'\n\nexport type { Mode, ThemeDefaults } from './providers/Theme/types.js'\nexport { ThemeProvider } from './providers/Theme/index.js'\n\nexport const ThemeManagementPlugin = themeManagementPlugin\n/** @deprecated use {@link themeManagementPlugin} */\nexport const themeConfigurationPlugin = themeManagementPlugin\n\nexport default themeManagementPlugin"],"names":["createThemeConfigurationField","defaultThemePresets","THEME_FIELD_NAME","removeExistingThemeField","fields","filter","field","candidate","name","upsertThemeField","themeField","enableLogging","sanitized","console","log","ensureCollectionsArray","collections","Array","isArray","themeManagementPlugin","options","config","enabled","targetCollection","themePresets","defaultTheme","includeColorModeToggle","includeCustomCSS","includeBrandIdentity","enableAdvancedFeatures","collectionTouched","map","collection","slug","existingFields","warn","fetchThemeConfiguration","normalizedOptions","tenantSlug","collectionSlug","depth","locale","draft","queryParams","params","URLSearchParams","limit","set","String","Object","entries","forEach","key","value","undefined","url","toString","response","fetch","ok","Error","status","data","json","doc","docs","themeConfiguration","error","getThemePreset","themeName","find","preset","getAvailableThemePresets","extendedThemePresets","extendedThemeToCSSVariables","applyExtendedTheme","generateExtendedThemeCSS","resetExtendedTheme","getExtendedThemeTokens","createUseExtendedTheme","getTailwindVarReferences","DEFAULT_THEME_CONFIGURATION","resolveThemeConfiguration","generateThemeColorsCss","hexToHsl","generateThemeCSS","getThemeStyles","getThemeHtmlAttributes","ThemeProvider","ThemeManagementPlugin","themeConfigurationPlugin"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- /**
2
- * Payload types for theme configuration
3
- * These are placeholder types that will be extended in the consuming application
1
+ /**
2
+ * Payload types for theme configuration
3
+ * These are placeholder types that will be extended in the consuming application
4
4
  */ export { };
5
5
 
6
6
  //# sourceMappingURL=payload-types.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/payload-types.ts"],"sourcesContent":["/**\r\n * Payload types for theme configuration\r\n * These are placeholder types that will be extended in the consuming application\r\n */\r\n\r\nexport interface ThemeColorOverride {\r\n [token: string]: string | null | undefined;\r\n primary?: string | null;\r\n secondary?: string | null;\r\n accent?: string | null;\r\n background?: string | null;\r\n surface?: string | null;\r\n surfaceVariant?: string | null;\r\n text?: string | null;\r\n textSecondary?: string | null;\r\n border?: string | null;\r\n success?: string | null;\r\n warning?: string | null;\r\n error?: string | null;\r\n info?: string | null;\r\n foreground?: string | null;\r\n card?: string | null;\r\n cardForeground?: string | null;\r\n popover?: string | null;\r\n popoverForeground?: string | null;\r\n primaryForeground?: string | null;\r\n secondaryForeground?: string | null;\r\n muted?: string | null;\r\n mutedForeground?: string | null;\r\n accentForeground?: string | null;\r\n destructive?: string | null;\r\n destructiveForeground?: string | null;\r\n input?: string | null;\r\n ring?: string | null;\r\n}\r\n\r\nexport interface ThemeTypographyOverride {\r\n bodyFont?:\r\n | (\r\n | 'preset'\r\n | 'system'\r\n | 'geist-sans'\r\n | 'inter'\r\n | 'manrope'\r\n | 'urbanist'\r\n | 'outfit'\r\n | 'lora'\r\n | 'custom'\r\n )\r\n | null;\r\n headingFont?:\r\n | (\r\n | 'preset'\r\n | 'geist-sans'\r\n | 'geist-mono'\r\n | 'outfit'\r\n | 'playfair'\r\n | 'lora'\r\n | 'serif-classic'\r\n | 'custom'\r\n )\r\n | null;\r\n bodyFontCustom?: string | null;\r\n headingFontCustom?: string | null;\r\n baseFontSize?: ('preset' | '14px' | '16px' | '18px' | '20px') | null;\r\n lineHeight?: ('preset' | '1.4' | '1.5' | '1.6' | '1.75' | '1.9') | null;\r\n fontWeights?: Partial<\r\n Record<'light' | 'normal' | 'medium' | 'semibold' | 'bold' | 'black', string | null>\r\n > | null;\r\n letterSpacing?: Partial<Record<'tight' | 'normal' | 'wide' | 'wider', string | null>> | null;\r\n}\r\n\r\nexport interface ThemeCustomization {\r\n primaryColor?: string | null;\r\n accentColor?: string | null;\r\n backgroundColor?: string | null;\r\n textColor?: string | null;\r\n customCSS?: string | null;\r\n}\r\n\r\nexport interface SiteThemeConfiguration {\r\n theme?: string | null;\r\n preset?: string | null;\r\n colorMode?: 'auto' | 'light' | 'dark' | null;\r\n allowColorModeToggle?: boolean | null;\r\n lightMode?: ThemeColorOverride | null;\r\n darkMode?: ThemeColorOverride | null;\r\n colors?: ThemeColorOverride | null;\r\n typography?: ThemeTypographyOverride | null;\r\n borderRadius?: 'none' | 'small' | 'medium' | 'large' | 'xl' | null;\r\n fontScale?: 'small' | 'medium' | 'large' | 'xl' | null;\r\n spacing?: 'compact' | 'medium' | 'spacious' | null;\r\n animationLevel?: 'none' | 'reduced' | 'medium' | 'high' | null;\r\n customCSS?: string | null;\r\n customization?: ThemeCustomization | null;\r\n radius?: string | null;\r\n}\r\n\r\nexport interface SiteSetting {\r\n id: string;\r\n title?: string | null;\r\n slug?: string | null;\r\n themeConfiguration: SiteThemeConfiguration | null;\r\n updatedAt: string;\r\n createdAt: string;\r\n}\r\n\r\nexport interface Config {\r\n collections: {\r\n 'site-settings': SiteSetting;\r\n };\r\n globals: Record<string, unknown>;\r\n}\r\n"],"names":[],"mappings":"AAAA;;;CAGC,GAwGD,WAKC"}
1
+ {"version":3,"sources":["../src/payload-types.ts"],"sourcesContent":["/**\n * Payload types for theme configuration\n * These are placeholder types that will be extended in the consuming application\n */\n\nexport interface ThemeColorOverride {\n [token: string]: string | null | undefined;\n primary?: string | null;\n secondary?: string | null;\n accent?: string | null;\n background?: string | null;\n surface?: string | null;\n surfaceVariant?: string | null;\n text?: string | null;\n textSecondary?: string | null;\n border?: string | null;\n success?: string | null;\n warning?: string | null;\n error?: string | null;\n info?: string | null;\n foreground?: string | null;\n card?: string | null;\n cardForeground?: string | null;\n popover?: string | null;\n popoverForeground?: string | null;\n primaryForeground?: string | null;\n secondaryForeground?: string | null;\n muted?: string | null;\n mutedForeground?: string | null;\n accentForeground?: string | null;\n destructive?: string | null;\n destructiveForeground?: string | null;\n input?: string | null;\n ring?: string | null;\n}\n\nexport interface ThemeTypographyOverride {\n bodyFont?:\n | (\n | 'preset'\n | 'system'\n | 'geist-sans'\n | 'inter'\n | 'manrope'\n | 'urbanist'\n | 'outfit'\n | 'lora'\n | 'custom'\n )\n | null;\n headingFont?:\n | (\n | 'preset'\n | 'geist-sans'\n | 'geist-mono'\n | 'outfit'\n | 'playfair'\n | 'lora'\n | 'serif-classic'\n | 'custom'\n )\n | null;\n bodyFontCustom?: string | null;\n headingFontCustom?: string | null;\n baseFontSize?: ('preset' | '14px' | '16px' | '18px' | '20px') | null;\n lineHeight?: ('preset' | '1.4' | '1.5' | '1.6' | '1.75' | '1.9') | null;\n fontWeights?: Partial<\n Record<'light' | 'normal' | 'medium' | 'semibold' | 'bold' | 'black', string | null>\n > | null;\n letterSpacing?: Partial<Record<'tight' | 'normal' | 'wide' | 'wider', string | null>> | null;\n}\n\nexport interface ThemeCustomization {\n primaryColor?: string | null;\n accentColor?: string | null;\n backgroundColor?: string | null;\n textColor?: string | null;\n customCSS?: string | null;\n}\n\nexport interface SiteThemeConfiguration {\n theme?: string | null;\n preset?: string | null;\n colorMode?: 'auto' | 'light' | 'dark' | null;\n allowColorModeToggle?: boolean | null;\n lightMode?: ThemeColorOverride | null;\n darkMode?: ThemeColorOverride | null;\n colors?: ThemeColorOverride | null;\n typography?: ThemeTypographyOverride | null;\n borderRadius?: 'none' | 'small' | 'medium' | 'large' | 'xl' | null;\n fontScale?: 'small' | 'medium' | 'large' | 'xl' | null;\n spacing?: 'compact' | 'medium' | 'spacious' | null;\n animationLevel?: 'none' | 'reduced' | 'medium' | 'high' | null;\n customCSS?: string | null;\n customization?: ThemeCustomization | null;\n radius?: string | null;\n}\n\nexport interface SiteSetting {\n id: string;\n title?: string | null;\n slug?: string | null;\n themeConfiguration: SiteThemeConfiguration | null;\n updatedAt: string;\n createdAt: string;\n}\n\nexport interface Config {\n collections: {\n 'site-settings': SiteSetting;\n };\n globals: Record<string, unknown>;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAwGD,WAKC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["export type { ThemeManagementPluginOptions } from './types.js';\r\n"],"names":[],"mappings":"AAAA,WAA+D"}
1
+ {"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["export type { ThemeManagementPluginOptions } from './types.js';\n"],"names":[],"mappings":"AAAA,WAA+D"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/presets.ts"],"sourcesContent":["export interface ThemeTypographyPreset {\r\n fontFamily: string\r\n headingFamily: string\r\n baseFontSize: string\r\n lineHeight: string\r\n fontWeights: {\r\n light?: string\r\n normal?: string\r\n medium?: string\r\n semibold?: string\r\n bold?: string\r\n black?: string\r\n }\r\n letterSpacing: {\r\n tight?: string\r\n normal?: string\r\n wide?: string\r\n wider?: string\r\n }\r\n}\r\n\r\nexport interface ThemePreset {\r\n name: string\r\n label: string\r\n borderRadius: 'none' | 'small' | 'medium' | 'large' | 'xl'\r\n cssFile?: string\r\n preview?: {\r\n colors: {\r\n primary: string\r\n background: string\r\n accent: string\r\n }\r\n }\r\n theme?: string\r\n colorMode?: 'auto' | 'light' | 'dark'\r\n fontScale?: 'small' | 'medium' | 'large'\r\n spacing?: 'small' | 'medium' | 'large'\r\n animationLevel?: 'low' | 'medium' | 'high'\r\n lightMode?: Record<string, string>\r\n darkMode?: Record<string, string>\r\n typography?: ThemeTypographyPreset\r\n}\r\n\r\nexport const defaultThemePresets: ThemePreset[] = [\r\n {\r\n name: 'cool',\r\n label: 'Cool & Professional',\r\n borderRadius: 'medium',\r\n preview: {\r\n colors: {\r\n primary: '#3b82f6',\r\n background: '#ffffff',\r\n accent: '#f1f5f9',\r\n },\r\n },\r\n lightMode: {\r\n background: '#ffffff',\r\n foreground: '#0a0a0a',\r\n card: '#ffffff',\r\n cardForeground: '#0a0a0a',\r\n popover: '#ffffff',\r\n popoverForeground: '#0a0a0a',\r\n primary: '#3b82f6',\r\n primaryForeground: '#ffffff',\r\n secondary: '#f1f5f9',\r\n secondaryForeground: '#0f172a',\r\n muted: '#f1f5f9',\r\n mutedForeground: '#64748b',\r\n accent: '#f1f5f9',\r\n accentForeground: '#0f172a',\r\n destructive: '#ef4444',\r\n destructiveForeground: '#ffffff',\r\n border: '#e2e8f0',\r\n input: '#e2e8f0',\r\n ring: '#3b82f6',\r\n },\r\n darkMode: {\r\n background: '#0a0a0a',\r\n foreground: '#fafafa',\r\n card: '#1a1a1a',\r\n cardForeground: '#fafafa',\r\n popover: '#1a1a1a',\r\n popoverForeground: '#fafafa',\r\n primary: '#60a5fa',\r\n primaryForeground: '#0a0a0a',\r\n secondary: '#27272a',\r\n secondaryForeground: '#fafafa',\r\n muted: '#27272a',\r\n mutedForeground: '#a1a1aa',\r\n accent: '#27272a',\r\n accentForeground: '#fafafa',\r\n destructive: '#f87171',\r\n destructiveForeground: '#0a0a0a',\r\n border: '#27272a',\r\n input: '#27272a',\r\n ring: '#60a5fa',\r\n },\r\n typography: {\r\n fontFamily: 'var(--font-geist-sans)',\r\n headingFamily: 'var(--font-outfit)',\r\n baseFontSize: '16px',\r\n lineHeight: '1.6',\r\n fontWeights: {\r\n normal: '400',\r\n medium: '500',\r\n semibold: '600',\r\n bold: '700',\r\n },\r\n letterSpacing: {\r\n tight: '-0.02em',\r\n normal: '0',\r\n wide: '0.02em',\r\n },\r\n },\r\n },\r\n {\r\n name: 'brutal',\r\n label: 'Modern Brutalism',\r\n borderRadius: 'none',\r\n preview: {\r\n colors: {\r\n primary: '#000000',\r\n background: '#ffffff',\r\n accent: '#ef4444',\r\n },\r\n },\r\n lightMode: {\r\n background: '#ffffff',\r\n foreground: '#000000',\r\n card: '#ffffff',\r\n cardForeground: '#000000',\r\n popover: '#ffffff',\r\n popoverForeground: '#000000',\r\n primary: '#000000',\r\n primaryForeground: '#ffffff',\r\n secondary: '#f5f5f5',\r\n secondaryForeground: '#000000',\r\n muted: '#f5f5f5',\r\n mutedForeground: '#737373',\r\n accent: '#ef4444',\r\n accentForeground: '#ffffff',\r\n destructive: '#ef4444',\r\n destructiveForeground: '#ffffff',\r\n border: '#000000',\r\n input: '#e5e5e5',\r\n ring: '#000000',\r\n },\r\n darkMode: {\r\n background: '#000000',\r\n foreground: '#ffffff',\r\n card: '#0a0a0a',\r\n cardForeground: '#ffffff',\r\n popover: '#0a0a0a',\r\n popoverForeground: '#ffffff',\r\n primary: '#ffffff',\r\n primaryForeground: '#000000',\r\n secondary: '#262626',\r\n secondaryForeground: '#ffffff',\r\n muted: '#262626',\r\n mutedForeground: '#a3a3a3',\r\n accent: '#ef4444',\r\n accentForeground: '#ffffff',\r\n destructive: '#dc2626',\r\n destructiveForeground: '#ffffff',\r\n border: '#ffffff',\r\n input: '#262626',\r\n ring: '#ffffff',\r\n },\r\n typography: {\r\n fontFamily: 'var(--font-geist-mono)',\r\n headingFamily: 'var(--font-geist-mono)',\r\n baseFontSize: '16px',\r\n lineHeight: '1.5',\r\n fontWeights: {\r\n normal: '400',\r\n medium: '600',\r\n semibold: '700',\r\n bold: '800',\r\n },\r\n letterSpacing: {\r\n tight: '0',\r\n normal: '0.05em',\r\n wide: '0.1em',\r\n },\r\n },\r\n },\r\n {\r\n name: 'neon',\r\n label: 'Neon Cyberpunk',\r\n borderRadius: 'medium',\r\n preview: {\r\n colors: {\r\n primary: '#9333ea',\r\n background: '#0d0f1a',\r\n accent: '#00ffff',\r\n },\r\n },\r\n lightMode: {\r\n background: '#0d0f1a',\r\n foreground: '#ffffff',\r\n card: '#12141f',\r\n cardForeground: '#ffffff',\r\n popover: '#12141f',\r\n popoverForeground: '#ffffff',\r\n primary: '#9333ea',\r\n primaryForeground: '#ffffff',\r\n secondary: '#1a1d2e',\r\n secondaryForeground: '#ffffff',\r\n muted: '#1a1d2e',\r\n mutedForeground: '#b3b3cc',\r\n accent: '#00ffff',\r\n accentForeground: '#0d0f1a',\r\n destructive: '#ff0000',\r\n destructiveForeground: '#ffffff',\r\n border: '#2d3348',\r\n input: '#2d3348',\r\n ring: '#9333ea',\r\n },\r\n darkMode: {\r\n background: '#0d0f1a',\r\n foreground: '#ffffff',\r\n card: '#12141f',\r\n cardForeground: '#ffffff',\r\n popover: '#12141f',\r\n popoverForeground: '#ffffff',\r\n primary: '#9333ea',\r\n primaryForeground: '#ffffff',\r\n secondary: '#1a1d2e',\r\n secondaryForeground: '#ffffff',\r\n muted: '#1a1d2e',\r\n mutedForeground: '#b3b3cc',\r\n accent: '#00ffff',\r\n accentForeground: '#0d0f1a',\r\n destructive: '#ff0000',\r\n destructiveForeground: '#0d0f1a',\r\n border: '#2d3348',\r\n input: '#2d3348',\r\n ring: '#9333ea',\r\n },\r\n typography: {\r\n fontFamily: 'var(--font-geist-sans)',\r\n headingFamily: 'var(--font-geist-mono)',\r\n baseFontSize: '16px',\r\n lineHeight: '1.7',\r\n fontWeights: {\r\n normal: '400',\r\n medium: '500',\r\n semibold: '700',\r\n bold: '900',\r\n },\r\n letterSpacing: {\r\n tight: '0',\r\n normal: '0.05em',\r\n wide: '0.15em',\r\n },\r\n },\r\n },\r\n {\r\n name: 'solar',\r\n label: 'Solar',\r\n borderRadius: 'large',\r\n preview: {\r\n colors: {\r\n primary: '#c85a19',\r\n background: '#fffbf5',\r\n accent: '#ffcc00',\r\n },\r\n },\r\n lightMode: {\r\n background: '#fffbf5',\r\n foreground: '#2d1a09',\r\n card: '#ffffff',\r\n cardForeground: '#2d1a09',\r\n popover: '#ffffff',\r\n popoverForeground: '#2d1a09',\r\n primary: '#c85a19',\r\n primaryForeground: '#ffffff',\r\n secondary: '#fff7e6',\r\n secondaryForeground: '#2d1a09',\r\n muted: '#f5ebe0',\r\n mutedForeground: '#665544',\r\n accent: '#ffcc00',\r\n accentForeground: '#2d1a09',\r\n destructive: '#e34850',\r\n destructiveForeground: '#ffffff',\r\n border: '#e8d4c4',\r\n input: '#e8d4c4',\r\n ring: '#c85a19',\r\n },\r\n darkMode: {\r\n background: '#1f1610',\r\n foreground: '#f0dcc7',\r\n card: '#271c15',\r\n cardForeground: '#f0dcc7',\r\n popover: '#271c15',\r\n popoverForeground: '#f0dcc7',\r\n primary: '#e37a3d',\r\n primaryForeground: '#ffffff',\r\n secondary: '#3d2f26',\r\n secondaryForeground: '#f0dcc7',\r\n muted: '#3d2f26',\r\n mutedForeground: '#ccb8a6',\r\n accent: '#ffd633',\r\n accentForeground: '#1f1610',\r\n destructive: '#993438',\r\n destructiveForeground: '#ffffff',\r\n border: '#453828',\r\n input: '#453828',\r\n ring: '#e37a3d',\r\n },\r\n typography: {\r\n fontFamily: 'var(--font-geist-sans)',\r\n headingFamily: 'var(--font-outfit)',\r\n baseFontSize: '16px',\r\n lineHeight: '1.6',\r\n fontWeights: {\r\n normal: '400',\r\n medium: '500',\r\n semibold: '600',\r\n bold: '700',\r\n },\r\n letterSpacing: {\r\n tight: '-0.01em',\r\n normal: '0',\r\n wide: '0.025em',\r\n },\r\n },\r\n },\r\n {\r\n name: 'dealership',\r\n label: 'Dealership',\r\n borderRadius: 'medium',\r\n preview: {\r\n colors: {\r\n primary: '#1a2f50',\r\n background: '#f9fafb',\r\n accent: '#3b9ad6',\r\n },\r\n },\r\n lightMode: {\r\n background: '#f9fafb',\r\n foreground: '#1f2937',\r\n card: '#ffffff',\r\n cardForeground: '#1f2937',\r\n popover: '#ffffff',\r\n popoverForeground: '#1f2937',\r\n primary: '#1a2f50',\r\n primaryForeground: '#ffffff',\r\n secondary: '#e6ebf0',\r\n secondaryForeground: '#1f2937',\r\n muted: '#e6ebf0',\r\n mutedForeground: '#6b7280',\r\n accent: '#3b9ad6',\r\n accentForeground: '#ffffff',\r\n destructive: '#bc3535',\r\n destructiveForeground: '#ffffff',\r\n border: '#d1d5db',\r\n input: '#d1d5db',\r\n ring: '#1a2f50',\r\n },\r\n darkMode: {\r\n background: '#111827',\r\n foreground: '#f3f4f6',\r\n card: '#1f2937',\r\n cardForeground: '#f3f4f6',\r\n popover: '#1f2937',\r\n popoverForeground: '#f3f4f6',\r\n primary: '#3b82f6',\r\n primaryForeground: '#ffffff',\r\n secondary: '#374151',\r\n secondaryForeground: '#f3f4f6',\r\n muted: '#374151',\r\n mutedForeground: '#9ca3af',\r\n accent: '#60a5fa',\r\n accentForeground: '#111827',\r\n destructive: '#ef4444',\r\n destructiveForeground: '#ffffff',\r\n border: '#4b5563',\r\n input: '#4b5563',\r\n ring: '#3b82f6',\r\n },\r\n typography: {\r\n fontFamily: 'var(--font-geist-sans)',\r\n headingFamily: 'var(--font-outfit)',\r\n baseFontSize: '16px',\r\n lineHeight: '1.6',\r\n fontWeights: {\r\n normal: '400',\r\n medium: '500',\r\n semibold: '600',\r\n bold: '700',\r\n },\r\n letterSpacing: {\r\n tight: '-0.01em',\r\n normal: '0.01em',\r\n wide: '0.05em',\r\n },\r\n },\r\n },\r\n {\r\n name: 'real-estate',\r\n label: 'Real Estate Blue',\r\n borderRadius: 'large',\r\n preview: {\r\n colors: {\r\n primary: '#1e40af',\r\n background: '#fafbff',\r\n accent: '#3b9ad6',\r\n },\r\n },\r\n lightMode: {\r\n background: '#fafbff',\r\n foreground: '#1e293b',\r\n card: '#ffffff',\r\n cardForeground: '#1e293b',\r\n popover: '#ffffff',\r\n popoverForeground: '#1e293b',\r\n primary: '#1e40af',\r\n primaryForeground: '#ffffff',\r\n secondary: '#e0ecff',\r\n secondaryForeground: '#1e293b',\r\n muted: '#f1f5f9',\r\n mutedForeground: '#64748b',\r\n accent: '#3b9ad6',\r\n accentForeground: '#ffffff',\r\n destructive: '#dc2626',\r\n destructiveForeground: '#ffffff',\r\n border: '#cbd5e1',\r\n input: '#f1f5f9',\r\n ring: '#1e40af',\r\n },\r\n darkMode: {\r\n background: '#0f172a',\r\n foreground: '#f1f5f9',\r\n card: '#1e293b',\r\n cardForeground: '#f1f5f9',\r\n popover: '#1e293b',\r\n popoverForeground: '#f1f5f9',\r\n primary: '#3b82f6',\r\n primaryForeground: '#ffffff',\r\n secondary: '#334155',\r\n secondaryForeground: '#f1f5f9',\r\n muted: '#334155',\r\n mutedForeground: '#94a3b8',\r\n accent: '#60a5fa',\r\n accentForeground: '#0f172a',\r\n destructive: '#ef4444',\r\n destructiveForeground: '#ffffff',\r\n border: '#475569',\r\n input: '#334155',\r\n ring: '#3b82f6',\r\n },\r\n typography: {\r\n fontFamily: 'var(--font-geist-sans)',\r\n headingFamily: 'var(--font-outfit)',\r\n baseFontSize: '16px',\r\n lineHeight: '1.75',\r\n fontWeights: {\r\n light: '300',\r\n normal: '400',\r\n medium: '500',\r\n semibold: '600',\r\n bold: '700',\r\n black: '900',\r\n },\r\n letterSpacing: {\r\n tight: '-0.02em',\r\n normal: '0',\r\n wide: '0.025em',\r\n wider: '0.05em',\r\n },\r\n },\r\n },\r\n {\r\n name: 'real-estate-gold',\r\n label: 'Real Estate Gold',\r\n borderRadius: 'large',\r\n preview: {\r\n colors: {\r\n primary: '#b8860b',\r\n background: '#fffbf0',\r\n accent: '#f5d547',\r\n },\r\n },\r\n lightMode: {\r\n background: '#fffbf0',\r\n foreground: '#302618',\r\n card: '#ffffff',\r\n cardForeground: '#302618',\r\n popover: '#ffffff',\r\n popoverForeground: '#302618',\r\n primary: '#b8860b',\r\n primaryForeground: '#fffbf0',\r\n secondary: '#f7eed6',\r\n secondaryForeground: '#302618',\r\n muted: '#f3e9d8',\r\n mutedForeground: '#6d5d47',\r\n accent: '#f5d547',\r\n accentForeground: '#302618',\r\n destructive: '#dc2f2f',\r\n destructiveForeground: '#ffffff',\r\n border: '#e5d9c0',\r\n input: '#f3e9d8',\r\n ring: '#b8860b',\r\n },\r\n darkMode: {\r\n background: '#1a1510',\r\n foreground: '#f5f0e6',\r\n card: '#262014',\r\n cardForeground: '#f5f0e6',\r\n popover: '#262014',\r\n popoverForeground: '#f5f0e6',\r\n primary: '#daa520',\r\n primaryForeground: '#1a1510',\r\n secondary: '#3d3426',\r\n secondaryForeground: '#f5f0e6',\r\n muted: '#3d3426',\r\n mutedForeground: '#b8a68f',\r\n accent: '#ffd700',\r\n accentForeground: '#1a1510',\r\n destructive: '#ef4444',\r\n destructiveForeground: '#ffffff',\r\n border: '#554729',\r\n input: '#3d3426',\r\n ring: '#daa520',\r\n },\r\n typography: {\r\n fontFamily: 'var(--font-geist-sans)',\r\n headingFamily: 'var(--font-outfit)',\r\n baseFontSize: '16px',\r\n lineHeight: '1.75',\r\n fontWeights: {\r\n light: '300',\r\n normal: '400',\r\n medium: '500',\r\n semibold: '600',\r\n bold: '700',\r\n black: '900',\r\n },\r\n letterSpacing: {\r\n tight: '-0.02em',\r\n normal: '0',\r\n wide: '0.025em',\r\n wider: '0.05em',\r\n },\r\n },\r\n },\r\n {\r\n name: 'real-estate-neutral',\r\n label: 'Real Estate Neutral',\r\n borderRadius: 'large',\r\n preview: {\r\n colors: {\r\n primary: '#57534e',\r\n background: '#fafaf9',\r\n accent: '#78716c',\r\n },\r\n },\r\n lightMode: {\r\n background: '#fafaf9',\r\n foreground: '#292524',\r\n card: '#ffffff',\r\n cardForeground: '#292524',\r\n popover: '#ffffff',\r\n popoverForeground: '#292524',\r\n primary: '#57534e',\r\n primaryForeground: '#ffffff',\r\n secondary: '#e7e5e4',\r\n secondaryForeground: '#292524',\r\n muted: '#f5f5f4',\r\n mutedForeground: '#78716c',\r\n accent: '#78716c',\r\n accentForeground: '#ffffff',\r\n destructive: '#dc2626',\r\n destructiveForeground: '#ffffff',\r\n border: '#d6d3d1',\r\n input: '#f5f5f4',\r\n ring: '#57534e',\r\n },\r\n darkMode: {\r\n background: '#1c1917',\r\n foreground: '#fafaf9',\r\n card: '#292524',\r\n cardForeground: '#fafaf9',\r\n popover: '#292524',\r\n popoverForeground: '#fafaf9',\r\n primary: '#78716c',\r\n primaryForeground: '#ffffff',\r\n secondary: '#44403c',\r\n secondaryForeground: '#fafaf9',\r\n muted: '#44403c',\r\n mutedForeground: '#a8a29e',\r\n accent: '#a8a29e',\r\n accentForeground: '#1c1917',\r\n destructive: '#ef4444',\r\n destructiveForeground: '#ffffff',\r\n border: '#57534e',\r\n input: '#44403c',\r\n ring: '#78716c',\r\n },\r\n typography: {\r\n fontFamily: 'var(--font-geist-sans)',\r\n headingFamily: 'var(--font-outfit)',\r\n baseFontSize: '16px',\r\n lineHeight: '1.75',\r\n fontWeights: {\r\n light: '300',\r\n normal: '400',\r\n medium: '500',\r\n semibold: '600',\r\n bold: '700',\r\n black: '900',\r\n },\r\n letterSpacing: {\r\n tight: '-0.02em',\r\n normal: '0',\r\n wide: '0.025em',\r\n wider: '0.05em',\r\n },\r\n },\r\n },\r\n]\r\n"],"names":["defaultThemePresets","name","label","borderRadius","preview","colors","primary","background","accent","lightMode","foreground","card","cardForeground","popover","popoverForeground","primaryForeground","secondary","secondaryForeground","muted","mutedForeground","accentForeground","destructive","destructiveForeground","border","input","ring","darkMode","typography","fontFamily","headingFamily","baseFontSize","lineHeight","fontWeights","normal","medium","semibold","bold","letterSpacing","tight","wide","light","black","wider"],"mappings":"AA2CA,OAAO,MAAMA,sBAAqC;IAChD;QACEC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXC,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;YACR;YACAC,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;YACR;QACF;IACF;IACA;QACEtC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXC,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;YACR;YACAC,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;YACR;QACF;IACF;IACA;QACEtC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXC,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;YACR;YACAC,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;YACR;QACF;IACF;IACA;QACEtC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXC,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;YACR;YACAC,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;YACR;QACF;IACF;IACA;QACEtC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXC,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;YACR;YACAC,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;YACR;QACF;IACF;IACA;QACEtC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXQ,OAAO;gBACPP,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;gBACNK,OAAO;YACT;YACAJ,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;gBACNG,OAAO;YACT;QACF;IACF;IACA;QACEzC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXQ,OAAO;gBACPP,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;gBACNK,OAAO;YACT;YACAJ,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;gBACNG,OAAO;YACT;QACF;IACF;IACA;QACEzC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXQ,OAAO;gBACPP,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;gBACNK,OAAO;YACT;YACAJ,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;gBACNG,OAAO;YACT;QACF;IACF;CACD,CAAA"}
1
+ {"version":3,"sources":["../src/presets.ts"],"sourcesContent":["export interface ThemeTypographyPreset {\n fontFamily: string\n headingFamily: string\n baseFontSize: string\n lineHeight: string\n fontWeights: {\n light?: string\n normal?: string\n medium?: string\n semibold?: string\n bold?: string\n black?: string\n }\n letterSpacing: {\n tight?: string\n normal?: string\n wide?: string\n wider?: string\n }\n}\n\nexport interface ThemePreset {\n name: string\n label: string\n borderRadius: 'none' | 'small' | 'medium' | 'large' | 'xl'\n cssFile?: string\n preview?: {\n colors: {\n primary: string\n background: string\n accent: string\n }\n }\n theme?: string\n colorMode?: 'auto' | 'light' | 'dark'\n fontScale?: 'small' | 'medium' | 'large'\n spacing?: 'small' | 'medium' | 'large'\n animationLevel?: 'low' | 'medium' | 'high'\n lightMode?: Record<string, string>\n darkMode?: Record<string, string>\n typography?: ThemeTypographyPreset\n}\n\nexport const defaultThemePresets: ThemePreset[] = [\n {\n name: 'cool',\n label: 'Cool & Professional',\n borderRadius: 'medium',\n preview: {\n colors: {\n primary: '#3b82f6',\n background: '#ffffff',\n accent: '#f1f5f9',\n },\n },\n lightMode: {\n background: '#ffffff',\n foreground: '#0a0a0a',\n card: '#ffffff',\n cardForeground: '#0a0a0a',\n popover: '#ffffff',\n popoverForeground: '#0a0a0a',\n primary: '#3b82f6',\n primaryForeground: '#ffffff',\n secondary: '#f1f5f9',\n secondaryForeground: '#0f172a',\n muted: '#f1f5f9',\n mutedForeground: '#64748b',\n accent: '#f1f5f9',\n accentForeground: '#0f172a',\n destructive: '#ef4444',\n destructiveForeground: '#ffffff',\n border: '#e2e8f0',\n input: '#e2e8f0',\n ring: '#3b82f6',\n },\n darkMode: {\n background: '#0a0a0a',\n foreground: '#fafafa',\n card: '#1a1a1a',\n cardForeground: '#fafafa',\n popover: '#1a1a1a',\n popoverForeground: '#fafafa',\n primary: '#60a5fa',\n primaryForeground: '#0a0a0a',\n secondary: '#27272a',\n secondaryForeground: '#fafafa',\n muted: '#27272a',\n mutedForeground: '#a1a1aa',\n accent: '#27272a',\n accentForeground: '#fafafa',\n destructive: '#f87171',\n destructiveForeground: '#0a0a0a',\n border: '#27272a',\n input: '#27272a',\n ring: '#60a5fa',\n },\n typography: {\n fontFamily: 'var(--font-geist-sans)',\n headingFamily: 'var(--font-outfit)',\n baseFontSize: '16px',\n lineHeight: '1.6',\n fontWeights: {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n letterSpacing: {\n tight: '-0.02em',\n normal: '0',\n wide: '0.02em',\n },\n },\n },\n {\n name: 'brutal',\n label: 'Modern Brutalism',\n borderRadius: 'none',\n preview: {\n colors: {\n primary: '#000000',\n background: '#ffffff',\n accent: '#ef4444',\n },\n },\n lightMode: {\n background: '#ffffff',\n foreground: '#000000',\n card: '#ffffff',\n cardForeground: '#000000',\n popover: '#ffffff',\n popoverForeground: '#000000',\n primary: '#000000',\n primaryForeground: '#ffffff',\n secondary: '#f5f5f5',\n secondaryForeground: '#000000',\n muted: '#f5f5f5',\n mutedForeground: '#737373',\n accent: '#ef4444',\n accentForeground: '#ffffff',\n destructive: '#ef4444',\n destructiveForeground: '#ffffff',\n border: '#000000',\n input: '#e5e5e5',\n ring: '#000000',\n },\n darkMode: {\n background: '#000000',\n foreground: '#ffffff',\n card: '#0a0a0a',\n cardForeground: '#ffffff',\n popover: '#0a0a0a',\n popoverForeground: '#ffffff',\n primary: '#ffffff',\n primaryForeground: '#000000',\n secondary: '#262626',\n secondaryForeground: '#ffffff',\n muted: '#262626',\n mutedForeground: '#a3a3a3',\n accent: '#ef4444',\n accentForeground: '#ffffff',\n destructive: '#dc2626',\n destructiveForeground: '#ffffff',\n border: '#ffffff',\n input: '#262626',\n ring: '#ffffff',\n },\n typography: {\n fontFamily: 'var(--font-geist-mono)',\n headingFamily: 'var(--font-geist-mono)',\n baseFontSize: '16px',\n lineHeight: '1.5',\n fontWeights: {\n normal: '400',\n medium: '600',\n semibold: '700',\n bold: '800',\n },\n letterSpacing: {\n tight: '0',\n normal: '0.05em',\n wide: '0.1em',\n },\n },\n },\n {\n name: 'neon',\n label: 'Neon Cyberpunk',\n borderRadius: 'medium',\n preview: {\n colors: {\n primary: '#9333ea',\n background: '#0d0f1a',\n accent: '#00ffff',\n },\n },\n lightMode: {\n background: '#0d0f1a',\n foreground: '#ffffff',\n card: '#12141f',\n cardForeground: '#ffffff',\n popover: '#12141f',\n popoverForeground: '#ffffff',\n primary: '#9333ea',\n primaryForeground: '#ffffff',\n secondary: '#1a1d2e',\n secondaryForeground: '#ffffff',\n muted: '#1a1d2e',\n mutedForeground: '#b3b3cc',\n accent: '#00ffff',\n accentForeground: '#0d0f1a',\n destructive: '#ff0000',\n destructiveForeground: '#ffffff',\n border: '#2d3348',\n input: '#2d3348',\n ring: '#9333ea',\n },\n darkMode: {\n background: '#0d0f1a',\n foreground: '#ffffff',\n card: '#12141f',\n cardForeground: '#ffffff',\n popover: '#12141f',\n popoverForeground: '#ffffff',\n primary: '#9333ea',\n primaryForeground: '#ffffff',\n secondary: '#1a1d2e',\n secondaryForeground: '#ffffff',\n muted: '#1a1d2e',\n mutedForeground: '#b3b3cc',\n accent: '#00ffff',\n accentForeground: '#0d0f1a',\n destructive: '#ff0000',\n destructiveForeground: '#0d0f1a',\n border: '#2d3348',\n input: '#2d3348',\n ring: '#9333ea',\n },\n typography: {\n fontFamily: 'var(--font-geist-sans)',\n headingFamily: 'var(--font-geist-mono)',\n baseFontSize: '16px',\n lineHeight: '1.7',\n fontWeights: {\n normal: '400',\n medium: '500',\n semibold: '700',\n bold: '900',\n },\n letterSpacing: {\n tight: '0',\n normal: '0.05em',\n wide: '0.15em',\n },\n },\n },\n {\n name: 'solar',\n label: 'Solar',\n borderRadius: 'large',\n preview: {\n colors: {\n primary: '#c85a19',\n background: '#fffbf5',\n accent: '#ffcc00',\n },\n },\n lightMode: {\n background: '#fffbf5',\n foreground: '#2d1a09',\n card: '#ffffff',\n cardForeground: '#2d1a09',\n popover: '#ffffff',\n popoverForeground: '#2d1a09',\n primary: '#c85a19',\n primaryForeground: '#ffffff',\n secondary: '#fff7e6',\n secondaryForeground: '#2d1a09',\n muted: '#f5ebe0',\n mutedForeground: '#665544',\n accent: '#ffcc00',\n accentForeground: '#2d1a09',\n destructive: '#e34850',\n destructiveForeground: '#ffffff',\n border: '#e8d4c4',\n input: '#e8d4c4',\n ring: '#c85a19',\n },\n darkMode: {\n background: '#1f1610',\n foreground: '#f0dcc7',\n card: '#271c15',\n cardForeground: '#f0dcc7',\n popover: '#271c15',\n popoverForeground: '#f0dcc7',\n primary: '#e37a3d',\n primaryForeground: '#ffffff',\n secondary: '#3d2f26',\n secondaryForeground: '#f0dcc7',\n muted: '#3d2f26',\n mutedForeground: '#ccb8a6',\n accent: '#ffd633',\n accentForeground: '#1f1610',\n destructive: '#993438',\n destructiveForeground: '#ffffff',\n border: '#453828',\n input: '#453828',\n ring: '#e37a3d',\n },\n typography: {\n fontFamily: 'var(--font-geist-sans)',\n headingFamily: 'var(--font-outfit)',\n baseFontSize: '16px',\n lineHeight: '1.6',\n fontWeights: {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n letterSpacing: {\n tight: '-0.01em',\n normal: '0',\n wide: '0.025em',\n },\n },\n },\n {\n name: 'dealership',\n label: 'Dealership',\n borderRadius: 'medium',\n preview: {\n colors: {\n primary: '#1a2f50',\n background: '#f9fafb',\n accent: '#3b9ad6',\n },\n },\n lightMode: {\n background: '#f9fafb',\n foreground: '#1f2937',\n card: '#ffffff',\n cardForeground: '#1f2937',\n popover: '#ffffff',\n popoverForeground: '#1f2937',\n primary: '#1a2f50',\n primaryForeground: '#ffffff',\n secondary: '#e6ebf0',\n secondaryForeground: '#1f2937',\n muted: '#e6ebf0',\n mutedForeground: '#6b7280',\n accent: '#3b9ad6',\n accentForeground: '#ffffff',\n destructive: '#bc3535',\n destructiveForeground: '#ffffff',\n border: '#d1d5db',\n input: '#d1d5db',\n ring: '#1a2f50',\n },\n darkMode: {\n background: '#111827',\n foreground: '#f3f4f6',\n card: '#1f2937',\n cardForeground: '#f3f4f6',\n popover: '#1f2937',\n popoverForeground: '#f3f4f6',\n primary: '#3b82f6',\n primaryForeground: '#ffffff',\n secondary: '#374151',\n secondaryForeground: '#f3f4f6',\n muted: '#374151',\n mutedForeground: '#9ca3af',\n accent: '#60a5fa',\n accentForeground: '#111827',\n destructive: '#ef4444',\n destructiveForeground: '#ffffff',\n border: '#4b5563',\n input: '#4b5563',\n ring: '#3b82f6',\n },\n typography: {\n fontFamily: 'var(--font-geist-sans)',\n headingFamily: 'var(--font-outfit)',\n baseFontSize: '16px',\n lineHeight: '1.6',\n fontWeights: {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n letterSpacing: {\n tight: '-0.01em',\n normal: '0.01em',\n wide: '0.05em',\n },\n },\n },\n {\n name: 'real-estate',\n label: 'Real Estate Blue',\n borderRadius: 'large',\n preview: {\n colors: {\n primary: '#1e40af',\n background: '#fafbff',\n accent: '#3b9ad6',\n },\n },\n lightMode: {\n background: '#fafbff',\n foreground: '#1e293b',\n card: '#ffffff',\n cardForeground: '#1e293b',\n popover: '#ffffff',\n popoverForeground: '#1e293b',\n primary: '#1e40af',\n primaryForeground: '#ffffff',\n secondary: '#e0ecff',\n secondaryForeground: '#1e293b',\n muted: '#f1f5f9',\n mutedForeground: '#64748b',\n accent: '#3b9ad6',\n accentForeground: '#ffffff',\n destructive: '#dc2626',\n destructiveForeground: '#ffffff',\n border: '#cbd5e1',\n input: '#f1f5f9',\n ring: '#1e40af',\n },\n darkMode: {\n background: '#0f172a',\n foreground: '#f1f5f9',\n card: '#1e293b',\n cardForeground: '#f1f5f9',\n popover: '#1e293b',\n popoverForeground: '#f1f5f9',\n primary: '#3b82f6',\n primaryForeground: '#ffffff',\n secondary: '#334155',\n secondaryForeground: '#f1f5f9',\n muted: '#334155',\n mutedForeground: '#94a3b8',\n accent: '#60a5fa',\n accentForeground: '#0f172a',\n destructive: '#ef4444',\n destructiveForeground: '#ffffff',\n border: '#475569',\n input: '#334155',\n ring: '#3b82f6',\n },\n typography: {\n fontFamily: 'var(--font-geist-sans)',\n headingFamily: 'var(--font-outfit)',\n baseFontSize: '16px',\n lineHeight: '1.75',\n fontWeights: {\n light: '300',\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n black: '900',\n },\n letterSpacing: {\n tight: '-0.02em',\n normal: '0',\n wide: '0.025em',\n wider: '0.05em',\n },\n },\n },\n {\n name: 'real-estate-gold',\n label: 'Real Estate Gold',\n borderRadius: 'large',\n preview: {\n colors: {\n primary: '#b8860b',\n background: '#fffbf0',\n accent: '#f5d547',\n },\n },\n lightMode: {\n background: '#fffbf0',\n foreground: '#302618',\n card: '#ffffff',\n cardForeground: '#302618',\n popover: '#ffffff',\n popoverForeground: '#302618',\n primary: '#b8860b',\n primaryForeground: '#fffbf0',\n secondary: '#f7eed6',\n secondaryForeground: '#302618',\n muted: '#f3e9d8',\n mutedForeground: '#6d5d47',\n accent: '#f5d547',\n accentForeground: '#302618',\n destructive: '#dc2f2f',\n destructiveForeground: '#ffffff',\n border: '#e5d9c0',\n input: '#f3e9d8',\n ring: '#b8860b',\n },\n darkMode: {\n background: '#1a1510',\n foreground: '#f5f0e6',\n card: '#262014',\n cardForeground: '#f5f0e6',\n popover: '#262014',\n popoverForeground: '#f5f0e6',\n primary: '#daa520',\n primaryForeground: '#1a1510',\n secondary: '#3d3426',\n secondaryForeground: '#f5f0e6',\n muted: '#3d3426',\n mutedForeground: '#b8a68f',\n accent: '#ffd700',\n accentForeground: '#1a1510',\n destructive: '#ef4444',\n destructiveForeground: '#ffffff',\n border: '#554729',\n input: '#3d3426',\n ring: '#daa520',\n },\n typography: {\n fontFamily: 'var(--font-geist-sans)',\n headingFamily: 'var(--font-outfit)',\n baseFontSize: '16px',\n lineHeight: '1.75',\n fontWeights: {\n light: '300',\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n black: '900',\n },\n letterSpacing: {\n tight: '-0.02em',\n normal: '0',\n wide: '0.025em',\n wider: '0.05em',\n },\n },\n },\n {\n name: 'real-estate-neutral',\n label: 'Real Estate Neutral',\n borderRadius: 'large',\n preview: {\n colors: {\n primary: '#57534e',\n background: '#fafaf9',\n accent: '#78716c',\n },\n },\n lightMode: {\n background: '#fafaf9',\n foreground: '#292524',\n card: '#ffffff',\n cardForeground: '#292524',\n popover: '#ffffff',\n popoverForeground: '#292524',\n primary: '#57534e',\n primaryForeground: '#ffffff',\n secondary: '#e7e5e4',\n secondaryForeground: '#292524',\n muted: '#f5f5f4',\n mutedForeground: '#78716c',\n accent: '#78716c',\n accentForeground: '#ffffff',\n destructive: '#dc2626',\n destructiveForeground: '#ffffff',\n border: '#d6d3d1',\n input: '#f5f5f4',\n ring: '#57534e',\n },\n darkMode: {\n background: '#1c1917',\n foreground: '#fafaf9',\n card: '#292524',\n cardForeground: '#fafaf9',\n popover: '#292524',\n popoverForeground: '#fafaf9',\n primary: '#78716c',\n primaryForeground: '#ffffff',\n secondary: '#44403c',\n secondaryForeground: '#fafaf9',\n muted: '#44403c',\n mutedForeground: '#a8a29e',\n accent: '#a8a29e',\n accentForeground: '#1c1917',\n destructive: '#ef4444',\n destructiveForeground: '#ffffff',\n border: '#57534e',\n input: '#44403c',\n ring: '#78716c',\n },\n typography: {\n fontFamily: 'var(--font-geist-sans)',\n headingFamily: 'var(--font-outfit)',\n baseFontSize: '16px',\n lineHeight: '1.75',\n fontWeights: {\n light: '300',\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n black: '900',\n },\n letterSpacing: {\n tight: '-0.02em',\n normal: '0',\n wide: '0.025em',\n wider: '0.05em',\n },\n },\n },\n]\n"],"names":["defaultThemePresets","name","label","borderRadius","preview","colors","primary","background","accent","lightMode","foreground","card","cardForeground","popover","popoverForeground","primaryForeground","secondary","secondaryForeground","muted","mutedForeground","accentForeground","destructive","destructiveForeground","border","input","ring","darkMode","typography","fontFamily","headingFamily","baseFontSize","lineHeight","fontWeights","normal","medium","semibold","bold","letterSpacing","tight","wide","light","black","wider"],"mappings":"AA2CA,OAAO,MAAMA,sBAAqC;IAChD;QACEC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXC,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;YACR;YACAC,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;YACR;QACF;IACF;IACA;QACEtC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXC,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;YACR;YACAC,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;YACR;QACF;IACF;IACA;QACEtC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXC,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;YACR;YACAC,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;YACR;QACF;IACF;IACA;QACEtC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXC,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;YACR;YACAC,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;YACR;QACF;IACF;IACA;QACEtC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXC,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;YACR;YACAC,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;YACR;QACF;IACF;IACA;QACEtC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXQ,OAAO;gBACPP,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;gBACNK,OAAO;YACT;YACAJ,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;gBACNG,OAAO;YACT;QACF;IACF;IACA;QACEzC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXQ,OAAO;gBACPP,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;gBACNK,OAAO;YACT;YACAJ,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;gBACNG,OAAO;YACT;QACF;IACF;IACA;QACEzC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,SAAS;YACPC,QAAQ;gBACNC,SAAS;gBACTC,YAAY;gBACZC,QAAQ;YACV;QACF;QACAC,WAAW;YACTF,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAC,UAAU;YACRnB,YAAY;YACZG,YAAY;YACZC,MAAM;YACNC,gBAAgB;YAChBC,SAAS;YACTC,mBAAmB;YACnBR,SAAS;YACTS,mBAAmB;YACnBC,WAAW;YACXC,qBAAqB;YACrBC,OAAO;YACPC,iBAAiB;YACjBX,QAAQ;YACRY,kBAAkB;YAClBC,aAAa;YACbC,uBAAuB;YACvBC,QAAQ;YACRC,OAAO;YACPC,MAAM;QACR;QACAE,YAAY;YACVC,YAAY;YACZC,eAAe;YACfC,cAAc;YACdC,YAAY;YACZC,aAAa;gBACXQ,OAAO;gBACPP,QAAQ;gBACRC,QAAQ;gBACRC,UAAU;gBACVC,MAAM;gBACNK,OAAO;YACT;YACAJ,eAAe;gBACbC,OAAO;gBACPL,QAAQ;gBACRM,MAAM;gBACNG,OAAO;YACT;QACF;IACF;CACD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/providers/Theme/index.tsx"],"sourcesContent":["'use client'\r\n\r\nimport React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\r\nimport { defaultMode, modeLocalStorageKey } from './shared.js'\r\nimport type { Mode, ThemeContextType, ThemeDefaults } from './types.js'\r\n\r\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined)\r\n\r\nexport const useTheme = (): ThemeContextType => {\r\n const context = useContext(ThemeContext)\r\n if (!context) {\r\n throw new Error('useTheme must be used within a ThemeProvider')\r\n }\r\n return context\r\n}\r\n\r\ninterface ThemeProviderProps {\r\n children: React.ReactNode\r\n initialTheme?: ThemeDefaults\r\n initialMode?: Mode\r\n allowColorModeToggle?: boolean\r\n}\r\n\r\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\r\n children,\r\n initialTheme,\r\n initialMode,\r\n allowColorModeToggle = true,\r\n}) => {\r\n // State pro light/dark mode switching\r\n const [mode, setMode] = useState<Mode | null>(initialMode || defaultMode)\r\n const [theme] = useState<ThemeDefaults | null>(initialTheme || null)\r\n\r\n // Funkce pro získání skutečného módu (resolve \"auto\" mode)\r\n const getResolvedMode = useCallback((currentMode: Mode | null): 'light' | 'dark' => {\r\n if (currentMode === 'auto' && typeof window !== 'undefined') {\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n return mediaQuery.matches ? 'dark' : 'light'\r\n }\r\n return currentMode === 'dark' ? 'dark' : 'light'\r\n }, [])\r\n\r\n // Aplikace módu na DOM a CSS variables\r\n const applyMode = useCallback(\r\n (currentMode: Mode | null) => {\r\n if (typeof window !== 'undefined') {\r\n const resolvedMode = getResolvedMode(currentMode)\r\n\r\n // Získej aktuální theme z DOM nebo použij fallback\r\n const currentTheme =\r\n document.documentElement.getAttribute('data-theme') ||\r\n (typeof theme === 'string' ? theme : 'cool')\r\n\r\n // Aplikuj data atributy a třídy (kompatibilní s CSS selektory)\r\n document.documentElement.setAttribute('data-color-mode', resolvedMode)\r\n document.documentElement.setAttribute('data-theme-mode', resolvedMode)\r\n document.documentElement.setAttribute('data-theme', currentTheme)\r\n document.documentElement.classList.remove('light', 'dark', 'auto')\r\n document.documentElement.classList.add(resolvedMode)\r\n\r\n // Force re-computation of CSS custom properties\r\n document.documentElement.style.setProperty('--color-mode', resolvedMode)\r\n\r\n // Force repaint to ensure CSS variables update\r\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n document.documentElement.offsetHeight\r\n\r\n // Dispatch custom event for components that need to react to theme changes\r\n window.dispatchEvent(\r\n new CustomEvent('themeChange', {\r\n detail: { mode: resolvedMode, originalMode: currentMode, theme: currentTheme },\r\n }),\r\n )\r\n }\r\n },\r\n [getResolvedMode, theme],\r\n )\r\n\r\n // Uložení light/dark mode do localStorage a aplikace\r\n const updateMode = useCallback(\r\n (newMode: Mode | null) => {\r\n setMode(newMode)\r\n if (newMode && typeof window !== 'undefined') {\r\n localStorage.setItem(modeLocalStorageKey, newMode)\r\n applyMode(newMode)\r\n }\r\n },\r\n [applyMode],\r\n )\r\n\r\n // Načtení mode z localStorage při startu\r\n useEffect(() => {\r\n if (typeof window !== 'undefined') {\r\n const storedMode = localStorage.getItem(modeLocalStorageKey) as Mode | null\r\n if (storedMode && ['light', 'dark', 'auto'].includes(storedMode)) {\r\n setMode(storedMode)\r\n applyMode(storedMode)\r\n } else {\r\n // Fallback na default mode\r\n applyMode(defaultMode)\r\n }\r\n }\r\n }, [applyMode])\r\n\r\n // Listener pro změny system preference (pouze při auto mode)\r\n useEffect(() => {\r\n if (mode === 'auto' && typeof window !== 'undefined') {\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n\r\n const handleChange = () => {\r\n applyMode('auto') // Re-resolve auto mode\r\n }\r\n\r\n mediaQuery.addEventListener('change', handleChange)\r\n\r\n return () => {\r\n mediaQuery.removeEventListener('change', handleChange)\r\n }\r\n }\r\n }, [mode, applyMode])\r\n\r\n const refreshTheme = useCallback(() => {\r\n // Refresh theme - aplikuj aktuální mode\r\n applyMode(mode)\r\n }, [mode, applyMode])\r\n\r\n const contextValue = useMemo(\r\n () => ({\r\n theme,\r\n mode,\r\n setTheme: () => {}, // Nepoužíváme - theme se nastavuje přes SSR\r\n setMode: updateMode,\r\n isColorModeToggleAllowed: allowColorModeToggle,\r\n refreshTheme,\r\n }),\r\n [theme, mode, updateMode, allowColorModeToggle, refreshTheme],\r\n )\r\n\r\n return <ThemeContext.Provider value={contextValue}>{children}</ThemeContext.Provider>\r\n}\r\n"],"names":["React","createContext","useCallback","useContext","useEffect","useMemo","useState","defaultMode","modeLocalStorageKey","ThemeContext","undefined","useTheme","context","Error","ThemeProvider","children","initialTheme","initialMode","allowColorModeToggle","mode","setMode","theme","getResolvedMode","currentMode","window","mediaQuery","matchMedia","matches","applyMode","resolvedMode","currentTheme","document","documentElement","getAttribute","setAttribute","classList","remove","add","style","setProperty","offsetHeight","dispatchEvent","CustomEvent","detail","originalMode","updateMode","newMode","localStorage","setItem","storedMode","getItem","includes","handleChange","addEventListener","removeEventListener","refreshTheme","contextValue","setTheme","isColorModeToggleAllowed","Provider","value"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/providers/Theme/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport { defaultMode, modeLocalStorageKey } from './shared.js'\nimport type { Mode, ThemeContextType, ThemeDefaults } from './types.js'\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined)\n\nexport const useTheme = (): ThemeContextType => {\n const context = useContext(ThemeContext)\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider')\n }\n return context\n}\n\ninterface ThemeProviderProps {\n children: React.ReactNode\n initialTheme?: ThemeDefaults\n initialMode?: Mode\n allowColorModeToggle?: boolean\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\n children,\n initialTheme,\n initialMode,\n allowColorModeToggle = true,\n}) => {\n // State pro light/dark mode switching\n const [mode, setMode] = useState<Mode | null>(initialMode || defaultMode)\n const [theme] = useState<ThemeDefaults | null>(initialTheme || null)\n\n // Funkce pro získání skutečného módu (resolve \"auto\" mode)\n const getResolvedMode = useCallback((currentMode: Mode | null): 'light' | 'dark' => {\n if (currentMode === 'auto' && typeof window !== 'undefined') {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n return mediaQuery.matches ? 'dark' : 'light'\n }\n return currentMode === 'dark' ? 'dark' : 'light'\n }, [])\n\n // Aplikace módu na DOM a CSS variables\n const applyMode = useCallback(\n (currentMode: Mode | null) => {\n if (typeof window !== 'undefined') {\n const resolvedMode = getResolvedMode(currentMode)\n\n // Získej aktuální theme z DOM nebo použij fallback\n const currentTheme =\n document.documentElement.getAttribute('data-theme') ||\n (typeof theme === 'string' ? theme : 'cool')\n\n // Aplikuj data atributy a třídy (kompatibilní s CSS selektory)\n document.documentElement.setAttribute('data-color-mode', resolvedMode)\n document.documentElement.setAttribute('data-theme-mode', resolvedMode)\n document.documentElement.setAttribute('data-theme', currentTheme)\n document.documentElement.classList.remove('light', 'dark', 'auto')\n document.documentElement.classList.add(resolvedMode)\n\n // Force re-computation of CSS custom properties\n document.documentElement.style.setProperty('--color-mode', resolvedMode)\n\n // Force repaint to ensure CSS variables update\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n document.documentElement.offsetHeight\n\n // Dispatch custom event for components that need to react to theme changes\n window.dispatchEvent(\n new CustomEvent('themeChange', {\n detail: { mode: resolvedMode, originalMode: currentMode, theme: currentTheme },\n }),\n )\n }\n },\n [getResolvedMode, theme],\n )\n\n // Uložení light/dark mode do localStorage a aplikace\n const updateMode = useCallback(\n (newMode: Mode | null) => {\n setMode(newMode)\n if (newMode && typeof window !== 'undefined') {\n localStorage.setItem(modeLocalStorageKey, newMode)\n applyMode(newMode)\n }\n },\n [applyMode],\n )\n\n // Načtení mode z localStorage při startu\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const storedMode = localStorage.getItem(modeLocalStorageKey) as Mode | null\n if (storedMode && ['light', 'dark', 'auto'].includes(storedMode)) {\n setMode(storedMode)\n applyMode(storedMode)\n } else {\n // Fallback na default mode\n applyMode(defaultMode)\n }\n }\n }, [applyMode])\n\n // Listener pro změny system preference (pouze při auto mode)\n useEffect(() => {\n if (mode === 'auto' && typeof window !== 'undefined') {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n\n const handleChange = () => {\n applyMode('auto') // Re-resolve auto mode\n }\n\n mediaQuery.addEventListener('change', handleChange)\n\n return () => {\n mediaQuery.removeEventListener('change', handleChange)\n }\n }\n }, [mode, applyMode])\n\n const refreshTheme = useCallback(() => {\n // Refresh theme - aplikuj aktuální mode\n applyMode(mode)\n }, [mode, applyMode])\n\n const contextValue = useMemo(\n () => ({\n theme,\n mode,\n setTheme: () => {}, // Nepoužíváme - theme se nastavuje přes SSR\n setMode: updateMode,\n isColorModeToggleAllowed: allowColorModeToggle,\n refreshTheme,\n }),\n [theme, mode, updateMode, allowColorModeToggle, refreshTheme],\n )\n\n return <ThemeContext.Provider value={contextValue}>{children}</ThemeContext.Provider>\n}\n"],"names":["React","createContext","useCallback","useContext","useEffect","useMemo","useState","defaultMode","modeLocalStorageKey","ThemeContext","undefined","useTheme","context","Error","ThemeProvider","children","initialTheme","initialMode","allowColorModeToggle","mode","setMode","theme","getResolvedMode","currentMode","window","mediaQuery","matchMedia","matches","applyMode","resolvedMode","currentTheme","document","documentElement","getAttribute","setAttribute","classList","remove","add","style","setProperty","offsetHeight","dispatchEvent","CustomEvent","detail","originalMode","updateMode","newMode","localStorage","setItem","storedMode","getItem","includes","handleChange","addEventListener","removeEventListener","refreshTheme","contextValue","setTheme","isColorModeToggleAllowed","Provider","value"],"mappings":"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"}