@mission-studio/puck 1.0.19 → 1.0.20

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.
@@ -3,120 +3,38 @@ import {
3
3
  useEntries,
4
4
  useTheme
5
5
  } from "./chunk-PJXZC564.mjs";
6
- import {
7
- useGtmEvent,
8
- useUtmParams
9
- } from "./chunk-QSWQDR6M.mjs";
10
6
  import {
11
7
  cn,
12
8
  hexToRgba
13
9
  } from "./chunk-C6V3YUPF.mjs";
10
+ import {
11
+ useGtmEvent,
12
+ useUtmParams
13
+ } from "./chunk-QSWQDR6M.mjs";
14
14
 
15
- // components/page/Heading.tsx
15
+ // components/page/Paragraph.tsx
16
16
  import { jsx } from "react/jsx-runtime";
17
17
  var sizeMap = {
18
- xs: "0.875rem",
19
- sm: "1rem",
20
- md: "1.25rem",
21
- lg: "1.5rem",
22
- xl: "2rem",
23
- "2xl": "2.5rem",
24
- "3xl": "3rem",
25
- "4xl": "4rem"
26
- };
27
- var weightMap = {
28
- normal: 400,
29
- medium: 500,
30
- semibold: 600,
31
- bold: 700,
32
- extrabold: 800
33
- };
34
- var letterSpacingMap = {
35
- tight: "-0.025em",
36
- normal: "0",
37
- wide: "0.05em"
38
- };
39
- var lineHeightMap = {
40
- tight: "1.1",
41
- normal: "1.4",
42
- relaxed: "1.6"
43
- };
44
- function isThemeableValue(value) {
45
- return typeof value === "object" && value !== null && "useTheme" in value;
46
- }
47
- function isEntryBoundValue(value) {
48
- return typeof value === "object" && value !== null && "useEntry" in value;
49
- }
50
- function Heading({
51
- text,
52
- level = "h2",
53
- size = "2xl",
54
- weight = "bold",
55
- color,
56
- align = "left",
57
- letterSpacing = "normal",
58
- lineHeight = "tight",
59
- id
60
- }) {
61
- const { resolveColor: resolveColor2 } = useTheme();
62
- const { getEntryValue } = useEntries();
63
- const resolvedText = (() => {
64
- if (!text) return "";
65
- if (typeof text === "string") return text;
66
- if (isEntryBoundValue(text)) {
67
- if (text.useEntry) {
68
- return String(getEntryValue(text.entryName, text.fieldKey) ?? "");
69
- }
70
- return text.value;
71
- }
72
- return "";
73
- })();
74
- const resolvedColor = (() => {
75
- if (!color) return resolveColor2("foreground");
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("foreground");
82
- })();
83
- const Tag = level;
84
- const style = {
85
- fontSize: sizeMap[size],
86
- fontWeight: weightMap[weight],
87
- color: hexToRgba(resolvedColor.color, resolvedColor.opacity),
88
- textAlign: align,
89
- letterSpacing: letterSpacingMap[letterSpacing],
90
- lineHeight: lineHeightMap[lineHeight],
91
- margin: 0
92
- };
93
- if (!resolvedText) return null;
94
- return /* @__PURE__ */ jsx(Tag, { id, style, children: resolvedText });
95
- }
96
-
97
- // components/page/Paragraph.tsx
98
- import { jsx as jsx2 } from "react/jsx-runtime";
99
- var sizeMap2 = {
100
18
  sm: "0.875rem",
101
19
  base: "1rem",
102
20
  lg: "1.125rem",
103
21
  xl: "1.25rem"
104
22
  };
