@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.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import * as React52 from 'react';
2
- import React52__default, { Fragment, createContext, forwardRef, useMemo as useMemo$1, useState, useCallback, useRef, useEffect, startTransition, useContext } from 'react';
2
+ import React52__default, { Fragment, createContext, useMemo as useMemo$1, forwardRef, useState, useCallback, useRef, useEffect, startTransition, useContext } from 'react';
3
3
  import { clsx } from 'clsx';
4
4
  import { twMerge } from 'tailwind-merge';
5
5
  import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
6
6
  import { Img } from '@page-speed/img';
7
7
  import { cva } from 'class-variance-authority';
8
- import { motion, AnimatePresence, useMotionValue, useMotionTemplate, useSpring, useTransform, useInView, useScroll, useMotionValueEvent } from 'framer-motion';
8
+ import { AnimatePresence, motion, useMotionValue, useMotionTemplate, useSpring, useTransform, useInView, useScroll, useMotionValueEvent } from 'framer-motion';
9
9
  import * as SeparatorPrimitive from '@radix-ui/react-separator';
10
10
  import { useForm, Form, Field } from '@page-speed/forms';
11
11
  import { TextInput as TextInput$1, Select, TextArea as TextArea$1, Radio } from '@page-speed/forms/inputs';
@@ -18645,19 +18645,21 @@ function CarouselHorizontalCards({
18645
18645
  "div",
18646
18646
  {
18647
18647
  className: cn(
18648
- "flex flex-row justify-start gap-4 pl-4",
18648
+ "flex flex-row justify-start gap-2",
18649
18649
  carouselClassName
18650
18650
  ),
18651
18651
  children: [
18652
18652
  items?.map((item, index) => /* @__PURE__ */ jsx(
18653
18653
  motion.div,
18654
18654
  {
18655
- className: cn(
18656
- "rounded-lg last:pr-[5%] md:last:pr-[33%]"
18657
- ),
18655
+ className: cn("rounded-lg last:pr-[5%] md:last:pr-[33%]"),
18658
18656
  initial: { opacity: 0, y: 20 },
18659
18657
  animate: { opacity: 1, y: 0 },
18660
- transition: { duration: 0.5, delay: 0.2 * index, ease: "easeOut" },
18658
+ transition: {
18659
+ duration: 0.5,
18660
+ delay: 0.2 * index,
18661
+ ease: "easeOut"
18662
+ },
18661
18663
  children: /* @__PURE__ */ jsx(
18662
18664
  "div",
18663
18665
  {
@@ -18729,7 +18731,7 @@ function CarouselHorizontalCards({
18729
18731
  onNext: scrollRight,
18730
18732
  canScrollPrevious: !isAtStart,
18731
18733
  canScrollNext: !isAtEnd,
18732
- className: cn("mr-0 md:mr-10", navigationClassName)
18734
+ className: cn("mr-0", navigationClassName)
18733
18735
  }
18734
18736
  )
18735
18737
  ] })
@@ -18744,43 +18746,57 @@ function CarouselImageHero({
18744
18746
  actions,
18745
18747
  actionsSlot,
18746
18748
  images,
18747
- autoPlayInterval = 5e3,
18749
+ autoPlayInterval = 7500,
18748
18750
  className,
18749
- containerClassName,
18751
+ 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",
18750
18752
  contentClassName,
18751
18753
  badgeClassName,
18752
18754
  headingClassName,
18753
18755
  descriptionClassName,
18754
18756
  actionsClassName,
18755
18757
  imageClassName,
18756
- navigationClassName,
18757
18758
  indicatorsClassName,
18758
18759
  optixFlowConfig,
18759
- background = "white",
18760
- spacing = "xl",
18760
+ background,
18761
+ spacing = "py-0 md:py-32",
18761
18762
  pattern,
18762
18763
  patternOpacity
18763
18764
  }) {
18764
18765
  const [currentImageIndex, setCurrentImageIndex] = React52.useState(0);
18765
- React52.useEffect(() => {
18766
- const interval = setInterval(() => {
18767
- setCurrentImageIndex((prevIndex) => (prevIndex + 1) % (images?.length ?? 1));
18768
- }, autoPlayInterval);
18769
- return () => clearInterval(interval);
18770
- }, [images?.length, autoPlayInterval]);
18771
- const goToNextImage = () => {
18766
+ const intervalRef = React52.useRef(null);
18767
+ const goToNext = React52.useCallback(() => {
18772
18768
  setCurrentImageIndex((prevIndex) => (prevIndex + 1) % (images?.length ?? 1));
18773
- };
18774
- const goToPreviousImage = () => {
18775
- setCurrentImageIndex(
18776
- (prevIndex) => (prevIndex - 1 + (images?.length ?? 1)) % (images?.length ?? 1)
18777
- );
18778
- };
18769
+ }, [images?.length]);
18770
+ const resetInterval = React52.useCallback(() => {
18771
+ if (intervalRef.current) {
18772
+ clearInterval(intervalRef.current);
18773
+ }
18774
+ intervalRef.current = setInterval(goToNext, autoPlayInterval);
18775
+ }, [goToNext, autoPlayInterval]);
18776
+ const goToSlide = React52.useCallback((index) => {
18777
+ setCurrentImageIndex(index);
18778
+ resetInterval();
18779
+ }, [resetInterval]);
18780
+ React52.useEffect(() => {
18781
+ resetInterval();
18782
+ return () => {
18783
+ if (intervalRef.current) {
18784
+ clearInterval(intervalRef.current);
18785
+ }
18786
+ };
18787
+ }, [resetInterval]);
18779
18788
  const renderActions = () => {
18780
18789
  if (actionsSlot) return actionsSlot;
18781
18790
  if (!actions || actions.length === 0) return null;
18782
18791
  return actions.map((action, index) => {
18783
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
18792
+ const {
18793
+ label,
18794
+ icon,
18795
+ iconAfter,
18796
+ children,
18797
+ className: actionClassName,
18798
+ ...pressableProps
18799
+ } = action;
18784
18800
  return /* @__PURE__ */ jsx(
18785
18801
  Pressable,
18786
18802
  {
@@ -18802,11 +18818,15 @@ function CarouselImageHero({
18802
18818
  {
18803
18819
  background,
18804
18820
  spacing,
18805
- className: cn("relative min-h-[600px] overflow-hidden", className),
18821
+ className: cn(
18822
+ "relative min-h-screen md:min-h-[600px] overflow-hidden",
18823
+ className
18824
+ ),
18806
18825
  pattern,
18807
18826
  patternOpacity,
18827
+ containerClassName,
18808
18828
  children: [
18809
- /* @__PURE__ */ jsxs("div", { className: cn("absolute inset-0", imageClassName), children: [
18829
+ /* @__PURE__ */ jsxs("div", { className: cn("absolute inset-0 bg-black", imageClassName), children: [
18810
18830
  images?.map((image, index) => /* @__PURE__ */ jsxs(
18811
18831
  "div",
18812
18832
  {
@@ -18830,50 +18850,79 @@ function CarouselImageHero({
18830
18850
  index
18831
18851
  )),
18832
18852
  /* @__PURE__ */ jsx(
18833
- Pressable,
18834
- {
18835
- onClick: goToPreviousImage,
18836
- asButton: true,
18837
- variant: "ghost",
18838
- size: "icon",
18839
- 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),
18840
- "aria-label": "Previous image",
18841
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-left", size: 24, className: "text-white" })
18842
- }
18843
- ),
18844
- /* @__PURE__ */ jsx(
18845
- Pressable,
18846
- {
18847
- onClick: goToNextImage,
18848
- asButton: true,
18849
- variant: "ghost",
18850
- size: "icon",
18851
- 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),
18852
- "aria-label": "Next image",
18853
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 24, className: "text-white" })
18854
- }
18855
- ),
18856
- /* @__PURE__ */ 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__ */ jsx(
18857
- "button",
18853
+ "div",
18858
18854
  {
18859
- onClick: () => setCurrentImageIndex(index),
18860
18855
  className: cn(
18861
- "flex h-3 w-3 items-center justify-center rounded-full transition-colors",
18862
- index === currentImageIndex ? "bg-white" : "bg-white/50 hover:bg-white/80"
18856
+ "absolute bottom-6 left-1/2 z-10 flex -translate-x-1/2 gap-3",
18857
+ indicatorsClassName
18863
18858
  ),
18864
- "aria-label": `Go to image ${index + 1}`
18865
- },
18866
- index
18867
- )) })
18859
+ children: images?.map((_, index) => /* @__PURE__ */ jsx(
18860
+ "button",
18861
+ {
18862
+ onClick: () => goToSlide(index),
18863
+ className: cn(
18864
+ "flex h-4 w-4 items-center justify-center rounded-full transition-colors",
18865
+ index === currentImageIndex ? "bg-white" : "bg-white/50 hover:bg-white/80"
18866
+ ),
18867
+ "aria-label": `Go to image ${index + 1}`
18868
+ },
18869
+ index
18870
+ ))
18871
+ }
18872
+ )
18868
18873
  ] }),
18869
- /* @__PURE__ */ 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__ */ jsxs("div", { className: cn("max-w-4xl space-y-6", contentClassName), children: [
18870
- /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
18871
- badge && (typeof badge === "string" ? /* @__PURE__ */ 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__ */ jsx("span", { children: badge }) }) : /* @__PURE__ */ jsx("div", { className: badgeClassName, children: badge })),
18872
- heading && (typeof heading === "string" ? /* @__PURE__ */ 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__ */ jsx("div", { className: headingClassName, children: heading })),
18873
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-xl text-primary-foreground dark:text-primary", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
18874
- ] }),
18875
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("flex flex-col justify-center gap-4 sm:flex-row", actionsClassName), children: renderActions() })
18876
- ] }) })
18874
+ /* @__PURE__ */ jsx(
18875
+ "div",
18876
+ {
18877
+ className: cn(
18878
+ "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"
18879
+ ),
18880
+ children: /* @__PURE__ */ jsxs("div", { className: cn("max-w-4xl space-y-6", contentClassName), children: [
18881
+ /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
18882
+ badge && (typeof badge === "string" ? /* @__PURE__ */ jsx(
18883
+ "div",
18884
+ {
18885
+ className: cn(
18886
+ "inline-flex items-center rounded-full bg-white/10 px-3 py-1 text-sm font-medium text-white backdrop-blur-sm",
18887
+ badgeClassName
18888
+ ),
18889
+ children: /* @__PURE__ */ jsx("span", { children: badge })
18890
+ }
18891
+ ) : /* @__PURE__ */ jsx("div", { className: badgeClassName, children: badge })),
18892
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
18893
+ "h1",
18894
+ {
18895
+ className: cn(
18896
+ "text-4xl font-bold sm:text-5xl md:text-6xl text-balance text-shadow",
18897
+ headingClassName
18898
+ ),
18899
+ children: heading
18900
+ }
18901
+ ) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
18902
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
18903
+ "p",
18904
+ {
18905
+ className: cn(
18906
+ "text-xl text-balance text-shadow",
18907
+ descriptionClassName
18908
+ ),
18909
+ children: description
18910
+ }
18911
+ ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
18912
+ ] }),
18913
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx(
18914
+ "div",
18915
+ {
18916
+ className: cn(
18917
+ "flex flex-col justify-center gap-4 sm:flex-row",
18918
+ actionsClassName
18919
+ ),
18920
+ children: renderActions()
18921
+ }
18922
+ )
18923
+ ] })
18924
+ }
18925
+ )
18877
18926
  ]
18878
18927
  }
18879
18928
  );
@@ -19177,7 +19226,7 @@ function CarouselPortfolioHero({
19177
19226
  actionsSlot,
19178
19227
  autoPlayInterval = 5e3,
19179
19228
  className,
19180
- containerClassName,
19229
+ 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",
19181
19230
  contentClassName,
19182
19231
  tagClassName,
19183
19232
  titleClassName,
@@ -19193,23 +19242,45 @@ function CarouselPortfolioHero({
19193
19242
  slideMediaBrightness = "50"
19194
19243
  }) {
19195
19244
  const [currentIndex, setCurrentIndex] = React52.useState(0);
19245
+ const intervalRef = React52.useRef(null);
19246
+ const resetInterval = React52.useCallback(() => {
19247
+ if (intervalRef.current) {
19248
+ clearInterval(intervalRef.current);
19249
+ }
19250
+ intervalRef.current = setInterval(() => {
19251
+ setCurrentIndex((prevIndex) => (prevIndex + 1) % (slides?.length ?? 1));
19252
+ }, autoPlayInterval);
19253
+ }, [autoPlayInterval, slides?.length]);
19196
19254
  const goToNext = React52.useCallback(() => {
19197
19255
  setCurrentIndex((prevIndex) => (prevIndex + 1) % (slides?.length ?? 1));
19198
- }, [slides?.length]);
19256
+ resetInterval();
19257
+ }, [slides?.length, resetInterval]);
19199
19258
  const goToPrev = React52.useCallback(() => {
19200
19259
  setCurrentIndex(
19201
19260
  (prevIndex) => (prevIndex - 1 + (slides?.length ?? 1)) % (slides?.length ?? 1)
19202
19261
  );
19203
- }, [slides?.length]);
19262
+ resetInterval();
19263
+ }, [slides?.length, resetInterval]);
19204
19264
  React52.useEffect(() => {
19205
- const interval = setInterval(goToNext, autoPlayInterval);
19206
- return () => clearInterval(interval);
19207
- }, [goToNext, autoPlayInterval]);
19265
+ resetInterval();
19266
+ return () => {
19267
+ if (intervalRef.current) {
19268
+ clearInterval(intervalRef.current);
19269
+ }
19270
+ };
19271
+ }, [resetInterval]);
19208
19272
  const renderActions = () => {
19209
19273
  if (actionsSlot) return actionsSlot;
19210
19274
  if (!actions || actions.length === 0) return null;
19211
19275
  return actions.map((action, index) => {
19212
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
19276
+ const {
19277
+ label,
19278
+ icon,
19279
+ iconAfter,
19280
+ children,
19281
+ className: actionClassName,
19282
+ ...pressableProps
19283
+ } = action;
19213
19284
  return /* @__PURE__ */ jsx(
19214
19285
  Pressable,
19215
19286
  {
@@ -19235,6 +19306,7 @@ function CarouselPortfolioHero({
19235
19306
  className: cn("relative h-screen w-full overflow-hidden", className),
19236
19307
  pattern,
19237
19308
  patternOpacity,
19309
+ containerClassName,
19238
19310
  children: [
19239
19311
  slidesSlot ? slidesSlot : slides?.map((slide, index) => /* @__PURE__ */ jsx(
19240
19312
  "div",
@@ -19260,43 +19332,99 @@ function CarouselPortfolioHero({
19260
19332
  },
19261
19333
  slide.id
19262
19334
  )),
19263
- /* @__PURE__ */ 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__ */ jsx("div", { className: "container mx-auto", children: /* @__PURE__ */ jsxs("div", { className: cn("max-w-4xl", contentClassName), children: [
19264
- currentSlide?.tag && /* @__PURE__ */ jsx("div", { className: "mb-4", children: typeof currentSlide.tag === "string" ? /* @__PURE__ */ jsx("span", { className: cn("inline-block rounded-full bg-primary px-3 py-1 text-sm font-medium", tagClassName), children: currentSlide.tag }) : /* @__PURE__ */ jsx("div", { className: tagClassName, children: currentSlide.tag }) }),
19265
- currentSlide?.title && (typeof currentSlide.title === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("text-4xl font-bold sm:text-5xl md:text-6xl", titleClassName), children: currentSlide.title }) : /* @__PURE__ */ jsx("div", { className: titleClassName, children: currentSlide.title })),
19266
- currentSlide?.description && (typeof currentSlide.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-lg text-white/80 sm:text-xl md:max-w-2xl", descriptionClassName), children: currentSlide.description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: currentSlide.description })),
19267
- /* @__PURE__ */ jsxs("div", { className: cn("mt-8 flex items-center gap-4", actionsClassName), children: [
19268
- renderActions(),
19269
- /* @__PURE__ */ jsxs("div", { className: cn("ml-auto flex items-center gap-2", navigationClassName), children: [
19270
- /* @__PURE__ */ jsx(
19271
- Pressable,
19335
+ /* @__PURE__ */ jsx(
19336
+ "div",
19337
+ {
19338
+ className: cn(
19339
+ "relative z-10 flex h-full w-full flex-col justify-end px-6 pb-16 text-white md:px-8 lg:px-12"
19340
+ ),
19341
+ children: /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs("div", { className: cn("max-w-4xl", contentClassName), children: [
19342
+ currentSlide?.tag && /* @__PURE__ */ jsx("div", { className: "mb-4", children: typeof currentSlide.tag === "string" ? /* @__PURE__ */ jsx(
19343
+ "span",
19272
19344
  {
19273
- variant: "outline",
19274
- size: "icon",
19275
- className: "rounded-full border-white/40 bg-black/30 text-white hover:bg-black/50 hover:text-white",
19276
- onClick: goToPrev,
19277
- asButton: true,
19278
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-left", size: 20 })
19345
+ className: cn(
19346
+ "inline-block rounded-full bg-primary px-3 py-1 text-sm font-medium",
19347
+ tagClassName
19348
+ ),
19349
+ children: currentSlide.tag
19279
19350
  }
19280
- ),
19281
- /* @__PURE__ */ jsx(
19282
- Pressable,
19351
+ ) : /* @__PURE__ */ jsx("div", { className: tagClassName, children: currentSlide.tag }) }),
19352
+ currentSlide?.title && (typeof currentSlide.title === "string" ? /* @__PURE__ */ jsx(
19353
+ "h1",
19283
19354
  {
19284
- variant: "outline",
19285
- size: "icon",
19286
- className: "rounded-full border-white/40 bg-black/30 text-white hover:bg-black/50 hover:text-white",
19287
- onClick: goToNext,
19288
- asButton: true,
19289
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 20 })
19355
+ className: cn(
19356
+ "text-4xl font-bold sm:text-5xl md:text-6xl text-balance text-shadow",
19357
+ titleClassName
19358
+ ),
19359
+ children: currentSlide.title
19290
19360
  }
19291
- ),
19292
- /* @__PURE__ */ jsxs("div", { className: cn("ml-3 text-sm text-white/80", counterClassName), children: [
19293
- currentIndex + 1,
19294
- " / ",
19295
- slides?.length ?? 0
19296
- ] })
19297
- ] })
19298
- ] })
19299
- ] }) }) })
19361
+ ) : /* @__PURE__ */ jsx("div", { className: titleClassName, children: currentSlide.title })),
19362
+ currentSlide?.description && (typeof currentSlide.description === "string" ? /* @__PURE__ */ jsx(
19363
+ "p",
19364
+ {
19365
+ className: cn(
19366
+ "mt-4 text-lg text-white/80 sm:text-xl md:max-w-2xl text-balance text-shadow",
19367
+ descriptionClassName
19368
+ ),
19369
+ children: currentSlide.description
19370
+ }
19371
+ ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: currentSlide.description })),
19372
+ /* @__PURE__ */ jsxs(
19373
+ "div",
19374
+ {
19375
+ className: cn("mt-8 flex items-center gap-4", actionsClassName),
19376
+ children: [
19377
+ renderActions(),
19378
+ /* @__PURE__ */ jsxs(
19379
+ "div",
19380
+ {
19381
+ className: cn(
19382
+ "ml-auto flex items-center gap-2",
19383
+ navigationClassName
19384
+ ),
19385
+ children: [
19386
+ /* @__PURE__ */ jsx(
19387
+ Pressable,
19388
+ {
19389
+ variant: "outline",
19390
+ size: "icon",
19391
+ className: "rounded-full border-white/40 bg-black/30 text-white hover:bg-black/50 hover:text-white",
19392
+ onClick: goToPrev,
19393
+ asButton: true,
19394
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-left", size: 20 })
19395
+ }
19396
+ ),
19397
+ /* @__PURE__ */ jsx(
19398
+ Pressable,
19399
+ {
19400
+ variant: "outline",
19401
+ size: "icon",
19402
+ className: "rounded-full border-white/40 bg-black/30 text-white hover:bg-black/50 hover:text-white",
19403
+ onClick: goToNext,
19404
+ asButton: true,
19405
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 20 })
19406
+ }
19407
+ ),
19408
+ /* @__PURE__ */ jsxs(
19409
+ "div",
19410
+ {
19411
+ className: cn("ml-3 text-sm text-white/80", counterClassName),
19412
+ children: [
19413
+ currentIndex + 1,
19414
+ " / ",
19415
+ slides?.length ?? 0
19416
+ ]
19417
+ }
19418
+ )
19419
+ ]
19420
+ }
19421
+ )
19422
+ ]
19423
+ }
19424
+ )
19425
+ ] }) })
19426
+ }
19427
+ )
19300
19428
  ]
