@opensite/ui 0.8.1 → 0.8.2

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 (83) hide show
  1. package/dist/carousel-horizontal-cards.cjs +8 -6
  2. package/dist/carousel-horizontal-cards.js +8 -6
  3. package/dist/carousel-image-hero.cjs +85 -160
  4. package/dist/carousel-image-hero.d.cts +1 -5
  5. package/dist/carousel-image-hero.d.ts +1 -5
  6. package/dist/carousel-image-hero.js +85 -160
  7. package/dist/carousel-portfolio-hero.cjs +138 -59
  8. package/dist/carousel-portfolio-hero.js +138 -59
  9. package/dist/carousel-product-feature-showcase.cjs +148 -95
  10. package/dist/carousel-product-feature-showcase.js +148 -95
  11. package/dist/carousel-progress-slider.cjs +13 -9
  12. package/dist/carousel-progress-slider.js +13 -9
  13. package/dist/carousel-scrolling-feature-showcase.cjs +105 -54
  14. package/dist/carousel-scrolling-feature-showcase.js +105 -54
  15. package/dist/feature-accordion-image.cjs +9 -8
  16. package/dist/feature-accordion-image.js +9 -8
  17. package/dist/feature-animated-carousel.cjs +65 -49
  18. package/dist/feature-animated-carousel.js +65 -49
  19. package/dist/feature-badge-grid-six.cjs +20 -17
  20. package/dist/feature-badge-grid-six.js +21 -18
  21. package/dist/feature-bento-image-grid.cjs +12 -8
  22. package/dist/feature-bento-image-grid.js +12 -8
  23. package/dist/feature-bento-utilities.cjs +9 -5
  24. package/dist/feature-bento-utilities.js +9 -5
  25. package/dist/feature-capabilities-grid.cjs +41 -38
  26. package/dist/feature-capabilities-grid.js +41 -38
  27. package/dist/feature-card-grid-linked.cjs +18 -18
  28. package/dist/feature-card-grid-linked.js +19 -19
  29. package/dist/feature-carousel-progress.cjs +3 -3
  30. package/dist/feature-carousel-progress.js +4 -4
  31. package/dist/feature-category-image-cards.cjs +3 -3
  32. package/dist/feature-category-image-cards.js +4 -4
  33. package/dist/feature-checklist-image.cjs +2 -2
  34. package/dist/feature-checklist-image.js +2 -2
  35. package/dist/feature-checklist-three-column.cjs +6 -6
  36. package/dist/feature-checklist-three-column.js +7 -7
  37. package/dist/feature-icon-grid-accent.cjs +2 -2
  38. package/dist/feature-icon-grid-accent.js +2 -2
  39. package/dist/feature-icon-grid-bordered.cjs +29 -31
  40. package/dist/feature-icon-grid-bordered.d.cts +9 -9
  41. package/dist/feature-icon-grid-bordered.d.ts +9 -9
  42. package/dist/feature-icon-grid-bordered.js +30 -32
  43. package/dist/feature-icon-grid-muted.cjs +6 -6
  44. package/dist/feature-icon-grid-muted.d.cts +9 -9
  45. package/dist/feature-icon-grid-muted.d.ts +9 -9
  46. package/dist/feature-icon-grid-muted.js +7 -7
  47. package/dist/feature-icon-tabs-content.cjs +8 -8
  48. package/dist/feature-icon-tabs-content.d.cts +13 -13
  49. package/dist/feature-icon-tabs-content.d.ts +13 -13
  50. package/dist/feature-icon-tabs-content.js +9 -9
  51. package/dist/feature-image-cards-three-column.cjs +26 -27
  52. package/dist/feature-image-cards-three-column.js +27 -28
  53. package/dist/feature-image-overlay-badge.cjs +23 -21
  54. package/dist/feature-image-overlay-badge.js +24 -22
  55. package/dist/feature-integration-cards.cjs +19 -18
  56. package/dist/feature-integration-cards.js +20 -19
  57. package/dist/feature-numbered-cards.cjs +2 -2
  58. package/dist/feature-numbered-cards.js +3 -3
  59. package/dist/feature-pattern-grid-links.cjs +26 -29
  60. package/dist/feature-pattern-grid-links.d.cts +1 -5
  61. package/dist/feature-pattern-grid-links.d.ts +1 -5
  62. package/dist/feature-pattern-grid-links.js +27 -30
  63. package/dist/feature-showcase.cjs +441 -40
  64. package/dist/feature-showcase.d.cts +62 -5
  65. package/dist/feature-showcase.d.ts +62 -5
  66. package/dist/feature-showcase.js +438 -37
  67. package/dist/feature-split-image-reverse.cjs +15 -36
  68. package/dist/feature-split-image-reverse.js +16 -37
  69. package/dist/feature-split-image.cjs +15 -36
  70. package/dist/feature-split-image.js +16 -37
  71. package/dist/feature-stats-highlight.cjs +20 -32
  72. package/dist/feature-stats-highlight.js +21 -33
  73. package/dist/feature-tabbed-content-image.cjs +11 -6
  74. package/dist/feature-tabbed-content-image.js +11 -6
  75. package/dist/feature-three-column-values.cjs +6 -6
  76. package/dist/feature-three-column-values.js +6 -6
  77. package/dist/feature-utility-cards-grid.cjs +17 -15
  78. package/dist/feature-utility-cards-grid.js +18 -16
  79. package/dist/navbar-tabbed-sections.cjs +23 -16
  80. package/dist/navbar-tabbed-sections.js +23 -16
  81. package/dist/registry.cjs +941 -708
  82. package/dist/registry.js +943 -710
  83. package/package.json +1 -1
package/dist/registry.cjs CHANGED
@@ -18685,19 +18685,21 @@ function CarouselHorizontalCards({
18685
18685
  "div",
18686
18686
  {
18687
18687
  className: cn(
18688
- "flex flex-row justify-start gap-4 pl-4",
18688
+ "flex flex-row justify-start gap-2",
18689
18689
  carouselClassName
18690
18690
  ),
18691
18691
  children: [
18692
18692
  items?.map((item, index) => /* @__PURE__ */ jsxRuntime.jsx(
18693
18693
  framerMotion.motion.div,
18694
18694
  {
18695
- className: cn(
18696
- "rounded-lg last:pr-[5%] md:last:pr-[33%]"
18697
- ),
18695
+ className: cn("rounded-lg last:pr-[5%] md:last:pr-[33%]"),
18698
18696
  initial: { opacity: 0, y: 20 },
18699
18697
  animate: { opacity: 1, y: 0 },
18700
- transition: { duration: 0.5, delay: 0.2 * index, ease: "easeOut" },
18698
+ transition: {
18699
+ duration: 0.5,
18700
+ delay: 0.2 * index,
18701
+ ease: "easeOut"
18702
+ },
18701
18703
  children: /* @__PURE__ */ jsxRuntime.jsx(
18702
18704
  "div",
18703
18705
  {
@@ -18769,7 +18771,7 @@ function CarouselHorizontalCards({
18769
18771
  onNext: scrollRight,
18770
18772
  canScrollPrevious: !isAtStart,
18771
18773
  canScrollNext: !isAtEnd,
18772
- className: cn("mr-0 md:mr-10", navigationClassName)
18774
+ className: cn("mr-0", navigationClassName)
18773
18775
  }
18774
18776
  )
18775
18777
  ] })
@@ -18784,43 +18786,43 @@ function CarouselImageHero({
18784
18786
  actions,
18785
18787
  actionsSlot,
18786
18788
  images,
18787
- autoPlayInterval = 5e3,
18789
+ autoPlayInterval = 7500,
18788
18790
  className,
18789
- containerClassName,
18791
+ containerClassName = "mx-auto w-full max-w-7xl relative z-10 rounded-2xl overflow-hidden shadow-xl",
18790
18792
  contentClassName,
18791
18793
  badgeClassName,
18792
18794
  headingClassName,
18793
18795
  descriptionClassName,
18794
18796
  actionsClassName,
18795
18797
  imageClassName,
18796
- navigationClassName,
18797
18798
  indicatorsClassName,
18798
18799
  optixFlowConfig,
18799
- background = "white",
18800
- spacing = "xl",
18800
+ background,
18801
+ spacing,
18801
18802
  pattern,
18802
18803
  patternOpacity
18803
18804
  }) {
18804
18805
  const [currentImageIndex, setCurrentImageIndex] = React52__namespace.useState(0);
18805
18806
  React52__namespace.useEffect(() => {
18806
18807
  const interval = setInterval(() => {
18807
- setCurrentImageIndex((prevIndex) => (prevIndex + 1) % (images?.length ?? 1));
18808
+ setCurrentImageIndex(
18809
+ (prevIndex) => (prevIndex + 1) % (images?.length ?? 1)
18810
+ );
18808
18811
  }, autoPlayInterval);
18809
18812
  return () => clearInterval(interval);
18810
18813
  }, [images?.length, autoPlayInterval]);
18811
- const goToNextImage = () => {
18812
- setCurrentImageIndex((prevIndex) => (prevIndex + 1) % (images?.length ?? 1));
18813
- };
18814
- const goToPreviousImage = () => {
18815
- setCurrentImageIndex(
18816
- (prevIndex) => (prevIndex - 1 + (images?.length ?? 1)) % (images?.length ?? 1)
18817
- );
18818
- };
18819
18814
  const renderActions = () => {
18820
18815
  if (actionsSlot) return actionsSlot;
18821
18816
  if (!actions || actions.length === 0) return null;
18822
18817
  return actions.map((action, index) => {
18823
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
18818
+ const {
18819
+ label,
18820
+ icon,
18821
+ iconAfter,
18822
+ children,
18823
+ className: actionClassName,
18824
+ ...pressableProps
18825
+ } = action;
18824
18826
  return /* @__PURE__ */ jsxRuntime.jsx(
18825
18827
  Pressable,
18826
18828
  {
@@ -18845,6 +18847,7 @@ function CarouselImageHero({
18845
18847
  className: cn("relative min-h-[600px] overflow-hidden", className),
18846
18848
  pattern,
18847
18849
  patternOpacity,
18850
+ containerClassName,
18848
18851
  children: [
18849
18852
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("absolute inset-0", imageClassName), children: [
18850
18853
  images?.map((image, index) => /* @__PURE__ */ jsxRuntime.jsxs(
@@ -18870,50 +18873,79 @@ function CarouselImageHero({
18870
18873
  index
18871
18874
  )),
18872
18875
  /* @__PURE__ */ jsxRuntime.jsx(
18873
- Pressable,
18874
- {
18875
- onClick: goToPreviousImage,
18876
- asButton: true,
18877
- variant: "ghost",
18878
- size: "icon",
18879
- className: cn("absolute left-4 top-1/2 z-20 hidden -translate-y-1/2 rounded-full bg-background/30 p-2 backdrop-blur-sm transition-colors hover:bg-background/50 md:block", navigationClassName),
18880
- "aria-label": "Previous image",
18881
- children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-left", size: 24, className: "text-white" })
18882
- }
18883
- ),
18884
- /* @__PURE__ */ jsxRuntime.jsx(
18885
- Pressable,
18886
- {
18887
- onClick: goToNextImage,
18888
- asButton: true,
18889
- variant: "ghost",
18890
- size: "icon",
18891
- className: cn("absolute right-4 top-1/2 z-20 hidden -translate-y-1/2 rounded-full bg-background/30 p-2 backdrop-blur-sm transition-colors hover:bg-background/50 md:block", navigationClassName),
18892
- "aria-label": "Next image",
18893
- children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 24, className: "text-white" })
18894
- }
18895
- ),
18896
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("absolute bottom-6 left-1/2 z-10 flex -translate-x-1/2 gap-3", indicatorsClassName), children: images?.map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
18897
- "button",
18876
+ "div",
18898
18877
  {
18899
- onClick: () => setCurrentImageIndex(index),
18900
18878
  className: cn(
18901
- "flex h-3 w-3 items-center justify-center rounded-full transition-colors",
18902
- index === currentImageIndex ? "bg-white" : "bg-white/50 hover:bg-white/80"
18879
+ "absolute bottom-6 left-1/2 z-10 flex -translate-x-1/2 gap-3",
18880
+ indicatorsClassName
18903
18881
  ),
18904
- "aria-label": `Go to image ${index + 1}`
18905
- },
18906
- index
18907
- )) })
18882
+ children: images?.map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
18883
+ "button",
18884
+ {
18885
+ onClick: () => setCurrentImageIndex(index),
18886
+ className: cn(
18887
+ "flex h-4 w-4 items-center justify-center rounded-full transition-colors",
18888
+ index === currentImageIndex ? "bg-white" : "bg-white/50 hover:bg-white/80"
18889
+ ),
18890
+ "aria-label": `Go to image ${index + 1}`
18891
+ },
18892
+ index
18893
+ ))
18894
+ }
18895
+ )
18908
18896
  ] }),
18909
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("container relative z-10 mx-auto flex min-h-[600px] flex-col items-center justify-center px-4 py-16 text-center md:px-6 md:py-20", containerClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("max-w-4xl space-y-6", contentClassName), children: [
18910
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
18911
- badge && (typeof badge === "string" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("inline-flex items-center rounded-full bg-white/10 px-3 py-1 text-sm font-medium text-white backdrop-blur-sm", badgeClassName), children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: badge }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: badgeClassName, children: badge })),
18912
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl font-bold tracking-tight text-primary-foreground dark:text-primary sm:text-5xl md:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
18913
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-xl text-primary-foreground dark:text-primary", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
18914
- ] }),
18915
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-col justify-center gap-4 sm:flex-row", actionsClassName), children: renderActions() })
18916
- ] }) })
18897
+ /* @__PURE__ */ jsxRuntime.jsx(
18898
+ "div",
18899
+ {
18900
+ className: cn(
18901
+ "relative z-10 mx-auto flex min-h-[600px] flex-col items-center justify-center px-4 py-16 text-center md:px-16 md:py-20"
18902
+ ),
18903
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("max-w-4xl space-y-6", contentClassName), children: [
18904
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
18905
+ badge && (typeof badge === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
18906
+ "div",
18907
+ {
18908
+ className: cn(
18909
+ "inline-flex items-center rounded-full bg-white/10 px-3 py-1 text-sm font-medium text-white backdrop-blur-sm",
18910
+ badgeClassName
18911
+ ),
18912
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: badge })
18913
+ }
18914
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: badgeClassName, children: badge })),
18915
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
18916
+ "h1",
18917
+ {
18918
+ className: cn(
18919
+ "text-4xl font-bold sm:text-5xl md:text-6xl text-balance text-shadow",
18920
+ headingClassName
18921
+ ),
18922
+ children: heading
18923
+ }
18924
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
18925
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
18926
+ "p",
18927
+ {
18928
+ className: cn(
18929
+ "text-xl text-balance text-shadow",
18930
+ descriptionClassName
18931
+ ),
18932
+ children: description
18933
+ }
18934
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
18935
+ ] }),
18936
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx(
18937
+ "div",
18938
+ {
18939
+ className: cn(
18940
+ "flex flex-col justify-center gap-4 sm:flex-row",
18941
+ actionsClassName
18942
+ ),
18943
+ children: renderActions()
18944
+ }
18945
+ )
18946
+ ] })
18947
+ }
18948
+ )
18917
18949
  ]
18918
18950
  }
18919
18951
  );
