@opensite/ui 0.8.1 → 0.8.3

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 +119 -177
  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 +119 -177
  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 +964 -714
  82. package/dist/registry.js +966 -716
  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,57 @@ 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-none md:mx-auto w-screen md:w-full max-w-screen md:max-w-7xl relative z-10 rounded-none md:rounded-2xl overflow-hidden shadow-none md: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 = "py-0 md:py-32",
18801
18802
  pattern,
18802
18803
  patternOpacity
18803
18804
  }) {
18804
18805
  const [currentImageIndex, setCurrentImageIndex] = React52__namespace.useState(0);
18805
- React52__namespace.useEffect(() => {
18806
- const interval = setInterval(() => {
18807
- setCurrentImageIndex((prevIndex) => (prevIndex + 1) % (images?.length ?? 1));
18808
- }, autoPlayInterval);
18809
- return () => clearInterval(interval);
18810
- }, [images?.length, autoPlayInterval]);
18811
- const goToNextImage = () => {
18806
+ const intervalRef = React52__namespace.useRef(null);
18807
+ const goToNext = React52__namespace.useCallback(() => {
18812
18808
  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
- };
18809
+ }, [images?.length]);
18810
+ const resetInterval = React52__namespace.useCallback(() => {
18811
+ if (intervalRef.current) {
18812
+ clearInterval(intervalRef.current);
18813
+ }
18814
+ intervalRef.current = setInterval(goToNext, autoPlayInterval);
18815
+ }, [goToNext, autoPlayInterval]);
18816
+ const goToSlide = React52__namespace.useCallback((index) => {
18817
+ setCurrentImageIndex(index);
18818
+ resetInterval();
18819
+ }, [resetInterval]);
18820
+ React52__namespace.useEffect(() => {
18821
+ resetInterval();
18822
+ return () => {
18823
+ if (intervalRef.current) {
18824
+ clearInterval(intervalRef.current);
18825
+ }
18826
+ };
18827
+ }, [resetInterval]);
18819
18828
  const renderActions = () => {
18820
18829
  if (actionsSlot) return actionsSlot;
18821
18830
  if (!actions || actions.length === 0) return null;
18822
18831
  return actions.map((action, index) => {
18823
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
18832
+ const {
18833
+ label,
18834
+ icon,
18835
+ iconAfter,
18836
+ children,
18837
+ className: actionClassName,
18838
+ ...pressableProps
18839
+ } = action;
18824
18840
  return /* @__PURE__ */ jsxRuntime.jsx(
18825
18841
  Pressable,
18826
18842
  {
@@ -18842,11 +18858,15 @@ function CarouselImageHero({
18842
18858
  {
18843
18859
  background,
18844
18860
  spacing,
18845
- className: cn("relative min-h-[600px] overflow-hidden", className),
18861
+ className: cn(
18862
+ "relative min-h-screen md:min-h-[600px] overflow-hidden",
18863
+ className
18864
+ ),
18846
18865
  pattern,
18847
18866
  patternOpacity,
18867
+ containerClassName,
18848
18868
  children: [
18849
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("absolute inset-0", imageClassName), children: [
18869
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("absolute inset-0 bg-black", imageClassName), children: [
18850
18870
  images?.map((image, index) => /* @__PURE__ */ jsxRuntime.jsxs(
18851
18871
  "div",
18852
18872
  {
@@ -18870,50 +18890,79 @@ function CarouselImageHero({
18870
18890
  index
18871
18891
  )),
18872
18892
  /* @__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",
18893
+ "div",
18898
18894
  {
18899
- onClick: () => setCurrentImageIndex(index),
18900
18895
  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"
18896
+ "absolute bottom-6 left-1/2 z-10 flex -translate-x-1/2 gap-3",
18897
+ indicatorsClassName
18903
18898
  ),
18904
- "aria-label": `Go to image ${index + 1}`
18905
- },
18906
- index
18907
- )) })
18899
+ children: images?.map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
18900
+ "button",
18901
+ {
18902
+ onClick: () => goToSlide(index),
18903
+ className: cn(
18904
+ "flex h-4 w-4 items-center justify-center rounded-full transition-colors",
18905
+ index === currentImageIndex ? "bg-white" : "bg-white/50 hover:bg-white/80"
18906
+ ),
18907
+ "aria-label": `Go to image ${index + 1}`
18908
+ },
18909
+ index
18910
+ ))
18911
+ }
18912
+ )
18908
18913
  ] }),
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
- ] }) })
18914
+ /* @__PURE__ */ jsxRuntime.jsx(
18915
+ "div",
18916
+ {
18917
+ className: cn(
18918
+ "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"
18919
+ ),
18920
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("max-w-4xl space-y-6", contentClassName), children: [
18921
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
18922
+ badge && (typeof badge === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
18923
+ "div",
18924
+ {
18925
+ className: cn(
18926
+ "inline-flex items-center rounded-full bg-white/10 px-3 py-1 text-sm font-medium text-white backdrop-blur-sm",
18927
+ badgeClassName
18928
+ ),
18929
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: badge })
18930
+ }
18931
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: badgeClassName, children: badge })),
18932
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
18933
+ "h1",
18934
+ {
18935
+ className: cn(
18936
+ "text-4xl font-bold sm:text-5xl md:text-6xl text-balance text-shadow",
18937
+ headingClassName
18938
+ ),
18939
+ children: heading
18940
+ }
18941
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
18942
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
18943
+ "p",
18944
+ {
18945
+ className: cn(
18946
+ "text-xl text-balance text-shadow",
18947
+ descriptionClassName
18948
+ ),
18949
+ children: description
18950
+ }
18951
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
18952
+ ] }),
18953
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx(
18954
+ "div",
18955
+ {
18956
+ className: cn(
18957
+ "flex flex-col justify-center gap-4 sm:flex-row",
18958
+ actionsClassName
18959
+ ),
18960
+ children: renderActions()
18961
+ }
18962
+ )
18963
+ ] })
18964
+ }
18965
+ )
18917
18966
  ]
18918
18967
  }
18919
18968
  );
@@ -19217,7 +19266,7 @@ function CarouselPortfolioHero({
19217
19266
  actionsSlot,
19218
19267
  autoPlayInterval = 5e3,
19219
19268
  className,
19220
- containerClassName,
19269
+ 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
19270
  contentClassName,
19222
19271
  tagClassName,
19223
19272
  titleClassName,
@@ -19233,23 +19282,45 @@ function CarouselPortfolioHero({
19233
19282
  slideMediaBrightness = "50"
19234
19283
  }) {
19235
19284
  const [currentIndex, setCurrentIndex] = React52__namespace.useState(0);
19285
+ const intervalRef = React52__namespace.useRef(null);
19286
+ const resetInterval = React52__namespace.useCallback(() => {
19287
+ if (intervalRef.current) {
19288
+ clearInterval(intervalRef.current);
19289
+ }
19290
+ intervalRef.current = setInterval(() => {
19291
+ setCurrentIndex((prevIndex) => (prevIndex + 1) % (slides?.length ?? 1));
19292
+ }, autoPlayInterval);
19293
+ }, [autoPlayInterval, slides?.length]);
19236
19294
  const goToNext = React52__namespace.useCallback(() => {
19237
19295
  setCurrentIndex((prevIndex) => (prevIndex + 1) % (slides?.length ?? 1));
19238
- }, [slides?.length]);
19296
+ resetInterval();
19297
+ }, [slides?.length, resetInterval]);
19239
19298
  const goToPrev = React52__namespace.useCallback(() => {
19240
19299
  setCurrentIndex(
19241
19300
  (prevIndex) => (prevIndex - 1 + (slides?.length ?? 1)) % (slides?.length ?? 1)
19242
19301
  );
19243
- }, [slides?.length]);
19302
+ resetInterval();
19303
+ }, [slides?.length, resetInterval]);
19244
19304
  React52__namespace.useEffect(() => {
19245
- const interval = setInterval(goToNext, autoPlayInterval);
19246
- return () => clearInterval(interval);
19247
- }, [goToNext, autoPlayInterval]);
19305
+ resetInterval();
19306
+ return () => {
19307
+ if (intervalRef.current) {
19308
+ clearInterval(intervalRef.current);
19309
+ }
19310
+ };
19311
+ }, [resetInterval]);
19248
19312
  const renderActions = () => {
19249
19313
  if (actionsSlot) return actionsSlot;
19250
19314
  if (!actions || actions.length === 0) return null;
19251
19315
  return actions.map((action, index) => {
19252
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
19316
+ const {
19317
+ label,
19318
+ icon,
19319
+ iconAfter,
19320
+ children,
19321
+ className: actionClassName,
19322
+ ...pressableProps
19323
+ } = action;
19253
19324
  return /* @__PURE__ */ jsxRuntime.jsx(
19254
19325
  Pressable,
19255
19326
  {
@@ -19275,6 +19346,7 @@ function CarouselPortfolioHero({
19275
19346
  className: cn("relative h-screen w-full overflow-hidden", className),
19276
19347
  pattern,
19277
19348
  patternOpacity,
19349
+ containerClassName,
19278
19350
  children: [
19279
19351
  slidesSlot ? slidesSlot : slides?.map((slide, index) => /* @__PURE__ */ jsxRuntime.jsx(
19280
19352
  "div",
@@ -19300,43 +19372,99 @@ function CarouselPortfolioHero({
19300
19372
  },
19301
19373
  slide.id
19302
19374
  )),
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,
19375
+ /* @__PURE__ */ jsxRuntime.jsx(
19376
+ "div",
19377
+ {
19378
+ className: cn(
19379
+ "relative z-10 flex h-full w-full flex-col justify-end px-6 pb-16 text-white md:px-8 lg:px-12"
19380
+ ),
19381
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("max-w-4xl", contentClassName), children: [
19382
+ currentSlide?.tag && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4", children: typeof currentSlide.tag === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
19383
+ "span",
19312
19384
  {
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 })
19385
+ className: cn(
19386
+ "inline-block rounded-full bg-primary px-3 py-1 text-sm font-medium",
19387
+ tagClassName
19388
+ ),
19389
+ children: currentSlide.tag
19319
19390
  }
19320
- ),
19321
- /* @__PURE__ */ jsxRuntime.jsx(
19322
- Pressable,
19391
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: tagClassName, children: currentSlide.tag }) }),
19392
+ currentSlide?.title && (typeof currentSlide.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
19393
+ "h1",
19323
19394
  {
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 })
19395
+ className: cn(
19396
+ "text-4xl font-bold sm:text-5xl md:text-6xl text-balance text-shadow",
19397
+ titleClassName
19398
+ ),
19399
+ children: currentSlide.title
19330
19400
  }
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
- ] }) }) })
19401
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: currentSlide.title })),
19402
+ currentSlide?.description && (typeof currentSlide.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
19403
+ "p",
19404
+ {
19405
+ className: cn(
19406
+ "mt-4 text-lg text-white/80 sm:text-xl md:max-w-2xl text-balance text-shadow",
19407
+ descriptionClassName
19408
+ ),
19409
+ children: currentSlide.description
19410
+ }
19411
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: currentSlide.description })),
19412
+ /* @__PURE__ */ jsxRuntime.jsxs(
19413
+ "div",
19414
+ {
19415
+ className: cn("mt-8 flex items-center gap-4", actionsClassName),
19416
+ children: [
19417
+ renderActions(),
19418
+ /* @__PURE__ */ jsxRuntime.jsxs(
19419
+ "div",
19420
+ {
19421
+ className: cn(
19422
+ "ml-auto flex items-center gap-2",
19423
+ navigationClassName
19424
+ ),
19425
+ children: [
19426
+ /* @__PURE__ */ jsxRuntime.jsx(
19427
+ Pressable,
19428
+ {
19429
+ variant: "outline",
19430
+ size: "icon",
19431
+ className: "rounded-full border-white/40 bg-black/30 text-white hover:bg-black/50 hover:text-white",
19432
+ onClick: goToPrev,
19433
+ asButton: true,
19434
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-left", size: 20 })
19435
+ }
19436
+ ),
19437
+ /* @__PURE__ */ jsxRuntime.jsx(
19438
+ Pressable,
19439
+ {
19440
+ variant: "outline",
19441
+ size: "icon",
19442
+ className: "rounded-full border-white/40 bg-black/30 text-white hover:bg-black/50 hover:text-white",
19443
+ onClick: goToNext,
19444
+ asButton: true,
19445
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 20 })
19446
+ }
19447
+ ),
19448
+ /* @__PURE__ */ jsxRuntime.jsxs(
19449
+ "div",
19450
+ {
19451
+ className: cn("ml-3 text-sm text-white/80", counterClassName),
19452
+ children: [
19453
+ currentIndex + 1,
19454
+ " / ",
19455
+ slides?.length ?? 0
19456
+ ]
19457
+ }
19458
+ )
19459
+ ]
19460
+ }
19461
+ )
19462
+ ]
19463
+ }
19464
+ )
19465
+ ] }) })
19466
+ }
19467
+ )
19340
19468
  ]
