@mission-studio/puck 1.0.21 → 1.0.24

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 (33) hide show
  1. package/dist/Popup-Dg78fu78.d.mts +260 -0
  2. package/dist/Popup-L7kcJo05.d.ts +260 -0
  3. package/dist/ResponsiveToggleField-65CqZEK-.d.mts +10 -0
  4. package/dist/ResponsiveToggleField-QCve94L_.d.ts +10 -0
  5. package/dist/chunk-MYS3PLMF.mjs +463 -0
  6. package/dist/chunk-TRPKXVMO.mjs +695 -0
  7. package/dist/{chunk-MWW5LYLN.mjs → chunk-YIPEC4L4.mjs} +709 -1075
  8. package/dist/components/page/astro/index.d.mts +54 -0
  9. package/dist/components/page/astro/index.d.ts +54 -0
  10. package/dist/components/page/astro/index.js +2056 -0
  11. package/dist/components/page/astro/index.mjs +51 -0
  12. package/dist/config/server.js +630 -700
  13. package/dist/config/server.mjs +33 -83
  14. package/dist/config-entry.js +592 -478
  15. package/dist/config-entry.mjs +11 -11
  16. package/dist/{ResponsiveToggleField-CfBKL5oY.d.ts → defaults-j55hBQHu.d.mts} +2 -8
  17. package/dist/{ResponsiveToggleField-BihXsGIJ.d.mts → defaults-z8Ft2j5r.d.ts} +2 -8
  18. package/dist/editor.d.mts +5 -4
  19. package/dist/editor.d.ts +5 -4
  20. package/dist/index.d.mts +5 -3
  21. package/dist/index.d.ts +5 -3
  22. package/dist/index.js +388 -274
  23. package/dist/index.mjs +11 -11
  24. package/dist/renderer.d.mts +9 -250
  25. package/dist/renderer.d.ts +9 -250
  26. package/dist/renderer.js +388 -274
  27. package/dist/renderer.mjs +11 -11
  28. package/dist/resolve/index.d.mts +1 -1
  29. package/dist/resolve/index.d.ts +1 -1
  30. package/dist/{types-D-CIduaE.d.mts → types-HQ6hIbYr.d.mts} +1 -1
  31. package/dist/{types-D-CIduaE.d.ts → types-HQ6hIbYr.d.ts} +1 -1
  32. package/package.json +6 -1
  33. package/dist/chunk-WFLVAZV2.mjs +0 -142
@@ -1,5 +1,4 @@
1
1
  import {
2
- getShadowCSS,
3
2
  useEntries,
4
3
  useTheme
5
4
  } from "./chunk-PJXZC564.mjs";
@@ -12,586 +11,120 @@ import {
12
11
  hexToRgba
13
12
  } from "./chunk-C6V3YUPF.mjs";
14
13
 
15
- // components/page/Button.tsx
14
+ // components/page/VideoEmbed.tsx
16
15
  import { jsx } from "react/jsx-runtime";