@@ -19217,7 +19249,7 @@ function CarouselPortfolioHero({
19217
19249
  actionsSlot,
19218
19250
  autoPlayInterval = 5e3,
19219
19251
  className,
19220
- containerClassName,
19252
+ containerClassName = "mx-auto w-full p-0 px-0 sm:px-0 lg:px-0 max-w-full relative z-10 h-full flex flex-col justify-center",
19221
19253
  contentClassName,
19222
19254
  tagClassName,
19223
19255
  titleClassName,
@@ -19233,23 +19265,45 @@ function CarouselPortfolioHero({
19233
19265
  slideMediaBrightness = "50"
19234
19266
  }) {
19235
19267
  const [currentIndex, setCurrentIndex] = React52__namespace.useState(0);
19268
+ const intervalRef = React52__namespace.useRef(null);
19269
+ const resetInterval = React52__namespace.useCallback(() => {
19270
+ if (intervalRef.current) {
19271
+ clearInterval(intervalRef.current);
19272
+ }
19273
+ intervalRef.current = setInterval(() => {
19274
+ setCurrentIndex((prevIndex) => (prevIndex + 1) % (slides?.length ?? 1));
19275
+ }, autoPlayInterval);
19276
+ }, [autoPlayInterval, slides?.length]);
19236
19277
  const goToNext = React52__namespace.useCallback(() => {
19237
19278
  setCurrentIndex((prevIndex) => (prevIndex + 1) % (slides?.length ?? 1));
19238
- }, [slides?.length]);
19279
+ resetInterval();
19280
+ }, [slides?.length, resetInterval]);
19239
19281
  const goToPrev = React52__namespace.useCallback(() => {
19240
19282
  setCurrentIndex(
19241
19283
  (prevIndex) => (prevIndex - 1 + (slides?.length ?? 1)) % (slides?.length ?? 1)
19242
19284
  );
19243
- }, [slides?.length]);
19285
+ resetInterval();
19286
+ }, [slides?.length, resetInterval]);
19244
19287
  React52__namespace.useEffect(() => {
19245
- const interval = setInterval(goToNext, autoPlayInterval);
19246
- return () => clearInterval(interval);
19247
- }, [goToNext, autoPlayInterval]);
19288
+ resetInterval();
19289
+ return () => {
19290
+ if (intervalRef.current) {
19291
+ clearInterval(intervalRef.current);
19292
+ }
19293
+ };
19294
+ }, [resetInterval]);
19248
19295
  const renderActions = () => {
19249
19296
  if (actionsSlot) return actionsSlot;
19250
19297
  if (!actions || actions.length === 0) return null;
19251
19298
  return actions.map((action, index) => {
19252
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
19299
+ const {
19300
+ label,
19301
+ icon,
19302
+ iconAfter,
19303
+ children,
19304
+ className: actionClassName,
19305
+ ...pressableProps
19306
+ } = action;
19253
19307
  return /* @__PURE__ */ jsxRuntime.jsx(
19254
19308
  Pressable,
19255
19309
  {
@@ -19275,6 +19329,7 @@ function CarouselPortfolioHero({
19275
19329
  className: cn("relative h-screen w-full overflow-hidden", className),
19276
19330
  pattern,
19277
19331
  patternOpacity,
19332
+ containerClassName,
19278
19333
  children: [
19279
19334
  slidesSlot ? slidesSlot : slides?.map((slide, index) => /* @__PURE__ */ jsxRuntime.jsx(
19280
19335
  "div",
@@ -19300,43 +19355,99 @@ function CarouselPortfolioHero({
19300
19355
  },
19301
19356
  slide.id
19302
19357
  )),
19303
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative z-10 flex h-full w-full flex-col justify-end px-6 pb-16 text-white md:px-8 lg:px-12", containerClassName), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "container mx-auto", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("max-w-4xl", contentClassName), children: [
19304
- currentSlide?.tag && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4", children: typeof currentSlide.tag === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("inline-block rounded-full bg-primary px-3 py-1 text-sm font-medium", tagClassName), children: currentSlide.tag }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: tagClassName, children: currentSlide.tag }) }),
19305
- currentSlide?.title && (typeof currentSlide.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl font-bold sm:text-5xl md:text-6xl", titleClassName), children: currentSlide.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: currentSlide.title })),
19306
- currentSlide?.description && (typeof currentSlide.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-4 text-lg text-white/80 sm:text-xl md:max-w-2xl", descriptionClassName), children: currentSlide.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: currentSlide.description })),
19307
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mt-8 flex items-center gap-4", actionsClassName), children: [
19308
- renderActions(),
19309
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("ml-auto flex items-center gap-2", navigationClassName), children: [
19310
- /* @__PURE__ */ jsxRuntime.jsx(
19311
- Pressable,
19358
+ /* @__PURE__ */ jsxRuntime.jsx(
19359
+ "div",
19360
+ {
19361
+ className: cn(
19362
+ "relative z-10 flex h-full w-full flex-col justify-end px-6 pb-16 text-white md:px-8 lg:px-12"
19363
+ ),
19364
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("max-w-4xl", contentClassName), children: [
19365
+ currentSlide?.tag && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4", children: typeof currentSlide.tag === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
19366
+ "span",
19312
19367
  {
19313
- variant: "outline",
19314
- size: "icon",
19315
- className: "rounded-full border-white/40 bg-black/30 text-white hover:bg-black/50 hover:text-white",
19316
- onClick: goToPrev,
19317
- asButton: true,
19318
- children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-left", size: 20 })
19368
+ className: cn(
19369
+ "inline-block rounded-full bg-primary px-3 py-1 text-sm font-medium",
19370
+ tagClassName
19371
+ ),
19372
+ children: currentSlide.tag
19319
19373
  }
19320
- ),
19321
- /* @__PURE__ */ jsxRuntime.jsx(
19322
- Pressable,
19374
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: tagClassName, children: currentSlide.tag }) }),
19375
+ currentSlide?.title && (typeof currentSlide.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
19376
+ "h1",
19323
19377
  {
19324
- variant: "outline",
19325
- size: "icon",
19326
- className: "rounded-full border-white/40 bg-black/30 text-white hover:bg-black/50 hover:text-white",
19327
- onClick: goToNext,
19328
- asButton: true,
19329
- children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 20 })
19378
+ className: cn(
19379
+ "text-4xl font-bold sm:text-5xl md:text-6xl text-balance text-shadow",
19380
+ titleClassName
19381
+ ),
19382
+ children: currentSlide.title
19330
19383
  }
19331
- ),
19332
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("ml-3 text-sm text-white/80", counterClassName), children: [
19333
- currentIndex + 1,
19334
- " / ",
19335
- slides?.length ?? 0
19336
- ] })
19337
- ] })
19338
- ] })
19339
- ] }) }) })
19384
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: currentSlide.title })),
19385
+ currentSlide?.description && (typeof currentSlide.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
19386
+ "p",
19387
+ {
19388
+ className: cn(
19389
+ "mt-4 text-lg text-white/80 sm:text-xl md:max-w-2xl text-balance text-shadow",
19390
+ descriptionClassName
19391
+ ),
19392
+ children: currentSlide.description
19393
+ }
19394
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: currentSlide.description })),
19395
+ /* @__PURE__ */ jsxRuntime.jsxs(
19396
+ "div",
19397
+ {
19398
+ className: cn("mt-8 flex items-center gap-4", actionsClassName),
19399
+ children: [
19400
+ renderActions(),
19401
+ /* @__PURE__ */ jsxRuntime.jsxs(
19402
+ "div",
19403
+ {
19404
+ className: cn(
19405
+ "ml-auto flex items-center gap-2",
19406
+ navigationClassName
19407
+ ),
19408
+ children: [
19409
+ /* @__PURE__ */ jsxRuntime.jsx(
19410
+ Pressable,
19411
+ {
19412
+ variant: "outline",
19413
+ size: "icon",
19414
+ className: "rounded-full border-white/40 bg-black/30 text-white hover:bg-black/50 hover:text-white",
19415
+ onClick: goToPrev,
19416
+ asButton: true,
19417
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-left", size: 20 })
19418
+ }
19419
+ ),
19420
+ /* @__PURE__ */ jsxRuntime.jsx(
19421
+ Pressable,
19422
+ {
19423
+ variant: "outline",
19424
+ size: "icon",
19425
+ className: "rounded-full border-white/40 bg-black/30 text-white hover:bg-black/50 hover:text-white",
19426
+ onClick: goToNext,
19427
+ asButton: true,
19428
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 20 })
19429
+ }
19430
+ ),
19431
+ /* @__PURE__ */ jsxRuntime.jsxs(
19432
+ "div",
19433
+ {
19434
+ className: cn("ml-3 text-sm text-white/80", counterClassName),
19435
+ children: [
19436
+ currentIndex + 1,
19437
+ " / ",
19438
+ slides?.length ?? 0
19439
+ ]
19440
+ }
19441
+ )
19442
+ ]
19443
+ }
19444
+ )
19445
+ ]
19446
+ }
19447
+ )
19448
+ ] }) })
19449
+ }
19450
+ )
19340
19451
  ]
19341
19452
  }
19342
19453
  );
@@ -19360,8 +19471,8 @@ function CarouselProductFeatureShowcase({
19360
19471
  actionsClassName,
19361
19472
  indicatorsClassName,
19362
19473
  optixFlowConfig,
19363
- background = "white",
19364
- spacing = "xl",
19474
+ background,
19475
+ spacing,
19365
19476
  pattern,
19366
19477
  patternOpacity
19367
19478
  }) {
@@ -19405,7 +19516,14 @@ function CarouselProductFeatureShowcase({
19405
19516
  if (actionsSlot) return actionsSlot;
19406
19517
  if (!actions || actions.length === 0) return null;
19407
19518
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-8 flex flex-wrap gap-3", children: actions.map((action, index) => {
19408
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
19519
+ const {
19520
+ label,
19521
+ icon,
19522
+ iconAfter,
19523
+ children,
19524
+ className: actionClassName,
19525
+ ...pressableProps
19526
+ } = action;
19409
19527
  return /* @__PURE__ */ jsxRuntime.jsx(
19410
19528
  Pressable,
19411
19529
  {
@@ -19430,105 +19548,151 @@ function CarouselProductFeatureShowcase({
19430
19548
  className: cn(className),
19431
19549
  pattern,
19432
19550
  patternOpacity,
19433
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("container mx-auto px-4", containerClassName), children: [
19551
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative", containerClassName), children: [
19434
19552
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-12 text-center", headerClassName), children: [
19435
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-3xl font-bold tracking-tight md:text-4xl lg:text-5xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
19436
- subheading && (typeof subheading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-4 text-lg text-muted-foreground", subheadingClassName), children: subheading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: subheadingClassName, children: subheading }))
19437
- ] }),
19438
- featuresSlot ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: contentClassName, children: featuresSlot }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid gap-8 lg:grid-cols-2 lg:gap-12", contentClassName), children: [
19439
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative aspect-square overflow-hidden rounded-2xl bg-muted lg:aspect-[4/3]", imageClassName), children: [
19440
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { initial: false, custom: direction, mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsx(
19441
- framerMotion.motion.div,
19442
- {
19443
- custom: direction,
19444
- variants: slideVariants2,
19445
- initial: "enter",
19446
- animate: "center",
19447
- exit: "exit",
19448
- transition: { duration: 0.3, ease: "easeInOut" },
19449
- className: cn("absolute inset-0", activeFeature?.imageClassName),
19450
- children: /* @__PURE__ */ jsxRuntime.jsx(
19451
- img.Img,
19452
- {
19453
- src: currentImage,
19454
- alt: typeof activeFeature?.title === "string" ? activeFeature.title : `Feature ${activeIndex + 1}`,
19455
- className: "h-full w-full object-cover",
19456
- optixFlowConfig
19457
- }
19458
- )
19459
- },
19460
- `${activeIndex}-${activeColorIndex}`
19461
- ) }),
19462
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("absolute bottom-4 right-4 flex gap-2", navigationClassName), children: [
19463
- /* @__PURE__ */ jsxRuntime.jsx(
19464
- Pressable,
19465
- {
19466
- onClick: goToPrev,
19467
- asButton: true,
19468
- variant: "outline",
19469
- size: "icon",
19470
- className: "flex h-10 w-10 items-center justify-center rounded-full border-border bg-background/90 text-foreground backdrop-blur-sm hover:bg-background",
19471
- children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-left", size: 20 })
19472
- }
19553
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
19554
+ "h2",
19555
+ {
19556
+ className: cn(
19557
+ "text-3xl font-bold tracking-tight md:text-4xl lg:text-5xl",
19558
+ headingClassName
19473
19559
  ),
19474
- /* @__PURE__ */ jsxRuntime.jsx(
19475
- Pressable,
19560
+ children: heading
19561
+ }
19562
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
19563
+ subheading && (typeof subheading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
19564
+ "p",
19565
+ {
19566
+ className: cn(
19567
+ "mt-4 text-lg text-muted-foreground",
19568
+ subheadingClassName
19569
+ ),
19570
+ children: subheading
19571
+ }
19572
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: subheadingClassName, children: subheading }))
19573
+ ] }),
19574
+ featuresSlot ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: contentClassName, children: featuresSlot }) : /* @__PURE__ */ jsxRuntime.jsxs(
19575
+ "div",
19576
+ {
19577
+ className: cn(
19578
+ "grid gap-8 lg:grid-cols-2 lg:gap-12",
19579
+ contentClassName
19580
+ ),
19581
+ children: [
19582
+ /* @__PURE__ */ jsxRuntime.jsxs(
19583
+ "div",
19476
19584
  {
19477
- onClick: goToNext,
19478
- asButton: true,
19479
- variant: "outline",
19480
- size: "icon",
19481
- className: "flex h-10 w-10 items-center justify-center rounded-full border-border bg-background/90 text-foreground backdrop-blur-sm hover:bg-background",
19482
- children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 20 })
19483
- }
19484
- )
19485
- ] })
19486
- ] }),
19487
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col justify-center", children: [
19488
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsxs(
19489
- framerMotion.motion.div,
19490
- {
19491
- initial: { opacity: 0, y: 20 },
19492
- animate: { opacity: 1, y: 0 },
19493
- exit: { opacity: 0, y: -20 },
19494
- transition: { duration: 0.3 },
19495
- children: [
19496
- activeFeature?.title && (typeof activeFeature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-2xl font-semibold md:text-3xl", children: activeFeature.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: activeFeature.title })),
19497
- activeFeature?.description && (typeof activeFeature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 text-lg text-muted-foreground", children: activeFeature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: activeFeature.description })),
19498
- activeFeature?.colors && activeFeature.colors.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mt-6", colorSelectorClassName), children: [
19499
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-sm font-medium", children: "Available Colors" }),
19500
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-3", children: activeFeature.colors.map((color, index) => /* @__PURE__ */ jsxRuntime.jsx(
19501
- "button",
19585
+ className: cn(
19586
+ "relative aspect-square overflow-hidden rounded-2xl bg-muted lg:aspect-4/3 shadow-lg",
19587
+ imageClassName
19588
+ ),
19589
+ children: [
19590
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { initial: false, custom: direction, mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsx(
19591
+ framerMotion.motion.div,
19502
19592
  {
19503
- onClick: () => setActiveColorIndex(index),
19593
+ custom: direction,
19594
+ variants: slideVariants2,
19595
+ initial: "enter",
19596
+ animate: "center",
19597
+ exit: "exit",
19598
+ transition: { duration: 0.3, ease: "easeInOut" },
19504
19599
  className: cn(
19505
- "h-8 w-8 rounded-full border-2 transition-all",
19506
- activeColorIndex === index ? "border-primary ring-2 ring-primary ring-offset-2" : "border-transparent hover:border-muted-foreground"
19600
+ "absolute inset-0",
19601
+ activeFeature?.imageClassName
19507
19602
  ),
19508
- style: { backgroundColor: color.value },
19509
- title: color.name
19603
+ children: /* @__PURE__ */ jsxRuntime.jsx(
19604
+ img.Img,
19605
+ {
19606
+ src: currentImage,
19607
+ alt: typeof activeFeature?.title === "string" ? activeFeature.title : `Feature ${activeIndex + 1}`,
19608
+ className: "h-full w-full object-cover",
19609
+ optixFlowConfig
19610
+ }
19611
+ )
19510
19612
  },
19511
- color.name
19512
- )) })
19513
- ] }),
19514
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: actionsClassName, children: renderActions() })
19515
- ]
19516
- },
19517
- activeIndex
19518
- ) }),
19519
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-8 flex gap-2", indicatorsClassName), children: features?.map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
19520
- "button",
19521
- {
19522
- onClick: () => goToSlide(index),
19523
- className: cn(
19524
- "h-2 rounded-full transition-all",
19525
- activeIndex === index ? "w-8 bg-primary" : "w-2 bg-muted-foreground/30 hover:bg-muted-foreground/50"
19526
- )
19527
- },
19528
- index
19529
- )) })
19530
- ] })
19531
- ] })
19613
+ `${activeIndex}-${activeColorIndex}`
19614
+ ) }),
19615
+ /* @__PURE__ */ jsxRuntime.jsxs(
19616
+ "div",
19617
+ {
19618
+ className: cn(
19619
+ "absolute bottom-4 right-4 flex gap-2",
19620
+ navigationClassName
19621
+ ),
19622
+ children: [
19623
+ /* @__PURE__ */ jsxRuntime.jsx(
19624
+ Pressable,
19625
+ {
19626
+ onClick: goToPrev,
19627
+ asButton: true,
19628
+ variant: "outline",
19629
+ size: "icon",
19630
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-left", size: 20 })
19631
+ }
19632
+ ),
19633
+ /* @__PURE__ */ jsxRuntime.jsx(
19634
+ Pressable,
19635
+ {
19636
+ onClick: goToNext,
19637
+ asButton: true,
19638
+ variant: "outline",
19639
+ size: "icon",
19640
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 20 })
19641
+ }
19642
+ )
19643
+ ]
19644
+ }
19645
+ )
19646
+ ]
19647
+ }
19648
+ ),
19649
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col justify-center", children: [
19650
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsxs(
19651
+ framerMotion.motion.div,
19652
+ {
19653
+ initial: { opacity: 0, y: 20 },
19654
+ animate: { opacity: 1, y: 0 },
19655
+ exit: { opacity: 0, y: -20 },
19656
+ transition: { duration: 0.3 },
19657
+ children: [
19658
+ activeFeature?.title && (typeof activeFeature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-2xl font-semibold md:text-3xl", children: activeFeature.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: activeFeature.title })),
19659
+ activeFeature?.description && (typeof activeFeature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 text-lg text-muted-foreground", children: activeFeature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: activeFeature.description })),
19660
+ activeFeature?.colors && activeFeature.colors.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mt-6", colorSelectorClassName), children: [
19661
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-sm font-medium", children: "Available Colors" }),
19662
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-3", children: activeFeature.colors.map((color, index) => /* @__PURE__ */ jsxRuntime.jsx(
19663
+ "button",
19664
+ {
19665
+ onClick: () => setActiveColorIndex(index),
19666
+ className: cn(
19667
+ "h-8 w-8 rounded-full border-2 transition-all",
19668
+ activeColorIndex === index ? "border-primary ring-2 ring-primary ring-offset-2" : "border-transparent hover:border-muted-foreground"
19669
+ ),
19670
+ style: { backgroundColor: color.value },
19671
+ title: color.name
19672
+ },
19673
+ color.name
19674
+ )) })
19675
+ ] }),
19676
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: actionsClassName, children: renderActions() })
19677
+ ]
19678
+ },
19679
+ activeIndex
19680
+ ) }),
19681
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-8 flex gap-2", indicatorsClassName), children: features?.map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
19682
+ "button",
19683
+ {
19684
+ onClick: () => goToSlide(index),
19685
+ className: cn(
19686
+ "h-2 rounded-full transition-all",
19687
+ activeIndex === index ? "w-8 bg-primary" : "w-2 bg-muted-foreground/30 hover:bg-muted-foreground/50"
19688
+ )
19689
+ },
19690
+ index
19691
+ )) })
19692
+ ] })
19693
+ ]
19694
+ }
19695
+ )
19532
19696
  ] })
19533
19697
  }
19534
19698
  );