19341
19469
  }
19342
19470
  );
@@ -19360,8 +19488,8 @@ function CarouselProductFeatureShowcase({
19360
19488
  actionsClassName,
19361
19489
  indicatorsClassName,
19362
19490
  optixFlowConfig,
19363
- background = "white",
19364
- spacing = "xl",
19491
+ background,
19492
+ spacing,
19365
19493
  pattern,
19366
19494
  patternOpacity
19367
19495
  }) {
@@ -19405,7 +19533,14 @@ function CarouselProductFeatureShowcase({
19405
19533
  if (actionsSlot) return actionsSlot;
19406
19534
  if (!actions || actions.length === 0) return null;
19407
19535
  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;
19536
+ const {
19537
+ label,
19538
+ icon,
19539
+ iconAfter,
19540
+ children,
19541
+ className: actionClassName,
19542
+ ...pressableProps
19543
+ } = action;
19409
19544
  return /* @__PURE__ */ jsxRuntime.jsx(
19410
19545
  Pressable,
19411
19546
  {
@@ -19430,105 +19565,151 @@ function CarouselProductFeatureShowcase({
19430
19565
  className: cn(className),
19431
19566
  pattern,
19432
19567
  patternOpacity,
19433
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("container mx-auto px-4", containerClassName), children: [
19568
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative", containerClassName), children: [
19434
19569
  /* @__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
- }
19570
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
19571
+ "h2",
19572
+ {
19573
+ className: cn(
19574
+ "text-3xl font-bold tracking-tight md:text-4xl lg:text-5xl",
19575
+ headingClassName
19473
19576
  ),
19474
- /* @__PURE__ */ jsxRuntime.jsx(
19475
- Pressable,
19577
+ children: heading
19578
+ }
19579
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
19580
+ subheading && (typeof subheading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
19581
+ "p",
19582
+ {
19583
+ className: cn(
19584
+ "mt-4 text-lg text-muted-foreground",
19585
+ subheadingClassName
19586
+ ),
19587
+ children: subheading
19588
+ }
19589
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: subheadingClassName, children: subheading }))
19590
+ ] }),
19591
+ featuresSlot ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: contentClassName, children: featuresSlot }) : /* @__PURE__ */ jsxRuntime.jsxs(
19592
+ "div",
19593
+ {
19594
+ className: cn(
19595
+ "grid gap-8 lg:grid-cols-2 lg:gap-12",
19596
+ contentClassName
19597
+ ),
19598
+ children: [
19599
+ /* @__PURE__ */ jsxRuntime.jsxs(
19600
+ "div",
19476
19601
  {
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",
19602
+ className: cn(
19603
+ "relative aspect-square overflow-hidden rounded-2xl bg-muted lg:aspect-4/3 shadow-lg",
19604
+ imageClassName
19605
+ ),
19606
+ children: [
19607
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { initial: false, custom: direction, mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsx(
19608
+ framerMotion.motion.div,
19502
19609
  {
19503
- onClick: () => setActiveColorIndex(index),
19610
+ custom: direction,
19611
+ variants: slideVariants2,
19612
+ initial: "enter",
19613
+ animate: "center",
19614
+ exit: "exit",
19615
+ transition: { duration: 0.3, ease: "easeInOut" },
19504
19616
  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"
19617
+ "absolute inset-0",
19618
+ activeFeature?.imageClassName
19507
19619
  ),
19508
- style: { backgroundColor: color.value },
19509
- title: color.name
19620
+ children: /* @__PURE__ */ jsxRuntime.jsx(
19621
+ img.Img,
19622
+ {
19623
+ src: currentImage,
19624
+ alt: typeof activeFeature?.title === "string" ? activeFeature.title : `Feature ${activeIndex + 1}`,
19625
+ className: "h-full w-full object-cover",
19626
+ optixFlowConfig
19627
+ }
19628
+ )
19510
19629
  },
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
- ] })
19630
+ `${activeIndex}-${activeColorIndex}`
19631
+ ) }),
19632
+ /* @__PURE__ */ jsxRuntime.jsxs(
19633
+ "div",
19634
+ {
19635
+ className: cn(
19636
+ "absolute bottom-4 right-4 flex gap-2",
19637
+ navigationClassName
19638
+ ),
19639
+ children: [
19640
+ /* @__PURE__ */ jsxRuntime.jsx(
19641
+ Pressable,
19642
+ {
19643
+ onClick: goToPrev,
19644
+ asButton: true,
19645
+ variant: "outline",
19646
+ size: "icon",
19647
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-left", size: 20 })
19648
+ }
19649
+ ),
19650
+ /* @__PURE__ */ jsxRuntime.jsx(
19651
+ Pressable,
19652
+ {
19653
+ onClick: goToNext,
19654
+ asButton: true,
19655
+ variant: "outline",
19656
+ size: "icon",
19657
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 20 })
19658
+ }
19659
+ )
19660
+ ]
19661
+ }
19662
+ )
19663
+ ]
19664
+ }
19665
+ ),
19666
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col justify-center", children: [
19667
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsxs(
19668
+ framerMotion.motion.div,
19669
+ {
19670
+ initial: { opacity: 0, y: 20 },
19671
+ animate: { opacity: 1, y: 0 },
19672
+ exit: { opacity: 0, y: -20 },
19673
+ transition: { duration: 0.3 },
19674
+ children: [
19675
+ 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 })),
19676
+ 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 })),
19677
+ activeFeature?.colors && activeFeature.colors.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mt-6", colorSelectorClassName), children: [
19678
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-sm font-medium", children: "Available Colors" }),
19679
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-3", children: activeFeature.colors.map((color, index) => /* @__PURE__ */ jsxRuntime.jsx(
19680
+ "button",
19681
+ {
19682
+ onClick: () => setActiveColorIndex(index),
19683
+ className: cn(
19684
+ "h-8 w-8 rounded-full border-2 transition-all",
19685
+ activeColorIndex === index ? "border-primary ring-2 ring-primary ring-offset-2" : "border-transparent hover:border-muted-foreground"
19686
+ ),
19687
+ style: { backgroundColor: color.value },
19688
+ title: color.name
19689
+ },
19690
+ color.name
19691
+ )) })
19692
+ ] }),
19693
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: actionsClassName, children: renderActions() })
19694
+ ]
19695
+ },
19696
+ activeIndex
19697
+ ) }),
19698
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-8 flex gap-2", indicatorsClassName), children: features?.map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
19699
+ "button",
19700
+ {
19701
+ onClick: () => goToSlide(index),
19702
+ className: cn(
19703
+ "h-2 rounded-full transition-all",
19704
+ activeIndex === index ? "w-8 bg-primary" : "w-2 bg-muted-foreground/30 hover:bg-muted-foreground/50"
19705
+ )
19706
+ },
19707
+ index
19708
+ )) })
19709
+ ] })
19710
+ ]
19711
+ }
19712
+ )
19532
19713
  ] })
19533
19714
  }
19534
19715
  );
@@ -19584,12 +19765,16 @@ function SliderBtn({
19584
19765
  }
19585
19766
  function SliderWrapper({ children, value, className }) {
19586
19767
  const { active } = useProgressSliderContext();
19587
- return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "popLayout", children: active === value && /* @__PURE__ */ jsxRuntime.jsx(
19768
+ return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", initial: false, children: active === value && /* @__PURE__ */ jsxRuntime.jsx(
19588
19769
  framerMotion.motion.div,
19589
19770
  {
19590
- initial: { opacity: 0 },
19591
- animate: { opacity: 1 },
19592
- exit: { opacity: 0 },
19771
+ initial: { opacity: 0, scale: 0.98 },
19772
+ animate: { opacity: 1, scale: 1 },
19773
+ exit: { opacity: 0, scale: 0.98 },
19774
+ transition: {
19775
+ duration: 0.4,
19776
+ ease: [0.4, 0, 0.2, 1]
19777
+ },
19593
19778
  className: cn("", className),
19594
19779
  children
19595
19780
  },
@@ -19700,12 +19885,12 @@ function CarouselProgressSlider({
19700
19885
  pattern,
19701
19886
  patternOpacity,
19702
19887
  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(
19888
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative min-h-[400px]", imageClassName), children: [
19889
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0", children: slidesSlot ? slidesSlot : slides?.map((slide) => /* @__PURE__ */ jsxRuntime.jsx(
19705
19890
  SliderWrapper,
19706
19891
  {
19707
19892
  value: slide.id,
19708
- className: cn("", slide.className),
19893
+ className: cn("absolute inset-0", slide.className),
19709
19894
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-video overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx(
19710
19895
  img.Img,
19711
19896
  {
@@ -19720,8 +19905,8 @@ function CarouselProgressSlider({
19720
19905
  ) })
19721
19906
  },
19722
19907
  slide.id
19723
- )),
19724
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 flex justify-center lg:justify-start", children: /* @__PURE__ */ jsxRuntime.jsx(
19908
+ )) }),
19909
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative mt-4 flex justify-center lg:justify-start", children: /* @__PURE__ */ jsxRuntime.jsx(
19725
19910
  Pressable,
19726
19911
  {
19727
19912
  onClick: togglePause,
@@ -19783,8 +19968,8 @@ function CarouselScrollingFeatureShowcase({
19783
19968
  featuresClassName,
19784
19969
  numberBadgeClassName,
19785
19970
  optixFlowConfig,
19786
- background = "white",
19787
- spacing = "xl",
19971
+ background,
19972
+ spacing = "md",
19788
19973
  pattern,
19789
19974
  patternOpacity
19790
19975
  }) {
@@ -19834,62 +20019,113 @@ function CarouselScrollingFeatureShowcase({
19834
20019
  patternOpacity,
19835
20020
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("container mx-auto px-4", containerClassName), children: [
19836
20021
  /* @__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,
20022
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
20023
+ "h2",
19843
20024
  {
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",
20025
+ className: cn(
20026
+ "text-3xl font-bold tracking-tight md:text-4xl",
20027
+ headingClassName
20028
+ ),
20029
+ children: heading
20030
+ }
20031
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
20032
+ subheading && (typeof subheading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
20033
+ "p",
19863
20034
  {
19864
- ref: setFeatureRef(feature.id),
19865
- "data-feature-id": feature.id,
19866
20035
  className: cn(
19867
- "scroll-mt-24 transition-opacity duration-300",
19868
- activeFeature === feature.id ? "opacity-100" : "opacity-50",
19869
- feature.className
20036
+ "mt-4 text-lg text-muted-foreground",
20037
+ subheadingClassName
19870
20038
  ),
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
- ] })
20039
+ children: subheading
20040
+ }
20041
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-4", subheadingClassName), children: subheading }))
20042
+ ] }),
20043
+ /* @__PURE__ */ jsxRuntime.jsxs(
20044
+ "div",
20045
+ {
20046
+ className: cn(
20047
+ "grid gap-8 lg:grid-cols-2 lg:gap-12",
20048
+ contentClassName
20049
+ ),
20050
+ children: [
20051
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "hidden lg:block", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sticky top-24", children: /* @__PURE__ */ jsxRuntime.jsx(
20052
+ "div",
20053
+ {
20054
+ className: cn(
20055
+ "aspect-video overflow-hidden rounded-xl bg-muted",
20056
+ imageClassName
20057
+ ),
20058
+ children: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", children: activeFeatureData && /* @__PURE__ */ jsxRuntime.jsx(
20059
+ framerMotion.motion.div,
20060
+ {
20061
+ initial: { opacity: 0 },
20062
+ animate: { opacity: 1 },
20063
+ exit: { opacity: 0 },
20064
+ transition: { duration: 0.3 },
20065
+ className: "h-full w-full",
20066
+ children: /* @__PURE__ */ jsxRuntime.jsx(
20067
+ img.Img,
20068
+ {
20069
+ src: activeFeatureData.image,
20070
+ alt: typeof activeFeatureData.title === "string" ? activeFeatureData.title : `Feature ${activeFeatureData.id}`,
20071
+ className: cn(
20072
+ "h-full w-full object-cover",
20073
+ activeFeatureData.imageClassName
20074
+ ),
20075
+ optixFlowConfig
20076
+ }
20077
+ )
20078
+ },
20079
+ activeFeatureData.id
20080
+ ) })
20081
+ }
20082
+ ) }) }),
20083
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("space-y-24 lg:space-y-32", featuresClassName), children: featuresSlot ? featuresSlot : features?.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs(
20084
+ "div",
20085
+ {
20086
+ ref: setFeatureRef(feature.id),
20087
+ "data-feature-id": feature.id,
20088
+ className: cn(
20089
+ "scroll-mt-24 transition-opacity duration-300",
20090
+ activeFeature === feature.id ? "opacity-100" : "opacity-50",
20091
+ feature.className
20092
+ ),
20093
+ children: [
20094
+ /* @__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(
20095
+ img.Img,
20096
+ {
20097
+ src: feature.image,
20098
+ alt: typeof feature.title === "string" ? feature.title : `Feature ${feature.id}`,
20099
+ className: cn(
20100
+ "h-full w-full object-cover",
20101
+ feature.imageClassName
20102
+ ),
20103
+ optixFlowConfig
20104
+ }
20105
+ ) }) }),
20106
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-4", children: [
20107
+ /* @__PURE__ */ jsxRuntime.jsx(
20108
+ "div",
20109
+ {
20110
+ className: cn(
20111
+ "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground",
20112
+ numberBadgeClassName
20113
+ ),
20114
+ children: index + 1
20115
+ }
20116
+ ),
20117
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
20118
+ 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 })),
20119
+ 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 }))
20120
+ ] })
20121
+ ] })
20122
+ ]
20123
+ },
20124
+ feature.id
20125
+ )) })
20126
+ ]
20127
+ }
20128
+ )
19893
20129
  ] })
