@opensite/ui 0.8.4 → 0.8.6

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 (107) hide show
  1. package/dist/article-breadcrumb-social.cjs +57 -73
  2. package/dist/article-breadcrumb-social.d.cts +2 -24
  3. package/dist/article-breadcrumb-social.d.ts +2 -24
  4. package/dist/article-breadcrumb-social.js +57 -73
  5. package/dist/article-compact-toc.cjs +1 -1
  6. package/dist/article-compact-toc.js +1 -1
  7. package/dist/article-sidebar-sticky.cjs +73 -26
  8. package/dist/article-sidebar-sticky.js +73 -26
  9. package/dist/blog-horizontal-timeline.cjs +7 -4
  10. package/dist/blog-horizontal-timeline.js +7 -4
  11. package/dist/faq-badge-support.cjs +18 -5
  12. package/dist/faq-badge-support.js +18 -5
  13. package/dist/faq-bordered-badge.cjs +23 -7
  14. package/dist/faq-bordered-badge.js +23 -7
  15. package/dist/faq-card-categories.cjs +20 -4
  16. package/dist/faq-card-categories.js +20 -4
  17. package/dist/faq-categorized-sections.cjs +19 -4
  18. package/dist/faq-categorized-sections.js +19 -4
  19. package/dist/faq-centered-accordion.cjs +18 -5
  20. package/dist/faq-centered-accordion.js +18 -5
  21. package/dist/faq-gradient-categories.cjs +19 -4
  22. package/dist/faq-gradient-categories.js +19 -4
  23. package/dist/faq-icon-benefits.cjs +11 -2
  24. package/dist/faq-icon-benefits.js +11 -2
  25. package/dist/faq-muted-cards.cjs +19 -6
  26. package/dist/faq-muted-cards.js +19 -6
  27. package/dist/faq-numbered-grid.cjs +11 -3
  28. package/dist/faq-numbered-grid.js +11 -3
  29. package/dist/faq-numbered-list.cjs +11 -3
  30. package/dist/faq-numbered-list.js +11 -3
  31. package/dist/faq-profile-sidebar.cjs +57 -20
  32. package/dist/faq-profile-sidebar.js +57 -20
  33. package/dist/faq-rounded-cards.cjs +26 -19
  34. package/dist/faq-rounded-cards.js +26 -19
  35. package/dist/faq-sidebar-navigation.cjs +48 -28
  36. package/dist/faq-sidebar-navigation.js +48 -28
  37. package/dist/faq-simple-accordion.cjs +17 -4
  38. package/dist/faq-simple-accordion.js +17 -4
  39. package/dist/faq-split-help.cjs +25 -6
  40. package/dist/faq-split-help.js +25 -6
  41. package/dist/faq-split-hero.cjs +604 -0
  42. package/dist/faq-split-hero.d.cts +116 -0
  43. package/dist/faq-split-hero.d.ts +116 -0
  44. package/dist/faq-split-hero.js +582 -0
  45. package/dist/faq-static-list.cjs +9 -2
  46. package/dist/faq-static-list.js +9 -2
  47. package/dist/feature-accordion-image.cjs +8 -2
  48. package/dist/feature-accordion-image.js +8 -2
  49. package/dist/feature-badge-grid-six.cjs +1 -1
  50. package/dist/feature-badge-grid-six.js +1 -1
  51. package/dist/feature-card-grid-linked.cjs +92 -22
  52. package/dist/feature-card-grid-linked.js +92 -22
  53. package/dist/feature-carousel-progress.cjs +1 -1
  54. package/dist/feature-carousel-progress.js +1 -1
  55. package/dist/feature-checklist-image.cjs +88 -15
  56. package/dist/feature-checklist-image.js +88 -15
  57. package/dist/feature-checklist-three-column.cjs +1 -1
  58. package/dist/feature-checklist-three-column.js +1 -1
  59. package/dist/feature-icon-grid-accent.cjs +50 -8
  60. package/dist/feature-icon-grid-accent.js +50 -8
  61. package/dist/feature-icon-grid-bordered.cjs +84 -14
  62. package/dist/feature-icon-grid-bordered.js +84 -14
  63. package/dist/feature-icon-tabs-content.cjs +217 -84
  64. package/dist/feature-icon-tabs-content.js +217 -84
  65. package/dist/feature-image-overlay-badge.cjs +106 -33
  66. package/dist/feature-image-overlay-badge.js +106 -33
  67. package/dist/feature-numbered-cards.cjs +154 -35
  68. package/dist/feature-numbered-cards.js +154 -35
  69. package/dist/feature-showcase.cjs +66 -71
  70. package/dist/feature-showcase.d.cts +1 -5
  71. package/dist/feature-showcase.d.ts +1 -5
  72. package/dist/feature-showcase.js +67 -72
  73. package/dist/feature-split-image-reverse.cjs +84 -15
  74. package/dist/feature-split-image-reverse.js +84 -15
  75. package/dist/feature-split-image.cjs +87 -15
  76. package/dist/feature-split-image.js +87 -15
  77. package/dist/feature-stats-highlight.cjs +50 -13
  78. package/dist/feature-stats-highlight.js +50 -13
  79. package/dist/feature-tabbed-content-image.cjs +198 -72
  80. package/dist/feature-tabbed-content-image.js +198 -72
  81. package/dist/feature-three-column-values.cjs +67 -14
  82. package/dist/feature-three-column-values.js +67 -14
  83. package/dist/feature-utility-cards-grid.cjs +83 -36
  84. package/dist/feature-utility-cards-grid.js +83 -36
  85. package/dist/navbar-animated-preview.cjs +8 -2
  86. package/dist/navbar-animated-preview.js +8 -2
  87. package/dist/navbar-centered-menu.cjs +8 -2
  88. package/dist/navbar-centered-menu.js +8 -2
  89. package/dist/navbar-dark-icons.cjs +8 -2
  90. package/dist/navbar-dark-icons.js +8 -2
  91. package/dist/navbar-dropdown-menu.cjs +8 -2
  92. package/dist/navbar-dropdown-menu.js +8 -2
  93. package/dist/navbar-education-platform.cjs +8 -2
  94. package/dist/navbar-education-platform.js +8 -2
  95. package/dist/navbar-enterprise-mega.cjs +8 -2
  96. package/dist/navbar-enterprise-mega.js +8 -2
  97. package/dist/navbar-feature-grid.cjs +8 -2
  98. package/dist/navbar-feature-grid.js +8 -2
  99. package/dist/navbar-multi-column-groups.cjs +8 -2
  100. package/dist/navbar-multi-column-groups.js +8 -2
  101. package/dist/navbar-platform-resources.cjs +8 -2
  102. package/dist/navbar-platform-resources.js +8 -2
  103. package/dist/navbar-sidebar-mobile.cjs +8 -2
  104. package/dist/navbar-sidebar-mobile.js +8 -2
  105. package/dist/registry.cjs +1873 -680
  106. package/dist/registry.js +1873 -680
  107. package/package.json +1 -1
