@opensite/ui 2.8.5 → 2.8.7

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 (141) hide show
  1. package/dist/about-developer-profile.cjs +17 -10
  2. package/dist/about-developer-profile.js +17 -10
  3. package/dist/article-chapters-author.cjs +17 -10
  4. package/dist/article-chapters-author.js +17 -10
  5. package/dist/carousel-animated-sections.cjs +79 -25
  6. package/dist/carousel-animated-sections.d.cts +7 -2
  7. package/dist/carousel-animated-sections.d.ts +7 -2
  8. package/dist/carousel-animated-sections.js +79 -25
  9. package/dist/carousel-gallery-thumbnails.cjs +79 -25
  10. package/dist/carousel-gallery-thumbnails.d.cts +7 -2
  11. package/dist/carousel-gallery-thumbnails.d.ts +7 -2
  12. package/dist/carousel-gallery-thumbnails.js +79 -25
  13. package/dist/carousel-portfolio-hero.cjs +79 -25
  14. package/dist/carousel-portfolio-hero.d.cts +7 -2
  15. package/dist/carousel-portfolio-hero.d.ts +7 -2
  16. package/dist/carousel-portfolio-hero.js +79 -25
  17. package/dist/components.cjs +35 -10
  18. package/dist/components.d.cts +29 -2
  19. package/dist/components.d.ts +29 -2
  20. package/dist/components.js +35 -11
  21. package/dist/footer-accordion-social.cjs +17 -10
  22. package/dist/footer-accordion-social.js +17 -10
  23. package/dist/footer-animated-social.cjs +17 -10
  24. package/dist/footer-animated-social.js +17 -10
  25. package/dist/footer-brand-description.cjs +17 -10
  26. package/dist/footer-brand-description.js +17 -10
  27. package/dist/footer-brand-links-contact.cjs +17 -10
  28. package/dist/footer-brand-links-contact.js +17 -10
  29. package/dist/footer-comprehensive-links.cjs +17 -10
  30. package/dist/footer-comprehensive-links.js +17 -10
  31. package/dist/footer-contact-card.cjs +17 -10
  32. package/dist/footer-contact-card.js +17 -10
  33. package/dist/footer-cta-banner.cjs +17 -10
  34. package/dist/footer-cta-banner.js +17 -10
  35. package/dist/footer-cta-social.cjs +17 -10
  36. package/dist/footer-cta-social.js +17 -10
  37. package/dist/footer-info-cards-accordion.cjs +17 -10
  38. package/dist/footer-info-cards-accordion.js +17 -10
  39. package/dist/footer-nav-social.cjs +17 -10
  40. package/dist/footer-nav-social.js +17 -10
  41. package/dist/footer-newsletter-contact.cjs +17 -10
  42. package/dist/footer-newsletter-contact.js +17 -10
  43. package/dist/footer-newsletter-grid.cjs +17 -10
  44. package/dist/footer-newsletter-grid.js +17 -10
  45. package/dist/footer-newsletter-minimal.cjs +17 -10
  46. package/dist/footer-newsletter-minimal.js +17 -10
  47. package/dist/footer-social-apps.cjs +17 -10
  48. package/dist/footer-social-apps.js +17 -10
  49. package/dist/footer-social-newsletter.cjs +17 -10
  50. package/dist/footer-social-newsletter.js +17 -10
  51. package/dist/footer-split-image-accordion.cjs +17 -10
  52. package/dist/footer-split-image-accordion.js +17 -10
  53. package/dist/hero-badge-shadow-overlay.cjs +1 -1
  54. package/dist/hero-badge-shadow-overlay.js +1 -1
  55. package/dist/hero-coming-soon-countdown.cjs +17 -10
  56. package/dist/hero-coming-soon-countdown.js +17 -10
  57. package/dist/hero-video-background-dark.cjs +78 -16
  58. package/dist/hero-video-background-dark.d.cts +7 -2
  59. package/dist/hero-video-background-dark.d.ts +7 -2
  60. package/dist/hero-video-background-dark.js +78 -16
  61. package/dist/index.cjs +35 -10
  62. package/dist/index.d.cts +1 -0
  63. package/dist/index.d.ts +1 -0
  64. package/dist/index.js +35 -11
  65. package/dist/link-page-bento-layout.cjs +17 -10
  66. package/dist/link-page-bento-layout.js +17 -10
  67. package/dist/link-page-grid-cards.cjs +17 -10
  68. package/dist/link-page-grid-cards.js +17 -10
  69. package/dist/link-page-minimal-profile.cjs +17 -10
  70. package/dist/link-page-minimal-profile.js +17 -10
  71. package/dist/link-page-newsletter-social.cjs +17 -10
  72. package/dist/link-page-newsletter-social.js +17 -10
  73. package/dist/link-tree-block.cjs +17 -10
  74. package/dist/link-tree-block.js +17 -10
  75. package/dist/navbar-fullscreen-menu.cjs +17 -10
  76. package/dist/navbar-fullscreen-menu.js +17 -10
  77. package/dist/navbar-transparent-overlay.cjs +17 -10
  78. package/dist/navbar-transparent-overlay.js +17 -10
  79. package/dist/registry.cjs +1398 -851
  80. package/dist/registry.js +1398 -851
  81. package/dist/social-link-icon.cjs +17 -10
  82. package/dist/social-link-icon.d.cts +5 -0
  83. package/dist/social-link-icon.d.ts +5 -0
  84. package/dist/social-link-icon.js +17 -10
  85. package/dist/testimonials-animated-split.cjs +5 -5
  86. package/dist/testimonials-animated-split.js +5 -5
  87. package/dist/testimonials-bento-grid.cjs +48 -56
  88. package/dist/testimonials-bento-grid.js +48 -56
  89. package/dist/testimonials-carousel-image.cjs +608 -96
  90. package/dist/testimonials-carousel-image.d.cts +26 -2
  91. package/dist/testimonials-carousel-image.d.ts +26 -2
  92. package/dist/testimonials-carousel-image.js +609 -97
  93. package/dist/testimonials-centered-avatars.cjs +89 -62
  94. package/dist/testimonials-centered-avatars.d.cts +5 -1
  95. package/dist/testimonials-centered-avatars.d.ts +5 -1
  96. package/dist/testimonials-centered-avatars.js +89 -62
  97. package/dist/testimonials-company-logo.cjs +6 -6
  98. package/dist/testimonials-company-logo.js +6 -6
  99. package/dist/testimonials-grid-add-review.cjs +51 -29
  100. package/dist/testimonials-grid-add-review.js +51 -29
  101. package/dist/testimonials-images-helpful.cjs +181 -160
  102. package/dist/testimonials-images-helpful.d.cts +9 -1
  103. package/dist/testimonials-images-helpful.d.ts +9 -1
  104. package/dist/testimonials-images-helpful.js +181 -159
  105. package/dist/testimonials-list-verified.cjs +63 -44
  106. package/dist/testimonials-list-verified.d.cts +5 -1
  107. package/dist/testimonials-list-verified.d.ts +5 -1
  108. package/dist/testimonials-list-verified.js +64 -45
  109. package/dist/testimonials-logo-cards.cjs +53 -29
  110. package/dist/testimonials-logo-cards.d.cts +5 -1
  111. package/dist/testimonials-logo-cards.d.ts +5 -1
  112. package/dist/testimonials-logo-cards.js +53 -29
  113. package/dist/testimonials-marquee.cjs +524 -102
  114. package/dist/testimonials-marquee.d.cts +5 -1
  115. package/dist/testimonials-marquee.d.ts +5 -1
  116. package/dist/testimonials-marquee.js +525 -100
  117. package/dist/testimonials-mini-dividers.cjs +120 -83
  118. package/dist/testimonials-mini-dividers.d.cts +10 -6
  119. package/dist/testimonials-mini-dividers.d.ts +10 -6
  120. package/dist/testimonials-mini-dividers.js +120 -83
  121. package/dist/testimonials-minimal-numbered.cjs +7 -6
  122. package/dist/testimonials-minimal-numbered.d.cts +5 -1
  123. package/dist/testimonials-minimal-numbered.d.ts +5 -1
  124. package/dist/testimonials-minimal-numbered.js +7 -6
  125. package/dist/testimonials-parallax-number.cjs +14 -8
  126. package/dist/testimonials-parallax-number.js +14 -8
  127. package/dist/testimonials-scrolling-columns.cjs +97 -13
  128. package/dist/testimonials-scrolling-columns.js +97 -13
  129. package/dist/testimonials-simple-grid.cjs +513 -68
  130. package/dist/testimonials-simple-grid.d.cts +9 -5
  131. package/dist/testimonials-simple-grid.d.ts +9 -5
  132. package/dist/testimonials-simple-grid.js +510 -62
  133. package/dist/testimonials-slider-minimal.cjs +604 -90
  134. package/dist/testimonials-slider-minimal.d.cts +17 -1
  135. package/dist/testimonials-slider-minimal.d.ts +17 -1
  136. package/dist/testimonials-slider-minimal.js +598 -81
  137. package/dist/testimonials-split-image.cjs +452 -17
  138. package/dist/testimonials-split-image.js +448 -13
  139. package/dist/testimonials-twitter-cards.cjs +26 -14
  140. package/dist/testimonials-twitter-cards.js +26 -14
  141. package/package.json +11 -1
package/dist/registry.cjs CHANGED
@@ -80,16 +80,6 @@ var DropdownMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(DropdownMe
80
80
  function cn(...inputs) {
81
81
  return tailwindMerge.twMerge(clsx.clsx(inputs));
82
82
  }
83
- var BRIGHTNESS_CLASS_MAP = {
84
- "10": "brightness-[.1]",
85
- "20": "brightness-[.2]",
86
- "25": "brightness-[.25]",
87
- "30": "brightness-[.3]",
88
- "40": "brightness-[.4]",
89
- "50": "brightness-50",
90
- "75": "brightness-75",
91
- "100": "brightness-100"
92
- };
93
83
  function getNestedCardBg(parentBg, variant = "muted", options) {
94
84
  const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
95
85
  if (isDark) {
@@ -2070,6 +2060,23 @@ function PopoverContent({
2070
2060
  }
2071
2061
  ) });
2072
2062
  }
2063
+ function StarRating({
2064
+ rating,
2065
+ size = 18,
2066
+ className
2067
+ }) {
2068
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex items-center gap-0.5", className), children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsxRuntime.jsx(
2069
+ DynamicIcon,
2070
+ {
2071
+ name: "icon-park-solid/star",
2072
+ size,
2073
+ className: cn(
2074
+ star <= rating ? "fill-primary text-primary" : "fill-muted text-muted"
2075
+ )
2076
+ },
2077
+ star
2078
+ )) });
2079
+ }
2073
2080
  var BUTTON_SIZES = {
2074
2081
  sm: { buttonSize: "size-8", iconSize: 16 },
2075
2082
  md: { buttonSize: "size-10", iconSize: 20 },
@@ -2171,6 +2178,7 @@ var SocialLinkIcon = React8__namespace.forwardRef(
2171
2178
  iconClassName,
2172
2179
  className,
2173
2180
  iconNameOverride,
2181
+ iconOnly = false,
2174
2182
  ...pressableProps
2175
2183
  }, ref) => {
2176
2184
  const platform = usePlatformFromUrl.usePlatformFromUrl(href);
@@ -2183,6 +2191,21 @@ var SocialLinkIcon = React8__namespace.forwardRef(
2183
2191
  const accessibleLabel = React8__namespace.useMemo(() => {
2184
2192
  return label || platformName;
2185
2193
  }, [label, platformName]);
2194
+ const icon = React8__namespace.useMemo(() => {
2195
+ return /* @__PURE__ */ jsxRuntime.jsx(
2196
+ DynamicIcon,
2197
+ {
2198
+ name: iconName,
2199
+ size: iconSize,
2200
+ color: iconColor,
2201
+ className: iconClassName,
2202
+ alt: accessibleLabel
2203
+ }
2204
+ );
2205
+ }, [iconName, iconSize, iconColor, iconClassName, accessibleLabel]);
2206
+ if (iconOnly) {
2207
+ return icon;
2208
+ }
2186
2209
  return /* @__PURE__ */ jsxRuntime.jsx(
2187
2210
  Pressable,
2188
2211
  {
@@ -2194,16 +2217,7 @@ var SocialLinkIcon = React8__namespace.forwardRef(
2194
2217
  className
2195
2218
  ),
2196
2219
  ...pressableProps,
2197
- children: /* @__PURE__ */ jsxRuntime.jsx(
2198
- DynamicIcon,
2199
- {
2200
- name: iconName,
2201
- size: iconSize,
2202
- color: iconColor,
2203
- className: iconClassName,
2204
- alt: accessibleLabel
2205
- }
2206
- )
2220
+ children: icon
2207
2221
  }
2208
2222
  );
2209
2223
  }
@@ -19761,6 +19775,67 @@ function ContactHelpCenter({
19761
19775
  }
19762
19776
  );
19763
19777
  }
