@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.
- package/dist/about-culture-tabs.cjs +174 -174
- package/dist/about-culture-tabs.js +174 -174
- package/dist/about-developer-profile.cjs +200 -200
- package/dist/about-developer-profile.js +198 -198
- package/dist/about-developer-story.cjs +142 -142
- package/dist/about-developer-story.js +142 -142
- package/dist/about-mission-dual-image.cjs +142 -142
- package/dist/about-mission-dual-image.js +142 -142
- package/dist/about-mission-features.cjs +142 -142
- package/dist/about-mission-features.js +142 -142
- package/dist/about-network-spotlight.cjs +142 -142
- package/dist/about-network-spotlight.js +142 -142
- package/dist/about-story-expertise.cjs +142 -142
- package/dist/about-story-expertise.js +142 -142
- package/dist/about-streamline-team.cjs +142 -142
- package/dist/about-streamline-team.js +142 -142
- package/dist/carousel-feature-badge.cjs +162 -42
- package/dist/carousel-feature-badge.d.cts +14 -1
- package/dist/carousel-feature-badge.d.ts +14 -1
- package/dist/carousel-feature-badge.js +163 -43
- package/dist/community-initiatives.cjs +142 -142
- package/dist/community-initiatives.js +142 -142
- package/dist/components.cjs +723 -1378
- package/dist/components.d.cts +0 -2
- package/dist/components.d.ts +0 -2
- package/dist/components.js +633 -1287
- package/dist/contact-map.cjs +14 -1083
- package/dist/contact-map.d.cts +13 -3
- package/dist/contact-map.d.ts +13 -3
- package/dist/contact-map.js +14 -1083
- package/dist/cta-feature-checklist.cjs +142 -142
- package/dist/cta-feature-checklist.js +142 -142
- package/dist/faq-numbered-grid.cjs +142 -142
- package/dist/faq-numbered-grid.js +142 -142
- package/dist/feature-animated-carousel.cjs +142 -142
- package/dist/feature-animated-carousel.js +142 -142
- package/dist/feature-bento-utilities.cjs +142 -142
- package/dist/feature-bento-utilities.js +142 -142
- package/dist/feature-capabilities-grid.cjs +142 -142
- package/dist/feature-capabilities-grid.js +142 -142
- package/dist/feature-category-image-cards.cjs +142 -142
- package/dist/feature-category-image-cards.js +142 -142
- package/dist/feature-icon-grid-bordered.cjs +142 -142
- package/dist/feature-icon-grid-bordered.js +142 -142
- package/dist/feature-icon-grid-muted.cjs +142 -142
- package/dist/feature-icon-grid-muted.js +142 -142
- package/dist/feature-numbered-cards.cjs +142 -142
- package/dist/feature-numbered-cards.js +142 -142
- package/dist/feature-three-column-values.cjs +142 -142
- package/dist/feature-three-column-values.js +142 -142
- package/dist/hero-ad-campaign-expert.cjs +142 -142
- package/dist/hero-ad-campaign-expert.js +142 -142
- package/dist/hero-adaptable-product-grid.cjs +142 -142
- package/dist/hero-adaptable-product-grid.js +142 -142
- package/dist/hero-agency-animated-images.cjs +142 -142
- package/dist/hero-agency-animated-images.js +142 -142
- package/dist/hero-announcement-badge.cjs +142 -142
- package/dist/hero-announcement-badge.js +142 -142
- package/dist/hero-badge-image-split.cjs +142 -142
- package/dist/hero-badge-image-split.js +142 -142
- package/dist/hero-business-carousel-dots.cjs +142 -142
- package/dist/hero-business-carousel-dots.js +142 -142
- package/dist/hero-business-operations-mosaic.cjs +142 -142
- package/dist/hero-business-operations-mosaic.js +142 -142
- package/dist/hero-conversation-intelligence.cjs +142 -142
- package/dist/hero-conversation-intelligence.js +142 -142
- package/dist/hero-creative-studio-stacked.cjs +142 -142
- package/dist/hero-creative-studio-stacked.js +142 -142
- package/dist/hero-crm-streamlined.cjs +142 -142
- package/dist/hero-crm-streamlined.js +142 -142
- package/dist/hero-customer-support-layered.cjs +142 -142
- package/dist/hero-customer-support-layered.js +142 -142
- package/dist/hero-design-showcase-logos.cjs +142 -142
- package/dist/hero-design-showcase-logos.js +142 -142
- package/dist/hero-design-system-3d.cjs +142 -142
- package/dist/hero-design-system-3d.js +142 -142
- package/dist/hero-developer-tools-code.cjs +142 -142
- package/dist/hero-developer-tools-code.js +142 -142
- package/dist/hero-digital-agency-fullscreen.cjs +142 -142
- package/dist/hero-digital-agency-fullscreen.js +142 -142
- package/dist/hero-ecommerce-product-showcase.cjs +174 -174
- package/dist/hero-ecommerce-product-showcase.js +174 -174
- package/dist/hero-event-registration.cjs +142 -142
- package/dist/hero-event-registration.js +142 -142
- package/dist/hero-fullscreen-background-image.cjs +142 -142
- package/dist/hero-fullscreen-background-image.js +142 -142
- package/dist/hero-gradient-avatars-rating.cjs +142 -142
- package/dist/hero-gradient-avatars-rating.js +142 -142
- package/dist/hero-gradient-client-focused.cjs +142 -142
- package/dist/hero-gradient-client-focused.js +142 -142
- package/dist/hero-hiring-animated-text.cjs +142 -142
- package/dist/hero-hiring-animated-text.js +142 -142
- package/dist/hero-image-left-content.cjs +142 -142
- package/dist/hero-image-left-content.js +142 -142
- package/dist/hero-innovation-image-grid.cjs +142 -142
- package/dist/hero-innovation-image-grid.js +142 -142
- package/dist/hero-mental-health-team.cjs +142 -142
- package/dist/hero-mental-health-team.js +142 -142
- package/dist/hero-minimal-centered-dark.cjs +174 -174
- package/dist/hero-minimal-centered-dark.js +174 -174
- package/dist/hero-presentation-platform-video.cjs +142 -142
- package/dist/hero-presentation-platform-video.js +142 -142
- package/dist/hero-product-showcase-floating.cjs +174 -174
- package/dist/hero-product-showcase-floating.js +174 -174
- package/dist/hero-shared-inbox-layered.cjs +142 -142
- package/dist/hero-shared-inbox-layered.js +142 -142
- package/dist/hero-software-growth-video-dialog.cjs +142 -142
- package/dist/hero-software-growth-video-dialog.js +142 -142
- package/dist/hero-spiral-pattern-cards.cjs +174 -174
- package/dist/hero-spiral-pattern-cards.js +174 -174
- package/dist/hero-split-geometric-shapes.cjs +142 -142
- package/dist/hero-split-geometric-shapes.js +142 -142
- package/dist/hero-startup-launch-cta.cjs +174 -174
- package/dist/hero-startup-launch-cta.js +174 -174
- package/dist/hero-stats-social-proof.cjs +174 -174
- package/dist/hero-stats-social-proof.js +174 -174
- package/dist/hero-task-timer-animated.cjs +142 -142
- package/dist/hero-task-timer-animated.js +142 -142
- package/dist/hero-testimonial-image-grid.cjs +142 -142
- package/dist/hero-testimonial-image-grid.js +142 -142
- package/dist/hero-therapy-testimonial-grid.cjs +142 -142
- package/dist/hero-therapy-testimonial-grid.js +142 -142
- package/dist/hero-ui-library-showcase.cjs +142 -142
- package/dist/hero-ui-library-showcase.js +142 -142
- package/dist/hero-video-background-dark.cjs +174 -174
- package/dist/hero-video-background-dark.js +174 -174
- package/dist/hero-video-dialog-gradient.cjs +142 -142
- package/dist/hero-video-dialog-gradient.js +142 -142
- package/dist/hero-video-overlay-stars.cjs +142 -142
- package/dist/hero-video-overlay-stars.js +142 -142
- package/dist/hero-welcome-asymmetric-images.cjs +142 -142
- package/dist/hero-welcome-asymmetric-images.js +142 -142
- package/dist/index.cjs +725 -1380
- package/dist/index.d.cts +0 -2
- package/dist/index.d.ts +0 -2
- package/dist/index.js +634 -1288
- package/dist/registry.cjs +2201 -2827
- package/dist/registry.js +948 -1574
- package/dist/testimonials-masonry-grid.cjs +142 -142
- package/dist/testimonials-masonry-grid.js +142 -142
- package/dist/testimonials-stats-header.cjs +159 -159
- package/dist/testimonials-stats-header.js +159 -159
- package/package.json +4 -7
- package/dist/geo-map.cjs +0 -1117
- package/dist/geo-map.d.cts +0 -92
- package/dist/geo-map.d.ts +0 -92
- package/dist/geo-map.js +0 -1095
package/dist/registry.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import
|
|
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 =
|
|
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 =
|
|
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 =
|
|
512
|
+
var Text = React32.forwardRef(TextInner);
|
|
513
513
|
Text.displayName = "Text";
|
|
514
514
|
function isContentTextItem(item) {
|
|
515
|
-
return item !== null && typeof item === "object" && !
|
|
515
|
+
return item !== null && typeof item === "object" && !React32.isValidElement(item) && "_type" in item && item._type === "text";
|
|
516
516
|
}
|
|
517
|
-
var ContentGroup =
|
|
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 (
|
|
531
|
-
return
|
|
530
|
+
if (React32.isValidElement(reactNode)) {
|
|
531
|
+
return React32.cloneElement(reactNode, { key: reactNode.key ?? idx });
|
|
532
532
|
}
|
|
533
|
-
return /* @__PURE__ */ jsx(
|
|
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
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
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
|
-
},
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
661
|
+
},
|
|
662
|
+
upExit: {
|
|
663
|
+
opacity: 0.8,
|
|
664
|
+
y: "-120%",
|
|
665
|
+
transition: {
|
|
666
|
+
duration: 0.8
|
|
746
667
|
}
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
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
|
-
}
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
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
|
-
},
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
687
|
+
},
|
|
688
|
+
fadeExit: {
|
|
689
|
+
opacity: 0,
|
|
690
|
+
transition: {
|
|
691
|
+
duration: 0.8,
|
|
692
|
+
ease: [0.4, 0, 0.2, 1]
|
|
777
693
|
}
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
const
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
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
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
1506
|
+
const smartPlatformName = React32.useMemo(() => {
|
|
2160
1507
|
return platform || platformName;
|
|
2161
1508
|
}, [platform, platformName]);
|
|
2162
|
-
const iconName =
|
|
1509
|
+
const iconName = React32.useMemo(() => {
|
|
2163
1510
|
return iconNameOverride || platformIconMap[smartPlatformName];
|
|
2164
1511
|
}, [iconNameOverride, smartPlatformName]);
|
|
2165
|
-
const accessibleLabel =
|
|
1512
|
+
const accessibleLabel = React32.useMemo(() => {
|
|
2166
1513
|
return label || platformName;
|
|
2167
1514
|
}, [label, platformName]);
|
|
2168
|
-
const icon =
|
|
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] =
|
|
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] =
|
|
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] =
|
|
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(
|
|
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] =
|
|
4960
|
-
|
|
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 =
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
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] =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
17198
|
+
const mobileOrder = React32.useMemo(() => {
|
|
17849
17199
|
return directionConfig?.mobile === "mediaTop" ? "flex-col" : "flex-col-reverse";
|
|
17850
17200
|
}, [directionConfig?.mobile]);
|
|
17851
|
-
const imageArea =
|
|
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] =
|
|
19838
|
-
const [direction, setDirection] =
|
|
19839
|
-
const [isAnimating, setIsAnimating] =
|
|
19840
|
-
const goToNext =
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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] =
|
|
19484
|
+
const [currentIndex, setCurrentIndex] = React32.useState(0);
|
|
20135
19485
|
const progress = useMotionValue(100);
|
|
20136
|
-
const [direction, setDirection] =
|
|
19486
|
+
const [direction, setDirection] = React32.useState(1);
|
|
20137
19487
|
const clipPath = useMotionTemplate`inset(0 ${progress}% 0 0 round 10px)`;
|
|
20138
|
-
|
|
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] =
|
|
20318
|
-
const [scrollSnaps, setScrollSnaps] =
|
|
20319
|
-
const onDotButtonClick =
|
|
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 =
|
|
19676
|
+
const onInit = React32.useCallback((api) => {
|
|
20327
19677
|
setScrollSnaps(api.scrollSnapList());
|
|
20328
19678
|
}, []);
|
|
20329
|
-
const onSelect =
|
|
19679
|
+
const onSelect = React32.useCallback((api) => {
|
|
20330
19680
|
setSelectedIndex(api.selectedScrollSnap());
|
|
20331
19681
|
}, []);
|
|
20332
|
-
|
|
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] =
|
|
20342
|
-
const onAutoplayButtonClick =
|
|
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 =
|
|
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
|
-
|
|
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] =
|
|
20368
|
-
const animationName =
|
|
20369
|
-
const timeoutId =
|
|
20370
|
-
const rafId =
|
|
20371
|
-
const startProgress =
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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] =
|
|
20547
|
-
const [canScrollNext, setCanScrollNext] =
|
|
20548
|
-
const scrollPrev =
|
|
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 =
|
|
19904
|
+
const scrollNext = React32.useCallback(() => {
|
|
20552
19905
|
emblaApi?.scrollNext();
|
|
20553
19906
|
}, [emblaApi]);
|
|
20554
|
-
const onSelect =
|
|
19907
|
+
const onSelect = React32.useCallback(() => {
|
|
20555
19908
|
if (!emblaApi) return;
|
|
20556
19909
|
setCanScrollPrev(emblaApi.canScrollPrev());
|
|
20557
19910
|
setCanScrollNext(emblaApi.canScrollNext());
|
|
20558
19911
|
}, [emblaApi]);
|
|
20559
|
-
|
|
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
|
|
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 &&
|
|
20618
|
-
/* @__PURE__ */
|
|
20619
|
-
|
|
20620
|
-
|
|
20621
|
-
|
|
20622
|
-
|
|
20623
|
-
|
|
20624
|
-
|
|
20625
|
-
|
|
20626
|
-
|
|
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 =
|
|
20680
|
-
const scrollContainerRef =
|
|
20681
|
-
const [activeIndex, setActiveIndex] =
|
|
20682
|
-
|
|
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 =
|
|
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 =
|
|
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] =
|
|
20912
|
-
const prevSlide =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
21077
|
-
const [isAtStart, setIsAtStart] =
|
|
21078
|
-
const [isAtEnd, setIsAtEnd] =
|
|
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
|
-
|
|
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 =
|
|
20663
|
+
const hasImages = React32.useMemo(() => {
|
|
21290
20664
|
return images && images?.length > 0;
|
|
21291
20665
|
}, [images]);
|
|
21292
|
-
const [currentImageIndex, setCurrentImageIndex] =
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
21507
|
-
const [direction, setDirection] =
|
|
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] =
|
|
21801
|
-
const intervalRef =
|
|
21802
|
-
const resetInterval =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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] =
|
|
21992
|
-
const [activeColorIndex, setActiveColorIndex] =
|
|
21993
|
-
const [direction, setDirection] =
|
|
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 =
|
|
21587
|
+
var ProgressSliderContext = React32.createContext(void 0);
|
|
22214
21588
|
function useProgressSliderContext() {
|
|
22215
|
-
const context =
|
|
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] =
|
|
22302
|
-
const [progress, setProgress] =
|
|
22303
|
-
const [isFastForward, setIsFastForward] =
|
|
22304
|
-
const [isPaused, setIsPaused] =
|
|
22305
|
-
const frame =
|
|
22306
|
-
const firstFrameTime =
|
|
22307
|
-
const targetValue =
|
|
22308
|
-
const pausedProgress =
|
|
22309
|
-
const sliderValues =
|
|
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
|
-
|
|
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] =
|
|
21853
|
+
const [activeFeature, setActiveFeature] = React32.useState(
|
|
22480
21854
|
features?.[0]?.id ?? ""
|
|
22481
21855
|
);
|
|
22482
|
-
const featureRefs =
|
|
22483
|
-
|
|
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 =
|
|
22774
|
+
var CarouselContext = React32.createContext(null);
|
|
23401
22775
|
function useCarousel() {
|
|
23402
|
-
const context =
|
|
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] =
|
|
23425
|
-
const [canScrollNext, setCanScrollNext] =
|
|
23426
|
-
const onSelect =
|
|
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 =
|
|
22805
|
+
const scrollPrev = React32.useCallback(() => {
|
|
23432
22806
|
api?.scrollPrev();
|
|
23433
22807
|
}, [api]);
|
|
23434
|
-
const scrollNext =
|
|
22808
|
+
const scrollNext = React32.useCallback(() => {
|
|
23435
22809
|
api?.scrollNext();
|
|
23436
22810
|
}, [api]);
|
|
23437
|
-
const handleKeyDown =
|
|
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
|
-
|
|
22823
|
+
React32.useEffect(() => {
|
|
23450
22824
|
if (!api || !setApi) return;
|
|
23451
22825
|
setApi(api);
|
|
23452
22826
|
}, [api, setApi]);
|
|
23453
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
29410
|
-
const [selectedDepartment, setSelectedDepartment] =
|
|
29411
|
-
const departments =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
30925
|
-
const filteredMembers =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
37973
|
-
const [canScrollLeft, setCanScrollLeft] =
|
|
37974
|
-
const [canScrollRight, setCanScrollRight] =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
37986
|
+
const [activeSection, setActiveSection] = React32.useState(
|
|
38613
37987
|
sections?.[0]?.id || ""
|
|
38614
37988
|
);
|
|
38615
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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 =
|
|
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] =
|
|
38208
|
+
const [activeSection, setActiveSection] = React32.useState(
|
|
38835
38209
|
sections?.[0]?.id || ""
|
|
38836
38210
|
);
|
|
38837
|
-
const [showBackToTop, setShowBackToTop] =
|
|
38838
|
-
|
|
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
|
-
|
|
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 =
|
|
38238
|
+
const scrollToTop = React32.useCallback(() => {
|
|
38865
38239
|
window.scrollTo({ top: 0, behavior: "smooth" });
|
|
38866
38240
|
}, []);
|
|
38867
|
-
const breadcrumbsContent =
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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] =
|
|
38416
|
+
const [activeSection, setActiveSection] = React32.useState(
|
|
39043
38417
|
sections?.[0]?.id || ""
|
|
39044
38418
|
);
|
|
39045
|
-
const [isTocOpen, setIsTocOpen] =
|
|
39046
|
-
|
|
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 =
|
|
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(
|
|
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 =
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
38639
|
+
const [activeChapter, setActiveChapter] = React32.useState(
|
|
39266
38640
|
chapters?.[0]?.id || ""
|
|
39267
38641
|
);
|
|
39268
|
-
|
|
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 =
|
|
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(
|
|
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 =
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
42600
|
-
const [direction, setDirection] =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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 =
|
|
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 =
|
|
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] =
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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(
|
|
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 =
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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(
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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] =
|
|
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] =
|
|
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 =
|
|
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] =
|
|
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(
|
|
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(
|
|
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(
|
|
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] =
|
|
77809
|
-
const ref =
|
|
77810
|
-
|
|
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 =
|
|
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
|
-
|
|
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] =
|
|
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] =
|
|
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] =
|
|
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(
|
|
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(
|
|
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(
|
|
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] =
|
|
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] =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
84648
|
+
const [activeSection, setActiveSection] = React32.useState(
|
|
85275
84649
|
sections?.[0]?.id || ""
|
|
85276
84650
|
);
|
|
85277
|
-
|
|
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] =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
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(
|
|
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] =
|
|
93408
|
-
const [mousePosition, setMousePosition] =
|
|
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] =
|
|
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] =
|
|
93911
|
-
const videoRefs =
|
|
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] =
|
|
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] =
|
|
97492
|
-
|
|
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] =
|
|
97581
|
-
const sectionRef =
|
|
97582
|
-
|
|
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] =
|
|
97671
|
-
|
|
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] =
|
|
97787
|
-
const sectionRef =
|
|
97788
|
-
|
|
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] =
|
|
98048
|
-
const sectionRef =
|
|
98049
|
-
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
98524
|
+
const handleNext = React32.useCallback(() => {
|
|
99151
98525
|
setCurrentStep((prev) => Math.min(prev + 1, (steps?.length ?? 1) - 1));
|
|
99152
98526
|
}, [steps?.length]);
|
|
99153
|
-
const handlePrev =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
100541
|
-
const [lightboxIndex, setLightboxIndex] =
|
|
100542
|
-
const lightboxItems =
|
|
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 =
|
|
99928
|
+
const handleMediaClick = React32.useCallback((index) => {
|
|
100555
99929
|
setLightboxIndex(index);
|
|
100556
99930
|
setLightboxOpen(true);
|
|
100557
99931
|
}, []);
|
|
100558
|
-
const handleLightboxClose =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
100293
|
+
const renderFooter = React32.useMemo(() => {
|
|
100920
100294
|
if (footerSlot) return footerSlot;
|
|
100921
100295
|
if (!footerAction) return null;
|
|
100922
100296
|
const resolvedFooterAction = footerAction;
|