19301
19429
  }
19302
19430
  );
@@ -19320,8 +19448,8 @@ function CarouselProductFeatureShowcase({
19320
19448
  actionsClassName,
19321
19449
  indicatorsClassName,
19322
19450
  optixFlowConfig,
19323
- background = "white",
19324
- spacing = "xl",
19451
+ background,
19452
+ spacing,
19325
19453
  pattern,
19326
19454
  patternOpacity
19327
19455
  }) {
@@ -19365,7 +19493,14 @@ function CarouselProductFeatureShowcase({
19365
19493
  if (actionsSlot) return actionsSlot;
19366
19494
  if (!actions || actions.length === 0) return null;
19367
19495
  return /* @__PURE__ */ jsx("div", { className: "mt-8 flex flex-wrap gap-3", children: actions.map((action, index) => {
19368
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
19496
+ const {
19497
+ label,
19498
+ icon,
19499
+ iconAfter,
19500
+ children,
19501
+ className: actionClassName,
19502
+ ...pressableProps
19503
+ } = action;
19369
19504
  return /* @__PURE__ */ jsx(
19370
19505
  Pressable,
19371
19506
  {
@@ -19390,105 +19525,151 @@ function CarouselProductFeatureShowcase({
19390
19525
  className: cn(className),
19391
19526
  pattern,
19392
19527
  patternOpacity,
19393
- children: /* @__PURE__ */ jsxs("div", { className: cn("container mx-auto px-4", containerClassName), children: [
19528
+ children: /* @__PURE__ */ jsxs("div", { className: cn("relative", containerClassName), children: [
19394
19529
  /* @__PURE__ */ jsxs("div", { className: cn("mb-12 text-center", headerClassName), children: [
19395
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-bold tracking-tight md:text-4xl lg:text-5xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
19396
- subheading && (typeof subheading === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-lg text-muted-foreground", subheadingClassName), children: subheading }) : /* @__PURE__ */ jsx("div", { className: subheadingClassName, children: subheading }))
19397
- ] }),
19398
- featuresSlot ? /* @__PURE__ */ jsx("div", { className: contentClassName, children: featuresSlot }) : /* @__PURE__ */ jsxs("div", { className: cn("grid gap-8 lg:grid-cols-2 lg:gap-12", contentClassName), children: [
19399
- /* @__PURE__ */ jsxs("div", { className: cn("relative aspect-square overflow-hidden rounded-2xl bg-muted lg:aspect-[4/3]", imageClassName), children: [
19400
- /* @__PURE__ */ jsx(AnimatePresence, { initial: false, custom: direction, mode: "wait", children: /* @__PURE__ */ jsx(
19401
- motion.div,
19402
- {
19403
- custom: direction,
19404
- variants: slideVariants2,
19405
- initial: "enter",
19406
- animate: "center",
19407
- exit: "exit",
19408
- transition: { duration: 0.3, ease: "easeInOut" },
19409
- className: cn("absolute inset-0", activeFeature?.imageClassName),
19410
- children: /* @__PURE__ */ jsx(
19411
- Img,
19412
- {
19413
- src: currentImage,
19414
- alt: typeof activeFeature?.title === "string" ? activeFeature.title : `Feature ${activeIndex + 1}`,
19415
- className: "h-full w-full object-cover",
19416
- optixFlowConfig
19417
- }
19418
- )
19419
- },
19420
- `${activeIndex}-${activeColorIndex}`
19421
- ) }),
19422
- /* @__PURE__ */ jsxs("div", { className: cn("absolute bottom-4 right-4 flex gap-2", navigationClassName), children: [
19423
- /* @__PURE__ */ jsx(
19424
- Pressable,
19425
- {
19426
- onClick: goToPrev,
19427
- asButton: true,
19428
- variant: "outline",
19429
- size: "icon",
19430
- 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",
19431
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-left", size: 20 })
19432
- }
19530
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
19531
+ "h2",
19532
+ {
19533
+ className: cn(
19534
+ "text-3xl font-bold tracking-tight md:text-4xl lg:text-5xl",
19535
+ headingClassName
19433
19536
  ),
19434
- /* @__PURE__ */ jsx(
19435
- Pressable,
19537
+ children: heading
19538
+ }
19539
+ ) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
19540
+ subheading && (typeof subheading === "string" ? /* @__PURE__ */ jsx(
19541
+ "p",
19542
+ {
19543
+ className: cn(
19544
+ "mt-4 text-lg text-muted-foreground",
19545
+ subheadingClassName
19546
+ ),
19547
+ children: subheading
19548
+ }
19549
+ ) : /* @__PURE__ */ jsx("div", { className: subheadingClassName, children: subheading }))
19550
+ ] }),
19551
+ featuresSlot ? /* @__PURE__ */ jsx("div", { className: contentClassName, children: featuresSlot }) : /* @__PURE__ */ jsxs(
19552
+ "div",
19553
+ {
19554
+ className: cn(
19555
+ "grid gap-8 lg:grid-cols-2 lg:gap-12",
19556
+ contentClassName
19557
+ ),
19558
+ children: [
19559
+ /* @__PURE__ */ jsxs(
19560
+ "div",
19436
19561
  {
19437
- onClick: goToNext,
19438
- asButton: true,
19439
- variant: "outline",
19440
- size: "icon",
19441
- 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",
19442
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 20 })
19443
- }
19444
- )
19445
- ] })
19446
- ] }),
19447
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col justify-center", children: [
19448
- /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsxs(
19449
- motion.div,
19450
- {
19451
- initial: { opacity: 0, y: 20 },
19452
- animate: { opacity: 1, y: 0 },
19453
- exit: { opacity: 0, y: -20 },
19454
- transition: { duration: 0.3 },
19455
- children: [
19456
- activeFeature?.title && (typeof activeFeature.title === "string" ? /* @__PURE__ */ jsx("h3", { className: "text-2xl font-semibold md:text-3xl", children: activeFeature.title }) : /* @__PURE__ */ jsx("div", { children: activeFeature.title })),
19457
- activeFeature?.description && (typeof activeFeature.description === "string" ? /* @__PURE__ */ jsx("p", { className: "mt-4 text-lg text-muted-foreground", children: activeFeature.description }) : /* @__PURE__ */ jsx("div", { className: "mt-4", children: activeFeature.description })),
19458
- activeFeature?.colors && activeFeature.colors.length > 0 && /* @__PURE__ */ jsxs("div", { className: cn("mt-6", colorSelectorClassName), children: [
19459
- /* @__PURE__ */ jsx("p", { className: "mb-3 text-sm font-medium", children: "Available Colors" }),
19460
- /* @__PURE__ */ jsx("div", { className: "flex gap-3", children: activeFeature.colors.map((color, index) => /* @__PURE__ */ jsx(
19461
- "button",
19562
+ className: cn(
19563
+ "relative aspect-square overflow-hidden rounded-2xl bg-muted lg:aspect-4/3 shadow-lg",
19564
+ imageClassName
19565
+ ),
19566
+ children: [
19567
+ /* @__PURE__ */ jsx(AnimatePresence, { initial: false, custom: direction, mode: "wait", children: /* @__PURE__ */ jsx(
19568
+ motion.div,
19462
19569
  {
19463
- onClick: () => setActiveColorIndex(index),
19570
+ custom: direction,
19571
+ variants: slideVariants2,
19572
+ initial: "enter",
19573
+ animate: "center",
19574
+ exit: "exit",
19575
+ transition: { duration: 0.3, ease: "easeInOut" },
19464
19576
  className: cn(
19465
- "h-8 w-8 rounded-full border-2 transition-all",
19466
- activeColorIndex === index ? "border-primary ring-2 ring-primary ring-offset-2" : "border-transparent hover:border-muted-foreground"
19577
+ "absolute inset-0",
19578
+ activeFeature?.imageClassName
19467
19579
  ),
19468
- style: { backgroundColor: color.value },
19469
- title: color.name
19580
+ children: /* @__PURE__ */ jsx(
19581
+ Img,
19582
+ {
19583
+ src: currentImage,
19584
+ alt: typeof activeFeature?.title === "string" ? activeFeature.title : `Feature ${activeIndex + 1}`,
19585
+ className: "h-full w-full object-cover",
19586
+ optixFlowConfig
19587
+ }
19588
+ )
19470
19589
  },
19471
- color.name
19472
- )) })
19473
- ] }),
19474
- /* @__PURE__ */ jsx("div", { className: actionsClassName, children: renderActions() })
19475
- ]
19476
- },
19477
- activeIndex
19478
- ) }),
19479
- /* @__PURE__ */ jsx("div", { className: cn("mt-8 flex gap-2", indicatorsClassName), children: features?.map((_, index) => /* @__PURE__ */ jsx(
19480
- "button",
19481
- {
19482
- onClick: () => goToSlide(index),
19483
- className: cn(
19484
- "h-2 rounded-full transition-all",
19485
- activeIndex === index ? "w-8 bg-primary" : "w-2 bg-muted-foreground/30 hover:bg-muted-foreground/50"
19486
- )
19487
- },
19488
- index
19489
- )) })
19490
- ] })
19491
- ] })
19590
+ `${activeIndex}-${activeColorIndex}`
19591
+ ) }),
19592
+ /* @__PURE__ */ jsxs(
19593
+ "div",
19594
+ {
19595
+ className: cn(
19596
+ "absolute bottom-4 right-4 flex gap-2",
19597
+ navigationClassName
19598
+ ),
19599
+ children: [
19600
+ /* @__PURE__ */ jsx(
19601
+ Pressable,
19602
+ {
19603
+ onClick: goToPrev,
19604
+ asButton: true,
19605
+ variant: "outline",
19606
+ size: "icon",
19607
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-left", size: 20 })
19608
+ }
19609
+ ),
19610
+ /* @__PURE__ */ jsx(
19611
+ Pressable,
19612
+ {
19613
+ onClick: goToNext,
19614
+ asButton: true,
19615
+ variant: "outline",
19616
+ size: "icon",
19617
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 20 })
19618
+ }
19619
+ )
19620
+ ]
19621
+ }
19622
+ )
19623
+ ]
19624
+ }
19625
+ ),
19626
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col justify-center", children: [
19627
+ /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsxs(
19628
+ motion.div,
19629
+ {
19630
+ initial: { opacity: 0, y: 20 },
19631
+ animate: { opacity: 1, y: 0 },
19632
+ exit: { opacity: 0, y: -20 },
19633
+ transition: { duration: 0.3 },
19634
+ children: [
19635
+ activeFeature?.title && (typeof activeFeature.title === "string" ? /* @__PURE__ */ jsx("h3", { className: "text-2xl font-semibold md:text-3xl", children: activeFeature.title }) : /* @__PURE__ */ jsx("div", { children: activeFeature.title })),
19636
+ activeFeature?.description && (typeof activeFeature.description === "string" ? /* @__PURE__ */ jsx("p", { className: "mt-4 text-lg text-muted-foreground", children: activeFeature.description }) : /* @__PURE__ */ jsx("div", { className: "mt-4", children: activeFeature.description })),
19637
+ activeFeature?.colors && activeFeature.colors.length > 0 && /* @__PURE__ */ jsxs("div", { className: cn("mt-6", colorSelectorClassName), children: [
19638
+ /* @__PURE__ */ jsx("p", { className: "mb-3 text-sm font-medium", children: "Available Colors" }),
19639
+ /* @__PURE__ */ jsx("div", { className: "flex gap-3", children: activeFeature.colors.map((color, index) => /* @__PURE__ */ jsx(
19640
+ "button",
19641
+ {
19642
+ onClick: () => setActiveColorIndex(index),
19643
+ className: cn(
19644
+ "h-8 w-8 rounded-full border-2 transition-all",
19645
+ activeColorIndex === index ? "border-primary ring-2 ring-primary ring-offset-2" : "border-transparent hover:border-muted-foreground"
19646
+ ),
19647
+ style: { backgroundColor: color.value },
19648
+ title: color.name
19649
+ },
19650
+ color.name
19651
+ )) })
19652
+ ] }),
19653
+ /* @__PURE__ */ jsx("div", { className: actionsClassName, children: renderActions() })
19654
+ ]
19655
+ },
19656
+ activeIndex
19657
+ ) }),
19658
+ /* @__PURE__ */ jsx("div", { className: cn("mt-8 flex gap-2", indicatorsClassName), children: features?.map((_, index) => /* @__PURE__ */ jsx(
19659
+ "button",
19660
+ {
19661
+ onClick: () => goToSlide(index),
19662
+ className: cn(
19663
+ "h-2 rounded-full transition-all",
19664
+ activeIndex === index ? "w-8 bg-primary" : "w-2 bg-muted-foreground/30 hover:bg-muted-foreground/50"
19665
+ )
19666
+ },
19667
+ index
19668
+ )) })
19669
+ ] })
19670
+ ]
19671
+ }
19672
+ )
19492
19673
  ] })
19493
19674
  }
19494
19675
  );