19778
+ var DIRECTION_STYLES = {
19779
+ "bottom-to-top": "bg-linear-to-t",
19780
+ "top-to-bottom": "bg-linear-to-b",
19781
+ "left-to-right": "bg-linear-to-r",
19782
+ "right-to-left": "bg-linear-to-l",
19783
+ "bottom-left-to-top-right": "bg-linear-to-tr",
19784
+ "bottom-right-to-top-left": "bg-linear-to-tl",
19785
+ "top-left-to-bottom-right": "bg-linear-to-br",
19786
+ "top-right-to-bottom-left": "bg-linear-to-bl"
19787
+ };
19788
+ var INTENSITY_STOPS = {
19789
+ low: "from-black/40 via-black/20 to-transparent",
19790
+ default: "from-black/70 via-black/35 to-transparent",
19791
+ high: "from-black/85 via-black/50 to-transparent",
19792
+ "very-high": "from-black/95 via-black/60 to-black/20"
19793
+ };
19794
+ var RADIAL_INTENSITY = {
19795
+ low: {
19796
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.40) 0%, rgba(0,0,0,0.20) 50%, transparent 100%)"
19797
+ },
19798
+ default: {
19799
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.70) 0%, rgba(0,0,0,0.35) 50%, transparent 100%)"
19800
+ },
19801
+ high: {
19802
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.85) 0%, rgba(0,0,0,0.50) 50%, transparent 100%)"
19803
+ },
19804
+ "very-high": {
19805
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.95) 0%, rgba(0,0,0,0.60) 50%, rgba(0,0,0,0.20) 100%)"
19806
+ }
19807
+ };
19808
+ function GradientOverlay({
19809
+ direction = "bottom-to-top",
19810
+ intensity = "default",
19811
+ className,
19812
+ style,
19813
+ ...props
19814
+ }) {
19815
+ if (direction === "radial-center") {
19816
+ return /* @__PURE__ */ jsxRuntime.jsx(
19817
+ "div",
19818
+ {
19819
+ className: cn("absolute inset-0", className),
19820
+ style: { ...RADIAL_INTENSITY[intensity], ...style },
19821
+ ...props
19822
+ }
19823
+ );
19824
+ }
19825
+ return /* @__PURE__ */ jsxRuntime.jsx(
19826
+ "div",
19827
+ {
19828
+ className: cn(
19829
+ "absolute inset-0",
19830
+ DIRECTION_STYLES[direction],
19831
+ INTENSITY_STOPS[intensity],
19832
+ className
19833
+ ),
19834
+ style,
19835
+ ...props
19836
+ }
19837
+ );
19838
+ }
19764
19839
  function CarouselAnimatedSections({
19765
19840
  sections,
19766
19841
  sectionsSlot,
@@ -19776,7 +19851,8 @@ function CarouselAnimatedSections({
19776
19851
  navigationClassName,
19777
19852
  arrowsClassName,
19778
19853
  counterClassName,
19779
- slideMediaBrightness = "50",
19854
+ slideMediaBrightness,
19855
+ slideMediaOverlayIntensity = "high",
19780
19856
  optixFlowConfig,
19781
19857
  background = "dark",
19782
19858
  spacing = "py-0",
@@ -19865,7 +19941,7 @@ function CarouselAnimatedSections({
19865
19941
  containerMaxWidth,
19866
19942
  containerClassName,
19867
19943
  children: [
19868
- sectionsSlot ? sectionsSlot : currentSection ? /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { initial: false, custom: direction, mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsx(
19944
+ sectionsSlot ? sectionsSlot : currentSection ? /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { initial: false, custom: direction, mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsxs(
19869
19945
  framerMotion.motion.div,
19870
19946
  {
19871
19947
  custom: direction,
@@ -19876,19 +19952,21 @@ function CarouselAnimatedSections({
19876
19952
  transition: { duration: 0.6, ease: [0.4, 0, 0.2, 1] },
19877
19953
  onAnimationComplete: () => setIsAnimating(false),
19878
19954
  className: cn("absolute inset-0", currentSection?.className),
19879
- children: /* @__PURE__ */ jsxRuntime.jsx(
19880
- img.Img,
19881
- {
19882
- src: currentSection?.image,
19883
- alt: typeof currentSection?.title === "string" ? currentSection?.title : `Section ${currentSection?.id}`,
19884
- className: cn(
19885
- "h-full w-full object-cover",
19886
- BRIGHTNESS_CLASS_MAP[slideMediaBrightness],
19887
- currentSection?.imageClassName
19888
- ),
19889
- optixFlowConfig
19890
- }
19891
- )
19955
+ children: [
19956
+ /* @__PURE__ */ jsxRuntime.jsx(
19957
+ img.Img,
19958
+ {
19959
+ src: currentSection?.image,
19960
+ alt: typeof currentSection?.title === "string" ? currentSection?.title : `Section ${currentSection?.id}`,
19961
+ className: cn(
19962
+ "h-full w-full object-cover",
19963
+ currentSection?.imageClassName
19964
+ ),
19965
+ optixFlowConfig
19966
+ }
19967
+ ),
19968
+ /* @__PURE__ */ jsxRuntime.jsx(GradientOverlay, { intensity: slideMediaOverlayIntensity })
19969
+ ]
19892
19970
  },
19893
19971
  currentIndex
19894
19972
  ) }) : null,
@@ -20853,7 +20931,8 @@ function CarouselGalleryThumbnails({
20853
20931
  spacing = "sm",
20854
20932
  pattern,
20855
20933
  patternOpacity,
20856
- slideMediaBrightness = "100"
20934
+ slideMediaBrightness,
20935
+ slideMediaOverlayIntensity = "default"
20857
20936
  }) {
20858
20937
  const [currentIndex, setCurrentIndex] = React8__namespace.useState(0);
20859
20938
  const prevSlide = React8__namespace.useCallback(() => {
@@ -20902,7 +20981,7 @@ function CarouselGalleryThumbnails({
20902
20981
  "relative aspect-video w-full overflow-hidden",
20903
20982
  slideClassName
20904
20983
  ),
20905
- children: imagesSlot ? imagesSlot : images?.map((image, index) => /* @__PURE__ */ jsxRuntime.jsx(
20984
+ children: imagesSlot ? imagesSlot : images?.map((image, index) => /* @__PURE__ */ jsxRuntime.jsxs(
20906
20985
  "div",
20907
20986
  {
20908
20987
  className: cn(
@@ -20910,19 +20989,21 @@ function CarouselGalleryThumbnails({
20910
20989
  index === currentIndex ? "translate-x-0 opacity-100" : index < currentIndex ? "-translate-x-full opacity-0" : "translate-x-full opacity-0",
20911
20990
  image.className
20912
20991
  ),
20913
- children: /* @__PURE__ */ jsxRuntime.jsx(
20914
- img.Img,
20915
- {
20916
- src: image.src,
20917
- alt: typeof image.alt === "string" ? image.alt : `Image ${index + 1}`,
20918
- className: cn(
20919
- "h-full w-full object-cover",
20920
- BRIGHTNESS_CLASS_MAP[slideMediaBrightness],
20921
- image.imageClassName
20922
- ),
20923
- optixFlowConfig
20924
- }
20925
- )
20992
+ children: [
20993
+ /* @__PURE__ */ jsxRuntime.jsx(
20994
+ img.Img,
20995
+ {
20996
+ src: image.src,
20997
+ alt: typeof image.alt === "string" ? image.alt : `Image ${index + 1}`,
20998
+ className: cn(
20999
+ "h-full w-full object-cover",
21000
+ image.imageClassName
21001
+ ),
21002
+ optixFlowConfig
21003
+ }
21004
+ ),
21005
+ /* @__PURE__ */ jsxRuntime.jsx(GradientOverlay, { intensity: slideMediaOverlayIntensity })
21006
+ ]
20926
21007
  },
20927
21008
  `slide-${index}`
20928
21009
  ))
@@ -21739,7 +21820,8 @@ function CarouselPortfolioHero({
21739
21820
  spacing = "none",
21740
21821
  pattern,
21741
21822
  patternOpacity,
21742
- slideMediaBrightness = "50"
21823
+ slideMediaBrightness,
21824
+ slideMediaOverlayIntensity = "high"
21743
21825
  }) {
21744
21826
  const [currentIndex, setCurrentIndex] = React8__namespace.useState(0);
21745
21827
  const intervalRef = React8__namespace.useRef(null);
@@ -21780,7 +21862,7 @@ function CarouselPortfolioHero({
21780
21862
  patternOpacity,
21781
21863
  containerClassName,
21782
21864
  children: [
21783
- slidesSlot ? slidesSlot : slides?.map((slide, index) => /* @__PURE__ */ jsxRuntime.jsx(
21865
+ slidesSlot ? slidesSlot : slides?.map((slide, index) => /* @__PURE__ */ jsxRuntime.jsxs(
21784
21866
  "div",
21785
21867
  {
21786
21868
  className: cn(
@@ -21788,19 +21870,21 @@ function CarouselPortfolioHero({
21788
21870
  index === currentIndex ? "opacity-100" : "opacity-0",
21789
21871
  slide.className
21790
21872
  ),
21791
- children: /* @__PURE__ */ jsxRuntime.jsx(
21792
- img.Img,
21793
- {
21794
- src: slide.image,
21795
- alt: typeof slide.title === "string" ? slide.title : `Slide ${index + 1}`,
21796
- className: cn(
21797
- "h-full w-full object-cover",
21798
- BRIGHTNESS_CLASS_MAP[slideMediaBrightness],
21799
- slide.imageClassName
21800
- ),
21801
- optixFlowConfig
21802
- }
21803
- )
21873
+ children: [
21874
+ /* @__PURE__ */ jsxRuntime.jsx(
21875
+ img.Img,
21876
+ {
21877
+ src: slide.image,
21878
+ alt: typeof slide.title === "string" ? slide.title : `Slide ${index + 1}`,
21879
+ className: cn(
21880
+ "h-full w-full object-cover",
21881
+ slide.imageClassName
21882
+ ),
21883
+ optixFlowConfig
21884
+ }
21885
+ ),
21886
+ /* @__PURE__ */ jsxRuntime.jsx(GradientOverlay, { intensity: slideMediaOverlayIntensity })
21887
+ ]
21804
21888
  },
21805
21889
  slide.id
21806
21890
  )),
@@ -43849,19 +43933,6 @@ function CaseStudiesTestimonialStats({
43849
43933
  }
43850
43934
  );
43851
43935
  }
43852
- function StarRating({ rating, size = 16 }) {
43853
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-0.5", children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsxRuntime.jsx(
43854
- DynamicIcon,
43855
- {
43856
- name: "lucide/star",
43857
- size,
43858
- className: cn(
43859
- star <= rating ? "fill-primary text-primary" : "fill-muted text-muted"
43860
- )
43861
- },
43862
- star
43863
- )) });
43864
- }
43865
43936
  function TestimonialsListVerified({
43866
43937
  reviews,
43867
43938
  reviewsSlot,
@@ -43874,7 +43945,8 @@ function TestimonialsListVerified({
43874
43945
  contentClassName,
43875
43946
  authorClassName,
43876
43947
  background,
43877
- spacing,
43948
+ spacing = "lg",
43949
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
43878
43950
  pattern,
43879
43951
  patternOpacity
43880
43952
  }) {
@@ -43893,35 +43965,49 @@ function TestimonialsListVerified({
43893
43965
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0", children: reviews.map((review, index) => {
43894
43966
  const authorName = getAuthorName(review);
43895
43967
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: reviewClassName, children: [
43896
- index > 0 && /* @__PURE__ */ jsxRuntime.jsx(Separator, { className: "my-6" }),
43897
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("space-y-3", contentClassName), children: [
43898
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
43899
- /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: review.rating, size: 16 }),
43900
- review.title && (typeof review.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mt-2 font-medium", children: review.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2", children: review.title }))
43968
+ index > 0 && /* @__PURE__ */ jsxRuntime.jsx(Separator, { className: "bg-border/50 shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px my-12 md:my-16" }),
43969
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("space-y-6 md:space-y-12", contentClassName), children: [
43970
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
43971
+ /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: review.rating, size: 22 }),
43972
+ review.title && (typeof review.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-medium", children: review.title }) : review.title)
43901
43973
  ] }),
43902
- review.content && (typeof review.content === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm leading-relaxed text-muted-foreground", children: review.content }) : review.content),
43903
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-3", authorClassName), children: [
43904
- /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-8", children: [
43905
- /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: review.avatarSrc, alt: authorName }),
43906
- /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "text-xs", children: getInitials(authorName) })
43907
- ] }),
43908
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-sm", children: [
43909
- review.author && (typeof review.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: review.author }) : review.author),
43910
- review.verified && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1 text-emerald-600", children: [
43911
- /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/badge-check", size: 16 }),
43912
- verifiedPurchaseLabel && (typeof verifiedPurchaseLabel === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs", children: verifiedPurchaseLabel }) : verifiedPurchaseLabel),
43913
- !verifiedPurchaseLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs", children: "Verified Purchase" })
43914
- ] }),
43915
- review.date && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
43916
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "\xB7" }),
43917
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: review.date })
43918
- ] })
43919
- ] })
43974
+ review.content && (typeof review.content === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base md:text-lg leading-relaxed font-light", children: review.content }) : review.content),
43975
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center justify-between w-full"), children: [
43976
+ /* @__PURE__ */ jsxRuntime.jsxs(
43977
+ "div",
43978
+ {
43979
+ className: cn("flex items-center gap-5", authorClassName),
43980
+ children: [
43981
+ /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-12 ring-4 ring-primary shadow-lg", children: [
43982
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: review.avatarSrc, alt: authorName }),
43983
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "text-md", children: getInitials(authorName) })
43984
+ ] }),
43985
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1 text-base flex-col items-start", children: [
43986
+ review.author && (typeof review.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: review.author }) : review.author),
43987
+ review.verified && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1", children: [
43988
+ /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/badge-check", size: 18 }),
43989
+ verifiedPurchaseLabel && (typeof verifiedPurchaseLabel === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: verifiedPurchaseLabel }) : verifiedPurchaseLabel),
43990
+ !verifiedPurchaseLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: "Verified Purchase" })
43991
+ ] })
43992
+ ] })
43993
+ ]
43994
+ }
43995
+ ),
43996
+ review.date && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative", children: review.date })
43920
43997
  ] })
43921
43998
  ] })
43922
43999
  ] }, index);
43923
44000
  }) });
43924
- }, [reviewsSlot, reviews, reviewClassName, contentClassName, authorClassName, verifiedPurchaseLabel, getAuthorName, getInitials]);
44001
+ }, [
44002
+ reviewsSlot,
44003
+ reviews,
44004
+ reviewClassName,
44005
+ contentClassName,
44006
+ authorClassName,
44007
+ verifiedPurchaseLabel,
44008
+ getAuthorName,
44009
+ getInitials
44010
+ ]);
43925
44011
  return /* @__PURE__ */ jsxRuntime.jsx(
43926
44012
  Section,
43927
44013
  {
@@ -43930,21 +44016,21 @@ function TestimonialsListVerified({
43930
44016
  pattern,
43931
44017
  patternOpacity,
43932
44018
  className,
43933
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-3xl", children: [
43934
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-8", headerClassName), children: [
44019
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-full md:max-w-3xl", children: [
44020
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-12 md:mb-24 space-y-6", headerClassName), children: [
43935
44021
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
43936
44022
  "h2",
43937
44023
  {
43938
44024
  className: cn(
43939
- "text-2xl font-semibold tracking-tight md:text-3xl",
44025
+ "text-2xl font-semibold tracking-tight md:text-3xl lg:text-4xl",
43940
44026
  headingClassName
43941
44027
  ),
43942
44028
  children: heading
43943
44029
  }
43944
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
44030
+ ) : heading),
43945
44031
  totalReviews > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 flex items-center gap-3", children: [
43946
- /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: Math.round(averageRating), size: 20 }),
43947
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm text-muted-foreground", children: [
44032
+ /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: Math.round(averageRating), size: 22 }),
44033
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm", children: [
43948
44034
  averageRating.toFixed(1),
43949
44035
  " out of 5 \xB7 ",
43950
44036
  totalReviews,
@@ -43957,23 +44043,11 @@ function TestimonialsListVerified({
43957
44043
  }
43958
44044
  );
43959
44045
  }
43960
- function StarRating2({ rating, size = 16 }) {
43961
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-0.5", children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsxRuntime.jsx(
43962
- DynamicIcon,
43963
- {
43964
- name: "lucide/star",
43965
- size,
43966
- className: cn(
43967
- star <= rating ? "fill-primary text-primary" : "fill-muted text-muted"
43968
- )
43969
- },
43970
- star
43971
- )) });
43972
- }
43973
44046
  function TestimonialsImagesHelpful({
43974
44047
  reviews,
43975
44048
  reviewsSlot,
43976
44049
  heading,
44050
+ verifiedPurchaseLabel,
43977
44051
  writeReviewLabel,
43978
44052
  reportButtonLabel,
43979
44053
  className,
@@ -43985,12 +44059,16 @@ function TestimonialsImagesHelpful({
43985
44059
  imagesClassName,
43986
44060
  onWriteReview,
43987
44061
  background,
43988
- spacing = "py-6 md:py-32",
44062
+ spacing = "lg",
44063
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
43989
44064
  pattern,
43990
44065
  patternOpacity,
43991
44066
  optixFlowConfig
43992
44067
  }) {
43993
44068
  const [helpfulClicked, setHelpfulClicked] = React8.useState(/* @__PURE__ */ new Set());
44069
+ const [lightboxOpen, setLightboxOpen] = React8.useState(false);
44070
+ const [lightboxItems, setLightboxItems] = React8.useState([]);
44071
+ const [lightboxIndex, setLightboxIndex] = React8.useState(0);
43994
44072
  const totalReviews = reviews?.length ?? 0;
43995
44073
  const averageRating = totalReviews > 0 ? (reviews?.reduce((sum, review) => sum + review.rating, 0) ?? 0) / totalReviews : 0;
43996
44074
  const handleHelpful = React8.useCallback((reviewIndex) => {
@@ -44004,6 +44082,25 @@ function TestimonialsImagesHelpful({
44004
44082
  return newSet;
44005
44083
  });
44006
44084
  }, []);
44085
+ const handleImageClick = React8.useCallback(
44086
+ (reviewImages, imageIndex) => {
44087
+ const items = reviewImages.map((src, i) => ({
44088
+ id: `review-image-${i}`,
44089
+ type: "image",
44090
+ src,
44091
+ alt: `Review image ${i + 1}`,
44092
+ download: true,
44093
+ share: true
44094
+ }));
44095
+ setLightboxItems(items);
44096
+ setLightboxIndex(imageIndex);
44097
+ setLightboxOpen(true);
44098
+ },
44099
+ []
44100
+ );
44101
+ const handleLightboxClose = React8.useCallback(() => {
44102
+ setLightboxOpen(false);
44103
+ }, []);
44007
44104
  const getAuthorName = React8.useCallback((review) => {
44008
44105
  if (typeof review.author === "string") return review.author;
44009
44106
  return "";
@@ -44017,54 +44114,28 @@ function TestimonialsImagesHelpful({
44017
44114
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0", children: reviews.map((review, index) => {
44018
44115
  const authorName = getAuthorName(review);
44019
44116
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: reviewClassName, children: [
44020
- index > 0 && /* @__PURE__ */ jsxRuntime.jsx(Separator, { className: "my-6" }),
44021
- /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "border-0 p-0 shadow-none", children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: cn("space-y-4 p-0", contentClassName), children: [
44022
- /* @__PURE__ */ jsxRuntime.jsxs(
44023
- "div",
44024
- {
44025
- className: cn(
44026
- "flex items-start justify-between gap-4",
44027
- authorClassName
44028
- ),
44029
- children: [
44030
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
44031
- /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-10", children: [
44032
- /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: review.avatarSrc, alt: authorName }),
44033
- /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: getInitials(authorName) })
44034
- ] }),
44035
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
44036
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
44037
- review.author && (typeof review.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: review.author }) : review.author),
44038
- review.verified && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center gap-1 text-emerald-600", children: /* @__PURE__ */ jsxRuntime.jsx(
44039
- DynamicIcon,
44040
- {
44041
- name: "lucide/badge-check",
44042
- size: 16
44043
- }
44044
- ) })
44045
- ] }),
44046
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
44047
- review.date && /* @__PURE__ */ jsxRuntime.jsx("span", { children: review.date }),
44048
- review.variant && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
44049
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\xB7" }),
44050
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: review.variant })
44051
- ] })
44052
- ] })
44053
- ] })
44054
- ] }),
44055
- /* @__PURE__ */ jsxRuntime.jsx(StarRating2, { rating: review.rating, size: 16 })
44056
- ]
44057
- }
44058
- ),
44059
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
44060
- review.title && (typeof review.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-medium", children: review.title }) : review.title),
44061
- review.content && (typeof review.content === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm leading-relaxed text-muted-foreground", children: review.content }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2", children: review.content }))
44117
+ index > 0 && /* @__PURE__ */ jsxRuntime.jsx(Separator, { className: "bg-border/50 shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px my-12 md:my-16" }),
44118
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("space-y-6 md:space-y-12", contentClassName), children: [
44119
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
44120
+ /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: review.rating, size: 22 }),
44121
+ review.title && (typeof review.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-medium", children: review.title }) : review.title)
44062
44122
  ] }),