@@ -19584,12 +19748,16 @@ function SliderBtn({
19584
19748
  }
19585
19749
  function SliderWrapper({ children, value, className }) {
19586
19750
  const { active } = useProgressSliderContext();
19587
- return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "popLayout", children: active === value && /* @__PURE__ */ jsxRuntime.jsx(
19751
+ return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", initial: false, children: active === value && /* @__PURE__ */ jsxRuntime.jsx(
19588
19752
  framerMotion.motion.div,
19589
19753
  {
19590
- initial: { opacity: 0 },
19591
- animate: { opacity: 1 },
19592
- exit: { opacity: 0 },
19754
+ initial: { opacity: 0, scale: 0.98 },
19755
+ animate: { opacity: 1, scale: 1 },
19756
+ exit: { opacity: 0, scale: 0.98 },
19757
+ transition: {
19758
+ duration: 0.4,
19759
+ ease: [0.4, 0, 0.2, 1]
19760
+ },
19593
19761
  className: cn("", className),
19594
19762
  children
19595
19763
  },
@@ -19700,12 +19868,12 @@ function CarouselProgressSlider({
19700
19868
  pattern,
19701
19869
  patternOpacity,
19702
19870
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative", containerClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid gap-8 lg:grid-cols-2", contentClassName), children: [
19703
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative", imageClassName), children: [
19704
- slidesSlot ? slidesSlot : slides?.map((slide) => /* @__PURE__ */ jsxRuntime.jsx(
19871
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative min-h-[400px]", imageClassName), children: [
19872
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0", children: slidesSlot ? slidesSlot : slides?.map((slide) => /* @__PURE__ */ jsxRuntime.jsx(
19705
19873
  SliderWrapper,
19706
19874
  {
19707
19875
  value: slide.id,
19708
- className: cn("", slide.className),
19876
+ className: cn("absolute inset-0", slide.className),
19709
19877
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-video overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx(
19710
19878
  img.Img,
19711
19879
  {
@@ -19720,8 +19888,8 @@ function CarouselProgressSlider({
19720
19888
  ) })
19721
19889
  },
19722
19890
  slide.id
19723
- )),
19724
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 flex justify-center lg:justify-start", children: /* @__PURE__ */ jsxRuntime.jsx(
19891
+ )) }),
19892
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative mt-4 flex justify-center lg:justify-start", children: /* @__PURE__ */ jsxRuntime.jsx(
19725
19893
  Pressable,
19726
19894
  {
19727
19895
  onClick: togglePause,
@@ -19783,8 +19951,8 @@ function CarouselScrollingFeatureShowcase({
19783
19951
  featuresClassName,
19784
19952
  numberBadgeClassName,
19785
19953
  optixFlowConfig,
19786
- background = "white",
19787
- spacing = "xl",
19954
+ background,
19955
+ spacing = "md",
19788
19956
  pattern,
19789
19957
  patternOpacity
19790
19958
  }) {
@@ -19834,62 +20002,113 @@ function CarouselScrollingFeatureShowcase({
19834
20002
  patternOpacity,
19835
20003
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("container mx-auto px-4", containerClassName), children: [
19836
20004
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-12 text-center", headerClassName), children: [
19837
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-3xl font-bold tracking-tight md:text-4xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
19838
- subheading && (typeof subheading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-4 text-lg text-muted-foreground", subheadingClassName), children: subheading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-4", subheadingClassName), children: subheading }))
19839
- ] }),
19840
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid gap-8 lg:grid-cols-2 lg:gap-12", contentClassName), children: [
19841
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "hidden lg:block", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sticky top-24", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("aspect-video overflow-hidden rounded-xl bg-muted", imageClassName), children: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", children: activeFeatureData && /* @__PURE__ */ jsxRuntime.jsx(
19842
- framerMotion.motion.div,
20005
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
20006
+ "h2",
19843
20007
  {
19844
- initial: { opacity: 0 },
19845
- animate: { opacity: 1 },
19846
- exit: { opacity: 0 },
19847
- transition: { duration: 0.3 },
19848
- className: "h-full w-full",
19849
- children: /* @__PURE__ */ jsxRuntime.jsx(
19850
- img.Img,
19851
- {
19852
- src: activeFeatureData.image,
19853
- alt: typeof activeFeatureData.title === "string" ? activeFeatureData.title : `Feature ${activeFeatureData.id}`,
19854
- className: cn("h-full w-full object-cover", activeFeatureData.imageClassName),
19855
- optixFlowConfig
19856
- }
19857
- )
19858
- },
19859
- activeFeatureData.id
19860
- ) }) }) }) }),
19861
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("space-y-24 lg:space-y-32", featuresClassName), children: featuresSlot ? featuresSlot : features?.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs(
19862
- "div",
20008
+ className: cn(
20009
+ "text-3xl font-bold tracking-tight md:text-4xl",
20010
+ headingClassName
20011
+ ),
20012
+ children: heading
20013
+ }
20014
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
20015
+ subheading && (typeof subheading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
20016
+ "p",
19863
20017
  {
19864
- ref: setFeatureRef(feature.id),
19865
- "data-feature-id": feature.id,
19866
20018
  className: cn(
19867
- "scroll-mt-24 transition-opacity duration-300",
19868
- activeFeature === feature.id ? "opacity-100" : "opacity-50",
19869
- feature.className
20019
+ "mt-4 text-lg text-muted-foreground",
20020
+ subheadingClassName
19870
20021
  ),
19871
- children: [
19872
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-6 lg:hidden", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-video overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsxRuntime.jsx(
19873
- img.Img,
19874
- {
19875
- src: feature.image,
19876
- alt: typeof feature.title === "string" ? feature.title : `Feature ${feature.id}`,
19877
- className: cn("h-full w-full object-cover", feature.imageClassName),
19878
- optixFlowConfig
19879
- }
19880
- ) }) }),
19881
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-4", children: [
19882
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground", numberBadgeClassName), children: index + 1 }),
19883
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
19884
- feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-2xl font-semibold", children: feature.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: feature.title })),
19885
- feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 text-lg text-muted-foreground", children: feature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: feature.description }))
19886
- ] })
19887
- ] })
19888
- ]
19889
- },
19890
- feature.id
19891
- )) })
19892
- ] })
20022
+ children: subheading
20023
+ }
20024
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-4", subheadingClassName), children: subheading }))
20025
+ ] }),
20026
+ /* @__PURE__ */ jsxRuntime.jsxs(
20027
+ "div",
20028
+ {
20029
+ className: cn(
20030
+ "grid gap-8 lg:grid-cols-2 lg:gap-12",
20031
+ contentClassName
20032
+ ),
20033
+ children: [
20034
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "hidden lg:block", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sticky top-24", children: /* @__PURE__ */ jsxRuntime.jsx(
20035
+ "div",
20036
+ {
20037
+ className: cn(
20038
+ "aspect-video overflow-hidden rounded-xl bg-muted",
20039
+ imageClassName
20040
+ ),
20041
+ children: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", children: activeFeatureData && /* @__PURE__ */ jsxRuntime.jsx(
20042
+ framerMotion.motion.div,
20043
+ {
20044
+ initial: { opacity: 0 },
20045
+ animate: { opacity: 1 },
20046
+ exit: { opacity: 0 },
20047
+ transition: { duration: 0.3 },
20048
+ className: "h-full w-full",
20049
+ children: /* @__PURE__ */ jsxRuntime.jsx(
20050
+ img.Img,
20051
+ {
20052
+ src: activeFeatureData.image,
20053
+ alt: typeof activeFeatureData.title === "string" ? activeFeatureData.title : `Feature ${activeFeatureData.id}`,
20054
+ className: cn(
20055
+ "h-full w-full object-cover",
20056
+ activeFeatureData.imageClassName
20057
+ ),
20058
+ optixFlowConfig
20059
+ }
20060
+ )
20061
+ },
20062
+ activeFeatureData.id
20063
+ ) })
20064
+ }
20065
+ ) }) }),
20066
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("space-y-24 lg:space-y-32", featuresClassName), children: featuresSlot ? featuresSlot : features?.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs(
20067
+ "div",
20068
+ {
20069
+ ref: setFeatureRef(feature.id),
20070
+ "data-feature-id": feature.id,
20071
+ className: cn(
20072
+ "scroll-mt-24 transition-opacity duration-300",
20073
+ activeFeature === feature.id ? "opacity-100" : "opacity-50",
20074
+ feature.className
20075
+ ),
20076
+ children: [
20077
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-6 lg:hidden", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-video overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsxRuntime.jsx(
20078
+ img.Img,
20079
+ {
20080
+ src: feature.image,
20081
+ alt: typeof feature.title === "string" ? feature.title : `Feature ${feature.id}`,
20082
+ className: cn(
20083
+ "h-full w-full object-cover",
20084
+ feature.imageClassName
20085
+ ),
20086
+ optixFlowConfig
20087
+ }
20088
+ ) }) }),
20089
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-4", children: [
20090
+ /* @__PURE__ */ jsxRuntime.jsx(
20091
+ "div",
20092
+ {
20093
+ className: cn(
20094
+ "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground",
20095
+ numberBadgeClassName
20096
+ ),
20097
+ children: index + 1
20098
+ }
20099
+ ),
20100
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
20101
+ feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-2xl font-semibold", children: feature.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: feature.title })),
20102
+ feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 text-lg text-muted-foreground", children: feature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: feature.description }))
20103
+ ] })
20104
+ ] })
20105
+ ]
20106
+ },
20107
+ feature.id
20108
+ )) })
20109
+ ]
20110
+ }
20111
+ )
19893
20112
  ] })
19894
20113
  }
19895
20114
  );
@@ -20090,17 +20309,28 @@ function FeatureShowcase({
20090
20309
  contentClassName,
20091
20310
  mediaClassName,
20092
20311
  arrowClassName,
20093
- equalizeOnMobile = true,
20094
- stretchMediaOnMobile = true
20312
+ equalizeOnMobile,
20313
+ stretchMediaOnMobile,
20314
+ background,
20315
+ spacing,
20316
+ pattern,
20317
+ patternOpacity,
20318
+ patternClassName
20095
20319
  }) {
20096
- const baseArrowClassName = "bottom-4 top-auto size-12 translate-y-0 rounded-full border border-current bg-transparent text-current shadow-sm focus:ring-current focus:ring-offset-2 focus:ring-offset-transparent hover:bg-current/10 md:bottom-6";
20320
+ const baseArrowClassName = React52.useMemo(
20321
+ () => "bottom-4 top-auto size-12 translate-y-0 rounded-full border border-current bg-transparent text-current shadow-sm focus:ring-current focus:ring-offset-2 focus:ring-offset-transparent hover:bg-current/10 md:bottom-6",
20322
+ []
20323
+ );
20097
20324
  const [mobileSlideHeight, setMobileSlideHeight] = React52.useState(
20098
20325
  null
20099
20326
  );
20100
20327
  const slideRefs = React52.useRef([]);
20101
- const mediaWrapperClassName = equalizeOnMobile && stretchMediaOnMobile ? "flex-1 min-h-0 md:flex-none" : "";
20328
+ const mediaWrapperClassName = React52.useMemo(
20329
+ () => equalizeOnMobile && stretchMediaOnMobile ? "flex-1 min-h-0 md:flex-none" : "",
20330
+ [equalizeOnMobile, stretchMediaOnMobile]
20331
+ );
20102
20332
  React52.useEffect(() => {
20103
- if (!equalizeOnMobile) {
20333
+ if (!equalizeOnMobile || !items || items.length === 0) {
20104
20334
  setMobileSlideHeight(null);
20105
20335
  return;
20106
20336
  }
@@ -20132,10 +20362,10 @@ function FeatureShowcase({
20132
20362
  window.removeEventListener("resize", updateHeights);
20133
20363
  resizeObserver?.disconnect();
20134
20364
  };
20135
- }, [equalizeOnMobile, items.length]);
20136
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, children: [
20137
- children,
20138
- /* @__PURE__ */ jsxRuntime.jsxs(Carousel, { className: carouselClassName, children: [
20365
+ }, [equalizeOnMobile, items]);
20366
+ const carouselContent = React52.useMemo(() => {
20367
+ if (!items || items.length === 0) return null;
20368
+ return /* @__PURE__ */ jsxRuntime.jsxs(Carousel, { className: carouselClassName, children: [
20139
20369
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pb-18 md:pb-24", children: /* @__PURE__ */ jsxRuntime.jsx(CarouselContent, { className: "ease-in", children: items.map((item, itemIndex) => /* @__PURE__ */ jsxRuntime.jsx(CarouselItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(
20140
20370
  "div",
20141
20371
  {
@@ -20148,8 +20378,8 @@ function FeatureShowcase({
20148
20378
  slideClassName
20149
20379
  ),
20150
20380
  children: [
20151
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full", contentClassName), children: item.content }),
20152
- /* @__PURE__ */ jsxRuntime.jsx(
20381
+ item.content && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full", contentClassName), children: item.content }),
20382
+ item.mediaComponent && /* @__PURE__ */ jsxRuntime.jsx(
20153
20383
  "div",
20154
20384
  {
20155
20385
  className: cn(
@@ -20175,8 +20405,23 @@ function FeatureShowcase({
20175
20405
  className: cn(baseArrowClassName, "right-4 md:right-6", arrowClassName)
20176
20406
  }
20177
20407
  )
20178
- ] })
20179
- ] });
20408
+ ] });
20409
+ }, [items, carouselClassName, equalizeOnMobile, mobileSlideHeight, slideClassName, contentClassName, mediaWrapperClassName, mediaClassName, baseArrowClassName, arrowClassName]);
20410
+ return /* @__PURE__ */ jsxRuntime.jsxs(
20411
+ Section,
20412
+ {
20413
+ background,
20414
+ spacing,
20415
+ pattern,
20416
+ patternOpacity,
20417
+ patternClassName,
20418
+ className,
20419
+ children: [
20420
+ children,
20421
+ carouselContent
20422
+ ]
20423
+ }
20424
+ );
20180
20425
  }
20181
20426
  function FeatureSplitImage({
20182
20427
  title,
@@ -20205,40 +20450,19 @@ function FeatureSplitImage({
20205
20450
  if (actionsSlot) return actionsSlot;
20206
20451
  if (!actions || actions.length === 0) return null;
20207
20452
  return actions.map((action, index) => {
20208
- if (action.children) {
20209
- return /* @__PURE__ */ jsxRuntime.jsx(
20210
- Pressable,
20211
- {
20212
- href: action.href,
20213
- onClick: action.onClick,
20214
- variant: action.variant,
20215
- size: action.size,
20216
- className: action.className,
20217
- "aria-label": action["aria-label"],
20218
- asButton: true,
20219
- children: action.children
20220
- },
20221
- index
20222
- );
20223
- }
20224
- return /* @__PURE__ */ jsxRuntime.jsxs(
20225
- Pressable,
20226
- {
20227
- href: action.href,
20228
- onClick: action.onClick,
20229
- variant: action.variant,
20230
- size: action.size,
20231
- className: action.className,
20232
- "aria-label": action["aria-label"],
20233
- asButton: true,
20234
- children: [
20235
- action.icon,
20236
- action.label,
20237
- action.iconAfter
20238
- ]
20239
- },
20240
- index
20241
- );
20453
+ const {
20454
+ label,
20455
+ icon,
20456
+ iconAfter,
20457
+ children,
20458
+ className: actionClassName,
20459
+ ...pressableProps
20460
+ } = action;
20461
+ return /* @__PURE__ */ jsxRuntime.jsx(Pressable, { className: actionClassName, asButton: true, ...pressableProps, children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20462
+ icon,
20463
+ label,
20464
+ iconAfter
20465
+ ] }) }, index);
20242
20466
  });
20243
20467
  }, [actionsSlot, actions]);
20244
20468
  const imageContent = React52.useMemo(() => {
@@ -20248,7 +20472,7 @@ function FeatureSplitImage({
20248
20472
  img.Img,
20249
20473
  {
20250
20474
  src: imageSrc,
20251
- alt: imageAlt || "Feature illustration",
20475
+ alt: imageAlt || "",
20252
20476
  className: cn("max-h-96 w-full rounded-md object-cover", imageClassName),
20253
20477
  loading: "lazy",
20254
20478
  optixFlowConfig
@@ -20269,7 +20493,7 @@ function FeatureSplitImage({
20269
20493
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col items-center text-center lg:items-start lg:text-left", contentClassName), children: [
20270
20494
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("my-6 mt-0 text-4xl font-semibold text-balance lg:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("my-6 mt-0 text-4xl font-semibold text-balance lg:text-5xl", titleClassName), children: title })),
20271
20495
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-8 max-w-xl text-muted-foreground lg:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-8 max-w-xl text-muted-foreground lg:text-lg", descriptionClassName), children: description })),
20272
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex w-full flex-col justify-center gap-2 sm:flex-row lg:justify-start", actionsClassName), children: actionsContent })
20496
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex w-full flex-col justify-center gap-2 sm:flex-row lg:justify-start", actionsClassName), children: actionsContent })
20273
20497
  ] }),
20274
20498
  imageContent
20275
20499
  ] })
@@ -20303,40 +20527,19 @@ function FeatureSplitImageReverse({
20303
20527
  if (actionsSlot) return actionsSlot;
20304
20528
  if (!actions || actions.length === 0) return null;
20305
20529
  return actions.map((action, index) => {
20306
- if (action.children) {
20307
- return /* @__PURE__ */ jsxRuntime.jsx(
20308
- Pressable,
20309
- {
20310
- href: action.href,
20311
- onClick: action.onClick,
20312
- variant: action.variant,
20313
- size: action.size,
20314
- className: action.className,
20315
- "aria-label": action["aria-label"],
20316
- asButton: true,
20317
- children: action.children
20318
- },
20319
- index
20320
- );
20321
- }
20322
- return /* @__PURE__ */ jsxRuntime.jsxs(
20323
- Pressable,
20324
- {
20325
- href: action.href,
20326
- onClick: action.onClick,
20327
- variant: action.variant,
20328
- size: action.size,
20329
- className: action.className,
20330
- "aria-label": action["aria-label"],
20331
- asButton: true,
20332
- children: [
20333
- action.icon,
20334
- action.label,
20335
- action.iconAfter
20336
- ]
20337
- },
20338
- index
20339
- );
20530
+ const {
20531
+ label,
20532
+ icon,
20533
+ iconAfter,
20534
+ children,
20535
+ className: actionClassName,
20536
+ ...pressableProps
20537
+ } = action;
20538
+ return /* @__PURE__ */ jsxRuntime.jsx(Pressable, { className: actionClassName, asButton: true, ...pressableProps, children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20539
+ icon,
20540
+ label,
20541
+ iconAfter
20542
+ ] }) }, index);
20340
20543
  });
20341
20544
  }, [actionsSlot, actions]);
20342
20545
  const imageContent = React52.useMemo(() => {
@@ -20346,7 +20549,7 @@ function FeatureSplitImageReverse({
20346
20549
  img.Img,
20347
20550
  {
20348
20551
  src: imageSrc,
20349
- alt: imageAlt || "Feature illustration",
20552
+ alt: imageAlt || "",
20350
20553
  className: cn("max-h-96 w-full rounded-md object-cover", imageClassName),
20351
20554
  loading: "lazy",
20352
20555
  optixFlowConfig
@@ -20368,7 +20571,7 @@ function FeatureSplitImageReverse({
20368
20571
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col items-center text-center lg:items-start lg:text-left", contentClassName), children: [
20369
20572
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("my-6 mt-0 text-4xl font-semibold text-balance lg:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("my-6 mt-0 text-4xl font-semibold text-balance lg:text-5xl", titleClassName), children: title })),
20370
20573
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-8 max-w-xl text-muted-foreground lg:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-8 max-w-xl text-muted-foreground lg:text-lg", descriptionClassName), children: description })),
20371
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex w-full flex-col justify-center gap-2 sm:flex-row lg:justify-start", actionsClassName), children: actionsContent })
20574
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex w-full flex-col justify-center gap-2 sm:flex-row lg:justify-start", actionsClassName), children: actionsContent })
20372
20575
  ] })
20373
20576
  ] })
20374
20577
  }
@@ -20391,39 +20594,37 @@ function FeatureIconGridBordered({
20391
20594
  patternOpacity,
20392
20595
  patternClassName
20393
20596
  }) {
20597
+ const renderIcon = React52.useCallback((feature) => {
20598
+ if (feature.icon) return feature.icon;
20599
+ if (feature.iconName) {
20600
+ return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: feature.iconName, size: 20, className: "md:size-6" });
20601
+ }
20602
+ return null;
20603
+ }, []);
20394
20604
  const featuresContent = React52.useMemo(() => {
20395
20605
  if (featuresSlot) return featuresSlot;
20396
20606
  if (!features || features.length === 0) return null;
20397
- return features.map((feature, index) => {
20398
- const renderIcon = () => {
20399
- if (feature.icon) return feature.icon;
20400
- if (feature.iconName) {
20401
- return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: feature.iconName, size: 20, className: "md:size-6" });
20402
- }
20403
- return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/star", size: 20, className: "md:size-6" });
20404
- };
20405
- return /* @__PURE__ */ jsxRuntime.jsxs(
20406
- "div",
20407
- {
20408
- className: cn("relative flex gap-3 rounded-lg border-dashed md:block md:border-l md:p-5", cardClassName, feature.className),
20409
- children: [
20410
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("mb-8 flex size-10 shrink-0 items-center justify-center rounded-full bg-accent md:size-12", feature.iconClassName), children: renderIcon() }),
20411
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
20412
- feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsxs("h3", { className: cn("font-medium md:mb-2 md:text-xl", feature.titleClassName), children: [
20413
- feature.title,
20414
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -left-px hidden h-6 w-px bg-primary md:inline-block" })
20415
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("font-medium md:mb-2 md:text-xl", feature.titleClassName), children: [
20416
- feature.title,
20417
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -left-px hidden h-6 w-px bg-primary md:inline-block" })
20418
- ] })),
20419
- feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }))
20420
- ] })
20421
- ]
20422
- },
20423
- index
20424
- );
20425
- });
20426
- }, [featuresSlot, features, cardClassName]);
20607
+ return features.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs(
20608
+ "div",
20609
+ {
20610
+ className: cn("relative flex gap-3 rounded-lg border-dashed md:block md:border-l md:p-5", cardClassName, feature.className),
20611
+ children: [
20612
+ (feature.icon || feature.iconName) && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("mb-8 flex size-10 shrink-0 items-center justify-center rounded-full bg-accent md:size-12", feature.iconClassName), children: renderIcon(feature) }),
20613
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
20614
+ feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsxs("h3", { className: cn("font-medium md:mb-2 md:text-xl", feature.titleClassName), children: [
20615
+ feature.title,
20616
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -left-px hidden h-6 w-px bg-primary md:inline-block" })
20617
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("font-medium md:mb-2 md:text-xl", feature.titleClassName), children: [
20618
+ feature.title,
20619
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -left-px hidden h-6 w-px bg-primary md:inline-block" })
20620
+ ] })),
20621
+ feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }))
20622
+ ] })
20623
+ ]
20624
+ },
20625
+ index
20626
+ ));
20627
+ }, [featuresSlot, features, cardClassName, renderIcon]);
20427
20628
  return /* @__PURE__ */ jsxRuntime.jsxs(
20428
20629
  Section,
20429
20630
  {
@@ -20437,7 +20638,7 @@ function FeatureIconGridBordered({
20437
20638
  children: [
20438
20639
  label && (typeof label === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-4 text-xs text-muted-foreground", labelClassName), children: label }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-4 text-xs text-muted-foreground", labelClassName), children: label })),
20439
20640
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-3xl font-medium lg:text-4xl", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-3xl font-medium lg:text-4xl", titleClassName), children: title })),
20440
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-14 grid gap-6 md:grid-cols-2 lg:mt-20 lg:grid-cols-4", gridClassName), children: featuresContent })
20641
+ (featuresSlot || features && features.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-14 grid gap-6 md:grid-cols-2 lg:mt-20 lg:grid-cols-4", gridClassName), children: featuresContent })
20441
20642
  ]