@@ -1002,7 +1002,7 @@ function FeatureImageOverlayBadge({
1002
1002
  overlayTitleClassName,
1003
1003
  optixFlowConfig,
1004
1004
  background,
1005
- spacing,
1005
+ spacing = "py-6 md:py-32",
1006
1006
  pattern,
1007
1007
  patternOpacity,
1008
1008
  patternClassName
@@ -1055,7 +1055,10 @@ function FeatureImageOverlayBadge({
1055
1055
  {
1056
1056
  src: imageSrc,
1057
1057
  alt: imageAlt || "Feature illustration",
1058
- className: cn("rounded-xl object-cover md:aspect-video lg:aspect-auto", imageClassName),
1058
+ className: cn(
1059
+ "rounded-2xl object-cover md:aspect-video lg:aspect-auto w-full h-auto",
1060
+ imageClassName
1061
+ ),
1059
1062
  loading: "lazy",
1060
1063
  optixFlowConfig
1061
1064
  }
@@ -1073,41 +1076,111 @@ function FeatureImageOverlayBadge({
1073
1076
  patternClassName,
1074
1077
  className,
1075
1078
  containerClassName,
1076
- children: /* @__PURE__ */ jsxs("div", { className: cn("grid place-items-center gap-10 lg:grid-cols-2", gridClassName), children: [
1077
- /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-5", contentClassName), children: [
1078
- badge && /* @__PURE__ */ jsx(Badge, { variant: "outline", className: cn("w-fit bg-background", badgeClassName), children: badge }),
1079
- title && (typeof title === "string" ? /* @__PURE__ */ jsx("h3", { className: cn("text-3xl font-semibold lg:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: cn("text-3xl font-semibold lg:text-5xl", titleClassName), children: title })),
1080
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground lg:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("text-muted-foreground lg:text-lg", descriptionClassName), children: description })),
1081
- /* @__PURE__ */ jsx("div", { className: actionsClassName, children: actionsContent })
1082
- ] }),
1083
- imageContent && /* @__PURE__ */ jsxs("div", { className: cn("relative rounded-xl", imageWrapperClassName), children: [
1084
- imageContent,
1085
- (avatarSrc || avatarBadgeText || overlayTitle || overlayLinkText) && /* @__PURE__ */ jsxs(Fragment, { children: [
1086
- /* @__PURE__ */ jsx("div", { className: cn("absolute top-0 right-0 bottom-0 left-0 rounded-xl bg-linear-to-t from-primary via-transparent to-transparent", overlayClassName) }),
1087
- /* @__PURE__ */ jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
1088
- (avatarSrc || avatarBadgeText) && /* @__PURE__ */ jsxs("span", { className: cn("ml-auto flex w-fit items-center gap-2 rounded-full bg-background/30 px-4 py-2.5 text-sm font-semibold backdrop-blur-sm", avatarBadgeClassName), children: [
1089
- avatarSrc && /* @__PURE__ */ jsx(Avatar, { className: "size-7 rounded-full", children: /* @__PURE__ */ jsx(AvatarImage, { src: avatarSrc, alt: "Avatar" }) }),
1090
- avatarBadgeText
1091
- ] }),
1092
- (overlayTitle || overlayLinkText) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-5 text-background", children: [
1093
- overlayTitle && (typeof overlayTitle === "string" ? /* @__PURE__ */ jsx("h4", { className: cn("text-lg font-semibold lg:text-3xl", overlayTitleClassName), children: overlayTitle }) : /* @__PURE__ */ jsx("div", { className: cn("text-lg font-semibold lg:text-3xl", overlayTitleClassName), children: overlayTitle })),
1094
- overlayLinkText && /* @__PURE__ */ jsxs(
1095
- Pressable,
1079
+ children: /* @__PURE__ */ jsxs(
1080
+ "div",
1081
+ {
1082
+ className: cn(
1083
+ "grid place-items-center gap-10 lg:grid-cols-2",
1084
+ gridClassName
1085
+ ),
1086
+ children: [
1087
+ /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-5", contentClassName), children: [
1088
+ badge && /* @__PURE__ */ jsx(Badge, { variant: "outline", className: cn("", badgeClassName), children: badge }),
1089
+ title && (typeof title === "string" ? /* @__PURE__ */ jsx(
1090
+ "h3",
1091
+ {
1092
+ className: cn(
1093
+ "text-3xl font-semibold lg:text-4xl leading-snug text-balance",
1094
+ titleClassName
1095
+ ),
1096
+ children: title
1097
+ }
1098
+ ) : /* @__PURE__ */ jsx(
1099
+ "div",
1100
+ {
1101
+ className: cn(
1102
+ "text-3xl font-semibold lg:text-5xl",
1103
+ titleClassName
1104
+ ),
1105
+ children: title
1106
+ }
1107
+ )),
1108
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("lg:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("lg:text-lg", descriptionClassName), children: description })),
1109
+ /* @__PURE__ */ jsx(
1110
+ "div",
1111
+ {
1112
+ className: cn(
1113
+ "flex items-center gap-4 flex-wrap",
1114
+ actionsClassName
1115
+ ),
1116
+ children: actionsContent
1117
+ }
1118
+ )
1119
+ ] }),
1120
+ imageContent && /* @__PURE__ */ jsxs("div", { className: cn("relative rounded-2xl", imageWrapperClassName), children: [
1121
+ imageContent,
1122
+ (avatarSrc || avatarBadgeText || overlayTitle || overlayLinkText) && /* @__PURE__ */ jsxs(Fragment, { children: [
1123
+ /* @__PURE__ */ jsx(
1124
+ "div",
1096
1125
  {
1097
- href: overlayLinkUrl,
1098
- onClick: overlayLinkOnClick,
1099
- className: "flex items-center gap-1 font-medium",
1100
- children: [
1101
- overlayLinkText,
1102
- /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
1103
- ]
1126
+ className: cn(
1127
+ "absolute top-0 right-0 bottom-0 left-0 rounded-2xl bg-linear-to-t from-black via-black/20 to-transparent",
1128
+ overlayClassName
1129
+ )
1104
1130
  }
1105
- )
1131
+ ),
1132
+ /* @__PURE__ */ jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between pt-4 pr-4 pl-4 pb-8 md:pt-7 md:bpr-7 md:pl-7 md:pb-7 rounded-2xl", children: [
1133
+ (avatarSrc || avatarBadgeText) && /* @__PURE__ */ jsxs(
1134
+ "span",
1135
+ {
1136
+ className: cn(
1137
+ "ml-auto flex w-fit items-center gap-2 rounded-full bg-background/30 px-4 py-2.5 text-sm font-semibold backdrop-blur-sm shadow-xl",
1138
+ avatarBadgeClassName
1139
+ ),
1140
+ children: [
1141
+ avatarSrc && /* @__PURE__ */ jsx(Avatar, { className: "size-7 rounded-full", children: /* @__PURE__ */ jsx(AvatarImage, { src: avatarSrc, alt: "Avatar" }) }),
1142
+ avatarBadgeText
1143
+ ]
1144
+ }
1145
+ ),
1146
+ (overlayTitle || overlayLinkText) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-5", children: [
1147
+ overlayTitle && (typeof overlayTitle === "string" ? /* @__PURE__ */ jsx(
1148
+ "h4",
1149
+ {
1150
+ className: cn(
1151
+ "text-lg font-semibold lg:text-3xl",
1152
+ overlayTitleClassName
1153
+ ),
1154
+ children: overlayTitle
1155
+ }
1156
+ ) : /* @__PURE__ */ jsx(
1157
+ "div",
1158
+ {
1159
+ className: cn(
1160
+ "text-lg font-semibold lg:text-3xl",
1161
+ overlayTitleClassName
1162
+ ),
1163
+ children: overlayTitle
1164
+ }
1165
+ )),
1166
+ overlayLinkText && /* @__PURE__ */ jsxs(
1167
+ Pressable,
1168
+ {
1169
+ href: overlayLinkUrl,
1170
+ onClick: overlayLinkOnClick,
1171
+ children: [
1172
+ overlayLinkText,
1173
+ /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 18 })
1174
+ ]
1175
+ }
1176
+ )
1177
+ ] })
1178
+ ] })
1106
1179
  ] })
1107
1180
  ] })
1108
- ] })
1109
- ] })
1110
- ] })
1181
+ ]
1182
+ }
1183
+ )
1111
1184
  }