44063
- review.images && review.images.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex gap-2", imagesClassName), children: review.images.map((image, imgIndex) => /* @__PURE__ */ jsxRuntime.jsx(
44123
+ review.content && (typeof review.content === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base md:text-lg leading-relaxed font-light", children: review.content }) : review.content),
44124
+ review.images && review.images.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex gap-3", imagesClassName), children: review.images.map((image, imgIndex) => /* @__PURE__ */ jsxRuntime.jsx(
44064
44125
  "div",
44065
44126
  {
44066
- className: "size-20 overflow-hidden rounded-lg sm:size-24",
44067
- children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 1, children: /* @__PURE__ */ jsxRuntime.jsx(
44127
+ className: "size-20 cursor-pointer overflow-hidden rounded-lg sm:size-24 transition-transform duration-300 hover:scale-[1.03] shadow-sm hover:shadow-lg",
44128
+ onClick: () => handleImageClick(review.images, imgIndex),
44129
+ role: "button",
44130
+ tabIndex: 0,
44131
+ onKeyDown: (e) => {
44132
+ if (e.key === "Enter" || e.key === " ") {
44133
+ e.preventDefault();
44134
+ handleImageClick(review.images, imgIndex);
44135
+ }
44136
+ },
44137
+ "aria-label": `View review image ${imgIndex + 1} in lightbox`,
44138
+ children: /* @__PURE__ */ jsxRuntime.jsx(
44068
44139
  img.Img,
44069
44140
  {
44070
44141
  src: image,
@@ -44072,54 +44143,85 @@ function TestimonialsImagesHelpful({
44072
44143
  className: "size-full object-cover",
44073
44144
  optixFlowConfig
44074
44145
  }
44075
- ) })
44146
+ )
44076
44147
  },
44077
44148
  imgIndex
44078
44149
  )) }),
44079
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
44150
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center justify-between w-full"), children: [
44080
44151
  /* @__PURE__ */ jsxRuntime.jsxs(
44081
- Pressable,
44152
+ "div",
44082
44153
  {
44083
- asButton: true,
44084
- variant: "ghost",
44085
- size: "sm",
44086
- className: cn(
44087
- "h-8 gap-1.5 text-muted-foreground",
44088
- helpfulClicked.has(index) && "text-foreground"
44089
- ),
44090
- onClick: () => handleHelpful(index),
44154
+ className: cn("flex items-center gap-5", authorClassName),
44091
44155
  children: [
44092
- /* @__PURE__ */ jsxRuntime.jsx(
44093
- DynamicIcon,
44094
- {
44095
- name: "lucide/thumbs-up",
44096
- size: 16,
44097
- className: cn(
44098
- helpfulClicked.has(index) && "fill-current"
44099
- )
44100
- }
44101
- ),
44102
- "Helpful",
44103
- review.helpful !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
44104
- "(",
44105
- review.helpful + (helpfulClicked.has(index) ? 1 : 0),
44106
- ")"
44156
+ /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-12 ring-4 ring-primary shadow-lg", children: [
44157
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: review.avatarSrc, alt: authorName }),
44158
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "text-md", children: getInitials(authorName) })
44159
+ ] }),
44160
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-0", children: [
44161
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
44162
+ review.author && (typeof review.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: review.author }) : review.author),
44163
+ review.verified && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1", children: [
44164
+ /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/badge-check", size: 18 }),
44165
+ verifiedPurchaseLabel && (typeof verifiedPurchaseLabel === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: verifiedPurchaseLabel }) : verifiedPurchaseLabel),
44166
+ !verifiedPurchaseLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: "Verified Purchase" })
44167
+ ] })
44168
+ ] }),
44169
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-sm", children: [
44170
+ review.date && /* @__PURE__ */ jsxRuntime.jsx("span", { children: review.date }),
44171
+ review.variant && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
44172
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\xB7" }),
44173
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: review.variant })
44174
+ ] })
44175
+ ] })
44107
44176
  ] })
44108
44177
  ]
44109
44178
  }
44110
44179
  ),
44111
- /* @__PURE__ */ jsxRuntime.jsx(
44112
- Pressable,
44113
- {
44114
- asButton: true,
44115
- variant: "ghost",
44116
- size: "sm",
44117
- className: "h-8 text-muted-foreground",
44118
- children: reportButtonLabel ?? "Report"
44119
- }
44120
- )
44180
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
44181
+ /* @__PURE__ */ jsxRuntime.jsxs(
44182
+ Pressable,
44183
+ {
44184
+ asButton: true,
44185
+ variant: "ghost",
44186
+ size: "sm",
44187
+ className: cn(
44188
+ "h-8 gap-1.5",
44189
+ helpfulClicked.has(index) ? "text-foreground" : "text-muted-foreground"
44190
+ ),
44191
+ onClick: () => handleHelpful(index),
44192
+ children: [
44193
+ /* @__PURE__ */ jsxRuntime.jsx(
44194
+ DynamicIcon,
44195
+ {
44196
+ name: "lucide/thumbs-up",
44197
+ size: 16,
44198
+ className: cn(
44199
+ helpfulClicked.has(index) && "fill-current"
44200
+ )
44201
+ }
44202
+ ),
44203
+ "Helpful",
44204
+ review.helpful !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
44205
+ "(",
44206
+ review.helpful + (helpfulClicked.has(index) ? 1 : 0),
44207
+ ")"
44208
+ ] })
44209
+ ]
44210
+ }
44211
+ ),
44212
+ /* @__PURE__ */ jsxRuntime.jsx(
44213
+ Pressable,
44214
+ {
44215
+ asButton: true,
44216
+ variant: "ghost",
44217
+ size: "sm",
44218
+ className: "h-8 text-muted-foreground",
44219
+ children: reportButtonLabel ?? "Report"
44220
+ }
44221
+ )
44222
+ ] })
44121
44223
  ] })
44122
- ] }) })
44224
+ ] })
44123
44225
  ] }, index);
44124
44226
  }) });
44125
44227
  }, [
@@ -44132,11 +44234,13 @@ function TestimonialsImagesHelpful({
44132
44234
  helpfulClicked,
44133
44235
  optixFlowConfig,
44134
44236
  reportButtonLabel,
44237
+ verifiedPurchaseLabel,
44135
44238
  getAuthorName,
44136
44239
  getInitials,
44137
- handleHelpful
44240
+ handleHelpful,
44241
+ handleImageClick
44138
44242
  ]);
44139
- return /* @__PURE__ */ jsxRuntime.jsx(
44243
+ return /* @__PURE__ */ jsxRuntime.jsxs(
44140
44244
  Section,
44141
44245
  {
44142
44246
  background,
@@ -44144,42 +44248,57 @@ function TestimonialsImagesHelpful({
44144
44248
  pattern,
44145
44249
  patternOpacity,
44146
44250
  className,
44147
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-3xl", children: [
44148
- /* @__PURE__ */ jsxRuntime.jsxs(
44149
- "div",
44150
- {
44151
- className: cn(
44152
- "mb-8 flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between",
44153
- headerClassName
44154
- ),
44155
- children: [
44156
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
44157
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
44158
- "h2",
44159
- {
44160
- className: cn(
44161
- "text-2xl font-semibold tracking-tight md:text-3xl",
44162
- headingClassName
44163
- ),
44164
- children: heading
44165
- }
44166
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
44167
- totalReviews > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 flex items-center gap-2", children: [
44168
- /* @__PURE__ */ jsxRuntime.jsx(StarRating2, { rating: Math.round(averageRating), size: 20 }),
44169
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg font-semibold", children: averageRating.toFixed(1) }),
44170
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm text-muted-foreground", children: [
44171
- "(",
44172
- totalReviews,
44173
- " reviews)"
44174
- ] })
44175
- ] })
44176
- ] }),
44251
+ containerClassName,
44252
+ children: [
44253
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-full md:max-w-3xl", children: [
44254
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-12 md:mb-24 space-y-6", headerClassName), children: [
44255
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between", children: [
44256
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
44257
+ "h2",
44258
+ {
44259
+ className: cn(
44260
+ "text-2xl font-semibold tracking-tight md:text-3xl lg:text-4xl",
44261
+ headingClassName
44262
+ ),
44263
+ children: heading
44264
+ }
44265
+ ) : heading),
44177
44266
  (writeReviewLabel || onWriteReview) && /* @__PURE__ */ jsxRuntime.jsx(Pressable, { asButton: true, variant: "outline", onClick: onWriteReview, children: writeReviewLabel })
44178
- ]
44267
+ ] }),
44268
+ totalReviews > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 flex items-center gap-3", children: [
44269
+ /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: Math.round(averageRating), size: 22 }),
44270
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm", children: [
44271
+ averageRating.toFixed(1),
44272
+ " out of 5 \xB7 ",
44273
+ totalReviews,
44274
+ " reviews"
44275
+ ] })
44276
+ ] })
44277
+ ] }),
44278
+ renderedReviews
44279
+ ] }),
44280
+ lightboxOpen && /* @__PURE__ */ jsxRuntime.jsx(
44281
+ lightbox.Lightbox,
44282
+ {
44283
+ items: lightboxItems,
44284
+ initialIndex: lightboxIndex,
44285
+ layout: "horizontal",
44286
+ controls: {
44287
+ navigation: true,
44288
+ thumbnails: true,
44289
+ download: true,
44290
+ share: true,
44291
+ fullscreen: true,
44292
+ captions: true,
44293
+ counter: true
44294
+ },
44295
+ onClose: handleLightboxClose,
44296
+ enableKeyboardShortcuts: true,
44297
+ closeOnEscape: true,
44298
+ closeOnBackdropClick: true
44179
44299
  }
44180
- ),
44181
- renderedReviews
44182
- ] })
44300
+ )
44301
+ ]
44183
44302
  }
44184
44303
  );
44185
44304
  }
@@ -44235,10 +44354,13 @@ function TestimonialsBentoGrid({
44235
44354
  ),
44236
44355
  children: [
44237
44356
  /* @__PURE__ */ jsxRuntime.jsx(
44238
- Card,
44357
+ "div",
44239
44358
  {
44240
- className: cn("md:col-span-2 lg:row-span-2", featuredCardClassName),
44241
- children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: "flex h-full flex-col justify-between p-6 md:p-8", children: [
44359
+ className: cn(
44360
+ "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm md:col-span-2 lg:row-span-2",
44361
+ featuredCardClassName
44362
+ ),
44363
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full flex-col justify-between p-6 md:p-8 gap-8 md:gap-12", children: [
44242
44364
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
44243
44365
  /* @__PURE__ */ jsxRuntime.jsx(
44244
44366
  DynamicIcon,
@@ -44268,11 +44390,11 @@ function TestimonialsBentoGrid({
44268
44390
  {
44269
44391
  className: cn("mt-6 flex items-center gap-4", authorClassName),
44270
44392
  children: [
44271
- /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-12", children: [
44393
+ /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "relative flex shrink-0 overflow-hidden rounded-full size-12 ring-4 ring-primary shadow-lg", children: [
44272
44394
  /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: featuredAvatarSrc, alt: featuredAuthorName }),
44273
44395
  /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: getInitials(featuredAuthorName) })
44274
44396
  ] }),
44275
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
44397
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-0 leading-tight", children: [
44276
44398
  featured.author && (typeof featured.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-semibold", children: featured.author }) : featured.author),
44277
44399
  (featured.role || featured.company) && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-muted-foreground", children: [
44278
44400
  featured.role && (typeof featured.role === "string" ? featured.role : featured.role),
@@ -44283,7 +44405,8 @@ function TestimonialsBentoGrid({
44283
44405
  {
44284
44406
  href: featured.linkConfig.href,
44285
44407
  className: cn(
44286
- "text-sm text-muted-foreground underline underline-offset-2 hover:text-foreground transition-colors",
44408
+ "text-sm transition-all duration-300",
44409
+ "underline underline-offset-4",
44287
44410
  featured.linkConfig.className
44288
44411
  ),
44289
44412
  children: featured.linkConfig.label
@@ -44299,34 +44422,45 @@ function TestimonialsBentoGrid({
44299
44422
  others.slice(0, 5).map((testimonial, index) => {
44300
44423
  const authorName = getAuthorName(testimonial);
44301
44424
  const avatarSrc = getAvatarSrc(testimonial);
44302
- return /* @__PURE__ */ jsxRuntime.jsx(Card, { className: cardClassName, children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: "flex h-full flex-col justify-between p-6", children: [
44303
- testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs("blockquote", { className: "text-sm leading-relaxed line-clamp-3", children: [
44304
- "\u201C",
44305
- testimonial.quote,
44306
- "\u201D"
44307
- ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "line-clamp-3", children: testimonial.quote })),
44308
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 flex items-center gap-3", children: [
44309
- /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-9", children: [
44310
- /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
44311
- /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "text-xs", children: getInitials(authorName) })
44312
- ] }),
44313
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
44314
- testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium", children: testimonial.author }) : testimonial.author),
44315
- testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: testimonial.role }) : testimonial.role),
44316
- testimonial.linkConfig?.href && /* @__PURE__ */ jsxRuntime.jsx(
44317
- Pressable,
44318
- {
44319
- href: testimonial.linkConfig.href,
44320
- className: cn(
44321
- "text-xs text-muted-foreground underline underline-offset-2 hover:text-foreground transition-colors",
44322
- testimonial.linkConfig.className
44323
- ),
44324
- children: testimonial.linkConfig.label
44325
- }
44326
- )
44425
+ return /* @__PURE__ */ jsxRuntime.jsx(
44426
+ "div",
44427
+ {
44428
+ className: cn(
44429
+ cardClassName,
44430
+ "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm"
44431
+ ),
44432
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full flex-col justify-between p-6 gap-8", children: [
44433
+ testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs("blockquote", { className: "text-sm leading-relaxed line-clamp-3", children: [
44434
+ "\u201C",
44435
+ testimonial.quote,
44436
+ "\u201D"
44437
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "line-clamp-3", children: testimonial.quote })),
44438
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 flex items-center gap-3", children: [
44439
+ /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "relative flex shrink-0 overflow-hidden rounded-full size-12 ring-4 ring-primary shadow-lg", children: [
44440
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
44441
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "text-xs", children: getInitials(authorName) })
44442
+ ] }),
44443
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-0 leading-tight", children: [
44444
+ testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium", children: testimonial.author }) : testimonial.author),
44445
+ testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs", children: testimonial.role }) : testimonial.role),
44446
+ testimonial.linkConfig?.href && /* @__PURE__ */ jsxRuntime.jsx(
44447
+ Pressable,
44448
+ {
44449
+ href: testimonial.linkConfig.href,
44450
+ className: cn(
44451
+ "text-sm transition-all duration-300",
44452
+ "underline underline-offset-4",
44453
+ testimonial.linkConfig.className
44454
+ ),
44455
+ children: testimonial.linkConfig.label
44456
+ }
44457
+ )
44458
+ ] })
44459
+ ] })
44327
44460
  ] })
44328
- ] })
44329
- ] }) }, index);
44461
+ },
44462
+ index
44463
+ );
44330
44464
  })
44331
44465
  ]
44332
44466
  }