19894
20130
  }
19895
20131
  );
@@ -20090,17 +20326,28 @@ function FeatureShowcase({
20090
20326
  contentClassName,
20091
20327
  mediaClassName,
20092
20328
  arrowClassName,
20093
- equalizeOnMobile = true,
20094
- stretchMediaOnMobile = true
20329
+ equalizeOnMobile,
20330
+ stretchMediaOnMobile,
20331
+ background,
20332
+ spacing,
20333
+ pattern,
20334
+ patternOpacity,
20335
+ patternClassName
20095
20336
  }) {
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";
20337
+ const baseArrowClassName = React52.useMemo(
20338
+ () => "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",
20339
+ []
20340
+ );
20097
20341
  const [mobileSlideHeight, setMobileSlideHeight] = React52.useState(
20098
20342
  null
20099
20343
  );
20100
20344
  const slideRefs = React52.useRef([]);
20101
- const mediaWrapperClassName = equalizeOnMobile && stretchMediaOnMobile ? "flex-1 min-h-0 md:flex-none" : "";
20345
+ const mediaWrapperClassName = React52.useMemo(
20346
+ () => equalizeOnMobile && stretchMediaOnMobile ? "flex-1 min-h-0 md:flex-none" : "",
20347
+ [equalizeOnMobile, stretchMediaOnMobile]
20348
+ );
20102
20349
  React52.useEffect(() => {
20103
- if (!equalizeOnMobile) {
20350
+ if (!equalizeOnMobile || !items || items.length === 0) {
20104
20351
  setMobileSlideHeight(null);
20105
20352
  return;
20106
20353
  }
@@ -20132,10 +20379,10 @@ function FeatureShowcase({
20132
20379
  window.removeEventListener("resize", updateHeights);
20133
20380
  resizeObserver?.disconnect();
20134
20381
  };
20135
- }, [equalizeOnMobile, items.length]);
20136
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, children: [
20137
- children,
20138
- /* @__PURE__ */ jsxRuntime.jsxs(Carousel, { className: carouselClassName, children: [
20382
+ }, [equalizeOnMobile, items]);
20383
+ const carouselContent = React52.useMemo(() => {
20384
+ if (!items || items.length === 0) return null;
20385
+ return /* @__PURE__ */ jsxRuntime.jsxs(Carousel, { className: carouselClassName, children: [
20139
20386
  /* @__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
20387
  "div",
20141
20388
  {
@@ -20148,8 +20395,8 @@ function FeatureShowcase({
20148
20395
  slideClassName
20149
20396
  ),
20150
20397
  children: [
20151
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full", contentClassName), children: item.content }),
20152
- /* @__PURE__ */ jsxRuntime.jsx(
20398
+ item.content && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full", contentClassName), children: item.content }),
20399
+ item.mediaComponent && /* @__PURE__ */ jsxRuntime.jsx(
20153
20400
  "div",
20154
20401
  {
20155
20402
  className: cn(
@@ -20175,8 +20422,23 @@ function FeatureShowcase({
20175
20422
  className: cn(baseArrowClassName, "right-4 md:right-6", arrowClassName)
20176
20423
  }
20177
20424
  )
20178
- ] })
20179
- ] });
20425
+ ] });
20426
+ }, [items, carouselClassName, equalizeOnMobile, mobileSlideHeight, slideClassName, contentClassName, mediaWrapperClassName, mediaClassName, baseArrowClassName, arrowClassName]);
20427
+ return /* @__PURE__ */ jsxRuntime.jsxs(
20428
+ Section,
20429
+ {
20430
+ background,
20431
+ spacing,
20432
+ pattern,
20433
+ patternOpacity,
20434
+ patternClassName,
20435
+ className,
20436
+ children: [
20437
+ children,
20438
+ carouselContent
20439
+ ]
20440
+ }
20441
+ );
20180
20442
  }
20181
20443
  function FeatureSplitImage({
20182
20444
  title,
@@ -20205,40 +20467,19 @@ function FeatureSplitImage({
20205
20467
  if (actionsSlot) return actionsSlot;
20206
20468
  if (!actions || actions.length === 0) return null;
20207
20469
  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
- );
20470
+ const {
20471
+ label,
20472
+ icon,
20473
+ iconAfter,
20474
+ children,
20475
+ className: actionClassName,
20476
+ ...pressableProps
20477
+ } = action;
20478
+ return /* @__PURE__ */ jsxRuntime.jsx(Pressable, { className: actionClassName, asButton: true, ...pressableProps, children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20479
+ icon,
20480
+ label,
20481
+ iconAfter
20482
+ ] }) }, index);
20242
20483
  });
20243
20484
  }, [actionsSlot, actions]);
20244
20485
  const imageContent = React52.useMemo(() => {
@@ -20248,7 +20489,7 @@ function FeatureSplitImage({
20248
20489
  img.Img,
20249
20490
  {
20250
20491
  src: imageSrc,
20251
- alt: imageAlt || "Feature illustration",
20492
+ alt: imageAlt || "",
20252
20493
  className: cn("max-h-96 w-full rounded-md object-cover", imageClassName),
20253
20494
  loading: "lazy",
20254
20495
  optixFlowConfig
@@ -20269,7 +20510,7 @@ function FeatureSplitImage({
20269
20510
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col items-center text-center lg:items-start lg:text-left", contentClassName), children: [
20270
20511
  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
20512
  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 })
20513
+ (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
20514
  ] }),
20274
20515
  imageContent
20275
20516
  ] })
@@ -20303,40 +20544,19 @@ function FeatureSplitImageReverse({
20303
20544
  if (actionsSlot) return actionsSlot;
20304
20545
  if (!actions || actions.length === 0) return null;
20305
20546
  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
- );
20547
+ const {
20548
+ label,
20549
+ icon,
20550
+ iconAfter,
20551
+ children,
20552
+ className: actionClassName,
20553
+ ...pressableProps
20554
+ } = action;
20555
+ return /* @__PURE__ */ jsxRuntime.jsx(Pressable, { className: actionClassName, asButton: true, ...pressableProps, children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20556
+ icon,
20557
+ label,
20558
+ iconAfter
20559
+ ] }) }, index);
20340
20560
  });
20341
20561
  }, [actionsSlot, actions]);
20342
20562
  const imageContent = React52.useMemo(() => {
@@ -20346,7 +20566,7 @@ function FeatureSplitImageReverse({
20346
20566
  img.Img,
20347
20567
  {
20348
20568
  src: imageSrc,
20349
- alt: imageAlt || "Feature illustration",
20569
+ alt: imageAlt || "",
20350
20570
  className: cn("max-h-96 w-full rounded-md object-cover", imageClassName),
20351
20571
  loading: "lazy",
20352
20572
  optixFlowConfig
@@ -20368,7 +20588,7 @@ function FeatureSplitImageReverse({
20368
20588
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col items-center text-center lg:items-start lg:text-left", contentClassName), children: [
20369
20589
  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
20590
  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 })
20591
+ (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
20592
  ] })
20373
20593
  ] })
20374
20594
  }
@@ -20391,39 +20611,37 @@ function FeatureIconGridBordered({
20391
20611
  patternOpacity,
20392
20612
  patternClassName
20393
20613
  }) {
20614
+ const renderIcon = React52.useCallback((feature) => {
20615
+ if (feature.icon) return feature.icon;
20616
+ if (feature.iconName) {
20617
+ return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: feature.iconName, size: 20, className: "md:size-6" });
20618
+ }
20619
+ return null;
20620
+ }, []);
20394
20621
  const featuresContent = React52.useMemo(() => {
20395
20622
  if (featuresSlot) return featuresSlot;
20396
20623
  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]);
20624
+ return features.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs(
20625
+ "div",
20626
+ {
20627
+ className: cn("relative flex gap-3 rounded-lg border-dashed md:block md:border-l md:p-5", cardClassName, feature.className),
20628
+ children: [
20629
+ (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) }),
20630
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
20631
+ feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsxs("h3", { className: cn("font-medium md:mb-2 md:text-xl", feature.titleClassName), children: [
20632
+ feature.title,
20633
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -left-px hidden h-6 w-px bg-primary md:inline-block" })
20634
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("font-medium md:mb-2 md:text-xl", feature.titleClassName), children: [
20635
+ feature.title,
20636
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -left-px hidden h-6 w-px bg-primary md:inline-block" })
20637
+ ] })),
20638
+ 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 }))
20639
+ ] })
20640
+ ]
20641
+ },
20642
+ index
20643
+ ));
20644
+ }, [featuresSlot, features, cardClassName, renderIcon]);
20427
20645
  return /* @__PURE__ */ jsxRuntime.jsxs(
20428
20646
  Section,
20429
20647
  {
@@ -20437,7 +20655,7 @@ function FeatureIconGridBordered({
20437
20655
  children: [
20438
20656
  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
20657
  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 })
20658
+ (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
20659
  ]
20442
20660
  }
20443
20661
  );
@@ -20551,8 +20769,8 @@ function FeatureChecklistImage({
20551
20769
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("lg:p-10", contentClassName), children: [
20552
20770
  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
20771
  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 })
20772
+ actionsContent && /* @__PURE__ */ jsxRuntime.jsx("div", { className: actionsClassName, children: actionsContent }),
20773
+ 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
20774
  ] })
20557
20775
  ] })
20558
20776
  }
@@ -20617,10 +20835,10 @@ function FeatureCarouselProgress({
20617
20835
  );
20618
20836
  });
20619
20837
  }, [api, slidesLength]);
20620
- const renderSlideIcon = React52.useMemo(() => (slide) => {
20838
+ const renderSlideIcon = React52.useCallback((slide) => {
20621
20839
  if (slide.icon) return slide.icon;
20622
20840
  if (slide.iconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: slide.iconName, size: 16 });
20623
- return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/star", size: 16 });
20841
+ return null;
20624
20842
  }, []);
20625
20843
  const slidesContent = React52.useMemo(() => {
20626
20844
  if (slidesSlot) return slidesSlot;
@@ -20630,7 +20848,7 @@ function FeatureCarouselProgress({
20630
20848
  {
20631
20849
  className: "basis-full md:basis-1/2 lg:basis-1/3",
20632
20850
  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) }),
20851
+ (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
20852
  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
20853
  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
20854
  ] }) }) }) })
