@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
@@ -912,6 +912,7 @@ var SocialLinkIcon = React3__namespace.forwardRef(
912
912
  iconClassName,
913
913
  className,
914
914
  iconNameOverride,
915
+ iconOnly = false,
915
916
  ...pressableProps
916
917
  }, ref) => {
917
918
  const platform = usePlatformFromUrl.usePlatformFromUrl(href);
@@ -924,6 +925,21 @@ var SocialLinkIcon = React3__namespace.forwardRef(
924
925
  const accessibleLabel = React3__namespace.useMemo(() => {
925
926
  return label || platformName;
926
927
  }, [label, platformName]);
928
+ const icon = React3__namespace.useMemo(() => {
929
+ return /* @__PURE__ */ jsxRuntime.jsx(
930
+ DynamicIcon,
931
+ {
932
+ name: iconName,
933
+ size: iconSize,
934
+ color: iconColor,
935
+ className: iconClassName,
936
+ alt: accessibleLabel
937
+ }
938
+ );
939
+ }, [iconName, iconSize, iconColor, iconClassName, accessibleLabel]);
940
+ if (iconOnly) {
941
+ return icon;
942
+ }
927
943
  return /* @__PURE__ */ jsxRuntime.jsx(
928
944
  Pressable,
929
945
  {
@@ -935,16 +951,7 @@ var SocialLinkIcon = React3__namespace.forwardRef(
935
951
  className
936
952
  ),
937
953
  ...pressableProps,
938
- children: /* @__PURE__ */ jsxRuntime.jsx(
939
- DynamicIcon,
940
- {
941
- name: iconName,
942
- size: iconSize,
943
- color: iconColor,
944
- className: iconClassName,
945
- alt: accessibleLabel
946
- }
947
- )
954
+ children: icon
948
955
  }
949
956
  );
950
957
  }
@@ -891,6 +891,7 @@ var SocialLinkIcon = React3.forwardRef(
891
891
  iconClassName,
892
892
  className,
893
893
  iconNameOverride,
894
+ iconOnly = false,
894
895
  ...pressableProps
895
896
  }, ref) => {
896
897
  const platform = usePlatformFromUrl(href);
@@ -903,6 +904,21 @@ var SocialLinkIcon = React3.forwardRef(
903
904
  const accessibleLabel = React3.useMemo(() => {
904
905
  return label || platformName;
905
906
  }, [label, platformName]);
907
+ const icon = React3.useMemo(() => {
908
+ return /* @__PURE__ */ jsx(
909
+ DynamicIcon,
910
+ {
911
+ name: iconName,
912
+ size: iconSize,
913
+ color: iconColor,
914
+ className: iconClassName,
915
+ alt: accessibleLabel
916
+ }
917
+ );
918
+ }, [iconName, iconSize, iconColor, iconClassName, accessibleLabel]);
919
+ if (iconOnly) {
920
+ return icon;
921
+ }
906
922
  return /* @__PURE__ */ jsx(
907
923
  Pressable,
908
924
  {
@@ -914,16 +930,7 @@ var SocialLinkIcon = React3.forwardRef(
914
930
  className
915
931
  ),
916
932
  ...pressableProps,
917
- children: /* @__PURE__ */ jsx(
918
- DynamicIcon,
919
- {
920
- name: iconName,
921
- size: iconSize,
922
- color: iconColor,
923
- className: iconClassName,
924
- alt: accessibleLabel
925
- }
926
- )
933
+ children: icon
927
934
  }
928
935
  );
929
936
  }
@@ -1005,6 +1005,7 @@ var SocialLinkIcon = React7__namespace.forwardRef(
1005
1005
  iconClassName,
1006
1006
  className,
1007
1007
  iconNameOverride,
1008
+ iconOnly = false,
1008
1009
  ...pressableProps
1009
1010
  }, ref) => {
1010
1011
  const platform = usePlatformFromUrl.usePlatformFromUrl(href);
@@ -1017,6 +1018,21 @@ var SocialLinkIcon = React7__namespace.forwardRef(
1017
1018
  const accessibleLabel = React7__namespace.useMemo(() => {
1018
1019
  return label || platformName;
1019
1020
  }, [label, platformName]);
1021
+ const icon = React7__namespace.useMemo(() => {
1022
+ return /* @__PURE__ */ jsxRuntime.jsx(
1023
+ DynamicIcon,
1024
+ {
1025
+ name: iconName,
1026
+ size: iconSize,
1027
+ color: iconColor,
1028
+ className: iconClassName,
1029
+ alt: accessibleLabel
1030
+ }
1031
+ );
1032
+ }, [iconName, iconSize, iconColor, iconClassName, accessibleLabel]);
1033
+ if (iconOnly) {
1034
+ return icon;
1035
+ }
1020
1036
  return /* @__PURE__ */ jsxRuntime.jsx(
1021
1037
  Pressable,
1022
1038
  {
@@ -1028,16 +1044,7 @@ var SocialLinkIcon = React7__namespace.forwardRef(
1028
1044
  className
1029
1045
  ),
1030
1046
  ...pressableProps,
1031
- children: /* @__PURE__ */ jsxRuntime.jsx(
1032
- DynamicIcon,
1033
- {
1034
- name: iconName,
1035
- size: iconSize,
1036
- color: iconColor,
1037
- className: iconClassName,
1038
- alt: accessibleLabel
1039
- }
1040
- )
1047
+ children: icon
1041
1048
  }
1042
1049
  );
1043
1050
  }
@@ -983,6 +983,7 @@ var SocialLinkIcon = React7.forwardRef(
983
983
  iconClassName,
984
984
  className,
985
985
  iconNameOverride,
986
+ iconOnly = false,
986
987
  ...pressableProps
987
988
  }, ref) => {
988
989
  const platform = usePlatformFromUrl(href);
@@ -995,6 +996,21 @@ var SocialLinkIcon = React7.forwardRef(
995
996
  const accessibleLabel = React7.useMemo(() => {
996
997
  return label || platformName;
997
998
  }, [label, platformName]);
999
+ const icon = React7.useMemo(() => {
1000
+ return /* @__PURE__ */ jsx(
1001
+ DynamicIcon,
1002
+ {
1003
+ name: iconName,
1004
+ size: iconSize,
1005
+ color: iconColor,
1006
+ className: iconClassName,
1007
+ alt: accessibleLabel
1008
+ }
1009
+ );
1010
+ }, [iconName, iconSize, iconColor, iconClassName, accessibleLabel]);
1011
+ if (iconOnly) {
1012
+ return icon;
1013
+ }
998
1014
  return /* @__PURE__ */ jsx(
999
1015
  Pressable,
1000
1016
  {
@@ -1006,16 +1022,7 @@ var SocialLinkIcon = React7.forwardRef(
1006
1022
  className
1007
1023
  ),
1008
1024
  ...pressableProps,
1009
- children: /* @__PURE__ */ jsx(
1010
- DynamicIcon,
1011
- {
1012
- name: iconName,
1013
- size: iconSize,
1014
- color: iconColor,
1015
- className: iconClassName,
1016
- alt: accessibleLabel
1017
- }
1018
- )
1025
+ children: icon
1019
1026
  }
1020
1027
  );
1021
1028
  }
@@ -34,16 +34,6 @@ var React6__namespace = /*#__PURE__*/_interopNamespace(React6);
34
34
  function cn(...inputs) {
35
35
  return tailwindMerge.twMerge(clsx.clsx(inputs));
36
36
  }
37
- var BRIGHTNESS_CLASS_MAP = {
38
- "10": "brightness-[.1]",
39
- "20": "brightness-[.2]",
40
- "25": "brightness-[.25]",
41
- "30": "brightness-[.3]",
42
- "40": "brightness-[.4]",
43
- "50": "brightness-50",
44
- "75": "brightness-75",
45
- "100": "brightness-100"
46
- };
47
37
  function normalizePhoneNumber(input) {
48
38
  const trimmed = input.trim();
49
39
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -470,6 +460,67 @@ var DynamicIcon = React6__namespace.memo(function DynamicIcon2({
470
460
  return /* @__PURE__ */ jsxRuntime.jsx(icon.Icon, { ...props, apiKey: apiKey ?? DEFAULT_ICON_API_KEY });
471
461
  });
472
462
  DynamicIcon.displayName = "DynamicIcon";
463
+ var DIRECTION_STYLES = {
464
+ "bottom-to-top": "bg-linear-to-t",
465
+ "top-to-bottom": "bg-linear-to-b",
466
+ "left-to-right": "bg-linear-to-r",
467
+ "right-to-left": "bg-linear-to-l",
468
+ "bottom-left-to-top-right": "bg-linear-to-tr",
469
+ "bottom-right-to-top-left": "bg-linear-to-tl",
470
+ "top-left-to-bottom-right": "bg-linear-to-br",
471
+ "top-right-to-bottom-left": "bg-linear-to-bl"
472
+ };
473
+ var INTENSITY_STOPS = {
474
+ low: "from-black/40 via-black/20 to-transparent",
475
+ default: "from-black/70 via-black/35 to-transparent",
476
+ high: "from-black/85 via-black/50 to-transparent",
477
+ "very-high": "from-black/95 via-black/60 to-black/20"
478
+ };
479
+ var RADIAL_INTENSITY = {
480
+ low: {
481
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.40) 0%, rgba(0,0,0,0.20) 50%, transparent 100%)"
482
+ },
483
+ default: {
484
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.70) 0%, rgba(0,0,0,0.35) 50%, transparent 100%)"
485
+ },
486
+ high: {
487
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.85) 0%, rgba(0,0,0,0.50) 50%, transparent 100%)"
488
+ },
489
+ "very-high": {
490
+ 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%)"
491
+ }
492
+ };
493
+ function GradientOverlay({
494
+ direction = "bottom-to-top",
495
+ intensity = "default",
496
+ className,
497
+ style,
498
+ ...props
499
+ }) {
500
+ if (direction === "radial-center") {
501
+ return /* @__PURE__ */ jsxRuntime.jsx(
502
+ "div",
503
+ {
504
+ className: cn("absolute inset-0", className),
505
+ style: { ...RADIAL_INTENSITY[intensity], ...style },
506
+ ...props
507
+ }
508
+ );
509
+ }
510
+ return /* @__PURE__ */ jsxRuntime.jsx(
511
+ "div",
512
+ {
513
+ className: cn(
514
+ "absolute inset-0",
515
+ DIRECTION_STYLES[direction],
516
+ INTENSITY_STOPS[intensity],
517
+ className
518
+ ),
519
+ style,
520
+ ...props
521
+ }
522
+ );
523
+ }
473
524
  var maxWidthStyles = {
474
525
  sm: "max-w-screen-sm",
475
526
  md: "max-w-screen-md",
@@ -861,7 +912,8 @@ function CarouselAnimatedSections({
861
912
  navigationClassName,
862
913
  arrowsClassName,
863
914
  counterClassName,
864
- slideMediaBrightness = "50",
915
+ slideMediaBrightness,
916
+ slideMediaOverlayIntensity = "high",
865
917
  optixFlowConfig,
866
918
  background = "dark",
867
919
  spacing = "py-0",
@@ -950,7 +1002,7 @@ function CarouselAnimatedSections({
950
1002
  containerMaxWidth,
951
1003
  containerClassName,
952
1004
  children: [
953
- sectionsSlot ? sectionsSlot : currentSection ? /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { initial: false, custom: direction, mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsx(
1005
+ sectionsSlot ? sectionsSlot : currentSection ? /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { initial: false, custom: direction, mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsxs(
954
1006
  framerMotion.motion.div,
955
1007
  {
956
1008
  custom: direction,
@@ -961,19 +1013,21 @@ function CarouselAnimatedSections({
961
1013
  transition: { duration: 0.6, ease: [0.4, 0, 0.2, 1] },
962
1014
  onAnimationComplete: () => setIsAnimating(false),
963
1015
  className: cn("absolute inset-0", currentSection?.className),
964
- children: /* @__PURE__ */ jsxRuntime.jsx(
965
- img.Img,
966
- {
967
- src: currentSection?.image,
968
- alt: typeof currentSection?.title === "string" ? currentSection?.title : `Section ${currentSection?.id}`,
969
- className: cn(
970
- "h-full w-full object-cover",
971
- BRIGHTNESS_CLASS_MAP[slideMediaBrightness],
972
- currentSection?.imageClassName
973
- ),
974
- optixFlowConfig
975
- }
976
- )
1016
+ children: [
1017
+ /* @__PURE__ */ jsxRuntime.jsx(
1018
+ img.Img,
1019
+ {
1020
+ src: currentSection?.image,
1021
+ alt: typeof currentSection?.title === "string" ? currentSection?.title : `Section ${currentSection?.id}`,
1022
+ className: cn(
1023
+ "h-full w-full object-cover",
1024
+ currentSection?.imageClassName
1025
+ ),
1026
+ optixFlowConfig
1027
+ }
1028
+ ),
1029
+ /* @__PURE__ */ jsxRuntime.jsx(GradientOverlay, { intensity: slideMediaOverlayIntensity })
1030
+ ]
977
1031
  },
978
1032
  currentIndex
979
1033
  ) }) : null,
@@ -121,7 +121,12 @@ interface CarouselAnimatedSectionsProps {
121
121
  */
122
122
  counterClassName?: string;
123
123
  /**
124
- * Granular control of brightness for slide media
124
+ * Intensity of the gradient overlay on slide media
125
+ * @default "high"
126
+ */
127
+ slideMediaOverlayIntensity?: "low" | "default" | "high" | "very-high";
128
+ /**
129
+ * Granular control of brightness for slide media (deprecated - prefer slideMediaOverlayIntensity)
125
130
  * Values 10-40 use arbitrary Tailwind values for finer control on bright images
126
131
  */
127
132
  slideMediaBrightness?: "10" | "20" | "25" | "30" | "40" | "50" | "75" | "100";
@@ -150,6 +155,6 @@ interface CarouselAnimatedSectionsProps {
150
155
  */
151
156
  containerMaxWidth?: ContainerMaxWidth;
152
157
  }
153
- declare function CarouselAnimatedSections({ sections, sectionsSlot, actionsSlot, actions, className, containerClassName, contentClassName, subtitleClassName, titleClassName, descriptionClassName, actionsClassName, navigationClassName, arrowsClassName, counterClassName, slideMediaBrightness, optixFlowConfig, background, spacing, containerMaxWidth, pattern, patternOpacity, }: CarouselAnimatedSectionsProps): React.JSX.Element;
158
+ declare function CarouselAnimatedSections({ sections, sectionsSlot, actionsSlot, actions, className, containerClassName, contentClassName, subtitleClassName, titleClassName, descriptionClassName, actionsClassName, navigationClassName, arrowsClassName, counterClassName, slideMediaBrightness, slideMediaOverlayIntensity, optixFlowConfig, background, spacing, containerMaxWidth, pattern, patternOpacity, }: CarouselAnimatedSectionsProps): React.JSX.Element;
154
159
 
155
160
  export { type AnimatedSection, CarouselAnimatedSections, type CarouselAnimatedSectionsProps };
@@ -121,7 +121,12 @@ interface CarouselAnimatedSectionsProps {
121
121
  */
122
122
  counterClassName?: string;
123
123
  /**
124
- * Granular control of brightness for slide media
124
+ * Intensity of the gradient overlay on slide media
125
+ * @default "high"
126
+ */
127
+ slideMediaOverlayIntensity?: "low" | "default" | "high" | "very-high";
128
+ /**
129
+ * Granular control of brightness for slide media (deprecated - prefer slideMediaOverlayIntensity)
125
130
  * Values 10-40 use arbitrary Tailwind values for finer control on bright images
126
131
  */
127
132
  slideMediaBrightness?: "10" | "20" | "25" | "30" | "40" | "50" | "75" | "100";
@@ -150,6 +155,6 @@ interface CarouselAnimatedSectionsProps {
150
155
  */
151
156
  containerMaxWidth?: ContainerMaxWidth;
152
157
  }
153
- declare function CarouselAnimatedSections({ sections, sectionsSlot, actionsSlot, actions, className, containerClassName, contentClassName, subtitleClassName, titleClassName, descriptionClassName, actionsClassName, navigationClassName, arrowsClassName, counterClassName, slideMediaBrightness, optixFlowConfig, background, spacing, containerMaxWidth, pattern, patternOpacity, }: CarouselAnimatedSectionsProps): React.JSX.Element;
158
+ declare function CarouselAnimatedSections({ sections, sectionsSlot, actionsSlot, actions, className, containerClassName, contentClassName, subtitleClassName, titleClassName, descriptionClassName, actionsClassName, navigationClassName, arrowsClassName, counterClassName, slideMediaBrightness, slideMediaOverlayIntensity, optixFlowConfig, background, spacing, containerMaxWidth, pattern, patternOpacity, }: CarouselAnimatedSectionsProps): React.JSX.Element;
154
159
 
155
160
  export { type AnimatedSection, CarouselAnimatedSections, type CarouselAnimatedSectionsProps };
@@ -13,16 +13,6 @@ import { Img } from '@page-speed/img';
13
13
  function cn(...inputs) {
14
14
  return twMerge(clsx(inputs));
15
15
  }
16
- var BRIGHTNESS_CLASS_MAP = {
17
- "10": "brightness-[.1]",
18
- "20": "brightness-[.2]",
19
- "25": "brightness-[.25]",
20
- "30": "brightness-[.3]",
21
- "40": "brightness-[.4]",
22
- "50": "brightness-50",
23
- "75": "brightness-75",
24
- "100": "brightness-100"
25
- };
26
16
  function normalizePhoneNumber(input) {
27
17
  const trimmed = input.trim();
28
18
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -449,6 +439,67 @@ var DynamicIcon = React6.memo(function DynamicIcon2({
449
439
  return /* @__PURE__ */ jsx(Icon, { ...props, apiKey: apiKey ?? DEFAULT_ICON_API_KEY });
450
440
  });
451
441
  DynamicIcon.displayName = "DynamicIcon";
442
+ var DIRECTION_STYLES = {
443
+ "bottom-to-top": "bg-linear-to-t",
444
+ "top-to-bottom": "bg-linear-to-b",
445
+ "left-to-right": "bg-linear-to-r",
446
+ "right-to-left": "bg-linear-to-l",
447
+ "bottom-left-to-top-right": "bg-linear-to-tr",
448
+ "bottom-right-to-top-left": "bg-linear-to-tl",
449
+ "top-left-to-bottom-right": "bg-linear-to-br",
450
+ "top-right-to-bottom-left": "bg-linear-to-bl"
451
+ };
452
+ var INTENSITY_STOPS = {
453
+ low: "from-black/40 via-black/20 to-transparent",
454
+ default: "from-black/70 via-black/35 to-transparent",
455
+ high: "from-black/85 via-black/50 to-transparent",
456
+ "very-high": "from-black/95 via-black/60 to-black/20"
457
+ };
458
+ var RADIAL_INTENSITY = {
459
+ low: {
460
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.40) 0%, rgba(0,0,0,0.20) 50%, transparent 100%)"
461
+ },
462
+ default: {
463
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.70) 0%, rgba(0,0,0,0.35) 50%, transparent 100%)"
464
+ },
465
+ high: {
466
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.85) 0%, rgba(0,0,0,0.50) 50%, transparent 100%)"
467
+ },
468
+ "very-high": {
469
+ 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%)"
470
+ }
471
+ };
472
+ function GradientOverlay({
473
+ direction = "bottom-to-top",
474
+ intensity = "default",
475
+ className,
476
+ style,
477
+ ...props
478
+ }) {
479
+ if (direction === "radial-center") {
480
+ return /* @__PURE__ */ jsx(
481
+ "div",
482
+ {
483
+ className: cn("absolute inset-0", className),
484
+ style: { ...RADIAL_INTENSITY[intensity], ...style },
485
+ ...props
486
+ }
487
+ );
488
+ }
489
+ return /* @__PURE__ */ jsx(
490
+ "div",
491
+ {
492
+ className: cn(
493
+ "absolute inset-0",
494
+ DIRECTION_STYLES[direction],
495
+ INTENSITY_STOPS[intensity],
496
+ className
497
+ ),
498
+ style,
499
+ ...props
500
+ }
501
+ );
502
+ }
452
503
  var maxWidthStyles = {
453
504
  sm: "max-w-screen-sm",
454
505
  md: "max-w-screen-md",
@@ -840,7 +891,8 @@ function CarouselAnimatedSections({
840
891
  navigationClassName,
841
892
  arrowsClassName,
842
893
  counterClassName,
843
- slideMediaBrightness = "50",
894
+ slideMediaBrightness,
895
+ slideMediaOverlayIntensity = "high",
844
896
  optixFlowConfig,
845
897
  background = "dark",
846
898
  spacing = "py-0",
@@ -929,7 +981,7 @@ function CarouselAnimatedSections({
929
981
  containerMaxWidth,
930
982
  containerClassName,
931
983
  children: [
932
- sectionsSlot ? sectionsSlot : currentSection ? /* @__PURE__ */ jsx(AnimatePresence, { initial: false, custom: direction, mode: "wait", children: /* @__PURE__ */ jsx(
984
+ sectionsSlot ? sectionsSlot : currentSection ? /* @__PURE__ */ jsx(AnimatePresence, { initial: false, custom: direction, mode: "wait", children: /* @__PURE__ */ jsxs(
933
985
  motion.div,
934
986
  {
935
987
  custom: direction,
@@ -940,19 +992,21 @@ function CarouselAnimatedSections({
940
992
  transition: { duration: 0.6, ease: [0.4, 0, 0.2, 1] },
941
993
  onAnimationComplete: () => setIsAnimating(false),
942
994
  className: cn("absolute inset-0", currentSection?.className),
943
- children: /* @__PURE__ */ jsx(
944
- Img,
945
- {
946
- src: currentSection?.image,
947
- alt: typeof currentSection?.title === "string" ? currentSection?.title : `Section ${currentSection?.id}`,
948
- className: cn(
949
- "h-full w-full object-cover",
950
- BRIGHTNESS_CLASS_MAP[slideMediaBrightness],
951
- currentSection?.imageClassName
952
- ),
953
- optixFlowConfig
954
- }
955
- )
995
+ children: [
996
+ /* @__PURE__ */ jsx(
997
+ Img,
998
+ {
999
+ src: currentSection?.image,
1000
+ alt: typeof currentSection?.title === "string" ? currentSection?.title : `Section ${currentSection?.id}`,
1001
+ className: cn(
1002
+ "h-full w-full object-cover",
1003
+ currentSection?.imageClassName
1004
+ ),
1005
+ optixFlowConfig
1006
+ }
1007
+ ),
1008
+ /* @__PURE__ */ jsx(GradientOverlay, { intensity: slideMediaOverlayIntensity })
1009
+ ]
956
1010
  },
957
1011
  currentIndex
958
1012
  ) }) : null,
@@ -33,16 +33,6 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
33
33
  function cn(...inputs) {
34
34
  return tailwindMerge.twMerge(clsx.clsx(inputs));
35
35
  }
36
- var BRIGHTNESS_CLASS_MAP = {
37
- "10": "brightness-[.1]",
38
- "20": "brightness-[.2]",
39
- "25": "brightness-[.25]",
40
- "30": "brightness-[.3]",
41
- "40": "brightness-[.4]",
42
- "50": "brightness-50",
43
- "75": "brightness-75",
44
- "100": "brightness-100"
45
- };
46
36
  function normalizePhoneNumber(input) {
47
37
  const trimmed = input.trim();
48
38
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -469,6 +459,67 @@ var DynamicIcon = React__namespace.memo(function DynamicIcon2({
469
459
  return /* @__PURE__ */ jsxRuntime.jsx(icon.Icon, { ...props, apiKey: apiKey ?? DEFAULT_ICON_API_KEY });
470
460
  });
471
461
  DynamicIcon.displayName = "DynamicIcon";
462
+ var DIRECTION_STYLES = {
463
+ "bottom-to-top": "bg-linear-to-t",
464
+ "top-to-bottom": "bg-linear-to-b",
465
+ "left-to-right": "bg-linear-to-r",
466
+ "right-to-left": "bg-linear-to-l",
467
+ "bottom-left-to-top-right": "bg-linear-to-tr",
468
+ "bottom-right-to-top-left": "bg-linear-to-tl",
469
+ "top-left-to-bottom-right": "bg-linear-to-br",
470
+ "top-right-to-bottom-left": "bg-linear-to-bl"
471
+ };
472
+ var INTENSITY_STOPS = {
473
+ low: "from-black/40 via-black/20 to-transparent",
474
+ default: "from-black/70 via-black/35 to-transparent",
475
+ high: "from-black/85 via-black/50 to-transparent",
476
+ "very-high": "from-black/95 via-black/60 to-black/20"
477
+ };
478
+ var RADIAL_INTENSITY = {
479
+ low: {
480
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.40) 0%, rgba(0,0,0,0.20) 50%, transparent 100%)"
481
+ },
482
+ default: {
483
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.70) 0%, rgba(0,0,0,0.35) 50%, transparent 100%)"
484
+ },
485
+ high: {
486
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.85) 0%, rgba(0,0,0,0.50) 50%, transparent 100%)"
487
+ },
488
+ "very-high": {
489
+ 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%)"
490
+ }
491
+ };
492
+ function GradientOverlay({
493
+ direction = "bottom-to-top",
494
+ intensity = "default",
495
+ className,
496
+ style,
497
+ ...props
498
+ }) {
499
+ if (direction === "radial-center") {
500
+ return /* @__PURE__ */ jsxRuntime.jsx(
501
+ "div",
502
+ {
503
+ className: cn("absolute inset-0", className),
504
+ style: { ...RADIAL_INTENSITY[intensity], ...style },
505
+ ...props
506
+ }
507
+ );
508
+ }
509
+ return /* @__PURE__ */ jsxRuntime.jsx(
510
+ "div",
511
+ {
512
+ className: cn(
513
+ "absolute inset-0",
514
+ DIRECTION_STYLES[direction],
515
+ INTENSITY_STOPS[intensity],
516
+ className
517
+ ),
518
+ style,
519
+ ...props
520
+ }
521
+ );
522
+ }
472
523
  var maxWidthStyles = {
473
524
  sm: "max-w-screen-sm",
474
525
  md: "max-w-screen-md",
@@ -863,7 +914,8 @@ function CarouselGalleryThumbnails({
863
914
  spacing = "sm",
864
915
  pattern,
865
916
  patternOpacity,
866
- slideMediaBrightness = "100"
917
+ slideMediaBrightness,
918
+ slideMediaOverlayIntensity = "default"
867
919
  }) {
868
920
  const [currentIndex, setCurrentIndex] = React__namespace.useState(0);
869
921
  const prevSlide = React__namespace.useCallback(() => {
@@ -912,7 +964,7 @@ function CarouselGalleryThumbnails({
912
964
  "relative aspect-video w-full overflow-hidden",
913
965
  slideClassName
914
966
  ),
915
- children: imagesSlot ? imagesSlot : images?.map((image, index) => /* @__PURE__ */ jsxRuntime.jsx(
967
+ children: imagesSlot ? imagesSlot : images?.map((image, index) => /* @__PURE__ */ jsxRuntime.jsxs(
916
968
  "div",
917
969
  {
918
970
  className: cn(
@@ -920,19 +972,21 @@ function CarouselGalleryThumbnails({
920
972
  index === currentIndex ? "translate-x-0 opacity-100" : index < currentIndex ? "-translate-x-full opacity-0" : "translate-x-full opacity-0",
921
973
  image.className
922
974
  ),
923
- children: /* @__PURE__ */ jsxRuntime.jsx(
924
- img.Img,
925
- {
926
- src: image.src,
927
- alt: typeof image.alt === "string" ? image.alt : `Image ${index + 1}`,
928
- className: cn(
929
- "h-full w-full object-cover",
930
- BRIGHTNESS_CLASS_MAP[slideMediaBrightness],
931
- image.imageClassName
932
- ),
933
- optixFlowConfig
934
- }
935
- )
975
+ children: [
976
+ /* @__PURE__ */ jsxRuntime.jsx(
977
+ img.Img,
978
+ {
979
+ src: image.src,
980
+ alt: typeof image.alt === "string" ? image.alt : `Image ${index + 1}`,
981
+ className: cn(
982
+ "h-full w-full object-cover",
983
+ image.imageClassName
984
+ ),
985
+ optixFlowConfig
986
+ }
987
+ ),
988
+ /* @__PURE__ */ jsxRuntime.jsx(GradientOverlay, { intensity: slideMediaOverlayIntensity })
989
+ ]
936
990
  },
937
991
  `slide-${index}`
938
992
  ))
@@ -117,10 +117,15 @@ interface CarouselGalleryThumbnailsProps {
117
117
  */
118
118
  patternOpacity?: number;
119
119
  /**
120
- * Brightness level for slide images (controls overlay visibility)
120
+ * Intensity of the gradient overlay on slide images
121
+ * @default "default"
122
+ */
123
+ slideMediaOverlayIntensity?: "low" | "default" | "high" | "very-high";
124
+ /**
125
+ * Brightness level for slide images (deprecated - prefer slideMediaOverlayIntensity)
121
126
  */
122
127
  slideMediaBrightness?: "10" | "20" | "25" | "30" | "40" | "50" | "75" | "100";
123
128
  }
124
- declare function CarouselGalleryThumbnails({ images, imagesSlot, autoPlay, autoPlayInterval, showThumbnails, className, containerClassName, slideClassName, navigationClassName, captionClassName, thumbnailsClassName, thumbnailClassName, optixFlowConfig, background, spacing, pattern, patternOpacity, slideMediaBrightness, }: CarouselGalleryThumbnailsProps): React.JSX.Element;
129
+ declare function CarouselGalleryThumbnails({ images, imagesSlot, autoPlay, autoPlayInterval, showThumbnails, className, containerClassName, slideClassName, navigationClassName, captionClassName, thumbnailsClassName, thumbnailClassName, optixFlowConfig, background, spacing, pattern, patternOpacity, slideMediaBrightness, slideMediaOverlayIntensity, }: CarouselGalleryThumbnailsProps): React.JSX.Element;
125
130
 
126
131
  export { CarouselGalleryThumbnails, type CarouselGalleryThumbnailsProps, type GalleryImage };