@@ -44423,7 +44557,7 @@ function TestimonialsTwitterCards({
44423
44557
  "div",
44424
44558
  {
44425
44559
  className: cn(
44426
- "grid gap-4 md:gap-6 lg:gap-8 md:grid-cols-2 lg:grid-cols-3",
44560
+ "grid gap-6 lg:gap-8 md:grid-cols-2 lg:grid-cols-3",
44427
44561
  gridClassName
44428
44562
  ),
44429
44563
  children: testimonials.map((testimonial, index) => {
@@ -44433,14 +44567,18 @@ function TestimonialsTwitterCards({
44433
44567
  {
44434
44568
  href: testimonial.linkConfig?.href,
44435
44569
  className: cn(
44436
- "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-xl group hover:bg-primary hover:text-primary-foreground transition-all duration-500",
44570
+ "bg-card text-card-foreground",
44571
+ "flex flex-col gap-6",
44572
+ testimonial.linkConfig?.href ? "cursor-pointer hover:bg-primary hover:text-primary-foreground transition-all duration-500" : "",
44573
+ "rounded-2xl py-6 shadow-xl group",
44574
+ "ring-4 ring-primary",
44437
44575
  cardClassName
44438
44576
  ),
44439
44577
  children: /* @__PURE__ */ jsxRuntime.jsxs(
44440
44578
  CardContent,
44441
44579
  {
44442
44580
  className: cn(
44443
- "px-6 h-full flex flex-col-reverse items-stretch justify-between",
44581
+ "px-6 h-full flex flex-col-reverse items-stretch justify-between gap-12",
44444
44582
  cardContentClassName
44445
44583
  ),
44446
44584
  children: [
@@ -44472,7 +44610,8 @@ function TestimonialsTwitterCards({
44472
44610
  SocialLinkIcon,
44473
44611
  {
44474
44612
  href: testimonial.linkConfig.href,
44475
- iconSize: 18
44613
+ iconSize: 24,
44614
+ iconOnly: true
44476
44615
  }
44477
44616
  )
44478
44617
  ]
@@ -44545,122 +44684,257 @@ function TestimonialsTwitterCards({
44545
44684
  function TestimonialsCarouselImage({
44546
44685
  testimonials,
44547
44686
  testimonialsSlot,
44548
- height,
44549
- overlayOpacity,
44687
+ autoPlayInterval,
44688
+ height = "h-70dvh lg:h-60dvh",
44689
+ overlayOpacity = 0.6,
44550
44690
  previousButtonAriaLabel,
44551
44691
  nextButtonAriaLabel,
44552
44692
  className,
44553
44693
  contentClassName,
44554
44694
  quoteIconClassName,
44695
+ logoClassName,
44555
44696
  quoteClassName,
44556
44697
  authorClassName,
44557
44698
  navigationClassName,
44558
44699
  navButtonClassName,
44559
44700
  dotsClassName,
44560
- optixFlowConfig
44701
+ optixFlowConfig,
44702
+ background,
44703
+ containerClassName = "mx-0 w-screen px-0 sm:px-0 lg:px-0 max-w-screen relative z-10 h-full",
44704
+ spacing = "none",
44705
+ pattern,
44706
+ patternOpacity
44561
44707
  }) {
44562
44708
  const [currentIndex, setCurrentIndex] = React8.useState(0);
44563
44709
  const totalTestimonials = testimonials?.length ?? 0;
44564
- const goToPrevious = React8.useCallback(() => {
44565
- if (totalTestimonials === 0) return;
44566
- setCurrentIndex(
44567
- (prev) => prev === 0 ? totalTestimonials - 1 : prev - 1
44568
- );
44569
- }, [totalTestimonials]);
44710
+ const autoPlayTimerRef = React8__namespace.useRef(
44711
+ null
44712
+ );
44713
+ const resetAutoPlay = React8.useCallback(() => {
44714
+ if (autoPlayTimerRef.current) {
44715
+ clearInterval(autoPlayTimerRef.current);
44716
+ autoPlayTimerRef.current = null;
44717
+ }
44718
+ if (!autoPlayInterval || autoPlayInterval <= 0 || totalTestimonials === 0)
44719
+ return;
44720
+ autoPlayTimerRef.current = setInterval(() => {
44721
+ setCurrentIndex((prev) => (prev + 1) % totalTestimonials);
44722
+ }, autoPlayInterval);
44723
+ }, [autoPlayInterval, totalTestimonials]);
44570
44724
  const goToNext = React8.useCallback(() => {
44571
44725
  if (totalTestimonials === 0) return;
44572
- setCurrentIndex(
44573
- (prev) => prev === totalTestimonials - 1 ? 0 : prev + 1
44574
- );
44575
- }, [totalTestimonials]);
44726
+ setCurrentIndex((prev) => prev === totalTestimonials - 1 ? 0 : prev + 1);
44727
+ resetAutoPlay();
44728
+ }, [totalTestimonials, resetAutoPlay]);
44729
+ const goToPrevious = React8.useCallback(() => {
44730
+ if (totalTestimonials === 0) return;
44731
+ setCurrentIndex((prev) => prev === 0 ? totalTestimonials - 1 : prev - 1);
44732
+ resetAutoPlay();
44733
+ }, [totalTestimonials, resetAutoPlay]);
44734
+ const goToIndex = React8.useCallback(
44735
+ (index) => {
44736
+ setCurrentIndex(index);
44737
+ resetAutoPlay();
44738
+ },
44739
+ [resetAutoPlay]
44740
+ );
44741
+ React8.useEffect(() => {
44742
+ resetAutoPlay();
44743
+ return () => {
44744
+ if (autoPlayTimerRef.current) {
44745
+ clearInterval(autoPlayTimerRef.current);
44746
+ }
44747
+ };
44748
+ }, [resetAutoPlay]);
44576
44749
  const current = testimonials?.[currentIndex];
44577
44750
  const renderedTestimonialContent = React8.useMemo(() => {
44578
44751
  if (testimonialsSlot) return testimonialsSlot;
44579
44752
  if (!current) return null;
44580
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto max-w-4xl text-center text-background", contentClassName), children: [
44581
- /* @__PURE__ */ jsxRuntime.jsx(
44582
- DynamicIcon,
44583
- {
44584
- name: "lucide/quote",
44585
- size: 48,
44586
- className: cn("mx-auto mb-6 opacity-50", quoteIconClassName)
44587
- }
44588
- ),
44589
- current.quote && (typeof current.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs("blockquote", { className: cn("text-2xl font-light leading-relaxed md:text-4xl", quoteClassName), children: [
44590
- "\u201C",
44591
- current.quote,
44592
- "\u201D"
44593
- ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: quoteClassName, children: current.quote })),
44594
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mt-8", authorClassName), children: [
44595
- current.author && (typeof current.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg font-semibold", children: current.author }) : current.author),
44596
- (current.role || current.company) && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm opacity-80", children: [
44597
- current.role && (typeof current.role === "string" ? current.role : current.role),
44598
- current.company && (typeof current.company === "string" ? `, ${current.company}` : current.company)
44599
- ] })
44600
- ] })
44601
- ] });
44602
- }, [testimonialsSlot, contentClassName, quoteIconClassName, current, quoteClassName, authorClassName]);
44603
- return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: cn("relative", height, className), children: [
44604
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0", children: [
44605
- current?.backgroundImage && /* @__PURE__ */ jsxRuntime.jsx(
44606
- img.Img,
44607
- {
44608
- src: current.backgroundImage,
44609
- alt: "",
44610
- className: "size-full object-cover",
44611
- optixFlowConfig
44612
- }
44613
- ),
44614
- /* @__PURE__ */ jsxRuntime.jsx(
44615
- "div",
44616
- {
44617
- className: "absolute inset-0 bg-foreground",
44618
- style: { opacity: overlayOpacity }
44619
- }
44620
- )
44621
- ] }),
44622
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-10 flex h-full flex-col items-center justify-center px-4", children: [
44623
- renderedTestimonialContent,
44624
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("absolute bottom-8 left-0 right-0 flex items-center justify-center gap-4", navigationClassName), children: [
44625
- /* @__PURE__ */ jsxRuntime.jsx(
44626
- Pressable,
44627
- {
44628
- asButton: true,
44629
- variant: "ghost",
44630
- size: "icon",
44631
- className: cn("size-10 rounded-full bg-white/10 text-white backdrop-blur-sm hover:bg-white/20", navButtonClassName),
44632
- onClick: goToPrevious,
44633
- "aria-label": previousButtonAriaLabel ?? "Previous testimonial",
44634
- children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-left", size: 24 })
44635
- }
44753
+ return /* @__PURE__ */ jsxRuntime.jsxs(
44754
+ "div",
44755
+ {
44756
+ className: cn(
44757
+ "mx-auto max-w-full md:max-w-md text-center text-shadow-lg text-white pb-32 pt-20",
44758
+ contentClassName
44636
44759
  ),
44637
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex gap-2", dotsClassName), children: testimonials?.map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
44638
- "button",
44639
- {
44640
- onClick: () => setCurrentIndex(index),
44641
- className: cn(
44642
- "size-2 rounded-full transition-all",
44643
- index === currentIndex ? "w-6 bg-white" : "bg-white/40 hover:bg-white/60"
44644
- ),
44645
- "aria-label": `Go to testimonial ${index + 1}`
44646
- },
44647
- index
44648
- )) }),
44649
- /* @__PURE__ */ jsxRuntime.jsx(
44650
- Pressable,
44651
- {
44652
- asButton: true,
44653
- variant: "ghost",
44654
- size: "icon",
44655
- className: cn("size-10 rounded-full bg-white/10 text-white backdrop-blur-sm hover:bg-white/20", navButtonClassName),
44656
- onClick: goToNext,
44657
- "aria-label": nextButtonAriaLabel ?? "Next testimonial",
44658
- children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 24 })
44659
- }
44660
- )
44661
- ] })
44662
- ] })
44663
- ] });
44760
+ children: [
44761
+ current?.logoSrc ? /* @__PURE__ */ jsxRuntime.jsx(
44762
+ img.Img,
44763
+ {
44764
+ src: current.logoSrc,
44765
+ alt: typeof current.company === "string" ? `${current.company} logo` : typeof current.author === "string" ? `${current.author} company logo` : "Company logo",
44766
+ className: cn(
44767
+ "mx-auto mb-6 max-h-12 max-w-32 object-contain md:max-h-16 md:max-w-48",
44768
+ logoClassName
44769
+ ),
44770
+ optixFlowConfig
44771
+ }
44772
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
44773
+ DynamicIcon,
44774
+ {
44775
+ name: "mdi/comment-quote-outline",
44776
+ size: 48,
44777
+ className: cn("mx-auto mb-6 opacity-50", quoteIconClassName)
44778
+ }
44779
+ ),
44780
+ current.quote && (typeof current.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
44781
+ "blockquote",
44782
+ {
44783
+ className: cn(
44784
+ "text-xl font-light leading-relaxed md:text-2xl text-balance",
44785
+ quoteClassName
44786
+ ),
44787
+ children: [
44788
+ "\u201C",
44789
+ current.quote,
44790
+ "\u201D"
44791
+ ]
44792
+ }
44793
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: quoteClassName, children: current.quote })),
44794
+ /* @__PURE__ */ jsxRuntime.jsxs(
44795
+ "div",
44796
+ {
44797
+ className: cn(
44798
+ "mt-8 text-balance flex flex-col items-center",
44799
+ authorClassName
44800
+ ),
44801
+ children: [
44802
+ current.author && (typeof current.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg font-semibold", children: current.author }) : current.author),
44803
+ (current.role || current.company) && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm opacity-80", children: [
44804
+ current.role && (typeof current.role === "string" ? current.role : current.role),
44805
+ current.company && (typeof current.company === "string" ? `, ${current.company}` : current.company)
44806
+ ] }),
44807
+ current.linkConfig?.href && /* @__PURE__ */ jsxRuntime.jsx(
44808
+ Pressable,
44809
+ {
44810
+ href: current.linkConfig.href,
44811
+ className: cn(
44812
+ "transition-all duration-500",
44813
+ "hover:underline hover:underline-offset-4",
44814
+ "text-sm",
44815
+ current.linkConfig.className
44816
+ ),
44817
+ children: current.linkConfig.label
44818
+ }
44819
+ )
44820
+ ]
44821
+ }
44822
+ )
44823
+ ]
44824
+ }
44825
+ );
44826
+ }, [
44827
+ testimonialsSlot,
44828
+ contentClassName,
44829
+ quoteIconClassName,
44830
+ logoClassName,
44831
+ optixFlowConfig,
44832
+ current,
44833
+ quoteClassName,
44834
+ authorClassName
44835
+ ]);
44836
+ return /* @__PURE__ */ jsxRuntime.jsxs(
44837
+ Section,
44838
+ {
44839
+ background,
44840
+ spacing,
44841
+ pattern,
44842
+ patternOpacity,
44843
+ className: cn("relative", height, className),
44844
+ containerClassName,
44845
+ children: [
44846
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0", children: [
44847
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { initial: false, children: current?.backgroundImage && /* @__PURE__ */ jsxRuntime.jsx(
44848
+ framerMotion.motion.div,
44849
+ {
44850
+ initial: { opacity: 0 },
44851
+ animate: { opacity: 1 },
44852
+ exit: { opacity: 0 },
44853
+ transition: { duration: 0.6, ease: "easeInOut" },
44854
+ className: "absolute inset-0",
44855
+ children: /* @__PURE__ */ jsxRuntime.jsx(
44856
+ img.Img,
44857
+ {
44858
+ src: current.backgroundImage,
44859
+ alt: "Testimonial background image",
44860
+ className: "size-full object-cover",
44861
+ optixFlowConfig
44862
+ }
44863
+ )
44864
+ },
44865
+ currentIndex
44866
+ ) }),
44867
+ /* @__PURE__ */ jsxRuntime.jsx(
44868
+ "div",
44869
+ {
44870
+ className: "absolute inset-0 bg-black",
44871
+ style: { opacity: overlayOpacity }
44872
+ }
44873
+ )
44874
+ ] }),
44875
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-10 flex h-full flex-col items-center justify-center px-4", children: [
44876
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsx(
44877
+ framerMotion.motion.div,
44878
+ {
44879
+ initial: { opacity: 0, y: 10 },
44880
+ animate: { opacity: 1, y: 0 },
44881
+ exit: { opacity: 0, y: -10 },
44882
+ transition: { duration: 0.4, ease: "easeInOut" },
44883
+ children: renderedTestimonialContent
44884
+ },
44885
+ currentIndex
44886
+ ) }),
44887
+ /* @__PURE__ */ jsxRuntime.jsxs(
44888
+ "div",
44889
+ {
44890
+ className: cn(
44891
+ "absolute bottom-8 left-0 right-0 flex items-center justify-center gap-4",
44892
+ navigationClassName
44893
+ ),
44894
+ children: [
44895
+ /* @__PURE__ */ jsxRuntime.jsx(
44896
+ Pressable,
44897
+ {
44898
+ asButton: true,
44899
+ variant: "default",
44900
+ size: "icon",
44901
+ className: cn("size-10 rounded-full", navButtonClassName),
44902
+ onClick: goToPrevious,
44903
+ "aria-label": previousButtonAriaLabel ?? "Previous testimonial",
44904
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-left", size: 24 })
44905
+ }
44906
+ ),
44907
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex gap-2", dotsClassName), children: testimonials?.map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
44908
+ "button",
44909
+ {
44910
+ onClick: () => goToIndex(index),
44911
+ className: cn(
44912
+ "size-2 rounded-full transition-all",
44913
+ index === currentIndex ? "w-6 bg-primary" : "bg-white/40 hover:bg-white/60"
44914
+ ),
44915
+ "aria-label": `Go to testimonial ${index + 1}`
44916
+ },
44917
+ index
44918
+ )) }),
44919
+ /* @__PURE__ */ jsxRuntime.jsx(
44920
+ Pressable,
44921
+ {
44922
+ asButton: true,
44923
+ variant: "default",
44924
+ size: "icon",
44925
+ className: cn("size-10 rounded-full", navButtonClassName),
44926
+ onClick: goToNext,
44927
+ "aria-label": nextButtonAriaLabel ?? "Next testimonial",
44928
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 24 })
44929
+ }
44930
+ )
44931
+ ]
44932
+ }
44933
+ )
44934
+ ] })
44935
+ ]
44936
+ }
44937
+ );
44664
44938
  }
44665
44939
  function TestimonialsCenteredAvatars({
44666
44940
  testimonials,
@@ -44677,7 +44951,8 @@ function TestimonialsCenteredAvatars({
44677
44951
  quoteClassName,
44678
44952
  authorClassName,
44679
44953
  background,
44680
- spacing,
44954
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
44955
+ spacing = "xl",
44681
44956
  pattern,
44682
44957
  patternOpacity
44683
44958
  }) {
@@ -44685,46 +44960,62 @@ function TestimonialsCenteredAvatars({
44685
44960
  if (typeof testimonial.author === "string") return testimonial.author;
44686
44961
  return "";
44687
44962
  }, []);
44688
- const getAvatarSrc = React8.useCallback((testimonial) => {
44689
- return testimonial.avatarSrc || testimonial.avatar?.src;
44690
- }, []);
44963
+ const getAvatarSrc = React8.useCallback(
44964
+ (testimonial) => {
44965
+ return testimonial.avatarSrc || testimonial.avatar?.src;
44966
+ },
44967
+ []
44968
+ );
44691
44969
  const getInitials = React8.useCallback((name) => {
44692
44970
  return name.split(" ").map((n) => n[0]).join("");
44693
44971
  }, []);
44694
44972
  const renderedTestimonials = React8.useMemo(() => {
44695
44973
  if (testimonialsSlot) return testimonialsSlot;
44696
44974
  if (!testimonials || testimonials.length === 0) return null;
44697
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-12 space-y-8", testimonialsClassName), children: testimonials.map((testimonial, index) => /* @__PURE__ */ jsxRuntime.jsxs(
44975
+ return /* @__PURE__ */ jsxRuntime.jsx(
44698
44976
  "div",
44699
44977
  {
44700
- className: cn("space-y-4", testimonialItemClassName),
44701
- children: [
44702
- testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
44703
- "blockquote",
44704
- {
44705
- className: cn(
44706
- "text-lg leading-relaxed text-muted-foreground md:text-xl",
44707
- quoteClassName
44708
- ),
44709
- children: [
44710
- "\u201C",
44711
- testimonial.quote,
44712
- "\u201D"
44713
- ]
44714
- }
44715
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: quoteClassName, children: testimonial.quote })),
44716
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: authorClassName, children: [
44717
- testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-semibold", children: testimonial.author }) : testimonial.author),
44718
- (testimonial.role || testimonial.company) && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-muted-foreground", children: [
44719
- testimonial.role && (typeof testimonial.role === "string" ? testimonial.role : testimonial.role),
44720
- testimonial.company && (typeof testimonial.company === "string" ? ` at ${testimonial.company}` : testimonial.company)
44721
- ] })
44722
- ] })
44723
- ]
44724
- },
44725
- index
44726
- )) });
44727
- }, [testimonialsSlot, testimonialsClassName, testimonials, testimonialItemClassName, quoteClassName, authorClassName]);
44978
+ className: cn("mt-12 space-y-8 md:space-y-12", testimonialsClassName),
44979
+ children: testimonials.map((testimonial, index) => /* @__PURE__ */ jsxRuntime.jsxs(
44980
+ "div",
44981
+ {
44982
+ className: cn("space-y-4", testimonialItemClassName),
44983
+ children: [
44984
+ testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
44985
+ "blockquote",
44986
+ {
44987
+ className: cn(
44988
+ "text-lg leading-relaxed md:text-xl text-balance",
44989
+ quoteClassName
44990
+ ),
44991
+ children: [
44992
+ "\u201C",
44993
+ testimonial.quote,
44994
+ "\u201D"
44995
+ ]
44996
+ }
44997
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: quoteClassName, children: testimonial.quote })),
44998
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: authorClassName, children: [
44999
+ testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-semibold", children: testimonial.author }) : testimonial.author),
45000
+ (testimonial.role || testimonial.company) && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm opacity-75", children: [
45001
+ testimonial.role && (typeof testimonial.role === "string" ? testimonial.role : testimonial.role),
45002
+ testimonial.company && (typeof testimonial.company === "string" ? ` at ${testimonial.company}` : testimonial.company)
45003
+ ] })
45004
+ ] })
45005
+ ]
45006
+ },
45007
+ index
45008
+ ))
45009
+ }
45010
+ );
45011
+ }, [
45012
+ testimonialsSlot,
45013
+ testimonialsClassName,
45014
+ testimonials,
45015
+ testimonialItemClassName,
45016
+ quoteClassName,
45017
+ authorClassName
45018
+ ]);
44728
45019
  return /* @__PURE__ */ jsxRuntime.jsx(
44729
45020
  Section,
44730
45021
  {
@@ -44733,35 +45024,45 @@ function TestimonialsCenteredAvatars({
44733
45024
  pattern,
44734
45025
  patternOpacity,
44735
45026
  className,
44736
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto max-w-3xl text-center", contentClassName), children: [
44737
- badge && (typeof badge === "string" ? /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "secondary", className: cn("mb-4", badgeClassName), children: badge }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-4", badgeClassName), children: badge })),
44738
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
44739
- "h2",
44740
- {
44741
- className: cn(
44742
- "text-3xl font-semibold tracking-tight md:text-4xl",
44743
- headingClassName
44744
- ),
44745
- children: heading
44746
- }
44747
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
44748
- testimonials && testimonials.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-8 flex justify-center", avatarsClassName), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex -space-x-4", children: testimonials.map((testimonial, index) => {
44749
- const authorName = getAuthorName(testimonial);
44750
- const avatarSrc = getAvatarSrc(testimonial);
44751
- return /* @__PURE__ */ jsxRuntime.jsxs(
44752
- Avatar,
44753
- {
44754
- className: "size-16 border-4 border-background ring-2 ring-border md:size-20",
44755
- children: [
44756
- /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
44757
- /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "text-lg", children: getInitials(authorName) })
44758
- ]
44759
- },
44760
- index
44761
- );
44762
- }) }) }),
44763
- renderedTestimonials
44764
- ] })
45027
+ containerClassName,
45028
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
45029
+ "div",
45030
+ {
45031
+ className: cn(
45032
+ "mx-auto max-w-full md:max-w-md text-center flex flex-col items-center gap-6 bg-card/50 px-10 py-20 shadow-xl border border-border/50 rounded-3xl backdrop-blur-md",
45033
+ contentClassName
45034
+ ),
45035
+ children: [
45036
+ badge && (typeof badge === "string" ? /* @__PURE__ */ jsxRuntime.jsx(Badge, { className: badgeClassName, children: badge }) : badge),
45037
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
45038
+ "h2",
45039
+ {
45040
+ className: cn(
45041
+ "text-2xl font-semibold tracking-tight md:text-4xl lg:text-6xl text-balance",
45042
+ headingClassName
45043
+ ),
45044
+ children: heading
45045
+ }
45046
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
45047
+ testimonials && testimonials.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-8 flex justify-center", avatarsClassName), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex -space-x-4", children: testimonials.map((testimonial, index) => {
45048
+ const authorName = getAuthorName(testimonial);
45049
+ const avatarSrc = getAvatarSrc(testimonial);
45050
+ return /* @__PURE__ */ jsxRuntime.jsxs(
45051
+ Avatar,
45052
+ {
45053
+ className: "relative flex shrink-0 overflow-hidden rounded-full size-16 ring-4 ring-primary md:size-20 shadow-xl",
45054
+ children: [
45055
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
45056
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "text-lg", children: getInitials(authorName) })
45057
+ ]
45058
+ },
45059
+ index
45060
+ );
45061
+ }) }) }),
45062
+ renderedTestimonials
45063
+ ]
45064
+ }
45065
+ )
44765
45066
  }