@@ -20692,28 +20910,28 @@ function FeatureCardGridLinked({
20692
20910
  patternOpacity,
20693
20911
  patternClassName
20694
20912
  }) {
20913
+ const renderImage = React52.useCallback((feature, imageAlt) => {
20914
+ if (feature.imageSlot) return feature.imageSlot;
20915
+ if (feature.image) {
20916
+ return /* @__PURE__ */ jsxRuntime.jsx(
20917
+ img.Img,
20918
+ {
20919
+ src: feature.image,
20920
+ alt: imageAlt,
20921
+ className: "h-full w-full rounded-t-lg object-cover transition-opacity hover:opacity-80",
20922
+ loading: "lazy",
20923
+ optixFlowConfig
20924
+ }
20925
+ );
20926
+ }
20927
+ return null;
20928
+ }, [optixFlowConfig]);
20695
20929
  const featuresContent = React52.useMemo(() => {
20696
20930
  if (featuresSlot) return featuresSlot;
20697
20931
  if (!features || features.length === 0) return null;
20698
20932
  return features.map((feature, index) => {
20699
20933
  const featureKey = feature.id || `feature-${index}`;
20700
20934
  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
20935
  return /* @__PURE__ */ jsxRuntime.jsxs(
20718
20936
  "div",
20719
20937
  {
@@ -20724,7 +20942,7 @@ function FeatureCardGridLinked({
20724
20942
  feature.label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-mono text-xs text-muted-foreground", feature.labelClassName), children: feature.label }),
20725
20943
  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
20944
  ] }),
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() }) })
20945
+ /* @__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
20946
  ] }),
20729
20947
  feature.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("p-4 text-muted-foreground md:p-8", feature.descriptionClassName), children: feature.description })
20730
20948
  ]
@@ -20732,7 +20950,7 @@ function FeatureCardGridLinked({
20732
20950
  featureKey
20733
20951
  );
20734
20952
  });
20735
- }, [featuresSlot, features, cardClassName, optixFlowConfig]);
20953
+ }, [featuresSlot, features, cardClassName, renderImage]);
20736
20954
  return /* @__PURE__ */ jsxRuntime.jsxs(
20737
20955
  Section,
20738
20956
  {
@@ -20768,7 +20986,7 @@ function FeatureNumberedCards({
20768
20986
  patternOpacity,
20769
20987
  patternClassName
20770
20988
  }) {
20771
- const renderChecklistItems = (feature) => {
20989
+ const renderChecklistItems = React52.useCallback((feature) => {
20772
20990
  if (feature.checklistSlot) return feature.checklistSlot;
20773
20991
  if (!feature.checklistItems || feature.checklistItems.length === 0) return null;
20774
20992
  return feature.checklistItems.map((item, itemIndex) => {
@@ -20788,7 +21006,7 @@ function FeatureNumberedCards({
20788
21006
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm md:text-base", children: content })
20789
21007
  ] }, itemIndex);
20790
21008
  });
20791
- };
21009
+ }, []);
20792
21010
  const featuresContent = React52.useMemo(() => {
20793
21011
  if (featuresSlot) return featuresSlot;
20794
21012
  if (!features || features.length === 0) return null;
@@ -20893,12 +21111,12 @@ function FeatureIconGridAccent({
20893
21111
  className,
20894
21112
  containerClassName,
20895
21113
  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: [
21114
+ (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
21115
  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
21116
  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
21117
  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
21118
  ] }) }),
20901
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mx-auto mt-20 grid max-w-5xl gap-6 md:grid-cols-2", gridClassName), children: featuresContent })
21119
+ 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
21120
  ]
20903
21121
  }
20904
21122
  );
@@ -20920,20 +21138,20 @@ function FeatureThreeColumnValues({
20920
21138
  patternOpacity,
20921
21139
  patternClassName
20922
21140
  }) {
20923
- const renderValueIcon = (value) => {
21141
+ const renderValueIcon = React52__namespace.useCallback((value) => {
20924
21142
  if (value.icon) return value.icon;
20925
21143
  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
- };
21144
+ return null;
21145
+ }, []);
20928
21146
  const valuesContent = React52.useMemo(() => {
20929
21147
  if (valuesSlot) return valuesSlot;
20930
21148
  if (!values || values.length === 0) return null;
20931
21149
  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) }),
21150
+ (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
21151
  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
21152
  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
21153
  ] }, index));
20936
- }, [valuesSlot, values, cardClassName]);
21154
+ }, [valuesSlot, values, cardClassName, renderValueIcon]);
20937
21155
  return /* @__PURE__ */ jsxRuntime.jsxs(
20938
21156
  Section,
20939
21157
  {
@@ -20947,7 +21165,7 @@ function FeatureThreeColumnValues({
20947
21165
  children: [
20948
21166
  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
21167
  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 })
21168
+ (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
21169
  ]
20952
21170
  }
20953
21171
  );
@@ -20979,7 +21197,7 @@ function FeatureBadgeGridSix({
20979
21197
  if (!label) return null;
20980
21198
  return /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "secondary", className: badgeClassName, children: label });
20981
21199
  }, [badgeSlot, label, badgeClassName]);
20982
- const renderFeatureIcon = (feature) => {
21200
+ const renderFeatureIcon = React52.useCallback((feature) => {
20983
21201
  if (feature.icon) return feature.icon;
20984
21202
  if (feature.iconName) {
20985
21203
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -20992,25 +21210,28 @@ function FeatureBadgeGridSix({
20992
21210
  );
20993
21211
  }
20994
21212
  return null;
20995
- };
21213
+ }, []);
20996
21214
  const featuresContent = React52.useMemo(() => {
20997
21215
  if (featuresSlot) return featuresSlot;
20998
21216
  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]);
21217
+ return features.map((feature, index) => {
21218
+ const iconContent = renderFeatureIcon(feature);
21219
+ return /* @__PURE__ */ jsxRuntime.jsxs(
21220
+ "div",
21221
+ {
21222
+ className: cn("flex gap-6 space-y-4 rounded-lg md:block", cardClassName, feature.className),
21223
+ children: [
21224
+ iconContent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-10 shrink-0 items-center justify-center rounded-full bg-accent md:size-12", children: iconContent }),
21225
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
21226
+ 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 })),
21227
+ 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 }))
21228
+ ] })
21229
+ ]
21230
+ },
21231
+ index
21232
+ );
21233
+ });
21234
+ }, [featuresSlot, features, cardClassName, renderFeatureIcon]);
21014
21235
  const actionContent = React52.useMemo(() => {
21015
21236
  if (actionSlot) return actionSlot;
21016
21237
  if (!action) return null;
@@ -21071,7 +21292,6 @@ function FeatureBadgeGridSix({
21071
21292
  function FeaturePatternGridLinks({
21072
21293
  features,
21073
21294
  featuresSlot,
21074
- patternUrl = patternSvgs.dotPattern,
21075
21295
  className,
21076
21296
  containerClassName,
21077
21297
  gridClassName,
@@ -21082,26 +21302,28 @@ function FeaturePatternGridLinks({
21082
21302
  patternOpacity,
21083
21303
  patternClassName
21084
21304
  }) {
21085
- const renderFeatureIcon = (feature) => {
21305
+ const renderFeatureIcon = React52.useCallback((feature) => {
21086
21306
  if (feature.icon) return feature.icon;
21087
21307
  if (feature.iconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: feature.iconName, size: 24, className: feature.iconClassName });
21088
21308
  return null;
21089
- };
21090
- const renderFeatureLink = (feature) => {
21309
+ }, []);
21310
+ const renderFeatureLink = React52.useCallback((feature) => {
21091
21311
  if (feature.linkSlot) return feature.linkSlot;
21092
- if (!feature.link) return null;
21312
+ if (!feature.link && !feature.linkLabel) return null;
21313
+ const label = feature.linkLabel || (feature.link ? "Learn more" : null);
21314
+ if (!label) return null;
21093
21315
  return /* @__PURE__ */ jsxRuntime.jsxs(
21094
21316
  Pressable,
21095
21317
  {
21096
21318
  href: feature.link,
21097
21319
  className: cn("flex items-center gap-2 text-sm font-medium", feature.linkClassName),
21098
21320
  children: [
21099
- feature.linkLabel || "Learn more",
21321
+ label,
21100
21322
  /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
21101
21323
  ]
21102
21324
  }
21103
21325
  );
21104
- };
21326
+ }, []);
21105
21327
  const featuresContent = React52.useMemo(() => {
21106
21328
  if (featuresSlot) return featuresSlot;
21107
21329
  if (!features || features.length === 0) return null;
@@ -21120,7 +21342,7 @@ function FeaturePatternGridLinks({
21120
21342
  },
21121
21343
  index
21122
21344
  ));
21123
- }, [featuresSlot, features, cardClassName]);
21345
+ }, [featuresSlot, features, cardClassName, renderFeatureIcon, renderFeatureLink]);
21124
21346
  return /* @__PURE__ */ jsxRuntime.jsx(
21125
21347
  Section,
21126
21348
  {
@@ -21129,12 +21351,8 @@ function FeaturePatternGridLinks({
21129
21351
  pattern,
21130
21352
  patternOpacity,
21131
21353
  patternClassName,
21132
- className: cn("bg-muted/30", className),
21354
+ className,
21133
21355
  containerClassName,
21134
- style: {
21135
- backgroundImage: `url(${patternUrl})`,
21136
- backgroundRepeat: "repeat"
21137
- },
21138
21356
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("grid gap-6 md:grid-cols-2 lg:grid-cols-3", gridClassName), children: featuresContent })
21139
21357
  }
21140
21358
  );
@@ -21202,7 +21420,7 @@ function FeatureTabbedContentImage({
21202
21420
  description,
21203
21421
  slides,
21204
21422
  slidesSlot,
21205
- defaultTab = "1",
21423
+ defaultTab,
21206
21424
  className,
21207
21425
  containerClassName,
21208
21426
  headerClassName,
@@ -21221,7 +21439,7 @@ function FeatureTabbedContentImage({
21221
21439
  patternOpacity,
21222
21440
  patternClassName
21223
21441
  }) {
21224
- const renderFeatures = React52.useMemo(() => (slide) => {
21442
+ const renderFeatures = React52__namespace.useCallback((slide) => {
21225
21443
  if (slide.featuresSlot) return slide.featuresSlot;
21226
21444
  if (!slide.features || slide.features.length === 0) return null;
21227
21445
  return slide.features.map((feature, index) => {
@@ -21235,7 +21453,7 @@ function FeatureTabbedContentImage({
21235
21453
  ] }, index);
21236
21454
  });
21237
21455
  }, []);
21238
- const renderActions = React52.useMemo(() => (slide) => {
21456
+ const renderActions = React52__namespace.useCallback((slide) => {
21239
21457
  if (slide.actionsSlot) return slide.actionsSlot;
21240
21458
  if (!slide.actions || slide.actions.length === 0) return null;
21241
21459
  return slide.actions.map((action, index) => {
@@ -21275,7 +21493,7 @@ function FeatureTabbedContentImage({
21275
21493
  );
21276
21494
  });
21277
21495
  }, []);
21278
- const renderImage = React52.useMemo(() => (slide) => {
21496
+ const renderImage = React52__namespace.useCallback((slide) => {
21279
21497
  if (slide.imageSlot) return slide.imageSlot;
21280
21498
  if (!slide.image) return null;
21281
21499
  const imageAlt = slide.imageAlt || (typeof slide.title === "string" ? slide.title : "Tab content image");
@@ -21322,6 +21540,11 @@ function FeatureTabbedContentImage({
21322
21540
  ))
21323
21541
  ] });
21324
21542
  }, [slidesSlot, slides, tabsListClassName, tabTriggerClassName, tabContentClassName, contentGridClassName, renderFeatures, renderActions, renderImage]);
21543
+ const effectiveDefaultTab = React52.useMemo(() => {
21544
+ if (defaultTab) return defaultTab;
21545
+ if (slides && slides.length > 0) return slides[0].id.toString();
21546
+ return "1";
21547
+ }, [defaultTab, slides]);
21325
21548
  return /* @__PURE__ */ jsxRuntime.jsxs(
21326
21549
  Section,
21327
21550
  {
@@ -21337,10 +21560,10 @@ function FeatureTabbedContentImage({
21337
21560
  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
21561
  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
21562
  ] }),
21340
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-12", tabsWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
21563
+ (slidesSlot || slides && slides.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-12", tabsWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
21341
21564
  Tabs,
21342
21565
  {
21343
- defaultValue: defaultTab,
21566
+ defaultValue: effectiveDefaultTab,
21344
21567
  className: cn("mx-auto flex w-fit flex-col items-center gap-8 md:gap-12", tabsClassName),
21345
21568
  children: slidesContent
21346
21569
  }
@@ -21352,7 +21575,7 @@ function FeatureTabbedContentImage({
21352
21575
  function FeatureUtilityCardsGrid({
21353
21576
  label,
21354
21577
  labelIcon,
21355
- labelIconName = "lucide/square-dashed-mouse-pointer",
21578
+ labelIconName,
21356
21579
  title,
21357
21580
  description,
21358
21581
  learnMoreAction,
@@ -21374,11 +21597,11 @@ function FeatureUtilityCardsGrid({
21374
21597
  patternOpacity,
21375
21598
  patternClassName
21376
21599
  }) {
21377
- const renderLabelIcon = () => {
21600
+ const renderLabelIcon = React52.useMemo(() => {
21378
21601
  if (labelIcon) return labelIcon;
21379
21602
  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
- };
21603
+ return null;
21604
+ }, [labelIcon, labelIconName]);
21382
21605
  const learnMoreContent = React52.useMemo(() => {
21383
21606
  if (learnMoreSlot) return learnMoreSlot;
21384
21607
  if (!learnMoreAction) return null;
@@ -21409,7 +21632,7 @@ function FeatureUtilityCardsGrid({
21409
21632
  }
21410
21633
  );
21411
21634
  }, [learnMoreSlot, learnMoreAction]);
21412
- const renderUtilityImage = (utility) => {
21635
+ const renderUtilityImage = React52__namespace.useCallback((utility) => {
21413
21636
  if (utility.imageSlot) return utility.imageSlot;
21414
21637
  if (utility.image) {
21415
21638
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -21424,7 +21647,7 @@ function FeatureUtilityCardsGrid({
21424
21647
  );
21425
21648
  }
21426
21649
  return null;
21427
- };
21650
+ }, [optixFlowConfig]);
21428
21651
  const utilitiesContent = React52.useMemo(() => {
21429
21652
  if (utilitiesSlot) return utilitiesSlot;
21430
21653
  if (!utilities || utilities.length === 0) return null;
@@ -21435,7 +21658,7 @@ function FeatureUtilityCardsGrid({
21435
21658
  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
21659
  ] })
21437
21660
  ] }, index));
21438
- }, [utilitiesSlot, utilities, cardClassName, optixFlowConfig]);
21661
+ }, [utilitiesSlot, utilities, cardClassName, renderUtilityImage]);
21439
21662
  return /* @__PURE__ */ jsxRuntime.jsxs(
21440
21663
  Section,
21441
21664
  {
@@ -21447,26 +21670,28 @@ function FeatureUtilityCardsGrid({
21447
21670
  className,
21448
21671
  containerClassName: cn("max-w-7xl", containerClassName),
21449
21672
  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 }))
21673
+ (label || labelIcon || labelIconName || learnMoreSlot || learnMoreAction) && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
21674
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center justify-between text-sm", headerClassName), children: [
21675
+ (label || labelIcon || labelIconName) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-1 text-muted-foreground", labelClassName), children: [
21676
+ renderLabelIcon,
21677
+ label && (typeof label === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { children: label }) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: label }))
21678
+ ] }),
21679
+ learnMoreContent
21454
21680
  ] }),
21455
- learnMoreContent
21681
+ /* @__PURE__ */ jsxRuntime.jsx(Separator, { className: "mt-3 mb-8" })
21456
21682
  ] }),
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: [
21683
+ (title || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col justify-between gap-6 md:flex-row", children: [
21459
21684
  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
21685
  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
21686
  ] }),
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 })
21687
+ (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
21688
  ]