20442
20643
  }
20443
20644
  );
@@ -20551,8 +20752,8 @@ function FeatureChecklistImage({
20551
20752
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("lg:p-10", contentClassName), children: [
20552
20753
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-3xl font-medium text-balance md:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-3xl font-medium text-balance md:text-5xl", titleClassName), children: title })),
20553
20754
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-1 text-muted-foreground md:mt-6", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-1 text-muted-foreground md:mt-6", descriptionClassName), children: description })),
20554
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: actionsClassName, children: actionsContent }),
20555
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: cn("mt-10 flex-wrap items-center gap-6 space-y-6 md:flex md:space-y-0", checklistClassName), children: checklistContent })
20755
+ actionsContent && /* @__PURE__ */ jsxRuntime.jsx("div", { className: actionsClassName, children: actionsContent }),
20756
+ checklistContent && /* @__PURE__ */ jsxRuntime.jsx("ul", { className: cn("mt-10 flex-wrap items-center gap-6 space-y-6 md:flex md:space-y-0", checklistClassName), children: checklistContent })
20556
20757
  ] })
20557
20758
  ] })
20558
20759
  }
@@ -20617,10 +20818,10 @@ function FeatureCarouselProgress({
20617
20818
  );
20618
20819
  });
20619
20820
  }, [api, slidesLength]);
20620
- const renderSlideIcon = React52.useMemo(() => (slide) => {
20821
+ const renderSlideIcon = React52.useCallback((slide) => {
20621
20822
  if (slide.icon) return slide.icon;
20622
20823
  if (slide.iconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: slide.iconName, size: 16 });
20623
- return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/star", size: 16 });
20824
+ return null;
20624
20825
  }, []);
20625
20826
  const slidesContent = React52.useMemo(() => {
20626
20827
  if (slidesSlot) return slidesSlot;
@@ -20630,7 +20831,7 @@ function FeatureCarouselProgress({
20630
20831
  {
20631
20832
  className: "basis-full md:basis-1/2 lg:basis-1/3",
20632
20833
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-1", children: /* @__PURE__ */ jsxRuntime.jsx(Card, { className: cn(cardClassName, slide.className), children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "flex flex-col justify-center p-6", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
20633
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("mb-5 flex size-8 items-center justify-center rounded-full bg-accent lg:size-10", slide.iconClassName), children: renderSlideIcon(slide) }),
20834
+ (slide.icon || slide.iconName) && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("mb-5 flex size-8 items-center justify-center rounded-full bg-accent lg:size-10", slide.iconClassName), children: renderSlideIcon(slide) }),
20634
20835
  slide.title && (typeof slide.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-xl font-semibold md:text-2xl lg:text-2xl", slide.titleClassName), children: slide.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-xl font-semibold md:text-2xl lg:text-2xl", slide.titleClassName), children: slide.title })),
20635
20836
  slide.description && (typeof slide.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("pt-2 text-muted-foreground", slide.descriptionClassName), children: slide.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("pt-2 text-muted-foreground", slide.descriptionClassName), children: slide.description }))
20636
20837
  ] }) }) }) })
@@ -20692,28 +20893,28 @@ function FeatureCardGridLinked({
20692
20893
  patternOpacity,
20693
20894
  patternClassName
20694
20895
  }) {
20896
+ const renderImage = React52.useCallback((feature, imageAlt) => {
20897
+ if (feature.imageSlot) return feature.imageSlot;
20898
+ if (feature.image) {
20899
+ return /* @__PURE__ */ jsxRuntime.jsx(
20900
+ img.Img,
20901
+ {
20902
+ src: feature.image,
20903
+ alt: imageAlt,
20904
+ className: "h-full w-full rounded-t-lg object-cover transition-opacity hover:opacity-80",
20905
+ loading: "lazy",
20906
+ optixFlowConfig
20907
+ }
20908
+ );
20909
+ }
20910
+ return null;
20911
+ }, [optixFlowConfig]);
20695
20912
  const featuresContent = React52.useMemo(() => {
20696
20913
  if (featuresSlot) return featuresSlot;
20697
20914
  if (!features || features.length === 0) return null;
20698
20915
  return features.map((feature, index) => {
20699
20916
  const featureKey = feature.id || `feature-${index}`;
20700
20917
  const imageAlt = feature.imageAlt || (typeof feature.heading === "string" ? feature.heading : "Feature image");
20701
- const renderImage = () => {
20702
- if (feature.imageSlot) return feature.imageSlot;
20703
- if (feature.image) {
20704
- return /* @__PURE__ */ jsxRuntime.jsx(
20705
- img.Img,
20706
- {
20707
- src: feature.image,
20708
- alt: imageAlt,
20709
- className: "h-full w-full rounded-t-lg object-cover transition-opacity hover:opacity-80",
20710
- loading: "lazy",
20711
- optixFlowConfig
20712
- }
20713
- );
20714
- }
20715
- return null;
20716
- };
20717
20918
  return /* @__PURE__ */ jsxRuntime.jsxs(
20718
20919
  "div",
20719
20920
  {
@@ -20724,7 +20925,7 @@ function FeatureCardGridLinked({
20724
20925
  feature.label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-mono text-xs text-muted-foreground", feature.labelClassName), children: feature.label }),
20725
20926
  feature.heading && /* @__PURE__ */ jsxRuntime.jsx(Pressable, { href: feature.url, children: typeof feature.heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("text-2xl transition-all hover:text-primary hover:opacity-80 sm:text-3xl lg:text-4xl", feature.headingClassName), children: feature.heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-2xl transition-all hover:text-primary hover:opacity-80 sm:text-3xl lg:text-4xl", feature.headingClassName), children: feature.heading }) })
20726
20927
  ] }),
20727
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "md:1/3 w-2/5 shrink-0 rounded-r-lg border-l", children: /* @__PURE__ */ jsxRuntime.jsx(Pressable, { href: feature.url, children: renderImage() }) })
20928
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "md:1/3 w-2/5 shrink-0 rounded-r-lg border-l", children: /* @__PURE__ */ jsxRuntime.jsx(Pressable, { href: feature.url, children: renderImage(feature, imageAlt) }) })
20728
20929
  ] }),
20729
20930
  feature.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("p-4 text-muted-foreground md:p-8", feature.descriptionClassName), children: feature.description })
20730
20931
  ]
@@ -20732,7 +20933,7 @@ function FeatureCardGridLinked({
20732
20933
  featureKey
20733
20934
  );
20734
20935
  });
20735
- }, [featuresSlot, features, cardClassName, optixFlowConfig]);
20936
+ }, [featuresSlot, features, cardClassName, renderImage]);
20736
20937
  return /* @__PURE__ */ jsxRuntime.jsxs(
20737
20938
  Section,
20738
20939
  {
@@ -20768,7 +20969,7 @@ function FeatureNumberedCards({
20768
20969
  patternOpacity,
20769
20970
  patternClassName
20770
20971
  }) {
20771
- const renderChecklistItems = (feature) => {
20972
+ const renderChecklistItems = React52.useCallback((feature) => {
20772
20973
  if (feature.checklistSlot) return feature.checklistSlot;
20773
20974
  if (!feature.checklistItems || feature.checklistItems.length === 0) return null;
20774
20975
  return feature.checklistItems.map((item, itemIndex) => {
@@ -20788,7 +20989,7 @@ function FeatureNumberedCards({
20788
20989
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm md:text-base", children: content })
20789
20990
  ] }, itemIndex);
20790
20991
  });
20791
- };
20992
+ }, []);
20792
20993
  const featuresContent = React52.useMemo(() => {
20793
20994
  if (featuresSlot) return featuresSlot;
20794
20995
  if (!features || features.length === 0) return null;
@@ -20893,12 +21094,12 @@ function FeatureIconGridAccent({
20893
21094
  className,
20894
21095
  containerClassName,
20895
21096
  children: [
20896
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex w-full flex-col items-center", headerClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center space-y-4 text-center sm:space-y-6 md:max-w-3xl md:text-center", children: [
21097
+ (label || title || description) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex w-full flex-col items-center", headerClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center space-y-4 text-center sm:space-y-6 md:max-w-3xl md:text-center", children: [
20897
21098
  label && (typeof label === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm text-muted-foreground", labelClassName), children: label }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: labelClassName, children: label })),
20898
21099
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-3xl font-medium md:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: title })),
20899
21100
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-muted-foreground md:max-w-2xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
20900
21101
  ] }) }),
20901
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mx-auto mt-20 grid max-w-5xl gap-6 md:grid-cols-2", gridClassName), children: featuresContent })
21102
+ featuresContent && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mx-auto mt-20 grid max-w-5xl gap-6 md:grid-cols-2", gridClassName), children: featuresContent })
20902
21103
  ]
20903
21104
  }
20904
21105
  );
@@ -20920,20 +21121,20 @@ function FeatureThreeColumnValues({
20920
21121
  patternOpacity,
20921
21122
  patternClassName
20922
21123
  }) {
20923
- const renderValueIcon = (value) => {
21124
+ const renderValueIcon = React52__namespace.useCallback((value) => {
20924
21125
  if (value.icon) return value.icon;
20925
21126
  if (value.iconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: value.iconName, size: 24 });
20926
- return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/star", size: 24 });
20927
- };
21127
+ return null;
21128
+ }, []);
20928
21129
  const valuesContent = React52.useMemo(() => {
20929
21130
  if (valuesSlot) return valuesSlot;
20930
21131
  if (!values || values.length === 0) return null;
20931
21132
  return values.map((value, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("rounded-lg bg-accent p-5", cardClassName, value.className), children: [
20932
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("mb-8 flex size-12 items-center justify-center rounded-full bg-background", value.iconClassName), children: renderValueIcon(value) }),
21133
+ (value.icon || value.iconName) && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("mb-8 flex size-12 items-center justify-center rounded-full bg-background", value.iconClassName), children: renderValueIcon(value) }),
20933
21134
  value.title && (typeof value.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("mb-2 text-xl font-medium", value.titleClassName), children: value.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-2 text-xl font-medium", value.titleClassName), children: value.title })),
20934
21135
  value.description && (typeof value.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("leading-7 text-muted-foreground", value.descriptionClassName), children: value.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("leading-7 text-muted-foreground", value.descriptionClassName), children: value.description }))
20935
21136
  ] }, index));
20936
- }, [valuesSlot, values, cardClassName]);
21137
+ }, [valuesSlot, values, cardClassName, renderValueIcon]);
20937
21138
  return /* @__PURE__ */ jsxRuntime.jsxs(
20938
21139
  Section,
20939
21140
  {
@@ -20947,7 +21148,7 @@ function FeatureThreeColumnValues({
20947
21148
  children: [
20948
21149
  label && (typeof label === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-4 text-sm text-muted-foreground lg:text-base", labelClassName), children: label }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-4 text-sm text-muted-foreground lg:text-base", labelClassName), children: label })),
20949
21150
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-3xl font-medium lg:text-4xl", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-3xl font-medium lg:text-4xl", titleClassName), children: title })),
20950
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-14 grid gap-6 lg:mt-20 lg:grid-cols-3", gridClassName), children: valuesContent })
21151
+ (valuesSlot || values && values.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-14 grid gap-6 lg:mt-20 lg:grid-cols-3", gridClassName), children: valuesContent })
20951
21152
  ]
20952
21153
  }
20953
21154
  );
@@ -20979,7 +21180,7 @@ function FeatureBadgeGridSix({
20979
21180
  if (!label) return null;
20980
21181
  return /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "secondary", className: badgeClassName, children: label });
20981
21182
  }, [badgeSlot, label, badgeClassName]);