1112
1185
  );
1113
1186
  }
@@ -529,27 +529,45 @@ function FeatureNumberedCards({
529
529
  patternOpacity,
530
530
  patternClassName
531
531
  }) {
532
- const renderChecklistItems = React.useCallback((feature) => {
533
- if (feature.checklistSlot) return feature.checklistSlot;
534
- if (!feature.checklistItems || feature.checklistItems.length === 0) return null;
535
- return feature.checklistItems.map((item, itemIndex) => {
536
- const isString = typeof item === "string";
537
- const content = isString ? item : item.content;
538
- const iconElement = isString ? /* @__PURE__ */ jsxRuntime.jsx(
539
- DynamicIcon,
540
- {
541
- name: "lucide/check-circle",
542
- size: 16,
543
- className: "mt-0.5 shrink-0 sm:mt-1"
544
- }
545
- ) : item.icon ?? (item.iconName ? /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: item.iconName, size: 16, className: "mt-0.5 shrink-0 sm:mt-1" }) : /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/check-circle", size: 16, className: "mt-0.5 shrink-0 sm:mt-1" }));
546
- const itemClassName = isString ? void 0 : item.className;
547
- return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: cn("flex gap-x-3", itemClassName), children: [
548
- iconElement,
549
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm md:text-base", children: content })
550
- ] }, itemIndex);
551
- });
552
- }, []);
532
+ const renderChecklistItems = React.useCallback(
533
+ (feature) => {
534
+ if (feature.checklistSlot) return feature.checklistSlot;
535
+ if (!feature.checklistItems || feature.checklistItems.length === 0)
536
+ return null;
537
+ return feature.checklistItems.map((item, itemIndex) => {
538
+ const isString = typeof item === "string";
539
+ const content = isString ? item : item.content;
540
+ const iconElement = isString ? /* @__PURE__ */ jsxRuntime.jsx(
541
+ DynamicIcon,
542
+ {
543
+ name: "lucide/check-circle",
544
+ size: 16,
545
+ className: "mt-0.5 shrink-0 sm:mt-1"
546
+ }
547
+ ) : item.icon ?? (item.iconName ? /* @__PURE__ */ jsxRuntime.jsx(
548
+ DynamicIcon,
549
+ {
550
+ name: item.iconName,
551
+ size: 16,
552
+ className: "mt-0.5 shrink-0 sm:mt-1"
553
+ }
554
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
555
+ DynamicIcon,
556
+ {
557
+ name: "lucide/check-circle",
558
+ size: 16,
559
+ className: "mt-0.5 shrink-0 sm:mt-1"
560
+ }
561
+ ));
562
+ const itemClassName = isString ? void 0 : item.className;
563
+ return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: cn("flex gap-x-3", itemClassName), children: [
564
+ iconElement,
565
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm md:text-base", children: content })
566
+ ] }, itemIndex);
567
+ });
568
+ },
569
+ []
570
+ );
553
571
  const featuresContent = React.useMemo(() => {
554
572
  if (featuresSlot) return featuresSlot;
555
573
  if (!features || features.length === 0) return null;
@@ -563,7 +581,7 @@ function FeatureNumberedCards({
563
581
  {
564
582
  src: feature.image,
565
583
  alt: imageAlt,
566
- className: "h-full w-full object-cover",
584
+ className: "h-full w-full object-cover rounded-tr-lg rounded-tl-lg md:rounded-tl-0 rounded-br-0 md:rounded-br-lg",
567
585
  loading: "lazy",
568
586
  optixFlowConfig
569
587
  }
@@ -571,19 +589,111 @@ function FeatureNumberedCards({
571
589
  }
572
590
  return null;
573
591
  };
574
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid rounded-lg border md:grid-cols-2", cardClassName, feature.className), children: [
575
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col px-6 py-8 lg:px-8 lg:py-12 xl:px-12 xl:py-20", feature.contentClassName), children: [
576
- feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("mb-3 text-2xl font-medium sm:mb-5 md:text-3xl lg:text-4xl", titleClassName), children: feature.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-3 text-2xl font-medium sm:mb-5 md:text-3xl lg:text-4xl", titleClassName), children: feature.title })),
577
- feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-8 text-sm text-muted-foreground sm:mb-10 md:text-base", descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-8 text-sm text-muted-foreground sm:mb-10 md:text-base", descriptionClassName), children: feature.description })),
578
- feature.checklistItems && feature.checklistItems.length > 0 || feature.checklistSlot ? /* @__PURE__ */ jsxRuntime.jsx("ul", { className: cn("mt-auto space-y-2 sm:space-y-3", checklistClassName), children: renderChecklistItems(feature) }) : null
579
- ] }),
580
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative order-first max-h-80 md:order-last md:max-h-[500px]", feature.imageWrapperClassName), children: [
581
- renderImage(),
582
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("absolute top-5 left-5 flex size-6 items-center justify-center rounded-sm bg-primary font-mono text-xs text-primary-foreground md:top-10 md:left-10", badgeClassName), children: String(index + 1).padStart(2, "0") })
583
- ] })
584
- ] }, index);
592
+ return /* @__PURE__ */ jsxRuntime.jsxs(
593
+ "div",
594
+ {
595
+ className: cn(
596
+ "grid rounded-lg border md:grid-cols-2",
597
+ cardClassName,
598
+ feature.className
599
+ ),
600
+ children: [
601
+ /* @__PURE__ */ jsxRuntime.jsxs(
602
+ "div",
603
+ {
604
+ className: cn(
605
+ "flex flex-col px-6 py-8 lg:px-8 lg:py-12 xl:px-12 xl:py-20",
606
+ feature.contentClassName
607
+ ),
608
+ children: [
609
+ feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
610
+ "h3",
611
+ {
612
+ className: cn(
613
+ "mb-3 text-2xl font-medium sm:mb-5 md:text-3xl lg:text-4xl",
614
+ titleClassName
615
+ ),
616
+ children: feature.title
617
+ }
618
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
619
+ "div",
620
+ {
621
+ className: cn(
622
+ "mb-3 text-2xl font-medium sm:mb-5 md:text-3xl lg:text-4xl",
623
+ titleClassName
624
+ ),
625
+ children: feature.title
626
+ }
627
+ )),
628
+ feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
629
+ "div",
630
+ {
631
+ className: cn(
632
+ "mb-8 text-sm sm:mb-10 md:text-base",
633
+ descriptionClassName
634
+ ),
635
+ children: feature.description
636
+ }
637
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
638
+ "div",
639
+ {
640
+ className: cn(
641
+ "mb-8 text-sm sm:mb-10 md:text-base",
642
+ descriptionClassName
643
+ ),
644
+ children: feature.description
645
+ }
646
+ )),
647
+ feature.checklistItems && feature.checklistItems.length > 0 || feature.checklistSlot ? /* @__PURE__ */ jsxRuntime.jsx(
648
+ "ul",
649
+ {
650
+ className: cn(
651
+ "mt-auto space-y-2 sm:space-y-3",
652
+ checklistClassName
653
+ ),
654
+ children: renderChecklistItems(feature)
655
+ }
656
+ ) : null
657
+ ]
658
+ }
659
+ ),
660
+ /* @__PURE__ */ jsxRuntime.jsxs(
661
+ "div",
662
+ {
663
+ className: cn(
664
+ "relative order-first max-h-80 md:order-last md:max-h-[500px]",
665
+ feature.imageWrapperClassName
666
+ ),
667
+ children: [
668
+ renderImage(),
669
+ /* @__PURE__ */ jsxRuntime.jsx(
670
+ "span",
671
+ {
672
+ className: cn(
673
+ "absolute top-5 left-5 flex size-6 items-center justify-center rounded-sm bg-primary font-mono text-xs text-primary-foreground md:top-10 md:left-10",
674
+ badgeClassName
675
+ ),
676
+ children: String(index + 1).padStart(2, "0")
677
+ }
678
+ )
679
+ ]
680
+ }
681
+ )
682
+ ]
683
+ },
684
+ index
685
+ );
585
686
  });
