@kilivi/payloadcms-theme-management 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -7
- package/dist/components/ServerThemeInjector.d.ts +13 -1
- package/dist/components/ServerThemeInjector.d.ts.map +1 -1
- package/dist/components/ServerThemeInjector.js +24 -1
- package/dist/components/ServerThemeInjector.js.map +1 -1
- package/dist/components/ThemeLivePreviewSync.d.ts +3 -0
- package/dist/components/ThemeLivePreviewSync.d.ts.map +1 -1
- package/dist/components/ThemeLivePreviewSync.js +28 -4
- package/dist/components/ThemeLivePreviewSync.js.map +1 -1
- package/dist/components/typographyPreviewUtils.d.ts +5 -0
- package/dist/components/typographyPreviewUtils.d.ts.map +1 -1
- package/dist/components/typographyPreviewUtils.js +16 -10
- package/dist/components/typographyPreviewUtils.js.map +1 -1
- package/dist/constants/themeFonts.d.ts +94 -168
- package/dist/constants/themeFonts.d.ts.map +1 -1
- package/dist/constants/themeFonts.js +260 -140
- package/dist/constants/themeFonts.js.map +1 -1
- package/dist/endpoints/themeFonts.d.ts +5 -0
- package/dist/endpoints/themeFonts.d.ts.map +1 -0
- package/dist/endpoints/themeFonts.js +138 -0
- package/dist/endpoints/themeFonts.js.map +1 -0
- package/dist/fields/AppearancePreviewField.d.ts.map +1 -1
- package/dist/fields/AppearancePreviewField.js +196 -133
- package/dist/fields/AppearancePreviewField.js.map +1 -1
- package/dist/fields/FontSelectField.css +155 -0
- package/dist/fields/FontSelectField.d.ts +4 -2
- package/dist/fields/FontSelectField.d.ts.map +1 -1
- package/dist/fields/FontSelectField.js +80 -118
- package/dist/fields/FontSelectField.js.map +1 -1
- package/dist/fields/StylePresetField.d.ts.map +1 -1
- package/dist/fields/StylePresetField.js +31 -30
- package/dist/fields/StylePresetField.js.map +1 -1
- package/dist/fields/ThemePreviewField.css +63 -1
- package/dist/fields/ThemePreviewField.d.ts.map +1 -1
- package/dist/fields/ThemePreviewField.js +2 -5
- package/dist/fields/ThemePreviewField.js.map +1 -1
- package/dist/fields/themeConfigurationField.d.ts.map +1 -1
- package/dist/fields/themeConfigurationField.js +320 -271
- package/dist/fields/themeConfigurationField.js.map +1 -1
- package/dist/hooks/useNativeLivePreview.d.ts +15 -0
- package/dist/hooks/useNativeLivePreview.d.ts.map +1 -0
- package/dist/hooks/useNativeLivePreview.js +18 -0
- package/dist/hooks/useNativeLivePreview.js.map +1 -0
- package/dist/hooks/useThemeFonts.d.ts +10 -0
- package/dist/hooks/useThemeFonts.d.ts.map +1 -0
- package/dist/hooks/useThemeFonts.js +36 -0
- package/dist/hooks/useThemeFonts.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/next-fonts.d.ts +3 -0
- package/dist/next-fonts.d.ts.map +1 -0
- package/dist/next-fonts.js +360 -0
- package/dist/next-fonts.js.map +1 -0
- package/dist/payload-types.d.ts +10 -6
- package/dist/payload-types.d.ts.map +1 -1
- package/dist/payload-types.js.map +1 -1
- package/dist/presets.d.ts +6 -0
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js.map +1 -1
- package/dist/style-presets.d.ts +27 -18
- package/dist/style-presets.d.ts.map +1 -1
- package/dist/style-presets.js +399 -217
- package/dist/style-presets.js.map +1 -1
- package/dist/translations.d.ts +5 -0
- package/dist/translations.d.ts.map +1 -1
- package/dist/translations.js +10 -0
- package/dist/translations.js.map +1 -1
- package/dist/utils/livePreviewThemeRuntime.d.ts +6 -1
- package/dist/utils/livePreviewThemeRuntime.d.ts.map +1 -1
- package/dist/utils/livePreviewThemeRuntime.js +11 -1
- package/dist/utils/livePreviewThemeRuntime.js.map +1 -1
- package/dist/utils/resolveThemeConfiguration.d.ts +15 -0
- package/dist/utils/resolveThemeConfiguration.d.ts.map +1 -1
- package/dist/utils/resolveThemeConfiguration.js +41 -8
- package/dist/utils/resolveThemeConfiguration.js.map +1 -1
- package/dist/utils/themeUtils.d.ts.map +1 -1
- package/dist/utils/themeUtils.js +60 -2
- package/dist/utils/themeUtils.js.map +1 -1
- package/package.json +5 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/themeUtils.ts"],"sourcesContent":["import type { ThemeTypographyPreset } from '../presets.js'\nimport { borderRadiusPresets } from '../providers/Theme/themeConfig.js'\nimport type { ResolvedThemeConfiguration } from './resolveThemeConfiguration.js'\n\ntype ThemeConfiguration = Omit<ResolvedThemeConfiguration, 'typography'> & {\n typography?: ResolvedThemeConfiguration['typography']\n}\n\ninterface ThemeCustomization {\n primaryColor?: string | null\n accentColor?: string | null\n backgroundColor?: string | null\n textColor?: string | null\n customCSS?: string | null\n}\n\ntype ThemeConfigurationWithCustomization = ThemeConfiguration & {\n customization?: ThemeCustomization | null\n}\n/**\n * Generates CSS custom properties from theme configuration\n */\nexport function generateThemeCSS(config: ThemeConfiguration): string {\n const cssRules: string[] = []\n const customization = (config as ThemeConfigurationWithCustomization).customization\n const themeSelector = config.theme ? `:root[data-theme='${config.theme}']` : ':root'\n\n // ── :root block — CSS custom properties ─────────────────────────────────\n cssRules.push(`${themeSelector} {`)\n applyCustomizationRootRules(cssRules, customization)\n applyBorderRadiusRule(cssRules, config)\n applyFontScaleRules(cssRules, config)\n applySpacingRule(cssRules, config)\n applyAnimationRule(cssRules, config)\n applyTypographyRules(cssRules, config)\n applyVisualEffectsCSSVars(cssRules, config)\n applyComponentStyleCSSVars(cssRules, config)\n cssRules.push('}')\n\n // ── Element-level effect rules (outside :root) ──────────────────────────\n applyEffectElementRules(cssRules, config)\n\n // ── Color mode overrides ────────────────────────────────────────────────\n applyDarkModeOverrides(cssRules, config, customization, themeSelector)\n\n // ── Animation: none — respect prefers-reduced-motion ───────────────────\n applyReducedMotionOverride(cssRules, config)\n\n // ── Custom CSS ──────────────────────────────────────────────────────────\n appendCustomCSS(cssRules, customization)\n\n return cssRules.join('\\n')\n}\n\n/**\n * Determines if a color is light or dark\n */\nfunction isLightBackground(color: string): boolean {\n // Simple heuristic: if it contains 'white', '#fff', or high RGB values, it's light\n const lightPatterns = [\n /white/i,\n /#f{3,6}/i,\n /rgb\\s*\\(\\s*([2-9]\\d{2}|1[5-9]\\d|1\\d{2}),/,\n /hsl\\s*\\([^)]*,\\s*[^,)]*,\\s*([7-9]\\d|100)%\\)/,\n ]\n\n return lightPatterns.some((pattern) => pattern.test(color))\n}\n\n/**\n * Generate theme styles for use in components\n */\nexport function getThemeStyles(config: ThemeConfiguration) {\n const styles: Record<string, string> = {}\n const customization = (config as ThemeConfigurationWithCustomization).customization\n\n applyCustomizationStyleOverrides(styles, customization)\n applyTypographyStyleOverrides(styles, config.typography)\n\n return styles\n}\n\nfunction applyCustomizationRootRules(\n rules: string[],\n customization: ThemeCustomization | null | undefined,\n): void {\n if (!customization) return\n\n if (customization.primaryColor) {\n rules.push(` --primary-custom: ${customization.primaryColor};`)\n }\n\n if (customization.accentColor) {\n rules.push(` --accent-custom: ${customization.accentColor};`)\n }\n\n if (customization.backgroundColor) {\n rules.push(` --background: ${customization.backgroundColor};`)\n rules.push(` --card: ${customization.backgroundColor};`)\n rules.push(` --popover: ${customization.backgroundColor};`)\n }\n\n if (customization.textColor) {\n rules.push(` --foreground: ${customization.textColor};`)\n }\n}\n\nfunction applyBorderRadiusRule(rules: string[], config: ThemeConfiguration): void {\n if (!config.borderRadius) return\n\n const preset = borderRadiusPresets[config.borderRadius]\n if (!preset) return\n\n const cssEntries = Object.entries(preset.css)\n cssEntries.forEach(([property, value]) => {\n rules.push(` ${property}: ${value};`)\n })\n\n const defaultRadius =\n preset.css['--radius-default'] ?? preset.css['--radius-medium'] ?? preset.css['--radius-large']\n if (defaultRadius) {\n rules.push(` --radius: ${defaultRadius};`)\n }\n}\n\nfunction applyFontScaleRules(rules: string[], config: ThemeConfiguration): void {\n if (!config.fontScale) return\n\n const scaleValues: Record<string, string> = {\n small: '0.9',\n medium: '1',\n large: '1.1',\n xl: '1.25',\n }\n\n const scale = scaleValues[config.fontScale] ?? '1'\n rules.push(` --font-scale: ${scale};`)\n rules.push(` --theme-font-scale: ${scale};`)\n\n const baseSizes: Record<string, string> = {\n 'text-xs': '0.75rem',\n 'text-sm': '0.875rem',\n 'text-base': '1rem',\n 'text-lg': '1.125rem',\n 'text-xl': '1.25rem',\n 'text-2xl': '1.5rem',\n 'text-3xl': '1.875rem',\n 'text-4xl': '2.25rem',\n }\n\n Object.entries(baseSizes).forEach(([className, baseSize]) => {\n const scaledSize = parseFloat(baseSize) * parseFloat(scale)\n rules.push(` --${className}: ${scaledSize}rem;`)\n })\n}\n\nfunction applySpacingRule(rules: string[], config: ThemeConfiguration): void {\n if (!config.spacing) return\n\n const spacingMultipliers: Record<string, string> = {\n compact: '0.75',\n medium: '1',\n spacious: '1.5',\n }\n\n const multiplier = spacingMultipliers[config.spacing] ?? '1'\n rules.push(` --spacing-scale: ${multiplier};`)\n rules.push(` --theme-spacing: ${multiplier};`)\n}\n\nfunction applyAnimationRule(rules: string[], config: ThemeConfiguration): void {\n if (!config.animationLevel) return\n\n const animationSettings: Record<string, { duration: string; easing: string; scale: string }> = {\n none: {\n duration: '0s',\n easing: 'linear',\n scale: '0',\n },\n reduced: {\n duration: '0.1s',\n easing: 'ease-out',\n scale: '0.5',\n },\n medium: {\n duration: '0.2s',\n easing: 'ease-out',\n scale: '1',\n },\n high: {\n duration: '0.3s',\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n scale: '1.2',\n },\n }\n\n const level = config.animationLevel as keyof typeof animationSettings\n const settings = animationSettings[level] ?? animationSettings.medium\n rules.push(` --animation-duration: ${settings.duration};`)\n rules.push(` --animation-easing: ${settings.easing};`)\n rules.push(` --animation-scale: ${settings.scale};`)\n rules.push(` --theme-animation-level: ${config.animationLevel};`)\n}\n\nfunction applyTypographyRules(rules: string[], config: ThemeConfiguration): void {\n const typography = config.typography\n if (!typography) return\n\n if (typography.fontFamily) {\n rules.push(` --typography-fontFamily: ${typography.fontFamily};`)\n }\n\n if (typography.headingFamily) {\n rules.push(` --typography-headingFamily: ${typography.headingFamily};`)\n }\n\n if (typography.baseFontSize) {\n rules.push(` --typography-baseFontSize: ${typography.baseFontSize};`)\n }\n\n if (typography.lineHeight) {\n rules.push(` --typography-lineHeight: ${typography.lineHeight};`)\n }\n\n if (typography.fontWeights) {\n Object.entries(typography.fontWeights).forEach(([token, weight]) => {\n if (weight) {\n rules.push(` --typography-fontWeights-${token}: ${weight};`)\n }\n })\n }\n\n if (typography.letterSpacing) {\n Object.entries(typography.letterSpacing).forEach(([token, value]) => {\n if (value) {\n rules.push(` --typography-letterSpacing-${token}: ${value};`)\n }\n })\n }\n}\n\n// ─── Visual Effects ────────────────────────────────────────────────────────\n\ntype VEConfig = {\n effectStyle?: string | null\n shadowIntensity?: string | null\n backdropBlur?: string | null\n borderStyle?: string | null\n borderWidth?: string | null\n glassOpacity?: number | null\n}\n\ntype CSConfig = {\n buttonVariant?: string | null\n buttonSize?: string | null\n cardStyle?: string | null\n cardHoverEffect?: string | null\n imageStyle?: string | null\n iconSet?: string | null\n navbarStyle?: string | null\n footerStyle?: string | null\n linkStyle?: string | null\n enableScrollReveal?: boolean | null\n enableHoverAnimations?: boolean | null\n}\n\nfunction getVE(config: ThemeConfiguration): VEConfig | null {\n return (config as unknown as { visualEffects?: VEConfig | null }).visualEffects ?? null\n}\n\nfunction getCS(config: ThemeConfiguration): CSConfig | null {\n return (config as unknown as { componentStyles?: CSConfig | null }).componentStyles ?? null\n}\n\nconst SHADOW_MAP: Record<string, string> = {\n none: 'none',\n subtle: '0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04)',\n medium: '0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)',\n strong: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',\n dramatic: '0 25px 50px -12px rgba(0,0,0,0.25)',\n}\n\nconst BLUR_PX_MAP: Record<string, string> = {\n none: '0px',\n slight: '4px',\n medium: '8px',\n strong: '16px',\n heavy: '24px',\n}\n\n/**\n * CSS custom properties for visual effects (emitted inside :root {})\n */\nfunction applyVisualEffectsCSSVars(rules: string[], config: ThemeConfiguration): void {\n const ve = getVE(config)\n if (!ve) return\n\n if (ve.effectStyle) rules.push(` --effect-style: ${ve.effectStyle};`)\n if (ve.shadowIntensity) {\n rules.push(` --shadow-intensity: ${ve.shadowIntensity};`)\n const shadow = SHADOW_MAP[ve.shadowIntensity]\n if (shadow) rules.push(` --card-shadow: ${shadow};`)\n }\n if (ve.backdropBlur) {\n const blurPx = BLUR_PX_MAP[ve.backdropBlur] ?? '0px'\n rules.push(` --backdrop-blur: ${blurPx};`)\n // Token form (none|slight|...) — read by the client ThemeProvider to mirror\n // the SSR data-backdrop-blur attribute.\n rules.push(` --backdrop-blur-level: ${ve.backdropBlur};`)\n }\n if (ve.borderStyle) rules.push(` --border-style: ${ve.borderStyle};`)\n if (ve.borderWidth) rules.push(` --border-width: ${ve.borderWidth};`)\n if (ve.glassOpacity != null) {\n const opacity = Math.min(100, Math.max(0, ve.glassOpacity)) / 100\n rules.push(` --glass-opacity: ${opacity.toFixed(2)};`)\n }\n\n // Always emit --card-bg-opacity and --card-backdrop-filter so .glass-card / .glass\n // fallback rules in consumer globals.css can be overridden regardless of cached state.\n // Glass effect: translucent card; all other effects: reset to opaque/none.\n const opacity = ve.glassOpacity != null ? (ve.glassOpacity / 100).toFixed(2) : '0.60'\n const blur = BLUR_PX_MAP[ve.backdropBlur ?? 'medium'] ?? '8px'\n rules.push(` --card-bg-opacity: ${opacity};`)\n rules.push(` --card-backdrop-filter: blur(${blur});`)\n rules.push(` --card-bg-opacity-non-glass: 1.0;`)\n rules.push(` --card-backdrop-filter-non-glass: none;`)\n}\n\n/**\n * CSS custom properties for component styles (emitted inside :root {})\n */\nfunction applyComponentStyleCSSVars(rules: string[], config: ThemeConfiguration): void {\n // Brand gradient composite — always emitted so gradient buttons / cards / text\n // can reference a single token. Falls back to primary→accent when the editor\n // has not set explicit gradient stops.\n rules.push(\n ' --gradient-brand: linear-gradient(' +\n 'var(--gradient-angle, 135deg), ' +\n 'var(--gradient-from, var(--primary)), ' +\n 'var(--gradient-via, var(--gradient-from, var(--primary))), ' +\n 'var(--gradient-to, var(--accent)));',\n )\n\n const cs = getCS(config)\n if (!cs) return\n\n if (cs.buttonVariant) rules.push(` --button-variant: ${cs.buttonVariant};`)\n if (cs.buttonSize) rules.push(` --button-size: ${cs.buttonSize};`)\n if (cs.cardStyle) rules.push(` --card-style: ${cs.cardStyle};`)\n if (cs.cardHoverEffect) rules.push(` --card-hover-effect: ${cs.cardHoverEffect};`)\n if (cs.imageStyle) rules.push(` --image-style: ${cs.imageStyle};`)\n if (cs.navbarStyle) rules.push(` --navbar-style: ${cs.navbarStyle};`)\n if (cs.footerStyle) rules.push(` --footer-style: ${cs.footerStyle};`)\n if (cs.linkStyle) rules.push(` --link-style: ${cs.linkStyle};`)\n if (cs.enableScrollReveal != null) {\n rules.push(` --scroll-reveal: ${cs.enableScrollReveal ? '1' : '0'};`)\n }\n if (cs.enableHoverAnimations != null) {\n rules.push(` --hover-animations: ${cs.enableHoverAnimations ? '1' : '0'};`)\n }\n}\n\n/**\n * Element-level CSS overrides based on effect + component styles.\n * These rules are emitted OUTSIDE the :root {} block so they target\n * actual DOM elements. They rely on data-effect-style / data-card-style\n * attributes set on <html> by layout.tsx (SSR) and ThemeProvider (client).\n */\nfunction applyEffectElementRules(rules: string[], config: ThemeConfiguration): void {\n const ve = getVE(config)\n const cs = getCS(config)\n if (!ve && !cs) return\n\n rules.push('')\n rules.push('/* ── Effect element overrides ── */')\n\n // ── Glass effect ──────────────────────────────────────────────────────\n // NOTE: All effect-style blocks are ALWAYS emitted regardless of the saved\n // effectStyle value. The CSS selectors are scoped by html[data-effect-style='X']\n // so only the matching data-attribute activates the rules. This means the CSS\n // is always correct even when stale cached/draft data is served.\n {\n const opacity = ve?.glassOpacity != null ? ve.glassOpacity : 60\n const blur = BLUR_PX_MAP[ve?.backdropBlur ?? 'strong'] ?? '16px'\n rules.push(`html[data-effect-style='glass'] [data-card],`)\n rules.push(`html[data-effect-style='glass'] .glass-card,`)\n rules.push(`html[data-effect-style='glass'] .glass {`)\n rules.push(\n ` background-color: color-mix(in srgb, var(--card) ${opacity}%, transparent) !important;`,\n )\n rules.push(` backdrop-filter: blur(${blur}) saturate(150%) !important;`)\n rules.push(` -webkit-backdrop-filter: blur(${blur}) saturate(150%) !important;`)\n rules.push(` border-color: color-mix(in srgb, var(--border) 40%, transparent) !important;`)\n rules.push(\n ` box-shadow: 0 4px 24px rgba(0,0,0,0.08), inset 0 1px 0 rgba(255,255,255,0.1) !important;`,\n )\n rules.push(`}`)\n rules.push(`html[data-effect-style='glass'] [data-card]:hover,`)\n rules.push(`html[data-effect-style='glass'] .glass-card:hover,`)\n rules.push(`html[data-effect-style='glass'] .glass:hover {`)\n rules.push(\n ` background-color: color-mix(in srgb, var(--card) ${Math.min(opacity + 10, 90)}%, transparent) !important;`,\n )\n rules.push(\n ` box-shadow: 0 8px 32px rgba(0,0,0,0.12), inset 0 1px 0 rgba(255,255,255,0.15) !important;`,\n )\n rules.push(`}`)\n // Apply the glass surface to the navbar container, but never to a <nav>\n // nested inside a <header> (or <footer>) — otherwise the inner nav paints a\n // second glass layer on top of the header's, producing a visible double-tint.\n // A standalone top-level <nav> (header-less layouts) still gets the surface.\n rules.push(\n `html[data-effect-style='glass'] header, html[data-effect-style='glass'] nav:not(header nav):not(footer nav) {`,\n )\n rules.push(\n ` background-color: color-mix(in srgb, var(--background) 65%, transparent) !important;`,\n )\n rules.push(` backdrop-filter: blur(${blur}) saturate(150%) !important;`)\n rules.push(` -webkit-backdrop-filter: blur(${blur}) saturate(150%) !important;`)\n rules.push(`}`)\n }\n\n // ── Neumorphic effect ──────────────────────────────────────────────────\n {\n rules.push(`html[data-effect-style='neumorphic'] [data-card],`)\n rules.push(`html[data-effect-style='neumorphic'] .glass-card,`)\n rules.push(`html[data-effect-style='neumorphic'] .glass {`)\n rules.push(` background-color: var(--background) !important;`)\n rules.push(` border: none !important;`)\n rules.push(` backdrop-filter: none !important;`)\n rules.push(` -webkit-backdrop-filter: none !important;`)\n rules.push(\n ` box-shadow: 6px 6px 12px rgba(0,0,0,0.12), -6px -6px 12px rgba(255,255,255,0.75) !important;`,\n )\n rules.push(`}`)\n rules.push(`html[data-effect-style='neumorphic'] [data-card]:hover,`)\n rules.push(`html[data-effect-style='neumorphic'] .glass-card:hover,`)\n rules.push(`html[data-effect-style='neumorphic'] .glass:hover {`)\n rules.push(\n ` box-shadow: 8px 8px 16px rgba(0,0,0,0.15), -8px -8px 16px rgba(255,255,255,0.85) !important;`,\n )\n rules.push(`}`)\n rules.push(`html[data-effect-style='neumorphic'][data-theme-mode='dark'] [data-card],`)\n rules.push(`html[data-effect-style='neumorphic'].dark [data-card],`)\n rules.push(`html[data-effect-style='neumorphic'][data-theme-mode='dark'] .glass-card,`)\n rules.push(`html[data-effect-style='neumorphic'].dark .glass-card {`)\n rules.push(\n ` box-shadow: 6px 6px 12px rgba(0,0,0,0.4), -6px -6px 12px rgba(255,255,255,0.04) !important;`,\n )\n rules.push(`}`)\n }\n\n // ── Clay effect ────────────────────────────────────────────────────────\n {\n rules.push(`html[data-effect-style='clay'] [data-card],`)\n rules.push(`html[data-effect-style='clay'] .glass-card,`)\n rules.push(`html[data-effect-style='clay'] .glass {`)\n rules.push(` border-radius: var(--radius-large, 1.5rem) !important;`)\n rules.push(\n ` box-shadow: 4px 4px 0px rgba(0,0,0,0.22), 0 8px 20px rgba(0,0,0,0.08) !important;`,\n )\n rules.push(` border: none !important;`)\n rules.push(` backdrop-filter: none !important;`)\n rules.push(` -webkit-backdrop-filter: none !important;`)\n rules.push(` transition: transform 200ms ease, box-shadow 200ms ease !important;`)\n rules.push(`}`)\n rules.push(`html[data-effect-style='clay'] [data-card]:hover,`)\n rules.push(`html[data-effect-style='clay'] .glass-card:hover,`)\n rules.push(`html[data-effect-style='clay'] .glass:hover {`)\n rules.push(` transform: translateY(-3px) !important;`)\n rules.push(\n ` box-shadow: 6px 6px 0px rgba(0,0,0,0.25), 0 12px 24px rgba(0,0,0,0.12) !important;`,\n )\n rules.push(`}`)\n }\n\n // ── Elevated effect ────────────────────────────────────────────────────\n {\n const shadow = ve?.shadowIntensity\n ? (SHADOW_MAP[ve.shadowIntensity] ?? SHADOW_MAP.medium)\n : SHADOW_MAP.medium\n rules.push(`html[data-effect-style='elevated'] [data-card],`)\n rules.push(`html[data-effect-style='elevated'] .glass-card,`)\n rules.push(`html[data-effect-style='elevated'] .glass {`)\n rules.push(` box-shadow: ${shadow} !important;`)\n rules.push(` border: none !important;`)\n rules.push(` backdrop-filter: none !important;`)\n rules.push(` -webkit-backdrop-filter: none !important;`)\n rules.push(` transition: box-shadow 200ms ease, transform 200ms ease !important;`)\n rules.push(`}`)\n rules.push(`html[data-effect-style='elevated'] [data-card]:hover,`)\n rules.push(`html[data-effect-style='elevated'] .glass-card:hover,`)\n rules.push(`html[data-effect-style='elevated'] .glass:hover {`)\n rules.push(\n ` box-shadow: 0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.1) !important;`,\n )\n rules.push(` transform: translateY(-2px) !important;`)\n rules.push(`}`)\n }\n\n // ── Flat effect ────────────────────────────────────────────────────────\n {\n rules.push(`html[data-effect-style='flat'] [data-card],`)\n rules.push(`html[data-effect-style='flat'] .glass-card,`)\n rules.push(`html[data-effect-style='flat'] .glass {`)\n rules.push(` box-shadow: none !important;`)\n rules.push(` backdrop-filter: none !important;`)\n rules.push(` -webkit-backdrop-filter: none !important;`)\n rules.push(`}`)\n }\n // ── Border overrides ───────────────────────────────────────────────────\n if (ve?.borderWidth && ve.borderWidth !== '1px' && ve.borderWidth !== '0px') {\n rules.push(`html[data-border-width='${ve.borderWidth}'] [data-card],`)\n rules.push(`html[data-border-width='${ve.borderWidth}'] .glass-card {`)\n rules.push(` border-width: ${ve.borderWidth} !important;`)\n rules.push(`}`)\n }\n\n // ── Card style: bordered (used by brutalism etc.) ──────────────────────\n if (cs?.cardStyle === 'bordered') {\n const bw = ve?.borderWidth ?? '2px'\n rules.push(`html[data-card-style='bordered'] [data-card],`)\n rules.push(`html[data-card-style='bordered'] .glass-card {`)\n rules.push(` border-width: ${bw} !important;`)\n rules.push(` border-style: solid !important;`)\n rules.push(` border-color: var(--foreground) !important;`)\n rules.push(` box-shadow: 4px 4px 0 var(--foreground) !important;`)\n rules.push(` border-radius: 0 !important;`)\n rules.push(` background-color: var(--card) !important;`)\n rules.push(` backdrop-filter: none !important;`)\n rules.push(` -webkit-backdrop-filter: none !important;`)\n rules.push(`}`)\n rules.push(`html[data-card-style='bordered'] [data-card]:hover,`)\n rules.push(`html[data-card-style='bordered'] .glass-card:hover {`)\n rules.push(` box-shadow: 6px 6px 0 var(--foreground) !important;`)\n rules.push(` transform: translate(-2px, -2px) !important;`)\n rules.push(`}`)\n }\n\n // ── Card style: gradient-border ────────────────────────────────────────\n if (cs?.cardStyle === 'gradient-border') {\n rules.push(`html[data-card-style='gradient-border'] [data-card],`)\n rules.push(`html[data-card-style='gradient-border'] .glass-card {`)\n rules.push(` border-image: var(--gradient-brand) 1 !important;`)\n rules.push(` border-width: 2px !important;`)\n rules.push(` border-style: solid !important;`)\n rules.push(`}`)\n }\n\n // ── Navbar styles ──────────────────────────────────────────────────────\n const navbarStyle = cs?.navbarStyle\n if (navbarStyle === 'blur') {\n rules.push(`html[data-navbar-style='blur'] header {`)\n rules.push(\n ` background-color: color-mix(in srgb, var(--background) 70%, transparent) !important;`,\n )\n rules.push(` backdrop-filter: blur(12px) !important;`)\n rules.push(` -webkit-backdrop-filter: blur(12px) !important;`)\n rules.push(`}`)\n } else if (navbarStyle === 'transparent') {\n rules.push(`html[data-navbar-style='transparent'] header {`)\n rules.push(` background-color: transparent !important;`)\n rules.push(` border-bottom-color: transparent !important;`)\n rules.push(`}`)\n } else if (navbarStyle === 'floating') {\n rules.push(`html[data-navbar-style='floating'] header {`)\n rules.push(` margin: 12px 16px 0;`)\n rules.push(` border-radius: var(--radius-large, 1.5rem);`)\n rules.push(` border: 1px solid var(--border);`)\n rules.push(` box-shadow: 0 4px 24px rgba(0,0,0,0.08);`)\n rules.push(`}`)\n } else if (navbarStyle === 'minimal') {\n rules.push(`html[data-navbar-style='minimal'] header {`)\n rules.push(` border-bottom-color: transparent !important;`)\n rules.push(` box-shadow: none !important;`)\n rules.push(`}`)\n }\n\n // ── Button variant: brutal ─────────────────────────────────────────────\n if (cs?.buttonVariant === 'brutal') {\n rules.push(`html[data-button-variant='brutal'] [data-btn] {`)\n rules.push(` border: 2px solid var(--foreground) !important;`)\n rules.push(` border-radius: 0 !important;`)\n rules.push(` box-shadow: 3px 3px 0 var(--foreground) !important;`)\n rules.push(` transition: box-shadow 100ms ease, transform 100ms ease !important;`)\n rules.push(`}`)\n rules.push(`html[data-button-variant='brutal'] [data-btn]:hover {`)\n rules.push(` box-shadow: 5px 5px 0 var(--foreground) !important;`)\n rules.push(` transform: translate(-2px, -2px) !important;`)\n rules.push(`}`)\n rules.push(`html[data-button-variant='brutal'] [data-btn]:active {`)\n rules.push(` box-shadow: 1px 1px 0 var(--foreground) !important;`)\n rules.push(` transform: translate(2px, 2px) !important;`)\n rules.push(`}`)\n }\n\n // ── Button variant: pill ───────────────────────────────────────────────\n if (cs?.buttonVariant === 'pill') {\n rules.push(`html[data-button-variant='pill'] [data-btn] {`)\n rules.push(` border-radius: 9999px !important;`)\n rules.push(`}`)\n }\n\n // ── Button variant: ghost ──────────────────────────────────────────────\n if (cs?.buttonVariant === 'outlined') {\n rules.push(`html[data-button-variant='outlined'] [data-btn] {`)\n rules.push(` background-color: transparent !important;`)\n rules.push(` border: 1px solid var(--border) !important;`)\n rules.push(` box-shadow: none !important;`)\n rules.push(`}`)\n }\n\n // ── Card hover effects ─────────────────────────────────────────────────\n if (cs?.cardHoverEffect === 'lift') {\n rules.push(`html[data-card-hover='lift'] [data-card]:hover,`)\n rules.push(`html[data-card-hover='lift'] .glass-card:hover {`)\n rules.push(` transform: translateY(-6px) !important;`)\n rules.push(` box-shadow: 0 20px 40px rgba(0,0,0,0.12) !important;`)\n rules.push(`}`)\n } else if (cs?.cardHoverEffect === 'scale') {\n rules.push(`html[data-card-hover='scale'] [data-card]:hover,`)\n rules.push(`html[data-card-hover='scale'] .glass-card:hover {`)\n rules.push(` transform: scale(1.02) !important;`)\n rules.push(`}`)\n } else if (cs?.cardHoverEffect === 'glow') {\n rules.push(`html[data-card-hover='glow'] [data-card]:hover,`)\n rules.push(`html[data-card-hover='glow'] .glass-card:hover {`)\n rules.push(\n ` box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 25%, transparent), 0 8px 32px rgba(0,0,0,0.1) !important;`,\n )\n rules.push(`}`)\n } else if (cs?.cardHoverEffect === 'tilt') {\n rules.push(`html[data-card-hover='tilt'] [data-card],`)\n rules.push(`html[data-card-hover='tilt'] .glass-card {`)\n rules.push(` transition: transform 200ms ease !important;`)\n rules.push(`}`)\n rules.push(`html[data-card-hover='tilt'] [data-card]:hover,`)\n rules.push(`html[data-card-hover='tilt'] .glass-card:hover {`)\n rules.push(` transform: perspective(1000px) rotateX(2deg) rotateY(-2deg) !important;`)\n rules.push(`}`)\n }\n\n // ── Button variant: gradient ───────────────────────────────────────────\n if (cs?.buttonVariant === 'gradient') {\n rules.push(`html[data-button-variant='gradient'] [data-btn] {`)\n rules.push(` background-image: var(--gradient-brand) !important;`)\n rules.push(` background-color: transparent !important;`)\n rules.push(` color: var(--primary-foreground) !important;`)\n rules.push(` border: none !important;`)\n rules.push(`}`)\n }\n\n // ── Button sizes ────────────────────────────────────────────────────────\n if (cs?.buttonSize) {\n const sizeMap: Record<string, { py: string; px: string; fs: string }> = {\n small: { py: '0.375rem', px: '0.75rem', fs: '0.8125rem' },\n medium: { py: '0.5rem', px: '1rem', fs: '0.875rem' },\n large: { py: '0.625rem', px: '1.5rem', fs: '1rem' },\n xl: { py: '0.875rem', px: '2rem', fs: '1.125rem' },\n }\n const s = sizeMap[cs.buttonSize] ?? sizeMap.medium!\n rules.push(`html[data-button-size='${cs.buttonSize}'] [data-btn] {`)\n rules.push(` padding: ${s.py} ${s.px} !important;`)\n rules.push(` font-size: ${s.fs} !important;`)\n rules.push(`}`)\n }\n\n // ── Image styles ───────────────────────────────────────────────────────\n // Target both [data-img] attributes and the .themed-image helper class.\n if (cs?.imageStyle && cs.imageStyle !== 'default') {\n const style = cs.imageStyle\n const sel = `html[data-image-style='${style}'] [data-img], html[data-image-style='${style}'] .themed-image`\n const hoverSel = `html[data-image-style='${style}'] [data-img]:hover, html[data-image-style='${style}'] .themed-image:hover`\n if (style === 'rounded') {\n rules.push(`${sel} { border-radius: var(--radius-large, 1rem) !important; overflow: hidden; }`)\n } else if (style === 'circle') {\n rules.push(\n `${sel} { border-radius: 9999px !important; aspect-ratio: 1 / 1; object-fit: cover; }`,\n )\n } else if (style === 'grayscale') {\n rules.push(`${sel} { filter: grayscale(1); transition: filter 300ms ease; }`)\n rules.push(`${hoverSel} { filter: grayscale(0); }`)\n } else if (style === 'duotone') {\n rules.push(`${sel} { filter: grayscale(1) contrast(1.05); mix-blend-mode: luminosity; }`)\n } else if (style === 'vignette') {\n rules.push(`${sel} { box-shadow: inset 0 0 60px rgba(0,0,0,0.45); }`)\n } else if (style === 'polaroid') {\n rules.push(\n `${sel} { background: #fff; padding: 10px 10px 36px; box-shadow: 0 6px 16px rgba(0,0,0,0.18); border-radius: 2px; }`,\n )\n }\n }\n\n // ── Link styles ─────────────────────────────────────────────────────────\n if (cs?.linkStyle) {\n const style = cs.linkStyle\n const sel = `html[data-link-style='${style}'] [data-link], html[data-link-style='${style}'] .themed-link`\n const hoverSel = `html[data-link-style='${style}'] [data-link]:hover, html[data-link-style='${style}'] .themed-link:hover`\n if (style === 'underline') {\n rules.push(`${sel} { text-decoration: underline; text-underline-offset: 0.15em; }`)\n } else if (style === 'none') {\n rules.push(`${sel} { text-decoration: none; }`)\n } else if (style === 'underline-hover') {\n rules.push(`${sel} { text-decoration: none; }`)\n rules.push(`${hoverSel} { text-decoration: underline; text-underline-offset: 0.15em; }`)\n } else if (style === 'highlight') {\n rules.push(\n `${sel} { text-decoration: none; background-image: linear-gradient(transparent 60%, color-mix(in srgb, var(--primary) 28%, transparent) 0); }`,\n )\n } else if (style === 'animated') {\n rules.push(\n `${sel} { text-decoration: none; background-image: var(--gradient-brand); background-size: 0% 2px; background-position: 0 100%; background-repeat: no-repeat; transition: background-size 300ms ease; }`,\n )\n rules.push(`${hoverSel} { background-size: 100% 2px; }`)\n }\n }\n\n // ── Footer styles ─────────────────────────────────────────────────────────\n if (cs?.footerStyle === 'dark') {\n rules.push(\n `html[data-footer-style='dark'] footer { background-color: var(--foreground) !important; color: var(--background) !important; }`,\n )\n } else if (cs?.footerStyle === 'full-color') {\n rules.push(\n `html[data-footer-style='full-color'] footer { background-color: var(--primary) !important; color: var(--primary-foreground) !important; }`,\n )\n } else if (cs?.footerStyle === 'gradient-top') {\n rules.push(\n `html[data-footer-style='gradient-top'] footer { border-top: 3px solid transparent; border-image: var(--gradient-brand) 1; }`,\n )\n } else if (cs?.footerStyle === 'minimal') {\n rules.push(\n `html[data-footer-style='minimal'] footer { background: transparent !important; border-top: 1px solid var(--border) !important; box-shadow: none !important; }`,\n )\n }\n\n // ── Hover animations off — neutralise interactive transforms ──────────────\n if (cs?.enableHoverAnimations === false) {\n rules.push(\n `html[data-hover-animations='off'] [data-card]:hover, html[data-hover-animations='off'] .glass-card:hover, html[data-hover-animations='off'] [data-btn]:hover { transform: none !important; }`,\n )\n }\n}\n\nfunction applyDarkModeOverrides(\n rules: string[],\n config: ThemeConfiguration,\n customization: ThemeCustomization | null | undefined,\n selector: string,\n): void {\n if (config.colorMode !== 'dark' && config.colorMode !== 'auto') return\n\n rules.push('')\n rules.push('@media (prefers-color-scheme: dark) {')\n rules.push(` ${selector} {`)\n\n if (customization?.backgroundColor && isLightBackground(customization.backgroundColor)) {\n rules.push(` --background: hsl(224 71% 4%);`)\n rules.push(` --card: hsl(224 71% 4%);`)\n rules.push(` --popover: hsl(224 71% 4%);`)\n }\n\n if (customization?.textColor && !isLightBackground(customization.textColor)) {\n rules.push(` --foreground: hsl(213 31% 91%);`)\n }\n\n rules.push(' }')\n rules.push('}')\n}\n\nfunction applyReducedMotionOverride(rules: string[], config: ThemeConfiguration): void {\n if (config.animationLevel !== 'none') return\n\n rules.push('')\n rules.push('@media (prefers-reduced-motion: reduce) {')\n rules.push(' *, *::before, *::after {')\n rules.push(' animation-duration: 0.01ms !important;')\n rules.push(' animation-iteration-count: 1 !important;')\n rules.push(' transition-duration: 0.01ms !important;')\n rules.push(' scroll-behavior: auto !important;')\n rules.push(' }')\n rules.push('}')\n}\n\nfunction appendCustomCSS(\n rules: string[],\n customization: ThemeCustomization | null | undefined,\n): void {\n if (!customization?.customCSS) return\n\n rules.push('')\n rules.push('/* Custom CSS */')\n rules.push(customization.customCSS)\n}\n\nfunction applyCustomizationStyleOverrides(\n styles: Record<string, string>,\n customization: ThemeCustomization | null | undefined,\n): void {\n if (!customization) return\n\n if (customization.primaryColor) {\n styles['--primary'] = customization.primaryColor\n }\n\n if (customization.accentColor) {\n styles['--accent'] = customization.accentColor\n }\n\n if (customization.backgroundColor) {\n styles['--background'] = customization.backgroundColor\n styles['--card'] = customization.backgroundColor\n styles['--popover'] = customization.backgroundColor\n }\n\n if (customization.textColor) {\n styles['--foreground'] = customization.textColor\n }\n}\n\nfunction applyTypographyStyleOverrides(\n styles: Record<string, string>,\n typography: ThemeTypographyPreset | null | undefined,\n): void {\n if (!typography) return\n\n if (typography.fontFamily) {\n styles['--font-family-base'] = typography.fontFamily\n }\n\n if (typography.headingFamily) {\n styles['--font-family-heading'] = typography.headingFamily\n }\n\n if (typography.baseFontSize) {\n styles['--font-size-base'] = typography.baseFontSize\n }\n\n if (typography.lineHeight) {\n styles['--line-height-base'] = typography.lineHeight\n }\n}\n"],"names":["borderRadiusPresets","generateThemeCSS","config","cssRules","customization","themeSelector","theme","push","applyCustomizationRootRules","applyBorderRadiusRule","applyFontScaleRules","applySpacingRule","applyAnimationRule","applyTypographyRules","applyVisualEffectsCSSVars","applyComponentStyleCSSVars","applyEffectElementRules","applyDarkModeOverrides","applyReducedMotionOverride","appendCustomCSS","join","isLightBackground","color","lightPatterns","some","pattern","test","getThemeStyles","styles","applyCustomizationStyleOverrides","applyTypographyStyleOverrides","typography","rules","primaryColor","accentColor","backgroundColor","textColor","borderRadius","preset","cssEntries","Object","entries","css","forEach","property","value","defaultRadius","fontScale","scaleValues","small","medium","large","xl","scale","baseSizes","className","baseSize","scaledSize","parseFloat","spacing","spacingMultipliers","compact","spacious","multiplier","animationLevel","animationSettings","none","duration","easing","reduced","high","level","settings","fontFamily","headingFamily","baseFontSize","lineHeight","fontWeights","token","weight","letterSpacing","getVE","visualEffects","getCS","componentStyles","SHADOW_MAP","subtle","strong","dramatic","BLUR_PX_MAP","slight","heavy","ve","effectStyle","shadowIntensity","shadow","backdropBlur","blurPx","borderStyle","borderWidth","glassOpacity","opacity","Math","min","max","toFixed","blur","cs","buttonVariant","buttonSize","cardStyle","cardHoverEffect","imageStyle","navbarStyle","footerStyle","linkStyle","enableScrollReveal","enableHoverAnimations","bw","sizeMap","py","px","fs","s","style","sel","hoverSel","selector","colorMode","customCSS"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/themeUtils.ts"],"sourcesContent":["import type { ThemeTypographyPreset } from '../presets.js'\nimport { borderRadiusPresets } from '../providers/Theme/themeConfig.js'\nimport type { ResolvedThemeConfiguration } from './resolveThemeConfiguration.js'\n\ntype ThemeConfiguration = Omit<ResolvedThemeConfiguration, 'typography'> & {\n typography?: ResolvedThemeConfiguration['typography']\n}\n\ninterface ThemeCustomization {\n primaryColor?: string | null\n accentColor?: string | null\n backgroundColor?: string | null\n textColor?: string | null\n customCSS?: string | null\n}\n\ntype ThemeConfigurationWithCustomization = ThemeConfiguration & {\n customization?: ThemeCustomization | null\n}\n/**\n * Generates CSS custom properties from theme configuration\n */\nexport function generateThemeCSS(config: ThemeConfiguration): string {\n const cssRules: string[] = []\n const customization = (config as ThemeConfigurationWithCustomization).customization\n const themeSelector = config.theme ? `:root[data-theme='${config.theme}']` : ':root'\n\n // ── :root block — CSS custom properties ─────────────────────────────────\n cssRules.push(`${themeSelector} {`)\n applyCustomizationRootRules(cssRules, customization)\n applyBorderRadiusRule(cssRules, config)\n applyFontScaleRules(cssRules, config)\n applySpacingRule(cssRules, config)\n applyAnimationRule(cssRules, config)\n applyTypographyRules(cssRules, config)\n applyVisualEffectsCSSVars(cssRules, config)\n applyComponentStyleCSSVars(cssRules, config)\n cssRules.push('}')\n\n // ── Element-level effect rules (outside :root) ──────────────────────────\n applyTypographyBaseRules(cssRules, config)\n applyEffectElementRules(cssRules, config)\n\n // ── Color mode overrides ────────────────────────────────────────────────\n applyDarkModeOverrides(cssRules, config, customization, themeSelector)\n\n // ── Animation: none — respect prefers-reduced-motion ───────────────────\n applyReducedMotionOverride(cssRules, config)\n\n // ── Custom CSS ──────────────────────────────────────────────────────────\n appendCustomCSS(cssRules, customization)\n\n return cssRules.join('\\n')\n}\n\n/**\n * Determines if a color is light or dark\n */\nfunction isLightBackground(color: string): boolean {\n // Simple heuristic: if it contains 'white', '#fff', or high RGB values, it's light\n const lightPatterns = [\n /white/i,\n /#f{3,6}/i,\n /rgb\\s*\\(\\s*([2-9]\\d{2}|1[5-9]\\d|1\\d{2}),/,\n /hsl\\s*\\([^)]*,\\s*[^,)]*,\\s*([7-9]\\d|100)%\\)/,\n ]\n\n return lightPatterns.some((pattern) => pattern.test(color))\n}\n\n/**\n * Generate theme styles for use in components\n */\nexport function getThemeStyles(config: ThemeConfiguration) {\n const styles: Record<string, string> = {}\n const customization = (config as ThemeConfigurationWithCustomization).customization\n\n applyCustomizationStyleOverrides(styles, customization)\n applyTypographyStyleOverrides(styles, config.typography)\n\n return styles\n}\n\nfunction applyCustomizationRootRules(\n rules: string[],\n customization: ThemeCustomization | null | undefined,\n): void {\n if (!customization) return\n\n if (customization.primaryColor) {\n rules.push(` --primary-custom: ${customization.primaryColor};`)\n }\n\n if (customization.accentColor) {\n rules.push(` --accent-custom: ${customization.accentColor};`)\n }\n\n if (customization.backgroundColor) {\n rules.push(` --background: ${customization.backgroundColor};`)\n rules.push(` --card: ${customization.backgroundColor};`)\n rules.push(` --popover: ${customization.backgroundColor};`)\n }\n\n if (customization.textColor) {\n rules.push(` --foreground: ${customization.textColor};`)\n }\n}\n\nfunction applyBorderRadiusRule(rules: string[], config: ThemeConfiguration): void {\n if (!config.borderRadius) return\n\n const preset = borderRadiusPresets[config.borderRadius]\n if (!preset) return\n\n const cssEntries = Object.entries(preset.css)\n cssEntries.forEach(([property, value]) => {\n rules.push(` ${property}: ${value};`)\n })\n\n const defaultRadius =\n preset.css['--radius-default'] ?? preset.css['--radius-medium'] ?? preset.css['--radius-large']\n if (defaultRadius) {\n rules.push(` --radius: ${defaultRadius};`)\n }\n}\n\nfunction applyFontScaleRules(rules: string[], config: ThemeConfiguration): void {\n if (!config.fontScale) return\n\n const scaleValues: Record<string, string> = {\n small: '0.9',\n medium: '1',\n large: '1.1',\n xl: '1.25',\n }\n\n const scale = scaleValues[config.fontScale] ?? '1'\n rules.push(` --font-scale: ${scale};`)\n rules.push(` --theme-font-scale: ${scale};`)\n\n const baseSizes: Record<string, string> = {\n 'text-xs': '0.75rem',\n 'text-sm': '0.875rem',\n 'text-base': '1rem',\n 'text-lg': '1.125rem',\n 'text-xl': '1.25rem',\n 'text-2xl': '1.5rem',\n 'text-3xl': '1.875rem',\n 'text-4xl': '2.25rem',\n }\n\n Object.entries(baseSizes).forEach(([className, baseSize]) => {\n const scaledSize = parseFloat(baseSize) * parseFloat(scale)\n rules.push(` --${className}: ${scaledSize}rem;`)\n })\n}\n\nfunction applySpacingRule(rules: string[], config: ThemeConfiguration): void {\n if (!config.spacing) return\n\n const spacingMultipliers: Record<string, string> = {\n compact: '0.75',\n medium: '1',\n spacious: '1.5',\n }\n\n const multiplier = spacingMultipliers[config.spacing] ?? '1'\n rules.push(` --spacing-scale: ${multiplier};`)\n rules.push(` --theme-spacing: ${multiplier};`)\n // Ready-to-use rhythm tokens so the spacing choice is visible without extra math.\n rules.push(` --section-spacing: calc(clamp(3rem, 8vw, 6rem) * ${multiplier});`)\n rules.push(` --card-padding: calc(1.5rem * ${multiplier});`)\n rules.push(` --stack-gap: calc(1rem * ${multiplier});`)\n}\n\nfunction applyAnimationRule(rules: string[], config: ThemeConfiguration): void {\n if (!config.animationLevel) return\n\n const animationSettings: Record<string, { duration: string; easing: string; scale: string }> = {\n none: {\n duration: '0s',\n easing: 'linear',\n scale: '0',\n },\n reduced: {\n duration: '0.1s',\n easing: 'ease-out',\n scale: '0.5',\n },\n medium: {\n duration: '0.2s',\n easing: 'ease-out',\n scale: '1',\n },\n high: {\n duration: '0.3s',\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n scale: '1.2',\n },\n }\n\n const level = config.animationLevel as keyof typeof animationSettings\n const settings = animationSettings[level] ?? animationSettings.medium\n rules.push(` --animation-duration: ${settings.duration};`)\n rules.push(` --animation-easing: ${settings.easing};`)\n rules.push(` --animation-scale: ${settings.scale};`)\n rules.push(` --theme-animation-level: ${config.animationLevel};`)\n}\n\nfunction applyTypographyRules(rules: string[], config: ThemeConfiguration): void {\n const typography = config.typography\n if (!typography) return\n\n if (typography.fontFamily) {\n rules.push(` --typography-fontFamily: ${typography.fontFamily};`)\n }\n\n if (typography.headingFamily) {\n rules.push(` --typography-headingFamily: ${typography.headingFamily};`)\n }\n\n if (typography.baseFontSize) {\n rules.push(` --typography-baseFontSize: ${typography.baseFontSize};`)\n }\n\n if (typography.lineHeight) {\n rules.push(` --typography-lineHeight: ${typography.lineHeight};`)\n }\n\n if (typography.fontWeights) {\n Object.entries(typography.fontWeights).forEach(([token, weight]) => {\n if (weight) {\n rules.push(` --typography-fontWeights-${token}: ${weight};`)\n }\n })\n }\n\n if (typography.letterSpacing) {\n Object.entries(typography.letterSpacing).forEach(([token, value]) => {\n if (value) {\n rules.push(` --typography-letterSpacing-${token}: ${value};`)\n }\n })\n }\n\n if (typography.headingWeight) {\n rules.push(` --typography-headingWeight: ${typography.headingWeight};`)\n }\n if (typography.headingLetterSpacing) {\n rules.push(` --typography-headingLetterSpacing: ${typography.headingLetterSpacing};`)\n }\n if (typography.headingTransform) {\n rules.push(` --typography-headingTransform: ${typography.headingTransform};`)\n }\n}\n\n/**\n * Zero-specificity base rules (`:where()`), so the chosen fonts show up on a site\n * that has no typography CSS of its own, while any rule the site does have wins.\n */\nfunction applyTypographyBaseRules(rules: string[], config: ThemeConfiguration): void {\n // Only when the editor chose typography explicitly: sites that never touched it\n // keep rendering exactly as before.\n if (!config.typography || !config.typographyOverridden) return\n\n rules.push('')\n rules.push('/* ── Typography base (zero specificity — site CSS always wins) ── */')\n rules.push(':where(html[data-theme]) :where(body) {')\n rules.push(' font-family: var(--typography-fontFamily, system-ui, sans-serif);')\n rules.push(\n ' font-size: calc(var(--typography-baseFontSize, 16px) * var(--theme-font-scale, 1));',\n )\n rules.push(' line-height: var(--typography-lineHeight, 1.6);')\n rules.push('}')\n rules.push(':where(html[data-theme]) :where(h1, h2, h3, h4, h5, h6) {')\n rules.push(\n ' font-family: var(--typography-headingFamily, var(--typography-fontFamily, inherit));',\n )\n rules.push(' font-weight: var(--typography-headingWeight, var(--typography-fontWeights-bold, 700));')\n rules.push(' letter-spacing: var(--typography-headingLetterSpacing, normal);')\n rules.push(' text-transform: var(--typography-headingTransform, none);')\n rules.push('}')\n}\n\n// ─── Visual Effects ────────────────────────────────────────────────────────\n\ntype VEConfig = {\n effectStyle?: string | null\n shadowIntensity?: string | null\n backdropBlur?: string | null\n borderStyle?: string | null\n borderWidth?: string | null\n glassOpacity?: number | null\n}\n\ntype CSConfig = {\n buttonVariant?: string | null\n buttonSize?: string | null\n cardStyle?: string | null\n cardHoverEffect?: string | null\n imageStyle?: string | null\n iconSet?: string | null\n navbarStyle?: string | null\n footerStyle?: string | null\n linkStyle?: string | null\n enableScrollReveal?: boolean | null\n enableHoverAnimations?: boolean | null\n}\n\nfunction getVE(config: ThemeConfiguration): VEConfig | null {\n return (config as unknown as { visualEffects?: VEConfig | null }).visualEffects ?? null\n}\n\nfunction getCS(config: ThemeConfiguration): CSConfig | null {\n return (config as unknown as { componentStyles?: CSConfig | null }).componentStyles ?? null\n}\n\nconst SHADOW_MAP: Record<string, string> = {\n none: 'none',\n subtle: '0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04)',\n medium: '0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)',\n strong: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',\n dramatic: '0 25px 50px -12px rgba(0,0,0,0.25)',\n}\n\nconst BLUR_PX_MAP: Record<string, string> = {\n none: '0px',\n slight: '4px',\n medium: '8px',\n strong: '16px',\n heavy: '24px',\n}\n\n/**\n * CSS custom properties for visual effects (emitted inside :root {})\n */\nfunction applyVisualEffectsCSSVars(rules: string[], config: ThemeConfiguration): void {\n const ve = getVE(config)\n if (!ve) return\n\n if (ve.effectStyle) rules.push(` --effect-style: ${ve.effectStyle};`)\n if (ve.shadowIntensity) {\n rules.push(` --shadow-intensity: ${ve.shadowIntensity};`)\n const shadow = SHADOW_MAP[ve.shadowIntensity]\n if (shadow) rules.push(` --card-shadow: ${shadow};`)\n }\n if (ve.backdropBlur) {\n const blurPx = BLUR_PX_MAP[ve.backdropBlur] ?? '0px'\n rules.push(` --backdrop-blur: ${blurPx};`)\n // Token form (none|slight|...) — read by the client ThemeProvider to mirror\n // the SSR data-backdrop-blur attribute.\n rules.push(` --backdrop-blur-level: ${ve.backdropBlur};`)\n }\n if (ve.borderStyle) rules.push(` --border-style: ${ve.borderStyle};`)\n if (ve.borderWidth) rules.push(` --border-width: ${ve.borderWidth};`)\n if (ve.glassOpacity != null) {\n const opacity = Math.min(100, Math.max(0, ve.glassOpacity)) / 100\n rules.push(` --glass-opacity: ${opacity.toFixed(2)};`)\n }\n\n // Always emit --card-bg-opacity and --card-backdrop-filter so .glass-card / .glass\n // fallback rules in consumer globals.css can be overridden regardless of cached state.\n // Glass effect: translucent card; all other effects: reset to opaque/none.\n const opacity = ve.glassOpacity != null ? (ve.glassOpacity / 100).toFixed(2) : '0.60'\n const blur = BLUR_PX_MAP[ve.backdropBlur ?? 'medium'] ?? '8px'\n rules.push(` --card-bg-opacity: ${opacity};`)\n rules.push(` --card-backdrop-filter: blur(${blur});`)\n rules.push(` --card-bg-opacity-non-glass: 1.0;`)\n rules.push(` --card-backdrop-filter-non-glass: none;`)\n}\n\n/**\n * CSS custom properties for component styles (emitted inside :root {})\n */\nfunction applyComponentStyleCSSVars(rules: string[], config: ThemeConfiguration): void {\n // Brand gradient composite — always emitted so gradient buttons / cards / text\n // can reference a single token. Falls back to primary→accent when the editor\n // has not set explicit gradient stops.\n rules.push(\n ' --gradient-brand: linear-gradient(' +\n 'var(--gradient-angle, 135deg), ' +\n 'var(--gradient-from, var(--primary)), ' +\n 'var(--gradient-via, var(--gradient-from, var(--primary))), ' +\n 'var(--gradient-to, var(--accent)));',\n )\n\n const cs = getCS(config)\n if (!cs) return\n\n if (cs.buttonVariant) rules.push(` --button-variant: ${cs.buttonVariant};`)\n if (cs.buttonSize) rules.push(` --button-size: ${cs.buttonSize};`)\n if (cs.cardStyle) rules.push(` --card-style: ${cs.cardStyle};`)\n if (cs.cardHoverEffect) rules.push(` --card-hover-effect: ${cs.cardHoverEffect};`)\n if (cs.imageStyle) rules.push(` --image-style: ${cs.imageStyle};`)\n if (cs.navbarStyle) rules.push(` --navbar-style: ${cs.navbarStyle};`)\n if (cs.footerStyle) rules.push(` --footer-style: ${cs.footerStyle};`)\n if (cs.linkStyle) rules.push(` --link-style: ${cs.linkStyle};`)\n if (cs.enableScrollReveal != null) {\n rules.push(` --scroll-reveal: ${cs.enableScrollReveal ? '1' : '0'};`)\n }\n if (cs.enableHoverAnimations != null) {\n rules.push(` --hover-animations: ${cs.enableHoverAnimations ? '1' : '0'};`)\n }\n}\n\n/**\n * Element-level CSS overrides based on effect + component styles.\n * These rules are emitted OUTSIDE the :root {} block so they target\n * actual DOM elements. They rely on data-effect-style / data-card-style\n * attributes set on <html> by layout.tsx (SSR) and ThemeProvider (client).\n */\nfunction applyEffectElementRules(rules: string[], config: ThemeConfiguration): void {\n const ve = getVE(config)\n const cs = getCS(config)\n if (!ve && !cs) return\n\n rules.push('')\n rules.push('/* ── Effect element overrides ── */')\n\n // ── Card border style / width (effect rules below may still replace it) ──\n // Skipped for the field defaults (solid / 1px) so existing cards are unchanged.\n if (\n ve?.borderStyle &&\n (ve.borderStyle !== 'solid' || (ve.borderWidth ?? '1px') !== '1px')\n ) {\n rules.push(`html[data-border-style] [data-card] {`)\n rules.push(` border-style: var(--border-style, solid);`)\n rules.push(` border-width: var(--border-width, 1px);`)\n rules.push(` border-color: var(--border);`)\n rules.push(`}`)\n }\n\n // ── Glass effect ──────────────────────────────────────────────────────\n // NOTE: All effect-style blocks are ALWAYS emitted regardless of the saved\n // effectStyle value. The CSS selectors are scoped by html[data-effect-style='X']\n // so only the matching data-attribute activates the rules. This means the CSS\n // is always correct even when stale cached/draft data is served.\n {\n const opacity = ve?.glassOpacity != null ? ve.glassOpacity : 60\n const blur = BLUR_PX_MAP[ve?.backdropBlur ?? 'strong'] ?? '16px'\n rules.push(`html[data-effect-style='glass'] [data-card],`)\n rules.push(`html[data-effect-style='glass'] .glass-card,`)\n rules.push(`html[data-effect-style='glass'] .glass {`)\n rules.push(\n ` background-color: color-mix(in srgb, var(--card) ${opacity}%, transparent) !important;`,\n )\n rules.push(` backdrop-filter: blur(${blur}) saturate(150%) !important;`)\n rules.push(` -webkit-backdrop-filter: blur(${blur}) saturate(150%) !important;`)\n rules.push(` border-color: color-mix(in srgb, var(--border) 40%, transparent) !important;`)\n rules.push(\n ` box-shadow: 0 4px 24px rgba(0,0,0,0.08), inset 0 1px 0 rgba(255,255,255,0.1) !important;`,\n )\n rules.push(`}`)\n rules.push(`html[data-effect-style='glass'] [data-card]:hover,`)\n rules.push(`html[data-effect-style='glass'] .glass-card:hover,`)\n rules.push(`html[data-effect-style='glass'] .glass:hover {`)\n rules.push(\n ` background-color: color-mix(in srgb, var(--card) ${Math.min(opacity + 10, 90)}%, transparent) !important;`,\n )\n rules.push(\n ` box-shadow: 0 8px 32px rgba(0,0,0,0.12), inset 0 1px 0 rgba(255,255,255,0.15) !important;`,\n )\n rules.push(`}`)\n // Apply the glass surface to the navbar container, but never to a <nav>\n // nested inside a <header> (or <footer>) — otherwise the inner nav paints a\n // second glass layer on top of the header's, producing a visible double-tint.\n // A standalone top-level <nav> (header-less layouts) still gets the surface.\n rules.push(\n `html[data-effect-style='glass'] header, html[data-effect-style='glass'] nav:not(header nav):not(footer nav) {`,\n )\n rules.push(\n ` background-color: color-mix(in srgb, var(--background) 65%, transparent) !important;`,\n )\n rules.push(` backdrop-filter: blur(${blur}) saturate(150%) !important;`)\n rules.push(` -webkit-backdrop-filter: blur(${blur}) saturate(150%) !important;`)\n rules.push(`}`)\n }\n\n // ── Neumorphic effect ──────────────────────────────────────────────────\n {\n rules.push(`html[data-effect-style='neumorphic'] [data-card],`)\n rules.push(`html[data-effect-style='neumorphic'] .glass-card,`)\n rules.push(`html[data-effect-style='neumorphic'] .glass {`)\n rules.push(` background-color: var(--background) !important;`)\n rules.push(` border: none !important;`)\n rules.push(` backdrop-filter: none !important;`)\n rules.push(` -webkit-backdrop-filter: none !important;`)\n rules.push(\n ` box-shadow: 6px 6px 12px rgba(0,0,0,0.12), -6px -6px 12px rgba(255,255,255,0.75) !important;`,\n )\n rules.push(`}`)\n rules.push(`html[data-effect-style='neumorphic'] [data-card]:hover,`)\n rules.push(`html[data-effect-style='neumorphic'] .glass-card:hover,`)\n rules.push(`html[data-effect-style='neumorphic'] .glass:hover {`)\n rules.push(\n ` box-shadow: 8px 8px 16px rgba(0,0,0,0.15), -8px -8px 16px rgba(255,255,255,0.85) !important;`,\n )\n rules.push(`}`)\n rules.push(`html[data-effect-style='neumorphic'][data-theme-mode='dark'] [data-card],`)\n rules.push(`html[data-effect-style='neumorphic'].dark [data-card],`)\n rules.push(`html[data-effect-style='neumorphic'][data-theme-mode='dark'] .glass-card,`)\n rules.push(`html[data-effect-style='neumorphic'].dark .glass-card {`)\n rules.push(\n ` box-shadow: 6px 6px 12px rgba(0,0,0,0.4), -6px -6px 12px rgba(255,255,255,0.04) !important;`,\n )\n rules.push(`}`)\n }\n\n // ── Clay effect ────────────────────────────────────────────────────────\n {\n rules.push(`html[data-effect-style='clay'] [data-card],`)\n rules.push(`html[data-effect-style='clay'] .glass-card,`)\n rules.push(`html[data-effect-style='clay'] .glass {`)\n rules.push(` border-radius: var(--radius-large, 1.5rem) !important;`)\n rules.push(\n ` box-shadow: 4px 4px 0px rgba(0,0,0,0.22), 0 8px 20px rgba(0,0,0,0.08) !important;`,\n )\n rules.push(` border: none !important;`)\n rules.push(` backdrop-filter: none !important;`)\n rules.push(` -webkit-backdrop-filter: none !important;`)\n rules.push(` transition: transform 200ms ease, box-shadow 200ms ease !important;`)\n rules.push(`}`)\n rules.push(`html[data-effect-style='clay'] [data-card]:hover,`)\n rules.push(`html[data-effect-style='clay'] .glass-card:hover,`)\n rules.push(`html[data-effect-style='clay'] .glass:hover {`)\n rules.push(` transform: translateY(-3px) !important;`)\n rules.push(\n ` box-shadow: 6px 6px 0px rgba(0,0,0,0.25), 0 12px 24px rgba(0,0,0,0.12) !important;`,\n )\n rules.push(`}`)\n }\n\n // ── Elevated effect ────────────────────────────────────────────────────\n {\n const shadow = ve?.shadowIntensity\n ? (SHADOW_MAP[ve.shadowIntensity] ?? SHADOW_MAP.medium)\n : SHADOW_MAP.medium\n rules.push(`html[data-effect-style='elevated'] [data-card],`)\n rules.push(`html[data-effect-style='elevated'] .glass-card,`)\n rules.push(`html[data-effect-style='elevated'] .glass {`)\n rules.push(` box-shadow: ${shadow} !important;`)\n rules.push(` border: none !important;`)\n rules.push(` backdrop-filter: none !important;`)\n rules.push(` -webkit-backdrop-filter: none !important;`)\n rules.push(` transition: box-shadow 200ms ease, transform 200ms ease !important;`)\n rules.push(`}`)\n rules.push(`html[data-effect-style='elevated'] [data-card]:hover,`)\n rules.push(`html[data-effect-style='elevated'] .glass-card:hover,`)\n rules.push(`html[data-effect-style='elevated'] .glass:hover {`)\n rules.push(\n ` box-shadow: 0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.1) !important;`,\n )\n rules.push(` transform: translateY(-2px) !important;`)\n rules.push(`}`)\n }\n\n // ── Flat effect ────────────────────────────────────────────────────────\n {\n rules.push(`html[data-effect-style='flat'] [data-card],`)\n rules.push(`html[data-effect-style='flat'] .glass-card,`)\n rules.push(`html[data-effect-style='flat'] .glass {`)\n rules.push(` box-shadow: none !important;`)\n rules.push(` backdrop-filter: none !important;`)\n rules.push(` -webkit-backdrop-filter: none !important;`)\n rules.push(`}`)\n }\n // ── Border overrides ───────────────────────────────────────────────────\n if (ve?.borderWidth && ve.borderWidth !== '1px' && ve.borderWidth !== '0px') {\n rules.push(`html[data-border-width='${ve.borderWidth}'] [data-card],`)\n rules.push(`html[data-border-width='${ve.borderWidth}'] .glass-card {`)\n rules.push(` border-width: ${ve.borderWidth} !important;`)\n rules.push(`}`)\n }\n\n // ── Card style: bordered (used by brutalism etc.) ──────────────────────\n if (cs?.cardStyle === 'bordered') {\n const bw = ve?.borderWidth ?? '2px'\n rules.push(`html[data-card-style='bordered'] [data-card],`)\n rules.push(`html[data-card-style='bordered'] .glass-card {`)\n rules.push(` border-width: ${bw} !important;`)\n rules.push(` border-style: solid !important;`)\n rules.push(` border-color: var(--foreground) !important;`)\n rules.push(` box-shadow: 4px 4px 0 var(--foreground) !important;`)\n rules.push(` border-radius: 0 !important;`)\n rules.push(` background-color: var(--card) !important;`)\n rules.push(` backdrop-filter: none !important;`)\n rules.push(` -webkit-backdrop-filter: none !important;`)\n rules.push(`}`)\n rules.push(`html[data-card-style='bordered'] [data-card]:hover,`)\n rules.push(`html[data-card-style='bordered'] .glass-card:hover {`)\n rules.push(` box-shadow: 6px 6px 0 var(--foreground) !important;`)\n rules.push(` transform: translate(-2px, -2px) !important;`)\n rules.push(`}`)\n }\n\n // ── Card style: gradient-border ────────────────────────────────────────\n if (cs?.cardStyle === 'gradient-border') {\n rules.push(`html[data-card-style='gradient-border'] [data-card],`)\n rules.push(`html[data-card-style='gradient-border'] .glass-card {`)\n rules.push(` border-image: var(--gradient-brand) 1 !important;`)\n rules.push(` border-width: 2px !important;`)\n rules.push(` border-style: solid !important;`)\n rules.push(`}`)\n }\n\n // ── Navbar styles ──────────────────────────────────────────────────────\n const navbarStyle = cs?.navbarStyle\n if (navbarStyle === 'blur') {\n rules.push(`html[data-navbar-style='blur'] header {`)\n rules.push(\n ` background-color: color-mix(in srgb, var(--background) 70%, transparent) !important;`,\n )\n rules.push(` backdrop-filter: blur(12px) !important;`)\n rules.push(` -webkit-backdrop-filter: blur(12px) !important;`)\n rules.push(`}`)\n } else if (navbarStyle === 'transparent') {\n rules.push(`html[data-navbar-style='transparent'] header {`)\n rules.push(` background-color: transparent !important;`)\n rules.push(` border-bottom-color: transparent !important;`)\n rules.push(`}`)\n } else if (navbarStyle === 'floating') {\n rules.push(`html[data-navbar-style='floating'] header {`)\n rules.push(` margin: 12px 16px 0;`)\n rules.push(` border-radius: var(--radius-large, 1.5rem);`)\n rules.push(` border: 1px solid var(--border);`)\n rules.push(` box-shadow: 0 4px 24px rgba(0,0,0,0.08);`)\n rules.push(`}`)\n } else if (navbarStyle === 'minimal') {\n rules.push(`html[data-navbar-style='minimal'] header {`)\n rules.push(` border-bottom-color: transparent !important;`)\n rules.push(` box-shadow: none !important;`)\n rules.push(`}`)\n }\n\n // ── Button variant: brutal ─────────────────────────────────────────────\n if (cs?.buttonVariant === 'brutal') {\n rules.push(`html[data-button-variant='brutal'] [data-btn] {`)\n rules.push(` border: 2px solid var(--foreground) !important;`)\n rules.push(` border-radius: 0 !important;`)\n rules.push(` box-shadow: 3px 3px 0 var(--foreground) !important;`)\n rules.push(` transition: box-shadow 100ms ease, transform 100ms ease !important;`)\n rules.push(`}`)\n rules.push(`html[data-button-variant='brutal'] [data-btn]:hover {`)\n rules.push(` box-shadow: 5px 5px 0 var(--foreground) !important;`)\n rules.push(` transform: translate(-2px, -2px) !important;`)\n rules.push(`}`)\n rules.push(`html[data-button-variant='brutal'] [data-btn]:active {`)\n rules.push(` box-shadow: 1px 1px 0 var(--foreground) !important;`)\n rules.push(` transform: translate(2px, 2px) !important;`)\n rules.push(`}`)\n }\n\n // ── Button variant: pill ───────────────────────────────────────────────\n if (cs?.buttonVariant === 'pill') {\n rules.push(`html[data-button-variant='pill'] [data-btn] {`)\n rules.push(` border-radius: 9999px !important;`)\n rules.push(`}`)\n }\n\n // ── Button variants: outlined / ghost ──────────────────────────────────\n if (cs?.buttonVariant === 'outlined') {\n rules.push(`html[data-button-variant='outlined'] [data-btn] {`)\n rules.push(` background-color: transparent !important;`)\n rules.push(` color: var(--primary) !important;`)\n rules.push(` border: 1.5px solid var(--primary) !important;`)\n rules.push(` box-shadow: none !important;`)\n rules.push(`}`)\n rules.push(`html[data-button-variant='outlined'] [data-btn]:hover {`)\n rules.push(` background-color: color-mix(in srgb, var(--primary) 10%, transparent) !important;`)\n rules.push(`}`)\n } else if (cs?.buttonVariant === 'ghost') {\n rules.push(`html[data-button-variant='ghost'] [data-btn] {`)\n rules.push(` background-color: transparent !important;`)\n rules.push(` color: var(--primary) !important;`)\n rules.push(` border-color: transparent !important;`)\n rules.push(` box-shadow: none !important;`)\n rules.push(`}`)\n rules.push(`html[data-button-variant='ghost'] [data-btn]:hover {`)\n rules.push(` background-color: color-mix(in srgb, var(--primary) 10%, transparent) !important;`)\n rules.push(`}`)\n }\n\n // ── Card hover effects ─────────────────────────────────────────────────\n if (cs?.cardHoverEffect === 'lift') {\n rules.push(`html[data-card-hover='lift'] [data-card]:hover,`)\n rules.push(`html[data-card-hover='lift'] .glass-card:hover {`)\n rules.push(` transform: translateY(-6px) !important;`)\n rules.push(` box-shadow: 0 20px 40px rgba(0,0,0,0.12) !important;`)\n rules.push(`}`)\n } else if (cs?.cardHoverEffect === 'scale') {\n rules.push(`html[data-card-hover='scale'] [data-card]:hover,`)\n rules.push(`html[data-card-hover='scale'] .glass-card:hover {`)\n rules.push(` transform: scale(1.02) !important;`)\n rules.push(`}`)\n } else if (cs?.cardHoverEffect === 'glow') {\n rules.push(`html[data-card-hover='glow'] [data-card]:hover,`)\n rules.push(`html[data-card-hover='glow'] .glass-card:hover {`)\n rules.push(\n ` box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 25%, transparent), 0 8px 32px rgba(0,0,0,0.1) !important;`,\n )\n rules.push(`}`)\n } else if (cs?.cardHoverEffect === 'tilt') {\n rules.push(`html[data-card-hover='tilt'] [data-card],`)\n rules.push(`html[data-card-hover='tilt'] .glass-card {`)\n rules.push(` transition: transform 200ms ease !important;`)\n rules.push(`}`)\n rules.push(`html[data-card-hover='tilt'] [data-card]:hover,`)\n rules.push(`html[data-card-hover='tilt'] .glass-card:hover {`)\n rules.push(` transform: perspective(1000px) rotateX(2deg) rotateY(-2deg) !important;`)\n rules.push(`}`)\n }\n\n // ── Button variant: gradient ───────────────────────────────────────────\n if (cs?.buttonVariant === 'gradient') {\n rules.push(`html[data-button-variant='gradient'] [data-btn] {`)\n rules.push(` background-image: var(--gradient-brand) !important;`)\n rules.push(` background-color: transparent !important;`)\n rules.push(` color: var(--primary-foreground) !important;`)\n rules.push(` border: none !important;`)\n rules.push(`}`)\n }\n\n // ── Button sizes ────────────────────────────────────────────────────────\n if (cs?.buttonSize) {\n const sizeMap: Record<string, { py: string; px: string; fs: string }> = {\n small: { py: '0.375rem', px: '0.75rem', fs: '0.8125rem' },\n medium: { py: '0.5rem', px: '1rem', fs: '0.875rem' },\n large: { py: '0.625rem', px: '1.5rem', fs: '1rem' },\n xl: { py: '0.875rem', px: '2rem', fs: '1.125rem' },\n }\n const s = sizeMap[cs.buttonSize] ?? sizeMap.medium!\n rules.push(`html[data-button-size='${cs.buttonSize}'] [data-btn] {`)\n rules.push(` padding: ${s.py} ${s.px} !important;`)\n rules.push(` font-size: ${s.fs} !important;`)\n rules.push(`}`)\n }\n\n // ── Image styles ───────────────────────────────────────────────────────\n // Target both [data-img] attributes and the .themed-image helper class.\n if (cs?.imageStyle && cs.imageStyle !== 'default') {\n const style = cs.imageStyle\n const sel = `html[data-image-style='${style}'] [data-img], html[data-image-style='${style}'] .themed-image`\n const hoverSel = `html[data-image-style='${style}'] [data-img]:hover, html[data-image-style='${style}'] .themed-image:hover`\n if (style === 'rounded') {\n rules.push(`${sel} { border-radius: var(--radius-large, 1rem) !important; overflow: hidden; }`)\n } else if (style === 'circle') {\n rules.push(\n `${sel} { border-radius: 9999px !important; aspect-ratio: 1 / 1; object-fit: cover; }`,\n )\n } else if (style === 'grayscale') {\n rules.push(`${sel} { filter: grayscale(1); transition: filter 300ms ease; }`)\n rules.push(`${hoverSel} { filter: grayscale(0); }`)\n } else if (style === 'duotone') {\n rules.push(`${sel} { filter: grayscale(1) contrast(1.05); mix-blend-mode: luminosity; }`)\n } else if (style === 'vignette') {\n rules.push(`${sel} { box-shadow: inset 0 0 60px rgba(0,0,0,0.45); }`)\n } else if (style === 'polaroid') {\n rules.push(\n `${sel} { background: #fff; padding: 10px 10px 36px; box-shadow: 0 6px 16px rgba(0,0,0,0.18); border-radius: 2px; }`,\n )\n }\n }\n\n // ── Link styles ─────────────────────────────────────────────────────────\n if (cs?.linkStyle) {\n const style = cs.linkStyle\n const sel = `html[data-link-style='${style}'] [data-link], html[data-link-style='${style}'] .themed-link`\n const hoverSel = `html[data-link-style='${style}'] [data-link]:hover, html[data-link-style='${style}'] .themed-link:hover`\n if (style === 'underline') {\n rules.push(`${sel} { text-decoration: underline; text-underline-offset: 0.15em; }`)\n } else if (style === 'none') {\n rules.push(`${sel} { text-decoration: none; }`)\n } else if (style === 'underline-hover') {\n rules.push(`${sel} { text-decoration: none; }`)\n rules.push(`${hoverSel} { text-decoration: underline; text-underline-offset: 0.15em; }`)\n } else if (style === 'highlight') {\n rules.push(\n `${sel} { text-decoration: none; background-image: linear-gradient(transparent 60%, color-mix(in srgb, var(--primary) 28%, transparent) 0); }`,\n )\n } else if (style === 'animated') {\n rules.push(\n `${sel} { text-decoration: none; background-image: var(--gradient-brand); background-size: 0% 2px; background-position: 0 100%; background-repeat: no-repeat; transition: background-size 300ms ease; }`,\n )\n rules.push(`${hoverSel} { background-size: 100% 2px; }`)\n }\n }\n\n // ── Footer styles ─────────────────────────────────────────────────────────\n if (cs?.footerStyle === 'dark') {\n rules.push(\n `html[data-footer-style='dark'] footer { background-color: var(--foreground) !important; color: var(--background) !important; }`,\n )\n } else if (cs?.footerStyle === 'full-color') {\n rules.push(\n `html[data-footer-style='full-color'] footer { background-color: var(--primary) !important; color: var(--primary-foreground) !important; }`,\n )\n } else if (cs?.footerStyle === 'gradient-top') {\n rules.push(\n `html[data-footer-style='gradient-top'] footer { border-top: 3px solid transparent; border-image: var(--gradient-brand) 1; }`,\n )\n } else if (cs?.footerStyle === 'minimal') {\n rules.push(\n `html[data-footer-style='minimal'] footer { background: transparent !important; border-top: 1px solid var(--border) !important; box-shadow: none !important; }`,\n )\n }\n\n // ── Hover animations off — neutralise interactive transforms ──────────────\n if (cs?.enableHoverAnimations === false) {\n rules.push(\n `html[data-hover-animations='off'] [data-card]:hover, html[data-hover-animations='off'] .glass-card:hover, html[data-hover-animations='off'] [data-btn]:hover { transform: none !important; }`,\n )\n }\n}\n\nfunction applyDarkModeOverrides(\n rules: string[],\n config: ThemeConfiguration,\n customization: ThemeCustomization | null | undefined,\n selector: string,\n): void {\n if (config.colorMode !== 'dark' && config.colorMode !== 'auto') return\n\n rules.push('')\n rules.push('@media (prefers-color-scheme: dark) {')\n rules.push(` ${selector} {`)\n\n if (customization?.backgroundColor && isLightBackground(customization.backgroundColor)) {\n rules.push(` --background: hsl(224 71% 4%);`)\n rules.push(` --card: hsl(224 71% 4%);`)\n rules.push(` --popover: hsl(224 71% 4%);`)\n }\n\n if (customization?.textColor && !isLightBackground(customization.textColor)) {\n rules.push(` --foreground: hsl(213 31% 91%);`)\n }\n\n rules.push(' }')\n rules.push('}')\n}\n\nfunction applyReducedMotionOverride(rules: string[], config: ThemeConfiguration): void {\n if (config.animationLevel !== 'none') return\n\n rules.push('')\n rules.push('@media (prefers-reduced-motion: reduce) {')\n rules.push(' *, *::before, *::after {')\n rules.push(' animation-duration: 0.01ms !important;')\n rules.push(' animation-iteration-count: 1 !important;')\n rules.push(' transition-duration: 0.01ms !important;')\n rules.push(' scroll-behavior: auto !important;')\n rules.push(' }')\n rules.push('}')\n}\n\nfunction appendCustomCSS(\n rules: string[],\n customization: ThemeCustomization | null | undefined,\n): void {\n if (!customization?.customCSS) return\n\n rules.push('')\n rules.push('/* Custom CSS */')\n rules.push(customization.customCSS)\n}\n\nfunction applyCustomizationStyleOverrides(\n styles: Record<string, string>,\n customization: ThemeCustomization | null | undefined,\n): void {\n if (!customization) return\n\n if (customization.primaryColor) {\n styles['--primary'] = customization.primaryColor\n }\n\n if (customization.accentColor) {\n styles['--accent'] = customization.accentColor\n }\n\n if (customization.backgroundColor) {\n styles['--background'] = customization.backgroundColor\n styles['--card'] = customization.backgroundColor\n styles['--popover'] = customization.backgroundColor\n }\n\n if (customization.textColor) {\n styles['--foreground'] = customization.textColor\n }\n}\n\nfunction applyTypographyStyleOverrides(\n styles: Record<string, string>,\n typography: ThemeTypographyPreset | null | undefined,\n): void {\n if (!typography) return\n\n if (typography.fontFamily) {\n styles['--font-family-base'] = typography.fontFamily\n }\n\n if (typography.headingFamily) {\n styles['--font-family-heading'] = typography.headingFamily\n }\n\n if (typography.baseFontSize) {\n styles['--font-size-base'] = typography.baseFontSize\n }\n\n if (typography.lineHeight) {\n styles['--line-height-base'] = typography.lineHeight\n }\n}\n"],"names":["borderRadiusPresets","generateThemeCSS","config","cssRules","customization","themeSelector","theme","push","applyCustomizationRootRules","applyBorderRadiusRule","applyFontScaleRules","applySpacingRule","applyAnimationRule","applyTypographyRules","applyVisualEffectsCSSVars","applyComponentStyleCSSVars","applyTypographyBaseRules","applyEffectElementRules","applyDarkModeOverrides","applyReducedMotionOverride","appendCustomCSS","join","isLightBackground","color","lightPatterns","some","pattern","test","getThemeStyles","styles","applyCustomizationStyleOverrides","applyTypographyStyleOverrides","typography","rules","primaryColor","accentColor","backgroundColor","textColor","borderRadius","preset","cssEntries","Object","entries","css","forEach","property","value","defaultRadius","fontScale","scaleValues","small","medium","large","xl","scale","baseSizes","className","baseSize","scaledSize","parseFloat","spacing","spacingMultipliers","compact","spacious","multiplier","animationLevel","animationSettings","none","duration","easing","reduced","high","level","settings","fontFamily","headingFamily","baseFontSize","lineHeight","fontWeights","token","weight","letterSpacing","headingWeight","headingLetterSpacing","headingTransform","typographyOverridden","getVE","visualEffects","getCS","componentStyles","SHADOW_MAP","subtle","strong","dramatic","BLUR_PX_MAP","slight","heavy","ve","effectStyle","shadowIntensity","shadow","backdropBlur","blurPx","borderStyle","borderWidth","glassOpacity","opacity","Math","min","max","toFixed","blur","cs","buttonVariant","buttonSize","cardStyle","cardHoverEffect","imageStyle","navbarStyle","footerStyle","linkStyle","enableScrollReveal","enableHoverAnimations","bw","sizeMap","py","px","fs","s","style","sel","hoverSel","selector","colorMode","customCSS"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kilivi/payloadcms-theme-management",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Theme configuration plugin for Payload CMS v3 with 60+ professional themes and standalone collection support",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
"import": "./dist/server.js",
|
|
16
16
|
"types": "./dist/server.d.ts"
|
|
17
17
|
},
|
|
18
|
+
"./next-fonts": {
|
|
19
|
+
"import": "./dist/next-fonts.js",
|
|
20
|
+
"types": "./dist/next-fonts.d.ts"
|
|
21
|
+
},
|
|
18
22
|
"./components/*": {
|
|
19
23
|
"import": "./dist/components/*.js",
|
|
20
24
|
"types": "./dist/components/*.d.ts"
|