@opensite/ui 2.8.6 → 2.8.8

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 (143) 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-icon-sidebar.cjs +5 -4
  14. package/dist/carousel-icon-sidebar.js +5 -4
  15. package/dist/carousel-portfolio-hero.cjs +79 -25
  16. package/dist/carousel-portfolio-hero.d.cts +7 -2
  17. package/dist/carousel-portfolio-hero.d.ts +7 -2
  18. package/dist/carousel-portfolio-hero.js +79 -25
  19. package/dist/components.cjs +81 -42
  20. package/dist/components.d.cts +29 -2
  21. package/dist/components.d.ts +29 -2
  22. package/dist/components.js +81 -43
  23. package/dist/contact-map.cjs +46 -32
  24. package/dist/contact-map.js +46 -32
  25. package/dist/footer-accordion-social.cjs +17 -10
  26. package/dist/footer-accordion-social.js +17 -10
  27. package/dist/footer-animated-social.cjs +17 -10
  28. package/dist/footer-animated-social.js +17 -10
  29. package/dist/footer-brand-description.cjs +17 -10
  30. package/dist/footer-brand-description.js +17 -10
  31. package/dist/footer-brand-links-contact.cjs +17 -10
  32. package/dist/footer-brand-links-contact.js +17 -10
  33. package/dist/footer-comprehensive-links.cjs +17 -10
  34. package/dist/footer-comprehensive-links.js +17 -10
  35. package/dist/footer-contact-card.cjs +17 -10
  36. package/dist/footer-contact-card.js +17 -10
  37. package/dist/footer-cta-banner.cjs +17 -10
  38. package/dist/footer-cta-banner.js +17 -10
  39. package/dist/footer-cta-social.cjs +17 -10
  40. package/dist/footer-cta-social.js +17 -10
  41. package/dist/footer-info-cards-accordion.cjs +17 -10
  42. package/dist/footer-info-cards-accordion.js +17 -10
  43. package/dist/footer-nav-social.cjs +17 -10
  44. package/dist/footer-nav-social.js +17 -10
  45. package/dist/footer-newsletter-contact.cjs +17 -10
  46. package/dist/footer-newsletter-contact.js +17 -10
  47. package/dist/footer-newsletter-grid.cjs +17 -10
  48. package/dist/footer-newsletter-grid.js +17 -10
  49. package/dist/footer-newsletter-minimal.cjs +17 -10
  50. package/dist/footer-newsletter-minimal.js +17 -10
  51. package/dist/footer-social-apps.cjs +17 -10
  52. package/dist/footer-social-apps.js +17 -10
  53. package/dist/footer-social-newsletter.cjs +17 -10
  54. package/dist/footer-social-newsletter.js +17 -10
  55. package/dist/footer-split-image-accordion.cjs +17 -10
  56. package/dist/footer-split-image-accordion.js +17 -10
  57. package/dist/geo-map.cjs +46 -32
  58. package/dist/geo-map.js +46 -32
  59. package/dist/hero-coming-soon-countdown.cjs +17 -10
  60. package/dist/hero-coming-soon-countdown.js +17 -10
  61. package/dist/hero-video-background-dark.cjs +78 -16
  62. package/dist/hero-video-background-dark.d.cts +7 -2
  63. package/dist/hero-video-background-dark.d.ts +7 -2
  64. package/dist/hero-video-background-dark.js +78 -16
  65. package/dist/index.cjs +81 -42
  66. package/dist/index.d.cts +1 -0
  67. package/dist/index.d.ts +1 -0
  68. package/dist/index.js +81 -43
  69. package/dist/link-page-bento-layout.cjs +17 -10
  70. package/dist/link-page-bento-layout.js +17 -10
  71. package/dist/link-page-grid-cards.cjs +17 -10
  72. package/dist/link-page-grid-cards.js +17 -10
  73. package/dist/link-page-minimal-profile.cjs +17 -10
  74. package/dist/link-page-minimal-profile.js +17 -10
  75. package/dist/link-page-newsletter-social.cjs +17 -10
  76. package/dist/link-page-newsletter-social.js +17 -10
  77. package/dist/link-tree-block.cjs +17 -10
  78. package/dist/link-tree-block.js +17 -10
  79. package/dist/navbar-fullscreen-menu.cjs +17 -10
  80. package/dist/navbar-fullscreen-menu.js +17 -10
  81. package/dist/navbar-transparent-overlay.cjs +17 -10
  82. package/dist/navbar-transparent-overlay.js +17 -10
  83. package/dist/registry.cjs +967 -620
  84. package/dist/registry.js +967 -620
  85. package/dist/social-link-icon.cjs +17 -10
  86. package/dist/social-link-icon.d.cts +5 -0
  87. package/dist/social-link-icon.d.ts +5 -0
  88. package/dist/social-link-icon.js +17 -10
  89. package/dist/testimonials-bento-grid.cjs +1 -1
  90. package/dist/testimonials-bento-grid.js +1 -1
  91. package/dist/testimonials-carousel-image.cjs +16 -2
  92. package/dist/testimonials-carousel-image.d.cts +5 -1
  93. package/dist/testimonials-carousel-image.d.ts +5 -1
  94. package/dist/testimonials-carousel-image.js +16 -2
  95. package/dist/testimonials-centered-avatars.cjs +1 -1
  96. package/dist/testimonials-centered-avatars.js +1 -1
  97. package/dist/testimonials-grid-add-review.cjs +51 -29
  98. package/dist/testimonials-grid-add-review.js +51 -29
  99. package/dist/testimonials-images-helpful.cjs +181 -160
  100. package/dist/testimonials-images-helpful.d.cts +9 -1
  101. package/dist/testimonials-images-helpful.d.ts +9 -1
  102. package/dist/testimonials-images-helpful.js +181 -159
  103. package/dist/testimonials-large-quote.cjs +74 -43
  104. package/dist/testimonials-large-quote.d.cts +5 -1
  105. package/dist/testimonials-large-quote.d.ts +5 -1
  106. package/dist/testimonials-large-quote.js +74 -43
  107. package/dist/testimonials-list-verified.cjs +63 -44
  108. package/dist/testimonials-list-verified.d.cts +5 -1
  109. package/dist/testimonials-list-verified.d.ts +5 -1
  110. package/dist/testimonials-list-verified.js +64 -45
  111. package/dist/testimonials-logo-cards.cjs +55 -25
  112. package/dist/testimonials-logo-cards.d.cts +5 -1
  113. package/dist/testimonials-logo-cards.d.ts +5 -1
  114. package/dist/testimonials-logo-cards.js +55 -25
  115. package/dist/testimonials-marquee.cjs +440 -28
  116. package/dist/testimonials-marquee.js +441 -26
  117. package/dist/testimonials-masonry-grid.cjs +486 -69
  118. package/dist/testimonials-masonry-grid.d.cts +5 -1
  119. package/dist/testimonials-masonry-grid.d.ts +5 -1
  120. package/dist/testimonials-masonry-grid.js +483 -63
  121. package/dist/testimonials-mini-dividers.cjs +119 -83
  122. package/dist/testimonials-mini-dividers.d.cts +10 -6
  123. package/dist/testimonials-mini-dividers.d.ts +10 -6
  124. package/dist/testimonials-mini-dividers.js +119 -83
  125. package/dist/testimonials-minimal-numbered.cjs +9 -7
  126. package/dist/testimonials-minimal-numbered.d.cts +5 -1
  127. package/dist/testimonials-minimal-numbered.d.ts +5 -1
  128. package/dist/testimonials-minimal-numbered.js +9 -7
  129. package/dist/testimonials-parallax-number.cjs +14 -9
  130. package/dist/testimonials-parallax-number.js +14 -9
  131. package/dist/testimonials-scrolling-columns.cjs +100 -21
  132. package/dist/testimonials-scrolling-columns.js +100 -21
  133. package/dist/testimonials-simple-grid.cjs +22 -5
  134. package/dist/testimonials-simple-grid.js +22 -5
  135. package/dist/testimonials-slider-minimal.cjs +1 -1
  136. package/dist/testimonials-slider-minimal.js +1 -1
  137. package/dist/testimonials-stats-header.cjs +528 -87
  138. package/dist/testimonials-stats-header.d.cts +39 -3
  139. package/dist/testimonials-stats-header.d.ts +39 -3
  140. package/dist/testimonials-stats-header.js +523 -82
  141. package/dist/testimonials-twitter-cards.cjs +20 -12
  142. package/dist/testimonials-twitter-cards.js +20 -12
  143. package/package.json +11 -1