44766
45067
  );
44767
45068
  }
@@ -44789,14 +45090,14 @@ function TestimonialsCompanyLogo({
44789
45090
  const renderedTestimonial = React8.useMemo(() => {
44790
45091
  if (testimonialSlot) return testimonialSlot;
44791
45092
  if (!testimonial) return null;
44792
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("space-y-8", contentClassName), children: [
45093
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("space-y-12 md:space-y-16", contentClassName), children: [
44793
45094
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
44794
45095
  /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "mdi/comment-quote-outline", size: 48 }),
44795
45096
  testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
44796
45097
  "blockquote",
44797
45098
  {
44798
45099
  className: cn(
44799
- "relative text-xl font-medium leading-relaxed md:text-2xl",
45100
+ "relative text-lg font-light leading-relaxed md:text-2xl",
44800
45101
  quoteClassName
44801
45102
  ),
44802
45103
  children: testimonial.quote
@@ -44814,15 +45115,15 @@ function TestimonialsCompanyLogo({
44814
45115
  }
44815
45116
  ),
44816
45117
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("space-y-1 text-right", authorClassName), children: [
44817
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-x-2", children: [
45118
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-end", children: [
44818
45119
  testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", children: testimonial.author }) : testimonial.author),
44819
- testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: testimonial.role }) : testimonial.role)
45120
+ testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm opacity-75", children: testimonial.role }) : testimonial.role)
44820
45121
  ] }),
44821
45122
  /* @__PURE__ */ jsxRuntime.jsx(
44822
45123
  Pressable,
44823
45124
  {
44824
45125
  href: testimonial.linkConfig?.href,
44825
- className: "text-sm font-bold uppercase transition-all duration-300 hover:underline hover:underline-offset-4",
45126
+ className: "cursor-pointer text-sm font-bold uppercase transition-all duration-500 hover:underline hover:underline-offset-4",
44826
45127
  children: testimonial.linkConfig?.label || "Learn more"
44827
45128
  }
44828
45129
  )
@@ -44853,7 +45154,7 @@ function TestimonialsCompanyLogo({
44853
45154
  "div",
44854
45155
  {
44855
45156
  className: cn(
44856
- "grid items-center gap-12 lg:gap-24 grid-cols-1 lg:grid-cols-2",
45157
+ "grid items-center gap-16 lg:gap-24 grid-cols-1 lg:grid-cols-2",
44857
45158
  gridClassName
44858
45159
  ),
44859
45160
  children: [
@@ -44884,19 +45185,6 @@ function TestimonialsCompanyLogo({
44884
45185
  }
44885
45186
  );
44886
45187
  }
44887
- function StarRating3({ rating, size = 16 }) {
44888
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-0.5", children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsxRuntime.jsx(
44889
- DynamicIcon,
44890
- {
44891
- name: "lucide/star",
44892
- size,
44893
- className: cn(
44894
- star <= rating ? "fill-primary text-primary" : "fill-muted text-muted"
44895
- )
44896
- },
44897
- star
44898
- )) });
44899
- }
44900
45188
  function TestimonialsGridAddReview({
44901
45189
  reviews,
44902
45190
  reviewsSlot,
@@ -44943,27 +45231,33 @@ function TestimonialsGridAddReview({
44943
45231
  addReviewCardClassName
44944
45232
  ),
44945
45233
  onClick: onAddReview,
44946
- children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: cn(
44947
- "flex flex-col items-center gap-3 py-12 text-center",
44948
- getNestedCardTextColor(background)
44949
- ), children: [
44950
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-primary/10", children: /* @__PURE__ */ jsxRuntime.jsx(
44951
- DynamicIcon,
44952
- {
44953
- name: "lucide/plus",
44954
- size: 24,
44955
- className: "text-primary"
44956
- }
44957
- ) }),
44958
- addReviewText && (typeof addReviewText === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-medium", children: addReviewText }) : addReviewText),
44959
- addReviewSubtext && (typeof addReviewSubtext === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: addReviewSubtext }) : addReviewSubtext)
44960
- ] })
45234
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
45235
+ CardContent,
45236
+ {
45237
+ className: cn(
45238
+ "flex flex-col items-center gap-3 py-12 text-center",
45239
+ getNestedCardTextColor(background)
45240
+ ),
45241
+ children: [
45242
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-primary/10", children: /* @__PURE__ */ jsxRuntime.jsx(
45243
+ DynamicIcon,
45244
+ {
45245
+ name: "lucide/plus",
45246
+ size: 24,
45247
+ className: "text-primary"
45248
+ }
45249
+ ) }),
45250
+ addReviewText && (typeof addReviewText === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-medium", children: addReviewText }) : addReviewText),
45251
+ addReviewSubtext && (typeof addReviewSubtext === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: addReviewSubtext }) : addReviewSubtext)
45252
+ ]
45253
+ }
45254
+ )
44961
45255
  }
44962
45256
  ),
44963
45257
  reviews?.map((review, index) => {
44964
45258
  const authorName = getAuthorName(review);
44965
45259
  return /* @__PURE__ */ jsxRuntime.jsx(Card, { className: cardClassName, children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: "space-y-4 p-6", children: [
44966
- /* @__PURE__ */ jsxRuntime.jsx(StarRating3, { rating: review.rating }),
45260
+ /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: review.rating }),
44967
45261
  review.content && (typeof review.content === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm leading-relaxed", children: review.content }) : review.content),
44968
45262
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-3", authorClassName), children: [
44969
45263
  /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-8", children: [
@@ -44977,7 +45271,19 @@ function TestimonialsGridAddReview({
44977
45271
  ]
44978
45272
  }
44979
45273
  );
44980
- }, [reviewsSlot, gridClassName, addReviewCardClassName, onAddReview, addReviewText, addReviewSubtext, reviews, cardClassName, authorClassName, getAuthorName, getInitials]);
45274
+ }, [
45275
+ reviewsSlot,
45276
+ gridClassName,
45277
+ addReviewCardClassName,
45278
+ onAddReview,
45279
+ addReviewText,
45280
+ addReviewSubtext,
45281
+ reviews,
45282
+ cardClassName,
45283
+ authorClassName,
45284
+ getAuthorName,
45285
+ getInitials
45286
+ ]);
44981
45287
  return /* @__PURE__ */ jsxRuntime.jsxs(
44982
45288
  Section,
44983
45289
  {
@@ -45041,7 +45347,8 @@ function TestimonialsMarquee({
45041
45347
  quoteClassName,
45042
45348
  authorClassName,
45043
45349
  background,
45044
- spacing,
45350
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
45351
+ spacing = "xl",
45045
45352
  pattern,
45046
45353
  patternOpacity
45047
45354
  }) {
@@ -45051,81 +45358,102 @@ function TestimonialsMarquee({
45051
45358
  if (typeof testimonial.author === "string") return testimonial.author;
45052
45359
  return "";
45053
45360
  }, []);
45054
- const getAvatarSrc = React8.useCallback((testimonial) => {
45055
- return testimonial.avatarSrc || testimonial.avatar?.src;
45056
- }, []);
45361
+ const getAvatarSrc = React8.useCallback(
45362
+ (testimonial) => {
45363
+ return testimonial.avatarSrc || testimonial.avatar?.src;
45364
+ },
45365
+ []
45366
+ );
45057
45367
  const getInitials = React8.useCallback((name) => {
45058
45368
  return name.split(" ").map((n) => n[0]).join("");
45059
45369
  }, []);
45060
45370
  const renderedTestimonials = React8.useMemo(() => {
45061
45371
  if (testimonialsSlot) return testimonialsSlot;
45062
45372
  if (!testimonials || testimonials.length === 0) return null;
45063
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative", marqueeClassName), children: [
45064
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute left-0 top-0 z-10 h-full w-24 bg-gradient-to-r from-background to-transparent" }),
45065
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute right-0 top-0 z-10 h-full w-24 bg-gradient-to-l from-background to-transparent" }),
45066
- /* @__PURE__ */ jsxRuntime.jsx(
45067
- "div",
45068
- {
45069
- className: cn(
45070
- "flex gap-4",
45071
- pauseOnHover !== false && "[&:hover_.marquee-content]:pause"
45072
- ),
45073
- children: /* @__PURE__ */ jsxRuntime.jsx(
45074
- "div",
45075
- {
45076
- className: "marquee-content flex shrink-0 animate-marquee gap-4",
45077
- style: {
45078
- animationDuration: speedMap[effectiveSpeed]
45079
- },
45080
- children: duplicatedTestimonials.map((testimonial, index) => {
45081
- const authorName = getAuthorName(testimonial);
45082
- const avatarSrc = getAvatarSrc(testimonial);
45083
- return /* @__PURE__ */ jsxRuntime.jsx(
45084
- Card,
45085
- {
45086
- className: cn("w-80 shrink-0", cardClassName),
45087
- children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: "p-6", children: [
45088
- testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
45089
- "p",
45090
- {
45091
- className: cn(
45092
- "mb-4 text-sm leading-relaxed",
45093
- quoteClassName
45094
- ),
45095
- children: [
45096
- "\u201C",
45097
- testimonial.quote,
45098
- "\u201D"
45099
- ]
45100
- }
45101
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-4", quoteClassName), children: testimonial.quote })),
45102
- /* @__PURE__ */ jsxRuntime.jsxs(
45103
- "div",
45104
- {
45105
- className: cn("flex items-center gap-3", authorClassName),
45106
- children: [
45107
- /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-9", children: [
45108
- /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
45109
- /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "text-xs", children: getInitials(authorName) })
45110
- ] }),
45111
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
45112
- testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium", children: testimonial.author }) : testimonial.author),
45113
- testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: testimonial.role }) : testimonial.role)
45114
- ] })
45115
- ]
45116
- }
45117
- )
45118
- ] })
45119
- },
45120
- index
45121
- );
45122
- })
45123
- }
45124
- )
45125
- }
45126
- )
45127
- ] });
45128
- }, [testimonialsSlot, marqueeClassName, pauseOnHover, effectiveSpeed, duplicatedTestimonials, cardClassName, quoteClassName, authorClassName, testimonials, getAuthorName, getAvatarSrc, getInitials]);
45373
+ return /* @__PURE__ */ jsxRuntime.jsx(
45374
+ "div",
45375
+ {
45376
+ className: cn(
45377
+ "relative marquee-fade",
45378
+ pauseOnHover && "marquee-pause-on-hover",
45379
+ marqueeClassName
45380
+ ),
45381
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4", children: /* @__PURE__ */ jsxRuntime.jsx(
45382
+ "div",
45383
+ {
45384
+ className: "marquee-content flex shrink-0 animate-marquee gap-4",
45385
+ style: {
45386
+ animationDuration: speedMap[effectiveSpeed]
45387
+ },
45388
+ children: duplicatedTestimonials.map((testimonial, index) => {
45389
+ const authorName = getAuthorName(testimonial);
45390
+ const avatarSrc = getAvatarSrc(testimonial);
45391
+ return /* @__PURE__ */ jsxRuntime.jsx(
45392
+ Pressable,
45393
+ {
45394
+ href: testimonial?.linkConfig?.href,
45395
+ className: cn(
45396
+ "bg-card text-card-foreground",
45397
+ "rounded-2xl border shadow-xl",
45398
+ "cursor-pointer transition-all duration-500",
45399
+ "hover:bg-primary hover:text-primary-foreground",
45400
+ "flex flex-col gap-6 w-80 shrink-0",
45401
+ cardClassName
45402
+ ),
45403
+ children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: "p-6 h-full flex flex-col justify-between gap-12", children: [
45404
+ testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
45405
+ "p",
45406
+ {
45407
+ className: cn(
45408
+ "mb-4 text-sm leading-relaxed",
45409
+ quoteClassName
45410
+ ),
45411
+ children: [
45412
+ "\u201C",
45413
+ testimonial.quote,
45414
+ "\u201D"
45415
+ ]
45416
+ }
45417
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-4", quoteClassName), children: testimonial.quote })),
45418
+ /* @__PURE__ */ jsxRuntime.jsxs(
45419
+ "div",
45420
+ {
45421
+ className: cn("flex items-center gap-4", authorClassName),
45422
+ children: [
45423
+ /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "relative flex shrink-0 overflow-hidden rounded-full size-10 ring-4 ring-primary shadow-lg", children: [
45424
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
45425
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "text-xs", children: getInitials(authorName) })
45426
+ ] }),
45427
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
45428
+ testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base font-medium", children: testimonial.author }) : testimonial.author),
45429
+ testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm", children: testimonial.role }) : testimonial.role)
45430
+ ] })
45431
+ ]
45432
+ }
45433
+ )
45434
+ ] })
45435
+ },
45436
+ index
45437
+ );
45438
+ })
45439
+ }
45440
+ ) })
45441
+ }
45442
+ );
45443
+ }, [
45444
+ testimonialsSlot,
45445
+ marqueeClassName,
45446
+ pauseOnHover,
45447
+ effectiveSpeed,
45448
+ duplicatedTestimonials,
45449
+ cardClassName,
45450
+ quoteClassName,
45451
+ authorClassName,
45452
+ testimonials,
45453
+ getAuthorName,
45454
+ getAvatarSrc,
45455
+ getInitials
45456
+ ]);
45129
45457
  return /* @__PURE__ */ jsxRuntime.jsxs(
45130
45458
  Section,
45131
45459
  {
@@ -45134,28 +45462,20 @@ function TestimonialsMarquee({
45134
45462
  pattern,
45135
45463
  patternOpacity,
45136
45464
  className: cn("overflow-hidden", className),
45465
+ containerClassName,
45137
45466
  children: [
45138
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-12", headerClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-2xl text-center", children: [
45467
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-12", headerClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-full md:max-w-2xl text-center space-y-2", children: [
45139
45468
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
45140
45469
  "h2",
45141
45470
  {
45142
45471
  className: cn(
45143
- "text-3xl font-semibold tracking-tight md:text-4xl",
45472
+ "text-3xl font-semibold tracking-tight md:text-4xl lg:text-6xl text-pretty",
45144
45473
  headingClassName
45145
45474
  ),
45146
45475
  children: heading
45147
45476
  }
45148
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
45149
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
45150
- "p",
45151
- {
45152
- className: cn(
45153
- "mt-4 text-lg text-muted-foreground",
45154
- descriptionClassName
45155
- ),
45156
- children: description
45157
- }
45158
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-4", descriptionClassName), children: description }))
45477
+ ) : heading),
45478
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg text-balance", descriptionClassName), children: description }) : description)
45159
45479
  ] }) }),
45160
45480
  renderedTestimonials,