586
- }, [featuresSlot, features, cardClassName, titleClassName, descriptionClassName, checklistClassName, badgeClassName, optixFlowConfig]);
687
+ }, [
688
+ featuresSlot,
689
+ features,
690
+ cardClassName,
691
+ titleClassName,
692
+ descriptionClassName,
693
+ checklistClassName,
694
+ badgeClassName,
695
+ optixFlowConfig
696
+ ]);
587
697
  return /* @__PURE__ */ jsxRuntime.jsx(
588
698
  Section,
589
699
  {
@@ -594,7 +704,16 @@ function FeatureNumberedCards({
594
704
  patternClassName,
595
705
  className,
596
706
  containerClassName,
597
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("space-y-10 rounded-lg border py-10 md:px-4", cardsWrapperClassName), children: featuresContent })
707
+ children: /* @__PURE__ */ jsxRuntime.jsx(
708
+ "div",
709
+ {
710
+ className: cn(
711
+ "space-y-4 md:space-y-10 rounded-lg border-none md:border md:bg-background p-0 md:p-10",
712
+ cardsWrapperClassName
713
+ ),
714
+ children: featuresContent
715
+ }
716
+ )
598
717
  }
599
718
  );
600
719
  }
@@ -508,27 +508,45 @@ function FeatureNumberedCards({
508
508
  patternOpacity,
509
509
  patternClassName
510
510
  }) {
511
- const renderChecklistItems = useCallback((feature) => {
512
- if (feature.checklistSlot) return feature.checklistSlot;
513
- if (!feature.checklistItems || feature.checklistItems.length === 0) return null;
514
- return feature.checklistItems.map((item, itemIndex) => {
515
- const isString = typeof item === "string";
516
- const content = isString ? item : item.content;
517
- const iconElement = isString ? /* @__PURE__ */ jsx(
518
- DynamicIcon,
519
- {
520
- name: "lucide/check-circle",
521
- size: 16,
522
- className: "mt-0.5 shrink-0 sm:mt-1"
523
- }
524
- ) : item.icon ?? (item.iconName ? /* @__PURE__ */ jsx(DynamicIcon, { name: item.iconName, size: 16, className: "mt-0.5 shrink-0 sm:mt-1" }) : /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/check-circle", size: 16, className: "mt-0.5 shrink-0 sm:mt-1" }));
525
- const itemClassName = isString ? void 0 : item.className;
526
- return /* @__PURE__ */ jsxs("li", { className: cn("flex gap-x-3", itemClassName), children: [
527
- iconElement,
528
- /* @__PURE__ */ jsx("p", { className: "text-sm md:text-base", children: content })
529
- ] }, itemIndex);
530
- });
531
- }, []);
511
+ const renderChecklistItems = useCallback(
512
+ (feature) => {
513
+ if (feature.checklistSlot) return feature.checklistSlot;
514
+ if (!feature.checklistItems || feature.checklistItems.length === 0)
515
+ return null;
516
+ return feature.checklistItems.map((item, itemIndex) => {
517
+ const isString = typeof item === "string";
518
+ const content = isString ? item : item.content;
519
+ const iconElement = isString ? /* @__PURE__ */ jsx(
520
+ DynamicIcon,
521
+ {
522
+ name: "lucide/check-circle",
523
+ size: 16,
524
+ className: "mt-0.5 shrink-0 sm:mt-1"
525
+ }
526
+ ) : item.icon ?? (item.iconName ? /* @__PURE__ */ jsx(
527
+ DynamicIcon,
528
+ {
529
+ name: item.iconName,
530
+ size: 16,
531
+ className: "mt-0.5 shrink-0 sm:mt-1"
532
+ }
533
+ ) : /* @__PURE__ */ jsx(
534
+ DynamicIcon,
535
+ {
536
+ name: "lucide/check-circle",
537
+ size: 16,
538
+ className: "mt-0.5 shrink-0 sm:mt-1"
539
+ }
540
+ ));
541
+ const itemClassName = isString ? void 0 : item.className;
542
+ return /* @__PURE__ */ jsxs("li", { className: cn("flex gap-x-3", itemClassName), children: [
543
+ iconElement,
544
+ /* @__PURE__ */ jsx("p", { className: "text-sm md:text-base", children: content })
545
+ ] }, itemIndex);
546
+ });
547
+ },
548
+ []
549
+ );
532
550
  const featuresContent = useMemo(() => {
533
551
  if (featuresSlot) return featuresSlot;
534
552
  if (!features || features.length === 0) return null;
@@ -542,7 +560,7 @@ function FeatureNumberedCards({
542
560
  {
543
561
  src: feature.image,
544
562
  alt: imageAlt,
545
- className: "h-full w-full object-cover",
563
+ className: "h-full w-full object-cover rounded-tr-lg rounded-tl-lg md:rounded-tl-0 rounded-br-0 md:rounded-br-lg",
546
564
  loading: "lazy",
547
565
  optixFlowConfig
548
566
  }
@@ -550,19 +568,111 @@ function FeatureNumberedCards({
550
568
  }
551
569
  return null;
552
570
  };
553
- return /* @__PURE__ */ jsxs("div", { className: cn("grid rounded-lg border md:grid-cols-2", cardClassName, feature.className), children: [
554
- /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col px-6 py-8 lg:px-8 lg:py-12 xl:px-12 xl:py-20", feature.contentClassName), children: [
555
- feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsx("h3", { className: cn("mb-3 text-2xl font-medium sm:mb-5 md:text-3xl lg:text-4xl", titleClassName), children: feature.title }) : /* @__PURE__ */ jsx("div", { className: cn("mb-3 text-2xl font-medium sm:mb-5 md:text-3xl lg:text-4xl", titleClassName), children: feature.title })),
556
- feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx("div", { className: cn("mb-8 text-sm text-muted-foreground sm:mb-10 md:text-base", descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsx("div", { className: cn("mb-8 text-sm text-muted-foreground sm:mb-10 md:text-base", descriptionClassName), children: feature.description })),
557
- feature.checklistItems && feature.checklistItems.length > 0 || feature.checklistSlot ? /* @__PURE__ */ jsx("ul", { className: cn("mt-auto space-y-2 sm:space-y-3", checklistClassName), children: renderChecklistItems(feature) }) : null
558
- ] }),
559
- /* @__PURE__ */ jsxs("div", { className: cn("relative order-first max-h-80 md:order-last md:max-h-[500px]", feature.imageWrapperClassName), children: [
560
- renderImage(),
561
- /* @__PURE__ */ jsx("span", { className: cn("absolute top-5 left-5 flex size-6 items-center justify-center rounded-sm bg-primary font-mono text-xs text-primary-foreground md:top-10 md:left-10", badgeClassName), children: String(index + 1).padStart(2, "0") })
562
- ] })
563
- ] }, index);
571
+ return /* @__PURE__ */ jsxs(
572
+ "div",
573
+ {
574
+ className: cn(
575
+ "grid rounded-lg border md:grid-cols-2",
576
+ cardClassName,
577
+ feature.className
578
+ ),
579
+ children: [
580
+ /* @__PURE__ */ jsxs(
581
+ "div",
582
+ {
583
+ className: cn(
584
+ "flex flex-col px-6 py-8 lg:px-8 lg:py-12 xl:px-12 xl:py-20",
585
+ feature.contentClassName
586
+ ),
587
+ children: [
588
+ feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsx(
589
+ "h3",
590
+ {
591
+ className: cn(
592
+ "mb-3 text-2xl font-medium sm:mb-5 md:text-3xl lg:text-4xl",
593
+ titleClassName
594
+ ),
595
+ children: feature.title
596
+ }
597
+ ) : /* @__PURE__ */ jsx(
598
+ "div",
599
+ {
600
+ className: cn(
601
+ "mb-3 text-2xl font-medium sm:mb-5 md:text-3xl lg:text-4xl",
602
+ titleClassName
603
+ ),
604
+ children: feature.title
605
+ }
606
+ )),
607
+ feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx(
608
+ "div",
609
+ {
610
+ className: cn(
611
+ "mb-8 text-sm sm:mb-10 md:text-base",
612
+ descriptionClassName
613
+ ),
614
+ children: feature.description
615
+ }
616
+ ) : /* @__PURE__ */ jsx(
617
+ "div",
618
+ {
619
+ className: cn(
620
+ "mb-8 text-sm sm:mb-10 md:text-base",
621
+ descriptionClassName
622
+ ),
623
+ children: feature.description
624
+ }
625
+ )),
626
+ feature.checklistItems && feature.checklistItems.length > 0 || feature.checklistSlot ? /* @__PURE__ */ jsx(
627
+ "ul",
628
+ {
629
+ className: cn(
630
+ "mt-auto space-y-2 sm:space-y-3",
631
+ checklistClassName
632
+ ),
633
+ children: renderChecklistItems(feature)
634
+ }
635
+ ) : null
636
+ ]
637
+ }
638
+ ),
639
+ /* @__PURE__ */ jsxs(
640
+ "div",
641
+ {
642
+ className: cn(
643
+ "relative order-first max-h-80 md:order-last md:max-h-[500px]",
644
+ feature.imageWrapperClassName
645
+ ),
646
+ children: [
647
+ renderImage(),
648
+ /* @__PURE__ */ jsx(
649
+ "span",
650
+ {
651
+ className: cn(
652
+ "absolute top-5 left-5 flex size-6 items-center justify-center rounded-sm bg-primary font-mono text-xs text-primary-foreground md:top-10 md:left-10",
653
+ badgeClassName
654
+ ),
655
+ children: String(index + 1).padStart(2, "0")
656
+ }
657
+ )
658
+ ]
659
+ }
660
+ )
661
+ ]
662
+ },
663
+ index
664
+ );
564
665
  });
565
- }, [featuresSlot, features, cardClassName, titleClassName, descriptionClassName, checklistClassName, badgeClassName, optixFlowConfig]);
666
+ }, [
667
+ featuresSlot,
668
+ features,
669
+ cardClassName,
670
+ titleClassName,
671
+ descriptionClassName,
672
+ checklistClassName,
673
+ badgeClassName,
674
+ optixFlowConfig
675
+ ]);
566
676
  return /* @__PURE__ */ jsx(
567
677
  Section,
568
678
  {
@@ -573,7 +683,16 @@ function FeatureNumberedCards({
573
683
  patternClassName,
574
684
  className,
575
685
  containerClassName,
576
- children: /* @__PURE__ */ jsx("div", { className: cn("space-y-10 rounded-lg border py-10 md:px-4", cardsWrapperClassName), children: featuresContent })
686
+ children: /* @__PURE__ */ jsx(
687
+ "div",
688
+ {
689
+ className: cn(
690
+ "space-y-4 md:space-y-10 rounded-lg border-none md:border md:bg-background p-0 md:p-10",
691
+ cardsWrapperClassName
692
+ ),
693
+ children: featuresContent
694
+ }
695
+ )
577
696
  }
578
697
  );
579
698
  }