20982
- const renderFeatureIcon = (feature) => {
21183
+ const renderFeatureIcon = React52.useCallback((feature) => {
20983
21184
  if (feature.icon) return feature.icon;
20984
21185
  if (feature.iconName) {
20985
21186
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -20992,25 +21193,28 @@ function FeatureBadgeGridSix({
20992
21193
  );
20993
21194
  }
20994
21195
  return null;
20995
- };
21196
+ }, []);
20996
21197
  const featuresContent = React52.useMemo(() => {
20997
21198
  if (featuresSlot) return featuresSlot;
20998
21199
  if (!features || features.length === 0) return null;
20999
- return features.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs(
21000
- "div",
21001
- {
21002
- className: cn("flex gap-6 space-y-4 rounded-lg md:block", cardClassName, feature.className),
21003
- children: [
21004
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-10 shrink-0 items-center justify-center rounded-full bg-accent md:size-12", children: renderFeatureIcon(feature) }),
21005
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
21006
- feature.heading && (typeof feature.heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("font-medium md:mb-2 md:text-xl", feature.headingClassName), children: feature.heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("font-medium md:mb-2 md:text-xl", feature.headingClassName), children: feature.heading })),
21007
- feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }))
21008
- ] })
21009
- ]
21010
- },
21011
- index
21012
- ));
21013
- }, [featuresSlot, features, cardClassName]);
21200
+ return features.map((feature, index) => {
21201
+ const iconContent = renderFeatureIcon(feature);
21202
+ return /* @__PURE__ */ jsxRuntime.jsxs(
21203
+ "div",
21204
+ {
21205
+ className: cn("flex gap-6 space-y-4 rounded-lg md:block", cardClassName, feature.className),
21206
+ children: [
21207
+ iconContent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-10 shrink-0 items-center justify-center rounded-full bg-accent md:size-12", children: iconContent }),
21208
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
21209
+ feature.heading && (typeof feature.heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("font-medium md:mb-2 md:text-xl", feature.headingClassName), children: feature.heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("font-medium md:mb-2 md:text-xl", feature.headingClassName), children: feature.heading })),
21210
+ feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }))
21211
+ ] })
21212
+ ]
21213
+ },
21214
+ index
21215
+ );
21216
+ });
21217
+ }, [featuresSlot, features, cardClassName, renderFeatureIcon]);
21014
21218
  const actionContent = React52.useMemo(() => {
21015
21219
  if (actionSlot) return actionSlot;
21016
21220
  if (!action) return null;
@@ -21071,7 +21275,6 @@ function FeatureBadgeGridSix({
21071
21275
  function FeaturePatternGridLinks({
21072
21276
  features,
21073
21277
  featuresSlot,
21074
- patternUrl = patternSvgs.dotPattern,
21075
21278
  className,
21076
21279
  containerClassName,
21077
21280
  gridClassName,
@@ -21082,26 +21285,28 @@ function FeaturePatternGridLinks({
21082
21285
  patternOpacity,
21083
21286
  patternClassName
21084
21287
  }) {
21085
- const renderFeatureIcon = (feature) => {
21288
+ const renderFeatureIcon = React52.useCallback((feature) => {
21086
21289
  if (feature.icon) return feature.icon;
21087
21290
  if (feature.iconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: feature.iconName, size: 24, className: feature.iconClassName });
21088
21291
  return null;
21089
- };
21090
- const renderFeatureLink = (feature) => {
21292
+ }, []);
21293
+ const renderFeatureLink = React52.useCallback((feature) => {
21091
21294
  if (feature.linkSlot) return feature.linkSlot;
21092
- if (!feature.link) return null;
21295
+ if (!feature.link && !feature.linkLabel) return null;
21296
+ const label = feature.linkLabel || (feature.link ? "Learn more" : null);
21297
+ if (!label) return null;
21093
21298
  return /* @__PURE__ */ jsxRuntime.jsxs(
21094
21299
  Pressable,
21095
21300
  {
21096
21301
  href: feature.link,
21097
21302
  className: cn("flex items-center gap-2 text-sm font-medium", feature.linkClassName),
21098
21303
  children: [
21099
- feature.linkLabel || "Learn more",
21304
+ label,
21100
21305
  /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
21101
21306
  ]
21102
21307
  }
21103
21308
  );
21104
- };
21309
+ }, []);
21105
21310
  const featuresContent = React52.useMemo(() => {
21106
21311
  if (featuresSlot) return featuresSlot;
21107
21312
  if (!features || features.length === 0) return null;
@@ -21120,7 +21325,7 @@ function FeaturePatternGridLinks({
21120
21325
  },
21121
21326
  index
21122
21327
  ));
21123
- }, [featuresSlot, features, cardClassName]);
21328
+ }, [featuresSlot, features, cardClassName, renderFeatureIcon, renderFeatureLink]);
21124
21329
  return /* @__PURE__ */ jsxRuntime.jsx(
21125
21330
  Section,
21126
21331
  {
@@ -21129,12 +21334,8 @@ function FeaturePatternGridLinks({
21129
21334
  pattern,
21130
21335
  patternOpacity,
21131
21336
  patternClassName,
21132
- className: cn("bg-muted/30", className),
21337
+ className,
21133
21338
  containerClassName,
21134
- style: {
21135
- backgroundImage: `url(${patternUrl})`,
21136
- backgroundRepeat: "repeat"
21137
- },
21138
21339
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("grid gap-6 md:grid-cols-2 lg:grid-cols-3", gridClassName), children: featuresContent })
21139
21340
  }
21140
21341
  );
@@ -21202,7 +21403,7 @@ function FeatureTabbedContentImage({
21202
21403
  description,
21203
21404
  slides,
21204
21405
  slidesSlot,
21205
- defaultTab = "1",
21406
+ defaultTab,
21206
21407
  className,
21207
21408
  containerClassName,
21208
21409
  headerClassName,
@@ -21221,7 +21422,7 @@ function FeatureTabbedContentImage({
21221
21422
  patternOpacity,
21222
21423
  patternClassName
21223
21424
  }) {
21224
- const renderFeatures = React52.useMemo(() => (slide) => {
21425
+ const renderFeatures = React52__namespace.useCallback((slide) => {
21225
21426
  if (slide.featuresSlot) return slide.featuresSlot;
21226
21427
  if (!slide.features || slide.features.length === 0) return null;
21227
21428
  return slide.features.map((feature, index) => {
@@ -21235,7 +21436,7 @@ function FeatureTabbedContentImage({
21235
21436
  ] }, index);
21236
21437
  });
21237
21438
  }, []);
21238
- const renderActions = React52.useMemo(() => (slide) => {
21439
+ const renderActions = React52__namespace.useCallback((slide) => {
21239
21440
  if (slide.actionsSlot) return slide.actionsSlot;
21240
21441
  if (!slide.actions || slide.actions.length === 0) return null;
21241
21442
  return slide.actions.map((action, index) => {
@@ -21275,7 +21476,7 @@ function FeatureTabbedContentImage({
21275
21476
  );
21276
21477
  });
21277
21478
  }, []);
21278
- const renderImage = React52.useMemo(() => (slide) => {
21479
+ const renderImage = React52__namespace.useCallback((slide) => {
21279
21480
  if (slide.imageSlot) return slide.imageSlot;
21280
21481
  if (!slide.image) return null;
21281
21482
  const imageAlt = slide.imageAlt || (typeof slide.title === "string" ? slide.title : "Tab content image");
@@ -21322,6 +21523,11 @@ function FeatureTabbedContentImage({
21322
21523
  ))
21323
21524
  ] });
21324
21525
  }, [slidesSlot, slides, tabsListClassName, tabTriggerClassName, tabContentClassName, contentGridClassName, renderFeatures, renderActions, renderImage]);
21526
+ const effectiveDefaultTab = React52.useMemo(() => {
21527
+ if (defaultTab) return defaultTab;
21528
+ if (slides && slides.length > 0) return slides[0].id.toString();
21529
+ return "1";
21530
+ }, [defaultTab, slides]);
21325
21531
  return /* @__PURE__ */ jsxRuntime.jsxs(
21326
21532
  Section,
21327
21533
  {
@@ -21337,10 +21543,10 @@ function FeatureTabbedContentImage({
21337
21543
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-center text-3xl font-semibold lg:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-center text-3xl font-semibold lg:text-5xl", titleClassName), children: title })),
21338
21544
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-center text-balance text-muted-foreground lg:text-xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-center text-balance text-muted-foreground lg:text-xl", descriptionClassName), children: description }))
21339
21545
  ] }),
21340
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-12", tabsWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
21546
+ (slidesSlot || slides && slides.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-12", tabsWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
21341
21547
  Tabs,
21342
21548
  {
21343
- defaultValue: defaultTab,
21549
+ defaultValue: effectiveDefaultTab,
21344
21550
  className: cn("mx-auto flex w-fit flex-col items-center gap-8 md:gap-12", tabsClassName),
21345
21551
  children: slidesContent
21346
21552
  }
@@ -21352,7 +21558,7 @@ function FeatureTabbedContentImage({
21352
21558
  function FeatureUtilityCardsGrid({
21353
21559
  label,
21354
21560
  labelIcon,
21355
- labelIconName = "lucide/square-dashed-mouse-pointer",
21561
+ labelIconName,
21356
21562
  title,
21357
21563
  description,
21358
21564
  learnMoreAction,
@@ -21374,11 +21580,11 @@ function FeatureUtilityCardsGrid({
21374
21580
  patternOpacity,
21375
21581
  patternClassName
21376
21582
  }) {
21377
- const renderLabelIcon = () => {
21583
+ const renderLabelIcon = React52.useMemo(() => {
21378
21584
  if (labelIcon) return labelIcon;
21379
21585
  if (labelIconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: labelIconName, size: 20, className: "text-primary" });
21380
- return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/square-dashed-mouse-pointer", size: 20, className: "text-primary" });
21381
- };
21586
+ return null;
21587
+ }, [labelIcon, labelIconName]);
21382
21588
  const learnMoreContent = React52.useMemo(() => {
21383
21589
  if (learnMoreSlot) return learnMoreSlot;
21384
21590
  if (!learnMoreAction) return null;
@@ -21409,7 +21615,7 @@ function FeatureUtilityCardsGrid({
21409
21615
  }
21410
21616
  );
21411
21617
  }, [learnMoreSlot, learnMoreAction]);
21412
- const renderUtilityImage = (utility) => {
21618
+ const renderUtilityImage = React52__namespace.useCallback((utility) => {
21413
21619
  if (utility.imageSlot) return utility.imageSlot;
21414
21620
  if (utility.image) {
21415
21621
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -21424,7 +21630,7 @@ function FeatureUtilityCardsGrid({
21424
21630
  );
21425
21631
  }
21426
21632
  return null;
21427
- };
21633
+ }, [optixFlowConfig]);
21428
21634
  const utilitiesContent = React52.useMemo(() => {
21429
21635
  if (utilitiesSlot) return utilitiesSlot;
21430
21636
  if (!utilities || utilities.length === 0) return null;
@@ -21435,7 +21641,7 @@ function FeatureUtilityCardsGrid({
21435
21641
  utility.description && (typeof utility.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-muted-foreground", utility.descriptionClassName), children: utility.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-muted-foreground", utility.descriptionClassName), children: utility.description }))
21436
21642
  ] })
21437
21643
  ] }, index));
21438
- }, [utilitiesSlot, utilities, cardClassName, optixFlowConfig]);
21644
+ }, [utilitiesSlot, utilities, cardClassName, renderUtilityImage]);
21439
21645
  return /* @__PURE__ */ jsxRuntime.jsxs(
21440
21646
  Section,
21441
21647
  {
@@ -21447,26 +21653,28 @@ function FeatureUtilityCardsGrid({
21447
21653
  className,
21448
21654
  containerClassName: cn("max-w-7xl", containerClassName),
21449
21655
  children: [
21450
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center justify-between text-sm", headerClassName), children: [
21451
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-1 text-muted-foreground", labelClassName), children: [
21452
- renderLabelIcon(),
21453
- label && (typeof label === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { children: label }) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: label }))
21656
+ (label || labelIcon || labelIconName || learnMoreSlot || learnMoreAction) && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
21657
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center justify-between text-sm", headerClassName), children: [
21658
+ (label || labelIcon || labelIconName) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-1 text-muted-foreground", labelClassName), children: [
21659
+ renderLabelIcon,
21660
+ label && (typeof label === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { children: label }) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: label }))
21661
+ ] }),
21662
+ learnMoreContent
21454
21663
  ] }),
21455
- learnMoreContent
21664
+ /* @__PURE__ */ jsxRuntime.jsx(Separator, { className: "mt-3 mb-8" })
21456
21665
  ] }),
21457
- /* @__PURE__ */ jsxRuntime.jsx(Separator, { className: "mt-3 mb-8" }),
21458
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col justify-between gap-6 md:flex-row", children: [
21666
+ (title || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col justify-between gap-6 md:flex-row", children: [
21459
21667
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-3xl font-medium md:w-1/2", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-3xl font-medium md:w-1/2", titleClassName), children: title })),
21460
21668
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("md:w-1/2", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("md:w-1/2", descriptionClassName), children: description }))
21461
21669
  ] }),
21462
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-11 grid w-full grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3", gridClassName), children: utilitiesContent })
21670
+ (utilitiesSlot || utilities && utilities.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-11 grid w-full grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3", gridClassName), children: utilitiesContent })
21463
21671
  ]
21464
21672
  }
21465
21673
  );
21466
21674
  }
