@kilivi/payloadcms-theme-management 0.1.1
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 +97 -0
- package/dist/components/ServerThemeInjector.d.ts +11 -0
- package/dist/components/ServerThemeInjector.d.ts.map +1 -0
- package/dist/components/ServerThemeInjector.js +73 -0
- package/dist/components/ServerThemeInjector.js.map +1 -0
- package/dist/components/ThemePreview.d.ts +2 -0
- package/dist/components/ThemePreview.d.ts.map +1 -0
- package/dist/components/ThemePreview.js +153 -0
- package/dist/components/ThemePreview.js.map +1 -0
- package/dist/components/typographyPreviewUtils.d.ts +18 -0
- package/dist/components/typographyPreviewUtils.d.ts.map +1 -0
- package/dist/components/typographyPreviewUtils.js +80 -0
- package/dist/components/typographyPreviewUtils.js.map +1 -0
- package/dist/constants/themeFonts.d.ts +75 -0
- package/dist/constants/themeFonts.d.ts.map +1 -0
- package/dist/constants/themeFonts.js +45 -0
- package/dist/constants/themeFonts.js.map +1 -0
- package/dist/fields/ColorPickerField.d.ts +3 -0
- package/dist/fields/ColorPickerField.d.ts.map +1 -0
- package/dist/fields/ColorPickerField.js +153 -0
- package/dist/fields/ColorPickerField.js.map +1 -0
- package/dist/fields/RadiusField.d.ts +3 -0
- package/dist/fields/RadiusField.d.ts.map +1 -0
- package/dist/fields/RadiusField.js +91 -0
- package/dist/fields/RadiusField.js.map +1 -0
- package/dist/fields/ThemeColorPickerField.d.ts +5 -0
- package/dist/fields/ThemeColorPickerField.d.ts.map +1 -0
- package/dist/fields/ThemeColorPickerField.js +84 -0
- package/dist/fields/ThemeColorPickerField.js.map +1 -0
- package/dist/fields/ThemePreviewField.d.ts +3 -0
- package/dist/fields/ThemePreviewField.d.ts.map +1 -0
- package/dist/fields/ThemePreviewField.js +336 -0
- package/dist/fields/ThemePreviewField.js.map +1 -0
- package/dist/fields/ThemeTokenSelectField.d.ts +3 -0
- package/dist/fields/ThemeTokenSelectField.d.ts.map +1 -0
- package/dist/fields/ThemeTokenSelectField.js +128 -0
- package/dist/fields/ThemeTokenSelectField.js.map +1 -0
- package/dist/fields/colorModeFields.d.ts +10 -0
- package/dist/fields/colorModeFields.d.ts.map +1 -0
- package/dist/fields/colorModeFields.js +241 -0
- package/dist/fields/colorModeFields.js.map +1 -0
- package/dist/fields/themeConfigurationField.d.ts +17 -0
- package/dist/fields/themeConfigurationField.d.ts.map +1 -0
- package/dist/fields/themeConfigurationField.js +389 -0
- package/dist/fields/themeConfigurationField.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/dist/payload-types.d.ts +83 -0
- package/dist/payload-types.d.ts.map +1 -0
- package/dist/payload-types.js +6 -0
- package/dist/payload-types.js.map +1 -0
- package/dist/plugin.d.ts +3 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +2 -0
- package/dist/plugin.js.map +1 -0
- package/dist/presets.d.ts +43 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +580 -0
- package/dist/presets.js.map +1 -0
- package/dist/providers/Theme/themeConfig.d.ts +4 -0
- package/dist/providers/Theme/themeConfig.d.ts.map +1 -0
- package/dist/providers/Theme/themeConfig.js +66 -0
- package/dist/providers/Theme/themeConfig.js.map +1 -0
- package/dist/providers/Theme/types.d.ts +16 -0
- package/dist/providers/Theme/types.d.ts.map +1 -0
- package/dist/providers/Theme/types.js +14 -0
- package/dist/providers/Theme/types.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +3 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +36 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/resolveThemeConfiguration.d.ts +40 -0
- package/dist/utils/resolveThemeConfiguration.d.ts.map +1 -0
- package/dist/utils/resolveThemeConfiguration.js +148 -0
- package/dist/utils/resolveThemeConfiguration.js.map +1 -0
- package/dist/utils/themeAssets.d.ts +6 -0
- package/dist/utils/themeAssets.d.ts.map +1 -0
- package/dist/utils/themeAssets.js +67 -0
- package/dist/utils/themeAssets.js.map +1 -0
- package/dist/utils/themeColors.d.ts +36 -0
- package/dist/utils/themeColors.d.ts.map +1 -0
- package/dist/utils/themeColors.js +111 -0
- package/dist/utils/themeColors.js.map +1 -0
- package/dist/utils/themeUtils.d.ts +16 -0
- package/dist/utils/themeUtils.d.ts.map +1 -0
- package/dist/utils/themeUtils.js +260 -0
- package/dist/utils/themeUtils.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type Mode = 'light' | 'dark' | 'auto';
|
|
2
|
+
export type ThemePreset = 'default' | 'ocean' | 'forest' | 'sunset' | 'midnight' | 'rose' | 'cool' | 'custom';
|
|
3
|
+
export declare const THEME_PRESETS: ThemePreset[];
|
|
4
|
+
export declare function themeIsValid(theme: string): theme is ThemePreset;
|
|
5
|
+
export interface BorderRadiusPreset {
|
|
6
|
+
label: string;
|
|
7
|
+
css: Record<string, string>;
|
|
8
|
+
}
|
|
9
|
+
export interface ThemeColors {
|
|
10
|
+
primary: string;
|
|
11
|
+
secondary: string;
|
|
12
|
+
accent?: string;
|
|
13
|
+
background: string;
|
|
14
|
+
text: string;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/Theme/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAE7C,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,MAAM,GACN,MAAM,GACN,QAAQ,CAAC;AAEb,eAAO,MAAM,aAAa,EAAE,WAAW,EAStC,CAAC;AAEF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,WAAW,CAEhE;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const THEME_PRESETS = [
|
|
2
|
+
'default',
|
|
3
|
+
'ocean',
|
|
4
|
+
'forest',
|
|
5
|
+
'sunset',
|
|
6
|
+
'midnight',
|
|
7
|
+
'rose',
|
|
8
|
+
'cool',
|
|
9
|
+
'custom',
|
|
10
|
+
];
|
|
11
|
+
export function themeIsValid(theme) {
|
|
12
|
+
return THEME_PRESETS.includes(theme);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/providers/Theme/types.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,MAAM;IACN,MAAM;IACN,QAAQ;CACT,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,aAAa,CAAC,QAAQ,CAAC,KAAoB,CAAC,CAAC;AACtD,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAEtE,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,mBAAmB,EACnB,eAAe,GAChB,MAAM,qBAAqB,CAAA"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAEtE,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,mBAAmB,EACnB,eAAe,GAChB,MAAM,qBAAqB,CAAA"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ThemePreset } from './presets';
|
|
2
|
+
export interface ThemeConfigurationPluginOptions {
|
|
3
|
+
/** Whether the plugin should register itself */
|
|
4
|
+
enabled?: boolean;
|
|
5
|
+
/** Collection slug that stores site-level settings (default: `site-settings`) */
|
|
6
|
+
targetCollection?: string;
|
|
7
|
+
/** Theme presets available to editors */
|
|
8
|
+
themePresets?: ThemePreset[];
|
|
9
|
+
/** Default preset name when no value is stored */
|
|
10
|
+
defaultTheme?: string;
|
|
11
|
+
/** Allow editors to toggle between light / dark / auto modes */
|
|
12
|
+
includeColorModeToggle?: boolean;
|
|
13
|
+
/** Expose custom CSS editor */
|
|
14
|
+
includeCustomCSS?: boolean;
|
|
15
|
+
/** Reserved for future use, keeps API parity */
|
|
16
|
+
includeBrandIdentity?: boolean;
|
|
17
|
+
/** Enable advanced controls such as animation level */
|
|
18
|
+
enableAdvancedFeatures?: boolean;
|
|
19
|
+
/** Log helpful messages during config mutation */
|
|
20
|
+
enableLogging?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface FetchThemeConfigurationOptions {
|
|
23
|
+
/** Optional tenant identifier if your project is multi-tenant */
|
|
24
|
+
tenantSlug?: string;
|
|
25
|
+
/** Collection slug override (default: `site-settings`) */
|
|
26
|
+
collectionSlug?: string;
|
|
27
|
+
/** Depth parameter passed to Payload REST API */
|
|
28
|
+
depth?: number;
|
|
29
|
+
/** Locale parameter passed to Payload REST API */
|
|
30
|
+
locale?: string;
|
|
31
|
+
/** Include draft documents */
|
|
32
|
+
draft?: boolean;
|
|
33
|
+
/** Extra query parameters to append to the request */
|
|
34
|
+
queryParams?: Record<string, string | number | boolean>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,MAAM,WAAW,+BAA+B;IAC/C,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,yCAAyC;IACzC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAA;IAC5B,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gEAAgE;IAChE,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,+BAA+B;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,gDAAgD;IAChD,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,uDAAuD;IACvD,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,kDAAkD;IAClD,aAAa,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,8BAA8B;IAC9C,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8BAA8B;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;CACvD"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { SiteSetting } from '@/payload-types';
|
|
2
|
+
import type { Mode, ThemePreset as ThemePresetKey } from '@/providers/Theme/types';
|
|
3
|
+
import type { ThemeTypographyPreset } from '../presets';
|
|
4
|
+
interface ThemeTypographyOverride {
|
|
5
|
+
bodyFont?: string | null;
|
|
6
|
+
headingFont?: string | null;
|
|
7
|
+
bodyFontCustom?: string | null;
|
|
8
|
+
headingFontCustom?: string | null;
|
|
9
|
+
baseFontSize?: string | null;
|
|
10
|
+
lineHeight?: string | null;
|
|
11
|
+
}
|
|
12
|
+
type SiteThemeConfiguration = SiteSetting['themeConfiguration'] & {
|
|
13
|
+
typography?: ThemeTypographyOverride | null;
|
|
14
|
+
};
|
|
15
|
+
declare const BORDER_RADIUS_VALUES: readonly ["none", "small", "medium", "large", "xl", "full"];
|
|
16
|
+
declare const FONT_SCALE_VALUES: readonly ["small", "medium", "large"];
|
|
17
|
+
declare const SPACING_VALUES: readonly ["compact", "medium", "spacious"];
|
|
18
|
+
declare const ANIMATION_LEVEL_VALUES: readonly ["none", "reduced", "medium", "full"];
|
|
19
|
+
type BorderRadiusOption = (typeof BORDER_RADIUS_VALUES)[number];
|
|
20
|
+
type FontScaleOption = (typeof FONT_SCALE_VALUES)[number];
|
|
21
|
+
type SpacingOption = (typeof SPACING_VALUES)[number];
|
|
22
|
+
type AnimationLevelOption = (typeof ANIMATION_LEVEL_VALUES)[number];
|
|
23
|
+
type ThemeColorConfiguration = NonNullable<SiteThemeConfiguration['lightMode']>;
|
|
24
|
+
export interface ResolvedThemeConfiguration {
|
|
25
|
+
theme: ThemePresetKey;
|
|
26
|
+
colorMode: Mode;
|
|
27
|
+
allowColorModeToggle: boolean;
|
|
28
|
+
borderRadius: BorderRadiusOption;
|
|
29
|
+
fontScale: FontScaleOption;
|
|
30
|
+
spacing: SpacingOption;
|
|
31
|
+
animationLevel: AnimationLevelOption;
|
|
32
|
+
customCSS: string | null;
|
|
33
|
+
lightMode?: ThemeColorConfiguration;
|
|
34
|
+
darkMode?: ThemeColorConfiguration;
|
|
35
|
+
typography: ThemeTypographyPreset | null;
|
|
36
|
+
}
|
|
37
|
+
export declare const DEFAULT_THEME_CONFIGURATION: ResolvedThemeConfiguration;
|
|
38
|
+
export declare function resolveThemeConfiguration(themeConfiguration?: SiteThemeConfiguration | null): ResolvedThemeConfiguration;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=resolveThemeConfiguration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveThemeConfiguration.d.ts","sourceRoot":"","sources":["../../src/utils/resolveThemeConfiguration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAElF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAGvD,UAAU,uBAAuB;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED,KAAK,sBAAsB,GAAG,WAAW,CAAC,oBAAoB,CAAC,GAAG;IAChE,UAAU,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAA;CAC5C,CAAA;AAED,QAAA,MAAM,oBAAoB,6DAA8D,CAAA;AACxF,QAAA,MAAM,iBAAiB,uCAAwC,CAAA;AAC/D,QAAA,MAAM,cAAc,4CAA6C,CAAA;AACjE,QAAA,MAAM,sBAAsB,gDAAiD,CAAA;AAG7E,KAAK,kBAAkB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAC/D,KAAK,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAA;AACzD,KAAK,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AACpD,KAAK,oBAAoB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAA;AAInE,KAAK,uBAAuB,GAAG,WAAW,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAA;AAO/E,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,cAAc,CAAA;IACrB,SAAS,EAAE,IAAI,CAAA;IACf,oBAAoB,EAAE,OAAO,CAAA;IAC7B,YAAY,EAAE,kBAAkB,CAAA;IAChC,SAAS,EAAE,eAAe,CAAA;IAC1B,OAAO,EAAE,aAAa,CAAA;IACtB,cAAc,EAAE,oBAAoB,CAAA;IACpC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE,uBAAuB,CAAA;IACnC,QAAQ,CAAC,EAAE,uBAAuB,CAAA;IAClC,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAA;CACzC;AAED,eAAO,MAAM,2BAA2B,EAAE,0BAYzC,CAAA;AA6BD,wBAAgB,yBAAyB,CACvC,kBAAkB,CAAC,EAAE,sBAAsB,GAAG,IAAI,GACjD,0BAA0B,CA4D5B"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { FONT_VALUE_TO_CSS } from '@/constants/themeFonts';
|
|
2
|
+
import { themeIsValid } from '@/providers/Theme/types';
|
|
3
|
+
import { defaultThemePresets } from '../presets';
|
|
4
|
+
const BORDER_RADIUS_VALUES = ['none', 'small', 'medium', 'large', 'xl', 'full'];
|
|
5
|
+
const FONT_SCALE_VALUES = ['small', 'medium', 'large'];
|
|
6
|
+
const SPACING_VALUES = ['compact', 'medium', 'spacious'];
|
|
7
|
+
const ANIMATION_LEVEL_VALUES = ['none', 'reduced', 'medium', 'full'];
|
|
8
|
+
const MODE_VALUES = ['auto', 'light', 'dark'];
|
|
9
|
+
const DEFAULT_THEME_NAME = 'cool';
|
|
10
|
+
const DEFAULT_THEME_PRESET = defaultThemePresets.find((preset) => preset.name === DEFAULT_THEME_NAME);
|
|
11
|
+
export const DEFAULT_THEME_CONFIGURATION = {
|
|
12
|
+
theme: DEFAULT_THEME_NAME,
|
|
13
|
+
colorMode: 'auto',
|
|
14
|
+
allowColorModeToggle: true,
|
|
15
|
+
borderRadius: 'medium',
|
|
16
|
+
fontScale: 'medium',
|
|
17
|
+
spacing: 'medium',
|
|
18
|
+
animationLevel: 'medium',
|
|
19
|
+
customCSS: null,
|
|
20
|
+
lightMode: DEFAULT_THEME_PRESET?.lightMode,
|
|
21
|
+
darkMode: DEFAULT_THEME_PRESET?.darkMode,
|
|
22
|
+
typography: DEFAULT_THEME_PRESET?.typography ?? null,
|
|
23
|
+
};
|
|
24
|
+
function resolveBorderRadius(value) {
|
|
25
|
+
if (typeof value === 'string' &&
|
|
26
|
+
BORDER_RADIUS_VALUES.includes(value)) {
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
return DEFAULT_THEME_CONFIGURATION.borderRadius;
|
|
30
|
+
}
|
|
31
|
+
function isFontScale(value) {
|
|
32
|
+
return typeof value === 'string' && FONT_SCALE_VALUES.includes(value);
|
|
33
|
+
}
|
|
34
|
+
function isSpacing(value) {
|
|
35
|
+
return typeof value === 'string' && SPACING_VALUES.includes(value);
|
|
36
|
+
}
|
|
37
|
+
function isAnimationLevel(value) {
|
|
38
|
+
return typeof value === 'string' && ANIMATION_LEVEL_VALUES.includes(value);
|
|
39
|
+
}
|
|
40
|
+
function isMode(value) {
|
|
41
|
+
return typeof value === 'string' && MODE_VALUES.includes(value);
|
|
42
|
+
}
|
|
43
|
+
export function resolveThemeConfiguration(themeConfiguration) {
|
|
44
|
+
if (!themeConfiguration) {
|
|
45
|
+
return DEFAULT_THEME_CONFIGURATION;
|
|
46
|
+
}
|
|
47
|
+
const { theme, colorMode, allowColorModeToggle, borderRadius, fontScale, spacing, animationLevel, customCSS, lightMode, darkMode, typography, } = themeConfiguration;
|
|
48
|
+
const resolvedTheme = typeof theme === 'string' && themeIsValid(theme)
|
|
49
|
+
? theme
|
|
50
|
+
: DEFAULT_THEME_CONFIGURATION.theme;
|
|
51
|
+
const resolvedMode = isMode(colorMode)
|
|
52
|
+
? colorMode
|
|
53
|
+
: DEFAULT_THEME_CONFIGURATION.colorMode;
|
|
54
|
+
const resolvedBorderRadius = resolveBorderRadius(borderRadius);
|
|
55
|
+
const resolvedFontScale = isFontScale(fontScale)
|
|
56
|
+
? fontScale
|
|
57
|
+
: DEFAULT_THEME_CONFIGURATION.fontScale;
|
|
58
|
+
const resolvedSpacing = isSpacing(spacing) ? spacing : DEFAULT_THEME_CONFIGURATION.spacing;
|
|
59
|
+
const resolvedAnimationLevel = isAnimationLevel(animationLevel)
|
|
60
|
+
? animationLevel
|
|
61
|
+
: DEFAULT_THEME_CONFIGURATION.animationLevel;
|
|
62
|
+
const resolvedAllowToggle = typeof allowColorModeToggle === 'boolean'
|
|
63
|
+
? allowColorModeToggle
|
|
64
|
+
: DEFAULT_THEME_CONFIGURATION.allowColorModeToggle;
|
|
65
|
+
const resolvedCustomCSS = typeof customCSS === 'string' ? customCSS : null;
|
|
66
|
+
const preset = defaultThemePresets.find((candidate) => candidate.name === resolvedTheme);
|
|
67
|
+
const baseLightMode = preset?.lightMode ?? DEFAULT_THEME_CONFIGURATION.lightMode;
|
|
68
|
+
const baseDarkMode = preset?.darkMode ?? DEFAULT_THEME_CONFIGURATION.darkMode;
|
|
69
|
+
const resolvedLightMode = mergeColorModes(baseLightMode, lightMode);
|
|
70
|
+
const resolvedDarkMode = mergeColorModes(baseDarkMode, darkMode);
|
|
71
|
+
const resolvedTypography = mergeTypography(preset?.typography, typography) ?? preset?.typography ?? null;
|
|
72
|
+
return {
|
|
73
|
+
theme: resolvedTheme,
|
|
74
|
+
colorMode: resolvedMode,
|
|
75
|
+
allowColorModeToggle: resolvedAllowToggle,
|
|
76
|
+
borderRadius: resolvedBorderRadius,
|
|
77
|
+
fontScale: resolvedFontScale,
|
|
78
|
+
spacing: resolvedSpacing,
|
|
79
|
+
animationLevel: resolvedAnimationLevel,
|
|
80
|
+
customCSS: resolvedCustomCSS,
|
|
81
|
+
lightMode: resolvedLightMode,
|
|
82
|
+
darkMode: resolvedDarkMode,
|
|
83
|
+
typography: resolvedTypography,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function mergeColorModes(base, overrides) {
|
|
87
|
+
const merged = {};
|
|
88
|
+
if (base) {
|
|
89
|
+
Object.entries(base).forEach(([key, value]) => {
|
|
90
|
+
if (typeof value === 'string' && value.trim().length > 0) {
|
|
91
|
+
merged[key] = value;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (overrides) {
|
|
96
|
+
Object.entries(overrides).forEach(([key, value]) => {
|
|
97
|
+
if (typeof value === 'string' && value.trim().length > 0) {
|
|
98
|
+
merged[key] = value;
|
|
99
|
+
}
|
|
100
|
+
else if (value === null) {
|
|
101
|
+
delete merged[key];
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return Object.keys(merged).length > 0 ? merged : undefined;
|
|
106
|
+
}
|
|
107
|
+
function mergeTypography(base, overrides) {
|
|
108
|
+
if (!base && !overrides) {
|
|
109
|
+
return base ?? null;
|
|
110
|
+
}
|
|
111
|
+
const result = {
|
|
112
|
+
fontFamily: base?.fontFamily ?? 'var(--font-geist-sans)',
|
|
113
|
+
headingFamily: base?.headingFamily ?? 'var(--font-geist-sans)',
|
|
114
|
+
baseFontSize: base?.baseFontSize ?? '16px',
|
|
115
|
+
lineHeight: base?.lineHeight ?? '1.6',
|
|
116
|
+
fontWeights: { ...(base?.fontWeights ?? {}) },
|
|
117
|
+
letterSpacing: { ...(base?.letterSpacing ?? {}) },
|
|
118
|
+
};
|
|
119
|
+
if (overrides) {
|
|
120
|
+
const resolvedBodyFont = resolveFontSelection(overrides.bodyFont, overrides.bodyFontCustom, base?.fontFamily);
|
|
121
|
+
if (resolvedBodyFont) {
|
|
122
|
+
result.fontFamily = resolvedBodyFont;
|
|
123
|
+
}
|
|
124
|
+
const resolvedHeadingFont = resolveFontSelection(overrides.headingFont, overrides.headingFontCustom, base?.headingFamily);
|
|
125
|
+
if (resolvedHeadingFont) {
|
|
126
|
+
result.headingFamily = resolvedHeadingFont;
|
|
127
|
+
}
|
|
128
|
+
if (overrides.baseFontSize && overrides.baseFontSize !== 'preset') {
|
|
129
|
+
result.baseFontSize = overrides.baseFontSize;
|
|
130
|
+
}
|
|
131
|
+
if (overrides.lineHeight && overrides.lineHeight !== 'preset') {
|
|
132
|
+
result.lineHeight = overrides.lineHeight;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
function resolveFontSelection(selection, custom, fallback) {
|
|
138
|
+
if (!selection || selection === 'preset') {
|
|
139
|
+
return fallback ?? null;
|
|
140
|
+
}
|
|
141
|
+
if (selection === 'custom') {
|
|
142
|
+
const trimmed = custom?.trim();
|
|
143
|
+
return trimmed && trimmed.length > 0 ? trimmed : (fallback ?? null);
|
|
144
|
+
}
|
|
145
|
+
const mapped = FONT_VALUE_TO_CSS[selection];
|
|
146
|
+
return mapped ?? fallback ?? null;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=resolveThemeConfiguration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveThemeConfiguration.js","sourceRoot":"","sources":["../../src/utils/resolveThemeConfiguration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ThemePreset } from '@/providers/Theme/types';
|
|
2
|
+
export declare function getThemeCriticalCSS(theme: ThemePreset): Promise<string | null>;
|
|
3
|
+
export declare function getThemeCSSPath(theme: ThemePreset): string;
|
|
4
|
+
export declare function generateThemePreloadLinks(theme: ThemePreset): string;
|
|
5
|
+
export declare function createFallbackCriticalCSS(theme: ThemePreset): string;
|
|
6
|
+
//# sourceMappingURL=themeAssets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themeAssets.d.ts","sourceRoot":"","sources":["../../src/utils/themeAssets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAwB1D,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgBpF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAG1D;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAGpE;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAmBpE"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
const themeCriticalFiles = {
|
|
4
|
+
cool: 'cool-critical.css',
|
|
5
|
+
brutal: 'brutal-critical.css',
|
|
6
|
+
neon: 'neon-critical.css',
|
|
7
|
+
solar: 'solar-critical.css',
|
|
8
|
+
dealership: 'dealership-critical.css',
|
|
9
|
+
'real-estate': 'real-estate-critical.css',
|
|
10
|
+
'real-estate-gold': 'real-estate-gold-critical.css',
|
|
11
|
+
'real-estate-neutral': 'real-estate-neutral-critical.css',
|
|
12
|
+
};
|
|
13
|
+
const themeFullFiles = {
|
|
14
|
+
cool: 'cool.css',
|
|
15
|
+
brutal: 'brutal.css',
|
|
16
|
+
neon: 'neon.css',
|
|
17
|
+
solar: 'solar.css',
|
|
18
|
+
dealership: 'dealership.css',
|
|
19
|
+
'real-estate': 'real-estate.css',
|
|
20
|
+
'real-estate-gold': 'real-estate-gold.css',
|
|
21
|
+
'real-estate-neutral': 'real-estate-neutral.css',
|
|
22
|
+
};
|
|
23
|
+
export async function getThemeCriticalCSS(theme) {
|
|
24
|
+
try {
|
|
25
|
+
const filename = themeCriticalFiles[theme];
|
|
26
|
+
if (!filename) {
|
|
27
|
+
console.warn(`Critical CSS file not found for theme: ${theme}`);
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const filePath = join(process.cwd(), 'public', 'themes', filename);
|
|
31
|
+
const css = await readFile(filePath, 'utf-8');
|
|
32
|
+
return css.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error(`Error reading critical CSS for theme ${theme}:`, error);
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export function getThemeCSSPath(theme) {
|
|
40
|
+
const filename = themeFullFiles[theme];
|
|
41
|
+
return `/themes/${filename}`;
|
|
42
|
+
}
|
|
43
|
+
export function generateThemePreloadLinks(theme) {
|
|
44
|
+
const cssPath = getThemeCSSPath(theme);
|
|
45
|
+
return `<link rel="preload" href="${cssPath}" as="style" onload="this.onload=null;this.rel='stylesheet'">`;
|
|
46
|
+
}
|
|
47
|
+
export function createFallbackCriticalCSS(theme) {
|
|
48
|
+
return `
|
|
49
|
+
/* Fallback critical CSS for ${theme} theme */
|
|
50
|
+
[data-theme="${theme}"] {
|
|
51
|
+
--background: hsl(0 0% 100%);
|
|
52
|
+
--foreground: hsl(222 47% 11%);
|
|
53
|
+
--primary: hsl(221 83% 53%);
|
|
54
|
+
--primary-foreground: hsl(210 40% 98%);
|
|
55
|
+
color-scheme: light;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
[data-theme="${theme}"][data-theme-mode="dark"] {
|
|
59
|
+
--background: hsl(222 47% 11%);
|
|
60
|
+
--foreground: hsl(210 40% 98%);
|
|
61
|
+
--primary: hsl(217 91% 60%);
|
|
62
|
+
--primary-foreground: hsl(222 47% 11%);
|
|
63
|
+
color-scheme: dark;
|
|
64
|
+
}
|
|
65
|
+
`.trim();
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=themeAssets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themeAssets.js","sourceRoot":"","sources":["../../src/utils/themeAssets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,MAAM,kBAAkB,GAA2B;IACjD,IAAI,EAAE,mBAAmB;IACzB,MAAM,EAAE,qBAAqB;IAC7B,IAAI,EAAE,mBAAmB;IACzB,KAAK,EAAE,oBAAoB;IAC3B,UAAU,EAAE,yBAAyB;IACrC,aAAa,EAAE,0BAA0B;IACzC,kBAAkB,EAAE,+BAA+B;IACnD,qBAAqB,EAAE,kCAAkC;CAC1D,CAAA;AAED,MAAM,cAAc,GAA2B;IAC7C,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE,gBAAgB;IAC5B,aAAa,EAAE,iBAAiB;IAChC,kBAAkB,EAAE,sBAAsB;IAC1C,qBAAqB,EAAE,yBAAyB;CACjD,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAkB;IAC1D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,0CAA0C,KAAK,EAAE,CAAC,CAAA;YAC/D,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAClE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAE7C,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,KAAK,GAAG,EAAE,KAAK,CAAC,CAAA;QACtE,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAkB;IAChD,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IACtC,OAAO,WAAW,QAAQ,EAAE,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAkB;IAC1D,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IACtC,OAAO,6BAA6B,OAAO,+DAA+D,CAAA;AAC5G,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAkB;IAC1D,OAAO;+BACsB,KAAK;eACrB,KAAK;;;;;;;;eAQL,KAAK;;;;;;;CAOnB,CAAC,IAAI,EAAE,CAAA;AACR,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
interface ColorMode {
|
|
2
|
+
background?: string | null;
|
|
3
|
+
foreground?: string | null;
|
|
4
|
+
card?: string | null;
|
|
5
|
+
cardForeground?: string | null;
|
|
6
|
+
popover?: string | null;
|
|
7
|
+
popoverForeground?: string | null;
|
|
8
|
+
primary?: string | null;
|
|
9
|
+
primaryForeground?: string | null;
|
|
10
|
+
secondary?: string | null;
|
|
11
|
+
secondaryForeground?: string | null;
|
|
12
|
+
muted?: string | null;
|
|
13
|
+
mutedForeground?: string | null;
|
|
14
|
+
accent?: string | null;
|
|
15
|
+
accentForeground?: string | null;
|
|
16
|
+
destructive?: string | null;
|
|
17
|
+
destructiveForeground?: string | null;
|
|
18
|
+
border?: string | null;
|
|
19
|
+
input?: string | null;
|
|
20
|
+
ring?: string | null;
|
|
21
|
+
}
|
|
22
|
+
export interface ThemeColors {
|
|
23
|
+
lightMode?: ColorMode;
|
|
24
|
+
darkMode?: ColorMode;
|
|
25
|
+
}
|
|
26
|
+
interface GenerateThemeColorsOptions extends ThemeColors {
|
|
27
|
+
themeName?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function hexToHsl(hex: string): string;
|
|
30
|
+
export declare function generateColorModeCss(colors: ColorMode, options?: {
|
|
31
|
+
themeName?: string;
|
|
32
|
+
isDark?: boolean;
|
|
33
|
+
}): string;
|
|
34
|
+
export declare function generateThemeColorsCss(options: GenerateThemeColorsOptions): string;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=themeColors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themeColors.d.ts","sourceRoot":"","sources":["../../src/utils/themeColors.ts"],"names":[],"mappings":"AAAA,UAAU,SAAS;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED,UAAU,0BAA2B,SAAQ,WAAW;IACtD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAwBD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA4C5C;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACrD,MAAM,CAkBR;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,CAelF"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
const COLOR_VARIABLE_MAP = [
|
|
2
|
+
{ key: 'background', variable: '--background' },
|
|
3
|
+
{ key: 'foreground', variable: '--foreground' },
|
|
4
|
+
{ key: 'card', variable: '--card' },
|
|
5
|
+
{ key: 'cardForeground', variable: '--card-foreground' },
|
|
6
|
+
{ key: 'popover', variable: '--popover' },
|
|
7
|
+
{ key: 'popoverForeground', variable: '--popover-foreground' },
|
|
8
|
+
{ key: 'primary', variable: '--primary' },
|
|
9
|
+
{ key: 'primaryForeground', variable: '--primary-foreground' },
|
|
10
|
+
{ key: 'secondary', variable: '--secondary' },
|
|
11
|
+
{ key: 'secondaryForeground', variable: '--secondary-foreground' },
|
|
12
|
+
{ key: 'muted', variable: '--muted' },
|
|
13
|
+
{ key: 'mutedForeground', variable: '--muted-foreground' },
|
|
14
|
+
{ key: 'accent', variable: '--accent' },
|
|
15
|
+
{ key: 'accentForeground', variable: '--accent-foreground' },
|
|
16
|
+
{ key: 'destructive', variable: '--destructive' },
|
|
17
|
+
{ key: 'destructiveForeground', variable: '--destructive-foreground' },
|
|
18
|
+
{ key: 'border', variable: '--border' },
|
|
19
|
+
{ key: 'input', variable: '--input' },
|
|
20
|
+
{ key: 'ring', variable: '--ring' },
|
|
21
|
+
];
|
|
22
|
+
export function hexToHsl(hex) {
|
|
23
|
+
if (!hex)
|
|
24
|
+
return '0 0% 0%';
|
|
25
|
+
hex = hex.replace('#', '');
|
|
26
|
+
if (hex.length === 3) {
|
|
27
|
+
hex = hex
|
|
28
|
+
.split('')
|
|
29
|
+
.map((char) => char + char)
|
|
30
|
+
.join('');
|
|
31
|
+
}
|
|
32
|
+
const r = Number.parseInt(hex.substring(0, 2), 16) / 255;
|
|
33
|
+
const g = Number.parseInt(hex.substring(2, 4), 16) / 255;
|
|
34
|
+
const b = Number.parseInt(hex.substring(4, 6), 16) / 255;
|
|
35
|
+
const max = Math.max(r, g, b);
|
|
36
|
+
const min = Math.min(r, g, b);
|
|
37
|
+
let h = 0;
|
|
38
|
+
let s = 0;
|
|
39
|
+
const l = (max + min) / 2;
|
|
40
|
+
if (max !== min) {
|
|
41
|
+
const d = max - min;
|
|
42
|
+
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
43
|
+
switch (max) {
|
|
44
|
+
case r:
|
|
45
|
+
h = ((g - b) / d + (g < b ? 6 : 0)) / 6;
|
|
46
|
+
break;
|
|
47
|
+
case g:
|
|
48
|
+
h = ((b - r) / d + 2) / 6;
|
|
49
|
+
break;
|
|
50
|
+
case b:
|
|
51
|
+
h = ((r - g) / d + 4) / 6;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
h = Math.round(h * 360);
|
|
56
|
+
s = Math.round(s * 100);
|
|
57
|
+
const lRounded = Math.round(l * 100);
|
|
58
|
+
return `${h} ${s}% ${lRounded}%`;
|
|
59
|
+
}
|
|
60
|
+
export function generateColorModeCss(colors, options = {}) {
|
|
61
|
+
if (!colors)
|
|
62
|
+
return '';
|
|
63
|
+
const { themeName, isDark = false } = options;
|
|
64
|
+
const cssVariables = COLOR_VARIABLE_MAP.reduce((acc, { key, variable }) => {
|
|
65
|
+
const value = normalizeColor(colors[key]);
|
|
66
|
+
if (!value)
|
|
67
|
+
return acc;
|
|
68
|
+
acc.push(`${variable}: hsl(${hexToHsl(value)});`);
|
|
69
|
+
return acc;
|
|
70
|
+
}, []);
|
|
71
|
+
if (cssVariables.length === 0)
|
|
72
|
+
return '';
|
|
73
|
+
const selector = buildSelector(themeName, isDark);
|
|
74
|
+
return `${selector} {
|
|
75
|
+
${cssVariables.join('\n ')}
|
|
76
|
+
}`;
|
|
77
|
+
}
|
|
78
|
+
export function generateThemeColorsCss(options) {
|
|
79
|
+
const cssBlocks = [];
|
|
80
|
+
const { themeName, lightMode, darkMode } = options;
|
|
81
|
+
if (lightMode) {
|
|
82
|
+
const lightModeCss = generateColorModeCss(lightMode, { themeName, isDark: false });
|
|
83
|
+
if (lightModeCss)
|
|
84
|
+
cssBlocks.push(lightModeCss);
|
|
85
|
+
}
|
|
86
|
+
if (darkMode) {
|
|
87
|
+
const darkModeCss = generateColorModeCss(darkMode, { themeName, isDark: true });
|
|
88
|
+
if (darkModeCss)
|
|
89
|
+
cssBlocks.push(darkModeCss);
|
|
90
|
+
}
|
|
91
|
+
return cssBlocks.join('\n\n');
|
|
92
|
+
}
|
|
93
|
+
function buildSelector(themeName, isDark) {
|
|
94
|
+
if (themeName) {
|
|
95
|
+
if (isDark) {
|
|
96
|
+
return `:root[data-theme='${themeName}'][data-theme-mode='dark'], .dark[data-theme='${themeName}']`;
|
|
97
|
+
}
|
|
98
|
+
return `:root[data-theme='${themeName}']`;
|
|
99
|
+
}
|
|
100
|
+
if (isDark) {
|
|
101
|
+
return ":root[data-theme-mode='dark'], .dark";
|
|
102
|
+
}
|
|
103
|
+
return ':root';
|
|
104
|
+
}
|
|
105
|
+
function normalizeColor(value) {
|
|
106
|
+
if (typeof value !== 'string')
|
|
107
|
+
return null;
|
|
108
|
+
const trimmed = value.trim();
|
|
109
|
+
return trimmed.length === 0 ? null : trimmed;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=themeColors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themeColors.js","sourceRoot":"","sources":["../../src/utils/themeColors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SiteSetting } from '@/payload-types';
|
|
2
|
+
import type { ThemeTypographyPreset } from '../presets';
|
|
3
|
+
type ThemeTypographyConfiguration = {
|
|
4
|
+
typography?: ThemeTypographyPreset | null;
|
|
5
|
+
};
|
|
6
|
+
type ThemeConfiguration = Omit<NonNullable<SiteSetting['themeConfiguration']>, 'typography'> & ThemeTypographyConfiguration;
|
|
7
|
+
/**
|
|
8
|
+
* Generates CSS custom properties from theme configuration
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateThemeCSS(config: ThemeConfiguration): string;
|
|
11
|
+
/**
|
|
12
|
+
* Generate theme styles for use in components
|
|
13
|
+
*/
|
|
14
|
+
export declare function getThemeStyles(config: ThemeConfiguration): Record<string, string>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=themeUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themeUtils.d.ts","sourceRoot":"","sources":["../../src/utils/themeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEvD,KAAK,4BAA4B,GAAG;IAClC,UAAU,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAA;CAC1C,CAAA;AAED,KAAK,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,EAAE,YAAY,CAAC,GAC1F,4BAA4B,CAAA;AAa9B;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CA0BnE;AAiBD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,kBAAkB,0BAQxD"}
|