@opensite/ui 2.8.8 → 2.9.0

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 (147) hide show
  1. package/dist/about-culture-tabs.cjs +174 -174
  2. package/dist/about-culture-tabs.js +174 -174
  3. package/dist/about-developer-profile.cjs +200 -200
  4. package/dist/about-developer-profile.js +198 -198
  5. package/dist/about-developer-story.cjs +142 -142
  6. package/dist/about-developer-story.js +142 -142
  7. package/dist/about-mission-dual-image.cjs +142 -142
  8. package/dist/about-mission-dual-image.js +142 -142
  9. package/dist/about-mission-features.cjs +142 -142
  10. package/dist/about-mission-features.js +142 -142
  11. package/dist/about-network-spotlight.cjs +142 -142
  12. package/dist/about-network-spotlight.js +142 -142
  13. package/dist/about-story-expertise.cjs +142 -142
  14. package/dist/about-story-expertise.js +142 -142
  15. package/dist/about-streamline-team.cjs +142 -142
  16. package/dist/about-streamline-team.js +142 -142
  17. package/dist/carousel-feature-badge.cjs +162 -42
  18. package/dist/carousel-feature-badge.d.cts +14 -1
  19. package/dist/carousel-feature-badge.d.ts +14 -1
  20. package/dist/carousel-feature-badge.js +163 -43
  21. package/dist/community-initiatives.cjs +142 -142
  22. package/dist/community-initiatives.js +142 -142
  23. package/dist/components.cjs +723 -1378
  24. package/dist/components.d.cts +0 -2
  25. package/dist/components.d.ts +0 -2
  26. package/dist/components.js +633 -1287
  27. package/dist/contact-map.cjs +14 -1083
  28. package/dist/contact-map.d.cts +13 -3
  29. package/dist/contact-map.d.ts +13 -3
  30. package/dist/contact-map.js +14 -1083
  31. package/dist/cta-feature-checklist.cjs +142 -142
  32. package/dist/cta-feature-checklist.js +142 -142
  33. package/dist/faq-numbered-grid.cjs +142 -142
  34. package/dist/faq-numbered-grid.js +142 -142
  35. package/dist/feature-animated-carousel.cjs +142 -142
  36. package/dist/feature-animated-carousel.js +142 -142
  37. package/dist/feature-bento-utilities.cjs +142 -142
  38. package/dist/feature-bento-utilities.js +142 -142
  39. package/dist/feature-capabilities-grid.cjs +142 -142
  40. package/dist/feature-capabilities-grid.js +142 -142
  41. package/dist/feature-category-image-cards.cjs +142 -142
  42. package/dist/feature-category-image-cards.js +142 -142
  43. package/dist/feature-icon-grid-bordered.cjs +142 -142
  44. package/dist/feature-icon-grid-bordered.js +142 -142
  45. package/dist/feature-icon-grid-muted.cjs +142 -142
  46. package/dist/feature-icon-grid-muted.js +142 -142
  47. package/dist/feature-numbered-cards.cjs +142 -142
  48. package/dist/feature-numbered-cards.js +142 -142
  49. package/dist/feature-three-column-values.cjs +142 -142
  50. package/dist/feature-three-column-values.js +142 -142
  51. package/dist/hero-ad-campaign-expert.cjs +142 -142
  52. package/dist/hero-ad-campaign-expert.js +142 -142
  53. package/dist/hero-adaptable-product-grid.cjs +142 -142
  54. package/dist/hero-adaptable-product-grid.js +142 -142
  55. package/dist/hero-agency-animated-images.cjs +142 -142
  56. package/dist/hero-agency-animated-images.js +142 -142
  57. package/dist/hero-announcement-badge.cjs +142 -142
  58. package/dist/hero-announcement-badge.js +142 -142
  59. package/dist/hero-badge-image-split.cjs +142 -142
  60. package/dist/hero-badge-image-split.js +142 -142
  61. package/dist/hero-business-carousel-dots.cjs +142 -142
  62. package/dist/hero-business-carousel-dots.js +142 -142
  63. package/dist/hero-business-operations-mosaic.cjs +142 -142
  64. package/dist/hero-business-operations-mosaic.js +142 -142
  65. package/dist/hero-conversation-intelligence.cjs +142 -142
  66. package/dist/hero-conversation-intelligence.js +142 -142
  67. package/dist/hero-creative-studio-stacked.cjs +142 -142
  68. package/dist/hero-creative-studio-stacked.js +142 -142
  69. package/dist/hero-crm-streamlined.cjs +142 -142
  70. package/dist/hero-crm-streamlined.js +142 -142
  71. package/dist/hero-customer-support-layered.cjs +142 -142
  72. package/dist/hero-customer-support-layered.js +142 -142
  73. package/dist/hero-design-showcase-logos.cjs +142 -142
  74. package/dist/hero-design-showcase-logos.js +142 -142
  75. package/dist/hero-design-system-3d.cjs +142 -142
  76. package/dist/hero-design-system-3d.js +142 -142
  77. package/dist/hero-developer-tools-code.cjs +142 -142
  78. package/dist/hero-developer-tools-code.js +142 -142
  79. package/dist/hero-digital-agency-fullscreen.cjs +142 -142
  80. package/dist/hero-digital-agency-fullscreen.js +142 -142
  81. package/dist/hero-ecommerce-product-showcase.cjs +174 -174
  82. package/dist/hero-ecommerce-product-showcase.js +174 -174
  83. package/dist/hero-event-registration.cjs +142 -142
  84. package/dist/hero-event-registration.js +142 -142
  85. package/dist/hero-fullscreen-background-image.cjs +142 -142
  86. package/dist/hero-fullscreen-background-image.js +142 -142
  87. package/dist/hero-gradient-avatars-rating.cjs +142 -142
  88. package/dist/hero-gradient-avatars-rating.js +142 -142
  89. package/dist/hero-gradient-client-focused.cjs +142 -142
  90. package/dist/hero-gradient-client-focused.js +142 -142
  91. package/dist/hero-hiring-animated-text.cjs +142 -142
  92. package/dist/hero-hiring-animated-text.js +142 -142
  93. package/dist/hero-image-left-content.cjs +142 -142
  94. package/dist/hero-image-left-content.js +142 -142
  95. package/dist/hero-innovation-image-grid.cjs +142 -142
  96. package/dist/hero-innovation-image-grid.js +142 -142
  97. package/dist/hero-mental-health-team.cjs +142 -142
  98. package/dist/hero-mental-health-team.js +142 -142
  99. package/dist/hero-minimal-centered-dark.cjs +174 -174
  100. package/dist/hero-minimal-centered-dark.js +174 -174
  101. package/dist/hero-presentation-platform-video.cjs +142 -142
  102. package/dist/hero-presentation-platform-video.js +142 -142
  103. package/dist/hero-product-showcase-floating.cjs +174 -174
  104. package/dist/hero-product-showcase-floating.js +174 -174
  105. package/dist/hero-shared-inbox-layered.cjs +142 -142
  106. package/dist/hero-shared-inbox-layered.js +142 -142
  107. package/dist/hero-software-growth-video-dialog.cjs +142 -142
  108. package/dist/hero-software-growth-video-dialog.js +142 -142
  109. package/dist/hero-spiral-pattern-cards.cjs +174 -174
  110. package/dist/hero-spiral-pattern-cards.js +174 -174
  111. package/dist/hero-split-geometric-shapes.cjs +142 -142
  112. package/dist/hero-split-geometric-shapes.js +142 -142
  113. package/dist/hero-startup-launch-cta.cjs +174 -174
  114. package/dist/hero-startup-launch-cta.js +174 -174
  115. package/dist/hero-stats-social-proof.cjs +174 -174
  116. package/dist/hero-stats-social-proof.js +174 -174
  117. package/dist/hero-task-timer-animated.cjs +142 -142
  118. package/dist/hero-task-timer-animated.js +142 -142
  119. package/dist/hero-testimonial-image-grid.cjs +142 -142
  120. package/dist/hero-testimonial-image-grid.js +142 -142
  121. package/dist/hero-therapy-testimonial-grid.cjs +142 -142
  122. package/dist/hero-therapy-testimonial-grid.js +142 -142
  123. package/dist/hero-ui-library-showcase.cjs +142 -142
  124. package/dist/hero-ui-library-showcase.js +142 -142
  125. package/dist/hero-video-background-dark.cjs +174 -174
  126. package/dist/hero-video-background-dark.js +174 -174
  127. package/dist/hero-video-dialog-gradient.cjs +142 -142
  128. package/dist/hero-video-dialog-gradient.js +142 -142
  129. package/dist/hero-video-overlay-stars.cjs +142 -142
  130. package/dist/hero-video-overlay-stars.js +142 -142
  131. package/dist/hero-welcome-asymmetric-images.cjs +142 -142
  132. package/dist/hero-welcome-asymmetric-images.js +142 -142
  133. package/dist/index.cjs +725 -1380
  134. package/dist/index.d.cts +0 -2
  135. package/dist/index.d.ts +0 -2
  136. package/dist/index.js +634 -1288
  137. package/dist/registry.cjs +2201 -2827
  138. package/dist/registry.js +948 -1574
  139. package/dist/testimonials-masonry-grid.cjs +142 -142
  140. package/dist/testimonials-masonry-grid.js +142 -142
  141. package/dist/testimonials-stats-header.cjs +159 -159
  142. package/dist/testimonials-stats-header.js +159 -159
  143. package/package.json +4 -7
  144. package/dist/geo-map.cjs +0 -1117
  145. package/dist/geo-map.d.cts +0 -92
  146. package/dist/geo-map.d.ts +0 -92
  147. package/dist/geo-map.js +0 -1095
package/dist/registry.js CHANGED
@@ -1,15 +1,14 @@
1
- import * as React8 from 'react';
2
- import React8__default, { Fragment, createContext, useMemo, forwardRef, useCallback, useState, useEffect, useRef, startTransition, useContext } from 'react';
1
+ import * as React32 from 'react';
2
+ import React32__default, { Fragment, createContext, useMemo, forwardRef, useCallback, useState, useEffect, useRef, startTransition, useContext } from 'react';
3
3
  import { clsx } from 'clsx';
4
4
  import { twMerge } from 'tailwind-merge';
5
5
  import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
6
6
  import { Img } from '@page-speed/img';
7
- import { MapLibre } from '@page-speed/maps';
8
- import { cva } from 'class-variance-authority';
9
- import { Icon } from '@page-speed/icon';
10
7
  import { motion as motion$1, AnimatePresence as AnimatePresence$1 } from 'motion/react';
8
+ import { cva } from 'class-variance-authority';
11
9
  import { Slot } from '@radix-ui/react-slot';
12
10
  import * as PopoverPrimitive from '@radix-ui/react-popover';
11
+ import { Icon } from '@page-speed/icon';
13
12
  import { usePlatformFromUrl } from '@opensite/hooks/usePlatformFromUrl';
14
13
  import * as TabsPrimitive from '@radix-ui/react-tabs';
15
14
  import { FormEngine, useFileUpload, useContactForm, DynamicFormField, submitPageSpeedForm, PageSpeedFormSubmissionError, isValidEmail } from '@page-speed/forms/integration';