21467
21675
  function FeatureBentoUtilities({
21468
21676
  label,
21469
- labelIconName = "lucide/square-dashed-mouse-pointer",
21677
+ labelIconName,
21470
21678
  labelIcon,
21471
21679
  title,
21472
21680
  description,
@@ -21489,7 +21697,7 @@ function FeatureBentoUtilities({
21489
21697
  patternOpacity,
21490
21698
  patternClassName
21491
21699
  }) {
21492
- const renderCard = React52.useMemo(() => (card, index) => {
21700
+ const renderCard = React52__namespace.useCallback((card, index) => {
21493
21701
  const hasImage = card.imageSrc || card.imageSlot;
21494
21702
  const cardClasses = cn(
21495
21703
  hasImage ? "overflow-hidden pt-0" : "p-6",
@@ -21535,12 +21743,16 @@ function FeatureBentoUtilities({
21535
21743
  card.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground", children: card.description })
21536
21744
  ] }, index);
21537
21745
  }, [optixFlowConfig]);
21538
- const renderColumn = React52.useMemo(() => (cards, slot) => {
21746
+ const renderColumn = React52__namespace.useCallback((cards, slot) => {
21539
21747
  if (slot) return slot;
21540
21748
  if (!cards || cards.length === 0) return null;
21541
21749
  return cards.map((card, index) => renderCard(card, index));
21542
21750
  }, [renderCard]);
21543
- const labelIconElement = React52.useMemo(() => labelIcon ?? (labelIconName ? /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: labelIconName, size: 20 }) : null), [labelIcon, labelIconName]);
21751
+ const labelIconElement = React52.useMemo(() => {
21752
+ if (labelIcon) return labelIcon;
21753
+ if (labelIconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: labelIconName, size: 20 });
21754
+ return null;
21755
+ }, [labelIcon, labelIconName]);
21544
21756
  return /* @__PURE__ */ jsxRuntime.jsxs(
21545
21757
  Section,
21546
21758
  {
@@ -21552,7 +21764,7 @@ function FeatureBentoUtilities({
21552
21764
  className: cn("bg-gray-50 dark:bg-background", className),
21553
21765
  containerClassName: cn("max-w-7xl", containerClassName),
21554
21766
  children: [
21555
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-2 text-muted-foreground", labelClassName), children: [
21767
+ (labelIconElement || label) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-2 text-muted-foreground", labelClassName), children: [
21556
21768
  labelIconElement,
21557
21769
  label && (typeof label === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm", children: label }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm", children: label }))
21558
21770
  ] }),
@@ -21591,15 +21803,15 @@ function FeatureChecklistThreeColumn({
21591
21803
  patternOpacity,
21592
21804
  patternClassName
21593
21805
  }) {
21594
- const getCheckItemContent = React52.useMemo(() => (item) => {
21806
+ const getCheckItemContent = React52.useCallback((item) => {
21595
21807
  if (typeof item === "string") return item;
21596
21808
  return item.content;
21597
21809
  }, []);
21598
- const getCheckItemClassName = React52.useMemo(() => (item) => {
21810
+ const getCheckItemClassName = React52.useCallback((item) => {
21599
21811
  if (typeof item === "string") return void 0;
21600
21812
  return item.className;
21601
21813
  }, []);
21602
- const renderChecklistColumn = React52.useMemo(() => (items, slot, gapClass) => {
21814
+ const renderChecklistColumn = React52.useCallback((items, slot, gapClass) => {
21603
21815
  if (slot) return slot;
21604
21816
  if (!items || items.length === 0) return null;
21605
21817
  return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: cn("flex flex-col text-muted-foreground", gapClass, checklistClassName), children: items.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: cn("flex items-center gap-2", getCheckItemClassName(item)), children: [
@@ -21607,7 +21819,7 @@ function FeatureChecklistThreeColumn({
21607
21819
  getCheckItemContent(item)
21608
21820
  ] }, index)) });
21609
21821
  }, [checklistClassName, getCheckItemContent, getCheckItemClassName]);
21610
- const renderCardImage = React52.useMemo(() => (card) => {
21822
+ const renderCardImage = React52.useCallback((card) => {
21611
21823
  if (card.imageSlot) return card.imageSlot;
21612
21824
  if (card.image) {
21613
21825
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -21623,7 +21835,7 @@ function FeatureChecklistThreeColumn({
21623
21835
  }
21624
21836
  return null;
21625
21837
  }, [optixFlowConfig]);
21626
- const renderCardLink = React52.useMemo(() => (card) => {
21838
+ const renderCardLink = React52.useCallback((card) => {
21627
21839
  if (card.linkSlot) return card.linkSlot;
21628
21840
  if (!card.link) return null;
21629
21841
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -21686,7 +21898,7 @@ function FeatureChecklistThreeColumn({
21686
21898
  pattern,
21687
21899
  patternOpacity,
21688
21900
  patternClassName,
21689
- className: cn("py-16 sm:py-24 md:py-32", className),
21901
+ className,
21690
21902
  containerClassName,
21691
21903
  children: [
21692
21904
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid gap-4 sm:grid-cols-2 sm:gap-8 md:gap-12 lg:grid-cols-3 lg:gap-16", headerGridClassName), children: [
@@ -21718,26 +21930,25 @@ function FeatureIntegrationCards({
21718
21930
  patternOpacity,
21719
21931
  patternClassName
21720
21932
  }) {
21721
- const renderIntegrationIcon = React52.useMemo(() => (integration) => {
21933
+ const renderIntegrationIcon = React52.useCallback((integration) => {
21722
21934
  if (integration.iconSlot) return integration.iconSlot;
21723
- if (integration.icon) {
21724
- return /* @__PURE__ */ jsxRuntime.jsx(
21725
- img.Img,
21726
- {
21727
- src: integration.icon,
21728
- alt: integration.iconAlt || (typeof integration.title === "string" ? integration.title : "Integration icon"),
21729
- className: cn("h-auto w-7", integration.iconClassName),
21730
- loading: "lazy",
21731
- optixFlowConfig
21732
- }
21733
- );
21734
- }
21735
- return null;
21935
+ if (!integration.icon) return null;
21936
+ return /* @__PURE__ */ jsxRuntime.jsx(
21937
+ img.Img,
21938
+ {
21939
+ src: integration.icon,
21940
+ alt: integration.iconAlt || (typeof integration.title === "string" ? integration.title : "Integration icon"),
21941
+ className: cn("h-auto w-7", integration.iconClassName),
21942
+ loading: "lazy",
21943
+ optixFlowConfig
21944
+ }
21945
+ );
21736
21946
  }, [optixFlowConfig]);
21737
- const renderLinkLabel = React52.useMemo(() => (integration) => {
21947
+ const renderLinkLabel = React52.useCallback((integration) => {
21738
21948
  if (integration.linkLabelSlot) return integration.linkLabelSlot;
21949
+ if (!integration.linkLabel) return null;
21739
21950
  return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("flex items-center gap-1 rounded-full border px-3 py-2.5 text-sm", integration.linkLabelClassName), children: [
21740
- integration.linkLabel || "Visit Website",
21951
+ integration.linkLabel,
21741
21952
  /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-right", size: 16 })
21742
21953
  ] });
21743
21954
  }, []);
@@ -21745,10 +21956,12 @@ function FeatureIntegrationCards({
21745
21956
  if (integrationsSlot) return integrationsSlot;
21746
21957
  if (!integrations || integrations.length === 0) return null;
21747
21958
  return integrations.map((integration, index) => {
21959
+ const iconContent = renderIntegrationIcon(integration);
21960
+ const linkLabelContent = renderLinkLabel(integration);
21748
21961
  const cardContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
21749
21962
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
21750
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "grid size-12 shrink-0 place-content-center rounded-md border", children: renderIntegrationIcon(integration) }),
21751
- renderLinkLabel(integration)
21963
+ iconContent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "grid size-12 shrink-0 place-content-center rounded-md border", children: iconContent }),
21964
+ linkLabelContent
21752
21965
  ] }),
21753
21966
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
21754
21967
  integration.title && (typeof integration.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("font-medium md:text-lg", integration.titleClassName), children: integration.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("font-medium md:text-lg", integration.titleClassName), children: integration.title })),
@@ -21820,12 +22033,12 @@ function FeatureIconTabsContent({
21820
22033
  patternOpacity,
21821
22034
  patternClassName
21822
22035
  }) {
21823
- const renderTabIcon = React52.useMemo(() => (tab) => {
22036
+ const renderTabIcon = React52.useCallback((tab) => {
21824
22037
  if (tab.icon) return tab.icon;
21825
22038
  if (tab.iconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: tab.iconName, size: 16 });
21826
- return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/star", size: 16 });
22039
+ return null;
21827
22040
  }, []);
21828
- const renderTabContentActions = React52.useMemo(() => (content) => {
22041
+ const renderTabContentActions = React52.useCallback((content) => {
21829
22042
  if (content.actionsSlot) return content.actionsSlot;
21830
22043
  if (!content.actions || content.actions.length === 0) return null;
21831
22044
  return content.actions.map((action, index) => {
@@ -21865,7 +22078,7 @@ function FeatureIconTabsContent({
21865
22078
  );
21866
22079
  });
21867
22080
  }, []);
21868
- const renderTabContentImage = React52.useMemo(() => (content) => {
22081
+ const renderTabContentImage = React52.useCallback((content) => {
21869
22082
  if (content.imageSlot) return content.imageSlot;
21870
22083
  if (content.imageSrc) {
21871
22084
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -21892,7 +22105,7 @@ function FeatureIconTabsContent({
21892
22105
  value: tab.value,
21893
22106
  className: cn("flex items-center gap-2 rounded-xl px-4 py-3 text-sm font-semibold text-muted-foreground data-[state=active]:bg-muted data-[state=active]:text-primary", tabTriggerClassName, tab.className),
21894
22107
  children: [
21895
- renderTabIcon(tab),
22108
+ (tab.icon || tab.iconName) && renderTabIcon(tab),
21896
22109
  tab.label
21897
22110
  ]
21898
22111
  },
@@ -21914,9 +22127,9 @@ function FeatureIconTabsContent({
21914
22127
  content.badge && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "outline", className: cn("w-fit bg-background", content.badgeClassName), children: content.badge }),
21915
22128
  content.title && (typeof content.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("text-3xl font-semibold lg:text-5xl", content.titleClassName), children: content.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-3xl font-semibold lg:text-5xl", content.titleClassName), children: content.title })),
21916
22129
  content.description && (typeof content.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-muted-foreground lg:text-lg", content.descriptionClassName), children: content.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-muted-foreground lg:text-lg", content.descriptionClassName), children: content.description })),
21917
- renderTabContentActions(content)
22130
+ (content.actionsSlot || content.actions && content.actions.length > 0) && renderTabContentActions(content)
21918
22131
  ] }),
21919
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-[300px] w-full lg:h-[400px]", children: renderTabContentImage(content) })
22132
+ (content.imageSlot || content.imageSrc) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-[300px] w-full lg:h-[400px]", children: renderTabContentImage(content) })
21920
22133
  ]
21921
22134
  },
21922
22135
  tab.value
@@ -21935,7 +22148,7 @@ function FeatureIconTabsContent({
21935
22148
  className,
21936
22149
  containerClassName: cn("mx-auto", containerClassName),
21937
22150
  children: [
21938
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col items-center gap-4 text-center", headerClassName), children: [
22151
+ (badge || heading || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col items-center gap-4 text-center", headerClassName), children: [
21939
22152
  badge && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "outline", className: badgeClassName, children: badge }),
21940
22153
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("max-w-2xl text-3xl font-semibold md:text-4xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("max-w-2xl text-3xl font-semibold md:text-4xl", headingClassName), children: heading })),
21941
22154
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-muted-foreground", descriptionClassName), children: description }))
@@ -22098,28 +22311,30 @@ function FeatureImageOverlayBadge({
22098
22311
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-muted-foreground lg:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-muted-foreground lg:text-lg", descriptionClassName), children: description })),
22099
22312
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: actionsClassName, children: actionsContent })
22100
22313
  ] }),
22101
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative rounded-xl", imageWrapperClassName), children: [
22314
+ imageContent && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative rounded-xl", imageWrapperClassName), children: [
22102
22315
  imageContent,
22103
- /* @__PURE__ */ jsxRuntime.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) }),
22104
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
22105
- /* @__PURE__ */ jsxRuntime.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: [
22106
- /* @__PURE__ */ jsxRuntime.jsx(Avatar, { className: "size-7 rounded-full", children: /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: "Avatar" }) }),
22107
- avatarBadgeText
22108
- ] }),
22109
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-5 text-background", children: [
22110
- overlayTitle && (typeof overlayTitle === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h4", { className: cn("text-lg font-semibold lg:text-3xl", overlayTitleClassName), children: overlayTitle }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-lg font-semibold lg:text-3xl", overlayTitleClassName), children: overlayTitle })),
22111
- overlayLinkText && /* @__PURE__ */ jsxRuntime.jsxs(
22112
- Pressable,
22113
- {
22114
- href: overlayLinkUrl,
22115
- onClick: overlayLinkOnClick,
22116
- className: "flex items-center gap-1 font-medium",
22117
- children: [
22118
- overlayLinkText,
22119
- /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
22120
- ]
22121
- }
22122
- )
22316
+ (avatarSrc || avatarBadgeText || overlayTitle || overlayLinkText) && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22317
+ /* @__PURE__ */ jsxRuntime.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) }),
22318
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
22319
+ (avatarSrc || avatarBadgeText) && /* @__PURE__ */ jsxRuntime.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: [
22320
+ avatarSrc && /* @__PURE__ */ jsxRuntime.jsx(Avatar, { className: "size-7 rounded-full", children: /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: "Avatar" }) }),
22321
+ avatarBadgeText
22322
+ ] }),
22323
+ (overlayTitle || overlayLinkText) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-5 text-background", children: [
22324
+ overlayTitle && (typeof overlayTitle === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h4", { className: cn("text-lg font-semibold lg:text-3xl", overlayTitleClassName), children: overlayTitle }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-lg font-semibold lg:text-3xl", overlayTitleClassName), children: overlayTitle })),
22325
+ overlayLinkText && /* @__PURE__ */ jsxRuntime.jsxs(
22326
+ Pressable,
22327
+ {
22328
+ href: overlayLinkUrl,
22329
+ onClick: overlayLinkOnClick,
22330
+ className: "flex items-center gap-1 font-medium",
22331
+ children: [
22332
+ overlayLinkText,
22333
+ /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
22334
+ ]
22335
+ }
22336
+ )
22337
+ ] })
22123
22338
  ] })
22124
22339
  ] })
22125
22340
  ] })
@@ -22148,7 +22363,7 @@ function FeatureCategoryImageCards({
22148
22363
  patternOpacity,
22149
22364
  patternClassName
22150
22365
  }) {
22151
- const renderFeatureImage = (feature) => {
22366
+ const renderFeatureImage = React52.useCallback((feature) => {
22152
22367
  if (feature.imageSlot) return feature.imageSlot;
22153
22368
  if (feature.imageSrc) {
22154
22369
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -22163,7 +22378,7 @@ function FeatureCategoryImageCards({
22163
22378
  );
22164
22379
  }
22165
22380
  return null;
22166
- };
22381
+ }, [optixFlowConfig]);
22167
22382
  const featuresContent = React52.useMemo(() => {
22168
22383
  if (featuresSlot) return featuresSlot;
22169
22384
  if (!features || features.length === 0) return null;
@@ -22174,7 +22389,7 @@ function FeatureCategoryImageCards({
22174
22389
  ] }),
22175
22390
  /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "px-7 pb-7", children: renderFeatureImage(feature) })
22176
22391
  ] }, index));
22177
- }, [featuresSlot, features, cardClassName, optixFlowConfig]);
22392
+ }, [featuresSlot, features, cardClassName, renderFeatureImage]);
22178
22393
  return /* @__PURE__ */ jsxRuntime.jsxs(
22179
22394
  Section,
22180
22395
  {
@@ -22215,12 +22430,12 @@ function FeatureBentoImageGrid({
22215
22430
  patternOpacity,
22216
22431
  patternClassName
22217
22432
  }) {
22218
- const renderItemIcon = React52.useMemo(() => (item) => {
22433
+ const renderItemIcon = React52__namespace.useCallback((item) => {
22219
22434
  if (item.icon) return item.icon;
22220
22435
  if (item.iconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: item.iconName, size: 24 });
22221
22436
  return null;
22222
22437
  }, []);
22223
- const renderItemImage = React52.useMemo(() => (item, imageClassName) => {
22438
+ const renderItemImage = React52__namespace.useCallback((item, imageClassName) => {
22224
22439
  if (item.imageSlot) return item.imageSlot;
22225
22440
  if (item.imageSrc) {
22226
22441
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -22236,13 +22451,15 @@ function FeatureBentoImageGrid({
22236
22451
  }
22237
22452
  return null;
22238
22453
  }, [optixFlowConfig]);
22239
- const renderLargeCard = React52.useMemo(() => (item) => {
22454
+ const renderLargeCard = React52__namespace.useCallback((item) => {
22455
+ const iconContent = renderItemIcon(item);
22456
+ const hasIconBadgeContent = iconContent || item.iconBadge;
22240
22457
  const cardContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22241
22458
  renderItemImage(item, "h-full max-h-[580px] w-full rounded-xl object-cover object-center"),
22242
22459
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-0 right-0 bottom-0 left-0 translate-y-20 rounded-xl bg-linear-to-t from-primary to-transparent transition-transform duration-300 group-hover:translate-y-0" }),
22243
22460
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
22244
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("ml-auto flex w-fit items-center gap-1 p-2.5 text-sm font-semibold text-background", item.iconBadgeClassName), children: [
22245
- renderItemIcon(item),
22461
+ hasIconBadgeContent && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("ml-auto flex w-fit items-center gap-1 p-2.5 text-sm font-semibold text-background", item.iconBadgeClassName), children: [
22462
+ iconContent,
22246
22463
  item.iconBadge
22247
22464
  ] }),
22248
22465
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-5 text-background", children: [
@@ -22266,7 +22483,9 @@ function FeatureBentoImageGrid({
22266
22483
  }
22267
22484
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("group relative col-span-2 row-span-3 overflow-hidden rounded-xl", largeCardClassName, item.className), children: cardContent });
22268
22485
  }, [largeCardClassName, renderItemImage, renderItemIcon]);
22269
- const renderSmallCard = React52.useMemo(() => (item, index) => {
22486
+ const renderSmallCard = React52__namespace.useCallback((item, index) => {
22487
+ const iconContent = renderItemIcon(item);
22488
+ const hasIconBadgeContent = iconContent || item.iconBadge;
22270
22489
  const cardContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22271
22490
  renderItemImage(item, cn(
22272
22491
  "h-full w-full rounded-xl object-cover object-center",
@@ -22274,8 +22493,8 @@ function FeatureBentoImageGrid({
22274
22493
  )),
22275
22494
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-0 right-0 bottom-0 left-0 translate-y-10 rounded-xl bg-linear-to-t from-primary to-transparent opacity-80 transition-transform duration-300 group-hover:translate-y-0" }),
22276
22495
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
22277
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("ml-auto flex w-fit items-center gap-1 p-2.5 text-sm font-semibold text-background", item.iconBadgeClassName), children: [
22278
- renderItemIcon(item),
22496
+ hasIconBadgeContent && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("ml-auto flex w-fit items-center gap-1 p-2.5 text-sm font-semibold text-background", item.iconBadgeClassName), children: [
22497
+ iconContent,
22279
22498
  item.iconBadge
22280
22499
  ] }),
22281
22500
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-5 text-background", children: [
@@ -22363,34 +22582,33 @@ function FeatureImageCardsThreeColumn({
22363
22582
  patternOpacity,
22364
22583
  patternClassName
22365
22584
  }) {
22585
+ const renderImage = React52.useCallback((card, imageAlt) => {
22586
+ if (card.imageSlot) return card.imageSlot;
22587
+ if (!card.imageSrc) return null;
22588
+ return /* @__PURE__ */ jsxRuntime.jsx(
22589
+ img.Img,
22590
+ {
22591
+ src: card.imageSrc,
22592
+ alt: imageAlt,
22593
+ className: "h-full max-h-[450px] w-full rounded-xl object-cover object-center",
22594
+ loading: "lazy",
22595
+ optixFlowConfig
22596
+ }
22597
+ );
22598
+ }, [optixFlowConfig]);
22599
+ const renderBadgeIcon = React52.useCallback((card) => {
22600
+ if (card.avatarSrc) {
22601
+ return /* @__PURE__ */ jsxRuntime.jsx(Avatar, { className: "size-7 rounded-full", children: /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: card.avatarSrc, alt: "Avatar" }) });
22602
+ }
22603
+ if (card.icon) return card.icon;
22604
+ if (!card.iconName) return null;
22605
+ return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: card.iconName, size: 24 });
22606
+ }, []);
22366
22607
  const cardsContent = React52.useMemo(() => {
22367
22608
  if (cardsSlot) return cardsSlot;
22368
22609
  if (!cards || cards.length === 0) return null;
22369
22610
  return cards.map((card, index) => {
22370
22611
  const imageAlt = card.imageAlt || (typeof card.title === "string" ? card.title : "Card image");
22371
- const renderImage = () => {
22372
- if (card.imageSlot) return card.imageSlot;
22373
- if (card.imageSrc) {
22374
- return /* @__PURE__ */ jsxRuntime.jsx(
22375
- img.Img,
22376
- {
22377
- src: card.imageSrc,
22378
- alt: imageAlt,
22379
- className: "h-full max-h-[450px] w-full rounded-xl object-cover object-center",
22380
- loading: "lazy",
22381
- optixFlowConfig
22382
- }
22383
- );
22384
- }
22385
- return null;
22386
- };
22387
- const renderBadgeIcon = () => {
22388
- if (card.avatarSrc) {
22389
- return /* @__PURE__ */ jsxRuntime.jsx(Avatar, { className: "size-7 rounded-full", children: /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: card.avatarSrc, alt: "Avatar" }) });
22390
- }
22391
- if (card.icon) return card.icon;
22392
- return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: card.iconName || "lucide/zap", size: 24 });
22393
- };
22394
22612
  return /* @__PURE__ */ jsxRuntime.jsxs(
22395
22613
  Pressable,
22396
22614
  {
@@ -22398,10 +22616,10 @@ function FeatureImageCardsThreeColumn({
22398
22616
  onClick: card.onClick,
22399
22617
  className: cn("group relative overflow-hidden rounded-xl", cardClassName, card.className),
22400
22618
  children: [
22401
- renderImage(),
22619
+ renderImage(card, imageAlt),
22402
22620
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-0 right-0 bottom-0 left-0 translate-y-20 rounded-xl bg-linear-to-t from-primary to-transparent transition-transform duration-300 group-hover:translate-y-0" }),
22403
22621
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
22404
- /* @__PURE__ */ jsxRuntime.jsxs(
22622
+ (card.badgeText || card.avatarSrc || card.icon || card.iconName) && /* @__PURE__ */ jsxRuntime.jsxs(
22405
22623
  "span",
22406
22624
  {
22407
22625
  className: cn(
@@ -22410,7 +22628,7 @@ function FeatureImageCardsThreeColumn({
22410
22628
  card.badgeClassName
22411
22629
  ),
22412
22630
  children: [
22413
- renderBadgeIcon(),
22631
+ renderBadgeIcon(card),
22414
22632
  card.badgeText
22415
22633
  ]
22416
22634
  }
@@ -22428,7 +22646,7 @@ function FeatureImageCardsThreeColumn({
22428
22646
  index
22429
22647
  );
22430
22648
  });
22431
- }, [cardsSlot, cards, cardClassName, optixFlowConfig]);
22649
+ }, [cardsSlot, cards, cardClassName, renderImage, renderBadgeIcon]);
22432
22650
  return /* @__PURE__ */ jsxRuntime.jsxs(
22433
22651
  Section,
22434
22652
  {
@@ -22465,11 +22683,11 @@ function FeatureIconGridMuted({
22465
22683
  patternOpacity,
22466
22684
  patternClassName
22467
22685
  }) {
22468
- const renderFeatureIcon = (feature) => {
22686
+ const renderFeatureIcon = React52.useCallback((feature) => {
22469
22687
  if (feature.icon) return feature.icon;
22470
22688
  if (feature.iconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: feature.iconName, size: 24, className: feature.iconClassName });
22471
22689
  return null;
22472
- };
22690
+ }, []);
22473
22691
  const featuresContent = React52.useMemo(() => {
22474
22692
  if (featuresSlot) return featuresSlot;
22475
22693
  if (!features || features.length === 0) return null;
@@ -22478,14 +22696,14 @@ function FeatureIconGridMuted({
22478
22696
  {
22479
22697
  className: cn("flex flex-col gap-2.5 rounded-xl border bg-background p-7", cardClassName, feature.className),
22480
22698
  children: [
22481
- renderFeatureIcon(feature),
22699
+ (feature.icon || feature.iconName) && renderFeatureIcon(feature),
22482
22700
  feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("font-semibold", feature.titleClassName), children: feature.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("font-semibold", feature.titleClassName), children: feature.title })),
22483
22701
  feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm text-muted-foreground", feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm text-muted-foreground", feature.descriptionClassName), children: feature.description }))
22484
22702
  ]
22485
22703
  },
22486
22704
  index
22487
22705
  ));
22488
- }, [featuresSlot, features, cardClassName]);
22706
+ }, [featuresSlot, features, cardClassName, renderFeatureIcon]);
22489
22707
  return /* @__PURE__ */ jsxRuntime.jsx(
22490
22708
  Section,
22491
22709
  {
@@ -22497,11 +22715,11 @@ function FeatureIconGridMuted({
22497
22715
  className: cn("bg-muted/60", className),
22498
22716
  containerClassName,
22499
22717
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-10", children: [
22500
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto flex max-w-xl flex-col gap-2.5 text-center", headerClassName), children: [
22718
+ (title || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto flex max-w-xl flex-col gap-2.5 text-center", headerClassName), children: [
22501
22719
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl font-semibold md:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-4xl font-semibold md:text-5xl", titleClassName), children: title })),
22502
22720
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-muted-foreground", descriptionClassName), children: description }))
22503
22721
  ] }),
22504
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mx-auto grid max-w-7xl gap-7 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5", gridClassName), children: featuresContent })
22722
+ (featuresSlot || features && features.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mx-auto grid max-w-7xl gap-7 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5", gridClassName), children: featuresContent })
22505
22723
  ] })
22506
22724
  }
22507
22725
  );
@@ -22534,37 +22752,25 @@ function FeatureStatsHighlight({
22534
22752
  if (actionsSlot) return actionsSlot;
22535
22753
  if (!actions || actions.length === 0) return null;
22536
22754
  return actions.map((action, index) => {
22537
- if (action.children) {
22538
- return /* @__PURE__ */ jsxRuntime.jsx(
22539
- Pressable,
22540
- {
22541
- href: action.href,
22542
- onClick: action.onClick,
22543
- variant: action.variant,
22544
- size: action.size,
22545
- className: cn("mt-4 w-fit gap-2", action.className),
22546
- "aria-label": action["aria-label"],
22547
- asButton: true,
22548
- children: action.children
22549
- },
22550
- index
22551
- );
22552
- }
22553
- return /* @__PURE__ */ jsxRuntime.jsxs(
22755
+ const {
22756
+ label,
22757
+ icon,
22758
+ iconAfter,
22759
+ children,
22760
+ className: actionClassName,
22761
+ ...pressableProps
22762
+ } = action;
22763
+ return /* @__PURE__ */ jsxRuntime.jsx(
22554
22764
  Pressable,
22555
22765
  {
22556
- href: action.href,
22557
- onClick: action.onClick,
22558
- variant: action.variant,
22559
- size: action.size,
22560
- className: cn("mt-4 w-fit gap-2", action.className),
22561
- "aria-label": action["aria-label"],
22766
+ className: cn("mt-4 w-fit gap-2", actionClassName),
22562
22767
  asButton: true,
22563
- children: [
22564
- action.icon,
22565
- action.label,
22566
- action.iconAfter
22567
- ]
22768
+ ...pressableProps,
22769
+ children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22770
+ icon,
22771
+ label,
22772
+ iconAfter
22773
+ ] })
22568
22774
  },
22569
22775
  index
22570
22776
  );
@@ -22578,8 +22784,8 @@ function FeatureStatsHighlight({
22578
22784
  {
22579
22785
  className: cn("flex flex-col gap-2 rounded-xl border bg-muted/30 p-6", statCardClassName, stat.className),
22580
22786
  children: [
22581
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-4xl font-bold text-primary lg:text-5xl", stat.valueClassName), children: stat.value }),
22582
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-muted-foreground", stat.labelClassName), children: stat.label })
22787
+ stat.value && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-4xl font-bold text-primary lg:text-5xl", stat.valueClassName), children: stat.value }),
22788
+ stat.label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-muted-foreground", stat.labelClassName), children: stat.label })
22583
22789
  ]
22584
22790
  },
22585
22791
  index
@@ -22600,9 +22806,9 @@ function FeatureStatsHighlight({
22600
22806
  badge && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "outline", className: cn("w-fit", badgeClassName), children: badge }),
22601
22807
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-3xl font-semibold lg:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-3xl font-semibold lg:text-5xl", titleClassName), children: title })),
22602
22808
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-muted-foreground lg:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-muted-foreground lg:text-lg", descriptionClassName), children: description })),
22603
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: actionsClassName, children: actionsContent })
22809
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: actionsClassName, children: actionsContent })
22604
22810
  ] }),
22605
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("grid grid-cols-2 gap-6", statsGridClassName), children: statsContent })
22811
+ (statsSlot || stats && stats.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("grid grid-cols-2 gap-6", statsGridClassName), children: statsContent })
22606
22812
  ] })