45161
45481
  /* @__PURE__ */ jsxRuntime.jsx("style", { children: `
@@ -45170,9 +45490,13 @@ function TestimonialsMarquee({
45170
45490
  .animate-marquee {
45171
45491
  animation: marquee linear infinite;
45172
45492
  }
45173
- .pause {
45493
+ .marquee-pause-on-hover:hover .marquee-content {
45174
45494
  animation-play-state: paused;
45175
45495
  }
45496
+ .marquee-fade {
45497
+ -webkit-mask-image: linear-gradient(to right, transparent, black 8%, black 92%, transparent);
45498
+ mask-image: linear-gradient(to right, transparent, black 8%, black 92%, transparent);
45499
+ }
45176
45500
  ` })
45177
45501
  ]
45178
45502
  }
@@ -45188,6 +45512,7 @@ function TestimonialsSimpleGrid({
45188
45512
  headerClassName,
45189
45513
  headingClassName,
45190
45514
  descriptionClassName,
45515
+ cardContentClassName,
45191
45516
  gridClassName,
45192
45517
  cardClassName,
45193
45518
  quoteClassName,
@@ -45198,17 +45523,11 @@ function TestimonialsSimpleGrid({
45198
45523
  pattern,
45199
45524
  patternOpacity
45200
45525
  }) {
45201
- const gridCols = {
45202
- 2: "sm:grid-cols-2",
45203
- 3: "sm:grid-cols-2 lg:grid-cols-3",
45204
- 4: "sm:grid-cols-2 lg:grid-cols-4"
45205
- };
45206
- const effectiveColumns = columns || 3;
45207
45526
  const getAuthorName = React8.useCallback((testimonial) => {
45208
45527
  if (typeof testimonial.author === "string") return testimonial.author;
45209
45528
  return "";
45210
45529
  }, []);
45211
- const getAvatarSrc = React8.useCallback(
45530
+ React8.useCallback(
45212
45531
  (testimonial) => {
45213
45532
  return testimonial.avatarSrc || testimonial.avatar?.src;
45214
45533
  },
@@ -45223,53 +45542,89 @@ function TestimonialsSimpleGrid({
45223
45542
  return /* @__PURE__ */ jsxRuntime.jsx(
45224
45543
  "div",
45225
45544
  {
45226
- className: cn("grid gap-6", gridCols[effectiveColumns], gridClassName),
45545
+ className: cn(
45546
+ "grid gap-4 md:gap-6 lg:gap-8 md:grid-cols-2 lg:grid-cols-3",
45547
+ gridClassName
45548
+ ),
45227
45549
  children: testimonials.map((testimonial, index) => {
45228
45550
  const authorName = getAuthorName(testimonial);
45229
- const avatarSrc = getAvatarSrc(testimonial);
45230
- return /* @__PURE__ */ jsxRuntime.jsx(Card, { className: cardClassName, children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: "p-6", children: [
45231
- testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
45232
- "p",
45233
- {
45234
- className: cn(
45235
- "mb-6 text-sm leading-relaxed ",
45236
- quoteClassName
45237
- ),
45238
- children: [
45239
- "\u201C",
45240
- testimonial.quote,
45241
- "\u201D"
45242
- ]
45243
- }
45244
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-6", quoteClassName), children: testimonial.quote })),
45245
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-3", authorClassName), children: [
45246
- /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-10", children: [
45247
- /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
45248
- /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: getInitials(authorName) })
45249
- ] }),
45250
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
45251
- testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium", children: testimonial.author }) : testimonial.author),
45252
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs ", children: [
45253
- testimonial.role && (typeof testimonial.role === "string" ? testimonial.role : null),
45254
- testimonial.company && (typeof testimonial.company === "string" ? `, ${testimonial.company}` : null)
45255
- ] })
45256
- ] })
45257
- ] })
45258
- ] }) }, index);
45551
+ return /* @__PURE__ */ jsxRuntime.jsx(
45552
+ Pressable,
45553
+ {
45554
+ href: testimonial.linkConfig?.href,
45555
+ className: cn(
45556
+ "bg-card text-card-foreground",
45557
+ "flex flex-col gap-6",
45558
+ testimonial.linkConfig?.href ? "cursor-pointer hover:bg-black hover:text-white transition-all duration-500" : "",
45559
+ "rounded-2xl py-0 shadow-xl group",
45560
+ "ring-4 ring-ring",
45561
+ cardClassName
45562
+ ),
45563
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
45564
+ CardContent,
45565
+ {
45566
+ className: cn(
45567
+ "px-0 h-full flex flex-col-reverse items-stretch justify-between gap-12",
45568
+ cardContentClassName
45569
+ ),
45570
+ children: [
45571
+ /* @__PURE__ */ jsxRuntime.jsx(
45572
+ "div",
45573
+ {
45574
+ className: cn(
45575
+ "flex items-center justify-between",
45576
+ authorClassName
45577
+ ),
45578
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
45579
+ /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "relative flex shrink-0 size-24 border-t-4 border-r-4 border-primary rounded-tr-xl rounded-tl-none rounded-br-none rounded-bl-none shadow-xl", children: [
45580
+ /* @__PURE__ */ jsxRuntime.jsx(
45581
+ AvatarImage,
45582
+ {
45583
+ src: testimonial.avatarSrc,
45584
+ alt: authorName
45585
+ }
45586
+ ),
45587
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: getInitials(authorName) })
45588
+ ] }),
45589
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 pt-2 pr-6 pb-2", children: [
45590
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-0", children: [
45591
+ testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg font-semibold leading-relaxed", children: testimonial.author }) : testimonial.author),
45592
+ testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base", children: testimonial.role }) : testimonial.role)
45593
+ ] }),
45594
+ testimonial.linkConfig?.href && /* @__PURE__ */ jsxRuntime.jsx(
45595
+ Pressable,
45596
+ {
45597
+ href: testimonial.linkConfig.href,
45598
+ className: cn(
45599
+ "text-base transition-all duration-300",
45600
+ "underline underline-offset-4",
45601
+ testimonial.linkConfig.className
45602
+ ),
45603
+ children: testimonial.linkConfig.label
45604
+ }
45605
+ )
45606
+ ] })
45607
+ ] })
45608
+ }
45609
+ ),
45610
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-6 md: pt-8 px-6 md:px-8", children: testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm leading-relaxed", children: testimonial.quote }) : testimonial.quote) })
45611
+ ]
45612
+ }
45613
+ )
45614
+ },
45615
+ index
45616
+ );
45259
45617
  })
45260
45618
  }
45261
45619
  );
45262
45620
  }, [
45263
45621
  testimonialsSlot,
45264
- gridCols,
45265
- effectiveColumns,
45266
45622
  gridClassName,
45267
45623
  testimonials,
45268
45624
  cardClassName,
45269
- quoteClassName,
45625
+ cardContentClassName,
45270
45626
  authorClassName,
45271
45627
  getAuthorName,
45272
- getAvatarSrc,
45273
45628
  getInitials
45274
45629
  ]);
45275
45630
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -45285,19 +45640,29 @@ function TestimonialsSimpleGrid({
45285
45640
  /* @__PURE__ */ jsxRuntime.jsxs(
45286
45641
  "div",
45287
45642
  {
45288
- className: cn("mx-auto mb-12 max-w-2xl text-center", headerClassName),
45643
+ className: cn(
45644
+ "mx-auto mb-12 max-w-full md:max-w-2xl text-center",
45645
+ headerClassName
45646
+ ),
45289
45647
  children: [
45290
45648
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
45291
45649
  "h2",
45292
45650
  {
45293
45651
  className: cn(
45294
- "text-3xl font-semibold tracking-tight md:text-4xl",
45652
+ "text-pretty text-3xl md:text-4xl lg:text-6xl",
45653
+ "font-semibold tracking-tight",
45295
45654
  headingClassName
45296
45655
  ),
45297
45656
  children: heading
45298
45657
  }
45299
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
45300
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-4 text-lg ", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-4", descriptionClassName), children: description }))
45658
+ ) : heading),
45659
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
45660
+ "p",
45661
+ {
45662
+ className: cn("mt-4 text-lg text-balance", descriptionClassName),
45663
+ children: description
45664
+ }
45665
+ ) : description)
45301
45666
  ]
45302
45667
  }
45303
45668
  ),
@@ -45315,36 +45680,58 @@ function TestimonialsSliderMinimal({
45315
45680
  quoteClassName,
45316
45681
  authorClassName,
45317
45682
  avatarClassName,
45683
+ navButtonClassName,
45318
45684
  dotsClassName,
45319
45685
  background,
45320
45686
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
45321
- spacing = "xl",
45687
+ spacing = "none",
45322
45688
  pattern,
45323
- patternOpacity
45689
+ patternOpacity,
45690
+ previousButtonAriaLabel,
45691
+ nextButtonAriaLabel,
45692
+ navigationClassName
45324
45693
  }) {
45325
45694
  const [currentIndex, setCurrentIndex] = React8.useState(0);
45326
- const [isTransitioning, setIsTransitioning] = React8.useState(false);
45327
45695
  const totalTestimonials = testimonials?.length ?? 0;
45328
- const effectiveAutoPlayInterval = autoPlayInterval ?? 5e3;
45329
- const goToSlide = React8.useCallback(
45696
+ const autoPlayTimerRef = React8__namespace.useRef(
45697
+ null
45698
+ );
45699
+ const resetAutoPlay = React8.useCallback(() => {
45700
+ if (autoPlayTimerRef.current) {
45701
+ clearInterval(autoPlayTimerRef.current);
45702
+ autoPlayTimerRef.current = null;
45703
+ }
45704
+ if (!autoPlayInterval || autoPlayInterval <= 0 || totalTestimonials === 0)
45705
+ return;
45706
+ autoPlayTimerRef.current = setInterval(() => {
45707
+ setCurrentIndex((prev) => (prev + 1) % totalTestimonials);
45708
+ }, autoPlayInterval);
45709
+ }, [autoPlayInterval, totalTestimonials]);
45710
+ const goToNext = React8.useCallback(() => {
45711
+ if (totalTestimonials === 0) return;
45712
+ setCurrentIndex((prev) => prev === totalTestimonials - 1 ? 0 : prev + 1);
45713
+ resetAutoPlay();
45714
+ }, [totalTestimonials, resetAutoPlay]);
45715
+ const goToPrevious = React8.useCallback(() => {
45716
+ if (totalTestimonials === 0) return;
45717
+ setCurrentIndex((prev) => prev === 0 ? totalTestimonials - 1 : prev - 1);
45718
+ resetAutoPlay();
45719
+ }, [totalTestimonials, resetAutoPlay]);
45720
+ const goToIndex = React8.useCallback(
45330
45721
  (index) => {
45331
- if (index === currentIndex) return;
45332
- setIsTransitioning(true);
45333
- setTimeout(() => {
45334
- setCurrentIndex(index);
45335
- setIsTransitioning(false);
45336
- }, 300);
45722
+ setCurrentIndex(index);
45723
+ resetAutoPlay();
45337
45724
  },
45338
- [currentIndex]
45725
+ [resetAutoPlay]
45339
45726
  );
45340
45727
  React8.useEffect(() => {
45341
- if (effectiveAutoPlayInterval <= 0 || totalTestimonials === 0) return;
45342
- const interval = setInterval(() => {
45343
- const nextIndex = (currentIndex + 1) % totalTestimonials;
45344
- goToSlide(nextIndex);
45345
- }, effectiveAutoPlayInterval);
45346
- return () => clearInterval(interval);
45347
- }, [currentIndex, effectiveAutoPlayInterval, totalTestimonials, goToSlide]);
45728
+ resetAutoPlay();
45729
+ return () => {
45730
+ if (autoPlayTimerRef.current) {
45731
+ clearInterval(autoPlayTimerRef.current);
45732
+ }
45733
+ };
45734
+ }, [resetAutoPlay]);
45348
45735
  const current = testimonials?.[currentIndex];
45349
45736
  const getAuthorName = React8.useCallback((testimonial) => {
45350
45737
  if (typeof testimonial.author === "string") return testimonial.author;
@@ -45364,53 +45751,64 @@ function TestimonialsSliderMinimal({
45364
45751
  if (!current) return null;
45365
45752
  const authorName = getAuthorName(current);
45366
45753
  const avatarSrc = getAvatarSrc(current);
45367
- return /* @__PURE__ */ jsxRuntime.jsxs(
45368
- "div",
45369
- {
45370
- className: cn(
45371
- "transition-opacity duration-300",
45372
- isTransitioning ? "opacity-0" : "opacity-100"
45373
- ),
45374
- children: [
45375
- current.quote && (typeof current.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
45376
- "blockquote",
45377
- {
45378
- className: cn(
45379
- "text-xl font-medium leading-relaxed md:text-2xl lg:text-3xl",
45380
- quoteClassName
45381
- ),
45382
- children: [
45383
- "\u201C",
45384
- current.quote,
45385
- "\u201D"
45386
- ]
45387
- }
45388
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: quoteClassName, children: current.quote })),
45389
- /* @__PURE__ */ jsxRuntime.jsxs(
45390
- "div",
45391
- {
45392
- className: cn(
45393
- "mt-8 flex flex-col items-center gap-4",
45394
- authorClassName
45395
- ),
45396
- children: [
45397
- /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: cn("size-14", avatarClassName), children: [
45754
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-12 md:space-y-24", children: [
45755
+ current.quote && (typeof current.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
45756
+ "blockquote",
45757
+ {
45758
+ className: cn(
45759
+ "text-xl font-thin leading-relaxed md:text-2xl text-balance line-clamp-6",
45760
+ quoteClassName
45761
+ ),
45762
+ children: [
45763
+ "\u201C",
45764
+ current.quote,
45765
+ "\u201D"
45766
+ ]
45767
+ }
45768
+ ) : current.quote),
45769
+ /* @__PURE__ */ jsxRuntime.jsxs(
45770
+ "div",
45771
+ {
45772
+ className: cn(
45773
+ "mt-8 flex flex-col items-center gap-6 md:gap-12",
45774
+ authorClassName
45775
+ ),
45776
+ children: [
45777
+ /* @__PURE__ */ jsxRuntime.jsxs(
45778
+ Avatar,
45779
+ {
45780
+ className: cn(
45781
+ "relative flex shrink-0 overflow-hidden rounded-full ring-4 ring-primary shadow-xl size-12",
45782
+ avatarClassName
45783
+ ),
45784
+ children: [
45398
45785
  /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
45399
45786
  /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: getInitials(authorName) })
45400
- ] }),
45401
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
45402
- current.author && (typeof current.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-semibold", children: current.author }) : current.author),
45403
- current.role && (typeof current.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm ", children: current.role }) : current.role)
45404
- ] })
45405
- ]
45406
- }
45407
- )
45408
- ]
45409
- }
45410
- );
45787
+ ]
45788
+ }
45789
+ ),
45790
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-0", children: [
45791
+ current.author && (typeof current.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-semibold", children: current.author }) : current.author),
45792
+ current.role && (typeof current.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm ", children: current.role }) : current.role)
45793
+ ] }),
45794
+ current.linkConfig?.href && /* @__PURE__ */ jsxRuntime.jsx(
45795
+ Pressable,
45796
+ {
45797
+ href: current.linkConfig.href,
45798
+ className: cn(
45799
+ current.linkConfig.className,
45800
+ "text-sm font-bold tracking-wide uppercase",
45801
+ "hover:underline hover:underline-offset-2"
45802
+ ),
45803
+ children: current.linkConfig.label
45804
+ }
45805
+ )
45806
+ ]
45807
+ }
45808
+ )
45809
+ ] });
45411
45810
  }, [
45412
45811
  testimonialsSlot,
45413
- isTransitioning,
45414
45812
  current,
45415
45813
  quoteClassName,
45416
45814
  authorClassName,
@@ -45428,21 +45826,75 @@ function TestimonialsSliderMinimal({
45428
45826
  patternOpacity,
45429
45827
  className,
45430
45828
  containerClassName,
45431
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto max-w-3xl text-center", contentClassName), children: [
45432
- renderedTestimonial,
45433
- testimonials && testimonials.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-8 flex justify-center gap-2", dotsClassName), children: testimonials.map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
45434
- "button",
45435
- {
45436
- onClick: () => goToSlide(index),
45437
- className: cn(
45438
- "size-2 rounded-full transition-all",
45439
- index === currentIndex ? "w-6 bg-primary text-primary-foreground" : ""
45440
- ),
45441
- "aria-label": `Go to testimonial ${index + 1}`
45442
- },
45443
- index
45444
- )) })
45445
- ] })
45829
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
45830
+ "div",
45831
+ {
45832
+ className: cn(
45833
+ "mx-auto max-w-3xl text-center min-h-[700px] flex flex-col items-center justify-center",
45834
+ contentClassName
45835
+ ),
45836
+ children: [
45837
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsx(
45838
+ framerMotion.motion.div,
45839
+ {
45840
+ initial: { opacity: 0, y: 10 },
45841
+ animate: { opacity: 1, y: 0 },
45842
+ exit: { opacity: 0, y: -10 },
45843
+ transition: { duration: 0.4, ease: "easeInOut" },
45844
+ children: renderedTestimonial
45845
+ },
45846
+ currentIndex
45847
+ ) }),
45848
+ testimonials && testimonials.length > 1 && /* @__PURE__ */ jsxRuntime.jsxs(
45849
+ "div",
45850
+ {
45851
+ className: cn(
45852
+ "mt-8 flex items-center justify-center gap-4",
45853
+ navigationClassName
45854
+ ),
45855
+ children: [
45856
+ /* @__PURE__ */ jsxRuntime.jsx(
45857
+ Pressable,
45858
+ {
45859
+ asButton: true,
45860
+ variant: "default",
45861
+ size: "icon",
45862
+ className: cn("size-10 rounded-full", navButtonClassName),
45863
+ onClick: goToPrevious,
45864
+ "aria-label": previousButtonAriaLabel ?? "Previous testimonial",
45865
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-left", size: 24 })
45866
+ }
45867
+ ),
45868
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex items-center gap-2", dotsClassName), children: testimonials.map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
45869
+ "button",
45870
+ {
45871
+ onClick: () => goToIndex(index),
45872
+ className: cn(
45873
+ "size-2 rounded-full transition-all",
45874
+ index === currentIndex ? "w-6 bg-primary text-primary-foreground" : "bg-card text-card-foreground"
45875
+ ),
45876
+ "aria-label": `Go to testimonial ${index + 1}`
45877
+ },
45878
+ index
45879
+ )) }),
45880
+ /* @__PURE__ */ jsxRuntime.jsx(
45881
+ Pressable,
45882
+ {
45883
+ asButton: true,
45884
+ variant: "default",
45885
+ size: "icon",
45886
+ className: cn("size-10 rounded-full", navButtonClassName),
45887
+ onClick: goToNext,
45888
+ "aria-label": nextButtonAriaLabel ?? "Next testimonial",
45889
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 24 })
45890
+ }
45891
+ )
45892
+ ]
45893
+ }
45894
+ )
45895
+ ]
45896
+ }
45897
+ )
45446
45898
  }