21464
21689
  }
21465
21690
  );
21466
21691
  }
21467
21692
  function FeatureBentoUtilities({
21468
21693
  label,
21469
- labelIconName = "lucide/square-dashed-mouse-pointer",
21694
+ labelIconName,
21470
21695
  labelIcon,
21471
21696
  title,
21472
21697
  description,
@@ -21489,7 +21714,7 @@ function FeatureBentoUtilities({
21489
21714
  patternOpacity,
21490
21715
  patternClassName
21491
21716
  }) {
21492
- const renderCard = React52.useMemo(() => (card, index) => {
21717
+ const renderCard = React52__namespace.useCallback((card, index) => {
21493
21718
  const hasImage = card.imageSrc || card.imageSlot;
21494
21719
  const cardClasses = cn(
21495
21720
  hasImage ? "overflow-hidden pt-0" : "p-6",
@@ -21535,12 +21760,16 @@ function FeatureBentoUtilities({
21535
21760
  card.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground", children: card.description })
21536
21761
  ] }, index);
21537
21762
  }, [optixFlowConfig]);
21538
- const renderColumn = React52.useMemo(() => (cards, slot) => {
21763
+ const renderColumn = React52__namespace.useCallback((cards, slot) => {
21539
21764
  if (slot) return slot;
21540
21765
  if (!cards || cards.length === 0) return null;
21541
21766
  return cards.map((card, index) => renderCard(card, index));
21542
21767
  }, [renderCard]);
21543
- const labelIconElement = React52.useMemo(() => labelIcon ?? (labelIconName ? /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: labelIconName, size: 20 }) : null), [labelIcon, labelIconName]);
21768
+ const labelIconElement = React52.useMemo(() => {
21769
+ if (labelIcon) return labelIcon;
21770
+ if (labelIconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: labelIconName, size: 20 });
21771
+ return null;
21772
+ }, [labelIcon, labelIconName]);
21544
21773
  return /* @__PURE__ */ jsxRuntime.jsxs(
21545
21774
  Section,
21546
21775
  {
@@ -21552,7 +21781,7 @@ function FeatureBentoUtilities({
21552
21781
  className: cn("bg-gray-50 dark:bg-background", className),
21553
21782
  containerClassName: cn("max-w-7xl", containerClassName),
21554
21783
  children: [
21555
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-2 text-muted-foreground", labelClassName), children: [
21784
+ (labelIconElement || label) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-2 text-muted-foreground", labelClassName), children: [
21556
21785
  labelIconElement,
21557
21786
  label && (typeof label === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm", children: label }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm", children: label }))
21558
21787
  ] }),
@@ -21591,15 +21820,15 @@ function FeatureChecklistThreeColumn({
21591
21820
  patternOpacity,
21592
21821
  patternClassName
21593
21822
  }) {
21594
- const getCheckItemContent = React52.useMemo(() => (item) => {
21823
+ const getCheckItemContent = React52.useCallback((item) => {
21595
21824
  if (typeof item === "string") return item;
21596
21825
  return item.content;
21597
21826
  }, []);
21598
- const getCheckItemClassName = React52.useMemo(() => (item) => {
21827
+ const getCheckItemClassName = React52.useCallback((item) => {
21599
21828
  if (typeof item === "string") return void 0;
21600
21829
  return item.className;
21601
21830
  }, []);
21602
- const renderChecklistColumn = React52.useMemo(() => (items, slot, gapClass) => {
21831
+ const renderChecklistColumn = React52.useCallback((items, slot, gapClass) => {
21603
21832
  if (slot) return slot;
21604
21833
  if (!items || items.length === 0) return null;
21605
21834
  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 +21836,7 @@ function FeatureChecklistThreeColumn({
21607
21836
  getCheckItemContent(item)
21608
21837
  ] }, index)) });
21609
21838
  }, [checklistClassName, getCheckItemContent, getCheckItemClassName]);
21610
- const renderCardImage = React52.useMemo(() => (card) => {
21839
+ const renderCardImage = React52.useCallback((card) => {
21611
21840
  if (card.imageSlot) return card.imageSlot;
21612
21841
  if (card.image) {
21613
21842
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -21623,7 +21852,7 @@ function FeatureChecklistThreeColumn({
21623
21852
  }
21624
21853
  return null;
21625
21854
  }, [optixFlowConfig]);
21626
- const renderCardLink = React52.useMemo(() => (card) => {
21855
+ const renderCardLink = React52.useCallback((card) => {
21627
21856
  if (card.linkSlot) return card.linkSlot;
21628
21857
  if (!card.link) return null;
21629
21858
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -21686,7 +21915,7 @@ function FeatureChecklistThreeColumn({
21686
21915
  pattern,
21687
21916
  patternOpacity,
21688
21917
  patternClassName,
21689
- className: cn("py-16 sm:py-24 md:py-32", className),
21918
+ className,
21690
21919
  containerClassName,
21691
21920
  children: [
21692
21921
  /* @__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 +21947,25 @@ function FeatureIntegrationCards({
21718
21947
  patternOpacity,
21719
21948
  patternClassName
21720
21949
  }) {
21721
- const renderIntegrationIcon = React52.useMemo(() => (integration) => {
21950
+ const renderIntegrationIcon = React52.useCallback((integration) => {
21722
21951
  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;
21952
+ if (!integration.icon) return null;
21953
+ return /* @__PURE__ */ jsxRuntime.jsx(
21954
+ img.Img,
21955
+ {
21956
+ src: integration.icon,
21957
+ alt: integration.iconAlt || (typeof integration.title === "string" ? integration.title : "Integration icon"),
21958
+ className: cn("h-auto w-7", integration.iconClassName),
21959
+ loading: "lazy",
21960
+ optixFlowConfig
21961
+ }
21962
+ );
21736
21963
  }, [optixFlowConfig]);
21737
- const renderLinkLabel = React52.useMemo(() => (integration) => {
21964
+ const renderLinkLabel = React52.useCallback((integration) => {
21738
21965
  if (integration.linkLabelSlot) return integration.linkLabelSlot;
21966
+ if (!integration.linkLabel) return null;
21739
21967
  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",
21968
+ integration.linkLabel,
21741
21969
  /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-right", size: 16 })
21742
21970
  ] });
21743
21971
  }, []);
@@ -21745,10 +21973,12 @@ function FeatureIntegrationCards({
21745
21973
  if (integrationsSlot) return integrationsSlot;
21746
21974
  if (!integrations || integrations.length === 0) return null;
21747
21975
  return integrations.map((integration, index) => {
21976
+ const iconContent = renderIntegrationIcon(integration);
21977
+ const linkLabelContent = renderLinkLabel(integration);
21748
21978
  const cardContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
21749
21979
  /* @__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)
21980
+ iconContent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "grid size-12 shrink-0 place-content-center rounded-md border", children: iconContent }),
21981
+ linkLabelContent
21752
21982
  ] }),
21753
21983
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
21754
21984
  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 +22050,12 @@ function FeatureIconTabsContent({
21820
22050
  patternOpacity,
21821
22051
  patternClassName
21822
22052
  }) {
21823
- const renderTabIcon = React52.useMemo(() => (tab) => {
22053
+ const renderTabIcon = React52.useCallback((tab) => {
21824
22054
  if (tab.icon) return tab.icon;
21825
22055
  if (tab.iconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: tab.iconName, size: 16 });
21826
- return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/star", size: 16 });
22056
+ return null;
21827
22057
  }, []);
21828
- const renderTabContentActions = React52.useMemo(() => (content) => {
22058
+ const renderTabContentActions = React52.useCallback((content) => {
21829
22059
  if (content.actionsSlot) return content.actionsSlot;
21830
22060
  if (!content.actions || content.actions.length === 0) return null;
21831
22061
  return content.actions.map((action, index) => {
@@ -21865,7 +22095,7 @@ function FeatureIconTabsContent({
21865
22095
  );
21866
22096
  });
21867
22097
  }, []);
21868
- const renderTabContentImage = React52.useMemo(() => (content) => {
22098
+ const renderTabContentImage = React52.useCallback((content) => {
21869
22099
  if (content.imageSlot) return content.imageSlot;
21870
22100
  if (content.imageSrc) {
21871
22101
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -21892,7 +22122,7 @@ function FeatureIconTabsContent({
21892
22122
  value: tab.value,
21893
22123
  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
22124
  children: [
21895
- renderTabIcon(tab),
22125
+ (tab.icon || tab.iconName) && renderTabIcon(tab),
21896
22126
  tab.label
21897
22127
  ]
21898
22128
  },
@@ -21914,9 +22144,9 @@ function FeatureIconTabsContent({
21914
22144
  content.badge && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "outline", className: cn("w-fit bg-background", content.badgeClassName), children: content.badge }),
21915
22145
  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
22146
  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)
22147
+ (content.actionsSlot || content.actions && content.actions.length > 0) && renderTabContentActions(content)
21918
22148
  ] }),
21919
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-[300px] w-full lg:h-[400px]", children: renderTabContentImage(content) })
22149
+ (content.imageSlot || content.imageSrc) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-[300px] w-full lg:h-[400px]", children: renderTabContentImage(content) })
21920
22150
  ]
21921
22151
  },
21922
22152
  tab.value
@@ -21935,7 +22165,7 @@ function FeatureIconTabsContent({
21935
22165
  className,
21936
22166
  containerClassName: cn("mx-auto", containerClassName),
21937
22167
  children: [
21938
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col items-center gap-4 text-center", headerClassName), children: [
22168
+ (badge || heading || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col items-center gap-4 text-center", headerClassName), children: [
21939
22169
  badge && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "outline", className: badgeClassName, children: badge }),
21940
22170
  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
22171
  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 +22328,30 @@ function FeatureImageOverlayBadge({
22098
22328
  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
22329
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: actionsClassName, children: actionsContent })
22100
22330
  ] }),
22101
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative rounded-xl", imageWrapperClassName), children: [
22331
+ imageContent && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative rounded-xl", imageWrapperClassName), children: [
22102
22332
  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
- )
22333
+ (avatarSrc || avatarBadgeText || overlayTitle || overlayLinkText) && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22334
+ /* @__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) }),
22335
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
22336
+ (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: [
22337
+ avatarSrc && /* @__PURE__ */ jsxRuntime.jsx(Avatar, { className: "size-7 rounded-full", children: /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: "Avatar" }) }),
22338
+ avatarBadgeText
22339
+ ] }),
22340
+ (overlayTitle || overlayLinkText) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-5 text-background", children: [
22341
+ 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 })),
22342
+ overlayLinkText && /* @__PURE__ */ jsxRuntime.jsxs(
22343
+ Pressable,
22344
+ {
22345
+ href: overlayLinkUrl,
22346
+ onClick: overlayLinkOnClick,
22347
+ className: "flex items-center gap-1 font-medium",
22348
+ children: [
22349
+ overlayLinkText,
22350
+ /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
22351
+ ]
22352
+ }
22353
+ )
22354
+ ] })
22123
22355
  ] })
22124
22356
  ] })
22125
22357
  ] })
