@mission-studio/puck 1.0.19 → 1.0.21

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.
@@ -12,160 +12,8 @@ import {
12
12
  hexToRgba
13
13
  } from "./chunk-C6V3YUPF.mjs";
14
14
 
15
- // components/page/Heading.tsx
16
- import { jsx } from "react/jsx-runtime";
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
- sm: "0.875rem",
101
- base: "1rem",
102
- lg: "1.125rem",
103
- xl: "1.25rem"
104
- };
105
- var weightMap2 = {
106
- normal: 400,
107
- medium: 500,
108
- semibold: 600
109
- };
110
- var lineHeightMap2 = {
111
- tight: "1.4",
112
- normal: "1.6",
113
- relaxed: "1.75",
114
- loose: "2"
115
- };
116
- function isThemeableValue2(value) {
117
- return typeof value === "object" && value !== null && "useTheme" in value;
118
- }
119
- function isEntryBoundValue2(value) {
120
- return typeof value === "object" && value !== null && "useEntry" in value;
121
- }
122
- function Paragraph({
123
- text,
124
- size = "base",
125
- weight = "normal",
126
- color,
127
- align = "left",
128
- lineHeight = "normal",
129
- maxWidth,
130
- id
131
- }) {
132
- const { resolveColor: resolveColor2 } = useTheme();
133
- const { getEntryValue } = useEntries();
134
- const resolvedText = (() => {
135
- if (!text) return "";
136
- if (typeof text === "string") return text;
137
- if (isEntryBoundValue2(text)) {
138
- if (text.useEntry) {
139
- return String(getEntryValue(text.entryName, text.fieldKey) ?? "");
140
- }
141
- return text.value;
142
- }
143
- return "";
144
- })();
145
- const resolvedColor = (() => {
146
- if (!color) return resolveColor2("foreground");
147
- if (typeof color === "string") return { color, opacity: 100 };
148
- if (isThemeableValue2(color)) {
149
- return color.useTheme ? resolveColor2(color.themeKey) : color.value;
150
- }
151
- if ("color" in color) return color;
152
- return resolveColor2("foreground");
153
- })();
154
- const style = {
155
- fontSize: sizeMap2[size],
156
- fontWeight: weightMap2[weight],
157
- color: hexToRgba(resolvedColor.color, resolvedColor.opacity),
158
- textAlign: align,
159
- lineHeight: lineHeightMap2[lineHeight],
160
- maxWidth: maxWidth || void 0,
161
- margin: 0
162
- };
163
- if (!resolvedText) return null;
164
- return /* @__PURE__ */ jsx2("p", { id, style, children: resolvedText });
165
- }
166
-
167
15
  // components/page/Button.tsx
