@mission-studio/puck 1.0.21 → 1.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/Popup-Dg78fu78.d.mts +260 -0
  2. package/dist/Popup-L7kcJo05.d.ts +260 -0
  3. package/dist/ResponsiveToggleField-65CqZEK-.d.mts +10 -0
  4. package/dist/ResponsiveToggleField-QCve94L_.d.ts +10 -0
  5. package/dist/chunk-MYS3PLMF.mjs +463 -0
  6. package/dist/chunk-TRPKXVMO.mjs +695 -0
  7. package/dist/{chunk-MWW5LYLN.mjs → chunk-YIPEC4L4.mjs} +709 -1075
  8. package/dist/components/page/astro/index.d.mts +54 -0
  9. package/dist/components/page/astro/index.d.ts +54 -0
  10. package/dist/components/page/astro/index.js +2056 -0
  11. package/dist/components/page/astro/index.mjs +51 -0
  12. package/dist/config/server.js +630 -700
  13. package/dist/config/server.mjs +33 -83
  14. package/dist/config-entry.js +592 -478
  15. package/dist/config-entry.mjs +11 -11
  16. package/dist/{ResponsiveToggleField-CfBKL5oY.d.ts → defaults-j55hBQHu.d.mts} +2 -8
  17. package/dist/{ResponsiveToggleField-BihXsGIJ.d.mts → defaults-z8Ft2j5r.d.ts} +2 -8
  18. package/dist/editor.d.mts +5 -4
  19. package/dist/editor.d.ts +5 -4
  20. package/dist/index.d.mts +5 -3
  21. package/dist/index.d.ts +5 -3
  22. package/dist/index.js +388 -274
  23. package/dist/index.mjs +11 -11
  24. package/dist/renderer.d.mts +9 -250
  25. package/dist/renderer.d.ts +9 -250
  26. package/dist/renderer.js +388 -274
  27. package/dist/renderer.mjs +11 -11
  28. package/dist/resolve/index.d.mts +1 -1
  29. package/dist/resolve/index.d.ts +1 -1
  30. package/dist/{types-D-CIduaE.d.mts → types-HQ6hIbYr.d.mts} +1 -1
  31. package/dist/{types-D-CIduaE.d.ts → types-HQ6hIbYr.d.ts} +1 -1
  32. package/package.json +6 -1
  33. package/dist/chunk-WFLVAZV2.mjs +0 -142
package/dist/renderer.js CHANGED
@@ -430,8 +430,7 @@ function useUtmParams() {
430
430
  return utmParams;
431
431
  }
432
432
 