22607
22813
  }
22608
22814
  );
@@ -22666,7 +22872,7 @@ function FeatureAccordionImage({
22666
22872
  description,
22667
22873
  items,
22668
22874
  itemsSlot,
22669
- defaultValue = "item-0",
22875
+ defaultValue,
22670
22876
  className,
22671
22877
  containerClassName,
22672
22878
  headerClassName,
@@ -22683,24 +22889,25 @@ function FeatureAccordionImage({
22683
22889
  patternOpacity,
22684
22890
  patternClassName
22685
22891
  }) {
22686
- const [activeItem, setActiveItem] = React52__namespace.useState(defaultValue);
22892
+ const [activeItem, setActiveItem] = React52__namespace.useState(defaultValue || "item-0");
22687
22893
  const activeIndex = parseInt(activeItem.replace("item-", ""), 10) || 0;
22688
22894
  const currentImage = items?.[activeIndex] || items?.[0];
22689
22895
  const accordionItemsContent = React52.useMemo(() => {
22690
22896
  if (itemsSlot) return itemsSlot;
22691
22897
  if (!items || items.length === 0) return null;
22692
22898
  return items.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs(AccordionItem, { value: `item-${index}`, className: item.className, children: [
22693
- /* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { className: cn("text-left text-lg font-medium", item.triggerClassName), children: item.title }),
22694
- /* @__PURE__ */ jsxRuntime.jsx(AccordionContent, { className: cn("text-muted-foreground", item.contentClassName), children: item.content })
22899
+ item.title && /* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { className: cn("text-left text-lg font-medium", item.triggerClassName), children: item.title }),
22900
+ item.content && /* @__PURE__ */ jsxRuntime.jsx(AccordionContent, { className: cn("text-muted-foreground", item.contentClassName), children: item.content })
22695
22901
  ] }, index));
22696
22902
  }, [itemsSlot, items]);
22697
22903
  const imageContent = React52.useMemo(() => {
22698
22904
  if (currentImage?.imageSlot) return currentImage.imageSlot;
22905
+ if (!currentImage?.imageSrc) return null;
22699
22906
  return /* @__PURE__ */ jsxRuntime.jsx(
22700
22907
  img.Img,
22701
22908
  {
22702
- src: currentImage?.imageSrc || "",
22703
- alt: currentImage?.imageAlt || "",
22909
+ src: currentImage.imageSrc,
22910
+ alt: currentImage.imageAlt || "",
22704
22911
  className: cn("h-full w-full object-cover transition-opacity duration-300", imageClassName),
22705
22912
  loading: "lazy",
22706
22913
  optixFlowConfig
@@ -22718,11 +22925,11 @@ function FeatureAccordionImage({
22718
22925
  className,
22719
22926
  containerClassName,
22720
22927
  children: [
22721
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-12 text-center", headerClassName), children: [
22928
+ (title || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-12 text-center", headerClassName), children: [
22722
22929
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-3xl font-semibold md:text-4xl lg:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-3xl font-semibold md:text-4xl lg:text-5xl", titleClassName), children: title })),
22723
22930
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-4 text-muted-foreground lg:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-4 text-muted-foreground lg:text-lg", descriptionClassName), children: description }))
22724
22931
  ] }),
22725
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid gap-10 lg:grid-cols-2 lg:gap-16", gridClassName), children: [
22932
+ (itemsSlot || items && items.length > 0) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid gap-10 lg:grid-cols-2 lg:gap-16", gridClassName), children: [
22726
22933
  /* @__PURE__ */ jsxRuntime.jsx(
22727
22934
  Accordion,
22728
22935
  {
@@ -22757,49 +22964,52 @@ function FeatureCapabilitiesGrid({
22757
22964
  patternOpacity,
22758
22965
  patternClassName
22759
22966
  }) {
22760
- const renderItemIcon = (item) => {
22967
+ const renderItemIcon = React52__namespace.useCallback((item) => {
22761
22968
  if (item.icon) return item.icon;
22762
22969
  if (item.iconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: item.iconName, size: 20 });
22763
- return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/star", size: 20 });
22764
- };
22970
+ return null;
22971
+ }, []);
22765
22972
  const itemsContent = React52.useMemo(() => {
22766
22973
  if (itemsSlot) return itemsSlot;
22767
22974
  if (!items || items.length === 0) return null;
22768
- return items.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs(
22769
- Card,
22770
- {
22771
- className: cn("group relative overflow-visible border-white/10 bg-white/5 p-0 transition-colors duration-300 hover:border-white/20", cardClassName, item.className),
22772
- children: [
22773
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-300 group-hover:opacity-100", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -inset-px rounded-xl bg-linear-to-br from-white/10 via-white/5 to-transparent" }) }),
22774
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-0 rounded-xl bg-linear-to-tr from-white/0 to-white/0 transition-colors group-hover:from-white/3 group-hover:to-white/6" }),
22775
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pointer-events-none absolute inset-0 hidden group-hover:block", children: [
22776
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -left-2 -top-2 h-3 w-3 bg-white" }),
22777
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -right-2 -top-2 h-3 w-3 bg-white" }),
22778
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -left-2 -bottom-2 h-3 w-3 bg-white" }),
22779
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -right-2 -bottom-2 h-3 w-3 bg-white" })
22780
- ] }),
22781
- /* @__PURE__ */ jsxRuntime.jsxs(CardHeader, { className: "relative z-10 flex flex-row items-start gap-3 p-6", children: [
22782
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex h-10 w-10 items-center justify-center rounded-xl border border-white/15 bg-white/5 text-white", item.iconClassName), children: renderItemIcon(item) }),
22783
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
22784
- item.title && (typeof item.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(CardTitle, { className: cn("text-lg font-medium text-white", item.titleClassName), children: item.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-lg font-medium text-white", item.titleClassName), children: item.title })),
22785
- item.badge && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full border border-white/20 px-2 py-0.5 text-[10px] leading-none text-white/70", item.badgeClassName), children: item.badge })
22786
- ] }) })
22787
- ] }),
22788
- /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: cn("relative z-10 px-6 pb-6 text-sm text-white/70", item.descriptionClassName), children: item.description }),
22789
- /* @__PURE__ */ jsxRuntime.jsx(
22790
- framerMotion.motion.div,
22791
- {
22792
- className: "pointer-events-none absolute inset-0 rounded-xl ring-0 ring-white/0",
22793
- initial: { opacity: 0 },
22794
- whileHover: { opacity: 1 },
22795
- transition: { duration: 0.25 }
22796
- }
22797
- )
22798
- ]
22799
- },
22800
- `${typeof item.title === "string" ? item.title : "item"}-${index}`
22801
- ));
22802
- }, [itemsSlot, items, cardClassName]);
22975
+ return items.map((item, index) => {
22976
+ const iconContent = renderItemIcon(item);
22977
+ return /* @__PURE__ */ jsxRuntime.jsxs(
22978
+ Card,
22979
+ {
22980
+ className: cn("group relative overflow-visible border-white/10 bg-white/5 p-0 transition-colors duration-300 hover:border-white/20", cardClassName, item.className),
22981
+ children: [
22982
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-300 group-hover:opacity-100", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -inset-px rounded-xl bg-linear-to-br from-white/10 via-white/5 to-transparent" }) }),
22983
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-0 rounded-xl bg-linear-to-tr from-white/0 to-white/0 transition-colors group-hover:from-white/3 group-hover:to-white/6" }),
22984
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pointer-events-none absolute inset-0 hidden group-hover:block", children: [
22985
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -left-2 -top-2 h-3 w-3 bg-white" }),
22986
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -right-2 -top-2 h-3 w-3 bg-white" }),
22987
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -left-2 -bottom-2 h-3 w-3 bg-white" }),
22988
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -right-2 -bottom-2 h-3 w-3 bg-white" })
22989
+ ] }),
22990
+ /* @__PURE__ */ jsxRuntime.jsxs(CardHeader, { className: "relative z-10 flex flex-row items-start gap-3 p-6", children: [
22991
+ iconContent && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex h-10 w-10 items-center justify-center rounded-xl border border-white/15 bg-white/5 text-white", item.iconClassName), children: iconContent }),
22992
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
22993
+ item.title && (typeof item.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(CardTitle, { className: cn("text-lg font-medium text-white", item.titleClassName), children: item.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-lg font-medium text-white", item.titleClassName), children: item.title })),
22994
+ item.badge && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full border border-white/20 px-2 py-0.5 text-[10px] leading-none text-white/70", item.badgeClassName), children: item.badge })
22995
+ ] }) })
22996
+ ] }),
22997
+ item.description && /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: cn("relative z-10 px-6 pb-6 text-sm text-white/70", item.descriptionClassName), children: item.description }),
22998
+ /* @__PURE__ */ jsxRuntime.jsx(
22999
+ framerMotion.motion.div,
23000
+ {
23001
+ className: "pointer-events-none absolute inset-0 rounded-xl ring-0 ring-white/0",
23002
+ initial: { opacity: 0 },
23003
+ whileHover: { opacity: 1 },
23004
+ transition: { duration: 0.25 }
23005
+ }
23006
+ )
23007
+ ]
23008
+ },
23009
+ `${typeof item.title === "string" ? item.title : "item"}-${index}`
23010
+ );
23011
+ });
23012
+ }, [itemsSlot, items, cardClassName, renderItemIcon]);
22803
23013
  return /* @__PURE__ */ jsxRuntime.jsxs(
22804
23014
  Section,
22805
23015
  {
@@ -39411,7 +39621,7 @@ function CommunityInitiatives({
39411
39621
  }
39412
39622
  );
39413
39623
  }
39414
- var Controls = ({
39624
+ var Controls = React52__namespace.memo(({
39415
39625
  handleNext,
39416
39626
  handlePrevious,
39417
39627
  isPreviousDisabled,
@@ -39439,9 +39649,9 @@ var Controls = ({
39439
39649
  }
39440
39650
  )
39441
39651
  ] });
39442
- };
39443
- var FeatureCard = ({ feature, isActive, onClick }) => {
39444
- const variants2 = {
39652
+ });
39653
+ var FeatureCard = React52__namespace.memo(({ feature, isActive, onClick }) => {
39654
+ const variants2 = React52.useMemo(() => ({
39445
39655
  initial: {
39446
39656
  opacity: 0
39447
39657
  },
@@ -39451,7 +39661,7 @@ var FeatureCard = ({ feature, isActive, onClick }) => {
39451
39661
  exit: {
39452
39662
  opacity: 0
39453
39663
  }
39454
- };
39664
+ }), []);
39455
39665
  return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "popLayout", children: /* @__PURE__ */ jsxRuntime.jsx(
39456
39666
  framerMotion.motion.div,
39457
39667
  {
@@ -39481,13 +39691,13 @@ var FeatureCard = ({ feature, isActive, onClick }) => {
39481
39691
  ease: "easeOut"
39482
39692
  },
39483
39693
  className: "p-6 text-sm md:p-8 md:text-base",
39484
- children: /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
39485
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-semibold", children: [
39694
+ children: (feature.title || feature.description) && /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
39695
+ feature.title && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-semibold", children: [
39486
39696
  feature.title,
39487
39697
  "."
39488
39698
  ] }),
39489
- " ",
39490
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: feature.description })
39699
+ feature.title && feature.description && " ",
39700
+ feature.description && /* @__PURE__ */ jsxRuntime.jsx("span", { children: feature.description })
39491
39701
  ] })
39492
39702
  },