@@ -22148,7 +22380,7 @@ function FeatureCategoryImageCards({
22148
22380
  patternOpacity,
22149
22381
  patternClassName
22150
22382
  }) {
22151
- const renderFeatureImage = (feature) => {
22383
+ const renderFeatureImage = React52.useCallback((feature) => {
22152
22384
  if (feature.imageSlot) return feature.imageSlot;
22153
22385
  if (feature.imageSrc) {
22154
22386
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -22163,7 +22395,7 @@ function FeatureCategoryImageCards({
22163
22395
  );
22164
22396
  }
22165
22397
  return null;
22166
- };
22398
+ }, [optixFlowConfig]);
22167
22399
  const featuresContent = React52.useMemo(() => {
22168
22400
  if (featuresSlot) return featuresSlot;
22169
22401
  if (!features || features.length === 0) return null;
@@ -22174,7 +22406,7 @@ function FeatureCategoryImageCards({
22174
22406
  ] }),
22175
22407
  /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "px-7 pb-7", children: renderFeatureImage(feature) })
22176
22408
  ] }, index));
22177
- }, [featuresSlot, features, cardClassName, optixFlowConfig]);
22409
+ }, [featuresSlot, features, cardClassName, renderFeatureImage]);
22178
22410
  return /* @__PURE__ */ jsxRuntime.jsxs(
22179
22411
  Section,
22180
22412
  {
@@ -22215,12 +22447,12 @@ function FeatureBentoImageGrid({
22215
22447
  patternOpacity,
22216
22448
  patternClassName
22217
22449
  }) {
22218
- const renderItemIcon = React52.useMemo(() => (item) => {
22450
+ const renderItemIcon = React52__namespace.useCallback((item) => {
22219
22451
  if (item.icon) return item.icon;
22220
22452
  if (item.iconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: item.iconName, size: 24 });
22221
22453
  return null;
22222
22454
  }, []);
22223
- const renderItemImage = React52.useMemo(() => (item, imageClassName) => {
22455
+ const renderItemImage = React52__namespace.useCallback((item, imageClassName) => {
22224
22456
  if (item.imageSlot) return item.imageSlot;
22225
22457
  if (item.imageSrc) {
22226
22458
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -22236,13 +22468,15 @@ function FeatureBentoImageGrid({
22236
22468
  }
22237
22469
  return null;
22238
22470
  }, [optixFlowConfig]);
22239
- const renderLargeCard = React52.useMemo(() => (item) => {
22471
+ const renderLargeCard = React52__namespace.useCallback((item) => {
22472
+ const iconContent = renderItemIcon(item);
22473
+ const hasIconBadgeContent = iconContent || item.iconBadge;
22240
22474
  const cardContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22241
22475
  renderItemImage(item, "h-full max-h-[580px] w-full rounded-xl object-cover object-center"),
22242
22476
  /* @__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
22477
  /* @__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),
22478
+ 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: [
22479
+ iconContent,
22246
22480
  item.iconBadge
22247
22481
  ] }),
22248
22482
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-5 text-background", children: [
@@ -22266,7 +22500,9 @@ function FeatureBentoImageGrid({
22266
22500
  }
22267
22501
  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
22502
  }, [largeCardClassName, renderItemImage, renderItemIcon]);
22269
- const renderSmallCard = React52.useMemo(() => (item, index) => {
22503
+ const renderSmallCard = React52__namespace.useCallback((item, index) => {
22504
+ const iconContent = renderItemIcon(item);
22505
+ const hasIconBadgeContent = iconContent || item.iconBadge;
22270
22506
  const cardContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22271
22507
  renderItemImage(item, cn(
22272
22508
  "h-full w-full rounded-xl object-cover object-center",
@@ -22274,8 +22510,8 @@ function FeatureBentoImageGrid({
22274
22510
  )),
22275
22511
  /* @__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
22512
  /* @__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),
22513
+ 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: [
22514
+ iconContent,
22279
22515
  item.iconBadge
22280
22516
  ] }),
22281
22517
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-5 text-background", children: [
@@ -22363,34 +22599,33 @@ function FeatureImageCardsThreeColumn({
22363
22599
  patternOpacity,
22364
22600
  patternClassName
22365
22601
  }) {
22602
+ const renderImage = React52.useCallback((card, imageAlt) => {
22603
+ if (card.imageSlot) return card.imageSlot;
22604
+ if (!card.imageSrc) return null;
22605
+ return /* @__PURE__ */ jsxRuntime.jsx(
22606
+ img.Img,
22607
+ {
22608
+ src: card.imageSrc,
22609
+ alt: imageAlt,
22610
+ className: "h-full max-h-[450px] w-full rounded-xl object-cover object-center",
22611
+ loading: "lazy",
22612
+ optixFlowConfig
22613
+ }
22614
+ );
22615
+ }, [optixFlowConfig]);
22616
+ const renderBadgeIcon = React52.useCallback((card) => {
22617
+ if (card.avatarSrc) {
22618
+ return /* @__PURE__ */ jsxRuntime.jsx(Avatar, { className: "size-7 rounded-full", children: /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: card.avatarSrc, alt: "Avatar" }) });
22619
+ }
22620
+ if (card.icon) return card.icon;
22621
+ if (!card.iconName) return null;
22622
+ return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: card.iconName, size: 24 });
22623
+ }, []);
22366
22624
  const cardsContent = React52.useMemo(() => {
22367
22625
  if (cardsSlot) return cardsSlot;
22368
22626
  if (!cards || cards.length === 0) return null;
22369
22627
  return cards.map((card, index) => {
22370
22628
  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
22629
  return /* @__PURE__ */ jsxRuntime.jsxs(
22395
22630
  Pressable,
22396
22631
  {
@@ -22398,10 +22633,10 @@ function FeatureImageCardsThreeColumn({
22398
22633
  onClick: card.onClick,
22399
22634
  className: cn("group relative overflow-hidden rounded-xl", cardClassName, card.className),
22400
22635
  children: [
22401
- renderImage(),
22636
+ renderImage(card, imageAlt),
22402
22637
  /* @__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
22638
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
22404
- /* @__PURE__ */ jsxRuntime.jsxs(
22639
+ (card.badgeText || card.avatarSrc || card.icon || card.iconName) && /* @__PURE__ */ jsxRuntime.jsxs(
22405
22640
  "span",
22406
22641
  {
22407
22642
  className: cn(
@@ -22410,7 +22645,7 @@ function FeatureImageCardsThreeColumn({
22410
22645
  card.badgeClassName
22411
22646
  ),
22412
22647
  children: [
22413
- renderBadgeIcon(),
22648
+ renderBadgeIcon(card),
22414
22649
  card.badgeText
22415
22650
  ]
22416
22651
  }
@@ -22428,7 +22663,7 @@ function FeatureImageCardsThreeColumn({
22428
22663
  index
22429
22664
  );
22430
22665
  });
22431
- }, [cardsSlot, cards, cardClassName, optixFlowConfig]);
22666
+ }, [cardsSlot, cards, cardClassName, renderImage, renderBadgeIcon]);
22432
22667
  return /* @__PURE__ */ jsxRuntime.jsxs(
22433
22668
  Section,
22434
22669
  {
@@ -22465,11 +22700,11 @@ function FeatureIconGridMuted({
22465
22700
  patternOpacity,
22466
22701
  patternClassName
22467
22702
  }) {
22468
- const renderFeatureIcon = (feature) => {
22703
+ const renderFeatureIcon = React52.useCallback((feature) => {
22469
22704
  if (feature.icon) return feature.icon;
22470
22705
  if (feature.iconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: feature.iconName, size: 24, className: feature.iconClassName });
22471
22706
  return null;
22472
- };
22707
+ }, []);
22473
22708
  const featuresContent = React52.useMemo(() => {
22474
22709
  if (featuresSlot) return featuresSlot;
22475
22710
  if (!features || features.length === 0) return null;
@@ -22478,14 +22713,14 @@ function FeatureIconGridMuted({
22478
22713
  {
22479
22714
  className: cn("flex flex-col gap-2.5 rounded-xl border bg-background p-7", cardClassName, feature.className),
22480
22715
  children: [
22481
- renderFeatureIcon(feature),
22716
+ (feature.icon || feature.iconName) && renderFeatureIcon(feature),
22482
22717
  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
22718
  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
22719
  ]
22485
22720
  },
22486
22721
  index
22487
22722
  ));
22488
- }, [featuresSlot, features, cardClassName]);
22723
+ }, [featuresSlot, features, cardClassName, renderFeatureIcon]);
22489
22724
  return /* @__PURE__ */ jsxRuntime.jsx(
22490
22725
  Section,
22491
22726
  {
@@ -22497,11 +22732,11 @@ function FeatureIconGridMuted({
22497
22732
  className: cn("bg-muted/60", className),
22498
22733
  containerClassName,
22499
22734
  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: [
22735
+ (title || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto flex max-w-xl flex-col gap-2.5 text-center", headerClassName), children: [
22501
22736
  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
22737
  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
22738
  ] }),
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 })
22739
+ (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
22740
  ] })
22506
22741
  }
22507
22742
  );
@@ -22534,37 +22769,25 @@ function FeatureStatsHighlight({
22534
22769
  if (actionsSlot) return actionsSlot;
22535
22770
  if (!actions || actions.length === 0) return null;
22536
22771
  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(
22772
+ const {
22773
+ label,
22774
+ icon,
22775
+ iconAfter,
22776
+ children,
22777
+ className: actionClassName,
22778
+ ...pressableProps
22779
+ } = action;
22780
+ return /* @__PURE__ */ jsxRuntime.jsx(
22554
22781
  Pressable,
22555
22782
  {
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"],
22783
+ className: cn("mt-4 w-fit gap-2", actionClassName),
22562
22784
  asButton: true,
22563
- children: [
22564
- action.icon,
22565
- action.label,
22566
- action.iconAfter
22567
- ]
22785
+ ...pressableProps,
22786
+ children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22787
+ icon,
22788
+ label,
22789
+ iconAfter
22790
+ ] })
22568
22791
  },
22569
22792
  index
22570
22793
  );
@@ -22578,8 +22801,8 @@ function FeatureStatsHighlight({
22578
22801
  {
22579
22802
  className: cn("flex flex-col gap-2 rounded-xl border bg-muted/30 p-6", statCardClassName, stat.className),
22580
22803
  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 })
22804
+ stat.value && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-4xl font-bold text-primary lg:text-5xl", stat.valueClassName), children: stat.value }),
22805
+ stat.label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-muted-foreground", stat.labelClassName), children: stat.label })
22583
22806
  ]
22584
22807
  },
22585
22808
  index
@@ -22600,9 +22823,9 @@ function FeatureStatsHighlight({
22600
22823
  badge && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "outline", className: cn("w-fit", badgeClassName), children: badge }),
22601
22824
  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
22825
  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 })
22826
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: actionsClassName, children: actionsContent })
22604
22827
  ] }),
22605
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("grid grid-cols-2 gap-6", statsGridClassName), children: statsContent })
22828
+ (statsSlot || stats && stats.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("grid grid-cols-2 gap-6", statsGridClassName), children: statsContent })
22606
22829
  ] })