@@ -19544,12 +19725,16 @@ function SliderBtn({
19544
19725
  }
19545
19726
  function SliderWrapper({ children, value, className }) {
19546
19727
  const { active } = useProgressSliderContext();
19547
- return /* @__PURE__ */ jsx(AnimatePresence, { mode: "popLayout", children: active === value && /* @__PURE__ */ jsx(
19728
+ return /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", initial: false, children: active === value && /* @__PURE__ */ jsx(
19548
19729
  motion.div,
19549
19730
  {
19550
- initial: { opacity: 0 },
19551
- animate: { opacity: 1 },
19552
- exit: { opacity: 0 },
19731
+ initial: { opacity: 0, scale: 0.98 },
19732
+ animate: { opacity: 1, scale: 1 },
19733
+ exit: { opacity: 0, scale: 0.98 },
19734
+ transition: {
19735
+ duration: 0.4,
19736
+ ease: [0.4, 0, 0.2, 1]
19737
+ },
19553
19738
  className: cn("", className),
19554
19739
  children
19555
19740
  },
@@ -19660,12 +19845,12 @@ function CarouselProgressSlider({
19660
19845
  pattern,
19661
19846
  patternOpacity,
19662
19847
  children: /* @__PURE__ */ jsx("div", { className: cn("relative", containerClassName), children: /* @__PURE__ */ jsxs("div", { className: cn("grid gap-8 lg:grid-cols-2", contentClassName), children: [
19663
- /* @__PURE__ */ jsxs("div", { className: cn("relative", imageClassName), children: [
19664
- slidesSlot ? slidesSlot : slides?.map((slide) => /* @__PURE__ */ jsx(
19848
+ /* @__PURE__ */ jsxs("div", { className: cn("relative min-h-[400px]", imageClassName), children: [
19849
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0", children: slidesSlot ? slidesSlot : slides?.map((slide) => /* @__PURE__ */ jsx(
19665
19850
  SliderWrapper,
19666
19851
  {
19667
19852
  value: slide.id,
19668
- className: cn("", slide.className),
19853
+ className: cn("absolute inset-0", slide.className),
19669
19854
  children: /* @__PURE__ */ jsx("div", { className: "aspect-video overflow-hidden rounded-lg", children: /* @__PURE__ */ jsx(
19670
19855
  Img,
19671
19856
  {
@@ -19680,8 +19865,8 @@ function CarouselProgressSlider({
19680
19865
  ) })
19681
19866
  },
19682
19867
  slide.id
19683
- )),
19684
- /* @__PURE__ */ jsx("div", { className: "mt-4 flex justify-center lg:justify-start", children: /* @__PURE__ */ jsx(
19868
+ )) }),
19869
+ /* @__PURE__ */ jsx("div", { className: "relative mt-4 flex justify-center lg:justify-start", children: /* @__PURE__ */ jsx(
19685
19870
  Pressable,
19686
19871
  {
19687
19872
  onClick: togglePause,
@@ -19743,8 +19928,8 @@ function CarouselScrollingFeatureShowcase({
19743
19928
  featuresClassName,
19744
19929
  numberBadgeClassName,
19745
19930
  optixFlowConfig,
19746
- background = "white",
19747
- spacing = "xl",
19931
+ background,
19932
+ spacing = "md",
19748
19933
  pattern,
19749
19934
  patternOpacity
19750
19935
  }) {
@@ -19794,62 +19979,113 @@ function CarouselScrollingFeatureShowcase({
19794
19979
  patternOpacity,
19795
19980
  children: /* @__PURE__ */ jsxs("div", { className: cn("container mx-auto px-4", containerClassName), children: [
19796
19981
  /* @__PURE__ */ jsxs("div", { className: cn("mb-12 text-center", headerClassName), children: [
19797
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-bold tracking-tight md:text-4xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
19798
- subheading && (typeof subheading === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-lg text-muted-foreground", subheadingClassName), children: subheading }) : /* @__PURE__ */ jsx("div", { className: cn("mt-4", subheadingClassName), children: subheading }))
19799
- ] }),
19800
- /* @__PURE__ */ jsxs("div", { className: cn("grid gap-8 lg:grid-cols-2 lg:gap-12", contentClassName), children: [
19801
- /* @__PURE__ */ jsx("div", { className: "hidden lg:block", children: /* @__PURE__ */ jsx("div", { className: "sticky top-24", children: /* @__PURE__ */ jsx("div", { className: cn("aspect-video overflow-hidden rounded-xl bg-muted", imageClassName), children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", children: activeFeatureData && /* @__PURE__ */ jsx(
19802
- motion.div,
19982
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
19983
+ "h2",
19803
19984
  {
19804
- initial: { opacity: 0 },
19805
- animate: { opacity: 1 },
19806
- exit: { opacity: 0 },
19807
- transition: { duration: 0.3 },
19808
- className: "h-full w-full",
19809
- children: /* @__PURE__ */ jsx(
19810
- Img,
19811
- {
19812
- src: activeFeatureData.image,
19813
- alt: typeof activeFeatureData.title === "string" ? activeFeatureData.title : `Feature ${activeFeatureData.id}`,
19814
- className: cn("h-full w-full object-cover", activeFeatureData.imageClassName),
19815
- optixFlowConfig
19816
- }
19817
- )
19818
- },
19819
- activeFeatureData.id
19820
- ) }) }) }) }),
19821
- /* @__PURE__ */ jsx("div", { className: cn("space-y-24 lg:space-y-32", featuresClassName), children: featuresSlot ? featuresSlot : features?.map((feature, index) => /* @__PURE__ */ jsxs(
19822
- "div",
19985
+ className: cn(
19986
+ "text-3xl font-bold tracking-tight md:text-4xl",
19987
+ headingClassName
19988
+ ),
19989
+ children: heading
19990
+ }
19991
+ ) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
19992
+ subheading && (typeof subheading === "string" ? /* @__PURE__ */ jsx(
19993
+ "p",
19823
19994
  {
19824
- ref: setFeatureRef(feature.id),
19825
- "data-feature-id": feature.id,
19826
19995
  className: cn(
19827
- "scroll-mt-24 transition-opacity duration-300",
19828
- activeFeature === feature.id ? "opacity-100" : "opacity-50",
19829
- feature.className
19996
+ "mt-4 text-lg text-muted-foreground",
19997
+ subheadingClassName
19830
19998
  ),
19831
- children: [
19832
- /* @__PURE__ */ jsx("div", { className: "mb-6 lg:hidden", children: /* @__PURE__ */ jsx("div", { className: "aspect-video overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx(
19833
- Img,
19834
- {
19835
- src: feature.image,
19836
- alt: typeof feature.title === "string" ? feature.title : `Feature ${feature.id}`,
19837
- className: cn("h-full w-full object-cover", feature.imageClassName),
19838
- optixFlowConfig
19839
- }
19840
- ) }) }),
19841
- /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-4", children: [
19842
- /* @__PURE__ */ 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 }),
19843
- /* @__PURE__ */ jsxs("div", { children: [
19844
- feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsx("h3", { className: "text-2xl font-semibold", children: feature.title }) : /* @__PURE__ */ jsx("div", { children: feature.title })),
19845
- feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx("p", { className: "mt-4 text-lg text-muted-foreground", children: feature.description }) : /* @__PURE__ */ jsx("div", { className: "mt-4", children: feature.description }))
19846
- ] })
19847
- ] })
19848
- ]
19849
- },
19850
- feature.id
19851
- )) })
19852
- ] })
19999
+ children: subheading
20000
+ }
20001
+ ) : /* @__PURE__ */ jsx("div", { className: cn("mt-4", subheadingClassName), children: subheading }))
20002
+ ] }),
20003
+ /* @__PURE__ */ jsxs(
20004
+ "div",
20005
+ {
20006
+ className: cn(
20007
+ "grid gap-8 lg:grid-cols-2 lg:gap-12",
20008
+ contentClassName
20009
+ ),
20010
+ children: [
20011
+ /* @__PURE__ */ jsx("div", { className: "hidden lg:block", children: /* @__PURE__ */ jsx("div", { className: "sticky top-24", children: /* @__PURE__ */ jsx(
20012
+ "div",
20013
+ {
20014
+ className: cn(
20015
+ "aspect-video overflow-hidden rounded-xl bg-muted",
20016
+ imageClassName
20017
+ ),
20018
+ children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", children: activeFeatureData && /* @__PURE__ */ jsx(
20019
+ motion.div,
20020
+ {
20021
+ initial: { opacity: 0 },
20022
+ animate: { opacity: 1 },
20023
+ exit: { opacity: 0 },
20024
+ transition: { duration: 0.3 },
20025
+ className: "h-full w-full",
20026
+ children: /* @__PURE__ */ jsx(
20027
+ Img,
20028
+ {
20029
+ src: activeFeatureData.image,
20030
+ alt: typeof activeFeatureData.title === "string" ? activeFeatureData.title : `Feature ${activeFeatureData.id}`,
20031
+ className: cn(
20032
+ "h-full w-full object-cover",
20033
+ activeFeatureData.imageClassName
20034
+ ),
20035
+ optixFlowConfig
20036
+ }
20037
+ )
20038
+ },
20039
+ activeFeatureData.id
20040
+ ) })
20041
+ }
20042
+ ) }) }),
20043
+ /* @__PURE__ */ jsx("div", { className: cn("space-y-24 lg:space-y-32", featuresClassName), children: featuresSlot ? featuresSlot : features?.map((feature, index) => /* @__PURE__ */ jsxs(
20044
+ "div",
20045
+ {
20046
+ ref: setFeatureRef(feature.id),
20047
+ "data-feature-id": feature.id,
20048
+ className: cn(
20049
+ "scroll-mt-24 transition-opacity duration-300",
20050
+ activeFeature === feature.id ? "opacity-100" : "opacity-50",
20051
+ feature.className
20052
+ ),
20053
+ children: [
20054
+ /* @__PURE__ */ jsx("div", { className: "mb-6 lg:hidden", children: /* @__PURE__ */ jsx("div", { className: "aspect-video overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx(
20055
+ Img,
20056
+ {
20057
+ src: feature.image,
20058
+ alt: typeof feature.title === "string" ? feature.title : `Feature ${feature.id}`,
20059
+ className: cn(
20060
+ "h-full w-full object-cover",
20061
+ feature.imageClassName
20062
+ ),
20063
+ optixFlowConfig
20064
+ }
20065
+ ) }) }),
20066
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-4", children: [
20067
+ /* @__PURE__ */ jsx(
20068
+ "div",
20069
+ {
20070
+ className: cn(
20071
+ "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground",
20072
+ numberBadgeClassName
20073
+ ),
20074
+ children: index + 1
20075
+ }
20076
+ ),
20077
+ /* @__PURE__ */ jsxs("div", { children: [
20078
+ feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsx("h3", { className: "text-2xl font-semibold", children: feature.title }) : /* @__PURE__ */ jsx("div", { children: feature.title })),
20079
+ feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx("p", { className: "mt-4 text-lg text-muted-foreground", children: feature.description }) : /* @__PURE__ */ jsx("div", { className: "mt-4", children: feature.description }))
20080
+ ] })
20081
+ ] })
20082
+ ]
20083
+ },
20084
+ feature.id
20085
+ )) })
20086
+ ]
20087
+ }
20088
+ )
19853
20089
  ] })
19854
20090
  }
19855
20091
  );
@@ -20050,17 +20286,28 @@ function FeatureShowcase({
20050
20286
  contentClassName,
20051
20287
  mediaClassName,
20052
20288
  arrowClassName,
20053
- equalizeOnMobile = true,
20054
- stretchMediaOnMobile = true
20289
+ equalizeOnMobile,
20290
+ stretchMediaOnMobile,
20291
+ background,
20292
+ spacing,
20293
+ pattern,
20294
+ patternOpacity,
20295
+ patternClassName
20055
20296
  }) {
20056
- 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";
20297
+ const baseArrowClassName = useMemo$1(
20298
+ () => "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",
20299
+ []
20300
+ );
20057
20301
  const [mobileSlideHeight, setMobileSlideHeight] = useState(
20058
20302
  null
20059
20303
  );
20060
20304
  const slideRefs = useRef([]);
20061
- const mediaWrapperClassName = equalizeOnMobile && stretchMediaOnMobile ? "flex-1 min-h-0 md:flex-none" : "";
20305
+ const mediaWrapperClassName = useMemo$1(
20306
+ () => equalizeOnMobile && stretchMediaOnMobile ? "flex-1 min-h-0 md:flex-none" : "",
20307
+ [equalizeOnMobile, stretchMediaOnMobile]
20308
+ );
20062
20309
  useEffect(() => {
20063
- if (!equalizeOnMobile) {
20310
+ if (!equalizeOnMobile || !items || items.length === 0) {
20064
20311
  setMobileSlideHeight(null);
20065
20312
  return;
20066
20313
  }
@@ -20092,10 +20339,10 @@ function FeatureShowcase({
20092
20339
  window.removeEventListener("resize", updateHeights);
20093
20340
  resizeObserver?.disconnect();
20094
20341
  };
20095
- }, [equalizeOnMobile, items.length]);
20096
- return /* @__PURE__ */ jsxs("div", { className, children: [
20097
- children,
20098
- /* @__PURE__ */ jsxs(Carousel, { className: carouselClassName, children: [
20342
+ }, [equalizeOnMobile, items]);
20343
+ const carouselContent = useMemo$1(() => {
20344
+ if (!items || items.length === 0) return null;
20345
+ return /* @__PURE__ */ jsxs(Carousel, { className: carouselClassName, children: [
20099
20346
  /* @__PURE__ */ jsx("div", { className: "pb-18 md:pb-24", children: /* @__PURE__ */ jsx(CarouselContent, { className: "ease-in", children: items.map((item, itemIndex) => /* @__PURE__ */ jsx(CarouselItem, { children: /* @__PURE__ */ jsxs(
20100
20347
  "div",
20101
20348
  {
@@ -20108,8 +20355,8 @@ function FeatureShowcase({
20108
20355
  slideClassName
20109
20356
  ),
20110
20357
  children: [
20111
- /* @__PURE__ */ jsx("div", { className: cn("w-full", contentClassName), children: item.content }),
20112
- /* @__PURE__ */ jsx(
20358
+ item.content && /* @__PURE__ */ jsx("div", { className: cn("w-full", contentClassName), children: item.content }),
20359
+ item.mediaComponent && /* @__PURE__ */ jsx(
20113
20360
  "div",
20114
20361
  {
20115
20362
  className: cn(
@@ -20135,8 +20382,23 @@ function FeatureShowcase({
20135
20382
  className: cn(baseArrowClassName, "right-4 md:right-6", arrowClassName)
20136
20383
  }
20137
20384
  )
20138
- ] })
20139
- ] });
20385
+ ] });
20386
+ }, [items, carouselClassName, equalizeOnMobile, mobileSlideHeight, slideClassName, contentClassName, mediaWrapperClassName, mediaClassName, baseArrowClassName, arrowClassName]);
20387
+ return /* @__PURE__ */ jsxs(
20388
+ Section,
20389
+ {
20390
+ background,
20391
+ spacing,
20392
+ pattern,
20393
+ patternOpacity,
20394
+ patternClassName,
20395
+ className,
20396
+ children: [
20397
+ children,
20398
+ carouselContent
20399
+ ]
20400
+ }
20401
+ );
20140
20402
  }
20141
20403
  function FeatureSplitImage({
20142
20404
  title,
@@ -20165,40 +20427,19 @@ function FeatureSplitImage({
20165
20427
  if (actionsSlot) return actionsSlot;
20166
20428
  if (!actions || actions.length === 0) return null;
20167
20429
  return actions.map((action, index) => {
20168
- if (action.children) {
20169
- return /* @__PURE__ */ jsx(
20170
- Pressable,
20171
- {
20172
- href: action.href,
20173
- onClick: action.onClick,
20174
- variant: action.variant,
20175
- size: action.size,
20176
- className: action.className,
20177
- "aria-label": action["aria-label"],
20178
- asButton: true,
20179
- children: action.children
20180
- },
20181
- index
20182
- );
20183
- }
20184
- return /* @__PURE__ */ jsxs(
20185
- Pressable,
20186
- {
20187
- href: action.href,
20188
- onClick: action.onClick,
20189
- variant: action.variant,
20190
- size: action.size,
20191
- className: action.className,
20192
- "aria-label": action["aria-label"],
20193
- asButton: true,
20194
- children: [
20195
- action.icon,
20196
- action.label,
20197
- action.iconAfter
20198
- ]
20199
- },
20200
- index
20201
- );
20430
+ const {
20431
+ label,
20432
+ icon,
20433
+ iconAfter,
20434
+ children,
20435
+ className: actionClassName,
20436
+ ...pressableProps
20437
+ } = action;
20438
+ return /* @__PURE__ */ jsx(Pressable, { className: actionClassName, asButton: true, ...pressableProps, children: children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
20439
+ icon,
20440
+ label,
20441
+ iconAfter
20442
+ ] }) }, index);
20202
20443
  });
20203
20444
  }, [actionsSlot, actions]);
20204
20445
  const imageContent = useMemo$1(() => {
@@ -20208,7 +20449,7 @@ function FeatureSplitImage({
20208
20449
  Img,
20209
20450
  {
20210
20451
  src: imageSrc,
20211
- alt: imageAlt || "Feature illustration",
20452
+ alt: imageAlt || "",
20212
20453
  className: cn("max-h-96 w-full rounded-md object-cover", imageClassName),
20213
20454
  loading: "lazy",
20214
20455
  optixFlowConfig
@@ -20229,7 +20470,7 @@ function FeatureSplitImage({
20229
20470
  /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col items-center text-center lg:items-start lg:text-left", contentClassName), children: [
20230
20471
  title && (typeof title === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("my-6 mt-0 text-4xl font-semibold text-balance lg:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: cn("my-6 mt-0 text-4xl font-semibold text-balance lg:text-5xl", titleClassName), children: title })),
20231
20472
  description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mb-8 max-w-xl text-muted-foreground lg:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("mb-8 max-w-xl text-muted-foreground lg:text-lg", descriptionClassName), children: description })),
20232
- /* @__PURE__ */ jsx("div", { className: cn("flex w-full flex-col justify-center gap-2 sm:flex-row lg:justify-start", actionsClassName), children: actionsContent })
20473
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("flex w-full flex-col justify-center gap-2 sm:flex-row lg:justify-start", actionsClassName), children: actionsContent })
20233
20474
  ] }),
20234
20475
  imageContent
20235
20476
  ] })
@@ -20263,40 +20504,19 @@ function FeatureSplitImageReverse({
20263
20504
  if (actionsSlot) return actionsSlot;
20264
20505
  if (!actions || actions.length === 0) return null;
20265
20506
  return actions.map((action, index) => {
20266
- if (action.children) {
20267
- return /* @__PURE__ */ jsx(
20268
- Pressable,
20269
- {
20270
- href: action.href,
20271
- onClick: action.onClick,
20272
- variant: action.variant,
20273
- size: action.size,
20274
- className: action.className,
20275
- "aria-label": action["aria-label"],
20276
- asButton: true,
20277
- children: action.children
20278
- },
20279
- index
20280
- );
20281
- }
20282
- return /* @__PURE__ */ jsxs(
20283
- Pressable,
20284
- {
20285
- href: action.href,
20286
- onClick: action.onClick,
20287
- variant: action.variant,
20288
- size: action.size,
20289
- className: action.className,
20290
- "aria-label": action["aria-label"],
20291
- asButton: true,
20292
- children: [
20293
- action.icon,
20294
- action.label,
20295
- action.iconAfter
20296
- ]
20297
- },
20298
- index
20299
- );
20507
+ const {
20508
+ label,
20509
+ icon,
20510
+ iconAfter,
20511
+ children,
20512
+ className: actionClassName,
20513
+ ...pressableProps
20514
+ } = action;
20515
+ return /* @__PURE__ */ jsx(Pressable, { className: actionClassName, asButton: true, ...pressableProps, children: children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
20516
+ icon,
20517
+ label,
20518
+ iconAfter
20519
+ ] }) }, index);
20300
20520
  });
20301
20521
  }, [actionsSlot, actions]);
20302
20522
  const imageContent = useMemo$1(() => {
@@ -20306,7 +20526,7 @@ function FeatureSplitImageReverse({
20306
20526
  Img,
20307
20527
  {
20308
20528
  src: imageSrc,
20309
- alt: imageAlt || "Feature illustration",
20529
+ alt: imageAlt || "",
20310
20530
  className: cn("max-h-96 w-full rounded-md object-cover", imageClassName),
20311
20531
  loading: "lazy",
20312
20532
  optixFlowConfig
@@ -20328,7 +20548,7 @@ function FeatureSplitImageReverse({
20328
20548
  /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col items-center text-center lg:items-start lg:text-left", contentClassName), children: [
20329
20549
  title && (typeof title === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("my-6 mt-0 text-4xl font-semibold text-balance lg:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: cn("my-6 mt-0 text-4xl font-semibold text-balance lg:text-5xl", titleClassName), children: title })),
20330
20550
  description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mb-8 max-w-xl text-muted-foreground lg:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("mb-8 max-w-xl text-muted-foreground lg:text-lg", descriptionClassName), children: description })),
20331
- /* @__PURE__ */ jsx("div", { className: cn("flex w-full flex-col justify-center gap-2 sm:flex-row lg:justify-start", actionsClassName), children: actionsContent })
20551
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("flex w-full flex-col justify-center gap-2 sm:flex-row lg:justify-start", actionsClassName), children: actionsContent })
20332
20552
  ] })
20333
20553
  ] })
20334
20554
  }
@@ -20351,39 +20571,37 @@ function FeatureIconGridBordered({
20351
20571
  patternOpacity,
20352
20572
  patternClassName
20353
20573
  }) {
20574
+ const renderIcon = useCallback((feature) => {
20575
+ if (feature.icon) return feature.icon;
20576
+ if (feature.iconName) {
20577
+ return /* @__PURE__ */ jsx(DynamicIcon, { name: feature.iconName, size: 20, className: "md:size-6" });
20578
+ }
20579
+ return null;
20580
+ }, []);
20354
20581
  const featuresContent = useMemo$1(() => {
20355
20582
  if (featuresSlot) return featuresSlot;
20356
20583
  if (!features || features.length === 0) return null;
20357
- return features.map((feature, index) => {
20358
- const renderIcon = () => {
20359
- if (feature.icon) return feature.icon;
20360
- if (feature.iconName) {
20361
- return /* @__PURE__ */ jsx(DynamicIcon, { name: feature.iconName, size: 20, className: "md:size-6" });
20362
- }
20363
- return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/star", size: 20, className: "md:size-6" });
20364
- };
20365
- return /* @__PURE__ */ jsxs(
20366
- "div",
20367
- {
20368
- className: cn("relative flex gap-3 rounded-lg border-dashed md:block md:border-l md:p-5", cardClassName, feature.className),
20369
- children: [
20370
- /* @__PURE__ */ 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() }),
20371
- /* @__PURE__ */ jsxs("div", { children: [
20372
- feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxs("h3", { className: cn("font-medium md:mb-2 md:text-xl", feature.titleClassName), children: [
20373
- feature.title,
20374
- /* @__PURE__ */ jsx("span", { className: "absolute -left-px hidden h-6 w-px bg-primary md:inline-block" })
20375
- ] }) : /* @__PURE__ */ jsxs("div", { className: cn("font-medium md:mb-2 md:text-xl", feature.titleClassName), children: [
20376
- feature.title,
20377
- /* @__PURE__ */ jsx("span", { className: "absolute -left-px hidden h-6 w-px bg-primary md:inline-block" })
20378
- ] })),
20379
- feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsx("div", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }))
20380
- ] })
20381
- ]
20382
- },
20383
- index
20384
- );
20385
- });
20386
- }, [featuresSlot, features, cardClassName]);
20584
+ return features.map((feature, index) => /* @__PURE__ */ jsxs(
20585
+ "div",
20586
+ {
20587
+ className: cn("relative flex gap-3 rounded-lg border-dashed md:block md:border-l md:p-5", cardClassName, feature.className),
20588
+ children: [
20589
+ (feature.icon || feature.iconName) && /* @__PURE__ */ 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) }),
20590
+ /* @__PURE__ */ jsxs("div", { children: [
20591
+ feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxs("h3", { className: cn("font-medium md:mb-2 md:text-xl", feature.titleClassName), children: [
20592
+ feature.title,
20593
+ /* @__PURE__ */ jsx("span", { className: "absolute -left-px hidden h-6 w-px bg-primary md:inline-block" })
20594
+ ] }) : /* @__PURE__ */ jsxs("div", { className: cn("font-medium md:mb-2 md:text-xl", feature.titleClassName), children: [
20595
+ feature.title,
20596
+ /* @__PURE__ */ jsx("span", { className: "absolute -left-px hidden h-6 w-px bg-primary md:inline-block" })
20597
+ ] })),
20598
+ feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsx("div", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }))
20599
+ ] })
20600
+ ]
20601
+ },
20602
+ index
20603
+ ));
20604
+ }, [featuresSlot, features, cardClassName, renderIcon]);
20387
20605
  return /* @__PURE__ */ jsxs(
20388
20606
  Section,
20389
20607
  {
@@ -20397,7 +20615,7 @@ function FeatureIconGridBordered({
20397
20615
  children: [
20398
20616
  label && (typeof label === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mb-4 text-xs text-muted-foreground", labelClassName), children: label }) : /* @__PURE__ */ jsx("div", { className: cn("mb-4 text-xs text-muted-foreground", labelClassName), children: label })),
20399
20617
  title && (typeof title === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-medium lg:text-4xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: cn("text-3xl font-medium lg:text-4xl", titleClassName), children: title })),
20400
- /* @__PURE__ */ jsx("div", { className: cn("mt-14 grid gap-6 md:grid-cols-2 lg:mt-20 lg:grid-cols-4", gridClassName), children: featuresContent })
20618
+ (featuresSlot || features && features.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-14 grid gap-6 md:grid-cols-2 lg:mt-20 lg:grid-cols-4", gridClassName), children: featuresContent })
20401
20619
  ]
20402
20620
  }
20403
20621
  );
@@ -20511,8 +20729,8 @@ function FeatureChecklistImage({
20511
20729
  /* @__PURE__ */ jsxs("div", { className: cn("lg:p-10", contentClassName), children: [
20512
20730
  title && (typeof title === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-medium text-balance md:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: cn("text-3xl font-medium text-balance md:text-5xl", titleClassName), children: title })),
20513
20731
  description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-1 text-muted-foreground md:mt-6", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("mt-1 text-muted-foreground md:mt-6", descriptionClassName), children: description })),
20514
- /* @__PURE__ */ jsx("div", { className: actionsClassName, children: actionsContent }),
20515
- /* @__PURE__ */ jsx("ul", { className: cn("mt-10 flex-wrap items-center gap-6 space-y-6 md:flex md:space-y-0", checklistClassName), children: checklistContent })
20732
+ actionsContent && /* @__PURE__ */ jsx("div", { className: actionsClassName, children: actionsContent }),
20733
+ checklistContent && /* @__PURE__ */ jsx("ul", { className: cn("mt-10 flex-wrap items-center gap-6 space-y-6 md:flex md:space-y-0", checklistClassName), children: checklistContent })
20516
20734
  ] })
20517
20735
  ] })