433
- // components/page/Button.tsx
434
- var import_jsx_runtime5 = require("react/jsx-runtime");
433
+ // components/page/primitives/Button.ts
435
434
  var sizeStyles = {
436
435
  sm: { padding: "8px 16px", fontSize: "0.875rem" },
437
436
  md: { padding: "12px 24px", fontSize: "1rem" },
@@ -451,6 +450,54 @@ function isThemeableValue3(value) {
451
450
  function isEntryBoundValue3(value) {
452
451
  return typeof value === "object" && value !== null && "useEntry" in value;
453
452
  }
453
+ function getBaseStyle(size, borderRadius, fullWidth) {
454
+ return {
455
+ ...sizeStyles[size],
456
+ borderRadius: radiusMap[borderRadius],
457
+ fontWeight: 600,
458
+ cursor: "pointer",
459
+ display: "inline-flex",
460
+ alignItems: "center",
461
+ justifyContent: "center",
462
+ textDecoration: "none",
463
+ transition: "opacity 0.2s, transform 0.2s",
464
+ width: fullWidth ? "100%" : "auto",
465
+ border: "none"
466
+ };
467
+ }
468
+ function getVariantStyles(variant, bgColor, fgColor) {
469
+ const variantStyles = {
470
+ solid: {
471
+ backgroundColor: bgColor,
472
+ color: fgColor
473
+ },
474
+ outline: {
475
+ backgroundColor: "transparent",
476
+ color: bgColor,
477
+ border: `2px solid ${bgColor}`
478
+ },
479
+ ghost: {
480
+ backgroundColor: "transparent",
481
+ color: bgColor
482
+ },
483
+ link: {
484
+ backgroundColor: "transparent",
485
+ color: bgColor,
486
+ padding: "0",
487
+ textDecoration: "underline"
488
+ }
489
+ };
490
+ return variantStyles[variant] || variantStyles.solid;
491
+ }
492
+ function getWrapperStyle(align) {
493
+ return {
494
+ display: "flex",
495
+ justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
496
+ };
497
+ }
498
+
499
+ // components/page/next/Button.tsx
500
+ var import_jsx_runtime5 = require("react/jsx-runtime");
454
501
  function Button({
455
502
  text,
456
503
  href,
@@ -513,46 +560,10 @@ function Button({
513
560
  })();
514
561
  const bgColor = hexToRgba(resolvedColor.color, resolvedColor.opacity);
515
562
  const fgColor = hexToRgba(resolvedTextColor.color, resolvedTextColor.opacity);
516
- const baseStyle = {
517
- ...sizeStyles[size],
518
- borderRadius: radiusMap[borderRadius],
519
- fontWeight: 600,
520
- cursor: "pointer",
521
- display: "inline-flex",
522
- alignItems: "center",
523
- justifyContent: "center",
524
- textDecoration: "none",
525
- transition: "opacity 0.2s, transform 0.2s",
526
- width: fullWidth ? "100%" : "auto",
527
- border: "none"
528
- };
529
- const variantStyles = {
530
- solid: {
531
- backgroundColor: bgColor,
532
- color: fgColor
533
- },
534
- outline: {
535
- backgroundColor: "transparent",
536
- color: bgColor,
537
- border: `2px solid ${bgColor}`
538
- },
539
- ghost: {
540
- backgroundColor: "transparent",
541
- color: bgColor
542
- },
543
- link: {
544
- backgroundColor: "transparent",
545
- color: bgColor,
546
- padding: "0",
547
- textDecoration: "underline"
548
- }
549
- };
550
- const style = { ...baseStyle, ...variantStyles[variant] };
551
- const wrapperStyle = {
552
- display: "flex",
553
- justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
554
- };
555
- const content = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { style, children: resolvedText });
563
+ const baseStyle = getBaseStyle(size, borderRadius, fullWidth);
564
+ const variantStyle = getVariantStyles(variant, bgColor, fgColor);
565
+ const style = { ...baseStyle, ...variantStyle };
566
+ const wrapperStyle = getWrapperStyle(align);
556
567
  if (href) {
557
568
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: wrapperStyle, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
558
569
  "a",
@@ -570,8 +581,7 @@ function Button({
570
581
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: wrapperStyle, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { id, type: "button", style, onClick: handleClick, children: resolvedText }) });
571
582
  }
572
583
 
573
- // components/page/Image.tsx
574
- var import_jsx_runtime6 = require("react/jsx-runtime");
584
+ // components/page/primitives/Image.ts
575
585
  var widthMap = {
576
586
  auto: "auto",
577
587
  full: "100%",
@@ -608,6 +618,36 @@ function isThemeableValue4(value) {
608
618
  function isEntryBoundValue4(value) {
609
619
  return typeof value === "object" && value !== null && "useEntry" in value;
610
620
  }
621
+ function getWrapperStyle2(align) {
622
+ return {
623
+ display: "flex",
624
+ flexDirection: "column",
625
+ alignItems: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center",
626
+ gap: "8px"
627
+ };
628
+ }
629
+ function getImageStyle(width, aspectRatio, objectFit, borderRadius, shadow) {
630
+ return {
631
+ width: widthMap[width],
632
+ maxWidth: "100%",
633
+ aspectRatio: aspectRatioMap[aspectRatio],
634
+ objectFit,
635
+ borderRadius: radiusMap2[borderRadius],
636
+ boxShadow: shadowMap[shadow],
637
+ display: "block"
638
+ };
639
+ }
640
+ function getCaptionStyle(align, width, captionColor) {
641
+ return {
642
+ fontSize: "0.875rem",
643
+ color: captionColor,
644
+ textAlign: align,
645
+ maxWidth: widthMap[width]
646
+ };
647
+ }
648
+
649
+ // components/page/next/Image.tsx
650
+ var import_jsx_runtime6 = require("react/jsx-runtime");
611
651
  function Image({
612
652
  src,
613
653
  alt = "",
@@ -655,33 +695,25 @@ function Image({
655
695
  if ("color" in captionColor) return captionColor;
656
696
  return resolveColor2("muted");
657
697
  })();
658
- const wrapperStyle = {
659
- display: "flex",
660
- flexDirection: "column",
661
- alignItems: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center",
662
- gap: "8px"
663
- };
664
- const imageStyle = {
665
- width: widthMap[width],
666
- maxWidth: "100%",
667
- aspectRatio: aspectRatioMap[aspectRatio],
698
+ const wrapperStyle = getWrapperStyle2(align);
699
+ const imageStyle2 = getImageStyle(
700
+ width,
701
+ aspectRatio,
668
702
  objectFit,
669
- borderRadius: radiusMap2[borderRadius],
670
- boxShadow: shadowMap[shadow],
671
- display: "block"
672
- };
673
- const captionStyle = {
674
- fontSize: "0.875rem",
675
- color: hexToRgba(resolvedCaptionColor.color, resolvedCaptionColor.opacity),
676
- textAlign: align,
677
- maxWidth: widthMap[width]
678
- };
703
+ borderRadius,
704
+ shadow
705
+ );
706
+ const captionStyle = getCaptionStyle(
707
+ align,
708
+ width,
709
+ hexToRgba(resolvedCaptionColor.color, resolvedCaptionColor.opacity)
710
+ );
679
711
  if (!resolvedSrc) {
680
712
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: wrapperStyle, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
681
713
  "div",
682
714
  {
683
715
  style: {
684
- ...imageStyle,
716
+ ...imageStyle2,
685
717
  backgroundColor: "#e5e7eb",
686
718
  display: "flex",
687
719
  alignItems: "center",
@@ -694,14 +726,15 @@ function Image({
694
726
  ) });
695
727
  }
696
728
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("figure", { id, style: { ...wrapperStyle, margin: 0 }, children: [
697
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("img", { src: resolvedSrc, alt, style: imageStyle, loading: "lazy" }),
729
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("img", { src: resolvedSrc, alt, style: imageStyle2, loading: "lazy" }),
698
730
  resolvedCaption && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("figcaption", { style: captionStyle, children: resolvedCaption })
699
731
  ] });
700
732
  }
701
733
 
702
- // components/page/ImageCarousel.tsx
734
+ // components/page/next/ImageCarousel.tsx
703
735
  var import_react4 = require("react");
704
- var import_jsx_runtime7 = require("react/jsx-runtime");
736
+
737
+ // components/page/primitives/ImageCarousel.ts
705
738
  var aspectRatioMap2 = {
706
739
  "16:9": "16 / 9",
707
740
  "4:3": "4 / 3",
@@ -717,6 +750,83 @@ var radiusMap3 = {
717
750
  function isThemeableValue5(value) {
718
751
  return typeof value === "object" && value !== null && "useTheme" in value;
719
752
  }
753
+ function getContainerStyle(aspectRatio, borderRadius) {
754
+ return {
755
+ position: "relative",
756
+ aspectRatio: aspectRatioMap2[aspectRatio],
757
+ borderRadius: radiusMap3[borderRadius],
758
+ overflow: "hidden"
759
+ };
760
+ }
761
+ function getSlideContainerStyle(currentIndex) {
762
+ return {
763
+ display: "flex",
764
+ transition: "transform 0.3s ease-in-out",
765
+ transform: `translateX(-${currentIndex * 100}%)`,
766
+ height: "100%"
767
+ };
768
+ }
769
+ var slideStyle = {
770
+ minWidth: "100%",
771
+ height: "100%"
772
+ };
773
+ var imageStyle = {
774
+ width: "100%",
775
+ height: "100%",
776
+ objectFit: "cover"
777
+ };
778
+ function getArrowStyle(arrowColor) {
779
+ return {
780
+ position: "absolute",
781
+ top: "50%",
782
+ transform: "translateY(-50%)",
783
+ backgroundColor: "rgba(0,0,0,0.5)",
784
+ color: arrowColor,
785
+ border: "none",
786
+ borderRadius: "50%",
787
+ width: "40px",
788
+ height: "40px",
789
+ cursor: "pointer",
790
+ display: "flex",
791
+ alignItems: "center",
792
+ justifyContent: "center",
793
+ fontSize: "20px",
794
+ zIndex: 1
795
+ };
796
+ }
797
+ var dotsContainerStyle = {
798
+ position: "absolute",
799
+ bottom: "16px",
800
+ left: "50%",
801
+ transform: "translateX(-50%)",
802
+ display: "flex",
803
+ gap: "8px",
804
+ zIndex: 1
805
+ };
806
+ function getDotStyle(isActive, dotColor) {
807
+ return {
808
+ width: "10px",
809
+ height: "10px",
810
+ borderRadius: "50%",
811
+ border: "none",
812
+ cursor: "pointer",
813
+ backgroundColor: isActive ? dotColor : "rgba(255,255,255,0.5)"
814
+ };
815
+ }
816
+ function getEmptyState(aspectRatio, borderRadius) {
817
+ return {
818
+ aspectRatio: aspectRatioMap2[aspectRatio],
819
+ backgroundColor: "#e5e7eb",
820
+ borderRadius: radiusMap3[borderRadius],
821
+ display: "flex",
822
+ alignItems: "center",
823
+ justifyContent: "center",
824
+ color: "#9ca3af"
825
+ };
826
+ }
827
+
828
+ // components/page/next/ImageCarousel.tsx
829
+ var import_jsx_runtime7 = require("react/jsx-runtime");
720
830
  function ImageCarousel({
721
831
  images = [],
722
832
  aspectRatio = "16:9",
@@ -780,79 +890,18 @@ function ImageCarousel({
780
890
  });
781
891
  };
782
892
  if (images.length === 0) {
783
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
784
- "div",
785
- {
786
- style: {
787
- aspectRatio: aspectRatioMap2[aspectRatio],
788
- backgroundColor: "#e5e7eb",
789
- borderRadius: radiusMap3[borderRadius],
790
- display: "flex",
791
- alignItems: "center",
792
- justifyContent: "center",
793
- color: "#9ca3af"
794
- },
795
- children: "No images"
796
- }
797
- );
893
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: getEmptyState(aspectRatio, borderRadius), children: "No images" });
798
894
  }
799
- const containerStyle = {
800
- position: "relative",
801
- aspectRatio: aspectRatioMap2[aspectRatio],
802
- borderRadius: radiusMap3[borderRadius],
803
- overflow: "hidden"
804
- };
805
- const slideContainerStyle = {
806
- display: "flex",
807
- transition: "transform 0.3s ease-in-out",
808
- transform: `translateX(-${currentIndex * 100}%)`,
809
- height: "100%"
810
- };
811
- const slideStyle = {
812
- minWidth: "100%",
813
- height: "100%"
814
- };
815
- const imageStyle = {
816
- width: "100%",
817
- height: "100%",
818
- objectFit: "cover"
819
- };
820
- const arrowStyle = {
821
- position: "absolute",
822
- top: "50%",
823
- transform: "translateY(-50%)",
824
- backgroundColor: "rgba(0,0,0,0.5)",
825
- color: hexToRgba(resolvedArrowColor.color, resolvedArrowColor.opacity),
826
- border: "none",
827
- borderRadius: "50%",
828
- width: "40px",
829
- height: "40px",
830
- cursor: "pointer",
831
- display: "flex",
832
- alignItems: "center",
833
- justifyContent: "center",
834
- fontSize: "20px",
835
- zIndex: 1
836
- };
837
- const dotsContainerStyle = {
838
- position: "absolute",
839
- bottom: "16px",
840
- left: "50%",
841
- transform: "translateX(-50%)",
842
- display: "flex",
843
- gap: "8px",
844
- zIndex: 1
845
- };
846
- const dotStyle = (isActive) => ({
847
- width: "10px",
848
- height: "10px",
849
- borderRadius: "50%",
850
- border: "none",
851
- cursor: "pointer",
852
- backgroundColor: isActive ? hexToRgba(resolvedDotColor.color, resolvedDotColor.opacity) : "rgba(255,255,255,0.5)"
853
- });
854
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { id, style: containerStyle, children: [
855
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: slideContainerStyle, children: images.map((image, index) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: slideStyle, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
895
+ const arrowColorStr = hexToRgba(
896
+ resolvedArrowColor.color,
897
+ resolvedArrowColor.opacity
898
+ );
899
+ const dotColorStr = hexToRgba(
900
+ resolvedDotColor.color,
901
+ resolvedDotColor.opacity
902
+ );
903
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { id, style: getContainerStyle(aspectRatio, borderRadius), children: [
904
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: getSlideContainerStyle(currentIndex), children: images.map((image, index) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: slideStyle, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
856
905
  "img",
857
906
  {
858
907
  src: image.src,
@@ -867,7 +916,7 @@ function ImageCarousel({
867
916
  {
868
917
  type: "button",
869
918
  onClick: goToPrevious,
870
- style: { ...arrowStyle, left: "16px" },
919
+ style: { ...getArrowStyle(arrowColorStr), left: "16px" },
871
920
  "aria-label": "Previous slide",
872
921
  children: "\u2039"
873
922
  }
@@ -877,7 +926,7 @@ function ImageCarousel({
877
926
  {
878
927
  type: "button",
879
928
  onClick: goToNext,
880
- style: { ...arrowStyle, right: "16px" },
929
+ style: { ...getArrowStyle(arrowColorStr), right: "16px" },
881
930
  "aria-label": "Next slide",
882
931
  children: "\u203A"
883
932
  }
@@ -888,7 +937,7 @@ function ImageCarousel({
888
937
  {
889
938
  type: "button",
890
939
  onClick: () => goToSlide(index),
891
- style: dotStyle(index === currentIndex),
940
+ style: getDotStyle(index === currentIndex, dotColorStr),
892
941
  "aria-label": `Go to slide ${index + 1}`
893
942
  },
894
943
  index
@@ -1021,7 +1070,7 @@ function VideoEmbed({
1021
1070
  ) }) });
1022
1071
  }
1023
1072
 
1024
- // components/page/Icon.tsx
1073
+ // components/page/primitives/Icon.tsx
1025
1074
  var import_jsx_runtime9 = require("react/jsx-runtime");
1026
1075
  var sizeMap = {
1027
1076
  sm: { size: "16px", strokeWidth: 2 },
@@ -1223,6 +1272,16 @@ var icons = {
1223
1272
  function isThemeableValue6(value) {
1224
1273
  return typeof value === "object" && value !== null && "useTheme" in value;
1225
1274
  }
1275
+ function getWrapperStyle3(align) {
1276
+ return {
1277
+ display: "flex",
1278
+ justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
1279
+ };
1280
+ }
1281
+ var availableIcons = Object.keys(icons);
1282
+
1283
+ // components/page/next/Icon.tsx
1284
+ var import_jsx_runtime10 = require("react/jsx-runtime");
1226
1285
  function Icon({
1227
1286
  name = "check",
1228
1287
  size = "md",
@@ -1243,11 +1302,8 @@ function Icon({
1243
1302
  const IconComponent = icons[name.toLowerCase()] || icons.check;
1244
1303
  const { size: iconSize, strokeWidth } = sizeMap[size];
1245
1304
  const colorValue = hexToRgba(resolvedColor.color, resolvedColor.opacity);
1246
- const wrapperStyle = {
1247
- display: "flex",
1248
- justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center"
1249
- };
1250
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { id, style: wrapperStyle, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1305
+ const wrapperStyle = getWrapperStyle3(align);
1306
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { id, style: wrapperStyle, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1251
1307
  IconComponent,
1252
1308
  {
1253
1309
  size: iconSize,
@@ -1256,7 +1312,6 @@ function Icon({
1256
1312
  }
1257
1313
  ) });
1258
1314
  }
1259
- var availableIcons = Object.keys(icons);
1260
1315
 
1261
1316
  // design-system/shadows.ts
1262
1317
  var shadowPresets = [
@@ -1294,8 +1349,7 @@ var getShadowCSS = (value) => {
1294
1349
  return preset?.css ?? "none";
1295
1350
  };
1296
1351
 
1297
- // components/page/Section.tsx
1298
- var import_jsx_runtime10 = require("react/jsx-runtime");
1352
+ // components/page/primitives/Section.ts
1299
1353
  function isThemeableValue7(value) {
1300
1354
  return typeof value === "object" && value !== null && "useTheme" in value;
1301
1355
  }
@@ -1327,6 +1381,20 @@ function getVisibilityClasses(visibility) {
1327
1381
  }
1328
1382
  return "";
1329
1383
  }
1384
+ function getSectionStyle(verticalPadding, horizontalPadding, gap, backgroundColor, backgroundImage, shadow, borderRadius) {
1385
+ return {
1386
+ padding: `${verticalPadding}px ${horizontalPadding}px`,
1387
+ gap: `${gap}px`,
1388
+ backgroundColor,
1389
+ backgroundImage: backgroundImage ? `url(${backgroundImage})` : void 0,
1390
+ backgroundSize: "cover",
1391
+ backgroundPosition: "center",
1392
+ borderRadius: `${borderRadius}px`
1393
+ };
1394
+ }
1395
+
1396
+ // components/page/next/Section.tsx
1397
+ var import_jsx_runtime11 = require("react/jsx-runtime");
1330
1398
  function Section({
1331
1399
  children: _children,
1332
1400
  verticalPadding = 48,
@@ -1343,28 +1411,30 @@ function Section({
1343
1411
  }) {
1344
1412
  const { resolveColor: resolveColor2 } = useTheme();
1345
1413
  const DropZone = puck?.renderDropZone;
1346
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1414
+ const style = {
1415
+ ...getSectionStyle(
1416
+ verticalPadding,
1417
+ horizontalPadding,
1418
+ gap,
1419
+ resolveBackgroundColor(backgroundColor, resolveColor2),
1420
+ backgroundImage,
1421
+ shadow,
1422
+ borderRadius
1423
+ ),
1424
+ boxShadow: getShadowCSS(shadow)
1425
+ };
1426
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1347
1427
  "section",
1348
1428
  {
1349
1429
  id: anchorLink,
1350
1430
  className: cn("flex w-full flex-col", getVisibilityClasses(visibility)),
1351
- style: {
1352
- padding: `${verticalPadding}px ${horizontalPadding}px`,
1353
- gap: `${gap}px`,
1354
- backgroundColor: resolveBackgroundColor(backgroundColor, resolveColor2),
1355
- backgroundImage: backgroundImage ? `url(${backgroundImage})` : void 0,
1356
- backgroundSize: "cover",
1357
- backgroundPosition: "center",
1358
- boxShadow: getShadowCSS(shadow),
1359
- borderRadius: `${borderRadius}px`
1360
- },
1361
- children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "mx-auto w-full", style: { maxWidth: contentMaxWidth }, children: DropZone && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropZone, { zone: "content" }) })
1431
+ style,
1432
+ children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "mx-auto w-full", style: { maxWidth: contentMaxWidth }, children: DropZone && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropZone, { zone: "content" }) })
1362
1433
  }
1363
1434
  );
1364
1435
  }
1365
1436
 
1366
- // components/page/Container.tsx
1367
- var import_jsx_runtime11 = require("react/jsx-runtime");
1437
+ // components/page/primitives/Container.ts
1368
1438
  var maxWidthMap2 = {
1369
1439
  sm: "640px",
1370
1440
  md: "768px",
@@ -1383,6 +1453,22 @@ var paddingMap = {
1383
1453
  function isThemeableValue8(value) {
1384
1454
  return typeof value === "object" && value !== null && "useTheme" in value;
1385
1455
  }
1456
+ function getContainerStyle2(maxWidth, paddingX, paddingY, centered, backgroundColor) {
1457
+ return {
1458
+ maxWidth: maxWidthMap2[maxWidth],
1459
+ marginLeft: centered ? "auto" : void 0,
1460
+ marginRight: centered ? "auto" : void 0,
1461
+ paddingLeft: paddingMap[paddingX],
1462
+ paddingRight: paddingMap[paddingX],
1463
+ paddingTop: paddingMap[paddingY],
1464
+ paddingBottom: paddingMap[paddingY],
1465
+ backgroundColor,
1466
+ width: "100%"
1467
+ };
1468
+ }
1469
+
1470
+ // components/page/next/Container.tsx
1471
+ var import_jsx_runtime12 = require("react/jsx-runtime");
1386
1472
  function Container({
1387
1473
  maxWidth = "lg",
1388
1474
  padding,
@@ -1407,22 +1493,17 @@ function Container({
1407
1493
  })();
1408
1494
  const effectivePaddingX = padding || paddingX;
1409
1495
  const effectivePaddingY = padding || paddingY;
1410
- const style = {
1411
- maxWidth: maxWidthMap2[maxWidth],
1412
- marginLeft: centered ? "auto" : void 0,
1413
- marginRight: centered ? "auto" : void 0,
1414
- paddingLeft: paddingMap[effectivePaddingX],
1415
- paddingRight: paddingMap[effectivePaddingX],
1416
- paddingTop: paddingMap[effectivePaddingY],
1417
- paddingBottom: paddingMap[effectivePaddingY],
1418
- backgroundColor: resolvedBgColor ? hexToRgba(resolvedBgColor.color, resolvedBgColor.opacity) : void 0,
1419
- width: "100%"
1420
- };
1421
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { id, style, children: DropZone && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropZone, { zone: "container-content" }) });
1496
+ const style = getContainerStyle2(
1497
+ maxWidth,
1498
+ effectivePaddingX,
1499
+ effectivePaddingY,
1500
+ centered,
1501
+ resolvedBgColor ? hexToRgba(resolvedBgColor.color, resolvedBgColor.opacity) : void 0
1502
+ );
1503
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { id, style, children: DropZone && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropZone, { zone: "container-content" }) });
1422
1504
  }
1423
1505
 
1424
- // components/page/Columns.tsx
1425
- var import_jsx_runtime12 = require("react/jsx-runtime");
1506
+ // components/page/primitives/Columns.ts
1426
1507
  var gapMap = {
1427
1508
  none: "0",
1428
1509
  sm: "16px",
@@ -1436,6 +1517,17 @@ var alignMap = {
1436
1517
  bottom: "flex-end",
1437
1518
  stretch: "stretch"
1438
1519
  };
1520
+ function getContainerStyle3(columns, gap, verticalAlign) {
1521
+ return {
1522
+ display: "grid",
1523
+ gridTemplateColumns: `repeat(${columns}, 1fr)`,
1524
+ gap: gapMap[gap],
1525
+ alignItems: alignMap[verticalAlign]
1526
+ };
1527
+ }
1528
+
1529
+ // components/page/next/Columns.tsx
1530
+ var import_jsx_runtime13 = require("react/jsx-runtime");
1439
1531
  function Columns({
1440
1532
  columns = 2,
1441
1533
  gap = "md",
@@ -1445,17 +1537,11 @@ function Columns({
1445
1537
  puck
1446
1538
  }) {
1447
1539
  const DropZone = puck?.renderDropZone;
1448
- const containerStyle = {
1449
- display: "grid",
1450
- gridTemplateColumns: `repeat(${columns}, 1fr)`,
1451
- gap: gapMap[gap],
1452
- alignItems: alignMap[verticalAlign]
1453
- };
1454
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { id, style: containerStyle, children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { minWidth: 0 }, children: DropZone && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropZone, { zone: `column-${index}` }) }, index)) });
1540
+ const containerStyle = getContainerStyle3(columns, gap, verticalAlign);
1541
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { id, style: containerStyle, children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { minWidth: 0 }, children: DropZone && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropZone, { zone: `column-${index}` }) }, index)) });
1455
1542
  }
1456
1543
 
1457
- // components/page/Card.tsx
1458
- var import_jsx_runtime13 = require("react/jsx-runtime");
1544
+ // components/page/primitives/Card.ts
1459
1545
  var borderWidthMap = {
1460
1546
  none: "0",
1461
1547
  thin: "1px",
@@ -1486,6 +1572,18 @@ var paddingMap2 = {
1486
1572
  function isThemeableValue9(value) {
1487
1573
  return typeof value === "object" && value !== null && "useTheme" in value;
1488
1574
  }
1575
+ function getCardStyle(backgroundColor, borderColor, borderWidth, borderRadius, shadow, padding) {
1576
+ return {
1577
+ backgroundColor,
1578
+ border: borderWidth !== "none" ? `${borderWidthMap[borderWidth]} solid ${borderColor}` : "none",
1579
+ borderRadius: radiusMap5[borderRadius],
1580
+ boxShadow: shadowMap2[shadow],
1581
+ padding: paddingMap2[padding]
1582
+ };
1583
+ }
1584
+
1585
+ // components/page/next/Card.tsx
1586
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1489
1587
  function Card({
1490
1588
  backgroundColor,
1491
1589
  borderColor,
@@ -1518,18 +1616,18 @@ function Card({
1518
1616
  if ("color" in borderColor) return borderColor;
1519
1617
  return resolveColor2("muted");
1520
1618
  })();
1521
- const style = {
1522
- backgroundColor: hexToRgba(resolvedBgColor.color, resolvedBgColor.opacity),
1523
- border: borderWidth !== "none" ? `${borderWidthMap[borderWidth]} solid ${hexToRgba(resolvedBorderColor.color, resolvedBorderColor.opacity)}` : "none",
1524
- borderRadius: radiusMap5[borderRadius],
1525
- boxShadow: shadowMap2[shadow],
1526
- padding: paddingMap2[padding]
1527
- };
1528
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { id, style, children: DropZone && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DropZone, { zone: "card-content" }) });
1619
+ const style = getCardStyle(
1620
+ hexToRgba(resolvedBgColor.color, resolvedBgColor.opacity),
1621
+ hexToRgba(resolvedBorderColor.color, resolvedBorderColor.opacity),
1622
+ borderWidth,
1623
+ borderRadius,
1624
+ shadow,
1625
+ padding
1626
+ );
1627
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { id, style, children: DropZone && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropZone, { zone: "card-content" }) });
1529
1628
  }
1530
1629
 
1531
- // components/page/Divider.tsx
1532
- var import_jsx_runtime14 = require("react/jsx-runtime");
1630
+ // components/page/primitives/Divider.ts
1533
1631
  var thicknessMap = {
1534
1632
  thin: "1px",
1535
1633
  medium: "2px",
@@ -1550,6 +1648,24 @@ var spacingMap = {
1550
1648
  function isThemeableValue10(value) {
1551
1649
  return typeof value === "object" && value !== null && "useTheme" in value;
1552
1650
  }
1651
+ function getWrapperStyle4(align, spacing) {
1652
+ return {
1653
+ display: "flex",
1654
+ justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center",
1655
+ padding: `${spacingMap[spacing]} 0`
1656
+ };
1657
+ }
1658
+ function getHrStyle(width, thickness, lineStyle, color) {
1659
+ return {
1660
+ width: widthMap2[width],
1661
+ border: "none",
1662
+ borderTop: `${thicknessMap[thickness]} ${lineStyle} ${color}`,
1663
+ margin: 0
1664
+ };
1665
+ }
1666
+
1667
+ // components/page/next/Divider.tsx
1668
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1553
1669
  function Divider({
1554
1670
  style: lineStyle = "solid",
1555
1671
  thickness = "thin",
@@ -1569,22 +1685,17 @@ function Divider({
1569
1685
  if ("color" in color) return color;
1570
1686
  return resolveColor2("muted");
1571
1687
  })();
1572
- const wrapperStyle = {
1573
- display: "flex",
1574
- justifyContent: align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center",
1575
- padding: `${spacingMap[spacing]} 0`
1576
- };
1577
- const hrStyle = {
1578
- width: widthMap2[width],
1579
- border: "none",
1580
- borderTop: `${thicknessMap[thickness]} ${lineStyle} ${hexToRgba(resolvedColor.color, resolvedColor.opacity)}`,
1581
- margin: 0
1582
- };
1583
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { id, style: wrapperStyle, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("hr", { style: hrStyle }) });
1688
+ const wrapperStyle = getWrapperStyle4(align, spacing);
1689
+ const hrStyle = getHrStyle(
1690
+ width,
1691
+ thickness,
1692
+ lineStyle,
1693
+ hexToRgba(resolvedColor.color, resolvedColor.opacity)
1694
+ );
1695
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { id, style: wrapperStyle, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("hr", { style: hrStyle }) });
1584
1696
  }
1585
1697
 
1586
- // components/page/Spacer.tsx
1587
- var import_jsx_runtime15 = require("react/jsx-runtime");
1698
+ // components/page/primitives/Spacer.ts
1588
1699
  var sizeMap2 = {
1589
1700
  xs: "8px",
1590
1701
  sm: "16px",
@@ -1594,16 +1705,19 @@ var sizeMap2 = {
1594
1705
  "2xl": "64px",
1595
1706
  "3xl": "96px"
1596
1707
  };
1708
+
1709
+ // components/page/next/Spacer.tsx
1710
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1597
1711
  function Spacer({ size = "md", id }) {
1598
1712
  const style = {
1599
1713
  height: sizeMap2[size],
1600
1714
  width: "100%"
1601
1715
  };
1602
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { id, style, "aria-hidden": "true" });
1716
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { id, style, "aria-hidden": "true" });
1603
1717
  }
1604
1718
 
1605
1719
  // components/page/TextBlock.tsx
1606
- var import_jsx_runtime16 = require("react/jsx-runtime");
1720
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1607
1721
  var alignmentMap = {
1608
1722
  left: "text-left",
1609
1723
  center: "text-center",
@@ -1689,13 +1803,13 @@ function TextBlock({
1689
1803
  WebkitTextFillColor: "transparent",
1690
1804
  backgroundClip: "text"
1691
1805
  } : { color: titleColorValue };
1692
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
1806
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1693
1807
  "div",
1694
1808
  {
1695
1809
  id: anchorLink,
1696
1810
  className: cn("flex flex-col gap-4", alignmentMap[alignment]),
1697
1811
  children: [
1698
- resolvedTitle && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1812
+ resolvedTitle && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1699
1813
  "h2",
1700
1814
  {
1701
1815
  className: cn("font-bold", sizeMap3[textSize]),
@@ -1703,8 +1817,8 @@ function TextBlock({
1703
1817
  children: resolvedTitle
1704
1818
  }
1705
1819
  ),
1706
- resolvedSubtitle && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-xl", style: { color: subtitleColorValue }, children: resolvedSubtitle }),
1707
- resolvedBody && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1820
+ resolvedSubtitle && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-xl", style: { color: subtitleColorValue }, children: resolvedSubtitle }),
1821
+ resolvedBody && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1708
1822
  "div",
1709
1823
  {
1710
1824
  className: "prose max-w-none",
@@ -1718,7 +1832,7 @@ function TextBlock({
1718
1832
  }
1719
1833
 
1720
1834
  // components/page/CustomImage.tsx
1721
- var import_jsx_runtime17 = require("react/jsx-runtime");
1835
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1722
1836
  var alignmentMap2 = {
1723
1837
  left: "mr-auto",
1724
1838
  center: "mx-auto",
@@ -1732,9 +1846,9 @@ function CustomImage({
1732
1846
  fitContent = false
1733
1847
  }) {
1734
1848
  if (!image) {
1735
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex h-48 w-full items-center justify-center bg-gray-200 text-gray-400", children: "No image" });
1849
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "flex h-48 w-full items-center justify-center bg-gray-200 text-gray-400", children: "No image" });
1736
1850
  }
1737
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1851
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1738
1852
  "img",
1739
1853
  {
1740
1854
  src: image,
@@ -1751,7 +1865,7 @@ function CustomImage({
1751
1865
 
1752
1866
  // components/page/FeaturesList.tsx
1753
1867
  var import_lucide_react = require("lucide-react");
1754
- var import_jsx_runtime18 = require("react/jsx-runtime");
1868
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1755
1869
  var sizeMap4 = {
1756
1870
  small: { icon: 24, title: "text-base", desc: "text-sm" },
1757
1871
  medium: { icon: 32, title: "text-lg", desc: "text-base" },
@@ -1769,7 +1883,7 @@ function FeaturesList({
1769
1883
  const formatted = iconName.charAt(0).toUpperCase() + iconName.slice(1);
1770
1884
  return import_lucide_react.icons[formatted] || null;
1771
1885
  };
1772
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1886
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1773
1887
  "div",
1774
1888
  {
1775
1889
  id: anchorLink,
@@ -1780,7 +1894,7 @@ function FeaturesList({
1780
1894
  ),
1781
1895
  children: features.map((feature, index) => {
1782
1896
  const IconComponent = feature.icon ? getIcon(feature.icon) : null;
1783
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1897
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1784
1898
  "div",
1785
1899
  {
1786
1900
  className: cn(
@@ -1789,7 +1903,7 @@ function FeaturesList({
1789
1903
  align === "right" && "flex-row-reverse"
1790
1904
  ),
1791
1905
  children: [
1792
- feature.image ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1906
+ feature.image ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1793
1907
  "img",
1794
1908
  {
1795
1909
  src: feature.image,
@@ -1797,7 +1911,7 @@ function FeaturesList({
1797
1911
  className: "object-contain",
1798
1912
  style: { width: sizeConfig.icon, height: sizeConfig.icon }
1799
1913
  }
1800
- ) : IconComponent ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1914
+ ) : IconComponent ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1801
1915
  IconComponent,
1802
1916
  {
1803
1917
  size: sizeConfig.icon,
@@ -1805,9 +1919,9 @@ function FeaturesList({
1805
1919
  className: "flex-shrink-0"
1806
1920
  }
1807
1921
  ) : null,
1808
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex flex-col gap-1", children: [
1809
- feature.title && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("h3", { className: cn("font-semibold", sizeConfig.title), children: feature.title }),
1810
- feature.description && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: cn("text-gray-600", sizeConfig.desc), children: feature.description })
1922
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex flex-col gap-1", children: [
1923
+ feature.title && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("h3", { className: cn("font-semibold", sizeConfig.title), children: feature.title }),
1924
+ feature.description && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: cn("text-gray-600", sizeConfig.desc), children: feature.description })
1811
1925
  ] })
1812
1926
  ]
1813
1927
  },
@@ -1820,7 +1934,7 @@ function FeaturesList({
1820
1934
 
1821
1935
  // components/page/FeatureGrid.tsx
1822
1936
  var import_lucide_react2 = require("lucide-react");
1823
- var import_jsx_runtime19 = require("react/jsx-runtime");
1937
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1824
1938
  var sizeMap5 = {
1825
1939
  small: { icon: 24, title: "text-base", desc: "text-sm" },
1826
1940
  medium: { icon: 32, title: "text-lg", desc: "text-base" },
@@ -1847,8 +1961,8 @@ function FeatureGrid({
1847
1961
  3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3",
1848
1962
  4: "grid-cols-1 md:grid-cols-2 lg:grid-cols-4"
1849
1963
  };
1850
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { id: anchorLink, className: "flex flex-col gap-8", children: [
1851
- (heading || description) && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1964
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { id: anchorLink, className: "flex flex-col gap-8", children: [
1965
+ (heading || description) && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1852
1966
  "div",
1853
1967
  {
1854
1968
  className: cn(
@@ -1857,14 +1971,14 @@ function FeatureGrid({
1857
1971
  align === "right" && "text-right"
1858
1972
  ),
1859
1973
  children: [
1860
- heading && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("h2", { className: "text-3xl font-bold", style: { color: textColor }, children: heading }),
1861
- description && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-gray-600", children: description })
1974
+ heading && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("h2", { className: "text-3xl font-bold", style: { color: textColor }, children: heading }),
1975
+ description && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-gray-600", children: description })
1862
1976
  ]
1863
1977
  }
1864
1978
  ),
1865
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: cn("grid gap-6", columnClass[columns]), children: features.map((feature, index) => {
1979
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: cn("grid gap-6", columnClass[columns]), children: features.map((feature, index) => {
1866
1980
  const IconComponent = feature.icon ? getIcon(feature.icon) : null;
1867
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1981
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1868
1982
  "div",
1869
1983
  {
1870
1984
  className: cn(
@@ -1872,7 +1986,7 @@ function FeatureGrid({
1872
1986
  align === "center" && "items-center text-center"
1873
1987
  ),
1874
1988
  children: [
1875
- feature.image ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1989
+ feature.image ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1876
1990
  "img",
1877
1991
  {
1878
1992
  src: feature.image,
@@ -1880,14 +1994,14 @@ function FeatureGrid({
1880
1994
  className: "object-contain",
1881
1995
  style: { width: sizeConfig.icon, height: sizeConfig.icon }
1882
1996
  }
1883
- ) : IconComponent ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1997
+ ) : IconComponent ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1884
1998
  IconComponent,
1885
1999
  {
1886
2000
  size: sizeConfig.icon,
1887
2001
  style: { color: iconColor }
1888
2002
  }
1889
2003
  ) : null,
1890
- feature.title && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2004
+ feature.title && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1891
2005
  "h3",
1892
2006
  {
1893
2007
  className: cn("font-semibold", sizeConfig.title),
@@ -1895,7 +2009,7 @@ function FeatureGrid({
1895
2009
  children: feature.title
1896
2010
  }
1897
2011
  ),
1898
- feature.description && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: cn("text-gray-600", sizeConfig.desc), children: feature.description })
2012
+ feature.description && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: cn("text-gray-600", sizeConfig.desc), children: feature.description })
1899
2013
  ]
1900
2014
  },
1901
2015
  index
@@ -1906,7 +2020,7 @@ function FeatureGrid({
1906
2020
 
1907
2021
  // components/page/Footer.tsx
1908
2022
  var import_lucide_react3 = require("lucide-react");
1909
- var import_jsx_runtime20 = require("react/jsx-runtime");
2023
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1910
2024
  function Footer({
1911
2025
  logo,
1912
2026
  copyright = "\xA9 2024 Company. All rights reserved.",
@@ -1941,15 +2055,15 @@ function Footer({
1941
2055
  ].filter(
1942
2056
  (link) => !!link.url
1943
2057
  );
1944
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2058
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1945
2059
  "footer",
1946
2060
  {
1947
2061
  className: "w-full px-6 py-8",
1948
2062
  style: { backgroundColor, color: textColor },
1949
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "mx-auto flex max-w-7xl flex-col items-center justify-between gap-6 md:flex-row", children: [
1950
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex items-center gap-4", children: logo && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("img", { src: logo, alt: "Logo", className: "h-8" }) }),
1951
- DropZone && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(DropZone, { zone: "footer-content" }),
1952
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex items-center gap-4", children: socialLinks.map(({ url, Icon: Icon3 }, index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2063
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "mx-auto flex max-w-7xl flex-col items-center justify-between gap-6 md:flex-row", children: [
2064
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "flex items-center gap-4", children: logo && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("img", { src: logo, alt: "Logo", className: "h-8" }) }),
2065
+ DropZone && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(DropZone, { zone: "footer-content" }),
2066
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "flex items-center gap-4", children: socialLinks.map(({ url, Icon: Icon3 }, index) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1953
2067
  "a",
1954
2068
  {
1955
2069
  href: url,
@@ -1957,11 +2071,11 @@ function Footer({
1957
2071
  rel: "noopener noreferrer",
1958
2072
  className: "transition-opacity hover:opacity-80",
1959
2073
  onClick: () => handleSocialClick(url),
1960
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Icon3, { size: 24, style: { color: textColor } })
2074
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Icon3, { size: 24, style: { color: textColor } })
1961
2075
  },
1962
2076
  index
1963
2077
  )) }),
1964
- copyright && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-sm opacity-80", children: copyright })
2078
+ copyright && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "text-sm opacity-80", children: copyright })
1965
2079
  ] })
1966
2080
  }
1967
2081
  );
@@ -1970,7 +2084,7 @@ function Footer({
1970
2084
  // components/page/Topbar.tsx
1971
2085
  var import_react5 = require("react");
1972
2086
  var import_lucide_react4 = require("lucide-react");
1973
- var import_jsx_runtime21 = require("react/jsx-runtime");
2087
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1974
2088
  function Topbar({
1975
2089
  logo,
1976
2090
  logoUrl = "/",
@@ -2003,7 +2117,7 @@ function Topbar({
2003
2117
  const renderLink = (item, index) => {
2004
2118
  const className = "hover:opacity-80 transition-opacity";
2005
2119
  if (item.linkType === "external") {
2006
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2120
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2007
2121
  "a",
2008
2122
  {
2009
2123
  href: item.url,
@@ -2017,7 +2131,7 @@ function Topbar({
2017
2131
  );
2018
2132
  }
2019
2133
  if (item.linkType === "scrollTo") {
2020
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2134
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2021
2135
  "a",
2022
2136
  {
2023
2137
  href: item.url,
@@ -2028,7 +2142,7 @@ function Topbar({
2028
2142
  index
2029
2143
  );
2030
2144
  }
2031
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2145
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2032
2146
  "a",
2033
2147
  {
2034
2148
  href: item.url,
@@ -2039,19 +2153,19 @@ function Topbar({
2039
2153
  index
2040
2154
  );
2041
2155
  };
2042
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
2156
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
2043
2157
  "nav",
2044
2158
  {
2045
2159
  className: "sticky top-0 z-50 w-full px-6 py-4",
2046
2160
  style: { backgroundColor, color: textColor },
2047
2161
  children: [
2048
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
2162
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
2049
2163
  "div",
2050
2164
  {
2051
2165
  className: "mx-auto flex items-center justify-between",
2052
2166
  style: { maxWidth },
2053
2167
  children: [
2054
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2168
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2055
2169
  "a",
2056
2170
  {
2057
2171
  href: logoUrl,
@@ -2062,25 +2176,25 @@ function Topbar({
2062
2176
  linkType: "internal",
2063
2177
  ...utm
2064
2178
  }),
2065
- children: logo ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("img", { src: logo, alt: "Logo", className: "h-8" }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "text-xl font-bold", children: "Logo" })
2179
+ children: logo ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("img", { src: logo, alt: "Logo", className: "h-8" }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "text-xl font-bold", children: "Logo" })
2066
2180
  }
2067
2181
  ),
2068
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "hidden items-center gap-8 md:flex", children: [
2182
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "hidden items-center gap-8 md:flex", children: [
2069
2183
  navItems.map(renderLink),
2070
- DropZone && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(DropZone, { zone: "cta" })
2184
+ DropZone && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DropZone, { zone: "cta" })
2071
2185
  ] }),
2072
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("button", { className: "md:hidden", onClick: handleMobileMenuToggle, children: mobileMenuOpen ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react4.X, { size: 24 }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react4.Menu, { size: 24 }) })
2186
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("button", { className: "md:hidden", onClick: handleMobileMenuToggle, children: mobileMenuOpen ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react4.X, { size: 24 }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react4.Menu, { size: 24 }) })
2073
2187
  ]
2074
2188
  }
2075
2189
  ),
2076
- mobileMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
2190
+ mobileMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
2077
2191
  "div",
2078
2192
  {
2079
2193
  className: "absolute top-full right-0 left-0 flex flex-col gap-4 px-6 py-4 md:hidden",
2080
2194
  style: { backgroundColor },
2081
2195
  children: [
2082
2196
  navItems.map(renderLink),
2083
- DropZone && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(DropZone, { zone: "cta" })
2197
+ DropZone && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DropZone, { zone: "cta" })
2084
2198
  ]
2085
2199
  }
2086
2200
  )
@@ -2092,12 +2206,12 @@ function Topbar({
2092
2206
  // components/page/Popup.tsx
2093
2207
  var import_react6 = require("react");
2094
2208
  var import_lucide_react5 = require("lucide-react");
2095
- var import_jsx_runtime22 = require("react/jsx-runtime");
2209
+ var import_jsx_runtime23 = require("react/jsx-runtime");
2096
2210
  function Icon2({ name, ...props }) {
2097
2211
  const formatted = name.charAt(0).toUpperCase() + name.slice(1);
2098
2212
  const IconComponent = import_lucide_react5.icons[formatted];
2099
2213
  if (!IconComponent) return null;
2100
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(IconComponent, { ...props });
2214
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(IconComponent, { ...props });
2101
2215
  }
2102
2216
  var widthMap3 = {
2103
2217
  small: "max-w-sm",
@@ -2135,7 +2249,7 @@ function Popup({
2135
2249
  setIsOpen(false);
2136
2250
  sendEvent("popup_close", { ctaText, ...utm });
2137
2251
  };
2138
- const trigger = textLink ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2252
+ const trigger = textLink ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2139
2253
  "button",
2140
2254
  {
2141
2255
  onClick: handleOpen,
@@ -2143,7 +2257,7 @@ function Popup({
2143
2257
  style: { color: buttonColor },
2144
2258
  children: ctaText
2145
2259
  }
2146
- ) : /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
2260
+ ) : /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2147
2261
  "button",
2148
2262
  {
2149
2263
  onClick: handleOpen,
@@ -2153,20 +2267,20 @@ function Popup({
2153
2267
  ),
2154
2268
  style: { backgroundColor: buttonColor, color: textColor },
2155
2269
  children: [
2156
- icon && iconPosition === "left" && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Icon2, { name: icon, size: 18 }),
2270
+ icon && iconPosition === "left" && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Icon2, { name: icon, size: 18 }),
2157
2271
  ctaText,
2158
- icon && iconPosition === "right" && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Icon2, { name: icon, size: 18 })
2272
+ icon && iconPosition === "right" && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Icon2, { name: icon, size: 18 })
2159
2273
  ]
2160
2274
  }
2161
2275
  );
2162
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
2276
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
2163
2277
  trigger,
2164
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2278
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2165
2279
  "div",
2166
2280
  {
2167
2281
  className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4",
2168
2282
  onClick: handleClose,
2169
- children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
2283
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2170
2284
  "div",
2171
2285
  {
2172
2286
  className: cn(
@@ -2175,15 +2289,15 @@ function Popup({
2175
2289
  ),
2176
2290
  onClick: (e) => e.stopPropagation(),
2177
2291
  children: [
2178
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2292
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2179
2293
  "button",
2180
2294
  {
2181
2295
  onClick: handleClose,
2182
2296
  className: "absolute top-4 right-4 text-gray-500 hover:text-gray-700",
2183
- children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react5.X, { size: 24 })
2297
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react5.X, { size: 24 })
2184
2298
  }
2185
2299
  ),
2186
- puck && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(puck.renderDropZone, { zone: "popup-content" })
2300
+ puck && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(puck.renderDropZone, { zone: "popup-content" })
2187
2301
  ]
2188
2302
  }
2189
2303
  )