@@ -17,6 +16,7 @@ import { AnimatePresence, motion, useMotionValue, useMotionTemplate, useSpring,
17
16
  import { Lightbox } from '@page-speed/lightbox';
18
17
  import * as SeparatorPrimitive from '@radix-ui/react-separator';
19
18
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
19
+ import { GeoMap } from '@page-speed/maps';
20
20
  import useEmblaCarousel from 'embla-carousel-react';
21
21
  import Autoplay from 'embla-carousel-autoplay';
22
22
  import * as ProgressPrimitive from '@radix-ui/react-progress';
@@ -138,7 +138,7 @@ var maxWidthStyles = {
138
138
  "4xl": "max-w-[1536px]",
139
139
  full: "max-w-full"
140
140
  };
141
- var Container = React8__default.forwardRef(
141
+ var Container = React32__default.forwardRef(
142
142
  ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
143
143
  const Component = as;
144
144
  return /* @__PURE__ */ jsx(
@@ -444,7 +444,7 @@ var spacingStyles = {
444
444
  };
445
445
  var predefinedSpacings = ["none", "sm", "md", "lg", "xl", "hero"];
446
446
  var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
447
- var Section = React8__default.forwardRef(
447
+ var Section = React32__default.forwardRef(
448
448
  ({
449
449
  id,
450
450
  title,
@@ -509,12 +509,12 @@ function TextInner({ as, className, children, ...props }, ref) {
509
509
  const Component = as || "span";
510
510
  return /* @__PURE__ */ jsx(Component, { ref, className: cn(className), ...props, children });
511
511
  }
512
- var Text = React8.forwardRef(TextInner);
512
+ var Text = React32.forwardRef(TextInner);
513
513
  Text.displayName = "Text";
514
514
  function isContentTextItem(item) {
515
- return item !== null && typeof item === "object" && !React8.isValidElement(item) && "_type" in item && item._type === "text";
515
+ return item !== null && typeof item === "object" && !React32.isValidElement(item) && "_type" in item && item._type === "text";
516
516
  }
517
- var ContentGroup = React8.forwardRef(
517
+ var ContentGroup = React32.forwardRef(
518
518
  ({ items, className, children, ...props }, ref) => {
519
519
  const hasContent = items && items.length > 0;
520
520
  if (!hasContent) {
@@ -527,10 +527,10 @@ var ContentGroup = React8.forwardRef(
527
527
  return /* @__PURE__ */ jsx(Text, { ...textProps }, idx);
528
528
  }
529
529
  const reactNode = item;
530
- if (React8.isValidElement(reactNode)) {
531
- return React8.cloneElement(reactNode, { key: reactNode.key ?? idx });
530
+ if (React32.isValidElement(reactNode)) {
531
+ return React32.cloneElement(reactNode, { key: reactNode.key ?? idx });
532
532
  }
533
- return /* @__PURE__ */ jsx(React8.Fragment, { children: reactNode }, idx);
533
+ return /* @__PURE__ */ jsx(React32.Fragment, { children: reactNode }, idx);
534
534
  }),
535
535
  children
536
536
  ] });
@@ -644,184 +644,189 @@ function AlternatingBlocks({
644
644
  }
645
645
  );
646
646
  }
647
- function normalizePhoneNumber(input) {
648
- const trimmed = input.trim();
649
- if (trimmed.toLowerCase().startsWith("tel:")) {
650
- return trimmed;
651
- }
652
- const match = trimmed.match(/^[\s\+\-\(\)]*(\d[\d\s\-\(\)\.]*\d)[\s\-]*(x|ext\.?|extension)?[\s\-]*(\d+)?$/i);
653
- if (match) {
654
- const mainNumber = match[1].replace(/[\s\-\(\)\.]/g, "");
655
- const extension = match[3];
656
- const normalized = mainNumber.length >= 10 && !trimmed.startsWith("+") ? `+${mainNumber}` : mainNumber;
657
- const withExtension = extension ? `${normalized};ext=${extension}` : normalized;
658
- return `tel:${withExtension}`;
659
- }
660
- const cleaned = trimmed.replace(/[\s\-\(\)\.]/g, "");
661
- return `tel:${cleaned}`;
662
- }
663
- function normalizeEmail(input) {
664
- const trimmed = input.trim();
665
- if (trimmed.toLowerCase().startsWith("mailto:")) {
666
- return trimmed;
667
- }
668
- return `mailto:${trimmed}`;
669
- }
670
- function isEmail(input) {
671
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
672
- return emailRegex.test(input.trim());
673
- }
674
- function isPhoneNumber(input) {
675
- const trimmed = input.trim();
676
- if (trimmed.toLowerCase().startsWith("tel:")) {
677
- return true;
678
- }
679
- const phoneRegex = /^[\s\+\-\(\)]*\d[\d\s\-\(\)\.]*\d[\s\-]*(x|ext\.?|extension)?[\s\-]*\d*$/i;
680
- return phoneRegex.test(trimmed);
681
- }
682
- function isInternalUrl(href) {
683
- if (typeof window === "undefined") {
684
- return href.startsWith("/") && !href.startsWith("//");
685
- }
686
- const trimmed = href.trim();
687
- if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
688
- return true;
689
- }
690
- try {
691
- const url = new URL(trimmed, window.location.href);
692
- const currentOrigin = window.location.origin;
693
- const normalizeOrigin = (origin) => origin.replace(/^(https?:\/\/)(www\.)?/, "$1");
694
- return normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin);
695
- } catch {
696
- return false;
697
- }
698
- }
699
- function toRelativePath(href) {
700
- if (typeof window === "undefined") {
701
- return href;
702
- }
703
- const trimmed = href.trim();
704
- if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
705
- return trimmed;
706
- }
707
- try {
708
- const url = new URL(trimmed, window.location.href);
709
- const currentOrigin = window.location.origin;
710
- const normalizeOrigin = (origin) => origin.replace(/^(https?:\/\/)(www\.)?/, "$1");
711
- if (normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin)) {
712
- return url.pathname + url.search + url.hash;
713
- }
714
- } catch {
715
- }
716
- return trimmed;
717
- }
718
- function useNavigation({
719
- href,
720
- onClick
721
- } = {}) {
722
- const linkType = React8.useMemo(() => {
723
- if (!href || href.trim() === "") {
724
- return onClick ? "none" : "none";
725
- }
726
- const trimmed = href.trim();
727
- if (trimmed.toLowerCase().startsWith("mailto:") || isEmail(trimmed)) {
728
- return "mailto";
729
- }
730
- if (trimmed.toLowerCase().startsWith("tel:") || isPhoneNumber(trimmed)) {
731
- return "tel";
732
- }
733
- if (isInternalUrl(trimmed)) {
734
- return "internal";
735
- }
736
- try {
737
- new URL(trimmed, typeof window !== "undefined" ? window.location.href : "http://localhost");
738
- return "external";
739
- } catch {
740
- return "internal";
647
+ var slideVariants = {
648
+ initial: {
649
+ scale: 0.98,
650
+ opacity: 0,
651
+ rotateX: 12
652
+ },
653
+ visible: {
654
+ scale: 1,
655
+ rotateX: 0,
656
+ opacity: 1,
657
+ transition: {
658
+ duration: 0.55,
659
+ ease: [0.645, 0.045, 0.355, 1]
741
660
  }
742
- }, [href, onClick]);
743
- const normalizedHref = React8.useMemo(() => {
744
- if (!href || href.trim() === "") {
745
- return void 0;
661
+ },
662
+ upExit: {
663
+ opacity: 0.8,
664
+ y: "-120%",
665
+ transition: {
666
+ duration: 0.8
746
667
  }
747
- const trimmed = href.trim();
748
- switch (linkType) {
749
- case "tel":
750
- return normalizePhoneNumber(trimmed);
751
- case "mailto":
752
- return normalizeEmail(trimmed);
753
- case "internal":
754
- return toRelativePath(trimmed);
755
- case "external":
756
- return trimmed;
757
- default:
758
- return trimmed;
668
+ },
669
+ downExit: {
670
+ opacity: 0.8,
671
+ y: "120%",
672
+ transition: {
673
+ duration: 0.8
759
674
  }
760
- }, [href, linkType]);
761
- const target = React8.useMemo(() => {
762
- switch (linkType) {
763
- case "external":
764
- return "_blank";
765
- case "internal":
766
- return "_self";
767
- case "mailto":
768
- case "tel":
769
- return void 0;
770
- default:
771
- return void 0;
675
+ }
676
+ };
677
+ var fadeVariants = {
678
+ initial: {
679
+ opacity: 0
680
+ },
681
+ visible: {
682
+ opacity: 1,
683
+ transition: {
684
+ duration: 0.8,
685
+ ease: [0.4, 0, 0.2, 1]
772
686
  }
773
- }, [linkType]);
774
- const rel = React8.useMemo(() => {
775
- if (linkType === "external") {
776
- return "noopener noreferrer";
687
+ },
688
+ fadeExit: {
689
+ opacity: 0,
690
+ transition: {
691
+ duration: 0.8,
692
+ ease: [0.4, 0, 0.2, 1]
777
693
  }
778
- return void 0;
779
- }, [linkType]);
780
- const isExternal = linkType === "external";
781
- const isInternal = linkType === "internal";
782
- const shouldUseRouter = isInternal && typeof normalizedHref === "string" && normalizedHref.startsWith("/");
783
- const handleClick = React8.useCallback(
784
- (event) => {
785
- if (onClick) {
786
- try {
787
- onClick(event);
788
- } catch (error) {
789
- console.error("Error in user onClick handler:", error);
790
- }
791
- }
792
- if (event.defaultPrevented) {
793
- return;
694
+ }
695
+ };
696
+ var normalizeIndex = (index, length) => {
697
+ if (!length) return 0;
698
+ const safeIndex = index % length;
699
+ return safeIndex < 0 ? safeIndex + length : safeIndex;
700
+ };
701
+ var ImageSlider = ({
702
+ images,
703
+ children,
704
+ overlay = true,
705
+ overlaySlot,
706
+ overlayClassName,
707
+ className,
708
+ imageClassName,
709
+ contentClassName,
710
+ autoplay = true,
711
+ autoplayIntervalMs = 6e3,
712
+ direction = "up",
713
+ transition = "slide",
714
+ startIndex = 0,
715
+ enableKeyboard = true,
716
+ onSlideChange,
717
+ optixFlowConfig
718
+ }) => {
719
+ const hasImages = images.length > 0;
720
+ const [currentIndex, setCurrentIndex] = React32.useState(
721
+ () => normalizeIndex(startIndex, images.length)
722
+ );
723
+ const handleNext = React32.useCallback(() => {
724
+ if (!hasImages) return;
725
+ setCurrentIndex((prevIndex) => {
726
+ const nextIndex = prevIndex + 1 >= images.length ? 0 : prevIndex + 1;
727
+ onSlideChange?.(nextIndex);
728
+ return nextIndex;
729
+ });
730
+ }, [hasImages, images.length, onSlideChange]);
731
+ const handlePrevious = React32.useCallback(() => {
732
+ if (!hasImages) return;
733
+ setCurrentIndex((prevIndex) => {
734
+ const nextIndex = prevIndex - 1 < 0 ? images.length - 1 : prevIndex - 1;
735
+ onSlideChange?.(nextIndex);
736
+ return nextIndex;
737
+ });
738
+ }, [hasImages, images.length, onSlideChange]);
739
+ React32.useEffect(() => {
740
+ if (!hasImages) return;
741
+ setCurrentIndex(normalizeIndex(startIndex, images.length));
742
+ }, [startIndex, images.length, hasImages]);
743
+ React32.useEffect(() => {
744
+ if (!enableKeyboard || !hasImages) return;
745
+ const handleKeyDown = (event) => {
746
+ if (event.key === "ArrowRight") {
747
+ handleNext();
748
+ } else if (event.key === "ArrowLeft") {
749
+ handlePrevious();
794
750
  }
795
- if (shouldUseRouter && normalizedHref && event.button === 0 && // left-click only
796
- !event.metaKey && !event.altKey && !event.ctrlKey && !event.shiftKey) {
797
- if (typeof window !== "undefined") {
798
- const handler = window.__opensiteNavigationHandler;
799
- if (typeof handler === "function") {
800
- try {
801
- const handled = handler(normalizedHref, event.nativeEvent || event);
802
- if (handled !== false) {
803
- event.preventDefault();
804
- }
805
- } catch (error) {
806
- console.error("Error in navigation handler:", error);
807
- }
751
+ };
752
+ window.addEventListener("keydown", handleKeyDown);
753
+ return () => {
754
+ window.removeEventListener("keydown", handleKeyDown);
755
+ };
756
+ }, [enableKeyboard, handleNext, handlePrevious, hasImages]);
757
+ React32.useEffect(() => {
758
+ if (!autoplay || images.length < 2) return;
759
+ const interval = window.setInterval(handleNext, autoplayIntervalMs);
760
+ return () => window.clearInterval(interval);
761
+ }, [autoplay, autoplayIntervalMs, handleNext, images.length]);
762
+ const activeImage = hasImages ? images[currentIndex] : null;
763
+ const overlayContent = overlaySlot ? /* @__PURE__ */ jsx("div", { className: cn("absolute inset-0 z-10", overlayClassName), children: overlaySlot }) : overlay ? /* @__PURE__ */ jsx(
764
+ "div",
765
+ {
766
+ className: cn(
767
+ "absolute inset-0 z-10 bg-linear-to-b from-black/35 via-black/50 to-black/70",
768
+ overlayClassName
769
+ )
770
+ }
771
+ ) : null;
772
+ return /* @__PURE__ */ jsxs(
773
+ "div",
774
+ {
775
+ className: cn(
776
+ "relative flex min-h-[420px] w-full items-center justify-center overflow-hidden rounded-3xl border border-border/40 bg-muted/30 shadow-2xl",
777
+ className
778
+ ),
779
+ style: {
780
+ perspective: "1000px"
781
+ },
782
+ children: [
783
+ /* @__PURE__ */ jsx(
784
+ AnimatePresence$1,
785
+ {
786
+ mode: transition === "fade" ? "sync" : "wait",
787
+ initial: false,
788
+ children: activeImage ? /* @__PURE__ */ jsx(
789
+ motion$1.div,
790
+ {
791
+ initial: "initial",
792
+ animate: "visible",
793
+ exit: transition === "fade" ? "fadeExit" : direction === "up" ? "upExit" : "downExit",
794
+ variants: transition === "fade" ? fadeVariants : slideVariants,
795
+ className: "absolute inset-0",
796
+ children: /* @__PURE__ */ jsx(
797
+ Img,
798
+ {
799
+ src: activeImage.src,
800
+ alt: activeImage.alt,
801
+ className: cn(
802
+ "h-full w-full object-cover object-center",
803
+ imageClassName,
804
+ activeImage.className
805
+ ),
806
+ optixFlowConfig: activeImage.optixFlowConfig ?? optixFlowConfig,
807
+ eager: true
808
+ }
809
+ )
810
+ },
811
+ `${currentIndex}-${activeImage.src ?? "image"}`
812
+ ) : null
808
813
  }
809
- }
810
- }
811
- },
812
- [onClick, shouldUseRouter, normalizedHref]
814
+ ),
815
+ overlayContent,
816
+ children ? /* @__PURE__ */ jsx(
817
+ "div",
818
+ {
819
+ className: cn(
820
+ "relative z-20 flex w-full flex-col items-center justify-center px-6 py-12 text-center text-white md:px-12",
821
+ contentClassName
822
+ ),
823
+ children
824
+ }
825
+ ) : null
826
+ ]
827
+ }
813
828
  );
814
- return {
815
- linkType,
816
- normalizedHref,
817
- target,
818
- rel,
819
- isExternal,
820
- isInternal,
821
- shouldUseRouter,
822
- handleClick
823
- };
824
- }
829
+ };
825
830
  var baseStyles = [
826
831
  // Layout
827
832
  "inline-flex items-center justify-center gap-2 whitespace-nowrap shrink-0",
@@ -964,948 +969,6 @@ var buttonVariants = cva(baseStyles, {
964
969
  size: "default"
965
970
  }
966
971
  });
967
- var Pressable = React8.forwardRef(
968
- ({
969
- children,
970
- className,
971
- href,
972
- onClick,
973
- variant,
974
- size,
975
- asButton = false,
976
- fallbackComponentType = "span",
977
- componentType,
978
- "aria-label": ariaLabel,
979
- "aria-describedby": ariaDescribedby,
980
- id,
981
- ...props
982
- }, ref) => {
983
- const navigation = useNavigation({ href, onClick });
984
- const {
985
- normalizedHref,
986
- target,
987
- rel,
988
- linkType,
989
- isInternal,
990
- handleClick
991
- } = navigation;
992
- const shouldRenderLink = normalizedHref && linkType !== "none";
993
- const shouldRenderButton = !shouldRenderLink && onClick;
994
- const effectiveComponentType = componentType || (shouldRenderLink ? "a" : shouldRenderButton ? "button" : fallbackComponentType);
995
- const finalComponentType = isInternal && shouldRenderLink ? "a" : effectiveComponentType;
996
- const shouldApplyButtonStyles = asButton || variant || size;
997
- const combinedClassName = cn(
998
- shouldApplyButtonStyles && buttonVariants({ variant, size }),
999
- className
1000
- );
1001
- const dataProps = Object.fromEntries(
1002
- Object.entries(props).filter(([key]) => key.startsWith("data-"))
1003
- );
1004
- const buttonDataAttributes = shouldApplyButtonStyles ? {
1005
- "data-slot": "button",
1006
- "data-variant": variant ?? "default",
1007
- "data-size": size ?? "default"
1008
- } : {};
1009
- const commonProps = {
1010
- className: combinedClassName,
1011
- onClick: handleClick,
1012
- "aria-label": ariaLabel,
1013
- "aria-describedby": ariaDescribedby,
1014
- id,
1015
- ...dataProps,
1016
- ...buttonDataAttributes
1017
- };
1018
- if (finalComponentType === "a" && shouldRenderLink) {
1019
- return /* @__PURE__ */ jsx(
1020
- "a",
1021
- {
1022
- ref,
1023
- href: normalizedHref,
1024
- target,
1025
- rel,
1026
- ...commonProps,
1027
- ...props,
1028
- children
1029
- }
1030
- );
1031
- }
1032
- if (finalComponentType === "button") {
1033
- return /* @__PURE__ */ jsx(
1034
- "button",
1035
- {
1036
- ref,
1037
- type: props.type || "button",
1038
- ...commonProps,
1039
- ...props,
1040
- children
1041
- }
1042
- );
1043
- }
1044
- if (finalComponentType === "div") {
1045
- return /* @__PURE__ */ jsx(
1046
- "div",
1047
- {
1048
- ref,
1049
- ...commonProps,
1050
- children
1051
- }
1052
- );
1053
- }
1054
- return /* @__PURE__ */ jsx(
1055
- "span",
1056
- {
1057
- ref,
1058
- ...commonProps,
1059
- children
1060
- }
1061
- );
1062
- }
1063
- );
1064
- Pressable.displayName = "Pressable";
1065
- var DEFAULT_ICON_API_KEY = "au382bi7fsh96w9h9xlrnat2jglx";
1066
- var DynamicIcon = React8.memo(function DynamicIcon2({
1067
- apiKey,
1068
- ...props
1069
- }) {
1070
- return /* @__PURE__ */ jsx(Icon, { ...props, apiKey: apiKey ?? DEFAULT_ICON_API_KEY });
1071
- });
1072
- DynamicIcon.displayName = "DynamicIcon";
1073
- var PANEL_POSITION_CLASS = {
1074
- "top-left": "left-4 top-4",
1075
- "top-right": "right-4 top-4",
1076
- "bottom-left": "bottom-4 left-4",
1077
- "bottom-right": "bottom-4 right-4"
1078
- };
1079
- var DEFAULT_VIEW_STATE = {
1080
- latitude: 39.5,
1081
- longitude: -98.35,
1082
- zoom: 3
1083
- };
1084
- var VIDEO_FILE_EXTENSION_REGEX = /\.(mp4|webm|ogg|mov|m4v|m3u8)(\?.*)?$/i;
1085
- function resolveMediaType(item) {
1086
- if (item.type) {
1087
- return item.type;
1088
- }
1089
- return VIDEO_FILE_EXTENSION_REGEX.test(item.src) ? "video" : "image";
1090
- }
1091
- function normalizeId(value, fallback) {
1092
- if (value === null || value === void 0 || value === "") {
1093
- return fallback;
1094
- }
1095
- return String(value);
1096
- }
1097
- function buildClusterCenter(markers) {
1098
- if (!markers.length) {
1099
- return null;
1100
- }
1101
- const total = markers.reduce(
1102
- (accumulator, marker) => ({
1103
- latitude: accumulator.latitude + marker.latitude,
1104
- longitude: accumulator.longitude + marker.longitude
1105
- }),
1106
- { latitude: 0, longitude: 0 }
1107
- );
1108
- return {
1109
- latitude: total.latitude / markers.length,
1110
- longitude: total.longitude / markers.length
1111
- };
1112
- }
1113
- function resolveActionKey(action, index) {
1114
- if (typeof action.label === "string" && action.label.trim().length > 0) {
1115
- return `label:${action.label}:${index}`;
1116
- }
1117
- if (action.href) {
1118
- return `href:${action.href}:${index}`;
1119
- }
1120
- return `action:${index}`;
1121
- }
1122
- function MarkerActions({ actions }) {
1123
- if (!actions || actions.length === 0) {
1124
- return null;
1125
- }
1126
- return /* @__PURE__ */ jsx("div", { className: "mt-4 flex flex-wrap gap-2", children: actions.map((action, index) => {
1127
- const {
1128
- label,
1129
- icon,
1130
- iconAfter,
1131
- children,
1132
- href,
1133
- onClick,
1134
- className: actionClassName,
1135
- variant,
1136
- size,
1137
- asButton,
1138
- ...rest
1139
- } = action;
1140
- return /* @__PURE__ */ jsx(
1141
- Pressable,
1142
- {
1143
- href,
1144
- onClick,
1145
- variant: variant ?? (index === 0 ? "default" : "outline"),
1146
- size: size ?? "sm",
1147
- asButton: asButton ?? true,
1148
- className: cn("inline-flex items-center gap-2", actionClassName),
1149
- ...rest,
1150
- children: children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
1151
- icon,
1152
- label,
1153
- iconAfter
1154
- ] })
1155
- },
1156
- resolveActionKey(action, index)
1157
- );
1158
- }) });
1159
- }
1160
- function MarkerMediaCarousel({
1161
- mediaItems,
1162
- optixFlowConfig
1163
- }) {
1164
- const [activeIndex, setActiveIndex] = React8.useState(0);
1165
- const totalItems = mediaItems.length;
1166
- const mediaResetKey = React8.useMemo(
1167
- () => mediaItems.map((item, index) => {
1168
- const itemId = normalizeId(item.id, `media-${index}`);
1169
- return `${itemId}:${item.src}:${item.type ?? ""}:${item.poster ?? ""}`;
1170
- }).join("|"),
1171
- [mediaItems]
1172
- );
1173
- const activeItemIndex = Math.min(activeIndex, Math.max(0, totalItems - 1));
1174
- React8.useEffect(() => {
1175
- setActiveIndex(0);
1176
- }, [mediaResetKey]);
1177
- return /* @__PURE__ */ jsxs("div", { className: "relative border-b border-border/60 bg-muted/40", children: [
1178
- /* @__PURE__ */ jsx("div", { className: "relative aspect-video w-full overflow-hidden", children: mediaItems.map((item, index) => {
1179
- const isActive = index === activeItemIndex;
1180
- const mediaType = resolveMediaType(item);
1181
- return /* @__PURE__ */ jsx(
1182
- "div",
1183
- {
1184
- "aria-hidden": !isActive,
1185
- className: cn(
1186
- "absolute inset-0 transition-opacity duration-500 ease-in-out",
1187
- isActive ? "opacity-100 z-[1]" : "opacity-0 z-0 pointer-events-none"
1188
- ),
1189
- children: mediaType === "video" ? /* @__PURE__ */ jsx(
1190
- "video",
1191
- {
1192
- className: "h-full w-full object-cover",
1193
- controls: isActive,
1194
- preload: "metadata",
1195
- poster: item.poster,
1196
- tabIndex: isActive ? 0 : -1,
1197
- children: /* @__PURE__ */ jsx("source", { src: item.src })
1198
- }
1199
- ) : /* @__PURE__ */ jsx(
1200
- Img,
1201
- {
1202
- src: item.src,
1203
- alt: item.alt ?? "Map marker media",
1204
- className: "h-full w-full object-cover",
1205
- loading: "eager",
1206
- optixFlowConfig
1207
- }
1208
- )
1209
- },
1210
- normalizeId(item.id, `media-slide-${index}`)
1211
- );
1212
- }) }),
1213
- totalItems > 1 ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
1214
- /* @__PURE__ */ jsx(
1215
- "button",
1216
- {
1217
- type: "button",
1218
- "aria-label": "Show previous media",
1219
- 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]",
1220
- onClick: () => {
1221
- setActiveIndex(
1222
- (current) => (current - 1 + totalItems) % totalItems
1223
- );
1224
- },
1225
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-left", size: 18 })
1226
- }
1227
- ),
1228
- /* @__PURE__ */ jsx(
1229
- "button",
1230
- {
1231
- type: "button",
1232
- "aria-label": "Show next media",
1233
- 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]",
1234
- onClick: () => {
1235
- setActiveIndex((current) => (current + 1) % totalItems);
1236
- },
1237
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-right", size: 18 })
1238
- }
1239
- ),
1240
- /* @__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(
1241
- "button",
1242
- {
1243
- type: "button",
1244
- "aria-label": `Show media item ${index + 1}`,
1245
- className: cn(
1246
- "h-2 rounded-full transition-all duration-300",
1247
- index === activeItemIndex ? "w-6 bg-card" : "w-2 bg-card opacity-50 hover:opacity-100"
1248
- ),
1249
- onClick: () => setActiveIndex(index)
1250
- },
1251
- normalizeId(item.id, `media-dot-${index}`)
1252
- )) })
1253
- ] }) : null
1254
- ] });
1255
- }
1256
- function getMarkerTitle(marker, markerIndex) {
1257
- if (marker.title !== void 0 && marker.title !== null) {
1258
- return marker.title;
1259
- }
1260
- if (marker.label !== void 0 && marker.label !== null) {
1261
- return marker.label;
1262
- }
1263
- return `Location ${markerIndex + 1}`;
1264
- }
1265
- function GeoMap({
1266
- className,
1267
- mapWrapperClassName,
1268
- mapClassName,
1269
- panelClassName,
1270
- panelPosition = "top-left",
1271
- stadiaApiKey = "",
1272
- mapStyle = "osm-bright",
1273
- styleUrl,
1274
- mapLibreCssHref,
1275
- markers = [],
1276
- clusters = [],
1277
- viewState,
1278
- defaultViewState,
1279
- onViewStateChange,
1280
- onMapClick,
1281
- onMarkerDrag,
1282
- showNavigationControl = true,
1283
- showGeolocateControl = false,
1284
- navigationControlPosition = "top-right",
1285
- geolocateControlPosition = "top-left",
1286
- flyToOptions,
1287
- markerFocusZoom = 14,
1288
- clusterFocusZoom = 5,
1289
- selectedMarkerId,
1290
- initialSelectedMarkerId,
1291
- onSelectionChange,
1292
- clearSelectionOnMapClick = true,
1293
- mapChildren,
1294
- optixFlowConfig
1295
- }) {
1296
- const normalizedStandaloneMarkers = React8.useMemo(
1297
- () => markers.map((marker, index) => ({
1298
- ...marker,
1299
- id: normalizeId(marker.id, `marker-${index}`)
1300
- })),
1301
- [markers]
1302
- );
1303
- const normalizedClusters = React8.useMemo(() => {
1304
- const results = [];
1305
- clusters.forEach((cluster, clusterIndex) => {
1306
- const clusterId = normalizeId(cluster.id, `cluster-${clusterIndex}`);
1307
- const normalizedClusterMarkers = cluster.markers.map(
1308
- (marker, markerIndex) => ({
1309
- ...marker,
1310
- id: normalizeId(marker.id, `${clusterId}-marker-${markerIndex}`),
1311
- clusterId
1312
- })
1313
- );
1314
- const clusterCenter = cluster.latitude !== void 0 && cluster.longitude !== void 0 ? { latitude: cluster.latitude, longitude: cluster.longitude } : buildClusterCenter(normalizedClusterMarkers);
1315
- if (!clusterCenter) {
1316
- return;
1317
- }
1318
- results.push({
1319
- ...cluster,
1320
- id: clusterId,
1321
- latitude: clusterCenter.latitude,
1322
- longitude: clusterCenter.longitude,
1323
- markers: normalizedClusterMarkers
1324
- });
1325
- });
1326
- return results;
1327
- }, [clusters]);
1328
- const markerLookup = React8.useMemo(() => {
1329
- const lookup = /* @__PURE__ */ new Map();
1330
- normalizedStandaloneMarkers.forEach((marker) => {
1331
- lookup.set(marker.id, marker);
1332
- });
1333
- normalizedClusters.forEach((cluster) => {
1334
- cluster.markers.forEach((marker) => {
1335
- lookup.set(marker.id, marker);
1336
- });
1337
- });
1338
- return lookup;
1339
- }, [normalizedClusters, normalizedStandaloneMarkers]);
1340
- const clusterLookup = React8.useMemo(() => {
1341
- const lookup = /* @__PURE__ */ new Map();
1342
- normalizedClusters.forEach((cluster) => {
1343
- lookup.set(cluster.id, cluster);
1344
- });
1345
- return lookup;
1346
- }, [normalizedClusters]);
1347
- const firstCoordinate = React8.useMemo(() => {
1348
- if (normalizedStandaloneMarkers.length > 0) {
1349
- const firstStandaloneMarker = normalizedStandaloneMarkers[0];
1350
- return {
1351
- latitude: firstStandaloneMarker.latitude,
1352
- longitude: firstStandaloneMarker.longitude
1353
- };
1354
- }
1355
- if (normalizedClusters.length > 0) {
1356
- const firstCluster = normalizedClusters[0];
1357
- return {
1358
- latitude: firstCluster.latitude,
1359
- longitude: firstCluster.longitude
1360
- };
1361
- }
1362
- return {
1363
- latitude: DEFAULT_VIEW_STATE.latitude,
1364
- longitude: DEFAULT_VIEW_STATE.longitude
1365
- };
1366
- }, [normalizedClusters, normalizedStandaloneMarkers]);
1367
- const [uncontrolledViewState, setUncontrolledViewState] = React8.useState({
1368
- latitude: defaultViewState?.latitude ?? firstCoordinate.latitude,
1369
- longitude: defaultViewState?.longitude ?? firstCoordinate.longitude,
1370
- zoom: defaultViewState?.zoom ?? DEFAULT_VIEW_STATE.zoom
1371
- });
1372
- const isControlledViewState = viewState !== void 0;
1373
- const resolvedViewState = isControlledViewState ? viewState : uncontrolledViewState;
1374
- const applyViewState = React8.useCallback(
1375
- (nextState) => {
1376
- if (!isControlledViewState) {
1377
- setUncontrolledViewState((current) => {
1378
- const next = { ...current, ...nextState };
1379
- const hasChanged = current.latitude !== next.latitude || current.longitude !== next.longitude || current.zoom !== next.zoom;
1380
- return hasChanged ? next : current;
1381
- });
1382
- }
1383
- onViewStateChange?.(nextState);
1384
- },
1385
- [isControlledViewState, onViewStateChange]
1386
- );
1387
- const [selection, setSelection] = React8.useState(() => {
1388
- if (initialSelectedMarkerId !== void 0 && initialSelectedMarkerId !== null) {
1389
- return {
1390
- type: "marker",
1391
- markerId: String(initialSelectedMarkerId)
1392
- };
1393
- }
1394
- return { type: "none" };
1395
- });
1396
- React8.useEffect(() => {
1397
- if (selectedMarkerId === void 0 || selectedMarkerId === null) {
1398
- return;
1399
- }
1400
- setSelection({
1401
- type: "marker",
1402
- markerId: String(selectedMarkerId)
1403
- });
1404
- }, [selectedMarkerId]);
1405
- const selectedMarker = selection.markerId ? markerLookup.get(selection.markerId) : void 0;
1406
- const selectedCluster = selection.clusterId ? clusterLookup.get(selection.clusterId) : void 0;
1407
- React8.useEffect(() => {
1408
- if (selection.type === "marker" && selection.markerId && !selectedMarker) {
1409
- setSelection({ type: "none" });
1410
- onSelectionChange?.({ type: "none" });
1411
- }
1412
- }, [onSelectionChange, selectedMarker, selection]);
1413
- const emitSelectionChange = React8.useCallback(
1414
- (nextSelection) => {
1415
- if (nextSelection.type === "none") {
1416
- onSelectionChange?.({ type: "none" });
1417
- return;
1418
- }
1419
- if (nextSelection.type === "marker") {
1420
- const parentCluster = nextSelection.marker.clusterId ? clusterLookup.get(nextSelection.marker.clusterId) : void 0;
1421
- onSelectionChange?.({
1422
- type: "marker",
1423
- marker: nextSelection.marker,
1424
- cluster: parentCluster
1425
- });
1426
- return;
1427
- }
1428
- onSelectionChange?.({
1429
- type: "cluster",
1430
- cluster: nextSelection.cluster
1431
- });
1432
- },
1433
- [clusterLookup, onSelectionChange]
1434
- );
1435
- const selectMarker = React8.useCallback(
1436
- (marker) => {
1437
- setSelection({
1438
- type: "marker",
1439
- markerId: marker.id,
1440
- clusterId: marker.clusterId
1441
- });
1442
- applyViewState({
1443
- latitude: marker.latitude,
1444
- longitude: marker.longitude,
1445
- zoom: markerFocusZoom
1446
- });
1447
- emitSelectionChange({ type: "marker", marker });
1448
- },
1449
- [applyViewState, emitSelectionChange, markerFocusZoom]
1450
- );
1451
- const selectCluster = React8.useCallback(
1452
- (cluster) => {
1453
- setSelection({
1454
- type: "cluster",
1455
- clusterId: cluster.id
1456
- });
1457
- applyViewState({
1458
- latitude: cluster.latitude,
1459
- longitude: cluster.longitude,
1460
- zoom: clusterFocusZoom
1461
- });
1462
- emitSelectionChange({ type: "cluster", cluster });
1463
- },
1464
- [applyViewState, clusterFocusZoom, emitSelectionChange]
1465
- );
1466
- const clearSelection = React8.useCallback(() => {
1467
- setSelection({ type: "none" });
1468
- emitSelectionChange({ type: "none" });
1469
- }, [emitSelectionChange]);
1470
- const mapMarkers = React8.useMemo(() => {
1471
- const resolvedMarkers = [];
1472
- normalizedClusters.forEach((cluster) => {
1473
- const isSelected = selection.type === "cluster" && selection.clusterId === cluster.id;
1474
- resolvedMarkers.push({
1475
- id: `cluster-pin:${cluster.id}`,
1476
- latitude: cluster.latitude,
1477
- longitude: cluster.longitude,
1478
- element: () => {
1479
- const customMarkerElement = cluster.markerElement;
1480
- const markerBody = typeof customMarkerElement === "function" ? customMarkerElement({
1481
- isSelected,
1482
- count: cluster.markers.length
1483
- }) : customMarkerElement;
1484
- return /* @__PURE__ */ jsx(
1485
- "button",
1486
- {
1487
- type: "button",
1488
- className: "group cursor-pointer",
1489
- onClick: (event) => {
1490
- event.preventDefault();
1491
- event.stopPropagation();
1492
- selectCluster(cluster);
1493
- },
1494
- "aria-label": `View ${cluster.markers.length} clustered locations`,
1495
- children: markerBody ?? /* @__PURE__ */ jsx(
1496
- "span",
1497
- {
1498
- className: cn(
1499
- "inline-flex min-h-10 min-w-10 items-center justify-center rounded-full border-2 border-white px-2 text-xs font-semibold text-white shadow-lg transition-transform duration-200 group-hover:scale-105",
1500
- isSelected && "ring-4 ring-primary/30",
1501
- cluster.pinClassName
1502
- ),
1503
- style: {
1504
- backgroundColor: cluster.pinColor ?? "var(--foreground)"
1505
- },
1506
- children: cluster.markers.length
1507
- }
1508
- )
1509
- }
1510
- );
1511
- }
1512
- });
1513
- });
1514
- normalizedStandaloneMarkers.forEach((marker) => {
1515
- const isSelected = selection.type === "marker" && selection.markerId === marker.id;
1516
- const customMarkerElement = marker.markerElement;
1517
- resolvedMarkers.push({
1518
- id: marker.id,
1519
- latitude: marker.latitude,
1520
- longitude: marker.longitude,
1521
- draggable: marker.draggable,
1522
- element: () => {
1523
- const markerBody = typeof customMarkerElement === "function" ? customMarkerElement({ isSelected }) : customMarkerElement;
1524
- return /* @__PURE__ */ jsx(
1525
- "button",
1526
- {
1527
- type: "button",
1528
- className: "group cursor-pointer",
1529
- onClick: (event) => {
1530
- event.preventDefault();
1531
- event.stopPropagation();
1532
- selectMarker(marker);
1533
- },
1534
- "aria-label": typeof marker.title === "string" ? `View ${marker.title}` : "View location details",
1535
- children: markerBody ?? /* @__PURE__ */ jsx(
1536
- "span",
1537
- {
1538
- className: cn(
1539
- "inline-flex h-4 w-4 rounded-full border-2 border-white shadow-md transition-transform duration-200 group-hover:scale-110",
1540
- isSelected && "h-5 w-5 ring-4 ring-primary/30",
1541
- marker.pinClassName
1542
- ),
1543
- style: {
1544
- backgroundColor: marker.pinColor ?? "#f43f5e"
1545
- }
1546
- }
1547
- )
1548
- }
1549
- );
1550
- }
1551
- });
1552
- });
1553
- return resolvedMarkers;
1554
- }, [
1555
- normalizedClusters,
1556
- normalizedStandaloneMarkers,
1557
- selectCluster,
1558
- selectMarker,
1559
- selection
1560
- ]);
1561
- const renderMarkerPanel = () => {
1562
- if (selectedMarker) {
1563
- const markerMediaItems = selectedMarker.mediaItems ?? [];
1564
- return /* @__PURE__ */ jsxs(
1565
- "div",
1566
- {
1567
- className: cn(
1568
- "relative w-[min(24rem,calc(100vw-2rem))] overflow-hidden rounded-xl border border-border bg-card text-card-foreground shadow-2xl",
1569
- panelClassName
1570
- ),
1571
- children: [
1572
- /* @__PURE__ */ jsx(
1573
- "button",
1574
- {
1575
- type: "button",
1576
- "aria-label": "Close marker details",
1577
- 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",
1578
- onClick: clearSelection,
1579
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/x", size: 20 })
1580
- }
1581
- ),
1582
- markerMediaItems.length > 0 ? /* @__PURE__ */ jsx(
1583
- MarkerMediaCarousel,
1584
- {
1585
- mediaItems: markerMediaItems,
1586
- optixFlowConfig
1587
- }
1588
- ) : null,
1589
- /* @__PURE__ */ jsxs("div", { className: "space-y-2 p-4", children: [
1590
- /* @__PURE__ */ jsx("div", { className: "flex items-start justify-between gap-3", children: /* @__PURE__ */ jsxs("div", { className: "min-w-0 space-y-1", children: [
1591
- selectedMarker.eyebrow ? /* @__PURE__ */ jsx("p", { className: "text-xs font-semibold uppercase tracking-wide", children: selectedMarker.eyebrow }) : null,
1592
- /* @__PURE__ */ jsx("div", { className: "text-base font-semibold leading-tight", children: selectedMarker.title ?? selectedMarker.label ?? "Location" })
1593
- ] }) }),
1594
- selectedMarker.summary ? /* @__PURE__ */ jsx("div", { className: "text-sm leading-relaxed", children: selectedMarker.summary }) : null,
1595
- selectedMarker.locationLine ? /* @__PURE__ */ jsxs("div", { className: "flex flex-row items-center justify-start text-sm gap-2", children: [
1596
- /* @__PURE__ */ jsx(
1597
- DynamicIcon,
1598
- {
1599
- name: "lucide:map-pin",
1600
- className: "opacity-50",
1601
- size: 18
1602
- }
1603
- ),
1604
- typeof selectedMarker.locationLine === "string" ? /* @__PURE__ */ jsx(
1605
- Pressable,
1606
- {
1607
- href: selectedMarker.locationUrl,
1608
- className: cn(
1609
- "transition-all duration-500",
1610
- "font-medium opacity-75 hover:opacity-100",
1611
- selectedMarker.locationUrl ? "underline underline-offset-4" : ""
1612
- ),
1613
- children: selectedMarker.locationLine
1614
- }
1615
- ) : selectedMarker.locationLine
1616
- ] }) : null,
1617
- selectedMarker.hoursLine ? /* @__PURE__ */ jsxs("div", { className: "flex flex-row items-center justify-start text-sm gap-2", children: [
1618
- /* @__PURE__ */ jsx(
1619
- DynamicIcon,
1620
- {
1621
- name: "lucide:clock",
1622
- className: "opacity-50",
1623
- size: 18
1624
- }
1625
- ),
1626
- typeof selectedMarker.hoursLine === "string" ? /* @__PURE__ */ jsx("div", { className: "font-medium", children: selectedMarker.hoursLine }) : selectedMarker.hoursLine
1627
- ] }) : null,
1628
- selectedMarker.markerContentComponent ? /* @__PURE__ */ jsx("div", { className: "relative", children: selectedMarker.markerContentComponent }) : null,
1629
- /* @__PURE__ */ jsx(MarkerActions, { actions: selectedMarker.actions })
1630
- ] })
1631
- ]
1632
- }
1633
- );
1634
- }
1635
- if (selectedCluster) {
1636
- return /* @__PURE__ */ jsxs(
1637
- "div",
1638
- {
1639
- className: cn(
1640
- "relative w-[min(24rem,calc(100vw-2rem))] overflow-hidden rounded-xl border border-border bg-card text-card-foreground p-4 shadow-2xl",
1641
- panelClassName
1642
- ),
1643
- children: [
1644
- /* @__PURE__ */ jsx(
1645
- "button",
1646
- {
1647
- type: "button",
1648
- "aria-label": "Close cluster details",
1649
- 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",
1650
- onClick: clearSelection,
1651
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/x", size: 20 })
1652
- }
1653
- ),
1654
- /* @__PURE__ */ jsx("div", { className: "mb-3 flex items-start justify-between gap-3", children: /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
1655
- selectedCluster.label ? /* @__PURE__ */ jsx("p", { className: "text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: selectedCluster.label }) : null,
1656
- /* @__PURE__ */ jsx("div", { className: "text-base font-semibold leading-tight text-foreground", children: selectedCluster.title ?? "Clustered Locations" }),
1657
- /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: selectedCluster.summary ?? `${selectedCluster.markers.length} location${selectedCluster.markers.length === 1 ? "" : "s"} in this cluster.` })
1658
- ] }) }),
1659
- /* @__PURE__ */ jsx("div", { className: "max-h-56 space-y-2 overflow-y-auto pr-1", children: selectedCluster.markers.map((marker, markerIndex) => /* @__PURE__ */ jsxs(
1660
- "button",
1661
- {
1662
- type: "button",
1663
- className: "w-full rounded-lg border border-border/60 p-3 text-left transition hover:border-border hover:bg-muted/50",
1664
- onClick: () => selectMarker(marker),
1665
- children: [
1666
- /* @__PURE__ */ jsx("div", { className: "line-clamp-1 text-sm font-semibold text-foreground", children: getMarkerTitle(marker, markerIndex) }),
1667
- marker.summary ? /* @__PURE__ */ jsx("div", { className: "mt-1 line-clamp-2 text-xs text-muted-foreground", children: marker.summary }) : null
1668
- ]
1669
- },
1670
- marker.id
1671
- )) })
1672
- ]
1673
- }
1674
- );
1675
- }
1676
- return null;
1677
- };
1678
- return /* @__PURE__ */ jsxs(
1679
- "div",
1680
- {
1681
- className: cn(
1682
- "relative overflow-hidden rounded-2xl border border-border bg-background",
1683
- className
1684
- ),
1685
- children: [
1686
- /* @__PURE__ */ jsx("div", { className: cn("h-[520px] w-full", mapWrapperClassName), children: /* @__PURE__ */ jsx(
1687
- MapLibre,
1688
- {
1689
- stadiaApiKey,
1690
- mapStyle,
1691
- styleUrl,
1692
- mapLibreCssHref,
1693
- viewState: resolvedViewState,
1694
- onViewStateChange: applyViewState,
1695
- markers: mapMarkers,
1696
- onClick: (coord) => {
1697
- onMapClick?.(coord);
1698
- if (clearSelectionOnMapClick) {
1699
- clearSelection();
1700
- }
1701
- },
1702
- onMarkerDrag,
1703
- showNavigationControl,
1704
- showGeolocateControl,
1705
- navigationControlPosition,
1706
- geolocateControlPosition,
1707
- flyToOptions,
1708
- className: cn("h-full w-full", mapClassName),
1709
- children: mapChildren
1710
- }
1711
- ) }),
1712
- selection.type !== "none" ? /* @__PURE__ */ jsx(
1713
- "div",
1714
- {
1715
- className: cn(
1716
- "pointer-events-none absolute z-20",
1717
- PANEL_POSITION_CLASS[panelPosition]
1718
- ),
1719
- children: /* @__PURE__ */ jsx("div", { className: "pointer-events-auto", children: renderMarkerPanel() })
1720
- }
1721
- ) : null
1722
- ]
1723
- }
1724
- );
1725
- }
1726
- var slideVariants = {
1727
- initial: {
1728
- scale: 0.98,
1729
- opacity: 0,
1730
- rotateX: 12
1731
- },
1732
- visible: {
1733
- scale: 1,
1734
- rotateX: 0,
1735
- opacity: 1,
1736
- transition: {
1737
- duration: 0.55,
1738
- ease: [0.645, 0.045, 0.355, 1]
1739
- }
1740
- },
1741
- upExit: {
1742
- opacity: 0.8,
1743
- y: "-120%",
1744
- transition: {
1745
- duration: 0.8
1746
- }
1747
- },
1748
- downExit: {
1749
- opacity: 0.8,
1750
- y: "120%",
1751
- transition: {
1752
- duration: 0.8
1753
- }
1754
- }
1755
- };
1756
- var fadeVariants = {
1757
- initial: {
1758
- opacity: 0
1759
- },
1760
- visible: {
1761
- opacity: 1,
1762
- transition: {
1763
- duration: 0.8,
1764
- ease: [0.4, 0, 0.2, 1]
1765
- }
1766
- },
1767
- fadeExit: {
1768
- opacity: 0,
1769
- transition: {
1770
- duration: 0.8,
1771
- ease: [0.4, 0, 0.2, 1]
1772
- }
1773
- }
1774
- };
1775
- var normalizeIndex = (index, length) => {
1776
- if (!length) return 0;
1777
- const safeIndex = index % length;
1778
- return safeIndex < 0 ? safeIndex + length : safeIndex;
1779
- };
1780
- var ImageSlider = ({
1781
- images,
1782
- children,
1783
- overlay = true,
1784
- overlaySlot,
1785
- overlayClassName,
1786
- className,
1787
- imageClassName,
1788
- contentClassName,
1789
- autoplay = true,
1790
- autoplayIntervalMs = 6e3,
1791
- direction = "up",
1792
- transition = "slide",
1793
- startIndex = 0,
1794
- enableKeyboard = true,
1795
- onSlideChange,
1796
- optixFlowConfig
1797
- }) => {
1798
- const hasImages = images.length > 0;
1799
- const [currentIndex, setCurrentIndex] = React8.useState(
1800
- () => normalizeIndex(startIndex, images.length)
1801
- );
1802
- const handleNext = React8.useCallback(() => {
1803
- if (!hasImages) return;
1804
- setCurrentIndex((prevIndex) => {
1805
- const nextIndex = prevIndex + 1 >= images.length ? 0 : prevIndex + 1;
1806
- onSlideChange?.(nextIndex);
1807
- return nextIndex;
1808
- });
1809
- }, [hasImages, images.length, onSlideChange]);
1810
- const handlePrevious = React8.useCallback(() => {
1811
- if (!hasImages) return;
1812
- setCurrentIndex((prevIndex) => {
1813
- const nextIndex = prevIndex - 1 < 0 ? images.length - 1 : prevIndex - 1;
1814
- onSlideChange?.(nextIndex);
1815
- return nextIndex;
1816
- });
1817
- }, [hasImages, images.length, onSlideChange]);
1818
- React8.useEffect(() => {
1819
- if (!hasImages) return;
1820
- setCurrentIndex(normalizeIndex(startIndex, images.length));
1821
- }, [startIndex, images.length, hasImages]);
1822
- React8.useEffect(() => {
1823
- if (!enableKeyboard || !hasImages) return;
1824
- const handleKeyDown = (event) => {
1825
- if (event.key === "ArrowRight") {
1826
- handleNext();
1827
- } else if (event.key === "ArrowLeft") {
1828
- handlePrevious();
1829
- }
1830
- };
1831
- window.addEventListener("keydown", handleKeyDown);
1832
- return () => {
1833
- window.removeEventListener("keydown", handleKeyDown);
1834
- };
1835
- }, [enableKeyboard, handleNext, handlePrevious, hasImages]);
1836
- React8.useEffect(() => {
1837
- if (!autoplay || images.length < 2) return;
1838
- const interval = window.setInterval(handleNext, autoplayIntervalMs);
1839
- return () => window.clearInterval(interval);
1840
- }, [autoplay, autoplayIntervalMs, handleNext, images.length]);
1841
- const activeImage = hasImages ? images[currentIndex] : null;
1842
- const overlayContent = overlaySlot ? /* @__PURE__ */ jsx("div", { className: cn("absolute inset-0 z-10", overlayClassName), children: overlaySlot }) : overlay ? /* @__PURE__ */ jsx(
1843
- "div",
1844
- {
1845
- className: cn(
1846
- "absolute inset-0 z-10 bg-linear-to-b from-black/35 via-black/50 to-black/70",
1847
- overlayClassName
1848
- )
1849
- }
1850
- ) : null;
1851
- return /* @__PURE__ */ jsxs(
1852
- "div",
1853
- {
1854
- className: cn(
1855
- "relative flex min-h-[420px] w-full items-center justify-center overflow-hidden rounded-3xl border border-border/40 bg-muted/30 shadow-2xl",
1856
- className
1857
- ),
1858
- style: {
1859
- perspective: "1000px"
1860
- },
1861
- children: [
1862
- /* @__PURE__ */ jsx(
1863
- AnimatePresence$1,
1864
- {
1865
- mode: transition === "fade" ? "sync" : "wait",
1866
- initial: false,
1867
- children: activeImage ? /* @__PURE__ */ jsx(
1868
- motion$1.div,
1869
- {
1870
- initial: "initial",
1871
- animate: "visible",
1872
- exit: transition === "fade" ? "fadeExit" : direction === "up" ? "upExit" : "downExit",
1873
- variants: transition === "fade" ? fadeVariants : slideVariants,
1874
- className: "absolute inset-0",
1875
- children: /* @__PURE__ */ jsx(
1876
- Img,
1877
- {
1878
- src: activeImage.src,
1879
- alt: activeImage.alt,
1880
- className: cn(
1881
- "h-full w-full object-cover object-center",
1882
- imageClassName,
1883
- activeImage.className
1884
- ),
1885
- optixFlowConfig: activeImage.optixFlowConfig ?? optixFlowConfig,
1886
- eager: true
1887
- }
1888
- )
1889
- },
1890
- `${currentIndex}-${activeImage.src ?? "image"}`
1891
- ) : null
1892
- }
1893
- ),
1894
- overlayContent,
1895
- children ? /* @__PURE__ */ jsx(
1896
- "div",
1897
- {
1898
- className: cn(
1899
- "relative z-20 flex w-full flex-col items-center justify-center px-6 py-12 text-center text-white md:px-12",
1900
- contentClassName
1901
- ),
1902
- children
1903
- }
1904
- ) : null
1905
- ]
1906
- }
1907
- );
1908
- };
1909
972
  function Card({ className, ...props }) {
1910
973
  return /* @__PURE__ */ jsx(
1911
974
  "div",
@@ -2034,6 +1097,14 @@ function PopoverContent({
2034
1097
  }
2035
1098
  ) });
2036
1099
  }
1100
+ var DEFAULT_ICON_API_KEY = "au382bi7fsh96w9h9xlrnat2jglx";
1101
+ var DynamicIcon = React32.memo(function DynamicIcon2({
1102
+ apiKey,
1103
+ ...props
1104
+ }) {
1105
+ return /* @__PURE__ */ jsx(Icon, { ...props, apiKey: apiKey ?? DEFAULT_ICON_API_KEY });
1106
+ });
1107
+ DynamicIcon.displayName = "DynamicIcon";
2037
1108
  function StarRating({
2038
1109
  rating,
2039
1110
  size = 18,
@@ -2051,6 +1122,282 @@ function StarRating({
2051
1122
  star
2052
1123
  )) });
2053
1124
  }
1125
+ function normalizePhoneNumber(input) {
1126
+ const trimmed = input.trim();
1127
+ if (trimmed.toLowerCase().startsWith("tel:")) {
1128
+ return trimmed;
1129
+ }
1130
+ const match = trimmed.match(/^[\s\+\-\(\)]*(\d[\d\s\-\(\)\.]*\d)[\s\-]*(x|ext\.?|extension)?[\s\-]*(\d+)?$/i);
1131
+ if (match) {
1132
+ const mainNumber = match[1].replace(/[\s\-\(\)\.]/g, "");
1133
+ const extension = match[3];
1134
+ const normalized = mainNumber.length >= 10 && !trimmed.startsWith("+") ? `+${mainNumber}` : mainNumber;
1135
+ const withExtension = extension ? `${normalized};ext=${extension}` : normalized;
1136
+ return `tel:${withExtension}`;
1137
+ }
1138
+ const cleaned = trimmed.replace(/[\s\-\(\)\.]/g, "");
1139
+ return `tel:${cleaned}`;
1140
+ }
1141
+ function normalizeEmail(input) {
1142
+ const trimmed = input.trim();
1143
+ if (trimmed.toLowerCase().startsWith("mailto:")) {
1144
+ return trimmed;
1145
+ }
1146
+ return `mailto:${trimmed}`;
1147
+ }
1148
+ function isEmail(input) {
1149
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
1150
+ return emailRegex.test(input.trim());
1151
+ }
1152
+ function isPhoneNumber(input) {
1153
+ const trimmed = input.trim();
1154
+ if (trimmed.toLowerCase().startsWith("tel:")) {
1155
+ return true;
1156
+ }
1157
+ const phoneRegex = /^[\s\+\-\(\)]*\d[\d\s\-\(\)\.]*\d[\s\-]*(x|ext\.?|extension)?[\s\-]*\d*$/i;
1158
+ return phoneRegex.test(trimmed);
1159
+ }
1160
+ function isInternalUrl(href) {
1161
+ if (typeof window === "undefined") {
1162
+ return href.startsWith("/") && !href.startsWith("//");
1163
+ }
1164
+ const trimmed = href.trim();
1165
+ if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
1166
+ return true;
1167
+ }
1168
+ try {
1169
+ const url = new URL(trimmed, window.location.href);
1170
+ const currentOrigin = window.location.origin;
1171
+ const normalizeOrigin = (origin) => origin.replace(/^(https?:\/\/)(www\.)?/, "$1");
1172
+ return normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin);
1173
+ } catch {
1174
+ return false;
1175
+ }
1176
+ }
1177
+ function toRelativePath(href) {
1178
+ if (typeof window === "undefined") {
1179
+ return href;
1180
+ }
1181
+ const trimmed = href.trim();
1182
+ if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
1183
+ return trimmed;
1184
+ }
1185
+ try {
1186
+ const url = new URL(trimmed, window.location.href);
1187
+ const currentOrigin = window.location.origin;
1188
+ const normalizeOrigin = (origin) => origin.replace(/^(https?:\/\/)(www\.)?/, "$1");
1189
+ if (normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin)) {
1190
+ return url.pathname + url.search + url.hash;
1191
+ }
1192
+ } catch {
1193
+ }
1194
+ return trimmed;
1195
+ }
1196
+ function useNavigation({
1197
+ href,
1198
+ onClick
1199
+ } = {}) {
1200
+ const linkType = React32.useMemo(() => {
1201
+ if (!href || href.trim() === "") {
1202
+ return onClick ? "none" : "none";
1203
+ }
1204
+ const trimmed = href.trim();
1205
+ if (trimmed.toLowerCase().startsWith("mailto:") || isEmail(trimmed)) {
1206
+ return "mailto";
1207
+ }
1208
+ if (trimmed.toLowerCase().startsWith("tel:") || isPhoneNumber(trimmed)) {
1209
+ return "tel";
1210
+ }
1211
+ if (isInternalUrl(trimmed)) {
1212
+ return "internal";
1213
+ }
1214
+ try {
1215
+ new URL(trimmed, typeof window !== "undefined" ? window.location.href : "http://localhost");
1216
+ return "external";
1217
+ } catch {
1218
+ return "internal";
1219
+ }
1220
+ }, [href, onClick]);
1221
+ const normalizedHref = React32.useMemo(() => {
1222
+ if (!href || href.trim() === "") {
1223
+ return void 0;
1224
+ }
1225
+ const trimmed = href.trim();
1226
+ switch (linkType) {
1227
+ case "tel":
1228
+ return normalizePhoneNumber(trimmed);
1229
+ case "mailto":
1230
+ return normalizeEmail(trimmed);
1231
+ case "internal":
1232
+ return toRelativePath(trimmed);
1233
+ case "external":
1234
+ return trimmed;
1235
+ default:
1236
+ return trimmed;
1237
+ }
1238
+ }, [href, linkType]);
1239
+ const target = React32.useMemo(() => {
1240
+ switch (linkType) {
1241
+ case "external":
1242
+ return "_blank";
1243
+ case "internal":
1244
+ return "_self";
1245
+ case "mailto":
1246
+ case "tel":
1247
+ return void 0;
1248
+ default:
1249
+ return void 0;
1250
+ }
1251
+ }, [linkType]);
1252
+ const rel = React32.useMemo(() => {
1253
+ if (linkType === "external") {
1254
+ return "noopener noreferrer";
1255
+ }
1256
+ return void 0;
1257
+ }, [linkType]);
1258
+ const isExternal = linkType === "external";
1259
+ const isInternal = linkType === "internal";
1260
+ const shouldUseRouter = isInternal && typeof normalizedHref === "string" && normalizedHref.startsWith("/");
1261
+ const handleClick = React32.useCallback(
1262
+ (event) => {
1263
+ if (onClick) {
1264
+ try {
1265
+ onClick(event);
1266
+ } catch (error) {
1267
+ console.error("Error in user onClick handler:", error);
1268
+ }
1269
+ }
1270
+ if (event.defaultPrevented) {
1271
+ return;
1272
+ }
1273
+ if (shouldUseRouter && normalizedHref && event.button === 0 && // left-click only
1274
+ !event.metaKey && !event.altKey && !event.ctrlKey && !event.shiftKey) {
1275
+ if (typeof window !== "undefined") {
1276
+ const handler = window.__opensiteNavigationHandler;
1277
+ if (typeof handler === "function") {
1278
+ try {
1279
+ const handled = handler(normalizedHref, event.nativeEvent || event);
1280
+ if (handled !== false) {
1281
+ event.preventDefault();
1282
+ }
1283
+ } catch (error) {
1284
+ console.error("Error in navigation handler:", error);
1285
+ }
1286
+ }
1287
+ }
1288
+ }
1289
+ },
1290
+ [onClick, shouldUseRouter, normalizedHref]
1291
+ );
1292
+ return {
1293
+ linkType,
1294
+ normalizedHref,
1295
+ target,
1296
+ rel,
1297
+ isExternal,
1298
+ isInternal,
1299
+ shouldUseRouter,
1300
+ handleClick
1301
+ };
1302
+ }
1303
+ var Pressable = React32.forwardRef(
1304
+ ({
1305
+ children,
1306
+ className,
1307
+ href,
1308
+ onClick,
1309
+ variant,
1310
+ size,
1311
+ asButton = false,
1312
+ fallbackComponentType = "span",
1313
+ componentType,
1314
+ "aria-label": ariaLabel,
1315
+ "aria-describedby": ariaDescribedby,
1316
+ id,
1317
+ ...props
1318
+ }, ref) => {
1319
+ const navigation = useNavigation({ href, onClick });
1320
+ const {
1321
+ normalizedHref,
1322
+ target,
1323
+ rel,
1324
+ linkType,
1325
+ isInternal,
1326
+ handleClick
1327
+ } = navigation;
1328
+ const shouldRenderLink = normalizedHref && linkType !== "none";
1329
+ const shouldRenderButton = !shouldRenderLink && onClick;
1330
+ const effectiveComponentType = componentType || (shouldRenderLink ? "a" : shouldRenderButton ? "button" : fallbackComponentType);
1331
+ const finalComponentType = isInternal && shouldRenderLink ? "a" : effectiveComponentType;
1332
+ const shouldApplyButtonStyles = asButton || variant || size;
1333
+ const combinedClassName = cn(
1334
+ shouldApplyButtonStyles && buttonVariants({ variant, size }),
1335
+ className
1336
+ );
1337
+ const dataProps = Object.fromEntries(
1338
+ Object.entries(props).filter(([key]) => key.startsWith("data-"))
1339
+ );
1340
+ const buttonDataAttributes = shouldApplyButtonStyles ? {
1341
+ "data-slot": "button",
1342
+ "data-variant": variant ?? "default",
1343
+ "data-size": size ?? "default"
1344
+ } : {};
1345
+ const commonProps = {
1346
+ className: combinedClassName,
1347
+ onClick: handleClick,
1348
+ "aria-label": ariaLabel,
1349
+ "aria-describedby": ariaDescribedby,
1350
+ id,
1351
+ ...dataProps,
1352
+ ...buttonDataAttributes
1353
+ };
1354
+ if (finalComponentType === "a" && shouldRenderLink) {
1355
+ return /* @__PURE__ */ jsx(
1356
+ "a",
1357
+ {
1358
+ ref,
1359
+ href: normalizedHref,
1360
+ target,
1361
+ rel,
1362
+ ...commonProps,
1363
+ ...props,
1364
+ children
1365
+ }
1366
+ );
1367
+ }
1368
+ if (finalComponentType === "button") {
1369
+ return /* @__PURE__ */ jsx(
1370
+ "button",
1371
+ {
1372
+ ref,
1373
+ type: props.type || "button",
1374
+ ...commonProps,
1375
+ ...props,
1376
+ children
1377
+ }
1378
+ );
1379
+ }
1380
+ if (finalComponentType === "div") {
1381
+ return /* @__PURE__ */ jsx(
1382
+ "div",
1383
+ {
1384
+ ref,
1385
+ ...commonProps,
1386
+ children
1387
+ }
1388
+ );
1389
+ }
1390
+ return /* @__PURE__ */ jsx(
1391
+ "span",
1392
+ {
1393
+ ref,
1394
+ ...commonProps,
1395
+ children
1396
+ }
1397
+ );
1398
+ }
1399
+ );
1400
+ Pressable.displayName = "Pressable";
2054
1401
  var BUTTON_SIZES = {
2055
1402
  sm: { buttonSize: "size-8", iconSize: 16 },
2056
1403
  md: { buttonSize: "size-10", iconSize: 20 },
@@ -2142,7 +1489,7 @@ var platformIconMap = {
2142
1489
  dribbble: "cib/dribbble",
2143
1490
  unknown: "icon-park-solid/circular-connection"
2144
1491
  };
2145
- var SocialLinkIcon = React8.forwardRef(
1492
+ var SocialLinkIcon = React32.forwardRef(
2146
1493
  ({
2147
1494
  platformName,
2148
1495
  label,
@@ -2156,16 +1503,16 @@ var SocialLinkIcon = React8.forwardRef(
2156
1503
  ...pressableProps
2157
1504
  }, ref) => {
2158
1505
  const platform = usePlatformFromUrl(href);
2159
- const smartPlatformName = React8.useMemo(() => {
1506
+ const smartPlatformName = React32.useMemo(() => {
2160
1507
  return platform || platformName;
2161
1508
  }, [platform, platformName]);
2162
- const iconName = React8.useMemo(() => {
1509
+ const iconName = React32.useMemo(() => {
2163
1510
  return iconNameOverride || platformIconMap[smartPlatformName];
2164
1511
  }, [iconNameOverride, smartPlatformName]);
2165
- const accessibleLabel = React8.useMemo(() => {
1512
+ const accessibleLabel = React32.useMemo(() => {
2166
1513
  return label || platformName;
2167
1514
  }, [label, platformName]);
2168
- const icon = React8.useMemo(() => {
1515
+ const icon = React32.useMemo(() => {
2169
1516
  return /* @__PURE__ */ jsx(
2170
1517
  DynamicIcon,
2171
1518
  {
@@ -2652,7 +1999,7 @@ function AboutExpandableValues({
2652
1999
  pattern,
2653
2000
  patternOpacity
2654
2001
  }) {
2655
- const [expandedValue, setExpandedValue] = React8.useState(null);
2002
+ const [expandedValue, setExpandedValue] = React32.useState(null);
2656
2003
  const toggleExpand = useCallback((id) => {
2657
2004
  setExpandedValue((prev) => prev === id ? null : id);
2658
2005
  }, []);
@@ -2888,7 +2235,7 @@ function CommunityInitiatives({
2888
2235
  pattern,
2889
2236
  patternOpacity
2890
2237
  }) {
2891
- const [activeCategory, setActiveCategory] = React8.useState(
2238
+ const [activeCategory, setActiveCategory] = React32.useState(
2892
2239
  categories?.[0]?.id || ""
2893
2240
  );
2894
2241
  const currentCategory = categories?.find((category) => category.id === activeCategory) || categories?.[0];
@@ -3152,7 +2499,7 @@ function AboutCultureTabs({
3152
2499
  patternOpacity
3153
2500
  }) {
3154
2501
  const resolvedAspects = aspects ?? [];
3155
- const [activeTab, setActiveTab] = React8.useState(
2502
+ const [activeTab, setActiveTab] = React32.useState(
3156
2503
  resolvedAspects[0]?.id || ""
3157
2504
  );
3158
2505
  const headerItems = useMemo(() => {
@@ -3685,7 +3032,7 @@ function BannerDeliveryCountdown({
3685
3032
  }, [prefixText, timerContent, middleText, deliveryDateContent]);
3686
3033
  return /* @__PURE__ */ jsx(Section, { background, spacing: "none", className: cn("bg-accent text-accent-foreground", className), children: /* @__PURE__ */ jsx("div", { className: cn("container py-2.5", containerClassName), children: /* @__PURE__ */ jsx("div", { className: cn("flex flex-wrap items-center justify-center gap-3 text-sm", contentClassName), children: /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2", messageClassName), children: [
3687
3034
  iconContent,
3688
- messageParts.length > 0 && /* @__PURE__ */ jsx("span", { children: messageParts.map((part, index) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
3035
+ messageParts.length > 0 && /* @__PURE__ */ jsx("span", { children: messageParts.map((part, index) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
3689
3036
  index > 0 ? " " : null,
3690
3037
  part
3691
3038
  ] }, index)) })
@@ -4956,8 +4303,8 @@ var BrandAttribution = ({
4956
4303
  }
4957
4304
  const { prefix = "", anchorText, href, suffix = "" } = options[optionIndex];
4958
4305
  const ContainerEl = variant;
4959
- const [trackedHref, setTrackedHref] = React8.useState(href);
4960
- React8.useEffect(() => {
4306
+ const [trackedHref, setTrackedHref] = React32.useState(href);
4307
+ React32.useEffect(() => {
4961
4308
  setTrackedHref(buildTrackedHref(href));
4962
4309
  }, [href]);
4963
4310
  return /* @__PURE__ */ jsxs(ContainerEl, { className: containerClassName, children: [
@@ -5077,7 +4424,7 @@ function FooterSocialNewsletter({
5077
4424
  patternOpacity,
5078
4425
  optixFlowConfig
5079
4426
  }) {
5080
- const renderForm = React8.useMemo(() => {
4427
+ const renderForm = React32.useMemo(() => {
5081
4428
  if (!formEngineSetup) return null;
5082
4429
  const action = {
5083
4430
  variant: "default",
@@ -5366,7 +4713,7 @@ function FooterSimpleCentered({
5366
4713
  ]);
5367
4714
  const bottomLinksContent = useMemo(() => {
5368
4715
  if (!bottomLinks || bottomLinks.length === 0) return null;
5369
- return bottomLinks.map((link, idx) => /* @__PURE__ */ jsx(React8.Fragment, { children: /* @__PURE__ */ jsx(
4716
+ return bottomLinks.map((link, idx) => /* @__PURE__ */ jsx(React32.Fragment, { children: /* @__PURE__ */ jsx(
5370
4717
  Pressable,
5371
4718
  {
5372
4719
  href: link.href,
@@ -6713,7 +6060,7 @@ function FooterNewsletterMinimal({
6713
6060
  buttonAction,
6714
6061
  formSlot
6715
6062
  }) {
6716
- const navLinksContent = React8.useMemo(() => {
6063
+ const navLinksContent = React32.useMemo(() => {
6717
6064
  if (!navLinks || navLinks.length === 0) return null;
6718
6065
  return navLinks.map((item, idx) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
6719
6066
  Pressable,
@@ -6724,7 +6071,7 @@ function FooterNewsletterMinimal({
6724
6071
  }
6725
6072
  ) }, idx));
6726
6073
  }, [navLinks, navLinkClassName]);
6727
- const socialLinksContent = React8.useMemo(() => {
6074
+ const socialLinksContent = React32.useMemo(() => {
6728
6075
  if (!socialLinks || socialLinks.length === 0) return null;
6729
6076
  return socialLinks.map((item, idx) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
6730
6077
  SocialLinkIcon,
@@ -6740,7 +6087,7 @@ function FooterNewsletterMinimal({
6740
6087
  }
6741
6088
  ) }, idx));
6742
6089
  }, [socialLinks, socialLinkClassName]);
6743
- const footerLinksContent = React8.useMemo(() => {
6090
+ const footerLinksContent = React32.useMemo(() => {
6744
6091
  if (!footerLinks || footerLinks.length === 0) return null;
6745
6092
  return footerLinks.map((item) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
6746
6093
  Pressable,
@@ -6754,7 +6101,7 @@ function FooterNewsletterMinimal({
6754
6101
  }
6755
6102
  ) }, item.label));
6756
6103
  }, [footerLinks, footerLinkClassName]);
6757
- const renderForm = React8.useMemo(() => {
6104
+ const renderForm = React32.useMemo(() => {
6758
6105
  if (formSlot) return formSlot;
6759
6106
  if (!formEngineSetup) return null;
6760
6107
  const defaultButtonAction = {
@@ -9394,7 +8741,7 @@ function AboutInteractiveTabs({
9394
8741
  pattern,
9395
8742
  patternOpacity
9396
8743
  }) {
9397
- const [activeTab, setActiveTab] = React8.useState(tabs?.[0]?.id ?? "");
8744
+ const [activeTab, setActiveTab] = React32.useState(tabs?.[0]?.id ?? "");
9398
8745
  const activeContent = useMemo(() => {
9399
8746
  return tabs?.find((tab) => tab.id === activeTab)?.content;
9400
8747
  }, [tabs, activeTab]);
@@ -9543,7 +8890,7 @@ function AboutMissionDualImage({
9543
8890
  pattern,
9544
8891
  patternOpacity
9545
8892
  }) {
9546
- const renderTextContent = React8.useCallback(
8893
+ const renderTextContent = React32.useCallback(
9547
8894
  (primaryHeading, primaryClassName, secondaryContent, secondaryClassname) => {
9548
8895
  if (!primaryHeading || !secondaryContent) {
9549
8896
  return null;
@@ -12233,7 +11580,7 @@ function CtaAppDownloadNewsletter({
12233
11580
  buttonAction,
12234
11581
  formSlot
12235
11582
  }) {
12236
- const renderForm = React8.useMemo(() => {
11583
+ const renderForm = React32.useMemo(() => {
12237
11584
  if (formSlot) return formSlot;
12238
11585
  if (!formEngineSetup) return null;
12239
11586
  const defaultButtonAction = {
@@ -12266,7 +11613,7 @@ function CtaAppDownloadNewsletter({
12266
11613
  }
12267
11614
  );
12268
11615
  }, [formSlot, formEngineSetup, buttonAction, formClassName]);
12269
- const appActionsContent = React8.useMemo(() => {
11616
+ const appActionsContent = React32.useMemo(() => {
12270
11617
  if (appActionsSlot) return appActionsSlot;
12271
11618
  if (!appActions || appActions.length === 0) return null;
12272
11619
  return /* @__PURE__ */ jsx(
@@ -12407,7 +11754,7 @@ function CtaNewsletterFeatures({
12407
11754
  formEngineSetup,
12408
11755
  buttonAction
12409
11756
  }) {
12410
- const renderForm = React8.useMemo(() => {
11757
+ const renderForm = React32.useMemo(() => {
12411
11758
  if (formSlot) return formSlot;
12412
11759
  if (!formEngineSetup) return null;
12413
11760
  const defaultButtonAction = {
@@ -12440,7 +11787,7 @@ function CtaNewsletterFeatures({
12440
11787
  }
12441
11788
  );
12442
11789
  }, [formSlot, formEngineSetup, buttonAction, formClassName]);
12443
- const featuresContent = React8.useMemo(() => {
11790
+ const featuresContent = React32.useMemo(() => {
12444
11791
  if (featuresSlot) return featuresSlot;
12445
11792
  if (!features || features.length === 0) return null;
12446
11793
  return /* @__PURE__ */ jsx(
@@ -13212,7 +12559,7 @@ function CtaVideoBackgroundHero({
13212
12559
  pattern,
13213
12560
  patternOpacity
13214
12561
  }) {
13215
- const [isModalOpen, setIsModalOpen] = React8.useState(false);
12562
+ const [isModalOpen, setIsModalOpen] = React32.useState(false);
13216
12563
  const handleOpenModal = () => {
13217
12564
  setIsModalOpen(true);
13218
12565
  onModalOpen?.();
@@ -13400,7 +12747,7 @@ function CtaWorkflowTabs({
13400
12747
  patternOpacity,
13401
12748
  optixFlowConfig
13402
12749
  }) {
13403
- const [activeTab, setActiveTab] = React8.useState(tabs?.[0]?.id || "");
12750
+ const [activeTab, setActiveTab] = React32.useState(tabs?.[0]?.id || "");
13404
12751
  const activeTabData = tabs?.find((tab) => tab.id === activeTab) || tabs?.[0];
13405
12752
  const actionsContent = useMemo(() => {
13406
12753
  if (actionsSlot) return actionsSlot;
@@ -14008,7 +13355,7 @@ function ContactFloatingBanner({
14008
13355
  pattern,
14009
13356
  patternOpacity
14010
13357
  }) {
14011
- const actionsContent = React8.useMemo(() => {
13358
+ const actionsContent = React32.useMemo(() => {
14012
13359
  if (actionsSlot) return actionsSlot;
14013
13360
  if (actions && actions.length > 0) {
14014
13361
  return actions.map((action, index) => {
@@ -14352,7 +13699,7 @@ function ContactCard({
14352
13699
  pattern,
14353
13700
  patternOpacity
14354
13701
  }) {
14355
- const contactOptionsContent = React8.useMemo(() => {
13702
+ const contactOptionsContent = React32.useMemo(() => {
14356
13703
  if (contactOptionsSlot) return contactOptionsSlot;
14357
13704
  if (contactOptions && contactOptions.length > 0) {
14358
13705
  return contactOptions.map((option, key) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
@@ -14376,7 +13723,7 @@ function ContactCard({
14376
13723
  }
14377
13724
  return null;
14378
13725
  }, [contactOptionsSlot, contactOptions]);
14379
- const socialLinksContent = React8.useMemo(() => {
13726
+ const socialLinksContent = React32.useMemo(() => {
14380
13727
  if (socialLinksSlot) return socialLinksSlot;
14381
13728
  if (socialLinks && socialLinks.length > 0) {
14382
13729
  return socialLinks.map((social, key) => /* @__PURE__ */ jsx(
@@ -15283,7 +14630,7 @@ function ContactDark({
15283
14630
  pattern,
15284
14631
  patternOpacity
15285
14632
  }) {
15286
- const contactOptionsContent = React8.useMemo(() => {
14633
+ const contactOptionsContent = React32.useMemo(() => {
15287
14634
  if (contactOptionsSlot) return contactOptionsSlot;
15288
14635
  if (contactOptions && contactOptions.length > 0) {
15289
14636
  return contactOptions.map((option, key) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
@@ -15307,7 +14654,7 @@ function ContactDark({
15307
14654
  }
15308
14655
  return null;
15309
14656
  }, [contactOptionsSlot, contactOptions]);
15310
- const socialLinksContent = React8.useMemo(() => {
14657
+ const socialLinksContent = React32.useMemo(() => {
15311
14658
  if (socialLinksSlot) return socialLinksSlot;
15312
14659
  if (socialLinks && socialLinks.length > 0) {
15313
14660
  return socialLinks.map((social, key) => /* @__PURE__ */ jsx(
@@ -16602,7 +15949,7 @@ function ContactImage({
16602
15949
  description,
16603
15950
  descriptionClassName
16604
15951
  ]);
16605
- const contactOverlaysContent = React8.useMemo(() => {
15952
+ const contactOverlaysContent = React32.useMemo(() => {
16606
15953
  if (contactOverlaysSlot) return contactOverlaysSlot;
16607
15954
  if (!contactOverlays || contactOverlays.length === 0) return null;
16608
15955
  return /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-3", contactOverlaysClassName), children: contactOverlays.map((item, index) => {
@@ -17234,7 +16581,7 @@ function ContactMap({
17234
16581
  mapProps,
17235
16582
  optixFlowConfig
17236
16583
  }) {
17237
- const renderForm = React8.useMemo(() => {
16584
+ const renderForm = React32.useMemo(() => {
17238
16585
  if (!formEngineSetup) {
17239
16586
  return null;
17240
16587
  }
@@ -17247,13 +16594,16 @@ function ContactMap({
17247
16594
  }
17248
16595
  );
17249
16596
  }, [formEngineSetup]);
17250
- const resolvedMapProps = React8.useMemo(() => {
16597
+ const resolvedMapProps = React32.useMemo(() => {
17251
16598
  return {
17252
16599
  mapWrapperClassName: "h-[420px] md:h-[520px]",
17253
16600
  panelPosition: "top-left",
17254
16601
  ...mapProps,
17255
16602
  className: cn("h-full w-full", mapClassName, mapProps?.className),
17256
- optixFlowConfig
16603
+ optixFlowConfig,
16604
+ // Provide icon and image components for rich marker panels
16605
+ IconComponent: DynamicIcon,
16606
+ ImgComponent: Img
17257
16607
  };
17258
16608
  }, [mapClassName, mapProps, optixFlowConfig]);
17259
16609
  return /* @__PURE__ */ jsx(
@@ -17842,13 +17192,13 @@ function ContactPhotography({
17842
17192
  }
17843
17193
  return items;
17844
17194
  }, [heading, headingClassName, description, descriptionClassName]);
17845
- const desktopOrder = React8.useMemo(() => {
17195
+ const desktopOrder = React32.useMemo(() => {
17846
17196
  return directionConfig.desktop === "mediaRight" ? "lg:flex-row" : "lg:flex-row-reverse";
17847
17197
  }, [directionConfig?.desktop]);
17848
- const mobileOrder = React8.useMemo(() => {
17198
+ const mobileOrder = React32.useMemo(() => {
17849
17199
  return directionConfig?.mobile === "mediaTop" ? "flex-col" : "flex-col-reverse";
17850
17200
  }, [directionConfig?.mobile]);
17851
- const imageArea = React8.useMemo(() => {
17201
+ const imageArea = React32.useMemo(() => {
17852
17202
  if (!image?.src) {
17853
17203
  return null;
17854
17204
  }
@@ -19834,16 +19184,16 @@ function CarouselAnimatedSections({
19834
19184
  pattern = "diagonalCrossBasic",
19835
19185
  patternOpacity = 0.033
19836
19186
  }) {
19837
- const [currentIndex, setCurrentIndex] = React8.useState(0);
19838
- const [direction, setDirection] = React8.useState(0);
19839
- const [isAnimating, setIsAnimating] = React8.useState(false);
19840
- const goToNext = React8.useCallback(() => {
19187
+ const [currentIndex, setCurrentIndex] = React32.useState(0);
19188
+ const [direction, setDirection] = React32.useState(0);
19189
+ const [isAnimating, setIsAnimating] = React32.useState(false);
19190
+ const goToNext = React32.useCallback(() => {
19841
19191
  if (isAnimating || currentIndex >= (sections?.length ?? 0) - 1) return;
19842
19192
  setIsAnimating(true);
19843
19193
  setDirection(1);
19844
19194
  setCurrentIndex((prev) => prev + 1);
19845
19195
  }, [currentIndex, isAnimating, sections?.length]);
19846
- const goToPrev = React8.useCallback(() => {
19196
+ const goToPrev = React32.useCallback(() => {
19847
19197
  if (isAnimating || currentIndex <= 0) return;
19848
19198
  setIsAnimating(true);
19849
19199
  setDirection(-1);
@@ -19855,7 +19205,7 @@ function CarouselAnimatedSections({
19855
19205
  setDirection(index > currentIndex ? 1 : -1);
19856
19206
  setCurrentIndex(index);
19857
19207
  };
19858
- React8.useEffect(() => {
19208
+ React32.useEffect(() => {
19859
19209
  const handleKeyDown = (e) => {
19860
19210
  if (e.key === "ArrowDown" || e.key === "ArrowRight") {
19861
19211
  goToNext();
@@ -19881,7 +19231,7 @@ function CarouselAnimatedSections({
19881
19231
  })
19882
19232
  };
19883
19233
  const currentSection = sections?.[currentIndex];
19884
- const actionElements = React8.useMemo(() => {
19234
+ const actionElements = React32.useMemo(() => {
19885
19235
  if (actionsSlot) return actionsSlot;
19886
19236
  if (actions && actions.length > 0) {
19887
19237
  return actions.map((action, index) => /* @__PURE__ */ jsxs(
@@ -20131,11 +19481,11 @@ function CarouselAutoProgressSlides({
20131
19481
  pattern,
20132
19482
  patternOpacity
20133
19483
  }) {
20134
- const [currentIndex, setCurrentIndex] = React8.useState(0);
19484
+ const [currentIndex, setCurrentIndex] = React32.useState(0);
20135
19485
  const progress = useMotionValue(100);
20136
- const [direction, setDirection] = React8.useState(1);
19486
+ const [direction, setDirection] = React32.useState(1);
20137
19487
  const clipPath = useMotionTemplate`inset(0 ${progress}% 0 0 round 10px)`;
20138
- React8.useEffect(() => {
19488
+ React32.useEffect(() => {
20139
19489
  const interval = setInterval(() => {
20140
19490
  const currentProgress = progress.get();
20141
19491
  if (currentProgress > 0) {
@@ -20314,22 +19664,22 @@ function CarouselAutoProgressSlides({
20314
19664
  );
20315
19665
  }
20316
19666
  function useDotButton(emblaApi) {
20317
- const [selectedIndex, setSelectedIndex] = React8.useState(0);
20318
- const [scrollSnaps, setScrollSnaps] = React8.useState([]);
20319
- const onDotButtonClick = React8.useCallback(
19667
+ const [selectedIndex, setSelectedIndex] = React32.useState(0);
19668
+ const [scrollSnaps, setScrollSnaps] = React32.useState([]);
19669
+ const onDotButtonClick = React32.useCallback(
20320
19670
  (index) => {
20321
19671
  if (!emblaApi) return;
20322
19672
  emblaApi.scrollTo(index);
20323
19673
  },
20324
19674
  [emblaApi]
20325
19675
  );
20326
- const onInit = React8.useCallback((api) => {
19676
+ const onInit = React32.useCallback((api) => {
20327
19677
  setScrollSnaps(api.scrollSnapList());
20328
19678
  }, []);
20329
- const onSelect = React8.useCallback((api) => {
19679
+ const onSelect = React32.useCallback((api) => {
20330
19680
  setSelectedIndex(api.selectedScrollSnap());
20331
19681
  }, []);
20332
- React8.useEffect(() => {
19682
+ React32.useEffect(() => {
20333
19683
  if (!emblaApi) return;
20334
19684
  onInit(emblaApi);
20335
19685
  onSelect(emblaApi);
@@ -20338,8 +19688,8 @@ function useDotButton(emblaApi) {
20338
19688
  return { selectedIndex, scrollSnaps, onDotButtonClick };
20339
19689
  }
20340
19690
  function useAutoplay(emblaApi) {
20341
- const [autoplayIsPlaying, setAutoplayIsPlaying] = React8.useState(false);
20342
- const onAutoplayButtonClick = React8.useCallback(
19691
+ const [autoplayIsPlaying, setAutoplayIsPlaying] = React32.useState(false);
19692
+ const onAutoplayButtonClick = React32.useCallback(
20343
19693
  (callback) => {
20344
19694
  const autoplay = emblaApi?.plugins()?.autoplay;
20345
19695
  if (!autoplay) return;
@@ -20349,13 +19699,13 @@ function useAutoplay(emblaApi) {
20349
19699
  },
20350
19700
  [emblaApi]
20351
19701
  );
20352
- const toggleAutoplay = React8.useCallback(() => {
19702
+ const toggleAutoplay = React32.useCallback(() => {
20353
19703
  const autoplay = emblaApi?.plugins()?.autoplay;
20354
19704
  if (!autoplay) return;
20355
19705
  const playOrStop = autoplay.isPlaying() ? autoplay.stop : autoplay.play;
20356
19706
  playOrStop();
20357
19707
  }, [emblaApi]);
20358
- React8.useEffect(() => {
19708
+ React32.useEffect(() => {
20359
19709
  const autoplay = emblaApi?.plugins()?.autoplay;
20360
19710
  if (!autoplay) return;
20361
19711
  setAutoplayIsPlaying(autoplay.isPlaying());
@@ -20364,11 +19714,11 @@ function useAutoplay(emblaApi) {
20364
19714
  return { autoplayIsPlaying, toggleAutoplay, onAutoplayButtonClick };
20365
19715
  }
20366
19716
  function useAutoplayProgress(emblaApi, progressNode) {
20367
- const [showAutoplayProgress, setShowAutoplayProgress] = React8.useState(false);
20368
- const animationName = React8.useRef("");
20369
- const timeoutId = React8.useRef(0);
20370
- const rafId = React8.useRef(0);
20371
- const startProgress = React8.useCallback(
19717
+ const [showAutoplayProgress, setShowAutoplayProgress] = React32.useState(false);
19718
+ const animationName = React32.useRef("");
19719
+ const timeoutId = React32.useRef(0);
19720
+ const rafId = React32.useRef(0);
19721
+ const startProgress = React32.useCallback(
20372
19722
  (timeUntilNext) => {
20373
19723
  const node = progressNode.current;
20374
19724
  if (!node || timeUntilNext === null) return;
@@ -20388,12 +19738,12 @@ function useAutoplayProgress(emblaApi, progressNode) {
20388
19738
  },
20389
19739
  [progressNode]
20390
19740
  );
20391
- React8.useEffect(() => {
19741
+ React32.useEffect(() => {
20392
19742
  const autoplay = emblaApi?.plugins()?.autoplay;
20393
19743
  if (!autoplay) return;
20394
19744
  emblaApi.on("autoplay:timerset", () => startProgress(autoplay.timeUntilNext())).on("autoplay:timerstopped", () => setShowAutoplayProgress(false));
20395
19745
  }, [emblaApi, startProgress]);
20396
- React8.useEffect(() => {
19746
+ React32.useEffect(() => {
20397
19747
  return () => {
20398
19748
  cancelAnimationFrame(rafId.current);
20399
19749
  clearTimeout(timeoutId.current);
@@ -20420,7 +19770,7 @@ function CarouselAutoplayProgress({
20420
19770
  pattern,
20421
19771
  patternOpacity
20422
19772
  }) {
20423
- const progressNode = React8.useRef(null);
19773
+ const progressNode = React32.useRef(null);
20424
19774
  const [emblaRef, emblaApi] = useEmblaCarousel(options, [
20425
19775
  Autoplay({ playOnInit: true, delay: autoplayDelay })
20426
19776
  ]);
@@ -20535,28 +19885,31 @@ function CarouselFeatureBadge({
20535
19885
  carouselClassName,
20536
19886
  carouselItemClassName,
20537
19887
  optixFlowConfig,
19888
+ actions,
19889
+ actionsSlot,
19890
+ actionsClassName,
20538
19891
  background,
20539
- spacing,
19892
+ spacing = "none",
20540
19893
  pattern,
20541
19894
  patternOpacity,
20542
19895
  slideLayoutVariant = "square",
20543
19896
  containerMaxWidth = "2xl"
20544
19897
  }) {
20545
19898
  const [emblaRef, emblaApi] = useEmblaCarousel();
20546
- const [canScrollPrev, setCanScrollPrev] = React8.useState(false);
20547
- const [canScrollNext, setCanScrollNext] = React8.useState(false);
20548
- const scrollPrev = React8.useCallback(() => {
19899
+ const [canScrollPrev, setCanScrollPrev] = React32.useState(false);
19900
+ const [canScrollNext, setCanScrollNext] = React32.useState(false);
19901
+ const scrollPrev = React32.useCallback(() => {
20549
19902
  emblaApi?.scrollPrev();
20550
19903
  }, [emblaApi]);
20551
- const scrollNext = React8.useCallback(() => {
19904
+ const scrollNext = React32.useCallback(() => {
20552
19905
  emblaApi?.scrollNext();
20553
19906
  }, [emblaApi]);
20554
- const onSelect = React8.useCallback(() => {
19907
+ const onSelect = React32.useCallback(() => {
20555
19908
  if (!emblaApi) return;
20556
19909
  setCanScrollPrev(emblaApi.canScrollPrev());
20557
19910
  setCanScrollNext(emblaApi.canScrollNext());
20558
19911
  }, [emblaApi]);
20559
- React8.useEffect(() => {
19912
+ React32.useEffect(() => {
20560
19913
  if (!emblaApi) return;
20561
19914
  onSelect();
20562
19915
  emblaApi.on("reInit", onSelect);
@@ -20599,12 +19952,46 @@ function CarouselFeatureBadge({
20599
19952
  index
20600
19953
  ));
20601
19954
  };
19955
+ const headerItems = React32.useMemo(() => {
19956
+ const items2 = [];
19957
+ if (heading) {
19958
+ if (typeof heading === "string") {
19959
+ items2.push({
19960
+ _type: "text",
19961
+ as: "h2",
19962
+ className: cn(
19963
+ "text-left text-2xl font-semibold md:text-4xl lg:max-w-xl lg:text-6xl text-pretty",
19964
+ headingClassName
19965
+ ),
19966
+ children: heading
19967
+ });
19968
+ } else {
19969
+ items2.push(heading);
19970
+ }
19971
+ }
19972
+ if (description) {
19973
+ if (typeof description === "string") {
19974
+ items2.push({
19975
+ _type: "text",
19976
+ as: "p",
19977
+ className: cn(
19978
+ "max-w-full text-left text-lg leading-snug lg:max-w-sm text-balance text-lg",
19979
+ descriptionClassName
19980
+ ),
19981
+ children: description
19982
+ });
19983
+ } else {
19984
+ items2.push(description);
19985
+ }
19986
+ }
19987
+ return items2;
19988
+ }, [heading, headingClassName, description, descriptionClassName]);
20602
19989
  return /* @__PURE__ */ jsx(
20603
19990
  Section,
20604
19991
  {
20605
19992
  background,
20606
19993
  spacing,
20607
- className: cn(className),
19994
+ className,
20608
19995
  pattern,
20609
19996
  patternOpacity,
20610
19997
  containerMaxWidth,
@@ -20614,29 +20001,16 @@ function CarouselFeatureBadge({
20614
20001
  {
20615
20002
  className: cn("flex flex-col items-start gap-4", contentClassName),
20616
20003
  children: [
20617
- badge && /* @__PURE__ */ jsx("div", { className: badgeClassName, children: typeof badge === "string" ? /* @__PURE__ */ jsx(Badge, { children: badge }) : badge }),
20618
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
20619
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
20620
- "h2",
20621
- {
20622
- className: cn(
20623
- "text-left text-xl font-semibold md:text-3xl lg:max-w-xl lg:text-4xl",
20624
- headingClassName
20625
- ),
20626
- children: heading
20627
- }
20628
- ) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
20629
- description && (typeof description === "string" ? /* @__PURE__ */ jsx(
20630
- "p",
20631
- {
20632
- className: cn(
20633
- "max-w-xl text-left text-lg leading-snug lg:max-w-sm",
20634
- descriptionClassName
20635
- ),
20636
- children: description
20637
- }
20638
- ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
20639
- ] })
20004
+ badge && (typeof badge === "string" ? /* @__PURE__ */ jsx(Badge, { className: badgeClassName, children: badge }) : badge),
20005
+ /* @__PURE__ */ jsx(ContentGroup, { items: headerItems, className: "flex flex-col gap-2" }),
20006
+ /* @__PURE__ */ jsx(
20007
+ BlockActions,
20008
+ {
20009
+ actions,
20010
+ actionsSlot,
20011
+ actionsClassName
20012
+ }
20013
+ )
20640
20014
  ]
20641
20015
  }
20642
20016
  ),
@@ -20676,10 +20050,10 @@ function CarouselFullscreenScrollFx({
20676
20050
  pattern = "diagonalCrossBasic",
20677
20051
  patternOpacity = 0.033
20678
20052
  }) {
20679
- const containerRef = React8.useRef(null);
20680
- const scrollContainerRef = React8.useRef(null);
20681
- const [activeIndex, setActiveIndex] = React8.useState(0);
20682
- React8.useEffect(() => {
20053
+ const containerRef = React32.useRef(null);
20054
+ const scrollContainerRef = React32.useRef(null);
20055
+ const [activeIndex, setActiveIndex] = React32.useState(0);
20056
+ React32.useEffect(() => {
20683
20057
  const scrollContainer = scrollContainerRef.current;
20684
20058
  if (!scrollContainer || !slides?.length) return;
20685
20059
  const handleScroll = () => {
@@ -20691,7 +20065,7 @@ function CarouselFullscreenScrollFx({
20691
20065
  scrollContainer.addEventListener("scroll", handleScroll);
20692
20066
  return () => scrollContainer.removeEventListener("scroll", handleScroll);
20693
20067
  }, [slides]);
20694
- const scrollToSlide = React8.useCallback((index) => {
20068
+ const scrollToSlide = React32.useCallback((index) => {
20695
20069
  const scrollContainer = scrollContainerRef.current;
20696
20070
  if (!scrollContainer) return;
20697
20071
  const slideHeight = scrollContainer.clientHeight;
@@ -20774,7 +20148,7 @@ function CarouselFullscreenScrollFx({
20774
20148
  className: "flex h-screen flex-col snap-y snap-mandatory overflow-x-hidden overflow-y-auto scroll-smooth",
20775
20149
  style: { scrollbarWidth: "none", msOverflowStyle: "none" },
20776
20150
  children: slidesSlot ? slidesSlot : slides?.map((slide, index) => {
20777
- const renderActions = React8.useMemo(() => {
20151
+ const renderActions = React32.useMemo(() => {
20778
20152
  if (!slide.actions || slide.actions.length === 0) return null;
20779
20153
  return slide.actions.map((action, actionIndex) => {
20780
20154
  const {
@@ -20908,25 +20282,25 @@ function CarouselGalleryThumbnails({
20908
20282
  slideMediaBrightness,
20909
20283
  slideMediaOverlayIntensity = "default"
20910
20284
  }) {
20911
- const [currentIndex, setCurrentIndex] = React8.useState(0);
20912
- const prevSlide = React8.useCallback(() => {
20285
+ const [currentIndex, setCurrentIndex] = React32.useState(0);
20286
+ const prevSlide = React32.useCallback(() => {
20913
20287
  setCurrentIndex(
20914
20288
  (prev) => prev === 0 ? (images?.length ?? 0) - 1 : prev - 1
20915
20289
  );
20916
20290
  }, [images?.length]);
20917
- const nextSlide = React8.useCallback(() => {
20291
+ const nextSlide = React32.useCallback(() => {
20918
20292
  setCurrentIndex(
20919
20293
  (prev) => prev === (images?.length ?? 0) - 1 ? 0 : prev + 1
20920
20294
  );
20921
20295
  }, [images?.length]);
20922
- React8.useEffect(() => {
20296
+ React32.useEffect(() => {
20923
20297
  if (!autoPlay) return;
20924
20298
  const interval = setInterval(() => {
20925
20299
  nextSlide();
20926
20300
  }, autoPlayInterval);
20927
20301
  return () => clearInterval(interval);
20928
20302
  }, [currentIndex, autoPlay, autoPlayInterval, nextSlide]);
20929
- React8.useEffect(() => {
20303
+ React32.useEffect(() => {
20930
20304
  const handleKeyDown = (e) => {
20931
20305
  if (e.key === "ArrowRight") {
20932
20306
  nextSlide();
@@ -21073,9 +20447,9 @@ function CarouselHorizontalCards({
21073
20447
  pattern,
21074
20448
  patternOpacity
21075
20449
  }) {
21076
- const carouselRef = React8.useRef(null);
21077
- const [isAtStart, setIsAtStart] = React8.useState(true);
21078
- const [isAtEnd, setIsAtEnd] = React8.useState(false);
20450
+ const carouselRef = React32.useRef(null);
20451
+ const [isAtStart, setIsAtStart] = React32.useState(true);
20452
+ const [isAtEnd, setIsAtEnd] = React32.useState(false);
21079
20453
  const scrollLeft = () => {
21080
20454
  if (carouselRef.current) {
21081
20455
  carouselRef.current.scrollBy({ left: -300, behavior: "smooth" });
@@ -21086,7 +20460,7 @@ function CarouselHorizontalCards({
21086
20460
  carouselRef.current.scrollBy({ left: 300, behavior: "smooth" });
21087
20461
  }
21088
20462
  };
21089
- React8.useEffect(() => {
20463
+ React32.useEffect(() => {
21090
20464
  const checkScrollPosition = () => {
21091
20465
  if (carouselRef.current) {
21092
20466
  const { scrollLeft: scrollLeft2, scrollWidth, clientWidth } = carouselRef.current;
@@ -21286,13 +20660,13 @@ function CarouselImageHero({
21286
20660
  pattern,
21287
20661
  patternOpacity
21288
20662
  }) {
21289
- const hasImages = React8.useMemo(() => {
20663
+ const hasImages = React32.useMemo(() => {
21290
20664
  return images && images?.length > 0;
21291
20665
  }, [images]);
21292
- const [currentImageIndex, setCurrentImageIndex] = React8.useState(0);
20666
+ const [currentImageIndex, setCurrentImageIndex] = React32.useState(0);
21293
20667
  const progress = useMotionValue(100);
21294
20668
  const clipPath = useMotionTemplate`inset(0 ${progress}% 0 0 round 10px)`;
21295
- React8.useEffect(() => {
20669
+ React32.useEffect(() => {
21296
20670
  if (!hasImages || (images?.length ?? 0) < 2) return;
21297
20671
  const tickInterval = autoPlayInterval / 100;
21298
20672
  const interval = setInterval(() => {
@@ -21314,19 +20688,19 @@ function CarouselImageHero({
21314
20688
  autoPlayInterval,
21315
20689
  hasImages
21316
20690
  ]);
21317
- const handlePrev = React8.useCallback(() => {
20691
+ const handlePrev = React32.useCallback(() => {
21318
20692
  progress.set(100);
21319
20693
  setCurrentImageIndex(
21320
20694
  (prevIndex) => prevIndex > 0 ? prevIndex - 1 : (images?.length ?? 1) - 1
21321
20695
  );
21322
20696
  }, [images?.length, progress]);
21323
- const handleNext = React8.useCallback(() => {
20697
+ const handleNext = React32.useCallback(() => {
21324
20698
  progress.set(100);
21325
20699
  setCurrentImageIndex(
21326
20700
  (prevIndex) => prevIndex < (images?.length ?? 0) - 1 ? prevIndex + 1 : 0
21327
20701
  );
21328
20702
  }, [images?.length, progress]);
21329
- const handleDotClick = React8.useCallback(
20703
+ const handleDotClick = React32.useCallback(
21330
20704
  (index) => {
21331
20705
  progress.set(100);
21332
20706
  setCurrentImageIndex(index);
@@ -21503,8 +20877,8 @@ function CarouselMultiStepShowcase({
21503
20877
  pattern,
21504
20878
  patternOpacity
21505
20879
  }) {
21506
- const [activeStep, setActiveStep] = React8.useState(0);
21507
- const [direction, setDirection] = React8.useState(0);
20880
+ const [activeStep, setActiveStep] = React32.useState(0);
20881
+ const [direction, setDirection] = React32.useState(0);
21508
20882
  const goToStep = (index) => {
21509
20883
  setDirection(index > activeStep ? 1 : -1);
21510
20884
  setActiveStep(index);
@@ -21797,9 +21171,9 @@ function CarouselPortfolioHero({
21797
21171
  slideMediaBrightness,
21798
21172
  slideMediaOverlayIntensity = "high"
21799
21173
  }) {
21800
- const [currentIndex, setCurrentIndex] = React8.useState(0);
21801
- const intervalRef = React8.useRef(null);
21802
- const resetInterval = React8.useCallback(() => {
21174
+ const [currentIndex, setCurrentIndex] = React32.useState(0);
21175
+ const intervalRef = React32.useRef(null);
21176
+ const resetInterval = React32.useCallback(() => {
21803
21177
  if (intervalRef.current) {
21804
21178
  clearInterval(intervalRef.current);
21805
21179
  }
@@ -21807,17 +21181,17 @@ function CarouselPortfolioHero({
21807
21181
  setCurrentIndex((prevIndex) => (prevIndex + 1) % (slides?.length ?? 1));
21808
21182
  }, autoPlayInterval);
21809
21183
  }, [autoPlayInterval, slides?.length]);
21810
- const goToNext = React8.useCallback(() => {
21184
+ const goToNext = React32.useCallback(() => {
21811
21185
  setCurrentIndex((prevIndex) => (prevIndex + 1) % (slides?.length ?? 1));
21812
21186
  resetInterval();
21813
21187
  }, [slides?.length, resetInterval]);
21814
- const goToPrev = React8.useCallback(() => {
21188
+ const goToPrev = React32.useCallback(() => {
21815
21189
  setCurrentIndex(
21816
21190
  (prevIndex) => (prevIndex - 1 + (slides?.length ?? 1)) % (slides?.length ?? 1)
21817
21191
  );
21818
21192
  resetInterval();
21819
21193
  }, [slides?.length, resetInterval]);
21820
- React8.useEffect(() => {
21194
+ React32.useEffect(() => {
21821
21195
  resetInterval();
21822
21196
  return () => {
21823
21197
  if (intervalRef.current) {
@@ -21988,9 +21362,9 @@ function CarouselProductFeatureShowcase({
21988
21362
  pattern,
21989
21363
  patternOpacity
21990
21364
  }) {
21991
- const [activeIndex, setActiveIndex] = React8.useState(0);
21992
- const [activeColorIndex, setActiveColorIndex] = React8.useState(0);
21993
- const [direction, setDirection] = React8.useState(0);
21365
+ const [activeIndex, setActiveIndex] = React32.useState(0);
21366
+ const [activeColorIndex, setActiveColorIndex] = React32.useState(0);
21367
+ const [direction, setDirection] = React32.useState(0);
21994
21368
  const activeFeature = features?.[activeIndex];
21995
21369
  const goToNext = () => {
21996
21370
  setDirection(1);
@@ -22210,9 +21584,9 @@ function CarouselProductFeatureShowcase({
22210
21584
  }
22211
21585
  );
22212
21586
  }
22213
- var ProgressSliderContext = React8.createContext(void 0);
21587
+ var ProgressSliderContext = React32.createContext(void 0);
22214
21588
  function useProgressSliderContext() {
22215
- const context = React8.useContext(ProgressSliderContext);
21589
+ const context = React32.useContext(ProgressSliderContext);
22216
21590
  if (!context) {
22217
21591
  throw new Error(
22218
21592
  "useProgressSliderContext must be used within a ProgressSlider"
@@ -22298,19 +21672,19 @@ function CarouselProgressSlider({
22298
21672
  pattern,
22299
21673
  patternOpacity
22300
21674
  }) {
22301
- const [active, setActive] = React8.useState(slides?.[0]?.id ?? "");
22302
- const [progress, setProgress] = React8.useState(0);
22303
- const [isFastForward, setIsFastForward] = React8.useState(false);
22304
- const [isPaused, setIsPaused] = React8.useState(false);
22305
- const frame = React8.useRef(0);
22306
- const firstFrameTime = React8.useRef(performance.now());
22307
- const targetValue = React8.useRef(null);
22308
- const pausedProgress = React8.useRef(0);
22309
- const sliderValues = React8.useMemo(
21675
+ const [active, setActive] = React32.useState(slides?.[0]?.id ?? "");
21676
+ const [progress, setProgress] = React32.useState(0);
21677
+ const [isFastForward, setIsFastForward] = React32.useState(false);
21678
+ const [isPaused, setIsPaused] = React32.useState(false);
21679
+ const frame = React32.useRef(0);
21680
+ const firstFrameTime = React32.useRef(performance.now());
21681
+ const targetValue = React32.useRef(null);
21682
+ const pausedProgress = React32.useRef(0);
21683
+ const sliderValues = React32.useMemo(
22310
21684
  () => slides?.map((slide) => slide.id),
22311
21685
  [slides]
22312
21686
  );
22313
- React8.useEffect(() => {
21687
+ React32.useEffect(() => {
22314
21688
  if ((sliderValues?.length ?? 0) > 0 && !isPaused) {
22315
21689
  firstFrameTime.current = performance.now();
22316
21690
  if (pausedProgress.current > 0) {
@@ -22476,11 +21850,11 @@ function CarouselScrollingFeatureShowcase({
22476
21850
  patternOpacity,
22477
21851
  patternClassName
22478
21852
  }) {
22479
- const [activeFeature, setActiveFeature] = React8.useState(
21853
+ const [activeFeature, setActiveFeature] = React32.useState(
22480
21854
  features?.[0]?.id ?? ""
22481
21855
  );
22482
- const featureRefs = React8.useRef(/* @__PURE__ */ new Map());
22483
- React8.useEffect(() => {
21856
+ const featureRefs = React32.useRef(/* @__PURE__ */ new Map());
21857
+ React32.useEffect(() => {
22484
21858
  if (!features || features.length === 0) return;
22485
21859
  const observerOptions = {
22486
21860
  root: null,
@@ -23397,9 +22771,9 @@ function FeatureChecklistImage({
23397
22771
  }
23398
22772
  );
23399
22773
  }
23400
- var CarouselContext = React8.createContext(null);
22774
+ var CarouselContext = React32.createContext(null);
23401
22775
  function useCarousel() {
23402
- const context = React8.useContext(CarouselContext);
22776
+ const context = React32.useContext(CarouselContext);
23403
22777
  if (!context) {
23404
22778
  throw new Error("useCarousel must be used within a <Carousel />");
23405
22779
  }
@@ -23421,20 +22795,20 @@ function Carousel({
23421
22795
  },
23422
22796
  plugins
23423
22797
  );
23424
- const [canScrollPrev, setCanScrollPrev] = React8.useState(false);
23425
- const [canScrollNext, setCanScrollNext] = React8.useState(false);
23426
- const onSelect = React8.useCallback((api2) => {
22798
+ const [canScrollPrev, setCanScrollPrev] = React32.useState(false);
22799
+ const [canScrollNext, setCanScrollNext] = React32.useState(false);
22800
+ const onSelect = React32.useCallback((api2) => {
23427
22801
  if (!api2) return;
23428
22802
  setCanScrollPrev(api2.canScrollPrev());
23429
22803
  setCanScrollNext(api2.canScrollNext());
23430
22804
  }, []);
23431
- const scrollPrev = React8.useCallback(() => {
22805
+ const scrollPrev = React32.useCallback(() => {
23432
22806
  api?.scrollPrev();
23433
22807
  }, [api]);
23434
- const scrollNext = React8.useCallback(() => {
22808
+ const scrollNext = React32.useCallback(() => {
23435
22809
  api?.scrollNext();
23436
22810
  }, [api]);
23437
- const handleKeyDown = React8.useCallback(
22811
+ const handleKeyDown = React32.useCallback(
23438
22812
  (event) => {
23439
22813
  if (event.key === "ArrowLeft") {
23440
22814
  event.preventDefault();
@@ -23446,11 +22820,11 @@ function Carousel({
23446
22820
  },
23447
22821
  [scrollPrev, scrollNext]
23448
22822
  );
23449
- React8.useEffect(() => {
22823
+ React32.useEffect(() => {
23450
22824
  if (!api || !setApi) return;
23451
22825
  setApi(api);
23452
22826
  }, [api, setApi]);
23453
- React8.useEffect(() => {
22827
+ React32.useEffect(() => {
23454
22828
  if (!api) return;
23455
22829
  onSelect(api);
23456
22830
  api.on("reInit", onSelect);
@@ -24350,7 +23724,7 @@ function FeatureThreeColumnValues({
24350
23724
  patternOpacity,
24351
23725
  patternClassName
24352
23726
  }) {
24353
- const renderValueIcon = React8.useCallback(
23727
+ const renderValueIcon = React32.useCallback(
24354
23728
  (value) => {
24355
23729
  if (value.icon) return value.icon;
24356
23730
  if (value.iconName)
@@ -24841,7 +24215,7 @@ function FeatureTabbedContentImage({
24841
24215
  patternOpacity,
24842
24216
  patternClassName
24843
24217
  }) {
24844
- const renderFeatures = React8.useCallback(
24218
+ const renderFeatures = React32.useCallback(
24845
24219
  (slide) => {
24846
24220
  if (slide.featuresSlot) return slide.featuresSlot;
24847
24221
  if (!slide.features || slide.features.length === 0) return null;
@@ -24865,7 +24239,7 @@ function FeatureTabbedContentImage({
24865
24239
  },
24866
24240
  []
24867
24241
  );
24868
- const renderActions = React8.useCallback(
24242
+ const renderActions = React32.useCallback(
24869
24243
  (slide) => {
24870
24244
  if (slide.actionsSlot) return slide.actionsSlot;
24871
24245
  if (!slide.actions || slide.actions.length === 0) return null;
@@ -24908,7 +24282,7 @@ function FeatureTabbedContentImage({
24908
24282
  },
24909
24283
  []
24910
24284
  );
24911
- const renderImage = React8.useCallback(
24285
+ const renderImage = React32.useCallback(
24912
24286
  (slide) => {
24913
24287
  if (slide.imageSlot) return slide.imageSlot;
24914
24288
  if (!slide.image) return null;
@@ -25144,7 +24518,7 @@ function FeatureUtilityCardsGrid({
25144
24518
  }
25145
24519
  );
25146
24520
  }, [learnMoreSlot, learnMoreAction, background]);
25147
- const renderUtilityImage = React8.useCallback(
24521
+ const renderUtilityImage = React32.useCallback(
25148
24522
  (utility) => {
25149
24523
  if (utility.imageSlot) return utility.imageSlot;
25150
24524
  if (utility.image) {
@@ -25322,7 +24696,7 @@ function FeatureBentoUtilities({
25322
24696
  patternOpacity,
25323
24697
  patternClassName
25324
24698
  }) {
25325
- const renderCard = React8.useCallback(
24699
+ const renderCard = React32.useCallback(
25326
24700
  (card, index) => {
25327
24701
  const hasImage = card.imageSrc || card.imageSlot;
25328
24702
  const cardClasses = cn(
@@ -25378,7 +24752,7 @@ function FeatureBentoUtilities({
25378
24752
  },
25379
24753
  [optixFlowConfig]
25380
24754
  );
25381
- const renderColumn = React8.useCallback(
24755
+ const renderColumn = React32.useCallback(
25382
24756
  (cards, slot) => {
25383
24757
  if (slot) return slot;
25384
24758
  if (!cards || cards.length === 0) return null;
@@ -26614,7 +25988,7 @@ function FeatureBentoImageGrid({
26614
25988
  patternOpacity,
26615
25989
  patternClassName
26616
25990
  }) {
26617
- const renderItemIcon = React8.useCallback(
25991
+ const renderItemIcon = React32.useCallback(
26618
25992
  (item) => {
26619
25993
  if (item.icon) return item.icon;
26620
25994
  if (item.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: item.iconName, size: 24 });
@@ -26622,7 +25996,7 @@ function FeatureBentoImageGrid({
26622
25996
  },
26623
25997
  []
26624
25998
  );
26625
- const renderItemImage = React8.useCallback(
25999
+ const renderItemImage = React32.useCallback(
26626
26000
  (item, imageClassName) => {
26627
26001
  if (item.imageSlot) return item.imageSlot;
26628
26002
  if (item.imageSrc) {
@@ -26641,7 +26015,7 @@ function FeatureBentoImageGrid({
26641
26015
  },
26642
26016
  [optixFlowConfig]
26643
26017
  );
26644
- const renderLargeCard = React8.useCallback(
26018
+ const renderLargeCard = React32.useCallback(
26645
26019
  (item) => {
26646
26020
  const iconContent = renderItemIcon(item);
26647
26021
  const hasIconBadgeContent = iconContent || item.iconBadge;
@@ -26720,7 +26094,7 @@ function FeatureBentoImageGrid({
26720
26094
  },
26721
26095
  [largeCardClassName, renderItemImage, renderItemIcon]
26722
26096
  );
26723
- const renderSmallCard = React8.useCallback(
26097
+ const renderSmallCard = React32.useCallback(
26724
26098
  (item, index) => {
26725
26099
  const iconContent = renderItemIcon(item);
26726
26100
  const hasIconBadgeContent = iconContent || item.iconBadge;
@@ -27370,7 +26744,7 @@ function FeatureAccordionImage({
27370
26744
  patternOpacity,
27371
26745
  patternClassName
27372
26746
  }) {
27373
- const [activeItem, setActiveItem] = React8.useState(defaultValue || "item-0");
26747
+ const [activeItem, setActiveItem] = React32.useState(defaultValue || "item-0");
27374
26748
  const activeIndex = parseInt(activeItem.replace("item-", ""), 10) || 0;
27375
26749
  const accordionItemsContent = useMemo(() => {
27376
26750
  if (itemsSlot) return itemsSlot;
@@ -27543,7 +26917,7 @@ function FeatureCapabilitiesGrid({
27543
26917
  patternOpacity,
27544
26918
  patternClassName
27545
26919
  }) {
27546
- const renderItemIcon = React8.useCallback(
26920
+ const renderItemIcon = React32.useCallback(
27547
26921
  (item) => {
27548
26922
  if (item.icon) return item.icon;
27549
26923
  if (item.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: item.iconName, size: 20 });
@@ -27695,7 +27069,7 @@ function FeatureCapabilitiesGrid({
27695
27069
  }
27696
27070
  );
27697
27071
  }
27698
- var TeamMemberBackgroundImageCard = React8.forwardRef(
27072
+ var TeamMemberBackgroundImageCard = React32.forwardRef(
27699
27073
  ({ className, imageUrl, imageAlt, children, optixFlowConfig, background, ...props }, ref) => {
27700
27074
  return /* @__PURE__ */ jsxs(
27701
27075
  "div",
@@ -27743,7 +27117,7 @@ function TeamMediaShowcase({
27743
27117
  actionClassName,
27744
27118
  optixFlowConfig
27745
27119
  }) {
27746
- const renderItems = React8.useMemo(() => {
27120
+ const renderItems = React32.useMemo(() => {
27747
27121
  if (itemsSlot) return itemsSlot;
27748
27122
  return items.map((member, idx) => {
27749
27123
  const imageAlt = member.imageAlt || (member.name && typeof member.name === "string" && member.name.trim() !== "" ? member.name : `member-${idx}`);
@@ -27841,7 +27215,7 @@ function TeamSimpleGrid({
27841
27215
  memberNameClassName,
27842
27216
  memberRoleClassName
27843
27217
  }) {
27844
- const renderMembers = React8.useMemo(() => {
27218
+ const renderMembers = React32.useMemo(() => {
27845
27219
  if (membersSlot) return membersSlot;
27846
27220
  if (!members || members.length === 0) return null;
27847
27221
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -28003,7 +27377,7 @@ function FooterBrandLinksContact({
28003
27377
  linkListClassName,
28004
27378
  linkItemClassName
28005
27379
  ]);
28006
- const contactItemsContent = React8.useMemo(() => {
27380
+ const contactItemsContent = React32.useMemo(() => {
28007
27381
  if (!contactItems || contactItems.length === 0) return null;
28008
27382
  return contactItems.map((item, idx) => /* @__PURE__ */ jsxs(
28009
27383
  "div",
@@ -28361,7 +27735,7 @@ function TeamSocialGrid({
28361
27735
  memberRoleClassName,
28362
27736
  socialLinksClassName
28363
27737
  }) {
28364
- const renderMembers = React8.useMemo(() => {
27738
+ const renderMembers = React32.useMemo(() => {
28365
27739
  if (membersSlot) return membersSlot;
28366
27740
  if (!members || members.length === 0) return null;
28367
27741
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -28497,7 +27871,7 @@ function TeamGradientCards({
28497
27871
  memberRoleClassName,
28498
27872
  socialLinksClassName
28499
27873
  }) {
28500
- const renderMembers = React8.useMemo(() => {
27874
+ const renderMembers = React32.useMemo(() => {
28501
27875
  if (membersSlot) return membersSlot;
28502
27876
  if (!members || members.length === 0) return null;
28503
27877
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -28653,7 +28027,7 @@ function TeamBioBadges({
28653
28027
  memberBioClassName,
28654
28028
  socialLinksClassName
28655
28029
  }) {
28656
- const renderMembers = React8.useMemo(() => {
28030
+ const renderMembers = React32.useMemo(() => {
28657
28031
  if (membersSlot) return membersSlot;
28658
28032
  if (!members || members.length === 0) return null;
28659
28033
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -28830,7 +28204,7 @@ function TeamExpertiseCards({
28830
28204
  ctaDescriptionClassName,
28831
28205
  ctaButtonClassName
28832
28206
  }) {
28833
- const renderMembers = React8.useMemo(() => {
28207
+ const renderMembers = React32.useMemo(() => {
28834
28208
  if (membersSlot) return membersSlot;
28835
28209
  if (!members || members.length === 0) return null;
28836
28210
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -28907,7 +28281,7 @@ function TeamExpertiseCards({
28907
28281
  member.id
28908
28282
  ));
28909
28283
  }, [membersSlot, members, background, memberCardClassName, avatarClassName, memberNameClassName, memberRoleClassName, departmentBadgeClassName, memberDescriptionClassName, expertiseClassName]);
28910
- const renderCta = React8.useMemo(() => {
28284
+ const renderCta = React32.useMemo(() => {
28911
28285
  if (ctaSlot) return ctaSlot;
28912
28286
  return /* @__PURE__ */ jsxs(
28913
28287
  "div",
@@ -29023,7 +28397,7 @@ function TeamCompactGrid({
29023
28397
  ctaDescriptionClassName,
29024
28398
  ctaButtonClassName
29025
28399
  }) {
29026
- const renderMembers = React8.useMemo(() => {
28400
+ const renderMembers = React32.useMemo(() => {
29027
28401
  if (membersSlot) return membersSlot;
29028
28402
  if (!members || members.length === 0) return null;
29029
28403
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -29078,7 +28452,7 @@ function TeamCompactGrid({
29078
28452
  member.id
29079
28453
  ));
29080
28454
  }, [membersSlot, members, background, memberCardClassName, avatarClassName, memberNameClassName, memberRoleClassName, departmentBadgeClassName]);
29081
- const renderCta = React8.useMemo(() => {
28455
+ const renderCta = React32.useMemo(() => {
29082
28456
  if (ctaSlot) return ctaSlot;
29083
28457
  return /* @__PURE__ */ jsxs(
29084
28458
  "div",
@@ -29182,7 +28556,7 @@ function TeamInvestorShowcase({
29182
28556
  investorCompanyClassName,
29183
28557
  optixFlowConfig
29184
28558
  }) {
29185
- const renderInvestors = React8.useMemo(() => {
28559
+ const renderInvestors = React32.useMemo(() => {
29186
28560
  if (investorsSlot) return investorsSlot;
29187
28561
  if (!investors || investors.length === 0) return null;
29188
28562
  return investors.map((investor) => /* @__PURE__ */ jsxs("div", { className: investorCardClassName, children: [
@@ -29256,7 +28630,7 @@ function TeamCarouselExperience({
29256
28630
  memberRoleClassName,
29257
28631
  optixFlowConfig
29258
28632
  }) {
29259
- const renderMembers = React8.useMemo(() => {
28633
+ const renderMembers = React32.useMemo(() => {
29260
28634
  if (membersSlot) return membersSlot;
29261
28635
  if (!members || members.length === 0) return null;
29262
28636
  return members.map((member, idx) => /* @__PURE__ */ jsx(CarouselItem, { className: "max-w-72", children: /* @__PURE__ */ jsxs(
@@ -29406,20 +28780,20 @@ function TeamFilterableSearch({
29406
28780
  emptyStateClassName,
29407
28781
  emptyStateMessage
29408
28782
  }) {
29409
- const [searchQuery, setSearchQuery] = React8.useState("");
29410
- const [selectedDepartment, setSelectedDepartment] = React8.useState("All");
29411
- const departments = React8.useMemo(() => {
28783
+ const [searchQuery, setSearchQuery] = React32.useState("");
28784
+ const [selectedDepartment, setSelectedDepartment] = React32.useState("All");
28785
+ const departments = React32.useMemo(() => {
29412
28786
  const depts = new Set(members.map((m) => m.department));
29413
28787
  return ["All", ...Array.from(depts)];
29414
28788
  }, [members]);
29415
- const filteredMembers = React8.useMemo(() => {
28789
+ const filteredMembers = React32.useMemo(() => {
29416
28790
  return members.filter((member) => {
29417
28791
  const matchesSearch = searchQuery === "" || member.name.toLowerCase().includes(searchQuery.toLowerCase()) || member.role.toLowerCase().includes(searchQuery.toLowerCase()) || member.description.toLowerCase().includes(searchQuery.toLowerCase());
29418
28792
  const matchesDepartment = selectedDepartment === "All" || member.department === selectedDepartment;
29419
28793
  return matchesSearch && matchesDepartment;
29420
28794
  });
29421
28795
  }, [members, searchQuery, selectedDepartment]);
29422
- const renderFilters = React8.useMemo(() => {
28796
+ const renderFilters = React32.useMemo(() => {
29423
28797
  if (filtersSlot) return filtersSlot;
29424
28798
  return /* @__PURE__ */ jsxs(
29425
28799
  "div",
@@ -29474,7 +28848,7 @@ function TeamFilterableSearch({
29474
28848
  selectedDepartment,
29475
28849
  filterButtonClassName
29476
28850
  ]);
29477
- const renderMembers = React8.useMemo(() => {
28851
+ const renderMembers = React32.useMemo(() => {
29478
28852
  if (membersSlot) return membersSlot;
29479
28853
  return filteredMembers.map((member) => /* @__PURE__ */ jsx(
29480
28854
  "div",
@@ -29661,7 +29035,7 @@ function TeamCompactCta({
29661
29035
  memberRoleClassName,
29662
29036
  ctaClassName
29663
29037
  }) {
29664
- const renderMembers = React8.useMemo(() => {
29038
+ const renderMembers = React32.useMemo(() => {
29665
29039
  if (membersSlot) return membersSlot;
29666
29040
  if (!members || members.length === 0) return null;
29667
29041
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -29689,7 +29063,7 @@ function TeamCompactCta({
29689
29063
  member.id
29690
29064
  ));
29691
29065
  }, [membersSlot, members, memberCardClassName, avatarClassName, memberNameClassName, memberRoleClassName, background]);
29692
- const renderCta = React8.useMemo(() => {
29066
+ const renderCta = React32.useMemo(() => {
29693
29067
  if (ctaSlot) return ctaSlot;
29694
29068
  return /* @__PURE__ */ jsx(
29695
29069
  Pressable,
@@ -29780,7 +29154,7 @@ function TeamHoverHighlight({
29780
29154
  socialLinksClassName,
29781
29155
  optixFlowConfig
29782
29156
  }) {
29783
- const renderMembers = React8.useMemo(() => {
29157
+ const renderMembers = React32.useMemo(() => {
29784
29158
  if (membersSlot) return membersSlot;
29785
29159
  if (!members || members.length === 0) return null;
29786
29160
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -29929,7 +29303,7 @@ function TeamSocialCards({
29929
29303
  socialLinksClassName,
29930
29304
  optixFlowConfig
29931
29305
  }) {
29932
- const renderMembers = React8.useMemo(() => {
29306
+ const renderMembers = React32.useMemo(() => {
29933
29307
  if (membersSlot) return membersSlot;
29934
29308
  if (!members || members.length === 0) return null;
29935
29309
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -30099,7 +29473,7 @@ function TeamGridAnimated({
30099
29473
  "hsl(var(--muted))",
30100
29474
  "hsl(var(--warning)/0.2)"
30101
29475
  ];
30102
- const renderMembers = React8.useMemo(() => {
29476
+ const renderMembers = React32.useMemo(() => {
30103
29477
  if (membersSlot) return membersSlot;
30104
29478
  if (!members || members.length === 0) return null;
30105
29479
  return members.map((member, index) => /* @__PURE__ */ jsxs(
@@ -30199,7 +29573,7 @@ function TeamGridAnimated({
30199
29573
  memberDesignationClassName,
30200
29574
  socialLinksClassName
30201
29575
  ]);
30202
- const renderSocialLinksMain = React8.useMemo(() => {
29576
+ const renderSocialLinksMain = React32.useMemo(() => {
30203
29577
  if (socialLinksMainSlot) return socialLinksMainSlot;
30204
29578
  if (!socialLinksMain || socialLinksMain.length === 0) return null;
30205
29579
  return /* @__PURE__ */ jsxs("div", { className: "flex w-full items-center justify-center gap-4 py-4 md:justify-center", children: [
@@ -30316,7 +29690,7 @@ function TeamDepartmentSections({
30316
29690
  memberRoleClassName,
30317
29691
  optixFlowConfig
30318
29692
  }) {
30319
- const renderDepartments = React8.useMemo(() => {
29693
+ const renderDepartments = React32.useMemo(() => {
30320
29694
  if (departmentsSlot) return departmentsSlot;
30321
29695
  if (!departments || departments.length === 0) return null;
30322
29696
  return departments.map((department, deptIndex) => /* @__PURE__ */ jsxs(
@@ -30420,7 +29794,7 @@ function TeamAlternatingBios({
30420
29794
  socialLinksClassName,
30421
29795
  optixFlowConfig
30422
29796
  }) {
30423
- const renderMembers = React8.useMemo(() => {
29797
+ const renderMembers = React32.useMemo(() => {
30424
29798
  if (membersSlot) return membersSlot;
30425
29799
  if (!members || members.length === 0) return null;
30426
29800
  return members.map((member, index) => /* @__PURE__ */ jsxs(
@@ -30602,7 +29976,7 @@ function TeamAvatarSocial({
30602
29976
  memberRoleClassName,
30603
29977
  socialLinksClassName
30604
29978
  }) {
30605
- const renderMembers = React8.useMemo(() => {
29979
+ const renderMembers = React32.useMemo(() => {
30606
29980
  if (membersSlot) return membersSlot;
30607
29981
  if (!members || members.length === 0) return null;
30608
29982
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -30745,7 +30119,7 @@ function TeamHoverOverlay({
30745
30119
  socialLinksClassName,
30746
30120
  optixFlowConfig
30747
30121
  }) {
30748
- const renderMembers = React8.useMemo(() => {
30122
+ const renderMembers = React32.useMemo(() => {
30749
30123
  if (membersSlot) return membersSlot;
30750
30124
  if (!members || members.length === 0) return null;
30751
30125
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -30921,14 +30295,14 @@ function TeamRoleFilter({
30921
30295
  socialLinksClassName,
30922
30296
  optixFlowConfig
30923
30297
  }) {
30924
- const [selectedRole, setSelectedRole] = React8.useState("All");
30925
- const filteredMembers = React8.useMemo(() => {
30298
+ const [selectedRole, setSelectedRole] = React32.useState("All");
30299
+ const filteredMembers = React32.useMemo(() => {
30926
30300
  if (!members) return [];
30927
30301
  return members.filter(
30928
30302
  (member) => selectedRole === "All" ? true : member.role === selectedRole
30929
30303
  );
30930
30304
  }, [members, selectedRole]);
30931
- const renderRoles = React8.useMemo(() => {
30305
+ const renderRoles = React32.useMemo(() => {
30932
30306
  if (rolesSlot) return rolesSlot;
30933
30307
  if (!roles) return null;
30934
30308
  return /* @__PURE__ */ jsx(
@@ -30952,7 +30326,7 @@ function TeamRoleFilter({
30952
30326
  }
30953
30327
  );
30954
30328
  }, [rolesSlot, filtersClassName, roles, selectedRole, filterButtonClassName]);
30955
- const renderMembers = React8.useMemo(() => {
30329
+ const renderMembers = React32.useMemo(() => {
30956
30330
  if (membersSlot) return membersSlot;
30957
30331
  return filteredMembers.map((member) => /* @__PURE__ */ jsx(
30958
30332
  Card,
@@ -31112,7 +30486,7 @@ function TeamContactCards({
31112
30486
  socialLinksClassName,
31113
30487
  optixFlowConfig
31114
30488
  }) {
31115
- const getStatusColor = React8.useCallback((status) => {
30489
+ const getStatusColor = React32.useCallback((status) => {
31116
30490
  switch (status) {
31117
30491
  case "active":
31118
30492
  return "bg-success";
@@ -31122,7 +30496,7 @@ function TeamContactCards({
31122
30496
  return getTextColor(background, "muted");
31123
30497
  }
31124
30498
  }, [background]);
31125
- const renderMembers = React8.useMemo(() => {
30499
+ const renderMembers = React32.useMemo(() => {
31126
30500
  if (membersSlot) return membersSlot;
31127
30501
  if (!members || members.length === 0) return null;
31128
30502
  return members.map((member) => /* @__PURE__ */ jsx(Card, { className: cn("p-0", memberCardClassName), children: /* @__PURE__ */ jsxs(CardContent, { className: "p-6!", children: [
@@ -31329,7 +30703,7 @@ function TeamLargeImages({
31329
30703
  socialLinksClassName,
31330
30704
  optixFlowConfig
31331
30705
  }) {
31332
- const renderMembers = React8.useMemo(() => {
30706
+ const renderMembers = React32.useMemo(() => {
31333
30707
  if (membersSlot) return membersSlot;
31334
30708
  if (!members || members.length === 0) return null;
31335
30709
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -31504,7 +30878,7 @@ function TeamSkillBadges({
31504
30878
  socialLinksClassName,
31505
30879
  optixFlowConfig
31506
30880
  }) {
31507
- const renderMembers = React8.useMemo(() => {
30881
+ const renderMembers = React32.useMemo(() => {
31508
30882
  if (membersSlot) return membersSlot;
31509
30883
  if (!members || members.length === 0) return null;
31510
30884
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -31694,7 +31068,7 @@ function TeamTestimonialStats({
31694
31068
  socialLinksClassName,
31695
31069
  optixFlowConfig
31696
31070
  }) {
31697
- const renderMembers = React8.useMemo(() => {
31071
+ const renderMembers = React32.useMemo(() => {
31698
31072
  if (membersSlot) return membersSlot;
31699
31073
  if (!members || members.length === 0) return null;
31700
31074
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -35854,7 +35228,7 @@ function BlogGridAuthorCardsComponent({
35854
35228
  pattern,
35855
35229
  patternOpacity
35856
35230
  }) {
35857
- const viewAllActionContent = React8.useMemo(() => {
35231
+ const viewAllActionContent = React32.useMemo(() => {
35858
35232
  if (viewAllSlot) return viewAllSlot;
35859
35233
  if (!viewAllAction) return null;
35860
35234
  const {
@@ -35879,7 +35253,7 @@ function BlogGridAuthorCardsComponent({
35879
35253
  }
35880
35254
  );
35881
35255
  }, [viewAllSlot, viewAllAction]);
35882
- const postsContent = React8.useMemo(() => {
35256
+ const postsContent = React32.useMemo(() => {
35883
35257
  if (postsSlot) return postsSlot;
35884
35258
  if (!posts || posts.length === 0) return null;
35885
35259
  return posts.map((post) => {
@@ -36000,7 +35374,7 @@ function BlogCardsTaglineCta({
36000
35374
  pattern,
36001
35375
  patternOpacity
36002
35376
  }) {
36003
- const ctaActionContent = React8.useMemo(() => {
35377
+ const ctaActionContent = React32.useMemo(() => {
36004
35378
  if (ctaSlot) return ctaSlot;
36005
35379
  if (!ctaAction) return null;
36006
35380
  const {
@@ -36028,7 +35402,7 @@ function BlogCardsTaglineCta({
36028
35402
  }
36029
35403
  );
36030
35404
  }, [ctaSlot, ctaAction, ctaClassName]);
36031
- const postsContent = React8.useMemo(() => {
35405
+ const postsContent = React32.useMemo(() => {
36032
35406
  if (postsSlot) return postsSlot;
36033
35407
  if (!posts || posts.length === 0) return null;
36034
35408
  return posts.map((post) => {
@@ -36174,7 +35548,7 @@ function BlogCardsReadTime({
36174
35548
  pattern,
36175
35549
  patternOpacity
36176
35550
  }) {
36177
- const renderedViewAllAction = React8.useMemo(() => {
35551
+ const renderedViewAllAction = React32.useMemo(() => {
36178
35552
  if (viewAllSlot) return viewAllSlot;
36179
35553
  if (!viewAllAction) return null;
36180
35554
  const {
@@ -36191,7 +35565,7 @@ function BlogCardsReadTime({
36191
35565
  iconAfter
36192
35566
  ] }) });
36193
35567
  }, [viewAllSlot, viewAllAction]);
36194
- const renderedPosts = React8.useMemo(() => {
35568
+ const renderedPosts = React32.useMemo(() => {
36195
35569
  if (postsSlot) return postsSlot;
36196
35570
  if (!posts || posts.length === 0) return null;
36197
35571
  return posts.map((post) => {
@@ -36328,7 +35702,7 @@ function BlogCategoryOverlay({
36328
35702
  pattern,
36329
35703
  patternOpacity
36330
35704
  }) {
36331
- const viewAllActionContent = React8.useMemo(() => {
35705
+ const viewAllActionContent = React32.useMemo(() => {
36332
35706
  if (viewAllSlot) return viewAllSlot;
36333
35707
  if (!viewAllAction) return null;
36334
35708
  const {
@@ -36356,7 +35730,7 @@ function BlogCategoryOverlay({
36356
35730
  }
36357
35731
  );
36358
35732
  }, [viewAllSlot, viewAllAction, viewAllClassName]);
36359
- const postsContent = React8.useMemo(() => {
35733
+ const postsContent = React32.useMemo(() => {
36360
35734
  if (postsSlot) return postsSlot;
36361
35735
  if (!posts || posts.length === 0) return null;
36362
35736
  return posts.map((post) => {
@@ -36504,7 +35878,7 @@ function BlogFeaturedPopular({
36504
35878
  }) {
36505
35879
  const featuredPost = posts?.[0];
36506
35880
  const popularPosts = posts?.slice(1);
36507
- const renderedFeaturedPost = React8.useMemo(() => {
35881
+ const renderedFeaturedPost = React32.useMemo(() => {
36508
35882
  if (featuredSlot) return featuredSlot;
36509
35883
  if (!featuredPost) return null;
36510
35884
  const postHref = featuredPost.href || featuredPost.url || featuredPost.link;
@@ -36556,7 +35930,7 @@ function BlogFeaturedPopular({
36556
35930
  featuredContentClassName,
36557
35931
  optixFlowConfig
36558
35932
  ]);
36559
- const renderedPopularPosts = React8.useMemo(() => {
35933
+ const renderedPopularPosts = React32.useMemo(() => {
36560
35934
  if (postsSlot) return postsSlot;
36561
35935
  if (!popularPosts || popularPosts.length === 0) return null;
36562
35936
  return popularPosts.map((post) => {
@@ -36673,7 +36047,7 @@ function BlogRelatedArticles({
36673
36047
  pattern,
36674
36048
  patternOpacity
36675
36049
  }) {
36676
- const renderedSeeAllAction = React8.useMemo(() => {
36050
+ const renderedSeeAllAction = React32.useMemo(() => {
36677
36051
  if (seeAllSlot) return seeAllSlot;
36678
36052
  if (!seeAllAction) return null;
36679
36053
  const {
@@ -36702,7 +36076,7 @@ function BlogRelatedArticles({
36702
36076
  }
36703
36077
  );
36704
36078
  }, [seeAllSlot, seeAllAction, seeAllClassName]);
36705
- const renderedArticles = React8.useMemo(() => {
36079
+ const renderedArticles = React32.useMemo(() => {
36706
36080
  if (articlesSlot) return articlesSlot;
36707
36081
  if (!articles || articles.length === 0) return null;
36708
36082
  return articles.map((item) => {
@@ -36995,7 +36369,7 @@ function BlogHorizontalCards({
36995
36369
  pattern,
36996
36370
  patternOpacity
36997
36371
  }) {
36998
- const ctaContent = React8.useMemo(() => {
36372
+ const ctaContent = React32.useMemo(() => {
36999
36373
  if (ctaSlot) return ctaSlot;
37000
36374
  if (!ctaAction) return null;
37001
36375
  const {
@@ -37020,7 +36394,7 @@ function BlogHorizontalCards({
37020
36394
  }
37021
36395
  );
37022
36396
  }, [ctaSlot, ctaAction]);
37023
- const postsContent = React8.useMemo(() => {
36397
+ const postsContent = React32.useMemo(() => {
37024
36398
  if (postsSlot) return postsSlot;
37025
36399
  if (!posts || posts.length === 0) return null;
37026
36400
  return posts.map((post) => {
@@ -37242,7 +36616,7 @@ function Label({
37242
36616
  );
37243
36617
  }
37244
36618
  var POSTS_PER_PAGE = 6;
37245
- var BlogCard = React8.memo(function BlogCard2({
36619
+ var BlogCard = React32.memo(function BlogCard2({
37246
36620
  post,
37247
36621
  optixFlowConfig,
37248
36622
  className
@@ -37281,7 +36655,7 @@ var BlogCard = React8.memo(function BlogCard2({
37281
36655
  ] })
37282
36656
  ] }) });
37283
36657
  });
37284
- var FilterForm = React8.memo(function FilterForm2({
36658
+ var FilterForm = React32.memo(function FilterForm2({
37285
36659
  categories,
37286
36660
  selectedCategories,
37287
36661
  onCategoryChange,
@@ -37314,7 +36688,7 @@ var FilterForm = React8.memo(function FilterForm2({
37314
36688
  }
37315
36689
  );
37316
36690
  });
37317
- var BreadcrumbBlog = React8.memo(function BreadcrumbBlog2({
36691
+ var BreadcrumbBlog = React32.memo(function BreadcrumbBlog2({
37318
36692
  breadcrumb
37319
36693
  }) {
37320
36694
  return /* @__PURE__ */ jsx(Breadcrumb, { children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumb.map((item, i) => {
@@ -37396,12 +36770,12 @@ function BlogFilteredResultsComponent({
37396
36770
  }, [posts, selectedCategories]);
37397
36771
  const postsToDisplay = filteredPosts.length > 0 ? filteredPosts : posts || [];
37398
36772
  const hasMore = visibleCount < postsToDisplay.length;
37399
- const breadcrumbContent = React8.useMemo(() => {
36773
+ const breadcrumbContent = React32.useMemo(() => {
37400
36774
  if (breadcrumbSlot) return breadcrumbSlot;
37401
36775
  if (!breadcrumb || breadcrumb.length === 0) return null;
37402
36776
  return /* @__PURE__ */ jsx(BreadcrumbBlog, { breadcrumb });
37403
36777
  }, [breadcrumbSlot, breadcrumb]);
37404
- const primaryPostContent = React8.useMemo(() => {
36778
+ const primaryPostContent = React32.useMemo(() => {
37405
36779
  if (primaryPostSlot) return primaryPostSlot;
37406
36780
  if (!primaryPost) return null;
37407
36781
  return /* @__PURE__ */ jsx(
@@ -37413,7 +36787,7 @@ function BlogFilteredResultsComponent({
37413
36787
  }
37414
36788
  );
37415
36789
  }, [primaryPostSlot, primaryPost, optixFlowConfig, postCardClassName]);
37416
- const categoriesContent = React8.useMemo(() => {
36790
+ const categoriesContent = React32.useMemo(() => {
37417
36791
  if (categoriesSlot) return categoriesSlot;
37418
36792
  if (!categories || categories.length === 0) return null;
37419
36793
  return /* @__PURE__ */ jsx(
@@ -37432,7 +36806,7 @@ function BlogFilteredResultsComponent({
37432
36806
  handleCategoryChange,
37433
36807
  categoriesClassName
37434
36808
  ]);
37435
- const postsContent = React8.useMemo(() => {
36809
+ const postsContent = React32.useMemo(() => {
37436
36810
  if (postsSlot) return postsSlot;
37437
36811
  return postsToDisplay.slice(0, visibleCount).map((post) => {
37438
36812
  const postKey = post.id || String(post.title) || Math.random().toString();
@@ -37453,7 +36827,7 @@ function BlogFilteredResultsComponent({
37453
36827
  optixFlowConfig,
37454
36828
  postCardClassName
37455
36829
  ]);
37456
- const loadMoreContent = React8.useMemo(() => {
36830
+ const loadMoreContent = React32.useMemo(() => {
37457
36831
  if (loadMoreSlot) return loadMoreSlot;
37458
36832
  if (!loadMoreAction || !hasMore) return null;
37459
36833
  const {
@@ -37580,7 +36954,7 @@ function BlogMasonryFeaturedComponent({
37580
36954
  }) {
37581
36955
  const featuredPost = posts?.[0];
37582
36956
  const otherPosts = posts?.slice(1);
37583
- const featuredPostContent = React8.useMemo(() => {
36957
+ const featuredPostContent = React32.useMemo(() => {
37584
36958
  if (featuredSlot) return featuredSlot;
37585
36959
  if (!featuredPost) return null;
37586
36960
  const postHref = featuredPost.href || featuredPost.url || featuredPost.link;
@@ -37630,7 +37004,7 @@ function BlogMasonryFeaturedComponent({
37630
37004
  featuredImageClassName,
37631
37005
  optixFlowConfig
37632
37006
  ]);
37633
- const otherPostsContent = React8.useMemo(() => {
37007
+ const otherPostsContent = React32.useMemo(() => {
37634
37008
  if (postsSlot) return postsSlot;
37635
37009
  if (!otherPosts || otherPosts.length === 0) return null;
37636
37010
  return otherPosts.map((post) => {
@@ -37721,7 +37095,7 @@ function BlogHorizontalTimelineComponent({
37721
37095
  pattern,
37722
37096
  patternOpacity
37723
37097
  }) {
37724
- const renderPosts = React8.useMemo(() => {
37098
+ const renderPosts = React32.useMemo(() => {
37725
37099
  if (postsSlot) return postsSlot;
37726
37100
  if (!posts || posts.length === 0) return null;
37727
37101
  return posts.map((post, index) => {
@@ -37846,7 +37220,7 @@ function BlogGridNinePosts({
37846
37220
  pattern,
37847
37221
  patternOpacity
37848
37222
  }) {
37849
- const renderedCtaAction = React8.useMemo(() => {
37223
+ const renderedCtaAction = React32.useMemo(() => {
37850
37224
  if (ctaSlot) return ctaSlot;
37851
37225
  if (!ctaAction) return null;
37852
37226
  const {
@@ -37871,7 +37245,7 @@ function BlogGridNinePosts({
37871
37245
  }
37872
37246
  );
37873
37247
  }, [ctaSlot, ctaAction]);
37874
- const renderedPosts = React8.useMemo(() => {
37248
+ const renderedPosts = React32.useMemo(() => {
37875
37249
  if (postsSlot) return postsSlot;
37876
37250
  if (!posts || posts.length === 0) return null;
37877
37251
  return posts.map((post) => {
@@ -37969,9 +37343,9 @@ var AppleCarousel = ({
37969
37343
  className,
37970
37344
  containerClassName
37971
37345
  }) => {
37972
- const carouselRef = React8__default.useRef(null);
37973
- const [canScrollLeft, setCanScrollLeft] = React8__default.useState(false);
37974
- const [canScrollRight, setCanScrollRight] = React8__default.useState(true);
37346
+ const carouselRef = React32__default.useRef(null);
37347
+ const [canScrollLeft, setCanScrollLeft] = React32__default.useState(false);
37348
+ const [canScrollRight, setCanScrollRight] = React32__default.useState(true);
37975
37349
  const [currentIndex, setCurrentIndex] = useState(0);
37976
37350
  useEffect(() => {
37977
37351
  if (carouselRef.current) {
@@ -38211,7 +37585,7 @@ function BlogCarouselAppleComponent({
38211
37585
  containerClassName,
38212
37586
  cardClassName
38213
37587
  }) {
38214
- const carouselCards = React8.useMemo(() => {
37588
+ const carouselCards = React32.useMemo(() => {
38215
37589
  if (!posts || posts.length === 0) return [];
38216
37590
  return posts.map(
38217
37591
  (post, idx) => ({
@@ -38223,7 +37597,7 @@ function BlogCarouselAppleComponent({
38223
37597
  })
38224
37598
  );
38225
37599
  }, [posts]);
38226
- const cardElements = React8.useMemo(() => {
37600
+ const cardElements = React32.useMemo(() => {
38227
37601
  if (!posts || posts.length === 0) return [];
38228
37602
  return carouselCards.map((card, index) => {
38229
37603
  const post = posts[index];
@@ -38308,7 +37682,7 @@ function ArticleHeroProseComponent({
38308
37682
  description,
38309
37683
  authorImage
38310
37684
  } = post ?? {};
38311
- const authorContent = React8.useMemo(() => {
37685
+ const authorContent = React32.useMemo(() => {
38312
37686
  if (authorSlot) return authorSlot;
38313
37687
  if (!authorName) return null;
38314
37688
  return /* @__PURE__ */ jsxs(
@@ -38342,7 +37716,7 @@ function ArticleHeroProseComponent({
38342
37716
  dateFormat,
38343
37717
  authorClassName
38344
37718
  ]);
38345
- const heroMediaContent = React8.useMemo(() => {
37719
+ const heroMediaContent = React32.useMemo(() => {
38346
37720
  if (heroMediaSlot) return heroMediaSlot;
38347
37721
  if (!image) return null;
38348
37722
  return /* @__PURE__ */ jsx(
@@ -38448,7 +37822,7 @@ function ArticleSidebarStickyComponent({
38448
37822
  patternOpacity,
38449
37823
  sidebarContent
38450
37824
  }) {
38451
- const backLinkContent = React8.useMemo(() => {
37825
+ const backLinkContent = React32.useMemo(() => {
38452
37826
  if (backLinkSlot) return backLinkSlot;
38453
37827
  if (!backHref && !backText) return null;
38454
37828
  return /* @__PURE__ */ jsxs(
@@ -38466,7 +37840,7 @@ function ArticleSidebarStickyComponent({
38466
37840
  }
38467
37841
  );
38468
37842
  }, [backLinkSlot, backHref, backText, backIcon, backLinkClassName]);
38469
- const renderAuthor = React8.useCallback(
37843
+ const renderAuthor = React32.useCallback(
38470
37844
  (isMobile = false) => {
38471
37845
  if (authorSlot) return authorSlot;
38472
37846
  if (!authorName) return null;
@@ -38498,7 +37872,7 @@ function ArticleSidebarStickyComponent({
38498
37872
  authorClassName
38499
37873
  ]
38500
37874
  );
38501
- const heroMediaContent = React8.useMemo(() => {
37875
+ const heroMediaContent = React32.useMemo(() => {
38502
37876
  if (heroMediaSlot) return heroMediaSlot;
38503
37877
  if (!heroImageSrc) return null;
38504
37878
  return /* @__PURE__ */ jsx(
@@ -38609,10 +37983,10 @@ function ArticleTocSidebarComponent({
38609
37983
  patternOpacity,
38610
37984
  patternClassName
38611
37985
  }) {
38612
- const [activeSection, setActiveSection] = React8.useState(
37986
+ const [activeSection, setActiveSection] = React32.useState(
38613
37987
  sections?.[0]?.id || ""
38614
37988
  );
38615
- React8.useEffect(() => {
37989
+ React32.useEffect(() => {
38616
37990
  if (!enableTocTracking || !sections || sections.length === 0) return;
38617
37991
  const observer = new IntersectionObserver(
38618
37992
  (entries) => {
@@ -38630,12 +38004,12 @@ function ArticleTocSidebarComponent({
38630
38004
  });
38631
38005
  return () => observer.disconnect();
38632
38006
  }, [sections, enableTocTracking]);
38633
- const categoryContent = React8.useMemo(() => {
38007
+ const categoryContent = React32.useMemo(() => {
38634
38008
  if (categorySlot) return categorySlot;
38635
38009
  if (!category) return null;
38636
38010
  return /* @__PURE__ */ jsx(Badge, { children: category });
38637
38011
  }, [categorySlot, category]);
38638
- const authorContent = React8.useMemo(() => {
38012
+ const authorContent = React32.useMemo(() => {
38639
38013
  if (authorSlot) return authorSlot;
38640
38014
  if (!authorName) return null;
38641
38015
  return /* @__PURE__ */ jsxs("div", { className: cn("mt-6 flex items-center gap-4", authorClassName), children: [
@@ -38670,7 +38044,7 @@ function ArticleTocSidebarComponent({
38670
38044
  readTime,
38671
38045
  authorClassName
38672
38046
  ]);
38673
- const heroMediaContent = React8.useMemo(() => {
38047
+ const heroMediaContent = React32.useMemo(() => {
38674
38048
  if (heroMediaSlot) return heroMediaSlot;
38675
38049
  if (!heroImageSrc) return null;
38676
38050
  return /* @__PURE__ */ jsx(
@@ -38692,7 +38066,7 @@ function ArticleTocSidebarComponent({
38692
38066
  heroImageClassName,
38693
38067
  optixFlowConfig
38694
38068
  ]);
38695
- const tocContent = React8.useMemo(() => {
38069
+ const tocContent = React32.useMemo(() => {
38696
38070
  if (tocSlot) return tocSlot;
38697
38071
  if (!sections || sections.length === 0) return null;
38698
38072
  return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border p-4", tocClassName), children: [
@@ -38700,7 +38074,7 @@ function ArticleTocSidebarComponent({
38700
38074
  /* @__PURE__ */ jsx("nav", { className: "space-y-2", children: sections.map((section) => {
38701
38075
  const isActive = activeSection === section.id;
38702
38076
  if (renderSectionLink) {
38703
- return /* @__PURE__ */ jsx(React8.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
38077
+ return /* @__PURE__ */ jsx(React32.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
38704
38078
  }
38705
38079
  return /* @__PURE__ */ jsx(
38706
38080
  Pressable,
@@ -38717,7 +38091,7 @@ function ArticleTocSidebarComponent({
38717
38091
  }) })
38718
38092
  ] });
38719
38093
  }, [tocSlot, sections, activeSection, renderSectionLink, tocClassName]);
38720
- const ctaContent = React8.useMemo(() => {
38094
+ const ctaContent = React32.useMemo(() => {
38721
38095
  if (ctaSlot) return ctaSlot;
38722
38096
  if (!ctaTitle && !ctaDescription && (!ctaActions || ctaActions.length === 0))
38723
38097
  return null;
@@ -38831,11 +38205,11 @@ function ArticleBreadcrumbSocialComponent({
38831
38205
  patternOpacity,
38832
38206
  patternClassName
38833
38207
  }) {
38834
- const [activeSection, setActiveSection] = React8.useState(
38208
+ const [activeSection, setActiveSection] = React32.useState(
38835
38209
  sections?.[0]?.id || ""
38836
38210
  );
38837
- const [showBackToTop, setShowBackToTop] = React8.useState(false);
38838
- React8.useEffect(() => {
38211
+ const [showBackToTop, setShowBackToTop] = React32.useState(false);
38212
+ React32.useEffect(() => {
38839
38213
  if (!enableTocTracking || !sections || sections.length === 0) return;
38840
38214
  const observer = new IntersectionObserver(
38841
38215
  (entries) => {
@@ -38853,7 +38227,7 @@ function ArticleBreadcrumbSocialComponent({
38853
38227
  });
38854
38228
  return () => observer.disconnect();
38855
38229
  }, [sections, enableTocTracking]);
38856
- React8.useEffect(() => {
38230
+ React32.useEffect(() => {
38857
38231
  if (!enableBackToTop) return;
38858
38232
  const handleScroll = () => {
38859
38233
  setShowBackToTop(window.scrollY > 400);
@@ -38861,15 +38235,15 @@ function ArticleBreadcrumbSocialComponent({
38861
38235
  window.addEventListener("scroll", handleScroll);
38862
38236
  return () => window.removeEventListener("scroll", handleScroll);
38863
38237
  }, [enableBackToTop]);
38864
- const scrollToTop = React8.useCallback(() => {
38238
+ const scrollToTop = React32.useCallback(() => {
38865
38239
  window.scrollTo({ top: 0, behavior: "smooth" });
38866
38240
  }, []);
38867
- const breadcrumbsContent = React8.useMemo(() => {
38241
+ const breadcrumbsContent = React32.useMemo(() => {
38868
38242
  if (breadcrumbsSlot) return breadcrumbsSlot;
38869
38243
  if (!breadcrumbs || breadcrumbs.length === 0) return null;
38870
38244
  return /* @__PURE__ */ jsx(Breadcrumb, { className: cn("mb-8", breadcrumbClassName), children: /* @__PURE__ */ jsxs(BreadcrumbList, { children: [
38871
38245
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: "#", children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/home", size: 16 }) }) }) }),
38872
- breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
38246
+ breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
38873
38247
  /* @__PURE__ */ jsx(BreadcrumbSeparator, {}),
38874
38248
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: crumb.href, children: crumb.label }) }) })
38875
38249
  ] }, index)),
@@ -38879,7 +38253,7 @@ function ArticleBreadcrumbSocialComponent({
38879
38253
  ] })
38880
38254
  ] }) });
38881
38255
  }, [breadcrumbsSlot, breadcrumbs, currentPage, breadcrumbClassName]);
38882
- const authorContent = React8.useMemo(() => {
38256
+ const authorContent = React32.useMemo(() => {
38883
38257
  if (authorSlot) return authorSlot;
38884
38258
  if (!author) return null;
38885
38259
  return /* @__PURE__ */ jsxs(
@@ -38902,7 +38276,7 @@ function ArticleBreadcrumbSocialComponent({
38902
38276
  }
38903
38277
  );
38904
38278
  }, [authorSlot, author, publishDate, readTime, authorClassName]);
38905
- const heroMediaContent = React8.useMemo(() => {
38279
+ const heroMediaContent = React32.useMemo(() => {
38906
38280
  if (heroMediaSlot) return heroMediaSlot;
38907
38281
  if (!heroImageSrc) return null;
38908
38282
  return /* @__PURE__ */ jsx(
@@ -38924,7 +38298,7 @@ function ArticleBreadcrumbSocialComponent({
38924
38298
  heroImageClassName,
38925
38299
  optixFlowConfig
38926
38300
  ]);
38927
- const tocContent = React8.useMemo(() => {
38301
+ const tocContent = React32.useMemo(() => {
38928
38302
  if (tocSlot) return tocSlot;
38929
38303
  if (!sections || sections.length === 0) return null;
38930
38304
  return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border p-4", tocClassName), children: [
@@ -38932,7 +38306,7 @@ function ArticleBreadcrumbSocialComponent({
38932
38306
  /* @__PURE__ */ jsx("nav", { className: "space-y-2", children: sections.map((section) => {
38933
38307
  const isActive = activeSection === section.id;
38934
38308
  if (renderSectionLink) {
38935
- return /* @__PURE__ */ jsx(React8.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
38309
+ return /* @__PURE__ */ jsx(React32.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
38936
38310
  }
38937
38311
  return /* @__PURE__ */ jsx(
38938
38312
  Pressable,
@@ -39039,11 +38413,11 @@ function ArticleCompactTocComponent({
39039
38413
  patternOpacity,
39040
38414
  patternClassName
39041
38415
  }) {
39042
- const [activeSection, setActiveSection] = React8.useState(
38416
+ const [activeSection, setActiveSection] = React32.useState(
39043
38417
  sections?.[0]?.id || ""
39044
38418
  );
39045
- const [isTocOpen, setIsTocOpen] = React8.useState(false);
39046
- React8.useEffect(() => {
38419
+ const [isTocOpen, setIsTocOpen] = React32.useState(false);
38420
+ React32.useEffect(() => {
39047
38421
  if (!enableTocTracking) return;
39048
38422
  const observer = new IntersectionObserver(
39049
38423
  (entries) => {
@@ -39061,12 +38435,12 @@ function ArticleCompactTocComponent({
39061
38435
  });
39062
38436
  return () => observer.disconnect();
39063
38437
  }, [sections, enableTocTracking]);
39064
- const breadcrumbsContent = React8.useMemo(() => {
38438
+ const breadcrumbsContent = React32.useMemo(() => {
39065
38439
  if (breadcrumbsSlot) return breadcrumbsSlot;
39066
38440
  if (!breadcrumbs && !currentPage) return null;
39067
38441
  return /* @__PURE__ */ jsx(Breadcrumb, { className: cn("mb-6 md:mb-20", breadcrumbClassName), children: /* @__PURE__ */ jsxs(BreadcrumbList, { children: [
39068
38442
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: "#", children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/home", size: 16 }) }) }) }),
39069
- breadcrumbs?.map((crumb, index) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
38443
+ breadcrumbs?.map((crumb, index) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
39070
38444
  /* @__PURE__ */ jsx(BreadcrumbSeparator, {}),
39071
38445
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: crumb.href, children: crumb.label }) }) })
39072
38446
  ] }, index)),
@@ -39074,13 +38448,13 @@ function ArticleCompactTocComponent({
39074
38448
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbPage, { children: currentPage }) })
39075
38449
  ] }) });
39076
38450
  }, [breadcrumbsSlot, breadcrumbs, currentPage, breadcrumbClassName]);
39077
- const renderTocLinks = React8.useCallback(
38451
+ const renderTocLinks = React32.useCallback(
39078
38452
  (onLinkClick) => {
39079
38453
  if (!sections) return null;
39080
38454
  return sections.map((section) => {
39081
38455
  const isActive = activeSection === section.id;
39082
38456
  if (renderSectionLink) {
39083
- return /* @__PURE__ */ jsx(React8.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
38457
+ return /* @__PURE__ */ jsx(React32.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
39084
38458
  }
39085
38459
  return /* @__PURE__ */ jsx(
39086
38460
  Pressable,
@@ -39099,7 +38473,7 @@ function ArticleCompactTocComponent({
39099
38473
  },
39100
38474
  [sections, activeSection, renderSectionLink]
39101
38475
  );
39102
- const tocContent = React8.useMemo(() => {
38476
+ const tocContent = React32.useMemo(() => {
39103
38477
  if (tocSlot) return tocSlot;
39104
38478
  if (!sections || sections.length === 0) return null;
39105
38479
  return /* @__PURE__ */ jsx("div", { className: "mb-8 lg:hidden", children: /* @__PURE__ */ jsxs(Popover, { open: isTocOpen, onOpenChange: setIsTocOpen, children: [
@@ -39133,14 +38507,14 @@ function ArticleCompactTocComponent({
39133
38507
  ] }) });
39134
38508
  }, [tocSlot, sections, isTocOpen, tocClassName, renderTocLinks]);
39135
38509
  const hasDesktopToc = !tocSlot && sections && sections.length > 0;
39136
- const desktopTocContent = React8.useMemo(() => {
38510
+ const desktopTocContent = React32.useMemo(() => {
39137
38511
  if (!hasDesktopToc) return null;
39138
38512
  return /* @__PURE__ */ jsx("aside", { className: cn("hidden lg:block w-64 shrink-0", tocClassName), children: /* @__PURE__ */ jsxs("nav", { className: "sticky top-24 max-h-[calc(100vh-8rem)] overflow-y-auto space-y-2 rounded-lg border p-4", children: [
39139
38513
  /* @__PURE__ */ jsx("span", { className: "mb-3 block text-sm font-semibold", children: "Table of Contents" }),
39140
38514
  renderTocLinks()
39141
38515
  ] }) });
39142
38516
  }, [hasDesktopToc, tocClassName, renderTocLinks]);
39143
- const heroMediaContent = React8.useMemo(() => {
38517
+ const heroMediaContent = React32.useMemo(() => {
39144
38518
  if (heroMediaSlot) return heroMediaSlot;
39145
38519
  if (!heroImageSrc) return null;
39146
38520
  return /* @__PURE__ */ jsx(
@@ -39262,10 +38636,10 @@ function ArticleChaptersAuthorComponent({
39262
38636
  pattern,
39263
38637
  patternOpacity
39264
38638
  }) {
39265
- const [activeChapter, setActiveChapter] = React8.useState(
38639
+ const [activeChapter, setActiveChapter] = React32.useState(
39266
38640
  chapters?.[0]?.id || ""
39267
38641
  );
39268
- React8.useEffect(() => {
38642
+ React32.useEffect(() => {
39269
38643
  if (!enableChapterTracking || !chapters || chapters.length === 0) return;
39270
38644
  const observer = new IntersectionObserver(
39271
38645
  (entries) => {
@@ -39283,12 +38657,12 @@ function ArticleChaptersAuthorComponent({
39283
38657
  });
39284
38658
  return () => observer.disconnect();
39285
38659
  }, [chapters, enableChapterTracking]);
39286
- const breadcrumbsContent = React8.useMemo(() => {
38660
+ const breadcrumbsContent = React32.useMemo(() => {
39287
38661
  if (breadcrumbsSlot) return breadcrumbsSlot;
39288
38662
  if (!breadcrumbs || breadcrumbs.length === 0) return null;
39289
38663
  return /* @__PURE__ */ jsx(Breadcrumb, { className: cn("mb-8 md:mb-20", breadcrumbClassName), children: /* @__PURE__ */ jsxs(BreadcrumbList, { children: [
39290
38664
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: "#", children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/home", size: 16 }) }) }) }),
39291
- breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
38665
+ breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
39292
38666
  /* @__PURE__ */ jsx(BreadcrumbSeparator, {}),
39293
38667
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: crumb.href, children: crumb.label }) }) })
39294
38668
  ] }, index)),
@@ -39296,7 +38670,7 @@ function ArticleChaptersAuthorComponent({
39296
38670
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbPage, { children: typeof currentPage === "string" ? currentPage : currentPage }) })
39297
38671
  ] }) });
39298
38672
  }, [breadcrumbsSlot, breadcrumbs, currentPage, breadcrumbClassName]);
39299
- const chaptersNavContent = React8.useMemo(() => {
38673
+ const chaptersNavContent = React32.useMemo(() => {
39300
38674
  if (chaptersSlot) return chaptersSlot;
39301
38675
  if (!chapters || chapters.length === 0) return null;
39302
38676
  return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border p-4", chaptersClassName), children: [
@@ -39304,7 +38678,7 @@ function ArticleChaptersAuthorComponent({
39304
38678
  /* @__PURE__ */ jsx("nav", { className: "space-y-2", children: chapters.map((chapter) => {
39305
38679
  const isActive = activeChapter === chapter.id;
39306
38680
  if (renderChapterLink) {
39307
- return /* @__PURE__ */ jsx(React8.Fragment, { children: renderChapterLink(chapter, isActive) }, chapter.id);
38681
+ return /* @__PURE__ */ jsx(React32.Fragment, { children: renderChapterLink(chapter, isActive) }, chapter.id);
39308
38682
  }
39309
38683
  return /* @__PURE__ */ jsxs(
39310
38684
  Pressable,
@@ -39338,7 +38712,7 @@ function ArticleChaptersAuthorComponent({
39338
38712
  renderChapterLink,
39339
38713
  chaptersClassName
39340
38714
  ]);
39341
- const authorCardContent = React8.useMemo(() => {
38715
+ const authorCardContent = React32.useMemo(() => {
39342
38716
  if (authorSlot) return authorSlot;
39343
38717
  if (!author) return null;
39344
38718
  let socialLinksContent = null;
@@ -39387,7 +38761,7 @@ function ArticleChaptersAuthorComponent({
39387
38761
  socialLinksContent
39388
38762
  ] });
39389
38763
  }, [authorSlot, author, authorClassName]);
39390
- const heroMediaContent = React8.useMemo(() => {
38764
+ const heroMediaContent = React32.useMemo(() => {
39391
38765
  if (heroMediaSlot) return heroMediaSlot;
39392
38766
  if (!heroImageSrc) return null;
39393
38767
  return /* @__PURE__ */ jsx(
@@ -39409,7 +38783,7 @@ function ArticleChaptersAuthorComponent({
39409
38783
  heroImageClassName,
39410
38784
  optixFlowConfig
39411
38785
  ]);
39412
- const conclusionContent = React8.useMemo(() => {
38786
+ const conclusionContent = React32.useMemo(() => {
39413
38787
  if (conclusionSlot) return conclusionSlot;
39414
38788
  if (!conclusionTitle && !conclusionDescription && (!conclusionActions || conclusionActions.length === 0))
39415
38789
  return null;
@@ -39551,7 +38925,7 @@ function ArticleSplitAnimatedComponent({
39551
38925
  spacing = "lg"
39552
38926
  }) {
39553
38927
  const MotionWrapper = enableAnimations ? motion.div : "div";
39554
- const categoryContent = React8.useMemo(() => {
38928
+ const categoryContent = React32.useMemo(() => {
39555
38929
  if (categorySlot) return categorySlot;
39556
38930
  if (!category) return null;
39557
38931
  return /* @__PURE__ */ jsx(
@@ -39566,7 +38940,7 @@ function ArticleSplitAnimatedComponent({
39566
38940
  }
39567
38941
  );
39568
38942
  }, [categorySlot, category, categoryHref, categoryClassName]);
39569
- const heroMediaContent = React8.useMemo(() => {
38943
+ const heroMediaContent = React32.useMemo(() => {
39570
38944
  if (heroMediaSlot) return heroMediaSlot;
39571
38945
  if (!image) return null;
39572
38946
  return /* @__PURE__ */ jsx(
@@ -39579,7 +38953,7 @@ function ArticleSplitAnimatedComponent({
39579
38953
  }
39580
38954
  );
39581
38955
  }, [heroMediaSlot, image, imageAlt, title, optixFlowConfig]);
39582
- const authorContent = React8.useMemo(() => {
38956
+ const authorContent = React32.useMemo(() => {
39583
38957
  if (authorSlot) return authorSlot;
39584
38958
  if (!authorName) return null;
39585
38959
  return /* @__PURE__ */ jsxs("div", { className: cn("mt-8 flex items-center gap-4", authorClassName), children: [
@@ -39607,7 +38981,7 @@ function ArticleSplitAnimatedComponent({
39607
38981
  authorRole,
39608
38982
  authorClassName
39609
38983
  ]);
39610
- const ctaContent = React8.useMemo(() => {
38984
+ const ctaContent = React32.useMemo(() => {
39611
38985
  if (ctaSlot) return ctaSlot;
39612
38986
  if (!ctaActions || ctaActions.length === 0) return null;
39613
38987
  return /* @__PURE__ */ jsx("div", { className: cn("mt-8 flex flex-wrap gap-3", ctaClassName), children: ctaActions.map((action, index) => {
@@ -41273,7 +40647,7 @@ function FaqSidebarNavigation({
41273
40647
  accordionTriggerClassName,
41274
40648
  accordionContentClassName
41275
40649
  }) {
41276
- const [activeCategory, setActiveCategory] = React8.useState(
40650
+ const [activeCategory, setActiveCategory] = React32.useState(
41277
40651
  categories && categories.length > 1 ? "all" : categories?.[0]?.id || ""
41278
40652
  );
41279
40653
  const filteredCategories = useMemo(() => {
@@ -42331,7 +41705,7 @@ function FaqSplitHero({
42331
41705
  }
42332
41706
  );
42333
41707
  }
42334
- var Controls = React8.memo(
41708
+ var Controls = React32.memo(
42335
41709
  ({
42336
41710
  handleNext,
42337
41711
  handlePrevious,
@@ -42362,7 +41736,7 @@ var Controls = React8.memo(
42362
41736
  ] });
42363
41737
  }
42364
41738
  );
42365
- var FeatureCard = React8.memo(
41739
+ var FeatureCard = React32.memo(
42366
41740
  ({ feature, isActive, onClick }) => {
42367
41741
  const variants2 = useMemo(
42368
41742
  () => ({
@@ -42471,7 +41845,7 @@ var FeatureCard = React8.memo(
42471
41845
  ) });
42472
41846
  }
42473
41847
  );
42474
- var FeaturesDesktop = React8.memo(
41848
+ var FeaturesDesktop = React32.memo(
42475
41849
  ({
42476
41850
  features,
42477
41851
  handleNext,
@@ -42505,7 +41879,7 @@ var FeaturesDesktop = React8.memo(
42505
41879
  ] });
42506
41880
  }
42507
41881
  );
42508
- var FeaturesMobile = React8.memo(
41882
+ var FeaturesMobile = React32.memo(
42509
41883
  ({
42510
41884
  features,
42511
41885
  handleNext,
@@ -42596,8 +41970,8 @@ function FeatureAnimatedCarousel({
42596
41970
  spacing = "py-12 md:py-32",
42597
41971
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8"
42598
41972
  }) {
42599
- const [activeIndex, setActiveIndex] = React8.useState(0);
42600
- const [direction, setDirection] = React8.useState(1);
41973
+ const [activeIndex, setActiveIndex] = React32.useState(0);
41974
+ const [direction, setDirection] = React32.useState(1);
42601
41975
  const handleNext = useCallback(() => {
42602
41976
  if (features && activeIndex < features.length - 1) {
42603
41977
  setDirection(1);
@@ -42826,7 +42200,7 @@ function FooterNewsletterContact({
42826
42200
  formSlot,
42827
42201
  newsletterFormClassName
42828
42202
  }) {
42829
- const linkSectionsContent = React8.useMemo(() => {
42203
+ const linkSectionsContent = React32.useMemo(() => {
42830
42204
  if (!footerLinks || footerLinks.length === 0) return null;
42831
42205
  return footerLinks.map((section, idx) => /* @__PURE__ */ jsxs("div", { children: [
42832
42206
  /* @__PURE__ */ jsx("h2", { className: "mb-6 text-sm font-medium uppercase leading-tight opacity-70", children: section.title }),
@@ -42840,7 +42214,7 @@ function FooterNewsletterContact({
42840
42214
  ) }, itemIdx)) })
42841
42215
  ] }, idx));
42842
42216
  }, [footerLinks]);
42843
- const contactDetailsContent = React8.useMemo(() => {
42217
+ const contactDetailsContent = React32.useMemo(() => {
42844
42218
  if (!contactDetails || contactDetails.length === 0) return null;
42845
42219
  return contactDetails.map((item, idx) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-3", children: [
42846
42220
  /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center shrink-0 mt-1", children: /* @__PURE__ */ jsx(DynamicIcon, { name: item.icon, size: 16 }) }),
@@ -42854,7 +42228,7 @@ function FooterNewsletterContact({
42854
42228
  ) })
42855
42229
  ] }, idx));
42856
42230
  }, [contactDetails]);
42857
- const socialLinksContent = React8.useMemo(() => {
42231
+ const socialLinksContent = React32.useMemo(() => {
42858
42232
  if (!socialLinks || socialLinks.length === 0) return null;
42859
42233
  return socialLinks.map((social, idx) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
42860
42234
  SocialLinkIcon,
@@ -42868,7 +42242,7 @@ function FooterNewsletterContact({
42868
42242
  }
42869
42243
  ) }, idx));
42870
42244
  }, [socialLinks]);
42871
- const renderForm = React8.useMemo(() => {
42245
+ const renderForm = React32.useMemo(() => {
42872
42246
  if (formSlot) return formSlot;
42873
42247
  if (!formEngineSetup) return null;
42874
42248
  const defaultButtonAction = {
@@ -43013,7 +42387,7 @@ function FooterSplitImageAccordion({
43013
42387
  buttonAction,
43014
42388
  formSlot
43015
42389
  }) {
43016
- const renderForm = React8.useMemo(() => {
42390
+ const renderForm = React32.useMemo(() => {
43017
42391
  if (formSlot) return formSlot;
43018
42392
  if (!formEngineSetup) return null;
43019
42393
  const defaultButtonAction = {
@@ -43274,7 +42648,7 @@ function FooterAccordionSocial({
43274
42648
  patternClassName,
43275
42649
  formEngineSetup
43276
42650
  }) {
43277
- const renderForm = React8.useMemo(() => {
42651
+ const renderForm = React32.useMemo(() => {
43278
42652
  if (!formEngineSetup) return null;
43279
42653
  const action = {
43280
42654
  label: "",
@@ -43418,7 +42792,7 @@ function FooterInfoCardsAccordion({
43418
42792
  patternOpacity,
43419
42793
  optixFlowConfig
43420
42794
  }) {
43421
- const [email, setEmail] = React8.useState("");
42795
+ const [email, setEmail] = React32.useState("");
43422
42796
  (/* @__PURE__ */ new Date()).getFullYear();
43423
42797
  const handleSubmit = (e) => {
43424
42798
  e.preventDefault();
@@ -43723,13 +43097,13 @@ function CaseStudiesImageGrid({
43723
43097
  patternOpacity,
43724
43098
  optixFlowConfig
43725
43099
  }) {
43726
- const getGridClass = React8.useCallback((index) => {
43100
+ const getGridClass = React32.useCallback((index) => {
43727
43101
  if (index === 0 || index === 4) {
43728
43102
  return "row-span-2 aspect-square lg:aspect-auto";
43729
43103
  }
43730
43104
  return "aspect-3/2 md:aspect-2/1";
43731
43105
  }, []);
43732
- const renderedItems = React8.useMemo(() => {
43106
+ const renderedItems = React32.useMemo(() => {
43733
43107
  if (itemsSlot) return itemsSlot;
43734
43108
  if (!items || items.length === 0) return null;
43735
43109
  return items.map((item, index) => /* @__PURE__ */ jsxs(
@@ -43815,7 +43189,7 @@ function CaseStudiesTestimonialStats({
43815
43189
  patternOpacity,
43816
43190
  optixFlowConfig
43817
43191
  }) {
43818
- const renderedTestimonials = React8.useMemo(() => {
43192
+ const renderedTestimonials = React32.useMemo(() => {
43819
43193
  if (testimonialsSlot) return testimonialsSlot;
43820
43194
  if (!testimonials || testimonials.length === 0) return null;
43821
43195
  return testimonials.map((testimonial, index) => /* @__PURE__ */ jsxs("div", { className: testimonialItemClassName, children: [
@@ -44682,7 +44056,7 @@ function TestimonialsCarouselImage({
44682
44056
  }) {
44683
44057
  const [currentIndex, setCurrentIndex] = useState(0);
44684
44058
  const totalTestimonials = testimonials?.length ?? 0;
44685
- const autoPlayTimerRef = React8.useRef(
44059
+ const autoPlayTimerRef = React32.useRef(
44686
44060
  null
44687
44061
  );
44688
44062
  const resetAutoPlay = useCallback(() => {
@@ -45668,7 +45042,7 @@ function TestimonialsSliderMinimal({
45668
45042
  }) {
45669
45043
  const [currentIndex, setCurrentIndex] = useState(0);
45670
45044
  const totalTestimonials = testimonials?.length ?? 0;
45671
- const autoPlayTimerRef = React8.useRef(
45045
+ const autoPlayTimerRef = React32.useRef(
45672
45046
  null
45673
45047
  );
45674
45048
  const resetAutoPlay = useCallback(() => {
@@ -46879,7 +46253,7 @@ function TestimonialsAnimatedSplit({
46879
46253
  }) {
46880
46254
  const [currentIndex, setCurrentIndex] = useState(0);
46881
46255
  const totalTestimonials = testimonials?.length ?? 0;
46882
- const autoPlayTimerRef = React8.useRef(
46256
+ const autoPlayTimerRef = React32.useRef(
46883
46257
  null
46884
46258
  );
46885
46259
  const resetAutoPlay = useCallback(() => {
@@ -48111,7 +47485,7 @@ function CaseStudiesFeaturedBorder({
48111
47485
  patternOpacity,
48112
47486
  optixFlowConfig
48113
47487
  }) {
48114
- const renderedFeatured = React8.useMemo(() => {
47488
+ const renderedFeatured = React32.useMemo(() => {
48115
47489
  if (featuredSlot) return featuredSlot;
48116
47490
  if (!featuredCaseStudy) return null;
48117
47491
  return /* @__PURE__ */ jsxs(
@@ -48185,7 +47559,7 @@ function CaseStudiesFeaturedBorder({
48185
47559
  featuredImageClassName,
48186
47560
  optixFlowConfig
48187
47561
  ]);
48188
- const renderedCaseStudies = React8.useMemo(() => {
47562
+ const renderedCaseStudies = React32.useMemo(() => {
48189
47563
  if (caseStudiesSlot) return caseStudiesSlot;
48190
47564
  if (!caseStudies || caseStudies.length === 0) return null;
48191
47565
  return caseStudies.map((item, idx) => /* @__PURE__ */ jsxs(
@@ -48294,7 +47668,7 @@ function CaseStudiesStatsCard({
48294
47668
  patternOpacity,
48295
47669
  optixFlowConfig
48296
47670
  }) {
48297
- const renderedStats = React8.useMemo(() => {
47671
+ const renderedStats = React32.useMemo(() => {
48298
47672
  if (statsSlot) return statsSlot;
48299
47673
  if (!stats || stats.length === 0) return null;
48300
47674
  return /* @__PURE__ */ jsx("div", { className: cn("flex w-full flex-col gap-8 sm:flex-row", statsClassName), children: stats.map((item, i) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
@@ -48302,7 +47676,7 @@ function CaseStudiesStatsCard({
48302
47676
  /* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-muted-foreground", children: item.text })
48303
47677
  ] }, `stats-${i}`)) });
48304
47678
  }, [statsSlot, stats, statsClassName]);
48305
- const renderedAuthor = React8.useMemo(() => {
47679
+ const renderedAuthor = React32.useMemo(() => {
48306
47680
  if (authorSlot) return authorSlot;
48307
47681
  if (!author) return null;
48308
47682
  return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2.5", authorClassName), children: [
@@ -48316,7 +47690,7 @@ function CaseStudiesStatsCard({
48316
47690
  ] })
48317
47691
  ] });
48318
47692
  }, [authorSlot, author, authorClassName]);
48319
- const renderedActions = React8.useMemo(() => {
47693
+ const renderedActions = React32.useMemo(() => {
48320
47694
  if (actionsSlot) return actionsSlot;
48321
47695
  if (!actions || actions.length === 0) return null;
48322
47696
  return /* @__PURE__ */ jsx("div", { className: cn("shrink-0", actionsClassName), children: actions.map((action, index) => {
@@ -55727,7 +55101,7 @@ function HeroSplitImageNewsletter({
55727
55101
  onError,
55728
55102
  uploadTokens
55729
55103
  });
55730
- const renderForm = React8.useMemo(() => {
55104
+ const renderForm = React32.useMemo(() => {
55731
55105
  if (formSlot) return formSlot;
55732
55106
  if (!formFields || formFields.length === 0) return null;
55733
55107
  const defaultButtonAction = {
@@ -55806,7 +55180,7 @@ function HeroSplitImageNewsletter({
55806
55180
  resetUpload,
55807
55181
  resetSubmissionState
55808
55182
  ]);
55809
- const renderImage = React8.useMemo(() => {
55183
+ const renderImage = React32.useMemo(() => {
55810
55184
  if (imageSlot) return imageSlot;
55811
55185
  if (!image) return null;
55812
55186
  return /* @__PURE__ */ jsx("div", { className: "relative lg:w-1/2", children: /* @__PURE__ */ jsx(
@@ -57239,7 +56613,7 @@ function HeroSaasDashboardPreview({
57239
56613
  onError,
57240
56614
  uploadTokens
57241
56615
  });
57242
- const renderBadge = React8.useMemo(() => {
56616
+ const renderBadge = React32.useMemo(() => {
57243
56617
  if (badgeSlot) return badgeSlot;
57244
56618
  return /* @__PURE__ */ jsxs(
57245
56619
  "div",
@@ -57254,7 +56628,7 @@ function HeroSaasDashboardPreview({
57254
56628
  }
57255
56629
  );
57256
56630
  }, [badgeSlot, badgeIcon, badgeText]);
57257
- const renderForm = React8.useMemo(() => {
56631
+ const renderForm = React32.useMemo(() => {
57258
56632
  if (formSlot) return formSlot;
57259
56633
  const defaultButtonAction = {
57260
56634
  label: "Start Free Trial",
@@ -57329,7 +56703,7 @@ function HeroSaasDashboardPreview({
57329
56703
  resetUpload,
57330
56704
  resetSubmissionState
57331
56705
  ]);
57332
- const renderBrowserPreview = React8.useMemo(() => {
56706
+ const renderBrowserPreview = React32.useMemo(() => {
57333
56707
  if (browserPreviewSlot) return browserPreviewSlot;
57334
56708
  if (!browserPreview) return null;
57335
56709
  return /* @__PURE__ */ jsxs("div", { className: cn("relative mt-12 md:mt-20", previewClassName), children: [
@@ -59580,7 +58954,7 @@ function HeroEcommerceProductShowcase({
59580
58954
  "flex flex-col md:flex-row items-center gap-4 md:gap-6 pt-8 md:pt-12",
59581
58955
  statsClassName
59582
58956
  ),
59583
- children: stats.map((stat, index) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
58957
+ children: stats.map((stat, index) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
59584
58958
  index > 0 && /* @__PURE__ */ jsx("div", { className: "h-12 w-px bg-border hidden md:flex" }),
59585
58959
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 justify-between flex-row md:flex-col text-left md:text-center w-full md:w-fit border md:border-none rounded-xl md:rounded-none p-4 md:p-0", children: [
59586
58960
  /* @__PURE__ */ jsxs(
@@ -60024,7 +59398,7 @@ function HeroNewsletterMinimal({
60024
59398
  disclaimerClassName,
60025
59399
  statsClassName
60026
59400
  }) {
60027
- const renderStats = React8.useMemo(() => {
59401
+ const renderStats = React32.useMemo(() => {
60028
59402
  if (statsSlot) return statsSlot;
60029
59403
  if (!stats || stats.length === 0) return null;
60030
59404
  return stats.map((stat, index) => /* @__PURE__ */ jsx("div", { className: cn("flex items-center", stat.className), children: /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
@@ -60050,7 +59424,7 @@ function HeroNewsletterMinimal({
60050
59424
  /* @__PURE__ */ jsx("div", { className: cn("text-sm"), children: stat.label })
60051
59425
  ] }) }, index));
60052
59426
  }, [statsSlot, stats]);
60053
- const renderForm = React8.useMemo(() => {
59427
+ const renderForm = React32.useMemo(() => {
60054
59428
  if (formSlot) return formSlot;
60055
59429
  if (!formEngineSetup) return null;
60056
59430
  const defaultButtonAction = {
@@ -60217,7 +59591,7 @@ function HeroComingSoonCountdown({
60217
59591
  formClassName,
60218
59592
  socialLinksClassName
60219
59593
  }) {
60220
- const [timeLeft, setTimeLeft] = React8.useState(null);
59594
+ const [timeLeft, setTimeLeft] = React32.useState(null);
60221
59595
  const {
60222
59596
  uploadTokens,
60223
59597
  uploadProgress,
@@ -60237,7 +59611,7 @@ function HeroComingSoonCountdown({
60237
59611
  onError,
60238
59612
  uploadTokens
60239
59613
  });
60240
- const calculateTimeLeft = React8.useCallback(() => {
59614
+ const calculateTimeLeft = React32.useCallback(() => {
60241
59615
  if (!countdownDate) return null;
60242
59616
  const now = Date.now();
60243
59617
  const target = countdownDate.getTime();
@@ -60250,7 +59624,7 @@ function HeroComingSoonCountdown({
60250
59624
  seconds: Math.floor(diff % (1e3 * 60) / 1e3)
60251
59625
  };
60252
59626
  }, [countdownDate]);
60253
- React8.useEffect(() => {
59627
+ React32.useEffect(() => {
60254
59628
  setTimeLeft(calculateTimeLeft());
60255
59629
  if (!countdownDate) return;
60256
59630
  const timer = setInterval(() => {
@@ -60261,7 +59635,7 @@ function HeroComingSoonCountdown({
60261
59635
  return () => clearInterval(timer);
60262
59636
  }, [countdownDate, calculateTimeLeft]);
60263
59637
  const showCountdown = countdownSlot || timeLeft;
60264
- const renderForm = React8.useMemo(() => {
59638
+ const renderForm = React32.useMemo(() => {
60265
59639
  if (formSlot) return formSlot;
60266
59640
  const defaultButtonAction = {
60267
59641
  label: "Notify Me",
@@ -60337,7 +59711,7 @@ function HeroComingSoonCountdown({
60337
59711
  resetUpload,
60338
59712
  resetSubmissionState
60339
59713
  ]);
60340
- const renderSocialLinks = React8.useMemo(() => {
59714
+ const renderSocialLinks = React32.useMemo(() => {
60341
59715
  if (socialLinksSlot) return socialLinksSlot;
60342
59716
  if (!socialLinks || socialLinks.length === 0) return null;
60343
59717
  return socialLinks.map((link, index) => /* @__PURE__ */ jsx(
@@ -60471,7 +59845,7 @@ function HeroEventRegistration({
60471
59845
  "flex flex-col md:flex-row items-center gap-4 md:gap-6 pt-8 md:pt-12 w-full md:w-fit",
60472
59846
  statsClassName
60473
59847
  ),
60474
- children: stats.map((stat, index) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
59848
+ children: stats.map((stat, index) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
60475
59849
  index > 0 && /* @__PURE__ */ jsx("div", { className: "h-12 w-px bg-border hidden md:flex" }),
60476
59850
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 justify-between flex-row md:flex-col text-left md:text-center w-full md:w-fit border md:border-none rounded-xl md:rounded-none p-4 md:p-0", children: [
60477
59851
  /* @__PURE__ */ jsxs(
@@ -60874,7 +60248,7 @@ function ComparisonTableTwoColumn({
60874
60248
  patternOpacity,
60875
60249
  optixFlowConfig
60876
60250
  }) {
60877
- const tableContent = React8.useMemo(() => {
60251
+ const tableContent = React32.useMemo(() => {
60878
60252
  if (tableSlot) return tableSlot;
60879
60253
  if (!rows || rows.length === 0) return null;
60880
60254
  return /* @__PURE__ */ jsx("div", { className: cn("-mr-4 overflow-x-auto", tableWrapperClassName), children: /* @__PURE__ */ jsx("div", { className: "min-w-2xl overflow-hidden", children: /* @__PURE__ */ jsxs(
@@ -60904,7 +60278,7 @@ function ComparisonTableTwoColumn({
60904
60278
  optixFlowConfig
60905
60279
  }
60906
60280
  ) : optionBLabel && (typeof optionBLabel === "string" ? /* @__PURE__ */ jsx("span", { className: "text-lg font-semibold", children: optionBLabel }) : optionBLabel) }),
60907
- rows.map((row, idx) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
60281
+ rows.map((row, idx) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
60908
60282
  /* @__PURE__ */ jsx("div", { className: "flex items-center border-b p-3 text-base font-medium md:p-4 md:text-lg", children: row.label }),
60909
60283
  /* @__PURE__ */ jsx("div", { className: cn("border-b bg-success/5 p-3 md:p-6", optionACellClassName), children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
60910
60284
  row.hasIcon && /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/circle-check-big", size: 20, className: "text-success" }),
@@ -60933,14 +60307,14 @@ function ComparisonTableTwoColumn({
60933
60307
  optionBLabel,
60934
60308
  optixFlowConfig
60935
60309
  ]);
60936
- const headingContent = React8.useMemo(() => {
60310
+ const headingContent = React32.useMemo(() => {
60937
60311
  if (!heading) return null;
60938
60312
  if (typeof heading === "string") {
60939
60313
  return /* @__PURE__ */ jsx("h1", { className: cn("mb-8 text-3xl font-bold md:mb-12 md:text-5xl", headingClassName), children: heading });
60940
60314
  }
60941
60315
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
60942
60316
  }, [heading, headingClassName]);
60943
- const descriptionContent = React8.useMemo(() => {
60317
+ const descriptionContent = React32.useMemo(() => {
60944
60318
  if (!description) return null;
60945
60319
  if (typeof description === "string") {
60946
60320
  return /* @__PURE__ */ jsx("p", { className: cn("mb-8 text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -60987,7 +60361,7 @@ function ComparisonFeatureCards({
60987
60361
  patternOpacity,
60988
60362
  optixFlowConfig
60989
60363
  }) {
60990
- const renderCard = React8.useCallback(
60364
+ const renderCard = React32.useCallback(
60991
60365
  (product, isHighlighted) => /* @__PURE__ */ jsxs(
60992
60366
  "div",
60993
60367
  {
@@ -61043,7 +60417,7 @@ function ComparisonFeatureCards({
61043
60417
  ),
61044
60418
  [cardClassName, optixFlowConfig]
61045
60419
  );
61046
- const cardsContent = React8.useMemo(() => {
60420
+ const cardsContent = React32.useMemo(() => {
61047
60421
  if (cardsSlot) return cardsSlot;
61048
60422
  if (!productA || !productB) return null;
61049
60423
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
@@ -61051,28 +60425,28 @@ function ComparisonFeatureCards({
61051
60425
  renderCard(productB, productB.highlighted ?? false)
61052
60426
  ] });
61053
60427
  }, [cardsSlot, productA, productB, renderCard]);
61054
- const headingContent = React8.useMemo(() => {
60428
+ const headingContent = React32.useMemo(() => {
61055
60429
  if (!heading) return null;
61056
60430
  if (typeof heading === "string") {
61057
60431
  return /* @__PURE__ */ jsx("h1", { className: cn("mb-6 text-4xl font-semibold md:text-7xl", headingClassName), children: heading });
61058
60432
  }
61059
60433
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
61060
60434
  }, [heading, headingClassName]);
61061
- const descriptionContent = React8.useMemo(() => {
60435
+ const descriptionContent = React32.useMemo(() => {
61062
60436
  if (!description) return null;
61063
60437
  if (typeof description === "string") {
61064
60438
  return /* @__PURE__ */ jsx("p", { className: cn("mx-auto max-w-4xl text-muted-foreground md:text-xl", descriptionClassName), children: description });
61065
60439
  }
61066
60440
  return /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description });
61067
60441
  }, [description, descriptionClassName]);
61068
- const suitabilityContent = React8.useMemo(() => {
60442
+ const suitabilityContent = React32.useMemo(() => {
61069
60443
  if (!suitabilityTitle && !suitabilityDescription) return null;
61070
60444
  return /* @__PURE__ */ jsxs("div", { className: suitabilityClassName, children: [
61071
60445
  suitabilityTitle && (typeof suitabilityTitle === "string" ? /* @__PURE__ */ jsx("h2", { className: "mb-4 text-3xl font-semibold", children: suitabilityTitle }) : suitabilityTitle),
61072
60446
  suitabilityDescription && (typeof suitabilityDescription === "string" ? /* @__PURE__ */ jsx("p", { className: "leading-6 text-muted-foreground md:text-lg", children: suitabilityDescription }) : suitabilityDescription)
61073
60447
  ] });
61074
60448
  }, [suitabilityTitle, suitabilityDescription, suitabilityClassName]);
61075
- const differencesContent = React8.useMemo(() => {
60449
+ const differencesContent = React32.useMemo(() => {
61076
60450
  if (!differencesTitle && !differencesDescription) return null;
61077
60451
  return /* @__PURE__ */ jsxs("div", { className: cn("mt-16", differencesClassName), children: [
61078
60452
  differencesTitle && (typeof differencesTitle === "string" ? /* @__PURE__ */ jsx("h2", { className: "mb-4 text-3xl font-semibold", children: differencesTitle }) : differencesTitle),
@@ -61120,7 +60494,7 @@ function ComparisonGridBadges({
61120
60494
  pattern,
61121
60495
  patternOpacity
61122
60496
  }) {
61123
- const featuresContent = React8.useMemo(() => {
60497
+ const featuresContent = React32.useMemo(() => {
61124
60498
  if (featuresSlot) return featuresSlot;
61125
60499
  if (!features || features.length === 0) return null;
61126
60500
  return features.map((feature, idx) => /* @__PURE__ */ jsxs(
@@ -61167,14 +60541,14 @@ function ComparisonGridBadges({
61167
60541
  idx
61168
60542
  ));
61169
60543
  }, [featuresSlot, features, featureCardClassName, badgeClassName, optionALabel, optionBLabel]);
61170
- const headingContent = React8.useMemo(() => {
60544
+ const headingContent = React32.useMemo(() => {
61171
60545
  if (!heading) return null;
61172
60546
  if (typeof heading === "string") {
61173
60547
  return /* @__PURE__ */ jsx("h2", { className: cn("mb-4 text-3xl font-bold md:text-5xl", headingClassName), children: heading });
61174
60548
  }
61175
60549
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
61176
60550
  }, [heading, headingClassName]);
61177
- const descriptionContent = React8.useMemo(() => {
60551
+ const descriptionContent = React32.useMemo(() => {
61178
60552
  if (!description) return null;
61179
60553
  if (typeof description === "string") {
61180
60554
  return /* @__PURE__ */ jsx("p", { className: cn("mx-auto max-w-2xl text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -61222,7 +60596,7 @@ function ComparisonMetricsRows({
61222
60596
  pattern,
61223
60597
  patternOpacity
61224
60598
  }) {
61225
- const metricsContent = React8.useMemo(() => {
60599
+ const metricsContent = React32.useMemo(() => {
61226
60600
  if (metricsSlot) return metricsSlot;
61227
60601
  if (!metrics || metrics.length === 0) return null;
61228
60602
  return /* @__PURE__ */ jsx(
@@ -61262,7 +60636,7 @@ function ComparisonMetricsRows({
61262
60636
  }
61263
60637
  );
61264
60638
  }, [metricsSlot, metrics, metricsClassName, metricRowClassName]);
61265
- const actionsContent = React8.useMemo(() => {
60639
+ const actionsContent = React32.useMemo(() => {
61266
60640
  if (actionsSlot) return actionsSlot;
61267
60641
  if (!actions || actions.length === 0) return null;
61268
60642
  return /* @__PURE__ */ jsx("div", { className: cn("flex justify-end", actionsClassName), children: actions.map((action, idx) => /* @__PURE__ */ jsxs(
@@ -61283,7 +60657,7 @@ function ComparisonMetricsRows({
61283
60657
  idx
61284
60658
  )) });
61285
60659
  }, [actionsSlot, actions, actionsClassName]);
61286
- const headingContent = React8.useMemo(() => {
60660
+ const headingContent = React32.useMemo(() => {
61287
60661
  if (!heading) return null;
61288
60662
  if (typeof heading === "string") {
61289
60663
  return /* @__PURE__ */ jsx(
@@ -61299,7 +60673,7 @@ function ComparisonMetricsRows({
61299
60673
  }
61300
60674
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
61301
60675
  }, [heading, headingClassName]);
61302
- const descriptionContent = React8.useMemo(() => {
60676
+ const descriptionContent = React32.useMemo(() => {
61303
60677
  if (!description) return null;
61304
60678
  if (typeof description === "string") {
61305
60679
  return /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -61362,7 +60736,7 @@ function ComparisonImageCards({
61362
60736
  patternOpacity,
61363
60737
  optixFlowConfig
61364
60738
  }) {
61365
- const renderCard = React8.useCallback(
60739
+ const renderCard = React32.useCallback(
61366
60740
  (option) => /* @__PURE__ */ jsx("div", { className: cn("relative h-full", cardClassName), children: /* @__PURE__ */ jsxs("div", { className: cn(
61367
60741
  "relative aspect-4/5 min-h-[400px] overflow-hidden rounded-2xl sm:aspect-[0.9] sm:min-h-[480px] sm:rounded-3xl md:min-h-[520px]",
61368
60742
  getNestedCardBg(background, "accent"),
@@ -61386,7 +60760,7 @@ function ComparisonImageCards({
61386
60760
  ] }) }),
61387
60761
  [cardClassName, optixFlowConfig]
61388
60762
  );
61389
- const cardsContent = React8.useMemo(() => {
60763
+ const cardsContent = React32.useMemo(() => {
61390
60764
  if (cardsSlot) return cardsSlot;
61391
60765
  if (!optionA || !optionB) return null;
61392
60766
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
@@ -61404,14 +60778,14 @@ function ComparisonImageCards({
61404
60778
  )
61405
60779
  ] });
61406
60780
  }, [cardsSlot, optionA, optionB, dividerText, dividerClassName, renderCard]);
61407
- const headingContent = React8.useMemo(() => {
60781
+ const headingContent = React32.useMemo(() => {
61408
60782
  if (!heading) return null;
61409
60783
  if (typeof heading === "string") {
61410
60784
  return /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-medium sm:text-4xl md:text-5xl lg:text-6xl", headingClassName), children: heading });
61411
60785
  }
61412
60786
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
61413
60787
  }, [heading, headingClassName]);
61414
- const descriptionContent = React8.useMemo(() => {
60788
+ const descriptionContent = React32.useMemo(() => {
61415
60789
  if (!description) return null;
61416
60790
  if (typeof description === "string") {
61417
60791
  return /* @__PURE__ */ jsx("p", { className: cn("mx-auto mt-4 max-w-3xl text-lg text-muted-foreground sm:mt-6 sm:text-xl", descriptionClassName), children: description });
@@ -61541,7 +60915,7 @@ function ComparisonTableTabs({
61541
60915
  patternOpacity
61542
60916
  }) {
61543
60917
  const [selectedTab, setSelectedTab] = useState(models?.[0]?.name || "");
61544
- const renderStatusIcon = React8.useCallback((status) => {
60918
+ const renderStatusIcon = React32.useCallback((status) => {
61545
60919
  if (status === "positive") {
61546
60920
  return /* @__PURE__ */ jsx("span", { className: "flex size-8 items-center justify-center rounded-full border bg-success/10", children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/circle-check", size: 16, className: "text-success" }) });
61547
60921
  }
@@ -61550,7 +60924,7 @@ function ComparisonTableTabs({
61550
60924
  }
61551
60925
  return /* @__PURE__ */ jsx("span", { className: "flex size-8 items-center justify-center rounded-full border bg-accent/10", children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/circle-minus", size: 16, className: "text-accent" }) });
61552
60926
  }, []);
61553
- const tableContent = React8.useMemo(() => {
60927
+ const tableContent = React32.useMemo(() => {
61554
60928
  if (tableSlot) return tableSlot;
61555
60929
  if (!models || models.length === 0 || !features || features.length === 0) return null;
61556
60930
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
@@ -61609,14 +60983,14 @@ function ComparisonTableTabs({
61609
60983
  ] }) })
61610
60984
  ] });
61611
60985
  }, [tableSlot, models, features, tabsClassName, tableClassName, tableHeaderClassName, tableCellClassName, selectedTab, renderStatusIcon]);
61612
- const headingContent = React8.useMemo(() => {
60986
+ const headingContent = React32.useMemo(() => {
61613
60987
  if (!heading) return null;
61614
60988
  if (typeof heading === "string") {
61615
60989
  return /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-bold md:text-4xl lg:text-5xl", headingClassName), children: heading });
61616
60990
  }
61617
60991
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
61618
60992
  }, [heading, headingClassName]);
61619
- const descriptionContent = React8.useMemo(() => {
60993
+ const descriptionContent = React32.useMemo(() => {
61620
60994
  if (!description) return null;
61621
60995
  if (typeof description === "string") {
61622
60996
  return /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -61707,7 +61081,7 @@ function ComparisonTableTooltips({
61707
61081
  pattern,
61708
61082
  patternOpacity
61709
61083
  }) {
61710
- const renderCellContent = React8.useCallback(
61084
+ const renderCellContent = React32.useCallback(
61711
61085
  (cell, isHighlighted) => {
61712
61086
  if (typeof cell === "string") {
61713
61087
  return cell;
@@ -61734,7 +61108,7 @@ function ComparisonTableTooltips({
61734
61108
  },
61735
61109
  []
61736
61110
  );
61737
- const tableContent = React8.useMemo(() => {
61111
+ const tableContent = React32.useMemo(() => {
61738
61112
  if (tableSlot) return tableSlot;
61739
61113
  if (!rows || rows.length === 0) return null;
61740
61114
  return /* @__PURE__ */ jsxs(Table, { className: cn("rounded border text-left shadow-lg", tableClassName), children: [
@@ -61760,14 +61134,14 @@ function ComparisonTableTooltips({
61760
61134
  ] }, idx)) })
61761
61135
  ] });
61762
61136
  }, [tableSlot, rows, tableClassName, tableHeaderClassName, tableCellClassName, optionALabel, optionBLabel, renderCellContent]);
61763
- const headingContent = React8.useMemo(() => {
61137
+ const headingContent = React32.useMemo(() => {
61764
61138
  if (!heading) return null;
61765
61139
  if (typeof heading === "string") {
61766
61140
  return /* @__PURE__ */ jsx("h2", { className: cn("mb-4 text-center text-4xl font-semibold", headingClassName), children: heading });
61767
61141
  }
61768
61142
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
61769
61143
  }, [heading, headingClassName]);
61770
- const descriptionContent = React8.useMemo(() => {
61144
+ const descriptionContent = React32.useMemo(() => {
61771
61145
  if (!description) return null;
61772
61146
  if (typeof description === "string") {
61773
61147
  return /* @__PURE__ */ jsx("p", { className: cn("mb-8 text-center text-muted-foreground", descriptionClassName), children: description });
@@ -61809,7 +61183,7 @@ function ComparisonFeatureGrid({
61809
61183
  pattern,
61810
61184
  patternOpacity
61811
61185
  }) {
61812
- const renderStatusIcon = React8.useCallback((status) => {
61186
+ const renderStatusIcon = React32.useCallback((status) => {
61813
61187
  if (status === true) {
61814
61188
  return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/check", size: 20, className: "text-success" });
61815
61189
  }
@@ -61818,7 +61192,7 @@ function ComparisonFeatureGrid({
61818
61192
  }
61819
61193
  return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/x", size: 20, className: "text-destructive" });
61820
61194
  }, []);
61821
- const gridContent = React8.useMemo(() => {
61195
+ const gridContent = React32.useMemo(() => {
61822
61196
  if (gridSlot) return gridSlot;
61823
61197
  if (!features || features.length === 0) return null;
61824
61198
  return /* @__PURE__ */ jsxs(
@@ -61884,14 +61258,14 @@ function ComparisonFeatureGrid({
61884
61258
  optionBLabel,
61885
61259
  renderStatusIcon
61886
61260
  ]);
61887
- const headingContent = React8.useMemo(() => {
61261
+ const headingContent = React32.useMemo(() => {
61888
61262
  if (!heading) return null;
61889
61263
  if (typeof heading === "string") {
61890
61264
  return /* @__PURE__ */ jsx("h2", { className: cn("mb-4 text-center text-4xl font-semibold", headingClassName), children: heading });
61891
61265
  }
61892
61266
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
61893
61267
  }, [heading, headingClassName]);
61894
- const descriptionContent = React8.useMemo(() => {
61268
+ const descriptionContent = React32.useMemo(() => {
61895
61269
  if (!description) return null;
61896
61270
  if (typeof description === "string") {
61897
61271
  return /* @__PURE__ */ jsx("p", { className: cn("mb-8 text-center text-muted-foreground", descriptionClassName), children: description });
@@ -61935,7 +61309,7 @@ function ComparisonAiModels({
61935
61309
  optixFlowConfig
61936
61310
  }) {
61937
61311
  const [hoveredModel, setHoveredModel] = useState(null);
61938
- const renderStatusIcon = React8.useCallback((status) => {
61312
+ const renderStatusIcon = React32.useCallback((status) => {
61939
61313
  if (status === "best") {
61940
61314
  return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/circle-check", size: 16, className: "text-success" });
61941
61315
  }
@@ -61944,7 +61318,7 @@ function ComparisonAiModels({
61944
61318
  }
61945
61319
  return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/minus", size: 16, className: "text-muted-foreground" });
61946
61320
  }, []);
61947
- const getCellClassName = React8.useCallback(
61321
+ const getCellClassName = React32.useCallback(
61948
61322
  (status, modelKey) => {
61949
61323
  const baseClass = "cursor-pointer py-4 text-center font-medium transition-all duration-300";
61950
61324
  let statusClass = "";
@@ -61965,7 +61339,7 @@ function ComparisonAiModels({
61965
61339
  },
61966
61340
  [hoveredModel]
61967
61341
  );
61968
- const getSummaryCardClassName = React8.useCallback(
61342
+ const getSummaryCardClassName = React32.useCallback(
61969
61343
  (modelKey) => {
61970
61344
  const baseClass = "rounded border border-border/30 bg-background/50 p-3 transition-all duration-300";
61971
61345
  if (hoveredModel === modelKey) {
@@ -61980,7 +61354,7 @@ function ComparisonAiModels({
61980
61354
  },
61981
61355
  [hoveredModel]
61982
61356
  );
61983
- const tableContent = React8.useMemo(() => {
61357
+ const tableContent = React32.useMemo(() => {
61984
61358
  if (tableSlot) return tableSlot;
61985
61359
  if (!models || !comparisonData || comparisonData.length === 0) return null;
61986
61360
  return /* @__PURE__ */ jsx(
@@ -62058,7 +61432,7 @@ function ComparisonAiModels({
62058
61432
  getCellClassName,
62059
61433
  renderStatusIcon
62060
61434
  ]);
62061
- const analysisContent = React8.useMemo(() => {
61435
+ const analysisContent = React32.useMemo(() => {
62062
61436
  if (analysisSlot) return analysisSlot;
62063
61437
  if (!models) return null;
62064
61438
  return /* @__PURE__ */ jsx("div", { className: cn(
@@ -62099,14 +61473,14 @@ function ComparisonAiModels({
62099
61473
  ] })
62100
61474
  ] }) });
62101
61475
  }, [analysisSlot, models, analysisClassName, getSummaryCardClassName]);
62102
- const headingContent = React8.useMemo(() => {
61476
+ const headingContent = React32.useMemo(() => {
62103
61477
  if (!heading) return null;
62104
61478
  if (typeof heading === "string") {
62105
61479
  return /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-bold md:text-4xl lg:text-5xl", headingClassName), children: heading });
62106
61480
  }
62107
61481
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
62108
61482
  }, [heading, headingClassName]);
62109
- const descriptionContent = React8.useMemo(() => {
61483
+ const descriptionContent = React32.useMemo(() => {
62110
61484
  if (!description) return null;
62111
61485
  if (typeof description === "string") {
62112
61486
  return /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -62156,7 +61530,7 @@ function ComparisonLegacyModern({
62156
61530
  pattern,
62157
61531
  patternOpacity
62158
61532
  }) {
62159
- const columnsContent = React8.useMemo(() => {
61533
+ const columnsContent = React32.useMemo(() => {
62160
61534
  if (columnsSlot) return columnsSlot;
62161
61535
  if (!legacyFeatures || legacyFeatures.length === 0 || !modernFeatures || modernFeatures.length === 0)
62162
61536
  return null;
@@ -62168,7 +61542,7 @@ function ComparisonLegacyModern({
62168
61542
  legacyColumnClassName
62169
61543
  ), children: [
62170
61544
  legacyTitle && (typeof legacyTitle === "string" ? /* @__PURE__ */ jsx("h3", { className: "text-2xl font-medium", children: legacyTitle }) : legacyTitle),
62171
- /* @__PURE__ */ jsx("ul", { className: "mt-9 space-y-3", children: legacyFeatures.map((feature, idx) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
61545
+ /* @__PURE__ */ jsx("ul", { className: "mt-9 space-y-3", children: legacyFeatures.map((feature, idx) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
62172
61546
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
62173
61547
  /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/x", size: 16, className: "my-1.5 shrink-0 text-muted-foreground" }),
62174
61548
  /* @__PURE__ */ jsx("li", { className: "text-sm", children: feature.text })
@@ -62185,7 +61559,7 @@ function ComparisonLegacyModern({
62185
61559
  ),
62186
61560
  children: [
62187
61561
  modernTitle && (typeof modernTitle === "string" ? /* @__PURE__ */ jsx("h3", { className: "text-2xl font-medium", children: modernTitle }) : modernTitle),
62188
- /* @__PURE__ */ jsx("ul", { className: "mt-9 space-y-3", children: modernFeatures.map((feature, idx) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
61562
+ /* @__PURE__ */ jsx("ul", { className: "mt-9 space-y-3", children: modernFeatures.map((feature, idx) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
62189
61563
  /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2 text-sm", children: [
62190
61564
  /* @__PURE__ */ jsx("span", { className: "text-lg", children: feature.emoji }),
62191
61565
  feature.text
@@ -62197,7 +61571,7 @@ function ComparisonLegacyModern({
62197
61571
  )
62198
61572
  ] });
62199
61573
  }, [columnsSlot, legacyFeatures, modernFeatures, legacyTitle, modernTitle, legacyColumnClassName, modernColumnClassName]);
62200
- const headingContent = React8.useMemo(() => {
61574
+ const headingContent = React32.useMemo(() => {
62201
61575
  if (!heading && !headingHighlight) return null;
62202
61576
  return /* @__PURE__ */ jsxs("h2", { className: cn("text-4xl font-medium md:text-5xl lg:text-7xl", headingClassName), children: [
62203
61577
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
@@ -62210,7 +61584,7 @@ function ComparisonLegacyModern({
62210
61584
  ] }) : headingHighlight)
62211
61585
  ] });
62212
61586
  }, [heading, headingHighlight, headingClassName, headingHighlightClassName]);
62213
- const descriptionContent = React8.useMemo(() => {
61587
+ const descriptionContent = React32.useMemo(() => {
62214
61588
  if (!description) return null;
62215
61589
  if (typeof description === "string") {
62216
61590
  return /* @__PURE__ */ jsx("p", { className: cn("text-lg", descriptionClassName), children: description });
@@ -62383,7 +61757,7 @@ var NavbarMobileMenu = ({
62383
61757
  closeIconClassName,
62384
61758
  title = "Mobile Navigation"
62385
61759
  }) => {
62386
- React8.useEffect(() => {
61760
+ React32.useEffect(() => {
62387
61761
  if (open) {
62388
61762
  const originalOverflow = document.body.style.overflow;
62389
61763
  document.body.style.overflow = "hidden";
@@ -62612,7 +61986,7 @@ var NavbarDropdownMenu = ({
62612
61986
  patternOpacity,
62613
61987
  optixFlowConfig
62614
61988
  }) => {
62615
- const [open, setOpen] = React8.useState(false);
61989
+ const [open, setOpen] = React32.useState(false);
62616
61990
  const renderAuthActions = useMemo(() => {
62617
61991
  if (authActionsSlot) return authActionsSlot;
62618
61992
  if (!authActions || authActions.length === 0) return null;
@@ -62838,7 +62212,7 @@ var NavbarCenteredMenu = ({
62838
62212
  patternOpacity,
62839
62213
  optixFlowConfig
62840
62214
  }) => {
62841
- const [open, setOpen] = React8.useState(false);
62215
+ const [open, setOpen] = React32.useState(false);
62842
62216
  const renderAuthActions = useMemo(() => {
62843
62217
  if (authActionsSlot) return authActionsSlot;
62844
62218
  if (!authActions || authActions.length === 0) return null;
@@ -62978,7 +62352,7 @@ var DesktopMenuItem = ({
62978
62352
  index,
62979
62353
  optixFlowConfig
62980
62354
  }) => {
62981
- const imagesRef = React8.useRef([]);
62355
+ const imagesRef = React32.useRef([]);
62982
62356
  const layout = link.layout || "simple-grid";
62983
62357
  const handleMouseEnter = (event) => {
62984
62358
  const index2 = Number(event.currentTarget.getAttribute("data-index"));
@@ -64213,7 +63587,7 @@ var NavbarFeatureGrid = ({
64213
63587
  patternOpacity,
64214
63588
  optixFlowConfig
64215
63589
  }) => {
64216
- const [open, setOpen] = React8.useState(false);
63590
+ const [open, setOpen] = React32.useState(false);
64217
63591
  const renderAuthActions = useMemo(() => {
64218
63592
  if (authActionsSlot) return authActionsSlot;
64219
63593
  if (!authActions || authActions.length === 0) return null;
@@ -67423,7 +66797,7 @@ var DesktopMenuItem7 = ({
67423
66797
  if (item.groups && item.groups.length > 0) {
67424
66798
  return /* @__PURE__ */ jsxs(NavigationMenuItem, { value: `${index}`, children: [
67425
66799
  /* @__PURE__ */ jsx(NavigationMenuTrigger, { children: item.label }),
67426
- /* @__PURE__ */ jsx(NavigationMenuContent, { className: "p-0", children: /* @__PURE__ */ jsx("div", { className: "flex", children: item.groups.map((group, groupIndex) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
66800
+ /* @__PURE__ */ jsx(NavigationMenuContent, { className: "p-0", children: /* @__PURE__ */ jsx("div", { className: "flex", children: item.groups.map((group, groupIndex) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
67427
66801
  groupIndex > 0 && /* @__PURE__ */ jsx(
67428
66802
  Separator,
67429
66803
  {
@@ -68175,7 +67549,7 @@ var NavbarSimpleLinks = ({
68175
67549
  const renderNavItems = useMemo(() => {
68176
67550
  if (navItemsSlot) return navItemsSlot;
68177
67551
  if (!navItems || navItems.length === 0) return null;
68178
- return navItems.map((item) => /* @__PURE__ */ jsx(React8.Fragment, { children: /* @__PURE__ */ jsx(NavigationMenuItem, { children: /* @__PURE__ */ jsx(
67552
+ return navItems.map((item) => /* @__PURE__ */ jsx(React32.Fragment, { children: /* @__PURE__ */ jsx(NavigationMenuItem, { children: /* @__PURE__ */ jsx(
68179
67553
  NavigationMenuLink,
68180
67554
  {
68181
67555
  "data-nav-item": item.name,
@@ -73204,7 +72578,7 @@ function PricingFullComparison({
73204
72578
  resolvedPlanIds[index]
73205
72579
  ))
73206
72580
  ] }) }),
73207
- /* @__PURE__ */ jsx("tbody", { children: categories.map((category) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
72581
+ /* @__PURE__ */ jsx("tbody", { children: categories.map((category) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
73208
72582
  /* @__PURE__ */ jsx("tr", { className: cn(getNestedCardBg(background), getNestedCardTextColor(background), categoryRowClassName), children: /* @__PURE__ */ jsx(
73209
72583
  "td",
73210
72584
  {
@@ -77805,9 +77179,9 @@ function ProcessStickySteps({
77805
77179
  );
77806
77180
  }
77807
77181
  var usePrevious = (value) => {
77808
- const [prev, setPrev] = React8.useState(void 0);
77809
- const ref = React8.useRef(value);
77810
- React8.useEffect(() => {
77182
+ const [prev, setPrev] = React32.useState(void 0);
77183
+ const ref = React32.useRef(value);
77184
+ React32.useEffect(() => {
77811
77185
  setPrev(ref.current);
77812
77186
  ref.current = value;
77813
77187
  }, [value]);
@@ -77820,12 +77194,12 @@ var ProcessCard = ({
77820
77194
  itemClassName,
77821
77195
  background
77822
77196
  }) => {
77823
- const ref = React8.useRef(null);
77197
+ const ref = React32.useRef(null);
77824
77198
  const itemInView = useInView(ref, {
77825
77199
  amount: 0,
77826
77200
  margin: "0px 0px -60% 0px"
77827
77201
  });
77828
- React8.useEffect(() => {
77202
+ React32.useEffect(() => {
77829
77203
  if (itemInView) {
77830
77204
  setActive(index);
77831
77205
  }
@@ -77875,7 +77249,7 @@ function ProcessScrollImage({
77875
77249
  ctaText,
77876
77250
  ctaUrl
77877
77251
  }) {
77878
- const [active, setActive] = React8.useState(0);
77252
+ const [active, setActive] = React32.useState(0);
77879
77253
  const previousActive = usePrevious(active);
77880
77254
  const resolvedHeading = title ?? heading;
77881
77255
  const resolvedActions = actions ?? (ctaText && ctaUrl ? [
@@ -78058,7 +77432,7 @@ var ProcessCard2 = ({
78058
77432
  itemClassName,
78059
77433
  hoverImageClassName
78060
77434
  }) => {
78061
- const [isHovered, setIsHovered] = React8.useState(false);
77435
+ const [isHovered, setIsHovered] = React32.useState(false);
78062
77436
  const titleText = typeof step.title === "string" ? step.title : `Step ${index + 1}`;
78063
77437
  return /* @__PURE__ */ jsxs(
78064
77438
  "li",
@@ -78416,7 +77790,7 @@ function ProcessExpandableTimeline({
78416
77790
  spacing = "xl",
78417
77791
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8"
78418
77792
  }) {
78419
- const [expandedIndex, setExpandedIndex] = React8.useState(null);
77793
+ const [expandedIndex, setExpandedIndex] = React32.useState(null);
78420
77794
  const toggleExpand = (index) => {
78421
77795
  setExpandedIndex(expandedIndex === index ? null : index);
78422
77796
  };
@@ -83206,7 +82580,7 @@ function ListAchievementsShowcase({
83206
82580
  if (!items || items.length === 0) return null;
83207
82581
  return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col", itemsClassName), children: [
83208
82582
  /* @__PURE__ */ jsx(Separator, {}),
83209
- items.map((item, index) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
82583
+ items.map((item, index) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
83210
82584
  /* @__PURE__ */ jsxs(
83211
82585
  "div",
83212
82586
  {
@@ -83326,7 +82700,7 @@ function ListCareerTimeline({
83326
82700
  const renderExperiences = useMemo(() => {
83327
82701
  if (experiencesSlot) return experiencesSlot;
83328
82702
  if (!experiences || experiences.length === 0) return null;
83329
- return /* @__PURE__ */ jsx("div", { className: experiencesClassName, children: experiences.map((experience, idx) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
82703
+ return /* @__PURE__ */ jsx("div", { className: experiencesClassName, children: experiences.map((experience, idx) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
83330
82704
  /* @__PURE__ */ jsx(Separator, {}),
83331
82705
  /* @__PURE__ */ jsxs(
83332
82706
  "div",
@@ -83347,7 +82721,7 @@ function ListCareerTimeline({
83347
82721
  const renderAwards = useMemo(() => {
83348
82722
  if (awardsSlot) return awardsSlot;
83349
82723
  if (!awards || awards.length === 0) return null;
83350
- return /* @__PURE__ */ jsx("div", { className: awardsClassName, children: awards.map((award, idx) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
82724
+ return /* @__PURE__ */ jsx("div", { className: awardsClassName, children: awards.map((award, idx) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
83351
82725
  /* @__PURE__ */ jsx(Separator, {}),
83352
82726
  /* @__PURE__ */ jsxs(
83353
82727
  "div",
@@ -83482,7 +82856,7 @@ function ListMetricsDashboard({
83482
82856
  activeCategory: controlledActiveCategory,
83483
82857
  onActiveCategoryChange
83484
82858
  }) {
83485
- const [internalActiveTab, setInternalActiveTab] = React8.useState("all");
82859
+ const [internalActiveTab, setInternalActiveTab] = React32.useState("all");
83486
82860
  const activeTab = controlledActiveCategory ?? internalActiveTab;
83487
82861
  const handleTabChange = (value) => {
83488
82862
  if (onActiveCategoryChange) {
@@ -83966,7 +83340,7 @@ function ListSearchableGrid({
83966
83340
  searchTerm: controlledSearchTerm,
83967
83341
  onSearchTermChange
83968
83342
  }) {
83969
- const [internalSearchTerm, setInternalSearchTerm] = React8.useState("");
83343
+ const [internalSearchTerm, setInternalSearchTerm] = React32.useState("");
83970
83344
  const searchTerm = controlledSearchTerm ?? internalSearchTerm;
83971
83345
  const handleSearchChange = (value) => {
83972
83346
  if (onSearchTermChange) {
@@ -83975,7 +83349,7 @@ function ListSearchableGrid({
83975
83349
  setInternalSearchTerm(value);
83976
83350
  }
83977
83351
  };
83978
- const filteredItems = React8.useMemo(() => {
83352
+ const filteredItems = React32.useMemo(() => {
83979
83353
  if (!searchTerm) {
83980
83354
  return items ?? [];
83981
83355
  }
@@ -84175,7 +83549,7 @@ function OfferModalNewsletterDiscount({
84175
83549
  buttonAction
84176
83550
  }) {
84177
83551
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
84178
- const renderCloseButton = React8.useMemo(() => {
83552
+ const renderCloseButton = React32.useMemo(() => {
84179
83553
  if (closeButtonSlot) return closeButtonSlot;
84180
83554
  if (!closeButtonText) return null;
84181
83555
  return /* @__PURE__ */ jsx("div", { className: "absolute end-1.5 top-1.5", children: /* @__PURE__ */ jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsx(
@@ -84192,7 +83566,7 @@ function OfferModalNewsletterDiscount({
84192
83566
  }
84193
83567
  ) }) });
84194
83568
  }, [closeButtonSlot, closeButtonText, closeClassName]);
84195
- const renderHeader = React8.useMemo(() => {
83569
+ const renderHeader = React32.useMemo(() => {
84196
83570
  if (headerSlot) return headerSlot;
84197
83571
  if (!title) return null;
84198
83572
  return /* @__PURE__ */ jsx(DialogHeader, { className: headerClassName, children: /* @__PURE__ */ jsx(
@@ -84206,7 +83580,7 @@ function OfferModalNewsletterDiscount({
84206
83580
  }
84207
83581
  ) });
84208
83582
  }, [headerSlot, title, headerClassName, titleClassName]);
84209
- const renderForm = React8.useMemo(() => {
83583
+ const renderForm = React32.useMemo(() => {
84210
83584
  if (formSlot) return formSlot;
84211
83585
  if (!formEngineSetup) return null;
84212
83586
  const defaultButtonAction = {
@@ -84304,7 +83678,7 @@ function OfferModalMembershipImage({
84304
83678
  buttonAction
84305
83679
  }) {
84306
83680
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
84307
- const renderImage = React8.useMemo(() => {
83681
+ const renderImage = React32.useMemo(() => {
84308
83682
  if (imageSlot) return imageSlot;
84309
83683
  if (!image) return null;
84310
83684
  return /* @__PURE__ */ jsx(
@@ -84335,7 +83709,7 @@ function OfferModalMembershipImage({
84335
83709
  imageClassName,
84336
83710
  optixFlowConfig
84337
83711
  ]);
84338
- const renderCloseButton = React8.useMemo(() => {
83712
+ const renderCloseButton = React32.useMemo(() => {
84339
83713
  if (closeButtonSlot) return closeButtonSlot;
84340
83714
  return /* @__PURE__ */ jsx("div", { className: "absolute -end-px -top-px z-10", children: /* @__PURE__ */ jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsx(
84341
83715
  Pressable,
@@ -84351,7 +83725,7 @@ function OfferModalMembershipImage({
84351
83725
  }
84352
83726
  ) }) });
84353
83727
  }, [closeButtonSlot, closeClassName]);
84354
- const renderForm = React8.useMemo(() => {
83728
+ const renderForm = React32.useMemo(() => {
84355
83729
  if (formSlot) return formSlot;
84356
83730
  if (!formEngineSetup) return null;
84357
83731
  const defaultButtonAction = {
@@ -84384,7 +83758,7 @@ function OfferModalMembershipImage({
84384
83758
  }
84385
83759
  );
84386
83760
  }, [formSlot, formEngineSetup, buttonAction, formClassName]);
84387
- const renderFooter = React8.useMemo(() => {
83761
+ const renderFooter = React32.useMemo(() => {
84388
83762
  if (footerSlot) return footerSlot;
84389
83763
  if (!description) return null;
84390
83764
  return /* @__PURE__ */ jsx(DialogFooter, { className: footerClassName, children: /* @__PURE__ */ jsx(
@@ -84590,7 +83964,7 @@ function OfferModalSheetNewsletter({
84590
83964
  buttonAction
84591
83965
  }) {
84592
83966
  const sheetProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
84593
- const renderLogo = React8.useMemo(() => {
83967
+ const renderLogo = React32.useMemo(() => {
84594
83968
  if (logoSlot) return logoSlot;
84595
83969
  if (!logo) return null;
84596
83970
  const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
@@ -84604,7 +83978,7 @@ function OfferModalSheetNewsletter({
84604
83978
  }
84605
83979
  );
84606
83980
  }, [logoSlot, logo, logoClassName, optixFlowConfig]);
84607
- const renderHeader = React8.useMemo(() => {
83981
+ const renderHeader = React32.useMemo(() => {
84608
83982
  if (headerSlot) return headerSlot;
84609
83983
  return /* @__PURE__ */ jsxs(SheetHeader, { className: cn("gap-8 p-0", headerClassName), children: [
84610
83984
  renderLogo,
@@ -84637,7 +84011,7 @@ function OfferModalSheetNewsletter({
84637
84011
  description,
84638
84012
  descriptionClassName
84639
84013
  ]);
84640
- const renderForm = React8.useMemo(() => {
84014
+ const renderForm = React32.useMemo(() => {
84641
84015
  if (formSlot) return formSlot;
84642
84016
  if (!formEngineSetup) return null;
84643
84017
  const defaultButtonAction = {
@@ -84670,7 +84044,7 @@ function OfferModalSheetNewsletter({
84670
84044
  }
84671
84045
  );
84672
84046
  }, [formSlot, formEngineSetup, buttonAction, formClassName]);
84673
- const renderLegal = React8.useMemo(() => {
84047
+ const renderLegal = React32.useMemo(() => {
84674
84048
  if (legalSlot) return legalSlot;
84675
84049
  if (!termsUrl || !termsText || !privacyUrl || !privacyText) return null;
84676
84050
  return /* @__PURE__ */ jsxs("p", { className: cn("text-muted-foreground text-xs", legalClassName), children: [
@@ -84684,7 +84058,7 @@ function OfferModalSheetNewsletter({
84684
84058
  "."
84685
84059
  ] });
84686
84060
  }, [legalSlot, termsUrl, termsText, privacyUrl, privacyText, legalClassName]);
84687
- const renderImage = React8.useMemo(() => {
84061
+ const renderImage = React32.useMemo(() => {
84688
84062
  if (imageSlot) return imageSlot;
84689
84063
  if (!image) return null;
84690
84064
  return /* @__PURE__ */ jsx("div", { className: cn("h-1/2 basis-1/2", imageWrapperClassName), children: /* @__PURE__ */ jsx(AspectRatio, { ratio: 1, className: "overflow-hidden", children: /* @__PURE__ */ jsx(
@@ -85271,10 +84645,10 @@ function ProjectDetailSidebarNavigation(props) {
85271
84645
  heroImageClassName,
85272
84646
  metadataClassName
85273
84647
  } = props;
85274
- const [activeSection, setActiveSection] = React8.useState(
84648
+ const [activeSection, setActiveSection] = React32.useState(
85275
84649
  sections?.[0]?.id || ""
85276
84650
  );
85277
- React8.useEffect(() => {
84651
+ React32.useEffect(() => {
85278
84652
  const handleScroll = () => {
85279
84653
  const sectionElements = sections?.map(
85280
84654
  (section) => document.getElementById(section.id)
@@ -88134,7 +87508,7 @@ function ProjectDetailTabbedCaseStudy(props) {
88134
87508
  testimonialClassName,
88135
87509
  toolsClassName
88136
87510
  } = props;
88137
- const [activeTab, setActiveTab] = React8.useState(tabs?.[0]?.id || "");
87511
+ const [activeTab, setActiveTab] = React32.useState(tabs?.[0]?.id || "");
88138
87512
  const renderedBackAction = useMemo(() => {
88139
87513
  if (backActionSlot) return backActionSlot;
88140
87514
  if (!backAction) return null;
@@ -88522,7 +87896,7 @@ function RevealImage({
88522
87896
  index,
88523
87897
  optixFlowConfig
88524
87898
  }) {
88525
- const ref = React8.useRef(null);
87899
+ const ref = React32.useRef(null);
88526
87900
  const { scrollYProgress } = useScroll({
88527
87901
  target: ref,
88528
87902
  offset: ["start end", "end start"]
@@ -88717,7 +88091,7 @@ function ParallaxSection({
88717
88091
  index,
88718
88092
  optixFlowConfig
88719
88093
  }) {
88720
- const ref = React8.useRef(null);
88094
+ const ref = React32.useRef(null);
88721
88095
  const { scrollYProgress } = useScroll({
88722
88096
  target: ref,
88723
88097
  offset: ["start end", "end start"]
@@ -88790,7 +88164,7 @@ function ProjectDetailParallaxScroll(props) {
88790
88164
  heroImageClassName,
88791
88165
  sectionsClassName
88792
88166
  } = props;
88793
- const heroRef = React8.useRef(null);
88167
+ const heroRef = React32.useRef(null);
88794
88168
  const { scrollYProgress } = useScroll({
88795
88169
  target: heroRef,
88796
88170
  offset: ["start start", "end start"]
@@ -89328,7 +88702,7 @@ function IndustriesExpandableShowcase({
89328
88702
  patternClassName,
89329
88703
  optixFlowConfig
89330
88704
  }) {
89331
- const [activeContractor, setActiveContractor] = React8.useState(
88705
+ const [activeContractor, setActiveContractor] = React32.useState(
89332
88706
  contractors?.[0]?.id || ""
89333
88707
  );
89334
88708
  const handleContractorHover = (contractorId) => {
@@ -89996,7 +89370,7 @@ function ResourceDetailDocumentSidebar({
89996
89370
  }) {
89997
89371
  const renderedBreadcrumbs = useMemo(() => {
89998
89372
  if (breadcrumbsSlot) return breadcrumbsSlot;
89999
- return /* @__PURE__ */ jsx(Breadcrumb, { className: breadcrumbsClassName, children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumbs?.map((crumb, index) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
89373
+ return /* @__PURE__ */ jsx(Breadcrumb, { className: breadcrumbsClassName, children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumbs?.map((crumb, index) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
90000
89374
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: !crumb.href ? /* @__PURE__ */ jsx(BreadcrumbPage, { children: typeof crumb.label === "string" ? crumb.label : crumb.label }) : /* @__PURE__ */ jsx(BreadcrumbLink, { href: crumb.href, children: index === 0 ? /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/home", size: 16 }) : typeof crumb.label === "string" ? crumb.label : crumb.label }) }),
90001
89375
  index < (breadcrumbs?.length || 0) - 1 && /* @__PURE__ */ jsx(BreadcrumbSeparator, {})
90002
89376
  ] }, index)) }) });
@@ -93404,8 +92778,8 @@ function ServicesListTableHover({
93404
92778
  patternOpacity,
93405
92779
  optixFlowConfig
93406
92780
  }) {
93407
- const [hoveredIndex, setHoveredIndex] = React8.useState(null);
93408
- const [mousePosition, setMousePosition] = React8.useState({ x: 0, y: 0 });
92781
+ const [hoveredIndex, setHoveredIndex] = React32.useState(null);
92782
+ const [mousePosition, setMousePosition] = React32.useState({ x: 0, y: 0 });
93409
92783
  const handleMouseMove = (e) => {
93410
92784
  setMousePosition({ x: e.clientX, y: e.clientY });
93411
92785
  };
@@ -93655,7 +93029,7 @@ function ServicesListStickyImage({
93655
93029
  patternOpacity,
93656
93030
  optixFlowConfig
93657
93031
  }) {
93658
- const [activeIndex, setActiveIndex] = React8.useState(0);
93032
+ const [activeIndex, setActiveIndex] = React32.useState(0);
93659
93033
  const renderServices = () => {
93660
93034
  if (servicesSlot) return servicesSlot;
93661
93035
  if (!services || services.length === 0) return null;
@@ -93907,8 +93281,8 @@ function ServicesListVideoShowcase({
93907
93281
  patternOpacity,
93908
93282
  optixFlowConfig
93909
93283
  }) {
93910
- const [playingIndex, setPlayingIndex] = React8.useState(null);
93911
- const videoRefs = React8.useRef([]);
93284
+ const [playingIndex, setPlayingIndex] = React32.useState(null);
93285
+ const videoRefs = React32.useRef([]);
93912
93286
  const handleMouseEnter = (index) => {
93913
93287
  setPlayingIndex(index);
93914
93288
  videoRefs.current[index]?.play();
@@ -97195,7 +96569,7 @@ function StatsCircularProgress({
97195
96569
  statInfoClassName
97196
96570
  }) {
97197
96571
  const effectiveDefaultCategory = defaultCategory || (categories && categories.length > 0 ? categories[0].id : "");
97198
- const [category, setCategory] = React8.useState(effectiveDefaultCategory);
96572
+ const [category, setCategory] = React32.useState(effectiveDefaultCategory);
97199
96573
  const badgeContent = useMemo(() => {
97200
96574
  if (badgeSlot) return badgeSlot;
97201
96575
  if (!badge) return null;
@@ -97488,8 +96862,8 @@ function StatsCardGroup({
97488
96862
  );
97489
96863
  }
97490
96864
  function useAnimatedCounter(endValue, duration = 2e3, isVisible) {
97491
- const [count, setCount] = React8.useState(0);
97492
- React8.useEffect(() => {
96865
+ const [count, setCount] = React32.useState(0);
96866
+ React32.useEffect(() => {
97493
96867
  if (!isVisible) return;
97494
96868
  let startTime = null;
97495
96869
  let animationFrame;
@@ -97577,9 +96951,9 @@ function StatsAnimatedCounter({
97577
96951
  statLabelClassName,
97578
96952
  statIconClassName
97579
96953
  }) {
97580
- const [isVisible, setIsVisible] = React8.useState(false);
97581
- const sectionRef = React8.useRef(null);
97582
- React8.useEffect(() => {
96954
+ const [isVisible, setIsVisible] = React32.useState(false);
96955
+ const sectionRef = React32.useRef(null);
96956
+ React32.useEffect(() => {
97583
96957
  const observer = new IntersectionObserver(
97584
96958
  ([entry]) => {
97585
96959
  if (entry.isIntersecting) {
@@ -97667,8 +97041,8 @@ function StatsAnimatedCounter({
97667
97041
  );
97668
97042
  }
97669
97043
  function useNumberTicker(endValue, duration = 2500, isVisible, decimals = 0) {
97670
- const [displayValue, setDisplayValue] = React8.useState("0");
97671
- React8.useEffect(() => {
97044
+ const [displayValue, setDisplayValue] = React32.useState("0");
97045
+ React32.useEffect(() => {
97672
97046
  if (!isVisible) return;
97673
97047
  let startTime = null;
97674
97048
  let animationFrame;
@@ -97783,9 +97157,9 @@ function StatsNumberTicker({
97783
97157
  statLabelClassName,
97784
97158
  statDescriptionClassName
97785
97159
  }) {
97786
- const [isVisible, setIsVisible] = React8.useState(false);
97787
- const sectionRef = React8.useRef(null);
97788
- React8.useEffect(() => {
97160
+ const [isVisible, setIsVisible] = React32.useState(false);
97161
+ const sectionRef = React32.useRef(null);
97162
+ React32.useEffect(() => {
97789
97163
  const observer = new IntersectionObserver(
97790
97164
  ([entry]) => {
97791
97165
  if (entry.isIntersecting) {
@@ -98044,9 +97418,9 @@ function StatsBarComparison({
98044
97418
  barValueClassName,
98045
97419
  barTrackClassName
98046
97420
  }) {
98047
- const [isVisible, setIsVisible] = React8.useState(!animate);
98048
- const sectionRef = React8.useRef(null);
98049
- React8.useEffect(() => {
97421
+ const [isVisible, setIsVisible] = React32.useState(!animate);
97422
+ const sectionRef = React32.useRef(null);
97423
+ React32.useEffect(() => {
98050
97424
  if (!animate) return;
98051
97425
  const observer = new IntersectionObserver(
98052
97426
  ([entry]) => {
@@ -98224,7 +97598,7 @@ function TimelineVerticalIconDashed({
98224
97598
  "mx-auto flex flex-col items-center justify-center text-center sm:max-w-xl",
98225
97599
  stepsClassName
98226
97600
  ),
98227
- children: steps.map((step, index) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
97601
+ children: steps.map((step, index) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
98228
97602
  /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col items-center", stepClassName), children: [
98229
97603
  /* @__PURE__ */ jsx(
98230
97604
  "span",
@@ -98491,7 +97865,7 @@ function TimelineTwoColumnFeatured({
98491
97865
  style,
98492
97866
  optixFlowConfig
98493
97867
  }) {
98494
- const renderActions = React8.useMemo(() => {
97868
+ const renderActions = React32.useMemo(() => {
98495
97869
  if (actionsSlot) {
98496
97870
  return actionsSlot;
98497
97871
  }
@@ -98619,7 +97993,7 @@ function TimelineTwoColumnFeatured({
98619
97993
  }
98620
97994
  );
98621
97995
  }
98622
- var DiagonalPattern = React8.memo(({
97996
+ var DiagonalPattern = React32.memo(({
98623
97997
  className,
98624
97998
  patternOpacity = 0.15
98625
97999
  }) => {
@@ -98658,7 +98032,7 @@ function TimelineAlternatingDiagonal({
98658
98032
  style,
98659
98033
  optixFlowConfig
98660
98034
  }) {
98661
- const renderedBadge = React8.useMemo(() => {
98035
+ const renderedBadge = React32.useMemo(() => {
98662
98036
  if (badgeSlot) {
98663
98037
  return badgeSlot;
98664
98038
  }
@@ -99036,7 +98410,7 @@ function TimelineProductivityList({
99036
98410
  }
99037
98411
  );
99038
98412
  }
99039
- var ProcessBar = React8.memo(({ currentStep, steps }) => /* @__PURE__ */ jsx("div", { className: "relative w-full scale-75", children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-between", children: steps.map((step, index) => /* @__PURE__ */ jsxs(React8.Fragment, { children: [
98413
+ var ProcessBar = React32.memo(({ currentStep, steps }) => /* @__PURE__ */ jsx("div", { className: "relative w-full scale-75", children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-between", children: steps.map((step, index) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
99040
98414
  /* @__PURE__ */ jsx("div", { className: "flex flex-col items-center", children: /* @__PURE__ */ jsx(
99041
98415
  motion.div,
99042
98416
  {
@@ -99063,7 +98437,7 @@ var ProcessBar = React8.memo(({ currentStep, steps }) => /* @__PURE__ */ jsx("di
99063
98437
  )
99064
98438
  ] })
99065
98439
  ] }, index)) }) }));
99066
- var StepperContent = React8.memo(({ step, optixFlowConfig, imageClassName, descriptionClassName, background }) => {
98440
+ var StepperContent = React32.memo(({ step, optixFlowConfig, imageClassName, descriptionClassName, background }) => {
99067
98441
  return /* @__PURE__ */ jsxs("div", { className: cn("my-4 flex min-h-[400px] w-full flex-col items-center justify-center overflow-hidden rounded-2xl p-6 text-center", getNestedCardBg(background), getNestedCardTextColor(background)), children: [
99068
98442
  /* @__PURE__ */ jsx(
99069
98443
  motion.div,
@@ -99096,7 +98470,7 @@ var StepperContent = React8.memo(({ step, optixFlowConfig, imageClassName, descr
99096
98470
  )
99097
98471
  ] });
99098
98472
  });
99099
- var NavButtons = React8.memo(({ handlePrev, handleNext }) => /* @__PURE__ */ jsxs("div", { className: "flex w-full justify-end gap-3 tracking-tight", children: [
98473
+ var NavButtons = React32.memo(({ handlePrev, handleNext }) => /* @__PURE__ */ jsxs("div", { className: "flex w-full justify-end gap-3 tracking-tight", children: [
99100
98474
  /* @__PURE__ */ jsxs(
99101
98475
  Pressable,
99102
98476
  {
@@ -99147,10 +98521,10 @@ function TimelineStepperAnimated({
99147
98521
  }) {
99148
98522
  const safeInitialStep = (steps?.length ?? 0) > 0 ? Math.max(0, Math.min(initialStep ?? 0, (steps?.length ?? 1) - 1)) : 0;
99149
98523
  const [currentStep, setCurrentStep] = useState(safeInitialStep);
99150
- const handleNext = React8.useCallback(() => {
98524
+ const handleNext = React32.useCallback(() => {
99151
98525
  setCurrentStep((prev) => Math.min(prev + 1, (steps?.length ?? 1) - 1));
99152
98526
  }, [steps?.length]);
99153
- const handlePrev = React8.useCallback(() => {
98527
+ const handlePrev = React32.useCallback(() => {
99154
98528
  setCurrentStep((prev) => Math.max(prev - 1, 0));
99155
98529
  }, []);
99156
98530
  const safeCurrentStep = (steps?.length ?? 0) > 0 ? Math.max(0, Math.min(currentStep, (steps?.length ?? 1) - 1)) : 0;
@@ -99859,7 +99233,7 @@ function TimelineTabbedPhases({
99859
99233
  style,
99860
99234
  optixFlowConfig
99861
99235
  }) {
99862
- const renderDownloadButton = React8.useMemo(() => {
99236
+ const renderDownloadButton = React32.useMemo(() => {
99863
99237
  if (downloadSlot) {
99864
99238
  return downloadSlot;
99865
99239
  }
@@ -100079,7 +99453,7 @@ function TimelineProductLaunch({
100079
99453
  id,
100080
99454
  style
100081
99455
  }) {
100082
- const renderCta = React8.useMemo(() => {
99456
+ const renderCta = React32.useMemo(() => {
100083
99457
  if (ctaSlot) {
100084
99458
  return ctaSlot;
100085
99459
  }
@@ -100537,9 +99911,9 @@ function LinkTreeBlock({
100537
99911
  }) {
100538
99912
  const resolvedBackground = background;
100539
99913
  const resolvedPattern = pattern ?? backgroundPattern;
100540
- const [lightboxOpen, setLightboxOpen] = React8.useState(false);
100541
- const [lightboxIndex, setLightboxIndex] = React8.useState(0);
100542
- const lightboxItems = React8.useMemo(() => {
99914
+ const [lightboxOpen, setLightboxOpen] = React32.useState(false);
99915
+ const [lightboxIndex, setLightboxIndex] = React32.useState(0);
99916
+ const lightboxItems = React32.useMemo(() => {
100543
99917
  if (!mediaGallery || mediaGallery.length === 0) return [];
100544
99918
  return mediaGallery.slice(0, mediaGalleryLimit).map((item, index) => ({
100545
99919
  id: item.id ?? `media-${index}`,
@@ -100551,11 +99925,11 @@ function LinkTreeBlock({
100551
99925
  share: true
100552
99926
  }));
100553
99927
  }, [mediaGallery, mediaGalleryLimit]);
100554
- const handleMediaClick = React8.useCallback((index) => {
99928
+ const handleMediaClick = React32.useCallback((index) => {
100555
99929
  setLightboxIndex(index);
100556
99930
  setLightboxOpen(true);
100557
99931
  }, []);
100558
- const handleLightboxClose = React8.useCallback(() => {
99932
+ const handleLightboxClose = React32.useCallback(() => {
100559
99933
  setLightboxOpen(false);
100560
99934
  }, []);
100561
99935
  const resolveImage = (value, fallbackAlt) => {
@@ -100567,7 +99941,7 @@ function LinkTreeBlock({
100567
99941
  };
100568
99942
  const nameForAlt = typeof brandName === "string" ? brandName : "Brand avatar";
100569
99943
  const resolvedAvatar = resolveImage(brandAvatar || brandLogo, nameForAlt);
100570
- const renderBrandHeader = React8.useMemo(() => {
99944
+ const renderBrandHeader = React32.useMemo(() => {
100571
99945
  if (brandSlot) return brandSlot;
100572
99946
  return /* @__PURE__ */ jsxs(
100573
99947
  "div",
@@ -100654,7 +100028,7 @@ function LinkTreeBlock({
100654
100028
  brandTagline,
100655
100029
  taglineClassName
100656
100030
  ]);
100657
- const renderLinks = React8.useMemo(() => {
100031
+ const renderLinks = React32.useMemo(() => {
100658
100032
  if (linksSlot) return linksSlot;
100659
100033
  if (!links || links.length === 0) return null;
100660
100034
  return /* @__PURE__ */ jsx("div", { className: cn("space-y-3", linksClassName), children: links.map((link, index) => {
@@ -100770,7 +100144,7 @@ function LinkTreeBlock({
100770
100144
  linkBadgeClassName,
100771
100145
  linkChevronClassName
100772
100146
  ]);
100773
- const renderMediaGallery = React8.useMemo(() => {
100147
+ const renderMediaGallery = React32.useMemo(() => {
100774
100148
  if (mediaGallerySlot) return mediaGallerySlot;
100775
100149
  if (!mediaGallery || mediaGallery.length === 0) return null;
100776
100150
  const items = mediaGallery.slice(0, mediaGalleryLimit);
@@ -100883,7 +100257,7 @@ function LinkTreeBlock({
100883
100257
  mediaGalleryOverlayClassName,
100884
100258
  mediaGalleryPlayIconClassName
100885
100259
  ]);
100886
- const renderSocialLinks = React8.useMemo(() => {
100260
+ const renderSocialLinks = React32.useMemo(() => {
100887
100261
  if (socialLinksSlot) return socialLinksSlot;
100888
100262
  if (!socialLinks || socialLinks.length === 0) return null;
100889
100263
  return /* @__PURE__ */ jsx(
@@ -100916,7 +100290,7 @@ function LinkTreeBlock({
100916
100290
  socialIconClassName,
100917
100291
  socialLinkClassName
100918
100292
  ]);
100919
- const renderFooter = React8.useMemo(() => {
100293
+ const renderFooter = React32.useMemo(() => {
100920
100294
  if (footerSlot) return footerSlot;
100921
100295
  if (!footerAction) return null;
100922
100296
  const resolvedFooterAction = footerAction;