45447
45899
  );
45448
45900
  }
@@ -45494,32 +45946,44 @@ function TestimonialsSplitImage({
45494
45946
  /* @__PURE__ */ jsxRuntime.jsx(
45495
45947
  DynamicIcon,
45496
45948
  {
45497
- name: "lucide/quote",
45949
+ name: "mdi/comment-quote-outline",
45498
45950
  size: 48,
45499
- className: cn("text-primary/20", quoteIconClassName)
45951
+ className: quoteIconClassName
45500
45952
  }
45501
45953
  ),
45502
45954
  testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
45503
45955
  "blockquote",
45504
45956
  {
45505
45957
  className: cn(
45506
- "text-xl font-medium leading-relaxed md:text-2xl",
45958
+ "text-lg font-light leading-relaxed md:text-2xl lg:text-3xl",
45507
45959
  quoteClassName
45508
45960
  ),
45509
45961
  children: testimonial.quote
45510
45962
  }
45511
45963
  ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: quoteClassName, children: testimonial.quote })),
45512
45964
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-4 pt-4", authorClassName), children: [
45513
- /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-12", children: [
45965
+ /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "relative flex shrink-0 overflow-hidden shadow-xl rounded-2xl size-18", children: [
45514
45966
  /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
45515
45967
  /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: getInitials(authorName) })
45516
45968
  ] }),
45517
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
45969
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0", children: [
45518
45970
  testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-semibold", children: testimonial.author }) : testimonial.author),
45519
45971
  (testimonial.role || testimonial.company) && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm ", children: [
45520
45972
  testimonial.role && (typeof testimonial.role === "string" ? testimonial.role : testimonial.role),
45521
45973
  testimonial.company && (typeof testimonial.company === "string" ? ` at ${testimonial.company}` : testimonial.company)
45522
- ] })
45974
+ ] }),
45975
+ testimonial.linkConfig?.href && /* @__PURE__ */ jsxRuntime.jsx(
45976
+ Pressable,
45977
+ {
45978
+ href: testimonial.linkConfig.href,
45979
+ className: cn(
45980
+ testimonial.linkConfig.className,
45981
+ "text-sm font-bold tracking-wide uppercase",
45982
+ "hover:underline hover:underline-offset-2"
45983
+ ),
45984
+ children: testimonial.linkConfig.label
45985
+ }
45986
+ )
45523
45987
  ] })
45524
45988
  ] })
45525
45989
  ]
@@ -45549,13 +46013,17 @@ function TestimonialsSplitImage({
45549
46013
  children: /* @__PURE__ */ jsxRuntime.jsxs(
45550
46014
  "div",
45551
46015
  {
45552
- className: cn("grid items-center gap-12 lg:grid-cols-2", gridClassName),
46016
+ className: cn(
46017
+ "grid items-center gap-10 md:gap-12 grid-cols-1 lg:grid-cols-2",
46018
+ gridClassName
46019
+ ),
45553
46020
  children: [
45554
46021
  imageSrc && /* @__PURE__ */ jsxRuntime.jsx(
45555
46022
  "div",
45556
46023
  {
45557
46024
  className: cn(
45558
- "relative aspect-4/3 overflow-hidden rounded-2xl lg:aspect-square",
46025
+ "shadow-xl rounded-2xl",
46026
+ "relative aspect-4/3 overflow-hidden lg:aspect-square",
45559
46027
  effectiveImagePosition === "right" && "lg:order-2",
45560
46028
  imageClassName
45561
46029
  ),
@@ -45878,19 +46346,6 @@ function TestimonialsWallCompact({
45878
46346
  }
45879
46347
  );
45880
46348
  }
45881
- function StarRating4({ rating, size = 14 }) {
45882
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-0.5", children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsxRuntime.jsx(
45883
- DynamicIcon,
45884
- {
45885
- name: "lucide/star",
45886
- size,
45887
- className: cn(
45888
- star <= rating ? "fill-primary text-primary" : "fill-muted text-muted"
45889
- )
45890
- },
45891
- star
45892
- )) });
45893
- }
45894
46349
  function TestimonialsMiniDividers({
45895
46350
  testimonials,
45896
46351
  testimonialsSlot,
@@ -45905,101 +46360,134 @@ function TestimonialsMiniDividers({
45905
46360
  quoteClassName,
45906
46361
  authorClassName,
45907
46362
  background,
45908
- spacing,
46363
+ spacing = "lg",
46364
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
45909
46365
  pattern,
45910
46366
  patternOpacity
45911
46367
  }) {
45912
- const getAuthorName = React8.useCallback((testimonial) => {
45913
- if (typeof testimonial.author === "string") return testimonial.author;
45914
- return "";
45915
- }, []);
45916
- const getAvatarSrc = React8.useCallback((testimonial) => {
45917
- return testimonial.avatarSrc || testimonial.avatar?.src;
45918
- }, []);
46368
+ const getAuthorName = React8.useCallback(
46369
+ (testimonial) => {
46370
+ if (typeof testimonial.author === "string") return testimonial.author;
46371
+ return "";
46372
+ },
46373
+ []
46374
+ );
46375
+ const getAvatarSrc = React8.useCallback(
46376
+ (testimonial) => {
46377
+ return testimonial.avatarSrc || testimonial.avatar?.src;
46378
+ },
46379
+ []
46380
+ );
45919
46381
  const getInitials = React8.useCallback((name) => {
45920
46382
  return name.split(" ").map((n) => n[0]).join("");
45921
46383
  }, []);
45922
46384
  const renderedTestimonials = React8.useMemo(() => {
45923
46385
  if (testimonialsSlot) return testimonialsSlot;
45924
46386
  if (!testimonials || testimonials.length === 0) return null;
45925
- return /* @__PURE__ */ jsxRuntime.jsx(
46387
+ return /* @__PURE__ */ jsxRuntime.jsxs(
45926
46388
  "div",
45927
46389
  {
45928
46390
  className: cn(
45929
- "grid divide-y sm:grid-cols-2 sm:divide-x sm:divide-y-0 lg:grid-cols-3 lg:divide-x",
46391
+ "relative grid border-x border-dashed md:grid-cols-3",
45930
46392
  gridClassName
45931
46393
  ),
45932
- children: testimonials.map((testimonial, index) => {
45933
- const authorName = getAuthorName(testimonial);
45934
- const avatarSrc = getAvatarSrc(testimonial);
45935
- return /* @__PURE__ */ jsxRuntime.jsxs(
45936
- "div",
46394
+ children: [
46395
+ /* @__PURE__ */ jsxRuntime.jsx(
46396
+ DynamicIcon,
45937
46397
  {
45938
- className: cn(
45939
- "p-6",
45940
- index >= 2 && "lg:border-t-0",
45941
- index >= 3 && "sm:border-t lg:border-t-0",
45942
- itemClassName
45943
- ),
45944
- children: [
45945
- testimonial.rating && /* @__PURE__ */ jsxRuntime.jsx(StarRating4, { rating: testimonial.rating }),
45946
- testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
45947
- "p",
45948
- {
45949
- className: cn(
45950
- "mt-3 text-sm leading-relaxed",
45951
- quoteClassName
45952
- ),
45953
- children: [
45954
- "\u201C",
45955
- testimonial.quote,
45956
- "\u201D"
45957
- ]
45958
- }
45959
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-3", quoteClassName), children: testimonial.quote })),
45960
- /* @__PURE__ */ jsxRuntime.jsxs(
45961
- "div",
45962
- {
45963
- className: cn("mt-4 flex items-center gap-3", authorClassName),
45964
- children: [
45965
- /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-8", children: [
45966
- /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
45967
- /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "text-xs", children: getInitials(authorName) })
45968
- ] }),
45969
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
45970
- testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium", children: testimonial.author }) : testimonial.author),
45971
- testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: testimonial.role }) : testimonial.role)
45972
- ] })
45973
- ]
45974
- }
45975
- )
45976
- ]
45977
- },
45978
- index
45979
- );
45980
- })
46398
+ name: "lucide/sparkle",
46399
+ size: 20,
46400
+ className: "absolute top-0 right-0 translate-x-2.5 -translate-y-2.5 fill-primary"
46401
+ }
46402
+ ),
46403
+ /* @__PURE__ */ jsxRuntime.jsx(
46404
+ DynamicIcon,
46405
+ {
46406
+ name: "lucide/sparkle",
46407
+ size: 20,
46408
+ className: "absolute top-0 left-0 -translate-x-2.5 -translate-y-2.5 fill-primary"
46409
+ }
46410
+ ),
46411
+ testimonials.map((testimonial, index) => {
46412
+ const authorName = getAuthorName(testimonial);
46413
+ const avatarSrc = getAvatarSrc(testimonial);
46414
+ return /* @__PURE__ */ jsxRuntime.jsxs(
46415
+ "div",
46416
+ {
46417
+ className: cn(
46418
+ "group flex flex-col gap-4 border-t border-dashed p-4 transition-colors duration-300 hover:bg-muted/50 lg:p-8",
46419
+ index === 1 && "md:border-x md:border-dashed",
46420
+ index === 2 ? "border-b" : "md:border-b",
46421
+ itemClassName
46422
+ ),
46423
+ children: [
46424
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
46425
+ /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-10 shrink-0 rounded-md bg-card shadow-sm lg:size-12", children: [
46426
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
46427
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "rounded-md bg-card text-card-foreground text-sm", children: getInitials(authorName) })
46428
+ ] }),
46429
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("min-w-0", authorClassName), children: [
46430
+ testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate font-medium", children: testimonial.author }) : testimonial.author),
46431
+ testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-sm text-muted-foreground", children: testimonial.role }) : testimonial.role)
46432
+ ] })
46433
+ ] }),
46434
+ testimonial.rating != null && /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: testimonial.rating }),
46435
+ testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
46436
+ "p",
46437
+ {
46438
+ className: cn(
46439
+ "text-sm leading-relaxed text-muted-foreground",
46440
+ quoteClassName
46441
+ ),
46442
+ children: [
46443
+ "\u201C",
46444
+ testimonial.quote,
46445
+ "\u201D"
46446
+ ]
46447
+ }
46448
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm", quoteClassName), children: testimonial.quote }))
46449
+ ]
46450
+ },
46451
+ index
46452
+ );
46453
+ })
46454
+ ]
45981
46455
  }
45982
46456
  );
45983
- }, [testimonialsSlot, gridClassName, testimonials, itemClassName, quoteClassName, authorClassName, getAuthorName, getAvatarSrc, getInitials]);
45984
- return /* @__PURE__ */ jsxRuntime.jsxs(
46457
+ }, [
46458
+ testimonialsSlot,
46459
+ gridClassName,
46460
+ testimonials,
46461
+ itemClassName,
46462
+ quoteClassName,
46463
+ authorClassName,
46464
+ getAuthorName,
46465
+ getAvatarSrc,
46466
+ getInitials
46467
+ ]);
46468
+ return /* @__PURE__ */ jsxRuntime.jsx(
45985
46469
  Section,
45986
46470
  {
45987
46471
  background,
45988
46472
  spacing,
45989
46473
  pattern,
45990
46474
  patternOpacity,
45991
- className,
45992
- children: [
45993
- /* @__PURE__ */ jsxRuntime.jsxs(
46475
+ className: cn("relative flex items-center justify-center", className),
46476
+ containerClassName,
46477
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
46478
+ /* @__PURE__ */ jsxRuntime.jsx(
45994
46479
  "div",
45995
46480
  {
45996
- className: cn("mx-auto mb-12 max-w-2xl text-center", headerClassName),
45997
- children: [
46481
+ className: cn(
46482
+ "border-x border-t border-dashed px-4 py-6 md:py-16 md:px-16",
46483
+ headerClassName
46484
+ ),
46485
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-3xl", children: [
45998
46486
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
45999
46487
  "h2",
46000
46488
  {
46001
46489
  className: cn(
46002
- "text-3xl font-semibold tracking-tight md:text-4xl",
46490
+ "text-center text-3xl font-semibold tracking-tight md:text-4xl",
46003
46491
  headingClassName
46004
46492
  ),
46005
46493
  children: heading
@@ -46009,17 +46497,17 @@ function TestimonialsMiniDividers({
46009
46497
  "p",
46010
46498
  {
46011
46499
  className: cn(
46012
- "mt-4 text-lg text-muted-foreground",
46500
+ "mx-auto mt-4 max-w-2xl text-center text-lg text-balance",
46013
46501
  descriptionClassName
46014
46502
  ),
46015
46503
  children: description
46016
46504
  }
46017
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-4", descriptionClassName), children: description }))
46018
- ]
46505
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
46506
+ ] })
46019
46507
  }
46020
46508
  ),
46021
46509
  renderedTestimonials
46022
- ]
46510
+ ] })
46023
46511
  }
46024
46512
  );
46025
46513
  }
@@ -46039,18 +46527,25 @@ function TestimonialsLogoCards({
46039
46527
  quoteClassName,
46040
46528
  authorClassName,
46041
46529
  background,
46042
- spacing,
46530
+ spacing = "lg",
46531
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
46043
46532
  pattern,
46044
46533
  patternOpacity,
46045
46534
  optixFlowConfig
46046
46535
  }) {
46047
- const getAuthorName = React8.useCallback((testimonial) => {
46048
- if (typeof testimonial.author === "string") return testimonial.author;
46049
- return "";
46050
- }, []);
46051
- const getAvatarSrc = React8.useCallback((testimonial) => {
46052
- return testimonial.avatarSrc || testimonial.avatar?.src;
46053
- }, []);
46536
+ const getAuthorName = React8.useCallback(
46537
+ (testimonial) => {
46538
+ if (typeof testimonial.author === "string") return testimonial.author;
46539
+ return "";
46540
+ },
46541
+ []
46542
+ );
46543
+ const getAvatarSrc = React8.useCallback(
46544
+ (testimonial) => {
46545
+ return testimonial.avatarSrc || testimonial.avatar?.src;
46546
+ },
46547
+ []
46548
+ );
46054
46549
  const getInitials = React8.useCallback((name) => {
46055
46550
  return name.split(" ").map((n) => n[0]).join("");
46056
46551
  }, []);
@@ -46081,7 +46576,10 @@ function TestimonialsLogoCards({
46081
46576
  {
46082
46577
  src: testimonial.companyLogo,
46083
46578
  alt: testimonial.companyLogoAlt || "Company logo",
46084
- className: "h-6 w-auto object-contain dark:invert",
46579
+ className: cn(
46580
+ index === 0 ? "h-10" : "h-5",
46581
+ "w-auto object-contain"
46582
+ ),
46085
46583
  optixFlowConfig
46086
46584
  }
46087
46585
  ) }),
@@ -46098,20 +46596,29 @@ function TestimonialsLogoCards({
46098
46596
  {
46099
46597
  className: cn(
46100
46598
  "leading-relaxed",
46101
- index === 0 ? "text-xl font-medium" : "text-sm",
46599
+ index === 0 ? "text-lg md:text-xl font-light" : "text-sm md:text-base",
46102
46600
  quoteClassName
46103
46601
  ),
46104
46602
  children: testimonial.quote
46105
46603
  }
46106
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: quoteClassName, children: testimonial.quote })),
46604
+ ) : testimonial.quote),
46107
46605
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-3", authorClassName), children: [
46108
- /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: cn(index === 0 ? "size-12" : "size-10"), children: [
46109
- /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
46110
- /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: getInitials(authorName) })
46111
- ] }),
46606
+ /* @__PURE__ */ jsxRuntime.jsxs(
46607
+ Avatar,
46608
+ {
46609
+ className: cn(
46610
+ index === 0 ? "size-12" : "size-10",
46611
+ "ring-4 ring-primary"
46612
+ ),
46613
+ children: [
46614
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
46615
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: getInitials(authorName) })
46616
+ ]
46617
+ }
46618
+ ),
46112
46619
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
46113
- testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("cite", { className: "text-sm font-medium not-italic", children: testimonial.author }) : testimonial.author),
46114
- testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: testimonial.role }) : testimonial.role)
46620
+ testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("cite", { className: "text-sm md:text-base font-medium", children: testimonial.author }) : testimonial.author),
46621
+ testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs md:text-sm", children: testimonial.role }) : testimonial.role)
46115
46622
  ] })