22607
22830
  }
22608
22831
  );
@@ -22666,7 +22889,7 @@ function FeatureAccordionImage({
22666
22889
  description,
22667
22890
  items,
22668
22891
  itemsSlot,
22669
- defaultValue = "item-0",
22892
+ defaultValue,
22670
22893
  className,
22671
22894
  containerClassName,
22672
22895
  headerClassName,
@@ -22683,24 +22906,25 @@ function FeatureAccordionImage({
22683
22906
  patternOpacity,
22684
22907
  patternClassName
22685
22908
  }) {
22686
- const [activeItem, setActiveItem] = React52__namespace.useState(defaultValue);
22909
+ const [activeItem, setActiveItem] = React52__namespace.useState(defaultValue || "item-0");
22687
22910
  const activeIndex = parseInt(activeItem.replace("item-", ""), 10) || 0;
22688
22911
  const currentImage = items?.[activeIndex] || items?.[0];
22689
22912
  const accordionItemsContent = React52.useMemo(() => {
22690
22913
  if (itemsSlot) return itemsSlot;
22691
22914
  if (!items || items.length === 0) return null;
22692
22915
  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 })
22916
+ item.title && /* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { className: cn("text-left text-lg font-medium", item.triggerClassName), children: item.title }),
22917
+ item.content && /* @__PURE__ */ jsxRuntime.jsx(AccordionContent, { className: cn("text-muted-foreground", item.contentClassName), children: item.content })
22695
22918
  ] }, index));
22696
22919
  }, [itemsSlot, items]);
22697
22920
  const imageContent = React52.useMemo(() => {
22698
22921
  if (currentImage?.imageSlot) return currentImage.imageSlot;
22922
+ if (!currentImage?.imageSrc) return null;
22699
22923
  return /* @__PURE__ */ jsxRuntime.jsx(
22700
22924
  img.Img,
22701
22925
  {
22702
- src: currentImage?.imageSrc || "",
22703
- alt: currentImage?.imageAlt || "",
22926
+ src: currentImage.imageSrc,
22927
+ alt: currentImage.imageAlt || "",
22704
22928
  className: cn("h-full w-full object-cover transition-opacity duration-300", imageClassName),
22705
22929
  loading: "lazy",
22706
22930
  optixFlowConfig
@@ -22718,11 +22942,11 @@ function FeatureAccordionImage({
22718
22942
  className,
22719
22943
  containerClassName,
22720
22944
  children: [
22721
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-12 text-center", headerClassName), children: [
22945
+ (title || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-12 text-center", headerClassName), children: [
22722
22946
  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
22947
  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
22948
  ] }),
22725
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid gap-10 lg:grid-cols-2 lg:gap-16", gridClassName), children: [
22949
+ (itemsSlot || items && items.length > 0) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid gap-10 lg:grid-cols-2 lg:gap-16", gridClassName), children: [
22726
22950
  /* @__PURE__ */ jsxRuntime.jsx(
22727
22951
  Accordion,
22728
22952
  {
@@ -22757,49 +22981,52 @@ function FeatureCapabilitiesGrid({
22757
22981
  patternOpacity,
22758
22982
  patternClassName
22759
22983
  }) {
22760
- const renderItemIcon = (item) => {
22984
+ const renderItemIcon = React52__namespace.useCallback((item) => {
22761
22985
  if (item.icon) return item.icon;
22762
22986
  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
- };
22987
+ return null;
22988
+ }, []);
22765
22989
  const itemsContent = React52.useMemo(() => {
22766
22990
  if (itemsSlot) return itemsSlot;
22767
22991
  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]);
22992
+ return items.map((item, index) => {
22993
+ const iconContent = renderItemIcon(item);
22994
+ return /* @__PURE__ */ jsxRuntime.jsxs(
22995
+ Card,
22996
+ {
22997
+ 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),
22998
+ children: [
22999
+ /* @__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" }) }),
23000
+ /* @__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" }),
23001
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pointer-events-none absolute inset-0 hidden group-hover:block", children: [
23002
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -left-2 -top-2 h-3 w-3 bg-white" }),
23003
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -right-2 -top-2 h-3 w-3 bg-white" }),
23004
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -left-2 -bottom-2 h-3 w-3 bg-white" }),
23005
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -right-2 -bottom-2 h-3 w-3 bg-white" })
23006
+ ] }),
23007
+ /* @__PURE__ */ jsxRuntime.jsxs(CardHeader, { className: "relative z-10 flex flex-row items-start gap-3 p-6", children: [
23008
+ 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 }),
23009
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
23010
+ 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 })),
23011
+ 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 })
23012
+ ] }) })
23013
+ ] }),
23014
+ 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 }),
23015
+ /* @__PURE__ */ jsxRuntime.jsx(
23016
+ framerMotion.motion.div,
23017
+ {
23018
+ className: "pointer-events-none absolute inset-0 rounded-xl ring-0 ring-white/0",
23019
+ initial: { opacity: 0 },
23020
+ whileHover: { opacity: 1 },
23021
+ transition: { duration: 0.25 }
23022
+ }
23023
+ )
23024
+ ]
23025
+ },
23026
+ `${typeof item.title === "string" ? item.title : "item"}-${index}`
23027
+ );
23028
+ });
23029
+ }, [itemsSlot, items, cardClassName, renderItemIcon]);
22803
23030
  return /* @__PURE__ */ jsxRuntime.jsxs(
22804
23031
  Section,
22805
23032
  {
@@ -39411,7 +39638,7 @@ function CommunityInitiatives({
39411
39638
  }
39412
39639
  );
39413
39640
  }
39414
- var Controls = ({
39641
+ var Controls = React52__namespace.memo(({
39415
39642
  handleNext,
39416
39643
  handlePrevious,
39417
39644
  isPreviousDisabled,
@@ -39439,9 +39666,9 @@ var Controls = ({
39439
39666
  }
39440
39667
  )
39441
39668
  ] });
39442
- };
39443
- var FeatureCard = ({ feature, isActive, onClick }) => {
39444
- const variants2 = {
39669
+ });
39670
+ var FeatureCard = React52__namespace.memo(({ feature, isActive, onClick }) => {
39671
+ const variants2 = React52.useMemo(() => ({
39445
39672
  initial: {
39446
39673
  opacity: 0
39447
39674
  },
@@ -39451,7 +39678,7 @@ var FeatureCard = ({ feature, isActive, onClick }) => {
39451
39678
  exit: {
39452
39679
  opacity: 0
39453
39680
  }
39454
- };
39681
+ }), []);
39455
39682
  return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "popLayout", children: /* @__PURE__ */ jsxRuntime.jsx(
39456
39683
  framerMotion.motion.div,
39457
39684
  {
@@ -39481,13 +39708,13 @@ var FeatureCard = ({ feature, isActive, onClick }) => {
39481
39708
  ease: "easeOut"
39482
39709
  },
39483
39710
  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: [
39711
+ children: (feature.title || feature.description) && /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
39712
+ feature.title && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-semibold", children: [
39486
39713
  feature.title,
39487
39714
  "."
39488
39715
  ] }),
39489
- " ",
39490
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: feature.description })
39716
+ feature.title && feature.description && " ",
39717
+ feature.description && /* @__PURE__ */ jsxRuntime.jsx("span", { children: feature.description })
39491
39718
  ] })
39492
39719
  },
39493
39720
  `feature-description-active-${feature.title}`
@@ -39521,15 +39748,15 @@ var FeatureCard = ({ feature, isActive, onClick }) => {
39521
39748
  className: "shrink-0"
39522
39749
  }
39523
39750
  ),
39524
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "shrink-0 font-semibold", children: feature.title })
39751
+ feature.title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "shrink-0 font-semibold", children: feature.title })
39525
39752
  ]
39526
39753
  },
39527
39754
  `feature-description-inactive-${feature.title}`
39528
39755
  )
39529
39756
  }
39530
39757
  ) });
39531
- };
39532
- var FeaturesDesktop = ({
39758
+ });
39759
+ var FeaturesDesktop = React52__namespace.memo(({
39533
39760
  features,
39534
39761
  handleNext,
39535
39762
  handlePrevious,
@@ -39560,8 +39787,8 @@ var FeaturesDesktop = ({
39560
39787
  );
39561
39788
  }) })
39562
39789
  ] });
39563
- };
39564
- var FeaturesMobile = ({
39790
+ });
39791
+ var FeaturesMobile = React52__namespace.memo(({
39565
39792
  features,
39566
39793
  handleNext,
39567
39794
  handlePrevious,
@@ -39570,7 +39797,7 @@ var FeaturesMobile = ({
39570
39797
  isPreviousDisabled,
39571
39798
  isNextDisabled
39572
39799
  }) => {
39573
- const variants2 = {
39800
+ const variants2 = React52.useMemo(() => ({
39574
39801
  enter: (direction2) => ({
39575
39802
  x: direction2 > 0 ? 100 : -100,
39576
39803
  opacity: 0
@@ -39583,7 +39810,8 @@ var FeaturesMobile = ({
39583
39810
  x: direction2 < 0 ? 100 : -100,
39584
39811
  opacity: 0
39585
39812
  })
39586
- };
39813
+ }), []);
39814
+ const currentFeature = features[activeIndex];
39587
39815
  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
39816
  /* @__PURE__ */ jsxRuntime.jsx(
39589
39817
  "button",
@@ -39608,13 +39836,13 @@ var FeaturesMobile = ({
39608
39836
  opacity: { duration: 0.2 }
39609
39837
  },
39610
39838
  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,
39839
+ children: (currentFeature?.title || currentFeature?.description) && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-center text-sm", children: [
39840
+ currentFeature.title && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-semibold", children: [
39841
+ currentFeature.title,
39614
39842
  "."
39615
39843
  ] }),
39616
- " ",
39617
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: features[activeIndex].description })
39844
+ currentFeature.title && currentFeature.description && " ",
39845
+ currentFeature.description && /* @__PURE__ */ jsxRuntime.jsx("span", { children: currentFeature.description })
39618
39846
  ] })
39619
39847
  },
39620
39848
  activeIndex
@@ -39630,9 +39858,9 @@ var FeaturesMobile = ({
39630
39858
  }
39631
39859
  )
39632
39860
  ] }) });