17
- var sizeStyles = {
18
- sm: { padding: "8px 16px", fontSize: "0.875rem" },
19
- md: { padding: "12px 24px", fontSize: "1rem" },
20
- lg: { padding: "16px 32px", fontSize: "1.125rem" },
21
- xl: { padding: "20px 40px", fontSize: "1.25rem" }
16
+ var aspectRatioMap = {
17
+ "16:9": "56.25%",
18
+ // 9/16 * 100
19
+ "4:3": "75%",
20
+ "1:1": "100%",
21
+ "21:9": "42.86%"
22
22
  };
23
23
  var radiusMap = {
24
24
  none: "0",
25
25
  sm: "4px",
26
26
  md: "8px",
27
- lg: "16px",
28
- full: "9999px"
27
+ lg: "16px"
28
+ };
29
+ var maxWidthMap = {
30
+ sm: "400px",
31
+ md: "600px",
32
+ lg: "800px",
33
+ xl: "1000px",
34
+ full: "100%"
29
35
  };
30
- function isThemeableValue(value) {
31
- return typeof value === "object" && value !== null && "useTheme" in value;
32
- }
33
36
  function isEntryBoundValue(value) {
34
37
  return typeof value === "object" && value !== null && "useEntry" in value;
35
38
  }
36
- function Button({
37
- text,
38
- href,
39
- target = "_self",
40
- variant = "solid",
41
- size = "md",
42
- color,
43
- textColor,
44
- borderRadius = "md",
45
- fullWidth = false,
46
- align = "center",
47
- id
48
- }) {
49
- const { resolveColor: resolveColor2 } = useTheme();
50
- const { getEntryValue } = useEntries();
51
- const utm = useUtmParams();
52
- const sendEvent = useGtmEvent();
53
- const resolvedText = (() => {
54
- if (!text) return "Button";
55
- if (typeof text === "string") return text;
56
- if (isEntryBoundValue(text)) {
57
- if (text.useEntry) {
58
- return String(getEntryValue(text.entryName, text.fieldKey) ?? "Button");
59
- }
60
- return text.value;
61
- }
62
- return "Button";
63
- })();
64
- const handleClick = () => {
65
- const sessionId = typeof window !== "undefined" ? sessionStorage.getItem("session_id") : null;
66
- sendEvent("button_click", {
67
- text: resolvedText,
68
- href: href || void 0,
69
- variant,
70
- session_id: sessionId,
71
- ...utm
72
- });
73
- };
74
- const resolvedColor = (() => {
75
- if (!color) return resolveColor2("primary");
76
- if (typeof color === "string") return { color, opacity: 100 };
77
- if (isThemeableValue(color)) {
78
- return color.useTheme ? resolveColor2(color.themeKey) : color.value;
79
- }
80
- if ("color" in color) return color;
81
- return resolveColor2("primary");
82
- })();
83
- const resolvedTextColor = (() => {
84
- if (!textColor) {
85
- if (variant === "solid") return { color: "#FFFFFF", opacity: 100 };
86
- return resolvedColor;
87
- }
88
- if (typeof textColor === "string")
89
- return { color: textColor, opacity: 100 };
90
- if (isThemeableValue(textColor)) {
91
- return textColor.useTheme ? resolveColor2(textColor.themeKey) : textColor.value;
92
- }
93
- if ("color" in textColor) return textColor;
94
- return { color: "#FFFFFF", opacity: 100 };
95
- })();
96
- const bgColor = hexToRgba(resolvedColor.color, resolvedColor.opacity);
97
- const fgColor = hexToRgba(resolvedTextColor.color, resolvedTextColor.opacity);
98
- const baseStyle = {
99
- ...sizeStyles[size],
100
- borderRadius: radiusMap[borderRadius],
101
- fontWeight: 600,
102
- cursor: "pointer",
103
- display: "inline-flex",
104
- alignItems: "center",
105
- justifyContent: "center",
106
- textDecoration: "none",
107
- transition: "opacity 0.2s, transform 0.2s",
108
- width: fullWidth ? "100%" : "auto",
109
- border: "none"
110
- };
111
- const variantStyles = {
112
- solid: {
113
- backgroundColor: bgColor,
114
- color: fgColor
115
- },
116
- outline: {
117
- backgroundColor: "transparent",
118
- color: bgColor,
119
- border: `2px solid ${bgColor}`
120
- },
121
- ghost: {
122
- backgroundColor: "transparent",
123
- color: bgColor
124
- },
125
- link: {
126
- backgroundColor: "transparent",
127
- color: bgColor,
128
- padding: "0",
129
- textDecoration: "underline"
130
- }
131
- };
132
- const style = { ...baseStyle, ...variantStyles[variant] };
133
- const wrapperStyle = {
134
- display: "flex",
135
- justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
136
- };
137
- const content = /* @__PURE__ */ jsx("span", { style, children: resolvedText });
138
- if (href) {
139
- return /* @__PURE__ */ jsx("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx(
140
- "a",
141
- {
142
- id,
143
- href,
144
- target,
145
- style,
146
- rel: target === "_blank" ? "noopener noreferrer" : void 0,
147
- onClick: handleClick,
148
- children: resolvedText
149
- }
150
- ) });
39
+ function parseVideoUrl(url) {
40
+ const ytMatch = url.match(
41
+ /(?:youtube\.com\/(?:watch\?v=|embed\/)|youtu\.be\/)([a-zA-Z0-9_-]{11})/
42
+ );
43
+ if (ytMatch) {
44
+ return {
45
+ type: "youtube",
46
+ embedUrl: `https://www.youtube.com/embed/${ytMatch[1]}`
47
+ };
151
48
  }
152
- return /* @__PURE__ */ jsx("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx("button", { id, type: "button", style, onClick: handleClick, children: resolvedText }) });
153
- }
154
-
155
- // components/page/Image.tsx
156
- import { jsx as jsx2, jsxs } from "react/jsx-runtime";
157
- var widthMap = {
158
- auto: "auto",
159
- full: "100%",
160
- sm: "300px",
161
- md: "500px",
162
- lg: "700px",
163
- xl: "900px"
164
- };
165
- var aspectRatioMap = {
166
- auto: void 0,
167
- "1:1": "1 / 1",
168
- "4:3": "4 / 3",
169
- "16:9": "16 / 9",
170
- "21:9": "21 / 9"
171
- };
172
- var radiusMap2 = {
173
- none: "0",
174
- sm: "4px",
175
- md: "8px",
176
- lg: "16px",
177
- xl: "24px",
178
- full: "9999px"
179
- };
180
- var shadowMap = {
181
- none: "none",
182
- sm: "0 1px 2px rgba(0,0,0,0.05)",
183
- md: "0 4px 6px rgba(0,0,0,0.1)",
184
- lg: "0 10px 15px rgba(0,0,0,0.1)",
185
- xl: "0 20px 25px rgba(0,0,0,0.15)"
186
- };
187
- function isThemeableValue2(value) {
188
- return typeof value === "object" && value !== null && "useTheme" in value;
189
- }
190
- function isEntryBoundValue2(value) {
191
- return typeof value === "object" && value !== null && "useEntry" in value;
49
+ const vimeoMatch = url.match(/(?:vimeo\.com\/)(\d+)/);
50
+ if (vimeoMatch) {
51
+ return {
52
+ type: "vimeo",
53
+ embedUrl: `https://player.vimeo.com/video/${vimeoMatch[1]}`
54
+ };
55
+ }
56
+ return { type: "unknown", embedUrl: url };
192
57
  }
193
- function Image({
194
- src,
195
- alt = "",
196
- width = "full",
197
- aspectRatio = "auto",
198
- objectFit = "cover",
58
+ function VideoEmbed({
59
+ url,
60
+ aspectRatio = "16:9",
199
61
  borderRadius = "none",
200
- shadow = "none",
62
+ autoplay = false,
63
+ muted = false,
64
+ loop = false,
201
65
  align = "center",
202
- caption,
203
- captionColor,
66
+ maxWidth = "full",
204
67
  id
205
68
  }) {
206
- const { resolveColor: resolveColor2 } = useTheme();
207
69
  const { getEntryValue } = useEntries();
208
- const resolvedSrc = (() => {
209
- if (!src) return "";
210
- if (typeof src === "string") return src;
211
- if (isEntryBoundValue2(src)) {
212
- if (src.useEntry) {
213
- return String(getEntryValue(src.entryName, src.fieldKey) ?? "");
214
- }
215
- return src.value;
216
- }
217
- return "";
218
- })();
219
- const resolvedCaption = (() => {
220
- if (!caption) return "";
221
- if (typeof caption === "string") return caption;
222
- if (isEntryBoundValue2(caption)) {
223
- if (caption.useEntry) {
224
- return String(getEntryValue(caption.entryName, caption.fieldKey) ?? "");
70
+ const resolvedUrl = (() => {
71
+ if (!url) return "";
72
+ if (typeof url === "string") return url;
73
+ if (isEntryBoundValue(url)) {
74
+ if (url.useEntry) {
75
+ return String(getEntryValue(url.entryName, url.fieldKey) ?? "");
225
76
  }
226
- return caption.value;
77
+ return url.value;
227
78
  }
228
79
  return "";
229
80
  })();
230
- const resolvedCaptionColor = (() => {
231
- if (!captionColor) return resolveColor2("muted");
232
- if (typeof captionColor === "string")
233
- return { color: captionColor, opacity: 100 };
234
- if (isThemeableValue2(captionColor)) {
235
- return captionColor.useTheme ? resolveColor2(captionColor.themeKey) : captionColor.value;
236
- }
237
- if ("color" in captionColor) return captionColor;
238
- return resolveColor2("muted");
239
- })();
240
- const wrapperStyle = {
241
- display: "flex",
242
- flexDirection: "column",
243
- alignItems: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center",
244
- gap: "8px"
245
- };
246
- const imageStyle = {
247
- width: widthMap[width],
248
- maxWidth: "100%",
249
- aspectRatio: aspectRatioMap[aspectRatio],
250
- objectFit,
251
- borderRadius: radiusMap2[borderRadius],
252
- boxShadow: shadowMap[shadow],
253
- display: "block"
254
- };
255
- const captionStyle = {
256
- fontSize: "0.875rem",
257
- color: hexToRgba(resolvedCaptionColor.color, resolvedCaptionColor.opacity),
258
- textAlign: align,
259
- maxWidth: widthMap[width]
260
- };
261
- if (!resolvedSrc) {
262
- return /* @__PURE__ */ jsx2("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx2(
263
- "div",
264
- {
265
- style: {
266
- ...imageStyle,
267
- backgroundColor: "#e5e7eb",
268
- display: "flex",
269
- alignItems: "center",
270
- justifyContent: "center",
271
- minHeight: "200px",
272
- color: "#9ca3af"
273
- },
274
- children: "No image"
275
- }
276
- ) });
277
- }
278
- return /* @__PURE__ */ jsxs("figure", { id, style: { ...wrapperStyle, margin: 0 }, children: [
279
- /* @__PURE__ */ jsx2("img", { src: resolvedSrc, alt, style: imageStyle, loading: "lazy" }),
280
- resolvedCaption && /* @__PURE__ */ jsx2("figcaption", { style: captionStyle, children: resolvedCaption })
281
- ] });
282
- }
283
-
284
- // components/page/ImageCarousel.tsx
285
- import { useState } from "react";
286
- import { Fragment, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
287
- var aspectRatioMap2 = {
288
- "16:9": "16 / 9",
289
- "4:3": "4 / 3",
290
- "1:1": "1 / 1",
291
- "21:9": "21 / 9"
292
- };
293
- var radiusMap3 = {
294
- none: "0",
295
- sm: "4px",
296
- md: "8px",
297
- lg: "16px"
298
- };
299
- function isThemeableValue3(value) {
300
- return typeof value === "object" && value !== null && "useTheme" in value;
301
- }
302
- function ImageCarousel({
303
- images = [],
304
- aspectRatio = "16:9",
305
- borderRadius = "none",
306
- showDots = true,
307
- showArrows = true,
308
- arrowColor,
309
- dotColor,
310
- id
311
- }) {
312
- const [currentIndex, setCurrentIndex] = useState(0);
313
- const { resolveColor: resolveColor2 } = useTheme();
314
- const utm = useUtmParams();
315
- const sendEvent = useGtmEvent();
316
- const resolvedArrowColor = (() => {
317
- if (!arrowColor) return { color: "#FFFFFF", opacity: 100 };
318
- if (typeof arrowColor === "string")
319
- return { color: arrowColor, opacity: 100 };
320
- if (isThemeableValue3(arrowColor)) {
321
- return arrowColor.useTheme ? resolveColor2(arrowColor.themeKey) : arrowColor.value;
322
- }
323
- if ("color" in arrowColor) return arrowColor;
324
- return { color: "#FFFFFF", opacity: 100 };
325
- })();
326
- const resolvedDotColor = (() => {
327
- if (!dotColor) return resolveColor2("primary");
328
- if (typeof dotColor === "string") return { color: dotColor, opacity: 100 };
329
- if (isThemeableValue3(dotColor)) {
330
- return dotColor.useTheme ? resolveColor2(dotColor.themeKey) : dotColor.value;
331
- }
332
- if ("color" in dotColor) return dotColor;
333
- return resolveColor2("primary");
334
- })();
335
- const goToPrevious = () => {
336
- const newIndex = currentIndex === 0 ? images.length - 1 : currentIndex - 1;
337
- setCurrentIndex(newIndex);
338
- sendEvent("carousel_navigate", {
339
- direction: "previous",
340
- slideIndex: newIndex,
341
- totalSlides: images.length,
342
- ...utm
343
- });
344
- };
345
- const goToNext = () => {
346
- const newIndex = currentIndex === images.length - 1 ? 0 : currentIndex + 1;
347
- setCurrentIndex(newIndex);
348
- sendEvent("carousel_navigate", {
349
- direction: "next",
350
- slideIndex: newIndex,
351
- totalSlides: images.length,
352
- ...utm
353
- });
354
- };
355
- const goToSlide = (index) => {
356
- setCurrentIndex(index);
357
- sendEvent("carousel_navigate", {
358
- direction: "direct",
359
- slideIndex: index,
360
- totalSlides: images.length,
361
- ...utm
362
- });
363
- };
364
- if (images.length === 0) {
365
- return /* @__PURE__ */ jsx3(
81
+ if (!resolvedUrl) {
82
+ return /* @__PURE__ */ jsx(
366
83
  "div",
367
84
  {
368
85
  style: {
369
- aspectRatio: aspectRatioMap2[aspectRatio],
370
- backgroundColor: "#e5e7eb",
371
- borderRadius: radiusMap3[borderRadius],
86
+ backgroundColor: "#1f2937",
87
+ borderRadius: radiusMap[borderRadius],
88
+ aspectRatio: aspectRatio.replace(":", " / "),
372
89
  display: "flex",
373
90
  alignItems: "center",
374
91
  justifyContent: "center",
375
- color: "#9ca3af"
92
+ color: "#9ca3af",
93
+ maxWidth: maxWidthMap[maxWidth],
94
+ marginLeft: align === "center" ? "auto" : align === "right" ? "auto" : void 0,
95
+ marginRight: align === "center" ? "auto" : align === "left" ? "auto" : void 0
376
96
  },
377
- children: "No images"
97
+ children: "No video URL"
378
98
  }
379
99
  );
380
100
  }
101
+ const { embedUrl } = parseVideoUrl(resolvedUrl);
102
+ const params = new URLSearchParams();
103
+ if (autoplay) params.set("autoplay", "1");
104
+ if (muted) params.set("mute", "1");
105
+ if (loop) params.set("loop", "1");
106
+ const finalUrl = params.toString() ? `${embedUrl}?${params.toString()}` : embedUrl;
107
+ const wrapperStyle = {
108
+ display: "flex",
109
+ justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
110
+ };
381
111
  const containerStyle = {
382
112
  position: "relative",
383
- aspectRatio: aspectRatioMap2[aspectRatio],
384
- borderRadius: radiusMap3[borderRadius],
113
+ width: "100%",
114
+ maxWidth: maxWidthMap[maxWidth],
115
+ paddingBottom: aspectRatioMap[aspectRatio],
116
+ borderRadius: radiusMap[borderRadius],
385
117
  overflow: "hidden"
386
118
  };
387
- const slideContainerStyle = {
388
- display: "flex",
389
- transition: "transform 0.3s ease-in-out",
390
- transform: `translateX(-${currentIndex * 100}%)`,
391
- height: "100%"
392
- };
393
- const slideStyle = {
394
- minWidth: "100%",
395
- height: "100%"
396
- };
397
- const imageStyle = {
119
+ const iframeStyle = {
120
+ position: "absolute",
121
+ top: 0,
122
+ left: 0,
398
123
  width: "100%",
399
124
  height: "100%",
400
- objectFit: "cover"
125
+ border: "none"
401
126
  };
402
- const arrowStyle = {
403
- position: "absolute",
404
- top: "50%",
405
- transform: "translateY(-50%)",
406
- backgroundColor: "rgba(0,0,0,0.5)",
407
- color: hexToRgba(resolvedArrowColor.color, resolvedArrowColor.opacity),
408
- border: "none",
409
- borderRadius: "50%",
410
- width: "40px",
411
- height: "40px",
412
- cursor: "pointer",
413
- display: "flex",
414
- alignItems: "center",
415
- justifyContent: "center",
416
- fontSize: "20px",
417
- zIndex: 1
418
- };
419
- const dotsContainerStyle = {
420
- position: "absolute",
421
- bottom: "16px",
422
- left: "50%",
423
- transform: "translateX(-50%)",
424
- display: "flex",
425
- gap: "8px",
426
- zIndex: 1
427
- };
428
- const dotStyle = (isActive) => ({
429
- width: "10px",
430
- height: "10px",
431
- borderRadius: "50%",
432
- border: "none",
433
- cursor: "pointer",
434
- backgroundColor: isActive ? hexToRgba(resolvedDotColor.color, resolvedDotColor.opacity) : "rgba(255,255,255,0.5)"
435
- });
436
- return /* @__PURE__ */ jsxs2("div", { id, style: containerStyle, children: [
437
- /* @__PURE__ */ jsx3("div", { style: slideContainerStyle, children: images.map((image, index) => /* @__PURE__ */ jsx3("div", { style: slideStyle, children: /* @__PURE__ */ jsx3(
438
- "img",
439
- {
440
- src: image.src,
441
- alt: image.alt || "",
442
- style: imageStyle,
443
- loading: "lazy"
444
- }
445
- ) }, index)) }),
446
- showArrows && images.length > 1 && /* @__PURE__ */ jsxs2(Fragment, { children: [
447
- /* @__PURE__ */ jsx3(
448
- "button",
449
- {
450
- type: "button",
451
- onClick: goToPrevious,
452
- style: { ...arrowStyle, left: "16px" },
453
- "aria-label": "Previous slide",
454
- children: "\u2039"
455
- }
456
- ),
457
- /* @__PURE__ */ jsx3(
458
- "button",
459
- {
460
- type: "button",
461
- onClick: goToNext,
462
- style: { ...arrowStyle, right: "16px" },
463
- "aria-label": "Next slide",
464
- children: "\u203A"
465
- }
466
- )
467
- ] }),
468
- showDots && images.length > 1 && /* @__PURE__ */ jsx3("div", { style: dotsContainerStyle, children: images.map((_, index) => /* @__PURE__ */ jsx3(
469
- "button",
470
- {
471
- type: "button",
472
- onClick: () => goToSlide(index),
473
- style: dotStyle(index === currentIndex),
474
- "aria-label": `Go to slide ${index + 1}`
475
- },
476
- index
477
- )) })
478
- ] });
479
- }
480
-
481
- // components/page/VideoEmbed.tsx
482
- import { jsx as jsx4 } from "react/jsx-runtime";
483
- var aspectRatioMap3 = {
484
- "16:9": "56.25%",
485
- // 9/16 * 100
486
- "4:3": "75%",
487
- "1:1": "100%",
488
- "21:9": "42.86%"
489
- };
490
- var radiusMap4 = {
491
- none: "0",
492
- sm: "4px",
493
- md: "8px",
494
- lg: "16px"
495
- };
496
- var maxWidthMap = {
497
- sm: "400px",
498
- md: "600px",
499
- lg: "800px",
500
- xl: "1000px",
501
- full: "100%"
502
- };
503
- function isEntryBoundValue3(value) {
504
- return typeof value === "object" && value !== null && "useEntry" in value;
505
- }
506
- function parseVideoUrl(url) {
507
- const ytMatch = url.match(
508
- /(?:youtube\.com\/(?:watch\?v=|embed\/)|youtu\.be\/)([a-zA-Z0-9_-]{11})/
509
- );
510
- if (ytMatch) {
511
- return {
512
- type: "youtube",
513
- embedUrl: `https://www.youtube.com/embed/${ytMatch[1]}`
514
- };
515
- }
516
- const vimeoMatch = url.match(/(?:vimeo\.com\/)(\d+)/);
517
- if (vimeoMatch) {
518
- return {
519
- type: "vimeo",
520
- embedUrl: `https://player.vimeo.com/video/${vimeoMatch[1]}`
521
- };
522
- }
523
- return { type: "unknown", embedUrl: url };
524
- }
525
- function VideoEmbed({
526
- url,
527
- aspectRatio = "16:9",
528
- borderRadius = "none",
529
- autoplay = false,
530
- muted = false,
531
- loop = false,
532
- align = "center",
533
- maxWidth = "full",
534
- id
535
- }) {
536
- const { getEntryValue } = useEntries();
537
- const resolvedUrl = (() => {
538
- if (!url) return "";
539
- if (typeof url === "string") return url;
540
- if (isEntryBoundValue3(url)) {
541
- if (url.useEntry) {
542
- return String(getEntryValue(url.entryName, url.fieldKey) ?? "");
543
- }
544
- return url.value;
545
- }
546
- return "";
547
- })();
548
- if (!resolvedUrl) {
549
- return /* @__PURE__ */ jsx4(
550
- "div",
551
- {
552
- style: {
553
- backgroundColor: "#1f2937",
554
- borderRadius: radiusMap4[borderRadius],
555
- aspectRatio: aspectRatio.replace(":", " / "),
556
- display: "flex",
557
- alignItems: "center",
558
- justifyContent: "center",
559
- color: "#9ca3af",
560
- maxWidth: maxWidthMap[maxWidth],
561
- marginLeft: align === "center" ? "auto" : align === "right" ? "auto" : void 0,
562
- marginRight: align === "center" ? "auto" : align === "left" ? "auto" : void 0
563
- },
564
- children: "No video URL"
565
- }
566
- );
567
- }
568
- const { embedUrl } = parseVideoUrl(resolvedUrl);
569
- const params = new URLSearchParams();
570
- if (autoplay) params.set("autoplay", "1");
571
- if (muted) params.set("mute", "1");
572
- if (loop) params.set("loop", "1");
573
- const finalUrl = params.toString() ? `${embedUrl}?${params.toString()}` : embedUrl;
574
- const wrapperStyle = {
575
- display: "flex",
576
- justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
577
- };
578
- const containerStyle = {
579
- position: "relative",
580
- width: "100%",
581
- maxWidth: maxWidthMap[maxWidth],
582
- paddingBottom: aspectRatioMap3[aspectRatio],
583
- borderRadius: radiusMap4[borderRadius],
584
- overflow: "hidden"
585
- };
586
- const iframeStyle = {
587
- position: "absolute",
588
- top: 0,
589
- left: 0,
590
- width: "100%",
591
- height: "100%",
592
- border: "none"
593
- };
594
- return /* @__PURE__ */ jsx4("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx4("div", { style: containerStyle, children: /* @__PURE__ */ jsx4(
127
+ return /* @__PURE__ */ jsx("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx("div", { style: containerStyle, children: /* @__PURE__ */ jsx(
595
128
  "iframe",
596
129
  {
597
130
  src: finalUrl,
@@ -603,8 +136,8 @@ function VideoEmbed({
603
136
  ) }) });
604
137
  }
605
138
 
606
- // components/page/Icon.tsx
607
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
139
+ // components/page/primitives/Icon.tsx
140
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
608
141
  var sizeMap = {
609
142
  sm: { size: "16px", strokeWidth: 2 },
610
143
  md: { size: "24px", strokeWidth: 2 },
@@ -613,7 +146,7 @@ var sizeMap = {
613
146
  "2xl": { size: "64px", strokeWidth: 1.5 }
614
147
  };
615
148
  var icons = {
616
- check: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
149
+ check: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx2(
617
150
  "svg",
618
151
  {
619
152
  width: size,
@@ -624,10 +157,10 @@ var icons = {
624
157
  strokeWidth,
625
158
  strokeLinecap: "round",
626
159
  strokeLinejoin: "round",
627
- children: /* @__PURE__ */ jsx5("polyline", { points: "20 6 9 17 4 12" })
160
+ children: /* @__PURE__ */ jsx2("polyline", { points: "20 6 9 17 4 12" })
628
161
  }
629
162
  ),
630
- x: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
163
+ x: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs(
631
164
  "svg",
632
165
  {
633
166
  width: size,
@@ -639,12 +172,12 @@ var icons = {
639
172
  strokeLinecap: "round",
640
173
  strokeLinejoin: "round",
641
174
  children: [
642
- /* @__PURE__ */ jsx5("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
643
- /* @__PURE__ */ jsx5("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
175
+ /* @__PURE__ */ jsx2("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
176
+ /* @__PURE__ */ jsx2("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
644
177
  ]
645
178
  }
646
179
  ),
647
- star: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
180
+ star: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx2(
648
181
  "svg",
649
182
  {
650
183
  width: size,
@@ -655,10 +188,10 @@ var icons = {
655
188
  strokeWidth,
656
189
  strokeLinecap: "round",
657
190
  strokeLinejoin: "round",
658
- children: /* @__PURE__ */ jsx5("polygon", { points: "12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2" })
191
+ children: /* @__PURE__ */ jsx2("polygon", { points: "12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2" })
659
192
  }
660
193
  ),
661
- heart: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
194
+ heart: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx2(
662
195
  "svg",
663
196
  {
664
197
  width: size,
@@ -669,10 +202,10 @@ var icons = {
669
202
  strokeWidth,
670
203
  strokeLinecap: "round",
671
204
  strokeLinejoin: "round",
672
- children: /* @__PURE__ */ jsx5("path", { d: "M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z" })
205
+ children: /* @__PURE__ */ jsx2("path", { d: "M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z" })
673
206
  }
674
207
  ),
675
- arrowRight: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
208
+ arrowRight: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs(
676
209
  "svg",
677
210
  {
678
211
  width: size,
@@ -684,12 +217,12 @@ var icons = {
684
217
  strokeLinecap: "round",
685
218
  strokeLinejoin: "round",
686
219
  children: [
687
- /* @__PURE__ */ jsx5("line", { x1: "5", y1: "12", x2: "19", y2: "12" }),
688
- /* @__PURE__ */ jsx5("polyline", { points: "12 5 19 12 12 19" })
220
+ /* @__PURE__ */ jsx2("line", { x1: "5", y1: "12", x2: "19", y2: "12" }),
221
+ /* @__PURE__ */ jsx2("polyline", { points: "12 5 19 12 12 19" })
689
222
  ]
690
223
  }
691
224
  ),
692
- arrowLeft: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
225
+ arrowLeft: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs(
693
226
  "svg",
694
227
  {
695
228
  width: size,
@@ -701,12 +234,12 @@ var icons = {
701
234
  strokeLinecap: "round",
702
235
  strokeLinejoin: "round",
703
236
  children: [
704
- /* @__PURE__ */ jsx5("line", { x1: "19", y1: "12", x2: "5", y2: "12" }),
705
- /* @__PURE__ */ jsx5("polyline", { points: "12 19 5 12 12 5" })
237
+ /* @__PURE__ */ jsx2("line", { x1: "19", y1: "12", x2: "5", y2: "12" }),
238
+ /* @__PURE__ */ jsx2("polyline", { points: "12 19 5 12 12 5" })
706
239
  ]
707
240
  }
708
241
  ),
709
- mail: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
242
+ mail: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs(
710
243
  "svg",
711
244
  {
712
245
  width: size,
@@ -718,12 +251,12 @@ var icons = {
718
251
  strokeLinecap: "round",
719
252
  strokeLinejoin: "round",
720
253
  children: [
721
- /* @__PURE__ */ jsx5("path", { d: "M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z" }),
722
- /* @__PURE__ */ jsx5("polyline", { points: "22,6 12,13 2,6" })
254
+ /* @__PURE__ */ jsx2("path", { d: "M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z" }),
255
+ /* @__PURE__ */ jsx2("polyline", { points: "22,6 12,13 2,6" })
723
256
  ]
724
257
  }
725
258
  ),
726
- phone: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
259
+ phone: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx2(
727
260
  "svg",
728
261
  {
729
262
  width: size,
@@ -734,10 +267,10 @@ var icons = {
734
267
  strokeWidth,
735
268
  strokeLinecap: "round",
736
269
  strokeLinejoin: "round",
737
- children: /* @__PURE__ */ jsx5("path", { d: "M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z" })
270
+ children: /* @__PURE__ */ jsx2("path", { d: "M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z" })
738
271
  }
739
272
  ),
740
- mapPin: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
273
+ mapPin: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs(
741
274
  "svg",
742
275
  {
743
276
  width: size,
@@ -749,12 +282,12 @@ var icons = {
749
282
  strokeLinecap: "round",
750
283
  strokeLinejoin: "round",
751
284
  children: [
752
- /* @__PURE__ */ jsx5("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" }),
753
- /* @__PURE__ */ jsx5("circle", { cx: "12", cy: "10", r: "3" })
285
+ /* @__PURE__ */ jsx2("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" }),
286
+ /* @__PURE__ */ jsx2("circle", { cx: "12", cy: "10", r: "3" })
754
287
  ]
755
288
  }
756
289
  ),
757
- zap: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
290
+ zap: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx2(
758
291
  "svg",
759
292
  {
760
293
  width: size,
@@ -765,10 +298,10 @@ var icons = {
765
298
  strokeWidth,
766
299
  strokeLinecap: "round",
767
300
  strokeLinejoin: "round",
768
- children: /* @__PURE__ */ jsx5("polygon", { points: "13 2 3 14 12 14 11 22 21 10 12 10 13 2" })
301
+ children: /* @__PURE__ */ jsx2("polygon", { points: "13 2 3 14 12 14 11 22 21 10 12 10 13 2" })
769
302
  }
770
303
  ),
771
- shield: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
304
+ shield: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx2(
772
305
  "svg",
773
306
  {
774
307
  width: size,
@@ -779,10 +312,10 @@ var icons = {
779
312
  strokeWidth,
780
313
  strokeLinecap: "round",
781
314
  strokeLinejoin: "round",
782
- children: /* @__PURE__ */ jsx5("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" })
315
+ children: /* @__PURE__ */ jsx2("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" })
783
316
  }
784
317
  ),
785
- users: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
318
+ users: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs(
786
319
  "svg",
787
320
  {
788
321
  width: size,
@@ -794,463 +327,128 @@ var icons = {
794
327
  strokeLinecap: "round",
795
328
  strokeLinejoin: "round",
796
329
  children: [
797
- /* @__PURE__ */ jsx5("path", { d: "M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" }),
798
- /* @__PURE__ */ jsx5("circle", { cx: "9", cy: "7", r: "4" }),
799
- /* @__PURE__ */ jsx5("path", { d: "M23 21v-2a4 4 0 0 0-3-3.87" }),
800
- /* @__PURE__ */ jsx5("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })
330
+ /* @__PURE__ */ jsx2("path", { d: "M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" }),
331
+ /* @__PURE__ */ jsx2("circle", { cx: "9", cy: "7", r: "4" }),
332
+ /* @__PURE__ */ jsx2("path", { d: "M23 21v-2a4 4 0 0 0-3-3.87" }),
333
+ /* @__PURE__ */ jsx2("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })
801
334
  ]
802
335
  }
803
336
  )
804
337
  };
805
- function isThemeableValue4(value) {
338
+ function isThemeableValue(value) {
806
339
  return typeof value === "object" && value !== null && "useTheme" in value;
807
340
  }
808
- function Icon({
809
- name = "check",
810
- size = "md",
811
- color,
812
- align = "center",
813
- id
814
- }) {
815
- const { resolveColor: resolveColor2 } = useTheme();
816
- const resolvedColor = (() => {
817
- if (!color) return resolveColor2("primary");
818
- if (typeof color === "string") return { color, opacity: 100 };
819
- if (isThemeableValue4(color)) {
820
- return color.useTheme ? resolveColor2(color.themeKey) : color.value;
821
- }
822
- if ("color" in color) return color;
823
- return resolveColor2("primary");
824
- })();
825
- const IconComponent = icons[name.toLowerCase()] || icons.check;
826
- const { size: iconSize, strokeWidth } = sizeMap[size];
827
- const colorValue = hexToRgba(resolvedColor.color, resolvedColor.opacity);
828
- const wrapperStyle = {
341
+ function getWrapperStyle(align) {
342
+ return {
829
343
  display: "flex",
830
344
  justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
831
345
  };
832
- return /* @__PURE__ */ jsx5("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx5(
833
- IconComponent,
834
- {
835
- size: iconSize,
836
- color: colorValue,
837
- strokeWidth
838
- }
839
- ) });
840
346
  }
841
347
  var availableIcons = Object.keys(icons);
842
348
 
843
- // components/page/Section.tsx
844
- import { jsx as jsx6 } from "react/jsx-runtime";
845
- function isThemeableValue5(value) {
349
+ // components/page/TextBlock.tsx
350
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
351
+ var alignmentMap = {
352
+ left: "text-left",
353
+ center: "text-center",
354
+ right: "text-right"
355
+ };
356
+ var sizeMap2 = {
357
+ small: "text-2xl",
358
+ "medium-small": "text-3xl",
359
+ medium: "text-4xl",
360
+ large: "text-5xl",
361
+ xlarge: "text-6xl"
362
+ };
363
+ function isThemeableValue2(value) {
846
364
  return typeof value === "object" && value !== null && "useTheme" in value;
847
365
  }
848
- function resolveBackgroundColor(bg, resolveColor2) {
849
- if (!bg) return void 0;
850
- if (typeof bg === "string") return bg;
851
- if (isThemeableValue5(bg)) {
852
- if (bg.useTheme) {
853
- const themeColor = resolveColor2(bg.themeKey);
366
+ function isEntryBoundValue2(value) {
367
+ return typeof value === "object" && value !== null && "useEntry" in value;
368
+ }
369
+ function resolveColor(color, resolveThemeColor) {
370
+ if (!color) return "#000000";
371
+ if (typeof color === "string") return color;
372
+ if (isThemeableValue2(color)) {
373
+ if (color.useTheme) {
374
+ const themeColor = resolveThemeColor(color.themeKey);
854
375
  return hexToRgba(themeColor.color, themeColor.opacity);
855
376
  }
856
- return hexToRgba(bg.value.color, bg.value.opacity);
377
+ return hexToRgba(color.value.color, color.value.opacity);
857
378
  }
858
- if ("color" in bg && "opacity" in bg) {
859
- return hexToRgba(bg.color, bg.opacity);
379
+ if ("color" in color && "opacity" in color) {
380
+ return hexToRgba(color.color, color.opacity);
860
381
  }
861
- return void 0;
382
+ return "#000000";
862
383
  }
863
- function getVisibilityClasses(visibility) {
864
- if (!visibility) return "";
865
- if (!visibility.mobile && !visibility.desktop) {
866
- return "hidden";
867
- }
868
- if (!visibility.mobile && visibility.desktop) {
869
- return "hidden md:block";
384
+ function resolveColorHex(color, resolveThemeColor) {
385
+ if (!color) return "#000000";
386
+ if (typeof color === "string") return color;
387
+ if (isThemeableValue2(color)) {
388
+ if (color.useTheme) {
389
+ return resolveThemeColor(color.themeKey).color;
390
+ }
391
+ return color.value.color;
870
392
  }
871
- if (visibility.mobile && !visibility.desktop) {
872
- return "md:hidden";
393
+ if ("color" in color) {
394
+ return color.color;
873
395
  }
874
- return "";
396
+ return "#000000";
875
397
  }
876
- function Section({
877
- children: _children,
878
- verticalPadding = 48,
879
- horizontalPadding = 32,
880
- gap = 24,
881
- backgroundColor,
882
- backgroundImage,
883
- shadow = "none",
884
- borderRadius = 0,
885
- contentMaxWidth = "1400px",
886
- anchorLink,
887
- visibility,
888
- puck
398
+ function TextBlock({
399
+ title,
400
+ subtitle,
401
+ body,
402
+ alignment = "left",
403
+ textSize = "medium",
404
+ textColor,
405
+ subtitleBodyColor,
406
+ useGradientText = false,
407
+ gradientColor1,
408
+ gradientColor2,
409
+ anchorLink
889
410
  }) {
890
- const { resolveColor: resolveColor2 } = useTheme();
891
- const DropZone = puck?.renderDropZone;
892
- return /* @__PURE__ */ jsx6(
893
- "section",
894
- {
895
- id: anchorLink,
896
- className: cn("flex w-full flex-col", getVisibilityClasses(visibility)),
897
- style: {
898
- padding: `${verticalPadding}px ${horizontalPadding}px`,
899
- gap: `${gap}px`,
900
- backgroundColor: resolveBackgroundColor(backgroundColor, resolveColor2),
901
- backgroundImage: backgroundImage ? `url(${backgroundImage})` : void 0,
902
- backgroundSize: "cover",
903
- backgroundPosition: "center",
904
- boxShadow: getShadowCSS(shadow),
905
- borderRadius: `${borderRadius}px`
906
- },
907
- children: /* @__PURE__ */ jsx6("div", { className: "mx-auto w-full", style: { maxWidth: contentMaxWidth }, children: DropZone && /* @__PURE__ */ jsx6(DropZone, { zone: "content" }) })
908
- }
909
- );
910
- }
911
-
912
- // components/page/Container.tsx
913
- import { jsx as jsx7 } from "react/jsx-runtime";
914
- var maxWidthMap2 = {
915
- sm: "640px",
916
- md: "768px",
917
- lg: "1024px",
918
- xl: "1280px",
919
- "2xl": "1536px",
920
- full: "100%"
921
- };
922
- var paddingMap = {
923
- none: "0",
924
- sm: "16px",
925
- md: "24px",
926
- lg: "32px",
927
- xl: "48px"
928
- };
929
- function isThemeableValue6(value) {
930
- return typeof value === "object" && value !== null && "useTheme" in value;
931
- }
932
- function Container({
933
- maxWidth = "lg",
934
- padding,
935
- paddingX = "md",
936
- paddingY = "none",
937
- backgroundColor,
938
- centered = true,
939
- id,
940
- puck
941
- }) {
942
- const { resolveColor: resolveColor2 } = useTheme();
943
- const DropZone = puck?.renderDropZone;
944
- const resolvedBgColor = (() => {
945
- if (!backgroundColor) return null;
946
- if (typeof backgroundColor === "string")
947
- return { color: backgroundColor, opacity: 100 };
948
- if (isThemeableValue6(backgroundColor)) {
949
- return backgroundColor.useTheme ? resolveColor2(backgroundColor.themeKey) : backgroundColor.value;
950
- }
951
- if ("color" in backgroundColor) return backgroundColor;
952
- return null;
953
- })();
954
- const effectivePaddingX = padding || paddingX;
955
- const effectivePaddingY = padding || paddingY;
956
- const style = {
957
- maxWidth: maxWidthMap2[maxWidth],
958
- marginLeft: centered ? "auto" : void 0,
959
- marginRight: centered ? "auto" : void 0,
960
- paddingLeft: paddingMap[effectivePaddingX],
961
- paddingRight: paddingMap[effectivePaddingX],
962
- paddingTop: paddingMap[effectivePaddingY],
963
- paddingBottom: paddingMap[effectivePaddingY],
964
- backgroundColor: resolvedBgColor ? hexToRgba(resolvedBgColor.color, resolvedBgColor.opacity) : void 0,
965
- width: "100%"
966
- };
967
- return /* @__PURE__ */ jsx7("div", { id, style, children: DropZone && /* @__PURE__ */ jsx7(DropZone, { zone: "container-content" }) });
968
- }
969
-
970
- // components/page/Columns.tsx
971
- import { jsx as jsx8 } from "react/jsx-runtime";
972
- var gapMap = {
973
- none: "0",
974
- sm: "16px",
975
- md: "24px",
976
- lg: "32px",
977
- xl: "48px"
978
- };
979
- var alignMap = {
980
- top: "flex-start",
981
- center: "center",
982
- bottom: "flex-end",
983
- stretch: "stretch"
984
- };
985
- function Columns({
986
- columns = 2,
987
- gap = "md",
988
- verticalAlign = "top",
989
- stackOnMobile = true,
990
- id,
991
- puck
992
- }) {
993
- const DropZone = puck?.renderDropZone;
994
- const containerStyle = {
995
- display: "grid",
996
- gridTemplateColumns: `repeat(${columns}, 1fr)`,
997
- gap: gapMap[gap],
998
- alignItems: alignMap[verticalAlign]
999
- };
1000
- return /* @__PURE__ */ jsx8("div", { id, style: containerStyle, children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx8("div", { style: { minWidth: 0 }, children: DropZone && /* @__PURE__ */ jsx8(DropZone, { zone: `column-${index}` }) }, index)) });
1001
- }
1002
-
1003
- // components/page/Card.tsx
1004
- import { jsx as jsx9 } from "react/jsx-runtime";
1005
- var borderWidthMap = {
1006
- none: "0",
1007
- thin: "1px",
1008
- medium: "2px",
1009
- thick: "4px"
1010
- };
1011
- var radiusMap5 = {
1012
- none: "0",
1013
- sm: "4px",
1014
- md: "8px",
1015
- lg: "16px",
1016
- xl: "24px"
1017
- };
1018
- var shadowMap2 = {
1019
- none: "none",
1020
- sm: "0 1px 2px rgba(0,0,0,0.05)",
1021
- md: "0 4px 6px rgba(0,0,0,0.1)",
1022
- lg: "0 10px 15px rgba(0,0,0,0.1)",
1023
- xl: "0 20px 25px rgba(0,0,0,0.15)"
1024
- };
1025
- var paddingMap2 = {
1026
- none: "0",
1027
- sm: "16px",
1028
- md: "24px",
1029
- lg: "32px",
1030
- xl: "48px"
1031
- };
1032
- function isThemeableValue7(value) {
1033
- return typeof value === "object" && value !== null && "useTheme" in value;
1034
- }
1035
- function Card({
1036
- backgroundColor,
1037
- borderColor,
1038
- borderWidth = "thin",
1039
- borderRadius = "md",
1040
- shadow = "sm",
1041
- padding = "md",
1042
- id,
1043
- puck
1044
- }) {
1045
- const { resolveColor: resolveColor2 } = useTheme();
1046
- const DropZone = puck?.renderDropZone;
1047
- const resolvedBgColor = (() => {
1048
- if (!backgroundColor) return resolveColor2("background");
1049
- if (typeof backgroundColor === "string")
1050
- return { color: backgroundColor, opacity: 100 };
1051
- if (isThemeableValue7(backgroundColor)) {
1052
- return backgroundColor.useTheme ? resolveColor2(backgroundColor.themeKey) : backgroundColor.value;
1053
- }
1054
- if ("color" in backgroundColor) return backgroundColor;
1055
- return resolveColor2("background");
1056
- })();
1057
- const resolvedBorderColor = (() => {
1058
- if (!borderColor) return resolveColor2("muted");
1059
- if (typeof borderColor === "string")
1060
- return { color: borderColor, opacity: 100 };
1061
- if (isThemeableValue7(borderColor)) {
1062
- return borderColor.useTheme ? resolveColor2(borderColor.themeKey) : borderColor.value;
1063
- }
1064
- if ("color" in borderColor) return borderColor;
1065
- return resolveColor2("muted");
1066
- })();
1067
- const style = {
1068
- backgroundColor: hexToRgba(resolvedBgColor.color, resolvedBgColor.opacity),
1069
- border: borderWidth !== "none" ? `${borderWidthMap[borderWidth]} solid ${hexToRgba(resolvedBorderColor.color, resolvedBorderColor.opacity)}` : "none",
1070
- borderRadius: radiusMap5[borderRadius],
1071
- boxShadow: shadowMap2[shadow],
1072
- padding: paddingMap2[padding]
1073
- };
1074
- return /* @__PURE__ */ jsx9("div", { id, style, children: DropZone && /* @__PURE__ */ jsx9(DropZone, { zone: "card-content" }) });
1075
- }
1076
-
1077
- // components/page/Divider.tsx
1078
- import { jsx as jsx10 } from "react/jsx-runtime";
1079
- var thicknessMap = {
1080
- thin: "1px",
1081
- medium: "2px",
1082
- thick: "4px"
1083
- };
1084
- var widthMap2 = {
1085
- full: "100%",
1086
- "3/4": "75%",
1087
- "1/2": "50%",
1088
- "1/4": "25%"
1089
- };
1090
- var spacingMap = {
1091
- sm: "16px",
1092
- md: "24px",
1093
- lg: "32px",
1094
- xl: "48px"
1095
- };
1096
- function isThemeableValue8(value) {
1097
- return typeof value === "object" && value !== null && "useTheme" in value;
1098
- }
1099
- function Divider({
1100
- style: lineStyle = "solid",
1101
- thickness = "thin",
1102
- color,
1103
- width = "full",
1104
- align = "center",
1105
- spacing = "md",
1106
- id
1107
- }) {
1108
- const { resolveColor: resolveColor2 } = useTheme();
1109
- const resolvedColor = (() => {
1110
- if (!color) return resolveColor2("muted");
1111
- if (typeof color === "string") return { color, opacity: 100 };
1112
- if (isThemeableValue8(color)) {
1113
- return color.useTheme ? resolveColor2(color.themeKey) : color.value;
1114
- }
1115
- if ("color" in color) return color;
1116
- return resolveColor2("muted");
1117
- })();
1118
- const wrapperStyle = {
1119
- display: "flex",
1120
- justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center",
1121
- padding: `${spacingMap[spacing]} 0`
1122
- };
1123
- const hrStyle = {
1124
- width: widthMap2[width],
1125
- border: "none",
1126
- borderTop: `${thicknessMap[thickness]} ${lineStyle} ${hexToRgba(resolvedColor.color, resolvedColor.opacity)}`,
1127
- margin: 0
1128
- };
1129
- return /* @__PURE__ */ jsx10("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx10("hr", { style: hrStyle }) });
1130
- }
1131
-
1132
- // components/page/Spacer.tsx
1133
- import { jsx as jsx11 } from "react/jsx-runtime";
1134
- var sizeMap2 = {
1135
- xs: "8px",
1136
- sm: "16px",
1137
- md: "24px",
1138
- lg: "32px",
1139
- xl: "48px",
1140
- "2xl": "64px",
1141
- "3xl": "96px"
1142
- };
1143
- function Spacer({ size = "md", id }) {
1144
- const style = {
1145
- height: sizeMap2[size],
1146
- width: "100%"
1147
- };
1148
- return /* @__PURE__ */ jsx11("div", { id, style, "aria-hidden": "true" });
1149
- }
1150
-
1151
- // components/page/TextBlock.tsx
1152
- import { jsx as jsx12, jsxs as jsxs4 } from "react/jsx-runtime";
1153
- var alignmentMap = {
1154
- left: "text-left",
1155
- center: "text-center",
1156
- right: "text-right"
1157
- };
1158
- var sizeMap3 = {
1159
- small: "text-2xl",
1160
- "medium-small": "text-3xl",
1161
- medium: "text-4xl",
1162
- large: "text-5xl",
1163
- xlarge: "text-6xl"
1164
- };
1165
- function isThemeableValue9(value) {
1166
- return typeof value === "object" && value !== null && "useTheme" in value;
1167
- }
1168
- function isEntryBoundValue4(value) {
1169
- return typeof value === "object" && value !== null && "useEntry" in value;
1170
- }
1171
- function resolveColor(color, resolveThemeColor) {
1172
- if (!color) return "#000000";
1173
- if (typeof color === "string") return color;
1174
- if (isThemeableValue9(color)) {
1175
- if (color.useTheme) {
1176
- const themeColor = resolveThemeColor(color.themeKey);
1177
- return hexToRgba(themeColor.color, themeColor.opacity);
1178
- }
1179
- return hexToRgba(color.value.color, color.value.opacity);
1180
- }
1181
- if ("color" in color && "opacity" in color) {
1182
- return hexToRgba(color.color, color.opacity);
1183
- }
1184
- return "#000000";
1185
- }
1186
- function resolveColorHex(color, resolveThemeColor) {
1187
- if (!color) return "#000000";
1188
- if (typeof color === "string") return color;
1189
- if (isThemeableValue9(color)) {
1190
- if (color.useTheme) {
1191
- return resolveThemeColor(color.themeKey).color;
1192
- }
1193
- return color.value.color;
1194
- }
1195
- if ("color" in color) {
1196
- return color.color;
1197
- }
1198
- return "#000000";
1199
- }
1200
- function TextBlock({
1201
- title,
1202
- subtitle,
1203
- body,
1204
- alignment = "left",
1205
- textSize = "medium",
1206
- textColor,
1207
- subtitleBodyColor,
1208
- useGradientText = false,
1209
- gradientColor1,
1210
- gradientColor2,
1211
- anchorLink
1212
- }) {
1213
- const { resolveColor: resolveThemeColor } = useTheme();
1214
- const { getEntryValue } = useEntries();
1215
- const resolveText = (value) => {
1216
- if (!value) return void 0;
1217
- if (typeof value === "string") return value;
1218
- if (isEntryBoundValue4(value)) {
1219
- if (value.useEntry) {
1220
- const entryVal = getEntryValue(value.entryName, value.fieldKey);
1221
- return entryVal != null ? String(entryVal) : void 0;
1222
- }
1223
- return value.value;
1224
- }
1225
- return void 0;
1226
- };
1227
- const resolvedTitle = resolveText(title);
1228
- const resolvedSubtitle = resolveText(subtitle);
1229
- const resolvedBody = resolveText(body);
1230
- const titleColorValue = resolveColor(textColor, resolveThemeColor);
1231
- const subtitleColorValue = resolveColor(subtitleBodyColor, resolveThemeColor);
1232
- const gradientStyle = useGradientText ? {
1233
- backgroundImage: `linear-gradient(90deg, ${resolveColorHex(gradientColor1, resolveThemeColor)}, ${resolveColorHex(gradientColor2, resolveThemeColor)})`,
1234
- WebkitBackgroundClip: "text",
1235
- WebkitTextFillColor: "transparent",
1236
- backgroundClip: "text"
1237
- } : { color: titleColorValue };
1238
- return /* @__PURE__ */ jsxs4(
1239
- "div",
411
+ const { resolveColor: resolveThemeColor } = useTheme();
412
+ const { getEntryValue } = useEntries();
413
+ const resolveText = (value) => {
414
+ if (!value) return void 0;
415
+ if (typeof value === "string") return value;
416
+ if (isEntryBoundValue2(value)) {
417
+ if (value.useEntry) {
418
+ const entryVal = getEntryValue(value.entryName, value.fieldKey);
419
+ return entryVal != null ? String(entryVal) : void 0;
420
+ }
421
+ return value.value;
422
+ }
423
+ return void 0;
424
+ };
425
+ const resolvedTitle = resolveText(title);
426
+ const resolvedSubtitle = resolveText(subtitle);
427
+ const resolvedBody = resolveText(body);
428
+ const titleColorValue = resolveColor(textColor, resolveThemeColor);
429
+ const subtitleColorValue = resolveColor(subtitleBodyColor, resolveThemeColor);
430
+ const gradientStyle = useGradientText ? {
431
+ backgroundImage: `linear-gradient(90deg, ${resolveColorHex(gradientColor1, resolveThemeColor)}, ${resolveColorHex(gradientColor2, resolveThemeColor)})`,
432
+ WebkitBackgroundClip: "text",
433
+ WebkitTextFillColor: "transparent",
434
+ backgroundClip: "text"
435
+ } : { color: titleColorValue };
436
+ return /* @__PURE__ */ jsxs2(
437
+ "div",
1240
438
  {
1241
439
  id: anchorLink,
1242
440
  className: cn("flex flex-col gap-4", alignmentMap[alignment]),
1243
441
  children: [
1244
- resolvedTitle && /* @__PURE__ */ jsx12(
442
+ resolvedTitle && /* @__PURE__ */ jsx3(
1245
443
  "h2",
1246
444
  {
1247
- className: cn("font-bold", sizeMap3[textSize]),
445
+ className: cn("font-bold", sizeMap2[textSize]),
1248
446
  style: gradientStyle,
1249
447
  children: resolvedTitle
1250
448
  }
1251
449
  ),
1252
- resolvedSubtitle && /* @__PURE__ */ jsx12("p", { className: "text-xl", style: { color: subtitleColorValue }, children: resolvedSubtitle }),
1253
- resolvedBody && /* @__PURE__ */ jsx12(
450
+ resolvedSubtitle && /* @__PURE__ */ jsx3("p", { className: "text-xl", style: { color: subtitleColorValue }, children: resolvedSubtitle }),
451
+ resolvedBody && /* @__PURE__ */ jsx3(
1254
452
  "div",
1255
453
  {
1256
454
  className: "prose max-w-none",
@@ -1264,7 +462,7 @@ function TextBlock({
1264
462
  }
1265
463
 
1266
464
  // components/page/CustomImage.tsx
1267
- import { jsx as jsx13 } from "react/jsx-runtime";
465
+ import { jsx as jsx4 } from "react/jsx-runtime";
1268
466
  var alignmentMap2 = {
1269
467
  left: "mr-auto",
1270
468
  center: "mx-auto",
@@ -1278,9 +476,9 @@ function CustomImage({
1278
476
  fitContent = false
1279
477
  }) {
1280
478
  if (!image) {
1281
- return /* @__PURE__ */ jsx13("div", { className: "flex h-48 w-full items-center justify-center bg-gray-200 text-gray-400", children: "No image" });
479
+ return /* @__PURE__ */ jsx4("div", { className: "flex h-48 w-full items-center justify-center bg-gray-200 text-gray-400", children: "No image" });
1282
480
  }
1283
- return /* @__PURE__ */ jsx13(
481
+ return /* @__PURE__ */ jsx4(
1284
482
  "img",
1285
483
  {
1286
484
  src: image,
@@ -1297,8 +495,8 @@ function CustomImage({
1297
495
 
1298
496
  // components/page/FeaturesList.tsx
1299
497
  import { icons as icons2 } from "lucide-react";
1300
- import { jsx as jsx14, jsxs as jsxs5 } from "react/jsx-runtime";
1301
- var sizeMap4 = {
498
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
499
+ var sizeMap3 = {
1302
500
  small: { icon: 24, title: "text-base", desc: "text-sm" },
1303
501
  medium: { icon: 32, title: "text-lg", desc: "text-base" },
1304
502
  large: { icon: 48, title: "text-xl", desc: "text-lg" }
@@ -1310,12 +508,12 @@ function FeaturesList({
1310
508
  iconColor = "#000000",
1311
509
  anchorLink
1312
510
  }) {
1313
- const sizeConfig = sizeMap4[size];
511
+ const sizeConfig = sizeMap3[size];
1314
512
  const getIcon = (iconName) => {
1315
513
  const formatted = iconName.charAt(0).toUpperCase() + iconName.slice(1);
1316
514
  return icons2[formatted] || null;
1317
515
  };
1318
- return /* @__PURE__ */ jsx14(
516
+ return /* @__PURE__ */ jsx5(
1319
517
  "div",
1320
518
  {
1321
519
  id: anchorLink,
@@ -1326,7 +524,7 @@ function FeaturesList({
1326
524
  ),
1327
525
  children: features.map((feature, index) => {
1328
526
  const IconComponent = feature.icon ? getIcon(feature.icon) : null;
1329
- return /* @__PURE__ */ jsxs5(
527
+ return /* @__PURE__ */ jsxs3(
1330
528
  "div",
1331
529
  {
1332
530
  className: cn(
@@ -1335,7 +533,7 @@ function FeaturesList({
1335
533
  align === "right" && "flex-row-reverse"
1336
534
  ),
1337
535
  children: [
1338
- feature.image ? /* @__PURE__ */ jsx14(
536
+ feature.image ? /* @__PURE__ */ jsx5(
1339
537
  "img",
1340
538
  {
1341
539
  src: feature.image,
@@ -1343,7 +541,7 @@ function FeaturesList({
1343
541
  className: "object-contain",
1344
542
  style: { width: sizeConfig.icon, height: sizeConfig.icon }
1345
543
  }
1346
- ) : IconComponent ? /* @__PURE__ */ jsx14(
544
+ ) : IconComponent ? /* @__PURE__ */ jsx5(
1347
545
  IconComponent,
1348
546
  {
1349
547
  size: sizeConfig.icon,
@@ -1351,9 +549,9 @@ function FeaturesList({
1351
549
  className: "flex-shrink-0"
1352
550
  }
1353
551
  ) : null,
1354
- /* @__PURE__ */ jsxs5("div", { className: "flex flex-col gap-1", children: [
1355
- feature.title && /* @__PURE__ */ jsx14("h3", { className: cn("font-semibold", sizeConfig.title), children: feature.title }),
1356
- feature.description && /* @__PURE__ */ jsx14("p", { className: cn("text-gray-600", sizeConfig.desc), children: feature.description })
552
+ /* @__PURE__ */ jsxs3("div", { className: "flex flex-col gap-1", children: [
553
+ feature.title && /* @__PURE__ */ jsx5("h3", { className: cn("font-semibold", sizeConfig.title), children: feature.title }),
554
+ feature.description && /* @__PURE__ */ jsx5("p", { className: cn("text-gray-600", sizeConfig.desc), children: feature.description })
1357
555
  ] })
1358
556
  ]
1359
557
  },
@@ -1366,8 +564,8 @@ function FeaturesList({
1366
564
 
1367
565
  // components/page/FeatureGrid.tsx
1368
566
  import { icons as icons3 } from "lucide-react";
1369
- import { jsx as jsx15, jsxs as jsxs6 } from "react/jsx-runtime";
1370
- var sizeMap5 = {
567
+ import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
568
+ var sizeMap4 = {
1371
569
  small: { icon: 24, title: "text-base", desc: "text-sm" },
1372
570
  medium: { icon: 32, title: "text-lg", desc: "text-base" },
1373
571
  large: { icon: 48, title: "text-xl", desc: "text-lg" }
@@ -1383,7 +581,7 @@ function FeatureGrid({
1383
581
  textColor = "#000000",
1384
582
  anchorLink
1385
583
  }) {
1386
- const sizeConfig = sizeMap5[size];
584
+ const sizeConfig = sizeMap4[size];
1387
585
  const getIcon = (iconName) => {
1388
586
  const formatted = iconName.charAt(0).toUpperCase() + iconName.slice(1);
1389
587
  return icons3[formatted] || null;
@@ -1393,8 +591,8 @@ function FeatureGrid({
1393
591
  3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3",
1394
592
  4: "grid-cols-1 md:grid-cols-2 lg:grid-cols-4"
1395
593
  };
1396
- return /* @__PURE__ */ jsxs6("div", { id: anchorLink, className: "flex flex-col gap-8", children: [
1397
- (heading || description) && /* @__PURE__ */ jsxs6(
594
+ return /* @__PURE__ */ jsxs4("div", { id: anchorLink, className: "flex flex-col gap-8", children: [
595
+ (heading || description) && /* @__PURE__ */ jsxs4(
1398
596
  "div",
1399
597
  {
1400
598
  className: cn(
@@ -1403,14 +601,14 @@ function FeatureGrid({
1403
601
  align === "right" && "text-right"
1404
602
  ),
1405
603
  children: [
1406
- heading && /* @__PURE__ */ jsx15("h2", { className: "text-3xl font-bold", style: { color: textColor }, children: heading }),
1407
- description && /* @__PURE__ */ jsx15("p", { className: "text-gray-600", children: description })
604
+ heading && /* @__PURE__ */ jsx6("h2", { className: "text-3xl font-bold", style: { color: textColor }, children: heading }),
605
+ description && /* @__PURE__ */ jsx6("p", { className: "text-gray-600", children: description })
1408
606
  ]
1409
607
  }
1410
608
  ),
1411
- /* @__PURE__ */ jsx15("div", { className: cn("grid gap-6", columnClass[columns]), children: features.map((feature, index) => {
609
+ /* @__PURE__ */ jsx6("div", { className: cn("grid gap-6", columnClass[columns]), children: features.map((feature, index) => {
1412
610
  const IconComponent = feature.icon ? getIcon(feature.icon) : null;
1413
- return /* @__PURE__ */ jsxs6(
611
+ return /* @__PURE__ */ jsxs4(
1414
612
  "div",
1415
613
  {
1416
614
  className: cn(
@@ -1418,7 +616,7 @@ function FeatureGrid({
1418
616
  align === "center" && "items-center text-center"
1419
617
  ),
1420
618
  children: [
1421
- feature.image ? /* @__PURE__ */ jsx15(
619
+ feature.image ? /* @__PURE__ */ jsx6(
1422
620
  "img",
1423
621
  {
1424
622
  src: feature.image,
@@ -1426,14 +624,14 @@ function FeatureGrid({
1426
624
  className: "object-contain",
1427
625
  style: { width: sizeConfig.icon, height: sizeConfig.icon }
1428
626
  }
1429
- ) : IconComponent ? /* @__PURE__ */ jsx15(
627
+ ) : IconComponent ? /* @__PURE__ */ jsx6(
1430
628
  IconComponent,
1431
629
  {
1432
630
  size: sizeConfig.icon,
1433
631
  style: { color: iconColor }
1434
632
  }
1435
633
  ) : null,
1436
- feature.title && /* @__PURE__ */ jsx15(
634
+ feature.title && /* @__PURE__ */ jsx6(
1437
635
  "h3",
1438
636
  {
1439
637
  className: cn("font-semibold", sizeConfig.title),
@@ -1441,7 +639,7 @@ function FeatureGrid({
1441
639
  children: feature.title
1442
640
  }
1443
641
  ),
1444
- feature.description && /* @__PURE__ */ jsx15("p", { className: cn("text-gray-600", sizeConfig.desc), children: feature.description })
642
+ feature.description && /* @__PURE__ */ jsx6("p", { className: cn("text-gray-600", sizeConfig.desc), children: feature.description })
1445
643
  ]
1446
644
  },
1447
645
  index
@@ -1452,7 +650,7 @@ function FeatureGrid({
1452
650
 
1453
651
  // components/page/Footer.tsx
1454
652
  import { Facebook, Instagram, Twitter } from "lucide-react";
1455
- import { jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
653
+ import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
1456
654
  function Footer({
1457
655
  logo,
1458
656
  copyright = "\xA9 2024 Company. All rights reserved.",
@@ -1487,15 +685,15 @@ function Footer({
1487
685
  ].filter(
1488
686
  (link) => !!link.url
1489
687
  );
1490
- return /* @__PURE__ */ jsx16(
688
+ return /* @__PURE__ */ jsx7(
1491
689
  "footer",
1492
690
  {
1493
691
  className: "w-full px-6 py-8",
1494
692
  style: { backgroundColor, color: textColor },
1495
- children: /* @__PURE__ */ jsxs7("div", { className: "mx-auto flex max-w-7xl flex-col items-center justify-between gap-6 md:flex-row", children: [
1496
- /* @__PURE__ */ jsx16("div", { className: "flex items-center gap-4", children: logo && /* @__PURE__ */ jsx16("img", { src: logo, alt: "Logo", className: "h-8" }) }),
1497
- DropZone && /* @__PURE__ */ jsx16(DropZone, { zone: "footer-content" }),
1498
- /* @__PURE__ */ jsx16("div", { className: "flex items-center gap-4", children: socialLinks.map(({ url, Icon: Icon3 }, index) => /* @__PURE__ */ jsx16(
693
+ children: /* @__PURE__ */ jsxs5("div", { className: "mx-auto flex max-w-7xl flex-col items-center justify-between gap-6 md:flex-row", children: [
694
+ /* @__PURE__ */ jsx7("div", { className: "flex items-center gap-4", children: logo && /* @__PURE__ */ jsx7("img", { src: logo, alt: "Logo", className: "h-8" }) }),
695
+ DropZone && /* @__PURE__ */ jsx7(DropZone, { zone: "footer-content" }),
696
+ /* @__PURE__ */ jsx7("div", { className: "flex items-center gap-4", children: socialLinks.map(({ url, Icon: Icon2 }, index) => /* @__PURE__ */ jsx7(
1499
697
  "a",
1500
698
  {
1501
699
  href: url,
@@ -1503,20 +701,20 @@ function Footer({
1503
701
  rel: "noopener noreferrer",
1504
702
  className: "transition-opacity hover:opacity-80",
1505
703
  onClick: () => handleSocialClick(url),
1506
- children: /* @__PURE__ */ jsx16(Icon3, { size: 24, style: { color: textColor } })
704
+ children: /* @__PURE__ */ jsx7(Icon2, { size: 24, style: { color: textColor } })
1507
705
  },
1508
706
  index
1509
707
  )) }),
1510
- copyright && /* @__PURE__ */ jsx16("p", { className: "text-sm opacity-80", children: copyright })
708
+ copyright && /* @__PURE__ */ jsx7("p", { className: "text-sm opacity-80", children: copyright })
1511
709
  ] })
1512
710
  }
1513
711
  );
1514
712
  }
1515
713
 
1516
714
  // components/page/Topbar.tsx
1517
- import { useState as useState2 } from "react";
715
+ import { useState } from "react";
1518
716
  import { Menu, X } from "lucide-react";
1519
- import { jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
717
+ import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
1520
718
  function Topbar({
1521
719
  logo,
1522
720
  logoUrl = "/",
@@ -1527,7 +725,7 @@ function Topbar({
1527
725
  puck
1528
726
  }) {
1529
727
  const DropZone = puck?.renderDropZone;
1530
- const [mobileMenuOpen, setMobileMenuOpen] = useState2(false);
728
+ const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
1531
729
  const utm = useUtmParams();
1532
730
  const sendEvent = useGtmEvent();
1533
731
  const handleNavClick = (item) => {
@@ -1549,7 +747,7 @@ function Topbar({
1549
747
  const renderLink = (item, index) => {
1550
748
  const className = "hover:opacity-80 transition-opacity";
1551
749
  if (item.linkType === "external") {
1552
- return /* @__PURE__ */ jsx17(
750
+ return /* @__PURE__ */ jsx8(
1553
751
  "a",
1554
752
  {
1555
753
  href: item.url,
@@ -1563,7 +761,7 @@ function Topbar({
1563
761
  );
1564
762
  }
1565
763
  if (item.linkType === "scrollTo") {
1566
- return /* @__PURE__ */ jsx17(
764
+ return /* @__PURE__ */ jsx8(
1567
765
  "a",
1568
766
  {
1569
767
  href: item.url,
@@ -1574,7 +772,7 @@ function Topbar({
1574
772
  index
1575
773
  );
1576
774
  }
1577
- return /* @__PURE__ */ jsx17(
775
+ return /* @__PURE__ */ jsx8(
1578
776
  "a",
1579
777
  {
1580
778
  href: item.url,
@@ -1585,19 +783,19 @@ function Topbar({
1585
783
  index
1586
784
  );
1587
785
  };
1588
- return /* @__PURE__ */ jsxs8(
786
+ return /* @__PURE__ */ jsxs6(
1589
787
  "nav",
1590
788
  {
1591
789
  className: "sticky top-0 z-50 w-full px-6 py-4",
1592
790
  style: { backgroundColor, color: textColor },
1593
791
  children: [
1594
- /* @__PURE__ */ jsxs8(
792
+ /* @__PURE__ */ jsxs6(
1595
793
  "div",
1596
794
  {
1597
795
  className: "mx-auto flex items-center justify-between",
1598
796
  style: { maxWidth },
1599
797
  children: [
1600
- /* @__PURE__ */ jsx17(
798
+ /* @__PURE__ */ jsx8(
1601
799
  "a",
1602
800
  {
1603
801
  href: logoUrl,
@@ -1608,25 +806,25 @@ function Topbar({
1608
806
  linkType: "internal",
1609
807
  ...utm
1610
808
  }),
1611
- children: logo ? /* @__PURE__ */ jsx17("img", { src: logo, alt: "Logo", className: "h-8" }) : /* @__PURE__ */ jsx17("span", { className: "text-xl font-bold", children: "Logo" })
809
+ children: logo ? /* @__PURE__ */ jsx8("img", { src: logo, alt: "Logo", className: "h-8" }) : /* @__PURE__ */ jsx8("span", { className: "text-xl font-bold", children: "Logo" })
1612
810
  }
1613
811
  ),
1614
- /* @__PURE__ */ jsxs8("div", { className: "hidden items-center gap-8 md:flex", children: [
812
+ /* @__PURE__ */ jsxs6("div", { className: "hidden items-center gap-8 md:flex", children: [
1615
813
  navItems.map(renderLink),
1616
- DropZone && /* @__PURE__ */ jsx17(DropZone, { zone: "cta" })
814
+ DropZone && /* @__PURE__ */ jsx8(DropZone, { zone: "cta" })
1617
815
  ] }),
1618
- /* @__PURE__ */ jsx17("button", { className: "md:hidden", onClick: handleMobileMenuToggle, children: mobileMenuOpen ? /* @__PURE__ */ jsx17(X, { size: 24 }) : /* @__PURE__ */ jsx17(Menu, { size: 24 }) })
816
+ /* @__PURE__ */ jsx8("button", { className: "md:hidden", onClick: handleMobileMenuToggle, children: mobileMenuOpen ? /* @__PURE__ */ jsx8(X, { size: 24 }) : /* @__PURE__ */ jsx8(Menu, { size: 24 }) })
1619
817
  ]
1620
818
  }
1621
819
  ),
1622
- mobileMenuOpen && /* @__PURE__ */ jsxs8(
820
+ mobileMenuOpen && /* @__PURE__ */ jsxs6(
1623
821
  "div",
1624
822
  {
1625
823
  className: "absolute top-full right-0 left-0 flex flex-col gap-4 px-6 py-4 md:hidden",
1626
824
  style: { backgroundColor },
1627
825
  children: [
1628
826
  navItems.map(renderLink),
1629
- DropZone && /* @__PURE__ */ jsx17(DropZone, { zone: "cta" })
827
+ DropZone && /* @__PURE__ */ jsx8(DropZone, { zone: "cta" })
1630
828
  ]
1631
829
  }
1632
830
  )
@@ -1636,21 +834,21 @@ function Topbar({
1636
834
  }
1637
835
 
1638
836
  // components/page/Popup.tsx
1639
- import { useState as useState3 } from "react";
837
+ import { useState as useState2 } from "react";
1640
838
  import { icons as icons4, X as X2 } from "lucide-react";
1641
- import { Fragment as Fragment2, jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
1642
- function Icon2({ name, ...props }) {
839
+ import { Fragment, jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
840
+ function Icon({ name, ...props }) {
1643
841
  const formatted = name.charAt(0).toUpperCase() + name.slice(1);
1644
842
  const IconComponent = icons4[formatted];
1645
843
  if (!IconComponent) return null;
1646
- return /* @__PURE__ */ jsx18(IconComponent, { ...props });
844
+ return /* @__PURE__ */ jsx9(IconComponent, { ...props });
1647
845
  }
1648
- var widthMap3 = {
846
+ var widthMap = {
1649
847
  small: "max-w-sm",
1650
848
  medium: "max-w-lg",
1651
849
  large: "max-w-2xl"
1652
850
  };
1653
- var sizeMap6 = {
851
+ var sizeMap5 = {
1654
852
  small: "px-3 py-1.5 text-sm",
1655
853
  medium: "px-4 py-2 text-base",
1656
854
  large: "px-6 py-3 text-lg"
@@ -1666,7 +864,7 @@ function Popup({
1666
864
  textLink = false,
1667
865
  puck
1668
866
  }) {
1669
- const [isOpen, setIsOpen] = useState3(false);
867
+ const [isOpen, setIsOpen] = useState2(false);
1670
868
  const utm = useUtmParams();
1671
869
  const sendEvent = useGtmEvent();
1672
870
  const handleOpen = () => {
@@ -1681,7 +879,7 @@ function Popup({
1681
879
  setIsOpen(false);
1682
880
  sendEvent("popup_close", { ctaText, ...utm });
1683
881
  };
1684
- const trigger = textLink ? /* @__PURE__ */ jsx18(
882
+ const trigger = textLink ? /* @__PURE__ */ jsx9(
1685
883
  "button",
1686
884
  {
1687
885
  onClick: handleOpen,
@@ -1689,47 +887,47 @@ function Popup({
1689
887
  style: { color: buttonColor },
1690
888
  children: ctaText
1691
889
  }
1692
- ) : /* @__PURE__ */ jsxs9(
890
+ ) : /* @__PURE__ */ jsxs7(
1693
891
  "button",
1694
892
  {
1695
893
  onClick: handleOpen,
1696
894
  className: cn(
1697
895
  "flex items-center gap-2 rounded-full font-medium",
1698
- sizeMap6[size]
896
+ sizeMap5[size]
1699
897
  ),
1700
898
  style: { backgroundColor: buttonColor, color: textColor },
1701
899
  children: [
1702
- icon && iconPosition === "left" && /* @__PURE__ */ jsx18(Icon2, { name: icon, size: 18 }),
900
+ icon && iconPosition === "left" && /* @__PURE__ */ jsx9(Icon, { name: icon, size: 18 }),
1703
901
  ctaText,
1704
- icon && iconPosition === "right" && /* @__PURE__ */ jsx18(Icon2, { name: icon, size: 18 })
902
+ icon && iconPosition === "right" && /* @__PURE__ */ jsx9(Icon, { name: icon, size: 18 })
1705
903
  ]
1706
904
  }
1707
905
  );
1708
- return /* @__PURE__ */ jsxs9(Fragment2, { children: [
906
+ return /* @__PURE__ */ jsxs7(Fragment, { children: [
1709
907
  trigger,
1710
- isOpen && /* @__PURE__ */ jsx18(
908
+ isOpen && /* @__PURE__ */ jsx9(
1711
909
  "div",
1712
910
  {
1713
911
  className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4",
1714
912
  onClick: handleClose,
1715
- children: /* @__PURE__ */ jsxs9(
913
+ children: /* @__PURE__ */ jsxs7(
1716
914
  "div",
1717
915
  {
1718
916
  className: cn(
1719
917
  "relative w-full rounded-lg bg-white p-6",
1720
- widthMap3[width]
918
+ widthMap[width]
1721
919
  ),
1722
920
  onClick: (e) => e.stopPropagation(),
1723
921
  children: [
1724
- /* @__PURE__ */ jsx18(
922
+ /* @__PURE__ */ jsx9(
1725
923
  "button",
1726
924
  {
1727
925
  onClick: handleClose,
1728
926
  className: "absolute top-4 right-4 text-gray-500 hover:text-gray-700",
1729
- children: /* @__PURE__ */ jsx18(X2, { size: 24 })
927
+ children: /* @__PURE__ */ jsx9(X2, { size: 24 })
1730
928
  }
1731
929
  ),
1732
- puck && /* @__PURE__ */ jsx18(puck.renderDropZone, { zone: "popup-content" })
930
+ puck && /* @__PURE__ */ jsx9(puck.renderDropZone, { zone: "popup-content" })
1733
931
  ]
1734
932
  }
1735
933
  )
@@ -1808,21 +1006,457 @@ function getParagraphStyle(props) {
1808
1006
  };
1809
1007
  }
1810
1008
 
1009
+ // components/page/primitives/Button.ts
1010
+ var sizeStyles = {
1011
+ sm: { padding: "8px 16px", fontSize: "0.875rem" },
1012
+ md: { padding: "12px 24px", fontSize: "1rem" },
1013
+ lg: { padding: "16px 32px", fontSize: "1.125rem" },
1014
+ xl: { padding: "20px 40px", fontSize: "1.25rem" }
1015
+ };
1016
+ var radiusMap2 = {
1017
+ none: "0",
1018
+ sm: "4px",
1019
+ md: "8px",
1020
+ lg: "16px",
1021
+ full: "9999px"
1022
+ };
1023
+ function isThemeableValue3(value) {
1024
+ return typeof value === "object" && value !== null && "useTheme" in value;
1025
+ }
1026
+ function isEntryBoundValue3(value) {
1027
+ return typeof value === "object" && value !== null && "useEntry" in value;
1028
+ }
1029
+ function getBaseStyle(size, borderRadius, fullWidth) {
1030
+ return {
1031
+ ...sizeStyles[size],
1032
+ borderRadius: radiusMap2[borderRadius],
1033
+ fontWeight: 600,
1034
+ cursor: "pointer",
1035
+ display: "inline-flex",
1036
+ alignItems: "center",
1037
+ justifyContent: "center",
1038
+ textDecoration: "none",
1039
+ transition: "opacity 0.2s, transform 0.2s",
1040
+ width: fullWidth ? "100%" : "auto",
1041
+ border: "none"
1042
+ };
1043
+ }
1044
+ function getVariantStyles(variant, bgColor, fgColor) {
1045
+ const variantStyles = {
1046
+ solid: {
1047
+ backgroundColor: bgColor,
1048
+ color: fgColor
1049
+ },
1050
+ outline: {
1051
+ backgroundColor: "transparent",
1052
+ color: bgColor,
1053
+ border: `2px solid ${bgColor}`
1054
+ },
1055
+ ghost: {
1056
+ backgroundColor: "transparent",
1057
+ color: bgColor
1058
+ },
1059
+ link: {
1060
+ backgroundColor: "transparent",
1061
+ color: bgColor,
1062
+ padding: "0",
1063
+ textDecoration: "underline"
1064
+ }
1065
+ };
1066
+ return variantStyles[variant] || variantStyles.solid;
1067
+ }
1068
+ function getWrapperStyle2(align) {
1069
+ return {
1070
+ display: "flex",
1071
+ justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
1072
+ };
1073
+ }
1074
+
1075
+ // components/page/primitives/Image.ts
1076
+ var widthMap2 = {
1077
+ auto: "auto",
1078
+ full: "100%",
1079
+ sm: "300px",
1080
+ md: "500px",
1081
+ lg: "700px",
1082
+ xl: "900px"
1083
+ };
1084
+ var aspectRatioMap2 = {
1085
+ auto: void 0,
1086
+ "1:1": "1 / 1",
1087
+ "4:3": "4 / 3",
1088
+ "16:9": "16 / 9",
1089
+ "21:9": "21 / 9"
1090
+ };
1091
+ var radiusMap3 = {
1092
+ none: "0",
1093
+ sm: "4px",
1094
+ md: "8px",
1095
+ lg: "16px",
1096
+ xl: "24px",
1097
+ full: "9999px"
1098
+ };
1099
+ var shadowMap = {
1100
+ none: "none",
1101
+ sm: "0 1px 2px rgba(0,0,0,0.05)",
1102
+ md: "0 4px 6px rgba(0,0,0,0.1)",
1103
+ lg: "0 10px 15px rgba(0,0,0,0.1)",
1104
+ xl: "0 20px 25px rgba(0,0,0,0.15)"
1105
+ };
1106
+ function isThemeableValue4(value) {
1107
+ return typeof value === "object" && value !== null && "useTheme" in value;
1108
+ }
1109
+ function isEntryBoundValue4(value) {
1110
+ return typeof value === "object" && value !== null && "useEntry" in value;
1111
+ }
1112
+ function getWrapperStyle3(align) {
1113
+ return {
1114
+ display: "flex",
1115
+ flexDirection: "column",
1116
+ alignItems: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center",
1117
+ gap: "8px"
1118
+ };
1119
+ }
1120
+ function getImageStyle(width, aspectRatio, objectFit, borderRadius, shadow) {
1121
+ return {
1122
+ width: widthMap2[width],
1123
+ maxWidth: "100%",
1124
+ aspectRatio: aspectRatioMap2[aspectRatio],
1125
+ objectFit,
1126
+ borderRadius: radiusMap3[borderRadius],
1127
+ boxShadow: shadowMap[shadow],
1128
+ display: "block"
1129
+ };
1130
+ }
1131
+ function getCaptionStyle(align, width, captionColor) {
1132
+ return {
1133
+ fontSize: "0.875rem",
1134
+ color: captionColor,
1135
+ textAlign: align,
1136
+ maxWidth: widthMap2[width]
1137
+ };
1138
+ }
1139
+
1140
+ // components/page/primitives/ImageCarousel.ts
1141
+ var aspectRatioMap3 = {
1142
+ "16:9": "16 / 9",
1143
+ "4:3": "4 / 3",
1144
+ "1:1": "1 / 1",
1145
+ "21:9": "21 / 9"
1146
+ };
1147
+ var radiusMap4 = {
1148
+ none: "0",
1149
+ sm: "4px",
1150
+ md: "8px",
1151
+ lg: "16px"
1152
+ };
1153
+ function isThemeableValue5(value) {
1154
+ return typeof value === "object" && value !== null && "useTheme" in value;
1155
+ }
1156
+ function getContainerStyle(aspectRatio, borderRadius) {
1157
+ return {
1158
+ position: "relative",
1159
+ aspectRatio: aspectRatioMap3[aspectRatio],
1160
+ borderRadius: radiusMap4[borderRadius],
1161
+ overflow: "hidden"
1162
+ };
1163
+ }
1164
+ function getSlideContainerStyle(currentIndex) {
1165
+ return {
1166
+ display: "flex",
1167
+ transition: "transform 0.3s ease-in-out",
1168
+ transform: `translateX(-${currentIndex * 100}%)`,
1169
+ height: "100%"
1170
+ };
1171
+ }
1172
+ var slideStyle = {
1173
+ minWidth: "100%",
1174
+ height: "100%"
1175
+ };
1176
+ var imageStyle = {
1177
+ width: "100%",
1178
+ height: "100%",
1179
+ objectFit: "cover"
1180
+ };
1181
+ function getArrowStyle(arrowColor) {
1182
+ return {
1183
+ position: "absolute",
1184
+ top: "50%",
1185
+ transform: "translateY(-50%)",
1186
+ backgroundColor: "rgba(0,0,0,0.5)",
1187
+ color: arrowColor,
1188
+ border: "none",
1189
+ borderRadius: "50%",
1190
+ width: "40px",
1191
+ height: "40px",
1192
+ cursor: "pointer",
1193
+ display: "flex",
1194
+ alignItems: "center",
1195
+ justifyContent: "center",
1196
+ fontSize: "20px",
1197
+ zIndex: 1
1198
+ };
1199
+ }
1200
+ var dotsContainerStyle = {
1201
+ position: "absolute",
1202
+ bottom: "16px",
1203
+ left: "50%",
1204
+ transform: "translateX(-50%)",
1205
+ display: "flex",
1206
+ gap: "8px",
1207
+ zIndex: 1
1208
+ };
1209
+ function getDotStyle(isActive, dotColor) {
1210
+ return {
1211
+ width: "10px",
1212
+ height: "10px",
1213
+ borderRadius: "50%",
1214
+ border: "none",
1215
+ cursor: "pointer",
1216
+ backgroundColor: isActive ? dotColor : "rgba(255,255,255,0.5)"
1217
+ };
1218
+ }
1219
+ function getEmptyState(aspectRatio, borderRadius) {
1220
+ return {
1221
+ aspectRatio: aspectRatioMap3[aspectRatio],
1222
+ backgroundColor: "#e5e7eb",
1223
+ borderRadius: radiusMap4[borderRadius],
1224
+ display: "flex",
1225
+ alignItems: "center",
1226
+ justifyContent: "center",
1227
+ color: "#9ca3af"
1228
+ };
1229
+ }
1230
+
1231
+ // components/page/primitives/Section.ts
1232
+ function isThemeableValue6(value) {
1233
+ return typeof value === "object" && value !== null && "useTheme" in value;
1234
+ }
1235
+ function resolveBackgroundColor(bg, resolveColor2) {
1236
+ if (!bg) return void 0;
1237
+ if (typeof bg === "string") return bg;
1238
+ if (isThemeableValue6(bg)) {
1239
+ if (bg.useTheme) {
1240
+ const themeColor = resolveColor2(bg.themeKey);
1241
+ return hexToRgba(themeColor.color, themeColor.opacity);
1242
+ }
1243
+ return hexToRgba(bg.value.color, bg.value.opacity);
1244
+ }
1245
+ if ("color" in bg && "opacity" in bg) {
1246
+ return hexToRgba(bg.color, bg.opacity);
1247
+ }
1248
+ return void 0;
1249
+ }
1250
+ function getVisibilityClasses(visibility) {
1251
+ if (!visibility) return "";
1252
+ if (!visibility.mobile && !visibility.desktop) {
1253
+ return "hidden";
1254
+ }
1255
+ if (!visibility.mobile && visibility.desktop) {
1256
+ return "hidden md:block";
1257
+ }
1258
+ if (visibility.mobile && !visibility.desktop) {
1259
+ return "md:hidden";
1260
+ }
1261
+ return "";
1262
+ }
1263
+ function getSectionStyle(verticalPadding, horizontalPadding, gap, backgroundColor, backgroundImage, shadow, borderRadius) {
1264
+ return {
1265
+ padding: `${verticalPadding}px ${horizontalPadding}px`,
1266
+ gap: `${gap}px`,
1267
+ backgroundColor,
1268
+ backgroundImage: backgroundImage ? `url(${backgroundImage})` : void 0,
1269
+ backgroundSize: "cover",
1270
+ backgroundPosition: "center",
1271
+ borderRadius: `${borderRadius}px`
1272
+ };
1273
+ }
1274
+
1275
+ // components/page/primitives/Container.ts
1276
+ var maxWidthMap2 = {
1277
+ sm: "640px",
1278
+ md: "768px",
1279
+ lg: "1024px",
1280
+ xl: "1280px",
1281
+ "2xl": "1536px",
1282
+ full: "100%"
1283
+ };
1284
+ var paddingMap = {
1285
+ none: "0",
1286
+ sm: "16px",
1287
+ md: "24px",
1288
+ lg: "32px",
1289
+ xl: "48px"
1290
+ };
1291
+ function isThemeableValue7(value) {
1292
+ return typeof value === "object" && value !== null && "useTheme" in value;
1293
+ }
1294
+ function getContainerStyle2(maxWidth, paddingX, paddingY, centered, backgroundColor) {
1295
+ return {
1296
+ maxWidth: maxWidthMap2[maxWidth],
1297
+ marginLeft: centered ? "auto" : void 0,
1298
+ marginRight: centered ? "auto" : void 0,
1299
+ paddingLeft: paddingMap[paddingX],
1300
+ paddingRight: paddingMap[paddingX],
1301
+ paddingTop: paddingMap[paddingY],
1302
+ paddingBottom: paddingMap[paddingY],
1303
+ backgroundColor,
1304
+ width: "100%"
1305
+ };
1306
+ }
1307
+
1308
+ // components/page/primitives/Columns.ts
1309
+ var gapMap = {
1310
+ none: "0",
1311
+ sm: "16px",
1312
+ md: "24px",
1313
+ lg: "32px",
1314
+ xl: "48px"
1315
+ };
1316
+ var alignMap = {
1317
+ top: "flex-start",
1318
+ center: "center",
1319
+ bottom: "flex-end",
1320
+ stretch: "stretch"
1321
+ };
1322
+ function getContainerStyle3(columns, gap, verticalAlign) {
1323
+ return {
1324
+ display: "grid",
1325
+ gridTemplateColumns: `repeat(${columns}, 1fr)`,
1326
+ gap: gapMap[gap],
1327
+ alignItems: alignMap[verticalAlign]
1328
+ };
1329
+ }
1330
+
1331
+ // components/page/primitives/Card.ts
1332
+ var borderWidthMap = {
1333
+ none: "0",
1334
+ thin: "1px",
1335
+ medium: "2px",
1336
+ thick: "4px"
1337
+ };
1338
+ var radiusMap5 = {
1339
+ none: "0",
1340
+ sm: "4px",
1341
+ md: "8px",
1342
+ lg: "16px",
1343
+ xl: "24px"
1344
+ };
1345
+ var shadowMap2 = {
1346
+ none: "none",
1347
+ sm: "0 1px 2px rgba(0,0,0,0.05)",
1348
+ md: "0 4px 6px rgba(0,0,0,0.1)",
1349
+ lg: "0 10px 15px rgba(0,0,0,0.1)",
1350
+ xl: "0 20px 25px rgba(0,0,0,0.15)"
1351
+ };
1352
+ var paddingMap2 = {
1353
+ none: "0",
1354
+ sm: "16px",
1355
+ md: "24px",
1356
+ lg: "32px",
1357
+ xl: "48px"
1358
+ };
1359
+ function isThemeableValue8(value) {
1360
+ return typeof value === "object" && value !== null && "useTheme" in value;
1361
+ }
1362
+ function getCardStyle(backgroundColor, borderColor, borderWidth, borderRadius, shadow, padding) {
1363
+ return {
1364
+ backgroundColor,
1365
+ border: borderWidth !== "none" ? `${borderWidthMap[borderWidth]} solid ${borderColor}` : "none",
1366
+ borderRadius: radiusMap5[borderRadius],
1367
+ boxShadow: shadowMap2[shadow],
1368
+ padding: paddingMap2[padding]
1369
+ };
1370
+ }
1371
+
1372
+ // components/page/primitives/Divider.ts
1373
+ var thicknessMap = {
1374
+ thin: "1px",
1375
+ medium: "2px",
1376
+ thick: "4px"
1377
+ };
1378
+ var widthMap3 = {
1379
+ full: "100%",
1380
+ "3/4": "75%",
1381
+ "1/2": "50%",
1382
+ "1/4": "25%"
1383
+ };
1384
+ var spacingMap = {
1385
+ sm: "16px",
1386
+ md: "24px",
1387
+ lg: "32px",
1388
+ xl: "48px"
1389
+ };
1390
+ function isThemeableValue9(value) {
1391
+ return typeof value === "object" && value !== null && "useTheme" in value;
1392
+ }
1393
+ function getWrapperStyle4(align, spacing) {
1394
+ return {
1395
+ display: "flex",
1396
+ justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center",
1397
+ padding: `${spacingMap[spacing]} 0`
1398
+ };
1399
+ }
1400
+ function getHrStyle(width, thickness, lineStyle, color) {
1401
+ return {
1402
+ width: widthMap3[width],
1403
+ border: "none",
1404
+ borderTop: `${thicknessMap[thickness]} ${lineStyle} ${color}`,
1405
+ margin: 0
1406
+ };
1407
+ }
1408
+
1409
+ // components/page/primitives/Spacer.ts
1410
+ var sizeMap6 = {
1411
+ xs: "8px",
1412
+ sm: "16px",
1413
+ md: "24px",
1414
+ lg: "32px",
1415
+ xl: "48px",
1416
+ "2xl": "64px",
1417
+ "3xl": "96px"
1418
+ };
1419
+
1811
1420
  export {
1812
1421
  getHeadingStyle,
1813
1422
  getParagraphStyle,
1814
- Button,
1815
- Image,
1816
- ImageCarousel,
1423
+ isThemeableValue3 as isThemeableValue,
1424
+ isEntryBoundValue3 as isEntryBoundValue,
1425
+ getBaseStyle,
1426
+ getVariantStyles,
1427
+ getWrapperStyle2 as getWrapperStyle,
1428
+ isThemeableValue4 as isThemeableValue2,
1429
+ isEntryBoundValue4 as isEntryBoundValue2,
1430
+ getWrapperStyle3 as getWrapperStyle2,
1431
+ getImageStyle,
1432
+ getCaptionStyle,
1433
+ isThemeableValue5 as isThemeableValue3,
1434
+ getContainerStyle,
1435
+ getSlideContainerStyle,
1436
+ slideStyle,
1437
+ imageStyle,
1438
+ getArrowStyle,
1439
+ dotsContainerStyle,
1440
+ getDotStyle,
1441
+ getEmptyState,
1817
1442
  VideoEmbed,
1818
- Icon,
1443
+ sizeMap,
1444
+ icons,
1445
+ isThemeableValue as isThemeableValue4,
1446
+ getWrapperStyle as getWrapperStyle3,
1819
1447
  availableIcons,
1820
- Section,
1821
- Container,
1822
- Columns,
1823
- Card,
1824
- Divider,
1825
- Spacer,
1448
+ resolveBackgroundColor,
1449
+ getVisibilityClasses,
1450
+ getSectionStyle,
1451
+ isThemeableValue7 as isThemeableValue5,
1452
+ getContainerStyle2,
1453
+ getContainerStyle3,
1454
+ isThemeableValue8 as isThemeableValue6,
1455
+ getCardStyle,
1456
+ isThemeableValue9 as isThemeableValue7,
1457
+ getWrapperStyle4,
1458
+ getHrStyle,
1459
+ sizeMap6 as sizeMap2,
1826
1460
  TextBlock,
1827
1461
  CustomImage,
1828
1462
  FeaturesList,