39493
39703
  `feature-description-active-${feature.title}`
@@ -39521,15 +39731,15 @@ var FeatureCard = ({ feature, isActive, onClick }) => {
39521
39731
  className: "shrink-0"
39522
39732
  }
39523
39733
  ),
39524
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "shrink-0 font-semibold", children: feature.title })
39734
+ feature.title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "shrink-0 font-semibold", children: feature.title })
39525
39735
  ]
39526
39736
  },
39527
39737
  `feature-description-inactive-${feature.title}`
39528
39738
  )
39529
39739
  }
39530
39740
  ) });
39531
- };
39532
- var FeaturesDesktop = ({
39741
+ });
39742
+ var FeaturesDesktop = React52__namespace.memo(({
39533
39743
  features,
39534
39744
  handleNext,
39535
39745
  handlePrevious,
@@ -39560,8 +39770,8 @@ var FeaturesDesktop = ({
39560
39770
  );
39561
39771
  }) })
39562
39772
  ] });
39563
- };
39564
- var FeaturesMobile = ({
39773
+ });
39774
+ var FeaturesMobile = React52__namespace.memo(({
39565
39775
  features,
39566
39776
  handleNext,
39567
39777
  handlePrevious,
@@ -39570,7 +39780,7 @@ var FeaturesMobile = ({
39570
39780
  isPreviousDisabled,
39571
39781
  isNextDisabled
39572
39782
  }) => {
39573
- const variants2 = {
39783
+ const variants2 = React52.useMemo(() => ({
39574
39784
  enter: (direction2) => ({
39575
39785
  x: direction2 > 0 ? 100 : -100,
39576
39786
  opacity: 0
@@ -39583,7 +39793,8 @@ var FeaturesMobile = ({
39583
39793
  x: direction2 < 0 ? 100 : -100,
39584
39794
  opacity: 0
39585
39795
  })
39586
- };
39796
+ }), []);
39797
+ const currentFeature = features[activeIndex];
39587
39798
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-10 flex flex-col items-center gap-6 md:hidden", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full items-center justify-between gap-4", children: [
39588
39799
  /* @__PURE__ */ jsxRuntime.jsx(
39589
39800
  "button",
@@ -39608,13 +39819,13 @@ var FeaturesMobile = ({
39608
39819
  opacity: { duration: 0.2 }
39609
39820
  },
39610
39821
  className: "absolute inset-0 flex items-center justify-center rounded-3xl bg-background p-4",
39611
- children: /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-center text-sm", children: [
39612
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-semibold", children: [
39613
- features[activeIndex].title,
39822
+ children: (currentFeature?.title || currentFeature?.description) && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-center text-sm", children: [
39823
+ currentFeature.title && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-semibold", children: [
39824
+ currentFeature.title,
39614
39825
  "."
39615
39826
  ] }),
39616
- " ",
39617
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: features[activeIndex].description })
39827
+ currentFeature.title && currentFeature.description && " ",
39828
+ currentFeature.description && /* @__PURE__ */ jsxRuntime.jsx("span", { children: currentFeature.description })
39618
39829
  ] })
39619
39830
  },
39620
39831
  activeIndex
@@ -39630,9 +39841,9 @@ var FeaturesMobile = ({
39630
39841
  }
39631
39842
  )
39632
39843
  ] }) });
39633
- };
39844
+ });
39634
39845
  function FeatureAnimatedCarousel({
39635
- features = [],
39846
+ features,
39636
39847
  className,
39637
39848
  optixFlowConfig,
39638
39849
  background,
@@ -39643,25 +39854,25 @@ function FeatureAnimatedCarousel({
39643
39854
  }) {
39644
39855
  const [activeIndex, setActiveIndex] = React52__namespace.useState(0);
39645
39856
  const [direction, setDirection] = React52__namespace.useState(1);
39646
- const handleNext = () => {
39647
- if (activeIndex < features.length - 1) {
39857
+ const handleNext = React52.useCallback(() => {
39858
+ if (features && activeIndex < features.length - 1) {
39648
39859
  setDirection(1);
39649
39860
  setActiveIndex(activeIndex + 1);
39650
39861
  }
39651
- };
39652
- const handlePrevious = () => {
39862
+ }, [activeIndex, features]);
39863
+ const handlePrevious = React52.useCallback(() => {
39653
39864
  if (activeIndex > 0) {
39654
39865
  setDirection(-1);
39655
39866
  setActiveIndex(activeIndex - 1);
39656
39867
  }
39657
- };
39658
- const handleFeatureClick = (index) => {
39868
+ }, [activeIndex]);
39869
+ const handleFeatureClick = React52.useCallback((index) => {
39659
39870
  setDirection(index > activeIndex ? 1 : -1);
39660
39871
  setActiveIndex(index);
39661
- };
39872
+ }, [activeIndex]);
39662
39873
  const isPreviousDisabled = activeIndex === 0;
39663
- const isNextDisabled = activeIndex === features.length - 1;
39664
- const imageVariants = {
39874
+ const isNextDisabled = !features || activeIndex === features.length - 1;
39875
+ const imageVariants = React52.useMemo(() => ({
39665
39876
  enter: (direction2) => ({
39666
39877
  x: direction2 > 0 ? 300 : -300,
39667
39878
  opacity: 0
@@ -39674,7 +39885,22 @@ function FeatureAnimatedCarousel({
39674
39885
  x: direction2 < 0 ? 300 : -300,
39675
39886
  opacity: 0
39676
39887
  })
39677
- };
39888
+ }), []);
39889
+ if (!features || features.length === 0) {
39890
+ return /* @__PURE__ */ jsxRuntime.jsx(
39891
+ Section,
39892
+ {
39893
+ background,
39894
+ spacing,
39895
+ pattern,
39896
+ patternOpacity,
39897
+ patternClassName,
39898
+ className,
39899
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex min-h-[500px] flex-col-reverse gap-8 overflow-hidden rounded-3xl bg-muted p-6 md:flex-row md:items-center md:p-12 lg:min-h-[600px]" })
39900
+ }
39901
+ );
39902
+ }
39903
+ const currentFeature = features[activeIndex];
39678
39904
  return /* @__PURE__ */ jsxRuntime.jsx(
39679
39905
  Section,
39680
39906
  {
@@ -39685,7 +39911,7 @@ function FeatureAnimatedCarousel({
39685
39911
  patternClassName,
39686
39912
  className,
39687
39913
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex min-h-[500px] flex-col-reverse gap-8 overflow-hidden rounded-3xl bg-muted p-6 md:flex-row md:items-center md:p-12 lg:min-h-[600px]", children: [
39688
- features && /* @__PURE__ */ jsxRuntime.jsx(
39914
+ /* @__PURE__ */ jsxRuntime.jsx(
39689
39915
  FeaturesDesktop,
39690
39916
  {
39691
39917
  features,
@@ -39697,7 +39923,7 @@ function FeatureAnimatedCarousel({
39697
39923
  isNextDisabled
39698
39924
  }
39699
39925
  ),
39700
- features && /* @__PURE__ */ jsxRuntime.jsx(
39926
+ /* @__PURE__ */ jsxRuntime.jsx(
39701
39927
  FeaturesMobile,
39702
39928
  {
39703
39929
  features,
@@ -39709,7 +39935,7 @@ function FeatureAnimatedCarousel({
39709
39935
  isNextDisabled
39710
39936
  }
39711
39937
  ),
39712
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex-1 overflow-hidden rounded-2xl md:absolute md:right-8 md:top-8 md:bottom-8 md:w-1/2", children: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", custom: direction, children: /* @__PURE__ */ jsxRuntime.jsx(
39938
+ currentFeature?.image && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex-1 overflow-hidden rounded-2xl md:absolute md:right-8 md:top-8 md:bottom-8 md:w-1/2", children: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", custom: direction, children: /* @__PURE__ */ jsxRuntime.jsx(
39713
39939
  framerMotion.motion.div,
39714
39940
  {
39715
39941
  custom: direction,
@@ -39725,8 +39951,8 @@ function FeatureAnimatedCarousel({
39725
39951
  children: /* @__PURE__ */ jsxRuntime.jsx(
39726
39952
  img.Img,
39727
39953
  {
39728
- src: features ? features[activeIndex].image : void 0,
39729
- alt: features ? features[activeIndex].imageAlt || (typeof features[activeIndex].title === "string" ? features[activeIndex].title : "Feature image") : void 0,
39954
+ src: currentFeature.image,
39955
+ alt: currentFeature.imageAlt || (typeof currentFeature.title === "string" ? currentFeature.title : "Feature image"),
39730
39956
  className: "h-full w-full object-cover",
39731
39957
  optixFlowConfig
39732
39958
  }
@@ -62340,22 +62566,29 @@ var NavbarTabbedSections = ({
62340
62566
  ]
62341
62567
  }
62342
62568
  ) }),
62343
- /* @__PURE__ */ jsxRuntime.jsxs(SheetContent, { side: "right", className: "w-[300px] overflow-y-auto", children: [
62344
- /* @__PURE__ */ jsxRuntime.jsx(SheetTitle, { className: "sr-only", children: "Navigation Menu" }),
62345
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 pt-8", children: [
62346
- renderMobileMenu,
62347
- /* @__PURE__ */ jsxRuntime.jsx(
62348
- "div",
62349
- {
62350
- className: cn(
62351
- "mt-4 flex flex-col gap-2 border-t pt-4",
62352
- actionsClassName
62353
- ),
62354
- children: renderAuthActions
62355
- }
62356
- )
62357
- ] })
62358
- ] })
62569
+ /* @__PURE__ */ jsxRuntime.jsxs(
62570
+ SheetContent,
62571
+ {
62572
+ side: "right",
62573
+ className: "w-[300px] overflow-y-auto",
62574
+ children: [
62575
+ /* @__PURE__ */ jsxRuntime.jsx(SheetTitle, { className: "sr-only", children: "Navigation Menu" }),
62576
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 pt-8", children: [
62577
+ renderMobileMenu,
62578
+ /* @__PURE__ */ jsxRuntime.jsx(
62579
+ "div",
62580
+ {
62581
+ className: cn(
62582
+ "mt-4 flex flex-col gap-2 border-t pt-4",
62583
+ actionsClassName
62584
+ ),
62585
+ children: renderAuthActions
62586
+ }
62587
+ )
62588
+ ] })
62589
+ ]
62590
+ }
62591
+ )
62359
62592
  ] })
62360
62593
  ]
62361
62594
  }
@@ -77314,7 +77547,7 @@ function ListSearchableGrid({
77314
77547
  }
77315
77548
  );
77316
77549
  }
77317
- var { useMemo: useMemo441 } = React52__namespace;
77550
+ var { useMemo: useMemo443 } = React52__namespace;
77318
77551
  function OfferModalNewsletterDiscount({
77319
77552
  title,
77320
77553
  emailPlaceholder,
@@ -77381,7 +77614,7 @@ function OfferModalNewsletterDiscount({
77381
77614
  });
77382
77615
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
77383
77616
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
77384
- const renderCloseButton = useMemo441(() => {
77617
+ const renderCloseButton = useMemo443(() => {
77385
77618
  if (closeButtonSlot) return closeButtonSlot;
77386
77619
  if (!closeButtonText) return null;
77387
77620
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute end-1.5 top-1.5", children: /* @__PURE__ */ jsxRuntime.jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -77395,12 +77628,12 @@ function OfferModalNewsletterDiscount({
77395
77628
  }
77396
77629
  ) }) });
77397
77630
  }, [closeButtonSlot, closeButtonText, closeClassName]);
77398
- const renderHeader = useMemo441(() => {
77631
+ const renderHeader = useMemo443(() => {
77399
77632
  if (headerSlot) return headerSlot;
77400
77633
  if (!title) return null;
77401
77634
  return /* @__PURE__ */ jsxRuntime.jsx(DialogHeader, { className: headerClassName, children: typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { className: cn("text-start font-serif text-2xl font-normal leading-snug", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { className: cn("text-start font-serif text-2xl font-normal leading-snug", titleClassName), children: title }) });
77402
77635
  }, [headerSlot, title, headerClassName, titleClassName]);
77403
- const renderForm = useMemo441(() => {
77636
+ const renderForm = useMemo443(() => {
77404
77637
  if (formSlot) return formSlot;
77405
77638
  return /* @__PURE__ */ jsxRuntime.jsxs(
77406
77639
  forms.Form,
@@ -77462,7 +77695,7 @@ function OfferModalNewsletterDiscount({
77462
77695
  }
77463
77696
  ) });
77464
77697
  }
77465
- var { useMemo: useMemo442 } = React52__namespace;
77698
+ var { useMemo: useMemo444 } = React52__namespace;
77466
77699
  function OfferModalMembershipImage({
77467
77700
  overline,
77468
77701
  title,
@@ -77538,7 +77771,7 @@ function OfferModalMembershipImage({
77538
77771
  });
77539
77772
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
77540
77773
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
77541
- const renderImage = useMemo442(() => {
77774
+ const renderImage = useMemo444(() => {
77542
77775
  if (imageSlot) return imageSlot;
77543
77776
  if (!image) return null;
77544
77777
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("max-h-[290px] h-full overflow-hidden max-lg:hidden", imageWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -77551,7 +77784,7 @@ function OfferModalMembershipImage({
77551
77784
  }
77552
77785
  ) });
77553
77786
  }, [imageSlot, image, imageWrapperClassName, imageClassName, optixFlowConfig]);
77554
- const renderCloseButton = useMemo442(() => {
77787
+ const renderCloseButton = useMemo444(() => {
77555
77788
  if (closeButtonSlot) return closeButtonSlot;
77556
77789
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -end-px -top-px z-10", children: /* @__PURE__ */ jsxRuntime.jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
77557
77790
  Pressable,
@@ -77567,7 +77800,7 @@ function OfferModalMembershipImage({
77567
77800
  }
77568
77801
  ) }) });
77569
77802
  }, [closeButtonSlot, closeClassName]);
77570
- const renderForm = useMemo442(() => {
77803
+ const renderForm = useMemo444(() => {
77571
77804
  if (formSlot) return formSlot;
77572
77805
  return /* @__PURE__ */ jsxRuntime.jsxs(
77573
77806
  forms.Form,
@@ -77630,7 +77863,7 @@ function OfferModalMembershipImage({
77630
77863
  }
77631
77864
  );
77632
77865
  }, [formSlot, form, formConfig, formMethod, emailPlaceholder, inputClassName, submitClassName, buttonText, formClassName]);
77633
- const renderFooter = useMemo442(() => {
77866
+ const renderFooter = useMemo444(() => {
77634
77867
  if (footerSlot) return footerSlot;
77635
77868
  if (!description) return null;
77636
77869
  return /* @__PURE__ */ jsxRuntime.jsx(DialogFooter, { className: footerClassName, children: /* @__PURE__ */ jsxRuntime.jsx(DialogDescription, { className: cn("text-muted-foreground text-center text-xs leading-relaxed", descriptionClassName), children: description }) });
@@ -77658,7 +77891,7 @@ function OfferModalMembershipImage({
77658
77891
  }
77659
77892
  ) });
77660
77893
  }
77661
- var { useMemo: useMemo443 } = React52__namespace;
77894
+ var { useMemo: useMemo445 } = React52__namespace;
77662
77895
  function OfferModalSheetNewsletter({
77663
77896
  logo,
77664
77897
  logoSlot,
@@ -77740,7 +77973,7 @@ function OfferModalSheetNewsletter({
77740
77973
  });
77741
77974
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
77742
77975
  const sheetProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
77743
- const renderLogo = useMemo443(() => {
77976
+ const renderLogo = useMemo445(() => {
77744
77977
  if (logoSlot) return logoSlot;
77745
77978
  if (!logo) return null;
77746
77979
  const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
@@ -77754,7 +77987,7 @@ function OfferModalSheetNewsletter({
77754
77987
  }
77755
77988
  );
77756
77989
  }, [logoSlot, logo, logoClassName, optixFlowConfig]);
77757
- const renderHeader = useMemo443(() => {
77990
+ const renderHeader = useMemo445(() => {
77758
77991
  if (headerSlot) return headerSlot;
77759
77992
  return /* @__PURE__ */ jsxRuntime.jsxs(SheetHeader, { className: cn("gap-8 p-0", headerClassName), children: [
77760
77993
  renderLogo,
@@ -77764,7 +77997,7 @@ function OfferModalSheetNewsletter({
77764
77997
  ] })
77765
77998
  ] });
77766
77999
  }, [headerSlot, renderLogo, headerClassName, title, titleClassName, description, descriptionClassName]);
77767
- const renderForm = useMemo443(() => {
78000
+ const renderForm = useMemo445(() => {
77768
78001
  if (formSlot) return formSlot;
77769
78002
  return /* @__PURE__ */ jsxRuntime.jsx(
77770
78003
  forms.Form,
@@ -77812,7 +78045,7 @@ function OfferModalSheetNewsletter({
77812
78045
  }
77813
78046
  );
77814
78047
  }, [formSlot, form, formConfig, formMethod, emailPlaceholder, inputClassName, submitClassName, buttonText, formClassName]);
77815
- const renderLegal = useMemo443(() => {
78048
+ const renderLegal = useMemo445(() => {
77816
78049
  if (legalSlot) return legalSlot;
77817
78050
  if (!termsUrl || !termsText || !privacyUrl || !privacyText) return null;
77818
78051
  return /* @__PURE__ */ jsxRuntime.jsxs("p", { className: cn("text-muted-foreground text-xs", legalClassName), children: [
@@ -77826,7 +78059,7 @@ function OfferModalSheetNewsletter({
77826
78059
  "."
77827
78060
  ] });
77828
78061
  }, [legalSlot, termsUrl, termsText, privacyUrl, privacyText, legalClassName]);
77829
- const renderImage = useMemo443(() => {
78062
+ const renderImage = useMemo445(() => {
77830
78063
  if (imageSlot) return imageSlot;
77831
78064
  if (!image) return null;
77832
78065
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("h-1/2 basis-1/2", imageWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 1, className: "overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(