@suiteop/storefront 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +5 -0
  3. package/dist/astro-content-model.cjs +5 -5
  4. package/dist/astro-content-model.js +4 -4
  5. package/dist/{availability-CnzmxuV3.d.cts → availability-Dh0yLSkj.d.cts} +25 -1
  6. package/dist/{availability-CnzmxuV3.d.ts → availability-Dh0yLSkj.d.ts} +25 -1
  7. package/dist/checkout.cjs +4 -4
  8. package/dist/checkout.js +3 -3
  9. package/dist/chunk-5TUJX6GY.js +5 -0
  10. package/dist/{chunk-HMLBMNGA.js → chunk-7ZAI36LH.js} +1 -1
  11. package/dist/{chunk-LVFRVNT3.cjs → chunk-EHQFWSP6.cjs} +2 -1
  12. package/dist/{chunk-6NFURJXI.js → chunk-IBCBDAGY.js} +2 -2
  13. package/dist/{chunk-TLTL7M3O.js → chunk-IUNIQSFB.js} +2 -2
  14. package/dist/{chunk-USOISC2R.cjs → chunk-J5FZ4WDQ.cjs} +2 -2
  15. package/dist/chunk-LY73ZYN5.cjs +20 -0
  16. package/dist/{chunk-IUJTHNB3.cjs → chunk-NNWJZUQL.cjs} +3 -3
  17. package/dist/{chunk-CTHHMNLE.cjs → chunk-NZWYOV5Y.cjs} +4 -4
  18. package/dist/{chunk-VV2UNVQ2.cjs → chunk-UMCI4YBN.cjs} +2 -2
  19. package/dist/{chunk-ZI2PG7LS.js → chunk-W5K7IDYN.js} +1 -1
  20. package/dist/{chunk-UWUKERLK.js → chunk-YSKWSL2F.js} +4 -4
  21. package/dist/{client-oyYRhUv0.d.ts → client-2KyVv-2l.d.cts} +45 -11
  22. package/dist/{client-CZWN4im4.d.cts → client-C9Igm7O-.d.ts} +45 -11
  23. package/dist/components.cjs +2 -2
  24. package/dist/components.d.cts +1 -1
  25. package/dist/components.d.ts +1 -1
  26. package/dist/components.js +1 -1
  27. package/dist/config.cjs +8 -1
  28. package/dist/config.d.cts +168 -11
  29. package/dist/config.d.ts +168 -11
  30. package/dist/config.js +3 -3
  31. package/dist/content.cjs +11 -11
  32. package/dist/content.d.cts +3 -3
  33. package/dist/content.d.ts +3 -3
  34. package/dist/content.js +4 -4
  35. package/dist/{errors-DoXdi1vS.d.ts → errors-BGgJ--XR.d.ts} +1 -1
  36. package/dist/{errors-CAW7nLHr.d.cts → errors-DpImb0Uf.d.cts} +1 -1
  37. package/dist/index.cjs +21 -21
  38. package/dist/index.d.cts +4 -4
  39. package/dist/index.d.ts +4 -4
  40. package/dist/index.js +4 -4
  41. package/dist/react.cjs +6 -6
  42. package/dist/react.d.cts +3 -3
  43. package/dist/react.d.ts +3 -3
  44. package/dist/react.js +5 -5
  45. package/package.json +1 -1
  46. package/dist/chunk-E5CGGMCO.cjs +0 -19
  47. package/dist/chunk-TRXDDUEL.js +0 -5
package/dist/config.d.ts CHANGED
@@ -6,21 +6,41 @@ declare const STOREFRONT_FONT_FAMILIES: Record<StorefrontFont, string>;
6
6
 
