@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
package/dist/geo-map.js CHANGED
@@ -542,41 +542,55 @@ function MarkerMediaCarousel({
542
542
  React4.useEffect(() => {
543
543
  setActiveIndex(0);
544
544
  }, [mediaResetKey]);
545
- const activeMediaItem = mediaItems[activeItemIndex];
546
- const mediaType = resolveMediaType(activeMediaItem);
547
545
  return /* @__PURE__ */ jsxs("div", { className: "relative border-b border-border/60 bg-muted/40", children: [
548
- /* @__PURE__ */ jsx("div", { className: "relative h-44 w-full overflow-hidden", children: mediaType === "video" ? /* @__PURE__ */ jsx(
549
- "video",
550
- {
551
- className: "h-full w-full object-cover",
552
- controls: true,
553
- preload: "metadata",
554
- poster: activeMediaItem.poster,
555
- children: /* @__PURE__ */ jsx("source", { src: activeMediaItem.src })
556
- }
557
- ) : /* @__PURE__ */ jsx(
558
- Img,
559
- {
560
- src: activeMediaItem.src,
561
- alt: activeMediaItem.alt ?? "Map marker media",
562
- className: "h-full w-full object-cover",
563
- loading: "eager",
564
- optixFlowConfig
565
- }
566
- ) }),
546
+ /* @__PURE__ */ jsx("div", { className: "relative aspect-video w-full overflow-hidden", children: mediaItems.map((item, index) => {
547
+ const isActive = index === activeItemIndex;
548
+ const mediaType = resolveMediaType(item);
549
+ return /* @__PURE__ */ jsx(
550
+ "div",
551
+ {
552
+ "aria-hidden": !isActive,
553
+ className: cn(
554
+ "absolute inset-0 transition-opacity duration-500 ease-in-out",
555
+ isActive ? "opacity-100 z-[1]" : "opacity-0 z-0 pointer-events-none"
556
+ ),
557
+ children: mediaType === "video" ? /* @__PURE__ */ jsx(
558
+ "video",
559
+ {
560
+ className: "h-full w-full object-cover",
561
+ controls: isActive,
562
+ preload: "metadata",
563
+ poster: item.poster,
564
+ tabIndex: isActive ? 0 : -1,
565
+ children: /* @__PURE__ */ jsx("source", { src: item.src })
566
+ }
567
+ ) : /* @__PURE__ */ jsx(
568
+ Img,
569
+ {
570
+ src: item.src,
571
+ alt: item.alt ?? "Map marker media",
572
+ className: "h-full w-full object-cover",
573
+ loading: "eager",
574
+ optixFlowConfig
575
+ }
576
+ )
577
+ },
578
+ normalizeId(item.id, `media-slide-${index}`)
579
+ );
580
+ }) }),
567
581
  totalItems > 1 ? /* @__PURE__ */ jsxs(Fragment, { children: [
568
582
  /* @__PURE__ */ jsx(
569
583
  "button",
570
584
  {
571
585
  type: "button",
572
586
  "aria-label": "Show previous media",
573
- className: "absolute left-2 top-1/2 inline-flex size-8 -translate-y-1/2 items-center justify-center rounded-full bg-card text-card-foreground shadow-sm transition hover:bg-muted hover:text-muted-foreground",
587
+ className: "absolute left-4 top-1/2 inline-flex size-10 -translate-y-1/2 items-center justify-center rounded-2xl bg-card text-card-foreground shadow-lg border-4 border-black hover:border-white hover:bg-black hover:text-white transition-all duration-500 z-[2]",
574
588
  onClick: () => {
575
589
  setActiveIndex(
576
590
  (current) => (current - 1 + totalItems) % totalItems
577
591
  );
578
592
  },
579
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-left", size: 16 })
593
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-left", size: 18 })
580
594
  }
581
595
  ),
582
596
  /* @__PURE__ */ jsx(
@@ -584,20 +598,20 @@ function MarkerMediaCarousel({
584
598
  {
585
599
  type: "button",
586
600
  "aria-label": "Show next media",
587
- className: "absolute right-2 top-1/2 inline-flex h-8 w-8 -translate-y-1/2 items-center justify-center rounded-full bg-card text-card-foreground shadow-sm transition hover:bg-muted hover:text-muted-foreground",
601
+ className: "absolute right-4 top-1/2 inline-flex size-10 -translate-y-1/2 items-center justify-center rounded-2xl bg-card text-card-foreground shadow-lg border-4 border-black hover:border-white hover:bg-black hover:text-white transition-all duration-500 z-[2]",
588
602
  onClick: () => {
589
603
  setActiveIndex((current) => (current + 1) % totalItems);
590
604
  },
591
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-right", size: 16 })
605
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-right", size: 18 })
592
606
  }
593
607
  ),
594
- /* @__PURE__ */ jsx("div", { className: "absolute bottom-2 left-1/2 flex -translate-x-1/2 items-center gap-1.5", children: mediaItems.map((item, index) => /* @__PURE__ */ jsx(
608
+ /* @__PURE__ */ jsx("div", { className: "absolute bottom-2 left-1/2 flex -translate-x-1/2 items-center gap-1.5 z-[2]", children: mediaItems.map((item, index) => /* @__PURE__ */ jsx(
595
609
  "button",
596
610
  {
597
611
  type: "button",
598
612
  "aria-label": `Show media item ${index + 1}`,
599
613
  className: cn(
600
- "h-2 rounded-full transition-all",
614
+ "h-2 rounded-full transition-all duration-300",
601
615
  index === activeItemIndex ? "w-6 bg-card" : "w-2 bg-card opacity-50 hover:opacity-100"
602
616
  ),
603
617
  onClick: () => setActiveIndex(index)
@@ -928,9 +942,9 @@ function GeoMap({
928
942
  {
929
943
  type: "button",
930
944
  "aria-label": "Close marker details",
931
- className: "flex size-8 items-center justify-center rounded-full border border-border bg-card text-card-foreground transition hover:bg-muted hover:text-foreground absolute top-2 right-2 z-10",
945
+ className: "\n flex size-12 items-center justify-center rounded-bl-lg rounded-br-0 rounded-t-0 bg-black text-white transition-all duration-500 absolute top-0 right-0 z-10 cursor-pointer ring-4 ring-white\n",
932
946
  onClick: clearSelection,
933
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/x", size: 16 })
947
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/x", size: 20 })
934
948
  }
935
949
  ),
936
950
  markerMediaItems.length > 0 ? /* @__PURE__ */ jsx(
@@ -952,7 +966,7 @@ function GeoMap({
952
966
  {
953
967
  name: "lucide:map-pin",
954
968
  className: "opacity-50",
955
- size: 14
969
+ size: 18
956
970
  }
957
971
  ),
958
972
  typeof selectedMarker.locationLine === "string" ? /* @__PURE__ */ jsx(
@@ -974,7 +988,7 @@ function GeoMap({
974
988
  {
975
989
  name: "lucide:clock",
976
990
  className: "opacity-50",
977
- size: 14
991
+ size: 18
978
992
  }
979
993
  ),
980
994
  typeof selectedMarker.hoursLine === "string" ? /* @__PURE__ */ jsx("div", { className: "font-medium", children: selectedMarker.hoursLine }) : selectedMarker.hoursLine
@@ -1002,7 +1016,7 @@ function GeoMap({
1002
1016
  "aria-label": "Close cluster details",
1003
1017
  className: "flex size-8 items-center justify-center rounded-full border border-border bg-card text-card-foreground transition hover:bg-muted hover:text-foreground absolute top-2 right-2 z-10",
1004
1018
  onClick: clearSelection,
1005
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/x", size: 16 })
1019
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/x", size: 20 })
1006
1020
  }
1007
1021
  ),
1008
1022
  /* @__PURE__ */ jsx("div", { className: "mb-3 flex items-start justify-between gap-3", children: /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
@@ -914,6 +914,7 @@ var SocialLinkIcon = React__namespace.forwardRef(
914
914
  iconClassName,
915
915
  className,
916
916
  iconNameOverride,
917
+ iconOnly = false,
917
918
  ...pressableProps
918
919
  }, ref) => {
919
920
  const platform = usePlatformFromUrl.usePlatformFromUrl(href);
@@ -926,6 +927,21 @@ var SocialLinkIcon = React__namespace.forwardRef(
926
927
  const accessibleLabel = React__namespace.useMemo(() => {
927
928
  return label || platformName;
928
929
  }, [label, platformName]);
930
+ const icon = React__namespace.useMemo(() => {
931
+ return /* @__PURE__ */ jsxRuntime.jsx(
932
+ DynamicIcon,
933
+ {
934
+ name: iconName,
935
+ size: iconSize,
936
+ color: iconColor,
937
+ className: iconClassName,
938
+ alt: accessibleLabel
939
+ }
940
+ );
941
+ }, [iconName, iconSize, iconColor, iconClassName, accessibleLabel]);
942
+ if (iconOnly) {
943
+ return icon;
944
+ }
929
945
  return /* @__PURE__ */ jsxRuntime.jsx(
930
946
  Pressable,
931
947
  {
@@ -937,16 +953,7 @@ var SocialLinkIcon = React__namespace.forwardRef(
937
953
  className
938
954
  ),
939
955
  ...pressableProps,
940
- children: /* @__PURE__ */ jsxRuntime.jsx(
941
- DynamicIcon,
942
- {
943
- name: iconName,
944
- size: iconSize,
945
- color: iconColor,
946
- className: iconClassName,
947
- alt: accessibleLabel
948
- }
949
- )
956
+ children: icon
950
957
  }
951
958
  );
952
959
  }
@@ -893,6 +893,7 @@ var SocialLinkIcon = React.forwardRef(
893
893
  iconClassName,
894
894
  className,
895
895
  iconNameOverride,
896
+ iconOnly = false,
896
897
  ...pressableProps
897
898
  }, ref) => {
898
899
  const platform = usePlatformFromUrl(href);
@@ -905,6 +906,21 @@ var SocialLinkIcon = React.forwardRef(
905
906
  const accessibleLabel = React.useMemo(() => {
906
907
  return label || platformName;
907
908
  }, [label, platformName]);
909
+ const icon = React.useMemo(() => {
910
+ return /* @__PURE__ */ jsx(
911
+ DynamicIcon,
912
+ {
913
+ name: iconName,
914
+ size: iconSize,
915
+ color: iconColor,
916
+ className: iconClassName,
917
+ alt: accessibleLabel
918
+ }
919
+ );
920
+ }, [iconName, iconSize, iconColor, iconClassName, accessibleLabel]);
921
+ if (iconOnly) {
922
+ return icon;
923
+ }
908
924
  return /* @__PURE__ */ jsx(
909
925
  Pressable,
910
926
  {
@@ -916,16 +932,7 @@ var SocialLinkIcon = React.forwardRef(
916
932
  className
917
933
  ),
918
934
  ...pressableProps,
919
- children: /* @__PURE__ */ jsx(
920
- DynamicIcon,
921
- {
922
- name: iconName,
923
- size: iconSize,
924
- color: iconColor,
925
- className: iconClassName,
926
- alt: accessibleLabel
927
- }
928
- )
935
+ children: icon
929
936
  }
930
937
  );
931
938
  }
@@ -408,6 +408,67 @@ var Section = React3__namespace.default.forwardRef(
408
408
  }
409
409
  );
410
410
  Section.displayName = "Section";
411
+ var DIRECTION_STYLES = {
412
+ "bottom-to-top": "bg-linear-to-t",
413
+ "top-to-bottom": "bg-linear-to-b",
414
+ "left-to-right": "bg-linear-to-r",
415
+ "right-to-left": "bg-linear-to-l",
416
+ "bottom-left-to-top-right": "bg-linear-to-tr",
417
+ "bottom-right-to-top-left": "bg-linear-to-tl",
418
+ "top-left-to-bottom-right": "bg-linear-to-br",
419
+ "top-right-to-bottom-left": "bg-linear-to-bl"
420
+ };
421
+ var INTENSITY_STOPS = {
422
+ low: "from-black/40 via-black/20 to-transparent",
423
+ default: "from-black/70 via-black/35 to-transparent",
424
+ high: "from-black/85 via-black/50 to-transparent",
425
+ "very-high": "from-black/95 via-black/60 to-black/20"
426
+ };
427
+ var RADIAL_INTENSITY = {
428
+ low: {
429
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.40) 0%, rgba(0,0,0,0.20) 50%, transparent 100%)"
430
+ },
431
+ default: {
432
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.70) 0%, rgba(0,0,0,0.35) 50%, transparent 100%)"
433
+ },
434
+ high: {
435
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.85) 0%, rgba(0,0,0,0.50) 50%, transparent 100%)"
436
+ },
437
+ "very-high": {
438
+ 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%)"
439
+ }
440
+ };
441
+ function GradientOverlay({
442
+ direction = "bottom-to-top",
443
+ intensity = "default",
444
+ className,
445
+ style,
446
+ ...props
447
+ }) {
448
+ if (direction === "radial-center") {
449
+ return /* @__PURE__ */ jsxRuntime.jsx(
450
+ "div",
451
+ {
452
+ className: cn("absolute inset-0", className),
453
+ style: { ...RADIAL_INTENSITY[intensity], ...style },
454
+ ...props
455
+ }
456
+ );
457
+ }
458
+ return /* @__PURE__ */ jsxRuntime.jsx(
459
+ "div",
460
+ {
461
+ className: cn(
462
+ "absolute inset-0",
463
+ DIRECTION_STYLES[direction],
464
+ INTENSITY_STOPS[intensity],
465
+ className
466
+ ),
467
+ style,
468
+ ...props
469
+ }
470
+ );
471
+ }
411
472
  function normalizePhoneNumber(input) {
412
473
  const trimmed = input.trim();
413
474
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -932,7 +993,8 @@ function HeroVideoBackgroundDark({
932
993
  videoSrc,
933
994
  videoSlot,
934
995
  background,
935
- videoBrightness = "50",
996
+ videoBrightness,
997
+ videoOverlayIntensity = "high",
936
998
  spacing = "py-0 md:py-0",
937
999
  pattern,
938
1000
  patternOpacity,
@@ -944,21 +1006,21 @@ function HeroVideoBackgroundDark({
944
1006
  }) {
945
1007
  const renderVideo = React3.useMemo(() => {
946
1008
  if (videoSlot) return videoSlot;
947
- return /* @__PURE__ */ jsxRuntime.jsx(
948
- "video",
949
- {
950
- loop: true,
951
- playsInline: true,
952
- src: videoSrc,
953
- className: cn(
954
- "absolute top-0 left-0 size-full object-cover",
955
- `brightness-${videoBrightness}`
956
- ),
957
- autoPlay: true,
958
- muted: true
959
- }
960
- );
961
- }, [videoSlot, videoSrc, videoBrightness]);
1009
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1010
+ /* @__PURE__ */ jsxRuntime.jsx(
1011
+ "video",
1012
+ {
1013
+ loop: true,
1014
+ playsInline: true,
1015
+ src: videoSrc,
1016
+ className: "absolute top-0 left-0 size-full object-cover",
1017
+ autoPlay: true,
1018
+ muted: true
1019
+ }
1020
+ ),
1021
+ /* @__PURE__ */ jsxRuntime.jsx(GradientOverlay, { intensity: videoOverlayIntensity })
1022
+ ] });
1023
+ }, [videoSlot, videoSrc, videoOverlayIntensity]);
962
1024
  return /* @__PURE__ */ jsxRuntime.jsx(
963
1025
  Section,
964
1026
  {
@@ -41,7 +41,12 @@ interface HeroVideoBackgroundDarkProps {
41
41
  */
42
42
  videoSlot?: React.ReactNode;
43
43
  /**
44
- * Granular control of brightness for video
44
+ * Intensity of the gradient overlay on the video
45
+ * @default "high"
46
+ */
47
+ videoOverlayIntensity?: "low" | "default" | "high" | "very-high";
48
+ /**
49
+ * Granular control of brightness for video (deprecated - prefer videoOverlayIntensity)
45
50
  * @default "50"
46
51
  */
47
52
  videoBrightness?: "10" | "20" | "25" | "30" | "40" | "50" | "75" | "100";
@@ -82,6 +87,6 @@ interface HeroVideoBackgroundDarkProps {
82
87
  */
83
88
  descriptionClassName?: string;
84
89
  }
85
- declare function HeroVideoBackgroundDark({ badgeText, heading, description, actions, actionsSlot, actionsClassName, videoSrc, videoSlot, background, videoBrightness, spacing, pattern, patternOpacity, className, containerClassName, contentClassName, headingClassName, descriptionClassName, }: HeroVideoBackgroundDarkProps): React.JSX.Element;
90
+ declare function HeroVideoBackgroundDark({ badgeText, heading, description, actions, actionsSlot, actionsClassName, videoSrc, videoSlot, background, videoBrightness, videoOverlayIntensity, spacing, pattern, patternOpacity, className, containerClassName, contentClassName, headingClassName, descriptionClassName, }: HeroVideoBackgroundDarkProps): React.JSX.Element;
86
91
 
87
92
  export { HeroVideoBackgroundDark, type HeroVideoBackgroundDarkProps };
@@ -41,7 +41,12 @@ interface HeroVideoBackgroundDarkProps {
41
41
  */
42
42
  videoSlot?: React.ReactNode;
43
43
  /**
44
- * Granular control of brightness for video
44
+ * Intensity of the gradient overlay on the video
45
+ * @default "high"
46
+ */
47
+ videoOverlayIntensity?: "low" | "default" | "high" | "very-high";
48
+ /**
49
+ * Granular control of brightness for video (deprecated - prefer videoOverlayIntensity)
45
50
  * @default "50"
46
51
  */
47
52
  videoBrightness?: "10" | "20" | "25" | "30" | "40" | "50" | "75" | "100";
@@ -82,6 +87,6 @@ interface HeroVideoBackgroundDarkProps {
82
87
  */
83
88
  descriptionClassName?: string;
84
89
  }
85
- declare function HeroVideoBackgroundDark({ badgeText, heading, description, actions, actionsSlot, actionsClassName, videoSrc, videoSlot, background, videoBrightness, spacing, pattern, patternOpacity, className, containerClassName, contentClassName, headingClassName, descriptionClassName, }: HeroVideoBackgroundDarkProps): React.JSX.Element;
90
+ declare function HeroVideoBackgroundDark({ badgeText, heading, description, actions, actionsSlot, actionsClassName, videoSrc, videoSlot, background, videoBrightness, videoOverlayIntensity, spacing, pattern, patternOpacity, className, containerClassName, contentClassName, headingClassName, descriptionClassName, }: HeroVideoBackgroundDarkProps): React.JSX.Element;
86
91
 
87
92
  export { HeroVideoBackgroundDark, type HeroVideoBackgroundDarkProps };
@@ -387,6 +387,67 @@ var Section = React3__default.forwardRef(
387
387
  }
388
388
  );
389
389
  Section.displayName = "Section";
390
+ var DIRECTION_STYLES = {
391
+ "bottom-to-top": "bg-linear-to-t",
392
+ "top-to-bottom": "bg-linear-to-b",
393
+ "left-to-right": "bg-linear-to-r",
394
+ "right-to-left": "bg-linear-to-l",
395
+ "bottom-left-to-top-right": "bg-linear-to-tr",
396
+ "bottom-right-to-top-left": "bg-linear-to-tl",
397
+ "top-left-to-bottom-right": "bg-linear-to-br",
398
+ "top-right-to-bottom-left": "bg-linear-to-bl"
399
+ };
400
+ var INTENSITY_STOPS = {
401
+ low: "from-black/40 via-black/20 to-transparent",
402
+ default: "from-black/70 via-black/35 to-transparent",
403
+ high: "from-black/85 via-black/50 to-transparent",
404
+ "very-high": "from-black/95 via-black/60 to-black/20"
405
+ };
406
+ var RADIAL_INTENSITY = {
407
+ low: {
408
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.40) 0%, rgba(0,0,0,0.20) 50%, transparent 100%)"
409
+ },
410
+ default: {
411
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.70) 0%, rgba(0,0,0,0.35) 50%, transparent 100%)"
412
+ },
413
+ high: {
414
+ background: "radial-gradient(ellipse at center, rgba(0,0,0,0.85) 0%, rgba(0,0,0,0.50) 50%, transparent 100%)"
415
+ },
416
+ "very-high": {
417
+ 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%)"
418
+ }
419
+ };
420
+ function GradientOverlay({
421
+ direction = "bottom-to-top",
422
+ intensity = "default",
423
+ className,
424
+ style,
425
+ ...props
426
+ }) {
427
+ if (direction === "radial-center") {
428
+ return /* @__PURE__ */ jsx(
429
+ "div",
430
+ {
431
+ className: cn("absolute inset-0", className),
432
+ style: { ...RADIAL_INTENSITY[intensity], ...style },
433
+ ...props
434
+ }
435
+ );
436
+ }
437
+ return /* @__PURE__ */ jsx(
438
+ "div",
439
+ {
440
+ className: cn(
441
+ "absolute inset-0",
442
+ DIRECTION_STYLES[direction],
443
+ INTENSITY_STOPS[intensity],
444
+ className
445
+ ),
446
+ style,
447
+ ...props
448
+ }
449
+ );
450
+ }
390
451
  function normalizePhoneNumber(input) {
391
452
  const trimmed = input.trim();
392
453
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -911,7 +972,8 @@ function HeroVideoBackgroundDark({
911
972
  videoSrc,
912
973
  videoSlot,
913
974
  background,
914
- videoBrightness = "50",
975
+ videoBrightness,
976
+ videoOverlayIntensity = "high",
915
977
  spacing = "py-0 md:py-0",
916
978
  pattern,
917
979
  patternOpacity,
@@ -923,21 +985,21 @@ function HeroVideoBackgroundDark({
923
985
  }) {
924
986
  const renderVideo = useMemo(() => {
925
987
  if (videoSlot) return videoSlot;
926
- return /* @__PURE__ */ jsx(
927
- "video",
928
- {
929
- loop: true,
930
- playsInline: true,
931
- src: videoSrc,
932
- className: cn(
933
- "absolute top-0 left-0 size-full object-cover",
934
- `brightness-${videoBrightness}`
935
- ),
936
- autoPlay: true,
937
- muted: true
938
- }
939
- );
940
- }, [videoSlot, videoSrc, videoBrightness]);
988
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
989
+ /* @__PURE__ */ jsx(
990
+ "video",
991
+ {
992
+ loop: true,
993
+ playsInline: true,
994
+ src: videoSrc,
995
+ className: "absolute top-0 left-0 size-full object-cover",
996
+ autoPlay: true,
997
+ muted: true
998
+ }
999
+ ),
1000
+ /* @__PURE__ */ jsx(GradientOverlay, { intensity: videoOverlayIntensity })
1001
+ ] });
1002
+ }, [videoSlot, videoSrc, videoOverlayIntensity]);
941
1003
  return /* @__PURE__ */ jsx(
942
1004
  Section,
943
1005
  {