39633
- };
39861
+ });
39634
39862
  function FeatureAnimatedCarousel({
39635
- features = [],
39863
+ features,
39636
39864
  className,
39637
39865
  optixFlowConfig,
39638
39866
  background,
@@ -39643,25 +39871,25 @@ function FeatureAnimatedCarousel({
39643
39871
  }) {
39644
39872
  const [activeIndex, setActiveIndex] = React52__namespace.useState(0);
39645
39873
  const [direction, setDirection] = React52__namespace.useState(1);
39646
- const handleNext = () => {
39647
- if (activeIndex < features.length - 1) {
39874
+ const handleNext = React52.useCallback(() => {
39875
+ if (features && activeIndex < features.length - 1) {
39648
39876
  setDirection(1);
39649
39877
  setActiveIndex(activeIndex + 1);
39650
39878
  }
39651
- };
39652
- const handlePrevious = () => {
39879
+ }, [activeIndex, features]);
39880
+ const handlePrevious = React52.useCallback(() => {
39653
39881
  if (activeIndex > 0) {
39654
39882
  setDirection(-1);
39655
39883
  setActiveIndex(activeIndex - 1);
39656
39884
  }
39657
- };
39658
- const handleFeatureClick = (index) => {
39885
+ }, [activeIndex]);
39886
+ const handleFeatureClick = React52.useCallback((index) => {
39659
39887
  setDirection(index > activeIndex ? 1 : -1);
39660
39888
  setActiveIndex(index);
39661
- };
39889
+ }, [activeIndex]);
39662
39890
  const isPreviousDisabled = activeIndex === 0;
39663
- const isNextDisabled = activeIndex === features.length - 1;
39664
- const imageVariants = {
39891
+ const isNextDisabled = !features || activeIndex === features.length - 1;
39892
+ const imageVariants = React52.useMemo(() => ({
39665
39893
  enter: (direction2) => ({
39666
39894
  x: direction2 > 0 ? 300 : -300,
39667
39895
  opacity: 0
@@ -39674,7 +39902,22 @@ function FeatureAnimatedCarousel({
39674
39902
  x: direction2 < 0 ? 300 : -300,
39675
39903
  opacity: 0
39676
39904
  })
39677
- };
39905
+ }), []);
39906
+ if (!features || features.length === 0) {
39907
+ return /* @__PURE__ */ jsxRuntime.jsx(
39908
+ Section,
39909
+ {
39910
+ background,
39911
+ spacing,
39912
+ pattern,
39913
+ patternOpacity,
39914
+ patternClassName,
39915
+ className,
39916
+ 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]" })
39917
+ }
39918
+ );
39919
+ }
39920
+ const currentFeature = features[activeIndex];
39678
39921
  return /* @__PURE__ */ jsxRuntime.jsx(
39679
39922
  Section,
39680
39923
  {
@@ -39685,7 +39928,7 @@ function FeatureAnimatedCarousel({
39685
39928
  patternClassName,
39686
39929
  className,
39687
39930
  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(
39931
+ /* @__PURE__ */ jsxRuntime.jsx(
39689
39932
  FeaturesDesktop,
39690
39933
  {
39691
39934
  features,
@@ -39697,7 +39940,7 @@ function FeatureAnimatedCarousel({
39697
39940
  isNextDisabled
39698
39941
  }
39699
39942
  ),
39700
- features && /* @__PURE__ */ jsxRuntime.jsx(
39943
+ /* @__PURE__ */ jsxRuntime.jsx(
39701
39944
  FeaturesMobile,
39702
39945
  {
39703
39946
  features,
@@ -39709,7 +39952,7 @@ function FeatureAnimatedCarousel({
39709
39952
  isNextDisabled
39710
39953
  }
39711
39954
  ),
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(
39955
+ 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
39956
  framerMotion.motion.div,
39714
39957
  {
39715
39958
  custom: direction,
@@ -39725,8 +39968,8 @@ function FeatureAnimatedCarousel({
39725
39968
  children: /* @__PURE__ */ jsxRuntime.jsx(
39726
39969
  img.Img,
39727
39970
  {
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,
39971
+ src: currentFeature.image,
39972
+ alt: currentFeature.imageAlt || (typeof currentFeature.title === "string" ? currentFeature.title : "Feature image"),
39730
39973
  className: "h-full w-full object-cover",
39731
39974
  optixFlowConfig
39732
39975
  }
@@ -62340,22 +62583,29 @@ var NavbarTabbedSections = ({
62340
62583
  ]
62341
62584
  }
62342
62585
  ) }),
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
- ] })
62586
+ /* @__PURE__ */ jsxRuntime.jsxs(
62587
+ SheetContent,
62588
+ {
62589
+ side: "right",
62590
+ className: "w-[300px] overflow-y-auto",
62591
+ children: [
62592
+ /* @__PURE__ */ jsxRuntime.jsx(SheetTitle, { className: "sr-only", children: "Navigation Menu" }),
62593
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 pt-8", children: [
62594
+ renderMobileMenu,
62595
+ /* @__PURE__ */ jsxRuntime.jsx(
62596
+ "div",
62597
+ {
62598
+ className: cn(
62599
+ "mt-4 flex flex-col gap-2 border-t pt-4",
62600
+ actionsClassName
62601
+ ),
62602
+ children: renderAuthActions
62603
+ }
62604
+ )
62605
+ ] })
62606
+ ]
62607
+ }
62608
+ )
62359
62609
  ] })
62360
62610
  ]
62361
62611
  }
@@ -77314,7 +77564,7 @@ function ListSearchableGrid({
77314
77564
  }
77315
77565
  );
77316
77566
  }
77317
- var { useMemo: useMemo441 } = React52__namespace;
77567
+ var { useMemo: useMemo443 } = React52__namespace;
77318
77568
  function OfferModalNewsletterDiscount({
77319
77569
  title,
77320
77570
  emailPlaceholder,
@@ -77381,7 +77631,7 @@ function OfferModalNewsletterDiscount({
77381
77631
  });
77382
77632
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
77383
77633
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
77384
- const renderCloseButton = useMemo441(() => {
77634
+ const renderCloseButton = useMemo443(() => {
77385
77635
  if (closeButtonSlot) return closeButtonSlot;
77386
77636
  if (!closeButtonText) return null;
77387
77637
  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 +77645,12 @@ function OfferModalNewsletterDiscount({
77395
77645
  }
77396
77646
  ) }) });
77397
77647
  }, [closeButtonSlot, closeButtonText, closeClassName]);
77398
- const renderHeader = useMemo441(() => {
77648
+ const renderHeader = useMemo443(() => {
77399
77649
  if (headerSlot) return headerSlot;
77400
77650
  if (!title) return null;
77401
77651
  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
77652
  }, [headerSlot, title, headerClassName, titleClassName]);
77403
- const renderForm = useMemo441(() => {
77653
+ const renderForm = useMemo443(() => {
77404
77654
  if (formSlot) return formSlot;
77405
77655
  return /* @__PURE__ */ jsxRuntime.jsxs(
77406
77656
  forms.Form,
@@ -77462,7 +77712,7 @@ function OfferModalNewsletterDiscount({
77462
77712
  }
77463
77713
  ) });
77464
77714
  }
77465
- var { useMemo: useMemo442 } = React52__namespace;
77715
+ var { useMemo: useMemo444 } = React52__namespace;
77466
77716
  function OfferModalMembershipImage({
77467
77717
  overline,
77468
77718
  title,
@@ -77538,7 +77788,7 @@ function OfferModalMembershipImage({
77538
77788
  });
77539
77789
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
77540
77790
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
77541
- const renderImage = useMemo442(() => {
77791
+ const renderImage = useMemo444(() => {
77542
77792
  if (imageSlot) return imageSlot;
77543
77793
  if (!image) return null;
77544
77794
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("max-h-[290px] h-full overflow-hidden max-lg:hidden", imageWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -77551,7 +77801,7 @@ function OfferModalMembershipImage({
77551
77801
  }
77552
77802
  ) });
77553
77803
  }, [imageSlot, image, imageWrapperClassName, imageClassName, optixFlowConfig]);
77554
- const renderCloseButton = useMemo442(() => {
77804
+ const renderCloseButton = useMemo444(() => {
77555
77805
  if (closeButtonSlot) return closeButtonSlot;
77556
77806
  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
77807
  Pressable,
@@ -77567,7 +77817,7 @@ function OfferModalMembershipImage({
77567
77817
  }
77568
77818
  ) }) });
77569
77819
  }, [closeButtonSlot, closeClassName]);
77570
- const renderForm = useMemo442(() => {
77820
+ const renderForm = useMemo444(() => {
77571
77821
  if (formSlot) return formSlot;
77572
77822
  return /* @__PURE__ */ jsxRuntime.jsxs(
77573
77823
  forms.Form,
@@ -77630,7 +77880,7 @@ function OfferModalMembershipImage({
77630
77880
  }
77631
77881
  );
77632
77882
  }, [formSlot, form, formConfig, formMethod, emailPlaceholder, inputClassName, submitClassName, buttonText, formClassName]);
77633
- const renderFooter = useMemo442(() => {
77883
+ const renderFooter = useMemo444(() => {
77634
77884
  if (footerSlot) return footerSlot;
77635
77885
  if (!description) return null;
77636
77886
  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 +77908,7 @@ function OfferModalMembershipImage({
77658
77908
  }
77659
77909
  ) });
77660
77910
  }
77661
- var { useMemo: useMemo443 } = React52__namespace;
77911
+ var { useMemo: useMemo445 } = React52__namespace;
77662
77912
  function OfferModalSheetNewsletter({
77663
77913
  logo,
77664
77914
  logoSlot,
@@ -77740,7 +77990,7 @@ function OfferModalSheetNewsletter({
77740
77990
  });
77741
77991
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
77742
77992
  const sheetProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
77743
- const renderLogo = useMemo443(() => {
77993
+ const renderLogo = useMemo445(() => {
77744
77994
  if (logoSlot) return logoSlot;
77745
77995
  if (!logo) return null;
77746
77996
  const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
@@ -77754,7 +78004,7 @@ function OfferModalSheetNewsletter({
77754
78004
  }
77755
78005
  );
77756
78006
  }, [logoSlot, logo, logoClassName, optixFlowConfig]);
77757
- const renderHeader = useMemo443(() => {
78007
+ const renderHeader = useMemo445(() => {
77758
78008
  if (headerSlot) return headerSlot;
77759
78009
  return /* @__PURE__ */ jsxRuntime.jsxs(SheetHeader, { className: cn("gap-8 p-0", headerClassName), children: [
77760
78010
  renderLogo,
@@ -77764,7 +78014,7 @@ function OfferModalSheetNewsletter({
77764
78014
  ] })
77765
78015
  ] });
77766
78016
  }, [headerSlot, renderLogo, headerClassName, title, titleClassName, description, descriptionClassName]);
77767
- const renderForm = useMemo443(() => {
78017
+ const renderForm = useMemo445(() => {
77768
78018
  if (formSlot) return formSlot;
77769
78019
  return /* @__PURE__ */ jsxRuntime.jsx(
77770
78020
  forms.Form,
@@ -77812,7 +78062,7 @@ function OfferModalSheetNewsletter({
77812
78062
  }
77813
78063
  );
77814
78064
  }, [formSlot, form, formConfig, formMethod, emailPlaceholder, inputClassName, submitClassName, buttonText, formClassName]);
77815
- const renderLegal = useMemo443(() => {
78065
+ const renderLegal = useMemo445(() => {
77816
78066
  if (legalSlot) return legalSlot;
77817
78067
  if (!termsUrl || !termsText || !privacyUrl || !privacyText) return null;
77818
78068
  return /* @__PURE__ */ jsxRuntime.jsxs("p", { className: cn("text-muted-foreground text-xs", legalClassName), children: [
@@ -77826,7 +78076,7 @@ function OfferModalSheetNewsletter({
77826
78076
  "."
77827
78077
  ] });
77828
78078
  }, [legalSlot, termsUrl, termsText, privacyUrl, privacyText, legalClassName]);
77829
- const renderImage = useMemo443(() => {
78079
+ const renderImage = useMemo445(() => {
77830
78080
  if (imageSlot) return imageSlot;
77831
78081
  if (!image) return null;
77832
78082
  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(