168
- import { jsx as jsx3 } from "react/jsx-runtime";
16
+ import { jsx } from "react/jsx-runtime";
169
17
  var sizeStyles = {
170
18
  sm: { padding: "8px 16px", fontSize: "0.875rem" },
171
19
  md: { padding: "12px 24px", fontSize: "1rem" },
@@ -179,10 +27,10 @@ var radiusMap = {
179
27
  lg: "16px",
180
28
  full: "9999px"
181
29
  };
182
- function isThemeableValue3(value) {
30
+ function isThemeableValue(value) {
183
31
  return typeof value === "object" && value !== null && "useTheme" in value;
184
32
  }
185
- function isEntryBoundValue3(value) {
33
+ function isEntryBoundValue(value) {
186
34
  return typeof value === "object" && value !== null && "useEntry" in value;
187
35
  }
188
36
  function Button({
@@ -205,7 +53,7 @@ function Button({
205
53
  const resolvedText = (() => {
206
54
  if (!text) return "Button";
207
55
  if (typeof text === "string") return text;
208
- if (isEntryBoundValue3(text)) {
56
+ if (isEntryBoundValue(text)) {
209
57
  if (text.useEntry) {
210
58
  return String(getEntryValue(text.entryName, text.fieldKey) ?? "Button");
211
59
  }
@@ -226,7 +74,7 @@ function Button({
226
74
  const resolvedColor = (() => {
227
75
  if (!color) return resolveColor2("primary");
228
76
  if (typeof color === "string") return { color, opacity: 100 };
229
- if (isThemeableValue3(color)) {
77
+ if (isThemeableValue(color)) {
230
78
  return color.useTheme ? resolveColor2(color.themeKey) : color.value;
231
79
  }
232
80
  if ("color" in color) return color;
@@ -239,7 +87,7 @@ function Button({
239
87
  }
240
88
  if (typeof textColor === "string")
241
89
  return { color: textColor, opacity: 100 };
242
- if (isThemeableValue3(textColor)) {
90
+ if (isThemeableValue(textColor)) {
243
91
  return textColor.useTheme ? resolveColor2(textColor.themeKey) : textColor.value;
244
92
  }
245
93
  if ("color" in textColor) return textColor;
@@ -286,9 +134,9 @@ function Button({
286
134
  display: "flex",
287
135
  justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
288
136
  };
289
- const content = /* @__PURE__ */ jsx3("span", { style, children: resolvedText });
137
+ const content = /* @__PURE__ */ jsx("span", { style, children: resolvedText });
290
138
  if (href) {
291
- return /* @__PURE__ */ jsx3("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx3(
139
+ return /* @__PURE__ */ jsx("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx(
292
140
  "a",
293
141
  {
294
142
  id,
@@ -301,11 +149,11 @@ function Button({
301
149
  }
302
150
  ) });
303
151
  }
304
- return /* @__PURE__ */ jsx3("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx3("button", { id, type: "button", style, onClick: handleClick, children: resolvedText }) });
152
+ return /* @__PURE__ */ jsx("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx("button", { id, type: "button", style, onClick: handleClick, children: resolvedText }) });
305
153
  }
306
154
 
307
155
  // components/page/Image.tsx
308
- import { jsx as jsx4, jsxs } from "react/jsx-runtime";
156
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
309
157
  var widthMap = {
310
158
  auto: "auto",
311
159
  full: "100%",
@@ -336,10 +184,10 @@ var shadowMap = {
336
184
  lg: "0 10px 15px rgba(0,0,0,0.1)",
337
185
  xl: "0 20px 25px rgba(0,0,0,0.15)"
338
186
  };
339
- function isThemeableValue4(value) {
187
+ function isThemeableValue2(value) {
340
188
  return typeof value === "object" && value !== null && "useTheme" in value;
341
189
  }
342
- function isEntryBoundValue4(value) {
190
+ function isEntryBoundValue2(value) {
343
191
  return typeof value === "object" && value !== null && "useEntry" in value;
344
192
  }
345
193
  function Image({
@@ -360,7 +208,7 @@ function Image({
360
208
  const resolvedSrc = (() => {
361
209
  if (!src) return "";
362
210
  if (typeof src === "string") return src;
363
- if (isEntryBoundValue4(src)) {
211
+ if (isEntryBoundValue2(src)) {
364
212
  if (src.useEntry) {
365
213
  return String(getEntryValue(src.entryName, src.fieldKey) ?? "");
366
214
  }
@@ -371,7 +219,7 @@ function Image({
371
219
  const resolvedCaption = (() => {
372
220
  if (!caption) return "";
373
221
  if (typeof caption === "string") return caption;
374
- if (isEntryBoundValue4(caption)) {
222
+ if (isEntryBoundValue2(caption)) {
375
223
  if (caption.useEntry) {
376
224
  return String(getEntryValue(caption.entryName, caption.fieldKey) ?? "");
377
225
  }
@@ -383,7 +231,7 @@ function Image({
383
231
  if (!captionColor) return resolveColor2("muted");
384
232
  if (typeof captionColor === "string")
385
233
  return { color: captionColor, opacity: 100 };
386
- if (isThemeableValue4(captionColor)) {
234
+ if (isThemeableValue2(captionColor)) {
387
235
  return captionColor.useTheme ? resolveColor2(captionColor.themeKey) : captionColor.value;
388
236
  }
389
237
  if ("color" in captionColor) return captionColor;
@@ -411,7 +259,7 @@ function Image({
411
259
  maxWidth: widthMap[width]
412
260
  };
413
261
  if (!resolvedSrc) {
414
- return /* @__PURE__ */ jsx4("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx4(
262
+ return /* @__PURE__ */ jsx2("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx2(
415
263
  "div",
416
264
  {
417
265
  style: {
@@ -428,14 +276,14 @@ function Image({
428
276
  ) });
429
277
  }
430
278
  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 })
279
+ /* @__PURE__ */ jsx2("img", { src: resolvedSrc, alt, style: imageStyle, loading: "lazy" }),
280
+ resolvedCaption && /* @__PURE__ */ jsx2("figcaption", { style: captionStyle, children: resolvedCaption })
433
281
  ] });
434
282
  }
435
283
 
436
284
  // components/page/ImageCarousel.tsx
437
285
  import { useState } from "react";
438
- import { Fragment, jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
286
+ import { Fragment, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
439
287
  var aspectRatioMap2 = {
440
288
  "16:9": "16 / 9",
441
289
  "4:3": "4 / 3",
@@ -448,7 +296,7 @@ var radiusMap3 = {
448
296
  md: "8px",
449
297
  lg: "16px"
450
298
  };
451
- function isThemeableValue5(value) {
299
+ function isThemeableValue3(value) {
452
300
  return typeof value === "object" && value !== null && "useTheme" in value;
453
301
  }
454
302
  function ImageCarousel({
@@ -469,7 +317,7 @@ function ImageCarousel({
469
317
  if (!arrowColor) return { color: "#FFFFFF", opacity: 100 };
470
318
  if (typeof arrowColor === "string")
471
319
  return { color: arrowColor, opacity: 100 };
472
- if (isThemeableValue5(arrowColor)) {
320
+ if (isThemeableValue3(arrowColor)) {
473
321
  return arrowColor.useTheme ? resolveColor2(arrowColor.themeKey) : arrowColor.value;
474
322
  }
475
323
  if ("color" in arrowColor) return arrowColor;
@@ -478,7 +326,7 @@ function ImageCarousel({
478
326
  const resolvedDotColor = (() => {
479
327
  if (!dotColor) return resolveColor2("primary");
480
328
  if (typeof dotColor === "string") return { color: dotColor, opacity: 100 };
481
- if (isThemeableValue5(dotColor)) {
329
+ if (isThemeableValue3(dotColor)) {
482
330
  return dotColor.useTheme ? resolveColor2(dotColor.themeKey) : dotColor.value;
483
331
  }
484
332
  if ("color" in dotColor) return dotColor;
@@ -514,7 +362,7 @@ function ImageCarousel({
514
362
  });
515
363
  };
516
364
  if (images.length === 0) {
517
- return /* @__PURE__ */ jsx5(
365
+ return /* @__PURE__ */ jsx3(
518
366
  "div",
519
367
  {
520
368
  style: {
@@ -586,7 +434,7 @@ function ImageCarousel({
586
434
  backgroundColor: isActive ? hexToRgba(resolvedDotColor.color, resolvedDotColor.opacity) : "rgba(255,255,255,0.5)"
587
435
  });
588
436
  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(
437
+ /* @__PURE__ */ jsx3("div", { style: slideContainerStyle, children: images.map((image, index) => /* @__PURE__ */ jsx3("div", { style: slideStyle, children: /* @__PURE__ */ jsx3(
590
438
  "img",
591
439
  {
592
440
  src: image.src,
@@ -596,7 +444,7 @@ function ImageCarousel({
596
444
  }
597
445
  ) }, index)) }),
598
446
  showArrows && images.length > 1 && /* @__PURE__ */ jsxs2(Fragment, { children: [
599
- /* @__PURE__ */ jsx5(
447
+ /* @__PURE__ */ jsx3(
600
448
  "button",
601
449
  {
602
450
  type: "button",
@@ -606,7 +454,7 @@ function ImageCarousel({
606
454
  children: "\u2039"
607
455
  }
608
456
  ),
609
- /* @__PURE__ */ jsx5(
457
+ /* @__PURE__ */ jsx3(
610
458
  "button",
611
459
  {
612
460
  type: "button",
@@ -617,7 +465,7 @@ function ImageCarousel({
617
465
  }
618
466
  )
619
467
  ] }),
620
- showDots && images.length > 1 && /* @__PURE__ */ jsx5("div", { style: dotsContainerStyle, children: images.map((_, index) => /* @__PURE__ */ jsx5(
468
+ showDots && images.length > 1 && /* @__PURE__ */ jsx3("div", { style: dotsContainerStyle, children: images.map((_, index) => /* @__PURE__ */ jsx3(
621
469
  "button",
622
470
  {
623
471
  type: "button",
@@ -631,7 +479,7 @@ function ImageCarousel({
631
479
  }
632
480
 
633
481
  // components/page/VideoEmbed.tsx
634
- import { jsx as jsx6 } from "react/jsx-runtime";
482
+ import { jsx as jsx4 } from "react/jsx-runtime";
635
483
  var aspectRatioMap3 = {
636
484
  "16:9": "56.25%",
637
485
  // 9/16 * 100
@@ -652,7 +500,7 @@ var maxWidthMap = {
652
500
  xl: "1000px",
653
501
  full: "100%"
654
502
  };
655
- function isEntryBoundValue5(value) {
503
+ function isEntryBoundValue3(value) {
656
504
  return typeof value === "object" && value !== null && "useEntry" in value;
657
505
  }
658
506
  function parseVideoUrl(url) {
@@ -689,7 +537,7 @@ function VideoEmbed({
689
537
  const resolvedUrl = (() => {
690
538
  if (!url) return "";
691
539
  if (typeof url === "string") return url;
692
- if (isEntryBoundValue5(url)) {
540
+ if (isEntryBoundValue3(url)) {
693
541
  if (url.useEntry) {
694
542
  return String(getEntryValue(url.entryName, url.fieldKey) ?? "");
695
543
  }
@@ -698,7 +546,7 @@ function VideoEmbed({
698
546
  return "";
699
547
  })();
700
548
  if (!resolvedUrl) {
701
- return /* @__PURE__ */ jsx6(
549
+ return /* @__PURE__ */ jsx4(
702
550
  "div",
703
551
  {
704
552
  style: {
@@ -743,7 +591,7 @@ function VideoEmbed({
743
591
  height: "100%",
744
592
  border: "none"
745
593
  };
746
- return /* @__PURE__ */ jsx6("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx6("div", { style: containerStyle, children: /* @__PURE__ */ jsx6(
594
+ return /* @__PURE__ */ jsx4("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx4("div", { style: containerStyle, children: /* @__PURE__ */ jsx4(
747
595
  "iframe",
748
596
  {
749
597
  src: finalUrl,
@@ -756,8 +604,8 @@ function VideoEmbed({
756
604
  }
757
605
 
758
606
  // components/page/Icon.tsx
759
- import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
760
- var sizeMap3 = {
607
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
608
+ var sizeMap = {
761
609
  sm: { size: "16px", strokeWidth: 2 },
762
610
  md: { size: "24px", strokeWidth: 2 },
763
611
  lg: { size: "32px", strokeWidth: 1.5 },
@@ -765,7 +613,7 @@ var sizeMap3 = {
765
613
  "2xl": { size: "64px", strokeWidth: 1.5 }
766
614
  };
767
615
  var icons = {
768
- check: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx7(
616
+ check: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
769
617
  "svg",
770
618
  {
771
619
  width: size,
@@ -776,7 +624,7 @@ var icons = {
776
624
  strokeWidth,
777
625
  strokeLinecap: "round",
778
626
  strokeLinejoin: "round",
779
- children: /* @__PURE__ */ jsx7("polyline", { points: "20 6 9 17 4 12" })
627
+ children: /* @__PURE__ */ jsx5("polyline", { points: "20 6 9 17 4 12" })
780
628
  }
781
629
  ),
782
630
  x: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
@@ -791,12 +639,12 @@ var icons = {
791
639
  strokeLinecap: "round",
792
640
  strokeLinejoin: "round",
793
641
  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" })
642
+ /* @__PURE__ */ jsx5("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
643
+ /* @__PURE__ */ jsx5("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
796
644
  ]
797
645
  }
798
646
  ),
799
- star: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx7(
647
+ star: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
800
648
  "svg",
801
649
  {
802
650
  width: size,
@@ -807,10 +655,10 @@ var icons = {
807
655
  strokeWidth,
808
656
  strokeLinecap: "round",
809
657
  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" })
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" })
811
659
  }
812
660
  ),
813
- heart: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx7(
661
+ heart: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
814
662
  "svg",
815
663
  {
816
664
  width: size,
@@ -821,7 +669,7 @@ var icons = {
821
669
  strokeWidth,
822
670
  strokeLinecap: "round",
823
671
  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" })
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" })
825
673
  }
826
674
  ),
827
675
  arrowRight: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
@@ -836,8 +684,8 @@ var icons = {
836
684
  strokeLinecap: "round",
837
685
  strokeLinejoin: "round",
838
686
  children: [
839
- /* @__PURE__ */ jsx7("line", { x1: "5", y1: "12", x2: "19", y2: "12" }),
840
- /* @__PURE__ */ jsx7("polyline", { points: "12 5 19 12 12 19" })
687
+ /* @__PURE__ */ jsx5("line", { x1: "5", y1: "12", x2: "19", y2: "12" }),
688
+ /* @__PURE__ */ jsx5("polyline", { points: "12 5 19 12 12 19" })
841
689
  ]
842
690
  }
843
691
  ),
@@ -853,8 +701,8 @@ var icons = {
853
701
  strokeLinecap: "round",
854
702
  strokeLinejoin: "round",
855
703
  children: [
856
- /* @__PURE__ */ jsx7("line", { x1: "19", y1: "12", x2: "5", y2: "12" }),
857
- /* @__PURE__ */ jsx7("polyline", { points: "12 19 5 12 12 5" })
704
+ /* @__PURE__ */ jsx5("line", { x1: "19", y1: "12", x2: "5", y2: "12" }),
705
+ /* @__PURE__ */ jsx5("polyline", { points: "12 19 5 12 12 5" })
858
706
  ]
859
707
  }
860
708
  ),
@@ -870,12 +718,12 @@ var icons = {
870
718
  strokeLinecap: "round",
871
719
  strokeLinejoin: "round",
872
720
  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" })
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" })
875
723
  ]
876
724
  }
877
725
  ),
878
- phone: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx7(
726
+ phone: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
879
727
  "svg",
880
728
  {
881
729
  width: size,
@@ -886,7 +734,7 @@ var icons = {
886
734
  strokeWidth,
887
735
  strokeLinecap: "round",
888
736
  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" })
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" })
890
738
  }
891
739
  ),
892
740
  mapPin: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
@@ -901,12 +749,12 @@ var icons = {
901
749
  strokeLinecap: "round",
902
750
  strokeLinejoin: "round",
903
751
  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" })
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" })
906
754
  ]
907
755
  }
908
756
  ),
909
- zap: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx7(
757
+ zap: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
910
758
  "svg",
911
759
  {
912
760
  width: size,
@@ -917,10 +765,10 @@ var icons = {
917
765
  strokeWidth,
918
766
  strokeLinecap: "round",
919
767
  strokeLinejoin: "round",
920
- children: /* @__PURE__ */ jsx7("polygon", { points: "13 2 3 14 12 14 11 22 21 10 12 10 13 2" })
768
+ children: /* @__PURE__ */ jsx5("polygon", { points: "13 2 3 14 12 14 11 22 21 10 12 10 13 2" })
921
769
  }
922
770
  ),
923
- shield: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx7(
771
+ shield: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
924
772
  "svg",
925
773
  {
926
774
  width: size,
@@ -931,7 +779,7 @@ var icons = {
931
779
  strokeWidth,
932
780
  strokeLinecap: "round",
933
781
  strokeLinejoin: "round",
934
- children: /* @__PURE__ */ jsx7("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" })
782
+ children: /* @__PURE__ */ jsx5("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" })
935
783
  }
936
784
  ),
937
785
  users: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
@@ -946,15 +794,15 @@ var icons = {
946
794
  strokeLinecap: "round",
947
795
  strokeLinejoin: "round",
948
796
  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" })
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" })
953
801
  ]
954
802
  }
955
803
  )
956
804
  };
957
- function isThemeableValue6(value) {
805
+ function isThemeableValue4(value) {
958
806
  return typeof value === "object" && value !== null && "useTheme" in value;
959
807
  }
960
808
  function Icon({
@@ -968,20 +816,20 @@ function Icon({
968
816
  const resolvedColor = (() => {
969
817
  if (!color) return resolveColor2("primary");
970
818
  if (typeof color === "string") return { color, opacity: 100 };
971
- if (isThemeableValue6(color)) {
819
+ if (isThemeableValue4(color)) {
972
820
  return color.useTheme ? resolveColor2(color.themeKey) : color.value;
973
821
  }
974
822
  if ("color" in color) return color;
975
823
  return resolveColor2("primary");
976
824
  })();
977
825
  const IconComponent = icons[name.toLowerCase()] || icons.check;
978
- const { size: iconSize, strokeWidth } = sizeMap3[size];
826
+ const { size: iconSize, strokeWidth } = sizeMap[size];
979
827
  const colorValue = hexToRgba(resolvedColor.color, resolvedColor.opacity);
980
828
  const wrapperStyle = {
981
829
  display: "flex",
982
830
  justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
983
831
  };
984
- return /* @__PURE__ */ jsx7("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx7(
832
+ return /* @__PURE__ */ jsx5("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx5(
985
833
  IconComponent,
986
834
  {
987
835
  size: iconSize,
@@ -993,14 +841,14 @@ function Icon({
993
841
  var availableIcons = Object.keys(icons);
994
842
 
995
843
  // components/page/Section.tsx
996
- import { jsx as jsx8 } from "react/jsx-runtime";
997
- function isThemeableValue7(value) {
844
+ import { jsx as jsx6 } from "react/jsx-runtime";
845
+ function isThemeableValue5(value) {
998
846
  return typeof value === "object" && value !== null && "useTheme" in value;
999
847
  }
1000
848
  function resolveBackgroundColor(bg, resolveColor2) {
1001
849
  if (!bg) return void 0;
1002
850
  if (typeof bg === "string") return bg;
1003
- if (isThemeableValue7(bg)) {
851
+ if (isThemeableValue5(bg)) {
1004
852
  if (bg.useTheme) {
1005
853
  const themeColor = resolveColor2(bg.themeKey);
1006
854
  return hexToRgba(themeColor.color, themeColor.opacity);
@@ -1041,7 +889,7 @@ function Section({
1041
889
  }) {
1042
890
  const { resolveColor: resolveColor2 } = useTheme();
1043
891
  const DropZone = puck?.renderDropZone;
1044
- return /* @__PURE__ */ jsx8(
892
+ return /* @__PURE__ */ jsx6(
1045
893
  "section",
1046
894
  {
1047
895
  id: anchorLink,
@@ -1056,13 +904,13 @@ function Section({
1056
904
  boxShadow: getShadowCSS(shadow),
1057
905
  borderRadius: `${borderRadius}px`
1058
906
  },
1059
- children: /* @__PURE__ */ jsx8("div", { className: "mx-auto w-full", style: { maxWidth: contentMaxWidth }, children: DropZone && /* @__PURE__ */ jsx8(DropZone, { zone: "content" }) })
907
+ children: /* @__PURE__ */ jsx6("div", { className: "mx-auto w-full", style: { maxWidth: contentMaxWidth }, children: DropZone && /* @__PURE__ */ jsx6(DropZone, { zone: "content" }) })
1060
908
  }
1061
909
  );
1062
910
  }
1063
911
 
1064
912
  // components/page/Container.tsx
1065
- import { jsx as jsx9 } from "react/jsx-runtime";
913
+ import { jsx as jsx7 } from "react/jsx-runtime";
1066
914
  var maxWidthMap2 = {
1067
915
  sm: "640px",
1068
916
  md: "768px",
@@ -1078,7 +926,7 @@ var paddingMap = {
1078
926
  lg: "32px",
1079
927
  xl: "48px"
1080
928
  };
1081
- function isThemeableValue8(value) {
929
+ function isThemeableValue6(value) {
1082
930
  return typeof value === "object" && value !== null && "useTheme" in value;
1083
931
  }
1084
932
  function Container({
@@ -1097,7 +945,7 @@ function Container({
1097
945
  if (!backgroundColor) return null;
1098
946
  if (typeof backgroundColor === "string")
1099
947
  return { color: backgroundColor, opacity: 100 };
1100
- if (isThemeableValue8(backgroundColor)) {
948
+ if (isThemeableValue6(backgroundColor)) {
1101
949
  return backgroundColor.useTheme ? resolveColor2(backgroundColor.themeKey) : backgroundColor.value;
1102
950
  }
1103
951
  if ("color" in backgroundColor) return backgroundColor;
@@ -1116,11 +964,11 @@ function Container({
1116
964
  backgroundColor: resolvedBgColor ? hexToRgba(resolvedBgColor.color, resolvedBgColor.opacity) : void 0,
1117
965
  width: "100%"
1118
966
  };
1119
- return /* @__PURE__ */ jsx9("div", { id, style, children: DropZone && /* @__PURE__ */ jsx9(DropZone, { zone: "container-content" }) });
967
+ return /* @__PURE__ */ jsx7("div", { id, style, children: DropZone && /* @__PURE__ */ jsx7(DropZone, { zone: "container-content" }) });
1120
968
  }
1121
969
 
1122
970
  // components/page/Columns.tsx
1123
- import { jsx as jsx10 } from "react/jsx-runtime";
971
+ import { jsx as jsx8 } from "react/jsx-runtime";
1124
972
  var gapMap = {
1125
973
  none: "0",
1126
974
  sm: "16px",
@@ -1149,11 +997,11 @@ function Columns({
1149
997
  gap: gapMap[gap],
1150
998
  alignItems: alignMap[verticalAlign]
1151
999
  };
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)) });
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)) });
1153
1001
  }
1154
1002
 
1155
1003
  // components/page/Card.tsx
1156
- import { jsx as jsx11 } from "react/jsx-runtime";
1004
+ import { jsx as jsx9 } from "react/jsx-runtime";
1157
1005
  var borderWidthMap = {
1158
1006
  none: "0",
1159
1007
  thin: "1px",
@@ -1181,7 +1029,7 @@ var paddingMap2 = {
1181
1029
  lg: "32px",
1182
1030
  xl: "48px"
1183
1031
  };
1184
- function isThemeableValue9(value) {
1032
+ function isThemeableValue7(value) {
1185
1033
  return typeof value === "object" && value !== null && "useTheme" in value;
1186
1034
  }
1187
1035
  function Card({
@@ -1200,7 +1048,7 @@ function Card({
1200
1048
  if (!backgroundColor) return resolveColor2("background");
1201
1049
  if (typeof backgroundColor === "string")
1202
1050
  return { color: backgroundColor, opacity: 100 };
1203
- if (isThemeableValue9(backgroundColor)) {
1051
+ if (isThemeableValue7(backgroundColor)) {
1204
1052
  return backgroundColor.useTheme ? resolveColor2(backgroundColor.themeKey) : backgroundColor.value;
1205
1053
  }
1206
1054
  if ("color" in backgroundColor) return backgroundColor;
@@ -1210,7 +1058,7 @@ function Card({
1210
1058
  if (!borderColor) return resolveColor2("muted");
1211
1059
  if (typeof borderColor === "string")
1212
1060
  return { color: borderColor, opacity: 100 };
1213
- if (isThemeableValue9(borderColor)) {
1061
+ if (isThemeableValue7(borderColor)) {
1214
1062
  return borderColor.useTheme ? resolveColor2(borderColor.themeKey) : borderColor.value;
1215
1063
  }
1216
1064
  if ("color" in borderColor) return borderColor;
@@ -1223,11 +1071,11 @@ function Card({
1223
1071
  boxShadow: shadowMap2[shadow],
1224
1072
  padding: paddingMap2[padding]
1225
1073
  };
1226
- return /* @__PURE__ */ jsx11("div", { id, style, children: DropZone && /* @__PURE__ */ jsx11(DropZone, { zone: "card-content" }) });
1074
+ return /* @__PURE__ */ jsx9("div", { id, style, children: DropZone && /* @__PURE__ */ jsx9(DropZone, { zone: "card-content" }) });
1227
1075
  }
1228
1076
 
1229
1077
  // components/page/Divider.tsx
1230
- import { jsx as jsx12 } from "react/jsx-runtime";
1078
+ import { jsx as jsx10 } from "react/jsx-runtime";
1231
1079
  var thicknessMap = {
1232
1080
  thin: "1px",
1233
1081
  medium: "2px",
@@ -1245,7 +1093,7 @@ var spacingMap = {
1245
1093
  lg: "32px",
1246
1094
  xl: "48px"
1247
1095
  };
1248
- function isThemeableValue10(value) {
1096
+ function isThemeableValue8(value) {
1249
1097
  return typeof value === "object" && value !== null && "useTheme" in value;
1250
1098
  }
1251
1099
  function Divider({
@@ -1261,7 +1109,7 @@ function Divider({
1261
1109
  const resolvedColor = (() => {
1262
1110
  if (!color) return resolveColor2("muted");
1263
1111
  if (typeof color === "string") return { color, opacity: 100 };
1264
- if (isThemeableValue10(color)) {
1112
+ if (isThemeableValue8(color)) {
1265
1113
  return color.useTheme ? resolveColor2(color.themeKey) : color.value;
1266
1114
  }
1267
1115
  if ("color" in color) return color;
@@ -1278,12 +1126,12 @@ function Divider({
1278
1126
  borderTop: `${thicknessMap[thickness]} ${lineStyle} ${hexToRgba(resolvedColor.color, resolvedColor.opacity)}`,
1279
1127
  margin: 0
1280
1128
  };
1281
- return /* @__PURE__ */ jsx12("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx12("hr", { style: hrStyle }) });
1129
+ return /* @__PURE__ */ jsx10("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx10("hr", { style: hrStyle }) });
1282
1130
  }
1283
1131
 
1284
1132
  // components/page/Spacer.tsx
1285
- import { jsx as jsx13 } from "react/jsx-runtime";
1286
- var sizeMap4 = {
1133
+ import { jsx as jsx11 } from "react/jsx-runtime";
1134
+ var sizeMap2 = {
1287
1135
  xs: "8px",
1288
1136
  sm: "16px",
1289
1137
  md: "24px",
@@ -1294,36 +1142,36 @@ var sizeMap4 = {
1294
1142
  };
1295
1143
  function Spacer({ size = "md", id }) {
1296
1144
  const style = {
1297
- height: sizeMap4[size],
1145
+ height: sizeMap2[size],
1298
1146
  width: "100%"
1299
1147
  };
1300
- return /* @__PURE__ */ jsx13("div", { id, style, "aria-hidden": "true" });
1148
+ return /* @__PURE__ */ jsx11("div", { id, style, "aria-hidden": "true" });
1301
1149
  }
1302
1150
 
1303
1151
  // components/page/TextBlock.tsx
1304
- import { jsx as jsx14, jsxs as jsxs4 } from "react/jsx-runtime";
1152
+ import { jsx as jsx12, jsxs as jsxs4 } from "react/jsx-runtime";
1305
1153
  var alignmentMap = {
1306
1154
  left: "text-left",
1307
1155
  center: "text-center",
1308
1156
  right: "text-right"
1309
1157
  };
1310
- var sizeMap5 = {
1158
+ var sizeMap3 = {
1311
1159
  small: "text-2xl",
1312
1160
  "medium-small": "text-3xl",
1313
1161
  medium: "text-4xl",
1314
1162
  large: "text-5xl",
1315
1163
  xlarge: "text-6xl"
1316
1164
  };
1317
- function isThemeableValue11(value) {
1165
+ function isThemeableValue9(value) {
1318
1166
  return typeof value === "object" && value !== null && "useTheme" in value;
1319
1167
  }
1320
- function isEntryBoundValue6(value) {
1168
+ function isEntryBoundValue4(value) {
1321
1169
  return typeof value === "object" && value !== null && "useEntry" in value;
1322
1170
  }
1323
1171
  function resolveColor(color, resolveThemeColor) {
1324
1172
  if (!color) return "#000000";
1325
1173
  if (typeof color === "string") return color;
1326
- if (isThemeableValue11(color)) {
1174
+ if (isThemeableValue9(color)) {
1327
1175
  if (color.useTheme) {
1328
1176
  const themeColor = resolveThemeColor(color.themeKey);
1329
1177
  return hexToRgba(themeColor.color, themeColor.opacity);
@@ -1338,7 +1186,7 @@ function resolveColor(color, resolveThemeColor) {
1338
1186
  function resolveColorHex(color, resolveThemeColor) {
1339
1187
  if (!color) return "#000000";
1340
1188
  if (typeof color === "string") return color;
1341
- if (isThemeableValue11(color)) {
1189
+ if (isThemeableValue9(color)) {
1342
1190
  if (color.useTheme) {
1343
1191
  return resolveThemeColor(color.themeKey).color;
1344
1192
  }
@@ -1367,7 +1215,7 @@ function TextBlock({
1367
1215
  const resolveText = (value) => {
1368
1216
  if (!value) return void 0;
1369
1217
  if (typeof value === "string") return value;
1370
- if (isEntryBoundValue6(value)) {
1218
+ if (isEntryBoundValue4(value)) {
1371
1219
  if (value.useEntry) {
1372
1220
  const entryVal = getEntryValue(value.entryName, value.fieldKey);
1373
1221
  return entryVal != null ? String(entryVal) : void 0;
@@ -1393,16 +1241,16 @@ function TextBlock({
1393
1241
  id: anchorLink,
1394
1242
  className: cn("flex flex-col gap-4", alignmentMap[alignment]),
1395
1243
  children: [
1396
- resolvedTitle && /* @__PURE__ */ jsx14(
1244
+ resolvedTitle && /* @__PURE__ */ jsx12(
1397
1245
  "h2",
1398
1246
  {
1399
- className: cn("font-bold", sizeMap5[textSize]),
1247
+ className: cn("font-bold", sizeMap3[textSize]),
1400
1248
  style: gradientStyle,
1401
1249
  children: resolvedTitle
1402
1250
  }
1403
1251
  ),
1404
- resolvedSubtitle && /* @__PURE__ */ jsx14("p", { className: "text-xl", style: { color: subtitleColorValue }, children: resolvedSubtitle }),
1405
- resolvedBody && /* @__PURE__ */ jsx14(
1252
+ resolvedSubtitle && /* @__PURE__ */ jsx12("p", { className: "text-xl", style: { color: subtitleColorValue }, children: resolvedSubtitle }),
1253
+ resolvedBody && /* @__PURE__ */ jsx12(
1406
1254
  "div",
1407
1255
  {
1408
1256
  className: "prose max-w-none",
@@ -1416,7 +1264,7 @@ function TextBlock({
1416
1264
  }
1417
1265
 
1418
1266
  // components/page/CustomImage.tsx
1419
- import { jsx as jsx15 } from "react/jsx-runtime";
1267
+ import { jsx as jsx13 } from "react/jsx-runtime";
1420
1268
  var alignmentMap2 = {
1421
1269
  left: "mr-auto",
1422
1270
  center: "mx-auto",
@@ -1430,9 +1278,9 @@ function CustomImage({
1430
1278
  fitContent = false
1431
1279
  }) {
1432
1280
  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" });
1281
+ return /* @__PURE__ */ jsx13("div", { className: "flex h-48 w-full items-center justify-center bg-gray-200 text-gray-400", children: "No image" });
1434
1282
  }
1435
- return /* @__PURE__ */ jsx15(
1283
+ return /* @__PURE__ */ jsx13(
1436
1284
  "img",
1437
1285
  {
1438
1286
  src: image,
@@ -1449,8 +1297,8 @@ function CustomImage({
1449
1297
 
1450
1298
  // components/page/FeaturesList.tsx
1451
1299
  import { icons as icons2 } from "lucide-react";
1452
- import { jsx as jsx16, jsxs as jsxs5 } from "react/jsx-runtime";
1453
- var sizeMap6 = {
1300
+ import { jsx as jsx14, jsxs as jsxs5 } from "react/jsx-runtime";
1301
+ var sizeMap4 = {
1454
1302
  small: { icon: 24, title: "text-base", desc: "text-sm" },
1455
1303
  medium: { icon: 32, title: "text-lg", desc: "text-base" },
1456
1304
  large: { icon: 48, title: "text-xl", desc: "text-lg" }
@@ -1462,12 +1310,12 @@ function FeaturesList({
1462
1310
  iconColor = "#000000",
1463
1311
  anchorLink
1464
1312
  }) {
1465
- const sizeConfig = sizeMap6[size];
1313
+ const sizeConfig = sizeMap4[size];
1466
1314
  const getIcon = (iconName) => {
1467
1315
  const formatted = iconName.charAt(0).toUpperCase() + iconName.slice(1);
1468
1316
  return icons2[formatted] || null;
1469
1317
  };
1470
- return /* @__PURE__ */ jsx16(
1318
+ return /* @__PURE__ */ jsx14(
1471
1319
  "div",
1472
1320
  {
1473
1321
  id: anchorLink,
@@ -1487,7 +1335,7 @@ function FeaturesList({
1487
1335
  align === "right" && "flex-row-reverse"
1488
1336
  ),
1489
1337
  children: [
1490
- feature.image ? /* @__PURE__ */ jsx16(
1338
+ feature.image ? /* @__PURE__ */ jsx14(
1491
1339
  "img",
1492
1340
  {
1493
1341
  src: feature.image,
@@ -1495,7 +1343,7 @@ function FeaturesList({
1495
1343
  className: "object-contain",
1496
1344
  style: { width: sizeConfig.icon, height: sizeConfig.icon }
1497
1345
  }
1498
- ) : IconComponent ? /* @__PURE__ */ jsx16(
1346
+ ) : IconComponent ? /* @__PURE__ */ jsx14(
1499
1347
  IconComponent,
1500
1348
  {
1501
1349
  size: sizeConfig.icon,
@@ -1504,8 +1352,8 @@ function FeaturesList({
1504
1352
  }
1505
1353
  ) : null,
1506
1354
  /* @__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 })
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 })
1509
1357
  ] })
1510
1358
  ]
1511
1359
  },
@@ -1518,8 +1366,8 @@ function FeaturesList({
1518
1366
 
1519
1367
  // components/page/FeatureGrid.tsx
1520
1368
  import { icons as icons3 } from "lucide-react";
1521
- import { jsx as jsx17, jsxs as jsxs6 } from "react/jsx-runtime";
1522
- var sizeMap7 = {
1369
+ import { jsx as jsx15, jsxs as jsxs6 } from "react/jsx-runtime";
1370
+ var sizeMap5 = {
1523
1371
  small: { icon: 24, title: "text-base", desc: "text-sm" },
1524
1372
  medium: { icon: 32, title: "text-lg", desc: "text-base" },
1525
1373
  large: { icon: 48, title: "text-xl", desc: "text-lg" }
@@ -1535,7 +1383,7 @@ function FeatureGrid({
1535
1383
  textColor = "#000000",
1536
1384
  anchorLink
1537
1385
  }) {
1538
- const sizeConfig = sizeMap7[size];
1386
+ const sizeConfig = sizeMap5[size];
1539
1387
  const getIcon = (iconName) => {
1540
1388
  const formatted = iconName.charAt(0).toUpperCase() + iconName.slice(1);
1541
1389
  return icons3[formatted] || null;
@@ -1555,12 +1403,12 @@ function FeatureGrid({
1555
1403
  align === "right" && "text-right"
1556
1404
  ),
1557
1405
  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 })
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 })
1560
1408
  ]
1561
1409
  }
1562
1410
  ),
1563
- /* @__PURE__ */ jsx17("div", { className: cn("grid gap-6", columnClass[columns]), children: features.map((feature, index) => {
1411
+ /* @__PURE__ */ jsx15("div", { className: cn("grid gap-6", columnClass[columns]), children: features.map((feature, index) => {
1564
1412
  const IconComponent = feature.icon ? getIcon(feature.icon) : null;
1565
1413
  return /* @__PURE__ */ jsxs6(
1566
1414
  "div",
@@ -1570,7 +1418,7 @@ function FeatureGrid({
1570
1418
  align === "center" && "items-center text-center"
1571
1419
  ),
1572
1420
  children: [
1573
- feature.image ? /* @__PURE__ */ jsx17(
1421
+ feature.image ? /* @__PURE__ */ jsx15(
1574
1422
  "img",
1575
1423
  {
1576
1424
  src: feature.image,
@@ -1578,14 +1426,14 @@ function FeatureGrid({
1578
1426
  className: "object-contain",
1579
1427
  style: { width: sizeConfig.icon, height: sizeConfig.icon }
1580
1428
  }
1581
- ) : IconComponent ? /* @__PURE__ */ jsx17(
1429
+ ) : IconComponent ? /* @__PURE__ */ jsx15(
1582
1430
  IconComponent,
1583
1431
  {
1584
1432
  size: sizeConfig.icon,
1585
1433
  style: { color: iconColor }
1586
1434
  }
1587
1435
  ) : null,
1588
- feature.title && /* @__PURE__ */ jsx17(
1436
+ feature.title && /* @__PURE__ */ jsx15(
1589
1437
  "h3",
1590
1438
  {
1591
1439
  className: cn("font-semibold", sizeConfig.title),
@@ -1593,7 +1441,7 @@ function FeatureGrid({
1593
1441
  children: feature.title
1594
1442
  }
1595
1443
  ),
1596
- feature.description && /* @__PURE__ */ jsx17("p", { className: cn("text-gray-600", sizeConfig.desc), children: feature.description })
1444
+ feature.description && /* @__PURE__ */ jsx15("p", { className: cn("text-gray-600", sizeConfig.desc), children: feature.description })
1597
1445
  ]
1598
1446
  },
1599
1447
  index
@@ -1604,7 +1452,7 @@ function FeatureGrid({
1604
1452
 
1605
1453
  // components/page/Footer.tsx
1606
1454
  import { Facebook, Instagram, Twitter } from "lucide-react";
1607
- import { jsx as jsx18, jsxs as jsxs7 } from "react/jsx-runtime";
1455
+ import { jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
1608
1456
  function Footer({
1609
1457
  logo,
1610
1458
  copyright = "\xA9 2024 Company. All rights reserved.",
@@ -1639,15 +1487,15 @@ function Footer({
1639
1487
  ].filter(
1640
1488
  (link) => !!link.url
1641
1489
  );
1642
- return /* @__PURE__ */ jsx18(
1490
+ return /* @__PURE__ */ jsx16(
1643
1491
  "footer",
1644
1492
  {
1645
1493
  className: "w-full px-6 py-8",
1646
1494
  style: { backgroundColor, color: textColor },
1647
1495
  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(
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(
1651
1499
  "a",
1652
1500
  {
1653
1501
  href: url,
@@ -1655,11 +1503,11 @@ function Footer({
1655
1503
  rel: "noopener noreferrer",
1656
1504
  className: "transition-opacity hover:opacity-80",
1657
1505
  onClick: () => handleSocialClick(url),
1658
- children: /* @__PURE__ */ jsx18(Icon3, { size: 24, style: { color: textColor } })
1506
+ children: /* @__PURE__ */ jsx16(Icon3, { size: 24, style: { color: textColor } })
1659
1507
  },
1660
1508
  index
1661
1509
  )) }),
1662
- copyright && /* @__PURE__ */ jsx18("p", { className: "text-sm opacity-80", children: copyright })
1510
+ copyright && /* @__PURE__ */ jsx16("p", { className: "text-sm opacity-80", children: copyright })
1663
1511
  ] })
1664
1512
  }
1665
1513
  );
@@ -1668,7 +1516,7 @@ function Footer({
1668
1516
  // components/page/Topbar.tsx
1669
1517
  import { useState as useState2 } from "react";
1670
1518
  import { Menu, X } from "lucide-react";
1671
- import { jsx as jsx19, jsxs as jsxs8 } from "react/jsx-runtime";
1519
+ import { jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
1672
1520
  function Topbar({
1673
1521
  logo,
1674
1522
  logoUrl = "/",
@@ -1701,7 +1549,7 @@ function Topbar({
1701
1549
  const renderLink = (item, index) => {
1702
1550
  const className = "hover:opacity-80 transition-opacity";
1703
1551
  if (item.linkType === "external") {
1704
- return /* @__PURE__ */ jsx19(
1552
+ return /* @__PURE__ */ jsx17(
1705
1553
  "a",
1706
1554
  {
1707
1555
  href: item.url,
@@ -1715,7 +1563,7 @@ function Topbar({
1715
1563
  );
1716
1564
  }
1717
1565
  if (item.linkType === "scrollTo") {
1718
- return /* @__PURE__ */ jsx19(
1566
+ return /* @__PURE__ */ jsx17(
1719
1567
  "a",
1720
1568
  {
1721
1569
  href: item.url,
@@ -1726,7 +1574,7 @@ function Topbar({
1726
1574
  index
1727
1575
  );
1728
1576
  }
1729
- return /* @__PURE__ */ jsx19(
1577
+ return /* @__PURE__ */ jsx17(
1730
1578
  "a",
1731
1579
  {
1732
1580
  href: item.url,
@@ -1749,7 +1597,7 @@ function Topbar({
1749
1597
  className: "mx-auto flex items-center justify-between",
1750
1598
  style: { maxWidth },
1751
1599
  children: [
1752
- /* @__PURE__ */ jsx19(
1600
+ /* @__PURE__ */ jsx17(
1753
1601
  "a",
1754
1602
  {
1755
1603
  href: logoUrl,
@@ -1760,14 +1608,14 @@ function Topbar({
1760
1608
  linkType: "internal",
1761
1609
  ...utm
1762
1610
  }),
1763
- children: logo ? /* @__PURE__ */ jsx19("img", { src: logo, alt: "Logo", className: "h-8" }) : /* @__PURE__ */ jsx19("span", { className: "text-xl font-bold", children: "Logo" })
1611
+ children: logo ? /* @__PURE__ */ jsx17("img", { src: logo, alt: "Logo", className: "h-8" }) : /* @__PURE__ */ jsx17("span", { className: "text-xl font-bold", children: "Logo" })
1764
1612
  }
1765
1613
  ),
1766
1614
  /* @__PURE__ */ jsxs8("div", { className: "hidden items-center gap-8 md:flex", children: [
1767
1615
  navItems.map(renderLink),
1768
- DropZone && /* @__PURE__ */ jsx19(DropZone, { zone: "cta" })
1616
+ DropZone && /* @__PURE__ */ jsx17(DropZone, { zone: "cta" })
1769
1617
  ] }),
1770
- /* @__PURE__ */ jsx19("button", { className: "md:hidden", onClick: handleMobileMenuToggle, children: mobileMenuOpen ? /* @__PURE__ */ jsx19(X, { size: 24 }) : /* @__PURE__ */ jsx19(Menu, { size: 24 }) })
1618
+ /* @__PURE__ */ jsx17("button", { className: "md:hidden", onClick: handleMobileMenuToggle, children: mobileMenuOpen ? /* @__PURE__ */ jsx17(X, { size: 24 }) : /* @__PURE__ */ jsx17(Menu, { size: 24 }) })
1771
1619
  ]
1772
1620
  }
1773
1621
  ),
@@ -1778,7 +1626,7 @@ function Topbar({
1778
1626
  style: { backgroundColor },
1779
1627
  children: [
1780
1628
  navItems.map(renderLink),
1781
- DropZone && /* @__PURE__ */ jsx19(DropZone, { zone: "cta" })
1629
+ DropZone && /* @__PURE__ */ jsx17(DropZone, { zone: "cta" })
1782
1630
  ]
1783
1631
  }
1784
1632
  )
@@ -1790,19 +1638,19 @@ function Topbar({
1790
1638
  // components/page/Popup.tsx
1791
1639
  import { useState as useState3 } from "react";
1792
1640
  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";
1641
+ import { Fragment as Fragment2, jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
1794
1642
  function Icon2({ name, ...props }) {
1795
1643
  const formatted = name.charAt(0).toUpperCase() + name.slice(1);
1796
1644
  const IconComponent = icons4[formatted];
1797
1645
  if (!IconComponent) return null;
1798
- return /* @__PURE__ */ jsx20(IconComponent, { ...props });
1646
+ return /* @__PURE__ */ jsx18(IconComponent, { ...props });
1799
1647
  }
1800
1648
  var widthMap3 = {
1801
1649
  small: "max-w-sm",
1802
1650
  medium: "max-w-lg",
1803
1651
  large: "max-w-2xl"
1804
1652
  };
1805
- var sizeMap8 = {
1653
+ var sizeMap6 = {
1806
1654
  small: "px-3 py-1.5 text-sm",
1807
1655
  medium: "px-4 py-2 text-base",
1808
1656
  large: "px-6 py-3 text-lg"
@@ -1833,7 +1681,7 @@ function Popup({
1833
1681
  setIsOpen(false);
1834
1682
  sendEvent("popup_close", { ctaText, ...utm });
1835
1683
  };
1836
- const trigger = textLink ? /* @__PURE__ */ jsx20(
1684
+ const trigger = textLink ? /* @__PURE__ */ jsx18(
1837
1685
  "button",
1838
1686
  {
1839
1687
  onClick: handleOpen,
@@ -1847,19 +1695,19 @@ function Popup({
1847
1695
  onClick: handleOpen,
1848
1696
  className: cn(
1849
1697
  "flex items-center gap-2 rounded-full font-medium",
1850
- sizeMap8[size]
1698
+ sizeMap6[size]
1851
1699
  ),
1852
1700
  style: { backgroundColor: buttonColor, color: textColor },
1853
1701
  children: [
1854
- icon && iconPosition === "left" && /* @__PURE__ */ jsx20(Icon2, { name: icon, size: 18 }),
1702
+ icon && iconPosition === "left" && /* @__PURE__ */ jsx18(Icon2, { name: icon, size: 18 }),
1855
1703
  ctaText,
1856
- icon && iconPosition === "right" && /* @__PURE__ */ jsx20(Icon2, { name: icon, size: 18 })
1704
+ icon && iconPosition === "right" && /* @__PURE__ */ jsx18(Icon2, { name: icon, size: 18 })
1857
1705
  ]
1858
1706
  }
1859
1707
  );
1860
1708
  return /* @__PURE__ */ jsxs9(Fragment2, { children: [
1861
1709
  trigger,
1862
- isOpen && /* @__PURE__ */ jsx20(
1710
+ isOpen && /* @__PURE__ */ jsx18(
1863
1711
  "div",
1864
1712
  {
1865
1713
  className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4",
@@ -1873,15 +1721,15 @@ function Popup({
1873
1721
  ),
1874
1722
  onClick: (e) => e.stopPropagation(),
1875
1723
  children: [
1876
- /* @__PURE__ */ jsx20(
1724
+ /* @__PURE__ */ jsx18(
1877
1725
  "button",
1878
1726
  {
1879
1727
  onClick: handleClose,
1880
1728
  className: "absolute top-4 right-4 text-gray-500 hover:text-gray-700",
1881
- children: /* @__PURE__ */ jsx20(X2, { size: 24 })
1729
+ children: /* @__PURE__ */ jsx18(X2, { size: 24 })
1882
1730
  }
1883
1731
  ),
1884
- puck && /* @__PURE__ */ jsx20(puck.renderDropZone, { zone: "popup-content" })
1732
+ puck && /* @__PURE__ */ jsx18(puck.renderDropZone, { zone: "popup-content" })
1885
1733
  ]
1886
1734
  }
1887
1735
  )
@@ -1890,9 +1738,79 @@ function Popup({
1890
1738
  ] });
1891
1739
  }
1892
1740
 
1741
+ // components/page/primitives/Heading.ts
1742
+ var headingSizeMap = {
1743
+ xs: "0.875rem",
1744
+ sm: "1rem",
1745
+ md: "1.25rem",
1746
+ lg: "1.5rem",
1747
+ xl: "2rem",
1748
+ "2xl": "2.5rem",
1749
+ "3xl": "3rem",
1750
+ "4xl": "4rem"
1751
+ };
1752
+ var headingWeightMap = {
1753
+ normal: 400,
1754
+ medium: 500,
1755
+ semibold: 600,
1756
+ bold: 700,
1757
+ extrabold: 800
1758
+ };
1759
+ var headingLetterSpacingMap = {
1760
+ tight: "-0.025em",
1761
+ normal: "0",
1762
+ wide: "0.05em"
1763
+ };
1764
+ var headingLineHeightMap = {
1765
+ tight: "1.1",
1766
+ normal: "1.4",
1767
+ relaxed: "1.6"
1768
+ };
1769
+ function getHeadingStyle(props) {
1770
+ return {
1771
+ fontSize: headingSizeMap[props.size],
1772
+ fontWeight: headingWeightMap[props.weight],
1773
+ color: props.color,
1774
+ textAlign: props.align,
1775
+ letterSpacing: headingLetterSpacingMap[props.letterSpacing],
1776
+ lineHeight: headingLineHeightMap[props.lineHeight],
1777
+ margin: 0
1778
+ };
1779
+ }
1780
+
1781
+ // components/page/primitives/Paragraph.ts
1782
+ var paragraphSizeMap = {
1783
+ sm: "0.875rem",
1784
+ base: "1rem",
1785
+ lg: "1.125rem",
1786
+ xl: "1.25rem"
1787
+ };
1788
+ var paragraphWeightMap = {
1789
+ normal: 400,
1790
+ medium: 500,
1791
+ semibold: 600
1792
+ };
1793
+ var paragraphLineHeightMap = {
1794
+ tight: "1.4",
1795
+ normal: "1.6",
1796
+ relaxed: "1.75",
1797
+ loose: "2"
1798
+ };
1799
+ function getParagraphStyle(props) {
1800
+ return {
1801
+ fontSize: paragraphSizeMap[props.size],
1802
+ fontWeight: paragraphWeightMap[props.weight],
1803
+ color: props.color,
1804
+ textAlign: props.align,
1805
+ lineHeight: paragraphLineHeightMap[props.lineHeight],
1806
+ maxWidth: props.maxWidth || void 0,
1807
+ margin: 0
1808
+ };
1809
+ }
1810
+
1893
1811
  export {
1894
- Heading,
1895
- Paragraph,
1812
+ getHeadingStyle,
1813
+ getParagraphStyle,
1896
1814
  Button,
1897
1815
  Image,
1898
1816
  ImageCarousel,