@kilivi/payloadcms-theme-management 1.1.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +318 -847
  2. package/dist/components/AppearanceSessionControls.d.ts +15 -0
  3. package/dist/components/AppearanceSessionControls.d.ts.map +1 -0
  4. package/dist/components/AppearanceSessionControls.js +152 -0
  5. package/dist/components/AppearanceSessionControls.js.map +1 -0
  6. package/dist/components/ColorModeToggle.css +42 -0
  7. package/dist/components/ColorModeToggle.d.ts +40 -0
  8. package/dist/components/ColorModeToggle.d.ts.map +1 -0
  9. package/dist/components/ColorModeToggle.js +111 -0
  10. package/dist/components/ColorModeToggle.js.map +1 -0
  11. package/dist/components/ServerThemeInjector.d.ts.map +1 -1
  12. package/dist/components/ServerThemeInjector.js +41 -14
  13. package/dist/components/ServerThemeInjector.js.map +1 -1
  14. package/dist/components/ThemeLivePreviewSync.d.ts +1 -0
  15. package/dist/components/ThemeLivePreviewSync.d.ts.map +1 -1
  16. package/dist/components/ThemeLivePreviewSync.js +1 -1
  17. package/dist/components/ThemeLivePreviewSync.js.map +1 -1
  18. package/dist/components/ThemeSwitcher.d.ts +36 -0
  19. package/dist/components/ThemeSwitcher.d.ts.map +1 -0
  20. package/dist/components/ThemeSwitcher.js +89 -0
  21. package/dist/components/ThemeSwitcher.js.map +1 -0
  22. package/dist/components/typographyPreviewUtils.d.ts.map +1 -1
  23. package/dist/components/typographyPreviewUtils.js +8 -1
  24. package/dist/components/typographyPreviewUtils.js.map +1 -1
  25. package/dist/constants/devicePreviews.d.ts +35 -0
  26. package/dist/constants/devicePreviews.d.ts.map +1 -0
  27. package/dist/constants/devicePreviews.js +43 -0
  28. package/dist/constants/devicePreviews.js.map +1 -0
  29. package/dist/constants/themeFonts.js +9 -9
  30. package/dist/constants/themeFonts.js.map +1 -1
  31. package/dist/extended-presets.d.ts +0 -4
  32. package/dist/extended-presets.d.ts.map +1 -1
  33. package/dist/extended-presets.js +1 -18
  34. package/dist/extended-presets.js.map +1 -1
  35. package/dist/extended-themes.d.ts.map +1 -1
  36. package/dist/extended-themes.js +428 -0
  37. package/dist/extended-themes.js.map +1 -1
  38. package/dist/fields/AccessibilityAuditField.d.ts +2 -0
  39. package/dist/fields/AccessibilityAuditField.d.ts.map +1 -0
  40. package/dist/fields/AccessibilityAuditField.js +303 -0
  41. package/dist/fields/AccessibilityAuditField.js.map +1 -0
  42. package/dist/fields/AppearancePreviewField.d.ts +2 -0
  43. package/dist/fields/AppearancePreviewField.d.ts.map +1 -0
  44. package/dist/fields/AppearancePreviewField.js +763 -0
  45. package/dist/fields/AppearancePreviewField.js.map +1 -0
  46. package/dist/fields/ColorPickerField.d.ts.map +1 -1
  47. package/dist/fields/ColorPickerField.js +89 -85
  48. package/dist/fields/ColorPickerField.js.map +1 -1
  49. package/dist/fields/FontSelectField.d.ts +6 -0
  50. package/dist/fields/FontSelectField.d.ts.map +1 -1
  51. package/dist/fields/FontSelectField.js +195 -122
  52. package/dist/fields/FontSelectField.js.map +1 -1
  53. package/dist/fields/PaletteGeneratorField.d.ts +7 -0
  54. package/dist/fields/PaletteGeneratorField.d.ts.map +1 -0
  55. package/dist/fields/PaletteGeneratorField.js +327 -0
  56. package/dist/fields/PaletteGeneratorField.js.map +1 -0
  57. package/dist/fields/StylePresetField.d.ts +3 -0
  58. package/dist/fields/StylePresetField.d.ts.map +1 -0
  59. package/dist/fields/StylePresetField.js +462 -0
  60. package/dist/fields/StylePresetField.js.map +1 -0
  61. package/dist/fields/ThemeColorPickerField.css +115 -35
  62. package/dist/fields/ThemeColorPickerField.d.ts.map +1 -1
  63. package/dist/fields/ThemeColorPickerField.js +204 -70
  64. package/dist/fields/ThemeColorPickerField.js.map +1 -1
  65. package/dist/fields/ThemeExportField.d.ts +6 -0
  66. package/dist/fields/ThemeExportField.d.ts.map +1 -0
  67. package/dist/fields/ThemeExportField.js +202 -0
  68. package/dist/fields/ThemeExportField.js.map +1 -0
  69. package/dist/fields/ThemePresetImportField.d.ts.map +1 -1
  70. package/dist/fields/ThemePresetImportField.js +56 -25
  71. package/dist/fields/ThemePresetImportField.js.map +1 -1
  72. package/dist/fields/ThemePreviewField.css +382 -5
  73. package/dist/fields/ThemePreviewField.d.ts.map +1 -1
  74. package/dist/fields/ThemePreviewField.js +268 -170
  75. package/dist/fields/ThemePreviewField.js.map +1 -1
  76. package/dist/fields/ThemeTokenSelectField.d.ts.map +1 -1
  77. package/dist/fields/ThemeTokenSelectField.js +278 -80
  78. package/dist/fields/ThemeTokenSelectField.js.map +1 -1
  79. package/dist/fields/colorFieldHelpers.d.ts +90 -0
  80. package/dist/fields/colorFieldHelpers.d.ts.map +1 -0
  81. package/dist/fields/colorFieldHelpers.js +133 -0
  82. package/dist/fields/colorFieldHelpers.js.map +1 -0
  83. package/dist/fields/colorModeFields.d.ts +1 -1
  84. package/dist/fields/colorModeFields.d.ts.map +1 -1
  85. package/dist/fields/colorModeFields.js +49 -7
  86. package/dist/fields/colorModeFields.js.map +1 -1
  87. package/dist/fields/themeConfigurationField.d.ts +8 -1
  88. package/dist/fields/themeConfigurationField.d.ts.map +1 -1
  89. package/dist/fields/themeConfigurationField.js +961 -29
  90. package/dist/fields/themeConfigurationField.js.map +1 -1
  91. package/dist/globals/ThemeSettings/FontPicker/FontPreview.d.ts.map +1 -1
  92. package/dist/globals/ThemeSettings/FontPicker/FontPreview.js +8 -4
  93. package/dist/globals/ThemeSettings/FontPicker/FontPreview.js.map +1 -1
  94. package/dist/globals/ThemeSettings/FontPicker/index.d.ts.map +1 -1
  95. package/dist/globals/ThemeSettings/FontPicker/index.js +81 -26
  96. package/dist/globals/ThemeSettings/FontPicker/index.js.map +1 -1
  97. package/dist/globals/ThemeSettings/FontPicker/styles.css +98 -41
  98. package/dist/globals/ThemeSettings/FontPicker/translations.d.ts +6 -0
  99. package/dist/globals/ThemeSettings/FontPicker/translations.d.ts.map +1 -1
  100. package/dist/globals/ThemeSettings/FontPicker/translations.js +14 -2
  101. package/dist/globals/ThemeSettings/FontPicker/translations.js.map +1 -1
  102. package/dist/globals/ThemeSettings/config.d.ts.map +1 -1
  103. package/dist/globals/ThemeSettings/config.js +76 -79
  104. package/dist/globals/ThemeSettings/config.js.map +1 -1
  105. package/dist/globals/ThemeSettings/fields/FontLoadingGuideField.d.ts.map +1 -1
  106. package/dist/globals/ThemeSettings/fields/FontLoadingGuideField.js +63 -62
  107. package/dist/globals/ThemeSettings/fields/FontLoadingGuideField.js.map +1 -1
  108. package/dist/globals/ThemeSettings/fields/TypographyInfoField.d.ts.map +1 -1
  109. package/dist/globals/ThemeSettings/fields/TypographyInfoField.js +22 -25
  110. package/dist/globals/ThemeSettings/fields/TypographyInfoField.js.map +1 -1
  111. package/dist/hooks/useAppearanceSession.d.ts +50 -0
  112. package/dist/hooks/useAppearanceSession.d.ts.map +1 -0
  113. package/dist/hooks/useAppearanceSession.js +91 -0
  114. package/dist/hooks/useAppearanceSession.js.map +1 -0
  115. package/dist/hooks/useThemeTranslations.d.ts +13 -0
  116. package/dist/hooks/useThemeTranslations.d.ts.map +1 -0
  117. package/dist/hooks/useThemeTranslations.js +22 -0
  118. package/dist/hooks/useThemeTranslations.js.map +1 -0
  119. package/dist/i18n.d.ts +53 -0
  120. package/dist/i18n.d.ts.map +1 -0
  121. package/dist/i18n.js +53 -0
  122. package/dist/i18n.js.map +1 -0
  123. package/dist/index.d.ts +10 -4
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +130 -32
  126. package/dist/index.js.map +1 -1
  127. package/dist/payload-types.d.ts +24 -0
  128. package/dist/payload-types.d.ts.map +1 -1
  129. package/dist/payload-types.js.map +1 -1
  130. package/dist/presets.d.ts +8 -0
  131. package/dist/presets.d.ts.map +1 -1
  132. package/dist/presets.js.map +1 -1
  133. package/dist/providers/Theme/index.d.ts.map +1 -1
  134. package/dist/providers/Theme/index.js +75 -11
  135. package/dist/providers/Theme/index.js.map +1 -1
  136. package/dist/providers/Theme/themeConfig.d.ts.map +1 -1
  137. package/dist/providers/Theme/themeConfig.js +104 -0
  138. package/dist/providers/Theme/themeConfig.js.map +1 -1
  139. package/dist/providers/Theme/types.d.ts +1 -1
  140. package/dist/providers/Theme/types.d.ts.map +1 -1
  141. package/dist/providers/Theme/types.js +10 -1
  142. package/dist/providers/Theme/types.js.map +1 -1
  143. package/dist/style-presets.d.ts +66 -0
  144. package/dist/style-presets.d.ts.map +1 -0
  145. package/dist/style-presets.js +556 -0
  146. package/dist/style-presets.js.map +1 -0
  147. package/dist/translations.d.ts +159 -1
  148. package/dist/translations.d.ts.map +1 -1
  149. package/dist/translations.js +310 -9
  150. package/dist/translations.js.map +1 -1
  151. package/dist/tweakcn-special-themes.d.ts.map +1 -1
  152. package/dist/tweakcn-special-themes.js +585 -9
  153. package/dist/tweakcn-special-themes.js.map +1 -1
  154. package/dist/types/css.d.js +3 -0
  155. package/dist/types/css.d.js.map +1 -0
  156. package/dist/types.d.ts +30 -0
  157. package/dist/types.d.ts.map +1 -1
  158. package/dist/types.js +1 -1
  159. package/dist/types.js.map +1 -1
  160. package/dist/utilities/getThemeSettings.d.ts.map +1 -1
  161. package/dist/utilities/getThemeSettings.js +2 -14
  162. package/dist/utilities/getThemeSettings.js.map +1 -1
  163. package/dist/utils/contrast.d.ts +63 -0
  164. package/dist/utils/contrast.d.ts.map +1 -0
  165. package/dist/utils/contrast.js +158 -0
  166. package/dist/utils/contrast.js.map +1 -0
  167. package/dist/utils/exportTokens.d.ts +30 -0
  168. package/dist/utils/exportTokens.d.ts.map +1 -0
  169. package/dist/utils/exportTokens.js +183 -0
  170. package/dist/utils/exportTokens.js.map +1 -0
  171. package/dist/utils/generatePalette.d.ts +46 -0
  172. package/dist/utils/generatePalette.d.ts.map +1 -0
  173. package/dist/utils/generatePalette.js +127 -0
  174. package/dist/utils/generatePalette.js.map +1 -0
  175. package/dist/utils/generateThemeCSS.d.ts.map +1 -1
  176. package/dist/utils/generateThemeCSS.js +2 -40
  177. package/dist/utils/generateThemeCSS.js.map +1 -1
  178. package/dist/utils/livePreviewThemeRuntime.d.ts +16 -2
  179. package/dist/utils/livePreviewThemeRuntime.d.ts.map +1 -1
  180. package/dist/utils/livePreviewThemeRuntime.js +37 -14
  181. package/dist/utils/livePreviewThemeRuntime.js.map +1 -1
  182. package/dist/utils/localizedText.d.ts +8 -0
  183. package/dist/utils/localizedText.d.ts.map +1 -0
  184. package/dist/utils/localizedText.js +21 -0
  185. package/dist/utils/localizedText.js.map +1 -0
  186. package/dist/utils/resolveThemeConfiguration.d.ts +45 -1
  187. package/dist/utils/resolveThemeConfiguration.d.ts.map +1 -1
  188. package/dist/utils/resolveThemeConfiguration.js +12 -5
  189. package/dist/utils/resolveThemeConfiguration.js.map +1 -1
  190. package/dist/utils/themeColors.d.ts +3 -0
  191. package/dist/utils/themeColors.d.ts.map +1 -1
  192. package/dist/utils/themeColors.js +30 -1
  193. package/dist/utils/themeColors.js.map +1 -1
  194. package/dist/utils/themeHtmlAttributes.d.ts +32 -12
  195. package/dist/utils/themeHtmlAttributes.d.ts.map +1 -1
  196. package/dist/utils/themeHtmlAttributes.js +38 -5
  197. package/dist/utils/themeHtmlAttributes.js.map +1 -1
  198. package/dist/utils/themeUtils.d.ts +3 -5
  199. package/dist/utils/themeUtils.d.ts.map +1 -1
  200. package/dist/utils/themeUtils.js +416 -6
  201. package/dist/utils/themeUtils.js.map +1 -1
  202. package/dist/utils/tweakcnConverter.d.ts +1 -3
  203. package/dist/utils/tweakcnConverter.d.ts.map +1 -1
  204. package/dist/utils/tweakcnConverter.js +1 -3
  205. package/dist/utils/tweakcnConverter.js.map +1 -1
  206. package/package.json +11 -5
  207. package/dist/components/ThemePreview.d.ts +0 -3
  208. package/dist/components/ThemePreview.d.ts.map +0 -1
  209. package/dist/components/ThemePreview.js +0 -321
  210. package/dist/components/ThemePreview.js.map +0 -1
  211. package/dist/plugin.d.ts +0 -2
  212. package/dist/plugin.d.ts.map +0 -1
  213. package/dist/plugin.js +0 -3
  214. package/dist/plugin.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { CollectionConfig, Config, Field, GlobalConfig, Plugin, TabsField } from 'payload'\nimport { createThemeConfigurationField } from './fields/themeConfigurationField.js'\nimport type { ThemeTab } from './fields/themeConfigurationField.js'\nimport type { SiteThemeConfiguration } from './payload-types.js'\nimport type { ThemePreset } from './presets.js'\nimport { allThemePresets } from './presets.js'\nimport { getTranslations, translations } from './translations.js'\nimport type {\n FetchThemeConfigurationOptions,\n ThemeManagementLivePreviewOptions,\n ThemeManagementLivePreviewUrlArgs,\n ThemeManagementPluginOptions,\n} from './types.js'\n\nconst THEME_FIELD_NAME = 'themeConfiguration'\n\n/**\n * Removes existing theme configuration from a group field (legacy)\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\n/**\n * Finds the tabs field in the collection fields array\n */\nconst findTabsField = (fields: Field[] = []): TabsField | null => {\n for (const field of fields) {\n if (field.type === 'tabs') {\n return field as TabsField\n }\n }\n return null\n}\n\n/**\n * Removes existing Appearance Settings tab if it exists\n */\nconst removeExistingThemeTab = (\n tabs: NonNullable<TabsField['tabs']>,\n): NonNullable<TabsField['tabs']> => {\n const knownLabels = Object.values(translations).map((t) => t.tabLabel)\n return tabs.filter((tab) => {\n // Normalize label to string (support localized object or plain string)\n let labelValues: string[] = []\n if (typeof tab.label === 'object' && tab.label !== null) {\n labelValues = Object.values(tab.label as Record<string, string>)\n } else if (typeof tab.label === 'string') {\n labelValues = [tab.label]\n }\n\n // If any of the label values match a known plugin tab label, remove it\n const matchesKnown = labelValues.some((v) => knownLabels.includes(v))\n\n return !matchesKnown\n })\n}\n\n/**\n * Injects theme tab into existing tabs field\n */\nconst injectThemeTab = (\n fields: Field[] | undefined,\n themeTab: ThemeTab,\n enableLogging: boolean,\n): Field[] => {\n // First, remove any legacy theme field (group-based)\n const sanitizedFields = removeExistingThemeField(fields ?? [])\n\n // Find the tabs field\n const tabsField = findTabsField(sanitizedFields)\n\n if (!tabsField || !tabsField.tabs) {\n if (enableLogging) {\n console.warn(\n '🎨 Theme Management Plugin: No tabs field found. Creating a new tabs structure.',\n )\n }\n\n // If no tabs exist, create a basic tabs structure with just the theme tab\n const newTabsField: TabsField = {\n type: 'tabs',\n tabs: [themeTab],\n }\n\n return [...sanitizedFields, newTabsField]\n }\n\n // Remove existing theme tab if present\n const sanitizedTabs = removeExistingThemeTab(tabsField.tabs)\n\n // Add theme tab to the end\n const updatedTabs = [...sanitizedTabs, themeTab]\n\n if (enableLogging) {\n console.log('🎨 Theme Management Plugin: injecting Appearance Settings tab')\n }\n\n // Update the tabs field\n const updatedTabsField: TabsField = {\n ...tabsField,\n tabs: updatedTabs,\n }\n\n // Replace the old tabs field with the updated one\n return sanitizedFields.map((field) => (field.type === 'tabs' ? updatedTabsField : field))\n}\n\nconst ensureCollectionsArray = (collections: Config['collections']): CollectionConfig[] =>\n Array.isArray(collections) ? collections : []\n\nconst ensureEndpointsArray = (endpoints: Config['endpoints']): NonNullable<Config['endpoints']> =>\n Array.isArray(endpoints) ? endpoints : []\n\ntype NormalizedLivePreviewOptions = {\n enabled: boolean\n pageCollection: string\n pageSlug: string\n fallbackToFirstPage: boolean\n tenantField: string\n tenantQueryParam: string\n breakpoints?: ThemeManagementLivePreviewOptions['breakpoints']\n url?: ThemeManagementLivePreviewOptions['url']\n}\n\ntype NormalizedCacheRevalidationOptions = {\n enabled: boolean\n injectRoute: boolean\n routePath: string\n secret?: string\n tags: string[]\n paths: string[]\n}\n\ntype MinimalPayloadRequest = ThemeManagementLivePreviewUrlArgs['req']\n\nconst normalizeLivePreviewOptions = (\n livePreview: ThemeManagementPluginOptions['livePreview'],\n): NormalizedLivePreviewOptions => {\n if (livePreview === false) {\n return {\n enabled: false,\n pageCollection: 'pages',\n pageSlug: 'home',\n fallbackToFirstPage: true,\n tenantField: 'tenant',\n tenantQueryParam: 'tenant',\n breakpoints: undefined,\n }\n }\n\n const raw = typeof livePreview === 'object' && livePreview ? livePreview : {}\n\n return {\n enabled: raw.enabled ?? true,\n pageCollection: raw.pageCollection ?? 'pages',\n pageSlug: raw.pageSlug ?? 'home',\n fallbackToFirstPage: raw.fallbackToFirstPage ?? true,\n tenantField: raw.tenantField ?? 'tenant',\n tenantQueryParam: raw.tenantQueryParam ?? 'tenant',\n breakpoints: raw.breakpoints,\n url: raw.url,\n }\n}\n\nconst dedupeStrings = (values: (string | undefined)[]): string[] => [\n ...new Set(\n values.filter((value): value is string => typeof value === 'string' && value.trim().length > 0),\n ),\n]\n\nconst normalizeRoutePath = (path: string | undefined): string => {\n if (!path || !path.trim()) {\n return '/theme/revalidate'\n }\n\n return path.startsWith('/') ? path : `/${path}`\n}\n\nconst normalizeCacheRevalidationOptions = (args: {\n cacheRevalidation: ThemeManagementPluginOptions['cacheRevalidation']\n standaloneCollectionSlug: string\n useStandaloneCollection: boolean\n}): NormalizedCacheRevalidationOptions => {\n const { cacheRevalidation, standaloneCollectionSlug, useStandaloneCollection } = args\n\n if (cacheRevalidation === false) {\n return {\n enabled: false,\n injectRoute: false,\n routePath: '/theme/revalidate',\n tags: [],\n paths: [],\n }\n }\n\n const raw = typeof cacheRevalidation === 'object' && cacheRevalidation ? cacheRevalidation : {}\n const defaultTag = `global_${standaloneCollectionSlug}`\n\n return {\n enabled: raw.enabled ?? useStandaloneCollection,\n injectRoute: raw.injectRoute ?? true,\n routePath: normalizeRoutePath(raw.routePath),\n secret: raw.secret,\n tags: dedupeStrings([defaultTag, ...(raw.tags ?? [])]),\n paths: dedupeStrings(raw.paths ?? []),\n }\n}\n\nconst asRecord = (value: unknown): Record<string, unknown> | undefined => {\n if (value && typeof value === 'object') {\n return value as Record<string, unknown>\n }\n return undefined\n}\n\nconst pickString = (value: unknown): string | undefined => {\n if (typeof value === 'string' && value.trim()) return value\n return undefined\n}\n\nconst extractTenantValue = (value: unknown): string | undefined => {\n if (!value) return undefined\n if (typeof value === 'string') return pickString(value)\n\n const tenantRecord = asRecord(value)\n if (!tenantRecord) return undefined\n\n return (\n pickString(tenantRecord.id) ??\n pickString(tenantRecord.slug) ??\n pickString(tenantRecord.value) ??\n pickString(tenantRecord.tenant)\n )\n}\n\nconst resolveTenantSlug = (\n req: MinimalPayloadRequest,\n tenantField: string,\n data?: Record<string, unknown>,\n): string | undefined => {\n const fromData = extractTenantValue(data?.[tenantField])\n if (fromData) return fromData\n\n const query = req.query\n if (query && typeof URLSearchParams !== 'undefined' && query instanceof URLSearchParams) {\n return (\n pickString(query.get('tenant')) ??\n pickString(query.get('tenantSlug')) ??\n pickString(query.get('tenantId'))\n )\n }\n\n const queryRecord = asRecord(query)\n const fromQuery =\n extractTenantValue(queryRecord?.tenant) ??\n extractTenantValue(queryRecord?.tenantSlug) ??\n extractTenantValue(queryRecord?.tenantId)\n if (fromQuery) return fromQuery\n\n const userRecord = asRecord(req.user)\n const fromUser =\n extractTenantValue(userRecord?.[tenantField]) ??\n extractTenantValue(userRecord?.tenant) ??\n extractTenantValue(userRecord?.tenantSlug)\n if (fromUser) return fromUser\n\n const headers = req.headers\n if (headers && typeof Headers !== 'undefined' && headers instanceof Headers) {\n return (\n pickString(headers.get('x-tenant-id')) ??\n pickString(headers.get('x-tenant')) ??\n pickString(headers.get('payload-tenant'))\n )\n }\n\n const headerRecord = asRecord(headers)\n return (\n extractTenantValue(headerRecord?.['x-tenant-id']) ??\n extractTenantValue(headerRecord?.['x-tenant']) ??\n extractTenantValue(headerRecord?.['payload-tenant'])\n )\n}\n\nconst buildDefaultPreviewPath = (\n pageSlug: string,\n tenantSlug: string | undefined,\n tenantQueryParam: string,\n): string => {\n const normalizedSlug = pageSlug === 'home' ? '' : pageSlug\n const basePath = normalizedSlug ? `/${normalizedSlug}` : '/'\n\n if (!tenantSlug) {\n return basePath\n }\n\n const separator = basePath.includes('?') ? '&' : '?'\n return `${basePath}${separator}${tenantQueryParam}=${encodeURIComponent(tenantSlug)}`\n}\n\nconst resolveLivePreviewUrl = async (args: {\n req: MinimalPayloadRequest\n data?: Record<string, unknown>\n livePreview: NormalizedLivePreviewOptions\n enableLogging: boolean\n}): Promise<string> => {\n const { req, data, livePreview, enableLogging } = args\n\n const tenantSlug = resolveTenantSlug(req, livePreview.tenantField, data)\n\n const tenantWhere = tenantSlug\n ? {\n [livePreview.tenantField]: {\n equals: tenantSlug,\n },\n }\n : undefined\n\n const homeWhere = {\n and: [\n {\n slug: {\n equals: livePreview.pageSlug,\n },\n },\n ...(tenantWhere ? [tenantWhere] : []),\n ],\n }\n\n try {\n const preferredPageResponse = await req.payload.find({\n collection: livePreview.pageCollection,\n where: homeWhere,\n depth: 0,\n draft: true,\n limit: 1,\n overrideAccess: true,\n pagination: false,\n })\n\n let page = preferredPageResponse?.docs?.[0]\n\n if (!page && livePreview.fallbackToFirstPage) {\n const fallbackResponse = await req.payload.find({\n collection: livePreview.pageCollection,\n where: tenantWhere,\n depth: 0,\n draft: true,\n limit: 1,\n overrideAccess: true,\n pagination: false,\n })\n\n page = fallbackResponse?.docs?.[0]\n }\n\n const pageRecord = asRecord(page)\n const resolvedPageSlug = pickString(pageRecord?.slug) ?? livePreview.pageSlug\n\n if (livePreview.url) {\n return await livePreview.url({\n page: pageRecord,\n pageSlug: resolvedPageSlug,\n tenantSlug,\n req,\n })\n }\n\n return buildDefaultPreviewPath(resolvedPageSlug, tenantSlug, livePreview.tenantQueryParam)\n } catch (error) {\n if (enableLogging) {\n req.payload.logger?.warn?.(\n '🎨 Theme Management Plugin: live preview URL fallback used',\n error,\n )\n }\n\n return buildDefaultPreviewPath(livePreview.pageSlug, tenantSlug, livePreview.tenantQueryParam)\n }\n}\n\nconst createPreviewAdminConfig = (\n normalizedLivePreview: NormalizedLivePreviewOptions,\n enableLogging: boolean,\n) => {\n if (!normalizedLivePreview.enabled) {\n return {}\n }\n\n return {\n livePreview: {\n breakpoints: normalizedLivePreview.breakpoints,\n url: ({ data, req }: { data?: unknown; req: unknown }) =>\n resolveLivePreviewUrl({\n req: req as MinimalPayloadRequest,\n data: asRecord(data),\n livePreview: normalizedLivePreview,\n enableLogging,\n }),\n },\n preview: (data: Record<string, unknown>, options: { req?: unknown }) => {\n const req = options?.req\n if (!req) return null\n\n return resolveLivePreviewUrl({\n req: req as MinimalPayloadRequest,\n data,\n livePreview: normalizedLivePreview,\n enableLogging,\n })\n },\n }\n}\n\nconst readSecretFromRequest = async (req: unknown): Promise<string | undefined> => {\n const requestRecord = asRecord(req)\n const headersValue = requestRecord?.headers\n\n if (headersValue && typeof Headers !== 'undefined' && headersValue instanceof Headers) {\n return (\n pickString(headersValue.get('x-theme-revalidate-secret')) ??\n pickString(headersValue.get('x-revalidate-secret'))\n )\n }\n\n const headerRecord = asRecord(headersValue)\n const fromHeaders =\n pickString(headerRecord?.['x-theme-revalidate-secret']) ??\n pickString(headerRecord?.['x-revalidate-secret'])\n if (fromHeaders) {\n return fromHeaders\n }\n\n const requestWithJson = req as { json?: () => Promise<unknown> }\n const body =\n typeof requestWithJson?.json === 'function' ? await requestWithJson.json() : undefined\n const bodyRecord = asRecord(body)\n const fromBody = pickString(bodyRecord?.secret)\n if (fromBody) {\n return fromBody\n }\n\n const queryRecord = asRecord(requestRecord?.query)\n return pickString(queryRecord?.secret)\n}\n\nconst executeThemeRevalidation = async (options: {\n tags: string[]\n paths: string[]\n enableLogging: boolean\n logger?: { info?: (...args: any[]) => void; error?: (...args: any[]) => void }\n}): Promise<{ tags: string[]; paths: string[] }> => {\n const { tags, paths, enableLogging, logger } = options\n\n try {\n const { revalidatePath, revalidateTag } = await import('next/cache')\n\n tags.forEach((tag) => revalidateTag(tag))\n paths.forEach((path) => revalidatePath(path))\n\n if (enableLogging) {\n logger?.info?.(\n `🎨 Theme Management Plugin: revalidated cache tags=[${tags.join(', ')}] paths=[${paths.join(', ')}]`,\n )\n }\n } catch (error) {\n if (enableLogging) {\n logger?.error?.('🎨 Theme Management Plugin: cache invalidation failed:', error)\n }\n throw error\n }\n\n return { tags, paths }\n}\n\nconst createCacheRevalidationEndpoint = (options: {\n cacheRevalidation: NormalizedCacheRevalidationOptions\n enableLogging: boolean\n}) => {\n const { cacheRevalidation, enableLogging } = options\n\n if (!cacheRevalidation.enabled || !cacheRevalidation.injectRoute) {\n return null\n }\n\n return {\n path: cacheRevalidation.routePath,\n method: 'post',\n handler: async (req: unknown) => {\n const reqRecord = asRecord(req)\n const payload = asRecord(reqRecord?.payload)\n const logger = payload?.logger as\n | { info?: (...args: any[]) => void; error?: (...args: any[]) => void }\n | undefined\n\n if (cacheRevalidation.secret) {\n const providedSecret = await readSecretFromRequest(req)\n if (providedSecret !== cacheRevalidation.secret) {\n return jsonResponse({ error: 'Unauthorized' }, 401)\n }\n }\n\n try {\n const result = await executeThemeRevalidation({\n tags: cacheRevalidation.tags,\n paths: cacheRevalidation.paths,\n enableLogging,\n logger,\n })\n\n return jsonResponse({ ok: true, revalidated: result })\n } catch {\n return jsonResponse({ ok: false, error: 'Revalidation failed' }, 500)\n }\n },\n }\n}\n\nconst mergeEndpoint = (\n endpoints: NonNullable<Config['endpoints']>,\n endpoint: ReturnType<typeof createCacheRevalidationEndpoint>,\n): NonNullable<Config['endpoints']> => {\n if (!endpoint) {\n return endpoints\n }\n\n const withoutExisting = endpoints.filter((candidate) => {\n const record = candidate as unknown as { path?: string; method?: string }\n return !(\n record?.path === endpoint.path &&\n typeof record.method === 'string' &&\n record.method.toLowerCase() === endpoint.method\n )\n })\n\n return [...withoutExisting, endpoint as unknown as NonNullable<Config['endpoints']>[number]]\n}\n\nconst jsonResponse = (body: Record<string, unknown>, status = 200): unknown => {\n if (typeof Response !== 'undefined' && typeof Response.json === 'function') {\n return Response.json(body, { status })\n }\n\n return {\n status,\n json: async () => body,\n }\n}\n\nexport const themeManagementPlugin = (options: ThemeManagementPluginOptions = {}): Plugin => {\n return (config: Config): Config => {\n const {\n enabled = true,\n targetCollection = 'site-settings',\n useStandaloneCollection = false,\n standaloneCollectionSlug = 'appearance-settings',\n // Allow either string or localized object; default comes from plugin translations\n standaloneCollectionLabel = getTranslations().standaloneCollectionLabel,\n themePresets = allThemePresets,\n defaultTheme = 'cool',\n includeColorModeToggle = true,\n includeCustomCSS = true,\n includeBrandIdentity = false,\n enableAdvancedFeatures = true,\n enableLogging = false,\n livePreview = true,\n cacheRevalidation,\n } = options\n\n const normalizedLivePreview = normalizeLivePreviewOptions(livePreview)\n const normalizedCacheRevalidation = normalizeCacheRevalidationOptions({\n cacheRevalidation,\n standaloneCollectionSlug,\n useStandaloneCollection,\n })\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 themeTab = createThemeConfigurationField({\n themePresets,\n defaultTheme,\n includeColorModeToggle,\n includeCustomCSS,\n includeBrandIdentity: includeBrandIdentity ?? false,\n enableAdvancedFeatures,\n useThemePreviewField: !normalizedLivePreview.enabled,\n })\n\n // If using standalone collection, create a new global\n if (useStandaloneCollection) {\n if (enableLogging) {\n console.log(\n `🎨 Theme Management Plugin: creating standalone global \"${standaloneCollectionSlug}\"`,\n )\n }\n\n // Extract the fields from the tab directly (no wrapping in group)\n const tabFields = (themeTab.fields ?? []) as Field[]\n\n /**\n * Hook to auto-populate lightMode and darkMode colors when theme changes\n */\n type BeforeChangeArgs = {\n data?: {\n themeConfiguration?: {\n theme?: string\n lightMode?: Record<string, unknown>\n darkMode?: Record<string, unknown>\n }\n }\n }\n\n const beforeChangeHook = async (args: BeforeChangeArgs) => {\n const { data } = args\n\n // If theme is being changed, auto-populate color modes\n if (data?.themeConfiguration?.theme) {\n const themeName = data.themeConfiguration.theme\n const selectedPreset = themePresets.find((p) => p.name === themeName)\n\n if (selectedPreset) {\n // Initialize light and dark mode colors from preset if not already set\n if (!data.themeConfiguration.lightMode) {\n data.themeConfiguration.lightMode = {}\n }\n if (!data.themeConfiguration.darkMode) {\n data.themeConfiguration.darkMode = {}\n }\n\n // Only populate if not manually edited (first time or empty)\n const isLightModeEmpty = !data.themeConfiguration.lightMode?.background\n const isDarkModeEmpty = !data.themeConfiguration.darkMode?.background\n\n if (isLightModeEmpty && selectedPreset.lightMode) {\n data.themeConfiguration.lightMode = { ...selectedPreset.lightMode }\n }\n\n if (isDarkModeEmpty && selectedPreset.darkMode) {\n data.themeConfiguration.darkMode = { ...selectedPreset.darkMode }\n }\n }\n }\n\n return data\n }\n\n const standaloneGlobal: GlobalConfig = {\n slug: standaloneCollectionSlug,\n label: standaloneCollectionLabel,\n admin: {\n group: 'Settings',\n ...createPreviewAdminConfig(normalizedLivePreview, enableLogging),\n },\n // Provide a broad access object but cast to GlobalConfig['access'] to satisfy types\n access: ((): GlobalConfig['access'] => {\n const accessObj = {\n read: () => true,\n create: ({ req }: { req?: { user?: unknown } }) => !!req?.user,\n update: ({ req }: { req?: { user?: unknown } }) => !!req?.user,\n delete: ({ req }: { req?: { user?: unknown } }) => !!req?.user,\n } as unknown as GlobalConfig['access']\n return accessObj\n })(),\n fields: tabFields,\n hooks: {\n beforeChange: [beforeChangeHook],\n afterChange: [\n async ({ doc, req }) => {\n // Invalidate cache after appearance settings change\n if (!req?.context?.disableRevalidate && normalizedCacheRevalidation.enabled) {\n try {\n await executeThemeRevalidation({\n tags: normalizedCacheRevalidation.tags,\n paths: normalizedCacheRevalidation.paths,\n enableLogging,\n logger: req?.payload?.logger,\n })\n } catch {\n // no-op: logging is handled in executeThemeRevalidation\n }\n }\n return doc\n },\n ],\n },\n }\n\n const globals = Array.isArray(config.globals) ? config.globals : []\n\n // Check if global already exists\n const existingIndex = globals.findIndex((g) => g.slug === standaloneCollectionSlug)\n\n if (existingIndex !== -1) {\n if (enableLogging) {\n console.warn(\n `🎨 Theme Management Plugin: global \"${standaloneCollectionSlug}\" already exists, skipping creation.`,\n )\n }\n return config\n }\n\n const currentEndpoints = ensureEndpointsArray(config.endpoints)\n const cacheEndpoint = createCacheRevalidationEndpoint({\n cacheRevalidation: normalizedCacheRevalidation,\n enableLogging,\n })\n const endpoints = mergeEndpoint(currentEndpoints, cacheEndpoint)\n\n return {\n ...config,\n endpoints,\n globals: [...globals, standaloneGlobal],\n }\n }\n\n // Otherwise, add as tab to existing collection\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(`🎨 Theme Management Plugin: enhancing collection \"${collection.slug}\"`)\n }\n\n const existingFields = Array.isArray(collection.fields) ? collection.fields : []\n\n const fields = injectThemeTab(existingFields, themeTab, enableLogging)\n\n const admin = {\n ...collection.admin,\n ...createPreviewAdminConfig(normalizedLivePreview, enableLogging),\n }\n\n return {\n ...collection,\n fields,\n admin,\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 const currentEndpoints = ensureEndpointsArray(config.endpoints)\n const cacheEndpoint = createCacheRevalidationEndpoint({\n cacheRevalidation: normalizedCacheRevalidation,\n enableLogging,\n })\n const endpoints = mergeEndpoint(currentEndpoints, cacheEndpoint)\n\n return {\n ...config,\n endpoints,\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 = typeof options === 'string' ? { tenantSlug: options } : (options ?? {})\n\n const {\n tenantSlug,\n collectionSlug = 'site-settings', // Can be overridden to 'appearance-settings' if using standalone\n depth,\n locale,\n draft,\n queryParams = {},\n useGlobal = false, // Set to true if using standalone global instead of collection\n } = normalizedOptions\n\n try {\n if (useGlobal) {\n // Fetch from global endpoint\n const params = new URLSearchParams()\n\n if (typeof depth === 'number') params.set('depth', String(depth))\n // For globals, keep tenant param for backwards compatibility, and also add where[...] filter\n if (tenantSlug) {\n params.set('tenant', tenantSlug)\n params.set('where[tenant][equals]', String(tenantSlug))\n }\n\n Object.entries(queryParams).forEach(([key, value]) => {\n if (value === undefined) return\n params.set(key, String(value))\n })\n\n const queryString = params.toString()\n const url = `/api/globals/${collectionSlug}${queryString ? `?${queryString}` : ''}`\n\n const response = await fetch(url)\n if (!response.ok) {\n throw new Error(`Failed to fetch theme global (status ${response.status})`)\n }\n\n const data = (await response.json()) as {\n themeConfiguration?: SiteThemeConfiguration\n }\n\n return data?.themeConfiguration ?? null\n } else {\n // Fetch from collection endpoint (legacy/default behavior)\n const params = new URLSearchParams({ limit: '1' })\n\n if (typeof depth === 'number') params.set('depth', String(depth))\n // For collections, use a where[tenant][equals] filter so Payload's find endpoint applies tenant scoping\n if (tenantSlug) params.set('where[tenant][equals]', String(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 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 }\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 allThemePresets.find((preset) => preset.name === themeName) || null\n}\n\nexport const getAvailableThemePresets = (): ThemePreset[] => {\n return allThemePresets\n}\n\nexport { defaultThemePresets, allThemePresets } from './presets.js'\nexport type { ThemePreset, ThemeTypographyPreset } from './presets.js'\nexport type { ThemeTab } from './fields/themeConfigurationField.js'\nexport {\n extendedThemePresets,\n allExtendedThemePresets,\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 {\n ThemeManagementPluginOptions,\n ThemeManagementCacheRevalidationOptions,\n FetchThemeConfigurationOptions,\n ThemeManagementLivePreviewOptions,\n ThemeManagementLivePreviewUrlArgs,\n} 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\n// Dynamic theme CSS generation\nexport {\n generateThemeCSS as generatePresetCSS,\n generateAllThemesCSS,\n} from './utils/generateThemeCSS.js'\nexport { getThemeDynamicCSS, getAllDynamicThemesCSS } from './utils/themeCSS.js'\n\nexport type { Mode, ThemeDefaults } from './providers/Theme/types.js'\nexport { ThemeProvider } from './providers/Theme/index.js'\n\n// Font loading utilities for Next.js integration\nexport {\n getFontLoaderCode,\n getThemeFontFamilies,\n ThemeFontProvider,\n useThemeFonts,\n FONT_IMPORT_MAP,\n} from './providers/font-loader.js'\n\n// Note: Do NOT re-export client components from the root entry to avoid\n// server-side evaluation during `payload generate:importmap`.\n// If needed, import directly from subpath: `@kilivi/payloadcms-theme-management/fields/ThemeLivePreview`\n\nexport const ThemeManagementPlugin = themeManagementPlugin\n/** @deprecated use {@link themeManagementPlugin} */\nexport const themeConfigurationPlugin = themeManagementPlugin\n\n// Export plugin translations for consumers to merge into their payload translations\nexport {\n translations,\n getTranslations,\n registerTranslations,\n availableLanguages,\n} from './translations.js'\n\nexport default themeManagementPlugin\n"],"names":["createThemeConfigurationField","allThemePresets","getTranslations","translations","THEME_FIELD_NAME","removeExistingThemeField","fields","filter","field","candidate","name","findTabsField","type","removeExistingThemeTab","tabs","knownLabels","Object","values","map","t","tabLabel","tab","labelValues","label","matchesKnown","some","v","includes","injectThemeTab","themeTab","enableLogging","sanitizedFields","tabsField","console","warn","newTabsField","sanitizedTabs","updatedTabs","log","updatedTabsField","ensureCollectionsArray","collections","Array","isArray","ensureEndpointsArray","endpoints","normalizeLivePreviewOptions","livePreview","enabled","pageCollection","pageSlug","fallbackToFirstPage","tenantField","tenantQueryParam","breakpoints","undefined","raw","url","dedupeStrings","Set","value","trim","length","normalizeRoutePath","path","startsWith","normalizeCacheRevalidationOptions","args","cacheRevalidation","standaloneCollectionSlug","useStandaloneCollection","injectRoute","routePath","tags","paths","defaultTag","secret","asRecord","pickString","extractTenantValue","tenantRecord","id","slug","tenant","resolveTenantSlug","req","data","fromData","query","URLSearchParams","get","queryRecord","fromQuery","tenantSlug","tenantId","userRecord","user","fromUser","headers","Headers","headerRecord","buildDefaultPreviewPath","normalizedSlug","basePath","separator","encodeURIComponent","resolveLivePreviewUrl","tenantWhere","equals","homeWhere","and","preferredPageResponse","payload","find","collection","where","depth","draft","limit","overrideAccess","pagination","page","docs","fallbackResponse","pageRecord","resolvedPageSlug","error","logger","createPreviewAdminConfig","normalizedLivePreview","preview","options","readSecretFromRequest","requestRecord","headersValue","fromHeaders","requestWithJson","body","json","bodyRecord","fromBody","executeThemeRevalidation","revalidatePath","revalidateTag","forEach","tag","info","join","createCacheRevalidationEndpoint","method","handler","reqRecord","providedSecret","jsonResponse","result","ok","revalidated","mergeEndpoint","endpoint","withoutExisting","record","toLowerCase","status","Response","themeManagementPlugin","config","targetCollection","standaloneCollectionLabel","themePresets","defaultTheme","includeColorModeToggle","includeCustomCSS","includeBrandIdentity","enableAdvancedFeatures","normalizedCacheRevalidation","useThemePreviewField","tabFields","beforeChangeHook","themeConfiguration","theme","themeName","selectedPreset","p","lightMode","darkMode","isLightModeEmpty","background","isDarkModeEmpty","standaloneGlobal","admin","group","access","accessObj","read","create","update","delete","hooks","beforeChange","afterChange","doc","context","disableRevalidate","globals","existingIndex","findIndex","g","currentEndpoints","cacheEndpoint","collectionTouched","existingFields","fetchThemeConfiguration","normalizedOptions","collectionSlug","locale","queryParams","useGlobal","params","set","String","entries","key","queryString","toString","response","fetch","Error","getThemePreset","preset","getAvailableThemePresets","defaultThemePresets","extendedThemePresets","allExtendedThemePresets","extendedThemeToCSSVariables","applyExtendedTheme","generateExtendedThemeCSS","resetExtendedTheme","getExtendedThemeTokens","createUseExtendedTheme","getTailwindVarReferences","DEFAULT_THEME_CONFIGURATION","resolveThemeConfiguration","generateThemeColorsCss","hexToHsl","generateThemeCSS","getThemeStyles","getThemeHtmlAttributes","generatePresetCSS","generateAllThemesCSS","getThemeDynamicCSS","getAllDynamicThemesCSS","ThemeProvider","getFontLoaderCode","getThemeFontFamilies","ThemeFontProvider","useThemeFonts","FONT_IMPORT_MAP","ThemeManagementPlugin","themeConfigurationPlugin","registerTranslations","availableLanguages"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { CollectionConfig, Config, Field, GlobalConfig, Plugin, TabsField } from 'payload'\nimport { DEFAULT_LIVE_PREVIEW_BREAKPOINTS } from './constants/devicePreviews.js'\nimport { createThemeConfigurationField } from './fields/themeConfigurationField.js'\nimport type { ThemeTab } from './fields/themeConfigurationField.js'\nimport type { SiteThemeConfiguration } from './payload-types.js'\nimport type { ThemePreset } from './presets.js'\nimport { allThemePresets } from './presets.js'\nimport { mergeThemeManagementI18n } from './i18n.js'\nimport { getTranslations, translations } from './translations.js'\nimport type {\n FetchThemeConfigurationOptions,\n PluginLogger,\n ThemeManagementLivePreviewOptions,\n ThemeManagementLivePreviewUrlArgs,\n ThemeManagementPluginOptions,\n} from './types.js'\n\nconst THEME_FIELD_NAME = 'themeConfiguration'\n\n/**\n * Removes existing theme configuration from a group field (legacy)\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\n/**\n * Finds the tabs field in the collection fields array\n */\nconst findTabsField = (fields: Field[] = []): TabsField | null => {\n for (const field of fields) {\n if (field.type === 'tabs') {\n return field as TabsField\n }\n }\n return null\n}\n\n/**\n * Removes existing Appearance Settings tab if it exists\n */\nconst removeExistingThemeTab = (\n tabs: NonNullable<TabsField['tabs']>,\n): NonNullable<TabsField['tabs']> => {\n const knownLabels = Object.values(translations).map((t) => t.tabLabel)\n return tabs.filter((tab) => {\n // Normalize label to string (support localized object or plain string)\n let labelValues: string[] = []\n if (typeof tab.label === 'object' && tab.label !== null) {\n labelValues = Object.values(tab.label as Record<string, string>)\n } else if (typeof tab.label === 'string') {\n labelValues = [tab.label]\n }\n\n // If any of the label values match a known plugin tab label, remove it\n const matchesKnown = labelValues.some((v) => knownLabels.includes(v))\n\n return !matchesKnown\n })\n}\n\n/**\n * Injects theme tab into existing tabs field\n */\nconst injectThemeTab = (\n fields: Field[] | undefined,\n themeTab: ThemeTab,\n enableLogging: boolean,\n): Field[] => {\n // First, remove any legacy theme field (group-based)\n const sanitizedFields = removeExistingThemeField(fields ?? [])\n\n // Find the tabs field\n const tabsField = findTabsField(sanitizedFields)\n\n if (!tabsField || !tabsField.tabs) {\n if (enableLogging) {\n console.warn('Theme Management Plugin: No tabs field found. Creating a new tabs structure.')\n }\n\n // If no tabs exist, create a basic tabs structure with just the theme tab\n const newTabsField: TabsField = {\n type: 'tabs',\n tabs: [themeTab],\n }\n\n return [...sanitizedFields, newTabsField]\n }\n\n // Remove existing theme tab if present\n const sanitizedTabs = removeExistingThemeTab(tabsField.tabs)\n\n // Add theme tab to the end\n const updatedTabs = [...sanitizedTabs, themeTab]\n\n if (enableLogging) {\n console.log('Theme Management Plugin: injecting Appearance Settings tab')\n }\n\n // Update the tabs field\n const updatedTabsField: TabsField = {\n ...tabsField,\n tabs: updatedTabs,\n }\n\n // Replace the old tabs field with the updated one\n return sanitizedFields.map((field) => (field.type === 'tabs' ? updatedTabsField : field))\n}\n\nconst ensureCollectionsArray = (collections: Config['collections']): CollectionConfig[] =>\n Array.isArray(collections) ? collections : []\n\nconst ensureEndpointsArray = (endpoints: Config['endpoints']): NonNullable<Config['endpoints']> =>\n Array.isArray(endpoints) ? endpoints : []\n\ntype NormalizedLivePreviewOptions = {\n enabled: boolean\n injectRoute: boolean\n routePath: string\n pageCollection: string\n pageSlug: string\n fallbackToFirstPage: boolean\n tenantField: string\n tenantQueryParam: string\n breakpoints?: ThemeManagementLivePreviewOptions['breakpoints']\n url?: ThemeManagementLivePreviewOptions['url']\n}\n\ntype NormalizedCacheRevalidationOptions = {\n enabled: boolean\n injectRoute: boolean\n routePath: string\n secret?: string\n tags: string[]\n paths: string[]\n}\n\ntype MinimalPayloadRequest = ThemeManagementLivePreviewUrlArgs['req']\n\nconst normalizeLivePreviewOptions = (\n livePreview: ThemeManagementPluginOptions['livePreview'],\n): NormalizedLivePreviewOptions => {\n if (!livePreview) {\n // undefined or false → live preview not configured; show ThemePreviewField instead\n return {\n enabled: false,\n injectRoute: false,\n routePath: '/theme/preview',\n pageCollection: 'pages',\n pageSlug: 'home',\n fallbackToFirstPage: true,\n tenantField: 'tenant',\n tenantQueryParam: 'tenant',\n breakpoints: undefined,\n }\n }\n\n const raw = typeof livePreview === 'object' ? livePreview : {}\n\n return {\n enabled: raw.enabled ?? true,\n injectRoute: raw.injectRoute ?? false,\n routePath: normalizeRoutePath(raw.routePath),\n pageCollection: raw.pageCollection ?? 'pages',\n pageSlug: raw.pageSlug ?? 'home',\n fallbackToFirstPage: raw.fallbackToFirstPage ?? true,\n tenantField: raw.tenantField ?? 'tenant',\n tenantQueryParam: raw.tenantQueryParam ?? 'tenant',\n breakpoints: raw.breakpoints ?? DEFAULT_LIVE_PREVIEW_BREAKPOINTS,\n url: raw.url,\n }\n}\n\nconst dedupeStrings = (values: (string | undefined)[]): string[] => [\n ...new Set(\n values.filter((value): value is string => typeof value === 'string' && value.trim().length > 0),\n ),\n]\n\nconst normalizeRoutePath = (path: string | undefined): string => {\n if (!path || !path.trim()) {\n return '/theme/revalidate'\n }\n\n return path.startsWith('/') ? path : `/${path}`\n}\n\nconst normalizeCacheRevalidationOptions = (args: {\n cacheRevalidation: ThemeManagementPluginOptions['cacheRevalidation']\n standaloneCollectionSlug: string\n useStandaloneCollection: boolean\n}): NormalizedCacheRevalidationOptions => {\n const { cacheRevalidation, standaloneCollectionSlug, useStandaloneCollection } = args\n\n if (cacheRevalidation === false) {\n return {\n enabled: false,\n injectRoute: false,\n routePath: '/theme/revalidate',\n tags: [],\n paths: [],\n }\n }\n\n const raw = typeof cacheRevalidation === 'object' && cacheRevalidation ? cacheRevalidation : {}\n const defaultTag = `global_${standaloneCollectionSlug}`\n\n return {\n enabled: raw.enabled ?? useStandaloneCollection,\n injectRoute: raw.injectRoute ?? true,\n routePath: normalizeRoutePath(raw.routePath),\n secret: raw.secret,\n tags: dedupeStrings([defaultTag, ...(raw.tags ?? [])]),\n paths: dedupeStrings(raw.paths ?? []),\n }\n}\n\nconst asRecord = (value: unknown): Record<string, unknown> | undefined => {\n if (value && typeof value === 'object') {\n return value as Record<string, unknown>\n }\n return undefined\n}\n\nconst pickString = (value: unknown): string | undefined => {\n if (typeof value === 'string' && value.trim()) return value\n return undefined\n}\n\nconst extractTenantValue = (value: unknown): string | undefined => {\n if (!value) return undefined\n if (typeof value === 'string') return pickString(value)\n\n const tenantRecord = asRecord(value)\n if (!tenantRecord) return undefined\n\n return (\n pickString(tenantRecord.id) ??\n pickString(tenantRecord.slug) ??\n pickString(tenantRecord.value) ??\n pickString(tenantRecord.tenant)\n )\n}\n\nconst resolveTenantSlug = (\n req: MinimalPayloadRequest,\n tenantField: string,\n data?: Record<string, unknown>,\n): string | undefined => {\n const fromData = extractTenantValue(data?.[tenantField])\n if (fromData) return fromData\n\n const query = req.query\n if (query && typeof URLSearchParams !== 'undefined' && query instanceof URLSearchParams) {\n return (\n pickString(query.get('tenant')) ??\n pickString(query.get('tenantSlug')) ??\n pickString(query.get('tenantId'))\n )\n }\n\n const queryRecord = asRecord(query)\n const fromQuery =\n extractTenantValue(queryRecord?.tenant) ??\n extractTenantValue(queryRecord?.tenantSlug) ??\n extractTenantValue(queryRecord?.tenantId)\n if (fromQuery) return fromQuery\n\n const userRecord = asRecord(req.user)\n const fromUser =\n extractTenantValue(userRecord?.[tenantField]) ??\n extractTenantValue(userRecord?.tenant) ??\n extractTenantValue(userRecord?.tenantSlug)\n if (fromUser) return fromUser\n\n const headers = req.headers\n if (headers && typeof Headers !== 'undefined' && headers instanceof Headers) {\n return (\n pickString(headers.get('x-tenant-id')) ??\n pickString(headers.get('x-tenant')) ??\n pickString(headers.get('payload-tenant'))\n )\n }\n\n const headerRecord = asRecord(headers)\n return (\n extractTenantValue(headerRecord?.['x-tenant-id']) ??\n extractTenantValue(headerRecord?.['x-tenant']) ??\n extractTenantValue(headerRecord?.['payload-tenant'])\n )\n}\n\nconst buildDefaultPreviewPath = (\n pageSlug: string,\n tenantSlug: string | undefined,\n tenantQueryParam: string,\n): string => {\n const normalizedSlug = pageSlug === 'home' ? '' : pageSlug\n const basePath = normalizedSlug ? `/${normalizedSlug}` : '/'\n\n if (!tenantSlug) {\n return basePath\n }\n\n const separator = basePath.includes('?') ? '&' : '?'\n return `${basePath}${separator}${tenantQueryParam}=${encodeURIComponent(tenantSlug)}`\n}\n\nconst resolveLivePreviewUrl = async (args: {\n req: MinimalPayloadRequest\n data?: Record<string, unknown>\n livePreview: NormalizedLivePreviewOptions\n enableLogging: boolean\n}): Promise<string> => {\n const { req, data, livePreview, enableLogging } = args\n\n const tenantSlug = resolveTenantSlug(req, livePreview.tenantField, data)\n\n const tenantWhere = tenantSlug\n ? {\n [livePreview.tenantField]: {\n equals: tenantSlug,\n },\n }\n : undefined\n\n const homeWhere = {\n and: [\n {\n slug: {\n equals: livePreview.pageSlug,\n },\n },\n ...(tenantWhere ? [tenantWhere] : []),\n ],\n }\n\n try {\n const preferredPageResponse = await req.payload.find({\n collection: livePreview.pageCollection,\n where: homeWhere,\n depth: 0,\n draft: true,\n limit: 1,\n overrideAccess: true,\n pagination: false,\n })\n\n let page = preferredPageResponse?.docs?.[0]\n\n if (!page && livePreview.fallbackToFirstPage) {\n const fallbackResponse = await req.payload.find({\n collection: livePreview.pageCollection,\n where: tenantWhere,\n depth: 0,\n draft: true,\n limit: 1,\n overrideAccess: true,\n pagination: false,\n })\n\n page = fallbackResponse?.docs?.[0]\n }\n\n const pageRecord = asRecord(page)\n const resolvedPageSlug = pickString(pageRecord?.slug) ?? livePreview.pageSlug\n\n if (livePreview.url) {\n return await livePreview.url({\n page: pageRecord,\n pageSlug: resolvedPageSlug,\n tenantSlug,\n req,\n })\n }\n\n return buildDefaultPreviewPath(resolvedPageSlug, tenantSlug, livePreview.tenantQueryParam)\n } catch (error) {\n if (enableLogging) {\n req.payload.logger?.warn?.('Theme Management Plugin: live preview URL fallback used', error)\n }\n\n return buildDefaultPreviewPath(livePreview.pageSlug, tenantSlug, livePreview.tenantQueryParam)\n }\n}\n\nconst createPreviewAdminConfig = (\n normalizedLivePreview: NormalizedLivePreviewOptions,\n enableLogging: boolean,\n) => {\n if (!normalizedLivePreview.enabled) {\n return {}\n }\n\n return {\n livePreview: {\n breakpoints: normalizedLivePreview.breakpoints,\n url: ({ data, req }: { data?: unknown; req: unknown }) =>\n resolveLivePreviewUrl({\n req: req as MinimalPayloadRequest,\n data: asRecord(data),\n livePreview: normalizedLivePreview,\n enableLogging,\n }),\n },\n preview: (data: Record<string, unknown>, options: { req?: unknown }) => {\n const req = options?.req\n if (!req) return null\n\n return resolveLivePreviewUrl({\n req: req as MinimalPayloadRequest,\n data,\n livePreview: normalizedLivePreview,\n enableLogging,\n })\n },\n }\n}\n\nconst readSecretFromRequest = async (req: unknown): Promise<string | undefined> => {\n const requestRecord = asRecord(req)\n const headersValue = requestRecord?.headers\n\n if (headersValue && typeof Headers !== 'undefined' && headersValue instanceof Headers) {\n return (\n pickString(headersValue.get('x-theme-revalidate-secret')) ??\n pickString(headersValue.get('x-revalidate-secret'))\n )\n }\n\n const headerRecord = asRecord(headersValue)\n const fromHeaders =\n pickString(headerRecord?.['x-theme-revalidate-secret']) ??\n pickString(headerRecord?.['x-revalidate-secret'])\n if (fromHeaders) {\n return fromHeaders\n }\n\n const requestWithJson = req as { json?: () => Promise<unknown> }\n const body =\n typeof requestWithJson?.json === 'function' ? await requestWithJson.json() : undefined\n const bodyRecord = asRecord(body)\n const fromBody = pickString(bodyRecord?.secret)\n if (fromBody) {\n return fromBody\n }\n\n const queryRecord = asRecord(requestRecord?.query)\n return pickString(queryRecord?.secret)\n}\n\nconst executeThemeRevalidation = async (options: {\n tags: string[]\n paths: string[]\n enableLogging: boolean\n logger?: PluginLogger\n}): Promise<{ tags: string[]; paths: string[] }> => {\n const { tags, paths, enableLogging, logger } = options\n\n try {\n const { revalidatePath, revalidateTag } = await import('next/cache')\n\n tags.forEach((tag) => revalidateTag(tag))\n paths.forEach((path) => revalidatePath(path))\n\n if (enableLogging) {\n logger?.info?.(\n `Theme Management Plugin: revalidated cache tags=[${tags.join(', ')}] paths=[${paths.join(', ')}]`,\n )\n }\n } catch (error) {\n if (enableLogging) {\n logger?.error?.('Theme Management Plugin: cache invalidation failed:', error)\n }\n throw error\n }\n\n return { tags, paths }\n}\n\nconst readQueryStringFromRequest = (req: unknown, paramName: string): string | undefined => {\n const reqRecord = asRecord(req)\n\n // Try URLSearchParams from native fetch/Node.js\n const queryValue = reqRecord?.query\n if (\n queryValue &&\n typeof URLSearchParams !== 'undefined' &&\n queryValue instanceof URLSearchParams\n ) {\n return pickString(queryValue.get(paramName))\n }\n\n // Try object form (common in Payload)\n const queryRecord = asRecord(queryValue)\n if (queryRecord) {\n const rawValue = queryRecord[paramName]\n if (Array.isArray(rawValue)) {\n return pickString(rawValue[0])\n }\n return pickString(rawValue)\n }\n\n // Try manual URL parsing as fallback\n const urlValue = pickString(reqRecord?.url) ?? pickString(reqRecord?.originalUrl)\n if (urlValue) {\n try {\n const url = new URL(urlValue, 'http://localhost')\n return pickString(url.searchParams.get(paramName))\n } catch {\n // Ignore parse errors\n }\n }\n\n return undefined\n}\n\nconst createLivePreviewEndpoint = (options: {\n livePreview: NormalizedLivePreviewOptions\n enableLogging: boolean\n}) => {\n const { livePreview, enableLogging } = options\n\n if (!livePreview.enabled || !livePreview.injectRoute) {\n return null\n }\n\n return {\n path: livePreview.routePath,\n method: 'get',\n handler: async (req: unknown) => {\n const previewSecret = process.env.PREVIEW_SECRET ?? process.env.PAYLOAD_PREVIEW_SECRET\n\n if (previewSecret) {\n const providedSecret =\n readQueryStringFromRequest(req, 'previewSecret') ??\n readQueryStringFromRequest(req, 'preview')\n if (providedSecret !== previewSecret) {\n return jsonResponse({ error: 'Unauthorized' }, 401)\n }\n }\n\n const pageSlug = readQueryStringFromRequest(req, 'pageSlug') ?? livePreview.pageSlug\n const tenantSlug = readQueryStringFromRequest(req, 'tenant')\n\n // Redirect to the actual client page (standard Payload live preview behavior)\n const destination = buildDefaultPreviewPath(\n pageSlug,\n tenantSlug,\n livePreview.tenantQueryParam,\n )\n\n if (enableLogging) {\n console.log('Theme Management Plugin: live preview redirect', destination)\n }\n\n return {\n status: 307,\n headers: {\n Location: destination,\n },\n }\n },\n }\n}\n\nconst createCacheRevalidationEndpoint = (options: {\n cacheRevalidation: NormalizedCacheRevalidationOptions\n enableLogging: boolean\n}) => {\n const { cacheRevalidation, enableLogging } = options\n\n if (!cacheRevalidation.enabled || !cacheRevalidation.injectRoute) {\n return null\n }\n\n return {\n path: cacheRevalidation.routePath,\n method: 'post',\n handler: async (req: unknown) => {\n const reqRecord = asRecord(req)\n const payload = asRecord(reqRecord?.payload)\n const logger = payload?.logger as PluginLogger | undefined\n\n if (cacheRevalidation.secret) {\n const providedSecret = await readSecretFromRequest(req)\n if (providedSecret !== cacheRevalidation.secret) {\n return jsonResponse({ error: 'Unauthorized' }, 401)\n }\n }\n\n try {\n const result = await executeThemeRevalidation({\n tags: cacheRevalidation.tags,\n paths: cacheRevalidation.paths,\n enableLogging,\n logger,\n })\n\n return jsonResponse({ ok: true, revalidated: result })\n } catch {\n return jsonResponse({ ok: false, error: 'Revalidation failed' }, 500)\n }\n },\n }\n}\n\nconst mergeEndpoint = (\n endpoints: NonNullable<Config['endpoints']>,\n endpoint: unknown,\n): NonNullable<Config['endpoints']> => {\n if (!endpoint) {\n return endpoints\n }\n\n const record = endpoint as unknown as { path?: string; method?: string }\n\n const withoutExisting = endpoints.filter((candidate) => {\n const candidateRecord = candidate as unknown as { path?: string; method?: string }\n return !(\n candidateRecord?.path === record?.path &&\n typeof candidateRecord.method === 'string' &&\n typeof record.method === 'string' &&\n candidateRecord.method.toLowerCase() === record.method.toLowerCase()\n )\n })\n\n return [...withoutExisting, endpoint as unknown as NonNullable<Config['endpoints']>[number]]\n}\n\nconst jsonResponse = (body: Record<string, unknown>, status = 200): unknown => {\n if (typeof Response !== 'undefined' && typeof Response.json === 'function') {\n return Response.json(body, { status })\n }\n\n return {\n status,\n json: async () => body,\n }\n}\n\nexport const themeManagementPlugin = (options: ThemeManagementPluginOptions = {}): Plugin => {\n return (config: Config): Config => {\n const {\n enabled = true,\n targetCollection = 'site-settings',\n useStandaloneCollection = false,\n standaloneCollectionSlug = 'appearance-settings',\n // Allow either string or localized object; default comes from plugin translations\n standaloneCollectionLabel = getTranslations().standaloneCollectionLabel,\n themePresets = allThemePresets,\n defaultTheme = 'cool',\n includeColorModeToggle = true,\n includeCustomCSS = true,\n customThemeConfigurationFields,\n customThemeConfigurationSections,\n includeBrandIdentity = false,\n enableAdvancedFeatures = true,\n enableLogging = false,\n livePreview = true,\n cacheRevalidation,\n i18n,\n } = options\n\n const normalizedLivePreview = normalizeLivePreviewOptions(livePreview)\n const normalizedCacheRevalidation = normalizeCacheRevalidationOptions({\n cacheRevalidation,\n standaloneCollectionSlug,\n useStandaloneCollection,\n })\n\n if (!enabled) {\n if (enableLogging) {\n console.log('Theme Management Plugin: disabled via options, skipping.')\n }\n return config\n }\n\n // Register the plugin's translations into Payload's native i18n\n // (`theme-management` namespace), merging in any user-provided extensions or\n // overrides. This config is used as the base for every return path below.\n const configWithI18n: Config = {\n ...config,\n i18n: mergeThemeManagementI18n(config.i18n, i18n),\n }\n\n const themeTab = createThemeConfigurationField({\n themePresets,\n defaultTheme,\n includeColorModeToggle,\n includeCustomCSS,\n customThemeConfigurationFields,\n customThemeConfigurationSections,\n includeBrandIdentity: includeBrandIdentity ?? false,\n enableAdvancedFeatures,\n // Always show the static ModePreview panel; it hides at runtime when the user\n // actively enters livePreview mode (isLivePreviewing = true in context).\n useThemePreviewField: true,\n })\n\n // If using standalone collection, create a new global\n if (useStandaloneCollection) {\n if (enableLogging) {\n console.log(\n `Theme Management Plugin: creating standalone global \"${standaloneCollectionSlug}\"`,\n )\n }\n\n // Extract the fields from the tab directly (no wrapping in group)\n const tabFields = (themeTab.fields ?? []) as Field[]\n\n /**\n * Hook to auto-populate lightMode and darkMode colors when theme changes\n */\n type BeforeChangeArgs = {\n data?: {\n themeConfiguration?: {\n theme?: string\n lightMode?: Record<string, unknown>\n darkMode?: Record<string, unknown>\n }\n }\n }\n\n const beforeChangeHook = async (args: BeforeChangeArgs) => {\n const { data } = args\n\n // If theme is being changed, auto-populate color modes\n if (data?.themeConfiguration?.theme) {\n const themeName = data.themeConfiguration.theme\n const selectedPreset = themePresets.find((p) => p.name === themeName)\n\n if (selectedPreset) {\n // Initialize light and dark mode colors from preset if not already set\n if (!data.themeConfiguration.lightMode) {\n data.themeConfiguration.lightMode = {}\n }\n if (!data.themeConfiguration.darkMode) {\n data.themeConfiguration.darkMode = {}\n }\n\n // Only populate if not manually edited (first time or empty)\n const isLightModeEmpty = !data.themeConfiguration.lightMode?.background\n const isDarkModeEmpty = !data.themeConfiguration.darkMode?.background\n\n if (isLightModeEmpty && selectedPreset.lightMode) {\n data.themeConfiguration.lightMode = { ...selectedPreset.lightMode }\n }\n\n if (isDarkModeEmpty && selectedPreset.darkMode) {\n data.themeConfiguration.darkMode = { ...selectedPreset.darkMode }\n }\n }\n }\n\n return data\n }\n\n const standaloneGlobal: GlobalConfig = {\n slug: standaloneCollectionSlug,\n label: standaloneCollectionLabel,\n admin: {\n group: 'Settings',\n ...createPreviewAdminConfig(normalizedLivePreview, enableLogging),\n },\n // Provide a broad access object but cast to GlobalConfig['access'] to satisfy types\n access: ((): GlobalConfig['access'] => {\n const accessObj = {\n read: () => true,\n create: ({ req }: { req?: { user?: unknown } }) => !!req?.user,\n update: ({ req }: { req?: { user?: unknown } }) => !!req?.user,\n delete: ({ req }: { req?: { user?: unknown } }) => !!req?.user,\n } as unknown as GlobalConfig['access']\n return accessObj\n })(),\n fields: tabFields,\n hooks: {\n beforeChange: [beforeChangeHook],\n afterChange: [\n async ({ doc, req }) => {\n // Invalidate cache after appearance settings change\n if (!req?.context?.disableRevalidate && normalizedCacheRevalidation.enabled) {\n try {\n await executeThemeRevalidation({\n tags: normalizedCacheRevalidation.tags,\n paths: normalizedCacheRevalidation.paths,\n enableLogging,\n logger: req?.payload?.logger as PluginLogger | undefined,\n })\n } catch {\n // no-op: logging is handled in executeThemeRevalidation\n }\n }\n return doc\n },\n ],\n },\n }\n\n const globals = Array.isArray(configWithI18n.globals) ? configWithI18n.globals : []\n\n // Check if global already exists\n const existingIndex = globals.findIndex((g) => g.slug === standaloneCollectionSlug)\n\n if (existingIndex !== -1) {\n if (enableLogging) {\n console.warn(\n `Theme Management Plugin: global \"${standaloneCollectionSlug}\" already exists, skipping creation.`,\n )\n }\n return configWithI18n\n }\n\n const currentEndpoints = ensureEndpointsArray(configWithI18n.endpoints)\n const livePreviewEndpoint = createLivePreviewEndpoint({\n livePreview: normalizedLivePreview,\n enableLogging,\n })\n let endpoints = mergeEndpoint(currentEndpoints, livePreviewEndpoint)\n const cacheEndpoint = createCacheRevalidationEndpoint({\n cacheRevalidation: normalizedCacheRevalidation,\n enableLogging,\n })\n endpoints = mergeEndpoint(endpoints, cacheEndpoint)\n\n return {\n ...configWithI18n,\n endpoints,\n globals: [...globals, standaloneGlobal],\n }\n }\n\n // Otherwise, add as tab to existing collection\n let collectionTouched = false\n\n const collections = ensureCollectionsArray(configWithI18n.collections).map((collection) => {\n if (collection.slug !== targetCollection) {\n return collection\n }\n\n collectionTouched = true\n\n if (enableLogging) {\n console.log(`Theme Management Plugin: enhancing collection \"${collection.slug}\"`)\n }\n\n const existingFields = Array.isArray(collection.fields) ? collection.fields : []\n\n const fields = injectThemeTab(existingFields, themeTab, enableLogging)\n\n const admin = {\n ...collection.admin,\n ...createPreviewAdminConfig(normalizedLivePreview, enableLogging),\n }\n\n return {\n ...collection,\n fields,\n admin,\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 configWithI18n\n }\n\n const currentEndpoints = ensureEndpointsArray(configWithI18n.endpoints)\n const livePreviewEndpoint = createLivePreviewEndpoint({\n livePreview: normalizedLivePreview,\n enableLogging,\n })\n let endpoints = mergeEndpoint(currentEndpoints, livePreviewEndpoint)\n const cacheEndpoint = createCacheRevalidationEndpoint({\n cacheRevalidation: normalizedCacheRevalidation,\n enableLogging,\n })\n endpoints = mergeEndpoint(endpoints, cacheEndpoint)\n\n return {\n ...configWithI18n,\n endpoints,\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 = typeof options === 'string' ? { tenantSlug: options } : (options ?? {})\n\n const {\n tenantSlug,\n collectionSlug = 'site-settings', // Can be overridden to 'appearance-settings' if using standalone\n depth,\n locale,\n draft,\n queryParams = {},\n useGlobal = false, // Set to true if using standalone global instead of collection\n signal,\n } = normalizedOptions\n\n try {\n if (useGlobal) {\n // Fetch from global endpoint\n const params = new URLSearchParams()\n\n if (typeof depth === 'number') params.set('depth', String(depth))\n // For globals, keep tenant param for backwards compatibility, and also add where[...] filter\n if (tenantSlug) {\n params.set('tenant', tenantSlug)\n params.set('where[tenant][equals]', String(tenantSlug))\n }\n\n Object.entries(queryParams).forEach(([key, value]) => {\n if (value === undefined) return\n params.set(key, String(value))\n })\n\n const queryString = params.toString()\n const url = `/api/globals/${collectionSlug}${queryString ? `?${queryString}` : ''}`\n\n const response = await fetch(url, { signal })\n if (!response.ok) {\n throw new Error(`Failed to fetch theme global (status ${response.status})`)\n }\n\n const data = (await response.json()) as {\n themeConfiguration?: SiteThemeConfiguration\n }\n\n return data?.themeConfiguration ?? null\n } else {\n // Fetch from collection endpoint (legacy/default behavior)\n const params = new URLSearchParams({ limit: '1' })\n\n if (typeof depth === 'number') params.set('depth', String(depth))\n // For collections, use a where[tenant][equals] filter so Payload's find endpoint applies tenant scoping\n if (tenantSlug) params.set('where[tenant][equals]', String(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 const response = await fetch(url, { signal })\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 }\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 allThemePresets.find((preset) => preset.name === themeName) || null\n}\n\nexport const getAvailableThemePresets = (): ThemePreset[] => {\n return allThemePresets\n}\n\nexport { defaultThemePresets, allThemePresets } from './presets.js'\nexport type { ThemePreset, ThemeTypographyPreset } from './presets.js'\nexport type { ThemeTab } from './fields/themeConfigurationField.js'\nexport {\n extendedThemePresets,\n allExtendedThemePresets,\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 {\n ThemeManagementPluginOptions,\n ThemeManagementCacheRevalidationOptions,\n FetchThemeConfigurationOptions,\n ThemeManagementLivePreviewOptions,\n ThemeManagementLivePreviewUrlArgs,\n PluginLogger,\n} from './types.js'\nexport type {\n SiteThemeConfiguration,\n ThemeColorOverride,\n ThemeTypographyOverride,\n ThemeCustomization,\n ThemeVisualEffects,\n ThemeComponentStyles,\n} from './payload-types.js'\nexport {\n DEFAULT_THEME_CONFIGURATION,\n resolveThemeConfiguration,\n} from './utils/resolveThemeConfiguration.js'\nexport type {\n ResolvedThemeConfiguration,\n ResolvedVisualEffects,\n ResolvedComponentStyles,\n} from './utils/resolveThemeConfiguration.js'\nexport { allStylePresets, stylePresetCategories } from './style-presets.js'\nexport type { StylePreset } from './style-presets.js'\nexport { generateThemeColorsCss, hexToHsl } from './utils/themeColors.js'\nexport { generateThemeCSS, getThemeStyles } from './utils/themeUtils.js'\nexport { getThemeHtmlAttributes } from './utils/themeHtmlAttributes.js'\n\n// Dynamic theme CSS generation\nexport {\n generateThemeCSS as generatePresetCSS,\n generateAllThemesCSS,\n} from './utils/generateThemeCSS.js'\nexport { getThemeDynamicCSS, getAllDynamicThemesCSS } from './utils/themeCSS.js'\n\nexport type { Mode, ThemeDefaults } from './providers/Theme/types.js'\nexport { ThemeProvider, useTheme } from './providers/Theme/index.js'\n\n// Font loading utilities for Next.js integration\nexport {\n getFontLoaderCode,\n getThemeFontFamilies,\n ThemeFontProvider,\n useThemeFonts,\n FONT_IMPORT_MAP,\n} from './providers/font-loader.js'\n\n// Note: Do NOT re-export client components from the root entry to avoid\n// server-side evaluation during `payload generate:importmap`.\n// If needed, import directly from subpath: `@kilivi/payloadcms-theme-management/fields/ThemeLivePreview`\n\nexport const ThemeManagementPlugin = themeManagementPlugin\n/** @deprecated use {@link themeManagementPlugin} */\nexport const themeConfigurationPlugin = themeManagementPlugin\n\n// Export plugin translations for consumers to merge into their payload translations\nexport {\n translations,\n getTranslations,\n registerTranslations,\n availableLanguages,\n THEME_MANAGEMENT_I18N_NAMESPACE,\n} from './translations.js'\nexport type { PluginTranslations, Language, DeepPartial } from './translations.js'\n\n// Native Payload i18n helpers (theme-management namespace)\nexport {\n mergeThemeManagementI18n,\n getThemeManagementI18nTranslations,\n} from './i18n.js'\nexport type {\n ThemeManagementI18nOptions,\n ThemeManagementI18nTranslations,\n} from './i18n.js'\n\nexport default themeManagementPlugin\n"],"names":["DEFAULT_LIVE_PREVIEW_BREAKPOINTS","createThemeConfigurationField","allThemePresets","mergeThemeManagementI18n","getTranslations","translations","THEME_FIELD_NAME","removeExistingThemeField","fields","filter","field","candidate","name","findTabsField","type","removeExistingThemeTab","tabs","knownLabels","Object","values","map","t","tabLabel","tab","labelValues","label","matchesKnown","some","v","includes","injectThemeTab","themeTab","enableLogging","sanitizedFields","tabsField","console","warn","newTabsField","sanitizedTabs","updatedTabs","log","updatedTabsField","ensureCollectionsArray","collections","Array","isArray","ensureEndpointsArray","endpoints","normalizeLivePreviewOptions","livePreview","enabled","injectRoute","routePath","pageCollection","pageSlug","fallbackToFirstPage","tenantField","tenantQueryParam","breakpoints","undefined","raw","normalizeRoutePath","url","dedupeStrings","Set","value","trim","length","path","startsWith","normalizeCacheRevalidationOptions","args","cacheRevalidation","standaloneCollectionSlug","useStandaloneCollection","tags","paths","defaultTag","secret","asRecord","pickString","extractTenantValue","tenantRecord","id","slug","tenant","resolveTenantSlug","req","data","fromData","query","URLSearchParams","get","queryRecord","fromQuery","tenantSlug","tenantId","userRecord","user","fromUser","headers","Headers","headerRecord","buildDefaultPreviewPath","normalizedSlug","basePath","separator","encodeURIComponent","resolveLivePreviewUrl","tenantWhere","equals","homeWhere","and","preferredPageResponse","payload","find","collection","where","depth","draft","limit","overrideAccess","pagination","page","docs","fallbackResponse","pageRecord","resolvedPageSlug","error","logger","createPreviewAdminConfig","normalizedLivePreview","preview","options","readSecretFromRequest","requestRecord","headersValue","fromHeaders","requestWithJson","body","json","bodyRecord","fromBody","executeThemeRevalidation","revalidatePath","revalidateTag","forEach","tag","info","join","readQueryStringFromRequest","paramName","reqRecord","queryValue","rawValue","urlValue","originalUrl","URL","searchParams","createLivePreviewEndpoint","method","handler","previewSecret","process","env","PREVIEW_SECRET","PAYLOAD_PREVIEW_SECRET","providedSecret","jsonResponse","destination","status","Location","createCacheRevalidationEndpoint","result","ok","revalidated","mergeEndpoint","endpoint","record","withoutExisting","candidateRecord","toLowerCase","Response","themeManagementPlugin","config","targetCollection","standaloneCollectionLabel","themePresets","defaultTheme","includeColorModeToggle","includeCustomCSS","customThemeConfigurationFields","customThemeConfigurationSections","includeBrandIdentity","enableAdvancedFeatures","i18n","normalizedCacheRevalidation","configWithI18n","useThemePreviewField","tabFields","beforeChangeHook","themeConfiguration","theme","themeName","selectedPreset","p","lightMode","darkMode","isLightModeEmpty","background","isDarkModeEmpty","standaloneGlobal","admin","group","access","accessObj","read","create","update","delete","hooks","beforeChange","afterChange","doc","context","disableRevalidate","globals","existingIndex","findIndex","g","currentEndpoints","livePreviewEndpoint","cacheEndpoint","collectionTouched","existingFields","fetchThemeConfiguration","normalizedOptions","collectionSlug","locale","queryParams","useGlobal","signal","params","set","String","entries","key","queryString","toString","response","fetch","Error","getThemePreset","preset","getAvailableThemePresets","defaultThemePresets","extendedThemePresets","allExtendedThemePresets","extendedThemeToCSSVariables","applyExtendedTheme","generateExtendedThemeCSS","resetExtendedTheme","getExtendedThemeTokens","createUseExtendedTheme","getTailwindVarReferences","DEFAULT_THEME_CONFIGURATION","resolveThemeConfiguration","allStylePresets","stylePresetCategories","generateThemeColorsCss","hexToHsl","generateThemeCSS","getThemeStyles","getThemeHtmlAttributes","generatePresetCSS","generateAllThemesCSS","getThemeDynamicCSS","getAllDynamicThemesCSS","ThemeProvider","useTheme","getFontLoaderCode","getThemeFontFamilies","ThemeFontProvider","useThemeFonts","FONT_IMPORT_MAP","ThemeManagementPlugin","themeConfigurationPlugin","registerTranslations","availableLanguages","THEME_MANAGEMENT_I18N_NAMESPACE","getThemeManagementI18nTranslations"],"mappings":"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"}
@@ -49,6 +49,27 @@ export interface ThemeCustomization {
49
49
  textColor?: string | null;
50
50
  customCSS?: string | null;
51
51
  }
52
+ export interface ThemeVisualEffects {
53
+ effectStyle?: 'flat' | 'elevated' | 'glass' | 'neumorphic' | 'clay' | null;
54
+ shadowIntensity?: 'none' | 'subtle' | 'medium' | 'strong' | 'dramatic' | null;
55
+ backdropBlur?: 'none' | 'slight' | 'medium' | 'strong' | 'heavy' | null;
56
+ borderStyle?: 'none' | 'solid' | 'dashed' | 'dotted' | 'double' | null;
57
+ borderWidth?: '0px' | '1px' | '2px' | '3px' | '4px' | null;
58
+ glassOpacity?: number | null;
59
+ }
60
+ export interface ThemeComponentStyles {
61
+ buttonVariant?: 'filled' | 'outlined' | 'ghost' | 'gradient' | 'pill' | 'brutal' | null;
62
+ buttonSize?: 'small' | 'medium' | 'large' | 'xl' | null;
63
+ cardStyle?: 'elevated' | 'flat' | 'bordered' | 'glass' | 'neumorphic' | 'gradient-border' | null;
64
+ cardHoverEffect?: 'none' | 'lift' | 'scale' | 'shadow' | 'glow' | 'tilt' | null;
65
+ imageStyle?: 'default' | 'rounded' | 'circle' | 'vignette' | 'grayscale' | 'duotone' | 'polaroid' | null;
66
+ iconSet?: 'lucide' | 'heroicons' | 'phosphor' | 'tabler' | 'font-awesome' | null;
67
+ navbarStyle?: 'solid' | 'transparent' | 'blur' | 'floating' | 'minimal' | null;
68
+ footerStyle?: 'standard' | 'minimal' | 'dark' | 'gradient-top' | 'full-color' | null;
69
+ linkStyle?: 'underline' | 'underline-hover' | 'none' | 'highlight' | 'animated' | null;
70
+ enableScrollReveal?: boolean | null;
71
+ enableHoverAnimations?: boolean | null;
72
+ }
52
73
  export interface SiteThemeConfiguration {
53
74
  theme?: string | null;
54
75
  preset?: string | null;
@@ -65,6 +86,9 @@ export interface SiteThemeConfiguration {
65
86
  customCSS?: string | null;
66
87
  customization?: ThemeCustomization | null;
67
88
  radius?: string | null;
89
+ visualEffects?: ThemeVisualEffects | null;
90
+ componentStyles?: ThemeComponentStyles | null;
91
+ stylePreset?: string | null;
68
92
  }
69
93
  export interface SiteSetting {
70
94
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"payload-types.d.ts","sourceRoot":"","sources":["../src/payload-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"payload-types.d.ts","sourceRoot":"","sources":["../src/payload-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
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
+ {"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 ThemeVisualEffects {\n effectStyle?: 'flat' | 'elevated' | 'glass' | 'neumorphic' | 'clay' | null\n shadowIntensity?: 'none' | 'subtle' | 'medium' | 'strong' | 'dramatic' | null\n backdropBlur?: 'none' | 'slight' | 'medium' | 'strong' | 'heavy' | null\n borderStyle?: 'none' | 'solid' | 'dashed' | 'dotted' | 'double' | null\n borderWidth?: '0px' | '1px' | '2px' | '3px' | '4px' | null\n glassOpacity?: number | null\n}\n\nexport interface ThemeComponentStyles {\n buttonVariant?: 'filled' | 'outlined' | 'ghost' | 'gradient' | 'pill' | 'brutal' | null\n buttonSize?: 'small' | 'medium' | 'large' | 'xl' | null\n cardStyle?: 'elevated' | 'flat' | 'bordered' | 'glass' | 'neumorphic' | 'gradient-border' | null\n cardHoverEffect?: 'none' | 'lift' | 'scale' | 'shadow' | 'glow' | 'tilt' | null\n imageStyle?:\n | 'default'\n | 'rounded'\n | 'circle'\n | 'vignette'\n | 'grayscale'\n | 'duotone'\n | 'polaroid'\n | null\n iconSet?: 'lucide' | 'heroicons' | 'phosphor' | 'tabler' | 'font-awesome' | null\n navbarStyle?: 'solid' | 'transparent' | 'blur' | 'floating' | 'minimal' | null\n footerStyle?: 'standard' | 'minimal' | 'dark' | 'gradient-top' | 'full-color' | null\n linkStyle?: 'underline' | 'underline-hover' | 'none' | 'highlight' | 'animated' | null\n enableScrollReveal?: boolean | null\n enableHoverAnimations?: boolean | 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 visualEffects?: ThemeVisualEffects | null\n componentStyles?: ThemeComponentStyles | null\n stylePreset?: 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,GA0ID,WAKC"}
package/dist/presets.d.ts CHANGED
@@ -38,6 +38,14 @@ export interface ThemePreset {
38
38
  lightMode?: Record<string, string>;
39
39
  darkMode?: Record<string, string>;
40
40
  typography?: ThemeTypographyPreset;
41
+ visualEffects?: {
42
+ effectStyle?: 'flat' | 'elevated' | 'glass' | 'neumorphic' | 'clay';
43
+ shadowIntensity?: 'none' | 'subtle' | 'medium' | 'strong' | 'dramatic';
44
+ backdropBlur?: 'none' | 'slight' | 'medium' | 'strong' | 'heavy';
45
+ borderStyle?: 'none' | 'solid' | 'dashed' | 'dotted' | 'double';
46
+ borderWidth?: '0px' | '1px' | '2px' | '3px' | '4px';
47
+ glassOpacity?: number;
48
+ };
41
49
  }
42
50
  export declare const defaultThemePresets: ThemePreset[];
43
51
  export declare const allThemePresets: ThemePreset[];
@@ -1 +1 @@
1
- {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE;QACX,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,aAAa,EAAE;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAA;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE;QACR,MAAM,EAAE;YACN,OAAO,EAAE,MAAM,CAAA;YACf,UAAU,EAAE,MAAM,CAAA;YAClB,MAAM,EAAE,MAAM,CAAA;SACf,CAAA;KACF,CAAA;IACD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;IACrC,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;IACxC,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;IACtC,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,UAAU,CAAC,EAAE,qBAAqB,CAAA;CACnC;AAED,eAAO,MAAM,mBAAmB,EAAE,WAAW,EAkkB5C,CAAA;AAGD,eAAO,MAAM,eAAe,EAAE,WAAW,EAAgD,CAAA"}
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE;QACX,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,aAAa,EAAE;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAA;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE;QACR,MAAM,EAAE;YACN,OAAO,EAAE,MAAM,CAAA;YACf,UAAU,EAAE,MAAM,CAAA;YAClB,MAAM,EAAE,MAAM,CAAA;SACf,CAAA;KACF,CAAA;IACD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;IACrC,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;IACxC,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;IACtC,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,UAAU,CAAC,EAAE,qBAAqB,CAAA;IAClC,aAAa,CAAC,EAAE;QACd,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,MAAM,CAAA;QACnE,eAAe,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAA;QACtE,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;QAChE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;QAC/D,WAAW,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;QACnD,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;CACF;AAED,eAAO,MAAM,mBAAmB,EAAE,WAAW,EAkkB5C,CAAA;AAGD,eAAO,MAAM,eAAe,EAAE,WAAW,EAAgD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/presets.ts"],"sourcesContent":["// Import extended color themes\nimport { extendedThemes } from './extended-themes.js'\n\nexport 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\n// Export all theme presets (default + extended)\nexport const allThemePresets: ThemePreset[] = [...defaultThemePresets, ...extendedThemes]\n"],"names":["extendedThemes","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","allThemePresets"],"mappings":"AAAA,+BAA+B;AAC/B,SAASA,cAAc,QAAQ,uBAAsB;AA6CrD,OAAO,MAAMC,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;AAED,gDAAgD;AAChD,OAAO,MAAMC,kBAAiC;OAAI3C;OAAwBD;CAAe,CAAA"}
1
+ {"version":3,"sources":["../src/presets.ts"],"sourcesContent":["// Import extended color themes\nimport { extendedThemes } from './extended-themes.js'\n\nexport 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 visualEffects?: {\n effectStyle?: 'flat' | 'elevated' | 'glass' | 'neumorphic' | 'clay'\n shadowIntensity?: 'none' | 'subtle' | 'medium' | 'strong' | 'dramatic'\n backdropBlur?: 'none' | 'slight' | 'medium' | 'strong' | 'heavy'\n borderStyle?: 'none' | 'solid' | 'dashed' | 'dotted' | 'double'\n borderWidth?: '0px' | '1px' | '2px' | '3px' | '4px'\n glassOpacity?: number\n }\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\n// Export all theme presets (default + extended)\nexport const allThemePresets: ThemePreset[] = [...defaultThemePresets, ...extendedThemes]\n"],"names":["extendedThemes","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","allThemePresets"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Theme/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA+E,MAAM,OAAO,CAAA;AAEnG,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAIvE,eAAO,MAAM,QAAQ,QAAO,gBAM3B,CAAA;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,YAAY,CAAC,EAAE,aAAa,CAAA;IAC5B,WAAW,CAAC,EAAE,IAAI,CAAA;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAoHtD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Theme/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA+E,MAAM,OAAO,CAAA;AAEnG,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAIvE,eAAO,MAAM,QAAQ,QAAO,gBAM3B,CAAA;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,YAAY,CAAC,EAAE,aAAa,CAAA;IAC5B,WAAW,CAAC,EAAE,IAAI,CAAA;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA+ItD,CAAA"}