@mission-studio/puck 1.0.20 → 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.
@@ -3,87 +3,17 @@ import {
3
3
  useEntries,
4
4
  useTheme
5
5
  } from "./chunk-PJXZC564.mjs";
6
- import {
7
- cn,
8
- hexToRgba
9
- } from "./chunk-C6V3YUPF.mjs";
10
6
  import {
11
7
  useGtmEvent,
12
8
  useUtmParams
13
9
  } from "./chunk-QSWQDR6M.mjs";
14
-
15
- // components/page/Paragraph.tsx
16
- import { jsx } from "react/jsx-runtime";
17
- var sizeMap = {
18
- sm: "0.875rem",
19
- base: "1rem",
20
- lg: "1.125rem",
21
- xl: "1.25rem"
22
- };
23
- var weightMap = {
24
- normal: 400,
25
- medium: 500,
26
- semibold: 600
27
- };
28
- var lineHeightMap = {
29
- tight: "1.4",
30
- normal: "1.6",
31
- relaxed: "1.75",
32
- loose: "2"
33
- };
34
- function isThemeableValue(value) {
35
- return typeof value === "object" && value !== null && "useTheme" in value;
36
- }
37
- function isEntryBoundValue(value) {
38
- return typeof value === "object" && value !== null && "useEntry" in value;
39
- }
40
- function Paragraph({
41
- text,
42
- size = "base",
43
- weight = "normal",
44
- color,
45
- align = "left",
46
- lineHeight = "normal",
47
- maxWidth,
48
- id
49
- }) {
50
- const { resolveColor: resolveColor2 } = useTheme();
51
- const { getEntryValue } = useEntries();
52
- const resolvedText = (() => {
53
- if (!text) return "";
54
- if (typeof text === "string") return text;
55
- if (isEntryBoundValue(text)) {
56
- if (text.useEntry) {
57
- return String(getEntryValue(text.entryName, text.fieldKey) ?? "");
58
- }
59
- return text.value;
60
- }
61
- return "";
62
- })();
63
- const resolvedColor = (() => {
64
- if (!color) return resolveColor2("foreground");
65
- if (typeof color === "string") return { color, opacity: 100 };
66
- if (isThemeableValue(color)) {
67
- return color.useTheme ? resolveColor2(color.themeKey) : color.value;
68
- }
69
- if ("color" in color) return color;
70
- return resolveColor2("foreground");
71
- })();
72
- const style = {
73
- fontSize: sizeMap[size],
74
- fontWeight: weightMap[weight],
75
- color: hexToRgba(resolvedColor.color, resolvedColor.opacity),
76
- textAlign: align,
77
- lineHeight: lineHeightMap[lineHeight],
78
- maxWidth: maxWidth || void 0,
79
- margin: 0
80
- };
81
- if (!resolvedText) return null;
82
- return /* @__PURE__ */ jsx("p", { id, style, children: resolvedText });
83
- }
10
+ import {
11
+ cn,
12
+ hexToRgba
13
+ } from "./chunk-C6V3YUPF.mjs";
84
14
 
85
15
  // components/page/Button.tsx