7
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
+ folio: "folio";
22
+ hearth: "hearth";
23
+ circuit: "circuit";
24
+ tide: "tide";
25
+ noir: "noir";
26
+ fjord: "fjord";
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
- primaryForeground: z.ZodString;
18
- background: z.ZodString;
19
- foreground: z.ZodString;
20
- accent: z.ZodString;
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<{
42
+ fonts: z.ZodOptional<z.ZodObject<{
43
+ heading: z.ZodOptional<z.ZodEnum<{
24
44
  inter: "inter";
25
45
  montserrat: "montserrat";
26
46
  poppins: "poppins";
@@ -58,8 +78,8 @@ declare const storefrontSiteConfigSchema: z.ZodObject<{
58
78
  ibm_plex_sans: "ibm_plex_sans";
59
79
  libre_franklin: "libre_franklin";
60
80
  josefin_sans: "josefin_sans";
61
- }>;
62
- body: z.ZodEnum<{
81
+ }>>;
82
+ body: z.ZodOptional<z.ZodEnum<{
63
83
  inter: "inter";
64
84
  montserrat: "montserrat";
65
85
  poppins: "poppins";
@@ -97,8 +117,8 @@ declare const storefrontSiteConfigSchema: z.ZodObject<{
97
117
  ibm_plex_sans: "ibm_plex_sans";
98
118
  libre_franklin: "libre_franklin";
99
119
  josefin_sans: "josefin_sans";
100
- }>;
101
- }, z.core.$strip>;
120
+ }>>;
121
+ }, z.core.$strip>>;
102
122
  nav: z.ZodArray<z.ZodObject<{
103
123
  label: z.ZodRecord<z.ZodEnum<{
104
124
  en: "en";
@@ -168,6 +188,143 @@ 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
+
171
328
  declare function defineSuiteOpConfig(config: StorefrontSiteConfig): StorefrontSiteConfig;
172
329
 
173
- export { STOREFRONT_FONT_FAMILIES, STOREFRONT_LOCALES, type StorefrontLocale, type StorefrontSiteConfig, defineSuiteOpConfig, storefrontSiteConfigSchema };
330
+ 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-PYVUDQSQ.js';
1
+ import { STOREFRONT_FONTS, STOREFRONT_FONT_FAMILIES } from './chunk-PYVUDQSQ.js';
2
2
  export { STOREFRONT_FONT_FAMILIES } from './chunk-PYVUDQSQ.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 chunkIUJTHNB3_cjs = require('./chunk-IUJTHNB3.cjs');
4
- require('./chunk-E5CGGMCO.cjs');
5
- require('./chunk-USOISC2R.cjs');
6
- require('./chunk-LVFRVNT3.cjs');
3
+ var chunkNNWJZUQL_cjs = require('./chunk-NNWJZUQL.cjs');
4
+ require('./chunk-LY73ZYN5.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 chunkIUJTHNB3_cjs.contentModelSchema; }
12
+ get: function () { return chunkNNWJZUQL_cjs.contentModelSchema; }
13
13
  });
14
14
  Object.defineProperty(exports, "createContentReader", {
15
15
  enumerable: true,
16
- get: function () { return chunkIUJTHNB3_cjs.createContentReader; }
16
+ get: function () { return chunkNNWJZUQL_cjs.createContentReader; }
17
17
  });
18
18
  Object.defineProperty(exports, "defineContent", {
19
19
  enumerable: true,
20
- get: function () { return chunkIUJTHNB3_cjs.defineContent; }
20
+ get: function () { return chunkNNWJZUQL_cjs.defineContent; }
21
21
  });
22
22
  Object.defineProperty(exports, "field", {
23
23
  enumerable: true,
24
- get: function () { return chunkIUJTHNB3_cjs.field; }
24
+ get: function () { return chunkNNWJZUQL_cjs.field; }
25
25
  });
26
26
  Object.defineProperty(exports, "parseContentModel", {
27
27
  enumerable: true,
28
- get: function () { return chunkIUJTHNB3_cjs.parseContentModel; }
28
+ get: function () { return chunkNNWJZUQL_cjs.parseContentModel; }
29
29
  });
30
30
  Object.defineProperty(exports, "readFields", {
31
31
  enumerable: true,
32
- get: function () { return chunkIUJTHNB3_cjs.readFields; }
32
+ get: function () { return chunkNNWJZUQL_cjs.readFields; }
33
33
  });
34
34
  Object.defineProperty(exports, "toContentModel", {
35
35
  enumerable: true,
36
- get: function () { return chunkIUJTHNB3_cjs.toContentModel; }
36
+ get: function () { return chunkNNWJZUQL_cjs.toContentModel; }
37
37
  });
@@ -1,7 +1,7 @@
1
- import { R as RequestOptions, P as Page, s as StorefrontImage, o as StorefrontContentRef, j as StorefrontClient } from './client-CZWN4im4.cjs';
2
- export { m as StorefrontContentItem } from './client-CZWN4im4.cjs';
1
+ import { R as RequestOptions, P as Page, s as StorefrontImage, o as StorefrontContentRef, j as StorefrontClient } from './client-2KyVv-2l.cjs';
2
+ export { m as StorefrontContentItem } from './client-2KyVv-2l.cjs';
3
3
  import { z } from 'zod';
4
- import './availability-CnzmxuV3.cjs';
4
+ import './availability-Dh0yLSkj.cjs';
5
5
 
6
6
  declare const contentLocalizedSchema: z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>;
7
7
  type ContentLocalized = z.infer<typeof contentLocalizedSchema>;
package/dist/content.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { R as RequestOptions, P as Page, s as StorefrontImage, o as StorefrontContentRef, j as StorefrontClient } from './client-oyYRhUv0.js';
2
- export { m as StorefrontContentItem } from './client-oyYRhUv0.js';
1
+ import { R as RequestOptions, P as Page, s as StorefrontImage, o as StorefrontContentRef, j as StorefrontClient } from './client-C9Igm7O-.js';
2
+ export { m as StorefrontContentItem } from './client-C9Igm7O-.js';
3
3
  import { z } from 'zod';
4
- import './availability-CnzmxuV3.js';
4
+ import './availability-Dh0yLSkj.js';
5
5
 
6
6
  declare const contentLocalizedSchema: z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>;
7
7
  type ContentLocalized = z.infer<typeof contentLocalizedSchema>;
package/dist/content.js CHANGED
@@ -1,4 +1,4 @@
1
- export { contentModelSchema, createContentReader, defineContent, field, parseContentModel, readFields, toContentModel } from './chunk-TLTL7M3O.js';
2
- import './chunk-TRXDDUEL.js';
3
- import './chunk-ZI2PG7LS.js';
4
- import './chunk-6NFURJXI.js';
1
+ export { contentModelSchema, createContentReader, defineContent, field, parseContentModel, readFields, toContentModel } from './chunk-IUNIQSFB.js';
2
+ import './chunk-5TUJX6GY.js';
3
+ import './chunk-W5K7IDYN.js';
4
+ import './chunk-IBCBDAGY.js';
@@ -1,4 +1,4 @@
1
- import { B as BookingResult, x as StorefrontQuote } from './client-oyYRhUv0.js';
1
+ import { B as BookingResult, z as StorefrontQuote } from './client-C9Igm7O-.js';
2
2
  import { z } from 'zod';
3
3
 
4
4
  declare const storefrontClientEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -1,4 +1,4 @@
1
- import { B as BookingResult, x as StorefrontQuote } from './client-CZWN4im4.cjs';
1
+ import { B as BookingResult, z as StorefrontQuote } from './client-2KyVv-2l.cjs';
2
2
  import { z } from 'zod';
3
3
 
4
4
  declare const storefrontClientEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
package/dist/index.cjs CHANGED
@@ -1,49 +1,49 @@
1
1
  'use strict';
2
2
 
3
- var chunkCTHHMNLE_cjs = require('./chunk-CTHHMNLE.cjs');
3
+ var chunkNZWYOV5Y_cjs = require('./chunk-NZWYOV5Y.cjs');
4
4
  var chunkEVSAMV5K_cjs = require('./chunk-EVSAMV5K.cjs');
5
5
  require('./chunk-ZLAOY6IF.cjs');
6
- require('./chunk-E5CGGMCO.cjs');
7
- var chunkUSOISC2R_cjs = require('./chunk-USOISC2R.cjs');
8
- require('./chunk-LVFRVNT3.cjs');
6
+ require('./chunk-LY73ZYN5.cjs');
7
+ var chunkJ5FZ4WDQ_cjs = require('./chunk-J5FZ4WDQ.cjs');
8
+ require('./chunk-EHQFWSP6.cjs');
9
9
 
10
10
 
11
11
 
12
12
  Object.defineProperty(exports, "SDK_VERSION", {
13
13
  enumerable: true,
14
- get: function () { return chunkCTHHMNLE_cjs.SDK_VERSION; }
14
+ get: function () { return chunkNZWYOV5Y_cjs.SDK_VERSION; }
15
15
  });
16
16
  Object.defineProperty(exports, "STOREFRONT_API_PATH", {
17
17
  enumerable: true,
18
- get: function () { return chunkCTHHMNLE_cjs.STOREFRONT_API_PATH; }
18
+ get: function () { return chunkNZWYOV5Y_cjs.STOREFRONT_API_PATH; }
19
19
  });
20
20
  Object.defineProperty(exports, "STOREFRONT_API_VERSION", {
21
21
  enumerable: true,
22
- get: function () { return chunkCTHHMNLE_cjs.STOREFRONT_API_VERSION; }
22
+ get: function () { return chunkNZWYOV5Y_cjs.STOREFRONT_API_VERSION; }
23
23
  });
24
24
  Object.defineProperty(exports, "analyticsFor", {
25
25
  enumerable: true,
26
- get: function () { return chunkCTHHMNLE_cjs.analyticsFor; }
26
+ get: function () { return chunkNZWYOV5Y_cjs.analyticsFor; }
27
27
  });
28
28
  Object.defineProperty(exports, "createAnalytics", {
29
29
  enumerable: true,
30
- get: function () { return chunkCTHHMNLE_cjs.createAnalytics; }
30
+ get: function () { return chunkNZWYOV5Y_cjs.createAnalytics; }
31
31
  });
32
32
  Object.defineProperty(exports, "createStorefrontClient", {
33
33
  enumerable: true,
34
- get: function () { return chunkCTHHMNLE_cjs.createStorefrontClient; }
34
+ get: function () { return chunkNZWYOV5Y_cjs.createStorefrontClient; }
35
35
  });
36
36
  Object.defineProperty(exports, "getAttribution", {
37
37
  enumerable: true,
38
- get: function () { return chunkCTHHMNLE_cjs.getAttribution; }
38
+ get: function () { return chunkNZWYOV5Y_cjs.getAttribution; }
39
39
  });
40
40
  Object.defineProperty(exports, "parsePublishableKey", {
41
41
  enumerable: true,
42
- get: function () { return chunkCTHHMNLE_cjs.parsePublishableKey; }
42
+ get: function () { return chunkNZWYOV5Y_cjs.parsePublishableKey; }
43
43
  });
44
44
  Object.defineProperty(exports, "trackPurchasePixel", {
45
45
  enumerable: true,
46
- get: function () { return chunkCTHHMNLE_cjs.trackPurchasePixel; }
46
+ get: function () { return chunkNZWYOV5Y_cjs.trackPurchasePixel; }
47
47
  });
48
48
  Object.defineProperty(exports, "IMAGE_WIDTHS", {
49
49
  enumerable: true,
@@ -63,33 +63,33 @@ Object.defineProperty(exports, "imageUrl", {
63
63
  });
64
64
  Object.defineProperty(exports, "PriceChangedError", {
65
65
  enumerable: true,
66
- get: function () { return chunkUSOISC2R_cjs.PriceChangedError; }
66
+ get: function () { return chunkJ5FZ4WDQ_cjs.PriceChangedError; }
67
67
  });
68
68
  Object.defineProperty(exports, "RateLimitedError", {
69
69
  enumerable: true,
70
- get: function () { return chunkUSOISC2R_cjs.RateLimitedError; }
70
+ get: function () { return chunkJ5FZ4WDQ_cjs.RateLimitedError; }
71
71
  });
72
72
  Object.defineProperty(exports, "STOREFRONT_ERROR_CODES", {
73
73
  enumerable: true,
74
- get: function () { return chunkUSOISC2R_cjs.STOREFRONT_ERROR_CODES; }
74
+ get: function () { return chunkJ5FZ4WDQ_cjs.STOREFRONT_ERROR_CODES; }
75
75
  });
76
76
  Object.defineProperty(exports, "StorefrontConfigError", {
77
77
  enumerable: true,
78
- get: function () { return chunkUSOISC2R_cjs.StorefrontConfigError; }
78
+ get: function () { return chunkJ5FZ4WDQ_cjs.StorefrontConfigError; }
79
79
  });
80
80
  Object.defineProperty(exports, "StorefrontError", {
81
81
  enumerable: true,
82
- get: function () { return chunkUSOISC2R_cjs.StorefrontError; }
82
+ get: function () { return chunkJ5FZ4WDQ_cjs.StorefrontError; }
83
83
  });
84
84
  Object.defineProperty(exports, "StorefrontNetworkError", {
85
85
  enumerable: true,
86
- get: function () { return chunkUSOISC2R_cjs.StorefrontNetworkError; }
86
+ get: function () { return chunkJ5FZ4WDQ_cjs.StorefrontNetworkError; }
87
87
  });
88
88
  Object.defineProperty(exports, "StorefrontTimeoutError", {
89
89
  enumerable: true,
90
- get: function () { return chunkUSOISC2R_cjs.StorefrontTimeoutError; }
90
+ get: function () { return chunkJ5FZ4WDQ_cjs.StorefrontTimeoutError; }
91
91
  });
92
92
  Object.defineProperty(exports, "WrongRegionError", {
93
93
  enumerable: true,
94
- get: function () { return chunkUSOISC2R_cjs.WrongRegionError; }
94
+ get: function () { return chunkJ5FZ4WDQ_cjs.WrongRegionError; }
95
95
  });
package/dist/index.d.cts CHANGED
@@ -1,8 +1,8 @@
1
- import { S as StorefrontRegion } from './errors-CAW7nLHr.cjs';
2
- export { A as AnalyticsOptions, a as AnalyticsReporter, P as PriceChangedError, R as RateLimitedError, b as STOREFRONT_ERROR_CODES, c as StorefrontAnalytics, d as StorefrontConfigError, e as StorefrontError, f as StorefrontErrorCode, g as StorefrontErrorInit, h as StorefrontNetworkError, i as StorefrontTimeoutError, T as TrackEvent, W as WrongRegionError, j as analyticsFor, k as createAnalytics, t as trackPurchasePixel } from './errors-CAW7nLHr.cjs';
1
+ import { S as StorefrontRegion } from './errors-DpImb0Uf.cjs';
2
+ export { A as AnalyticsOptions, a as AnalyticsReporter, P as PriceChangedError, R as RateLimitedError, b as STOREFRONT_ERROR_CODES, c as StorefrontAnalytics, d as StorefrontConfigError, e as StorefrontError, f as StorefrontErrorCode, g as StorefrontErrorInit, h as StorefrontNetworkError, i as StorefrontTimeoutError, T as TrackEvent, W as WrongRegionError, j as analyticsFor, k as createAnalytics, t as trackPurchasePixel } from './errors-DpImb0Uf.cjs';
3
3
  import { z } from 'zod';
4
- export { B as BookingResult, C as CheckoutMountDescriptor, a as CheckoutSession, b as ConfirmCheckoutSessionInput, c as ConfirmCheckoutSessionRequest, d as ContentListQuery, e as CreateCheckoutSessionInput, f as CreateCheckoutSessionOptions, g as CreatedCheckoutSession, P as Page, R as RequestOptions, S as STOREFRONT_API_PATH, h as StorefrontBooking, i as StorefrontBuilding, j as StorefrontClient, k as StorefrontClientOptions, l as StorefrontContactInput, m as StorefrontContentItem, n as StorefrontContentModel, o as StorefrontContentRef, p as StorefrontGuestInput, q as StorefrontGuide, r as StorefrontGuideItem, s as StorefrontImage, t as StorefrontListing, u as StorefrontListingSummary, v as StorefrontListingsQuery, w as StorefrontLocation, x as StorefrontQuote, y as StorefrontQuoteInput, z as StorefrontRatePlanQuote, A as StorefrontReview, D as StorefrontReviewsQuery, E as StorefrontSite, F as createStorefrontClient } from './client-CZWN4im4.cjs';
5
- export { S as StorefrontAvailability, a as StorefrontCalendar, b as StorefrontCalendarDay, c as StorefrontCalendarQuery, d as StorefrontStay, e as StorefrontUnavailableReason } from './availability-CnzmxuV3.cjs';
4
+ export { B as BookingResult, C as CheckoutMountDescriptor, a as CheckoutSession, b as ConfirmCheckoutSessionInput, c as ConfirmCheckoutSessionRequest, d as ContentListQuery, e as CreateCheckoutSessionInput, f as CreateCheckoutSessionOptions, g as CreatedCheckoutSession, P as Page, R as RequestOptions, S as STOREFRONT_API_PATH, h as StorefrontBooking, i as StorefrontBuilding, j as StorefrontClient, k as StorefrontClientOptions, l as StorefrontContactInput, m as StorefrontContentItem, n as StorefrontContentModel, o as StorefrontContentRef, p as StorefrontGuestInput, q as StorefrontGuide, r as StorefrontGuideItem, s as StorefrontImage, t as StorefrontListing, u as StorefrontListingFacets, v as StorefrontListingSort, w as StorefrontListingSummary, x as StorefrontListingsQuery, y as StorefrontLocation, z as StorefrontQuote, A as StorefrontQuoteInput, D as StorefrontRatePlanQuote, E as StorefrontReview, F as StorefrontReviewsQuery, G as StorefrontSite, H as createStorefrontClient } from './client-2KyVv-2l.cjs';
5
+ export { S as StorefrontAvailability, a as StorefrontBuildingAvailabilityQuery, b as StorefrontCalendar, c as StorefrontCalendarDay, d as StorefrontCalendarQuery, e as StorefrontStay, f as StorefrontUnavailableReason, g as StorefrontUnitAvailability, h as StorefrontUnitUnavailableReason } from './availability-Dh0yLSkj.cjs';
6
6
 
7
7
  declare const attributionTouchSchema: z.ZodObject<{
8
8
  ts: z.ZodISODateTime;
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { S as StorefrontRegion } from './errors-DoXdi1vS.js';
2
- export { A as AnalyticsOptions, a as AnalyticsReporter, P as PriceChangedError, R as RateLimitedError, b as STOREFRONT_ERROR_CODES, c as StorefrontAnalytics, d as StorefrontConfigError, e as StorefrontError, f as StorefrontErrorCode, g as StorefrontErrorInit, h as StorefrontNetworkError, i as StorefrontTimeoutError, T as TrackEvent, W as WrongRegionError, j as analyticsFor, k as createAnalytics, t as trackPurchasePixel } from './errors-DoXdi1vS.js';
1
+ import { S as StorefrontRegion } from './errors-BGgJ--XR.js';
2
+ export { A as AnalyticsOptions, a as AnalyticsReporter, P as PriceChangedError, R as RateLimitedError, b as STOREFRONT_ERROR_CODES, c as StorefrontAnalytics, d as StorefrontConfigError, e as StorefrontError, f as StorefrontErrorCode, g as StorefrontErrorInit, h as StorefrontNetworkError, i as StorefrontTimeoutError, T as TrackEvent, W as WrongRegionError, j as analyticsFor, k as createAnalytics, t as trackPurchasePixel } from './errors-BGgJ--XR.js';
3
3
  import { z } from 'zod';
4
- export { B as BookingResult, C as CheckoutMountDescriptor, a as CheckoutSession, b as ConfirmCheckoutSessionInput, c as ConfirmCheckoutSessionRequest, d as ContentListQuery, e as CreateCheckoutSessionInput, f as CreateCheckoutSessionOptions, g as CreatedCheckoutSession, P as Page, R as RequestOptions, S as STOREFRONT_API_PATH, h as StorefrontBooking, i as StorefrontBuilding, j as StorefrontClient, k as StorefrontClientOptions, l as StorefrontContactInput, m as StorefrontContentItem, n as StorefrontContentModel, o as StorefrontContentRef, p as StorefrontGuestInput, q as StorefrontGuide, r as StorefrontGuideItem, s as StorefrontImage, t as StorefrontListing, u as StorefrontListingSummary, v as StorefrontListingsQuery, w as StorefrontLocation, x as StorefrontQuote, y as StorefrontQuoteInput, z as StorefrontRatePlanQuote, A as StorefrontReview, D as StorefrontReviewsQuery, E as StorefrontSite, F as createStorefrontClient } from './client-oyYRhUv0.js';
5
- export { S as StorefrontAvailability, a as StorefrontCalendar, b as StorefrontCalendarDay, c as StorefrontCalendarQuery, d as StorefrontStay, e as StorefrontUnavailableReason } from './availability-CnzmxuV3.js';
4
+ export { B as BookingResult, C as CheckoutMountDescriptor, a as CheckoutSession, b as ConfirmCheckoutSessionInput, c as ConfirmCheckoutSessionRequest, d as ContentListQuery, e as CreateCheckoutSessionInput, f as CreateCheckoutSessionOptions, g as CreatedCheckoutSession, P as Page, R as RequestOptions, S as STOREFRONT_API_PATH, h as StorefrontBooking, i as StorefrontBuilding, j as StorefrontClient, k as StorefrontClientOptions, l as StorefrontContactInput, m as StorefrontContentItem, n as StorefrontContentModel, o as StorefrontContentRef, p as StorefrontGuestInput, q as StorefrontGuide, r as StorefrontGuideItem, s as StorefrontImage, t as StorefrontListing, u as StorefrontListingFacets, v as StorefrontListingSort, w as StorefrontListingSummary, x as StorefrontListingsQuery, y as StorefrontLocation, z as StorefrontQuote, A as StorefrontQuoteInput, D as StorefrontRatePlanQuote, E as StorefrontReview, F as StorefrontReviewsQuery, G as StorefrontSite, H as createStorefrontClient } from './client-C9Igm7O-.js';
5
+ export { S as StorefrontAvailability, a as StorefrontBuildingAvailabilityQuery, b as StorefrontCalendar, c as StorefrontCalendarDay, d as StorefrontCalendarQuery, e as StorefrontStay, f as StorefrontUnavailableReason, g as StorefrontUnitAvailability, h as StorefrontUnitUnavailableReason } from './availability-Dh0yLSkj.js';
6
6
 
7
7
  declare const attributionTouchSchema: z.ZodObject<{
8
8
  ts: z.ZodISODateTime;
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- export { SDK_VERSION, STOREFRONT_API_PATH, STOREFRONT_API_VERSION, analyticsFor, createAnalytics, createStorefrontClient, getAttribution, parsePublishableKey, trackPurchasePixel } from './chunk-UWUKERLK.js';
1
+ export { SDK_VERSION, STOREFRONT_API_PATH, STOREFRONT_API_VERSION, analyticsFor, createAnalytics, createStorefrontClient, getAttribution, parsePublishableKey, trackPurchasePixel } from './chunk-YSKWSL2F.js';
2
2
  export { CDN_IMAGE_WIDTHS as IMAGE_WIDTHS, cdnImageProps as imageProps, cdnImageSrcSet as imageSrcSet, cdnImageUrl as imageUrl } from './chunk-A43EXKPY.js';
3
3
  import './chunk-PYVUDQSQ.js';
4
- import './chunk-TRXDDUEL.js';
5
- export { PriceChangedError, RateLimitedError, STOREFRONT_ERROR_CODES, StorefrontConfigError, StorefrontError, StorefrontNetworkError, StorefrontTimeoutError, WrongRegionError } from './chunk-ZI2PG7LS.js';
6
- import './chunk-6NFURJXI.js';
4
+ import './chunk-5TUJX6GY.js';
5
+ export { PriceChangedError, RateLimitedError, STOREFRONT_ERROR_CODES, StorefrontConfigError, StorefrontError, StorefrontNetworkError, StorefrontTimeoutError, WrongRegionError } from './chunk-W5K7IDYN.js';
6
+ import './chunk-IBCBDAGY.js';
package/dist/react.cjs CHANGED
@@ -1,15 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var chunkCTHHMNLE_cjs = require('./chunk-CTHHMNLE.cjs');
4
- var chunkVV2UNVQ2_cjs = require('./chunk-VV2UNVQ2.cjs');
3
+ var chunkNZWYOV5Y_cjs = require('./chunk-NZWYOV5Y.cjs');
4
+ var chunkUMCI4YBN_cjs = require('./chunk-UMCI4YBN.cjs');
5
5
  require('./chunk-ZLAOY6IF.cjs');
6
- require('./chunk-E5CGGMCO.cjs');
7
- var chunkUSOISC2R_cjs = require('./chunk-USOISC2R.cjs');
8
- require('./chunk-LVFRVNT3.cjs');
6
+ require('./chunk-LY73ZYN5.cjs');
7
+ var chunkJ5FZ4WDQ_cjs = require('./chunk-J5FZ4WDQ.cjs');
8
+ require('./chunk-EHQFWSP6.cjs');
9
9
  var react = require('react');
10
10
  var jsxRuntime = require('react/jsx-runtime');
11
11
 
12
- var SuiteOpContext=react.createContext(null);var ASTRO_PAGE_LOAD="astro:page-load";function SuiteOpProvider({client,children}){const value=react.useMemo(()=>({client,requests:new Map,analytics:chunkCTHHMNLE_cjs.analyticsFor(client.publishableKey)}),[client]);const{analytics}=value;react.useEffect(()=>{const onPageLoad=()=>analytics.pageView();onPageLoad();document.addEventListener(ASTRO_PAGE_LOAD,onPageLoad);return ()=>document.removeEventListener(ASTRO_PAGE_LOAD,onPageLoad)},[analytics]);return jsxRuntime.jsx(SuiteOpContext.Provider,{value,children})}function useTrack(){const{analytics}=useSuiteOpContext("useTrack");return analytics.track}function useSuiteOpContext(hookName){const value=react.useContext(SuiteOpContext);if(!value)throw new chunkUSOISC2R_cjs.StorefrontConfigError(`${hookName} must be used inside <SuiteOpProvider>`);return value}function useStorefrontClient(){return useSuiteOpContext("useStorefrontClient").client}var SHARED_TTL_MS=3e4;function toStorefrontError(err){if(err instanceof chunkUSOISC2R_cjs.StorefrontError)return err;return new chunkUSOISC2R_cjs.StorefrontError({status:0,code:"internal_error",message:err instanceof Error?err.message:"Unexpected error",cause:err})}function acquire(requests,key,run){const now=Date.now();for(const[k,entry2]of requests){if(entry2.refs===0&&entry2.settledAt!==null&&now-entry2.settledAt>=SHARED_TTL_MS){requests.delete(k);}}const cached=requests.get(key);if(cached&&(cached.settledAt===null||now-cached.settledAt<SHARED_TTL_MS)){cached.refs+=1;return cached}const controller=new AbortController;const entry={promise:Promise.resolve(),controller,refs:1,settledAt:null};entry.promise=run({signal:controller.signal}).then(data=>{entry.settledAt=Date.now();return data},err=>{if(requests.get(key)===entry)requests.delete(key);throw err});requests.set(key,entry);return entry}function release(requests,key,entry){entry.refs-=1;queueMicrotask(()=>{if(entry.refs>0||entry.settledAt!==null)return;entry.controller.abort();if(requests.get(key)===entry)requests.delete(key);});}function useSharedRead(hookName,key,run){const{requests}=useSuiteOpContext(hookName);const[current,setCurrent]=react.useState(null);const runRef=react.useRef(run);runRef.current=run;react.useEffect(()=>{if(key===null)return;let active=true;const entry=acquire(requests,key,opts=>runRef.current(opts));entry.promise.then(data=>{if(active)setCurrent({key,state:{status:"success",data}});},err=>{if(active&&!entry.controller.signal.aborted){setCurrent({key,state:{status:"error",error:toStorefrontError(err)}});}});return ()=>{active=false;release(requests,key,entry);}},[requests,key]);if(key===null)return {status:"idle"};return current?.key===key?current.state:{status:"loading"}}function useListing(id){const{client}=useSuiteOpContext("useListing");return useSharedRead("useListing",id===null?null:`listing:${id}`,opts=>client.listings.get(id,opts))}function useAvailability(listingId,stay){const{client}=useSuiteOpContext("useAvailability");const key=listingId===null||stay===null?null:`availability:${JSON.stringify([listingId,stay.checkIn,stay.checkOut,stay.guests])}`;return useSharedRead("useAvailability",key,opts=>client.availability.get(listingId,stay,opts))}function useMutationState(){const[state,setState]=react.useState({status:"idle"});const seq=react.useRef(0);const track=react.useCallback(async(work,onError)=>{const mine=++seq.current;setState({status:"loading"});try{const data=await work();if(mine===seq.current)setState({status:"success",data});return data}catch(err){if(mine===seq.current){onError?.(err);setState({status:"error",error:toStorefrontError(err)});}throw err}},[]);return {state,track}}function useQuote(){const{client}=useSuiteOpContext("useQuote");const{state,track}=useMutationState();const quote=react.useCallback(input=>track(()=>client.quotes.create(input)),[client,track]);return {quote,state}}function useCheckoutSession(){const{client}=useSuiteOpContext("useCheckoutSession");const{state,track}=useMutationState();const[priceChanged,setPriceChanged]=react.useState(null);const create=react.useCallback((input,opts)=>{setPriceChanged(null);return track(()=>client.checkoutSessions.create(input,opts),err=>{if(err instanceof chunkUSOISC2R_cjs.PriceChangedError)setPriceChanged(err.quote);})},[client,track]);return {create,session:state,priceChanged}}var EVENTS={"suiteop-checkout:ready":h=>h.onReady?.(),"suiteop-checkout:confirmed":(h,detail)=>h.onComplete(detail),"suiteop-checkout:pending":(h,detail)=>h.onPending?.(detail),"suiteop-checkout:error":(h,detail)=>{const error=detail;if(error.code==="price_changed"&&h.onPriceChanged)h.onPriceChanged();else h.onError?.(error);}};function SuiteOpCheckout(props){const client=useStorefrontClient();const ref=react.useRef(null);const handlers=react.useRef(props);handlers.current=props;react.useEffect(()=>{let active=true;chunkVV2UNVQ2_cjs.loadCheckout({origin:props.checkoutOrigin}).catch(err=>{if(!active)return;const code=err instanceof chunkUSOISC2R_cjs.StorefrontError?err.code:"checkout_unavailable";handlers.current.onError?.({code,requiresNewSession:false});});return ()=>{active=false;}},[props.checkoutOrigin]);react.useEffect(()=>{const element=ref.current;if(!element)return;const listeners=Object.entries(EVENTS).map(([type,handle])=>{const listener=event=>handle(handlers.current,event.detail);element.addEventListener(type,listener);return [type,listener]});return ()=>{for(const[type,listener]of listeners)element.removeEventListener(type,listener);}},[]);const apiBase=client.baseUrl.endsWith(chunkCTHHMNLE_cjs.STOREFRONT_API_PATH)?client.baseUrl.slice(0,-chunkCTHHMNLE_cjs.STOREFRONT_API_PATH.length):client.baseUrl;return react.createElement("suiteop-checkout",{ref,class:props.className,"session-id":props.checkoutSessionId,"quote-ref":props.quoteRef,"idempotency-key":props.idempotencyKey,"api-base":apiBase,"publishable-key":client.publishableKey,locale:props.locale})}
12
+ var SuiteOpContext=react.createContext(null);var ASTRO_PAGE_LOAD="astro:page-load";function SuiteOpProvider({client,children}){const value=react.useMemo(()=>({client,requests:new Map,analytics:chunkNZWYOV5Y_cjs.analyticsFor(client.publishableKey)}),[client]);const{analytics}=value;react.useEffect(()=>{const onPageLoad=()=>analytics.pageView();onPageLoad();document.addEventListener(ASTRO_PAGE_LOAD,onPageLoad);return ()=>document.removeEventListener(ASTRO_PAGE_LOAD,onPageLoad)},[analytics]);return jsxRuntime.jsx(SuiteOpContext.Provider,{value,children})}function useTrack(){const{analytics}=useSuiteOpContext("useTrack");return analytics.track}function useSuiteOpContext(hookName){const value=react.useContext(SuiteOpContext);if(!value)throw new chunkJ5FZ4WDQ_cjs.StorefrontConfigError(`${hookName} must be used inside <SuiteOpProvider>`);return value}function useStorefrontClient(){return useSuiteOpContext("useStorefrontClient").client}var SHARED_TTL_MS=3e4;function toStorefrontError(err){if(err instanceof chunkJ5FZ4WDQ_cjs.StorefrontError)return err;return new chunkJ5FZ4WDQ_cjs.StorefrontError({status:0,code:"internal_error",message:err instanceof Error?err.message:"Unexpected error",cause:err})}function acquire(requests,key,run){const now=Date.now();for(const[k,entry2]of requests){if(entry2.refs===0&&entry2.settledAt!==null&&now-entry2.settledAt>=SHARED_TTL_MS){requests.delete(k);}}const cached=requests.get(key);if(cached&&(cached.settledAt===null||now-cached.settledAt<SHARED_TTL_MS)){cached.refs+=1;return cached}const controller=new AbortController;const entry={promise:Promise.resolve(),controller,refs:1,settledAt:null};entry.promise=run({signal:controller.signal}).then(data=>{entry.settledAt=Date.now();return data},err=>{if(requests.get(key)===entry)requests.delete(key);throw err});requests.set(key,entry);return entry}function release(requests,key,entry){entry.refs-=1;queueMicrotask(()=>{if(entry.refs>0||entry.settledAt!==null)return;entry.controller.abort();if(requests.get(key)===entry)requests.delete(key);});}function useSharedRead(hookName,key,run){const{requests}=useSuiteOpContext(hookName);const[current,setCurrent]=react.useState(null);const runRef=react.useRef(run);runRef.current=run;react.useEffect(()=>{if(key===null)return;let active=true;const entry=acquire(requests,key,opts=>runRef.current(opts));entry.promise.then(data=>{if(active)setCurrent({key,state:{status:"success",data}});},err=>{if(active&&!entry.controller.signal.aborted){setCurrent({key,state:{status:"error",error:toStorefrontError(err)}});}});return ()=>{active=false;release(requests,key,entry);}},[requests,key]);if(key===null)return {status:"idle"};return current?.key===key?current.state:{status:"loading"}}function useListing(id){const{client}=useSuiteOpContext("useListing");return useSharedRead("useListing",id===null?null:`listing:${id}`,opts=>client.listings.get(id,opts))}function useAvailability(listingId,stay){const{client}=useSuiteOpContext("useAvailability");const key=listingId===null||stay===null?null:`availability:${JSON.stringify([listingId,stay.checkIn,stay.checkOut,stay.guests])}`;return useSharedRead("useAvailability",key,opts=>client.availability.get(listingId,stay,opts))}function useMutationState(){const[state,setState]=react.useState({status:"idle"});const seq=react.useRef(0);const track=react.useCallback(async(work,onError)=>{const mine=++seq.current;setState({status:"loading"});try{const data=await work();if(mine===seq.current)setState({status:"success",data});return data}catch(err){if(mine===seq.current){onError?.(err);setState({status:"error",error:toStorefrontError(err)});}throw err}},[]);return {state,track}}function useQuote(){const{client}=useSuiteOpContext("useQuote");const{state,track}=useMutationState();const quote=react.useCallback(input=>track(()=>client.quotes.create(input)),[client,track]);return {quote,state}}function useCheckoutSession(){const{client}=useSuiteOpContext("useCheckoutSession");const{state,track}=useMutationState();const[priceChanged,setPriceChanged]=react.useState(null);const create=react.useCallback((input,opts)=>{setPriceChanged(null);return track(()=>client.checkoutSessions.create(input,opts),err=>{if(err instanceof chunkJ5FZ4WDQ_cjs.PriceChangedError)setPriceChanged(err.quote);})},[client,track]);return {create,session:state,priceChanged}}var EVENTS={"suiteop-checkout:ready":h=>h.onReady?.(),"suiteop-checkout:confirmed":(h,detail)=>h.onComplete(detail),"suiteop-checkout:pending":(h,detail)=>h.onPending?.(detail),"suiteop-checkout:error":(h,detail)=>{const error=detail;if(error.code==="price_changed"&&h.onPriceChanged)h.onPriceChanged();else h.onError?.(error);}};function SuiteOpCheckout(props){const client=useStorefrontClient();const ref=react.useRef(null);const handlers=react.useRef(props);handlers.current=props;react.useEffect(()=>{let active=true;chunkUMCI4YBN_cjs.loadCheckout({origin:props.checkoutOrigin}).catch(err=>{if(!active)return;const code=err instanceof chunkJ5FZ4WDQ_cjs.StorefrontError?err.code:"checkout_unavailable";handlers.current.onError?.({code,requiresNewSession:false});});return ()=>{active=false;}},[props.checkoutOrigin]);react.useEffect(()=>{const element=ref.current;if(!element)return;const listeners=Object.entries(EVENTS).map(([type,handle])=>{const listener=event=>handle(handlers.current,event.detail);element.addEventListener(type,listener);return [type,listener]});return ()=>{for(const[type,listener]of listeners)element.removeEventListener(type,listener);}},[]);const apiBase=client.baseUrl.endsWith(chunkNZWYOV5Y_cjs.STOREFRONT_API_PATH)?client.baseUrl.slice(0,-chunkNZWYOV5Y_cjs.STOREFRONT_API_PATH.length):client.baseUrl;return react.createElement("suiteop-checkout",{ref,class:props.className,"session-id":props.checkoutSessionId,"quote-ref":props.quoteRef,"idempotency-key":props.idempotencyKey,"api-base":apiBase,"publishable-key":client.publishableKey,locale:props.locale})}
13
13
 
14
14
  exports.SuiteOpCheckout = SuiteOpCheckout;
15
15
  exports.SuiteOpProvider = SuiteOpProvider;
package/dist/react.d.cts CHANGED
@@ -1,6 +1,6 @@
1
- import { d as StorefrontStay, S as StorefrontAvailability } from './availability-CnzmxuV3.cjs';
2
- import { e as CreateCheckoutSessionInput, f as CreateCheckoutSessionOptions, g as CreatedCheckoutSession, x as StorefrontQuote, t as StorefrontListing, y as StorefrontQuoteInput, j as StorefrontClient, B as BookingResult } from './client-CZWN4im4.cjs';
3
- import { e as StorefrontError, T as TrackEvent } from './errors-CAW7nLHr.cjs';
1
+ import { e as StorefrontStay, S as StorefrontAvailability } from './availability-Dh0yLSkj.cjs';
2
+ import { e as CreateCheckoutSessionInput, f as CreateCheckoutSessionOptions, g as CreatedCheckoutSession, z as StorefrontQuote, t as StorefrontListing, A as StorefrontQuoteInput, j as StorefrontClient, B as BookingResult } from './client-2KyVv-2l.cjs';
3
+ import { e as StorefrontError, T as TrackEvent } from './errors-DpImb0Uf.cjs';
4
4
  import * as react from 'react';
5
5
  import { ReactNode, JSX } from 'react';
6
6
  import 'zod';
package/dist/react.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { d as StorefrontStay, S as StorefrontAvailability } from './availability-CnzmxuV3.js';
2
- import { e as CreateCheckoutSessionInput, f as CreateCheckoutSessionOptions, g as CreatedCheckoutSession, x as StorefrontQuote, t as StorefrontListing, y as StorefrontQuoteInput, j as StorefrontClient, B as BookingResult } from './client-oyYRhUv0.js';
3
- import { e as StorefrontError, T as TrackEvent } from './errors-DoXdi1vS.js';
1
+ import { e as StorefrontStay, S as StorefrontAvailability } from './availability-Dh0yLSkj.js';
2
+ import { e as CreateCheckoutSessionInput, f as CreateCheckoutSessionOptions, g as CreatedCheckoutSession, z as StorefrontQuote, t as StorefrontListing, A as StorefrontQuoteInput, j as StorefrontClient, B as BookingResult } from './client-C9Igm7O-.js';
3
+ import { e as StorefrontError, T as TrackEvent } from './errors-BGgJ--XR.js';
4
4
  import * as react from 'react';
5
5
  import { ReactNode, JSX } from 'react';
6
6
  import 'zod';
package/dist/react.js CHANGED
@@ -1,9 +1,9 @@
1
- import { analyticsFor, STOREFRONT_API_PATH } from './chunk-UWUKERLK.js';
2
- import { loadCheckout } from './chunk-HMLBMNGA.js';
1
+ import { analyticsFor, STOREFRONT_API_PATH } from './chunk-YSKWSL2F.js';
2
+ import { loadCheckout } from './chunk-7ZAI36LH.js';
3
3
  import './chunk-PYVUDQSQ.js';
4
- import './chunk-TRXDDUEL.js';
5
- import { StorefrontConfigError, PriceChangedError, StorefrontError } from './chunk-ZI2PG7LS.js';
6
- import './chunk-6NFURJXI.js';
4
+ import './chunk-5TUJX6GY.js';
5
+ import { StorefrontConfigError, PriceChangedError, StorefrontError } from './chunk-W5K7IDYN.js';
6
+ import './chunk-IBCBDAGY.js';
7
7
  import { createContext, useMemo, useEffect, useContext, useCallback, useState, useRef, createElement } from 'react';
8
8
  import { jsx } from 'react/jsx-runtime';
9
9
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@suiteop/storefront",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Typed client, React hooks and headless components for the SuiteOp Storefront API.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://developer.suiteop.com",