105
- var weightMap2 = {
23
+ var weightMap = {
106
24
  normal: 400,
107
25
  medium: 500,
108
26
  semibold: 600
109
27
  };
110
- var lineHeightMap2 = {
28
+ var lineHeightMap = {
111
29
  tight: "1.4",
112
30
  normal: "1.6",
113
31
  relaxed: "1.75",
114
32
  loose: "2"
115
33
  };
116
- function isThemeableValue2(value) {
34
+ function isThemeableValue(value) {
117
35
  return typeof value === "object" && value !== null && "useTheme" in value;
118
36
  }
119
- function isEntryBoundValue2(value) {
37
+ function isEntryBoundValue(value) {
120
38
  return typeof value === "object" && value !== null && "useEntry" in value;
121
39
  }
122
40
  function Paragraph({
@@ -134,7 +52,7 @@ function Paragraph({
134
52
  const resolvedText = (() => {
135
53
  if (!text) return "";
136
54
  if (typeof text === "string") return text;
137
- if (isEntryBoundValue2(text)) {
55
+ if (isEntryBoundValue(text)) {
138
56
  if (text.useEntry) {
139
57
  return String(getEntryValue(text.entryName, text.fieldKey) ?? "");
140
58
  }
@@ -145,27 +63,27 @@ function Paragraph({
145
63
  const resolvedColor = (() => {
146
64
  if (!color) return resolveColor2("foreground");
147
65
  if (typeof color === "string") return { color, opacity: 100 };
148
- if (isThemeableValue2(color)) {
66
+ if (isThemeableValue(color)) {
149
67
  return color.useTheme ? resolveColor2(color.themeKey) : color.value;
150
68
  }
151
69
  if ("color" in color) return color;
152
70
  return resolveColor2("foreground");
153
71
  })();
154
72
  const style = {
155
- fontSize: sizeMap2[size],
156
- fontWeight: weightMap2[weight],
73
+ fontSize: sizeMap[size],
74
+ fontWeight: weightMap[weight],
157
75
  color: hexToRgba(resolvedColor.color, resolvedColor.opacity),
158
76
  textAlign: align,
159
- lineHeight: lineHeightMap2[lineHeight],
77
+ lineHeight: lineHeightMap[lineHeight],
160
78
  maxWidth: maxWidth || void 0,
161
79
  margin: 0
162
80
  };
163
81
  if (!resolvedText) return null;
164
- return /* @__PURE__ */ jsx2("p", { id, style, children: resolvedText });
82
+ return /* @__PURE__ */ jsx("p", { id, style, children: resolvedText });
165
83
  }
166
84
 
167
85
  // components/page/Button.tsx
168
- import { jsx as jsx3 } from "react/jsx-runtime";
86
+ import { jsx as jsx2 } from "react/jsx-runtime";
169
87
  var sizeStyles = {
170
88
  sm: { padding: "8px 16px", fontSize: "0.875rem" },
171
89
  md: { padding: "12px 24px", fontSize: "1rem" },
@@ -179,10 +97,10 @@ var radiusMap = {
179
97
  lg: "16px",
180
98
  full: "9999px"
181
99
  };
182
- function isThemeableValue3(value) {
100
+ function isThemeableValue2(value) {
183
101
  return typeof value === "object" && value !== null && "useTheme" in value;
184
102
  }
185
- function isEntryBoundValue3(value) {
103
+ function isEntryBoundValue2(value) {
186
104
  return typeof value === "object" && value !== null && "useEntry" in value;
187
105
  }
188
106
  function Button({
@@ -205,7 +123,7 @@ function Button({
205
123
  const resolvedText = (() => {
206
124
  if (!text) return "Button";
207
125
  if (typeof text === "string") return text;
208
- if (isEntryBoundValue3(text)) {
126
+ if (isEntryBoundValue2(text)) {
209
127
  if (text.useEntry) {
210
128
  return String(getEntryValue(text.entryName, text.fieldKey) ?? "Button");
211
129
  }
@@ -226,7 +144,7 @@ function Button({
226
144
  const resolvedColor = (() => {
227
145
  if (!color) return resolveColor2("primary");
228
146
  if (typeof color === "string") return { color, opacity: 100 };
229
- if (isThemeableValue3(color)) {
147
+ if (isThemeableValue2(color)) {
230
148
  return color.useTheme ? resolveColor2(color.themeKey) : color.value;
231
149
  }
232
150
  if ("color" in color) return color;
@@ -239,7 +157,7 @@ function Button({
239
157
  }
240
158
  if (typeof textColor === "string")
241
159
  return { color: textColor, opacity: 100 };
242
- if (isThemeableValue3(textColor)) {
160
+ if (isThemeableValue2(textColor)) {
243
161
  return textColor.useTheme ? resolveColor2(textColor.themeKey) : textColor.value;
244
162
  }
245
163
  if ("color" in textColor) return textColor;
@@ -286,9 +204,9 @@ function Button({
286
204
  display: "flex",
287
205
  justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
288
206
  };
289
- const content = /* @__PURE__ */ jsx3("span", { style, children: resolvedText });
207
+ const content = /* @__PURE__ */ jsx2("span", { style, children: resolvedText });
290
208
  if (href) {
291
- return /* @__PURE__ */ jsx3("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx3(
209
+ return /* @__PURE__ */ jsx2("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx2(
292
210
  "a",
293
211
  {
294
212
  id,
@@ -301,11 +219,11 @@ function Button({
301
219
  }
302
220
  ) });
303
221
  }
304
- return /* @__PURE__ */ jsx3("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx3("button", { id, type: "button", style, onClick: handleClick, children: resolvedText }) });
222
+ return /* @__PURE__ */ jsx2("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx2("button", { id, type: "button", style, onClick: handleClick, children: resolvedText }) });
305
223
  }
306
224
 
307
225
  // components/page/Image.tsx
308
- import { jsx as jsx4, jsxs } from "react/jsx-runtime";
226
+ import { jsx as jsx3, jsxs } from "react/jsx-runtime";
309
227
  var widthMap = {
310
228
  auto: "auto",
311
229
  full: "100%",
@@ -336,10 +254,10 @@ var shadowMap = {
336
254
  lg: "0 10px 15px rgba(0,0,0,0.1)",
337
255
  xl: "0 20px 25px rgba(0,0,0,0.15)"
338
256
  };
339
- function isThemeableValue4(value) {
257
+ function isThemeableValue3(value) {
340
258
  return typeof value === "object" && value !== null && "useTheme" in value;
341
259
  }
342
- function isEntryBoundValue4(value) {
260
+ function isEntryBoundValue3(value) {
343
261
  return typeof value === "object" && value !== null && "useEntry" in value;
344
262
  }
345
263
  function Image({
@@ -360,7 +278,7 @@ function Image({
360
278
  const resolvedSrc = (() => {
361
279
  if (!src) return "";
362
280
  if (typeof src === "string") return src;
363
- if (isEntryBoundValue4(src)) {
281
+ if (isEntryBoundValue3(src)) {
364
282
  if (src.useEntry) {
365
283
  return String(getEntryValue(src.entryName, src.fieldKey) ?? "");
366
284
  }
@@ -371,7 +289,7 @@ function Image({
371
289
  const resolvedCaption = (() => {
372
290
  if (!caption) return "";
373
291
  if (typeof caption === "string") return caption;
374
- if (isEntryBoundValue4(caption)) {
292
+ if (isEntryBoundValue3(caption)) {
375
293
  if (caption.useEntry) {
376
294
  return String(getEntryValue(caption.entryName, caption.fieldKey) ?? "");
377
295
  }
@@ -383,7 +301,7 @@ function Image({
383
301
  if (!captionColor) return resolveColor2("muted");
384
302
  if (typeof captionColor === "string")
385
303
  return { color: captionColor, opacity: 100 };
386
- if (isThemeableValue4(captionColor)) {
304
+ if (isThemeableValue3(captionColor)) {
387
305
  return captionColor.useTheme ? resolveColor2(captionColor.themeKey) : captionColor.value;
388
306
  }
389
307
  if ("color" in captionColor) return captionColor;
@@ -411,7 +329,7 @@ function Image({
411
329
  maxWidth: widthMap[width]
412
330
  };
413
331
  if (!resolvedSrc) {
414
- return /* @__PURE__ */ jsx4("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx4(
332
+ return /* @__PURE__ */ jsx3("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx3(
415
333
  "div",
416
334
  {
417
335
  style: {
@@ -428,14 +346,14 @@ function Image({
428
346
  ) });
429
347
  }
430
348
  return /* @__PURE__ */ jsxs("figure", { id, style: { ...wrapperStyle, margin: 0 }, children: [
431
- /* @__PURE__ */ jsx4("img", { src: resolvedSrc, alt, style: imageStyle, loading: "lazy" }),
432
- resolvedCaption && /* @__PURE__ */ jsx4("figcaption", { style: captionStyle, children: resolvedCaption })
349
+ /* @__PURE__ */ jsx3("img", { src: resolvedSrc, alt, style: imageStyle, loading: "lazy" }),
350
+ resolvedCaption && /* @__PURE__ */ jsx3("figcaption", { style: captionStyle, children: resolvedCaption })
433
351
  ] });
434
352
  }
435
353
 
436
354
  // components/page/ImageCarousel.tsx
437
355
  import { useState } from "react";
438
- import { Fragment, jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
356
+ import { Fragment, jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
439
357
  var aspectRatioMap2 = {
440
358
  "16:9": "16 / 9",
441
359
  "4:3": "4 / 3",
@@ -448,7 +366,7 @@ var radiusMap3 = {
448
366
  md: "8px",
449
367
  lg: "16px"
450
368
  };
451
- function isThemeableValue5(value) {
369
+ function isThemeableValue4(value) {
452
370
  return typeof value === "object" && value !== null && "useTheme" in value;
453
371
  }
454
372
  function ImageCarousel({
@@ -469,7 +387,7 @@ function ImageCarousel({
469
387
  if (!arrowColor) return { color: "#FFFFFF", opacity: 100 };
470
388
  if (typeof arrowColor === "string")
471
389
  return { color: arrowColor, opacity: 100 };
472
- if (isThemeableValue5(arrowColor)) {
390
+ if (isThemeableValue4(arrowColor)) {
473
391
  return arrowColor.useTheme ? resolveColor2(arrowColor.themeKey) : arrowColor.value;
474
392
  }
475
393
  if ("color" in arrowColor) return arrowColor;
@@ -478,7 +396,7 @@ function ImageCarousel({
478
396
  const resolvedDotColor = (() => {
479
397
  if (!dotColor) return resolveColor2("primary");
480
398
  if (typeof dotColor === "string") return { color: dotColor, opacity: 100 };
481
- if (isThemeableValue5(dotColor)) {
399
+ if (isThemeableValue4(dotColor)) {
482
400
  return dotColor.useTheme ? resolveColor2(dotColor.themeKey) : dotColor.value;
483
401
  }
484
402
  if ("color" in dotColor) return dotColor;
@@ -514,7 +432,7 @@ function ImageCarousel({
514
432
  });
515
433
  };
516
434
  if (images.length === 0) {
517
- return /* @__PURE__ */ jsx5(
435
+ return /* @__PURE__ */ jsx4(
518
436
  "div",
519
437
  {
520
438
  style: {
@@ -586,7 +504,7 @@ function ImageCarousel({
586
504
  backgroundColor: isActive ? hexToRgba(resolvedDotColor.color, resolvedDotColor.opacity) : "rgba(255,255,255,0.5)"
587
505
  });
588
506
  return /* @__PURE__ */ jsxs2("div", { id, style: containerStyle, children: [
589
- /* @__PURE__ */ jsx5("div", { style: slideContainerStyle, children: images.map((image, index) => /* @__PURE__ */ jsx5("div", { style: slideStyle, children: /* @__PURE__ */ jsx5(
507
+ /* @__PURE__ */ jsx4("div", { style: slideContainerStyle, children: images.map((image, index) => /* @__PURE__ */ jsx4("div", { style: slideStyle, children: /* @__PURE__ */ jsx4(
590
508
  "img",
591
509
  {
592
510
  src: image.src,
@@ -596,7 +514,7 @@ function ImageCarousel({
596
514
  }
597
515
  ) }, index)) }),
598
516
  showArrows && images.length > 1 && /* @__PURE__ */ jsxs2(Fragment, { children: [
599
- /* @__PURE__ */ jsx5(
517
+ /* @__PURE__ */ jsx4(
600
518
  "button",
601
519
  {
602
520
  type: "button",
@@ -606,7 +524,7 @@ function ImageCarousel({
606
524
  children: "\u2039"
607
525
  }
608
526
  ),
609
- /* @__PURE__ */ jsx5(
527
+ /* @__PURE__ */ jsx4(
610
528
  "button",
611
529
  {
612
530
  type: "button",
@@ -617,7 +535,7 @@ function ImageCarousel({
617
535
  }
618
536
  )
619
537
  ] }),
620
- showDots && images.length > 1 && /* @__PURE__ */ jsx5("div", { style: dotsContainerStyle, children: images.map((_, index) => /* @__PURE__ */ jsx5(
538
+ showDots && images.length > 1 && /* @__PURE__ */ jsx4("div", { style: dotsContainerStyle, children: images.map((_, index) => /* @__PURE__ */ jsx4(
621
539
  "button",
622
540
  {
623
541
  type: "button",
@@ -631,7 +549,7 @@ function ImageCarousel({
631
549
  }
632
550
 
633
551
  // components/page/VideoEmbed.tsx
634
- import { jsx as jsx6 } from "react/jsx-runtime";
552
+ import { jsx as jsx5 } from "react/jsx-runtime";
635
553
  var aspectRatioMap3 = {
636
554
  "16:9": "56.25%",
637
555
  // 9/16 * 100
@@ -652,7 +570,7 @@ var maxWidthMap = {
652
570
  xl: "1000px",
653
571
  full: "100%"
654
572
  };
655
- function isEntryBoundValue5(value) {
573
+ function isEntryBoundValue4(value) {
656
574
  return typeof value === "object" && value !== null && "useEntry" in value;
657
575
  }
658
576
  function parseVideoUrl(url) {
@@ -689,7 +607,7 @@ function VideoEmbed({
689
607
  const resolvedUrl = (() => {
690
608
  if (!url) return "";
691
609
  if (typeof url === "string") return url;
692
- if (isEntryBoundValue5(url)) {
610
+ if (isEntryBoundValue4(url)) {
693
611
  if (url.useEntry) {
694
612
  return String(getEntryValue(url.entryName, url.fieldKey) ?? "");
695
613
  }
@@ -698,7 +616,7 @@ function VideoEmbed({
698
616
  return "";
699
617
  })();
700
618
  if (!resolvedUrl) {
701
- return /* @__PURE__ */ jsx6(
619
+ return /* @__PURE__ */ jsx5(
702
620
  "div",
703
621
  {
704
622
  style: {
@@ -743,7 +661,7 @@ function VideoEmbed({
743
661
  height: "100%",
744
662
  border: "none"
745
663
  };
746
- return /* @__PURE__ */ jsx6("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx6("div", { style: containerStyle, children: /* @__PURE__ */ jsx6(
664
+ return /* @__PURE__ */ jsx5("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx5("div", { style: containerStyle, children: /* @__PURE__ */ jsx5(
747
665
  "iframe",
748
666
  {
749
667
  src: finalUrl,
@@ -756,8 +674,8 @@ function VideoEmbed({
756
674
  }
757
675
 
758
676
  // components/page/Icon.tsx
759
- import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
760
- var sizeMap3 = {
677
+ import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
678
+ var sizeMap2 = {
761
679
  sm: { size: "16px", strokeWidth: 2 },
762
680
  md: { size: "24px", strokeWidth: 2 },
763
681
  lg: { size: "32px", strokeWidth: 1.5 },
@@ -765,7 +683,7 @@ var sizeMap3 = {
765
683
  "2xl": { size: "64px", strokeWidth: 1.5 }
766
684
  };
767
685
  var icons = {
768
- check: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx7(
686
+ check: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx6(
769
687
  "svg",
770
688
  {
771
689
  width: size,
@@ -776,7 +694,7 @@ var icons = {
776
694
  strokeWidth,
777
695
  strokeLinecap: "round",
778
696
  strokeLinejoin: "round",
779
- children: /* @__PURE__ */ jsx7("polyline", { points: "20 6 9 17 4 12" })
697
+ children: /* @__PURE__ */ jsx6("polyline", { points: "20 6 9 17 4 12" })
780
698
  }
781
699
  ),
782
700
  x: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
@@ -791,12 +709,12 @@ var icons = {
791
709
  strokeLinecap: "round",
792
710
  strokeLinejoin: "round",
793
711
  children: [
794
- /* @__PURE__ */ jsx7("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
795
- /* @__PURE__ */ jsx7("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
712
+ /* @__PURE__ */ jsx6("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
713
+ /* @__PURE__ */ jsx6("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
796
714
  ]
797
715
  }
798
716
  ),
799
- star: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx7(
717
+ star: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx6(
800
718
  "svg",
801
719
  {
802
720
  width: size,
@@ -807,10 +725,10 @@ var icons = {
807
725
  strokeWidth,
808
726
  strokeLinecap: "round",
809
727
  strokeLinejoin: "round",
810
- children: /* @__PURE__ */ jsx7("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" })
728
+ children: /* @__PURE__ */ jsx6("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" })
811
729
  }
812
730
  ),
813
- heart: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx7(
731
+ heart: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx6(
814
732
  "svg",
815
733
  {
816
734
  width: size,
@@ -821,7 +739,7 @@ var icons = {
821
739
  strokeWidth,
822
740
  strokeLinecap: "round",
823
741
  strokeLinejoin: "round",
824
- children: /* @__PURE__ */ jsx7("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" })
742
+ children: /* @__PURE__ */ jsx6("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" })
825
743
  }
826
744
  ),
827
745
  arrowRight: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
@@ -836,8 +754,8 @@ var icons = {
836
754
  strokeLinecap: "round",
837
755
  strokeLinejoin: "round",
838
756
  children: [
839
- /* @__PURE__ */ jsx7("line", { x1: "5", y1: "12", x2: "19", y2: "12" }),
840
- /* @__PURE__ */ jsx7("polyline", { points: "12 5 19 12 12 19" })
757
+ /* @__PURE__ */ jsx6("line", { x1: "5", y1: "12", x2: "19", y2: "12" }),
758
+ /* @__PURE__ */ jsx6("polyline", { points: "12 5 19 12 12 19" })
841
759
  ]
842
760
  }
843
761
  ),
@@ -853,8 +771,8 @@ var icons = {
853
771
  strokeLinecap: "round",
854
772
  strokeLinejoin: "round",
855
773
  children: [
856
- /* @__PURE__ */ jsx7("line", { x1: "19", y1: "12", x2: "5", y2: "12" }),
857
- /* @__PURE__ */ jsx7("polyline", { points: "12 19 5 12 12 5" })
774
+ /* @__PURE__ */ jsx6("line", { x1: "19", y1: "12", x2: "5", y2: "12" }),
775
+ /* @__PURE__ */ jsx6("polyline", { points: "12 19 5 12 12 5" })
858
776
  ]
859
777
  }
860
778
  ),
@@ -870,12 +788,12 @@ var icons = {
870
788
  strokeLinecap: "round",
871
789
  strokeLinejoin: "round",
872
790
  children: [
873
- /* @__PURE__ */ jsx7("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" }),
874
- /* @__PURE__ */ jsx7("polyline", { points: "22,6 12,13 2,6" })
791
+ /* @__PURE__ */ jsx6("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" }),
792
+ /* @__PURE__ */ jsx6("polyline", { points: "22,6 12,13 2,6" })
875
793
  ]
876
794
  }
877
795
  ),
878
- phone: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx7(
796
+ phone: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx6(
879
797
  "svg",
880
798
  {
881
799
  width: size,
@@ -886,7 +804,7 @@ var icons = {
886
804
  strokeWidth,
887
805
  strokeLinecap: "round",
888
806
  strokeLinejoin: "round",
889
- children: /* @__PURE__ */ jsx7("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" })
807
+ children: /* @__PURE__ */ jsx6("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" })
890
808
  }
891
809
  ),
892
810
  mapPin: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
@@ -901,12 +819,12 @@ var icons = {
901
819
  strokeLinecap: "round",
902
820
  strokeLinejoin: "round",
903
821
  children: [
904
- /* @__PURE__ */ jsx7("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" }),
905
- /* @__PURE__ */ jsx7("circle", { cx: "12", cy: "10", r: "3" })
822
+ /* @__PURE__ */ jsx6("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" }),
823
+ /* @__PURE__ */ jsx6("circle", { cx: "12", cy: "10", r: "3" })
906
824
  ]
907
825
  }
908
826
  ),
909
- zap: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx7(
827
+ zap: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx6(
910
828
  "svg",
911
829
  {
912
830
  width: size,
@@ -917,10 +835,10 @@ var icons = {
917
835
  strokeWidth,
918
836
  strokeLinecap: "round",
919
837
  strokeLinejoin: "round",
920
- children: /* @__PURE__ */ jsx7("polygon", { points: "13 2 3 14 12 14 11 22 21 10 12 10 13 2" })
838
+ children: /* @__PURE__ */ jsx6("polygon", { points: "13 2 3 14 12 14 11 22 21 10 12 10 13 2" })
921
839
  }
922
840
  ),
923
- shield: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx7(
841
+ shield: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx6(
924
842
  "svg",
925
843
  {
926
844
  width: size,
@@ -931,7 +849,7 @@ var icons = {
931
849
  strokeWidth,
932
850
  strokeLinecap: "round",
933
851
  strokeLinejoin: "round",
934
- children: /* @__PURE__ */ jsx7("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" })
852
+ children: /* @__PURE__ */ jsx6("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" })
935
853
  }
936
854
  ),
937
855
  users: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
@@ -946,15 +864,15 @@ var icons = {
946
864
  strokeLinecap: "round",
947
865
  strokeLinejoin: "round",
948
866
  children: [
949
- /* @__PURE__ */ jsx7("path", { d: "M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" }),
950
- /* @__PURE__ */ jsx7("circle", { cx: "9", cy: "7", r: "4" }),
951
- /* @__PURE__ */ jsx7("path", { d: "M23 21v-2a4 4 0 0 0-3-3.87" }),
952
- /* @__PURE__ */ jsx7("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })
867
+ /* @__PURE__ */ jsx6("path", { d: "M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" }),
868
+ /* @__PURE__ */ jsx6("circle", { cx: "9", cy: "7", r: "4" }),
869
+ /* @__PURE__ */ jsx6("path", { d: "M23 21v-2a4 4 0 0 0-3-3.87" }),
870
+ /* @__PURE__ */ jsx6("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })
953
871
  ]
954
872
  }
955
873
  )
956
874
  };
957
- function isThemeableValue6(value) {
875
+ function isThemeableValue5(value) {
958
876
  return typeof value === "object" && value !== null && "useTheme" in value;
959
877
  }
960
878
  function Icon({
@@ -968,20 +886,20 @@ function Icon({
968
886
  const resolvedColor = (() => {
969
887
  if (!color) return resolveColor2("primary");
970
888
  if (typeof color === "string") return { color, opacity: 100 };
971
- if (isThemeableValue6(color)) {
889
+ if (isThemeableValue5(color)) {
972
890
  return color.useTheme ? resolveColor2(color.themeKey) : color.value;
973
891
  }
974
892
  if ("color" in color) return color;
975
893
  return resolveColor2("primary");
976
894
  })();
977
895
  const IconComponent = icons[name.toLowerCase()] || icons.check;
978
- const { size: iconSize, strokeWidth } = sizeMap3[size];
896
+ const { size: iconSize, strokeWidth } = sizeMap2[size];
979
897
  const colorValue = hexToRgba(resolvedColor.color, resolvedColor.opacity);
980
898
  const wrapperStyle = {
981
899
  display: "flex",
982
900
  justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
983
901
  };
984
- return /* @__PURE__ */ jsx7("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx7(
902
+ return /* @__PURE__ */ jsx6("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx6(
985
903
  IconComponent,
986
904
  {
987
905
  size: iconSize,
@@ -993,14 +911,14 @@ function Icon({
993
911
  var availableIcons = Object.keys(icons);
994
912
 
995
913
  // components/page/Section.tsx
996
- import { jsx as jsx8 } from "react/jsx-runtime";
997
- function isThemeableValue7(value) {
914
+ import { jsx as jsx7 } from "react/jsx-runtime";
915
+ function isThemeableValue6(value) {
998
916
  return typeof value === "object" && value !== null && "useTheme" in value;
999
917
  }
1000
918
  function resolveBackgroundColor(bg, resolveColor2) {
1001
919
  if (!bg) return void 0;
1002
920
  if (typeof bg === "string") return bg;
1003
- if (isThemeableValue7(bg)) {
921
+ if (isThemeableValue6(bg)) {
1004
922
  if (bg.useTheme) {
1005
923
  const themeColor = resolveColor2(bg.themeKey);
1006
924
  return hexToRgba(themeColor.color, themeColor.opacity);
@@ -1041,7 +959,7 @@ function Section({
1041
959
  }) {
1042
960
  const { resolveColor: resolveColor2 } = useTheme();
1043
961
  const DropZone = puck?.renderDropZone;
1044
- return /* @__PURE__ */ jsx8(
962
+ return /* @__PURE__ */ jsx7(
1045
963
  "section",
1046
964
  {
1047
965
  id: anchorLink,
@@ -1056,13 +974,13 @@ function Section({
1056
974
  boxShadow: getShadowCSS(shadow),
1057
975
  borderRadius: `${borderRadius}px`
1058
976
  },
1059
- children: /* @__PURE__ */ jsx8("div", { className: "mx-auto w-full", style: { maxWidth: contentMaxWidth }, children: DropZone && /* @__PURE__ */ jsx8(DropZone, { zone: "content" }) })
977
+ children: /* @__PURE__ */ jsx7("div", { className: "mx-auto w-full", style: { maxWidth: contentMaxWidth }, children: DropZone && /* @__PURE__ */ jsx7(DropZone, { zone: "content" }) })
1060
978
  }
1061
979
  );
1062
980
  }
1063
981
 
1064
982
  // components/page/Container.tsx
1065
- import { jsx as jsx9 } from "react/jsx-runtime";
983
+ import { jsx as jsx8 } from "react/jsx-runtime";
1066
984
  var maxWidthMap2 = {
1067
985
  sm: "640px",
1068
986
  md: "768px",
@@ -1078,7 +996,7 @@ var paddingMap = {
1078
996
  lg: "32px",
1079
997
  xl: "48px"
1080
998
  };
1081
- function isThemeableValue8(value) {
999
+ function isThemeableValue7(value) {
1082
1000
  return typeof value === "object" && value !== null && "useTheme" in value;
1083
1001
  }
1084
1002
  function Container({
@@ -1097,7 +1015,7 @@ function Container({
1097
1015
  if (!backgroundColor) return null;
1098
1016
  if (typeof backgroundColor === "string")
1099
1017
  return { color: backgroundColor, opacity: 100 };
1100
- if (isThemeableValue8(backgroundColor)) {
1018
+ if (isThemeableValue7(backgroundColor)) {
1101
1019
  return backgroundColor.useTheme ? resolveColor2(backgroundColor.themeKey) : backgroundColor.value;
1102
1020
  }
1103
1021
  if ("color" in backgroundColor) return backgroundColor;
@@ -1116,11 +1034,11 @@ function Container({
1116
1034
  backgroundColor: resolvedBgColor ? hexToRgba(resolvedBgColor.color, resolvedBgColor.opacity) : void 0,
1117
1035
  width: "100%"
1118
1036
  };
1119
- return /* @__PURE__ */ jsx9("div", { id, style, children: DropZone && /* @__PURE__ */ jsx9(DropZone, { zone: "container-content" }) });
1037
+ return /* @__PURE__ */ jsx8("div", { id, style, children: DropZone && /* @__PURE__ */ jsx8(DropZone, { zone: "container-content" }) });
1120
1038
  }
1121
1039
 
1122
1040
  // components/page/Columns.tsx
1123
- import { jsx as jsx10 } from "react/jsx-runtime";
1041
+ import { jsx as jsx9 } from "react/jsx-runtime";
1124
1042
  var gapMap = {
1125
1043
  none: "0",
1126
1044
  sm: "16px",
@@ -1149,11 +1067,11 @@ function Columns({
1149
1067
  gap: gapMap[gap],
1150
1068
  alignItems: alignMap[verticalAlign]
1151
1069
  };
1152
- return /* @__PURE__ */ jsx10("div", { id, style: containerStyle, children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx10("div", { style: { minWidth: 0 }, children: DropZone && /* @__PURE__ */ jsx10(DropZone, { zone: `column-${index}` }) }, index)) });
1070
+ return /* @__PURE__ */ jsx9("div", { id, style: containerStyle, children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx9("div", { style: { minWidth: 0 }, children: DropZone && /* @__PURE__ */ jsx9(DropZone, { zone: `column-${index}` }) }, index)) });
1153
1071
  }
1154
1072
 
1155
1073
  // components/page/Card.tsx
1156
- import { jsx as jsx11 } from "react/jsx-runtime";
1074
+ import { jsx as jsx10 } from "react/jsx-runtime";
1157
1075
  var borderWidthMap = {
1158
1076
  none: "0",
1159
1077
  thin: "1px",
@@ -1181,7 +1099,7 @@ var paddingMap2 = {
1181
1099
  lg: "32px",
1182
1100
  xl: "48px"
1183
1101
  };
1184
- function isThemeableValue9(value) {
1102
+ function isThemeableValue8(value) {
1185
1103
  return typeof value === "object" && value !== null && "useTheme" in value;
1186
1104
  }
1187
1105
  function Card({
@@ -1200,7 +1118,7 @@ function Card({
1200
1118
  if (!backgroundColor) return resolveColor2("background");
1201
1119
  if (typeof backgroundColor === "string")
1202
1120
  return { color: backgroundColor, opacity: 100 };
1203
- if (isThemeableValue9(backgroundColor)) {
1121
+ if (isThemeableValue8(backgroundColor)) {
1204
1122
  return backgroundColor.useTheme ? resolveColor2(backgroundColor.themeKey) : backgroundColor.value;
1205
1123
  }
1206
1124
  if ("color" in backgroundColor) return backgroundColor;
@@ -1210,7 +1128,7 @@ function Card({
1210
1128
  if (!borderColor) return resolveColor2("muted");
1211
1129
  if (typeof borderColor === "string")
1212
1130
  return { color: borderColor, opacity: 100 };
1213
- if (isThemeableValue9(borderColor)) {
1131
+ if (isThemeableValue8(borderColor)) {
1214
1132
  return borderColor.useTheme ? resolveColor2(borderColor.themeKey) : borderColor.value;
1215
1133
  }
1216
1134
  if ("color" in borderColor) return borderColor;
@@ -1223,11 +1141,11 @@ function Card({
1223
1141
  boxShadow: shadowMap2[shadow],
1224
1142
  padding: paddingMap2[padding]
1225
1143
  };
1226
- return /* @__PURE__ */ jsx11("div", { id, style, children: DropZone && /* @__PURE__ */ jsx11(DropZone, { zone: "card-content" }) });
1144
+ return /* @__PURE__ */ jsx10("div", { id, style, children: DropZone && /* @__PURE__ */ jsx10(DropZone, { zone: "card-content" }) });
1227
1145
  }
1228
1146
 
1229
1147
  // components/page/Divider.tsx
1230
- import { jsx as jsx12 } from "react/jsx-runtime";
1148
+ import { jsx as jsx11 } from "react/jsx-runtime";
1231
1149
  var thicknessMap = {
1232
1150
  thin: "1px",
1233
1151
  medium: "2px",
@@ -1245,7 +1163,7 @@ var spacingMap = {
1245
1163
  lg: "32px",
1246
1164
  xl: "48px"
1247
1165
  };
1248
- function isThemeableValue10(value) {
1166
+ function isThemeableValue9(value) {
1249
1167
  return typeof value === "object" && value !== null && "useTheme" in value;
1250
1168
  }
1251
1169
  function Divider({
@@ -1261,7 +1179,7 @@ function Divider({
1261
1179
  const resolvedColor = (() => {
1262
1180
  if (!color) return resolveColor2("muted");
1263
1181
  if (typeof color === "string") return { color, opacity: 100 };
1264
- if (isThemeableValue10(color)) {
1182
+ if (isThemeableValue9(color)) {
1265
1183
  return color.useTheme ? resolveColor2(color.themeKey) : color.value;
1266
1184
  }
1267
1185
  if ("color" in color) return color;
@@ -1278,12 +1196,12 @@ function Divider({
1278
1196
  borderTop: `${thicknessMap[thickness]} ${lineStyle} ${hexToRgba(resolvedColor.color, resolvedColor.opacity)}`,
1279
1197
  margin: 0
1280
1198
  };
1281
- return /* @__PURE__ */ jsx12("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx12("hr", { style: hrStyle }) });
1199
+ return /* @__PURE__ */ jsx11("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx11("hr", { style: hrStyle }) });
1282
1200
  }
1283
1201
 
1284
1202
  // components/page/Spacer.tsx
1285
- import { jsx as jsx13 } from "react/jsx-runtime";
1286
- var sizeMap4 = {
1203
+ import { jsx as jsx12 } from "react/jsx-runtime";
1204
+ var sizeMap3 = {
1287
1205
  xs: "8px",
1288
1206
  sm: "16px",
1289
1207
  md: "24px",
@@ -1294,36 +1212,36 @@ var sizeMap4 = {
1294
1212
  };
1295
1213
  function Spacer({ size = "md", id }) {
1296
1214
  const style = {
1297
- height: sizeMap4[size],
1215
+ height: sizeMap3[size],
1298
1216
  width: "100%"
1299
1217
  };
1300
- return /* @__PURE__ */ jsx13("div", { id, style, "aria-hidden": "true" });
1218
+ return /* @__PURE__ */ jsx12("div", { id, style, "aria-hidden": "true" });
1301
1219
  }
1302
1220
 
1303
1221
  // components/page/TextBlock.tsx
1304
- import { jsx as jsx14, jsxs as jsxs4 } from "react/jsx-runtime";
1222
+ import { jsx as jsx13, jsxs as jsxs4 } from "react/jsx-runtime";
1305
1223
  var alignmentMap = {
1306
1224
  left: "text-left",
1307
1225
  center: "text-center",
1308
1226
  right: "text-right"
1309
1227
  };
1310
- var sizeMap5 = {
1228
+ var sizeMap4 = {
1311
1229
  small: "text-2xl",
1312
1230
  "medium-small": "text-3xl",
1313
1231
  medium: "text-4xl",
1314
1232
  large: "text-5xl",
1315
1233
  xlarge: "text-6xl"
1316
1234
  };
1317
- function isThemeableValue11(value) {
1235
+ function isThemeableValue10(value) {
1318
1236
  return typeof value === "object" && value !== null && "useTheme" in value;
1319
1237
  }
1320
- function isEntryBoundValue6(value) {
1238
+ function isEntryBoundValue5(value) {
1321
1239
  return typeof value === "object" && value !== null && "useEntry" in value;
1322
1240
  }
1323
1241
  function resolveColor(color, resolveThemeColor) {
1324
1242
  if (!color) return "#000000";
1325
1243
  if (typeof color === "string") return color;
1326
- if (isThemeableValue11(color)) {
1244
+ if (isThemeableValue10(color)) {
1327
1245
  if (color.useTheme) {
1328
1246
  const themeColor = resolveThemeColor(color.themeKey);
1329
1247
  return hexToRgba(themeColor.color, themeColor.opacity);
@@ -1338,7 +1256,7 @@ function resolveColor(color, resolveThemeColor) {
1338
1256
  function resolveColorHex(color, resolveThemeColor) {
1339
1257
  if (!color) return "#000000";
1340
1258
  if (typeof color === "string") return color;
1341
- if (isThemeableValue11(color)) {
1259
+ if (isThemeableValue10(color)) {
1342
1260
  if (color.useTheme) {
1343
1261
  return resolveThemeColor(color.themeKey).color;
1344
1262
  }
@@ -1367,7 +1285,7 @@ function TextBlock({
1367
1285
  const resolveText = (value) => {
1368
1286
  if (!value) return void 0;
1369
1287
  if (typeof value === "string") return value;
1370
- if (isEntryBoundValue6(value)) {
1288
+ if (isEntryBoundValue5(value)) {
1371
1289
  if (value.useEntry) {
1372
1290
  const entryVal = getEntryValue(value.entryName, value.fieldKey);
1373
1291
  return entryVal != null ? String(entryVal) : void 0;
@@ -1393,16 +1311,16 @@ function TextBlock({
1393
1311
  id: anchorLink,
1394
1312
  className: cn("flex flex-col gap-4", alignmentMap[alignment]),
1395
1313
  children: [
1396
- resolvedTitle && /* @__PURE__ */ jsx14(
1314
+ resolvedTitle && /* @__PURE__ */ jsx13(
1397
1315
  "h2",
1398
1316
  {
1399
- className: cn("font-bold", sizeMap5[textSize]),
1317
+ className: cn("font-bold", sizeMap4[textSize]),
1400
1318
  style: gradientStyle,
1401
1319
  children: resolvedTitle
1402
1320
  }
1403
1321
  ),
1404
- resolvedSubtitle && /* @__PURE__ */ jsx14("p", { className: "text-xl", style: { color: subtitleColorValue }, children: resolvedSubtitle }),
1405
- resolvedBody && /* @__PURE__ */ jsx14(
1322
+ resolvedSubtitle && /* @__PURE__ */ jsx13("p", { className: "text-xl", style: { color: subtitleColorValue }, children: resolvedSubtitle }),
1323
+ resolvedBody && /* @__PURE__ */ jsx13(
1406
1324
  "div",
1407
1325
  {
1408
1326
  className: "prose max-w-none",
@@ -1416,7 +1334,7 @@ function TextBlock({
1416
1334
  }
1417
1335
 
1418
1336
  // components/page/CustomImage.tsx
1419
- import { jsx as jsx15 } from "react/jsx-runtime";
1337
+ import { jsx as jsx14 } from "react/jsx-runtime";
1420
1338
  var alignmentMap2 = {
1421
1339
  left: "mr-auto",
1422
1340
  center: "mx-auto",
@@ -1430,9 +1348,9 @@ function CustomImage({
1430
1348
  fitContent = false
1431
1349
  }) {
1432
1350
  if (!image) {
1433
- return /* @__PURE__ */ jsx15("div", { className: "flex h-48 w-full items-center justify-center bg-gray-200 text-gray-400", children: "No image" });
1351
+ return /* @__PURE__ */ jsx14("div", { className: "flex h-48 w-full items-center justify-center bg-gray-200 text-gray-400", children: "No image" });
1434
1352
  }
1435
- return /* @__PURE__ */ jsx15(
1353
+ return /* @__PURE__ */ jsx14(
1436
1354
  "img",
1437
1355
  {
1438
1356
  src: image,
@@ -1449,8 +1367,8 @@ function CustomImage({
1449
1367
 
1450
1368
  // components/page/FeaturesList.tsx
1451
1369
  import { icons as icons2 } from "lucide-react";
1452
- import { jsx as jsx16, jsxs as jsxs5 } from "react/jsx-runtime";
1453
- var sizeMap6 = {
1370
+ import { jsx as jsx15, jsxs as jsxs5 } from "react/jsx-runtime";
1371
+ var sizeMap5 = {
1454
1372
  small: { icon: 24, title: "text-base", desc: "text-sm" },
1455
1373
  medium: { icon: 32, title: "text-lg", desc: "text-base" },
1456
1374
  large: { icon: 48, title: "text-xl", desc: "text-lg" }
@@ -1462,12 +1380,12 @@ function FeaturesList({
1462
1380
  iconColor = "#000000",
1463
1381
  anchorLink
1464
1382
  }) {
1465
- const sizeConfig = sizeMap6[size];
1383
+ const sizeConfig = sizeMap5[size];
1466
1384
  const getIcon = (iconName) => {
1467
1385
  const formatted = iconName.charAt(0).toUpperCase() + iconName.slice(1);
1468
1386
  return icons2[formatted] || null;
1469
1387
  };
1470
- return /* @__PURE__ */ jsx16(
1388
+ return /* @__PURE__ */ jsx15(
1471
1389
  "div",
1472
1390
  {
1473
1391
  id: anchorLink,
@@ -1487,7 +1405,7 @@ function FeaturesList({
1487
1405
  align === "right" && "flex-row-reverse"
1488
1406
  ),
1489
1407
  children: [
1490
- feature.image ? /* @__PURE__ */ jsx16(
1408
+ feature.image ? /* @__PURE__ */ jsx15(
1491
1409
  "img",
1492
1410
  {
1493
1411
  src: feature.image,
@@ -1495,7 +1413,7 @@ function FeaturesList({
1495
1413
  className: "object-contain",
1496
1414
  style: { width: sizeConfig.icon, height: sizeConfig.icon }
1497
1415
  }
1498
- ) : IconComponent ? /* @__PURE__ */ jsx16(
1416
+ ) : IconComponent ? /* @__PURE__ */ jsx15(
1499
1417
  IconComponent,
1500
1418
  {
1501
1419
  size: sizeConfig.icon,
@@ -1504,8 +1422,8 @@ function FeaturesList({
1504
1422
  }
1505
1423
  ) : null,
1506
1424
  /* @__PURE__ */ jsxs5("div", { className: "flex flex-col gap-1", children: [
1507
- feature.title && /* @__PURE__ */ jsx16("h3", { className: cn("font-semibold", sizeConfig.title), children: feature.title }),
1508
- feature.description && /* @__PURE__ */ jsx16("p", { className: cn("text-gray-600", sizeConfig.desc), children: feature.description })
1425
+ feature.title && /* @__PURE__ */ jsx15("h3", { className: cn("font-semibold", sizeConfig.title), children: feature.title }),
1426
+ feature.description && /* @__PURE__ */ jsx15("p", { className: cn("text-gray-600", sizeConfig.desc), children: feature.description })
1509
1427
  ] })
1510
1428
  ]
1511
1429
  },
@@ -1518,8 +1436,8 @@ function FeaturesList({
1518
1436
 
1519
1437
  // components/page/FeatureGrid.tsx
1520
1438
  import { icons as icons3 } from "lucide-react";
1521
- import { jsx as jsx17, jsxs as jsxs6 } from "react/jsx-runtime";
1522
- var sizeMap7 = {
1439
+ import { jsx as jsx16, jsxs as jsxs6 } from "react/jsx-runtime";
1440
+ var sizeMap6 = {
1523
1441
  small: { icon: 24, title: "text-base", desc: "text-sm" },
1524
1442
  medium: { icon: 32, title: "text-lg", desc: "text-base" },
1525
1443
  large: { icon: 48, title: "text-xl", desc: "text-lg" }
@@ -1535,7 +1453,7 @@ function FeatureGrid({
1535
1453
  textColor = "#000000",
1536
1454
  anchorLink
1537
1455
  }) {
1538
- const sizeConfig = sizeMap7[size];
1456
+ const sizeConfig = sizeMap6[size];
1539
1457
  const getIcon = (iconName) => {
1540
1458
  const formatted = iconName.charAt(0).toUpperCase() + iconName.slice(1);
1541
1459
  return icons3[formatted] || null;
@@ -1555,12 +1473,12 @@ function FeatureGrid({
1555
1473
  align === "right" && "text-right"
1556
1474
  ),
1557
1475
  children: [
1558
- heading && /* @__PURE__ */ jsx17("h2", { className: "text-3xl font-bold", style: { color: textColor }, children: heading }),
1559
- description && /* @__PURE__ */ jsx17("p", { className: "text-gray-600", children: description })
1476
+ heading && /* @__PURE__ */ jsx16("h2", { className: "text-3xl font-bold", style: { color: textColor }, children: heading }),
1477
+ description && /* @__PURE__ */ jsx16("p", { className: "text-gray-600", children: description })
1560
1478
  ]
1561
1479
  }
1562
1480
  ),
1563
- /* @__PURE__ */ jsx17("div", { className: cn("grid gap-6", columnClass[columns]), children: features.map((feature, index) => {
1481
+ /* @__PURE__ */ jsx16("div", { className: cn("grid gap-6", columnClass[columns]), children: features.map((feature, index) => {
1564
1482
  const IconComponent = feature.icon ? getIcon(feature.icon) : null;
1565
1483
  return /* @__PURE__ */ jsxs6(
1566
1484
  "div",
@@ -1570,7 +1488,7 @@ function FeatureGrid({
1570
1488
  align === "center" && "items-center text-center"
1571
1489
  ),
1572
1490
  children: [
1573
- feature.image ? /* @__PURE__ */ jsx17(
1491
+ feature.image ? /* @__PURE__ */ jsx16(
1574
1492
  "img",
1575
1493
  {
1576
1494
  src: feature.image,
@@ -1578,14 +1496,14 @@ function FeatureGrid({
1578
1496
  className: "object-contain",
1579
1497
  style: { width: sizeConfig.icon, height: sizeConfig.icon }
1580
1498
  }
1581
- ) : IconComponent ? /* @__PURE__ */ jsx17(
1499
+ ) : IconComponent ? /* @__PURE__ */ jsx16(
1582
1500
  IconComponent,
1583
1501
  {
1584
1502
  size: sizeConfig.icon,
1585
1503
  style: { color: iconColor }
1586
1504
  }
1587
1505
  ) : null,
1588
- feature.title && /* @__PURE__ */ jsx17(
1506
+ feature.title && /* @__PURE__ */ jsx16(
1589
1507
  "h3",
1590
1508
  {
1591
1509
  className: cn("font-semibold", sizeConfig.title),
@@ -1593,7 +1511,7 @@ function FeatureGrid({
1593
1511
  children: feature.title
1594
1512
  }
1595
1513
  ),
1596
- feature.description && /* @__PURE__ */ jsx17("p", { className: cn("text-gray-600", sizeConfig.desc), children: feature.description })
1514
+ feature.description && /* @__PURE__ */ jsx16("p", { className: cn("text-gray-600", sizeConfig.desc), children: feature.description })
1597
1515
  ]
1598
1516
  },
1599
1517
  index
@@ -1604,7 +1522,7 @@ function FeatureGrid({
1604
1522
 
1605
1523
  // components/page/Footer.tsx
1606
1524
  import { Facebook, Instagram, Twitter } from "lucide-react";
1607
- import { jsx as jsx18, jsxs as jsxs7 } from "react/jsx-runtime";
1525
+ import { jsx as jsx17, jsxs as jsxs7 } from "react/jsx-runtime";
1608
1526
  function Footer({
1609
1527
  logo,
1610
1528
  copyright = "\xA9 2024 Company. All rights reserved.",
@@ -1639,15 +1557,15 @@ function Footer({
1639
1557
  ].filter(
1640
1558
  (link) => !!link.url
1641
1559
  );
1642
- return /* @__PURE__ */ jsx18(
1560
+ return /* @__PURE__ */ jsx17(
1643
1561
  "footer",
1644
1562
  {
1645
1563
  className: "w-full px-6 py-8",
1646
1564
  style: { backgroundColor, color: textColor },
1647
1565
  children: /* @__PURE__ */ jsxs7("div", { className: "mx-auto flex max-w-7xl flex-col items-center justify-between gap-6 md:flex-row", children: [
1648
- /* @__PURE__ */ jsx18("div", { className: "flex items-center gap-4", children: logo && /* @__PURE__ */ jsx18("img", { src: logo, alt: "Logo", className: "h-8" }) }),
1649
- DropZone && /* @__PURE__ */ jsx18(DropZone, { zone: "footer-content" }),
1650
- /* @__PURE__ */ jsx18("div", { className: "flex items-center gap-4", children: socialLinks.map(({ url, Icon: Icon3 }, index) => /* @__PURE__ */ jsx18(
1566
+ /* @__PURE__ */ jsx17("div", { className: "flex items-center gap-4", children: logo && /* @__PURE__ */ jsx17("img", { src: logo, alt: "Logo", className: "h-8" }) }),
1567
+ DropZone && /* @__PURE__ */ jsx17(DropZone, { zone: "footer-content" }),
1568
+ /* @__PURE__ */ jsx17("div", { className: "flex items-center gap-4", children: socialLinks.map(({ url, Icon: Icon3 }, index) => /* @__PURE__ */ jsx17(
1651
1569
  "a",
1652
1570
  {
1653
1571
  href: url,
@@ -1655,11 +1573,11 @@ function Footer({
1655
1573
  rel: "noopener noreferrer",
1656
1574
  className: "transition-opacity hover:opacity-80",
1657
1575
  onClick: () => handleSocialClick(url),
1658
- children: /* @__PURE__ */ jsx18(Icon3, { size: 24, style: { color: textColor } })
1576
+ children: /* @__PURE__ */ jsx17(Icon3, { size: 24, style: { color: textColor } })
1659
1577
  },
1660
1578
  index
1661
1579
  )) }),
1662
- copyright && /* @__PURE__ */ jsx18("p", { className: "text-sm opacity-80", children: copyright })
1580
+ copyright && /* @__PURE__ */ jsx17("p", { className: "text-sm opacity-80", children: copyright })
1663
1581
  ] })
1664
1582
  }
1665
1583
  );
@@ -1668,7 +1586,7 @@ function Footer({
1668
1586
  // components/page/Topbar.tsx
1669
1587
  import { useState as useState2 } from "react";
1670
1588
  import { Menu, X } from "lucide-react";
1671
- import { jsx as jsx19, jsxs as jsxs8 } from "react/jsx-runtime";
1589
+ import { jsx as jsx18, jsxs as jsxs8 } from "react/jsx-runtime";
1672
1590
  function Topbar({
1673
1591
  logo,
1674
1592
  logoUrl = "/",
@@ -1701,7 +1619,7 @@ function Topbar({
1701
1619
  const renderLink = (item, index) => {
1702
1620
  const className = "hover:opacity-80 transition-opacity";
1703
1621
  if (item.linkType === "external") {
1704
- return /* @__PURE__ */ jsx19(
1622
+ return /* @__PURE__ */ jsx18(
1705
1623
  "a",
1706
1624
  {
1707
1625
  href: item.url,
@@ -1715,7 +1633,7 @@ function Topbar({
1715
1633
  );
1716
1634
  }
1717
1635
  if (item.linkType === "scrollTo") {
1718
- return /* @__PURE__ */ jsx19(
1636
+ return /* @__PURE__ */ jsx18(
1719
1637
  "a",
1720
1638
  {
1721
1639
  href: item.url,
@@ -1726,7 +1644,7 @@ function Topbar({
1726
1644
  index
1727
1645
  );
1728
1646
  }
1729
- return /* @__PURE__ */ jsx19(
1647
+ return /* @__PURE__ */ jsx18(
1730
1648
  "a",
1731
1649
  {
1732
1650
  href: item.url,
@@ -1749,7 +1667,7 @@ function Topbar({
1749
1667
  className: "mx-auto flex items-center justify-between",
1750
1668
  style: { maxWidth },
1751
1669
  children: [
1752
- /* @__PURE__ */ jsx19(
1670
+ /* @__PURE__ */ jsx18(
1753
1671
  "a",
1754
1672
  {
1755
1673
  href: logoUrl,
@@ -1760,14 +1678,14 @@ function Topbar({
1760
1678
  linkType: "internal",
1761
1679
  ...utm
1762
1680
  }),
1763
- children: logo ? /* @__PURE__ */ jsx19("img", { src: logo, alt: "Logo", className: "h-8" }) : /* @__PURE__ */ jsx19("span", { className: "text-xl font-bold", children: "Logo" })
1681
+ children: logo ? /* @__PURE__ */ jsx18("img", { src: logo, alt: "Logo", className: "h-8" }) : /* @__PURE__ */ jsx18("span", { className: "text-xl font-bold", children: "Logo" })
1764
1682
  }
1765
1683
  ),
1766
1684
  /* @__PURE__ */ jsxs8("div", { className: "hidden items-center gap-8 md:flex", children: [
1767
1685
  navItems.map(renderLink),
1768
- DropZone && /* @__PURE__ */ jsx19(DropZone, { zone: "cta" })
1686
+ DropZone && /* @__PURE__ */ jsx18(DropZone, { zone: "cta" })
1769
1687
  ] }),
1770
- /* @__PURE__ */ jsx19("button", { className: "md:hidden", onClick: handleMobileMenuToggle, children: mobileMenuOpen ? /* @__PURE__ */ jsx19(X, { size: 24 }) : /* @__PURE__ */ jsx19(Menu, { size: 24 }) })
1688
+ /* @__PURE__ */ jsx18("button", { className: "md:hidden", onClick: handleMobileMenuToggle, children: mobileMenuOpen ? /* @__PURE__ */ jsx18(X, { size: 24 }) : /* @__PURE__ */ jsx18(Menu, { size: 24 }) })
1771
1689
  ]
1772
1690
  }
1773
1691
  ),
@@ -1778,7 +1696,7 @@ function Topbar({
1778
1696
  style: { backgroundColor },
1779
1697
  children: [
1780
1698
  navItems.map(renderLink),
1781
- DropZone && /* @__PURE__ */ jsx19(DropZone, { zone: "cta" })
1699
+ DropZone && /* @__PURE__ */ jsx18(DropZone, { zone: "cta" })
1782
1700
  ]
1783
1701
  }
1784
1702
  )
@@ -1790,19 +1708,19 @@ function Topbar({
1790
1708
  // components/page/Popup.tsx
1791
1709
  import { useState as useState3 } from "react";
1792
1710
  import { icons as icons4, X as X2 } from "lucide-react";
1793
- import { Fragment as Fragment2, jsx as jsx20, jsxs as jsxs9 } from "react/jsx-runtime";
1711
+ import { Fragment as Fragment2, jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
1794
1712
  function Icon2({ name, ...props }) {
1795
1713
  const formatted = name.charAt(0).toUpperCase() + name.slice(1);
1796
1714
  const IconComponent = icons4[formatted];
1797
1715
  if (!IconComponent) return null;
1798
- return /* @__PURE__ */ jsx20(IconComponent, { ...props });
1716
+ return /* @__PURE__ */ jsx19(IconComponent, { ...props });
1799
1717
  }
1800
1718
  var widthMap3 = {
1801
1719
  small: "max-w-sm",
1802
1720
  medium: "max-w-lg",
1803
1721
  large: "max-w-2xl"
1804
1722
  };
1805
- var sizeMap8 = {
1723
+ var sizeMap7 = {
1806
1724
  small: "px-3 py-1.5 text-sm",
1807
1725
  medium: "px-4 py-2 text-base",
1808
1726
  large: "px-6 py-3 text-lg"
@@ -1833,7 +1751,7 @@ function Popup({
1833
1751
  setIsOpen(false);
1834
1752
  sendEvent("popup_close", { ctaText, ...utm });
1835
1753
  };
1836
- const trigger = textLink ? /* @__PURE__ */ jsx20(
1754
+ const trigger = textLink ? /* @__PURE__ */ jsx19(
1837
1755
  "button",
1838
1756
  {
1839
1757
  onClick: handleOpen,
@@ -1847,19 +1765,19 @@ function Popup({
1847
1765
  onClick: handleOpen,
1848
1766
  className: cn(
1849
1767
  "flex items-center gap-2 rounded-full font-medium",
1850
- sizeMap8[size]
1768
+ sizeMap7[size]
1851
1769
  ),
1852
1770
  style: { backgroundColor: buttonColor, color: textColor },
1853
1771
  children: [
1854
- icon && iconPosition === "left" && /* @__PURE__ */ jsx20(Icon2, { name: icon, size: 18 }),
1772
+ icon && iconPosition === "left" && /* @__PURE__ */ jsx19(Icon2, { name: icon, size: 18 }),
1855
1773
  ctaText,
1856
- icon && iconPosition === "right" && /* @__PURE__ */ jsx20(Icon2, { name: icon, size: 18 })
1774
+ icon && iconPosition === "right" && /* @__PURE__ */ jsx19(Icon2, { name: icon, size: 18 })
1857
1775
  ]
1858
1776
  }
1859
1777
  );
1860
1778
  return /* @__PURE__ */ jsxs9(Fragment2, { children: [
1861
1779
  trigger,
1862
- isOpen && /* @__PURE__ */ jsx20(
1780
+ isOpen && /* @__PURE__ */ jsx19(
1863
1781
  "div",
1864
1782
  {
1865
1783
  className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4",
@@ -1873,15 +1791,15 @@ function Popup({
1873
1791
  ),
1874
1792
  onClick: (e) => e.stopPropagation(),
1875
1793
  children: [
1876
- /* @__PURE__ */ jsx20(
1794
+ /* @__PURE__ */ jsx19(
1877
1795
  "button",
1878
1796
  {
1879
1797
  onClick: handleClose,
1880
1798
  className: "absolute top-4 right-4 text-gray-500 hover:text-gray-700",
1881
- children: /* @__PURE__ */ jsx20(X2, { size: 24 })
1799
+ children: /* @__PURE__ */ jsx19(X2, { size: 24 })
1882
1800
  }
1883
1801
  ),
1884
- puck && /* @__PURE__ */ jsx20(puck.renderDropZone, { zone: "popup-content" })
1802
+ puck && /* @__PURE__ */ jsx19(puck.renderDropZone, { zone: "popup-content" })
1885
1803
  ]
1886
1804
  }
1887
1805
  )
@@ -1890,8 +1808,48 @@ function Popup({
1890
1808
  ] });
1891
1809
  }
1892
1810
 
1811
+ // components/page/primitives/Heading.ts
1812
+ var headingSizeMap = {
1813
+ xs: "0.875rem",
1814
+ sm: "1rem",
1815
+ md: "1.25rem",
1816
+ lg: "1.5rem",
1817
+ xl: "2rem",
1818
+ "2xl": "2.5rem",
1819
+ "3xl": "3rem",
1820
+ "4xl": "4rem"
1821
+ };
1822
+ var headingWeightMap = {
1823
+ normal: 400,
1824
+ medium: 500,
1825
+ semibold: 600,
1826
+ bold: 700,
1827
+ extrabold: 800
1828
+ };
1829
+ var headingLetterSpacingMap = {
1830
+ tight: "-0.025em",
1831
+ normal: "0",
1832
+ wide: "0.05em"
1833
+ };
1834
+ var headingLineHeightMap = {
1835
+ tight: "1.1",
1836
+ normal: "1.4",
1837
+ relaxed: "1.6"
1838
+ };
1839
+ function getHeadingStyle(props) {
1840
+ return {
1841
+ fontSize: headingSizeMap[props.size],
1842
+ fontWeight: headingWeightMap[props.weight],
1843
+ color: props.color,
1844
+ textAlign: props.align,
1845
+ letterSpacing: headingLetterSpacingMap[props.letterSpacing],
1846
+ lineHeight: headingLineHeightMap[props.lineHeight],
1847
+ margin: 0
1848
+ };
1849
+ }
1850
+
1893
1851
  export {
1894
- Heading,
1852
+ getHeadingStyle,
1895
1853
  Paragraph,
1896
1854
  Button,
1897
1855
  Image,