46116
46623
  ] })
46117
46624
  ]
@@ -46124,7 +46631,20 @@ function TestimonialsLogoCards({
46124
46631
  })
46125
46632
  }
46126
46633
  );
46127
- }, [testimonialsSlot, gridClassName, testimonials, cardClassName, cardHeaderClassName, optixFlowConfig, cardContentClassName, quoteClassName, authorClassName, getAuthorName, getAvatarSrc, getInitials]);
46634
+ }, [
46635
+ testimonialsSlot,
46636
+ gridClassName,
46637
+ testimonials,
46638
+ cardClassName,
46639
+ cardHeaderClassName,
46640
+ optixFlowConfig,
46641
+ cardContentClassName,
46642
+ quoteClassName,
46643
+ authorClassName,
46644
+ getAuthorName,
46645
+ getAvatarSrc,
46646
+ getInitials
46647
+ ]);
46128
46648
  return /* @__PURE__ */ jsxRuntime.jsxs(
46129
46649
  Section,
46130
46650
  {
@@ -46133,6 +46653,7 @@ function TestimonialsLogoCards({
46133
46653
  pattern,
46134
46654
  patternOpacity,
46135
46655
  className,
46656
+ containerClassName,
46136
46657
  children: [
46137
46658
  /* @__PURE__ */ jsxRuntime.jsxs(
46138
46659
  "div",
@@ -46148,17 +46669,8 @@ function TestimonialsLogoCards({
46148
46669
  ),
46149
46670
  children: heading
46150
46671
  }
46151
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
46152
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
46153
- "p",
46154
- {
46155
- className: cn(
46156
- "mt-4 text-lg text-muted-foreground",
46157
- descriptionClassName
46158
- ),
46159
- children: description
46160
- }
46161
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-4", descriptionClassName), children: description }))
46672
+ ) : heading),
46673
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-4 text-lg", descriptionClassName), children: description }) : description)
46162
46674
  ]
46163
46675
  }
46164
46676
  ),
@@ -46453,14 +46965,14 @@ function TestimonialsAnimatedSplit({
46453
46965
  animate: { opacity: 1, y: 0 },
46454
46966
  exit: { opacity: 0, y: -20 },
46455
46967
  transition: { duration: 0.4 },
46456
- className: "space-y-6",
46968
+ className: "space-y-4 md:space-y-6",
46457
46969
  children: [
46458
46970
  /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "mdi/comment-quote-outline", size: 48 }),
46459
46971
  current.quote && (typeof current.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
46460
46972
  "blockquote",
46461
46973
  {
46462
46974
  className: cn(
46463
- "text-lg font-base leading-relaxed md:text-2xl",
46975
+ "text-base md:text-lg font-thin leading-normal md:leading-relaxed md:text-2xl line-clamp-4",
46464
46976
  quoteClassName
46465
46977
  ),
46466
46978
  children: current.quote
@@ -46472,9 +46984,9 @@ function TestimonialsAnimatedSplit({
46472
46984
  /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: getInitials(authorName) })
46473
46985
  ] }),
46474
46986
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
46475
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-1", children: [
46476
- current.author && (typeof current.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", children: current.author }) : current.author),
46477
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-base tracking-wide", children: [
46987
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col md:flex-row items-start md:items-center gap-0 md:gap-1", children: [
46988
+ current.author && (typeof current.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm md:text-base font-semibold", children: current.author }) : current.author),
46989
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm md:text-base font-normal tracking-normal md:tracking-wide", children: [
46478
46990
  current.role && (typeof current.role === "string" ? current.role : null),
46479
46991
  current.company && (typeof current.company === "string" ? ` at ${current.company}` : null)
46480
46992
  ] })
@@ -46628,7 +47140,7 @@ function TestimonialsScrollingColumns({
46628
47140
  framerMotion.motion.div,
46629
47141
  {
46630
47142
  className: cn(
46631
- "relative overflow-hidden rounded-lg bg-card shadow-sm",
47143
+ "relative overflow-hidden rounded-2xl bg-card text-card-foreground shadow-sm",
46632
47144
  cardClassName
46633
47145
  ),
46634
47146
  variants: itemVariants2,
@@ -46643,15 +47155,25 @@ function TestimonialsScrollingColumns({
46643
47155
  optixFlowConfig
46644
47156
  }
46645
47157
  ),
46646
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-foreground/70 via-foreground/40 to-transparent" })
47158
+ /* @__PURE__ */ jsxRuntime.jsx(GradientOverlay, {})
46647
47159
  ] }),
46648
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute bottom-0 left-0 right-0 p-6 text-left text-background", children: [
46649
- /* @__PURE__ */ jsxRuntime.jsx(
47160
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute bottom-0 left-0 right-0 p-6 text-left", children: [
47161
+ testimonial?.logoSrc ? /* @__PURE__ */ jsxRuntime.jsx(
47162
+ img.Img,
47163
+ {
47164
+ src: testimonial.logoSrc,
47165
+ alt: typeof testimonial.company === "string" ? `${testimonial.company} logo` : typeof testimonial.author === "string" ? `${testimonial.author} company logo` : "Company logo",
47166
+ className: cn(
47167
+ "mx-auto mb-6 max-h-12 max-w-32 object-contain md:max-h-16 md:max-w-48"
47168
+ ),
47169
+ optixFlowConfig
47170
+ }
47171
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
46650
47172
  DynamicIcon,
46651
47173
  {
46652
- name: "lucide/quote",
46653
- size: 32,
46654
- className: "mb-4 text-background/40"
47174
+ name: "mdi/comment-quote-outline",
47175
+ size: 42,
47176
+ className: cn("opacity-50")
46655
47177
  }
46656
47178
  ),
46657
47179
  testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -46663,12 +47185,12 @@ function TestimonialsScrollingColumns({
46663
47185
  ),
46664
47186
  children: testimonial.quote
46665
47187
  }
46666
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: quoteClassName, children: testimonial.quote })),
47188
+ ) : testimonial.quote),
46667
47189
  /* @__PURE__ */ jsxRuntime.jsx("figcaption", { className: cn("mt-4", authorClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "font-semibold", children: [
46668
47190
  "\u2014",
46669
47191
  " ",
46670
47192
  testimonial.author && (typeof testimonial.author === "string" ? testimonial.author : null),
46671
- testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-1 text-background/60", children: [
47193
+ testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-1", children: [
46672
47194
  ", ",
46673
47195
  testimonial.role
46674
47196
  ] }) : null)
@@ -46704,19 +47226,32 @@ function TestimonialsScrollingColumns({
46704
47226
  /* @__PURE__ */ jsxRuntime.jsxs(
46705
47227
  "div",
46706
47228
  {
46707
- className: cn("mx-auto mb-12 max-w-2xl text-center", headerClassName),
47229
+ className: cn(
47230
+ "mx-auto mb-12 max-w-full md:max-w-2xl space-y-4 text-center",
47231
+ headerClassName
47232
+ ),
46708
47233
  children: [
46709
47234
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
46710
47235
  "h2",
46711
47236
  {
46712
47237
  className: cn(
46713
- "text-3xl font-semibold tracking-tight md:text-4xl",
47238
+ "text-pretty text-3xl md:text-4xl lg:text-6xl",
47239
+ "font-semibold tracking-tight",
46714
47240
  headingClassName
46715
47241
  ),
46716
47242
  children: heading
46717
47243
  }
46718
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
46719
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-4 text-lg ", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-4", descriptionClassName), children: description }))
47244
+ ) : heading),
47245
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
47246
+ "p",
47247
+ {
47248
+ className: cn(
47249
+ "text-base text-base md:text-lg text-balance",
47250
+ descriptionClassName
47251
+ ),
47252
+ children: description
47253
+ }
47254
+ ) : description)
46720
47255
  ]
46721
47256
  }
46722
47257
  ),
@@ -46736,7 +47271,8 @@ function TestimonialsMinimalNumbered({
46736
47271
  authorClassName,
46737
47272
  navigationClassName,
46738
47273
  background,
46739
- spacing,
47274
+ spacing = "lg",
47275
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
46740
47276
  pattern,
46741
47277
  patternOpacity
46742
47278
  }) {
@@ -46794,14 +47330,14 @@ function TestimonialsMinimalNumbered({
46794
47330
  "span",
46795
47331
  {
46796
47332
  className: cn(
46797
- "text-8xl font-light leading-none select-none transition-all duration-500 md:text-9xl",
47333
+ "text-4xl md:text-8xl font-light leading-none select-none transition-all duration-500 md:text-9xl",
46798
47334
  numberClassName
46799
47335
  ),
46800
47336
  style: { fontFeatureSettings: '"tnum"' },
46801
47337
  children: String(active + 1).padStart(2, "0")
46802
47338
  }
46803
47339
  ),
46804
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 pt-6", children: [
47340
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 pt-0 md:pt-6", children: [
46805
47341
  current.quote && (typeof current.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
46806
47342
  "blockquote",
46807
47343
  {
@@ -46907,13 +47443,13 @@ function TestimonialsMinimalNumbered({
46907
47443
  String(testimonials.length).padStart(2, "0")
46908
47444
  ] })
46909
47445
  ] }) }),
46910
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
47446
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
46911
47447
  /* @__PURE__ */ jsxRuntime.jsx(
46912
47448
  "button",
46913
47449
  {
46914
47450
  onClick: handlePrev,
46915
47451
  className: "rounded-full p-2 transition-all duration-300 ",
46916
- children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-left", size: 20 })
47452
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-left", size: 24 })
46917
47453
  }
46918
47454
  ),
46919
47455
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -46921,7 +47457,7 @@ function TestimonialsMinimalNumbered({
46921
47457
  {
46922
47458
  onClick: handleNext,
46923
47459
  className: "rounded-full p-2 transition-all duration-300 ",
46924
- children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 20 })
47460
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 24 })
46925
47461
  }
46926
47462
  )
46927
47463
  ] })
@@ -47042,10 +47578,11 @@ function TestimonialsParallaxNumber({
47042
47578
  framerMotion.motion.div,
47043
47579
  {
47044
47580
  className: cn(
47581
+ "opacity-15",
47045
47582
  "pointer-events-none absolute -left-8 top-1/2 -translate-y-1/2 select-none text-[20rem] font-bold leading-none tracking-tighter ",
47046
47583
  numberClassName
47047
47584
  ),
47048
- style: { x: numberX, y: numberY },
47585
+ style: { x: numberX, y: numberY, opacity: 0.1 },
47049
47586
  children: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsx(
47050
47587
  framerMotion.motion.span,
47051
47588
  {
@@ -47054,14 +47591,14 @@ function TestimonialsParallaxNumber({
47054
47591
  exit: { opacity: 0, scale: 1.1, filter: "blur(10px)" },
47055
47592
  transition: { duration: 0.6, ease: [0.22, 1, 0.36, 1] },
47056
47593
  className: "block",
47057
- children: current.backgroundIcon ? /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: current.backgroundIcon }) : current.backgroundLabel != null ? current.backgroundLabel : null
47594
+ children: current.backgroundIcon ? /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: current.backgroundIcon, size: 320 }) : current.backgroundLabel != null ? current.backgroundLabel : null
47058
47595
  },
47059
47596
  activeIndex
47060
47597
  ) })
47061
47598
  }
47062
47599
  ),
47063
47600
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex", children: [
47064
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center border-r border-border/50 pr-16", children: [
47601
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center border-r-0 md:border-r border-border/50 pr-4 md:pr-16", children: [
47065
47602
  /* @__PURE__ */ jsxRuntime.jsxs(
47066
47603
  framerMotion.motion.span,
47067
47604
  {
@@ -47087,7 +47624,7 @@ function TestimonialsParallaxNumber({
47087
47624
  }
47088
47625
  ) })
47089
47626
  ] }),
47090
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 py-12 pl-16", children: [
47627
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 py-6 md:py-12 pl-4 md:pl-16", children: [
47091
47628
  /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsx(
47092
47629
  framerMotion.motion.div,
47093
47630
  {
@@ -47104,7 +47641,7 @@ function TestimonialsParallaxNumber({
47104
47641
  framerMotion.motion.blockquote,
47105
47642
  {
47106
47643
  className: cn(
47107
- "text-3xl font-light leading-[1.15] tracking-tight md:text-4xl lg:text-5xl",
47644
+ "text-2xl md:text-3xl font-light leading-[1.15] tracking-tight md:text-4xl lg:text-5xl",
47108
47645
  quoteClassName
47109
47646
  ),
47110
47647
  initial: "hidden",
@@ -47139,7 +47676,7 @@ function TestimonialsParallaxNumber({
47139
47676
  },
47140
47677
  activeIndex
47141
47678
  ) }) }),
47142
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-end justify-between", children: [
47679
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start md:items-end justify-between", children: [
47143
47680
  /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsx(
47144
47681
  framerMotion.motion.div,
47145
47682
  {
@@ -47156,7 +47693,9 @@ function TestimonialsParallaxNumber({
47156
47693
  {
47157
47694
  href: current.linkConfig.href,
47158
47695
  className: cn(
47159
- "text-sm text-muted-foreground underline underline-offset-2 hover:text-foreground transition-colors",
47696
+ "transition-all duration-500",
47697
+ "hover:underline hover:underline-offset-4",
47698
+ "text-sm",
47160
47699
  current.linkConfig.className
47161
47700
  ),
47162
47701
  children: current.linkConfig.label
@@ -47169,7 +47708,10 @@ function TestimonialsParallaxNumber({
47169
47708
  /* @__PURE__ */ jsxRuntime.jsxs(
47170
47709
  "div",
47171
47710
  {
47172
- className: cn("flex items-center gap-4", navigationClassName),
47711
+ className: cn(
47712
+ "flex items-center gap-4 flex-col md:flex-row",
47713
+ navigationClassName
47714
+ ),
47173
47715
  children: [
47174
47716
  /* @__PURE__ */ jsxRuntime.jsx(
47175
47717
  framerMotion.motion.button,
@@ -51685,7 +52227,7 @@ function HeroBadgeShadowOverlay({
51685
52227
  backgroundImageUrl,
51686
52228
  optixFlowConfig,
51687
52229
  background,
51688
- spacing = "py-0 md:py-0",
52230
+ spacing = "none",
51689
52231
  pattern,
51690
52232
  patternOpacity,
51691
52233
  className,
@@ -51772,7 +52314,8 @@ function HeroVideoBackgroundDark({
51772
52314
  videoSrc,
51773
52315
  videoSlot,
51774
52316
  background,
51775
- videoBrightness = "50",
52317
+ videoBrightness,
52318
+ videoOverlayIntensity = "high",
51776
52319
  spacing = "py-0 md:py-0",
51777
52320
  pattern,
51778
52321
  patternOpacity,
@@ -51784,21 +52327,21 @@ function HeroVideoBackgroundDark({
51784
52327
  }) {
51785
52328
  const renderVideo = React8.useMemo(() => {
51786
52329
  if (videoSlot) return videoSlot;
51787
- return /* @__PURE__ */ jsxRuntime.jsx(
51788
- "video",
51789
- {
51790
- loop: true,
51791
- playsInline: true,
51792
- src: videoSrc,
51793
- className: cn(
51794
- "absolute top-0 left-0 size-full object-cover",
51795
- `brightness-${videoBrightness}`
51796
- ),
51797
- autoPlay: true,
51798
- muted: true
51799
- }
51800
- );
51801
- }, [videoSlot, videoSrc, videoBrightness]);
52330
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
52331
+ /* @__PURE__ */ jsxRuntime.jsx(
52332
+ "video",
52333
+ {
52334
+ loop: true,
52335
+ playsInline: true,
52336
+ src: videoSrc,
52337
+ className: "absolute top-0 left-0 size-full object-cover",
52338
+ autoPlay: true,
52339
+ muted: true
52340
+ }
52341
+ ),
52342
+ /* @__PURE__ */ jsxRuntime.jsx(GradientOverlay, { intensity: videoOverlayIntensity })
52343
+ ] });
52344
+ }, [videoSlot, videoSrc, videoOverlayIntensity]);
51802
52345
  return /* @__PURE__ */ jsxRuntime.jsx(
51803
52346
  Section,
51804
52347
  {
@@ -115369,8 +115912,8 @@ var BLOCK_REGISTRY = {
115369
115912
  },
115370
115913
  "testimonials-centered-avatars": {
115371
115914
  id: "testimonials-centered-avatars",
115372
- name: "Testimonials Centered with Avatar Stack",
115373
- description: "A centered testimonial section featuring an overlapping avatar stack at the top, creating a community feel. Displays a rotating testimonial with quote, author name, role, and navigation dots. The stacked avatars create visual interest and suggest multiple satisfied customers. Perfect for SaaS landing pages.",
115915
+ name: "Testimonials Centered with Glassmorphism Card",
115916
+ description: "A modern testimonial section featuring a glassmorphism card with frosted glass effect as the primary focal point. Displays an overlapping avatar stack at the top, creating a community feel, with rotating testimonials including quote, author name, role, and navigation dots. The translucent card design creates visual depth and sophistication. Perfect for SaaS landing pages and premium marketing sites.",
115374
115917
  semanticTags: [
115375
115918
  "testimonials",
115376
115919
  "centered",
@@ -115378,7 +115921,11 @@ var BLOCK_REGISTRY = {
115378
115921
  "stack",
115379
115922
  "community",
115380
115923
  "social-proof",
115381
- "minimal",
115924
+ "glassmorphism",
115925
+ "glass",
115926
+ "frosted",
115927
+ "modern",
115928
+ "premium",
115382
115929
  "rotating"
115383
115930
  ],
115384
115931
  category: "testimonials",