@opensite/ui 2.1.9 → 2.2.1

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/registry.js CHANGED
@@ -1,5 +1,5 @@
1
- import * as React25 from 'react';
2
- import React25__default, { Fragment, createContext, useMemo, forwardRef, useCallback, useState, useEffect, useRef, startTransition, useContext } from 'react';
1
+ import * as React28 from 'react';
2
+ import React28__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';
@@ -140,7 +140,7 @@ var maxWidthStyles = {
140
140
  "4xl": "max-w-[1536px]",
141
141
  full: "max-w-full"
142
142
  };
143
- var Container = React25__default.forwardRef(
143
+ var Container = React28__default.forwardRef(
144
144
  ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
145
145
  const Component = as;
146
146
  return /* @__PURE__ */ jsx(
@@ -445,7 +445,7 @@ var spacingStyles = {
445
445
  };
446
446
  var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
447
447
  var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
448
- var Section = React25__default.forwardRef(
448
+ var Section = React28__default.forwardRef(
449
449
  ({
450
450
  id,
451
451
  title,
@@ -1035,7 +1035,7 @@ function useNavigation({
1035
1035
  href,
1036
1036
  onClick
1037
1037
  } = {}) {
1038
- const linkType = React25.useMemo(() => {
1038
+ const linkType = React28.useMemo(() => {
1039
1039
  if (!href || href.trim() === "") {
1040
1040
  return onClick ? "none" : "none";
1041
1041
  }
@@ -1056,7 +1056,7 @@ function useNavigation({
1056
1056
  return "internal";
1057
1057
  }
1058
1058
  }, [href, onClick]);
1059
- const normalizedHref = React25.useMemo(() => {
1059
+ const normalizedHref = React28.useMemo(() => {
1060
1060
  if (!href || href.trim() === "") {
1061
1061
  return void 0;
1062
1062
  }
@@ -1074,7 +1074,7 @@ function useNavigation({
1074
1074
  return trimmed;
1075
1075
  }
1076
1076
  }, [href, linkType]);
1077
- const target = React25.useMemo(() => {
1077
+ const target = React28.useMemo(() => {
1078
1078
  switch (linkType) {
1079
1079
  case "external":
1080
1080
  return "_blank";
@@ -1087,7 +1087,7 @@ function useNavigation({
1087
1087
  return void 0;
1088
1088
  }
1089
1089
  }, [linkType]);
1090
- const rel = React25.useMemo(() => {
1090
+ const rel = React28.useMemo(() => {
1091
1091
  if (linkType === "external") {
1092
1092
  return "noopener noreferrer";
1093
1093
  }
@@ -1096,7 +1096,7 @@ function useNavigation({
1096
1096
  const isExternal = linkType === "external";
1097
1097
  const isInternal = linkType === "internal";
1098
1098
  const shouldUseRouter = isInternal && typeof normalizedHref === "string" && normalizedHref.startsWith("/");
1099
- const handleClick = React25.useCallback(
1099
+ const handleClick = React28.useCallback(
1100
1100
  (event) => {
1101
1101
  if (onClick) {
1102
1102
  try {
@@ -1280,7 +1280,7 @@ var buttonVariants = cva(baseStyles, {
1280
1280
  size: "default"
1281
1281
  }
1282
1282
  });
1283
- var Pressable = React25.forwardRef(
1283
+ var Pressable = React28.forwardRef(
1284
1284
  ({
1285
1285
  children,
1286
1286
  className,
@@ -2328,10 +2328,10 @@ var ImageSlider = ({
2328
2328
  optixFlowConfig
2329
2329
  }) => {
2330
2330
  const hasImages = images.length > 0;
2331
- const [currentIndex, setCurrentIndex] = React25.useState(
2331
+ const [currentIndex, setCurrentIndex] = React28.useState(
2332
2332
  () => normalizeIndex(startIndex, images.length)
2333
2333
  );
2334
- const handleNext = React25.useCallback(() => {
2334
+ const handleNext = React28.useCallback(() => {
2335
2335
  if (!hasImages) return;
2336
2336
  setCurrentIndex((prevIndex) => {
2337
2337
  const nextIndex = prevIndex + 1 >= images.length ? 0 : prevIndex + 1;
@@ -2339,7 +2339,7 @@ var ImageSlider = ({
2339
2339
  return nextIndex;
2340
2340
  });
2341
2341
  }, [hasImages, images.length, onSlideChange]);
2342
- const handlePrevious = React25.useCallback(() => {
2342
+ const handlePrevious = React28.useCallback(() => {
2343
2343
  if (!hasImages) return;
2344
2344
  setCurrentIndex((prevIndex) => {
2345
2345
  const nextIndex = prevIndex - 1 < 0 ? images.length - 1 : prevIndex - 1;
@@ -2347,11 +2347,11 @@ var ImageSlider = ({
2347
2347
  return nextIndex;
2348
2348
  });
2349
2349
  }, [hasImages, images.length, onSlideChange]);
2350
- React25.useEffect(() => {
2350
+ React28.useEffect(() => {
2351
2351
  if (!hasImages) return;
2352
2352
  setCurrentIndex(normalizeIndex(startIndex, images.length));
2353
2353
  }, [startIndex, images.length, hasImages]);
2354
- React25.useEffect(() => {
2354
+ React28.useEffect(() => {
2355
2355
  if (!enableKeyboard || !hasImages) return;
2356
2356
  const handleKeyDown = (event) => {
2357
2357
  if (event.key === "ArrowRight") {
@@ -2365,7 +2365,7 @@ var ImageSlider = ({
2365
2365
  window.removeEventListener("keydown", handleKeyDown);
2366
2366
  };
2367
2367
  }, [enableKeyboard, handleNext, handlePrevious, hasImages]);
2368
- React25.useEffect(() => {
2368
+ React28.useEffect(() => {
2369
2369
  if (!autoplay || images.length < 2) return;
2370
2370
  const interval = window.setInterval(handleNext, autoplayIntervalMs);
2371
2371
  return () => window.clearInterval(interval);
@@ -2657,7 +2657,7 @@ var platformIconMap = {
2657
2657
  dribbble: "cib/dribbble",
2658
2658
  unknown: "icon-park-solid/circular-connection"
2659
2659
  };
2660
- var SocialLinkIcon = React25.forwardRef(
2660
+ var SocialLinkIcon = React28.forwardRef(
2661
2661
  ({
2662
2662
  platformName,
2663
2663
  label,
@@ -2670,13 +2670,13 @@ var SocialLinkIcon = React25.forwardRef(
2670
2670
  ...pressableProps
2671
2671
  }, ref) => {
2672
2672
  const platform = usePlatformFromUrl(href);
2673
- const smartPlatformName = React25.useMemo(() => {
2673
+ const smartPlatformName = React28.useMemo(() => {
2674
2674
  return platform || platformName;
2675
2675
  }, [platform, platformName]);
2676
- const iconName = React25.useMemo(() => {
2676
+ const iconName = React28.useMemo(() => {
2677
2677
  return iconNameOverride || platformIconMap[smartPlatformName];
2678
2678
  }, [iconNameOverride, smartPlatformName]);
2679
- const accessibleLabel = React25.useMemo(() => {
2679
+ const accessibleLabel = React28.useMemo(() => {
2680
2680
  return label || platformName;
2681
2681
  }, [label, platformName]);
2682
2682
  return /* @__PURE__ */ jsx(
@@ -3101,7 +3101,7 @@ function AboutExpandableValues({
3101
3101
  pattern,
3102
3102
  patternOpacity
3103
3103
  }) {
3104
- const [expandedValue, setExpandedValue] = React25.useState(null);
3104
+ const [expandedValue, setExpandedValue] = React28.useState(null);
3105
3105
  const toggleExpand = useCallback((id) => {
3106
3106
  setExpandedValue((prev) => prev === id ? null : id);
3107
3107
  }, []);
@@ -3355,7 +3355,7 @@ function CommunityInitiatives({
3355
3355
  pattern,
3356
3356
  patternOpacity
3357
3357
  }) {
3358
- const [activeCategory, setActiveCategory] = React25.useState(
3358
+ const [activeCategory, setActiveCategory] = React28.useState(
3359
3359
  categories?.[0]?.id || ""
3360
3360
  );
3361
3361
  const currentCategory = categories?.find((category) => category.id === activeCategory) || categories?.[0];
@@ -3628,7 +3628,7 @@ function AboutCultureTabs({
3628
3628
  patternOpacity
3629
3629
  }) {
3630
3630
  const resolvedAspects = aspects ?? [];
3631
- const [activeTab, setActiveTab] = React25.useState(
3631
+ const [activeTab, setActiveTab] = React28.useState(
3632
3632
  resolvedAspects[0]?.id || ""
3633
3633
  );
3634
3634
  const ctaImagesContent = useMemo(() => {
@@ -4127,7 +4127,7 @@ function BannerDeliveryCountdown({
4127
4127
  }, [prefixText, timerContent, middleText, deliveryDateContent]);
4128
4128
  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: [
4129
4129
  iconContent,
4130
- messageParts.length > 0 && /* @__PURE__ */ jsx("span", { children: messageParts.map((part, index) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
4130
+ messageParts.length > 0 && /* @__PURE__ */ jsx("span", { children: messageParts.map((part, index) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
4131
4131
  index > 0 ? " " : null,
4132
4132
  part
4133
4133
  ] }, index)) })
@@ -5398,8 +5398,8 @@ var BrandAttribution = ({
5398
5398
  }
5399
5399
  const { prefix = "", anchorText, href, suffix = "" } = options[optionIndex];
5400
5400
  const ContainerEl = variant;
5401
- const [trackedHref, setTrackedHref] = React25.useState(href);
5402
- React25.useEffect(() => {
5401
+ const [trackedHref, setTrackedHref] = React28.useState(href);
5402
+ React28.useEffect(() => {
5403
5403
  setTrackedHref(buildTrackedHref(href));
5404
5404
  }, [href]);
5405
5405
  return /* @__PURE__ */ jsxs(ContainerEl, { className: containerClassName, children: [
@@ -5542,7 +5542,7 @@ function FooterSocialNewsletter({
5542
5542
  onError,
5543
5543
  uploadTokens
5544
5544
  });
5545
- const renderForm = React25.useMemo(() => {
5545
+ const renderForm = React28.useMemo(() => {
5546
5546
  if (formSlot) return formSlot;
5547
5547
  const defaultButtonAction = {
5548
5548
  label: "Subscribe",
@@ -5876,7 +5876,7 @@ function FooterSimpleCentered({
5876
5876
  ]);
5877
5877
  const bottomLinksContent = useMemo(() => {
5878
5878
  if (!bottomLinks || bottomLinks.length === 0) return null;
5879
- return bottomLinks.map((link, idx) => /* @__PURE__ */ jsx(React25.Fragment, { children: /* @__PURE__ */ jsx(
5879
+ return bottomLinks.map((link, idx) => /* @__PURE__ */ jsx(React28.Fragment, { children: /* @__PURE__ */ jsx(
5880
5880
  Pressable,
5881
5881
  {
5882
5882
  href: link.href,
@@ -8501,7 +8501,7 @@ function AboutInteractiveTabs({
8501
8501
  pattern,
8502
8502
  patternOpacity
8503
8503
  }) {
8504
- const [activeTab, setActiveTab] = React25.useState(tabs?.[0]?.id ?? "");
8504
+ const [activeTab, setActiveTab] = React28.useState(tabs?.[0]?.id ?? "");
8505
8505
  const activeContent = useMemo(() => {
8506
8506
  return tabs?.find((tab) => tab.id === activeTab)?.content;
8507
8507
  }, [tabs, activeTab]);
@@ -9041,6 +9041,7 @@ function AboutNetworkSpotlight({
9041
9041
  spotlightCard,
9042
9042
  spotlightCardSlot,
9043
9043
  className,
9044
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
9044
9045
  contentClassName,
9045
9046
  eyebrowClassName,
9046
9047
  headingClassName,
@@ -9050,7 +9051,7 @@ function AboutNetworkSpotlight({
9050
9051
  imageClassName,
9051
9052
  spotlightCardClassName,
9052
9053
  background,
9053
- spacing,
9054
+ spacing = "py-32 md:py-32",
9054
9055
  pattern,
9055
9056
  patternOpacity,
9056
9057
  optixFlowConfig
@@ -9071,7 +9072,7 @@ function AboutNetworkSpotlight({
9071
9072
  /* @__PURE__ */ jsx("span", { children: item })
9072
9073
  ] }, index)) });
9073
9074
  }, [highlightsSlot, highlights, highlightsClassName]);
9074
- const actionsContent = useMemo(() => {
9075
+ useMemo(() => {
9075
9076
  if (actionsSlot) return actionsSlot;
9076
9077
  if (!actions || actions.length === 0) return null;
9077
9078
  return actions.map((action, index) => {
@@ -9135,9 +9136,10 @@ function AboutNetworkSpotlight({
9135
9136
  {
9136
9137
  background,
9137
9138
  spacing,
9138
- className: cn(className),
9139
9139
  pattern,
9140
9140
  patternOpacity,
9141
+ className,
9142
+ containerClassName,
9141
9143
  children: /* @__PURE__ */ jsxs(
9142
9144
  "div",
9143
9145
  {
@@ -9153,7 +9155,7 @@ function AboutNetworkSpotlight({
9153
9155
  whileInView: { opacity: 1, x: 0 },
9154
9156
  viewport: { once: true, margin: "-50px" },
9155
9157
  transition: { duration: 0.5 },
9156
- children: /* @__PURE__ */ jsxs("div", { className: "relative overflow-hidden rounded-3xl border border-white/10 shadow-2xl", children: [
9158
+ children: /* @__PURE__ */ jsxs("div", { className: "relative overflow-hidden rounded-3xl border border-white/10 shadow-2xl aspect-square md:aspect-auto", children: [
9157
9159
  /* @__PURE__ */ jsx(
9158
9160
  Img,
9159
9161
  {
@@ -9164,7 +9166,7 @@ function AboutNetworkSpotlight({
9164
9166
  }
9165
9167
  ),
9166
9168
  /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-linear-to-tr from-black/70 via-transparent to-transparent" }),
9167
- /* @__PURE__ */ jsx("div", { className: "absolute bottom-6 left-6 right-6", children: spotlightCardContent })
9169
+ /* @__PURE__ */ jsx("div", { className: "absolute bottom-2 md:bottom-6 left-2 md:left-6 right-2 md:right-6", children: spotlightCardContent })
9168
9170
  ] })
9169
9171
  }
9170
9172
  ),
@@ -9185,29 +9187,33 @@ function AboutNetworkSpotlight({
9185
9187
  ),
9186
9188
  children: eyebrow
9187
9189
  }
9188
- ) : /* @__PURE__ */ jsx("div", { className: eyebrowClassName, children: eyebrow })),
9190
+ ) : eyebrow),
9189
9191
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
9190
9192
  "h2",
9191
9193
  {
9192
9194
  className: cn(
9193
- "mt-2 text-3xl font-bold text-background md:text-4xl",
9195
+ "mt-2 text-3xl font-bold md:text-4xl text-pretty",
9194
9196
  headingClassName
9195
9197
  ),
9196
9198
  children: heading
9197
9199
  }
9198
- ) : /* @__PURE__ */ jsx("div", { className: cn("mt-2", headingClassName), children: heading })),
9200
+ ) : heading),
9199
9201
  description && (typeof description === "string" ? /* @__PURE__ */ jsx(
9200
9202
  "p",
9201
9203
  {
9202
- className: cn(
9203
- "mt-4 text-lg text-background/80",
9204
- descriptionClassName
9205
- ),
9204
+ className: cn("mt-4 text-lg text-pretty", descriptionClassName),
9206
9205
  children: description
9207
9206
  }
9208
- ) : /* @__PURE__ */ jsx("div", { className: cn("mt-4", descriptionClassName), children: description })),
9207
+ ) : description),
9209
9208
  (highlightsSlot || highlights && highlights.length > 0) && highlightsContent,
9210
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-8 flex flex-wrap gap-4", actionsClassName), children: actionsContent })
9209
+ /* @__PURE__ */ jsx(
9210
+ BlockActions,
9211
+ {
9212
+ actions,
9213
+ actionsSlot,
9214
+ actionsClassName
9215
+ }
9216
+ )
9211
9217
  ]
9212
9218
  }
9213
9219
  )
@@ -12526,7 +12532,7 @@ function CtaVideoBackgroundHero({
12526
12532
  pattern,
12527
12533
  patternOpacity
12528
12534
  }) {
12529
- const [isModalOpen, setIsModalOpen] = React25.useState(false);
12535
+ const [isModalOpen, setIsModalOpen] = React28.useState(false);
12530
12536
  const handleOpenModal = () => {
12531
12537
  setIsModalOpen(true);
12532
12538
  onModalOpen?.();
@@ -12714,7 +12720,7 @@ function CtaWorkflowTabs({
12714
12720
  patternOpacity,
12715
12721
  optixFlowConfig
12716
12722
  }) {
12717
- const [activeTab, setActiveTab] = React25.useState(tabs?.[0]?.id || "");
12723
+ const [activeTab, setActiveTab] = React28.useState(tabs?.[0]?.id || "");
12718
12724
  const activeTabData = tabs?.find((tab) => tab.id === activeTab) || tabs?.[0];
12719
12725
  const actionsContent = useMemo(() => {
12720
12726
  if (actionsSlot) return actionsSlot;
@@ -13327,7 +13333,7 @@ function ContactFloatingBanner({
13327
13333
  pattern,
13328
13334
  patternOpacity
13329
13335
  }) {
13330
- const actionsContent = React25.useMemo(() => {
13336
+ const actionsContent = React28.useMemo(() => {
13331
13337
  if (actionsSlot) return actionsSlot;
13332
13338
  if (actions && actions.length > 0) {
13333
13339
  return actions.map((action, index) => {
@@ -13686,104 +13692,131 @@ function ContactCallback({
13686
13692
  }
13687
13693
  );
13688
13694
  }
13695
+ var DEFAULT_STYLE_RULES = {
13696
+ formContainer: "",
13697
+ fieldsContainer: "",
13698
+ fieldClassName: "",
13699
+ formClassName: "space-y-6"
13700
+ };
13689
13701
  var DEFAULT_FORM_FIELDS3 = [
13690
13702
  {
13691
- name: "firstName",
13703
+ name: "fullName",
13692
13704
  type: "text",
13693
- label: "First Name",
13694
- placeholder: "John",
13705
+ label: "Full Name",
13706
+ placeholder: "Full Name",
13695
13707
  required: true,
13696
13708
  columnSpan: 6
13697
13709
  },
13698
13710
  {
13699
- name: "lastName",
13700
- type: "text",
13701
- label: "Last Name",
13702
- placeholder: "Doe",
13711
+ name: "email",
13712
+ type: "email",
13713
+ label: "Email",
13714
+ placeholder: "your@email.com",
13703
13715
  required: true,
13704
13716
  columnSpan: 6
13705
13717
  },
13706
13718
  {
13707
- name: "email",
13708
- type: "email",
13709
- label: "Email Address",
13710
- placeholder: "john@example.com",
13711
- required: true,
13719
+ name: "phone",
13720
+ type: "tel",
13721
+ label: "Phone",
13722
+ placeholder: "+1 (555) 000-0000",
13712
13723
  columnSpan: 12
13713
13724
  },
13714
13725
  {
13715
13726
  name: "message",
13716
13727
  type: "textarea",
13717
- label: "Message",
13718
- placeholder: "How can we help you?",
13728
+ label: "Your Message",
13729
+ placeholder: "How can we help you today?",
13719
13730
  required: true,
13720
13731
  rows: 4,
13721
13732
  columnSpan: 12
13722
- },
13723
- {
13724
- name: "privacyPolicy",
13725
- type: "checkbox",
13726
- label: "I agree to the privacy policy",
13727
- required: true,
13728
- columnSpan: 12
13729
13733
  }
13730
13734
  ];
13731
13735
  function ContactCard({
13732
- heading,
13733
- description,
13734
- actions,
13735
- actionsSlot,
13736
- actionsClassName,
13736
+ heading = "Get In Touch",
13737
+ description = "We'd love to hear from you. Send us a message and we'll respond as soon as possible.",
13738
+ buttonText = "Send Message",
13739
+ buttonIcon,
13737
13740
  contactOptions,
13738
13741
  contactOptionsSlot,
13739
- formFields,
13740
- successMessage = "Thank you! We'll be in touch soon.",
13742
+ socialLinks,
13743
+ socialLinksSlot,
13744
+ formEngineSetup,
13741
13745
  className,
13742
13746
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
13743
13747
  cardClassName,
13744
- formClassName,
13745
- successMessageClassName,
13746
- errorMessageClassName,
13748
+ cardContentClassName,
13747
13749
  infoPanelClassName,
13748
13750
  headingClassName,
13749
13751
  descriptionClassName,
13750
13752
  contactOptionsClassName,
13753
+ socialLinksClassName,
13754
+ gridClassName,
13751
13755
  background,
13752
13756
  spacing = "py-16 md:py-32",
13753
13757
  pattern,
13754
- patternOpacity,
13755
- formConfig,
13756
- onSubmit,
13757
- onSuccess,
13758
- onError
13758
+ patternOpacity
13759
13759
  }) {
13760
- const fields = useMemo(() => formFields || DEFAULT_FORM_FIELDS3, [formFields]);
13761
- const { form, submissionError, formMethod, resetSubmissionState } = useContactForm({
13762
- formFields: fields,
13763
- formConfig,
13764
- onSubmit,
13765
- onSuccess,
13766
- onError
13767
- });
13768
- const contactOptionsContent = useMemo(() => {
13760
+ const formStyleRules = React28.useMemo(() => {
13761
+ return {
13762
+ formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES.formContainer,
13763
+ fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES.fieldsContainer,
13764
+ fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES.fieldClassName,
13765
+ formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES.formClassName,
13766
+ successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES.successMessageClassName,
13767
+ errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES.errorMessageClassName
13768
+ };
13769
+ }, [formEngineSetup?.formLayoutSettings?.styleRules]);
13770
+ const formFields = React28.useMemo(() => {
13771
+ if (formEngineSetup?.fields && formEngineSetup.fields.length > 0) {
13772
+ return formEngineSetup.fields;
13773
+ }
13774
+ return DEFAULT_FORM_FIELDS3;
13775
+ }, [formEngineSetup?.fields]);
13776
+ const contactOptionsContent = React28.useMemo(() => {
13769
13777
  if (contactOptionsSlot) return contactOptionsSlot;
13770
13778
  if (contactOptions && contactOptions.length > 0) {
13771
- return contactOptions.map((option, key) => /* @__PURE__ */ jsxs(
13779
+ return contactOptions.map((option, key) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
13780
+ /* @__PURE__ */ jsx(
13781
+ DynamicIcon,
13782
+ {
13783
+ name: option.icon,
13784
+ size: 20,
13785
+ className: "shrink-0 text-muted-foreground"
13786
+ }
13787
+ ),
13788
+ option.href ? /* @__PURE__ */ jsx(
13789
+ Pressable,
13790
+ {
13791
+ href: option.href,
13792
+ className: "text-sm font-medium text-muted-foreground",
13793
+ children: option.info
13794
+ }
13795
+ ) : /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-muted-foreground", children: option.info })
13796
+ ] }, key));
13797
+ }
13798
+ return null;
13799
+ }, [contactOptionsSlot, contactOptions]);
13800
+ const socialLinksContent = React28.useMemo(() => {
13801
+ if (socialLinksSlot) return socialLinksSlot;
13802
+ if (socialLinks && socialLinks.length > 0) {
13803
+ return socialLinks.map((social, key) => /* @__PURE__ */ jsx(
13772
13804
  Pressable,
13773
13805
  {
13774
- variant: "link",
13775
- href: option.href,
13776
- className: "gap-4 font-bold",
13777
- children: [
13778
- /* @__PURE__ */ jsx(DynamicIcon, { name: option.icon, size: 20 }),
13779
- option.info
13780
- ]
13806
+ href: social.href,
13807
+ className: cn(
13808
+ "flex h-9 w-9 items-center justify-center",
13809
+ "rounded-full transition-colors",
13810
+ "text-muted-foreground hover:text-foreground"
13811
+ ),
13812
+ "aria-label": social.label,
13813
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: social.icon, size: 18 })
13781
13814
  },
13782
13815
  key
13783
13816
  ));
13784
13817
  }
13785
13818
  return null;
13786
- }, [contactOptionsSlot, contactOptions]);
13819
+ }, [socialLinksSlot, socialLinks]);
13787
13820
  return /* @__PURE__ */ jsx(
13788
13821
  Section,
13789
13822
  {
@@ -13793,82 +13826,87 @@ function ContactCard({
13793
13826
  patternOpacity,
13794
13827
  className,
13795
13828
  containerClassName,
13796
- children: /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs("div", { className: "grid items-start gap-10 md:gap-12 lg:grid-cols-2", children: [
13797
- /* @__PURE__ */ jsx(Card, { className: cn("p-6 lg:p-8 order-2 md:order-1", cardClassName), children: /* @__PURE__ */ jsxs(
13798
- Form,
13799
- {
13800
- form,
13801
- action: formConfig?.endpoint,
13802
- method: formMethod,
13803
- submissionError,
13804
- successMessage,
13805
- successMessageClassName,
13806
- errorMessageClassName,
13807
- submissionConfig: formConfig?.submissionConfig,
13808
- onNewSubmission: resetSubmissionState,
13809
- className: cn("space-y-6", formClassName),
13810
- children: [
13811
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-12 gap-6", children: fields.map((field) => /* @__PURE__ */ jsx(
13812
- "div",
13813
- {
13814
- className: getColumnSpanClass(field.columnSpan),
13815
- children: /* @__PURE__ */ jsx(DynamicFormField, { field })
13829
+ children: /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs(
13830
+ "div",
13831
+ {
13832
+ className: cn(
13833
+ "grid items-start gap-10 md:gap-12 grid-cols-1 lg:grid-cols-2",
13834
+ gridClassName
13835
+ ),
13836
+ children: [
13837
+ /* @__PURE__ */ jsx(Card, { className: cn("order-2 lg:order-1 pt-0 pb-0", cardClassName), children: /* @__PURE__ */ jsx(CardContent, { className: cn("p-6 lg:p-8", cardContentClassName), children: formEngineSetup ? /* @__PURE__ */ jsx(
13838
+ FormEngine,
13839
+ {
13840
+ ...formEngineSetup,
13841
+ formLayoutSettings: {
13842
+ ...formEngineSetup.formLayoutSettings,
13843
+ formLayout: "standard",
13844
+ submitButtonSetup: {
13845
+ ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
13846
+ submitLabel: /* @__PURE__ */ jsxs(Fragment$1, { children: [
13847
+ buttonIcon,
13848
+ buttonText
13849
+ ] })
13850
+ },
13851
+ styleRules: formStyleRules
13816
13852
  },
13817
- field.name
13818
- )) }),
13819
- /* @__PURE__ */ jsx(
13820
- BlockActions,
13821
- {
13822
- actions,
13823
- actionsSlot,
13824
- actionsClassName
13825
- }
13826
- )
13827
- ]
13828
- }
13829
- ) }),
13830
- /* @__PURE__ */ jsxs(
13831
- "div",
13832
- {
13833
- className: cn(
13834
- "flex flex-col items-start gap-2 md:gap-4 order-1 md:order-2",
13835
- infoPanelClassName
13836
- ),
13837
- children: [
13838
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
13839
- "h2",
13840
- {
13841
- className: cn(
13842
- "text-4xl lg:text-6xl font-bold tracking-tight text-pretty",
13843
- headingClassName
13844
- ),
13845
- children: heading
13846
- }
13847
- ) : heading),
13848
- description && (typeof description === "string" ? /* @__PURE__ */ jsx(
13849
- "p",
13850
- {
13851
- className: cn(
13852
- "leading-relaxed text-pretty text-lg opacity-70",
13853
- descriptionClassName
13854
- ),
13855
- children: description
13856
- }
13857
- ) : description),
13858
- /* @__PURE__ */ jsx(
13859
- "div",
13860
- {
13861
- className: cn(
13862
- "mt-4 space-y-4 w-full md:w-fit px-6 py-6 md:px-12 md:py-8 bg-muted rounded-xl text-sm md:text-normal flex flex-col items-start gap-1",
13863
- contactOptionsClassName
13853
+ fields: formFields
13854
+ }
13855
+ ) : null }) }),
13856
+ /* @__PURE__ */ jsxs(
13857
+ "div",
13858
+ {
13859
+ className: cn(
13860
+ "flex flex-col items-start gap-2 md:gap-4 order-1 lg:order-2",
13861
+ infoPanelClassName
13862
+ ),
13863
+ children: [
13864
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
13865
+ "h2",
13866
+ {
13867
+ className: cn(
13868
+ "text-4xl lg:text-6xl font-bold tracking-tight text-pretty",
13869
+ headingClassName
13870
+ ),
13871
+ children: heading
13872
+ }
13873
+ ) : heading),
13874
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
13875
+ "p",
13876
+ {
13877
+ className: cn(
13878
+ "leading-relaxed text-pretty text-lg text-muted-foreground",
13879
+ descriptionClassName
13880
+ ),
13881
+ children: description
13882
+ }
13883
+ ) : description),
13884
+ contactOptionsContent && /* @__PURE__ */ jsx(
13885
+ "div",
13886
+ {
13887
+ className: cn(
13888
+ "mt-4 w-full rounded-xl bg-muted px-6 py-6 md:px-8 md:py-8 space-y-6",
13889
+ contactOptionsClassName
13890
+ ),
13891
+ children: contactOptionsContent
13892
+ }
13864
13893
  ),
13865
- children: contactOptionsContent
13866
- }
13867
- )
13868
- ]
13869
- }
13870
- )
13871
- ] }) })
13894
+ socialLinksContent && /* @__PURE__ */ jsx(
13895
+ "div",
13896
+ {
13897
+ className: cn(
13898
+ "mt-2 flex items-center gap-2",
13899
+ socialLinksClassName
13900
+ ),
13901
+ children: socialLinksContent
13902
+ }
13903
+ )
13904
+ ]
13905
+ }
13906
+ )
13907
+ ]
13908
+ }
13909
+ ) })
13872
13910
  }
13873
13911
  );
13874
13912
  }
@@ -14336,7 +14374,7 @@ function ContactCatering({
14336
14374
  onSuccess,
14337
14375
  onError
14338
14376
  });
14339
- const actionsContent = React25.useMemo(() => {
14377
+ const actionsContent = React28.useMemo(() => {
14340
14378
  if (actionsSlot) return actionsSlot;
14341
14379
  if (actions && actions.length > 0) {
14342
14380
  return actions.map((action, index) => {
@@ -14580,7 +14618,7 @@ function ContactConsultation({
14580
14618
  onSuccess,
14581
14619
  onError
14582
14620
  });
14583
- const actionsContent = React25.useMemo(() => {
14621
+ const actionsContent = React28.useMemo(() => {
14584
14622
  if (actionsSlot) return actionsSlot;
14585
14623
  if (actions && actions.length > 0) {
14586
14624
  return actions.map((action, index) => {
@@ -14685,6 +14723,12 @@ function ContactConsultation({
14685
14723
  }
14686
14724
  );
14687
14725
  }
14726
+ var DEFAULT_STYLE_RULES2 = {
14727
+ formContainer: "",
14728
+ fieldsContainer: "",
14729
+ fieldClassName: "",
14730
+ formClassName: "space-y-6"
14731
+ };
14688
14732
  var DEFAULT_FORM_FIELDS7 = [
14689
14733
  {
14690
14734
  name: "firstName",
@@ -14727,88 +14771,43 @@ function ContactDark({
14727
14771
  contactDescription = "Fill up the form and our team will get back to you within 24 hours.",
14728
14772
  buttonText = "Submit",
14729
14773
  buttonIcon,
14730
- actions,
14731
- actionsSlot,
14732
14774
  contactOptions,
14733
14775
  contactOptionsSlot,
14734
14776
  socialLinks,
14735
14777
  socialLinksSlot,
14736
- formFields = DEFAULT_FORM_FIELDS7,
14737
- successMessage = "Thank you! Your message has been sent successfully.",
14778
+ formEngineSetup,
14738
14779
  className,
14739
14780
  headerClassName,
14740
14781
  headingClassName,
14741
14782
  descriptionClassName,
14742
14783
  cardClassName,
14743
14784
  formPanelClassName,
14744
- formClassName,
14745
- submitClassName,
14746
14785
  infoPanelClassName,
14747
14786
  contactOptionsClassName,
14748
14787
  socialLinksClassName,
14749
- successMessageClassName,
14750
- errorMessageClassName,
14751
14788
  background,
14752
14789
  spacing = "py-8 md:py-32",
14753
14790
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
14754
14791
  pattern,
14755
- patternOpacity,
14756
- formConfig,
14757
- onSubmit,
14758
- onSuccess,
14759
- onError
14792
+ patternOpacity
14760
14793
  }) {
14761
- const {
14762
- uploadTokens,
14763
- uploadProgress,
14764
- isUploading,
14765
- uploadFiles,
14766
- removeFile,
14767
- resetUpload
14768
- } = useFileUpload({ onError });
14769
- const { form, submissionError, formMethod, resetSubmissionState } = useContactForm({
14770
- formFields,
14771
- formConfig,
14772
- onSubmit,
14773
- onSuccess: (data) => {
14774
- resetUpload();
14775
- onSuccess?.(data);
14776
- },
14777
- onError,
14778
- resetOnSuccess: formConfig?.resetOnSuccess !== false,
14779
- uploadTokens
14780
- });
14781
- const actionsContent = React25.useMemo(() => {
14782
- if (actionsSlot) return actionsSlot;
14783
- if (actions && actions.length > 0) {
14784
- return actions.map((action, index) => {
14785
- const {
14786
- label,
14787
- icon,
14788
- iconAfter,
14789
- children,
14790
- className: actionClassName,
14791
- ...pressableProps
14792
- } = action;
14793
- return /* @__PURE__ */ jsx(
14794
- Pressable,
14795
- {
14796
- asButton: true,
14797
- className: actionClassName,
14798
- ...pressableProps,
14799
- children: children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
14800
- icon,
14801
- label,
14802
- iconAfter
14803
- ] })
14804
- },
14805
- index
14806
- );
14807
- });
14794
+ const formStyleRules = React28.useMemo(() => {
14795
+ return {
14796
+ formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES2.formContainer,
14797
+ fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES2.fieldsContainer,
14798
+ fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES2.fieldClassName,
14799
+ formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES2.formClassName,
14800
+ successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES2.successMessageClassName,
14801
+ errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES2.errorMessageClassName
14802
+ };
14803
+ }, [formEngineSetup?.formLayoutSettings?.styleRules]);
14804
+ const formFields = React28.useMemo(() => {
14805
+ if (formEngineSetup?.fields && formEngineSetup.fields.length > 0) {
14806
+ return formEngineSetup.fields;
14808
14807
  }
14809
- return null;
14810
- }, [actionsSlot, actions]);
14811
- const contactOptionsContent = React25.useMemo(() => {
14808
+ return DEFAULT_FORM_FIELDS7;
14809
+ }, [formEngineSetup?.fields]);
14810
+ const contactOptionsContent = React28.useMemo(() => {
14812
14811
  if (contactOptionsSlot) return contactOptionsSlot;
14813
14812
  if (contactOptions && contactOptions.length > 0) {
14814
14813
  return contactOptions.map((option, key) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
@@ -14832,7 +14831,7 @@ function ContactDark({
14832
14831
  }
14833
14832
  return null;
14834
14833
  }, [contactOptionsSlot, contactOptions]);
14835
- const socialLinksContent = React25.useMemo(() => {
14834
+ const socialLinksContent = React28.useMemo(() => {
14836
14835
  if (socialLinksSlot) return socialLinksSlot;
14837
14836
  if (socialLinks && socialLinks.length > 0) {
14838
14837
  return socialLinks.map((social, key) => /* @__PURE__ */ jsx(
@@ -14862,124 +14861,102 @@ function ContactDark({
14862
14861
  patternOpacity,
14863
14862
  className,
14864
14863
  containerClassName,
14865
- children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
14866
- /* @__PURE__ */ jsxs("div", { className: cn("mb-10 text-center", headerClassName), children: [
14867
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
14868
- "h2",
14869
- {
14870
- className: cn(
14871
- "mb-3 text-3xl font-bold tracking-tight text-balance",
14872
- headingClassName
14873
- ),
14874
- children: heading
14875
- }
14876
- ) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
14877
- description && (typeof description === "string" ? /* @__PURE__ */ jsx(
14878
- "p",
14879
- {
14880
- className: cn(
14881
- "leading-relaxed text-balance",
14882
- descriptionClassName
14883
- ),
14884
- children: description
14885
- }
14886
- ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
14887
- ] }),
14888
- /* @__PURE__ */ jsxs(
14889
- Card,
14890
- {
14891
- className: cn(
14892
- "grid gap-0 overflow-hidden grid-cols-1 lg:grid-cols-2 pt-0 pb-0",
14893
- cardClassName
14894
- ),
14895
- children: [
14896
- /* @__PURE__ */ jsx("div", { className: cn("p-6 lg:p-12", formPanelClassName), children: /* @__PURE__ */ jsxs(
14897
- Form,
14898
- {
14899
- form,
14900
- notificationConfig: {
14901
- submissionError,
14902
- successMessage
14903
- },
14904
- styleConfig: {
14905
- formClassName: cn("space-y-6", formClassName),
14906
- successMessageClassName,
14907
- errorMessageClassName
14908
- },
14909
- formConfig: {
14910
- endpoint: formConfig?.endpoint,
14911
- method: formMethod,
14912
- submissionConfig: formConfig?.submissionConfig
14913
- },
14914
- onNewSubmission: () => {
14915
- resetUpload();
14916
- resetSubmissionState();
14864
+ children: /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs(
14865
+ Card,
14866
+ {
14867
+ className: cn(
14868
+ "grid gap-0 overflow-hidden grid-cols-1 lg:grid-cols-2 pt-0 pb-0",
14869
+ cardClassName
14870
+ ),
14871
+ children: [
14872
+ /* @__PURE__ */ jsx("div", { className: cn("p-6 lg:p-12", formPanelClassName), children: formEngineSetup ? /* @__PURE__ */ jsx(
14873
+ FormEngine,
14874
+ {
14875
+ ...formEngineSetup,
14876
+ formLayoutSettings: {
14877
+ ...formEngineSetup.formLayoutSettings,
14878
+ formLayout: "standard",
14879
+ submitButtonSetup: {
14880
+ ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
14881
+ submitLabel: /* @__PURE__ */ jsxs(Fragment$1, { children: [
14882
+ buttonIcon,
14883
+ buttonText
14884
+ ] })
14917
14885
  },
14918
- children: [
14919
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-12 gap-6", children: formFields.map((field) => /* @__PURE__ */ jsx(
14920
- "div",
14921
- {
14922
- className: getColumnSpanClass(field.columnSpan),
14923
- children: /* @__PURE__ */ jsx(
14924
- DynamicFormField,
14886
+ styleRules: formStyleRules
14887
+ },
14888
+ fields: formFields
14889
+ }
14890
+ ) : null }),
14891
+ /* @__PURE__ */ jsxs(
14892
+ "div",
14893
+ {
14894
+ className: cn(
14895
+ "flex flex-col justify-between bg-primary p-6 text-primary-foreground lg:p-8",
14896
+ infoPanelClassName
14897
+ ),
14898
+ children: [
14899
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(
14900
+ "div",
14901
+ {
14902
+ className: cn(
14903
+ "pb-6 md:pb-8 border-b-2 border-border/50 mb-6 md:mb-8 text-left",
14904
+ headerClassName
14905
+ ),
14906
+ children: [
14907
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
14908
+ "h2",
14925
14909
  {
14926
- field,
14927
- uploadProgress,
14928
- onFileUpload: uploadFiles,
14929
- onFileRemove: removeFile,
14930
- isUploading
14910
+ className: cn(
14911
+ "text-3xl font-bold tracking-tight text-pretty md:text-5xl",
14912
+ headingClassName
14913
+ ),
14914
+ children: heading
14931
14915
  }
14932
- )
14933
- },
14934
- field.name
14935
- )) }),
14936
- actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxs(
14937
- Pressable,
14938
- {
14939
- componentType: "button",
14940
- type: "submit",
14941
- className: cn("w-full", submitClassName),
14942
- asButton: true,
14943
- disabled: form.isSubmitting,
14944
- children: [
14945
- buttonIcon,
14946
- buttonText
14947
- ]
14948
- }
14949
- )
14950
- ]
14951
- }
14952
- ) }),
14953
- /* @__PURE__ */ jsxs(
14954
- "div",
14955
- {
14956
- className: cn(
14957
- "flex flex-col justify-between bg-primary p-6 text-primary-foreground lg:p-8",
14958
- infoPanelClassName
14959
- ),
14960
- children: [
14961
- /* @__PURE__ */ jsxs("div", { children: [
14962
- contactHeading && (typeof contactHeading === "string" ? /* @__PURE__ */ jsx("h3", { className: "mb-3 text-xl font-semibold", children: contactHeading }) : /* @__PURE__ */ jsx("div", { className: "mb-3", children: contactHeading })),
14963
- contactDescription && (typeof contactDescription === "string" ? /* @__PURE__ */ jsx("p", { className: "mb-8 text-sm text-primary-foreground/80", children: contactDescription }) : /* @__PURE__ */ jsx("div", { className: "mb-8", children: contactDescription })),
14964
- /* @__PURE__ */ jsx("div", { className: cn("space-y-4", contactOptionsClassName), children: contactOptionsContent })
14965
- ] }),
14916
+ ) : heading),
14917
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
14918
+ "p",
14919
+ {
14920
+ className: cn(
14921
+ "leading-relaxed text-balance",
14922
+ descriptionClassName
14923
+ ),
14924
+ children: description
14925
+ }
14926
+ ) : description)
14927
+ ]
14928
+ }
14929
+ ) }),
14930
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start gap-4", children: [
14931
+ contactHeading && (typeof contactHeading === "string" ? /* @__PURE__ */ jsx("h3", { className: "text-xl font-semibold", children: contactHeading }) : contactHeading),
14932
+ contactDescription && (typeof contactDescription === "string" ? /* @__PURE__ */ jsx("p", { className: "text-sm text-primary-foreground/80", children: contactDescription }) : contactDescription),
14966
14933
  /* @__PURE__ */ jsx(
14967
14934
  "div",
14968
14935
  {
14969
14936
  className: cn(
14970
- "mt-8 flex items-center gap-4",
14971
- socialLinksClassName
14937
+ "pt-6 md:pt-8 space-y-4",
14938
+ contactOptionsClassName
14972
14939
  ),
14973
- children: socialLinksContent
14940
+ children: contactOptionsContent
14974
14941
  }
14975
14942
  )
14976
- ]
14977
- }
14978
- )
14979
- ]
14980
- }
14981
- )
14982
- ] })
14943
+ ] }),
14944
+ /* @__PURE__ */ jsx(
14945
+ "div",
14946
+ {
14947
+ className: cn(
14948
+ "mt-8 flex items-center gap-4",
14949
+ socialLinksClassName
14950
+ ),
14951
+ children: socialLinksContent
14952
+ }
14953
+ )
14954
+ ]
14955
+ }
14956
+ )
14957
+ ]
14958
+ }
14959
+ ) })
14983
14960
  }
14984
14961
  );
14985
14962
  }
@@ -15328,32 +15305,12 @@ function ContactDemo({
15328
15305
  }
15329
15306
  );
15330
15307
  }
15331
- var DEFAULT_CONTACT_ITEMS = [
15332
- {
15333
- icon: "lucide/phone",
15334
- title: "Critical Hotline",
15335
- subtitle: "+1 (555) 911-0000",
15336
- href: "tel:+15559110000"
15337
- },
15338
- {
15339
- icon: "lucide/mail",
15340
- title: "Email Support",
15341
- subtitle: "emergency@support.com",
15342
- href: "mailto:emergency@support.com"
15343
- },
15344
- {
15345
- icon: "lucide/message-circle",
15346
- title: "Live Chat",
15347
- subtitle: "24/7 Available",
15348
- href: "#chat"
15349
- },
15350
- {
15351
- icon: "lucide/map-pin",
15352
- title: "Visit Us",
15353
- subtitle: "123 Support Lane",
15354
- href: "#location"
15355
- }
15356
- ];
15308
+ var DEFAULT_STYLE_RULES3 = {
15309
+ formContainer: "",
15310
+ fieldsContainer: "",
15311
+ fieldClassName: "",
15312
+ formClassName: "space-y-4"
15313
+ };
15357
15314
  var PRIORITIES = [
15358
15315
  {
15359
15316
  value: "critical",
@@ -15428,281 +15385,196 @@ var DEFAULT_FORM_FIELDS9 = [
15428
15385
  function ContactEmergency({
15429
15386
  heading,
15430
15387
  description,
15431
- contactItems = DEFAULT_CONTACT_ITEMS,
15388
+ contactItems,
15432
15389
  buttonText = "Submit Emergency Request",
15433
15390
  buttonIcon,
15391
+ formEngineSetup,
15392
+ className,
15393
+ headerClassName,
15394
+ headingClassName,
15395
+ descriptionClassName,
15396
+ spacing = "py-16 md:py-32",
15397
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
15398
+ background,
15399
+ pattern,
15400
+ patternOpacity
15401
+ }) {
15402
+ const formStyleRules = React28.useMemo(() => {
15403
+ return {
15404
+ formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES3.formContainer,
15405
+ fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES3.fieldsContainer,
15406
+ fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES3.fieldClassName,
15407
+ formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES3.formClassName,
15408
+ successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES3.successMessageClassName,
15409
+ errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES3.errorMessageClassName
15410
+ };
15411
+ }, [formEngineSetup?.formLayoutSettings?.styleRules]);
15412
+ const formFields = React28.useMemo(() => {
15413
+ if (formEngineSetup?.fields && formEngineSetup.fields.length > 0) {
15414
+ return formEngineSetup.fields;
15415
+ }
15416
+ return DEFAULT_FORM_FIELDS9;
15417
+ }, [formEngineSetup?.fields]);
15418
+ return /* @__PURE__ */ jsx(
15419
+ Section,
15420
+ {
15421
+ background,
15422
+ spacing,
15423
+ pattern,
15424
+ patternOpacity,
15425
+ className,
15426
+ containerClassName,
15427
+ children: /* @__PURE__ */ jsxs("div", { className: "grid md:grid-cols-2 gap-12 md:gap-28", children: [
15428
+ /* @__PURE__ */ jsx("div", { className: "h-full", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start justify-between h-full gap-8 md:gap-12", children: [
15429
+ /* @__PURE__ */ jsxs(
15430
+ "div",
15431
+ {
15432
+ className: cn(
15433
+ "flex flex-col items-start gap-4 text-left",
15434
+ headerClassName
15435
+ ),
15436
+ children: [
15437
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
15438
+ "h2",
15439
+ {
15440
+ className: cn(
15441
+ "text-4xl lg:text-5xl xl:text-6xl font-bold text-pretty",
15442
+ headingClassName
15443
+ ),
15444
+ children: heading
15445
+ }
15446
+ ) : heading),
15447
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
15448
+ "p",
15449
+ {
15450
+ className: cn(
15451
+ "leading-relaxed text-pretty md:text-balance text-lg",
15452
+ descriptionClassName
15453
+ ),
15454
+ children: description
15455
+ }
15456
+ ) : description)
15457
+ ]
15458
+ }
15459
+ ),
15460
+ contactItems && contactItems.length > 0 && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 md:gap-6 w-full", children: contactItems.map((item, index) => /* @__PURE__ */ jsx(
15461
+ Pressable,
15462
+ {
15463
+ href: item.href,
15464
+ className: cn(
15465
+ "rounded-xl border bg-transparent hover:bg-muted ring-2",
15466
+ "px-4 py-4 flex",
15467
+ "justify-start items-start transition-all",
15468
+ "duration-500 hover:text-muted-foreground",
15469
+ item.className
15470
+ ),
15471
+ children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
15472
+ item.icon ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center p-2 rounded-xl border bg-primary text-primary-foreground", children: /* @__PURE__ */ jsx(
15473
+ DynamicIcon,
15474
+ {
15475
+ name: item.icon,
15476
+ size: item.iconSize ?? 24
15477
+ }
15478
+ ) }) : null,
15479
+ /* @__PURE__ */ jsxs("div", { children: [
15480
+ /* @__PURE__ */ jsx("p", { className: "font-bold text-xs uppercase opacity-70", children: item.title }),
15481
+ /* @__PURE__ */ jsx("p", { className: "text-md font-medium", children: item.subtitle })
15482
+ ] })
15483
+ ] })
15484
+ },
15485
+ index
15486
+ )) })
15487
+ ] }) }),
15488
+ /* @__PURE__ */ jsx("div", { className: "p-6", children: formEngineSetup ? /* @__PURE__ */ jsx(
15489
+ FormEngine,
15490
+ {
15491
+ ...formEngineSetup,
15492
+ formLayoutSettings: {
15493
+ ...formEngineSetup.formLayoutSettings,
15494
+ formLayout: "standard",
15495
+ submitButtonSetup: {
15496
+ ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
15497
+ submitLabel: /* @__PURE__ */ jsxs(Fragment$1, { children: [
15498
+ buttonIcon,
15499
+ buttonText
15500
+ ] })
15501
+ },
15502
+ styleRules: formStyleRules
15503
+ },
15504
+ fields: formFields
15505
+ }
15506
+ ) : null })
15507
+ ] })
15508
+ }
15509
+ );
15510
+ }
15511
+ var DEFAULT_FORM_FIELDS10 = [
15512
+ {
15513
+ name: "first_name",
15514
+ type: "text",
15515
+ label: "First Name",
15516
+ placeholder: "John",
15517
+ required: true,
15518
+ columnSpan: 6
15519
+ },
15520
+ {
15521
+ name: "last_name",
15522
+ type: "text",
15523
+ label: "Last Name",
15524
+ placeholder: "Doe",
15525
+ required: true,
15526
+ columnSpan: 6
15527
+ },
15528
+ {
15529
+ name: "email",
15530
+ type: "email",
15531
+ label: "Email",
15532
+ placeholder: "john@example.com",
15533
+ required: true,
15534
+ columnSpan: 12
15535
+ },
15536
+ {
15537
+ name: "phone",
15538
+ type: "tel",
15539
+ label: "Phone",
15540
+ placeholder: "+1 (555) 000-0000",
15541
+ required: true,
15542
+ columnSpan: 12
15543
+ },
15544
+ {
15545
+ name: "message",
15546
+ type: "textarea",
15547
+ label: "Message",
15548
+ placeholder: "Your message...",
15549
+ required: true,
15550
+ rows: 4,
15551
+ columnSpan: 12
15552
+ }
15553
+ ];
15554
+ function ContactEvent({
15555
+ heading,
15556
+ description,
15557
+ buttonText = "Submit",
15558
+ buttonIcon,
15434
15559
  actions,
15435
15560
  actionsSlot,
15436
- formFields = DEFAULT_FORM_FIELDS9,
15437
- successMessage = "Thank you! Your emergency request has been received.",
15561
+ formFields = DEFAULT_FORM_FIELDS10,
15562
+ successMessage = "Thank you! Your message has been sent successfully.",
15438
15563
  className,
15564
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
15439
15565
  headerClassName,
15440
15566
  headingClassName,
15441
15567
  descriptionClassName,
15568
+ cardClassName,
15569
+ cardContentClassName,
15442
15570
  formClassName,
15443
15571
  submitClassName,
15444
15572
  successMessageClassName,
15445
15573
  errorMessageClassName,
15446
- spacing = "py-8 md:py-32",
15447
- containerClassName = "w-full max-w-full relative z-10 px-6 sm:px-6 md:px-8 lg:px-8",
15448
- background,
15574
+ background = "white",
15575
+ spacing = "xl",
15449
15576
  pattern,
15450
- patternOpacity,
15451
- formConfig,
15452
- onSubmit,
15453
- onSuccess,
15454
- onError
15455
- }) {
15456
- const {
15457
- uploadTokens,
15458
- uploadProgress,
15459
- isUploading,
15460
- uploadFiles,
15461
- removeFile,
15462
- resetUpload
15463
- } = useFileUpload({ onError });
15464
- const { form, submissionError, formMethod, resetSubmissionState } = useContactForm({
15465
- formFields,
15466
- formConfig,
15467
- onSubmit,
15468
- onSuccess: (data) => {
15469
- resetUpload();
15470
- onSuccess?.(data);
15471
- },
15472
- onError,
15473
- resetOnSuccess: formConfig?.resetOnSuccess !== false,
15474
- uploadTokens
15475
- });
15476
- const otherFields = formFields.filter((f) => f.name !== "priority");
15477
- const actionsContent = useMemo(() => {
15478
- if (actionsSlot) return actionsSlot;
15479
- if (actions && actions.length > 0) {
15480
- return actions.map((action, index) => {
15481
- const {
15482
- label,
15483
- icon,
15484
- iconAfter,
15485
- children,
15486
- className: actionClassName,
15487
- ...pressableProps
15488
- } = action;
15489
- return /* @__PURE__ */ jsx(
15490
- Pressable,
15491
- {
15492
- asButton: true,
15493
- className: actionClassName,
15494
- ...pressableProps,
15495
- children: children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
15496
- icon,
15497
- label,
15498
- iconAfter
15499
- ] })
15500
- },
15501
- index
15502
- );
15503
- });
15504
- }
15505
- return null;
15506
- }, [actionsSlot, actions]);
15507
- return /* @__PURE__ */ jsx(
15508
- Section,
15509
- {
15510
- background,
15511
- spacing,
15512
- pattern,
15513
- patternOpacity,
15514
- className,
15515
- containerClassName,
15516
- children: /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs(
15517
- Form,
15518
- {
15519
- form,
15520
- notificationConfig: {
15521
- submissionError,
15522
- successMessage
15523
- },
15524
- styleConfig: {
15525
- formClassName,
15526
- successMessageClassName,
15527
- errorMessageClassName
15528
- },
15529
- formConfig: {
15530
- endpoint: formConfig?.endpoint,
15531
- method: formMethod,
15532
- submissionConfig: formConfig?.submissionConfig
15533
- },
15534
- onNewSubmission: () => {
15535
- resetUpload();
15536
- resetSubmissionState();
15537
- },
15538
- children: [
15539
- /* @__PURE__ */ jsx("div", { className: "flex", children: /* @__PURE__ */ jsxs("div", { className: cn("p-0 md:p-12"), children: [
15540
- /* @__PURE__ */ jsx("div", { className: "grid md:grid-cols-2 gap-12 md:gap-24", children: /* @__PURE__ */ jsx("div", { className: "border-b border-border/60 p-6 md:border-b-0 md:border-r md:border-border/60", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col items-start gap-8 md:gap-12", children: /* @__PURE__ */ jsxs(
15541
- "div",
15542
- {
15543
- className: cn(
15544
- "flex flex-col items-start gap-4 text-left",
15545
- headerClassName
15546
- ),
15547
- children: [
15548
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
15549
- "h2",
15550
- {
15551
- className: cn(
15552
- "text-4xl lg:text-5xl xl:text-6xl font-bold",
15553
- headingClassName
15554
- ),
15555
- children: heading
15556
- }
15557
- ) : heading),
15558
- description && (typeof description === "string" ? /* @__PURE__ */ jsx(
15559
- "p",
15560
- {
15561
- className: cn(
15562
- "leading-relaxed",
15563
- descriptionClassName
15564
- ),
15565
- children: description
15566
- }
15567
- ) : description)
15568
- ]
15569
- }
15570
- ) }) }) }),
15571
- contactItems && contactItems.length > 0 && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 md:gap-6 w-full", children: contactItems.map((item, index) => /* @__PURE__ */ jsx(
15572
- Pressable,
15573
- {
15574
- href: item.href,
15575
- className: cn(
15576
- "rounded-md border bg-muted ring-2",
15577
- "text-muted-foreground px-4 py-3 flex",
15578
- "justify-start items-start transition-shadow",
15579
- "duration-500 hover:shadow-xl",
15580
- item.className
15581
- ),
15582
- children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
15583
- item.icon ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center p-2 rounded-xl border bg-primary text-primary-foreground", children: /* @__PURE__ */ jsx(
15584
- DynamicIcon,
15585
- {
15586
- name: item.icon,
15587
- size: item.iconSize ?? 24
15588
- }
15589
- ) }) : null,
15590
- /* @__PURE__ */ jsxs("div", { children: [
15591
- /* @__PURE__ */ jsx("p", { className: "font-bold text-xs uppercase opacity-70", children: item.title }),
15592
- /* @__PURE__ */ jsx("p", { className: "text-md font-semibold", children: item.subtitle })
15593
- ] })
15594
- ] })
15595
- },
15596
- index
15597
- )) })
15598
- ] }) }),
15599
- /* @__PURE__ */ jsx("div", { className: "p-6", children: /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
15600
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-12 gap-4", children: otherFields.map((field) => /* @__PURE__ */ jsx(
15601
- "div",
15602
- {
15603
- className: getColumnSpanClass(field.columnSpan),
15604
- children: /* @__PURE__ */ jsx(
15605
- DynamicFormField,
15606
- {
15607
- field,
15608
- uploadProgress,
15609
- onFileUpload: uploadFiles,
15610
- onFileRemove: removeFile,
15611
- isUploading
15612
- }
15613
- )
15614
- },
15615
- field.name
15616
- )) }),
15617
- actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxs(
15618
- Pressable,
15619
- {
15620
- componentType: "button",
15621
- type: "submit",
15622
- className: cn("w-full", submitClassName),
15623
- size: "lg",
15624
- asButton: true,
15625
- disabled: form.isSubmitting,
15626
- children: [
15627
- buttonIcon,
15628
- buttonText
15629
- ]
15630
- }
15631
- )
15632
- ] }) })
15633
- ]
15634
- }
15635
- ) })
15636
- }
15637
- );
15638
- }
15639
- var DEFAULT_FORM_FIELDS10 = [
15640
- {
15641
- name: "first_name",
15642
- type: "text",
15643
- label: "First Name",
15644
- placeholder: "John",
15645
- required: true,
15646
- columnSpan: 6
15647
- },
15648
- {
15649
- name: "last_name",
15650
- type: "text",
15651
- label: "Last Name",
15652
- placeholder: "Doe",
15653
- required: true,
15654
- columnSpan: 6
15655
- },
15656
- {
15657
- name: "email",
15658
- type: "email",
15659
- label: "Email",
15660
- placeholder: "john@example.com",
15661
- required: true,
15662
- columnSpan: 12
15663
- },
15664
- {
15665
- name: "phone",
15666
- type: "tel",
15667
- label: "Phone",
15668
- placeholder: "+1 (555) 000-0000",
15669
- required: true,
15670
- columnSpan: 12
15671
- },
15672
- {
15673
- name: "message",
15674
- type: "textarea",
15675
- label: "Message",
15676
- placeholder: "Your message...",
15677
- required: true,
15678
- rows: 4,
15679
- columnSpan: 12
15680
- }
15681
- ];
15682
- function ContactEvent({
15683
- heading,
15684
- description,
15685
- buttonText = "Submit",
15686
- buttonIcon,
15687
- actions,
15688
- actionsSlot,
15689
- formFields = DEFAULT_FORM_FIELDS10,
15690
- successMessage = "Thank you! Your message has been sent successfully.",
15691
- className,
15692
- containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
15693
- headerClassName,
15694
- headingClassName,
15695
- descriptionClassName,
15696
- cardClassName,
15697
- cardContentClassName,
15698
- formClassName,
15699
- submitClassName,
15700
- successMessageClassName,
15701
- errorMessageClassName,
15702
- background = "white",
15703
- spacing = "xl",
15704
- pattern,
15705
- patternOpacity = 0.1,
15577
+ patternOpacity = 0.1,
15706
15578
  formConfig,
15707
15579
  onSubmit,
15708
15580
  onSuccess,
@@ -15912,7 +15784,7 @@ function AccordionContent({
15912
15784
  }
15913
15785
  );
15914
15786
  }
15915
- var DEFAULT_STYLE_RULES = {
15787
+ var DEFAULT_STYLE_RULES4 = {
15916
15788
  formContainer: "",
15917
15789
  fieldsContainer: "",
15918
15790
  fieldClassName: "",
@@ -15983,17 +15855,17 @@ function ContactFaq({
15983
15855
  pattern,
15984
15856
  patternOpacity
15985
15857
  }) {
15986
- const formStyleRules = React25.useMemo(() => {
15858
+ const formStyleRules = React28.useMemo(() => {
15987
15859
  return {
15988
- formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES.formContainer,
15989
- fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES.fieldsContainer,
15990
- fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES.fieldClassName,
15991
- formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES.formClassName,
15992
- successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES.successMessageClassName,
15993
- errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES.errorMessageClassName
15860
+ formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES4.formContainer,
15861
+ fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES4.fieldsContainer,
15862
+ fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES4.fieldClassName,
15863
+ formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES4.formClassName,
15864
+ successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES4.successMessageClassName,
15865
+ errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES4.errorMessageClassName
15994
15866
  };
15995
15867
  }, [formEngineSetup?.formLayoutSettings?.styleRules]);
15996
- const formFields = React25.useMemo(() => {
15868
+ const formFields = React28.useMemo(() => {
15997
15869
  if (formEngineSetup && formEngineSetup?.fields && formEngineSetup?.fields?.length > 0) {
15998
15870
  return formEngineSetup.fields;
15999
15871
  } else {
@@ -16093,7 +15965,7 @@ function ContactFaq({
16093
15965
  ),
16094
15966
  children: formHeading
16095
15967
  }
16096
- ) : /* @__PURE__ */ jsx("div", { className: formHeadingClassName, children: formHeading })),
15968
+ ) : formHeading),
16097
15969
  formEngineSetup ? /* @__PURE__ */ jsx(
16098
15970
  FormEngine,
16099
15971
  {
@@ -16782,6 +16654,12 @@ function ContactGuest({
16782
16654
  }
16783
16655
  );
16784
16656
  }
16657
+ var DEFAULT_STYLE_RULES5 = {
16658
+ formContainer: "",
16659
+ fieldsContainer: "",
16660
+ fieldClassName: "",
16661
+ formClassName: "space-y-4"
16662
+ };
16785
16663
  var DEFAULT_FORM_FIELDS15 = [
16786
16664
  {
16787
16665
  name: "first_name",
@@ -16826,207 +16704,186 @@ var DEFAULT_FORM_FIELDS15 = [
16826
16704
  }
16827
16705
  ];
16828
16706
  function ContactImage({
16707
+ eyebrow,
16829
16708
  heading,
16830
16709
  description,
16831
- buttonText = "Submit",
16710
+ buttonText = "Send Message",
16832
16711
  buttonIcon,
16833
- actions,
16834
- actionsSlot,
16835
- formFields = DEFAULT_FORM_FIELDS15,
16836
- successMessage = "Thank you! Your message has been sent successfully.",
16712
+ image,
16713
+ contactOverlays,
16714
+ contactOverlaysSlot,
16715
+ formEngineSetup,
16716
+ className,
16717
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
16718
+ contentClassName,
16719
+ eyebrowClassName,
16837
16720
  headingClassName,
16838
16721
  descriptionClassName,
16839
- cardClassName,
16840
- cardContentClassName,
16841
- formClassName,
16842
- submitClassName,
16843
- successMessageClassName,
16844
- errorMessageClassName,
16845
- backgroundImage,
16722
+ imageClassName,
16723
+ contactOverlaysClassName,
16846
16724
  background,
16847
- optixFlowConfig,
16848
- spacing = "none",
16849
- className,
16850
- containerClassName = "px-0 sm:px-0 lg:px-0 max-w-full relative z-10 h-screen w-screen flex justify-center items-center",
16851
- contentClassName = "",
16725
+ spacing = "py-16 md:py-32",
16852
16726
  pattern,
16853
- patternOpacity = 0.1,
16854
- formConfig,
16855
- onSubmit,
16856
- onSuccess,
16857
- onError
16727
+ patternOpacity,
16728
+ optixFlowConfig
16858
16729
  }) {
16859
- const {
16860
- uploadTokens,
16861
- uploadProgress,
16862
- isUploading,
16863
- uploadFiles,
16864
- removeFile,
16865
- resetUpload
16866
- } = useFileUpload({ onError });
16867
- const { form, submissionError, formMethod, resetSubmissionState } = useContactForm({
16868
- formFields,
16869
- formConfig,
16870
- onSubmit,
16871
- onSuccess: (data) => {
16872
- resetUpload();
16873
- onSuccess?.(data);
16874
- },
16875
- onError,
16876
- resetOnSuccess: formConfig?.resetOnSuccess !== false,
16877
- uploadTokens
16878
- });
16879
- const actionsContent = useMemo(() => {
16880
- if (actionsSlot) return actionsSlot;
16881
- if (actions && actions.length > 0) {
16882
- return actions.map((action, index) => {
16883
- const {
16884
- label,
16885
- icon,
16886
- iconAfter,
16887
- children,
16888
- className: actionClassName,
16889
- ...pressableProps
16890
- } = action;
16730
+ const formStyleRules = React28.useMemo(() => {
16731
+ return {
16732
+ formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES5.formContainer,
16733
+ fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES5.fieldsContainer,
16734
+ fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES5.fieldClassName,
16735
+ formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES5.formClassName,
16736
+ successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES5.successMessageClassName,
16737
+ errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES5.errorMessageClassName
16738
+ };
16739
+ }, [formEngineSetup?.formLayoutSettings?.styleRules]);
16740
+ const formFields = React28.useMemo(() => {
16741
+ if (formEngineSetup?.fields && formEngineSetup.fields.length > 0) {
16742
+ return formEngineSetup.fields;
16743
+ }
16744
+ return DEFAULT_FORM_FIELDS15;
16745
+ }, [formEngineSetup?.fields]);
16746
+ const contactOverlaysContent = React28.useMemo(() => {
16747
+ if (contactOverlaysSlot) return contactOverlaysSlot;
16748
+ if (!contactOverlays || contactOverlays.length === 0) return null;
16749
+ return /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-3", contactOverlaysClassName), children: contactOverlays.map((item, index) => {
16750
+ const content = /* @__PURE__ */ jsxs(
16751
+ "div",
16752
+ {
16753
+ className: cn(
16754
+ "rounded-2xl border border-white/10 bg-foreground/80 p-4 backdrop-blur-sm",
16755
+ item.className
16756
+ ),
16757
+ children: [
16758
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
16759
+ /* @__PURE__ */ jsx("div", { className: "flex size-fit p-2 items-center justify-center rounded-full bg-primary text-primary-foreground", children: /* @__PURE__ */ jsx(DynamicIcon, { name: item.icon, size: 18 }) }),
16760
+ /* @__PURE__ */ jsxs("div", { children: [
16761
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-bold uppercase tracking-[0.15em] text-background/70", children: item.label }),
16762
+ /* @__PURE__ */ jsx("p", { className: "font-semibold text-background", children: item.title })
16763
+ ] })
16764
+ ] }),
16765
+ item.description && /* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-background/80", children: item.description })
16766
+ ]
16767
+ }
16768
+ );
16769
+ if (item.href) {
16891
16770
  return /* @__PURE__ */ jsx(
16892
- Pressable,
16771
+ "a",
16893
16772
  {
16894
- asButton: true,
16895
- className: actionClassName,
16896
- ...pressableProps,
16897
- children: children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
16898
- icon,
16899
- label,
16900
- iconAfter
16901
- ] })
16773
+ href: item.href,
16774
+ className: "block transition-transform hover:scale-[1.02]",
16775
+ children: content
16902
16776
  },
16903
16777
  index
16904
16778
  );
16905
- });
16906
- }
16907
- return null;
16908
- }, [actionsSlot, actions]);
16909
- const renderBackground = useMemo(() => {
16910
- if (!backgroundImage) return null;
16911
- return /* @__PURE__ */ jsxs("div", { className: "absolute inset-0", children: [
16912
- /* @__PURE__ */ jsx(
16913
- Img,
16914
- {
16915
- src: backgroundImage,
16916
- alt: "Full screen background image",
16917
- className: "h-full w-full object-cover",
16918
- loading: "eager",
16919
- optixFlowConfig
16920
- }
16921
- ),
16922
- /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-linear-to-b from-black/80 via-black/65 to-black/20" })
16923
- ] });
16924
- }, [backgroundImage, optixFlowConfig]);
16925
- return /* @__PURE__ */ jsxs(
16779
+ }
16780
+ return /* @__PURE__ */ jsx("div", { children: content }, index);
16781
+ }) });
16782
+ }, [contactOverlaysSlot, contactOverlays, contactOverlaysClassName]);
16783
+ return /* @__PURE__ */ jsx(
16926
16784
  Section,
16927
16785
  {
16928
16786
  background,
16929
16787
  spacing,
16788
+ className,
16789
+ containerClassName,
16930
16790
  pattern,
16931
16791
  patternOpacity,
16932
- className: cn(
16933
- "relative flex h-full min-h-screen w-screen items-center justify-center overflow-hidden bg-black pb-0 pt-0 md:pt-0 px-0",
16934
- className
16935
- ),
16936
- containerClassName,
16937
- children: [
16938
- renderBackground,
16939
- /* @__PURE__ */ jsx(
16940
- "div",
16941
- {
16942
- className: cn(
16943
- "flex flex-col gap-4 md:gap-6 px-6 pt-28 pb-6 md:pt-0 md:pb-0",
16944
- "relative z-30 m-auto max-w-full md:max-w-md flex-col items-center justify-center text-center",
16945
- contentClassName
16946
- ),
16947
- children: /* @__PURE__ */ jsx(Card, { className: cn("mx-auto max-w-xl", cardClassName), children: /* @__PURE__ */ jsxs(CardContent, { className: cn("p-6 lg:p-8", cardContentClassName), children: [
16948
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
16949
- "h2",
16950
- {
16951
- className: cn(
16952
- "text-5xl md:text-6xl lg:text-7xl text-card-foreground text-shadow-2xl font-semibold",
16953
- headingClassName
16954
- ),
16955
- children: heading
16956
- }
16957
- ) : heading),
16958
- description && (typeof description === "string" ? /* @__PURE__ */ jsx(
16959
- "p",
16960
- {
16961
- className: cn(
16962
- "text-center text-base text-balance text-card-foreground text-shadow-2xl",
16963
- descriptionClassName
16792
+ children: /* @__PURE__ */ jsxs(
16793
+ "div",
16794
+ {
16795
+ className: cn(
16796
+ "grid grid-cols-1 items-center gap-12 lg:grid-cols-2",
16797
+ contentClassName
16798
+ ),
16799
+ children: [
16800
+ image && /* @__PURE__ */ jsx(
16801
+ motion.div,
16802
+ {
16803
+ initial: { opacity: 0, x: -20 },
16804
+ whileInView: { opacity: 1, x: 0 },
16805
+ viewport: { once: true, margin: "-50px" },
16806
+ transition: { duration: 0.5 },
16807
+ className: "order-2 lg:order-1",
16808
+ children: /* @__PURE__ */ jsxs("div", { className: "relative overflow-hidden rounded-3xl border border-white/10 shadow-2xl", children: [
16809
+ /* @__PURE__ */ jsx(
16810
+ Img,
16811
+ {
16812
+ src: image.src,
16813
+ alt: image.alt,
16814
+ className: cn("h-full w-full object-cover", imageClassName),
16815
+ optixFlowConfig
16816
+ }
16964
16817
  ),
16965
- children: description
16966
- }
16967
- ) : description),
16968
- /* @__PURE__ */ jsxs(
16969
- Form,
16970
- {
16971
- form,
16972
- notificationConfig: {
16973
- submissionError,
16974
- successMessage
16975
- },
16976
- styleConfig: {
16977
- formClassName: cn("space-y-4", formClassName),
16978
- successMessageClassName,
16979
- errorMessageClassName
16980
- },
16981
- formConfig: {
16982
- endpoint: formConfig?.endpoint,
16983
- method: formMethod,
16984
- submissionConfig: formConfig?.submissionConfig
16985
- },
16986
- onNewSubmission: () => {
16987
- resetUpload();
16988
- resetSubmissionState();
16989
- },
16990
- children: [
16991
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-12 gap-6", children: formFields.map((field) => /* @__PURE__ */ jsx(
16992
- "div",
16993
- {
16994
- className: getColumnSpanClass(field.columnSpan),
16995
- children: /* @__PURE__ */ jsx(
16996
- DynamicFormField,
16997
- {
16998
- field,
16999
- uploadProgress,
17000
- onFileUpload: uploadFiles,
17001
- onFileRemove: removeFile,
17002
- isUploading
17003
- }
17004
- )
16818
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-linear-to-tr from-black/70 via-transparent to-transparent" }),
16819
+ contactOverlaysContent && /* @__PURE__ */ jsx("div", { className: "absolute bottom-6 left-6 right-6", children: contactOverlaysContent })
16820
+ ] })
16821
+ }
16822
+ ),
16823
+ /* @__PURE__ */ jsxs(
16824
+ motion.div,
16825
+ {
16826
+ initial: { opacity: 0, x: 20 },
16827
+ whileInView: { opacity: 1, x: 0 },
16828
+ viewport: { once: true, margin: "-50px" },
16829
+ transition: { duration: 0.5 },
16830
+ className: "order-1 lg:order-2",
16831
+ children: [
16832
+ eyebrow && (typeof eyebrow === "string" ? /* @__PURE__ */ jsx(
16833
+ "p",
16834
+ {
16835
+ className: cn(
16836
+ "text-sm font-semibold uppercase tracking-[0.2em] text-muted-foreground",
16837
+ eyebrowClassName
16838
+ ),
16839
+ children: eyebrow
16840
+ }
16841
+ ) : /* @__PURE__ */ jsx("div", { className: eyebrowClassName, children: eyebrow })),
16842
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
16843
+ "h2",
16844
+ {
16845
+ className: cn(
16846
+ "mt-2 text-3xl font-bold md:text-4xl lg:text-5xl",
16847
+ headingClassName
16848
+ ),
16849
+ children: heading
16850
+ }
16851
+ ) : /* @__PURE__ */ jsx("div", { className: cn("mt-2", headingClassName), children: heading })),
16852
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
16853
+ "p",
16854
+ {
16855
+ className: cn(
16856
+ "mt-4 text-lg text-muted-foreground",
16857
+ descriptionClassName
16858
+ ),
16859
+ children: description
16860
+ }
16861
+ ) : /* @__PURE__ */ jsx("div", { className: cn("mt-4", descriptionClassName), children: description })),
16862
+ /* @__PURE__ */ jsx("div", { className: "mt-8", children: formEngineSetup ? /* @__PURE__ */ jsx(
16863
+ FormEngine,
16864
+ {
16865
+ ...formEngineSetup,
16866
+ formLayoutSettings: {
16867
+ ...formEngineSetup.formLayoutSettings,
16868
+ formLayout: "standard",
16869
+ submitButtonSetup: {
16870
+ ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
16871
+ submitLabel: /* @__PURE__ */ jsxs(Fragment$1, { children: [
16872
+ buttonIcon,
16873
+ buttonText
16874
+ ] })
16875
+ },
16876
+ styleRules: formStyleRules
17005
16877
  },
17006
- field.name
17007
- )) }),
17008
- actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxs(
17009
- Pressable,
17010
- {
17011
- componentType: "button",
17012
- type: "submit",
17013
- className: cn("w-full", submitClassName),
17014
- size: "lg",
17015
- asButton: true,
17016
- disabled: form.isSubmitting,
17017
- children: [
17018
- buttonIcon,
17019
- buttonText
17020
- ]
17021
- }
17022
- )
17023
- ]
17024
- }
17025
- )
17026
- ] }) })
17027
- }
17028
- )
17029
- ]
16878
+ fields: formFields
16879
+ }
16880
+ ) : null })
16881
+ ]
16882
+ }
16883
+ )
16884
+ ]
16885
+ }
16886
+ )
17030
16887
  }
17031
16888
  );
17032
16889
  }
@@ -21807,7 +21664,7 @@ function ContactTenant({
21807
21664
  }
21808
21665
  );
21809
21666
  }
21810
- var DEFAULT_STYLE_RULES2 = {
21667
+ var DEFAULT_STYLE_RULES6 = {
21811
21668
  formContainer: "",
21812
21669
  fieldsContainer: "",
21813
21670
  fieldClassName: "",
@@ -21872,17 +21729,17 @@ function ContactVendor({
21872
21729
  pattern,
21873
21730
  patternOpacity = 0.1
21874
21731
  }) {
21875
- const formStyleRules = React25.useMemo(() => {
21732
+ const formStyleRules = React28.useMemo(() => {
21876
21733
  return {
21877
- formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES2.formContainer,
21878
- fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES2.fieldsContainer,
21879
- fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES2.fieldClassName,
21880
- formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES2.formClassName,
21881
- successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES2.successMessageClassName,
21882
- errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES2.errorMessageClassName
21734
+ formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES6.formContainer,
21735
+ fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES6.fieldsContainer,
21736
+ fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES6.fieldClassName,
21737
+ formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES6.formClassName,
21738
+ successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES6.successMessageClassName,
21739
+ errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES6.errorMessageClassName
21883
21740
  };
21884
21741
  }, [formEngineSetup?.formLayoutSettings?.styleRules]);
21885
- const formFields = React25.useMemo(() => {
21742
+ const formFields = React28.useMemo(() => {
21886
21743
  if (formEngineSetup && formEngineSetup?.fields && formEngineSetup?.fields?.length > 0) {
21887
21744
  return formEngineSetup.fields;
21888
21745
  } else {
@@ -22698,16 +22555,16 @@ function CarouselAnimatedSections({
22698
22555
  pattern = "diagonalCrossBasic",
22699
22556
  patternOpacity = 0.033
22700
22557
  }) {
22701
- const [currentIndex, setCurrentIndex] = React25.useState(0);
22702
- const [direction, setDirection] = React25.useState(0);
22703
- const [isAnimating, setIsAnimating] = React25.useState(false);
22704
- const goToNext = React25.useCallback(() => {
22558
+ const [currentIndex, setCurrentIndex] = React28.useState(0);
22559
+ const [direction, setDirection] = React28.useState(0);
22560
+ const [isAnimating, setIsAnimating] = React28.useState(false);
22561
+ const goToNext = React28.useCallback(() => {
22705
22562
  if (isAnimating || currentIndex >= (sections?.length ?? 0) - 1) return;
22706
22563
  setIsAnimating(true);
22707
22564
  setDirection(1);
22708
22565
  setCurrentIndex((prev) => prev + 1);
22709
22566
  }, [currentIndex, isAnimating, sections?.length]);
22710
- const goToPrev = React25.useCallback(() => {
22567
+ const goToPrev = React28.useCallback(() => {
22711
22568
  if (isAnimating || currentIndex <= 0) return;
22712
22569
  setIsAnimating(true);
22713
22570
  setDirection(-1);
@@ -22719,7 +22576,7 @@ function CarouselAnimatedSections({
22719
22576
  setDirection(index > currentIndex ? 1 : -1);
22720
22577
  setCurrentIndex(index);
22721
22578
  };
22722
- React25.useEffect(() => {
22579
+ React28.useEffect(() => {
22723
22580
  const handleKeyDown = (e) => {
22724
22581
  if (e.key === "ArrowDown" || e.key === "ArrowRight") {
22725
22582
  goToNext();
@@ -22745,7 +22602,7 @@ function CarouselAnimatedSections({
22745
22602
  })
22746
22603
  };
22747
22604
  const currentSection = sections?.[currentIndex];
22748
- const actionElements = React25.useMemo(() => {
22605
+ const actionElements = React28.useMemo(() => {
22749
22606
  if (actionsSlot) return actionsSlot;
22750
22607
  if (actions && actions.length > 0) {
22751
22608
  return actions.map((action, index) => /* @__PURE__ */ jsxs(
@@ -22993,11 +22850,11 @@ function CarouselAutoProgressSlides({
22993
22850
  pattern,
22994
22851
  patternOpacity
22995
22852
  }) {
22996
- const [currentIndex, setCurrentIndex] = React25.useState(0);
22853
+ const [currentIndex, setCurrentIndex] = React28.useState(0);
22997
22854
  const progress = useMotionValue(100);
22998
- const [direction, setDirection] = React25.useState(1);
22855
+ const [direction, setDirection] = React28.useState(1);
22999
22856
  const clipPath = useMotionTemplate`inset(0 ${progress}% 0 0 round 10px)`;
23000
- React25.useEffect(() => {
22857
+ React28.useEffect(() => {
23001
22858
  const interval = setInterval(() => {
23002
22859
  const currentProgress = progress.get();
23003
22860
  if (currentProgress > 0) {
@@ -23176,22 +23033,22 @@ function CarouselAutoProgressSlides({
23176
23033
  );
23177
23034
  }
23178
23035
  function useDotButton(emblaApi) {
23179
- const [selectedIndex, setSelectedIndex] = React25.useState(0);
23180
- const [scrollSnaps, setScrollSnaps] = React25.useState([]);
23181
- const onDotButtonClick = React25.useCallback(
23036
+ const [selectedIndex, setSelectedIndex] = React28.useState(0);
23037
+ const [scrollSnaps, setScrollSnaps] = React28.useState([]);
23038
+ const onDotButtonClick = React28.useCallback(
23182
23039
  (index) => {
23183
23040
  if (!emblaApi) return;
23184
23041
  emblaApi.scrollTo(index);
23185
23042
  },
23186
23043
  [emblaApi]
23187
23044
  );
23188
- const onInit = React25.useCallback((api) => {
23045
+ const onInit = React28.useCallback((api) => {
23189
23046
  setScrollSnaps(api.scrollSnapList());
23190
23047
  }, []);
23191
- const onSelect = React25.useCallback((api) => {
23048
+ const onSelect = React28.useCallback((api) => {
23192
23049
  setSelectedIndex(api.selectedScrollSnap());
23193
23050
  }, []);
23194
- React25.useEffect(() => {
23051
+ React28.useEffect(() => {
23195
23052
  if (!emblaApi) return;
23196
23053
  onInit(emblaApi);
23197
23054
  onSelect(emblaApi);
@@ -23200,8 +23057,8 @@ function useDotButton(emblaApi) {
23200
23057
  return { selectedIndex, scrollSnaps, onDotButtonClick };
23201
23058
  }
23202
23059
  function useAutoplay(emblaApi) {
23203
- const [autoplayIsPlaying, setAutoplayIsPlaying] = React25.useState(false);
23204
- const onAutoplayButtonClick = React25.useCallback(
23060
+ const [autoplayIsPlaying, setAutoplayIsPlaying] = React28.useState(false);
23061
+ const onAutoplayButtonClick = React28.useCallback(
23205
23062
  (callback) => {
23206
23063
  const autoplay = emblaApi?.plugins()?.autoplay;
23207
23064
  if (!autoplay) return;
@@ -23211,13 +23068,13 @@ function useAutoplay(emblaApi) {
23211
23068
  },
23212
23069
  [emblaApi]
23213
23070
  );
23214
- const toggleAutoplay = React25.useCallback(() => {
23071
+ const toggleAutoplay = React28.useCallback(() => {
23215
23072
  const autoplay = emblaApi?.plugins()?.autoplay;
23216
23073
  if (!autoplay) return;
23217
23074
  const playOrStop = autoplay.isPlaying() ? autoplay.stop : autoplay.play;
23218
23075
  playOrStop();
23219
23076
  }, [emblaApi]);
23220
- React25.useEffect(() => {
23077
+ React28.useEffect(() => {
23221
23078
  const autoplay = emblaApi?.plugins()?.autoplay;
23222
23079
  if (!autoplay) return;
23223
23080
  setAutoplayIsPlaying(autoplay.isPlaying());
@@ -23226,11 +23083,11 @@ function useAutoplay(emblaApi) {
23226
23083
  return { autoplayIsPlaying, toggleAutoplay, onAutoplayButtonClick };
23227
23084
  }
23228
23085
  function useAutoplayProgress(emblaApi, progressNode) {
23229
- const [showAutoplayProgress, setShowAutoplayProgress] = React25.useState(false);
23230
- const animationName = React25.useRef("");
23231
- const timeoutId = React25.useRef(0);
23232
- const rafId = React25.useRef(0);
23233
- const startProgress = React25.useCallback(
23086
+ const [showAutoplayProgress, setShowAutoplayProgress] = React28.useState(false);
23087
+ const animationName = React28.useRef("");
23088
+ const timeoutId = React28.useRef(0);
23089
+ const rafId = React28.useRef(0);
23090
+ const startProgress = React28.useCallback(
23234
23091
  (timeUntilNext) => {
23235
23092
  const node = progressNode.current;
23236
23093
  if (!node || timeUntilNext === null) return;
@@ -23250,12 +23107,12 @@ function useAutoplayProgress(emblaApi, progressNode) {
23250
23107
  },
23251
23108
  [progressNode]
23252
23109
  );
23253
- React25.useEffect(() => {
23110
+ React28.useEffect(() => {
23254
23111
  const autoplay = emblaApi?.plugins()?.autoplay;
23255
23112
  if (!autoplay) return;
23256
23113
  emblaApi.on("autoplay:timerset", () => startProgress(autoplay.timeUntilNext())).on("autoplay:timerstopped", () => setShowAutoplayProgress(false));
23257
23114
  }, [emblaApi, startProgress]);
23258
- React25.useEffect(() => {
23115
+ React28.useEffect(() => {
23259
23116
  return () => {
23260
23117
  cancelAnimationFrame(rafId.current);
23261
23118
  clearTimeout(timeoutId.current);
@@ -23282,7 +23139,7 @@ function CarouselAutoplayProgress({
23282
23139
  pattern,
23283
23140
  patternOpacity
23284
23141
  }) {
23285
- const progressNode = React25.useRef(null);
23142
+ const progressNode = React28.useRef(null);
23286
23143
  const [emblaRef, emblaApi] = useEmblaCarousel(options, [
23287
23144
  Autoplay({ playOnInit: true, delay: autoplayDelay })
23288
23145
  ]);
@@ -23405,20 +23262,20 @@ function CarouselFeatureBadge({
23405
23262
  containerMaxWidth = "2xl"
23406
23263
  }) {
23407
23264
  const [emblaRef, emblaApi] = useEmblaCarousel();
23408
- const [canScrollPrev, setCanScrollPrev] = React25.useState(false);
23409
- const [canScrollNext, setCanScrollNext] = React25.useState(false);
23410
- const scrollPrev = React25.useCallback(() => {
23265
+ const [canScrollPrev, setCanScrollPrev] = React28.useState(false);
23266
+ const [canScrollNext, setCanScrollNext] = React28.useState(false);
23267
+ const scrollPrev = React28.useCallback(() => {
23411
23268
  emblaApi?.scrollPrev();
23412
23269
  }, [emblaApi]);
23413
- const scrollNext = React25.useCallback(() => {
23270
+ const scrollNext = React28.useCallback(() => {
23414
23271
  emblaApi?.scrollNext();
23415
23272
  }, [emblaApi]);
23416
- const onSelect = React25.useCallback(() => {
23273
+ const onSelect = React28.useCallback(() => {
23417
23274
  if (!emblaApi) return;
23418
23275
  setCanScrollPrev(emblaApi.canScrollPrev());
23419
23276
  setCanScrollNext(emblaApi.canScrollNext());
23420
23277
  }, [emblaApi]);
23421
- React25.useEffect(() => {
23278
+ React28.useEffect(() => {
23422
23279
  if (!emblaApi) return;
23423
23280
  onSelect();
23424
23281
  emblaApi.on("reInit", onSelect);
@@ -23538,10 +23395,10 @@ function CarouselFullscreenScrollFx({
23538
23395
  pattern = "diagonalCrossBasic",
23539
23396
  patternOpacity = 0.033
23540
23397
  }) {
23541
- const containerRef = React25.useRef(null);
23542
- const scrollContainerRef = React25.useRef(null);
23543
- const [activeIndex, setActiveIndex] = React25.useState(0);
23544
- React25.useEffect(() => {
23398
+ const containerRef = React28.useRef(null);
23399
+ const scrollContainerRef = React28.useRef(null);
23400
+ const [activeIndex, setActiveIndex] = React28.useState(0);
23401
+ React28.useEffect(() => {
23545
23402
  const scrollContainer = scrollContainerRef.current;
23546
23403
  if (!scrollContainer || !slides?.length) return;
23547
23404
  const handleScroll = () => {
@@ -23553,7 +23410,7 @@ function CarouselFullscreenScrollFx({
23553
23410
  scrollContainer.addEventListener("scroll", handleScroll);
23554
23411
  return () => scrollContainer.removeEventListener("scroll", handleScroll);
23555
23412
  }, [slides]);
23556
- const scrollToSlide = React25.useCallback((index) => {
23413
+ const scrollToSlide = React28.useCallback((index) => {
23557
23414
  const scrollContainer = scrollContainerRef.current;
23558
23415
  if (!scrollContainer) return;
23559
23416
  const slideHeight = scrollContainer.clientHeight;
@@ -23636,7 +23493,7 @@ function CarouselFullscreenScrollFx({
23636
23493
  className: "flex h-screen flex-col snap-y snap-mandatory overflow-x-hidden overflow-y-auto scroll-smooth",
23637
23494
  style: { scrollbarWidth: "none", msOverflowStyle: "none" },
23638
23495
  children: slidesSlot ? slidesSlot : slides?.map((slide, index) => {
23639
- const renderActions = React25.useMemo(() => {
23496
+ const renderActions = React28.useMemo(() => {
23640
23497
  if (!slide.actions || slide.actions.length === 0) return null;
23641
23498
  return slide.actions.map((action, actionIndex) => {
23642
23499
  const {
@@ -23769,25 +23626,25 @@ function CarouselGalleryThumbnails({
23769
23626
  patternOpacity,
23770
23627
  slideMediaBrightness = "100"
23771
23628
  }) {
23772
- const [currentIndex, setCurrentIndex] = React25.useState(0);
23773
- const prevSlide = React25.useCallback(() => {
23629
+ const [currentIndex, setCurrentIndex] = React28.useState(0);
23630
+ const prevSlide = React28.useCallback(() => {
23774
23631
  setCurrentIndex(
23775
23632
  (prev) => prev === 0 ? (images?.length ?? 0) - 1 : prev - 1
23776
23633
  );
23777
23634
  }, [images?.length]);
23778
- const nextSlide = React25.useCallback(() => {
23635
+ const nextSlide = React28.useCallback(() => {
23779
23636
  setCurrentIndex(
23780
23637
  (prev) => prev === (images?.length ?? 0) - 1 ? 0 : prev + 1
23781
23638
  );
23782
23639
  }, [images?.length]);
23783
- React25.useEffect(() => {
23640
+ React28.useEffect(() => {
23784
23641
  if (!autoPlay) return;
23785
23642
  const interval = setInterval(() => {
23786
23643
  nextSlide();
23787
23644
  }, autoPlayInterval);
23788
23645
  return () => clearInterval(interval);
23789
23646
  }, [currentIndex, autoPlay, autoPlayInterval, nextSlide]);
23790
- React25.useEffect(() => {
23647
+ React28.useEffect(() => {
23791
23648
  const handleKeyDown = (e) => {
23792
23649
  if (e.key === "ArrowRight") {
23793
23650
  nextSlide();
@@ -23932,9 +23789,9 @@ function CarouselHorizontalCards({
23932
23789
  pattern,
23933
23790
  patternOpacity
23934
23791
  }) {
23935
- const carouselRef = React25.useRef(null);
23936
- const [isAtStart, setIsAtStart] = React25.useState(true);
23937
- const [isAtEnd, setIsAtEnd] = React25.useState(false);
23792
+ const carouselRef = React28.useRef(null);
23793
+ const [isAtStart, setIsAtStart] = React28.useState(true);
23794
+ const [isAtEnd, setIsAtEnd] = React28.useState(false);
23938
23795
  const scrollLeft = () => {
23939
23796
  if (carouselRef.current) {
23940
23797
  carouselRef.current.scrollBy({ left: -300, behavior: "smooth" });
@@ -23945,7 +23802,7 @@ function CarouselHorizontalCards({
23945
23802
  carouselRef.current.scrollBy({ left: 300, behavior: "smooth" });
23946
23803
  }
23947
23804
  };
23948
- React25.useEffect(() => {
23805
+ React28.useEffect(() => {
23949
23806
  const checkScrollPosition = () => {
23950
23807
  if (carouselRef.current) {
23951
23808
  const { scrollLeft: scrollLeft2, scrollWidth, clientWidth } = carouselRef.current;
@@ -24145,13 +24002,13 @@ function CarouselImageHero({
24145
24002
  pattern,
24146
24003
  patternOpacity
24147
24004
  }) {
24148
- const hasImages = React25.useMemo(() => {
24005
+ const hasImages = React28.useMemo(() => {
24149
24006
  return images && images?.length > 0;
24150
24007
  }, [images]);
24151
- const [currentImageIndex, setCurrentImageIndex] = React25.useState(0);
24008
+ const [currentImageIndex, setCurrentImageIndex] = React28.useState(0);
24152
24009
  const progress = useMotionValue(100);
24153
24010
  const clipPath = useMotionTemplate`inset(0 ${progress}% 0 0 round 10px)`;
24154
- React25.useEffect(() => {
24011
+ React28.useEffect(() => {
24155
24012
  if (!hasImages || (images?.length ?? 0) < 2) return;
24156
24013
  const tickInterval = autoPlayInterval / 100;
24157
24014
  const interval = setInterval(() => {
@@ -24173,19 +24030,19 @@ function CarouselImageHero({
24173
24030
  autoPlayInterval,
24174
24031
  hasImages
24175
24032
  ]);
24176
- const handlePrev = React25.useCallback(() => {
24033
+ const handlePrev = React28.useCallback(() => {
24177
24034
  progress.set(100);
24178
24035
  setCurrentImageIndex(
24179
24036
  (prevIndex) => prevIndex > 0 ? prevIndex - 1 : (images?.length ?? 1) - 1
24180
24037
  );
24181
24038
  }, [images?.length, progress]);
24182
- const handleNext = React25.useCallback(() => {
24039
+ const handleNext = React28.useCallback(() => {
24183
24040
  progress.set(100);
24184
24041
  setCurrentImageIndex(
24185
24042
  (prevIndex) => prevIndex < (images?.length ?? 0) - 1 ? prevIndex + 1 : 0
24186
24043
  );
24187
24044
  }, [images?.length, progress]);
24188
- const handleDotClick = React25.useCallback(
24045
+ const handleDotClick = React28.useCallback(
24189
24046
  (index) => {
24190
24047
  progress.set(100);
24191
24048
  setCurrentImageIndex(index);
@@ -24362,8 +24219,8 @@ function CarouselMultiStepShowcase({
24362
24219
  pattern,
24363
24220
  patternOpacity
24364
24221
  }) {
24365
- const [activeStep, setActiveStep] = React25.useState(0);
24366
- const [direction, setDirection] = React25.useState(0);
24222
+ const [activeStep, setActiveStep] = React28.useState(0);
24223
+ const [direction, setDirection] = React28.useState(0);
24367
24224
  const goToStep = (index) => {
24368
24225
  setDirection(index > activeStep ? 1 : -1);
24369
24226
  setActiveStep(index);
@@ -24655,9 +24512,9 @@ function CarouselPortfolioHero({
24655
24512
  patternOpacity,
24656
24513
  slideMediaBrightness = "50"
24657
24514
  }) {
24658
- const [currentIndex, setCurrentIndex] = React25.useState(0);
24659
- const intervalRef = React25.useRef(null);
24660
- const resetInterval = React25.useCallback(() => {
24515
+ const [currentIndex, setCurrentIndex] = React28.useState(0);
24516
+ const intervalRef = React28.useRef(null);
24517
+ const resetInterval = React28.useCallback(() => {
24661
24518
  if (intervalRef.current) {
24662
24519
  clearInterval(intervalRef.current);
24663
24520
  }
@@ -24665,17 +24522,17 @@ function CarouselPortfolioHero({
24665
24522
  setCurrentIndex((prevIndex) => (prevIndex + 1) % (slides?.length ?? 1));
24666
24523
  }, autoPlayInterval);
24667
24524
  }, [autoPlayInterval, slides?.length]);
24668
- const goToNext = React25.useCallback(() => {
24525
+ const goToNext = React28.useCallback(() => {
24669
24526
  setCurrentIndex((prevIndex) => (prevIndex + 1) % (slides?.length ?? 1));
24670
24527
  resetInterval();
24671
24528
  }, [slides?.length, resetInterval]);
24672
- const goToPrev = React25.useCallback(() => {
24529
+ const goToPrev = React28.useCallback(() => {
24673
24530
  setCurrentIndex(
24674
24531
  (prevIndex) => (prevIndex - 1 + (slides?.length ?? 1)) % (slides?.length ?? 1)
24675
24532
  );
24676
24533
  resetInterval();
24677
24534
  }, [slides?.length, resetInterval]);
24678
- React25.useEffect(() => {
24535
+ React28.useEffect(() => {
24679
24536
  resetInterval();
24680
24537
  return () => {
24681
24538
  if (intervalRef.current) {
@@ -24867,9 +24724,9 @@ function CarouselProductFeatureShowcase({
24867
24724
  pattern,
24868
24725
  patternOpacity
24869
24726
  }) {
24870
- const [activeIndex, setActiveIndex] = React25.useState(0);
24871
- const [activeColorIndex, setActiveColorIndex] = React25.useState(0);
24872
- const [direction, setDirection] = React25.useState(0);
24727
+ const [activeIndex, setActiveIndex] = React28.useState(0);
24728
+ const [activeColorIndex, setActiveColorIndex] = React28.useState(0);
24729
+ const [direction, setDirection] = React28.useState(0);
24873
24730
  const activeFeature = features?.[activeIndex];
24874
24731
  const goToNext = () => {
24875
24732
  setDirection(1);
@@ -25089,9 +24946,9 @@ function CarouselProductFeatureShowcase({
25089
24946
  }
25090
24947
  );
25091
24948
  }
25092
- var ProgressSliderContext = React25.createContext(void 0);
24949
+ var ProgressSliderContext = React28.createContext(void 0);
25093
24950
  function useProgressSliderContext() {
25094
- const context = React25.useContext(ProgressSliderContext);
24951
+ const context = React28.useContext(ProgressSliderContext);
25095
24952
  if (!context) {
25096
24953
  throw new Error(
25097
24954
  "useProgressSliderContext must be used within a ProgressSlider"
@@ -25177,19 +25034,19 @@ function CarouselProgressSlider({
25177
25034
  pattern,
25178
25035
  patternOpacity
25179
25036
  }) {
25180
- const [active, setActive] = React25.useState(slides?.[0]?.id ?? "");
25181
- const [progress, setProgress] = React25.useState(0);
25182
- const [isFastForward, setIsFastForward] = React25.useState(false);
25183
- const [isPaused, setIsPaused] = React25.useState(false);
25184
- const frame = React25.useRef(0);
25185
- const firstFrameTime = React25.useRef(performance.now());
25186
- const targetValue = React25.useRef(null);
25187
- const pausedProgress = React25.useRef(0);
25188
- const sliderValues = React25.useMemo(
25037
+ const [active, setActive] = React28.useState(slides?.[0]?.id ?? "");
25038
+ const [progress, setProgress] = React28.useState(0);
25039
+ const [isFastForward, setIsFastForward] = React28.useState(false);
25040
+ const [isPaused, setIsPaused] = React28.useState(false);
25041
+ const frame = React28.useRef(0);
25042
+ const firstFrameTime = React28.useRef(performance.now());
25043
+ const targetValue = React28.useRef(null);
25044
+ const pausedProgress = React28.useRef(0);
25045
+ const sliderValues = React28.useMemo(
25189
25046
  () => slides?.map((slide) => slide.id),
25190
25047
  [slides]
25191
25048
  );
25192
- React25.useEffect(() => {
25049
+ React28.useEffect(() => {
25193
25050
  if ((sliderValues?.length ?? 0) > 0 && !isPaused) {
25194
25051
  firstFrameTime.current = performance.now();
25195
25052
  if (pausedProgress.current > 0) {
@@ -25354,11 +25211,11 @@ function CarouselScrollingFeatureShowcase({
25354
25211
  pattern,
25355
25212
  patternOpacity
25356
25213
  }) {
25357
- const [activeFeature, setActiveFeature] = React25.useState(
25214
+ const [activeFeature, setActiveFeature] = React28.useState(
25358
25215
  features?.[0]?.id ?? ""
25359
25216
  );
25360
- const featureRefs = React25.useRef(/* @__PURE__ */ new Map());
25361
- React25.useEffect(() => {
25217
+ const featureRefs = React28.useRef(/* @__PURE__ */ new Map());
25218
+ React28.useEffect(() => {
25362
25219
  if (!features || features.length === 0) return;
25363
25220
  const observerOptions = {
25364
25221
  root: null,
@@ -26283,9 +26140,9 @@ function FeatureChecklistImage({
26283
26140
  }
26284
26141
  );
26285
26142
  }
26286
- var CarouselContext = React25.createContext(null);
26143
+ var CarouselContext = React28.createContext(null);
26287
26144
  function useCarousel() {
26288
- const context = React25.useContext(CarouselContext);
26145
+ const context = React28.useContext(CarouselContext);
26289
26146
  if (!context) {
26290
26147
  throw new Error("useCarousel must be used within a <Carousel />");
26291
26148
  }
@@ -26307,20 +26164,20 @@ function Carousel({
26307
26164
  },
26308
26165
  plugins
26309
26166
  );
26310
- const [canScrollPrev, setCanScrollPrev] = React25.useState(false);
26311
- const [canScrollNext, setCanScrollNext] = React25.useState(false);
26312
- const onSelect = React25.useCallback((api2) => {
26167
+ const [canScrollPrev, setCanScrollPrev] = React28.useState(false);
26168
+ const [canScrollNext, setCanScrollNext] = React28.useState(false);
26169
+ const onSelect = React28.useCallback((api2) => {
26313
26170
  if (!api2) return;
26314
26171
  setCanScrollPrev(api2.canScrollPrev());
26315
26172
  setCanScrollNext(api2.canScrollNext());
26316
26173
  }, []);
26317
- const scrollPrev = React25.useCallback(() => {
26174
+ const scrollPrev = React28.useCallback(() => {
26318
26175
  api?.scrollPrev();
26319
26176
  }, [api]);
26320
- const scrollNext = React25.useCallback(() => {
26177
+ const scrollNext = React28.useCallback(() => {
26321
26178
  api?.scrollNext();
26322
26179
  }, [api]);
26323
- const handleKeyDown = React25.useCallback(
26180
+ const handleKeyDown = React28.useCallback(
26324
26181
  (event) => {
26325
26182
  if (event.key === "ArrowLeft") {
26326
26183
  event.preventDefault();
@@ -26332,11 +26189,11 @@ function Carousel({
26332
26189
  },
26333
26190
  [scrollPrev, scrollNext]
26334
26191
  );
26335
- React25.useEffect(() => {
26192
+ React28.useEffect(() => {
26336
26193
  if (!api || !setApi) return;
26337
26194
  setApi(api);
26338
26195
  }, [api, setApi]);
26339
- React25.useEffect(() => {
26196
+ React28.useEffect(() => {
26340
26197
  if (!api) return;
26341
26198
  onSelect(api);
26342
26199
  api.on("reInit", onSelect);
@@ -27260,7 +27117,7 @@ function FeatureThreeColumnValues({
27260
27117
  patternOpacity,
27261
27118
  patternClassName
27262
27119
  }) {
27263
- const renderValueIcon = React25.useCallback(
27120
+ const renderValueIcon = React28.useCallback(
27264
27121
  (value) => {
27265
27122
  if (value.icon) return value.icon;
27266
27123
  if (value.iconName)
@@ -27762,7 +27619,7 @@ function FeatureTabbedContentImage({
27762
27619
  patternOpacity,
27763
27620
  patternClassName
27764
27621
  }) {
27765
- const renderFeatures = React25.useCallback(
27622
+ const renderFeatures = React28.useCallback(
27766
27623
  (slide) => {
27767
27624
  if (slide.featuresSlot) return slide.featuresSlot;
27768
27625
  if (!slide.features || slide.features.length === 0) return null;
@@ -27786,7 +27643,7 @@ function FeatureTabbedContentImage({
27786
27643
  },
27787
27644
  []
27788
27645
  );
27789
- const renderActions = React25.useCallback(
27646
+ const renderActions = React28.useCallback(
27790
27647
  (slide) => {
27791
27648
  if (slide.actionsSlot) return slide.actionsSlot;
27792
27649
  if (!slide.actions || slide.actions.length === 0) return null;
@@ -27829,7 +27686,7 @@ function FeatureTabbedContentImage({
27829
27686
  },
27830
27687
  []
27831
27688
  );
27832
- const renderImage = React25.useCallback(
27689
+ const renderImage = React28.useCallback(
27833
27690
  (slide) => {
27834
27691
  if (slide.imageSlot) return slide.imageSlot;
27835
27692
  if (!slide.image) return null;
@@ -28065,7 +27922,7 @@ function FeatureUtilityCardsGrid({
28065
27922
  }
28066
27923
  );
28067
27924
  }, [learnMoreSlot, learnMoreAction, background]);
28068
- const renderUtilityImage = React25.useCallback(
27925
+ const renderUtilityImage = React28.useCallback(
28069
27926
  (utility) => {
28070
27927
  if (utility.imageSlot) return utility.imageSlot;
28071
27928
  if (utility.image) {
@@ -28243,7 +28100,7 @@ function FeatureBentoUtilities({
28243
28100
  patternOpacity,
28244
28101
  patternClassName
28245
28102
  }) {
28246
- const renderCard = React25.useCallback(
28103
+ const renderCard = React28.useCallback(
28247
28104
  (card, index) => {
28248
28105
  const hasImage = card.imageSrc || card.imageSlot;
28249
28106
  const cardClasses = cn(
@@ -28299,7 +28156,7 @@ function FeatureBentoUtilities({
28299
28156
  },
28300
28157
  [optixFlowConfig]
28301
28158
  );
28302
- const renderColumn = React25.useCallback(
28159
+ const renderColumn = React28.useCallback(
28303
28160
  (cards, slot) => {
28304
28161
  if (slot) return slot;
28305
28162
  if (!cards || cards.length === 0) return null;
@@ -29545,7 +29402,7 @@ function FeatureBentoImageGrid({
29545
29402
  patternOpacity,
29546
29403
  patternClassName
29547
29404
  }) {
29548
- const renderItemIcon = React25.useCallback(
29405
+ const renderItemIcon = React28.useCallback(
29549
29406
  (item) => {
29550
29407
  if (item.icon) return item.icon;
29551
29408
  if (item.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: item.iconName, size: 24 });
@@ -29553,7 +29410,7 @@ function FeatureBentoImageGrid({
29553
29410
  },
29554
29411
  []
29555
29412
  );
29556
- const renderItemImage = React25.useCallback(
29413
+ const renderItemImage = React28.useCallback(
29557
29414
  (item, imageClassName) => {
29558
29415
  if (item.imageSlot) return item.imageSlot;
29559
29416
  if (item.imageSrc) {
@@ -29572,7 +29429,7 @@ function FeatureBentoImageGrid({
29572
29429
  },
29573
29430
  [optixFlowConfig]
29574
29431
  );
29575
- const renderLargeCard = React25.useCallback(
29432
+ const renderLargeCard = React28.useCallback(
29576
29433
  (item) => {
29577
29434
  const iconContent = renderItemIcon(item);
29578
29435
  const hasIconBadgeContent = iconContent || item.iconBadge;
@@ -29660,7 +29517,7 @@ function FeatureBentoImageGrid({
29660
29517
  },
29661
29518
  [largeCardClassName, renderItemImage, renderItemIcon]
29662
29519
  );
29663
- const renderSmallCard = React25.useCallback(
29520
+ const renderSmallCard = React28.useCallback(
29664
29521
  (item, index) => {
29665
29522
  const iconContent = renderItemIcon(item);
29666
29523
  const hasIconBadgeContent = iconContent || item.iconBadge;
@@ -30275,7 +30132,7 @@ function FeatureAccordionImage({
30275
30132
  patternOpacity,
30276
30133
  patternClassName
30277
30134
  }) {
30278
- const [activeItem, setActiveItem] = React25.useState(defaultValue || "item-0");
30135
+ const [activeItem, setActiveItem] = React28.useState(defaultValue || "item-0");
30279
30136
  const activeIndex = parseInt(activeItem.replace("item-", ""), 10) || 0;
30280
30137
  const currentImage = items?.[activeIndex] || items?.[0];
30281
30138
  const accordionItemsContent = useMemo(() => {
@@ -30424,7 +30281,7 @@ function FeatureCapabilitiesGrid({
30424
30281
  patternOpacity,
30425
30282
  patternClassName
30426
30283
  }) {
30427
- const renderItemIcon = React25.useCallback(
30284
+ const renderItemIcon = React28.useCallback(
30428
30285
  (item) => {
30429
30286
  if (item.icon) return item.icon;
30430
30287
  if (item.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: item.iconName, size: 20 });
@@ -30576,7 +30433,7 @@ function FeatureCapabilitiesGrid({
30576
30433
  }
30577
30434
  );
30578
30435
  }
30579
- var TeamMemberBackgroundImageCard = React25.forwardRef(
30436
+ var TeamMemberBackgroundImageCard = React28.forwardRef(
30580
30437
  ({ className, imageUrl, imageAlt, children, optixFlowConfig, background, ...props }, ref) => {
30581
30438
  return /* @__PURE__ */ jsxs(
30582
30439
  "div",
@@ -30624,7 +30481,7 @@ function TeamMediaShowcase({
30624
30481
  actionClassName,
30625
30482
  optixFlowConfig
30626
30483
  }) {
30627
- const renderItems = React25.useMemo(() => {
30484
+ const renderItems = React28.useMemo(() => {
30628
30485
  if (itemsSlot) return itemsSlot;
30629
30486
  return items.map((member, idx) => {
30630
30487
  const imageAlt = member.imageAlt || (member.name && typeof member.name === "string" && member.name.trim() !== "" ? member.name : `member-${idx}`);
@@ -30722,7 +30579,7 @@ function TeamSimpleGrid({
30722
30579
  memberNameClassName,
30723
30580
  memberRoleClassName
30724
30581
  }) {
30725
- const renderMembers = React25.useMemo(() => {
30582
+ const renderMembers = React28.useMemo(() => {
30726
30583
  if (membersSlot) return membersSlot;
30727
30584
  if (!members || members.length === 0) return null;
30728
30585
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -30884,7 +30741,7 @@ function FooterBrandLinksContact({
30884
30741
  linkListClassName,
30885
30742
  linkItemClassName
30886
30743
  ]);
30887
- const contactItemsContent = React25.useMemo(() => {
30744
+ const contactItemsContent = React28.useMemo(() => {
30888
30745
  if (!contactItems || contactItems.length === 0) return null;
30889
30746
  return contactItems.map((item, idx) => /* @__PURE__ */ jsxs(
30890
30747
  "div",
@@ -31242,7 +31099,7 @@ function TeamSocialGrid({
31242
31099
  memberRoleClassName,
31243
31100
  socialLinksClassName
31244
31101
  }) {
31245
- const renderMembers = React25.useMemo(() => {
31102
+ const renderMembers = React28.useMemo(() => {
31246
31103
  if (membersSlot) return membersSlot;
31247
31104
  if (!members || members.length === 0) return null;
31248
31105
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -31264,61 +31121,49 @@ function TeamSocialGrid({
31264
31121
  }
31265
31122
  ),
31266
31123
  /* @__PURE__ */ jsx("p", { className: cn("text-center font-medium", memberNameClassName), children: member.name }),
31267
- /* @__PURE__ */ jsx(
31268
- "p",
31269
- {
31270
- className: cn(
31271
- "text-center",
31272
- getTextColor(background, "muted"),
31273
- memberRoleClassName
31274
- ),
31275
- children: member.role
31276
- }
31277
- ),
31278
- member.social && /* @__PURE__ */ jsxs(
31279
- "div",
31280
- {
31281
- className: cn(
31282
- "mt-2 flex gap-2",
31283
- getTextColor(background, "muted"),
31284
- socialLinksClassName
31285
- ),
31286
- children: [
31287
- member.social.github && /* @__PURE__ */ jsx(
31288
- Pressable,
31289
- {
31290
- href: member.social.github,
31291
- className: "transition-colors",
31292
- "aria-label": `${member.name}'s GitHub`,
31293
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/github", size: 20 })
31294
- }
31295
- ),
31296
- member.social.twitter && /* @__PURE__ */ jsx(
31297
- Pressable,
31298
- {
31299
- href: member.social.twitter,
31300
- className: "transition-colors",
31301
- "aria-label": `${member.name}'s Twitter`,
31302
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/twitter", size: 20 })
31303
- }
31304
- ),
31305
- member.social.linkedin && /* @__PURE__ */ jsx(
31306
- Pressable,
31307
- {
31308
- href: member.social.linkedin,
31309
- className: "transition-colors",
31310
- "aria-label": `${member.name}'s LinkedIn`,
31311
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/linkedin", size: 20 })
31312
- }
31313
- )
31314
- ]
31315
- }
31316
- )
31124
+ /* @__PURE__ */ jsx("p", { className: cn("text-center", memberRoleClassName), children: member.role }),
31125
+ member.social && /* @__PURE__ */ jsxs("div", { className: cn("mt-2 flex gap-2", socialLinksClassName), children: [
31126
+ member.social.github && /* @__PURE__ */ jsx(
31127
+ Pressable,
31128
+ {
31129
+ href: member.social.github,
31130
+ className: "transition-colors",
31131
+ "aria-label": `${member.name}'s GitHub`,
31132
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/github", size: 20 })
31133
+ }
31134
+ ),
31135
+ member.social.twitter && /* @__PURE__ */ jsx(
31136
+ Pressable,
31137
+ {
31138
+ href: member.social.twitter,
31139
+ className: "transition-colors",
31140
+ "aria-label": `${member.name}'s Twitter`,
31141
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/twitter", size: 20 })
31142
+ }
31143
+ ),
31144
+ member.social.linkedin && /* @__PURE__ */ jsx(
31145
+ Pressable,
31146
+ {
31147
+ href: member.social.linkedin,
31148
+ className: "transition-colors",
31149
+ "aria-label": `${member.name}'s LinkedIn`,
31150
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/linkedin", size: 20 })
31151
+ }
31152
+ )
31153
+ ] })
31317
31154
  ]
31318
31155
  },
31319
31156
  member.id
31320
31157
  ));
31321
- }, [membersSlot, members, memberCardClassName, avatarClassName, memberNameClassName, memberRoleClassName, socialLinksClassName]);
31158
+ }, [
31159
+ membersSlot,
31160
+ members,
31161
+ memberCardClassName,
31162
+ avatarClassName,
31163
+ memberNameClassName,
31164
+ memberRoleClassName,
31165
+ socialLinksClassName
31166
+ ]);
31322
31167
  return /* @__PURE__ */ jsxs(
31323
31168
  Section,
31324
31169
  {
@@ -31349,11 +31194,7 @@ function TeamSocialGrid({
31349
31194
  description && (typeof description === "string" ? /* @__PURE__ */ jsx(
31350
31195
  "p",
31351
31196
  {
31352
- className: cn(
31353
- "mb-8 max-w-3xl lg:text-xl",
31354
- getTextColor(background, "muted"),
31355
- descriptionClassName
31356
- ),
31197
+ className: cn("mb-8 max-w-3xl lg:text-xl", descriptionClassName),
31357
31198
  children: description
31358
31199
  }
31359
31200
  ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
@@ -31394,7 +31235,7 @@ function TeamGradientCards({
31394
31235
  memberRoleClassName,
31395
31236
  socialLinksClassName
31396
31237
  }) {
31397
- const renderMembers = React25.useMemo(() => {
31238
+ const renderMembers = React28.useMemo(() => {
31398
31239
  if (membersSlot) return membersSlot;
31399
31240
  if (!members || members.length === 0) return null;
31400
31241
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -31550,7 +31391,7 @@ function TeamBioBadges({
31550
31391
  memberBioClassName,
31551
31392
  socialLinksClassName
31552
31393
  }) {
31553
- const renderMembers = React25.useMemo(() => {
31394
+ const renderMembers = React28.useMemo(() => {
31554
31395
  if (membersSlot) return membersSlot;
31555
31396
  if (!members || members.length === 0) return null;
31556
31397
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -31727,7 +31568,7 @@ function TeamExpertiseCards({
31727
31568
  ctaDescriptionClassName,
31728
31569
  ctaButtonClassName
31729
31570
  }) {
31730
- const renderMembers = React25.useMemo(() => {
31571
+ const renderMembers = React28.useMemo(() => {
31731
31572
  if (membersSlot) return membersSlot;
31732
31573
  if (!members || members.length === 0) return null;
31733
31574
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -31804,7 +31645,7 @@ function TeamExpertiseCards({
31804
31645
  member.id
31805
31646
  ));
31806
31647
  }, [membersSlot, members, background, memberCardClassName, avatarClassName, memberNameClassName, memberRoleClassName, departmentBadgeClassName, memberDescriptionClassName, expertiseClassName]);
31807
- const renderCta = React25.useMemo(() => {
31648
+ const renderCta = React28.useMemo(() => {
31808
31649
  if (ctaSlot) return ctaSlot;
31809
31650
  return /* @__PURE__ */ jsxs(
31810
31651
  "div",
@@ -31920,7 +31761,7 @@ function TeamCompactGrid({
31920
31761
  ctaDescriptionClassName,
31921
31762
  ctaButtonClassName
31922
31763
  }) {
31923
- const renderMembers = React25.useMemo(() => {
31764
+ const renderMembers = React28.useMemo(() => {
31924
31765
  if (membersSlot) return membersSlot;
31925
31766
  if (!members || members.length === 0) return null;
31926
31767
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -31975,7 +31816,7 @@ function TeamCompactGrid({
31975
31816
  member.id
31976
31817
  ));
31977
31818
  }, [membersSlot, members, background, memberCardClassName, avatarClassName, memberNameClassName, memberRoleClassName, departmentBadgeClassName]);
31978
- const renderCta = React25.useMemo(() => {
31819
+ const renderCta = React28.useMemo(() => {
31979
31820
  if (ctaSlot) return ctaSlot;
31980
31821
  return /* @__PURE__ */ jsxs(
31981
31822
  "div",
@@ -32079,7 +31920,7 @@ function TeamInvestorShowcase({
32079
31920
  investorCompanyClassName,
32080
31921
  optixFlowConfig
32081
31922
  }) {
32082
- const renderInvestors = React25.useMemo(() => {
31923
+ const renderInvestors = React28.useMemo(() => {
32083
31924
  if (investorsSlot) return investorsSlot;
32084
31925
  if (!investors || investors.length === 0) return null;
32085
31926
  return investors.map((investor) => /* @__PURE__ */ jsxs("div", { className: investorCardClassName, children: [
@@ -32153,7 +31994,7 @@ function TeamCarouselExperience({
32153
31994
  memberRoleClassName,
32154
31995
  optixFlowConfig
32155
31996
  }) {
32156
- const renderMembers = React25.useMemo(() => {
31997
+ const renderMembers = React28.useMemo(() => {
32157
31998
  if (membersSlot) return membersSlot;
32158
31999
  if (!members || members.length === 0) return null;
32159
32000
  return members.map((member, idx) => /* @__PURE__ */ jsx(CarouselItem, { className: "max-w-72", children: /* @__PURE__ */ jsxs(
@@ -32303,20 +32144,20 @@ function TeamFilterableSearch({
32303
32144
  emptyStateClassName,
32304
32145
  emptyStateMessage
32305
32146
  }) {
32306
- const [searchQuery, setSearchQuery] = React25.useState("");
32307
- const [selectedDepartment, setSelectedDepartment] = React25.useState("All");
32308
- const departments = React25.useMemo(() => {
32147
+ const [searchQuery, setSearchQuery] = React28.useState("");
32148
+ const [selectedDepartment, setSelectedDepartment] = React28.useState("All");
32149
+ const departments = React28.useMemo(() => {
32309
32150
  const depts = new Set(members.map((m) => m.department));
32310
32151
  return ["All", ...Array.from(depts)];
32311
32152
  }, [members]);
32312
- const filteredMembers = React25.useMemo(() => {
32153
+ const filteredMembers = React28.useMemo(() => {
32313
32154
  return members.filter((member) => {
32314
32155
  const matchesSearch = searchQuery === "" || member.name.toLowerCase().includes(searchQuery.toLowerCase()) || member.role.toLowerCase().includes(searchQuery.toLowerCase()) || member.description.toLowerCase().includes(searchQuery.toLowerCase());
32315
32156
  const matchesDepartment = selectedDepartment === "All" || member.department === selectedDepartment;
32316
32157
  return matchesSearch && matchesDepartment;
32317
32158
  });
32318
32159
  }, [members, searchQuery, selectedDepartment]);
32319
- const renderFilters = React25.useMemo(() => {
32160
+ const renderFilters = React28.useMemo(() => {
32320
32161
  if (filtersSlot) return filtersSlot;
32321
32162
  return /* @__PURE__ */ jsxs(
32322
32163
  "div",
@@ -32371,7 +32212,7 @@ function TeamFilterableSearch({
32371
32212
  selectedDepartment,
32372
32213
  filterButtonClassName
32373
32214
  ]);
32374
- const renderMembers = React25.useMemo(() => {
32215
+ const renderMembers = React28.useMemo(() => {
32375
32216
  if (membersSlot) return membersSlot;
32376
32217
  return filteredMembers.map((member) => /* @__PURE__ */ jsx(
32377
32218
  "div",
@@ -32558,7 +32399,7 @@ function TeamCompactCta({
32558
32399
  memberRoleClassName,
32559
32400
  ctaClassName
32560
32401
  }) {
32561
- const renderMembers = React25.useMemo(() => {
32402
+ const renderMembers = React28.useMemo(() => {
32562
32403
  if (membersSlot) return membersSlot;
32563
32404
  if (!members || members.length === 0) return null;
32564
32405
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -32586,7 +32427,7 @@ function TeamCompactCta({
32586
32427
  member.id
32587
32428
  ));
32588
32429
  }, [membersSlot, members, memberCardClassName, avatarClassName, memberNameClassName, memberRoleClassName, background]);
32589
- const renderCta = React25.useMemo(() => {
32430
+ const renderCta = React28.useMemo(() => {
32590
32431
  if (ctaSlot) return ctaSlot;
32591
32432
  return /* @__PURE__ */ jsx(
32592
32433
  Pressable,
@@ -32677,7 +32518,7 @@ function TeamHoverHighlight({
32677
32518
  socialLinksClassName,
32678
32519
  optixFlowConfig
32679
32520
  }) {
32680
- const renderMembers = React25.useMemo(() => {
32521
+ const renderMembers = React28.useMemo(() => {
32681
32522
  if (membersSlot) return membersSlot;
32682
32523
  if (!members || members.length === 0) return null;
32683
32524
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -32826,7 +32667,7 @@ function TeamSocialCards({
32826
32667
  socialLinksClassName,
32827
32668
  optixFlowConfig
32828
32669
  }) {
32829
- const renderMembers = React25.useMemo(() => {
32670
+ const renderMembers = React28.useMemo(() => {
32830
32671
  if (membersSlot) return membersSlot;
32831
32672
  if (!members || members.length === 0) return null;
32832
32673
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -32996,7 +32837,7 @@ function TeamGridAnimated({
32996
32837
  "hsl(var(--muted))",
32997
32838
  "hsl(var(--warning)/0.2)"
32998
32839
  ];
32999
- const renderMembers = React25.useMemo(() => {
32840
+ const renderMembers = React28.useMemo(() => {
33000
32841
  if (membersSlot) return membersSlot;
33001
32842
  if (!members || members.length === 0) return null;
33002
32843
  return members.map((member, index) => /* @__PURE__ */ jsxs(
@@ -33096,7 +32937,7 @@ function TeamGridAnimated({
33096
32937
  memberDesignationClassName,
33097
32938
  socialLinksClassName
33098
32939
  ]);
33099
- const renderSocialLinksMain = React25.useMemo(() => {
32940
+ const renderSocialLinksMain = React28.useMemo(() => {
33100
32941
  if (socialLinksMainSlot) return socialLinksMainSlot;
33101
32942
  if (!socialLinksMain || socialLinksMain.length === 0) return null;
33102
32943
  return /* @__PURE__ */ jsxs("div", { className: "flex w-full items-center justify-center gap-4 py-4 md:justify-center", children: [
@@ -33213,7 +33054,7 @@ function TeamDepartmentSections({
33213
33054
  memberRoleClassName,
33214
33055
  optixFlowConfig
33215
33056
  }) {
33216
- const renderDepartments = React25.useMemo(() => {
33057
+ const renderDepartments = React28.useMemo(() => {
33217
33058
  if (departmentsSlot) return departmentsSlot;
33218
33059
  if (!departments || departments.length === 0) return null;
33219
33060
  return departments.map((department, deptIndex) => /* @__PURE__ */ jsxs(
@@ -33317,7 +33158,7 @@ function TeamAlternatingBios({
33317
33158
  socialLinksClassName,
33318
33159
  optixFlowConfig
33319
33160
  }) {
33320
- const renderMembers = React25.useMemo(() => {
33161
+ const renderMembers = React28.useMemo(() => {
33321
33162
  if (membersSlot) return membersSlot;
33322
33163
  if (!members || members.length === 0) return null;
33323
33164
  return members.map((member, index) => /* @__PURE__ */ jsxs(
@@ -33499,7 +33340,7 @@ function TeamAvatarSocial({
33499
33340
  memberRoleClassName,
33500
33341
  socialLinksClassName
33501
33342
  }) {
33502
- const renderMembers = React25.useMemo(() => {
33343
+ const renderMembers = React28.useMemo(() => {
33503
33344
  if (membersSlot) return membersSlot;
33504
33345
  if (!members || members.length === 0) return null;
33505
33346
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -33642,7 +33483,7 @@ function TeamHoverOverlay({
33642
33483
  socialLinksClassName,
33643
33484
  optixFlowConfig
33644
33485
  }) {
33645
- const renderMembers = React25.useMemo(() => {
33486
+ const renderMembers = React28.useMemo(() => {
33646
33487
  if (membersSlot) return membersSlot;
33647
33488
  if (!members || members.length === 0) return null;
33648
33489
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -33818,14 +33659,14 @@ function TeamRoleFilter({
33818
33659
  socialLinksClassName,
33819
33660
  optixFlowConfig
33820
33661
  }) {
33821
- const [selectedRole, setSelectedRole] = React25.useState("All");
33822
- const filteredMembers = React25.useMemo(() => {
33662
+ const [selectedRole, setSelectedRole] = React28.useState("All");
33663
+ const filteredMembers = React28.useMemo(() => {
33823
33664
  if (!members) return [];
33824
33665
  return members.filter(
33825
33666
  (member) => selectedRole === "All" ? true : member.role === selectedRole
33826
33667
  );
33827
33668
  }, [members, selectedRole]);
33828
- const renderRoles = React25.useMemo(() => {
33669
+ const renderRoles = React28.useMemo(() => {
33829
33670
  if (rolesSlot) return rolesSlot;
33830
33671
  if (!roles) return null;
33831
33672
  return /* @__PURE__ */ jsx(
@@ -33849,7 +33690,7 @@ function TeamRoleFilter({
33849
33690
  }
33850
33691
  );
33851
33692
  }, [rolesSlot, filtersClassName, roles, selectedRole, filterButtonClassName]);
33852
- const renderMembers = React25.useMemo(() => {
33693
+ const renderMembers = React28.useMemo(() => {
33853
33694
  if (membersSlot) return membersSlot;
33854
33695
  return filteredMembers.map((member) => /* @__PURE__ */ jsx(
33855
33696
  Card,
@@ -34009,7 +33850,7 @@ function TeamContactCards({
34009
33850
  socialLinksClassName,
34010
33851
  optixFlowConfig
34011
33852
  }) {
34012
- const getStatusColor = React25.useCallback((status) => {
33853
+ const getStatusColor = React28.useCallback((status) => {
34013
33854
  switch (status) {
34014
33855
  case "active":
34015
33856
  return "bg-success";
@@ -34019,7 +33860,7 @@ function TeamContactCards({
34019
33860
  return getTextColor(background, "muted");
34020
33861
  }
34021
33862
  }, [background]);
34022
- const renderMembers = React25.useMemo(() => {
33863
+ const renderMembers = React28.useMemo(() => {
34023
33864
  if (membersSlot) return membersSlot;
34024
33865
  if (!members || members.length === 0) return null;
34025
33866
  return members.map((member) => /* @__PURE__ */ jsx(Card, { className: cn("p-0", memberCardClassName), children: /* @__PURE__ */ jsxs(CardContent, { className: "p-6!", children: [
@@ -34226,7 +34067,7 @@ function TeamLargeImages({
34226
34067
  socialLinksClassName,
34227
34068
  optixFlowConfig
34228
34069
  }) {
34229
- const renderMembers = React25.useMemo(() => {
34070
+ const renderMembers = React28.useMemo(() => {
34230
34071
  if (membersSlot) return membersSlot;
34231
34072
  if (!members || members.length === 0) return null;
34232
34073
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -34401,7 +34242,7 @@ function TeamSkillBadges({
34401
34242
  socialLinksClassName,
34402
34243
  optixFlowConfig
34403
34244
  }) {
34404
- const renderMembers = React25.useMemo(() => {
34245
+ const renderMembers = React28.useMemo(() => {
34405
34246
  if (membersSlot) return membersSlot;
34406
34247
  if (!members || members.length === 0) return null;
34407
34248
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -34591,7 +34432,7 @@ function TeamTestimonialStats({
34591
34432
  socialLinksClassName,
34592
34433
  optixFlowConfig
34593
34434
  }) {
34594
- const renderMembers = React25.useMemo(() => {
34435
+ const renderMembers = React28.useMemo(() => {
34595
34436
  if (membersSlot) return membersSlot;
34596
34437
  if (!members || members.length === 0) return null;
34597
34438
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -38735,7 +38576,7 @@ function BlogGridAuthorCardsComponent({
38735
38576
  pattern,
38736
38577
  patternOpacity
38737
38578
  }) {
38738
- const viewAllActionContent = React25.useMemo(() => {
38579
+ const viewAllActionContent = React28.useMemo(() => {
38739
38580
  if (viewAllSlot) return viewAllSlot;
38740
38581
  if (!viewAllAction) return null;
38741
38582
  const {
@@ -38760,7 +38601,7 @@ function BlogGridAuthorCardsComponent({
38760
38601
  }
38761
38602
  );
38762
38603
  }, [viewAllSlot, viewAllAction]);
38763
- const postsContent = React25.useMemo(() => {
38604
+ const postsContent = React28.useMemo(() => {
38764
38605
  if (postsSlot) return postsSlot;
38765
38606
  if (!posts || posts.length === 0) return null;
38766
38607
  return posts.map((post) => {
@@ -38872,7 +38713,7 @@ function BlogCardsTaglineCta({
38872
38713
  pattern,
38873
38714
  patternOpacity
38874
38715
  }) {
38875
- const ctaActionContent = React25.useMemo(() => {
38716
+ const ctaActionContent = React28.useMemo(() => {
38876
38717
  if (ctaSlot) return ctaSlot;
38877
38718
  if (!ctaAction) return null;
38878
38719
  const {
@@ -38900,7 +38741,7 @@ function BlogCardsTaglineCta({
38900
38741
  }
38901
38742
  );
38902
38743
  }, [ctaSlot, ctaAction, ctaClassName]);
38903
- const postsContent = React25.useMemo(() => {
38744
+ const postsContent = React28.useMemo(() => {
38904
38745
  if (postsSlot) return postsSlot;
38905
38746
  if (!posts || posts.length === 0) return null;
38906
38747
  return posts.map((post) => {
@@ -39046,7 +38887,7 @@ function BlogCardsReadTime({
39046
38887
  pattern,
39047
38888
  patternOpacity
39048
38889
  }) {
39049
- const renderedViewAllAction = React25.useMemo(() => {
38890
+ const renderedViewAllAction = React28.useMemo(() => {
39050
38891
  if (viewAllSlot) return viewAllSlot;
39051
38892
  if (!viewAllAction) return null;
39052
38893
  const {
@@ -39063,7 +38904,7 @@ function BlogCardsReadTime({
39063
38904
  iconAfter
39064
38905
  ] }) });
39065
38906
  }, [viewAllSlot, viewAllAction]);
39066
- const renderedPosts = React25.useMemo(() => {
38907
+ const renderedPosts = React28.useMemo(() => {
39067
38908
  if (postsSlot) return postsSlot;
39068
38909
  if (!posts || posts.length === 0) return null;
39069
38910
  return posts.map((post) => {
@@ -39200,7 +39041,7 @@ function BlogCategoryOverlay({
39200
39041
  pattern,
39201
39042
  patternOpacity
39202
39043
  }) {
39203
- const viewAllActionContent = React25.useMemo(() => {
39044
+ const viewAllActionContent = React28.useMemo(() => {
39204
39045
  if (viewAllSlot) return viewAllSlot;
39205
39046
  if (!viewAllAction) return null;
39206
39047
  const {
@@ -39228,7 +39069,7 @@ function BlogCategoryOverlay({
39228
39069
  }
39229
39070
  );
39230
39071
  }, [viewAllSlot, viewAllAction, viewAllClassName]);
39231
- const postsContent = React25.useMemo(() => {
39072
+ const postsContent = React28.useMemo(() => {
39232
39073
  if (postsSlot) return postsSlot;
39233
39074
  if (!posts || posts.length === 0) return null;
39234
39075
  return posts.map((post) => {
@@ -39376,7 +39217,7 @@ function BlogFeaturedPopular({
39376
39217
  }) {
39377
39218
  const featuredPost = posts?.[0];
39378
39219
  const popularPosts = posts?.slice(1);
39379
- const renderedFeaturedPost = React25.useMemo(() => {
39220
+ const renderedFeaturedPost = React28.useMemo(() => {
39380
39221
  if (featuredSlot) return featuredSlot;
39381
39222
  if (!featuredPost) return null;
39382
39223
  const postHref = featuredPost.href || featuredPost.url || featuredPost.link;
@@ -39428,7 +39269,7 @@ function BlogFeaturedPopular({
39428
39269
  featuredContentClassName,
39429
39270
  optixFlowConfig
39430
39271
  ]);
39431
- const renderedPopularPosts = React25.useMemo(() => {
39272
+ const renderedPopularPosts = React28.useMemo(() => {
39432
39273
  if (postsSlot) return postsSlot;
39433
39274
  if (!popularPosts || popularPosts.length === 0) return null;
39434
39275
  return popularPosts.map((post) => {
@@ -39545,7 +39386,7 @@ function BlogRelatedArticles({
39545
39386
  pattern,
39546
39387
  patternOpacity
39547
39388
  }) {
39548
- const renderedSeeAllAction = React25.useMemo(() => {
39389
+ const renderedSeeAllAction = React28.useMemo(() => {
39549
39390
  if (seeAllSlot) return seeAllSlot;
39550
39391
  if (!seeAllAction) return null;
39551
39392
  const {
@@ -39574,7 +39415,7 @@ function BlogRelatedArticles({
39574
39415
  }
39575
39416
  );
39576
39417
  }, [seeAllSlot, seeAllAction, seeAllClassName]);
39577
- const renderedArticles = React25.useMemo(() => {
39418
+ const renderedArticles = React28.useMemo(() => {
39578
39419
  if (articlesSlot) return articlesSlot;
39579
39420
  if (!articles || articles.length === 0) return null;
39580
39421
  return articles.map((item) => {
@@ -39882,7 +39723,7 @@ function BlogHorizontalCards({
39882
39723
  pattern,
39883
39724
  patternOpacity
39884
39725
  }) {
39885
- const ctaContent = React25.useMemo(() => {
39726
+ const ctaContent = React28.useMemo(() => {
39886
39727
  if (ctaSlot) return ctaSlot;
39887
39728
  if (!ctaAction) return null;
39888
39729
  const {
@@ -39907,7 +39748,7 @@ function BlogHorizontalCards({
39907
39748
  }
39908
39749
  );
39909
39750
  }, [ctaSlot, ctaAction]);
39910
- const postsContent = React25.useMemo(() => {
39751
+ const postsContent = React28.useMemo(() => {
39911
39752
  if (postsSlot) return postsSlot;
39912
39753
  if (!posts || posts.length === 0) return null;
39913
39754
  return posts.map((post) => {
@@ -40129,7 +39970,7 @@ function Label({
40129
39970
  );
40130
39971
  }
40131
39972
  var POSTS_PER_PAGE = 6;
40132
- var BlogCard = React25.memo(function BlogCard2({
39973
+ var BlogCard = React28.memo(function BlogCard2({
40133
39974
  post,
40134
39975
  optixFlowConfig,
40135
39976
  className
@@ -40168,7 +40009,7 @@ var BlogCard = React25.memo(function BlogCard2({
40168
40009
  ] })
40169
40010
  ] }) });
40170
40011
  });
40171
- var FilterForm = React25.memo(function FilterForm2({
40012
+ var FilterForm = React28.memo(function FilterForm2({
40172
40013
  categories,
40173
40014
  selectedCategories,
40174
40015
  onCategoryChange,
@@ -40201,7 +40042,7 @@ var FilterForm = React25.memo(function FilterForm2({
40201
40042
  }
40202
40043
  );
40203
40044
  });
40204
- var BreadcrumbBlog = React25.memo(function BreadcrumbBlog2({
40045
+ var BreadcrumbBlog = React28.memo(function BreadcrumbBlog2({
40205
40046
  breadcrumb
40206
40047
  }) {
40207
40048
  return /* @__PURE__ */ jsx(Breadcrumb, { children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumb.map((item, i) => {
@@ -40283,12 +40124,12 @@ function BlogFilteredResultsComponent({
40283
40124
  }, [posts, selectedCategories]);
40284
40125
  const postsToDisplay = filteredPosts.length > 0 ? filteredPosts : posts || [];
40285
40126
  const hasMore = visibleCount < postsToDisplay.length;
40286
- const breadcrumbContent = React25.useMemo(() => {
40127
+ const breadcrumbContent = React28.useMemo(() => {
40287
40128
  if (breadcrumbSlot) return breadcrumbSlot;
40288
40129
  if (!breadcrumb || breadcrumb.length === 0) return null;
40289
40130
  return /* @__PURE__ */ jsx(BreadcrumbBlog, { breadcrumb });
40290
40131
  }, [breadcrumbSlot, breadcrumb]);
40291
- const primaryPostContent = React25.useMemo(() => {
40132
+ const primaryPostContent = React28.useMemo(() => {
40292
40133
  if (primaryPostSlot) return primaryPostSlot;
40293
40134
  if (!primaryPost) return null;
40294
40135
  return /* @__PURE__ */ jsx(
@@ -40300,7 +40141,7 @@ function BlogFilteredResultsComponent({
40300
40141
  }
40301
40142
  );
40302
40143
  }, [primaryPostSlot, primaryPost, optixFlowConfig, postCardClassName]);
40303
- const categoriesContent = React25.useMemo(() => {
40144
+ const categoriesContent = React28.useMemo(() => {
40304
40145
  if (categoriesSlot) return categoriesSlot;
40305
40146
  if (!categories || categories.length === 0) return null;
40306
40147
  return /* @__PURE__ */ jsx(
@@ -40319,7 +40160,7 @@ function BlogFilteredResultsComponent({
40319
40160
  handleCategoryChange,
40320
40161
  categoriesClassName
40321
40162
  ]);
40322
- const postsContent = React25.useMemo(() => {
40163
+ const postsContent = React28.useMemo(() => {
40323
40164
  if (postsSlot) return postsSlot;
40324
40165
  return postsToDisplay.slice(0, visibleCount).map((post) => {
40325
40166
  const postKey = post.id || String(post.title) || Math.random().toString();
@@ -40340,7 +40181,7 @@ function BlogFilteredResultsComponent({
40340
40181
  optixFlowConfig,
40341
40182
  postCardClassName
40342
40183
  ]);
40343
- const loadMoreContent = React25.useMemo(() => {
40184
+ const loadMoreContent = React28.useMemo(() => {
40344
40185
  if (loadMoreSlot) return loadMoreSlot;
40345
40186
  if (!loadMoreAction || !hasMore) return null;
40346
40187
  const {
@@ -40466,7 +40307,7 @@ function BlogMasonryFeaturedComponent({
40466
40307
  }) {
40467
40308
  const featuredPost = posts?.[0];
40468
40309
  const otherPosts = posts?.slice(1);
40469
- const featuredPostContent = React25.useMemo(() => {
40310
+ const featuredPostContent = React28.useMemo(() => {
40470
40311
  if (featuredSlot) return featuredSlot;
40471
40312
  if (!featuredPost) return null;
40472
40313
  const postHref = featuredPost.href || featuredPost.url || featuredPost.link || "#";
@@ -40516,7 +40357,7 @@ function BlogMasonryFeaturedComponent({
40516
40357
  featuredImageClassName,
40517
40358
  optixFlowConfig
40518
40359
  ]);
40519
- const otherPostsContent = React25.useMemo(() => {
40360
+ const otherPostsContent = React28.useMemo(() => {
40520
40361
  if (postsSlot) return postsSlot;
40521
40362
  if (!otherPosts || otherPosts.length === 0) return null;
40522
40363
  return otherPosts.map((post) => {
@@ -40605,7 +40446,7 @@ function BlogHorizontalTimelineComponent({
40605
40446
  pattern,
40606
40447
  patternOpacity
40607
40448
  }) {
40608
- const renderPosts = React25.useMemo(() => {
40449
+ const renderPosts = React28.useMemo(() => {
40609
40450
  if (postsSlot) return postsSlot;
40610
40451
  if (!posts || posts.length === 0) return null;
40611
40452
  return posts.map((post, index) => {
@@ -40730,7 +40571,7 @@ function BlogGridNinePosts({
40730
40571
  pattern,
40731
40572
  patternOpacity
40732
40573
  }) {
40733
- const renderedCtaAction = React25.useMemo(() => {
40574
+ const renderedCtaAction = React28.useMemo(() => {
40734
40575
  if (ctaSlot) return ctaSlot;
40735
40576
  if (!ctaAction) return null;
40736
40577
  const {
@@ -40755,7 +40596,7 @@ function BlogGridNinePosts({
40755
40596
  }
40756
40597
  );
40757
40598
  }, [ctaSlot, ctaAction]);
40758
- const renderedPosts = React25.useMemo(() => {
40599
+ const renderedPosts = React28.useMemo(() => {
40759
40600
  if (postsSlot) return postsSlot;
40760
40601
  if (!posts || posts.length === 0) return null;
40761
40602
  return posts.map((post) => {
@@ -40853,9 +40694,9 @@ var AppleCarousel = ({
40853
40694
  className,
40854
40695
  containerClassName
40855
40696
  }) => {
40856
- const carouselRef = React25__default.useRef(null);
40857
- const [canScrollLeft, setCanScrollLeft] = React25__default.useState(false);
40858
- const [canScrollRight, setCanScrollRight] = React25__default.useState(true);
40697
+ const carouselRef = React28__default.useRef(null);
40698
+ const [canScrollLeft, setCanScrollLeft] = React28__default.useState(false);
40699
+ const [canScrollRight, setCanScrollRight] = React28__default.useState(true);
40859
40700
  const [currentIndex, setCurrentIndex] = useState(0);
40860
40701
  useEffect(() => {
40861
40702
  if (carouselRef.current) {
@@ -41092,7 +40933,7 @@ function BlogCarouselAppleComponent({
41092
40933
  containerClassName,
41093
40934
  cardClassName
41094
40935
  }) {
41095
- const carouselCards = React25.useMemo(() => {
40936
+ const carouselCards = React28.useMemo(() => {
41096
40937
  if (!posts || posts.length === 0) return [];
41097
40938
  return posts.map(
41098
40939
  (post, idx) => ({
@@ -41104,7 +40945,7 @@ function BlogCarouselAppleComponent({
41104
40945
  })
41105
40946
  );
41106
40947
  }, [posts]);
41107
- const cardElements = React25.useMemo(() => {
40948
+ const cardElements = React28.useMemo(() => {
41108
40949
  if (!posts || posts.length === 0) return [];
41109
40950
  return carouselCards.map((card, index) => {
41110
40951
  const post = posts[index];
@@ -41189,7 +41030,7 @@ function ArticleHeroProseComponent({
41189
41030
  description,
41190
41031
  authorImage
41191
41032
  } = post ?? {};
41192
- const authorContent = React25.useMemo(() => {
41033
+ const authorContent = React28.useMemo(() => {
41193
41034
  if (authorSlot) return authorSlot;
41194
41035
  if (!authorName) return null;
41195
41036
  return /* @__PURE__ */ jsxs(
@@ -41223,7 +41064,7 @@ function ArticleHeroProseComponent({
41223
41064
  dateFormat,
41224
41065
  authorClassName
41225
41066
  ]);
41226
- const heroMediaContent = React25.useMemo(() => {
41067
+ const heroMediaContent = React28.useMemo(() => {
41227
41068
  if (heroMediaSlot) return heroMediaSlot;
41228
41069
  if (!image) return null;
41229
41070
  return /* @__PURE__ */ jsx(
@@ -41324,7 +41165,7 @@ function ArticleSidebarStickyComponent({
41324
41165
  pattern,
41325
41166
  patternOpacity
41326
41167
  }) {
41327
- const backLinkContent = React25.useMemo(() => {
41168
+ const backLinkContent = React28.useMemo(() => {
41328
41169
  if (backLinkSlot) return backLinkSlot;
41329
41170
  if (!backHref && !backText) return null;
41330
41171
  return /* @__PURE__ */ jsxs(
@@ -41342,7 +41183,7 @@ function ArticleSidebarStickyComponent({
41342
41183
  }
41343
41184
  );
41344
41185
  }, [backLinkSlot, backHref, backText, backIcon, backLinkClassName]);
41345
- const renderAuthor = React25.useCallback(
41186
+ const renderAuthor = React28.useCallback(
41346
41187
  (isMobile = false) => {
41347
41188
  if (authorSlot) return authorSlot;
41348
41189
  if (!authorName) return null;
@@ -41374,7 +41215,7 @@ function ArticleSidebarStickyComponent({
41374
41215
  authorClassName
41375
41216
  ]
41376
41217
  );
41377
- const heroMediaContent = React25.useMemo(() => {
41218
+ const heroMediaContent = React28.useMemo(() => {
41378
41219
  if (heroMediaSlot) return heroMediaSlot;
41379
41220
  if (!heroImageSrc) return null;
41380
41221
  return /* @__PURE__ */ jsx(
@@ -41481,10 +41322,10 @@ function ArticleTocSidebarComponent({
41481
41322
  patternOpacity
41482
41323
  }) {
41483
41324
  const ctaActions = ctaActionsProp ?? (ctaButtonText ? [{ label: ctaButtonText, href: ctaButtonHref || "#", variant: "default", className: "w-full" }] : []);
41484
- const [activeSection, setActiveSection] = React25.useState(
41325
+ const [activeSection, setActiveSection] = React28.useState(
41485
41326
  sections?.[0]?.id || ""
41486
41327
  );
41487
- React25.useEffect(() => {
41328
+ React28.useEffect(() => {
41488
41329
  if (!enableTocTracking || !sections || sections.length === 0) return;
41489
41330
  const observer = new IntersectionObserver(
41490
41331
  (entries) => {
@@ -41502,12 +41343,12 @@ function ArticleTocSidebarComponent({
41502
41343
  });
41503
41344
  return () => observer.disconnect();
41504
41345
  }, [sections, enableTocTracking]);
41505
- const categoryContent = React25.useMemo(() => {
41346
+ const categoryContent = React28.useMemo(() => {
41506
41347
  if (categorySlot) return categorySlot;
41507
41348
  if (!category) return null;
41508
41349
  return /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: category });
41509
41350
  }, [categorySlot, category]);
41510
- const authorContent = React25.useMemo(() => {
41351
+ const authorContent = React28.useMemo(() => {
41511
41352
  if (authorSlot) return authorSlot;
41512
41353
  if (!authorName) return null;
41513
41354
  return /* @__PURE__ */ jsxs("div", { className: cn("mt-6 flex items-center gap-4", authorClassName), children: [
@@ -41527,7 +41368,7 @@ function ArticleTocSidebarComponent({
41527
41368
  ] })
41528
41369
  ] });
41529
41370
  }, [authorSlot, authorName, authorImage, authorHref, publishDate, readTime, authorClassName]);
41530
- const heroMediaContent = React25.useMemo(() => {
41371
+ const heroMediaContent = React28.useMemo(() => {
41531
41372
  if (heroMediaSlot) return heroMediaSlot;
41532
41373
  if (!heroImageSrc) return null;
41533
41374
  return /* @__PURE__ */ jsx(
@@ -41540,7 +41381,7 @@ function ArticleTocSidebarComponent({
41540
41381
  }
41541
41382
  );
41542
41383
  }, [heroMediaSlot, heroImageSrc, heroImageAlt, heroImageClassName, optixFlowConfig]);
41543
- const tocContent = React25.useMemo(() => {
41384
+ const tocContent = React28.useMemo(() => {
41544
41385
  if (tocSlot) return tocSlot;
41545
41386
  if (!sections || sections.length === 0) return null;
41546
41387
  return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border p-4", tocClassName), children: [
@@ -41548,7 +41389,7 @@ function ArticleTocSidebarComponent({
41548
41389
  /* @__PURE__ */ jsx("nav", { className: "space-y-2", children: sections.map((section) => {
41549
41390
  const isActive = activeSection === section.id;
41550
41391
  if (renderSectionLink) {
41551
- return /* @__PURE__ */ jsx(React25.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
41392
+ return /* @__PURE__ */ jsx(React28.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
41552
41393
  }
41553
41394
  return /* @__PURE__ */ jsx(
41554
41395
  Pressable,
@@ -41565,7 +41406,7 @@ function ArticleTocSidebarComponent({
41565
41406
  }) })
41566
41407
  ] });
41567
41408
  }, [tocSlot, sections, activeSection, renderSectionLink, tocClassName]);
41568
- const ctaContent = React25.useMemo(() => {
41409
+ const ctaContent = React28.useMemo(() => {
41569
41410
  if (ctaSlot) return ctaSlot;
41570
41411
  if (!ctaTitle && !ctaDescription && (!ctaActions || ctaActions.length === 0)) return null;
41571
41412
  return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border p-4", getNestedCardBg(background, "subtle"), getNestedCardTextColor(background), ctaClassName), children: [
@@ -41654,11 +41495,11 @@ function ArticleBreadcrumbSocialComponent({
41654
41495
  patternOpacity
41655
41496
  }) {
41656
41497
  const author = authorProp ?? (authorName ? { name: authorName, image: authorImage, role: authorRole } : void 0);
41657
- const [activeSection, setActiveSection] = React25.useState(
41498
+ const [activeSection, setActiveSection] = React28.useState(
41658
41499
  sections?.[0]?.id || ""
41659
41500
  );
41660
- const [showBackToTop, setShowBackToTop] = React25.useState(false);
41661
- React25.useEffect(() => {
41501
+ const [showBackToTop, setShowBackToTop] = React28.useState(false);
41502
+ React28.useEffect(() => {
41662
41503
  if (!enableTocTracking || !sections || sections.length === 0) return;
41663
41504
  const observer = new IntersectionObserver(
41664
41505
  (entries) => {
@@ -41676,7 +41517,7 @@ function ArticleBreadcrumbSocialComponent({
41676
41517
  });
41677
41518
  return () => observer.disconnect();
41678
41519
  }, [sections, enableTocTracking]);
41679
- React25.useEffect(() => {
41520
+ React28.useEffect(() => {
41680
41521
  if (!enableBackToTop) return;
41681
41522
  const handleScroll = () => {
41682
41523
  setShowBackToTop(window.scrollY > 400);
@@ -41684,15 +41525,15 @@ function ArticleBreadcrumbSocialComponent({
41684
41525
  window.addEventListener("scroll", handleScroll);
41685
41526
  return () => window.removeEventListener("scroll", handleScroll);
41686
41527
  }, [enableBackToTop]);
41687
- const scrollToTop = React25.useCallback(() => {
41528
+ const scrollToTop = React28.useCallback(() => {
41688
41529
  window.scrollTo({ top: 0, behavior: "smooth" });
41689
41530
  }, []);
41690
- const breadcrumbsContent = React25.useMemo(() => {
41531
+ const breadcrumbsContent = React28.useMemo(() => {
41691
41532
  if (breadcrumbsSlot) return breadcrumbsSlot;
41692
41533
  if (!breadcrumbs || breadcrumbs.length === 0) return null;
41693
41534
  return /* @__PURE__ */ jsx(Breadcrumb, { className: cn("mb-8", breadcrumbClassName), children: /* @__PURE__ */ jsxs(BreadcrumbList, { children: [
41694
41535
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: "#", children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/home", size: 16 }) }) }) }),
41695
- breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
41536
+ breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
41696
41537
  /* @__PURE__ */ jsx(BreadcrumbSeparator, {}),
41697
41538
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: crumb.href, children: crumb.label }) }) })
41698
41539
  ] }, index)),
@@ -41702,7 +41543,7 @@ function ArticleBreadcrumbSocialComponent({
41702
41543
  ] })
41703
41544
  ] }) });
41704
41545
  }, [breadcrumbsSlot, breadcrumbs, currentPage, breadcrumbClassName]);
41705
- const authorContent = React25.useMemo(() => {
41546
+ const authorContent = React28.useMemo(() => {
41706
41547
  if (authorSlot) return authorSlot;
41707
41548
  if (!author) return null;
41708
41549
  return /* @__PURE__ */ jsxs(
@@ -41725,7 +41566,7 @@ function ArticleBreadcrumbSocialComponent({
41725
41566
  }
41726
41567
  );
41727
41568
  }, [authorSlot, author, publishDate, readTime, authorClassName]);
41728
- const heroMediaContent = React25.useMemo(() => {
41569
+ const heroMediaContent = React28.useMemo(() => {
41729
41570
  if (heroMediaSlot) return heroMediaSlot;
41730
41571
  if (!heroImageSrc) return null;
41731
41572
  return /* @__PURE__ */ jsx(
@@ -41747,7 +41588,7 @@ function ArticleBreadcrumbSocialComponent({
41747
41588
  heroImageClassName,
41748
41589
  optixFlowConfig
41749
41590
  ]);
41750
- const tocContent = React25.useMemo(() => {
41591
+ const tocContent = React28.useMemo(() => {
41751
41592
  if (tocSlot) return tocSlot;
41752
41593
  if (!sections || sections.length === 0) return null;
41753
41594
  return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border p-4", tocClassName), children: [
@@ -41755,7 +41596,7 @@ function ArticleBreadcrumbSocialComponent({
41755
41596
  /* @__PURE__ */ jsx("nav", { className: "space-y-2", children: sections.map((section) => {
41756
41597
  const isActive = activeSection === section.id;
41757
41598
  if (renderSectionLink) {
41758
- return /* @__PURE__ */ jsx(React25.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
41599
+ return /* @__PURE__ */ jsx(React28.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
41759
41600
  }
41760
41601
  return /* @__PURE__ */ jsx(
41761
41602
  Pressable,
@@ -41860,11 +41701,11 @@ function ArticleCompactTocComponent({
41860
41701
  pattern,
41861
41702
  patternOpacity
41862
41703
  }) {
41863
- const [activeSection, setActiveSection] = React25.useState(
41704
+ const [activeSection, setActiveSection] = React28.useState(
41864
41705
  sections?.[0]?.id || ""
41865
41706
  );
41866
- const [isTocOpen, setIsTocOpen] = React25.useState(false);
41867
- React25.useEffect(() => {
41707
+ const [isTocOpen, setIsTocOpen] = React28.useState(false);
41708
+ React28.useEffect(() => {
41868
41709
  if (!enableTocTracking) return;
41869
41710
  const observer = new IntersectionObserver(
41870
41711
  (entries) => {
@@ -41882,12 +41723,12 @@ function ArticleCompactTocComponent({
41882
41723
  });
41883
41724
  return () => observer.disconnect();
41884
41725
  }, [sections, enableTocTracking]);
41885
- const breadcrumbsContent = React25.useMemo(() => {
41726
+ const breadcrumbsContent = React28.useMemo(() => {
41886
41727
  if (breadcrumbsSlot) return breadcrumbsSlot;
41887
41728
  if (!breadcrumbs && !currentPage) return null;
41888
41729
  return /* @__PURE__ */ jsx(Breadcrumb, { className: cn("mb-6 md:mb-20", breadcrumbClassName), children: /* @__PURE__ */ jsxs(BreadcrumbList, { children: [
41889
41730
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: "#", children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/home", size: 16 }) }) }) }),
41890
- breadcrumbs?.map((crumb, index) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
41731
+ breadcrumbs?.map((crumb, index) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
41891
41732
  /* @__PURE__ */ jsx(BreadcrumbSeparator, {}),
41892
41733
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: crumb.href, children: crumb.label }) }) })
41893
41734
  ] }, index)),
@@ -41895,7 +41736,7 @@ function ArticleCompactTocComponent({
41895
41736
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbPage, { children: currentPage }) })
41896
41737
  ] }) });
41897
41738
  }, [breadcrumbsSlot, breadcrumbs, currentPage, breadcrumbClassName]);
41898
- const shareContent = React25.useMemo(() => {
41739
+ const shareContent = React28.useMemo(() => {
41899
41740
  if (shareSlot) return shareSlot;
41900
41741
  if (!socialLinks || socialLinks.length === 0) return null;
41901
41742
  return /* @__PURE__ */ jsxs("div", { className: cn("mt-6 flex items-center gap-2", shareClassName), children: [
@@ -41912,13 +41753,13 @@ function ArticleCompactTocComponent({
41912
41753
  ))
41913
41754
  ] });
41914
41755
  }, [shareSlot, socialLinks, shareClassName]);
41915
- const renderTocLinks = React25.useCallback(
41756
+ const renderTocLinks = React28.useCallback(
41916
41757
  (onLinkClick) => {
41917
41758
  if (!sections) return null;
41918
41759
  return sections.map((section) => {
41919
41760
  const isActive = activeSection === section.id;
41920
41761
  if (renderSectionLink) {
41921
- return /* @__PURE__ */ jsx(React25.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
41762
+ return /* @__PURE__ */ jsx(React28.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
41922
41763
  }
41923
41764
  return /* @__PURE__ */ jsx(
41924
41765
  Pressable,
@@ -41937,7 +41778,7 @@ function ArticleCompactTocComponent({
41937
41778
  },
41938
41779
  [sections, activeSection, renderSectionLink]
41939
41780
  );
41940
- const tocContent = React25.useMemo(() => {
41781
+ const tocContent = React28.useMemo(() => {
41941
41782
  if (tocSlot) return tocSlot;
41942
41783
  if (!sections || sections.length === 0) return null;
41943
41784
  return /* @__PURE__ */ jsx("div", { className: "mb-8 lg:hidden", children: /* @__PURE__ */ jsxs(Popover, { open: isTocOpen, onOpenChange: setIsTocOpen, children: [
@@ -41970,7 +41811,7 @@ function ArticleCompactTocComponent({
41970
41811
  )
41971
41812
  ] }) });
41972
41813
  }, [tocSlot, sections, isTocOpen, tocClassName, renderTocLinks]);
41973
- const desktopTocContent = React25.useMemo(() => {
41814
+ const desktopTocContent = React28.useMemo(() => {
41974
41815
  if (tocSlot) return null;
41975
41816
  if (!sections || sections.length === 0) return null;
41976
41817
  return /* @__PURE__ */ jsx(
@@ -41987,7 +41828,7 @@ function ArticleCompactTocComponent({
41987
41828
  }
41988
41829
  );
41989
41830
  }, [tocSlot, sections, tocClassName, renderTocLinks]);
41990
- const heroMediaContent = React25.useMemo(() => {
41831
+ const heroMediaContent = React28.useMemo(() => {
41991
41832
  if (heroMediaSlot) return heroMediaSlot;
41992
41833
  if (!heroImageSrc) return null;
41993
41834
  return /* @__PURE__ */ jsx(
@@ -42117,10 +41958,10 @@ function ArticleChaptersAuthorComponent({
42117
41958
  variant: "default"
42118
41959
  }
42119
41960
  ] : []);
42120
- const [activeChapter, setActiveChapter] = React25.useState(
41961
+ const [activeChapter, setActiveChapter] = React28.useState(
42121
41962
  chapters?.[0]?.id || ""
42122
41963
  );
42123
- React25.useEffect(() => {
41964
+ React28.useEffect(() => {
42124
41965
  if (!enableChapterTracking || !chapters || chapters.length === 0) return;
42125
41966
  const observer = new IntersectionObserver(
42126
41967
  (entries) => {
@@ -42138,12 +41979,12 @@ function ArticleChaptersAuthorComponent({
42138
41979
  });
42139
41980
  return () => observer.disconnect();
42140
41981
  }, [chapters, enableChapterTracking]);
42141
- const breadcrumbsContent = React25.useMemo(() => {
41982
+ const breadcrumbsContent = React28.useMemo(() => {
42142
41983
  if (breadcrumbsSlot) return breadcrumbsSlot;
42143
41984
  if (!breadcrumbs || breadcrumbs.length === 0) return null;
42144
41985
  return /* @__PURE__ */ jsx(Breadcrumb, { className: cn("mb-8 md:mb-20", breadcrumbClassName), children: /* @__PURE__ */ jsxs(BreadcrumbList, { children: [
42145
41986
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: "#", children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/home", size: 16 }) }) }) }),
42146
- breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
41987
+ breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
42147
41988
  /* @__PURE__ */ jsx(BreadcrumbSeparator, {}),
42148
41989
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: crumb.href, children: crumb.label }) }) })
42149
41990
  ] }, index)),
@@ -42151,7 +41992,7 @@ function ArticleChaptersAuthorComponent({
42151
41992
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbPage, { children: typeof currentPage === "string" ? currentPage : currentPage }) })
42152
41993
  ] }) });
42153
41994
  }, [breadcrumbsSlot, breadcrumbs, currentPage, breadcrumbClassName]);
42154
- const chaptersNavContent = React25.useMemo(() => {
41995
+ const chaptersNavContent = React28.useMemo(() => {
42155
41996
  if (chaptersSlot) return chaptersSlot;
42156
41997
  if (!chapters || chapters.length === 0) return null;
42157
41998
  return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border p-4", chaptersClassName), children: [
@@ -42159,7 +42000,7 @@ function ArticleChaptersAuthorComponent({
42159
42000
  /* @__PURE__ */ jsx("nav", { className: "space-y-2", children: chapters.map((chapter) => {
42160
42001
  const isActive = activeChapter === chapter.id;
42161
42002
  if (renderChapterLink) {
42162
- return /* @__PURE__ */ jsx(React25.Fragment, { children: renderChapterLink(chapter, isActive) }, chapter.id);
42003
+ return /* @__PURE__ */ jsx(React28.Fragment, { children: renderChapterLink(chapter, isActive) }, chapter.id);
42163
42004
  }
42164
42005
  return /* @__PURE__ */ jsxs(
42165
42006
  Pressable,
@@ -42185,7 +42026,7 @@ function ArticleChaptersAuthorComponent({
42185
42026
  renderChapterLink,
42186
42027
  chaptersClassName
42187
42028
  ]);
42188
- const authorCardContent = React25.useMemo(() => {
42029
+ const authorCardContent = React28.useMemo(() => {
42189
42030
  if (authorSlot) return authorSlot;
42190
42031
  if (!author) return null;
42191
42032
  let socialLinksContent = null;
@@ -42246,7 +42087,7 @@ function ArticleChaptersAuthorComponent({
42246
42087
  socialLinksContent
42247
42088
  ] });
42248
42089
  }, [authorSlot, author, authorClassName]);
42249
- const heroMediaContent = React25.useMemo(() => {
42090
+ const heroMediaContent = React28.useMemo(() => {
42250
42091
  if (heroMediaSlot) return heroMediaSlot;
42251
42092
  if (!heroImageSrc) return null;
42252
42093
  return /* @__PURE__ */ jsx(
@@ -42268,7 +42109,7 @@ function ArticleChaptersAuthorComponent({
42268
42109
  heroImageClassName,
42269
42110
  optixFlowConfig
42270
42111
  ]);
42271
- const conclusionContent = React25.useMemo(() => {
42112
+ const conclusionContent = React28.useMemo(() => {
42272
42113
  if (conclusionSlot) return conclusionSlot;
42273
42114
  if (!conclusionTitle && !conclusionDescription && (!conclusionActions || conclusionActions.length === 0))
42274
42115
  return null;
@@ -42420,7 +42261,7 @@ function ArticleSplitAnimatedComponent({
42420
42261
  }
42421
42262
  ] : []);
42422
42263
  const MotionWrapper = enableAnimations ? motion.div : "div";
42423
- const categoryContent = React25.useMemo(() => {
42264
+ const categoryContent = React28.useMemo(() => {
42424
42265
  if (categorySlot) return categorySlot;
42425
42266
  if (!category) return null;
42426
42267
  return /* @__PURE__ */ jsx(
@@ -42435,7 +42276,7 @@ function ArticleSplitAnimatedComponent({
42435
42276
  }
42436
42277
  );
42437
42278
  }, [categorySlot, category, categoryHref, categoryClassName]);
42438
- const heroMediaContent = React25.useMemo(() => {
42279
+ const heroMediaContent = React28.useMemo(() => {
42439
42280
  if (heroMediaSlot) return heroMediaSlot;
42440
42281
  if (!image) return null;
42441
42282
  return /* @__PURE__ */ jsx(
@@ -42448,7 +42289,7 @@ function ArticleSplitAnimatedComponent({
42448
42289
  }
42449
42290
  );
42450
42291
  }, [heroMediaSlot, image, imageAlt, title, optixFlowConfig]);
42451
- const authorContent = React25.useMemo(() => {
42292
+ const authorContent = React28.useMemo(() => {
42452
42293
  if (authorSlot) return authorSlot;
42453
42294
  if (!authorName) return null;
42454
42295
  return /* @__PURE__ */ jsxs("div", { className: cn("mt-8 flex items-center gap-4", authorClassName), children: [
@@ -42476,7 +42317,7 @@ function ArticleSplitAnimatedComponent({
42476
42317
  authorRole,
42477
42318
  authorClassName
42478
42319
  ]);
42479
- const ctaContent = React25.useMemo(() => {
42320
+ const ctaContent = React28.useMemo(() => {
42480
42321
  if (ctaSlot) return ctaSlot;
42481
42322
  if (!ctaActions || ctaActions.length === 0) return null;
42482
42323
  return /* @__PURE__ */ jsx("div", { className: cn("mt-8 flex flex-wrap gap-3", ctaClassName), children: ctaActions.map((action, index) => {
@@ -43933,7 +43774,7 @@ function FaqSidebarNavigation({
43933
43774
  accordionTriggerClassName,
43934
43775
  accordionContentClassName
43935
43776
  }) {
43936
- const [activeCategory, setActiveCategory] = React25.useState(
43777
+ const [activeCategory, setActiveCategory] = React28.useState(
43937
43778
  categories && categories.length > 1 ? "all" : categories?.[0]?.id || ""
43938
43779
  );
43939
43780
  const filteredCategories = useMemo(() => {
@@ -44822,7 +44663,7 @@ function FaqSplitHero({
44822
44663
  imageArea
44823
44664
  ] }) });
44824
44665
  }
44825
- var Controls = React25.memo(
44666
+ var Controls = React28.memo(
44826
44667
  ({
44827
44668
  handleNext,
44828
44669
  handlePrevious,
@@ -44853,7 +44694,7 @@ var Controls = React25.memo(
44853
44694
  ] });
44854
44695
  }
44855
44696
  );
44856
- var FeatureCard = React25.memo(
44697
+ var FeatureCard = React28.memo(
44857
44698
  ({ feature, isActive, onClick }) => {
44858
44699
  const variants2 = useMemo(
44859
44700
  () => ({
@@ -44961,7 +44802,7 @@ var FeatureCard = React25.memo(
44961
44802
  ) });
44962
44803
  }
44963
44804
  );
44964
- var FeaturesDesktop = React25.memo(
44805
+ var FeaturesDesktop = React28.memo(
44965
44806
  ({
44966
44807
  features,
44967
44808
  handleNext,
@@ -44995,7 +44836,7 @@ var FeaturesDesktop = React25.memo(
44995
44836
  ] });
44996
44837
  }
44997
44838
  );
44998
- var FeaturesMobile = React25.memo(
44839
+ var FeaturesMobile = React28.memo(
44999
44840
  ({
45000
44841
  features,
45001
44842
  handleNext,
@@ -45086,8 +44927,8 @@ function FeatureAnimatedCarousel({
45086
44927
  spacing = "py-12 md:py-32",
45087
44928
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8"
45088
44929
  }) {
45089
- const [activeIndex, setActiveIndex] = React25.useState(0);
45090
- const [direction, setDirection] = React25.useState(1);
44930
+ const [activeIndex, setActiveIndex] = React28.useState(0);
44931
+ const [direction, setDirection] = React28.useState(1);
45091
44932
  const handleNext = useCallback(() => {
45092
44933
  if (features && activeIndex < features.length - 1) {
45093
44934
  setDirection(1);
@@ -45949,7 +45790,7 @@ function FooterInfoCardsAccordion({
45949
45790
  patternOpacity,
45950
45791
  optixFlowConfig
45951
45792
  }) {
45952
- const [email, setEmail] = React25.useState("");
45793
+ const [email, setEmail] = React28.useState("");
45953
45794
  (/* @__PURE__ */ new Date()).getFullYear();
45954
45795
  const handleSubmit = (e) => {
45955
45796
  e.preventDefault();
@@ -46254,13 +46095,13 @@ function CaseStudiesImageGrid({
46254
46095
  patternOpacity,
46255
46096
  optixFlowConfig
46256
46097
  }) {
46257
- const getGridClass = React25.useCallback((index) => {
46098
+ const getGridClass = React28.useCallback((index) => {
46258
46099
  if (index === 0 || index === 4) {
46259
46100
  return "row-span-2 aspect-square lg:aspect-auto";
46260
46101
  }
46261
46102
  return "aspect-3/2 md:aspect-2/1";
46262
46103
  }, []);
46263
- const renderedItems = React25.useMemo(() => {
46104
+ const renderedItems = React28.useMemo(() => {
46264
46105
  if (itemsSlot) return itemsSlot;
46265
46106
  if (!items || items.length === 0) return null;
46266
46107
  return items.map((item, index) => /* @__PURE__ */ jsxs(
@@ -46346,7 +46187,7 @@ function CaseStudiesTestimonialStats({
46346
46187
  patternOpacity,
46347
46188
  optixFlowConfig
46348
46189
  }) {
46349
- const renderedTestimonials = React25.useMemo(() => {
46190
+ const renderedTestimonials = React28.useMemo(() => {
46350
46191
  if (testimonialsSlot) return testimonialsSlot;
46351
46192
  if (!testimonials || testimonials.length === 0) return null;
46352
46193
  return testimonials.map((testimonial, index) => /* @__PURE__ */ jsxs("div", { className: testimonialItemClassName, children: [
@@ -49819,7 +49660,7 @@ function CaseStudiesFeaturedBorder({
49819
49660
  patternOpacity,
49820
49661
  optixFlowConfig
49821
49662
  }) {
49822
- const renderedFeatured = React25.useMemo(() => {
49663
+ const renderedFeatured = React28.useMemo(() => {
49823
49664
  if (featuredSlot) return featuredSlot;
49824
49665
  if (!featuredCaseStudy) return null;
49825
49666
  return /* @__PURE__ */ jsxs(
@@ -49893,7 +49734,7 @@ function CaseStudiesFeaturedBorder({
49893
49734
  featuredImageClassName,
49894
49735
  optixFlowConfig
49895
49736
  ]);
49896
- const renderedCaseStudies = React25.useMemo(() => {
49737
+ const renderedCaseStudies = React28.useMemo(() => {
49897
49738
  if (caseStudiesSlot) return caseStudiesSlot;
49898
49739
  if (!caseStudies || caseStudies.length === 0) return null;
49899
49740
  return caseStudies.map((item, idx) => /* @__PURE__ */ jsxs(
@@ -50002,7 +49843,7 @@ function CaseStudiesStatsCard({
50002
49843
  patternOpacity,
50003
49844
  optixFlowConfig
50004
49845
  }) {
50005
- const renderedStats = React25.useMemo(() => {
49846
+ const renderedStats = React28.useMemo(() => {
50006
49847
  if (statsSlot) return statsSlot;
50007
49848
  if (!stats || stats.length === 0) return null;
50008
49849
  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: [
@@ -50010,7 +49851,7 @@ function CaseStudiesStatsCard({
50010
49851
  /* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-muted-foreground", children: item.text })
50011
49852
  ] }, `stats-${i}`)) });
50012
49853
  }, [statsSlot, stats, statsClassName]);
50013
- const renderedAuthor = React25.useMemo(() => {
49854
+ const renderedAuthor = React28.useMemo(() => {
50014
49855
  if (authorSlot) return authorSlot;
50015
49856
  if (!author) return null;
50016
49857
  return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2.5", authorClassName), children: [
@@ -50024,7 +49865,7 @@ function CaseStudiesStatsCard({
50024
49865
  ] })
50025
49866
  ] });
50026
49867
  }, [authorSlot, author, authorClassName]);
50027
- const renderedActions = React25.useMemo(() => {
49868
+ const renderedActions = React28.useMemo(() => {
50028
49869
  if (actionsSlot) return actionsSlot;
50029
49870
  if (!actions || actions.length === 0) return null;
50030
49871
  return /* @__PURE__ */ jsx("div", { className: cn("shrink-0", actionsClassName), children: actions.map((action, index) => {
@@ -51328,7 +51169,7 @@ function HeroImageLeftContent({
51328
51169
  }
51329
51170
  );
51330
51171
  }
51331
- var DEFAULT_STYLE_RULES3 = {
51172
+ var DEFAULT_STYLE_RULES7 = {
51332
51173
  formContainer: "",
51333
51174
  fieldsContainer: "",
51334
51175
  fieldClassName: "",
@@ -51399,17 +51240,17 @@ function HeroImageSlider({
51399
51240
  privacyNoticeClassName,
51400
51241
  gridClassName
51401
51242
  }) {
51402
- const formStyleRules = React25.useMemo(() => {
51243
+ const formStyleRules = React28.useMemo(() => {
51403
51244
  return {
51404
- formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES3.formContainer,
51405
- fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES3.fieldsContainer,
51406
- fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES3.fieldClassName,
51407
- formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES3.formClassName,
51408
- successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES3.successMessageClassName,
51409
- errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES3.errorMessageClassName
51245
+ formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES7.formContainer,
51246
+ fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES7.fieldsContainer,
51247
+ fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES7.fieldClassName,
51248
+ formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES7.formClassName,
51249
+ successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES7.successMessageClassName,
51250
+ errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES7.errorMessageClassName
51410
51251
  };
51411
51252
  }, [formEngineSetup?.formLayoutSettings?.styleRules]);
51412
- const formFields = React25.useMemo(() => {
51253
+ const formFields = React28.useMemo(() => {
51413
51254
  if (formEngineSetup && formEngineSetup?.fields && formEngineSetup?.fields?.length > 0) {
51414
51255
  return formEngineSetup.fields;
51415
51256
  } else {
@@ -57172,7 +57013,7 @@ function HeroSplitImageNewsletter({
57172
57013
  onError,
57173
57014
  uploadTokens
57174
57015
  });
57175
- const renderForm = React25.useMemo(() => {
57016
+ const renderForm = React28.useMemo(() => {
57176
57017
  if (formSlot) return formSlot;
57177
57018
  if (!formFields || formFields.length === 0) return null;
57178
57019
  const defaultButtonAction = {
@@ -57251,7 +57092,7 @@ function HeroSplitImageNewsletter({
57251
57092
  resetUpload,
57252
57093
  resetSubmissionState
57253
57094
  ]);
57254
- const renderImage = React25.useMemo(() => {
57095
+ const renderImage = React28.useMemo(() => {
57255
57096
  if (imageSlot) return imageSlot;
57256
57097
  if (!image) return null;
57257
57098
  return /* @__PURE__ */ jsx("div", { className: "relative lg:w-1/2", children: /* @__PURE__ */ jsx(
@@ -58679,7 +58520,7 @@ function HeroSaasDashboardPreview({
58679
58520
  onError,
58680
58521
  uploadTokens
58681
58522
  });
58682
- const renderBadge = React25.useMemo(() => {
58523
+ const renderBadge = React28.useMemo(() => {
58683
58524
  if (badgeSlot) return badgeSlot;
58684
58525
  return /* @__PURE__ */ jsxs(
58685
58526
  "div",
@@ -58694,7 +58535,7 @@ function HeroSaasDashboardPreview({
58694
58535
  }
58695
58536
  );
58696
58537
  }, [badgeSlot, badgeIcon, badgeText]);
58697
- const renderForm = React25.useMemo(() => {
58538
+ const renderForm = React28.useMemo(() => {
58698
58539
  if (formSlot) return formSlot;
58699
58540
  const defaultButtonAction = {
58700
58541
  label: "Start Free Trial",
@@ -58769,7 +58610,7 @@ function HeroSaasDashboardPreview({
58769
58610
  resetUpload,
58770
58611
  resetSubmissionState
58771
58612
  ]);
58772
- const renderBrowserPreview = React25.useMemo(() => {
58613
+ const renderBrowserPreview = React28.useMemo(() => {
58773
58614
  if (browserPreviewSlot) return browserPreviewSlot;
58774
58615
  if (!browserPreview) return null;
58775
58616
  return /* @__PURE__ */ jsxs("div", { className: cn("relative mt-12 md:mt-20", previewClassName), children: [
@@ -61020,7 +60861,7 @@ function HeroEcommerceProductShowcase({
61020
60861
  "flex flex-col md:flex-row items-center gap-4 md:gap-6 pt-8 md:pt-12",
61021
60862
  statsClassName
61022
60863
  ),
61023
- children: stats.map((stat, index) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
60864
+ children: stats.map((stat, index) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
61024
60865
  index > 0 && /* @__PURE__ */ jsx("div", { className: "h-12 w-px bg-border hidden md:flex" }),
61025
60866
  /* @__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: [
61026
60867
  /* @__PURE__ */ jsxs(
@@ -61426,7 +61267,7 @@ function HeroPricingComparison({
61426
61267
  }
61427
61268
  );
61428
61269
  }
61429
- var DEFAULT_STYLE_RULES4 = {
61270
+ var DEFAULT_STYLE_RULES8 = {
61430
61271
  formContainer: "mt-10 flex justify-center items-center w-full max-w-md flex-col gap-4 sm:flex-row",
61431
61272
  fieldsContainer: "",
61432
61273
  fieldClassName: "",
@@ -61464,24 +61305,24 @@ function HeroNewsletterMinimal({
61464
61305
  disclaimerClassName,
61465
61306
  statsClassName
61466
61307
  }) {
61467
- const formStyleRules = React25.useMemo(() => {
61308
+ const formStyleRules = React28.useMemo(() => {
61468
61309
  return {
61469
- formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES4.formContainer,
61470
- fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES4.fieldsContainer,
61471
- fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES4.fieldClassName,
61472
- formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES4.formClassName,
61473
- successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES4.successMessageClassName,
61474
- errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES4.errorMessageClassName
61310
+ formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES8.formContainer,
61311
+ fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES8.fieldsContainer,
61312
+ fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES8.fieldClassName,
61313
+ formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES8.formClassName,
61314
+ successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES8.successMessageClassName,
61315
+ errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES8.errorMessageClassName
61475
61316
  };
61476
61317
  }, [formEngineSetup?.formLayoutSettings?.styleRules]);
61477
- const formFields = React25.useMemo(() => {
61318
+ const formFields = React28.useMemo(() => {
61478
61319
  if (formEngineSetup && formEngineSetup?.fields && formEngineSetup?.fields?.length > 0) {
61479
61320
  return formEngineSetup.fields;
61480
61321
  } else {
61481
61322
  return DEFAULT_FORM_FIELDS45;
61482
61323
  }
61483
61324
  }, [formEngineSetup?.fields]);
61484
- const renderStats = React25.useMemo(() => {
61325
+ const renderStats = React28.useMemo(() => {
61485
61326
  if (statsSlot) return statsSlot;
61486
61327
  if (!stats || stats.length === 0) return null;
61487
61328
  return stats.map((stat, index) => /* @__PURE__ */ jsx("div", { className: cn("flex items-center", stat.className), children: /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
@@ -61507,7 +61348,7 @@ function HeroNewsletterMinimal({
61507
61348
  /* @__PURE__ */ jsx("div", { className: cn("text-sm"), children: stat.label })
61508
61349
  ] }) }, index));
61509
61350
  }, [statsSlot, stats]);
61510
- const renderForm = React25.useMemo(() => {
61351
+ const renderForm = React28.useMemo(() => {
61511
61352
  if (formSlot) return formSlot;
61512
61353
  if (!formEngineSetup) return null;
61513
61354
  const defaultButtonAction = {
@@ -61674,7 +61515,7 @@ function HeroComingSoonCountdown({
61674
61515
  formClassName,
61675
61516
  socialLinksClassName
61676
61517
  }) {
61677
- const [timeLeft, setTimeLeft] = React25.useState(null);
61518
+ const [timeLeft, setTimeLeft] = React28.useState(null);
61678
61519
  const {
61679
61520
  uploadTokens,
61680
61521
  uploadProgress,
@@ -61694,7 +61535,7 @@ function HeroComingSoonCountdown({
61694
61535
  onError,
61695
61536
  uploadTokens
61696
61537
  });
61697
- const calculateTimeLeft = React25.useCallback(() => {
61538
+ const calculateTimeLeft = React28.useCallback(() => {
61698
61539
  if (!countdownDate) return null;
61699
61540
  const now = Date.now();
61700
61541
  const target = countdownDate.getTime();
@@ -61707,7 +61548,7 @@ function HeroComingSoonCountdown({
61707
61548
  seconds: Math.floor(diff % (1e3 * 60) / 1e3)
61708
61549
  };
61709
61550
  }, [countdownDate]);
61710
- React25.useEffect(() => {
61551
+ React28.useEffect(() => {
61711
61552
  setTimeLeft(calculateTimeLeft());
61712
61553
  if (!countdownDate) return;
61713
61554
  const timer = setInterval(() => {
@@ -61718,7 +61559,7 @@ function HeroComingSoonCountdown({
61718
61559
  return () => clearInterval(timer);
61719
61560
  }, [countdownDate, calculateTimeLeft]);
61720
61561
  const showCountdown = countdownSlot || timeLeft;
61721
- const renderForm = React25.useMemo(() => {
61562
+ const renderForm = React28.useMemo(() => {
61722
61563
  if (formSlot) return formSlot;
61723
61564
  const defaultButtonAction = {
61724
61565
  label: "Notify Me",
@@ -61794,7 +61635,7 @@ function HeroComingSoonCountdown({
61794
61635
  resetUpload,
61795
61636
  resetSubmissionState
61796
61637
  ]);
61797
- const renderSocialLinks = React25.useMemo(() => {
61638
+ const renderSocialLinks = React28.useMemo(() => {
61798
61639
  if (socialLinksSlot) return socialLinksSlot;
61799
61640
  if (!socialLinks || socialLinks.length === 0) return null;
61800
61641
  return socialLinks.map((link, index) => /* @__PURE__ */ jsx(
@@ -61926,7 +61767,7 @@ function HeroEventRegistration({
61926
61767
  "flex flex-col md:flex-row items-center gap-4 md:gap-6 pt-8 md:pt-12 w-full md:w-fit",
61927
61768
  statsClassName
61928
61769
  ),
61929
- children: stats.map((stat, index) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
61770
+ children: stats.map((stat, index) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
61930
61771
  index > 0 && /* @__PURE__ */ jsx("div", { className: "h-12 w-px bg-border hidden md:flex" }),
61931
61772
  /* @__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: [
61932
61773
  /* @__PURE__ */ jsxs(
@@ -62266,7 +62107,7 @@ function ComparisonTableTwoColumn({
62266
62107
  patternOpacity,
62267
62108
  optixFlowConfig
62268
62109
  }) {
62269
- const tableContent = React25.useMemo(() => {
62110
+ const tableContent = React28.useMemo(() => {
62270
62111
  if (tableSlot) return tableSlot;
62271
62112
  if (!rows || rows.length === 0) return null;
62272
62113
  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(
@@ -62296,7 +62137,7 @@ function ComparisonTableTwoColumn({
62296
62137
  optixFlowConfig
62297
62138
  }
62298
62139
  ) : optionBLabel && (typeof optionBLabel === "string" ? /* @__PURE__ */ jsx("span", { className: "text-lg font-semibold", children: optionBLabel }) : optionBLabel) }),
62299
- rows.map((row, idx) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
62140
+ rows.map((row, idx) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
62300
62141
  /* @__PURE__ */ jsx("div", { className: "flex items-center border-b p-3 text-base font-medium md:p-4 md:text-lg", children: row.label }),
62301
62142
  /* @__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: [
62302
62143
  row.hasIcon && /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/circle-check-big", size: 20, className: "text-success" }),
@@ -62325,14 +62166,14 @@ function ComparisonTableTwoColumn({
62325
62166
  optionBLabel,
62326
62167
  optixFlowConfig
62327
62168
  ]);
62328
- const headingContent = React25.useMemo(() => {
62169
+ const headingContent = React28.useMemo(() => {
62329
62170
  if (!heading) return null;
62330
62171
  if (typeof heading === "string") {
62331
62172
  return /* @__PURE__ */ jsx("h1", { className: cn("mb-8 text-3xl font-bold md:mb-12 md:text-5xl", headingClassName), children: heading });
62332
62173
  }
62333
62174
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
62334
62175
  }, [heading, headingClassName]);
62335
- const descriptionContent = React25.useMemo(() => {
62176
+ const descriptionContent = React28.useMemo(() => {
62336
62177
  if (!description) return null;
62337
62178
  if (typeof description === "string") {
62338
62179
  return /* @__PURE__ */ jsx("p", { className: cn("mb-8 text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -62379,7 +62220,7 @@ function ComparisonFeatureCards({
62379
62220
  patternOpacity,
62380
62221
  optixFlowConfig
62381
62222
  }) {
62382
- const renderCard = React25.useCallback(
62223
+ const renderCard = React28.useCallback(
62383
62224
  (product, isHighlighted) => /* @__PURE__ */ jsxs(
62384
62225
  "div",
62385
62226
  {
@@ -62435,7 +62276,7 @@ function ComparisonFeatureCards({
62435
62276
  ),
62436
62277
  [cardClassName, optixFlowConfig]
62437
62278
  );
62438
- const cardsContent = React25.useMemo(() => {
62279
+ const cardsContent = React28.useMemo(() => {
62439
62280
  if (cardsSlot) return cardsSlot;
62440
62281
  if (!productA || !productB) return null;
62441
62282
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
@@ -62443,28 +62284,28 @@ function ComparisonFeatureCards({
62443
62284
  renderCard(productB, productB.highlighted ?? false)
62444
62285
  ] });
62445
62286
  }, [cardsSlot, productA, productB, renderCard]);
62446
- const headingContent = React25.useMemo(() => {
62287
+ const headingContent = React28.useMemo(() => {
62447
62288
  if (!heading) return null;
62448
62289
  if (typeof heading === "string") {
62449
62290
  return /* @__PURE__ */ jsx("h1", { className: cn("mb-6 text-4xl font-semibold md:text-7xl", headingClassName), children: heading });
62450
62291
  }
62451
62292
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
62452
62293
  }, [heading, headingClassName]);
62453
- const descriptionContent = React25.useMemo(() => {
62294
+ const descriptionContent = React28.useMemo(() => {
62454
62295
  if (!description) return null;
62455
62296
  if (typeof description === "string") {
62456
62297
  return /* @__PURE__ */ jsx("p", { className: cn("mx-auto max-w-4xl text-muted-foreground md:text-xl", descriptionClassName), children: description });
62457
62298
  }
62458
62299
  return /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description });
62459
62300
  }, [description, descriptionClassName]);
62460
- const suitabilityContent = React25.useMemo(() => {
62301
+ const suitabilityContent = React28.useMemo(() => {
62461
62302
  if (!suitabilityTitle && !suitabilityDescription) return null;
62462
62303
  return /* @__PURE__ */ jsxs("div", { className: suitabilityClassName, children: [
62463
62304
  suitabilityTitle && (typeof suitabilityTitle === "string" ? /* @__PURE__ */ jsx("h2", { className: "mb-4 text-3xl font-semibold", children: suitabilityTitle }) : suitabilityTitle),
62464
62305
  suitabilityDescription && (typeof suitabilityDescription === "string" ? /* @__PURE__ */ jsx("p", { className: "leading-6 text-muted-foreground md:text-lg", children: suitabilityDescription }) : suitabilityDescription)
62465
62306
  ] });
62466
62307
  }, [suitabilityTitle, suitabilityDescription, suitabilityClassName]);
62467
- const differencesContent = React25.useMemo(() => {
62308
+ const differencesContent = React28.useMemo(() => {
62468
62309
  if (!differencesTitle && !differencesDescription) return null;
62469
62310
  return /* @__PURE__ */ jsxs("div", { className: cn("mt-16", differencesClassName), children: [
62470
62311
  differencesTitle && (typeof differencesTitle === "string" ? /* @__PURE__ */ jsx("h2", { className: "mb-4 text-3xl font-semibold", children: differencesTitle }) : differencesTitle),
@@ -62512,7 +62353,7 @@ function ComparisonGridBadges({
62512
62353
  pattern,
62513
62354
  patternOpacity
62514
62355
  }) {
62515
- const featuresContent = React25.useMemo(() => {
62356
+ const featuresContent = React28.useMemo(() => {
62516
62357
  if (featuresSlot) return featuresSlot;
62517
62358
  if (!features || features.length === 0) return null;
62518
62359
  return features.map((feature, idx) => /* @__PURE__ */ jsxs(
@@ -62559,14 +62400,14 @@ function ComparisonGridBadges({
62559
62400
  idx
62560
62401
  ));
62561
62402
  }, [featuresSlot, features, featureCardClassName, badgeClassName, optionALabel, optionBLabel]);
62562
- const headingContent = React25.useMemo(() => {
62403
+ const headingContent = React28.useMemo(() => {
62563
62404
  if (!heading) return null;
62564
62405
  if (typeof heading === "string") {
62565
62406
  return /* @__PURE__ */ jsx("h2", { className: cn("mb-4 text-3xl font-bold md:text-5xl", headingClassName), children: heading });
62566
62407
  }
62567
62408
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
62568
62409
  }, [heading, headingClassName]);
62569
- const descriptionContent = React25.useMemo(() => {
62410
+ const descriptionContent = React28.useMemo(() => {
62570
62411
  if (!description) return null;
62571
62412
  if (typeof description === "string") {
62572
62413
  return /* @__PURE__ */ jsx("p", { className: cn("mx-auto max-w-2xl text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -62614,7 +62455,7 @@ function ComparisonMetricsRows({
62614
62455
  pattern,
62615
62456
  patternOpacity
62616
62457
  }) {
62617
- const metricsContent = React25.useMemo(() => {
62458
+ const metricsContent = React28.useMemo(() => {
62618
62459
  if (metricsSlot) return metricsSlot;
62619
62460
  if (!metrics || metrics.length === 0) return null;
62620
62461
  return /* @__PURE__ */ jsx(
@@ -62654,7 +62495,7 @@ function ComparisonMetricsRows({
62654
62495
  }
62655
62496
  );
62656
62497
  }, [metricsSlot, metrics, metricsClassName, metricRowClassName]);
62657
- const actionsContent = React25.useMemo(() => {
62498
+ const actionsContent = React28.useMemo(() => {
62658
62499
  if (actionsSlot) return actionsSlot;
62659
62500
  if (!actions || actions.length === 0) return null;
62660
62501
  return /* @__PURE__ */ jsx("div", { className: cn("flex justify-end", actionsClassName), children: actions.map((action, idx) => /* @__PURE__ */ jsxs(
@@ -62675,7 +62516,7 @@ function ComparisonMetricsRows({
62675
62516
  idx
62676
62517
  )) });
62677
62518
  }, [actionsSlot, actions, actionsClassName]);
62678
- const headingContent = React25.useMemo(() => {
62519
+ const headingContent = React28.useMemo(() => {
62679
62520
  if (!heading) return null;
62680
62521
  if (typeof heading === "string") {
62681
62522
  return /* @__PURE__ */ jsx(
@@ -62691,7 +62532,7 @@ function ComparisonMetricsRows({
62691
62532
  }
62692
62533
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
62693
62534
  }, [heading, headingClassName]);
62694
- const descriptionContent = React25.useMemo(() => {
62535
+ const descriptionContent = React28.useMemo(() => {
62695
62536
  if (!description) return null;
62696
62537
  if (typeof description === "string") {
62697
62538
  return /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -62754,7 +62595,7 @@ function ComparisonImageCards({
62754
62595
  patternOpacity,
62755
62596
  optixFlowConfig
62756
62597
  }) {
62757
- const renderCard = React25.useCallback(
62598
+ const renderCard = React28.useCallback(
62758
62599
  (option) => /* @__PURE__ */ jsx("div", { className: cn("relative h-full", cardClassName), children: /* @__PURE__ */ jsxs("div", { className: cn(
62759
62600
  "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]",
62760
62601
  getNestedCardBg(background, "accent"),
@@ -62778,7 +62619,7 @@ function ComparisonImageCards({
62778
62619
  ] }) }),
62779
62620
  [cardClassName, optixFlowConfig]
62780
62621
  );
62781
- const cardsContent = React25.useMemo(() => {
62622
+ const cardsContent = React28.useMemo(() => {
62782
62623
  if (cardsSlot) return cardsSlot;
62783
62624
  if (!optionA || !optionB) return null;
62784
62625
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
@@ -62796,14 +62637,14 @@ function ComparisonImageCards({
62796
62637
  )
62797
62638
  ] });
62798
62639
  }, [cardsSlot, optionA, optionB, dividerText, dividerClassName, renderCard]);
62799
- const headingContent = React25.useMemo(() => {
62640
+ const headingContent = React28.useMemo(() => {
62800
62641
  if (!heading) return null;
62801
62642
  if (typeof heading === "string") {
62802
62643
  return /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-medium sm:text-4xl md:text-5xl lg:text-6xl", headingClassName), children: heading });
62803
62644
  }
62804
62645
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
62805
62646
  }, [heading, headingClassName]);
62806
- const descriptionContent = React25.useMemo(() => {
62647
+ const descriptionContent = React28.useMemo(() => {
62807
62648
  if (!description) return null;
62808
62649
  if (typeof description === "string") {
62809
62650
  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 });
@@ -62933,7 +62774,7 @@ function ComparisonTableTabs({
62933
62774
  patternOpacity
62934
62775
  }) {
62935
62776
  const [selectedTab, setSelectedTab] = useState(models?.[0]?.name || "");
62936
- const renderStatusIcon = React25.useCallback((status) => {
62777
+ const renderStatusIcon = React28.useCallback((status) => {
62937
62778
  if (status === "positive") {
62938
62779
  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" }) });
62939
62780
  }
@@ -62942,7 +62783,7 @@ function ComparisonTableTabs({
62942
62783
  }
62943
62784
  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" }) });
62944
62785
  }, []);
62945
- const tableContent = React25.useMemo(() => {
62786
+ const tableContent = React28.useMemo(() => {
62946
62787
  if (tableSlot) return tableSlot;
62947
62788
  if (!models || models.length === 0 || !features || features.length === 0) return null;
62948
62789
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
@@ -63001,14 +62842,14 @@ function ComparisonTableTabs({
63001
62842
  ] }) })
63002
62843
  ] });
63003
62844
  }, [tableSlot, models, features, tabsClassName, tableClassName, tableHeaderClassName, tableCellClassName, selectedTab, renderStatusIcon]);
63004
- const headingContent = React25.useMemo(() => {
62845
+ const headingContent = React28.useMemo(() => {
63005
62846
  if (!heading) return null;
63006
62847
  if (typeof heading === "string") {
63007
62848
  return /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-bold md:text-4xl lg:text-5xl", headingClassName), children: heading });
63008
62849
  }
63009
62850
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
63010
62851
  }, [heading, headingClassName]);
63011
- const descriptionContent = React25.useMemo(() => {
62852
+ const descriptionContent = React28.useMemo(() => {
63012
62853
  if (!description) return null;
63013
62854
  if (typeof description === "string") {
63014
62855
  return /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -63099,7 +62940,7 @@ function ComparisonTableTooltips({
63099
62940
  pattern,
63100
62941
  patternOpacity
63101
62942
  }) {
63102
- const renderCellContent = React25.useCallback(
62943
+ const renderCellContent = React28.useCallback(
63103
62944
  (cell, isHighlighted) => {
63104
62945
  if (typeof cell === "string") {
63105
62946
  return cell;
@@ -63126,7 +62967,7 @@ function ComparisonTableTooltips({
63126
62967
  },
63127
62968
  []
63128
62969
  );
63129
- const tableContent = React25.useMemo(() => {
62970
+ const tableContent = React28.useMemo(() => {
63130
62971
  if (tableSlot) return tableSlot;
63131
62972
  if (!rows || rows.length === 0) return null;
63132
62973
  return /* @__PURE__ */ jsxs(Table, { className: cn("rounded border text-left shadow-lg", tableClassName), children: [
@@ -63152,14 +62993,14 @@ function ComparisonTableTooltips({
63152
62993
  ] }, idx)) })
63153
62994
  ] });
63154
62995
  }, [tableSlot, rows, tableClassName, tableHeaderClassName, tableCellClassName, optionALabel, optionBLabel, renderCellContent]);
63155
- const headingContent = React25.useMemo(() => {
62996
+ const headingContent = React28.useMemo(() => {
63156
62997
  if (!heading) return null;
63157
62998
  if (typeof heading === "string") {
63158
62999
  return /* @__PURE__ */ jsx("h2", { className: cn("mb-4 text-center text-4xl font-semibold", headingClassName), children: heading });
63159
63000
  }
63160
63001
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
63161
63002
  }, [heading, headingClassName]);
63162
- const descriptionContent = React25.useMemo(() => {
63003
+ const descriptionContent = React28.useMemo(() => {
63163
63004
  if (!description) return null;
63164
63005
  if (typeof description === "string") {
63165
63006
  return /* @__PURE__ */ jsx("p", { className: cn("mb-8 text-center text-muted-foreground", descriptionClassName), children: description });
@@ -63201,7 +63042,7 @@ function ComparisonFeatureGrid({
63201
63042
  pattern,
63202
63043
  patternOpacity
63203
63044
  }) {
63204
- const renderStatusIcon = React25.useCallback((status) => {
63045
+ const renderStatusIcon = React28.useCallback((status) => {
63205
63046
  if (status === true) {
63206
63047
  return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/check", size: 20, className: "text-success" });
63207
63048
  }
@@ -63210,7 +63051,7 @@ function ComparisonFeatureGrid({
63210
63051
  }
63211
63052
  return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/x", size: 20, className: "text-destructive" });
63212
63053
  }, []);
63213
- const gridContent = React25.useMemo(() => {
63054
+ const gridContent = React28.useMemo(() => {
63214
63055
  if (gridSlot) return gridSlot;
63215
63056
  if (!features || features.length === 0) return null;
63216
63057
  return /* @__PURE__ */ jsxs(
@@ -63276,14 +63117,14 @@ function ComparisonFeatureGrid({
63276
63117
  optionBLabel,
63277
63118
  renderStatusIcon
63278
63119
  ]);
63279
- const headingContent = React25.useMemo(() => {
63120
+ const headingContent = React28.useMemo(() => {
63280
63121
  if (!heading) return null;
63281
63122
  if (typeof heading === "string") {
63282
63123
  return /* @__PURE__ */ jsx("h2", { className: cn("mb-4 text-center text-4xl font-semibold", headingClassName), children: heading });
63283
63124
  }
63284
63125
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
63285
63126
  }, [heading, headingClassName]);
63286
- const descriptionContent = React25.useMemo(() => {
63127
+ const descriptionContent = React28.useMemo(() => {
63287
63128
  if (!description) return null;
63288
63129
  if (typeof description === "string") {
63289
63130
  return /* @__PURE__ */ jsx("p", { className: cn("mb-8 text-center text-muted-foreground", descriptionClassName), children: description });
@@ -63327,7 +63168,7 @@ function ComparisonAiModels({
63327
63168
  optixFlowConfig
63328
63169
  }) {
63329
63170
  const [hoveredModel, setHoveredModel] = useState(null);
63330
- const renderStatusIcon = React25.useCallback((status) => {
63171
+ const renderStatusIcon = React28.useCallback((status) => {
63331
63172
  if (status === "best") {
63332
63173
  return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/circle-check", size: 16, className: "text-success" });
63333
63174
  }
@@ -63336,7 +63177,7 @@ function ComparisonAiModels({
63336
63177
  }
63337
63178
  return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/minus", size: 16, className: "text-muted-foreground" });
63338
63179
  }, []);
63339
- const getCellClassName = React25.useCallback(
63180
+ const getCellClassName = React28.useCallback(
63340
63181
  (status, modelKey) => {
63341
63182
  const baseClass = "cursor-pointer py-4 text-center font-medium transition-all duration-300";
63342
63183
  let statusClass = "";
@@ -63357,7 +63198,7 @@ function ComparisonAiModels({
63357
63198
  },
63358
63199
  [hoveredModel]
63359
63200
  );
63360
- const getSummaryCardClassName = React25.useCallback(
63201
+ const getSummaryCardClassName = React28.useCallback(
63361
63202
  (modelKey) => {
63362
63203
  const baseClass = "rounded border border-border/30 bg-background/50 p-3 transition-all duration-300";
63363
63204
  if (hoveredModel === modelKey) {
@@ -63372,7 +63213,7 @@ function ComparisonAiModels({
63372
63213
  },
63373
63214
  [hoveredModel]
63374
63215
  );
63375
- const tableContent = React25.useMemo(() => {
63216
+ const tableContent = React28.useMemo(() => {
63376
63217
  if (tableSlot) return tableSlot;
63377
63218
  if (!models || !comparisonData || comparisonData.length === 0) return null;
63378
63219
  return /* @__PURE__ */ jsx(
@@ -63450,7 +63291,7 @@ function ComparisonAiModels({
63450
63291
  getCellClassName,
63451
63292
  renderStatusIcon
63452
63293
  ]);
63453
- const analysisContent = React25.useMemo(() => {
63294
+ const analysisContent = React28.useMemo(() => {
63454
63295
  if (analysisSlot) return analysisSlot;
63455
63296
  if (!models) return null;
63456
63297
  return /* @__PURE__ */ jsx("div", { className: cn(
@@ -63491,14 +63332,14 @@ function ComparisonAiModels({
63491
63332
  ] })
63492
63333
  ] }) });
63493
63334
  }, [analysisSlot, models, analysisClassName, getSummaryCardClassName]);
63494
- const headingContent = React25.useMemo(() => {
63335
+ const headingContent = React28.useMemo(() => {
63495
63336
  if (!heading) return null;
63496
63337
  if (typeof heading === "string") {
63497
63338
  return /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-bold md:text-4xl lg:text-5xl", headingClassName), children: heading });
63498
63339
  }
63499
63340
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
63500
63341
  }, [heading, headingClassName]);
63501
- const descriptionContent = React25.useMemo(() => {
63342
+ const descriptionContent = React28.useMemo(() => {
63502
63343
  if (!description) return null;
63503
63344
  if (typeof description === "string") {
63504
63345
  return /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -63548,7 +63389,7 @@ function ComparisonLegacyModern({
63548
63389
  pattern,
63549
63390
  patternOpacity
63550
63391
  }) {
63551
- const columnsContent = React25.useMemo(() => {
63392
+ const columnsContent = React28.useMemo(() => {
63552
63393
  if (columnsSlot) return columnsSlot;
63553
63394
  if (!legacyFeatures || legacyFeatures.length === 0 || !modernFeatures || modernFeatures.length === 0)
63554
63395
  return null;
@@ -63560,7 +63401,7 @@ function ComparisonLegacyModern({
63560
63401
  legacyColumnClassName
63561
63402
  ), children: [
63562
63403
  legacyTitle && (typeof legacyTitle === "string" ? /* @__PURE__ */ jsx("h3", { className: "text-2xl font-medium", children: legacyTitle }) : legacyTitle),
63563
- /* @__PURE__ */ jsx("ul", { className: "mt-9 space-y-3", children: legacyFeatures.map((feature, idx) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
63404
+ /* @__PURE__ */ jsx("ul", { className: "mt-9 space-y-3", children: legacyFeatures.map((feature, idx) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
63564
63405
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
63565
63406
  /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/x", size: 16, className: "my-1.5 shrink-0 text-muted-foreground" }),
63566
63407
  /* @__PURE__ */ jsx("li", { className: "text-sm", children: feature.text })
@@ -63577,7 +63418,7 @@ function ComparisonLegacyModern({
63577
63418
  ),
63578
63419
  children: [
63579
63420
  modernTitle && (typeof modernTitle === "string" ? /* @__PURE__ */ jsx("h3", { className: "text-2xl font-medium", children: modernTitle }) : modernTitle),
63580
- /* @__PURE__ */ jsx("ul", { className: "mt-9 space-y-3", children: modernFeatures.map((feature, idx) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
63421
+ /* @__PURE__ */ jsx("ul", { className: "mt-9 space-y-3", children: modernFeatures.map((feature, idx) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
63581
63422
  /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2 text-sm", children: [
63582
63423
  /* @__PURE__ */ jsx("span", { className: "text-lg", children: feature.emoji }),
63583
63424
  feature.text
@@ -63589,7 +63430,7 @@ function ComparisonLegacyModern({
63589
63430
  )
63590
63431
  ] });
63591
63432
  }, [columnsSlot, legacyFeatures, modernFeatures, legacyTitle, modernTitle, legacyColumnClassName, modernColumnClassName]);
63592
- const headingContent = React25.useMemo(() => {
63433
+ const headingContent = React28.useMemo(() => {
63593
63434
  if (!heading && !headingHighlight) return null;
63594
63435
  return /* @__PURE__ */ jsxs("h2", { className: cn("text-4xl font-medium md:text-5xl lg:text-7xl", headingClassName), children: [
63595
63436
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
@@ -63602,7 +63443,7 @@ function ComparisonLegacyModern({
63602
63443
  ] }) : headingHighlight)
63603
63444
  ] });
63604
63445
  }, [heading, headingHighlight, headingClassName, headingHighlightClassName]);
63605
- const descriptionContent = React25.useMemo(() => {
63446
+ const descriptionContent = React28.useMemo(() => {
63606
63447
  if (!description) return null;
63607
63448
  if (typeof description === "string") {
63608
63449
  return /* @__PURE__ */ jsx("p", { className: cn("text-lg", descriptionClassName), children: description });
@@ -63775,7 +63616,7 @@ var NavbarMobileMenu = ({
63775
63616
  closeIconClassName,
63776
63617
  title = "Mobile Navigation"
63777
63618
  }) => {
63778
- React25.useEffect(() => {
63619
+ React28.useEffect(() => {
63779
63620
  if (open) {
63780
63621
  const originalOverflow = document.body.style.overflow;
63781
63622
  document.body.style.overflow = "hidden";
@@ -64004,7 +63845,7 @@ var NavbarDropdownMenu = ({
64004
63845
  patternOpacity,
64005
63846
  optixFlowConfig
64006
63847
  }) => {
64007
- const [open, setOpen] = React25.useState(false);
63848
+ const [open, setOpen] = React28.useState(false);
64008
63849
  const renderAuthActions = useMemo(() => {
64009
63850
  if (authActionsSlot) return authActionsSlot;
64010
63851
  if (!authActions || authActions.length === 0) return null;
@@ -64230,7 +64071,7 @@ var NavbarCenteredMenu = ({
64230
64071
  patternOpacity,
64231
64072
  optixFlowConfig
64232
64073
  }) => {
64233
- const [open, setOpen] = React25.useState(false);
64074
+ const [open, setOpen] = React28.useState(false);
64234
64075
  const renderAuthActions = useMemo(() => {
64235
64076
  if (authActionsSlot) return authActionsSlot;
64236
64077
  if (!authActions || authActions.length === 0) return null;
@@ -64370,7 +64211,7 @@ var DesktopMenuItem = ({
64370
64211
  index,
64371
64212
  optixFlowConfig
64372
64213
  }) => {
64373
- const imagesRef = React25.useRef([]);
64214
+ const imagesRef = React28.useRef([]);
64374
64215
  const layout = link.layout || "simple-grid";
64375
64216
  const handleMouseEnter = (event) => {
64376
64217
  const index2 = Number(event.currentTarget.getAttribute("data-index"));
@@ -65605,7 +65446,7 @@ var NavbarFeatureGrid = ({
65605
65446
  patternOpacity,
65606
65447
  optixFlowConfig
65607
65448
  }) => {
65608
- const [open, setOpen] = React25.useState(false);
65449
+ const [open, setOpen] = React28.useState(false);
65609
65450
  const renderAuthActions = useMemo(() => {
65610
65451
  if (authActionsSlot) return authActionsSlot;
65611
65452
  if (!authActions || authActions.length === 0) return null;
@@ -68815,7 +68656,7 @@ var DesktopMenuItem7 = ({
68815
68656
  if (item.groups && item.groups.length > 0) {
68816
68657
  return /* @__PURE__ */ jsxs(NavigationMenuItem, { value: `${index}`, children: [
68817
68658
  /* @__PURE__ */ jsx(NavigationMenuTrigger, { children: item.label }),
68818
- /* @__PURE__ */ jsx(NavigationMenuContent, { className: "p-0", children: /* @__PURE__ */ jsx("div", { className: "flex", children: item.groups.map((group, groupIndex) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
68659
+ /* @__PURE__ */ jsx(NavigationMenuContent, { className: "p-0", children: /* @__PURE__ */ jsx("div", { className: "flex", children: item.groups.map((group, groupIndex) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
68819
68660
  groupIndex > 0 && /* @__PURE__ */ jsx(
68820
68661
  Separator,
68821
68662
  {
@@ -69567,7 +69408,7 @@ var NavbarSimpleLinks = ({
69567
69408
  const renderNavItems = useMemo(() => {
69568
69409
  if (navItemsSlot) return navItemsSlot;
69569
69410
  if (!navItems || navItems.length === 0) return null;
69570
- return navItems.map((item) => /* @__PURE__ */ jsx(React25.Fragment, { children: /* @__PURE__ */ jsx(NavigationMenuItem, { children: /* @__PURE__ */ jsx(
69411
+ return navItems.map((item) => /* @__PURE__ */ jsx(React28.Fragment, { children: /* @__PURE__ */ jsx(NavigationMenuItem, { children: /* @__PURE__ */ jsx(
69571
69412
  NavigationMenuLink,
69572
69413
  {
69573
69414
  "data-nav-item": item.name,
@@ -74596,7 +74437,7 @@ function PricingFullComparison({
74596
74437
  resolvedPlanIds[index]
74597
74438
  ))
74598
74439
  ] }) }),
74599
- /* @__PURE__ */ jsx("tbody", { children: categories.map((category) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
74440
+ /* @__PURE__ */ jsx("tbody", { children: categories.map((category) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
74600
74441
  /* @__PURE__ */ jsx("tr", { className: cn(getNestedCardBg(background), getNestedCardTextColor(background), categoryRowClassName), children: /* @__PURE__ */ jsx(
74601
74442
  "td",
74602
74443
  {
@@ -79197,9 +79038,9 @@ function ProcessStickySteps({
79197
79038
  );
79198
79039
  }
79199
79040
  var usePrevious = (value) => {
79200
- const [prev, setPrev] = React25.useState(void 0);
79201
- const ref = React25.useRef(value);
79202
- React25.useEffect(() => {
79041
+ const [prev, setPrev] = React28.useState(void 0);
79042
+ const ref = React28.useRef(value);
79043
+ React28.useEffect(() => {
79203
79044
  setPrev(ref.current);
79204
79045
  ref.current = value;
79205
79046
  }, [value]);
@@ -79212,12 +79053,12 @@ var ProcessCard = ({
79212
79053
  itemClassName,
79213
79054
  background
79214
79055
  }) => {
79215
- const ref = React25.useRef(null);
79056
+ const ref = React28.useRef(null);
79216
79057
  const itemInView = useInView(ref, {
79217
79058
  amount: 0,
79218
79059
  margin: "0px 0px -60% 0px"
79219
79060
  });
79220
- React25.useEffect(() => {
79061
+ React28.useEffect(() => {
79221
79062
  if (itemInView) {
79222
79063
  setActive(index);
79223
79064
  }
@@ -79267,7 +79108,7 @@ function ProcessScrollImage({
79267
79108
  ctaText,
79268
79109
  ctaUrl
79269
79110
  }) {
79270
- const [active, setActive] = React25.useState(0);
79111
+ const [active, setActive] = React28.useState(0);
79271
79112
  const previousActive = usePrevious(active);
79272
79113
  const resolvedHeading = title ?? heading;
79273
79114
  const resolvedActions = actions ?? (ctaText && ctaUrl ? [
@@ -79451,7 +79292,7 @@ var ProcessCard2 = ({
79451
79292
  hoverImageClassName,
79452
79293
  background
79453
79294
  }) => {
79454
- const [isHovered, setIsHovered] = React25.useState(false);
79295
+ const [isHovered, setIsHovered] = React28.useState(false);
79455
79296
  const titleText = typeof step.title === "string" ? step.title : `Step ${index + 1}`;
79456
79297
  return /* @__PURE__ */ jsxs(
79457
79298
  "li",
@@ -79775,7 +79616,7 @@ function ProcessExpandableTimeline({
79775
79616
  // Backwards compatibility
79776
79617
  title
79777
79618
  }) {
79778
- const [expandedIndex, setExpandedIndex] = React25.useState(null);
79619
+ const [expandedIndex, setExpandedIndex] = React28.useState(null);
79779
79620
  const resolvedHeading = title ?? heading;
79780
79621
  const toggleExpand = (index) => {
79781
79622
  setExpandedIndex(expandedIndex === index ? null : index);
@@ -84546,7 +84387,7 @@ function ListAchievementsShowcase({
84546
84387
  if (!items || items.length === 0) return null;
84547
84388
  return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col", itemsClassName), children: [
84548
84389
  /* @__PURE__ */ jsx(Separator, {}),
84549
- items.map((item, index) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
84390
+ items.map((item, index) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
84550
84391
  /* @__PURE__ */ jsxs(
84551
84392
  "div",
84552
84393
  {
@@ -84666,7 +84507,7 @@ function ListCareerTimeline({
84666
84507
  const renderExperiences = useMemo(() => {
84667
84508
  if (experiencesSlot) return experiencesSlot;
84668
84509
  if (!experiences || experiences.length === 0) return null;
84669
- return /* @__PURE__ */ jsx("div", { className: experiencesClassName, children: experiences.map((experience, idx) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
84510
+ return /* @__PURE__ */ jsx("div", { className: experiencesClassName, children: experiences.map((experience, idx) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
84670
84511
  /* @__PURE__ */ jsx(Separator, {}),
84671
84512
  /* @__PURE__ */ jsxs(
84672
84513
  "div",
@@ -84687,7 +84528,7 @@ function ListCareerTimeline({
84687
84528
  const renderAwards = useMemo(() => {
84688
84529
  if (awardsSlot) return awardsSlot;
84689
84530
  if (!awards || awards.length === 0) return null;
84690
- return /* @__PURE__ */ jsx("div", { className: awardsClassName, children: awards.map((award, idx) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
84531
+ return /* @__PURE__ */ jsx("div", { className: awardsClassName, children: awards.map((award, idx) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
84691
84532
  /* @__PURE__ */ jsx(Separator, {}),
84692
84533
  /* @__PURE__ */ jsxs(
84693
84534
  "div",
@@ -84822,7 +84663,7 @@ function ListMetricsDashboard({
84822
84663
  activeCategory: controlledActiveCategory,
84823
84664
  onActiveCategoryChange
84824
84665
  }) {
84825
- const [internalActiveTab, setInternalActiveTab] = React25.useState("all");
84666
+ const [internalActiveTab, setInternalActiveTab] = React28.useState("all");
84826
84667
  const activeTab = controlledActiveCategory ?? internalActiveTab;
84827
84668
  const handleTabChange = (value) => {
84828
84669
  if (onActiveCategoryChange) {
@@ -85306,7 +85147,7 @@ function ListSearchableGrid({
85306
85147
  searchTerm: controlledSearchTerm,
85307
85148
  onSearchTermChange
85308
85149
  }) {
85309
- const [internalSearchTerm, setInternalSearchTerm] = React25.useState("");
85150
+ const [internalSearchTerm, setInternalSearchTerm] = React28.useState("");
85310
85151
  const searchTerm = controlledSearchTerm ?? internalSearchTerm;
85311
85152
  const handleSearchChange = (value) => {
85312
85153
  if (onSearchTermChange) {
@@ -85315,7 +85156,7 @@ function ListSearchableGrid({
85315
85156
  setInternalSearchTerm(value);
85316
85157
  }
85317
85158
  };
85318
- const filteredItems = React25.useMemo(() => {
85159
+ const filteredItems = React28.useMemo(() => {
85319
85160
  if (!searchTerm) {
85320
85161
  return items ?? [];
85321
85162
  }
@@ -85478,7 +85319,7 @@ function ListSearchableGrid({
85478
85319
  }
85479
85320
  );
85480
85321
  }
85481
- var { useMemo: useMemo445 } = React25;
85322
+ var { useMemo: useMemo445 } = React28;
85482
85323
  function OfferModalNewsletterDiscount({
85483
85324
  title,
85484
85325
  emailPlaceholder,
@@ -85627,7 +85468,7 @@ function OfferModalNewsletterDiscount({
85627
85468
  }
85628
85469
  ) });
85629
85470
  }
85630
- var { useMemo: useMemo446 } = React25;
85471
+ var { useMemo: useMemo446 } = React28;
85631
85472
  function OfferModalMembershipImage({
85632
85473
  overline,
85633
85474
  title,
@@ -85916,7 +85757,7 @@ function SheetDescription({
85916
85757
  }
85917
85758
  );
85918
85759
  }
85919
- var { useMemo: useMemo447 } = React25;
85760
+ var { useMemo: useMemo447 } = React28;
85920
85761
  function OfferModalSheetNewsletter({
85921
85762
  logo,
85922
85763
  logoSlot,
@@ -86665,10 +86506,10 @@ function ProjectDetailSidebarNavigation(props) {
86665
86506
  heroImageClassName,
86666
86507
  metadataClassName
86667
86508
  } = props;
86668
- const [activeSection, setActiveSection] = React25.useState(
86509
+ const [activeSection, setActiveSection] = React28.useState(
86669
86510
  sections?.[0]?.id || ""
86670
86511
  );
86671
- React25.useEffect(() => {
86512
+ React28.useEffect(() => {
86672
86513
  const handleScroll = () => {
86673
86514
  const sectionElements = sections?.map(
86674
86515
  (section) => document.getElementById(section.id)
@@ -89528,7 +89369,7 @@ function ProjectDetailTabbedCaseStudy(props) {
89528
89369
  testimonialClassName,
89529
89370
  toolsClassName
89530
89371
  } = props;
89531
- const [activeTab, setActiveTab] = React25.useState(tabs?.[0]?.id || "");
89372
+ const [activeTab, setActiveTab] = React28.useState(tabs?.[0]?.id || "");
89532
89373
  const renderedBackAction = useMemo(() => {
89533
89374
  if (backActionSlot) return backActionSlot;
89534
89375
  if (!backAction) return null;
@@ -89916,7 +89757,7 @@ function RevealImage({
89916
89757
  index,
89917
89758
  optixFlowConfig
89918
89759
  }) {
89919
- const ref = React25.useRef(null);
89760
+ const ref = React28.useRef(null);
89920
89761
  const { scrollYProgress } = useScroll({
89921
89762
  target: ref,
89922
89763
  offset: ["start end", "end start"]
@@ -90111,7 +89952,7 @@ function ParallaxSection({
90111
89952
  index,
90112
89953
  optixFlowConfig
90113
89954
  }) {
90114
- const ref = React25.useRef(null);
89955
+ const ref = React28.useRef(null);
90115
89956
  const { scrollYProgress } = useScroll({
90116
89957
  target: ref,
90117
89958
  offset: ["start end", "end start"]
@@ -90184,7 +90025,7 @@ function ProjectDetailParallaxScroll(props) {
90184
90025
  heroImageClassName,
90185
90026
  sectionsClassName
90186
90027
  } = props;
90187
- const heroRef = React25.useRef(null);
90028
+ const heroRef = React28.useRef(null);
90188
90029
  const { scrollYProgress } = useScroll({
90189
90030
  target: heroRef,
90190
90031
  offset: ["start start", "end start"]
@@ -90722,7 +90563,7 @@ function IndustriesExpandableShowcase({
90722
90563
  patternClassName,
90723
90564
  optixFlowConfig
90724
90565
  }) {
90725
- const [activeContractor, setActiveContractor] = React25.useState(
90566
+ const [activeContractor, setActiveContractor] = React28.useState(
90726
90567
  contractors?.[0]?.id || ""
90727
90568
  );
90728
90569
  const handleContractorHover = (contractorId) => {
@@ -91375,7 +91216,7 @@ function ResourceDetailDocumentSidebar({
91375
91216
  }) {
91376
91217
  const renderedBreadcrumbs = useMemo(() => {
91377
91218
  if (breadcrumbsSlot) return breadcrumbsSlot;
91378
- return /* @__PURE__ */ jsx(Breadcrumb, { className: breadcrumbsClassName, children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumbs?.map((crumb, index) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
91219
+ return /* @__PURE__ */ jsx(Breadcrumb, { className: breadcrumbsClassName, children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumbs?.map((crumb, index) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
91379
91220
  /* @__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 }) }),
91380
91221
  index < (breadcrumbs?.length || 0) - 1 && /* @__PURE__ */ jsx(BreadcrumbSeparator, {})
91381
91222
  ] }, index)) }) });
@@ -94776,8 +94617,8 @@ function ServicesListTableHover({
94776
94617
  patternOpacity,
94777
94618
  optixFlowConfig
94778
94619
  }) {
94779
- const [hoveredIndex, setHoveredIndex] = React25.useState(null);
94780
- const [mousePosition, setMousePosition] = React25.useState({ x: 0, y: 0 });
94620
+ const [hoveredIndex, setHoveredIndex] = React28.useState(null);
94621
+ const [mousePosition, setMousePosition] = React28.useState({ x: 0, y: 0 });
94781
94622
  const handleMouseMove = (e) => {
94782
94623
  setMousePosition({ x: e.clientX, y: e.clientY });
94783
94624
  };
@@ -95027,7 +94868,7 @@ function ServicesListStickyImage({
95027
94868
  patternOpacity,
95028
94869
  optixFlowConfig
95029
94870
  }) {
95030
- const [activeIndex, setActiveIndex] = React25.useState(0);
94871
+ const [activeIndex, setActiveIndex] = React28.useState(0);
95031
94872
  const renderServices = () => {
95032
94873
  if (servicesSlot) return servicesSlot;
95033
94874
  if (!services || services.length === 0) return null;
@@ -95279,8 +95120,8 @@ function ServicesListVideoShowcase({
95279
95120
  patternOpacity,
95280
95121
  optixFlowConfig
95281
95122
  }) {
95282
- const [playingIndex, setPlayingIndex] = React25.useState(null);
95283
- const videoRefs = React25.useRef([]);
95123
+ const [playingIndex, setPlayingIndex] = React28.useState(null);
95124
+ const videoRefs = React28.useRef([]);
95284
95125
  const handleMouseEnter = (index) => {
95285
95126
  setPlayingIndex(index);
95286
95127
  videoRefs.current[index]?.play();
@@ -98573,7 +98414,7 @@ function StatsCircularProgress({
98573
98414
  statInfoClassName
98574
98415
  }) {
98575
98416
  const effectiveDefaultCategory = defaultCategory || (categories && categories.length > 0 ? categories[0].id : "");
98576
- const [category, setCategory] = React25.useState(effectiveDefaultCategory);
98417
+ const [category, setCategory] = React28.useState(effectiveDefaultCategory);
98577
98418
  const badgeContent = useMemo(() => {
98578
98419
  if (badgeSlot) return badgeSlot;
98579
98420
  if (!badge) return null;
@@ -98866,8 +98707,8 @@ function StatsCardGroup({
98866
98707
  );
98867
98708
  }
98868
98709
  function useAnimatedCounter(endValue, duration = 2e3, isVisible) {
98869
- const [count, setCount] = React25.useState(0);
98870
- React25.useEffect(() => {
98710
+ const [count, setCount] = React28.useState(0);
98711
+ React28.useEffect(() => {
98871
98712
  if (!isVisible) return;
98872
98713
  let startTime = null;
98873
98714
  let animationFrame;
@@ -98955,9 +98796,9 @@ function StatsAnimatedCounter({
98955
98796
  statLabelClassName,
98956
98797
  statIconClassName
98957
98798
  }) {
98958
- const [isVisible, setIsVisible] = React25.useState(false);
98959
- const sectionRef = React25.useRef(null);
98960
- React25.useEffect(() => {
98799
+ const [isVisible, setIsVisible] = React28.useState(false);
98800
+ const sectionRef = React28.useRef(null);
98801
+ React28.useEffect(() => {
98961
98802
  const observer = new IntersectionObserver(
98962
98803
  ([entry]) => {
98963
98804
  if (entry.isIntersecting) {
@@ -99045,8 +98886,8 @@ function StatsAnimatedCounter({
99045
98886
  );
99046
98887
  }
99047
98888
  function useNumberTicker(endValue, duration = 2500, isVisible, decimals = 0) {
99048
- const [displayValue, setDisplayValue] = React25.useState("0");
99049
- React25.useEffect(() => {
98889
+ const [displayValue, setDisplayValue] = React28.useState("0");
98890
+ React28.useEffect(() => {
99050
98891
  if (!isVisible) return;
99051
98892
  let startTime = null;
99052
98893
  let animationFrame;
@@ -99161,9 +99002,9 @@ function StatsNumberTicker({
99161
99002
  statLabelClassName,
99162
99003
  statDescriptionClassName
99163
99004
  }) {
99164
- const [isVisible, setIsVisible] = React25.useState(false);
99165
- const sectionRef = React25.useRef(null);
99166
- React25.useEffect(() => {
99005
+ const [isVisible, setIsVisible] = React28.useState(false);
99006
+ const sectionRef = React28.useRef(null);
99007
+ React28.useEffect(() => {
99167
99008
  const observer = new IntersectionObserver(
99168
99009
  ([entry]) => {
99169
99010
  if (entry.isIntersecting) {
@@ -99422,9 +99263,9 @@ function StatsBarComparison({
99422
99263
  barValueClassName,
99423
99264
  barTrackClassName
99424
99265
  }) {
99425
- const [isVisible, setIsVisible] = React25.useState(!animate);
99426
- const sectionRef = React25.useRef(null);
99427
- React25.useEffect(() => {
99266
+ const [isVisible, setIsVisible] = React28.useState(!animate);
99267
+ const sectionRef = React28.useRef(null);
99268
+ React28.useEffect(() => {
99428
99269
  if (!animate) return;
99429
99270
  const observer = new IntersectionObserver(
99430
99271
  ([entry]) => {
@@ -99602,7 +99443,7 @@ function TimelineVerticalIconDashed({
99602
99443
  "mx-auto flex flex-col items-center justify-center text-center sm:max-w-xl",
99603
99444
  stepsClassName
99604
99445
  ),
99605
- children: steps.map((step, index) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
99446
+ children: steps.map((step, index) => /* @__PURE__ */ jsxs(React28.Fragment, { children: [
99606
99447
  /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col items-center", stepClassName), children: [
99607
99448
  /* @__PURE__ */ jsx(
99608
99449
  "span",
@@ -99869,7 +99710,7 @@ function TimelineTwoColumnFeatured({
99869
99710
  style,
99870
99711
  optixFlowConfig
99871
99712
  }) {
99872
- const renderActions = React25.useMemo(() => {
99713
+ const renderActions = React28.useMemo(() => {
99873
99714
  if (actionsSlot) {
99874
99715
  return actionsSlot;
99875
99716
  }
@@ -99997,7 +99838,7 @@ function TimelineTwoColumnFeatured({
99997
99838
  }
99998
99839
  );
99999
99840
  }
100000
- var DiagonalPattern = React25.memo(({
99841
+ var DiagonalPattern = React28.memo(({
100001
99842
  className,
100002
99843
  patternOpacity = 0.15
100003
99844
  }) => {
@@ -100036,7 +99877,7 @@ function TimelineAlternatingDiagonal({
100036
99877
  style,
100037
99878
  optixFlowConfig
100038
99879
  }) {
100039
- const renderedBadge = React25.useMemo(() => {
99880
+ const renderedBadge = React28.useMemo(() => {
100040
99881
  if (badgeSlot) {
100041
99882
  return badgeSlot;
100042
99883
  }
@@ -100414,7 +100255,7 @@ function TimelineProductivityList({
100414
100255
  }
100415
100256
  );
100416
100257
  }
100417
- var ProcessBar = React25.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(React25.Fragment, { children: [
100258
+ var ProcessBar = React28.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(React28.Fragment, { children: [
100418
100259
  /* @__PURE__ */ jsx("div", { className: "flex flex-col items-center", children: /* @__PURE__ */ jsx(
100419
100260
  motion.div,
100420
100261
  {
@@ -100441,7 +100282,7 @@ var ProcessBar = React25.memo(({ currentStep, steps }) => /* @__PURE__ */ jsx("d
100441
100282
  )
100442
100283
  ] })
100443
100284
  ] }, index)) }) }));
100444
- var StepperContent = React25.memo(({ step, optixFlowConfig, imageClassName, descriptionClassName, background }) => {
100285
+ var StepperContent = React28.memo(({ step, optixFlowConfig, imageClassName, descriptionClassName, background }) => {
100445
100286
  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: [
100446
100287
  /* @__PURE__ */ jsx(
100447
100288
  motion.div,
@@ -100474,7 +100315,7 @@ var StepperContent = React25.memo(({ step, optixFlowConfig, imageClassName, desc
100474
100315
  )
100475
100316
  ] });
100476
100317
  });
100477
- var NavButtons = React25.memo(({ handlePrev, handleNext }) => /* @__PURE__ */ jsxs("div", { className: "flex w-full justify-end gap-3 tracking-tight", children: [
100318
+ var NavButtons = React28.memo(({ handlePrev, handleNext }) => /* @__PURE__ */ jsxs("div", { className: "flex w-full justify-end gap-3 tracking-tight", children: [
100478
100319
  /* @__PURE__ */ jsxs(
100479
100320
  Pressable,
100480
100321
  {
@@ -100525,10 +100366,10 @@ function TimelineStepperAnimated({
100525
100366
  }) {
100526
100367
  const safeInitialStep = (steps?.length ?? 0) > 0 ? Math.max(0, Math.min(initialStep ?? 0, (steps?.length ?? 1) - 1)) : 0;
100527
100368
  const [currentStep, setCurrentStep] = useState(safeInitialStep);
100528
- const handleNext = React25.useCallback(() => {
100369
+ const handleNext = React28.useCallback(() => {
100529
100370
  setCurrentStep((prev) => Math.min(prev + 1, (steps?.length ?? 1) - 1));
100530
100371
  }, [steps?.length]);
100531
- const handlePrev = React25.useCallback(() => {
100372
+ const handlePrev = React28.useCallback(() => {
100532
100373
  setCurrentStep((prev) => Math.max(prev - 1, 0));
100533
100374
  }, []);
100534
100375
  const safeCurrentStep = (steps?.length ?? 0) > 0 ? Math.max(0, Math.min(currentStep, (steps?.length ?? 1) - 1)) : 0;
@@ -101237,7 +101078,7 @@ function TimelineTabbedPhases({
101237
101078
  style,
101238
101079
  optixFlowConfig
101239
101080
  }) {
101240
- const renderDownloadButton = React25.useMemo(() => {
101081
+ const renderDownloadButton = React28.useMemo(() => {
101241
101082
  if (downloadSlot) {
101242
101083
  return downloadSlot;
101243
101084
  }
@@ -101457,7 +101298,7 @@ function TimelineProductLaunch({
101457
101298
  id,
101458
101299
  style
101459
101300
  }) {
101460
- const renderCta = React25.useMemo(() => {
101301
+ const renderCta = React28.useMemo(() => {
101461
101302
  if (ctaSlot) {
101462
101303
  return ctaSlot;
101463
101304
  }
@@ -101922,9 +101763,9 @@ function LinkTreeBlock({
101922
101763
  }) {
101923
101764
  const resolvedBackground = background;
101924
101765
  const resolvedPattern = pattern ?? backgroundPattern;
101925
- const [lightboxOpen, setLightboxOpen] = React25.useState(false);
101926
- const [lightboxIndex, setLightboxIndex] = React25.useState(0);
101927
- const lightboxItems = React25.useMemo(() => {
101766
+ const [lightboxOpen, setLightboxOpen] = React28.useState(false);
101767
+ const [lightboxIndex, setLightboxIndex] = React28.useState(0);
101768
+ const lightboxItems = React28.useMemo(() => {
101928
101769
  if (!mediaGallery || mediaGallery.length === 0) return [];
101929
101770
  return mediaGallery.slice(0, mediaGalleryLimit).map((item, index) => ({
101930
101771
  id: item.id ?? `media-${index}`,
@@ -101936,11 +101777,11 @@ function LinkTreeBlock({
101936
101777
  share: true
101937
101778
  }));
101938
101779
  }, [mediaGallery, mediaGalleryLimit]);
101939
- const handleMediaClick = React25.useCallback((index) => {
101780
+ const handleMediaClick = React28.useCallback((index) => {
101940
101781
  setLightboxIndex(index);
101941
101782
  setLightboxOpen(true);
101942
101783
  }, []);
101943
- const handleLightboxClose = React25.useCallback(() => {
101784
+ const handleLightboxClose = React28.useCallback(() => {
101944
101785
  setLightboxOpen(false);
101945
101786
  }, []);
101946
101787
  const resolveImage = (value, fallbackAlt) => {
@@ -101952,7 +101793,7 @@ function LinkTreeBlock({
101952
101793
  };
101953
101794
  const nameForAlt = typeof brandName === "string" ? brandName : "Brand avatar";
101954
101795
  const resolvedAvatar = resolveImage(brandAvatar || brandLogo, nameForAlt) || resolveImage(blockBrandedIconsAndPlaceholders.avatar1, nameForAlt);
101955
- const renderBrandHeader = React25.useMemo(() => {
101796
+ const renderBrandHeader = React28.useMemo(() => {
101956
101797
  if (brandSlot) return brandSlot;
101957
101798
  return /* @__PURE__ */ jsxs(
101958
101799
  "div",
@@ -102039,7 +101880,7 @@ function LinkTreeBlock({
102039
101880
  brandTagline,
102040
101881
  taglineClassName
102041
101882
  ]);
102042
- const renderLinks = React25.useMemo(() => {
101883
+ const renderLinks = React28.useMemo(() => {
102043
101884
  if (linksSlot) return linksSlot;
102044
101885
  if (!links || links.length === 0) return null;
102045
101886
  return /* @__PURE__ */ jsx("div", { className: cn("space-y-3", linksClassName), children: links.map((link, index) => {
@@ -102156,7 +101997,7 @@ function LinkTreeBlock({
102156
101997
  linkBadgeClassName,
102157
101998
  linkChevronClassName
102158
101999
  ]);
102159
- const renderMediaGallery = React25.useMemo(() => {
102000
+ const renderMediaGallery = React28.useMemo(() => {
102160
102001
  if (mediaGallerySlot) return mediaGallerySlot;
102161
102002
  if (!mediaGallery || mediaGallery.length === 0) return null;
102162
102003
  const items = mediaGallery.slice(0, mediaGalleryLimit);
@@ -102270,7 +102111,7 @@ function LinkTreeBlock({
102270
102111
  mediaGalleryOverlayClassName,
102271
102112
  mediaGalleryPlayIconClassName
102272
102113
  ]);
102273
- const renderSocialLinks = React25.useMemo(() => {
102114
+ const renderSocialLinks = React28.useMemo(() => {
102274
102115
  if (socialLinksSlot) return socialLinksSlot;
102275
102116
  if (!socialLinks || socialLinks.length === 0) return null;
102276
102117
  return /* @__PURE__ */ jsx(
@@ -102316,7 +102157,7 @@ function LinkTreeBlock({
102316
102157
  socialIconClassName,
102317
102158
  socialLinkClassName
102318
102159
  ]);
102319
- const renderFooter = React25.useMemo(() => {
102160
+ const renderFooter = React28.useMemo(() => {
102320
102161
  if (footerSlot) return footerSlot;
102321
102162
  if (!footerAction) return null;
102322
102163
  const resolvedFooterAction = footerAction;
@@ -105215,11 +105056,16 @@ var BLOCK_REGISTRY = {
105215
105056
  props: "ContactCardProps",
105216
105057
  exampleUsage: `
105217
105058
  <ContactCard
105218
- heading="Get in Touch"
105219
- description="We'd love to hear from you"
105220
- formHeading="Contact us"
105059
+ heading="Get In Touch"
105060
+ description="We'd love to hear from you. Send us a message and we'll respond as soon as possible."
105221
105061
  buttonText="Send Message"
105222
- formConfig={{ endpoint: "/api/contact", format: "json" }}
105062
+ contactOptions={[
105063
+ { icon: "Phone", info: "+1 (555) 987-6543", href: "tel:+15559876543" },
105064
+ { icon: "Mail", info: "support@example.com", href: "mailto:support@example.com" },
105065
+ { icon: "MapPin", info: "456 Business Ave, New York, NY 10001" },
105066
+ { icon: "Clock", info: "Mon-Fri: 9 AM - 6 PM EST" },
105067
+ ]}
105068
+ formEngineSetup={{ formConfig: { endpoint: "/api/contact", format: "json" } }}
105223
105069
  />
105224
105070
  `.trim()
105225
105071
  },
@@ -105320,7 +105166,7 @@ var BLOCK_REGISTRY = {
105320
105166
  heading="Contact Us"
105321
105167
  description="Any questions or remarks? Just write us a message!"
105322
105168
  buttonText="Send Message"
105323
- formConfig={{ endpoint: "/api/contact", format: "json" }}
105169
+ formEngineSetup={{ formConfig: { endpoint: "/api/contact", format: "json" } }}
105324
105170
  />
105325
105171
  `.trim()
105326
105172
  },
@@ -105371,7 +105217,7 @@ var BLOCK_REGISTRY = {
105371
105217
  heading="Emergency Contact"
105372
105218
  description="We're here to help 24/7"
105373
105219
  buttonText="Submit Emergency Request"
105374
- formConfig={{ endpoint: "/api/emergency", format: "json" }}
105220
+ formEngineSetup={{ formConfig: { endpoint: "/api/emergency", format: "json" } }}
105375
105221
  />
105376
105222
  `.trim()
105377
105223
  },
@@ -105403,7 +105249,16 @@ var BLOCK_REGISTRY = {
105403
105249
  id: "contact-faq",
105404
105250
  name: "Contact FAQ",
105405
105251
  description: "A two-column contact form with an FAQ accordion sidebar. Displays frequently asked questions alongside a contact form so visitors can find answers before submitting inquiries. Falls back to a single-column centered layout when no FAQ items are provided.",
105406
- semanticTags: ["contact", "faq", "questions", "inquiry", "form", "support", "accordion", "two-column"],
105252
+ semanticTags: [
105253
+ "contact",
105254
+ "faq",
105255
+ "questions",
105256
+ "inquiry",
105257
+ "form",
105258
+ "support",
105259
+ "accordion",
105260
+ "two-column"
105261
+ ],
105407
105262
  category: "contact",
105408
105263
  component: ContactFaq,
105409
105264
  props: "ContactFaqProps",
@@ -105496,17 +105351,29 @@ var BLOCK_REGISTRY = {
105496
105351
  "contact-image": {
105497
105352
  id: "contact-image",
105498
105353
  name: "Contact Image",
105499
- description: "Contact form with image background layout. Features a clean card design with first name, last name, email, phone, and message fields.",
105500
- semanticTags: ["contact", "form", "image", "card", "simple"],
105354
+ description: "Split-layout contact form with an image panel featuring overlay contact items (phone, email, etc.) on the left and a form with heading on the right. Modern, professional design with motion animations.",
105355
+ semanticTags: [
105356
+ "contact",
105357
+ "form",
105358
+ "image",
105359
+ "split-layout",
105360
+ "overlay",
105361
+ "modern"
105362
+ ],
105501
105363
  category: "contact",
105502
105364
  component: ContactImage,
105503
105365
  props: "ContactImageProps",
105504
105366
  exampleUsage: `
105505
105367
  <ContactImage
105506
- heading="Get in Touch"
105507
- description="We'd love to hear from you"
105508
- buttonText="Send Message"
105509
- formConfig={{ endpoint: "/api/contact", format: "json" }}
105368
+ eyebrow="Get in Touch"
105369
+ heading="Contact Us"
105370
+ description="We'd love to hear from you."
105371
+ image={{ src: "/office.jpg", alt: "Our office" }}
105372
+ contactOverlays={[
105373
+ { icon: "lucide/phone", label: "Phone", title: "+1 (555) 987-6543", href: "tel:+15559876543" },
105374
+ { icon: "lucide/mail", label: "Email", title: "support@example.com", href: "mailto:support@example.com" },
105375
+ ]}
105376
+ formEngineSetup={{ formConfig: { endpoint: "/api/contact", format: "json" } }}
105510
105377
  />
105511
105378
  `.trim()
105512
105379
  },