86
- import { jsx as jsx2 } from "react/jsx-runtime";
16
+ import { jsx } from "react/jsx-runtime";
87
17
  var sizeStyles = {
88
18
  sm: { padding: "8px 16px", fontSize: "0.875rem" },
89
19
  md: { padding: "12px 24px", fontSize: "1rem" },
@@ -97,10 +27,10 @@ var radiusMap = {
97
27
  lg: "16px",
98
28
  full: "9999px"
99
29
  };
100
- function isThemeableValue2(value) {
30
+ function isThemeableValue(value) {
101
31
  return typeof value === "object" && value !== null && "useTheme" in value;
102
32
  }
103
- function isEntryBoundValue2(value) {
33
+ function isEntryBoundValue(value) {
104
34
  return typeof value === "object" && value !== null && "useEntry" in value;
105
35
  }
106
36
  function Button({
@@ -123,7 +53,7 @@ function Button({
123
53
  const resolvedText = (() => {
124
54
  if (!text) return "Button";
125
55
  if (typeof text === "string") return text;
126
- if (isEntryBoundValue2(text)) {
56
+ if (isEntryBoundValue(text)) {
127
57
  if (text.useEntry) {
128
58
  return String(getEntryValue(text.entryName, text.fieldKey) ?? "Button");
129
59
  }
@@ -144,7 +74,7 @@ function Button({
144
74
  const resolvedColor = (() => {
145
75
  if (!color) return resolveColor2("primary");
146
76
  if (typeof color === "string") return { color, opacity: 100 };
147
- if (isThemeableValue2(color)) {
77
+ if (isThemeableValue(color)) {
148
78
  return color.useTheme ? resolveColor2(color.themeKey) : color.value;
149
79
  }
150
80
  if ("color" in color) return color;
@@ -157,7 +87,7 @@ function Button({
157
87
  }
158
88
  if (typeof textColor === "string")
159
89
  return { color: textColor, opacity: 100 };
160
- if (isThemeableValue2(textColor)) {
90
+ if (isThemeableValue(textColor)) {
161
91
  return textColor.useTheme ? resolveColor2(textColor.themeKey) : textColor.value;
162
92
  }
163
93
  if ("color" in textColor) return textColor;
@@ -204,9 +134,9 @@ function Button({
204
134
  display: "flex",
205
135
  justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
206
136
  };
207
- const content = /* @__PURE__ */ jsx2("span", { style, children: resolvedText });
137
+ const content = /* @__PURE__ */ jsx("span", { style, children: resolvedText });
208
138
  if (href) {
209
- return /* @__PURE__ */ jsx2("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx2(
139
+ return /* @__PURE__ */ jsx("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx(
210
140
  "a",
211
141
  {
212
142
  id,
@@ -219,11 +149,11 @@ function Button({
219
149
  }
220
150
  ) });
221
151
  }
222
- return /* @__PURE__ */ jsx2("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx2("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 }) });
223
153
  }
224
154
 
225
155
  // components/page/Image.tsx
226
- import { jsx as jsx3, jsxs } from "react/jsx-runtime";
156
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
227
157
  var widthMap = {
228
158
  auto: "auto",
229
159
  full: "100%",
@@ -254,10 +184,10 @@ var shadowMap = {
254
184
  lg: "0 10px 15px rgba(0,0,0,0.1)",
255
185
  xl: "0 20px 25px rgba(0,0,0,0.15)"
256
186
  };
257
- function isThemeableValue3(value) {
187
+ function isThemeableValue2(value) {
258
188
  return typeof value === "object" && value !== null && "useTheme" in value;
259
189
  }
260
- function isEntryBoundValue3(value) {
190
+ function isEntryBoundValue2(value) {
261
191
  return typeof value === "object" && value !== null && "useEntry" in value;
262
192
  }
263
193
  function Image({
@@ -278,7 +208,7 @@ function Image({
278
208
  const resolvedSrc = (() => {
279
209
  if (!src) return "";
280
210
  if (typeof src === "string") return src;
281
- if (isEntryBoundValue3(src)) {
211
+ if (isEntryBoundValue2(src)) {
282
212
  if (src.useEntry) {
283
213
  return String(getEntryValue(src.entryName, src.fieldKey) ?? "");
284
214
  }
@@ -289,7 +219,7 @@ function Image({
289
219
  const resolvedCaption = (() => {
290
220
  if (!caption) return "";
291
221
  if (typeof caption === "string") return caption;
292
- if (isEntryBoundValue3(caption)) {
222
+ if (isEntryBoundValue2(caption)) {
293
223
  if (caption.useEntry) {
294
224
  return String(getEntryValue(caption.entryName, caption.fieldKey) ?? "");
295
225
  }
@@ -301,7 +231,7 @@ function Image({
301
231
  if (!captionColor) return resolveColor2("muted");
302
232
  if (typeof captionColor === "string")
303
233
  return { color: captionColor, opacity: 100 };
304
- if (isThemeableValue3(captionColor)) {
234
+ if (isThemeableValue2(captionColor)) {
305
235
  return captionColor.useTheme ? resolveColor2(captionColor.themeKey) : captionColor.value;
306
236
  }
307
237
  if ("color" in captionColor) return captionColor;
@@ -329,7 +259,7 @@ function Image({
329
259
  maxWidth: widthMap[width]
330
260
  };
331
261
  if (!resolvedSrc) {
332
- return /* @__PURE__ */ jsx3("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx3(
262
+ return /* @__PURE__ */ jsx2("div", { style: wrapperStyle, children: /* @__PURE__ */ jsx2(
333
263
  "div",
334
264
  {
335
265
  style: {
@@ -346,14 +276,14 @@ function Image({
346
276
  ) });
347
277
  }
348
278
  return /* @__PURE__ */ jsxs("figure", { id, style: { ...wrapperStyle, margin: 0 }, children: [
349
- /* @__PURE__ */ jsx3("img", { src: resolvedSrc, alt, style: imageStyle, loading: "lazy" }),
350
- resolvedCaption && /* @__PURE__ */ jsx3("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 })
351
281
  ] });
352
282
  }
353
283
 
354
284
  // components/page/ImageCarousel.tsx
355
285
  import { useState } from "react";
356
- import { Fragment, jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
286
+ import { Fragment, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
357
287
  var aspectRatioMap2 = {
358
288
  "16:9": "16 / 9",
359
289
  "4:3": "4 / 3",
@@ -366,7 +296,7 @@ var radiusMap3 = {
366
296
  md: "8px",
367
297
  lg: "16px"
368
298
  };
369
- function isThemeableValue4(value) {
299
+ function isThemeableValue3(value) {
370
300
  return typeof value === "object" && value !== null && "useTheme" in value;
371
301
  }
372
302
  function ImageCarousel({
@@ -387,7 +317,7 @@ function ImageCarousel({
387
317
  if (!arrowColor) return { color: "#FFFFFF", opacity: 100 };
388
318
  if (typeof arrowColor === "string")
389
319
  return { color: arrowColor, opacity: 100 };
390
- if (isThemeableValue4(arrowColor)) {
320
+ if (isThemeableValue3(arrowColor)) {
391
321
  return arrowColor.useTheme ? resolveColor2(arrowColor.themeKey) : arrowColor.value;
392
322
  }
393
323
  if ("color" in arrowColor) return arrowColor;
@@ -396,7 +326,7 @@ function ImageCarousel({
396
326
  const resolvedDotColor = (() => {
397
327
  if (!dotColor) return resolveColor2("primary");
398
328
  if (typeof dotColor === "string") return { color: dotColor, opacity: 100 };
399
- if (isThemeableValue4(dotColor)) {
329
+ if (isThemeableValue3(dotColor)) {
400
330
  return dotColor.useTheme ? resolveColor2(dotColor.themeKey) : dotColor.value;
401
331
  }
402
332
  if ("color" in dotColor) return dotColor;
@@ -432,7 +362,7 @@ function ImageCarousel({
432
362
  });
433
363
  };
434
364
  if (images.length === 0) {
435
- return /* @__PURE__ */ jsx4(
365
+ return /* @__PURE__ */ jsx3(
436
366
  "div",
437
367
  {
438
368
  style: {
@@ -504,7 +434,7 @@ function ImageCarousel({
504
434
  backgroundColor: isActive ? hexToRgba(resolvedDotColor.color, resolvedDotColor.opacity) : "rgba(255,255,255,0.5)"
505
435
  });
506
436
  return /* @__PURE__ */ jsxs2("div", { id, style: containerStyle, children: [
507
- /* @__PURE__ */ jsx4("div", { style: slideContainerStyle, children: images.map((image, index) => /* @__PURE__ */ jsx4("div", { style: slideStyle, children: /* @__PURE__ */ jsx4(
437
+ /* @__PURE__ */ jsx3("div", { style: slideContainerStyle, children: images.map((image, index) => /* @__PURE__ */ jsx3("div", { style: slideStyle, children: /* @__PURE__ */ jsx3(
508
438
  "img",
509
439
  {
510
440
  src: image.src,
@@ -514,7 +444,7 @@ function ImageCarousel({
514
444
  }
515
445
  ) }, index)) }),
516
446
  showArrows && images.length > 1 && /* @__PURE__ */ jsxs2(Fragment, { children: [
517
- /* @__PURE__ */ jsx4(
447
+ /* @__PURE__ */ jsx3(
518
448
  "button",
519
449
  {
520
450
  type: "button",
@@ -524,7 +454,7 @@ function ImageCarousel({
524
454
  children: "\u2039"
525
455
  }
526
456
  ),
527
- /* @__PURE__ */ jsx4(
457
+ /* @__PURE__ */ jsx3(
528
458
  "button",
529
459
  {
530
460
  type: "button",
@@ -535,7 +465,7 @@ function ImageCarousel({
535
465
  }
536
466
  )
537
467
  ] }),
538
- showDots && images.length > 1 && /* @__PURE__ */ jsx4("div", { style: dotsContainerStyle, children: images.map((_, index) => /* @__PURE__ */ jsx4(
468
+ showDots && images.length > 1 && /* @__PURE__ */ jsx3("div", { style: dotsContainerStyle, children: images.map((_, index) => /* @__PURE__ */ jsx3(
539
469
  "button",
540
470
  {
541
471
  type: "button",
@@ -549,7 +479,7 @@ function ImageCarousel({
549
479
  }
550
480
 
551
481
  // components/page/VideoEmbed.tsx
552
- import { jsx as jsx5 } from "react/jsx-runtime";
482
+ import { jsx as jsx4 } from "react/jsx-runtime";
553
483
  var aspectRatioMap3 = {
554
484
  "16:9": "56.25%",
555
485
  // 9/16 * 100
@@ -570,7 +500,7 @@ var maxWidthMap = {
570
500
  xl: "1000px",
571
501
  full: "100%"
572
502
  };
573
- function isEntryBoundValue4(value) {
503
+ function isEntryBoundValue3(value) {
574
504
  return typeof value === "object" && value !== null && "useEntry" in value;
575
505
  }
576
506
  function parseVideoUrl(url) {
@@ -607,7 +537,7 @@ function VideoEmbed({
607
537
  const resolvedUrl = (() => {
608
538
  if (!url) return "";
609
539
  if (typeof url === "string") return url;
610
- if (isEntryBoundValue4(url)) {
540
+ if (isEntryBoundValue3(url)) {
611
541
  if (url.useEntry) {
612
542
  return String(getEntryValue(url.entryName, url.fieldKey) ?? "");
613
543
  }
@@ -616,7 +546,7 @@ function VideoEmbed({
616
546
  return "";
617
547
  })();
618
548
  if (!resolvedUrl) {
619
- return /* @__PURE__ */ jsx5(
549
+ return /* @__PURE__ */ jsx4(
620
550
  "div",
621
551
  {
622
552
  style: {
@@ -661,7 +591,7 @@ function VideoEmbed({
661
591
  height: "100%",
662
592
  border: "none"
663
593
  };
664
- return /* @__PURE__ */ jsx5("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx5("div", { style: containerStyle, children: /* @__PURE__ */ jsx5(
594
+ return /* @__PURE__ */ jsx4("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx4("div", { style: containerStyle, children: /* @__PURE__ */ jsx4(
665
595
  "iframe",
666
596
  {
667
597
  src: finalUrl,
@@ -674,8 +604,8 @@ function VideoEmbed({
674
604
  }
675
605
 
676
606
  // components/page/Icon.tsx
677
- import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
678
- var sizeMap2 = {
607
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
608
+ var sizeMap = {
679
609
  sm: { size: "16px", strokeWidth: 2 },
680
610
  md: { size: "24px", strokeWidth: 2 },
681
611
  lg: { size: "32px", strokeWidth: 1.5 },
@@ -683,7 +613,7 @@ var sizeMap2 = {
683
613
  "2xl": { size: "64px", strokeWidth: 1.5 }
684
614
  };
685
615
  var icons = {
686
- check: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx6(
616
+ check: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
687
617
  "svg",
688
618
  {
689
619
  width: size,
@@ -694,7 +624,7 @@ var icons = {
694
624
  strokeWidth,
695
625
  strokeLinecap: "round",
696
626
  strokeLinejoin: "round",
697
- children: /* @__PURE__ */ jsx6("polyline", { points: "20 6 9 17 4 12" })
627
+ children: /* @__PURE__ */ jsx5("polyline", { points: "20 6 9 17 4 12" })
698
628
  }
699
629
  ),
700
630
  x: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
@@ -709,12 +639,12 @@ var icons = {
709
639
  strokeLinecap: "round",
710
640
  strokeLinejoin: "round",
711
641
  children: [
712
- /* @__PURE__ */ jsx6("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
713
- /* @__PURE__ */ jsx6("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" })
714
644
  ]
715
645
  }
716
646
  ),
717
- star: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx6(
647
+ star: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
718
648
  "svg",
719
649
  {
720
650
  width: size,
@@ -725,10 +655,10 @@ var icons = {
725
655
  strokeWidth,
726
656
  strokeLinecap: "round",
727
657
  strokeLinejoin: "round",
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" })
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" })
729
659
  }
730
660
  ),
731
- heart: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx6(
661
+ heart: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
732
662
  "svg",
733
663
  {
734
664
  width: size,
@@ -739,7 +669,7 @@ var icons = {
739
669
  strokeWidth,
740
670
  strokeLinecap: "round",
741
671
  strokeLinejoin: "round",
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" })
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" })
743
673
  }
744
674
  ),
745
675
  arrowRight: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
@@ -754,8 +684,8 @@ var icons = {
754
684
  strokeLinecap: "round",
755
685
  strokeLinejoin: "round",
756
686
  children: [
757
- /* @__PURE__ */ jsx6("line", { x1: "5", y1: "12", x2: "19", y2: "12" }),
758
- /* @__PURE__ */ jsx6("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" })
759
689
  ]
760
690
  }
761
691
  ),
@@ -771,8 +701,8 @@ var icons = {
771
701
  strokeLinecap: "round",
772
702
  strokeLinejoin: "round",
773
703
  children: [
774
- /* @__PURE__ */ jsx6("line", { x1: "19", y1: "12", x2: "5", y2: "12" }),
775
- /* @__PURE__ */ jsx6("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" })
776
706
  ]
777
707
  }
778
708
  ),
@@ -788,12 +718,12 @@ var icons = {
788
718
  strokeLinecap: "round",
789
719
  strokeLinejoin: "round",
790
720
  children: [
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" })
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" })
793
723
  ]
794
724
  }
795
725
  ),
796
- phone: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx6(
726
+ phone: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
797
727
  "svg",
798
728
  {
799
729
  width: size,
@@ -804,7 +734,7 @@ var icons = {
804
734
  strokeWidth,
805
735
  strokeLinecap: "round",
806
736
  strokeLinejoin: "round",
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" })
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" })
808
738
  }
809
739
  ),
810
740
  mapPin: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
@@ -819,12 +749,12 @@ var icons = {
819
749
  strokeLinecap: "round",
820
750
  strokeLinejoin: "round",
821
751
  children: [
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" })
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" })
824
754
  ]
825
755
  }
826
756
  ),
827
- zap: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx6(
757
+ zap: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
828
758
  "svg",
829
759
  {
830
760
  width: size,
@@ -835,10 +765,10 @@ var icons = {
835
765
  strokeWidth,
836
766
  strokeLinecap: "round",
837
767
  strokeLinejoin: "round",
838
- children: /* @__PURE__ */ jsx6("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" })
839
769
  }
840
770
  ),
841
- shield: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx6(
771
+ shield: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsx5(
842
772
  "svg",
843
773
  {
844
774
  width: size,
@@ -849,7 +779,7 @@ var icons = {
849
779
  strokeWidth,
850
780
  strokeLinecap: "round",
851
781
  strokeLinejoin: "round",
852
- children: /* @__PURE__ */ jsx6("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" })
853
783
  }
854
784
  ),
855
785
  users: ({ size, color, strokeWidth }) => /* @__PURE__ */ jsxs3(
@@ -864,15 +794,15 @@ var icons = {
864
794
  strokeLinecap: "round",
865
795
  strokeLinejoin: "round",
866
796
  children: [
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" })
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" })
871
801
  ]
872
802
  }
873
803
  )
874
804
  };
875
- function isThemeableValue5(value) {
805
+ function isThemeableValue4(value) {
876
806
  return typeof value === "object" && value !== null && "useTheme" in value;
877
807
  }
878
808
  function Icon({
@@ -886,20 +816,20 @@ function Icon({
886
816
  const resolvedColor = (() => {
887
817
  if (!color) return resolveColor2("primary");
888
818
  if (typeof color === "string") return { color, opacity: 100 };
889
- if (isThemeableValue5(color)) {
819
+ if (isThemeableValue4(color)) {
890
820
  return color.useTheme ? resolveColor2(color.themeKey) : color.value;
891
821
  }
892
822
  if ("color" in color) return color;
893
823
  return resolveColor2("primary");
894
824
  })();
895
825
  const IconComponent = icons[name.toLowerCase()] || icons.check;
896
- const { size: iconSize, strokeWidth } = sizeMap2[size];
826
+ const { size: iconSize, strokeWidth } = sizeMap[size];
897
827
  const colorValue = hexToRgba(resolvedColor.color, resolvedColor.opacity);
898
828
  const wrapperStyle = {
899
829
  display: "flex",
900
830
  justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
901
831
  };
902
- return /* @__PURE__ */ jsx6("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx6(
832
+ return /* @__PURE__ */ jsx5("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx5(
903
833
  IconComponent,
904
834
  {
905
835
  size: iconSize,
@@ -911,14 +841,14 @@ function Icon({
911
841
  var availableIcons = Object.keys(icons);
912
842
 
913
843
  // components/page/Section.tsx
914
- import { jsx as jsx7 } from "react/jsx-runtime";
915
- function isThemeableValue6(value) {
844
+ import { jsx as jsx6 } from "react/jsx-runtime";
845
+ function isThemeableValue5(value) {
916
846
  return typeof value === "object" && value !== null && "useTheme" in value;
917
847
  }
918
848
  function resolveBackgroundColor(bg, resolveColor2) {
919
849
  if (!bg) return void 0;
920
850
  if (typeof bg === "string") return bg;
921
- if (isThemeableValue6(bg)) {
851
+ if (isThemeableValue5(bg)) {
922
852
  if (bg.useTheme) {
923
853
  const themeColor = resolveColor2(bg.themeKey);
924
854
  return hexToRgba(themeColor.color, themeColor.opacity);
@@ -959,7 +889,7 @@ function Section({
959
889
  }) {
960
890
  const { resolveColor: resolveColor2 } = useTheme();
961
891
  const DropZone = puck?.renderDropZone;
962
- return /* @__PURE__ */ jsx7(
892
+ return /* @__PURE__ */ jsx6(
963
893
  "section",
964
894
  {
965
895
  id: anchorLink,
@@ -974,13 +904,13 @@ function Section({
974
904
  boxShadow: getShadowCSS(shadow),
975
905
  borderRadius: `${borderRadius}px`
976
906
  },
977
- children: /* @__PURE__ */ jsx7("div", { className: "mx-auto w-full", style: { maxWidth: contentMaxWidth }, children: DropZone && /* @__PURE__ */ jsx7(DropZone, { zone: "content" }) })
907
+ children: /* @__PURE__ */ jsx6("div", { className: "mx-auto w-full", style: { maxWidth: contentMaxWidth }, children: DropZone && /* @__PURE__ */ jsx6(DropZone, { zone: "content" }) })
978
908
  }
979
909
  );
980
910
  }
981
911
 
982
912
  // components/page/Container.tsx
983
- import { jsx as jsx8 } from "react/jsx-runtime";
913
+ import { jsx as jsx7 } from "react/jsx-runtime";
984
914
  var maxWidthMap2 = {
985
915
  sm: "640px",
986
916
  md: "768px",
@@ -996,7 +926,7 @@ var paddingMap = {
996
926
  lg: "32px",
997
927
  xl: "48px"
998
928
  };
999
- function isThemeableValue7(value) {
929
+ function isThemeableValue6(value) {
1000
930
  return typeof value === "object" && value !== null && "useTheme" in value;
1001
931
  }
1002
932
  function Container({
@@ -1015,7 +945,7 @@ function Container({
1015
945
  if (!backgroundColor) return null;
1016
946
  if (typeof backgroundColor === "string")
1017
947
  return { color: backgroundColor, opacity: 100 };
1018
- if (isThemeableValue7(backgroundColor)) {
948
+ if (isThemeableValue6(backgroundColor)) {
1019
949
  return backgroundColor.useTheme ? resolveColor2(backgroundColor.themeKey) : backgroundColor.value;
1020
950
  }
1021
951
  if ("color" in backgroundColor) return backgroundColor;
@@ -1034,11 +964,11 @@ function Container({
1034
964
  backgroundColor: resolvedBgColor ? hexToRgba(resolvedBgColor.color, resolvedBgColor.opacity) : void 0,
1035
965
  width: "100%"
1036
966
  };
1037
- return /* @__PURE__ */ jsx8("div", { id, style, children: DropZone && /* @__PURE__ */ jsx8(DropZone, { zone: "container-content" }) });
967
+ return /* @__PURE__ */ jsx7("div", { id, style, children: DropZone && /* @__PURE__ */ jsx7(DropZone, { zone: "container-content" }) });
1038
968
  }
1039
969
 
1040
970
  // components/page/Columns.tsx
1041
- import { jsx as jsx9 } from "react/jsx-runtime";
971
+ import { jsx as jsx8 } from "react/jsx-runtime";
1042
972
  var gapMap = {
1043
973
  none: "0",
1044
974
  sm: "16px",
@@ -1067,11 +997,11 @@ function Columns({
1067
997
  gap: gapMap[gap],
1068
998
  alignItems: alignMap[verticalAlign]
1069
999
  };
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)) });
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)) });
1071
1001
  }
1072
1002
 
1073
1003
  // components/page/Card.tsx
1074
- import { jsx as jsx10 } from "react/jsx-runtime";
1004
+ import { jsx as jsx9 } from "react/jsx-runtime";
1075
1005
  var borderWidthMap = {
1076
1006
  none: "0",
1077
1007
  thin: "1px",
@@ -1099,7 +1029,7 @@ var paddingMap2 = {
1099
1029
  lg: "32px",
1100
1030
  xl: "48px"
1101
1031
  };
1102
- function isThemeableValue8(value) {
1032
+ function isThemeableValue7(value) {
1103
1033
  return typeof value === "object" && value !== null && "useTheme" in value;
1104
1034
  }
1105
1035
  function Card({
@@ -1118,7 +1048,7 @@ function Card({
1118
1048
  if (!backgroundColor) return resolveColor2("background");
1119
1049
  if (typeof backgroundColor === "string")
1120
1050
  return { color: backgroundColor, opacity: 100 };
1121
- if (isThemeableValue8(backgroundColor)) {
1051
+ if (isThemeableValue7(backgroundColor)) {
1122
1052
  return backgroundColor.useTheme ? resolveColor2(backgroundColor.themeKey) : backgroundColor.value;
1123
1053
  }
1124
1054
  if ("color" in backgroundColor) return backgroundColor;
@@ -1128,7 +1058,7 @@ function Card({
1128
1058
  if (!borderColor) return resolveColor2("muted");
1129
1059
  if (typeof borderColor === "string")
1130
1060
  return { color: borderColor, opacity: 100 };
1131
- if (isThemeableValue8(borderColor)) {
1061
+ if (isThemeableValue7(borderColor)) {
1132
1062
  return borderColor.useTheme ? resolveColor2(borderColor.themeKey) : borderColor.value;
1133
1063
  }
1134
1064
  if ("color" in borderColor) return borderColor;
@@ -1141,11 +1071,11 @@ function Card({
1141
1071
  boxShadow: shadowMap2[shadow],
1142
1072
  padding: paddingMap2[padding]
1143
1073
  };
1144
- return /* @__PURE__ */ jsx10("div", { id, style, children: DropZone && /* @__PURE__ */ jsx10(DropZone, { zone: "card-content" }) });
1074
+ return /* @__PURE__ */ jsx9("div", { id, style, children: DropZone && /* @__PURE__ */ jsx9(DropZone, { zone: "card-content" }) });
1145
1075
  }
1146
1076
 
1147
1077
  // components/page/Divider.tsx
1148
- import { jsx as jsx11 } from "react/jsx-runtime";
1078
+ import { jsx as jsx10 } from "react/jsx-runtime";
1149
1079
  var thicknessMap = {
1150
1080
  thin: "1px",
1151
1081
  medium: "2px",
@@ -1163,7 +1093,7 @@ var spacingMap = {
1163
1093
  lg: "32px",
1164
1094
  xl: "48px"
1165
1095
  };
1166
- function isThemeableValue9(value) {
1096
+ function isThemeableValue8(value) {
1167
1097
  return typeof value === "object" && value !== null && "useTheme" in value;
1168
1098
  }
1169
1099
  function Divider({
@@ -1179,7 +1109,7 @@ function Divider({
1179
1109
  const resolvedColor = (() => {
1180
1110
  if (!color) return resolveColor2("muted");
1181
1111
  if (typeof color === "string") return { color, opacity: 100 };
1182
- if (isThemeableValue9(color)) {
1112
+ if (isThemeableValue8(color)) {
1183
1113
  return color.useTheme ? resolveColor2(color.themeKey) : color.value;
1184
1114
  }
1185
1115
  if ("color" in color) return color;
@@ -1196,12 +1126,12 @@ function Divider({
1196
1126
  borderTop: `${thicknessMap[thickness]} ${lineStyle} ${hexToRgba(resolvedColor.color, resolvedColor.opacity)}`,
1197
1127
  margin: 0
1198
1128
  };
1199
- return /* @__PURE__ */ jsx11("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx11("hr", { style: hrStyle }) });
1129
+ return /* @__PURE__ */ jsx10("div", { id, style: wrapperStyle, children: /* @__PURE__ */ jsx10("hr", { style: hrStyle }) });
1200
1130
  }
1201
1131
 
1202
1132
  // components/page/Spacer.tsx
1203
- import { jsx as jsx12 } from "react/jsx-runtime";
1204
- var sizeMap3 = {
1133
+ import { jsx as jsx11 } from "react/jsx-runtime";
1134
+ var sizeMap2 = {
1205
1135
  xs: "8px",
1206
1136
  sm: "16px",
1207
1137
  md: "24px",
@@ -1212,36 +1142,36 @@ var sizeMap3 = {
1212
1142
  };
1213
1143
  function Spacer({ size = "md", id }) {
1214
1144
  const style = {
1215
- height: sizeMap3[size],
1145
+ height: sizeMap2[size],
1216
1146
  width: "100%"
1217
1147
  };
1218
- return /* @__PURE__ */ jsx12("div", { id, style, "aria-hidden": "true" });
1148
+ return /* @__PURE__ */ jsx11("div", { id, style, "aria-hidden": "true" });
1219
1149
  }
1220
1150
 
1221
1151
  // components/page/TextBlock.tsx
1222
- import { jsx as jsx13, jsxs as jsxs4 } from "react/jsx-runtime";
1152
+ import { jsx as jsx12, jsxs as jsxs4 } from "react/jsx-runtime";
1223
1153
  var alignmentMap = {
1224
1154
  left: "text-left",
1225
1155
  center: "text-center",
1226
1156
  right: "text-right"
1227
1157
  };
1228
- var sizeMap4 = {
1158
+ var sizeMap3 = {
1229
1159
  small: "text-2xl",
1230
1160
  "medium-small": "text-3xl",
1231
1161
  medium: "text-4xl",
1232
1162
  large: "text-5xl",
1233
1163
  xlarge: "text-6xl"
1234
1164
  };
1235
- function isThemeableValue10(value) {
1165
+ function isThemeableValue9(value) {
1236
1166
  return typeof value === "object" && value !== null && "useTheme" in value;
1237
1167
  }
1238
- function isEntryBoundValue5(value) {
1168
+ function isEntryBoundValue4(value) {
1239
1169
  return typeof value === "object" && value !== null && "useEntry" in value;
1240
1170
  }
1241
1171
  function resolveColor(color, resolveThemeColor) {
1242
1172
  if (!color) return "#000000";
1243
1173
  if (typeof color === "string") return color;
1244
- if (isThemeableValue10(color)) {
1174
+ if (isThemeableValue9(color)) {
1245
1175
  if (color.useTheme) {
1246
1176
  const themeColor = resolveThemeColor(color.themeKey);
1247
1177
  return hexToRgba(themeColor.color, themeColor.opacity);
@@ -1256,7 +1186,7 @@ function resolveColor(color, resolveThemeColor) {
1256
1186
  function resolveColorHex(color, resolveThemeColor) {
1257
1187
  if (!color) return "#000000";
1258
1188
  if (typeof color === "string") return color;
1259
- if (isThemeableValue10(color)) {
1189
+ if (isThemeableValue9(color)) {
1260
1190
  if (color.useTheme) {
1261
1191
  return resolveThemeColor(color.themeKey).color;
1262
1192
  }
@@ -1285,7 +1215,7 @@ function TextBlock({
1285
1215
  const resolveText = (value) => {
1286
1216
  if (!value) return void 0;
1287
1217
  if (typeof value === "string") return value;
1288
- if (isEntryBoundValue5(value)) {
1218
+ if (isEntryBoundValue4(value)) {
1289
1219
  if (value.useEntry) {
1290
1220
  const entryVal = getEntryValue(value.entryName, value.fieldKey);
1291
1221
  return entryVal != null ? String(entryVal) : void 0;
@@ -1311,16 +1241,16 @@ function TextBlock({
1311
1241
  id: anchorLink,
1312
1242
  className: cn("flex flex-col gap-4", alignmentMap[alignment]),
1313
1243
  children: [
1314
- resolvedTitle && /* @__PURE__ */ jsx13(
1244
+ resolvedTitle && /* @__PURE__ */ jsx12(
1315
1245
  "h2",
1316
1246
  {
1317
- className: cn("font-bold", sizeMap4[textSize]),
1247
+ className: cn("font-bold", sizeMap3[textSize]),
1318
1248
  style: gradientStyle,
1319
1249
  children: resolvedTitle
1320
1250
  }
1321
1251
  ),
1322
- resolvedSubtitle && /* @__PURE__ */ jsx13("p", { className: "text-xl", style: { color: subtitleColorValue }, children: resolvedSubtitle }),
1323
- resolvedBody && /* @__PURE__ */ jsx13(
1252
+ resolvedSubtitle && /* @__PURE__ */ jsx12("p", { className: "text-xl", style: { color: subtitleColorValue }, children: resolvedSubtitle }),
1253
+ resolvedBody && /* @__PURE__ */ jsx12(
1324
1254
  "div",
1325
1255
  {
1326
1256
  className: "prose max-w-none",
@@ -1334,7 +1264,7 @@ function TextBlock({
1334
1264
  }
1335
1265
 
1336
1266
  // components/page/CustomImage.tsx
1337
- import { jsx as jsx14 } from "react/jsx-runtime";
1267
+ import { jsx as jsx13 } from "react/jsx-runtime";
1338
1268
  var alignmentMap2 = {
1339
1269
  left: "mr-auto",
1340
1270
  center: "mx-auto",
@@ -1348,9 +1278,9 @@ function CustomImage({
1348
1278
  fitContent = false
1349
1279
  }) {
1350
1280
  if (!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" });
1281
+ return /* @__PURE__ */ jsx13("div", { className: "flex h-48 w-full items-center justify-center bg-gray-200 text-gray-400", children: "No image" });
1352
1282
  }
1353
- return /* @__PURE__ */ jsx14(
1283
+ return /* @__PURE__ */ jsx13(
1354
1284
  "img",
1355
1285
  {
1356
1286
  src: image,
@@ -1367,8 +1297,8 @@ function CustomImage({
1367
1297
 
1368
1298
  // components/page/FeaturesList.tsx
1369
1299
  import { icons as icons2 } from "lucide-react";
1370
- import { jsx as jsx15, jsxs as jsxs5 } from "react/jsx-runtime";
1371
- var sizeMap5 = {
1300
+ import { jsx as jsx14, jsxs as jsxs5 } from "react/jsx-runtime";
1301
+ var sizeMap4 = {
1372
1302
  small: { icon: 24, title: "text-base", desc: "text-sm" },
1373
1303
  medium: { icon: 32, title: "text-lg", desc: "text-base" },
1374
1304
  large: { icon: 48, title: "text-xl", desc: "text-lg" }
@@ -1380,12 +1310,12 @@ function FeaturesList({
1380
1310
  iconColor = "#000000",
1381
1311
  anchorLink
1382
1312
  }) {
1383
- const sizeConfig = sizeMap5[size];
1313
+ const sizeConfig = sizeMap4[size];
1384
1314
  const getIcon = (iconName) => {
1385
1315
  const formatted = iconName.charAt(0).toUpperCase() + iconName.slice(1);
1386
1316
  return icons2[formatted] || null;
1387
1317
  };
1388
- return /* @__PURE__ */ jsx15(
1318
+ return /* @__PURE__ */ jsx14(
1389
1319
  "div",
1390
1320
  {
1391
1321
  id: anchorLink,
@@ -1405,7 +1335,7 @@ function FeaturesList({
1405
1335
  align === "right" && "flex-row-reverse"
1406
1336
  ),
1407
1337
  children: [
1408
- feature.image ? /* @__PURE__ */ jsx15(
1338
+ feature.image ? /* @__PURE__ */ jsx14(
1409
1339
  "img",
1410
1340
  {
1411
1341
  src: feature.image,
@@ -1413,7 +1343,7 @@ function FeaturesList({
1413
1343
  className: "object-contain",
1414
1344
  style: { width: sizeConfig.icon, height: sizeConfig.icon }
1415
1345
  }
1416
- ) : IconComponent ? /* @__PURE__ */ jsx15(
1346
+ ) : IconComponent ? /* @__PURE__ */ jsx14(
1417
1347
  IconComponent,
1418
1348
  {
1419
1349
  size: sizeConfig.icon,
@@ -1422,8 +1352,8 @@ function FeaturesList({
1422
1352
  }
1423
1353
  ) : null,
1424
1354
  /* @__PURE__ */ jsxs5("div", { className: "flex flex-col gap-1", children: [
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 })
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 })
1427
1357
  ] })
1428
1358
  ]
1429
1359
  },
@@ -1436,8 +1366,8 @@ function FeaturesList({
1436
1366
 
1437
1367
  // components/page/FeatureGrid.tsx
1438
1368
  import { icons as icons3 } from "lucide-react";
1439
- import { jsx as jsx16, jsxs as jsxs6 } from "react/jsx-runtime";
1440
- var sizeMap6 = {
1369
+ import { jsx as jsx15, jsxs as jsxs6 } from "react/jsx-runtime";
1370
+ var sizeMap5 = {
1441
1371
  small: { icon: 24, title: "text-base", desc: "text-sm" },
1442
1372
  medium: { icon: 32, title: "text-lg", desc: "text-base" },
1443
1373
  large: { icon: 48, title: "text-xl", desc: "text-lg" }
@@ -1453,7 +1383,7 @@ function FeatureGrid({
1453
1383
  textColor = "#000000",
1454
1384
  anchorLink
1455
1385
  }) {
1456
- const sizeConfig = sizeMap6[size];
1386
+ const sizeConfig = sizeMap5[size];
1457
1387
  const getIcon = (iconName) => {
1458
1388
  const formatted = iconName.charAt(0).toUpperCase() + iconName.slice(1);
1459
1389
  return icons3[formatted] || null;
@@ -1473,12 +1403,12 @@ function FeatureGrid({
1473
1403
  align === "right" && "text-right"
1474
1404
  ),
1475
1405
  children: [
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 })
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 })
1478
1408
  ]
1479
1409
  }
1480
1410
  ),
1481
- /* @__PURE__ */ jsx16("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) => {
1482
1412
  const IconComponent = feature.icon ? getIcon(feature.icon) : null;
1483
1413
  return /* @__PURE__ */ jsxs6(
1484
1414
  "div",
@@ -1488,7 +1418,7 @@ function FeatureGrid({
1488
1418
  align === "center" && "items-center text-center"
1489
1419
  ),
1490
1420
  children: [
1491
- feature.image ? /* @__PURE__ */ jsx16(
1421
+ feature.image ? /* @__PURE__ */ jsx15(
1492
1422
  "img",
1493
1423
  {
1494
1424
  src: feature.image,
@@ -1496,14 +1426,14 @@ function FeatureGrid({
1496
1426
  className: "object-contain",
1497
1427
  style: { width: sizeConfig.icon, height: sizeConfig.icon }
1498
1428
  }
1499
- ) : IconComponent ? /* @__PURE__ */ jsx16(
1429
+ ) : IconComponent ? /* @__PURE__ */ jsx15(
1500
1430
  IconComponent,
1501
1431
  {
1502
1432
  size: sizeConfig.icon,
1503
1433
  style: { color: iconColor }
1504
1434
  }
1505
1435
  ) : null,
1506
- feature.title && /* @__PURE__ */ jsx16(
1436
+ feature.title && /* @__PURE__ */ jsx15(
1507
1437
  "h3",
1508
1438
  {
1509
1439
  className: cn("font-semibold", sizeConfig.title),
@@ -1511,7 +1441,7 @@ function FeatureGrid({
1511
1441
  children: feature.title
1512
1442
  }
1513
1443
  ),
1514
- feature.description && /* @__PURE__ */ jsx16("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 })
1515
1445
  ]
1516
1446
  },
1517
1447
  index
@@ -1522,7 +1452,7 @@ function FeatureGrid({
1522
1452
 
1523
1453
  // components/page/Footer.tsx
1524
1454
  import { Facebook, Instagram, Twitter } from "lucide-react";
1525
- import { jsx as jsx17, jsxs as jsxs7 } from "react/jsx-runtime";
1455
+ import { jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
1526
1456
  function Footer({
1527
1457
  logo,
1528
1458
  copyright = "\xA9 2024 Company. All rights reserved.",
@@ -1557,15 +1487,15 @@ function Footer({
1557
1487
  ].filter(
1558
1488
  (link) => !!link.url
1559
1489
  );
1560
- return /* @__PURE__ */ jsx17(
1490
+ return /* @__PURE__ */ jsx16(
1561
1491
  "footer",
1562
1492
  {
1563
1493
  className: "w-full px-6 py-8",
1564
1494
  style: { backgroundColor, color: textColor },
1565
1495
  children: /* @__PURE__ */ jsxs7("div", { className: "mx-auto flex max-w-7xl flex-col items-center justify-between gap-6 md:flex-row", children: [
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(
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(
1569
1499
  "a",
1570
1500
  {
1571
1501
  href: url,
@@ -1573,11 +1503,11 @@ function Footer({
1573
1503
  rel: "noopener noreferrer",
1574
1504
  className: "transition-opacity hover:opacity-80",
1575
1505
  onClick: () => handleSocialClick(url),
1576
- children: /* @__PURE__ */ jsx17(Icon3, { size: 24, style: { color: textColor } })
1506
+ children: /* @__PURE__ */ jsx16(Icon3, { size: 24, style: { color: textColor } })
1577
1507
  },
1578
1508
  index
1579
1509
  )) }),
1580
- copyright && /* @__PURE__ */ jsx17("p", { className: "text-sm opacity-80", children: copyright })
1510
+ copyright && /* @__PURE__ */ jsx16("p", { className: "text-sm opacity-80", children: copyright })
1581
1511
  ] })
1582
1512
  }
1583
1513
  );
@@ -1586,7 +1516,7 @@ function Footer({
1586
1516
  // components/page/Topbar.tsx
1587
1517
  import { useState as useState2 } from "react";
1588
1518
  import { Menu, X } from "lucide-react";
1589
- import { jsx as jsx18, jsxs as jsxs8 } from "react/jsx-runtime";
1519
+ import { jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
1590
1520
  function Topbar({
1591
1521
  logo,
1592
1522
  logoUrl = "/",
@@ -1619,7 +1549,7 @@ function Topbar({
1619
1549
  const renderLink = (item, index) => {
1620
1550
  const className = "hover:opacity-80 transition-opacity";
1621
1551
  if (item.linkType === "external") {
1622
- return /* @__PURE__ */ jsx18(
1552
+ return /* @__PURE__ */ jsx17(
1623
1553
  "a",
1624
1554
  {
1625
1555
  href: item.url,
@@ -1633,7 +1563,7 @@ function Topbar({
1633
1563
  );
1634
1564
  }
1635
1565
  if (item.linkType === "scrollTo") {
1636
- return /* @__PURE__ */ jsx18(
1566
+ return /* @__PURE__ */ jsx17(
1637
1567
  "a",
1638
1568
  {
1639
1569
  href: item.url,
@@ -1644,7 +1574,7 @@ function Topbar({
1644
1574
  index
1645
1575
  );
1646
1576
  }
1647
- return /* @__PURE__ */ jsx18(
1577
+ return /* @__PURE__ */ jsx17(
1648
1578
  "a",
1649
1579
  {
1650
1580
  href: item.url,
@@ -1667,7 +1597,7 @@ function Topbar({
1667
1597
  className: "mx-auto flex items-center justify-between",
1668
1598
  style: { maxWidth },
1669
1599
  children: [
1670
- /* @__PURE__ */ jsx18(
1600
+ /* @__PURE__ */ jsx17(
1671
1601
  "a",
1672
1602
  {
1673
1603
  href: logoUrl,
@@ -1678,14 +1608,14 @@ function Topbar({
1678
1608
  linkType: "internal",
1679
1609
  ...utm
1680
1610
  }),
1681
- children: logo ? /* @__PURE__ */ jsx18("img", { src: logo, alt: "Logo", className: "h-8" }) : /* @__PURE__ */ jsx18("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" })
1682
1612
  }
1683
1613
  ),
1684
1614
  /* @__PURE__ */ jsxs8("div", { className: "hidden items-center gap-8 md:flex", children: [
1685
1615
  navItems.map(renderLink),
1686
- DropZone && /* @__PURE__ */ jsx18(DropZone, { zone: "cta" })
1616
+ DropZone && /* @__PURE__ */ jsx17(DropZone, { zone: "cta" })
1687
1617
  ] }),
1688
- /* @__PURE__ */ jsx18("button", { className: "md:hidden", onClick: handleMobileMenuToggle, children: mobileMenuOpen ? /* @__PURE__ */ jsx18(X, { size: 24 }) : /* @__PURE__ */ jsx18(Menu, { size: 24 }) })
1618
+ /* @__PURE__ */ jsx17("button", { className: "md:hidden", onClick: handleMobileMenuToggle, children: mobileMenuOpen ? /* @__PURE__ */ jsx17(X, { size: 24 }) : /* @__PURE__ */ jsx17(Menu, { size: 24 }) })
1689
1619
  ]
1690
1620
  }
1691
1621
  ),
@@ -1696,7 +1626,7 @@ function Topbar({
1696
1626
  style: { backgroundColor },
1697
1627
  children: [
1698
1628
  navItems.map(renderLink),
1699
- DropZone && /* @__PURE__ */ jsx18(DropZone, { zone: "cta" })
1629
+ DropZone && /* @__PURE__ */ jsx17(DropZone, { zone: "cta" })
1700
1630
  ]
1701
1631
  }
1702
1632
  )
@@ -1708,19 +1638,19 @@ function Topbar({
1708
1638
  // components/page/Popup.tsx
1709
1639
  import { useState as useState3 } from "react";
1710
1640
  import { icons as icons4, X as X2 } from "lucide-react";
1711
- import { Fragment as Fragment2, jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
1641
+ import { Fragment as Fragment2, jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
1712
1642
  function Icon2({ name, ...props }) {
1713
1643
  const formatted = name.charAt(0).toUpperCase() + name.slice(1);
1714
1644
  const IconComponent = icons4[formatted];
1715
1645
  if (!IconComponent) return null;
1716
- return /* @__PURE__ */ jsx19(IconComponent, { ...props });
1646
+ return /* @__PURE__ */ jsx18(IconComponent, { ...props });
1717
1647
  }
1718
1648
  var widthMap3 = {
1719
1649
  small: "max-w-sm",
1720
1650
  medium: "max-w-lg",
1721
1651
  large: "max-w-2xl"
1722
1652
  };
1723
- var sizeMap7 = {
1653
+ var sizeMap6 = {
1724
1654
  small: "px-3 py-1.5 text-sm",
1725
1655
  medium: "px-4 py-2 text-base",
1726
1656
  large: "px-6 py-3 text-lg"
@@ -1751,7 +1681,7 @@ function Popup({
1751
1681
  setIsOpen(false);
1752
1682
  sendEvent("popup_close", { ctaText, ...utm });
1753
1683
  };
1754
- const trigger = textLink ? /* @__PURE__ */ jsx19(
1684
+ const trigger = textLink ? /* @__PURE__ */ jsx18(
1755
1685
  "button",
1756
1686
  {
1757
1687
  onClick: handleOpen,
@@ -1765,19 +1695,19 @@ function Popup({
1765
1695
  onClick: handleOpen,
1766
1696
  className: cn(
1767
1697
  "flex items-center gap-2 rounded-full font-medium",
1768
- sizeMap7[size]
1698
+ sizeMap6[size]
1769
1699
  ),
1770
1700
  style: { backgroundColor: buttonColor, color: textColor },
1771
1701
  children: [
1772
- icon && iconPosition === "left" && /* @__PURE__ */ jsx19(Icon2, { name: icon, size: 18 }),
1702
+ icon && iconPosition === "left" && /* @__PURE__ */ jsx18(Icon2, { name: icon, size: 18 }),
1773
1703
  ctaText,
1774
- icon && iconPosition === "right" && /* @__PURE__ */ jsx19(Icon2, { name: icon, size: 18 })
1704
+ icon && iconPosition === "right" && /* @__PURE__ */ jsx18(Icon2, { name: icon, size: 18 })
1775
1705
  ]
1776
1706
  }
1777
1707
  );
1778
1708
  return /* @__PURE__ */ jsxs9(Fragment2, { children: [
1779
1709
  trigger,
1780
- isOpen && /* @__PURE__ */ jsx19(
1710
+ isOpen && /* @__PURE__ */ jsx18(
1781
1711
  "div",
1782
1712
  {
1783
1713
  className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4",
@@ -1791,15 +1721,15 @@ function Popup({
1791
1721
  ),
1792
1722
  onClick: (e) => e.stopPropagation(),
1793
1723
  children: [
1794
- /* @__PURE__ */ jsx19(
1724
+ /* @__PURE__ */ jsx18(
1795
1725
  "button",
1796
1726
  {
1797
1727
  onClick: handleClose,
1798
1728
  className: "absolute top-4 right-4 text-gray-500 hover:text-gray-700",
1799
- children: /* @__PURE__ */ jsx19(X2, { size: 24 })
1729
+ children: /* @__PURE__ */ jsx18(X2, { size: 24 })
1800
1730
  }
1801
1731
  ),
1802
- puck && /* @__PURE__ */ jsx19(puck.renderDropZone, { zone: "popup-content" })
1732
+ puck && /* @__PURE__ */ jsx18(puck.renderDropZone, { zone: "popup-content" })
1803
1733
  ]
1804
1734
  }
1805
1735
  )
@@ -1848,9 +1778,39 @@ function getHeadingStyle(props) {
1848
1778
  };
1849
1779
  }
1850
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
+
1851
1811
  export {
1852
1812
  getHeadingStyle,
1853
- Paragraph,
1813
+ getParagraphStyle,
1854
1814
  Button,
1855
1815
  Image,
1856
1816
  ImageCarousel,