20518
20736
  }
@@ -20577,10 +20795,10 @@ function FeatureCarouselProgress({
20577
20795
  );
20578
20796
  });
20579
20797
  }, [api, slidesLength]);
20580
- const renderSlideIcon = useMemo$1(() => (slide) => {
20798
+ const renderSlideIcon = useCallback((slide) => {
20581
20799
  if (slide.icon) return slide.icon;
20582
20800
  if (slide.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: slide.iconName, size: 16 });
20583
- return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/star", size: 16 });
20801
+ return null;
20584
20802
  }, []);
20585
20803
  const slidesContent = useMemo$1(() => {
20586
20804
  if (slidesSlot) return slidesSlot;
@@ -20590,7 +20808,7 @@ function FeatureCarouselProgress({
20590
20808
  {
20591
20809
  className: "basis-full md:basis-1/2 lg:basis-1/3",
20592
20810
  children: /* @__PURE__ */ jsx("div", { className: "p-1", children: /* @__PURE__ */ jsx(Card, { className: cn(cardClassName, slide.className), children: /* @__PURE__ */ jsx(CardContent, { className: "flex flex-col justify-center p-6", children: /* @__PURE__ */ jsxs("div", { children: [
20593
- /* @__PURE__ */ 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) }),
20811
+ (slide.icon || slide.iconName) && /* @__PURE__ */ 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) }),
20594
20812
  slide.title && (typeof slide.title === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-xl font-semibold md:text-2xl lg:text-2xl", slide.titleClassName), children: slide.title }) : /* @__PURE__ */ jsx("div", { className: cn("text-xl font-semibold md:text-2xl lg:text-2xl", slide.titleClassName), children: slide.title })),
20595
20813
  slide.description && (typeof slide.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("pt-2 text-muted-foreground", slide.descriptionClassName), children: slide.description }) : /* @__PURE__ */ jsx("div", { className: cn("pt-2 text-muted-foreground", slide.descriptionClassName), children: slide.description }))
20596
20814
  ] }) }) }) })
@@ -20652,28 +20870,28 @@ function FeatureCardGridLinked({
20652
20870
  patternOpacity,
20653
20871
  patternClassName
20654
20872
  }) {
20873
+ const renderImage = useCallback((feature, imageAlt) => {
20874
+ if (feature.imageSlot) return feature.imageSlot;
20875
+ if (feature.image) {
20876
+ return /* @__PURE__ */ jsx(
20877
+ Img,
20878
+ {
20879
+ src: feature.image,
20880
+ alt: imageAlt,
20881
+ className: "h-full w-full rounded-t-lg object-cover transition-opacity hover:opacity-80",
20882
+ loading: "lazy",
20883
+ optixFlowConfig
20884
+ }
20885
+ );
20886
+ }
20887
+ return null;
20888
+ }, [optixFlowConfig]);
20655
20889
  const featuresContent = useMemo$1(() => {
20656
20890
  if (featuresSlot) return featuresSlot;
20657
20891
  if (!features || features.length === 0) return null;
20658
20892
  return features.map((feature, index) => {
20659
20893
  const featureKey = feature.id || `feature-${index}`;
20660
20894
  const imageAlt = feature.imageAlt || (typeof feature.heading === "string" ? feature.heading : "Feature image");
20661
- const renderImage = () => {
20662
- if (feature.imageSlot) return feature.imageSlot;
20663
- if (feature.image) {
20664
- return /* @__PURE__ */ jsx(
20665
- Img,
20666
- {
20667
- src: feature.image,
20668
- alt: imageAlt,
20669
- className: "h-full w-full rounded-t-lg object-cover transition-opacity hover:opacity-80",
20670
- loading: "lazy",
20671
- optixFlowConfig
20672
- }
20673
- );
20674
- }
20675
- return null;
20676
- };
20677
20895
  return /* @__PURE__ */ jsxs(
20678
20896
  "div",
20679
20897
  {
@@ -20684,7 +20902,7 @@ function FeatureCardGridLinked({
20684
20902
  feature.label && /* @__PURE__ */ jsx("span", { className: cn("font-mono text-xs text-muted-foreground", feature.labelClassName), children: feature.label }),
20685
20903
  feature.heading && /* @__PURE__ */ jsx(Pressable, { href: feature.url, children: typeof feature.heading === "string" ? /* @__PURE__ */ 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__ */ 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 }) })
20686
20904
  ] }),
20687
- /* @__PURE__ */ jsx("div", { className: "md:1/3 w-2/5 shrink-0 rounded-r-lg border-l", children: /* @__PURE__ */ jsx(Pressable, { href: feature.url, children: renderImage() }) })
20905
+ /* @__PURE__ */ jsx("div", { className: "md:1/3 w-2/5 shrink-0 rounded-r-lg border-l", children: /* @__PURE__ */ jsx(Pressable, { href: feature.url, children: renderImage(feature, imageAlt) }) })
20688
20906
  ] }),
20689
20907
  feature.description && /* @__PURE__ */ jsx("p", { className: cn("p-4 text-muted-foreground md:p-8", feature.descriptionClassName), children: feature.description })
20690
20908
  ]
@@ -20692,7 +20910,7 @@ function FeatureCardGridLinked({
20692
20910
  featureKey
20693
20911
  );
20694
20912
  });
20695
- }, [featuresSlot, features, cardClassName, optixFlowConfig]);
20913
+ }, [featuresSlot, features, cardClassName, renderImage]);
20696
20914
  return /* @__PURE__ */ jsxs(
20697
20915
  Section,
20698
20916
  {
@@ -20728,7 +20946,7 @@ function FeatureNumberedCards({
20728
20946
  patternOpacity,
20729
20947
  patternClassName
20730
20948
  }) {
20731
- const renderChecklistItems = (feature) => {
20949
+ const renderChecklistItems = useCallback((feature) => {
20732
20950
  if (feature.checklistSlot) return feature.checklistSlot;
20733
20951
  if (!feature.checklistItems || feature.checklistItems.length === 0) return null;
20734
20952
  return feature.checklistItems.map((item, itemIndex) => {
@@ -20748,7 +20966,7 @@ function FeatureNumberedCards({
20748
20966
  /* @__PURE__ */ jsx("p", { className: "text-sm md:text-base", children: content })
20749
20967
  ] }, itemIndex);
20750
20968
  });
20751
- };
20969
+ }, []);
20752
20970
  const featuresContent = useMemo$1(() => {
20753
20971
  if (featuresSlot) return featuresSlot;
20754
20972
  if (!features || features.length === 0) return null;
@@ -20853,12 +21071,12 @@ function FeatureIconGridAccent({
20853
21071
  className,
20854
21072
  containerClassName,
20855
21073
  children: [
20856
- /* @__PURE__ */ jsx("div", { className: cn("flex w-full flex-col items-center", headerClassName), children: /* @__PURE__ */ 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: [
21074
+ (label || title || description) && /* @__PURE__ */ jsx("div", { className: cn("flex w-full flex-col items-center", headerClassName), children: /* @__PURE__ */ 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: [
20857
21075
  label && (typeof label === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm text-muted-foreground", labelClassName), children: label }) : /* @__PURE__ */ jsx("div", { className: labelClassName, children: label })),
20858
21076
  title && (typeof title === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-medium md:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: titleClassName, children: title })),
20859
21077
  description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground md:max-w-2xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
20860
21078
  ] }) }),
20861
- /* @__PURE__ */ jsx("div", { className: cn("mx-auto mt-20 grid max-w-5xl gap-6 md:grid-cols-2", gridClassName), children: featuresContent })
21079
+ featuresContent && /* @__PURE__ */ jsx("div", { className: cn("mx-auto mt-20 grid max-w-5xl gap-6 md:grid-cols-2", gridClassName), children: featuresContent })
20862
21080
  ]
20863
21081
  }
20864
21082
  );
@@ -20880,20 +21098,20 @@ function FeatureThreeColumnValues({
20880
21098
  patternOpacity,
20881
21099
  patternClassName
20882
21100
  }) {
20883
- const renderValueIcon = (value) => {
21101
+ const renderValueIcon = React52.useCallback((value) => {
20884
21102
  if (value.icon) return value.icon;
20885
21103
  if (value.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: value.iconName, size: 24 });
20886
- return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/star", size: 24 });
20887
- };
21104
+ return null;
21105
+ }, []);
20888
21106
  const valuesContent = useMemo$1(() => {
20889
21107
  if (valuesSlot) return valuesSlot;
20890
21108
  if (!values || values.length === 0) return null;
20891
21109
  return values.map((value, index) => /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg bg-accent p-5", cardClassName, value.className), children: [
20892
- /* @__PURE__ */ jsx("span", { className: cn("mb-8 flex size-12 items-center justify-center rounded-full bg-background", value.iconClassName), children: renderValueIcon(value) }),
21110
+ (value.icon || value.iconName) && /* @__PURE__ */ jsx("span", { className: cn("mb-8 flex size-12 items-center justify-center rounded-full bg-background", value.iconClassName), children: renderValueIcon(value) }),
20893
21111
  value.title && (typeof value.title === "string" ? /* @__PURE__ */ jsx("h3", { className: cn("mb-2 text-xl font-medium", value.titleClassName), children: value.title }) : /* @__PURE__ */ jsx("div", { className: cn("mb-2 text-xl font-medium", value.titleClassName), children: value.title })),
20894
21112
  value.description && (typeof value.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("leading-7 text-muted-foreground", value.descriptionClassName), children: value.description }) : /* @__PURE__ */ jsx("div", { className: cn("leading-7 text-muted-foreground", value.descriptionClassName), children: value.description }))
20895
21113
  ] }, index));
20896
- }, [valuesSlot, values, cardClassName]);
21114
+ }, [valuesSlot, values, cardClassName, renderValueIcon]);
20897
21115
  return /* @__PURE__ */ jsxs(
20898
21116
  Section,
20899
21117
  {
@@ -20907,7 +21125,7 @@ function FeatureThreeColumnValues({
20907
21125
  children: [
20908
21126
  label && (typeof label === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mb-4 text-sm text-muted-foreground lg:text-base", labelClassName), children: label }) : /* @__PURE__ */ jsx("div", { className: cn("mb-4 text-sm text-muted-foreground lg:text-base", labelClassName), children: label })),
20909
21127
  title && (typeof title === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-medium lg:text-4xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: cn("text-3xl font-medium lg:text-4xl", titleClassName), children: title })),
20910
- /* @__PURE__ */ jsx("div", { className: cn("mt-14 grid gap-6 lg:mt-20 lg:grid-cols-3", gridClassName), children: valuesContent })
21128
+ (valuesSlot || values && values.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-14 grid gap-6 lg:mt-20 lg:grid-cols-3", gridClassName), children: valuesContent })
20911
21129
  ]
20912
21130
  }
20913
21131
  );
@@ -20939,7 +21157,7 @@ function FeatureBadgeGridSix({
20939
21157
  if (!label) return null;
20940
21158
  return /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: badgeClassName, children: label });
20941
21159
  }, [badgeSlot, label, badgeClassName]);
