@suiteop/storefront 0.4.0 → 0.6.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/CHANGELOG.md +56 -0
- package/README.md +9 -2
- package/dist/astro-content-model.cjs +5 -5
- package/dist/astro-content-model.js +4 -4
- package/dist/astro.cjs +1 -1
- package/dist/astro.d.cts +66 -1
- package/dist/astro.d.ts +66 -1
- package/dist/astro.js +1 -1
- package/dist/availability.d-Cla9GuGc.d.cts +84 -0
- package/dist/availability.d-Cla9GuGc.d.ts +84 -0
- package/dist/checkout.cjs +4 -4
- package/dist/checkout.d.cts +11 -0
- package/dist/checkout.d.ts +11 -0
- package/dist/checkout.js +3 -3
- package/dist/{chunk-TLTL7M3O.js → chunk-3B6ZYRYF.js} +2 -2
- package/dist/chunk-3NE27PHL.cjs +19 -0
- package/dist/{chunk-HMLBMNGA.js → chunk-7ZAI36LH.js} +1 -1
- package/dist/{chunk-LVFRVNT3.cjs → chunk-EHQFWSP6.cjs} +2 -1
- package/dist/{chunk-6NFURJXI.js → chunk-IBCBDAGY.js} +2 -2
- package/dist/{chunk-USOISC2R.cjs → chunk-J5FZ4WDQ.cjs} +2 -2
- package/dist/chunk-JF245QUY.cjs +9 -0
- package/dist/{chunk-IUJTHNB3.cjs → chunk-OXCLLFCY.cjs} +3 -3
- package/dist/chunk-QBHOJGZI.cjs +21 -0
- package/dist/{chunk-VV2UNVQ2.cjs → chunk-UMCI4YBN.cjs} +2 -2
- package/dist/chunk-UQWQPTHO.js +3 -0
- package/dist/{chunk-ZI2PG7LS.js → chunk-W5K7IDYN.js} +1 -1
- package/dist/chunk-XOCFEVP4.js +6 -0
- package/dist/chunk-YIYGBTAM.js +9 -0
- package/dist/{client-oyYRhUv0.d.ts → client-CX8K7JNt.d.cts} +108 -20
- package/dist/{client-CZWN4im4.d.cts → client-s-lEwqzc.d.ts} +108 -20
- package/dist/components.cjs +2 -2
- package/dist/components.d.cts +43 -1
- package/dist/components.d.ts +43 -1
- package/dist/components.js +1 -1
- package/dist/config.cjs +10 -3
- package/dist/config.d.cts +240 -79
- package/dist/config.d.ts +240 -79
- package/dist/config.js +4 -4
- package/dist/content.cjs +11 -11
- package/dist/content.d.cts +53 -9
- package/dist/content.d.ts +53 -9
- package/dist/content.js +4 -4
- package/dist/{errors-CAW7nLHr.d.cts → errors-Oax7djdp.d.ts} +54 -13
- package/dist/{errors-DoXdi1vS.d.ts → errors-welPvrD6.d.cts} +54 -13
- package/dist/index.cjs +22 -22
- package/dist/index.d.cts +27 -8
- package/dist/index.d.ts +27 -8
- package/dist/index.js +5 -5
- package/dist/react.cjs +7 -7
- package/dist/react.d.cts +24 -3
- package/dist/react.d.ts +24 -3
- package/dist/react.js +6 -6
- package/package.json +1 -1
- package/dist/availability-CnzmxuV3.d.cts +0 -60
- package/dist/availability-CnzmxuV3.d.ts +0 -60
- package/dist/chunk-CTHHMNLE.cjs +0 -19
- package/dist/chunk-E5CGGMCO.cjs +0 -19
- package/dist/chunk-PYVUDQSQ.js +0 -3
- package/dist/chunk-TRXDDUEL.js +0 -5
- package/dist/chunk-UWUKERLK.js +0 -9
- package/dist/chunk-ZLAOY6IF.cjs +0 -9
package/dist/config.d.ts
CHANGED
|
@@ -4,163 +4,183 @@ declare const STOREFRONT_FONTS: readonly ["inter", "montserrat", "poppins", "ral
|
|
|
4
4
|
type StorefrontFont = (typeof STOREFRONT_FONTS)[number];
|
|
5
5
|
declare const STOREFRONT_FONT_FAMILIES: Record<StorefrontFont, string>;
|
|
6
6
|
|
|
7
|
-
declare const STOREFRONT_LOCALES: readonly [
|
|
7
|
+
declare const STOREFRONT_LOCALES: readonly ['en', 'fr', 'es', 'de', 'it', 'pt', 'nl'];
|
|
8
8
|
type StorefrontLocale = (typeof STOREFRONT_LOCALES)[number];
|
|
9
|
+
declare const STOREFRONT_LAYOUTS: readonly ['listings', 'locations', 'areas', 'single'];
|
|
10
|
+
type StorefrontLayout = (typeof STOREFRONT_LAYOUTS)[number];
|
|
11
|
+
declare const STOREFRONT_THEMES: readonly ['folio', 'hearth', 'circuit', 'tide', 'noir', 'fjord'];
|
|
12
|
+
type StorefrontTheme = (typeof STOREFRONT_THEMES)[number];
|
|
9
13
|
declare const storefrontSiteConfigSchema: z.ZodObject<{
|
|
14
|
+
layout: z.ZodCatch<z.ZodOptional<z.ZodEnum<{
|
|
15
|
+
areas: "areas";
|
|
16
|
+
listings: "listings";
|
|
17
|
+
locations: "locations";
|
|
18
|
+
single: "single";
|
|
19
|
+
}>>>;
|
|
20
|
+
theme: z.ZodCatch<z.ZodOptional<z.ZodEnum<{
|
|
21
|
+
circuit: "circuit";
|
|
22
|
+
fjord: "fjord";
|
|
23
|
+
folio: "folio";
|
|
24
|
+
hearth: "hearth";
|
|
25
|
+
noir: "noir";
|
|
26
|
+
tide: "tide";
|
|
27
|
+
}>>>;
|
|
10
28
|
brand: z.ZodObject<{
|
|
11
29
|
name: z.ZodString;
|
|
12
30
|
logoUrl: z.ZodNullable<z.ZodURL>;
|
|
31
|
+
logoOnDarkUrl: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
|
|
13
32
|
faviconUrl: z.ZodNullable<z.ZodURL>;
|
|
14
33
|
}, z.core.$strip>;
|
|
15
34
|
colors: z.ZodObject<{
|
|
16
35
|
primary: z.ZodString;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
36
|
+
secondary: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
37
|
+
primaryForeground: z.ZodOptional<z.ZodString>;
|
|
38
|
+
background: z.ZodOptional<z.ZodString>;
|
|
39
|
+
foreground: z.ZodOptional<z.ZodString>;
|
|
40
|
+
accent: z.ZodOptional<z.ZodString>;
|
|
21
41
|
}, z.core.$strip>;
|
|
22
|
-
fonts: z.ZodObject<{
|
|
23
|
-
heading: z.ZodEnum<{
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
poppins: "poppins";
|
|
27
|
-
raleway: "raleway";
|
|
28
|
-
nunito: "nunito";
|
|
29
|
-
work_sans: "work_sans";
|
|
30
|
-
mulish: "mulish";
|
|
42
|
+
fonts: z.ZodOptional<z.ZodObject<{
|
|
43
|
+
heading: z.ZodOptional<z.ZodEnum<{
|
|
44
|
+
anybody: "anybody";
|
|
45
|
+
archivo: "archivo";
|
|
31
46
|
barlow: "barlow";
|
|
32
|
-
jost: "jost";
|
|
33
47
|
bitter: "bitter";
|
|
34
|
-
archivo: "archivo";
|
|
35
|
-
public_sans: "public_sans";
|
|
36
|
-
gantari: "gantari";
|
|
37
|
-
anybody: "anybody";
|
|
38
|
-
lato: "lato";
|
|
39
|
-
playfair_display: "playfair_display";
|
|
40
|
-
karla: "karla";
|
|
41
|
-
reddit_sans: "reddit_sans";
|
|
42
|
-
overpass: "overpass";
|
|
43
|
-
roboto: "roboto";
|
|
44
|
-
open_sans: "open_sans";
|
|
45
|
-
merriweather: "merriweather";
|
|
46
|
-
outfit: "outfit";
|
|
47
|
-
fraunces: "fraunces";
|
|
48
|
-
dm_sans: "dm_sans";
|
|
49
48
|
cormorant_garamond: "cormorant_garamond";
|
|
50
|
-
eb_garamond: "eb_garamond";
|
|
51
|
-
lora: "lora";
|
|
52
49
|
crimson_pro: "crimson_pro";
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
space_grotesk: "space_grotesk";
|
|
50
|
+
dm_sans: "dm_sans";
|
|
51
|
+
eb_garamond: "eb_garamond";
|
|
52
|
+
fraunces: "fraunces";
|
|
53
|
+
gantari: "gantari";
|
|
58
54
|
ibm_plex_sans: "ibm_plex_sans";
|
|
59
|
-
|
|
60
|
-
josefin_sans: "josefin_sans";
|
|
61
|
-
}>;
|
|
62
|
-
body: z.ZodEnum<{
|
|
55
|
+
ibm_plex_serif: "ibm_plex_serif";
|
|
63
56
|
inter: "inter";
|
|
57
|
+
josefin_sans: "josefin_sans";
|
|
58
|
+
jost: "jost";
|
|
59
|
+
karla: "karla";
|
|
60
|
+
lato: "lato";
|
|
61
|
+
libre_franklin: "libre_franklin";
|
|
62
|
+
lora: "lora";
|
|
63
|
+
manrope: "manrope";
|
|
64
|
+
merriweather: "merriweather";
|
|
64
65
|
montserrat: "montserrat";
|
|
66
|
+
mulish: "mulish";
|
|
67
|
+
nunito: "nunito";
|
|
68
|
+
open_sans: "open_sans";
|
|
69
|
+
outfit: "outfit";
|
|
70
|
+
overpass: "overpass";
|
|
71
|
+
playfair_display: "playfair_display";
|
|
72
|
+
plus_jakarta_sans: "plus_jakarta_sans";
|
|
65
73
|
poppins: "poppins";
|
|
74
|
+
public_sans: "public_sans";
|
|
66
75
|
raleway: "raleway";
|
|
67
|
-
|
|
76
|
+
reddit_sans: "reddit_sans";
|
|
77
|
+
roboto: "roboto";
|
|
78
|
+
source_serif_4: "source_serif_4";
|
|
79
|
+
space_grotesk: "space_grotesk";
|
|
68
80
|
work_sans: "work_sans";
|
|
69
|
-
|
|
81
|
+
}>>;
|
|
82
|
+
body: z.ZodOptional<z.ZodEnum<{
|
|
83
|
+
anybody: "anybody";
|
|
84
|
+
archivo: "archivo";
|
|
70
85
|
barlow: "barlow";
|
|
71
|
-
jost: "jost";
|
|
72
86
|
bitter: "bitter";
|
|
73
|
-
|
|
74
|
-
|
|
87
|
+
cormorant_garamond: "cormorant_garamond";
|
|
88
|
+
crimson_pro: "crimson_pro";
|
|
89
|
+
dm_sans: "dm_sans";
|
|
90
|
+
eb_garamond: "eb_garamond";
|
|
91
|
+
fraunces: "fraunces";
|
|
75
92
|
gantari: "gantari";
|
|
76
|
-
|
|
93
|
+
ibm_plex_sans: "ibm_plex_sans";
|
|
94
|
+
ibm_plex_serif: "ibm_plex_serif";
|
|
95
|
+
inter: "inter";
|
|
96
|
+
josefin_sans: "josefin_sans";
|
|
97
|
+
jost: "jost";
|
|
98
|
+
karla: "karla";
|
|
77
99
|
lato: "lato";
|
|
100
|
+
libre_franklin: "libre_franklin";
|
|
101
|
+
lora: "lora";
|
|
102
|
+
manrope: "manrope";
|
|
103
|
+
merriweather: "merriweather";
|
|
104
|
+
montserrat: "montserrat";
|
|
105
|
+
mulish: "mulish";
|
|
106
|
+
nunito: "nunito";
|
|
107
|
+
open_sans: "open_sans";
|
|
108
|
+
outfit: "outfit";
|
|
109
|
+
overpass: "overpass";
|
|
78
110
|
playfair_display: "playfair_display";
|
|
79
|
-
|
|
111
|
+
plus_jakarta_sans: "plus_jakarta_sans";
|
|
112
|
+
poppins: "poppins";
|
|
113
|
+
public_sans: "public_sans";
|
|
114
|
+
raleway: "raleway";
|
|
80
115
|
reddit_sans: "reddit_sans";
|
|
81
|
-
overpass: "overpass";
|
|
82
116
|
roboto: "roboto";
|
|
83
|
-
open_sans: "open_sans";
|
|
84
|
-
merriweather: "merriweather";
|
|
85
|
-
outfit: "outfit";
|
|
86
|
-
fraunces: "fraunces";
|
|
87
|
-
dm_sans: "dm_sans";
|
|
88
|
-
cormorant_garamond: "cormorant_garamond";
|
|
89
|
-
eb_garamond: "eb_garamond";
|
|
90
|
-
lora: "lora";
|
|
91
|
-
crimson_pro: "crimson_pro";
|
|
92
117
|
source_serif_4: "source_serif_4";
|
|
93
|
-
ibm_plex_serif: "ibm_plex_serif";
|
|
94
|
-
manrope: "manrope";
|
|
95
|
-
plus_jakarta_sans: "plus_jakarta_sans";
|
|
96
118
|
space_grotesk: "space_grotesk";
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}>;
|
|
101
|
-
}, z.core.$strip>;
|
|
119
|
+
work_sans: "work_sans";
|
|
120
|
+
}>>;
|
|
121
|
+
}, z.core.$strip>>;
|
|
102
122
|
nav: z.ZodArray<z.ZodObject<{
|
|
103
123
|
label: z.ZodRecord<z.ZodEnum<{
|
|
124
|
+
de: "de";
|
|
104
125
|
en: "en";
|
|
105
126
|
es: "es";
|
|
106
127
|
fr: "fr";
|
|
107
|
-
nl: "nl";
|
|
108
|
-
de: "de";
|
|
109
128
|
it: "it";
|
|
129
|
+
nl: "nl";
|
|
110
130
|
pt: "pt";
|
|
111
131
|
}> & z.core.$partial, z.ZodString>;
|
|
112
132
|
href: z.ZodString;
|
|
113
133
|
}, z.core.$strip>>;
|
|
114
134
|
footer: z.ZodObject<{
|
|
115
135
|
text: z.ZodRecord<z.ZodEnum<{
|
|
136
|
+
de: "de";
|
|
116
137
|
en: "en";
|
|
117
138
|
es: "es";
|
|
118
139
|
fr: "fr";
|
|
119
|
-
nl: "nl";
|
|
120
|
-
de: "de";
|
|
121
140
|
it: "it";
|
|
141
|
+
nl: "nl";
|
|
122
142
|
pt: "pt";
|
|
123
143
|
}> & z.core.$partial, z.ZodString>;
|
|
124
144
|
links: z.ZodArray<z.ZodObject<{
|
|
125
145
|
label: z.ZodRecord<z.ZodEnum<{
|
|
146
|
+
de: "de";
|
|
126
147
|
en: "en";
|
|
127
148
|
es: "es";
|
|
128
149
|
fr: "fr";
|
|
129
|
-
nl: "nl";
|
|
130
|
-
de: "de";
|
|
131
150
|
it: "it";
|
|
151
|
+
nl: "nl";
|
|
132
152
|
pt: "pt";
|
|
133
153
|
}> & z.core.$partial, z.ZodString>;
|
|
134
154
|
href: z.ZodString;
|
|
135
155
|
}, z.core.$strip>>;
|
|
136
156
|
}, z.core.$strip>;
|
|
137
157
|
defaultLocale: z.ZodEnum<{
|
|
158
|
+
de: "de";
|
|
138
159
|
en: "en";
|
|
139
160
|
es: "es";
|
|
140
161
|
fr: "fr";
|
|
141
|
-
nl: "nl";
|
|
142
|
-
de: "de";
|
|
143
162
|
it: "it";
|
|
163
|
+
nl: "nl";
|
|
144
164
|
pt: "pt";
|
|
145
165
|
}>;
|
|
146
166
|
locales: z.ZodArray<z.ZodEnum<{
|
|
167
|
+
de: "de";
|
|
147
168
|
en: "en";
|
|
148
169
|
es: "es";
|
|
149
170
|
fr: "fr";
|
|
150
|
-
nl: "nl";
|
|
151
|
-
de: "de";
|
|
152
171
|
it: "it";
|
|
172
|
+
nl: "nl";
|
|
153
173
|
pt: "pt";
|
|
154
174
|
}>>;
|
|
155
175
|
seo: z.ZodObject<{
|
|
156
176
|
titleTemplate: z.ZodString;
|
|
157
177
|
defaultDescription: z.ZodRecord<z.ZodEnum<{
|
|
178
|
+
de: "de";
|
|
158
179
|
en: "en";
|
|
159
180
|
es: "es";
|
|
160
181
|
fr: "fr";
|
|
161
|
-
nl: "nl";
|
|
162
|
-
de: "de";
|
|
163
182
|
it: "it";
|
|
183
|
+
nl: "nl";
|
|
164
184
|
pt: "pt";
|
|
165
185
|
}> & z.core.$partial, z.ZodString>;
|
|
166
186
|
ogImageUrl: z.ZodNullable<z.ZodURL>;
|
|
@@ -168,6 +188,147 @@ declare const storefrontSiteConfigSchema: z.ZodObject<{
|
|
|
168
188
|
}, z.core.$strip>;
|
|
169
189
|
type StorefrontSiteConfig = z.infer<typeof storefrontSiteConfigSchema>;
|
|
170
190
|
|
|
191
|
+
declare const DEFAULT_STOREFRONT_LAYOUT: StorefrontLayout;
|
|
192
|
+
declare const DEFAULT_STOREFRONT_THEME: StorefrontTheme;
|
|
193
|
+
type TypeStep = readonly [number, number, number, string, ('uppercase' | 'none')?];
|
|
194
|
+
type TypeScale = Record<'display' | 'h1' | 'h2' | 'h3' | 'body' | 'small' | 'label', TypeStep>;
|
|
195
|
+
interface StorefrontThemeRecipe {
|
|
196
|
+
mode: 'light' | 'dark';
|
|
197
|
+
fonts: {
|
|
198
|
+
heading: StorefrontFont;
|
|
199
|
+
body: StorefrontFont;
|
|
200
|
+
};
|
|
201
|
+
radius: {
|
|
202
|
+
sm: number;
|
|
203
|
+
md: number;
|
|
204
|
+
lg: number;
|
|
205
|
+
btn: number;
|
|
206
|
+
};
|
|
207
|
+
btn: {
|
|
208
|
+
size: number;
|
|
209
|
+
w: number;
|
|
210
|
+
ls: string;
|
|
211
|
+
tt: 'uppercase' | 'none';
|
|
212
|
+
h: number;
|
|
213
|
+
};
|
|
214
|
+
type: TypeScale;
|
|
215
|
+
space: {
|
|
216
|
+
section: number;
|
|
217
|
+
gutter: number;
|
|
218
|
+
};
|
|
219
|
+
neutral: {
|
|
220
|
+
hue: number | null;
|
|
221
|
+
mix: number;
|
|
222
|
+
c: number;
|
|
223
|
+
};
|
|
224
|
+
L: {
|
|
225
|
+
bg: number;
|
|
226
|
+
surface: number;
|
|
227
|
+
surface2: number;
|
|
228
|
+
tint: number;
|
|
229
|
+
border: number;
|
|
230
|
+
ink: number;
|
|
231
|
+
muted: number;
|
|
232
|
+
dark: number;
|
|
233
|
+
};
|
|
234
|
+
C: {
|
|
235
|
+
ink: number;
|
|
236
|
+
dark: number;
|
|
237
|
+
tint: number;
|
|
238
|
+
};
|
|
239
|
+
shadow: boolean;
|
|
240
|
+
}
|
|
241
|
+
declare const STOREFRONT_THEME_RECIPES: Readonly<Record<StorefrontTheme, StorefrontThemeRecipe>>;
|
|
242
|
+
interface StorefrontThemeTokens {
|
|
243
|
+
bg: string;
|
|
244
|
+
surface: string;
|
|
245
|
+
surface2: string;
|
|
246
|
+
tint: string;
|
|
247
|
+
border: string;
|
|
248
|
+
borderStrong: string;
|
|
249
|
+
ink: string;
|
|
250
|
+
muted: string;
|
|
251
|
+
primary: string;
|
|
252
|
+
onPrimary: string;
|
|
253
|
+
primaryHover: string;
|
|
254
|
+
accentText: string;
|
|
255
|
+
dark: string;
|
|
256
|
+
onDark: string;
|
|
257
|
+
onDarkMuted: string;
|
|
258
|
+
darkAccent: string;
|
|
259
|
+
focus: string;
|
|
260
|
+
phBg: string;
|
|
261
|
+
phText: string;
|
|
262
|
+
accent2?: string;
|
|
263
|
+
}
|
|
264
|
+
interface StorefrontColorOverrides {
|
|
265
|
+
background?: string;
|
|
266
|
+
foreground?: string;
|
|
267
|
+
accent?: string;
|
|
268
|
+
primaryForeground?: string;
|
|
269
|
+
}
|
|
270
|
+
type StorefrontColorOverride = keyof StorefrontColorOverrides;
|
|
271
|
+
type StorefrontThemeNote = {
|
|
272
|
+
code: 'light_brand_ink_label';
|
|
273
|
+
text: string;
|
|
274
|
+
} | {
|
|
275
|
+
code: 'button_darkened';
|
|
276
|
+
from: number;
|
|
277
|
+
to: number;
|
|
278
|
+
text: string;
|
|
279
|
+
} | {
|
|
280
|
+
code: 'brand_lifted';
|
|
281
|
+
from: number;
|
|
282
|
+
to: number;
|
|
283
|
+
text: string;
|
|
284
|
+
} | {
|
|
285
|
+
code: 'brand_text_darkened';
|
|
286
|
+
steps: number;
|
|
287
|
+
text: string;
|
|
288
|
+
};
|
|
289
|
+
interface StorefrontOverrideProblem {
|
|
290
|
+
field: StorefrontColorOverride;
|
|
291
|
+
ratio: number;
|
|
292
|
+
against: 'background' | 'text' | 'button';
|
|
293
|
+
}
|
|
294
|
+
interface StorefrontThemeCheck {
|
|
295
|
+
label: 'Body text' | 'Muted text' | 'Button label' | 'Brand text' | 'On dark section' | 'Brand on dark';
|
|
296
|
+
ratio: string;
|
|
297
|
+
grade: 'AAA' | 'AA' | 'Fail';
|
|
298
|
+
pass: boolean;
|
|
299
|
+
}
|
|
300
|
+
interface DerivedStorefrontTheme {
|
|
301
|
+
theme: StorefrontTheme;
|
|
302
|
+
tokens: StorefrontThemeTokens;
|
|
303
|
+
vars: Record<string, string>;
|
|
304
|
+
checks: StorefrontThemeCheck[];
|
|
305
|
+
notes: StorefrontThemeNote[];
|
|
306
|
+
problems: StorefrontOverrideProblem[];
|
|
307
|
+
}
|
|
308
|
+
interface DeriveThemeOptions {
|
|
309
|
+
secondary?: string | null;
|
|
310
|
+
heading?: StorefrontFont;
|
|
311
|
+
body?: StorefrontFont;
|
|
312
|
+
overrides?: StorefrontColorOverrides;
|
|
313
|
+
}
|
|
314
|
+
declare function deriveStorefrontTheme(theme: StorefrontTheme, brandHex: string, opts?: DeriveThemeOptions): DerivedStorefrontTheme;
|
|
315
|
+
interface ResolvedStorefrontTheme {
|
|
316
|
+
theme: StorefrontTheme;
|
|
317
|
+
layout: StorefrontLayout;
|
|
318
|
+
fonts: {
|
|
319
|
+
heading: StorefrontFont;
|
|
320
|
+
body: StorefrontFont;
|
|
321
|
+
};
|
|
322
|
+
derived: DerivedStorefrontTheme;
|
|
323
|
+
cssVariables: Record<string, string>;
|
|
324
|
+
}
|
|
325
|
+
type ThemeConfig = Pick<StorefrontSiteConfig, 'colors'> & Partial<Pick<StorefrontSiteConfig, 'theme' | 'layout' | 'fonts'>>;
|
|
326
|
+
declare function resolveStorefrontTheme(config: ThemeConfig): ResolvedStorefrontTheme;
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Validates `suiteop.config.ts` and returns it. Throws a `ZodError` listing every problem, so a
|
|
330
|
+
* build with an invalid theme fails loudly instead of rendering a broken site.
|
|
331
|
+
*/
|
|
171
332
|
declare function defineSuiteOpConfig(config: StorefrontSiteConfig): StorefrontSiteConfig;
|
|
172
333
|
|
|
173
|
-
export { STOREFRONT_FONT_FAMILIES, STOREFRONT_LOCALES, type StorefrontLocale, type StorefrontSiteConfig, defineSuiteOpConfig, storefrontSiteConfigSchema };
|
|
334
|
+
export { DEFAULT_STOREFRONT_LAYOUT, DEFAULT_STOREFRONT_THEME, type DerivedStorefrontTheme, type ResolvedStorefrontTheme, STOREFRONT_FONT_FAMILIES, STOREFRONT_LAYOUTS, STOREFRONT_LOCALES, STOREFRONT_THEMES, STOREFRONT_THEME_RECIPES, type StorefrontLayout, type StorefrontLocale, type StorefrontSiteConfig, type StorefrontTheme, type StorefrontThemeRecipe, defineSuiteOpConfig, deriveStorefrontTheme, resolveStorefrontTheme, storefrontSiteConfigSchema };
|
package/dist/config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { STOREFRONT_FONTS } from './chunk-
|
|
2
|
-
export { STOREFRONT_FONT_FAMILIES } from './chunk-
|
|
1
|
+
import { STOREFRONT_FONTS, STOREFRONT_FONT_FAMILIES } from './chunk-UQWQPTHO.js';
|
|
2
|
+
export { STOREFRONT_FONT_FAMILIES } from './chunk-UQWQPTHO.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
|
|
5
|
-
var STOREFRONT_LOCALES=["en","fr","es","de","it","pt","nl"];var REQUIRED="validation.required";var TOO_LONG="validation.max_length";var TOO_MANY="validation.too_large";var INVALID="validation.invalid";var text=max=>z.string(INVALID).max(max,TOO_LONG);var localeSchema=z.enum(STOREFRONT_LOCALES,"validation.storefront.locale_unsupported");var hexSchema=z.string(INVALID).regex(/^#[0-9A-Fa-f]{6}$/,"validation.storefront.color_hex");var assetUrlSchema=z.url({protocol:/^https$/,error:"validation.storefront.url_https"});var localizedSchema=z.partialRecord(localeSchema,text(200),INVALID);var linkSchema=z.object({label:localizedSchema,href:text(500).regex(/^(\/(?!\/)|https:\/\/)/,"validation.storefront.link_href")},INVALID);var fontSchema=z.enum(STOREFRONT_FONTS,"validation.invalid_option");var storefrontSiteConfigSchema=z.object({brand:z.object({name:text(80).min(1,REQUIRED),logoUrl:assetUrlSchema.nullable(),faviconUrl:assetUrlSchema.nullable()},INVALID),colors:z.object({primary:hexSchema,primaryForeground:hexSchema,background:hexSchema,foreground:hexSchema,accent:hexSchema},INVALID),fonts:z.object({heading:fontSchema,body:fontSchema},INVALID),nav:z.array(linkSchema,INVALID).max(8,TOO_MANY),footer:z.object({text:localizedSchema,links:z.array(linkSchema,INVALID).max(12,TOO_MANY)},INVALID),defaultLocale:localeSchema,locales:z.array(localeSchema,INVALID).min(1,REQUIRED).max(STOREFRONT_LOCALES.length,TOO_MANY),seo:z.object({titleTemplate:text(80).includes("%s",{error:"validation.storefront.title_template_placeholder"}),defaultDescription:localizedSchema,ogImageUrl:assetUrlSchema.nullable()},INVALID)},INVALID).refine(c=>c.locales.includes(c.defaultLocale),{path:["defaultLocale"],message:"validation.storefront.default_locale_not_listed"});function defineSuiteOpConfig(config){return storefrontSiteConfigSchema.parse(config)}
|
|
5
|
+
var STOREFRONT_LOCALES=["en","fr","es","de","it","pt","nl"];var STOREFRONT_LAYOUTS=["listings","locations","areas","single"];var STOREFRONT_THEMES=["folio","hearth","circuit","tide","noir","fjord"];var REQUIRED="validation.required";var TOO_LONG="validation.max_length";var TOO_MANY="validation.too_large";var INVALID="validation.invalid";var text=max=>z.string(INVALID).max(max,TOO_LONG);var localeSchema=z.enum(STOREFRONT_LOCALES,"validation.storefront.locale_unsupported");var hexSchema=z.string(INVALID).regex(/^#[0-9A-Fa-f]{6}$/,"validation.storefront.color_hex");var assetUrlSchema=z.url({protocol:/^https$/,error:"validation.storefront.url_https"});var localizedSchema=z.partialRecord(localeSchema,text(200),INVALID);var linkSchema=z.object({label:localizedSchema,href:text(500).regex(/^(\/(?!\/)|https:\/\/)/,"validation.storefront.link_href")},INVALID);var fontSchema=z.enum(STOREFRONT_FONTS,"validation.invalid_option");var storefrontSiteConfigSchema=z.object({layout:z.enum(STOREFRONT_LAYOUTS).optional().catch(void 0),theme:z.enum(STOREFRONT_THEMES).optional().catch(void 0),brand:z.object({name:text(80).min(1,REQUIRED),logoUrl:assetUrlSchema.nullable(),logoOnDarkUrl:assetUrlSchema.nullable().optional(),faviconUrl:assetUrlSchema.nullable()},INVALID),colors:z.object({primary:hexSchema,secondary:hexSchema.nullable().optional(),primaryForeground:hexSchema.optional(),background:hexSchema.optional(),foreground:hexSchema.optional(),accent:hexSchema.optional()},INVALID),fonts:z.object({heading:fontSchema.optional(),body:fontSchema.optional()},INVALID).optional(),nav:z.array(linkSchema,INVALID).max(8,TOO_MANY),footer:z.object({text:localizedSchema,links:z.array(linkSchema,INVALID).max(12,TOO_MANY)},INVALID),defaultLocale:localeSchema,locales:z.array(localeSchema,INVALID).min(1,REQUIRED).max(STOREFRONT_LOCALES.length,TOO_MANY),seo:z.object({titleTemplate:text(80).includes("%s",{error:"validation.storefront.title_template_placeholder"}),defaultDescription:localizedSchema,ogImageUrl:assetUrlSchema.nullable()},INVALID)},INVALID).refine(c=>c.locales.includes(c.defaultLocale),{path:["defaultLocale"],message:"validation.storefront.default_locale_not_listed"});var DEFAULT_STOREFRONT_LAYOUT="listings";var DEFAULT_STOREFRONT_THEME="tide";var STOREFRONT_THEME_RECIPES={folio:{mode:"light",fonts:{heading:"eb_garamond",body:"libre_franklin"},radius:{sm:0,md:0,lg:0,btn:0},btn:{size:12,w:600,ls:"0.14em",tt:"uppercase",h:46},type:{display:[88,1,400,"-0.015em"],h1:[56,1.05,400,"-0.01em"],h2:[36,1.15,400,"0"],h3:[24,1.25,500,"0"],body:[18,1.6,400,"0"],small:[14,1.5,400,"0"],label:[11,1.3,600,"0.16em","uppercase"]},space:{section:144,gutter:32},neutral:{hue:null,mix:0,c:.006},L:{bg:.985,surface:1,surface2:.955,tint:.95,border:.87,ink:.19,muted:.47,dark:.22},C:{ink:.02,dark:.04,tint:.022},shadow:false},hearth:{mode:"light",fonts:{heading:"lora",body:"karla"},radius:{sm:6,md:12,lg:18,btn:8},btn:{size:15,w:700,ls:"0",tt:"none",h:48},type:{display:[64,1.08,500,"-0.01em"],h1:[48,1.12,500,"-0.01em"],h2:[32,1.2,500,"0"],h3:[22,1.3,600,"0"],body:[17,1.6,400,"0"],small:[14,1.5,400,"0"],label:[12,1.3,700,"0.1em","uppercase"]},space:{section:112,gutter:28},neutral:{hue:75,mix:.85,c:.014},L:{bg:.972,surface:.99,surface2:.945,tint:.935,border:.885,ink:.25,muted:.48,dark:.28},C:{ink:.025,dark:.05,tint:.032},shadow:true},circuit:{mode:"light",fonts:{heading:"space_grotesk",body:"ibm_plex_sans"},radius:{sm:8,md:12,lg:16,btn:999},btn:{size:15,w:600,ls:"-0.005em",tt:"none",h:44},type:{display:[64,1.02,600,"-0.035em"],h1:[44,1.08,600,"-0.03em"],h2:[30,1.15,600,"-0.02em"],h3:[20,1.3,600,"-0.01em"],body:[16,1.55,400,"0"],small:[14,1.45,400,"0"],label:[12,1.3,600,"0.02em"]},space:{section:88,gutter:20},neutral:{hue:null,mix:0,c:.004},L:{bg:1,surface:.975,surface2:.958,tint:.958,border:.915,ink:.17,muted:.48,dark:.19},C:{ink:.012,dark:.03,tint:.035},shadow:true},tide:{mode:"light",fonts:{heading:"outfit",body:"mulish"},radius:{sm:12,md:20,lg:28,btn:999},btn:{size:15,w:700,ls:"0.01em",tt:"none",h:50},type:{display:[76,1.02,300,"-0.02em"],h1:[48,1.1,400,"-0.015em"],h2:[34,1.15,400,"-0.01em"],h3:[21,1.3,500,"0"],body:[17,1.6,400,"0"],small:[14,1.5,400,"0"],label:[12,1.3,700,"0.08em","uppercase"]},space:{section:120,gutter:24},neutral:{hue:null,mix:0,c:.005},L:{bg:.99,surface:.968,surface2:.945,tint:.95,border:.905,ink:.26,muted:.48,dark:.29},C:{ink:.035,dark:.055,tint:.028},shadow:true},noir:{mode:"dark",fonts:{heading:"cormorant_garamond",body:"manrope"},radius:{sm:0,md:2,lg:2,btn:0},btn:{size:11,w:600,ls:"0.22em",tt:"uppercase",h:48},type:{display:[84,1,300,"0.02em","uppercase"],h1:[56,1.05,300,"0.01em"],h2:[38,1.15,400,"0"],h3:[24,1.25,500,"0.02em"],body:[16,1.7,400,"0"],small:[13,1.55,400,"0.01em"],label:[11,1.3,600,"0.24em","uppercase"]},space:{section:152,gutter:32},neutral:{hue:null,mix:0,c:.016},L:{bg:.165,surface:.205,surface2:.245,tint:.24,border:.34,ink:.94,muted:.76,dark:.12},C:{ink:.01,dark:.014,tint:.035},shadow:false},fjord:{mode:"light",fonts:{heading:"dm_sans",body:"dm_sans"},radius:{sm:2,md:4,lg:6,btn:4},btn:{size:14,w:500,ls:"0",tt:"none",h:44},type:{display:[60,1.05,500,"-0.03em"],h1:[42,1.1,500,"-0.025em"],h2:[28,1.2,500,"-0.015em"],h3:[19,1.35,500,"-0.005em"],body:[16,1.6,400,"0"],small:[13,1.5,400,"0"],label:[12,1.3,500,"0"]},space:{section:128,gutter:24},neutral:{hue:85,mix:.85,c:.006},L:{bg:.976,surface:.995,surface2:.948,tint:.945,border:.895,ink:.23,muted:.49,dark:.26},C:{ink:.008,dark:.02,tint:.022},shadow:false}};var clamp=(v,a,b)=>Math.min(b,Math.max(a,v));var toLin=c=>c<=.04045?c/12.92:Math.pow((c+.055)/1.055,2.4);var toGam=c=>c<=.0031308?12.92*c:1.055*Math.pow(c,1/2.4)-.055;var hexToRgb=hex=>{const h=hex.replace("#","");return [0,2,4].map(i=>parseInt(h.slice(i,i+2),16)/255)};var rgbToHex=rgb=>"#"+rgb.map(v=>Math.round(clamp(v,0,1)*255).toString(16).padStart(2,"0")).join("").toUpperCase();function hexToOklch(hex){const[r,g,b]=hexToRgb(hex).map(toLin);const l=Math.cbrt(.4122214708*r+.5363325363*g+.0514459929*b);const m=Math.cbrt(.2119034982*r+.6806995451*g+.1073969566*b);const s=Math.cbrt(.0883024619*r+.2817188376*g+.6299787005*b);const L=.2104542553*l+.793617785*m-.0040720468*s;const A=1.9779984951*l-2.428592205*m+.4505937099*s;const B=.0259040371*l+.7827717662*m-.808675766*s;let H=Math.atan2(B,A)*180/Math.PI;if(H<0)H+=360;return [L,Math.sqrt(A*A+B*B),H]}function oklchToLinear(L,C,H){const a=C*Math.cos(H*Math.PI/180);const b=C*Math.sin(H*Math.PI/180);const l=(L+.3963377774*a+.2158037573*b)**3;const m=(L-.1055613458*a-.0638541728*b)**3;const s=(L-.0894841775*a-1.291485548*b)**3;return [4.0767416621*l-3.3077115913*m+.2309699292*s,-1.2684380046*l+2.6097574011*m-.3413193965*s,-0.0041960863*l-.7034186147*m+1.707614701*s]}var inGamut=rgb=>rgb.every(v=>v>=-1e-4&&v<=1.0001);function oklchToHex(lightness,C,H){const L=clamp(lightness,0,1);let rgb=oklchToLinear(L,C,H);if(!inGamut(rgb)){let lo=0;let hi=C;for(let i=0;i<22;i++){const mid=(lo+hi)/2;if(inGamut(oklchToLinear(L,mid,H)))lo=mid;else hi=mid;}rgb=oklchToLinear(L,lo,H);}return rgbToHex(rgb.map(v=>toGam(clamp(v,0,1))))}var luminance=hex=>{const[r,g,b]=hexToRgb(hex).map(toLin);return .2126*r+.7152*g+.0722*b};function contrastRatio(a,b){const x=luminance(a);const y=luminance(b);return (Math.max(x,y)+.05)/(Math.min(x,y)+.05)}var minContrast=(hex,grounds)=>Math.min(...grounds.map(g=>contrastRatio(hex,g)));var rgba=(hex,alpha)=>{const[r,g,b]=hexToRgb(hex).map(v=>Math.round(v*255));return `rgba(${r},${g},${b},${alpha})`};var mixHue=(a,b,t)=>{const d=(b-a+540)%360-180;return (a+d*t+360)%360};function fit(lightness,C,H,grounds,target,dir){let L=lightness;let hex=oklchToHex(L,C,H);let steps=0;while(minContrast(hex,grounds)<target&&steps<100){L=clamp(L+dir*.01,0,1);hex=oklchToHex(L,C,H);steps++;}return {hex,L,steps}}var SERIF_FONTS=new Set(["playfair_display","merriweather","bitter","fraunces","cormorant_garamond","eb_garamond","lora","crimson_pro","source_serif_4","ibm_plex_serif"]);function storefrontFontStack(font){return `'${STOREFRONT_FONT_FAMILIES[font]}', ${SERIF_FONTS.has(font)?"serif":"sans-serif"}`}var AA=4.5;var INK=7;function derivePalette(recipe,brandHex,secondary,overrides){const[bL,bC,bH]=hexToOklch(brandHex);const nh=recipe.neutral.hue==null?bH:mixHue(bH,recipe.neutral.hue,recipe.neutral.mix);const nc=recipe.neutral.c;const{L,C}=recipe;const dark=recipe.mode==="dark";const dir=dark?1:-1;const N=(l,c=nc)=>oklchToHex(l,c,nh);const bg=overrides.background?.toUpperCase()??N(L.bg);const surface=N(L.surface,L.surface>=.999?0:nc);const surface2=N(L.surface2);const tint=oklchToHex(L.tint,Math.min(bC,C.tint),bH);const border=N(L.border,nc*1.5);const borderStrong=N(dark?L.border+.12:L.border-.2,nc*1.5);const grounds=[bg,surface,surface2,tint];const ink=overrides.foreground?.toUpperCase()??fit(L.ink,C.ink,nh,grounds,INK,dir).hex;const muted=fit(L.muted,nc*2.5,nh,grounds,AA,dir).hex;const brandText=fit(bL,bC,bH,grounds,AA,dir);const accentText=overrides.accent?.toUpperCase()??brandText.hex;const notes=[];let p;let on;if(!dark){const white=oklchToHex(.995,.003,bH);if(contrastRatio(brandHex,white)>=AA){p={hex:brandHex.toUpperCase(),L:bL};on=white;}else if(bL>=.7&&contrastRatio(brandHex,ink)>=AA){p={hex:brandHex.toUpperCase(),L:bL};on=ink;notes.push({code:"light_brand_ink_label",text:"Light brand: button keeps the colour and takes an ink label"});}else {p=fit(bL,bC,bH,[white],AA,-1);on=white;notes.push({code:"button_darkened",from:round2(bL),to:round2(p.L),text:`Button darkened L ${bL.toFixed(2)} \u2192 ${p.L.toFixed(2)} for a white label`});}}else {on=bg;p=fit(Math.max(bL,.72),bC,bH,[bg,surface],AA,1);if(p.L>bL+.005){notes.push({code:"brand_lifted",from:round2(bL),to:round2(p.L),text:`Brand lifted L ${bL.toFixed(2)} \u2192 ${p.L.toFixed(2)} to read on dark`});}}const onPrimary=overrides.primaryForeground?.toUpperCase()??on;let primaryHover=oklchToHex(p.L+(dark?.05:-0.06),bC,bH);if(contrastRatio(primaryHover,onPrimary)<AA){primaryHover=oklchToHex(p.L+(dark?-0.04:.04),bC,bH);}const darkToken=oklchToHex(L.dark,Math.min(bC,C.dark),bH);const phBg=dark?oklchToHex(.27,Math.min(bC,.03),bH):oklchToHex(L.tint-.045,Math.min(bC,.03),bH);const t={bg,surface,surface2,tint,border,borderStrong,ink,muted,primary:p.hex,onPrimary,primaryHover,accentText,dark:darkToken,onDark:oklchToHex(.97,.008,bH),onDarkMuted:fit(.82,.012,bH,[darkToken],AA,1).hex,darkAccent:fit(Math.max(bL,.72),bC,bH,[darkToken],AA,1).hex,focus:dark?p.hex:accentText,phBg,phText:fit(dark?.7:.48,.02,bH,[phBg],AA,dir).hex};if(secondary)t.accent2=fit(...hexToOklch(secondary),grounds,AA,dir).hex;if(!dark&&brandText.steps>0&&accentText===brandText.hex){notes.push({code:"brand_text_darkened",steps:brandText.steps,text:`Brand text darkened ${brandText.steps} step${brandText.steps>1?"s":""} to reach 4.5:1`});}return {t,notes}}var round2=n=>Math.round(n*100)/100;function failingOverride(t,overrides){const grounds=[t.bg,t.surface,t.surface2,t.tint];if(overrides.foreground){const ratio=minContrast(t.ink,grounds);if(ratio<AA)return {field:"foreground",ratio,against:"background"}}if(overrides.accent){const ratio=minContrast(t.accentText,grounds);if(ratio<AA)return {field:"accent",ratio,against:"background"}}if(overrides.primaryForeground){const ratio=contrastRatio(t.onPrimary,t.primary);if(ratio<AA)return {field:"primaryForeground",ratio,against:"button"}}if(overrides.background){const ratio=Math.min(contrastRatio(t.ink,t.bg),contrastRatio(t.muted,t.bg));if(ratio<AA)return {field:"background",ratio,against:"text"}}return null}function deriveStorefrontTheme(theme,brandHex,opts={}){const recipe=STOREFRONT_THEME_RECIPES[theme];const overrides={...opts.overrides};const problems=[];let palette=derivePalette(recipe,brandHex,opts.secondary,overrides);for(let problem=failingOverride(palette.t,overrides);problem;){problems.push({...problem,ratio:Math.round(problem.ratio*10)/10});delete overrides[problem.field];palette=derivePalette(recipe,brandHex,opts.secondary,overrides);problem=failingOverride(palette.t,overrides);}const{t,notes}=palette;const r=recipe.radius;const px=n=>`${n}px`;const vars={"--so-bg":t.bg,"--so-surface":t.surface,"--so-surface-2":t.surface2,"--so-tint":t.tint,"--so-border":t.border,"--so-border-strong":t.borderStrong,"--so-ink":t.ink,"--so-muted":t.muted,"--so-primary":t.primary,"--so-on-primary":t.onPrimary,"--so-primary-hover":t.primaryHover,"--so-accent-text":t.accentText,"--so-dark":t.dark,"--so-on-dark":t.onDark,"--so-on-dark-muted":t.onDarkMuted,"--so-dark-accent":t.darkAccent,"--so-focus":t.focus,"--so-ph-bg":t.phBg,"--so-ph-text":t.phText,"--so-ph-line":rgba(t.phText,.16),"--so-accent-2":t.accent2??t.accentText,"--so-scrim":`linear-gradient(180deg, ${rgba(t.dark,.55)} 0%, ${rgba(t.dark,0)} 26%, ${rgba(t.dark,0)} 40%, ${rgba(t.dark,.72)} 100%)`,"--so-scrim-solid":rgba(t.dark,.45),"--so-shadow":recipe.shadow?`0 1px 2px ${rgba(t.dark,.06)}, 0 10px 30px ${rgba(t.dark,.1)}`:"none","--so-shadow-float":`0 2px 6px ${rgba(t.dark,.08)}, 0 18px 50px ${rgba(t.dark,.18)}`,"--so-font-heading":storefrontFontStack(opts.heading??recipe.fonts.heading),"--so-font-body":storefrontFontStack(opts.body??recipe.fonts.body),"--so-r-sm":px(r.sm),"--so-r-md":px(r.md),"--so-r-lg":px(r.lg),"--so-r-btn":px(r.btn),"--so-btn-size":px(recipe.btn.size),"--so-btn-w":String(recipe.btn.w),"--so-btn-ls":recipe.btn.ls,"--so-btn-tt":recipe.btn.tt,"--so-btn-h":px(recipe.btn.h),"--so-section":px(recipe.space.section),"--so-gutter":px(recipe.space.gutter)};for(const[step,[size,lh,w,ls,tt]]of Object.entries(recipe.type)){vars[`--t-${step}-size`]=px(size);vars[`--t-${step}-lh`]=String(lh);vars[`--t-${step}-w`]=String(w);vars[`--t-${step}-ls`]=ls;vars[`--t-${step}-tt`]=tt??"none";}const grade=x=>x>=7?"AAA":x>=AA?"AA":"Fail";const checks=[["Body text",t.ink,t.bg],["Muted text",t.muted,t.surface2],["Button label",t.onPrimary,t.primary],["Brand text",t.accentText,t.bg],["On dark section",t.onDark,t.dark],["Brand on dark",t.darkAccent,t.dark]].map(([label,a,b])=>{const x=Math.round(contrastRatio(a,b)*10)/10;return {label,ratio:x.toFixed(1),grade:grade(x),pass:x>=AA}});return {theme,tokens:t,vars,checks,notes,problems}}function storefrontThemeFonts(theme,fonts){const pair=STOREFRONT_THEME_RECIPES[theme].fonts;return {heading:fonts?.heading??pair.heading,body:fonts?.body??pair.body}}function resolveStorefrontTheme(config){const theme=config.theme??DEFAULT_STOREFRONT_THEME;const fonts=storefrontThemeFonts(theme,config.fonts);const{primary,secondary,background,foreground,accent,primaryForeground}=explicitThemeChoices(config).colors;const derived=deriveStorefrontTheme(theme,primary,{secondary,...fonts,overrides:{background,foreground,accent,primaryForeground}});return {theme,layout:config.layout??DEFAULT_STOREFRONT_LAYOUT,fonts,derived,cssVariables:derived.vars}}var OVERRIDE_TOKENS={background:"bg",foreground:"ink",accent:"accentText",primaryForeground:"onPrimary"};var OVERRIDES=Object.keys(OVERRIDE_TOKENS);function legacyButtonLabel(primary,t){if(contrastRatio(t.onPrimary,primary)>=AA)return t.onPrimary;const reads=[t.onDark,t.ink,t.dark,t.bg].filter(hex=>contrastRatio(hex,primary)>=AA);return (reads.length?reads:["#FFFFFF","#000000"]).reduce((best,hex)=>contrastRatio(hex,primary)>contrastRatio(best,primary)?hex:best)}function explicitThemeChoices(config){const theme=config.theme??DEFAULT_STOREFRONT_THEME;const given=pickOverrides(config.colors);const colors={...config.colors};for(const field of OVERRIDES){const value=given[field];if(!value)continue;const others={...given};delete others[field];const{tokens}=deriveStorefrontTheme(theme,config.colors.primary,{overrides:others});const derived=field==="primaryForeground"?[tokens.onPrimary,legacyButtonLabel(config.colors.primary,tokens)]:[tokens[OVERRIDE_TOKENS[field]]];if(derived.includes(value.toUpperCase()))delete colors[field];}const pair=STOREFRONT_THEME_RECIPES[theme].fonts;const fonts={...config.fonts?.heading&&config.fonts.heading!==pair.heading?{heading:config.fonts.heading}:{},...config.fonts?.body&&config.fonts.body!==pair.body?{body:config.fonts.body}:{}};const{fonts:_fonts,...rest}=config;return {...rest,colors,...fonts.heading||fonts.body?{fonts}:{}}}function pickOverrides(colors){const{background,foreground,accent,primaryForeground}=colors;return Object.fromEntries(Object.entries({background,foreground,accent,primaryForeground}).filter(([,v])=>!!v))}function defineSuiteOpConfig(config){return storefrontSiteConfigSchema.parse(config)}
|
|
6
6
|
|
|
7
|
-
export { STOREFRONT_LOCALES, defineSuiteOpConfig, storefrontSiteConfigSchema };
|
|
7
|
+
export { DEFAULT_STOREFRONT_LAYOUT, DEFAULT_STOREFRONT_THEME, STOREFRONT_LAYOUTS, STOREFRONT_LOCALES, STOREFRONT_THEMES, STOREFRONT_THEME_RECIPES, defineSuiteOpConfig, deriveStorefrontTheme, resolveStorefrontTheme, storefrontSiteConfigSchema };
|
package/dist/content.cjs
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('./chunk-
|
|
5
|
-
require('./chunk-
|
|
6
|
-
require('./chunk-
|
|
3
|
+
var chunkOXCLLFCY_cjs = require('./chunk-OXCLLFCY.cjs');
|
|
4
|
+
require('./chunk-QBHOJGZI.cjs');
|
|
5
|
+
require('./chunk-J5FZ4WDQ.cjs');
|
|
6
|
+
require('./chunk-EHQFWSP6.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
Object.defineProperty(exports, "contentModelSchema", {
|
|
11
11
|
enumerable: true,
|
|
12
|
-
get: function () { return
|
|
12
|
+
get: function () { return chunkOXCLLFCY_cjs.contentModelSchema; }
|
|
13
13
|
});
|
|
14
14
|
Object.defineProperty(exports, "createContentReader", {
|
|
15
15
|
enumerable: true,
|
|
16
|
-
get: function () { return
|
|
16
|
+
get: function () { return chunkOXCLLFCY_cjs.createContentReader; }
|
|
17
17
|
});
|
|
18
18
|
Object.defineProperty(exports, "defineContent", {
|
|
19
19
|
enumerable: true,
|
|
20
|
-
get: function () { return
|
|
20
|
+
get: function () { return chunkOXCLLFCY_cjs.defineContent; }
|
|
21
21
|
});
|
|
22
22
|
Object.defineProperty(exports, "field", {
|
|
23
23
|
enumerable: true,
|
|
24
|
-
get: function () { return
|
|
24
|
+
get: function () { return chunkOXCLLFCY_cjs.field; }
|
|
25
25
|
});
|
|
26
26
|
Object.defineProperty(exports, "parseContentModel", {
|
|
27
27
|
enumerable: true,
|
|
28
|
-
get: function () { return
|
|
28
|
+
get: function () { return chunkOXCLLFCY_cjs.parseContentModel; }
|
|
29
29
|
});
|
|
30
30
|
Object.defineProperty(exports, "readFields", {
|
|
31
31
|
enumerable: true,
|
|
32
|
-
get: function () { return
|
|
32
|
+
get: function () { return chunkOXCLLFCY_cjs.readFields; }
|
|
33
33
|
});
|
|
34
34
|
Object.defineProperty(exports, "toContentModel", {
|
|
35
35
|
enumerable: true,
|
|
36
|
-
get: function () { return
|
|
36
|
+
get: function () { return chunkOXCLLFCY_cjs.toContentModel; }
|
|
37
37
|
});
|