@@ -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 };
@@ -12,16 +12,6 @@ import { Img } from '@page-speed/img';
12
12
  function cn(...inputs) {
13
13
  return twMerge(clsx(inputs));
14
14
  }
15
- var BRIGHTNESS_CLASS_MAP = {
16
- "10": "brightness-[.1]",
17
- "20": "brightness-[.2]",
18
- "25": "brightness-[.25]",
19
- "30": "brightness-[.3]",
20
- "40": "brightness-[.4]",
21
- "50": "brightness-50",
22
- "75": "brightness-75",
23
- "100": "brightness-100"
24
- };
25
15
  function normalizePhoneNumber(input) {
26
16
  const trimmed = input.trim();
27
17
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -448,6 +438,67 @@ var DynamicIcon = React.memo(function DynamicIcon2({
448
438
  return /* @__PURE__ */ jsx(Icon, { ...props, apiKey: apiKey ?? DEFAULT_ICON_API_KEY });
449
439
  });
450
440
  DynamicIcon.displayName = "DynamicIcon";
441
+ var DIRECTION_STYLES = {
442
+ "bottom-to-top": "bg-linear-to-t",
443
+ "top-to-bottom": "bg-linear-to-b",
444
+ "left-to-right": "bg-linear-to-r",
445
+ "right-to-left": "bg-linear-to-l",
446
+ "bottom-left-to-top-right": "bg-linear-to-tr",
447
+ "bottom-right-to-top-left": "bg-linear-to-tl",
448
+ "top-left-to-bottom-right": "bg-linear-to-br",
449
+ "top-right-to-bottom-left": "bg-linear-to-bl"
450
+ };
451
+ var INTENSITY_STOPS = {
452
+ low: "from-black/40 via-black/20 to-transparent",
453
+ default: "from-black/70 via-black/35 to-transparent",
454
+ high: "from-black/85 via-black/50 to-transparent",
455
+ "very-high": "from-black/95 via-black/60 to-black/20"
456
+ };
457
+ var RADIAL_INTENSITY = {
458
+ low: {
459
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.40) 0%, rgba(0,0,0,0.20) 50%, transparent 100%)"
460
+ },
461
+ default: {
462
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.70) 0%, rgba(0,0,0,0.35) 50%, transparent 100%)"
463
+ },
464
+ high: {
465
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.85) 0%, rgba(0,0,0,0.50) 50%, transparent 100%)"
466
+ },
467
+ "very-high": {
468
+ 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%)"
469
+ }
470
+ };
471
+ function GradientOverlay({
472
+ direction = "bottom-to-top",
473
+ intensity = "default",
474
+ className,
475
+ style,
476
+ ...props
477
+ }) {
478
+ if (direction === "radial-center") {
479
+ return /* @__PURE__ */ jsx(
480
+ "div",
481
+ {
482
+ className: cn("absolute inset-0", className),
483
+ style: { ...RADIAL_INTENSITY[intensity], ...style },
484
+ ...props
485
+ }
486
+ );
487
+ }
488
+ return /* @__PURE__ */ jsx(
489
+ "div",
490
+ {
491
+ className: cn(
492
+ "absolute inset-0",
493
+ DIRECTION_STYLES[direction],
494
+ INTENSITY_STOPS[intensity],
495
+ className
496
+ ),
497
+ style,
498
+ ...props
499
+ }
500
+ );
501
+ }
451
502
  var maxWidthStyles = {
452
503
  sm: "max-w-screen-sm",
453
504
  md: "max-w-screen-md",
@@ -842,7 +893,8 @@ function CarouselGalleryThumbnails({
842
893
  spacing = "sm",
843
894
  pattern,
844
895
  patternOpacity,
845
- slideMediaBrightness = "100"
896
+ slideMediaBrightness,
897
+ slideMediaOverlayIntensity = "default"
846
898
  }) {
847
899
  const [currentIndex, setCurrentIndex] = React.useState(0);
848
900
  const prevSlide = React.useCallback(() => {
@@ -891,7 +943,7 @@ function CarouselGalleryThumbnails({
891
943
  "relative aspect-video w-full overflow-hidden",
892
944
  slideClassName
893
945
  ),
894
- children: imagesSlot ? imagesSlot : images?.map((image, index) => /* @__PURE__ */ jsx(
946
+ children: imagesSlot ? imagesSlot : images?.map((image, index) => /* @__PURE__ */ jsxs(
895
947
  "div",
896
948
  {
897
949
  className: cn(
@@ -899,19 +951,21 @@ function CarouselGalleryThumbnails({
899
951
  index === currentIndex ? "translate-x-0 opacity-100" : index < currentIndex ? "-translate-x-full opacity-0" : "translate-x-full opacity-0",
900
952
  image.className
901
953
  ),
902
- children: /* @__PURE__ */ jsx(
903
- Img,
904
- {
905
- src: image.src,
906
- alt: typeof image.alt === "string" ? image.alt : `Image ${index + 1}`,
907
- className: cn(
908
- "h-full w-full object-cover",
909
- BRIGHTNESS_CLASS_MAP[slideMediaBrightness],
910
- image.imageClassName
911
- ),
912
- optixFlowConfig
913
- }
914
- )
954
+ children: [
955
+ /* @__PURE__ */ jsx(
956
+ Img,
957
+ {
958
+ src: image.src,
959
+ alt: typeof image.alt === "string" ? image.alt : `Image ${index + 1}`,
960
+ className: cn(
961
+ "h-full w-full object-cover",
962
+ image.imageClassName
963
+ ),
964
+ optixFlowConfig
965
+ }
966
+ ),
967
+ /* @__PURE__ */ jsx(GradientOverlay, { intensity: slideMediaOverlayIntensity })
968
+ ]
915
969
  },
916
970
  `slide-${index}`
917
971
  ))
@@ -1164,7 +1164,8 @@ function CarouselIconSidebar({
1164
1164
  src: image.src,
1165
1165
  alt: typeof image.title === "string" ? image.title : image.alt || "Carousel image",
1166
1166
  className: cn(
1167
- "h-full w-full rounded-lg object-cover cursor-pointer",
1167
+ "aspect-4/3",
1168
+ "h-full w-full object-cover cursor-pointer aspect-4/3",
1168
1169
  imageClassName
1169
1170
  ),
1170
1171
  loading: "lazy",
@@ -1224,13 +1225,13 @@ function CarouselIconSidebar({
1224
1225
  /* @__PURE__ */ jsxRuntime.jsx(Carousel, { setApi, className: cn("w-full", carouselClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-4 md:gap-6 md:grid-cols-5", children: [
1225
1226
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "md:col-span-2", children: sidebarContent }),
1226
1227
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full md:col-span-3", children: /* @__PURE__ */ jsxRuntime.jsx(
1227
- CarouselContent,
1228
+ "div",
1228
1229
  {
1229
1230
  className: cn(
1230
- "overflow-hidden rounded-2xl shadow-lg h-full",
1231
+ "overflow-hidden rounded-2xl shadow-lg",
1231
1232
  carouselContentClassName
1232
1233
  ),
1233
- children: itemsContent
1234
+ children: /* @__PURE__ */ jsxRuntime.jsx(CarouselContent, { children: itemsContent })
1234
1235
  }
1235
1236
  ) })
1236
1237
  ] }) }),
@@ -1140,7 +1140,8 @@ function CarouselIconSidebar({
1140
1140
  src: image.src,
1141
1141
  alt: typeof image.title === "string" ? image.title : image.alt || "Carousel image",
1142
1142
  className: cn(
1143
- "h-full w-full rounded-lg object-cover cursor-pointer",
1143
+ "aspect-4/3",
1144
+ "h-full w-full object-cover cursor-pointer aspect-4/3",
1144
1145
  imageClassName
1145
1146
  ),
1146
1147
  loading: "lazy",
@@ -1200,13 +1201,13 @@ function CarouselIconSidebar({
1200
1201
  /* @__PURE__ */ jsx(Carousel, { setApi, className: cn("w-full", carouselClassName), children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-4 md:gap-6 md:grid-cols-5", children: [
1201
1202
  /* @__PURE__ */ jsx("div", { className: "md:col-span-2", children: sidebarContent }),
1202
1203
  /* @__PURE__ */ jsx("div", { className: "h-full md:col-span-3", children: /* @__PURE__ */ jsx(
1203
- CarouselContent,
1204
+ "div",
1204
1205
  {
1205
1206
  className: cn(
1206
- "overflow-hidden rounded-2xl shadow-lg h-full",
1207
+ "overflow-hidden rounded-2xl shadow-lg",
1207
1208
  carouselContentClassName
1208
1209
  ),
1209
- children: itemsContent
1210
+ children: /* @__PURE__ */ jsx(CarouselContent, { children: itemsContent })
1210
1211
  }
1211
1212
  ) })
1212
1213
  ] }) }),
@@ -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 getNestedCardBg(parentBg, variant = "muted", options) {
48
38
  const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
49
39
  if (isDark) {
@@ -500,6 +490,67 @@ var DynamicIcon = React6__namespace.memo(function DynamicIcon2({
500
490
  return /* @__PURE__ */ jsxRuntime.jsx(icon.Icon, { ...props, apiKey: apiKey ?? DEFAULT_ICON_API_KEY });
501
491
  });
502
492
  DynamicIcon.displayName = "DynamicIcon";
493
+ var DIRECTION_STYLES = {
494
+ "bottom-to-top": "bg-linear-to-t",
495
+ "top-to-bottom": "bg-linear-to-b",
496
+ "left-to-right": "bg-linear-to-r",
497
+ "right-to-left": "bg-linear-to-l",
498
+ "bottom-left-to-top-right": "bg-linear-to-tr",
499
+ "bottom-right-to-top-left": "bg-linear-to-tl",
500
+ "top-left-to-bottom-right": "bg-linear-to-br",
501
+ "top-right-to-bottom-left": "bg-linear-to-bl"
502
+ };
503
+ var INTENSITY_STOPS = {
504
+ low: "from-black/40 via-black/20 to-transparent",
505
+ default: "from-black/70 via-black/35 to-transparent",
506
+ high: "from-black/85 via-black/50 to-transparent",
507
+ "very-high": "from-black/95 via-black/60 to-black/20"
508
+ };
509
+ var RADIAL_INTENSITY = {
510
+ low: {
511
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.40) 0%, rgba(0,0,0,0.20) 50%, transparent 100%)"
512
+ },
513
+ default: {
514
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.70) 0%, rgba(0,0,0,0.35) 50%, transparent 100%)"
515
+ },
516
+ high: {
517
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.85) 0%, rgba(0,0,0,0.50) 50%, transparent 100%)"
518
+ },
519
+ "very-high": {
520
+ 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%)"
521
+ }
522
+ };
523
+ function GradientOverlay({
524
+ direction = "bottom-to-top",
525
+ intensity = "default",
526
+ className,
527
+ style,
528
+ ...props
529
+ }) {
530
+ if (direction === "radial-center") {
531
+ return /* @__PURE__ */ jsxRuntime.jsx(
532
+ "div",
533
+ {
534
+ className: cn("absolute inset-0", className),
535
+ style: { ...RADIAL_INTENSITY[intensity], ...style },
536
+ ...props
537
+ }
538
+ );
539
+ }
540
+ return /* @__PURE__ */ jsxRuntime.jsx(
541
+ "div",
542
+ {
543
+ className: cn(
544
+ "absolute inset-0",
545
+ DIRECTION_STYLES[direction],
546
+ INTENSITY_STOPS[intensity],
547
+ className
548
+ ),
549
+ style,
550
+ ...props
551
+ }
552
+ );
553
+ }
503
554
  var maxWidthStyles = {
504
555
  sm: "max-w-screen-sm",
505
556
  md: "max-w-screen-md",
@@ -992,7 +1043,8 @@ function CarouselPortfolioHero({
992
1043
  spacing = "none",
993
1044
  pattern,
994
1045
  patternOpacity,
995
- slideMediaBrightness = "50"
1046
+ slideMediaBrightness,
1047
+ slideMediaOverlayIntensity = "high"
996
1048
  }) {
997
1049
  const [currentIndex, setCurrentIndex] = React6__namespace.useState(0);
998
1050
  const intervalRef = React6__namespace.useRef(null);
@@ -1033,7 +1085,7 @@ function CarouselPortfolioHero({
1033
1085
  patternOpacity,
1034
1086
  containerClassName,
1035
1087
  children: [
1036
- slidesSlot ? slidesSlot : slides?.map((slide, index) => /* @__PURE__ */ jsxRuntime.jsx(
1088
+ slidesSlot ? slidesSlot : slides?.map((slide, index) => /* @__PURE__ */ jsxRuntime.jsxs(
1037
1089
  "div",
1038
1090
  {
1039
1091
  className: cn(
@@ -1041,19 +1093,21 @@ function CarouselPortfolioHero({
1041
1093
  index === currentIndex ? "opacity-100" : "opacity-0",
1042
1094
  slide.className
1043
1095
  ),
1044
- children: /* @__PURE__ */ jsxRuntime.jsx(
1045
- img.Img,
1046
- {
1047
- src: slide.image,
1048
- alt: typeof slide.title === "string" ? slide.title : `Slide ${index + 1}`,
1049
- className: cn(
1050
- "h-full w-full object-cover",
1051
- BRIGHTNESS_CLASS_MAP[slideMediaBrightness],
1052
- slide.imageClassName
1053
- ),
1054
- optixFlowConfig
1055
- }
1056
- )
1096
+ children: [
1097
+ /* @__PURE__ */ jsxRuntime.jsx(
1098
+ img.Img,
1099
+ {
1100
+ src: slide.image,
1101
+ alt: typeof slide.title === "string" ? slide.title : `Slide ${index + 1}`,
1102
+ className: cn(
1103
+ "h-full w-full object-cover",
1104
+ slide.imageClassName
1105
+ ),
1106
+ optixFlowConfig
1107
+ }
1108
+ ),
1109
+ /* @__PURE__ */ jsxRuntime.jsx(GradientOverlay, { intensity: slideMediaOverlayIntensity })
1110
+ ]
1057
1111
  },
1058
1112
  slide.id
1059
1113
  )),
@@ -129,10 +129,15 @@ interface CarouselPortfolioHeroProps {
129
129
  */
130
130
  patternOpacity?: number;
131
131
  /**
132
- * Brightness level for slide images (controls overlay visibility)
132
+ * Intensity of the gradient overlay on slide images
133
+ * @default "high"
134
+ */
135
+ slideMediaOverlayIntensity?: "low" | "default" | "high" | "very-high";
136
+ /**
137
+ * Brightness level for slide images (deprecated - prefer slideMediaOverlayIntensity)
133
138
  */
134
139
  slideMediaBrightness?: "10" | "20" | "25" | "30" | "40" | "50" | "75" | "100";
135
140
  }
136
- declare function CarouselPortfolioHero({ slides, slidesSlot, actions, actionsSlot, autoPlayInterval, className, containerClassName, contentClassName, tagClassName, titleClassName, descriptionClassName, actionsClassName, navigationClassName, counterClassName, optixFlowConfig, background, spacing, pattern, patternOpacity, slideMediaBrightness, }: CarouselPortfolioHeroProps): React.JSX.Element;
141
+ declare function CarouselPortfolioHero({ slides, slidesSlot, actions, actionsSlot, autoPlayInterval, className, containerClassName, contentClassName, tagClassName, titleClassName, descriptionClassName, actionsClassName, navigationClassName, counterClassName, optixFlowConfig, background, spacing, pattern, patternOpacity, slideMediaBrightness, slideMediaOverlayIntensity, }: CarouselPortfolioHeroProps): React.JSX.Element;
137
142
 
138
143
  export { CarouselPortfolioHero, type CarouselPortfolioHeroProps, type PortfolioSlide };
@@ -129,10 +129,15 @@ interface CarouselPortfolioHeroProps {
129
129
  */
130
130
  patternOpacity?: number;
131
131
  /**
132
- * Brightness level for slide images (controls overlay visibility)
132
+ * Intensity of the gradient overlay on slide images
133
+ * @default "high"
134
+ */
135
+ slideMediaOverlayIntensity?: "low" | "default" | "high" | "very-high";
136
+ /**
137
+ * Brightness level for slide images (deprecated - prefer slideMediaOverlayIntensity)
133
138
  */
134
139
  slideMediaBrightness?: "10" | "20" | "25" | "30" | "40" | "50" | "75" | "100";
135
140
  }
136
- declare function CarouselPortfolioHero({ slides, slidesSlot, actions, actionsSlot, autoPlayInterval, className, containerClassName, contentClassName, tagClassName, titleClassName, descriptionClassName, actionsClassName, navigationClassName, counterClassName, optixFlowConfig, background, spacing, pattern, patternOpacity, slideMediaBrightness, }: CarouselPortfolioHeroProps): React.JSX.Element;
141
+ declare function CarouselPortfolioHero({ slides, slidesSlot, actions, actionsSlot, autoPlayInterval, className, containerClassName, contentClassName, tagClassName, titleClassName, descriptionClassName, actionsClassName, navigationClassName, counterClassName, optixFlowConfig, background, spacing, pattern, patternOpacity, slideMediaBrightness, slideMediaOverlayIntensity, }: CarouselPortfolioHeroProps): React.JSX.Element;
137
142
 
138
143
  export { CarouselPortfolioHero, type CarouselPortfolioHeroProps, type PortfolioSlide };
@@ -13,16 +13,6 @@ import { Slot } from '@radix-ui/react-slot';
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 getNestedCardBg(parentBg, variant = "muted", options) {
27
17
  const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
28
18
  if (isDark) {
@@ -479,6 +469,67 @@ var DynamicIcon = React6.memo(function DynamicIcon2({
479
469
  return /* @__PURE__ */ jsx(Icon, { ...props, apiKey: apiKey ?? DEFAULT_ICON_API_KEY });
480
470
  });
481
471
  DynamicIcon.displayName = "DynamicIcon";
472
+ var DIRECTION_STYLES = {
473
+ "bottom-to-top": "bg-linear-to-t",
474
+ "top-to-bottom": "bg-linear-to-b",
475
+ "left-to-right": "bg-linear-to-r",
476
+ "right-to-left": "bg-linear-to-l",
477
+ "bottom-left-to-top-right": "bg-linear-to-tr",
478
+ "bottom-right-to-top-left": "bg-linear-to-tl",
479
+ "top-left-to-bottom-right": "bg-linear-to-br",
480
+ "top-right-to-bottom-left": "bg-linear-to-bl"
481
+ };
482
+ var INTENSITY_STOPS = {
483
+ low: "from-black/40 via-black/20 to-transparent",
484
+ default: "from-black/70 via-black/35 to-transparent",
485
+ high: "from-black/85 via-black/50 to-transparent",
486
+ "very-high": "from-black/95 via-black/60 to-black/20"
487
+ };
488
+ var RADIAL_INTENSITY = {
489
+ low: {
490
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.40) 0%, rgba(0,0,0,0.20) 50%, transparent 100%)"
491
+ },
492
+ default: {
493
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.70) 0%, rgba(0,0,0,0.35) 50%, transparent 100%)"
494
+ },
495
+ high: {
496
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.85) 0%, rgba(0,0,0,0.50) 50%, transparent 100%)"
497
+ },
498
+ "very-high": {
499
+ 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%)"
500
+ }
501
+ };
502
+ function GradientOverlay({
503
+ direction = "bottom-to-top",
504
+ intensity = "default",
505
+ className,
506
+ style,
507
+ ...props
508
+ }) {
509
+ if (direction === "radial-center") {
510
+ return /* @__PURE__ */ jsx(
511
+ "div",
512
+ {
513
+ className: cn("absolute inset-0", className),
514
+ style: { ...RADIAL_INTENSITY[intensity], ...style },
515
+ ...props
516
+ }
517
+ );
518
+ }
519
+ return /* @__PURE__ */ jsx(
520
+ "div",
521
+ {
522
+ className: cn(
523
+ "absolute inset-0",
524
+ DIRECTION_STYLES[direction],
525
+ INTENSITY_STOPS[intensity],
526
+ className
527
+ ),
528
+ style,
529
+ ...props
530
+ }
531
+ );
532
+ }
482
533
  var maxWidthStyles = {
483
534
  sm: "max-w-screen-sm",
484
535
  md: "max-w-screen-md",
@@ -971,7 +1022,8 @@ function CarouselPortfolioHero({
971
1022
  spacing = "none",
972
1023
  pattern,
973
1024
  patternOpacity,
974
- slideMediaBrightness = "50"
1025
+ slideMediaBrightness,
1026
+ slideMediaOverlayIntensity = "high"
975
1027
  }) {
976
1028
  const [currentIndex, setCurrentIndex] = React6.useState(0);
977
1029
  const intervalRef = React6.useRef(null);
@@ -1012,7 +1064,7 @@ function CarouselPortfolioHero({
1012
1064
  patternOpacity,
1013
1065
  containerClassName,
1014
1066
  children: [
1015
- slidesSlot ? slidesSlot : slides?.map((slide, index) => /* @__PURE__ */ jsx(
1067
+ slidesSlot ? slidesSlot : slides?.map((slide, index) => /* @__PURE__ */ jsxs(
1016
1068
  "div",
1017
1069
  {
1018
1070
  className: cn(
@@ -1020,19 +1072,21 @@ function CarouselPortfolioHero({
1020
1072
  index === currentIndex ? "opacity-100" : "opacity-0",
1021
1073
  slide.className
1022
1074
  ),
1023
- children: /* @__PURE__ */ jsx(
1024
- Img,
1025
- {
1026
- src: slide.image,
1027
- alt: typeof slide.title === "string" ? slide.title : `Slide ${index + 1}`,
1028
- className: cn(
1029
- "h-full w-full object-cover",
1030
- BRIGHTNESS_CLASS_MAP[slideMediaBrightness],
1031
- slide.imageClassName
1032
- ),
1033
- optixFlowConfig
1034
- }
1035
- )
1075
+ children: [
1076
+ /* @__PURE__ */ jsx(
1077
+ Img,
1078
+ {
1079
+ src: slide.image,
1080
+ alt: typeof slide.title === "string" ? slide.title : `Slide ${index + 1}`,
1081
+ className: cn(
1082
+ "h-full w-full object-cover",
1083
+ slide.imageClassName
1084
+ ),
1085
+ optixFlowConfig
1086
+ }
1087
+ ),
1088
+ /* @__PURE__ */ jsx(GradientOverlay, { intensity: slideMediaOverlayIntensity })
1089
+ ]
1036
1090
  },
1037
1091
  slide.id
1038
1092
  )),