20942
- const renderFeatureIcon = (feature) => {
21160
+ const renderFeatureIcon = useCallback((feature) => {
20943
21161
  if (feature.icon) return feature.icon;
20944
21162
  if (feature.iconName) {
20945
21163
  return /* @__PURE__ */ jsx(
@@ -20952,25 +21170,28 @@ function FeatureBadgeGridSix({
20952
21170
  );
20953
21171
  }
20954
21172
  return null;
20955
- };
21173
+ }, []);
20956
21174
  const featuresContent = useMemo$1(() => {
20957
21175
  if (featuresSlot) return featuresSlot;
20958
21176
  if (!features || features.length === 0) return null;
20959
- return features.map((feature, index) => /* @__PURE__ */ jsxs(
20960
- "div",
20961
- {
20962
- className: cn("flex gap-6 space-y-4 rounded-lg md:block", cardClassName, feature.className),
20963
- children: [
20964
- /* @__PURE__ */ jsx("span", { className: "flex size-10 shrink-0 items-center justify-center rounded-full bg-accent md:size-12", children: renderFeatureIcon(feature) }),
20965
- /* @__PURE__ */ jsxs("div", { children: [
20966
- feature.heading && (typeof feature.heading === "string" ? /* @__PURE__ */ jsx("h3", { className: cn("font-medium md:mb-2 md:text-xl", feature.headingClassName), children: feature.heading }) : /* @__PURE__ */ jsx("div", { className: cn("font-medium md:mb-2 md:text-xl", feature.headingClassName), children: feature.heading })),
20967
- feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsx("div", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }))
20968
- ] })
20969
- ]
20970
- },
20971
- index
20972
- ));
20973
- }, [featuresSlot, features, cardClassName]);
21177
+ return features.map((feature, index) => {
21178
+ const iconContent = renderFeatureIcon(feature);
21179
+ return /* @__PURE__ */ jsxs(
21180
+ "div",
21181
+ {
21182
+ className: cn("flex gap-6 space-y-4 rounded-lg md:block", cardClassName, feature.className),
21183
+ children: [
21184
+ iconContent && /* @__PURE__ */ jsx("span", { className: "flex size-10 shrink-0 items-center justify-center rounded-full bg-accent md:size-12", children: iconContent }),
21185
+ /* @__PURE__ */ jsxs("div", { children: [
21186
+ feature.heading && (typeof feature.heading === "string" ? /* @__PURE__ */ jsx("h3", { className: cn("font-medium md:mb-2 md:text-xl", feature.headingClassName), children: feature.heading }) : /* @__PURE__ */ jsx("div", { className: cn("font-medium md:mb-2 md:text-xl", feature.headingClassName), children: feature.heading })),
21187
+ feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsx("div", { className: cn("text-sm text-muted-foreground md:text-base", feature.descriptionClassName), children: feature.description }))
21188
+ ] })
21189
+ ]
21190
+ },
21191
+ index
21192
+ );
21193
+ });
21194
+ }, [featuresSlot, features, cardClassName, renderFeatureIcon]);
20974
21195
  const actionContent = useMemo$1(() => {
20975
21196
  if (actionSlot) return actionSlot;
20976
21197
  if (!action) return null;
@@ -21031,7 +21252,6 @@ function FeatureBadgeGridSix({
21031
21252
  function FeaturePatternGridLinks({
21032
21253
  features,
21033
21254
  featuresSlot,
21034
- patternUrl = patternSvgs.dotPattern,
21035
21255
  className,
21036
21256
  containerClassName,
21037
21257
  gridClassName,
@@ -21042,26 +21262,28 @@ function FeaturePatternGridLinks({
21042
21262
  patternOpacity,
21043
21263
  patternClassName
21044
21264
  }) {
21045
- const renderFeatureIcon = (feature) => {
21265
+ const renderFeatureIcon = useCallback((feature) => {
21046
21266
  if (feature.icon) return feature.icon;
21047
21267
  if (feature.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: feature.iconName, size: 24, className: feature.iconClassName });
21048
21268
  return null;
21049
- };
21050
- const renderFeatureLink = (feature) => {
21269
+ }, []);
21270
+ const renderFeatureLink = useCallback((feature) => {
21051
21271
  if (feature.linkSlot) return feature.linkSlot;
21052
- if (!feature.link) return null;
21272
+ if (!feature.link && !feature.linkLabel) return null;
21273
+ const label = feature.linkLabel || (feature.link ? "Learn more" : null);
21274
+ if (!label) return null;
21053
21275
  return /* @__PURE__ */ jsxs(
21054
21276
  Pressable,
21055
21277
  {
21056
21278
  href: feature.link,
21057
21279
  className: cn("flex items-center gap-2 text-sm font-medium", feature.linkClassName),
21058
21280
  children: [
21059
- feature.linkLabel || "Learn more",
21281
+ label,
21060
21282
  /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
21061
21283
  ]
21062
21284
  }
21063
21285
  );
21064
- };
21286
+ }, []);
21065
21287
  const featuresContent = useMemo$1(() => {
21066
21288
  if (featuresSlot) return featuresSlot;
21067
21289
  if (!features || features.length === 0) return null;
@@ -21080,7 +21302,7 @@ function FeaturePatternGridLinks({
21080
21302
  },
21081
21303
  index
21082
21304
  ));
21083
- }, [featuresSlot, features, cardClassName]);
21305
+ }, [featuresSlot, features, cardClassName, renderFeatureIcon, renderFeatureLink]);
21084
21306
  return /* @__PURE__ */ jsx(
21085
21307
  Section,
21086
21308
  {
@@ -21089,12 +21311,8 @@ function FeaturePatternGridLinks({
21089
21311
  pattern,
21090
21312
  patternOpacity,
21091
21313
  patternClassName,
21092
- className: cn("bg-muted/30", className),
21314
+ className,
21093
21315
  containerClassName,
21094
- style: {
21095
- backgroundImage: `url(${patternUrl})`,
21096
- backgroundRepeat: "repeat"
21097
- },
21098
21316
  children: /* @__PURE__ */ jsx("div", { className: cn("grid gap-6 md:grid-cols-2 lg:grid-cols-3", gridClassName), children: featuresContent })
21099
21317
  }
21100
21318
  );
@@ -21162,7 +21380,7 @@ function FeatureTabbedContentImage({
21162
21380
  description,
21163
21381
  slides,
21164
21382
  slidesSlot,
21165
- defaultTab = "1",
21383
+ defaultTab,
21166
21384
  className,
21167
21385
  containerClassName,
21168
21386
  headerClassName,
@@ -21181,7 +21399,7 @@ function FeatureTabbedContentImage({
21181
21399
  patternOpacity,
21182
21400
  patternClassName
21183
21401
  }) {
21184
- const renderFeatures = useMemo$1(() => (slide) => {
21402
+ const renderFeatures = React52.useCallback((slide) => {
21185
21403
  if (slide.featuresSlot) return slide.featuresSlot;
21186
21404
  if (!slide.features || slide.features.length === 0) return null;
21187
21405
  return slide.features.map((feature, index) => {
@@ -21195,7 +21413,7 @@ function FeatureTabbedContentImage({
21195
21413
  ] }, index);
21196
21414
  });
21197
21415
  }, []);
21198
- const renderActions = useMemo$1(() => (slide) => {
21416
+ const renderActions = React52.useCallback((slide) => {
21199
21417
  if (slide.actionsSlot) return slide.actionsSlot;
21200
21418
  if (!slide.actions || slide.actions.length === 0) return null;
21201
21419
  return slide.actions.map((action, index) => {
@@ -21235,7 +21453,7 @@ function FeatureTabbedContentImage({
21235
21453
  );
21236
21454
  });
21237
21455
  }, []);
21238
- const renderImage = useMemo$1(() => (slide) => {
21456
+ const renderImage = React52.useCallback((slide) => {
21239
21457
  if (slide.imageSlot) return slide.imageSlot;
21240
21458
  if (!slide.image) return null;
21241
21459
  const imageAlt = slide.imageAlt || (typeof slide.title === "string" ? slide.title : "Tab content image");
@@ -21282,6 +21500,11 @@ function FeatureTabbedContentImage({
21282
21500
  ))
21283
21501
  ] });
21284
21502
  }, [slidesSlot, slides, tabsListClassName, tabTriggerClassName, tabContentClassName, contentGridClassName, renderFeatures, renderActions, renderImage]);
21503
+ const effectiveDefaultTab = useMemo$1(() => {
21504
+ if (defaultTab) return defaultTab;
21505
+ if (slides && slides.length > 0) return slides[0].id.toString();
21506
+ return "1";
21507
+ }, [defaultTab, slides]);
21285
21508
  return /* @__PURE__ */ jsxs(
21286
21509
  Section,
21287
21510
  {
@@ -21297,10 +21520,10 @@ function FeatureTabbedContentImage({
21297
21520
  title && (typeof title === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("text-center text-3xl font-semibold lg:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: cn("text-center text-3xl font-semibold lg:text-5xl", titleClassName), children: title })),
21298
21521
  description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-center text-balance text-muted-foreground lg:text-xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("text-center text-balance text-muted-foreground lg:text-xl", descriptionClassName), children: description }))
21299
21522
  ] }),
21300
- /* @__PURE__ */ jsx("div", { className: cn("mt-12", tabsWrapperClassName), children: /* @__PURE__ */ jsx(
21523
+ (slidesSlot || slides && slides.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-12", tabsWrapperClassName), children: /* @__PURE__ */ jsx(
21301
21524
  Tabs,
21302
21525
  {
21303
- defaultValue: defaultTab,
21526
+ defaultValue: effectiveDefaultTab,
21304
21527
  className: cn("mx-auto flex w-fit flex-col items-center gap-8 md:gap-12", tabsClassName),
21305
21528
  children: slidesContent
21306
21529
  }
@@ -21312,7 +21535,7 @@ function FeatureTabbedContentImage({
21312
21535
  function FeatureUtilityCardsGrid({
21313
21536
  label,
21314
21537
  labelIcon,
21315
- labelIconName = "lucide/square-dashed-mouse-pointer",
21538
+ labelIconName,
21316
21539
  title,
21317
21540
  description,
21318
21541
  learnMoreAction,
@@ -21334,11 +21557,11 @@ function FeatureUtilityCardsGrid({
21334
21557
  patternOpacity,
21335
21558
  patternClassName
21336
21559
  }) {
21337
- const renderLabelIcon = () => {
21560
+ const renderLabelIcon = useMemo$1(() => {
21338
21561
  if (labelIcon) return labelIcon;
21339
21562
  if (labelIconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: labelIconName, size: 20, className: "text-primary" });
21340
- return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/square-dashed-mouse-pointer", size: 20, className: "text-primary" });
21341
- };
21563
+ return null;
21564
+ }, [labelIcon, labelIconName]);
21342
21565
  const learnMoreContent = useMemo$1(() => {
21343
21566
  if (learnMoreSlot) return learnMoreSlot;
21344
21567
  if (!learnMoreAction) return null;
@@ -21369,7 +21592,7 @@ function FeatureUtilityCardsGrid({
21369
21592
  }
21370
21593
  );
21371
21594
  }, [learnMoreSlot, learnMoreAction]);
21372
- const renderUtilityImage = (utility) => {
21595
+ const renderUtilityImage = React52.useCallback((utility) => {
21373
21596
  if (utility.imageSlot) return utility.imageSlot;
21374
21597
  if (utility.image) {
21375
21598
  return /* @__PURE__ */ jsx(
@@ -21384,7 +21607,7 @@ function FeatureUtilityCardsGrid({
21384
21607
  );
21385
21608
  }
21386
21609
  return null;
21387
- };
21610
+ }, [optixFlowConfig]);
21388
21611
  const utilitiesContent = useMemo$1(() => {
21389
21612
  if (utilitiesSlot) return utilitiesSlot;
21390
21613
  if (!utilities || utilities.length === 0) return null;
@@ -21395,7 +21618,7 @@ function FeatureUtilityCardsGrid({
21395
21618
  utility.description && (typeof utility.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground", utility.descriptionClassName), children: utility.description }) : /* @__PURE__ */ jsx("div", { className: cn("text-muted-foreground", utility.descriptionClassName), children: utility.description }))
21396
21619
  ] })
21397
21620
  ] }, index));
21398
- }, [utilitiesSlot, utilities, cardClassName, optixFlowConfig]);
21621
+ }, [utilitiesSlot, utilities, cardClassName, renderUtilityImage]);
21399
21622
  return /* @__PURE__ */ jsxs(
21400
21623
  Section,
21401
21624
  {
@@ -21407,26 +21630,28 @@ function FeatureUtilityCardsGrid({
21407
21630
  className,
21408
21631
  containerClassName: cn("max-w-7xl", containerClassName),
21409
21632
  children: [
21410
- /* @__PURE__ */ jsxs("div", { className: cn("flex items-center justify-between text-sm", headerClassName), children: [
21411
- /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-1 text-muted-foreground", labelClassName), children: [
21412
- renderLabelIcon(),
21413
- label && (typeof label === "string" ? /* @__PURE__ */ jsx("p", { children: label }) : /* @__PURE__ */ jsx("div", { children: label }))
21633
+ (label || labelIcon || labelIconName || learnMoreSlot || learnMoreAction) && /* @__PURE__ */ jsxs(Fragment$1, { children: [
21634
+ /* @__PURE__ */ jsxs("div", { className: cn("flex items-center justify-between text-sm", headerClassName), children: [
21635
+ (label || labelIcon || labelIconName) && /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-1 text-muted-foreground", labelClassName), children: [
21636
+ renderLabelIcon,
21637
+ label && (typeof label === "string" ? /* @__PURE__ */ jsx("p", { children: label }) : /* @__PURE__ */ jsx("div", { children: label }))
21638
+ ] }),
21639
+ learnMoreContent
21414
21640
  ] }),
21415
- learnMoreContent
21641
+ /* @__PURE__ */ jsx(Separator, { className: "mt-3 mb-8" })
21416
21642
  ] }),
21417
- /* @__PURE__ */ jsx(Separator, { className: "mt-3 mb-8" }),
21418
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col justify-between gap-6 md:flex-row", children: [
21643
+ (title || description) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col justify-between gap-6 md:flex-row", children: [
21419
21644
  title && (typeof title === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-medium md:w-1/2", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: cn("text-3xl font-medium md:w-1/2", titleClassName), children: title })),
21420
21645
  description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("md:w-1/2", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("md:w-1/2", descriptionClassName), children: description }))
21421
21646
  ] }),
21422
- /* @__PURE__ */ 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 })
21647
+ (utilitiesSlot || utilities && utilities.length > 0) && /* @__PURE__ */ 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 })
21423
21648
  ]
21424
21649
  }
21425
21650
  );
21426
21651
  }
21427
21652
  function FeatureBentoUtilities({
21428
21653
  label,
21429
- labelIconName = "lucide/square-dashed-mouse-pointer",
21654
+ labelIconName,
21430
21655
  labelIcon,
21431
21656
  title,
21432
21657
  description,
@@ -21449,7 +21674,7 @@ function FeatureBentoUtilities({
21449
21674
  patternOpacity,
21450
21675
  patternClassName
21451
21676
  }) {
21452
- const renderCard = useMemo$1(() => (card, index) => {
21677
+ const renderCard = React52.useCallback((card, index) => {
21453
21678
  const hasImage = card.imageSrc || card.imageSlot;
21454
21679
  const cardClasses = cn(
21455
21680
  hasImage ? "overflow-hidden pt-0" : "p-6",
@@ -21495,12 +21720,16 @@ function FeatureBentoUtilities({
21495
21720
  card.description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: card.description })
21496
21721
  ] }, index);
21497
21722
  }, [optixFlowConfig]);
21498
- const renderColumn = useMemo$1(() => (cards, slot) => {
21723
+ const renderColumn = React52.useCallback((cards, slot) => {
21499
21724
  if (slot) return slot;
21500
21725
  if (!cards || cards.length === 0) return null;
21501
21726
  return cards.map((card, index) => renderCard(card, index));
21502
21727
  }, [renderCard]);
21503
- const labelIconElement = useMemo$1(() => labelIcon ?? (labelIconName ? /* @__PURE__ */ jsx(DynamicIcon, { name: labelIconName, size: 20 }) : null), [labelIcon, labelIconName]);
21728
+ const labelIconElement = useMemo$1(() => {
21729
+ if (labelIcon) return labelIcon;
21730
+ if (labelIconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: labelIconName, size: 20 });
21731
+ return null;
21732
+ }, [labelIcon, labelIconName]);
21504
21733
  return /* @__PURE__ */ jsxs(
21505
21734
  Section,
21506
21735
  {
@@ -21512,7 +21741,7 @@ function FeatureBentoUtilities({
21512
21741
  className: cn("bg-gray-50 dark:bg-background", className),
21513
21742
  containerClassName: cn("max-w-7xl", containerClassName),
21514
21743
  children: [
21515
- /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2 text-muted-foreground", labelClassName), children: [
21744
+ (labelIconElement || label) && /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2 text-muted-foreground", labelClassName), children: [
21516
21745
  labelIconElement,
21517
21746
  label && (typeof label === "string" ? /* @__PURE__ */ jsx("p", { className: "text-sm", children: label }) : /* @__PURE__ */ jsx("div", { className: "text-sm", children: label }))
21518
21747
  ] }),
@@ -21551,15 +21780,15 @@ function FeatureChecklistThreeColumn({
21551
21780
  patternOpacity,
21552
21781
  patternClassName
21553
21782
  }) {
21554
- const getCheckItemContent = useMemo$1(() => (item) => {
21783
+ const getCheckItemContent = useCallback((item) => {
21555
21784
  if (typeof item === "string") return item;
21556
21785
  return item.content;
21557
21786
  }, []);
21558
- const getCheckItemClassName = useMemo$1(() => (item) => {
21787
+ const getCheckItemClassName = useCallback((item) => {
21559
21788
  if (typeof item === "string") return void 0;
21560
21789
  return item.className;
21561
21790
  }, []);
21562
- const renderChecklistColumn = useMemo$1(() => (items, slot, gapClass) => {
21791
+ const renderChecklistColumn = useCallback((items, slot, gapClass) => {
21563
21792
  if (slot) return slot;
21564
21793
  if (!items || items.length === 0) return null;
21565
21794
  return /* @__PURE__ */ jsx("ul", { className: cn("flex flex-col text-muted-foreground", gapClass, checklistClassName), children: items.map((item, index) => /* @__PURE__ */ jsxs("li", { className: cn("flex items-center gap-2", getCheckItemClassName(item)), children: [
@@ -21567,7 +21796,7 @@ function FeatureChecklistThreeColumn({
21567
21796
  getCheckItemContent(item)
21568
21797
  ] }, index)) });
21569
21798
  }, [checklistClassName, getCheckItemContent, getCheckItemClassName]);
21570
- const renderCardImage = useMemo$1(() => (card) => {
21799
+ const renderCardImage = useCallback((card) => {
21571
21800
  if (card.imageSlot) return card.imageSlot;
21572
21801
  if (card.image) {
21573
21802
  return /* @__PURE__ */ jsx(
@@ -21583,7 +21812,7 @@ function FeatureChecklistThreeColumn({
21583
21812
  }
21584
21813
  return null;
21585
21814
  }, [optixFlowConfig]);
21586
- const renderCardLink = useMemo$1(() => (card) => {
21815
+ const renderCardLink = useCallback((card) => {
21587
21816
  if (card.linkSlot) return card.linkSlot;
21588
21817
  if (!card.link) return null;
21589
21818
  return /* @__PURE__ */ jsxs(
@@ -21646,7 +21875,7 @@ function FeatureChecklistThreeColumn({
21646
21875
  pattern,
21647
21876
  patternOpacity,
21648
21877
  patternClassName,
21649
- className: cn("py-16 sm:py-24 md:py-32", className),
21878
+ className,
21650
21879
  containerClassName,
21651
21880
  children: [
21652
21881
  /* @__PURE__ */ 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: [
@@ -21678,26 +21907,25 @@ function FeatureIntegrationCards({
21678
21907
  patternOpacity,
21679
21908
  patternClassName
21680
21909
  }) {
21681
- const renderIntegrationIcon = useMemo$1(() => (integration) => {
21910
+ const renderIntegrationIcon = useCallback((integration) => {
21682
21911
  if (integration.iconSlot) return integration.iconSlot;
21683
- if (integration.icon) {
21684
- return /* @__PURE__ */ jsx(
21685
- Img,
21686
- {
21687
- src: integration.icon,
21688
- alt: integration.iconAlt || (typeof integration.title === "string" ? integration.title : "Integration icon"),
21689
- className: cn("h-auto w-7", integration.iconClassName),
21690
- loading: "lazy",
21691
- optixFlowConfig
21692
- }
21693
- );
21694
- }
21695
- return null;
21912
+ if (!integration.icon) return null;
21913
+ return /* @__PURE__ */ jsx(
21914
+ Img,
21915
+ {
21916
+ src: integration.icon,
21917
+ alt: integration.iconAlt || (typeof integration.title === "string" ? integration.title : "Integration icon"),
21918
+ className: cn("h-auto w-7", integration.iconClassName),
21919
+ loading: "lazy",
21920
+ optixFlowConfig
21921
+ }
21922
+ );
21696
21923
  }, [optixFlowConfig]);
21697
- const renderLinkLabel = useMemo$1(() => (integration) => {
21924
+ const renderLinkLabel = useCallback((integration) => {
21698
21925
  if (integration.linkLabelSlot) return integration.linkLabelSlot;
21926
+ if (!integration.linkLabel) return null;
21699
21927
  return /* @__PURE__ */ jsxs("span", { className: cn("flex items-center gap-1 rounded-full border px-3 py-2.5 text-sm", integration.linkLabelClassName), children: [
21700
- integration.linkLabel || "Visit Website",
21928
+ integration.linkLabel,
21701
21929
  /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-right", size: 16 })
21702
21930
  ] });
21703
21931
  }, []);
@@ -21705,10 +21933,12 @@ function FeatureIntegrationCards({
21705
21933
  if (integrationsSlot) return integrationsSlot;
21706
21934
  if (!integrations || integrations.length === 0) return null;
21707
21935
  return integrations.map((integration, index) => {
21936
+ const iconContent = renderIntegrationIcon(integration);
21937
+ const linkLabelContent = renderLinkLabel(integration);
21708
21938
  const cardContent = /* @__PURE__ */ jsxs(Fragment$1, { children: [
21709
21939
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
21710
- /* @__PURE__ */ jsx("span", { className: "grid size-12 shrink-0 place-content-center rounded-md border", children: renderIntegrationIcon(integration) }),
21711
- renderLinkLabel(integration)
21940
+ iconContent && /* @__PURE__ */ jsx("span", { className: "grid size-12 shrink-0 place-content-center rounded-md border", children: iconContent }),
21941
+ linkLabelContent
21712
21942
  ] }),
21713
21943
  /* @__PURE__ */ jsxs("div", { children: [
21714
21944
  integration.title && (typeof integration.title === "string" ? /* @__PURE__ */ jsx("h3", { className: cn("font-medium md:text-lg", integration.titleClassName), children: integration.title }) : /* @__PURE__ */ jsx("div", { className: cn("font-medium md:text-lg", integration.titleClassName), children: integration.title })),
@@ -21780,12 +22010,12 @@ function FeatureIconTabsContent({
21780
22010
  patternOpacity,
21781
22011
  patternClassName
21782
22012
  }) {
21783
- const renderTabIcon = useMemo$1(() => (tab) => {
22013
+ const renderTabIcon = useCallback((tab) => {
21784
22014
  if (tab.icon) return tab.icon;
21785
22015
  if (tab.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: tab.iconName, size: 16 });
21786
- return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/star", size: 16 });
22016
+ return null;
21787
22017
  }, []);
21788
- const renderTabContentActions = useMemo$1(() => (content) => {
22018
+ const renderTabContentActions = useCallback((content) => {
21789
22019
  if (content.actionsSlot) return content.actionsSlot;
21790
22020
  if (!content.actions || content.actions.length === 0) return null;
21791
22021
  return content.actions.map((action, index) => {
@@ -21825,7 +22055,7 @@ function FeatureIconTabsContent({
21825
22055
  );
21826
22056
  });
21827
22057
  }, []);
21828
- const renderTabContentImage = useMemo$1(() => (content) => {
22058
+ const renderTabContentImage = useCallback((content) => {
21829
22059
  if (content.imageSlot) return content.imageSlot;
21830
22060
  if (content.imageSrc) {
21831
22061
  return /* @__PURE__ */ jsx(
@@ -21852,7 +22082,7 @@ function FeatureIconTabsContent({
21852
22082
  value: tab.value,
21853
22083
  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),
21854
22084
  children: [
21855
- renderTabIcon(tab),
22085
+ (tab.icon || tab.iconName) && renderTabIcon(tab),
21856
22086
  tab.label
21857
22087
  ]
21858
22088
  },
@@ -21874,9 +22104,9 @@ function FeatureIconTabsContent({
21874
22104
  content.badge && /* @__PURE__ */ jsx(Badge, { variant: "outline", className: cn("w-fit bg-background", content.badgeClassName), children: content.badge }),
21875
22105
  content.title && (typeof content.title === "string" ? /* @__PURE__ */ jsx("h3", { className: cn("text-3xl font-semibold lg:text-5xl", content.titleClassName), children: content.title }) : /* @__PURE__ */ jsx("div", { className: cn("text-3xl font-semibold lg:text-5xl", content.titleClassName), children: content.title })),
21876
22106
  content.description && (typeof content.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground lg:text-lg", content.descriptionClassName), children: content.description }) : /* @__PURE__ */ jsx("div", { className: cn("text-muted-foreground lg:text-lg", content.descriptionClassName), children: content.description })),
21877
- renderTabContentActions(content)
22107
+ (content.actionsSlot || content.actions && content.actions.length > 0) && renderTabContentActions(content)
21878
22108
  ] }),
21879
- /* @__PURE__ */ jsx("div", { className: "relative h-[300px] w-full lg:h-[400px]", children: renderTabContentImage(content) })
22109
+ (content.imageSlot || content.imageSrc) && /* @__PURE__ */ jsx("div", { className: "relative h-[300px] w-full lg:h-[400px]", children: renderTabContentImage(content) })
21880
22110
  ]
21881
22111
  },
21882
22112
  tab.value
@@ -21895,7 +22125,7 @@ function FeatureIconTabsContent({
21895
22125
  className,
21896
22126
  containerClassName: cn("mx-auto", containerClassName),
21897
22127
  children: [
21898
- /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col items-center gap-4 text-center", headerClassName), children: [
22128
+ (badge || heading || description) && /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col items-center gap-4 text-center", headerClassName), children: [
21899
22129
  badge && /* @__PURE__ */ jsx(Badge, { variant: "outline", className: badgeClassName, children: badge }),
21900
22130
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("max-w-2xl text-3xl font-semibold md:text-4xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("div", { className: cn("max-w-2xl text-3xl font-semibold md:text-4xl", headingClassName), children: heading })),
21901
22131
  description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("text-muted-foreground", descriptionClassName), children: description }))
@@ -22058,28 +22288,30 @@ function FeatureImageOverlayBadge({
22058
22288
  description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground lg:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("text-muted-foreground lg:text-lg", descriptionClassName), children: description })),
22059
22289
  /* @__PURE__ */ jsx("div", { className: actionsClassName, children: actionsContent })
22060
22290
  ] }),
22061
- /* @__PURE__ */ jsxs("div", { className: cn("relative rounded-xl", imageWrapperClassName), children: [
22291
+ imageContent && /* @__PURE__ */ jsxs("div", { className: cn("relative rounded-xl", imageWrapperClassName), children: [
22062
22292
  imageContent,
22063
- /* @__PURE__ */ jsx("div", { className: cn("absolute top-0 right-0 bottom-0 left-0 rounded-xl bg-linear-to-t from-primary via-transparent to-transparent", overlayClassName) }),
22064
- /* @__PURE__ */ jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
22065
- /* @__PURE__ */ jsxs("span", { className: cn("ml-auto flex w-fit items-center gap-2 rounded-full bg-background/30 px-4 py-2.5 text-sm font-semibold backdrop-blur-sm", avatarBadgeClassName), children: [
22066
- /* @__PURE__ */ jsx(Avatar, { className: "size-7 rounded-full", children: /* @__PURE__ */ jsx(AvatarImage, { src: avatarSrc, alt: "Avatar" }) }),
22067
- avatarBadgeText
22068
- ] }),
22069
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-5 text-background", children: [
22070
- overlayTitle && (typeof overlayTitle === "string" ? /* @__PURE__ */ jsx("h4", { className: cn("text-lg font-semibold lg:text-3xl", overlayTitleClassName), children: overlayTitle }) : /* @__PURE__ */ jsx("div", { className: cn("text-lg font-semibold lg:text-3xl", overlayTitleClassName), children: overlayTitle })),
22071
- overlayLinkText && /* @__PURE__ */ jsxs(
22072
- Pressable,
22073
- {
22074
- href: overlayLinkUrl,
22075
- onClick: overlayLinkOnClick,
22076
- className: "flex items-center gap-1 font-medium",
22077
- children: [
22078
- overlayLinkText,
22079
- /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
22080
- ]
22081
- }
22082
- )
22293
+ (avatarSrc || avatarBadgeText || overlayTitle || overlayLinkText) && /* @__PURE__ */ jsxs(Fragment$1, { children: [
22294
+ /* @__PURE__ */ jsx("div", { className: cn("absolute top-0 right-0 bottom-0 left-0 rounded-xl bg-linear-to-t from-primary via-transparent to-transparent", overlayClassName) }),
22295
+ /* @__PURE__ */ jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
22296
+ (avatarSrc || avatarBadgeText) && /* @__PURE__ */ jsxs("span", { className: cn("ml-auto flex w-fit items-center gap-2 rounded-full bg-background/30 px-4 py-2.5 text-sm font-semibold backdrop-blur-sm", avatarBadgeClassName), children: [
22297
+ avatarSrc && /* @__PURE__ */ jsx(Avatar, { className: "size-7 rounded-full", children: /* @__PURE__ */ jsx(AvatarImage, { src: avatarSrc, alt: "Avatar" }) }),
22298
+ avatarBadgeText
22299
+ ] }),
22300
+ (overlayTitle || overlayLinkText) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-5 text-background", children: [
22301
+ overlayTitle && (typeof overlayTitle === "string" ? /* @__PURE__ */ jsx("h4", { className: cn("text-lg font-semibold lg:text-3xl", overlayTitleClassName), children: overlayTitle }) : /* @__PURE__ */ jsx("div", { className: cn("text-lg font-semibold lg:text-3xl", overlayTitleClassName), children: overlayTitle })),
22302
+ overlayLinkText && /* @__PURE__ */ jsxs(
22303
+ Pressable,
22304
+ {
22305
+ href: overlayLinkUrl,
22306
+ onClick: overlayLinkOnClick,
22307
+ className: "flex items-center gap-1 font-medium",
22308
+ children: [
22309
+ overlayLinkText,
22310
+ /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
22311
+ ]
22312
+ }
22313
+ )
22314
+ ] })
22083
22315
  ] })
22084
22316
  ] })
22085
22317
  ] })
@@ -22108,7 +22340,7 @@ function FeatureCategoryImageCards({
22108
22340
  patternOpacity,
22109
22341
  patternClassName
22110
22342
  }) {
22111
- const renderFeatureImage = (feature) => {
22343
+ const renderFeatureImage = useCallback((feature) => {
22112
22344
  if (feature.imageSlot) return feature.imageSlot;
22113
22345
  if (feature.imageSrc) {
22114
22346
  return /* @__PURE__ */ jsx(
@@ -22123,7 +22355,7 @@ function FeatureCategoryImageCards({
22123
22355
  );
22124
22356
  }
22125
22357
  return null;
22126
- };
22358
+ }, [optixFlowConfig]);
22127
22359
  const featuresContent = useMemo$1(() => {
22128
22360
  if (featuresSlot) return featuresSlot;
22129
22361
  if (!features || features.length === 0) return null;
@@ -22134,7 +22366,7 @@ function FeatureCategoryImageCards({
22134
22366
  ] }),
22135
22367
  /* @__PURE__ */ jsx(CardContent, { className: "px-7 pb-7", children: renderFeatureImage(feature) })
22136
22368
  ] }, index));
22137
- }, [featuresSlot, features, cardClassName, optixFlowConfig]);
22369
+ }, [featuresSlot, features, cardClassName, renderFeatureImage]);
22138
22370
  return /* @__PURE__ */ jsxs(
22139
22371
  Section,
22140
22372
  {
@@ -22175,12 +22407,12 @@ function FeatureBentoImageGrid({
22175
22407
  patternOpacity,
22176
22408
  patternClassName
22177
22409
  }) {
22178
- const renderItemIcon = useMemo$1(() => (item) => {
22410
+ const renderItemIcon = React52.useCallback((item) => {
22179
22411
  if (item.icon) return item.icon;
22180
22412
  if (item.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: item.iconName, size: 24 });
22181
22413
  return null;
22182
22414
  }, []);
22183
- const renderItemImage = useMemo$1(() => (item, imageClassName) => {
22415
+ const renderItemImage = React52.useCallback((item, imageClassName) => {
22184
22416
  if (item.imageSlot) return item.imageSlot;
22185
22417
  if (item.imageSrc) {
22186
22418
  return /* @__PURE__ */ jsx(
@@ -22196,13 +22428,15 @@ function FeatureBentoImageGrid({
22196
22428
  }
22197
22429
  return null;
22198
22430
  }, [optixFlowConfig]);
22199
- const renderLargeCard = useMemo$1(() => (item) => {
22431
+ const renderLargeCard = React52.useCallback((item) => {
22432
+ const iconContent = renderItemIcon(item);
22433
+ const hasIconBadgeContent = iconContent || item.iconBadge;
22200
22434
  const cardContent = /* @__PURE__ */ jsxs(Fragment$1, { children: [
22201
22435
  renderItemImage(item, "h-full max-h-[580px] w-full rounded-xl object-cover object-center"),
22202
22436
  /* @__PURE__ */ 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" }),
22203
22437
  /* @__PURE__ */ jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
22204
- /* @__PURE__ */ 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: [
22205
- renderItemIcon(item),
22438
+ hasIconBadgeContent && /* @__PURE__ */ 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: [
22439
+ iconContent,
22206
22440
  item.iconBadge
22207
22441
  ] }),
22208
22442
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-5 text-background", children: [
@@ -22226,7 +22460,9 @@ function FeatureBentoImageGrid({
22226
22460
  }
22227
22461
  return /* @__PURE__ */ jsx("div", { className: cn("group relative col-span-2 row-span-3 overflow-hidden rounded-xl", largeCardClassName, item.className), children: cardContent });
22228
22462
  }, [largeCardClassName, renderItemImage, renderItemIcon]);
22229
- const renderSmallCard = useMemo$1(() => (item, index) => {
22463
+ const renderSmallCard = React52.useCallback((item, index) => {
22464
+ const iconContent = renderItemIcon(item);
22465
+ const hasIconBadgeContent = iconContent || item.iconBadge;
22230
22466
  const cardContent = /* @__PURE__ */ jsxs(Fragment$1, { children: [
22231
22467
  renderItemImage(item, cn(
22232
22468
  "h-full w-full rounded-xl object-cover object-center",
@@ -22234,8 +22470,8 @@ function FeatureBentoImageGrid({
22234
22470
  )),
22235
22471
  /* @__PURE__ */ 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" }),
22236
22472
  /* @__PURE__ */ jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
22237
- /* @__PURE__ */ 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: [
22238
- renderItemIcon(item),
22473
+ hasIconBadgeContent && /* @__PURE__ */ 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: [
22474
+ iconContent,
22239
22475
  item.iconBadge
22240
22476
  ] }),
22241
22477
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-5 text-background", children: [
@@ -22323,34 +22559,33 @@ function FeatureImageCardsThreeColumn({
22323
22559
  patternOpacity,
22324
22560
  patternClassName
22325
22561
  }) {
22562
+ const renderImage = useCallback((card, imageAlt) => {
22563
+ if (card.imageSlot) return card.imageSlot;
22564
+ if (!card.imageSrc) return null;
22565
+ return /* @__PURE__ */ jsx(
22566
+ Img,
22567
+ {
22568
+ src: card.imageSrc,
22569
+ alt: imageAlt,
22570
+ className: "h-full max-h-[450px] w-full rounded-xl object-cover object-center",
22571
+ loading: "lazy",
22572
+ optixFlowConfig
22573
+ }
22574
+ );
22575
+ }, [optixFlowConfig]);
22576
+ const renderBadgeIcon = useCallback((card) => {
22577
+ if (card.avatarSrc) {
22578
+ return /* @__PURE__ */ jsx(Avatar, { className: "size-7 rounded-full", children: /* @__PURE__ */ jsx(AvatarImage, { src: card.avatarSrc, alt: "Avatar" }) });
22579
+ }
22580
+ if (card.icon) return card.icon;
22581
+ if (!card.iconName) return null;
22582
+ return /* @__PURE__ */ jsx(DynamicIcon, { name: card.iconName, size: 24 });
22583
+ }, []);
22326
22584
  const cardsContent = useMemo$1(() => {
22327
22585
  if (cardsSlot) return cardsSlot;
22328
22586
  if (!cards || cards.length === 0) return null;
22329
22587
  return cards.map((card, index) => {
22330
22588
  const imageAlt = card.imageAlt || (typeof card.title === "string" ? card.title : "Card image");
22331
- const renderImage = () => {
22332
- if (card.imageSlot) return card.imageSlot;
22333
- if (card.imageSrc) {
22334
- return /* @__PURE__ */ jsx(
22335
- Img,
22336
- {
22337
- src: card.imageSrc,
22338
- alt: imageAlt,
22339
- className: "h-full max-h-[450px] w-full rounded-xl object-cover object-center",
22340
- loading: "lazy",
22341
- optixFlowConfig
22342
- }
22343
- );
22344
- }
22345
- return null;
22346
- };
22347
- const renderBadgeIcon = () => {
22348
- if (card.avatarSrc) {
22349
- return /* @__PURE__ */ jsx(Avatar, { className: "size-7 rounded-full", children: /* @__PURE__ */ jsx(AvatarImage, { src: card.avatarSrc, alt: "Avatar" }) });
22350
- }
22351
- if (card.icon) return card.icon;
22352
- return /* @__PURE__ */ jsx(DynamicIcon, { name: card.iconName || "lucide/zap", size: 24 });
22353
- };
22354
22589
  return /* @__PURE__ */ jsxs(
22355
22590
  Pressable,
22356
22591
  {
@@ -22358,10 +22593,10 @@ function FeatureImageCardsThreeColumn({
22358
22593
  onClick: card.onClick,
22359
22594
  className: cn("group relative overflow-hidden rounded-xl", cardClassName, card.className),
22360
22595
  children: [
22361
- renderImage(),
22596
+ renderImage(card, imageAlt),
22362
22597
  /* @__PURE__ */ 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" }),
22363
22598
  /* @__PURE__ */ jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
22364
- /* @__PURE__ */ jsxs(
22599
+ (card.badgeText || card.avatarSrc || card.icon || card.iconName) && /* @__PURE__ */ jsxs(
22365
22600
  "span",
22366
22601
  {
22367
22602
  className: cn(
@@ -22370,7 +22605,7 @@ function FeatureImageCardsThreeColumn({
22370
22605
  card.badgeClassName
22371
22606
  ),
22372
22607
  children: [
22373
- renderBadgeIcon(),
22608
+ renderBadgeIcon(card),
22374
22609
  card.badgeText
22375
22610
  ]
22376
22611
  }
@@ -22388,7 +22623,7 @@ function FeatureImageCardsThreeColumn({
22388
22623
  index
22389
22624
  );
22390
22625
  });
22391
- }, [cardsSlot, cards, cardClassName, optixFlowConfig]);
22626
+ }, [cardsSlot, cards, cardClassName, renderImage, renderBadgeIcon]);
22392
22627
  return /* @__PURE__ */ jsxs(
22393
22628
  Section,
22394
22629
  {
@@ -22425,11 +22660,11 @@ function FeatureIconGridMuted({
22425
22660
  patternOpacity,
22426
22661
  patternClassName
22427
22662
  }) {
22428
- const renderFeatureIcon = (feature) => {
22663
+ const renderFeatureIcon = useCallback((feature) => {
22429
22664
  if (feature.icon) return feature.icon;
22430
22665
  if (feature.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: feature.iconName, size: 24, className: feature.iconClassName });
22431
22666
  return null;
22432
- };
22667
+ }, []);
22433
22668
  const featuresContent = useMemo$1(() => {
22434
22669
  if (featuresSlot) return featuresSlot;
22435
22670
  if (!features || features.length === 0) return null;
@@ -22438,14 +22673,14 @@ function FeatureIconGridMuted({
22438
22673
  {
22439
22674
  className: cn("flex flex-col gap-2.5 rounded-xl border bg-background p-7", cardClassName, feature.className),
22440
22675
  children: [
22441
- renderFeatureIcon(feature),
22676
+ (feature.icon || feature.iconName) && renderFeatureIcon(feature),
22442
22677
  feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsx("h3", { className: cn("font-semibold", feature.titleClassName), children: feature.title }) : /* @__PURE__ */ jsx("div", { className: cn("font-semibold", feature.titleClassName), children: feature.title })),
22443
22678
  feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm text-muted-foreground", feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsx("div", { className: cn("text-sm text-muted-foreground", feature.descriptionClassName), children: feature.description }))
22444
22679
  ]
22445
22680
  },
22446
22681
  index
22447
22682
  ));
22448
- }, [featuresSlot, features, cardClassName]);
22683
+ }, [featuresSlot, features, cardClassName, renderFeatureIcon]);
22449
22684
  return /* @__PURE__ */ jsx(
22450
22685
  Section,
22451
22686
  {
@@ -22457,11 +22692,11 @@ function FeatureIconGridMuted({
22457
22692
  className: cn("bg-muted/60", className),
22458
22693
  containerClassName,
22459
22694
  children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-10", children: [
22460
- /* @__PURE__ */ jsxs("div", { className: cn("mx-auto flex max-w-xl flex-col gap-2.5 text-center", headerClassName), children: [
22695
+ (title || description) && /* @__PURE__ */ jsxs("div", { className: cn("mx-auto flex max-w-xl flex-col gap-2.5 text-center", headerClassName), children: [
22461
22696
  title && (typeof title === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("text-4xl font-semibold md:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: cn("text-4xl font-semibold md:text-5xl", titleClassName), children: title })),
22462
22697
  description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("text-muted-foreground", descriptionClassName), children: description }))
22463
22698
  ] }),
22464
- /* @__PURE__ */ 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 })
22699
+ (featuresSlot || features && features.length > 0) && /* @__PURE__ */ 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 })
22465
22700
  ] })
22466
22701
  }
22467
22702
  );
@@ -22494,37 +22729,25 @@ function FeatureStatsHighlight({
22494
22729
  if (actionsSlot) return actionsSlot;
22495
22730
  if (!actions || actions.length === 0) return null;
22496
22731
  return actions.map((action, index) => {
22497
- if (action.children) {
22498
- return /* @__PURE__ */ jsx(
22499
- Pressable,
22500
- {
22501
- href: action.href,
22502
- onClick: action.onClick,
22503
- variant: action.variant,
22504
- size: action.size,
22505
- className: cn("mt-4 w-fit gap-2", action.className),
22506
- "aria-label": action["aria-label"],
22507
- asButton: true,
22508
- children: action.children
22509
- },
22510
- index
22511
- );
22512
- }
22513
- return /* @__PURE__ */ jsxs(
22732
+ const {
22733
+ label,
22734
+ icon,
22735
+ iconAfter,
22736
+ children,
22737
+ className: actionClassName,
22738
+ ...pressableProps
22739
+ } = action;
22740
+ return /* @__PURE__ */ jsx(
22514
22741
  Pressable,
22515
22742
  {
22516
- href: action.href,
22517
- onClick: action.onClick,
22518
- variant: action.variant,
22519
- size: action.size,
22520
- className: cn("mt-4 w-fit gap-2", action.className),
22521
- "aria-label": action["aria-label"],
22743
+ className: cn("mt-4 w-fit gap-2", actionClassName),
22522
22744
  asButton: true,
22523
- children: [
22524
- action.icon,
22525
- action.label,
22526
- action.iconAfter
22527
- ]
22745
+ ...pressableProps,
22746
+ children: children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
22747
+ icon,
22748
+ label,
22749
+ iconAfter
22750
+ ] })
22528
22751
  },
22529
22752
  index
22530
22753
  );
@@ -22538,8 +22761,8 @@ function FeatureStatsHighlight({
22538
22761
  {
22539
22762
  className: cn("flex flex-col gap-2 rounded-xl border bg-muted/30 p-6", statCardClassName, stat.className),
22540
22763
  children: [
22541
- /* @__PURE__ */ jsx("span", { className: cn("text-4xl font-bold text-primary lg:text-5xl", stat.valueClassName), children: stat.value }),
22542
- /* @__PURE__ */ jsx("span", { className: cn("text-muted-foreground", stat.labelClassName), children: stat.label })
22764
+ stat.value && /* @__PURE__ */ jsx("span", { className: cn("text-4xl font-bold text-primary lg:text-5xl", stat.valueClassName), children: stat.value }),
22765
+ stat.label && /* @__PURE__ */ jsx("span", { className: cn("text-muted-foreground", stat.labelClassName), children: stat.label })
22543
22766
  ]
22544
22767
  },
22545
22768
  index
@@ -22560,9 +22783,9 @@ function FeatureStatsHighlight({
22560
22783
  badge && /* @__PURE__ */ jsx(Badge, { variant: "outline", className: cn("w-fit", badgeClassName), children: badge }),
22561
22784
  title && (typeof title === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-semibold lg:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: cn("text-3xl font-semibold lg:text-5xl", titleClassName), children: title })),
22562
22785
  description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground lg:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("text-muted-foreground lg:text-lg", descriptionClassName), children: description })),
22563
- /* @__PURE__ */ jsx("div", { className: actionsClassName, children: actionsContent })
22786
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: actionsClassName, children: actionsContent })
22564
22787
  ] }),
22565
- /* @__PURE__ */ jsx("div", { className: cn("grid grid-cols-2 gap-6", statsGridClassName), children: statsContent })
22788
+ (statsSlot || stats && stats.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("grid grid-cols-2 gap-6", statsGridClassName), children: statsContent })
22566
22789
  ] })
22567
22790
  }
22568
22791
  );
@@ -22626,7 +22849,7 @@ function FeatureAccordionImage({
22626
22849
  description,
22627
22850
  items,
22628
22851
  itemsSlot,
22629
- defaultValue = "item-0",
22852
+ defaultValue,
22630
22853
  className,
22631
22854
  containerClassName,
22632
22855
  headerClassName,
@@ -22643,24 +22866,25 @@ function FeatureAccordionImage({
22643
22866
  patternOpacity,
22644
22867
  patternClassName
22645
22868
  }) {
22646
- const [activeItem, setActiveItem] = React52.useState(defaultValue);
22869
+ const [activeItem, setActiveItem] = React52.useState(defaultValue || "item-0");
22647
22870
  const activeIndex = parseInt(activeItem.replace("item-", ""), 10) || 0;
22648
22871
  const currentImage = items?.[activeIndex] || items?.[0];
22649
22872
  const accordionItemsContent = useMemo$1(() => {
22650
22873
  if (itemsSlot) return itemsSlot;
22651
22874
  if (!items || items.length === 0) return null;
22652
22875
  return items.map((item, index) => /* @__PURE__ */ jsxs(AccordionItem, { value: `item-${index}`, className: item.className, children: [
22653
- /* @__PURE__ */ jsx(AccordionTrigger, { className: cn("text-left text-lg font-medium", item.triggerClassName), children: item.title }),
22654
- /* @__PURE__ */ jsx(AccordionContent, { className: cn("text-muted-foreground", item.contentClassName), children: item.content })
22876
+ item.title && /* @__PURE__ */ jsx(AccordionTrigger, { className: cn("text-left text-lg font-medium", item.triggerClassName), children: item.title }),
22877
+ item.content && /* @__PURE__ */ jsx(AccordionContent, { className: cn("text-muted-foreground", item.contentClassName), children: item.content })
22655
22878
  ] }, index));
22656
22879
  }, [itemsSlot, items]);
22657
22880
  const imageContent = useMemo$1(() => {
22658
22881
  if (currentImage?.imageSlot) return currentImage.imageSlot;
22882
+ if (!currentImage?.imageSrc) return null;
22659
22883
  return /* @__PURE__ */ jsx(
22660
22884
  Img,
22661
22885
  {
22662
- src: currentImage?.imageSrc || "",
22663
- alt: currentImage?.imageAlt || "",
22886
+ src: currentImage.imageSrc,
22887
+ alt: currentImage.imageAlt || "",
22664
22888
  className: cn("h-full w-full object-cover transition-opacity duration-300", imageClassName),
22665
22889
  loading: "lazy",
22666
22890
  optixFlowConfig
@@ -22678,11 +22902,11 @@ function FeatureAccordionImage({
22678
22902
  className,
22679
22903
  containerClassName,
22680
22904
  children: [
22681
- /* @__PURE__ */ jsxs("div", { className: cn("mb-12 text-center", headerClassName), children: [
22905
+ (title || description) && /* @__PURE__ */ jsxs("div", { className: cn("mb-12 text-center", headerClassName), children: [
22682
22906
  title && (typeof title === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-semibold md:text-4xl lg:text-5xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: cn("text-3xl font-semibold md:text-4xl lg:text-5xl", titleClassName), children: title })),
22683
22907
  description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-muted-foreground lg:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("mt-4 text-muted-foreground lg:text-lg", descriptionClassName), children: description }))
22684
22908
  ] }),
22685
- /* @__PURE__ */ jsxs("div", { className: cn("grid gap-10 lg:grid-cols-2 lg:gap-16", gridClassName), children: [
22909
+ (itemsSlot || items && items.length > 0) && /* @__PURE__ */ jsxs("div", { className: cn("grid gap-10 lg:grid-cols-2 lg:gap-16", gridClassName), children: [
22686
22910
  /* @__PURE__ */ jsx(
22687
22911
  Accordion,
22688
22912
  {
@@ -22717,49 +22941,52 @@ function FeatureCapabilitiesGrid({
22717
22941
  patternOpacity,
22718
22942
  patternClassName
22719
22943
  }) {
22720
- const renderItemIcon = (item) => {
22944
+ const renderItemIcon = React52.useCallback((item) => {
22721
22945
  if (item.icon) return item.icon;
22722
22946
  if (item.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: item.iconName, size: 20 });
22723
- return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/star", size: 20 });
22724
- };
22947
+ return null;
22948
+ }, []);
22725
22949
  const itemsContent = useMemo$1(() => {
22726
22950
  if (itemsSlot) return itemsSlot;
22727
22951
  if (!items || items.length === 0) return null;
22728
- return items.map((item, index) => /* @__PURE__ */ jsxs(
22729
- Card,
22730
- {
22731
- 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),
22732
- children: [
22733
- /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-300 group-hover:opacity-100", children: /* @__PURE__ */ jsx("div", { className: "absolute -inset-px rounded-xl bg-linear-to-br from-white/10 via-white/5 to-transparent" }) }),
22734
- /* @__PURE__ */ 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" }),
22735
- /* @__PURE__ */ jsxs("div", { className: "pointer-events-none absolute inset-0 hidden group-hover:block", children: [
22736
- /* @__PURE__ */ jsx("div", { className: "absolute -left-2 -top-2 h-3 w-3 bg-white" }),
22737
- /* @__PURE__ */ jsx("div", { className: "absolute -right-2 -top-2 h-3 w-3 bg-white" }),
22738
- /* @__PURE__ */ jsx("div", { className: "absolute -left-2 -bottom-2 h-3 w-3 bg-white" }),
22739
- /* @__PURE__ */ jsx("div", { className: "absolute -right-2 -bottom-2 h-3 w-3 bg-white" })
22740
- ] }),
22741
- /* @__PURE__ */ jsxs(CardHeader, { className: "relative z-10 flex flex-row items-start gap-3 p-6", children: [
22742
- /* @__PURE__ */ 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) }),
22743
- /* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
22744
- item.title && (typeof item.title === "string" ? /* @__PURE__ */ jsx(CardTitle, { className: cn("text-lg font-medium text-white", item.titleClassName), children: item.title }) : /* @__PURE__ */ jsx("div", { className: cn("text-lg font-medium text-white", item.titleClassName), children: item.title })),
22745
- item.badge && /* @__PURE__ */ 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 })
22746
- ] }) })
22747
- ] }),
22748
- /* @__PURE__ */ jsx(CardContent, { className: cn("relative z-10 px-6 pb-6 text-sm text-white/70", item.descriptionClassName), children: item.description }),
22749
- /* @__PURE__ */ jsx(
22750
- motion.div,
22751
- {
22752
- className: "pointer-events-none absolute inset-0 rounded-xl ring-0 ring-white/0",
22753
- initial: { opacity: 0 },
22754
- whileHover: { opacity: 1 },
22755
- transition: { duration: 0.25 }
22756
- }
22757
- )
22758
- ]
22759
- },
22760
- `${typeof item.title === "string" ? item.title : "item"}-${index}`
22761
- ));
22762
- }, [itemsSlot, items, cardClassName]);
22952
+ return items.map((item, index) => {
22953
+ const iconContent = renderItemIcon(item);
22954
+ return /* @__PURE__ */ jsxs(
22955
+ Card,
22956
+ {
22957
+ 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),
22958
+ children: [
22959
+ /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-300 group-hover:opacity-100", children: /* @__PURE__ */ jsx("div", { className: "absolute -inset-px rounded-xl bg-linear-to-br from-white/10 via-white/5 to-transparent" }) }),
22960
+ /* @__PURE__ */ 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" }),
22961
+ /* @__PURE__ */ jsxs("div", { className: "pointer-events-none absolute inset-0 hidden group-hover:block", children: [
22962
+ /* @__PURE__ */ jsx("div", { className: "absolute -left-2 -top-2 h-3 w-3 bg-white" }),
22963
+ /* @__PURE__ */ jsx("div", { className: "absolute -right-2 -top-2 h-3 w-3 bg-white" }),
22964
+ /* @__PURE__ */ jsx("div", { className: "absolute -left-2 -bottom-2 h-3 w-3 bg-white" }),
22965
+ /* @__PURE__ */ jsx("div", { className: "absolute -right-2 -bottom-2 h-3 w-3 bg-white" })
22966
+ ] }),
22967
+ /* @__PURE__ */ jsxs(CardHeader, { className: "relative z-10 flex flex-row items-start gap-3 p-6", children: [
22968
+ iconContent && /* @__PURE__ */ 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 }),
22969
+ /* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
22970
+ item.title && (typeof item.title === "string" ? /* @__PURE__ */ jsx(CardTitle, { className: cn("text-lg font-medium text-white", item.titleClassName), children: item.title }) : /* @__PURE__ */ jsx("div", { className: cn("text-lg font-medium text-white", item.titleClassName), children: item.title })),
22971
+ item.badge && /* @__PURE__ */ 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 })
22972
+ ] }) })
22973
+ ] }),
22974
+ item.description && /* @__PURE__ */ jsx(CardContent, { className: cn("relative z-10 px-6 pb-6 text-sm text-white/70", item.descriptionClassName), children: item.description }),
22975
+ /* @__PURE__ */ jsx(
22976
+ motion.div,
22977
+ {
22978
+ className: "pointer-events-none absolute inset-0 rounded-xl ring-0 ring-white/0",
22979
+ initial: { opacity: 0 },
22980
+ whileHover: { opacity: 1 },
22981
+ transition: { duration: 0.25 }
22982
+ }
22983
+ )
22984
+ ]
22985
+ },
22986
+ `${typeof item.title === "string" ? item.title : "item"}-${index}`
22987
+ );
22988
+ });
22989
+ }, [itemsSlot, items, cardClassName, renderItemIcon]);
22763
22990
  return /* @__PURE__ */ jsxs(
22764
22991
  Section,
22765
22992
  {
@@ -39371,7 +39598,7 @@ function CommunityInitiatives({
39371
39598
  }
39372
39599
  );
39373
39600
  }
39374
- var Controls = ({
39601
+ var Controls = React52.memo(({
39375
39602
  handleNext,
39376
39603
  handlePrevious,
39377
39604
  isPreviousDisabled,
@@ -39399,9 +39626,9 @@ var Controls = ({
39399
39626
  }
39400
39627
  )
39401
39628
  ] });
39402
- };
39403
- var FeatureCard = ({ feature, isActive, onClick }) => {
39404
- const variants2 = {
39629
+ });
39630
+ var FeatureCard = React52.memo(({ feature, isActive, onClick }) => {
39631
+ const variants2 = useMemo$1(() => ({
39405
39632
  initial: {
39406
39633
  opacity: 0
39407
39634
  },
@@ -39411,7 +39638,7 @@ var FeatureCard = ({ feature, isActive, onClick }) => {
39411
39638
  exit: {
39412
39639
  opacity: 0
39413
39640
  }
39414
- };
39641
+ }), []);
39415
39642
  return /* @__PURE__ */ jsx(AnimatePresence, { mode: "popLayout", children: /* @__PURE__ */ jsx(
39416
39643
  motion.div,
39417
39644
  {
@@ -39441,13 +39668,13 @@ var FeatureCard = ({ feature, isActive, onClick }) => {
39441
39668
  ease: "easeOut"
39442
39669
  },
39443
39670
  className: "p-6 text-sm md:p-8 md:text-base",
39444
- children: /* @__PURE__ */ jsxs("p", { children: [
39445
- /* @__PURE__ */ jsxs("span", { className: "font-semibold", children: [
39671
+ children: (feature.title || feature.description) && /* @__PURE__ */ jsxs("p", { children: [
39672
+ feature.title && /* @__PURE__ */ jsxs("span", { className: "font-semibold", children: [
39446
39673
  feature.title,
39447
39674
  "."
39448
39675
  ] }),
39449
- " ",
39450
- /* @__PURE__ */ jsx("span", { children: feature.description })
39676
+ feature.title && feature.description && " ",
39677
+ feature.description && /* @__PURE__ */ jsx("span", { children: feature.description })
39451
39678
  ] })
39452
39679
  },
39453
39680
  `feature-description-active-${feature.title}`
@@ -39481,15 +39708,15 @@ var FeatureCard = ({ feature, isActive, onClick }) => {
39481
39708
  className: "shrink-0"
39482
39709
  }
39483
39710
  ),
39484
- /* @__PURE__ */ jsx("p", { className: "shrink-0 font-semibold", children: feature.title })
39711
+ feature.title && /* @__PURE__ */ jsx("p", { className: "shrink-0 font-semibold", children: feature.title })
39485
39712
  ]
39486
39713
  },
39487
39714
  `feature-description-inactive-${feature.title}`
39488
39715
  )
39489
39716
  }
39490
39717
  ) });
39491
- };
39492
- var FeaturesDesktop = ({
39718
+ });
39719
+ var FeaturesDesktop = React52.memo(({
39493
39720
  features,
39494
39721
  handleNext,
39495
39722
  handlePrevious,
@@ -39520,8 +39747,8 @@ var FeaturesDesktop = ({
39520
39747
  );
39521
39748
  }) })
39522
39749
  ] });
39523
- };
39524
- var FeaturesMobile = ({
39750
+ });
39751
+ var FeaturesMobile = React52.memo(({
39525
39752
  features,
39526
39753
  handleNext,
39527
39754
  handlePrevious,
@@ -39530,7 +39757,7 @@ var FeaturesMobile = ({
39530
39757
  isPreviousDisabled,
39531
39758
  isNextDisabled
39532
39759
  }) => {
39533
- const variants2 = {
39760
+ const variants2 = useMemo$1(() => ({
39534
39761
  enter: (direction2) => ({
39535
39762
  x: direction2 > 0 ? 100 : -100,
39536
39763
  opacity: 0
@@ -39543,7 +39770,8 @@ var FeaturesMobile = ({
39543
39770
  x: direction2 < 0 ? 100 : -100,
39544
39771
  opacity: 0
39545
39772
  })
39546
- };
39773
+ }), []);
39774
+ const currentFeature = features[activeIndex];
39547
39775
  return /* @__PURE__ */ jsx("div", { className: "relative z-10 flex flex-col items-center gap-6 md:hidden", children: /* @__PURE__ */ jsxs("div", { className: "flex w-full items-center justify-between gap-4", children: [
39548
39776
  /* @__PURE__ */ jsx(
39549
39777
  "button",
@@ -39568,13 +39796,13 @@ var FeaturesMobile = ({
39568
39796
  opacity: { duration: 0.2 }
39569
39797
  },
39570
39798
  className: "absolute inset-0 flex items-center justify-center rounded-3xl bg-background p-4",
39571
- children: /* @__PURE__ */ jsxs("p", { className: "text-center text-sm", children: [
39572
- /* @__PURE__ */ jsxs("span", { className: "font-semibold", children: [
39573
- features[activeIndex].title,
39799
+ children: (currentFeature?.title || currentFeature?.description) && /* @__PURE__ */ jsxs("p", { className: "text-center text-sm", children: [
39800
+ currentFeature.title && /* @__PURE__ */ jsxs("span", { className: "font-semibold", children: [
39801
+ currentFeature.title,
39574
39802
  "."
39575
39803
  ] }),
39576
- " ",
39577
- /* @__PURE__ */ jsx("span", { children: features[activeIndex].description })
39804
+ currentFeature.title && currentFeature.description && " ",
39805
+ currentFeature.description && /* @__PURE__ */ jsx("span", { children: currentFeature.description })
39578
39806
  ] })
39579
39807
  },
39580
39808
  activeIndex
@@ -39590,9 +39818,9 @@ var FeaturesMobile = ({
39590
39818
  }
39591
39819
  )
39592
39820
  ] }) });
39593
- };
39821
+ });
39594
39822
  function FeatureAnimatedCarousel({
39595
- features = [],
39823
+ features,
39596
39824
  className,
39597
39825
  optixFlowConfig,
39598
39826
  background,
@@ -39603,25 +39831,25 @@ function FeatureAnimatedCarousel({
39603
39831
  }) {
39604
39832
  const [activeIndex, setActiveIndex] = React52.useState(0);
39605
39833
  const [direction, setDirection] = React52.useState(1);
39606
- const handleNext = () => {
39607
- if (activeIndex < features.length - 1) {
39834
+ const handleNext = useCallback(() => {
39835
+ if (features && activeIndex < features.length - 1) {
39608
39836
  setDirection(1);
39609
39837
  setActiveIndex(activeIndex + 1);
39610
39838
  }
39611
- };
39612
- const handlePrevious = () => {
39839
+ }, [activeIndex, features]);
39840
+ const handlePrevious = useCallback(() => {
39613
39841
  if (activeIndex > 0) {
39614
39842
  setDirection(-1);
39615
39843
  setActiveIndex(activeIndex - 1);
39616
39844
  }
39617
- };
39618
- const handleFeatureClick = (index) => {
39845
+ }, [activeIndex]);
39846
+ const handleFeatureClick = useCallback((index) => {
39619
39847
  setDirection(index > activeIndex ? 1 : -1);
39620
39848
  setActiveIndex(index);
39621
- };
39849
+ }, [activeIndex]);
39622
39850
  const isPreviousDisabled = activeIndex === 0;
39623
- const isNextDisabled = activeIndex === features.length - 1;
39624
- const imageVariants = {
39851
+ const isNextDisabled = !features || activeIndex === features.length - 1;
39852
+ const imageVariants = useMemo$1(() => ({
39625
39853
  enter: (direction2) => ({
39626
39854
  x: direction2 > 0 ? 300 : -300,
39627
39855
  opacity: 0
@@ -39634,7 +39862,22 @@ function FeatureAnimatedCarousel({
39634
39862
  x: direction2 < 0 ? 300 : -300,
39635
39863
  opacity: 0
39636
39864
  })
39637
- };
39865
+ }), []);
39866
+ if (!features || features.length === 0) {
39867
+ return /* @__PURE__ */ jsx(
39868
+ Section,
39869
+ {
39870
+ background,
39871
+ spacing,
39872
+ pattern,
39873
+ patternOpacity,
39874
+ patternClassName,
39875
+ className,
39876
+ children: /* @__PURE__ */ 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]" })
39877
+ }
39878
+ );
39879
+ }
39880
+ const currentFeature = features[activeIndex];
39638
39881
  return /* @__PURE__ */ jsx(
39639
39882
  Section,
39640
39883
  {
@@ -39645,7 +39888,7 @@ function FeatureAnimatedCarousel({
39645
39888
  patternClassName,
39646
39889
  className,
39647
39890
  children: /* @__PURE__ */ 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: [
39648
- features && /* @__PURE__ */ jsx(
39891
+ /* @__PURE__ */ jsx(
39649
39892
  FeaturesDesktop,
39650
39893
  {
39651
39894
  features,
@@ -39657,7 +39900,7 @@ function FeatureAnimatedCarousel({
39657
39900
  isNextDisabled
39658
39901
  }
39659
39902
  ),
39660
- features && /* @__PURE__ */ jsx(
39903
+ /* @__PURE__ */ jsx(
39661
39904
  FeaturesMobile,
39662
39905
  {
39663
39906
  features,
@@ -39669,7 +39912,7 @@ function FeatureAnimatedCarousel({
39669
39912
  isNextDisabled
39670
39913
  }
39671
39914
  ),
39672
- /* @__PURE__ */ 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__ */ jsx(AnimatePresence, { mode: "wait", custom: direction, children: /* @__PURE__ */ jsx(
39915
+ currentFeature?.image && /* @__PURE__ */ 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__ */ jsx(AnimatePresence, { mode: "wait", custom: direction, children: /* @__PURE__ */ jsx(
39673
39916
  motion.div,
39674
39917
  {
39675
39918
  custom: direction,
@@ -39685,8 +39928,8 @@ function FeatureAnimatedCarousel({
39685
39928
  children: /* @__PURE__ */ jsx(
39686
39929
  Img,
39687
39930
  {
39688
- src: features ? features[activeIndex].image : void 0,
39689
- alt: features ? features[activeIndex].imageAlt || (typeof features[activeIndex].title === "string" ? features[activeIndex].title : "Feature image") : void 0,
39931
+ src: currentFeature.image,
39932
+ alt: currentFeature.imageAlt || (typeof currentFeature.title === "string" ? currentFeature.title : "Feature image"),
39690
39933
  className: "h-full w-full object-cover",
39691
39934
  optixFlowConfig
39692
39935
  }
@@ -62300,22 +62543,29 @@ var NavbarTabbedSections = ({
62300
62543
  ]
62301
62544
  }
62302
62545
  ) }),
62303
- /* @__PURE__ */ jsxs(SheetContent, { side: "right", className: "w-[300px] overflow-y-auto", children: [
62304
- /* @__PURE__ */ jsx(SheetTitle, { className: "sr-only", children: "Navigation Menu" }),
62305
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 pt-8", children: [
62306
- renderMobileMenu,
62307
- /* @__PURE__ */ jsx(
62308
- "div",
62309
- {
62310
- className: cn(
62311
- "mt-4 flex flex-col gap-2 border-t pt-4",
62312
- actionsClassName
62313
- ),
62314
- children: renderAuthActions
62315
- }
62316
- )
62317
- ] })
62318
- ] })
62546
+ /* @__PURE__ */ jsxs(
62547
+ SheetContent,
62548
+ {
62549
+ side: "right",
62550
+ className: "w-[300px] overflow-y-auto",
62551
+ children: [
62552
+ /* @__PURE__ */ jsx(SheetTitle, { className: "sr-only", children: "Navigation Menu" }),
62553
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 pt-8", children: [
62554
+ renderMobileMenu,
62555
+ /* @__PURE__ */ jsx(
62556
+ "div",
62557
+ {
62558
+ className: cn(
62559
+ "mt-4 flex flex-col gap-2 border-t pt-4",
62560
+ actionsClassName
62561
+ ),
62562
+ children: renderAuthActions
62563
+ }
62564
+ )
62565
+ ] })
62566
+ ]
62567
+ }
62568
+ )
62319
62569
  ] })
62320
62570
  ]
62321
62571
  }
@@ -77274,7 +77524,7 @@ function ListSearchableGrid({
77274
77524
  }
77275
77525
  );
77276
77526
  }
77277
- var { useMemo: useMemo441 } = React52;
77527
+ var { useMemo: useMemo443 } = React52;
77278
77528
  function OfferModalNewsletterDiscount({
77279
77529
  title,
77280
77530
  emailPlaceholder,
@@ -77341,7 +77591,7 @@ function OfferModalNewsletterDiscount({
77341
77591
  });
77342
77592
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
77343
77593
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
77344
- const renderCloseButton = useMemo441(() => {
77594
+ const renderCloseButton = useMemo443(() => {
77345
77595
  if (closeButtonSlot) return closeButtonSlot;
77346
77596
  if (!closeButtonText) return null;
77347
77597
  return /* @__PURE__ */ jsx("div", { className: "absolute end-1.5 top-1.5", children: /* @__PURE__ */ jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsx(
@@ -77355,12 +77605,12 @@ function OfferModalNewsletterDiscount({
77355
77605
  }
77356
77606
  ) }) });
77357
77607
  }, [closeButtonSlot, closeButtonText, closeClassName]);
77358
- const renderHeader = useMemo441(() => {
77608
+ const renderHeader = useMemo443(() => {
77359
77609
  if (headerSlot) return headerSlot;
77360
77610
  if (!title) return null;
77361
77611
  return /* @__PURE__ */ jsx(DialogHeader, { className: headerClassName, children: typeof title === "string" ? /* @__PURE__ */ jsx(DialogTitle, { className: cn("text-start font-serif text-2xl font-normal leading-snug", titleClassName), children: title }) : /* @__PURE__ */ jsx(DialogTitle, { className: cn("text-start font-serif text-2xl font-normal leading-snug", titleClassName), children: title }) });
77362
77612
  }, [headerSlot, title, headerClassName, titleClassName]);
77363
- const renderForm = useMemo441(() => {
77613
+ const renderForm = useMemo443(() => {
77364
77614
  if (formSlot) return formSlot;
77365
77615
  return /* @__PURE__ */ jsxs(
77366
77616
  Form,
@@ -77422,7 +77672,7 @@ function OfferModalNewsletterDiscount({
77422
77672
  }
77423
77673
  ) });
77424
77674
  }
77425
- var { useMemo: useMemo442 } = React52;
77675
+ var { useMemo: useMemo444 } = React52;
77426
77676
  function OfferModalMembershipImage({
77427
77677
  overline,
77428
77678
  title,
@@ -77498,7 +77748,7 @@ function OfferModalMembershipImage({
77498
77748
  });
77499
77749
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
77500
77750
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
77501
- const renderImage = useMemo442(() => {
77751
+ const renderImage = useMemo444(() => {
77502
77752
  if (imageSlot) return imageSlot;
77503
77753
  if (!image) return null;
77504
77754
  return /* @__PURE__ */ jsx("div", { className: cn("max-h-[290px] h-full overflow-hidden max-lg:hidden", imageWrapperClassName), children: /* @__PURE__ */ jsx(
@@ -77511,7 +77761,7 @@ function OfferModalMembershipImage({
77511
77761
  }
77512
77762
  ) });
77513
77763
  }, [imageSlot, image, imageWrapperClassName, imageClassName, optixFlowConfig]);
77514
- const renderCloseButton = useMemo442(() => {
77764
+ const renderCloseButton = useMemo444(() => {
77515
77765
  if (closeButtonSlot) return closeButtonSlot;
77516
77766
  return /* @__PURE__ */ jsx("div", { className: "absolute -end-px -top-px z-10", children: /* @__PURE__ */ jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsx(
77517
77767
  Pressable,
@@ -77527,7 +77777,7 @@ function OfferModalMembershipImage({
77527
77777
  }
77528
77778
  ) }) });
77529
77779
  }, [closeButtonSlot, closeClassName]);
77530
- const renderForm = useMemo442(() => {
77780
+ const renderForm = useMemo444(() => {
77531
77781
  if (formSlot) return formSlot;
77532
77782
  return /* @__PURE__ */ jsxs(
77533
77783
  Form,
@@ -77590,7 +77840,7 @@ function OfferModalMembershipImage({
77590
77840
  }
77591
77841
  );
77592
77842
  }, [formSlot, form, formConfig, formMethod, emailPlaceholder, inputClassName, submitClassName, buttonText, formClassName]);
77593
- const renderFooter = useMemo442(() => {
77843
+ const renderFooter = useMemo444(() => {
77594
77844
  if (footerSlot) return footerSlot;
77595
77845
  if (!description) return null;
77596
77846
  return /* @__PURE__ */ jsx(DialogFooter, { className: footerClassName, children: /* @__PURE__ */ jsx(DialogDescription, { className: cn("text-muted-foreground text-center text-xs leading-relaxed", descriptionClassName), children: description }) });
@@ -77618,7 +77868,7 @@ function OfferModalMembershipImage({
77618
77868
  }
77619
77869
  ) });
77620
77870
  }
77621
- var { useMemo: useMemo443 } = React52;
77871
+ var { useMemo: useMemo445 } = React52;
77622
77872
  function OfferModalSheetNewsletter({
77623
77873
  logo,
77624
77874
  logoSlot,
@@ -77700,7 +77950,7 @@ function OfferModalSheetNewsletter({
77700
77950
  });
77701
77951
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
77702
77952
  const sheetProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
77703
- const renderLogo = useMemo443(() => {
77953
+ const renderLogo = useMemo445(() => {
77704
77954
  if (logoSlot) return logoSlot;
77705
77955
  if (!logo) return null;
77706
77956
  const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
@@ -77714,7 +77964,7 @@ function OfferModalSheetNewsletter({
77714
77964
  }
77715
77965
  );
77716
77966
  }, [logoSlot, logo, logoClassName, optixFlowConfig]);
77717
- const renderHeader = useMemo443(() => {
77967
+ const renderHeader = useMemo445(() => {
77718
77968
  if (headerSlot) return headerSlot;
77719
77969
  return /* @__PURE__ */ jsxs(SheetHeader, { className: cn("gap-8 p-0", headerClassName), children: [
77720
77970
  renderLogo,
@@ -77724,7 +77974,7 @@ function OfferModalSheetNewsletter({
77724
77974
  ] })
77725
77975
  ] });
77726
77976
  }, [headerSlot, renderLogo, headerClassName, title, titleClassName, description, descriptionClassName]);
77727
- const renderForm = useMemo443(() => {
77977
+ const renderForm = useMemo445(() => {
77728
77978
  if (formSlot) return formSlot;
77729
77979
  return /* @__PURE__ */ jsx(
77730
77980
  Form,
@@ -77772,7 +78022,7 @@ function OfferModalSheetNewsletter({
77772
78022
  }
77773
78023
  );
77774
78024
  }, [formSlot, form, formConfig, formMethod, emailPlaceholder, inputClassName, submitClassName, buttonText, formClassName]);
77775
- const renderLegal = useMemo443(() => {
78025
+ const renderLegal = useMemo445(() => {
77776
78026
  if (legalSlot) return legalSlot;
77777
78027
  if (!termsUrl || !termsText || !privacyUrl || !privacyText) return null;
77778
78028
  return /* @__PURE__ */ jsxs("p", { className: cn("text-muted-foreground text-xs", legalClassName), children: [
@@ -77786,7 +78036,7 @@ function OfferModalSheetNewsletter({
77786
78036
  "."
77787
78037
  ] });
77788
78038
  }, [legalSlot, termsUrl, termsText, privacyUrl, privacyText, legalClassName]);
77789
- const renderImage = useMemo443(() => {
78039
+ const renderImage = useMemo445(() => {
77790
78040
  if (imageSlot) return imageSlot;
77791
78041
  if (!image) return null;
77792
78042
  return /* @__PURE__ */ jsx("div", { className: cn("h-1/2 basis-1/2", imageWrapperClassName), children: /* @__PURE__ */ jsx(AspectRatio, { ratio: 1, className: "overflow-hidden", children: /* @__PURE__ */ jsx(