@opensite/ui 1.7.5 → 1.7.6

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 React51 from 'react';
2
- import React51__default, { Fragment, createContext, useMemo, forwardRef, useState, useCallback, useRef, useEffect, startTransition, useContext } from 'react';
1
+ import * as React50 from 'react';
2
+ import React50__default, { Fragment, createContext, useMemo, forwardRef, useState, useCallback, useRef, useEffect, 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';
@@ -8,12 +8,12 @@ import { cva } from 'class-variance-authority';
8
8
  import { AnimatePresence, motion, useMotionValue, useMotionTemplate, useSpring, useTransform, useInView, useScroll, useMotionValueEvent } from 'framer-motion';
9
9
  import * as SeparatorPrimitive from '@radix-ui/react-separator';
10
10
  import { useForm, Form, Field } from '@page-speed/forms';
11
- import { TextInput as TextInput$1, Select, TextArea as TextArea$1, Radio } from '@page-speed/forms/inputs';
11
+ import { TextInput as TextInput$1, Select, TextArea as TextArea$1, Radio, Checkbox as Checkbox$1, CheckboxGroup, DatePicker, DateRangePicker, TimePicker, FileInput, RichTextEditor } from '@page-speed/forms/inputs';
12
12
  import { serializeForRails, deserializeErrors } from '@page-speed/forms/integration';
13
13
  import { Slot } from '@radix-ui/react-slot';
14
14
  import * as LabelPrimitive from '@radix-ui/react-label';
15
15
  import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
16
- import { useFileUpload } from '@page-speed/forms/upload';
16
+ import { useFileUpload as useFileUpload$1 } from '@page-speed/forms/upload';
17
17
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
18
18
  import useEmblaCarousel from 'embla-carousel-react';
19
19
  import Autoplay from 'embla-carousel-autoplay';
@@ -140,7 +140,7 @@ var maxWidthStyles = {
140
140
  "4xl": "max-w-[1536px]",
141
141
  full: "max-w-full"
142
142
  };
143
- var Container = React51__default.forwardRef(
143
+ var Container = React50__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 = React51__default.forwardRef(
448
+ var Section = React50__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 = React51.useMemo(() => {
1038
+ const linkType = React50.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 = React51.useMemo(() => {
1059
+ const normalizedHref = React50.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 = React51.useMemo(() => {
1077
+ const target = React50.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 = React51.useMemo(() => {
1090
+ const rel = React50.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 = React51.useCallback(
1099
+ const handleClick = React50.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 = React51.forwardRef(
1283
+ var Pressable = React50.forwardRef(
1284
1284
  ({
1285
1285
  children,
1286
1286
  className,
@@ -1811,10 +1811,10 @@ function DynamicIcon({
1811
1811
  className,
1812
1812
  alt
1813
1813
  }) {
1814
- const [svgContent, setSvgContent] = React51.useState(null);
1815
- const [isLoading, setIsLoading] = React51.useState(true);
1816
- const [error, setError] = React51.useState(null);
1817
- const { url, iconName } = React51.useMemo(() => {
1814
+ const [svgContent, setSvgContent] = React50.useState(null);
1815
+ const [isLoading, setIsLoading] = React50.useState(true);
1816
+ const [error, setError] = React50.useState(null);
1817
+ const { url, iconName } = React50.useMemo(() => {
1818
1818
  const separator = name.includes("/") ? "/" : ":";
1819
1819
  const [prefix, iconName2] = name.split(separator);
1820
1820
  const baseUrl = `https://icons.opensite.ai/api/icon/${prefix}/${iconName2}?format=svg&width=${size}&height=${size}&key=au382bi7fsh96w9h9xlrnat2jglx`;
@@ -1823,7 +1823,7 @@ function DynamicIcon({
1823
1823
  iconName: iconName2
1824
1824
  };
1825
1825
  }, [name, size]);
1826
- React51.useEffect(() => {
1826
+ React50.useEffect(() => {
1827
1827
  let isMounted = true;
1828
1828
  const fetchSvg = async () => {
1829
1829
  const cached = svgCache.get(url);
@@ -3035,7 +3035,7 @@ function AboutInteractiveTabs({
3035
3035
  pattern,
3036
3036
  patternOpacity
3037
3037
  }) {
3038
- const [activeTab, setActiveTab] = React51.useState(tabs?.[0]?.id ?? "");
3038
+ const [activeTab, setActiveTab] = React50.useState(tabs?.[0]?.id ?? "");
3039
3039
  const activeContent = useMemo(() => {
3040
3040
  return tabs?.find((tab) => tab.id === activeTab)?.content;
3041
3041
  }, [tabs, activeTab]);
@@ -6100,6 +6100,197 @@ function CtaImageOverlayArrow({
6100
6100
  }
6101
6101
  var TextInput = TextInput$1;
6102
6102
  var TextArea = TextArea$1;
6103
+ function useFileUpload(options) {
6104
+ const [uploadTokens, setUploadTokens] = useState([]);
6105
+ const [uploadProgress, setUploadProgress] = useState({});
6106
+ const [isUploading, setIsUploading] = useState(false);
6107
+ const endpoint = options?.endpoint || "https://api.dashtrack.com/contacts/_/contact_form_uploads";
6108
+ const uploadFiles = useCallback(
6109
+ async (files) => {
6110
+ if (files.length === 0) return;
6111
+ setIsUploading(true);
6112
+ try {
6113
+ const tokens = [];
6114
+ for (const file of files) {
6115
+ const formData = new FormData();
6116
+ formData.append("contact_form_upload[file_upload]", file);
6117
+ formData.append("contact_form_upload[title]", file.name);
6118
+ formData.append("contact_form_upload[file_name]", file.name);
6119
+ formData.append("contact_form_upload[file_size]", String(file.size));
6120
+ const response = await fetch(endpoint, {
6121
+ method: "POST",
6122
+ body: formData
6123
+ });
6124
+ if (!response.ok) {
6125
+ throw new Error(`Upload failed: ${response.statusText}`);
6126
+ }
6127
+ const data = await response.json();
6128
+ if (data.contact_form_upload?.token) {
6129
+ tokens.push(`upload_${data.contact_form_upload.token}`);
6130
+ }
6131
+ setUploadProgress((prev) => ({
6132
+ ...prev,
6133
+ [file.name]: 100
6134
+ }));
6135
+ }
6136
+ setUploadTokens(tokens);
6137
+ } catch (error) {
6138
+ console.error("File upload error:", error);
6139
+ options?.onError?.(error);
6140
+ } finally {
6141
+ setIsUploading(false);
6142
+ }
6143
+ },
6144
+ [endpoint, options]
6145
+ );
6146
+ const removeFile = useCallback((file, index) => {
6147
+ setUploadTokens((prev) => prev.filter((_, i) => i !== index));
6148
+ setUploadProgress((prev) => {
6149
+ const newProgress = { ...prev };
6150
+ delete newProgress[file.name];
6151
+ return newProgress;
6152
+ });
6153
+ }, []);
6154
+ const resetUpload = useCallback(() => {
6155
+ setUploadTokens([]);
6156
+ setUploadProgress({});
6157
+ }, []);
6158
+ return {
6159
+ uploadTokens,
6160
+ uploadProgress,
6161
+ isUploading,
6162
+ uploadFiles,
6163
+ removeFile,
6164
+ resetUpload
6165
+ };
6166
+ }
6167
+
6168
+ // lib/form-field-types.ts
6169
+ function generateInitialValues(fields) {
6170
+ return fields.reduce(
6171
+ (acc, field) => {
6172
+ if (field.type === "checkbox") {
6173
+ acc[field.name] = false;
6174
+ } else if (field.type === "checkbox-group" || field.type === "multi-select") {
6175
+ acc[field.name] = [];
6176
+ } else if (field.type === "file") {
6177
+ acc[field.name] = [];
6178
+ } else if (field.type === "date-range") {
6179
+ acc[field.name] = { start: null, end: null };
6180
+ } else {
6181
+ acc[field.name] = "";
6182
+ }
6183
+ return acc;
6184
+ },
6185
+ {}
6186
+ );
6187
+ }
6188
+ function generateValidationSchema(fields) {
6189
+ return fields.reduce(
6190
+ (acc, field) => {
6191
+ acc[field.name] = (value, allValues) => {
6192
+ if (field.required) {
6193
+ if (!value || typeof value === "string" && !value.trim()) {
6194
+ return `${field.label} is required`;
6195
+ }
6196
+ }
6197
+ if (field.type === "email" && value) {
6198
+ if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
6199
+ return "Please enter a valid email address";
6200
+ }
6201
+ }
6202
+ if (field.type === "url" && value) {
6203
+ try {
6204
+ new URL(value);
6205
+ } catch {
6206
+ return "Please enter a valid URL";
6207
+ }
6208
+ }
6209
+ if (field.validator) {
6210
+ return field.validator(value, allValues);
6211
+ }
6212
+ return void 0;
6213
+ };
6214
+ return acc;
6215
+ },
6216
+ {}
6217
+ );
6218
+ }
6219
+ function getColumnSpanClass(span) {
6220
+ if (!span || span === 12) return "col-span-12";
6221
+ return `col-span-12 sm:col-span-${Math.min(span, 12)}`;
6222
+ }
6223
+
6224
+ // lib/forms/use-contact-form.ts
6225
+ function useContactForm(options) {
6226
+ const {
6227
+ formFields,
6228
+ formConfig,
6229
+ onSubmit,
6230
+ onSuccess,
6231
+ onError,
6232
+ resetOnSuccess = true,
6233
+ uploadTokens = []
6234
+ } = options;
6235
+ const [isSubmitted, setIsSubmitted] = useState(false);
6236
+ const [submissionError, setSubmissionError] = useState(null);
6237
+ const form = useForm({
6238
+ initialValues: useMemo(
6239
+ () => generateInitialValues(formFields),
6240
+ [formFields]
6241
+ ),
6242
+ validationSchema: useMemo(
6243
+ () => generateValidationSchema(formFields),
6244
+ [formFields]
6245
+ ),
6246
+ onSubmit: async (values, helpers) => {
6247
+ setSubmissionError(null);
6248
+ const shouldAutoSubmit = Boolean(formConfig?.endpoint);
6249
+ if (!shouldAutoSubmit && !onSubmit) {
6250
+ return;
6251
+ }
6252
+ try {
6253
+ let result;
6254
+ const submissionValues = {
6255
+ ...values,
6256
+ ...uploadTokens.length > 0 && {
6257
+ contact_form_upload_tokens: uploadTokens
6258
+ }
6259
+ };
6260
+ if (shouldAutoSubmit) {
6261
+ result = await submitPageSpeedForm(submissionValues, formConfig);
6262
+ }
6263
+ if (onSubmit) {
6264
+ await onSubmit(submissionValues);
6265
+ }
6266
+ if (shouldAutoSubmit || onSubmit) {
6267
+ setIsSubmitted(true);
6268
+ if (resetOnSuccess) {
6269
+ helpers.resetForm();
6270
+ }
6271
+ onSuccess?.(result);
6272
+ setTimeout(() => setIsSubmitted(false), 5e3);
6273
+ }
6274
+ } catch (error) {
6275
+ if (error instanceof PageSpeedFormSubmissionError && error.formErrors) {
6276
+ helpers.setErrors(error.formErrors);
6277
+ }
6278
+ const errorMessage = error instanceof Error ? error.message : "Form submission failed";
6279
+ setSubmissionError(errorMessage);
6280
+ onError?.(error);
6281
+ }
6282
+ }
6283
+ });
6284
+ const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
6285
+ return {
6286
+ form,
6287
+ isSubmitted,
6288
+ submissionError,
6289
+ formMethod
6290
+ };
6291
+ }
6292
+
6293
+ // lib/forms.ts
6103
6294
  var PageSpeedFormSubmissionError = class extends Error {
6104
6295
  constructor(message, options = {}) {
6105
6296
  super(message);
@@ -7363,7 +7554,7 @@ function CtaVideoBackgroundHero({
7363
7554
  pattern,
7364
7555
  patternOpacity
7365
7556
  }) {
7366
- const [isModalOpen, setIsModalOpen] = React51.useState(false);
7557
+ const [isModalOpen, setIsModalOpen] = React50.useState(false);
7367
7558
  const handleOpenModal = () => {
7368
7559
  setIsModalOpen(true);
7369
7560
  onModalOpen?.();
@@ -7551,7 +7742,7 @@ function CtaWorkflowTabs({
7551
7742
  patternOpacity,
7552
7743
  optixFlowConfig
7553
7744
  }) {
7554
- const [activeTab, setActiveTab] = React51.useState(tabs?.[0]?.id || "");
7745
+ const [activeTab, setActiveTab] = React50.useState(tabs?.[0]?.id || "");
7555
7746
  const activeTabData = tabs?.find((tab) => tab.id === activeTab) || tabs?.[0];
7556
7747
  const actionsContent = useMemo(() => {
7557
7748
  if (actionsSlot) return actionsSlot;
@@ -8160,7 +8351,7 @@ function ContactFloatingBanner({
8160
8351
  badgeClassName,
8161
8352
  background = "default"
8162
8353
  }) {
8163
- const actionsContent = React51.useMemo(() => {
8354
+ const actionsContent = React50.useMemo(() => {
8164
8355
  if (actionsSlot) return actionsSlot;
8165
8356
  if (actions && actions.length > 0) {
8166
8357
  return actions.map((action, index) => {
@@ -8335,7 +8526,7 @@ function ContactCallback({
8335
8526
  }
8336
8527
  });
8337
8528
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
8338
- const actionsContent = React51.useMemo(() => {
8529
+ const actionsContent = React50.useMemo(() => {
8339
8530
  if (actionsSlot) return actionsSlot;
8340
8531
  if (actions && actions.length > 0) {
8341
8532
  return actions.map((action, index) => {
@@ -8358,7 +8549,7 @@ function ContactCallback({
8358
8549
  }
8359
8550
  return null;
8360
8551
  }, [actionsSlot, actions]);
8361
- const footerContent = React51.useMemo(() => {
8552
+ const footerContent = React50.useMemo(() => {
8362
8553
  if (footerSlot) return footerSlot;
8363
8554
  if (footer) {
8364
8555
  return typeof footer === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-6 text-center text-sm text-muted-foreground", footerClassName), children: footer }) : /* @__PURE__ */ jsx("div", { className: cn("mt-6 text-center text-sm text-muted-foreground", footerClassName), children: footer });
@@ -8679,7 +8870,7 @@ function ContactCard({
8679
8870
  }
8680
8871
  });
8681
8872
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
8682
- const actionsContent = React51.useMemo(() => {
8873
+ const actionsContent = React50.useMemo(() => {
8683
8874
  if (actionsSlot) return actionsSlot;
8684
8875
  if (actions && actions.length > 0) {
8685
8876
  return actions.map((action, index) => {
@@ -8702,7 +8893,7 @@ function ContactCard({
8702
8893
  }
8703
8894
  return null;
8704
8895
  }, [actionsSlot, actions]);
8705
- const contactOptionsContent = React51.useMemo(() => {
8896
+ const contactOptionsContent = React50.useMemo(() => {
8706
8897
  if (contactOptionsSlot) return contactOptionsSlot;
8707
8898
  if (contactOptions && contactOptions.length > 0) {
8708
8899
  return contactOptions.map((option, key) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
@@ -8960,7 +9151,7 @@ function ContactCareers({
8960
9151
  }
8961
9152
  }
8962
9153
  });
8963
- const { upload, state: uploadState } = useFileUpload({
9154
+ const { upload, state: uploadState } = useFileUpload$1({
8964
9155
  endpoint: formConfig?.endpoint ? `${new URL(formConfig.endpoint, typeof window !== "undefined" ? window.location.origin : "http://localhost").origin}/contacts/_/contact_form_uploads` : "https://api.toastability.com/contacts/_/contact_form_uploads",
8965
9156
  format: "legacy",
8966
9157
  onComplete: (token) => {
@@ -8989,7 +9180,7 @@ function ContactCareers({
8989
9180
  form.setFieldValue("contact_form_upload_tokens", []);
8990
9181
  };
8991
9182
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
8992
- const actionsContent = React51.useMemo(() => {
9183
+ const actionsContent = React50.useMemo(() => {
8993
9184
  if (actionsSlot) return actionsSlot;
8994
9185
  if (actions && actions.length > 0) {
8995
9186
  return actions.map((action, index) => {
@@ -9428,7 +9619,7 @@ function ContactCatering({
9428
9619
  const updated = current.includes(value) ? current.filter((v) => v !== value) : [...current, value];
9429
9620
  form.setFieldValue("dietaryAccommodations", updated);
9430
9621
  };
9431
- const actionsContent = React51.useMemo(() => {
9622
+ const actionsContent = React50.useMemo(() => {
9432
9623
  if (actionsSlot) return actionsSlot;
9433
9624
  if (actions && actions.length > 0) {
9434
9625
  return actions.map((action, index) => {
@@ -9848,7 +10039,7 @@ function ContactConsultation({
9848
10039
  }
9849
10040
  });
9850
10041
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
9851
- const actionsContent = React51.useMemo(() => {
10042
+ const actionsContent = React50.useMemo(() => {
9852
10043
  if (actionsSlot) return actionsSlot;
9853
10044
  if (actions && actions.length > 0) {
9854
10045
  return actions.map((action, index) => {
@@ -10066,12 +10257,241 @@ function ContactConsultation({
10066
10257
  }
10067
10258
  );
10068
10259
  }
10260
+ function DynamicFormField({
10261
+ field,
10262
+ className,
10263
+ uploadProgress = {},
10264
+ onFileUpload,
10265
+ onFileRemove,
10266
+ isUploading = false
10267
+ }) {
10268
+ const fieldId = `field-${field.name}`;
10269
+ return /* @__PURE__ */ jsx(Field, { name: field.name, children: ({ field: formField, meta }) => /* @__PURE__ */ jsxs("div", { className: cn("space-y-2", className), children: [
10270
+ field.type !== "checkbox" && /* @__PURE__ */ jsxs(Label, { htmlFor: fieldId, children: [
10271
+ field.label,
10272
+ field.required && /* @__PURE__ */ jsx("span", { className: "text-destructive ml-1", children: "*" })
10273
+ ] }),
10274
+ (field.type === "text" || field.type === "email" || field.type === "tel" || field.type === "search" || field.type === "password" || field.type === "url") && /* @__PURE__ */ jsx(
10275
+ TextInput$1,
10276
+ {
10277
+ ...formField,
10278
+ id: fieldId,
10279
+ type: field.type,
10280
+ placeholder: field.placeholder,
10281
+ error: meta.touched && !!meta.error,
10282
+ disabled: field.disabled,
10283
+ "aria-label": field.label
10284
+ }
10285
+ ),
10286
+ field.type === "number" && /* @__PURE__ */ jsx(
10287
+ TextInput$1,
10288
+ {
10289
+ ...formField,
10290
+ id: fieldId,
10291
+ type: "text",
10292
+ placeholder: field.placeholder,
10293
+ error: meta.touched && !!meta.error,
10294
+ disabled: field.disabled,
10295
+ "aria-label": field.label
10296
+ }
10297
+ ),
10298
+ field.type === "textarea" && /* @__PURE__ */ jsx(
10299
+ TextArea$1,
10300
+ {
10301
+ ...formField,
10302
+ id: fieldId,
10303
+ placeholder: field.placeholder,
10304
+ rows: field.rows || 4,
10305
+ error: meta.touched && !!meta.error,
10306
+ disabled: field.disabled,
10307
+ "aria-label": field.label
10308
+ }
10309
+ ),
10310
+ field.type === "select" && field.options && /* @__PURE__ */ jsx(
10311
+ Select,
10312
+ {
10313
+ ...formField,
10314
+ id: fieldId,
10315
+ options: field.options,
10316
+ placeholder: field.placeholder || `Select ${field.label.toLowerCase()}`,
10317
+ error: meta.touched && !!meta.error,
10318
+ disabled: field.disabled,
10319
+ "aria-label": field.label
10320
+ }
10321
+ ),
10322
+ field.type === "multi-select" && field.options && /* @__PURE__ */ jsx(
10323
+ Select,
10324
+ {
10325
+ ...formField,
10326
+ id: fieldId,
10327
+ options: field.options,
10328
+ placeholder: field.placeholder || `Select ${field.label.toLowerCase()}`,
10329
+ error: meta.touched && !!meta.error,
10330
+ disabled: field.disabled,
10331
+ "aria-label": field.label,
10332
+ multiple: true
10333
+ }
10334
+ ),
10335
+ field.type === "radio" && field.options && /* @__PURE__ */ jsx(
10336
+ Radio,
10337
+ {
10338
+ ...formField,
10339
+ id: fieldId,
10340
+ options: field.options,
10341
+ disabled: field.disabled,
10342
+ layout: field.layout || "stacked",
10343
+ error: meta.touched && !!meta.error,
10344
+ "aria-label": field.label
10345
+ }
10346
+ ),
10347
+ field.type === "checkbox" && /* @__PURE__ */ jsxs("div", { className: "flex items-start space-x-2", children: [
10348
+ /* @__PURE__ */ jsx(
10349
+ Checkbox$1,
10350
+ {
10351
+ ...formField,
10352
+ id: fieldId,
10353
+ value: formField.value === true || formField.value === "true",
10354
+ onChange: (checked) => formField.onChange(checked),
10355
+ disabled: field.disabled,
10356
+ error: meta.touched && !!meta.error,
10357
+ "aria-label": field.label
10358
+ }
10359
+ ),
10360
+ /* @__PURE__ */ jsxs(
10361
+ Label,
10362
+ {
10363
+ htmlFor: fieldId,
10364
+ className: "font-normal cursor-pointer leading-relaxed",
10365
+ children: [
10366
+ field.label,
10367
+ field.required && /* @__PURE__ */ jsx("span", { className: "text-destructive ml-1", children: "*" })
10368
+ ]
10369
+ }
10370
+ )
10371
+ ] }),
10372
+ field.type === "checkbox-group" && field.options && /* @__PURE__ */ jsx(
10373
+ CheckboxGroup,
10374
+ {
10375
+ ...formField,
10376
+ id: fieldId,
10377
+ options: field.options,
10378
+ disabled: field.disabled,
10379
+ layout: field.layout || "stacked",
10380
+ error: meta.touched && !!meta.error,
10381
+ "aria-label": field.label
10382
+ }
10383
+ ),
10384
+ (field.type === "date-picker" || field.type === "date") && /* @__PURE__ */ jsx(
10385
+ DatePicker,
10386
+ {
10387
+ ...formField,
10388
+ id: fieldId,
10389
+ placeholder: field.placeholder,
10390
+ error: meta.touched && !!meta.error,
10391
+ disabled: field.disabled,
10392
+ "aria-label": field.label
10393
+ }
10394
+ ),
10395
+ field.type === "date-range" && /* @__PURE__ */ jsx(
10396
+ DateRangePicker,
10397
+ {
10398
+ ...formField,
10399
+ id: fieldId,
10400
+ error: meta.touched && !!meta.error,
10401
+ disabled: field.disabled,
10402
+ "aria-label": field.label
10403
+ }
10404
+ ),
10405
+ field.type === "time" && /* @__PURE__ */ jsx(
10406
+ TimePicker,
10407
+ {
10408
+ ...formField,
10409
+ id: fieldId,
10410
+ placeholder: field.placeholder,
10411
+ error: meta.touched && !!meta.error,
10412
+ disabled: field.disabled,
10413
+ "aria-label": field.label
10414
+ }
10415
+ ),
10416
+ field.type === "file" && /* @__PURE__ */ jsx(
10417
+ FileInput,
10418
+ {
10419
+ ...formField,
10420
+ id: fieldId,
10421
+ accept: field.accept,
10422
+ maxSize: field.maxSize || 5 * 1024 * 1024,
10423
+ maxFiles: field.maxFiles || 1,
10424
+ multiple: field.multiple || false,
10425
+ placeholder: field.placeholder || "Choose file(s)...",
10426
+ error: meta.touched && !!meta.error,
10427
+ disabled: field.disabled || isUploading,
10428
+ showProgress: true,
10429
+ uploadProgress,
10430
+ onChange: (files) => {
10431
+ formField.onChange(files);
10432
+ if (files.length > 0 && onFileUpload) {
10433
+ onFileUpload(files);
10434
+ }
10435
+ },
10436
+ onFileRemove,
10437
+ "aria-label": field.label
10438
+ }
10439
+ ),
10440
+ field.type === "rich-text" && /* @__PURE__ */ jsx(
10441
+ RichTextEditor,
10442
+ {
10443
+ ...formField,
10444
+ id: fieldId,
10445
+ placeholder: field.placeholder,
10446
+ error: meta.touched && !!meta.error,
10447
+ disabled: field.disabled,
10448
+ "aria-label": field.label
10449
+ }
10450
+ ),
10451
+ meta.touched && meta.error && /* @__PURE__ */ jsx("p", { className: "text-sm text-destructive", children: meta.error })
10452
+ ] }) });
10453
+ }
10454
+ var DEFAULT_FORM_FIELDS = [
10455
+ {
10456
+ name: "firstName",
10457
+ type: "text",
10458
+ label: "First Name",
10459
+ placeholder: "First name",
10460
+ required: true,
10461
+ columnSpan: 6
10462
+ },
10463
+ {
10464
+ name: "lastName",
10465
+ type: "text",
10466
+ label: "Last Name",
10467
+ placeholder: "Last name",
10468
+ required: true,
10469
+ columnSpan: 6
10470
+ },
10471
+ {
10472
+ name: "email",
10473
+ type: "email",
10474
+ label: "Email Address",
10475
+ placeholder: "your@email.com",
10476
+ required: true,
10477
+ columnSpan: 12
10478
+ },
10479
+ {
10480
+ name: "message",
10481
+ type: "textarea",
10482
+ label: "Message",
10483
+ placeholder: "Your message...",
10484
+ required: true,
10485
+ rows: 4,
10486
+ columnSpan: 12
10487
+ }
10488
+ ];
10069
10489
  function ContactDark({
10070
10490
  heading,
10071
10491
  description,
10072
10492
  contactHeading = "Contact Information",
10073
10493
  contactDescription = "Fill up the form and our team will get back to you within 24 hours.",
10074
- buttonText,
10494
+ buttonText = "Submit",
10075
10495
  buttonIcon,
10076
10496
  actions,
10077
10497
  actionsSlot,
@@ -10079,6 +10499,9 @@ function ContactDark({
10079
10499
  contactOptionsSlot,
10080
10500
  socialLinks,
10081
10501
  socialLinksSlot,
10502
+ formFields = DEFAULT_FORM_FIELDS,
10503
+ successMessage = "Thank you! Your message has been sent successfully.",
10504
+ errorMessage = "There was an error sending your message. Please try again.",
10082
10505
  className,
10083
10506
  headerClassName,
10084
10507
  headingClassName,
@@ -10090,6 +10513,8 @@ function ContactDark({
10090
10513
  infoPanelClassName,
10091
10514
  contactOptionsClassName,
10092
10515
  socialLinksClassName,
10516
+ successMessageClassName,
10517
+ errorMessageClassName,
10093
10518
  background,
10094
10519
  spacing = "py-8 md:py-32",
10095
10520
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
@@ -10100,54 +10525,27 @@ function ContactDark({
10100
10525
  onSuccess,
10101
10526
  onError
10102
10527
  }) {
10103
- const form = useForm({
10104
- initialValues: {
10105
- firstName: "",
10106
- lastName: "",
10107
- email: "",
10108
- message: ""
10109
- },
10110
- validationSchema: {
10111
- firstName: (value) => !value ? "First name is required" : void 0,
10112
- lastName: (value) => !value ? "Last name is required" : void 0,
10113
- email: (value) => {
10114
- if (!value) return "Email is required";
10115
- if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value))
10116
- return "Please enter a valid email address";
10117
- return void 0;
10118
- },
10119
- message: (value) => !value ? "Message is required" : void 0
10528
+ const {
10529
+ uploadTokens,
10530
+ uploadProgress,
10531
+ isUploading,
10532
+ uploadFiles,
10533
+ removeFile,
10534
+ resetUpload
10535
+ } = useFileUpload({ onError });
10536
+ const { form, isSubmitted, submissionError, formMethod } = useContactForm({
10537
+ formFields,
10538
+ formConfig,
10539
+ onSubmit,
10540
+ onSuccess: (data) => {
10541
+ resetUpload();
10542
+ onSuccess?.(data);
10120
10543
  },
10121
- onSubmit: async (values, helpers) => {
10122
- const shouldAutoSubmit = Boolean(formConfig?.endpoint);
10123
- if (!shouldAutoSubmit && !onSubmit) {
10124
- return;
10125
- }
10126
- try {
10127
- let result;
10128
- if (shouldAutoSubmit) {
10129
- result = await submitPageSpeedForm(values, formConfig);
10130
- }
10131
- if (onSubmit) {
10132
- await onSubmit(values);
10133
- }
10134
- if (shouldAutoSubmit || onSubmit) {
10135
- if (formConfig?.resetOnSuccess !== false) {
10136
- helpers.resetForm();
10137
- }
10138
- onSuccess?.(result);
10139
- }
10140
- } catch (error) {
10141
- if (error instanceof PageSpeedFormSubmissionError && error.formErrors) {
10142
- helpers.setErrors(error.formErrors);
10143
- }
10144
- onError?.(error);
10145
- throw error;
10146
- }
10147
- }
10544
+ onError,
10545
+ resetOnSuccess: formConfig?.resetOnSuccess !== false,
10546
+ uploadTokens
10148
10547
  });
10149
- const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
10150
- const actionsContent = React51.useMemo(() => {
10548
+ const actionsContent = React50.useMemo(() => {
10151
10549
  if (actionsSlot) return actionsSlot;
10152
10550
  if (actions && actions.length > 0) {
10153
10551
  return actions.map((action, index) => {
@@ -10177,7 +10575,7 @@ function ContactDark({
10177
10575
  }
10178
10576
  return null;
10179
10577
  }, [actionsSlot, actions]);
10180
- const contactOptionsContent = React51.useMemo(() => {
10578
+ const contactOptionsContent = React50.useMemo(() => {
10181
10579
  if (contactOptionsSlot) return contactOptionsSlot;
10182
10580
  if (contactOptions && contactOptions.length > 0) {
10183
10581
  return contactOptions.map((option, key) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
@@ -10201,7 +10599,7 @@ function ContactDark({
10201
10599
  }
10202
10600
  return null;
10203
10601
  }, [contactOptionsSlot, contactOptions]);
10204
- const socialLinksContent = React51.useMemo(() => {
10602
+ const socialLinksContent = React50.useMemo(() => {
10205
10603
  if (socialLinksSlot) return socialLinksSlot;
10206
10604
  if (socialLinks && socialLinks.length > 0) {
10207
10605
  return socialLinks.map((social, key) => /* @__PURE__ */ jsx(
@@ -10257,87 +10655,70 @@ function ContactDark({
10257
10655
  cardClassName
10258
10656
  ),
10259
10657
  children: [
10260
- /* @__PURE__ */ jsx("div", { className: cn("p-6 lg:p-12", formPanelClassName), children: /* @__PURE__ */ jsxs(
10261
- Form,
10262
- {
10263
- form,
10264
- action: formConfig?.endpoint,
10265
- method: formMethod,
10266
- className: cn("space-y-6", formClassName),
10267
- children: [
10268
- /* @__PURE__ */ jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [
10269
- /* @__PURE__ */ jsx(Field, { name: "firstName", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
10270
- /* @__PURE__ */ jsx(Label, { htmlFor: "first-name", children: "First Name" }),
10271
- /* @__PURE__ */ jsx(
10272
- TextInput$1,
10273
- {
10274
- ...field,
10275
- id: "first-name",
10276
- placeholder: "First name",
10277
- error: meta.touched && !!meta.error,
10278
- "aria-label": "First Name"
10279
- }
10280
- )
10281
- ] }) }),
10282
- /* @__PURE__ */ jsx(Field, { name: "lastName", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
10283
- /* @__PURE__ */ jsx(Label, { htmlFor: "last-name", children: "Last Name" }),
10284
- /* @__PURE__ */ jsx(
10285
- TextInput$1,
10286
- {
10287
- ...field,
10288
- id: "last-name",
10289
- placeholder: "Last name",
10290
- error: meta.touched && !!meta.error,
10291
- "aria-label": "Last Name"
10292
- }
10293
- )
10294
- ] }) })
10295
- ] }),
10296
- /* @__PURE__ */ jsx(Field, { name: "email", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
10297
- /* @__PURE__ */ jsx(Label, { htmlFor: "email", children: "Email Address" }),
10298
- /* @__PURE__ */ jsx(
10299
- TextInput$1,
10658
+ /* @__PURE__ */ jsxs("div", { className: cn("p-6 lg:p-12", formPanelClassName), children: [
10659
+ isSubmitted && /* @__PURE__ */ jsx(
10660
+ "div",
10661
+ {
10662
+ className: cn(
10663
+ "mb-6 p-4 bg-primary/10 border border-primary rounded-md",
10664
+ successMessageClassName
10665
+ ),
10666
+ children: typeof successMessage === "string" ? /* @__PURE__ */ jsx("p", { className: "text-sm text-primary-foreground/90 text-center", children: successMessage }) : successMessage
10667
+ }
10668
+ ),
10669
+ submissionError && /* @__PURE__ */ jsx(
10670
+ "div",
10671
+ {
10672
+ className: cn(
10673
+ "mb-6 p-4 bg-destructive/10 border border-destructive rounded-md",
10674
+ errorMessageClassName
10675
+ ),
10676
+ children: /* @__PURE__ */ jsx("p", { className: "text-sm text-destructive text-center", children: submissionError })
10677
+ }
10678
+ ),
10679
+ /* @__PURE__ */ jsxs(
10680
+ Form,
10681
+ {
10682
+ form,
10683
+ action: formConfig?.endpoint,
10684
+ method: formMethod,
10685
+ className: cn("space-y-6", formClassName),
10686
+ children: [
10687
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-12 gap-4", children: formFields.map((field) => /* @__PURE__ */ jsx(
10688
+ "div",
10300
10689
  {
10301
- ...field,
10302
- id: "email",
10303
- type: "email",
10304
- placeholder: "Your email",
10305
- error: meta.touched && !!meta.error,
10306
- "aria-label": "Email Address"
10307
- }
10308
- )
10309
- ] }) }),
10310
- /* @__PURE__ */ jsx(Field, { name: "message", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
10311
- /* @__PURE__ */ jsx(Label, { htmlFor: "message", children: "Message" }),
10312
- /* @__PURE__ */ jsx(
10313
- TextArea$1,
10690
+ className: getColumnSpanClass(field.columnSpan),
10691
+ children: /* @__PURE__ */ jsx(
10692
+ DynamicFormField,
10693
+ {
10694
+ field,
10695
+ uploadProgress,
10696
+ onFileUpload: uploadFiles,
10697
+ onFileRemove: removeFile,
10698
+ isUploading
10699
+ }
10700
+ )
10701
+ },
10702
+ field.name
10703
+ )) }),
10704
+ actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxs(
10705
+ Pressable,
10314
10706
  {
10315
- ...field,
10316
- id: "message",
10317
- placeholder: "Your message...",
10318
- rows: 4,
10319
- error: meta.touched && !!meta.error,
10320
- "aria-label": "Message"
10707
+ componentType: "button",
10708
+ type: "submit",
10709
+ className: cn("w-full", submitClassName),
10710
+ asButton: true,
10711
+ disabled: form.isSubmitting,
10712
+ children: [
10713
+ buttonIcon,
10714
+ buttonText
10715
+ ]
10321
10716
  }
10322
10717
  )
10323
- ] }) }),
10324
- actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxs(
10325
- Pressable,
10326
- {
10327
- componentType: "button",
10328
- type: "submit",
10329
- className: cn("w-full", submitClassName),
10330
- asButton: true,
10331
- disabled: form.isSubmitting,
10332
- children: [
10333
- buttonIcon,
10334
- buttonText
10335
- ]
10336
- }
10337
- )
10338
- ]
10339
- }
10340
- ) }),
10718
+ ]
10719
+ }
10720
+ )
10721
+ ] }),
10341
10722
  /* @__PURE__ */ jsxs(
10342
10723
  "div",
10343
10724
  {
@@ -10469,7 +10850,7 @@ function ContactDemo({
10469
10850
  }
10470
10851
  });
10471
10852
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
10472
- const actionsContent = React51.useMemo(() => {
10853
+ const actionsContent = React50.useMemo(() => {
10473
10854
  if (actionsSlot) return actionsSlot;
10474
10855
  if (actions && actions.length > 0) {
10475
10856
  return actions.map((action, index) => {
@@ -10776,7 +11157,7 @@ function ContactEmergency({
10776
11157
  const selectedPriority = PRIORITIES.find(
10777
11158
  (p) => p.value === form.values.priority
10778
11159
  );
10779
- const actionsContent = React51.useMemo(() => {
11160
+ const actionsContent = React50.useMemo(() => {
10780
11161
  if (actionsSlot) return actionsSlot;
10781
11162
  if (actions && actions.length > 0) {
10782
11163
  return actions.map((action, index) => {
@@ -11079,7 +11460,7 @@ function ContactEvent({
11079
11460
  }
11080
11461
  });
11081
11462
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
11082
- const actionsContent = React51.useMemo(() => {
11463
+ const actionsContent = React50.useMemo(() => {
11083
11464
  if (actionsSlot) return actionsSlot;
11084
11465
  if (actions && actions.length > 0) {
11085
11466
  return actions.map((action, index) => {
@@ -11275,18 +11656,57 @@ function AccordionContent({
11275
11656
  }
11276
11657
  );
11277
11658
  }
11659
+ var DEFAULT_FORM_FIELDS2 = [
11660
+ {
11661
+ name: "name",
11662
+ type: "text",
11663
+ label: "Name",
11664
+ placeholder: "Full Name",
11665
+ required: true,
11666
+ columnSpan: 6
11667
+ },
11668
+ {
11669
+ name: "email",
11670
+ type: "email",
11671
+ label: "Email",
11672
+ placeholder: "your@email.com",
11673
+ required: true,
11674
+ columnSpan: 6
11675
+ },
11676
+ {
11677
+ name: "subject",
11678
+ type: "text",
11679
+ label: "Subject",
11680
+ placeholder: "What is this regarding?",
11681
+ required: true,
11682
+ columnSpan: 12
11683
+ },
11684
+ {
11685
+ name: "message",
11686
+ type: "textarea",
11687
+ label: "Message",
11688
+ placeholder: "Your message...",
11689
+ required: true,
11690
+ rows: 4,
11691
+ columnSpan: 12
11692
+ }
11693
+ ];
11278
11694
  function ContactFaq({
11279
11695
  heading,
11280
11696
  description,
11281
11697
  formHeading,
11282
- buttonText,
11698
+ buttonText = "Submit",
11283
11699
  buttonIcon,
11284
11700
  actions,
11285
11701
  actionsSlot,
11286
11702
  items,
11287
11703
  itemsSlot,
11288
11704
  faqHeading,
11705
+ formFields = DEFAULT_FORM_FIELDS2,
11706
+ successMessage = "Thank you! Your message has been sent successfully.",
11707
+ errorMessage = "There was an error sending your message. Please try again.",
11289
11708
  className,
11709
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
11290
11710
  headerClassName,
11291
11711
  headingClassName,
11292
11712
  descriptionClassName,
@@ -11302,9 +11722,10 @@ function ContactFaq({
11302
11722
  accordionTriggerClassName,
11303
11723
  accordionContentClassName,
11304
11724
  gridClassName,
11725
+ successMessageClassName,
11726
+ errorMessageClassName,
11305
11727
  background,
11306
11728
  spacing = "py-8 md:py-32",
11307
- containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
11308
11729
  pattern,
11309
11730
  patternOpacity,
11310
11731
  formConfig,
@@ -11312,54 +11733,27 @@ function ContactFaq({
11312
11733
  onSuccess,
11313
11734
  onError
11314
11735
  }) {
11315
- const form = useForm({
11316
- initialValues: {
11317
- name: "",
11318
- email: "",
11319
- subject: "",
11320
- message: ""
11321
- },
11322
- validationSchema: {
11323
- name: (value) => !value ? "Name is required" : void 0,
11324
- email: (value) => {
11325
- if (!value) return "Email is required";
11326
- if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value))
11327
- return "Please enter a valid email address";
11328
- return void 0;
11329
- },
11330
- subject: (value) => !value ? "Subject is required" : void 0,
11331
- message: (value) => !value ? "Message is required" : void 0
11736
+ const {
11737
+ uploadTokens,
11738
+ uploadProgress,
11739
+ isUploading,
11740
+ uploadFiles,
11741
+ removeFile,
11742
+ resetUpload
11743
+ } = useFileUpload({ onError });
11744
+ const { form, isSubmitted, submissionError, formMethod } = useContactForm({
11745
+ formFields,
11746
+ formConfig,
11747
+ onSubmit,
11748
+ onSuccess: (data) => {
11749
+ resetUpload();
11750
+ onSuccess?.(data);
11332
11751
  },
11333
- onSubmit: async (values, helpers) => {
11334
- const shouldAutoSubmit = Boolean(formConfig?.endpoint);
11335
- if (!shouldAutoSubmit && !onSubmit) {
11336
- return;
11337
- }
11338
- try {
11339
- let result;
11340
- if (shouldAutoSubmit) {
11341
- result = await submitPageSpeedForm(values, formConfig);
11342
- }
11343
- if (onSubmit) {
11344
- await onSubmit(values);
11345
- }
11346
- if (shouldAutoSubmit || onSubmit) {
11347
- if (formConfig?.resetOnSuccess !== false) {
11348
- helpers.resetForm();
11349
- }
11350
- onSuccess?.(result);
11351
- }
11352
- } catch (error) {
11353
- if (error instanceof PageSpeedFormSubmissionError && error.formErrors) {
11354
- helpers.setErrors(error.formErrors);
11355
- }
11356
- onError?.(error);
11357
- throw error;
11358
- }
11359
- }
11752
+ onError,
11753
+ resetOnSuccess: formConfig?.resetOnSuccess !== false,
11754
+ uploadTokens
11360
11755
  });
11361
- const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
11362
- const actionsContent = React51.useMemo(() => {
11756
+ const actionsContent = useMemo(() => {
11363
11757
  if (actionsSlot) return actionsSlot;
11364
11758
  if (actions && actions.length > 0) {
11365
11759
  return actions.map((action, index) => {
@@ -11420,8 +11814,7 @@ function ContactFaq({
11420
11814
  accordionClassName,
11421
11815
  accordionItemClassName,
11422
11816
  accordionTriggerClassName,
11423
- accordionContentClassName,
11424
- background
11817
+ accordionContentClassName
11425
11818
  ]);
11426
11819
  return /* @__PURE__ */ jsx(
11427
11820
  Section,
@@ -11484,6 +11877,26 @@ function ContactFaq({
11484
11877
  children: formHeading
11485
11878
  }
11486
11879
  ) : /* @__PURE__ */ jsx("div", { className: formHeadingClassName, children: formHeading })),
11880
+ isSubmitted && /* @__PURE__ */ jsx(
11881
+ "div",
11882
+ {
11883
+ className: cn(
11884
+ "mb-6 p-4 bg-primary/10 border border-primary rounded-md",
11885
+ successMessageClassName
11886
+ ),
11887
+ children: typeof successMessage === "string" ? /* @__PURE__ */ jsx("p", { className: "text-sm text-primary-foreground/90 text-center", children: successMessage }) : successMessage
11888
+ }
11889
+ ),
11890
+ submissionError && /* @__PURE__ */ jsx(
11891
+ "div",
11892
+ {
11893
+ className: cn(
11894
+ "mb-6 p-4 bg-destructive/10 border border-destructive rounded-md",
11895
+ errorMessageClassName
11896
+ ),
11897
+ children: typeof errorMessage === "string" ? /* @__PURE__ */ jsx("p", { className: "text-sm text-destructive text-center", children: submissionError }) : errorMessage
11898
+ }
11899
+ ),
11487
11900
  /* @__PURE__ */ jsxs(
11488
11901
  Form,
11489
11902
  {
@@ -11492,62 +11905,23 @@ function ContactFaq({
11492
11905
  method: formMethod,
11493
11906
  className: cn("space-y-4", formClassName),
11494
11907
  children: [
11495
- /* @__PURE__ */ jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [
11496
- /* @__PURE__ */ jsx(Field, { name: "name", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
11497
- /* @__PURE__ */ jsx(Label, { htmlFor: "name", children: "Name" }),
11498
- /* @__PURE__ */ jsx(
11499
- TextInput$1,
11500
- {
11501
- ...field,
11502
- id: "name",
11503
- placeholder: "John Doe",
11504
- error: meta.touched && !!meta.error,
11505
- "aria-label": "Name"
11506
- }
11507
- )
11508
- ] }) }),
11509
- /* @__PURE__ */ jsx(Field, { name: "email", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
11510
- /* @__PURE__ */ jsx(Label, { htmlFor: "email", children: "Email" }),
11511
- /* @__PURE__ */ jsx(
11512
- TextInput$1,
11908
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-12 gap-4", children: formFields.map((field) => /* @__PURE__ */ jsx(
11909
+ "div",
11910
+ {
11911
+ className: getColumnSpanClass(field.columnSpan),
11912
+ children: /* @__PURE__ */ jsx(
11913
+ DynamicFormField,
11513
11914
  {
11514
- ...field,
11515
- id: "email",
11516
- type: "email",
11517
- placeholder: "john@example.com",
11518
- error: meta.touched && !!meta.error,
11519
- "aria-label": "Email"
11915
+ field,
11916
+ uploadProgress,
11917
+ onFileUpload: uploadFiles,
11918
+ onFileRemove: removeFile,
11919
+ isUploading
11520
11920
  }
11521
11921
  )
11522
- ] }) })
11523
- ] }),
11524
- /* @__PURE__ */ jsx(Field, { name: "subject", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
11525
- /* @__PURE__ */ jsx(Label, { htmlFor: "subject", children: "Subject" }),
11526
- /* @__PURE__ */ jsx(
11527
- TextInput$1,
11528
- {
11529
- ...field,
11530
- id: "subject",
11531
- placeholder: "What is this regarding?",
11532
- error: meta.touched && !!meta.error,
11533
- "aria-label": "Subject"
11534
- }
11535
- )
11536
- ] }) }),
11537
- /* @__PURE__ */ jsx(Field, { name: "message", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
11538
- /* @__PURE__ */ jsx(Label, { htmlFor: "message", children: "Message" }),
11539
- /* @__PURE__ */ jsx(
11540
- TextArea$1,
11541
- {
11542
- ...field,
11543
- id: "message",
11544
- placeholder: "Your question...",
11545
- rows: 4,
11546
- error: meta.touched && !!meta.error,
11547
- "aria-label": "Message"
11548
- }
11549
- )
11550
- ] }) }),
11922
+ },
11923
+ field.name
11924
+ )) }),
11551
11925
  actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxs(
11552
11926
  Pressable,
11553
11927
  {
@@ -11655,7 +12029,7 @@ function ContactFeedback({
11655
12029
  }
11656
12030
  });
11657
12031
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
11658
- const actionsContent = React51.useMemo(() => {
12032
+ const actionsContent = React50.useMemo(() => {
11659
12033
  if (actionsSlot) return actionsSlot;
11660
12034
  if (actions && actions.length > 0) {
11661
12035
  return actions.map((action, index) => {
@@ -11823,7 +12197,7 @@ function ContactFitness({
11823
12197
  }
11824
12198
  });
11825
12199
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
11826
- const actionsContent = React51.useMemo(() => {
12200
+ const actionsContent = React50.useMemo(() => {
11827
12201
  if (actionsSlot) return actionsSlot;
11828
12202
  if (actions && actions.length > 0) {
11829
12203
  return actions.map((action, index) => {
@@ -12033,7 +12407,7 @@ function ContactGuest({
12033
12407
  }
12034
12408
  });
12035
12409
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
12036
- const actionsContent = React51.useMemo(() => {
12410
+ const actionsContent = React50.useMemo(() => {
12037
12411
  if (actionsSlot) return actionsSlot;
12038
12412
  if (actions && actions.length > 0) {
12039
12413
  return actions.map((action, index) => {
@@ -12243,7 +12617,7 @@ function ContactImage({
12243
12617
  }
12244
12618
  });
12245
12619
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
12246
- const actionsContent = React51.useMemo(() => {
12620
+ const actionsContent = React50.useMemo(() => {
12247
12621
  if (actionsSlot) return actionsSlot;
12248
12622
  if (actions && actions.length > 0) {
12249
12623
  return actions.map((action, index) => {
@@ -12453,7 +12827,7 @@ function ContactInsurance({
12453
12827
  }
12454
12828
  });
12455
12829
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
12456
- const actionsContent = React51.useMemo(() => {
12830
+ const actionsContent = React50.useMemo(() => {
12457
12831
  if (actionsSlot) return actionsSlot;
12458
12832
  if (actions && actions.length > 0) {
12459
12833
  return actions.map((action, index) => {
@@ -12663,7 +13037,7 @@ function ContactInterview({
12663
13037
  }
12664
13038
  });
12665
13039
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
12666
- const actionsContent = React51.useMemo(() => {
13040
+ const actionsContent = React50.useMemo(() => {
12667
13041
  if (actionsSlot) return actionsSlot;
12668
13042
  if (actions && actions.length > 0) {
12669
13043
  return actions.map((action, index) => {
@@ -12864,7 +13238,7 @@ function ContactLocations({
12864
13238
  }
12865
13239
  });
12866
13240
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
12867
- const actionsContent = React51.useMemo(() => {
13241
+ const actionsContent = React50.useMemo(() => {
12868
13242
  if (actionsSlot) return actionsSlot;
12869
13243
  if (actions && actions.length > 0) {
12870
13244
  return actions.map((action, index) => {
@@ -13065,7 +13439,7 @@ function ContactMaintenance({
13065
13439
  }
13066
13440
  });
13067
13441
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
13068
- const actionsContent = React51.useMemo(() => {
13442
+ const actionsContent = React50.useMemo(() => {
13069
13443
  if (actionsSlot) return actionsSlot;
13070
13444
  if (actions && actions.length > 0) {
13071
13445
  return actions.map((action, index) => {
@@ -13266,7 +13640,7 @@ function ContactMap({
13266
13640
  }
13267
13641
  });
13268
13642
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
13269
- const actionsContent = React51.useMemo(() => {
13643
+ const actionsContent = React50.useMemo(() => {
13270
13644
  if (actionsSlot) return actionsSlot;
13271
13645
  if (actions && actions.length > 0) {
13272
13646
  return actions.map((action, index) => {
@@ -13464,7 +13838,7 @@ function ContactMinimal({
13464
13838
  }
13465
13839
  });
13466
13840
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
13467
- const actionsContent = React51.useMemo(() => {
13841
+ const actionsContent = React50.useMemo(() => {
13468
13842
  if (actionsSlot) return actionsSlot;
13469
13843
  if (actions && actions.length > 0) {
13470
13844
  return actions.map((action, index) => {
@@ -13487,7 +13861,7 @@ function ContactMinimal({
13487
13861
  }
13488
13862
  return null;
13489
13863
  }, [actionsSlot, actions]);
13490
- const footerContent = React51.useMemo(() => {
13864
+ const footerContent = React50.useMemo(() => {
13491
13865
  if (footerSlot) return footerSlot;
13492
13866
  if (footer) {
13493
13867
  return typeof footer === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-6 text-center text-sm text-muted-foreground", footerClassName), children: footer }) : /* @__PURE__ */ jsx("div", { className: cn("mt-6 text-center text-sm text-muted-foreground", footerClassName), children: footer });
@@ -13653,7 +14027,7 @@ function ContactMoving({
13653
14027
  }
13654
14028
  });
13655
14029
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
13656
- const actionsContent = React51.useMemo(() => {
14030
+ const actionsContent = React50.useMemo(() => {
13657
14031
  if (actionsSlot) return actionsSlot;
13658
14032
  if (actions && actions.length > 0) {
13659
14033
  return actions.map((action, index) => {
@@ -13854,7 +14228,7 @@ function ContactMultistep({
13854
14228
  }
13855
14229
  });
13856
14230
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
13857
- const actionsContent = React51.useMemo(() => {
14231
+ const actionsContent = React50.useMemo(() => {
13858
14232
  if (actionsSlot) return actionsSlot;
13859
14233
  if (actions && actions.length > 0) {
13860
14234
  return actions.map((action, index) => {
@@ -14055,7 +14429,7 @@ function ContactPartnership({
14055
14429
  }
14056
14430
  });
14057
14431
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
14058
- const actionsContent = React51.useMemo(() => {
14432
+ const actionsContent = React50.useMemo(() => {
14059
14433
  if (actionsSlot) return actionsSlot;
14060
14434
  if (actions && actions.length > 0) {
14061
14435
  return actions.map((action, index) => {
@@ -14182,19 +14556,67 @@ function ContactPartnership({
14182
14556
  }
14183
14557
  );
14184
14558
  }
14559
+ var DEFAULT_FORM_FIELDS3 = [
14560
+ {
14561
+ name: "first_name",
14562
+ type: "text",
14563
+ label: "First Name",
14564
+ placeholder: "First name",
14565
+ required: true,
14566
+ columnSpan: 6
14567
+ },
14568
+ {
14569
+ name: "last_name",
14570
+ type: "text",
14571
+ label: "Last Name",
14572
+ placeholder: "Last name",
14573
+ required: true,
14574
+ columnSpan: 6
14575
+ },
14576
+ {
14577
+ name: "email",
14578
+ type: "email",
14579
+ label: "Email",
14580
+ placeholder: "your@email.com",
14581
+ required: true,
14582
+ columnSpan: 12
14583
+ },
14584
+ {
14585
+ name: "phone",
14586
+ type: "tel",
14587
+ label: "Phone",
14588
+ placeholder: "+1 (555) 000-0000",
14589
+ required: true,
14590
+ columnSpan: 12
14591
+ },
14592
+ {
14593
+ name: "message",
14594
+ type: "textarea",
14595
+ label: "Message",
14596
+ placeholder: "Your message...",
14597
+ required: true,
14598
+ rows: 4,
14599
+ columnSpan: 12
14600
+ }
14601
+ ];
14185
14602
  function ContactPhotography({
14186
14603
  heading,
14187
14604
  description,
14188
- buttonText,
14605
+ buttonText = "Submit",
14189
14606
  buttonIcon,
14190
14607
  actions,
14191
14608
  actionsSlot,
14609
+ formFields = DEFAULT_FORM_FIELDS3,
14610
+ successMessage = "Thank you! Your message has been sent successfully.",
14611
+ errorMessage = "There was an error sending your message. Please try again.",
14192
14612
  className,
14193
14613
  headingClassName,
14194
14614
  descriptionClassName,
14195
14615
  contentClassName,
14196
14616
  formClassName,
14197
14617
  submitClassName,
14618
+ successMessageClassName,
14619
+ errorMessageClassName,
14198
14620
  background,
14199
14621
  pattern,
14200
14622
  patternOpacity,
@@ -14208,55 +14630,26 @@ function ContactPhotography({
14208
14630
  onSuccess,
14209
14631
  onError
14210
14632
  }) {
14211
- const form = useForm({
14212
- initialValues: {
14213
- first_name: "",
14214
- last_name: "",
14215
- email: "",
14216
- phone: "",
14217
- message: ""
14218
- },
14219
- validationSchema: {
14220
- first_name: (value) => !value ? "First name is required" : void 0,
14221
- last_name: (value) => !value ? "Last name is required" : void 0,
14222
- email: (value) => {
14223
- if (!value) return "Email is required";
14224
- if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value))
14225
- return "Please enter a valid email address";
14226
- return void 0;
14227
- },
14228
- phone: (value) => !value ? "Phone is required" : void 0,
14229
- message: (value) => !value ? "Message is required" : void 0
14633
+ const {
14634
+ uploadTokens,
14635
+ uploadProgress,
14636
+ isUploading,
14637
+ uploadFiles,
14638
+ removeFile,
14639
+ resetUpload
14640
+ } = useFileUpload({ onError });
14641
+ const { form, isSubmitted, submissionError, formMethod } = useContactForm({
14642
+ formFields,
14643
+ formConfig,
14644
+ onSubmit,
14645
+ onSuccess: (data) => {
14646
+ resetUpload();
14647
+ onSuccess?.(data);
14230
14648
  },
14231
- onSubmit: async (values, helpers) => {
14232
- const shouldAutoSubmit = Boolean(formConfig?.endpoint);
14233
- if (!shouldAutoSubmit && !onSubmit) {
14234
- return;
14235
- }
14236
- try {
14237
- let result;
14238
- if (shouldAutoSubmit) {
14239
- result = await submitPageSpeedForm(values, formConfig);
14240
- }
14241
- if (onSubmit) {
14242
- await onSubmit(values);
14243
- }
14244
- if (shouldAutoSubmit || onSubmit) {
14245
- if (formConfig?.resetOnSuccess !== false) {
14246
- helpers.resetForm();
14247
- }
14248
- onSuccess?.(result);
14249
- }
14250
- } catch (error) {
14251
- if (error instanceof PageSpeedFormSubmissionError && error.formErrors) {
14252
- helpers.setErrors(error.formErrors);
14253
- }
14254
- onError?.(error);
14255
- throw error;
14256
- }
14257
- }
14649
+ onError,
14650
+ resetOnSuccess: formConfig?.resetOnSuccess !== false,
14651
+ uploadTokens
14258
14652
  });
14259
- const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
14260
14653
  const actionsContent = useMemo(() => {
14261
14654
  if (actionsSlot) return actionsSlot;
14262
14655
  if (actions && actions.length > 0) {
@@ -14335,6 +14728,26 @@ function ContactPhotography({
14335
14728
  children: description
14336
14729
  }
14337
14730
  ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
14731
+ isSubmitted && /* @__PURE__ */ jsx(
14732
+ "div",
14733
+ {
14734
+ className: cn(
14735
+ "p-4 bg-primary/10 border border-primary rounded-md",
14736
+ successMessageClassName
14737
+ ),
14738
+ children: typeof successMessage === "string" ? /* @__PURE__ */ jsx("p", { className: "text-sm text-primary-foreground/90 text-center", children: successMessage }) : successMessage
14739
+ }
14740
+ ),
14741
+ submissionError && /* @__PURE__ */ jsx(
14742
+ "div",
14743
+ {
14744
+ className: cn(
14745
+ "p-4 bg-destructive/10 border border-destructive rounded-md",
14746
+ errorMessageClassName
14747
+ ),
14748
+ children: /* @__PURE__ */ jsx("p", { className: "text-sm text-destructive text-center", children: submissionError })
14749
+ }
14750
+ ),
14338
14751
  /* @__PURE__ */ jsxs(
14339
14752
  Form,
14340
14753
  {
@@ -14343,76 +14756,23 @@ function ContactPhotography({
14343
14756
  method: formMethod,
14344
14757
  className: cn("space-y-4", formClassName),
14345
14758
  children: [
14346
- /* @__PURE__ */ jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [
14347
- /* @__PURE__ */ jsx(Field, { name: "first_name", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
14348
- /* @__PURE__ */ jsx(Label, { htmlFor: "first-name", children: "First Name" }),
14349
- /* @__PURE__ */ jsx(
14350
- TextInput$1,
14351
- {
14352
- ...field,
14353
- id: "first-name",
14354
- placeholder: "John",
14355
- error: meta.touched && !!meta.error,
14356
- "aria-label": "First Name"
14357
- }
14358
- )
14359
- ] }) }),
14360
- /* @__PURE__ */ jsx(Field, { name: "last_name", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
14361
- /* @__PURE__ */ jsx(Label, { htmlFor: "last-name", children: "Last Name" }),
14362
- /* @__PURE__ */ jsx(
14363
- TextInput$1,
14759
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-12 gap-4", children: formFields.map((field) => /* @__PURE__ */ jsx(
14760
+ "div",
14761
+ {
14762
+ className: getColumnSpanClass(field.columnSpan),
14763
+ children: /* @__PURE__ */ jsx(
14764
+ DynamicFormField,
14364
14765
  {
14365
- ...field,
14366
- id: "last-name",
14367
- placeholder: "Doe",
14368
- error: meta.touched && !!meta.error,
14369
- "aria-label": "Last Name"
14766
+ field,
14767
+ uploadProgress,
14768
+ onFileUpload: uploadFiles,
14769
+ onFileRemove: removeFile,
14770
+ isUploading
14370
14771
  }
14371
14772
  )
14372
- ] }) })
14373
- ] }),
14374
- /* @__PURE__ */ jsx(Field, { name: "email", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
14375
- /* @__PURE__ */ jsx(Label, { htmlFor: "email", children: "Email" }),
14376
- /* @__PURE__ */ jsx(
14377
- TextInput$1,
14378
- {
14379
- ...field,
14380
- id: "email",
14381
- type: "email",
14382
- placeholder: "john@example.com",
14383
- error: meta.touched && !!meta.error,
14384
- "aria-label": "Email"
14385
- }
14386
- )
14387
- ] }) }),
14388
- /* @__PURE__ */ jsx(Field, { name: "phone", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
14389
- /* @__PURE__ */ jsx(Label, { htmlFor: "phone", children: "Phone" }),
14390
- /* @__PURE__ */ jsx(
14391
- TextInput$1,
14392
- {
14393
- ...field,
14394
- id: "phone",
14395
- type: "tel",
14396
- placeholder: "+1 (555) 000-0000",
14397
- error: meta.touched && !!meta.error,
14398
- "aria-label": "Phone"
14399
- }
14400
- )
14401
- ] }) }),
14402
- /* @__PURE__ */ jsx(Field, { name: "message", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
14403
- /* @__PURE__ */ jsx(Label, { htmlFor: "message", children: "Message" }),
14404
- /* @__PURE__ */ jsx(
14405
- TextArea$1,
14406
- {
14407
- ...field,
14408
- id: "message",
14409
- placeholder: "Your message...",
14410
- rows: 4,
14411
- error: meta.touched && !!meta.error,
14412
- "aria-label": "Message"
14413
- }
14414
- )
14415
- ] }) }),
14773
+ },
14774
+ field.name
14775
+ )) }),
14416
14776
  actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxs(
14417
14777
  Pressable,
14418
14778
  {
@@ -14523,7 +14883,7 @@ function ContactPress({
14523
14883
  }
14524
14884
  });
14525
14885
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
14526
- const actionsContent = React51.useMemo(() => {
14886
+ const actionsContent = React50.useMemo(() => {
14527
14887
  if (actionsSlot) return actionsSlot;
14528
14888
  if (actions && actions.length > 0) {
14529
14889
  return actions.map((action, index) => {
@@ -14724,7 +15084,7 @@ function ContactQuote({
14724
15084
  }
14725
15085
  });
14726
15086
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
14727
- const actionsContent = React51.useMemo(() => {
15087
+ const actionsContent = React50.useMemo(() => {
14728
15088
  if (actionsSlot) return actionsSlot;
14729
15089
  if (actions && actions.length > 0) {
14730
15090
  return actions.map((action, index) => {
@@ -14925,7 +15285,7 @@ function ContactReferral({
14925
15285
  }
14926
15286
  });
14927
15287
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
14928
- const actionsContent = React51.useMemo(() => {
15288
+ const actionsContent = React50.useMemo(() => {
14929
15289
  if (actionsSlot) return actionsSlot;
14930
15290
  if (actions && actions.length > 0) {
14931
15291
  return actions.map((action, index) => {
@@ -15126,7 +15486,7 @@ function ContactReport({
15126
15486
  }
15127
15487
  });
15128
15488
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
15129
- const actionsContent = React51.useMemo(() => {
15489
+ const actionsContent = React50.useMemo(() => {
15130
15490
  if (actionsSlot) return actionsSlot;
15131
15491
  if (actions && actions.length > 0) {
15132
15492
  return actions.map((action, index) => {
@@ -15327,7 +15687,7 @@ function ContactReservation({
15327
15687
  }
15328
15688
  });
15329
15689
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
15330
- const actionsContent = React51.useMemo(() => {
15690
+ const actionsContent = React50.useMemo(() => {
15331
15691
  if (actionsSlot) return actionsSlot;
15332
15692
  if (actions && actions.length > 0) {
15333
15693
  return actions.map((action, index) => {
@@ -15528,7 +15888,7 @@ function ContactRetreat({
15528
15888
  }
15529
15889
  });
15530
15890
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
15531
- const actionsContent = React51.useMemo(() => {
15891
+ const actionsContent = React50.useMemo(() => {
15532
15892
  if (actionsSlot) return actionsSlot;
15533
15893
  if (actions && actions.length > 0) {
15534
15894
  return actions.map((action, index) => {
@@ -15729,7 +16089,7 @@ function ContactRsvp({
15729
16089
  }
15730
16090
  });
15731
16091
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
15732
- const actionsContent = React51.useMemo(() => {
16092
+ const actionsContent = React50.useMemo(() => {
15733
16093
  if (actionsSlot) return actionsSlot;
15734
16094
  if (actions && actions.length > 0) {
15735
16095
  return actions.map((action, index) => {
@@ -15930,7 +16290,7 @@ function ContactSales({
15930
16290
  }
15931
16291
  });
15932
16292
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
15933
- const actionsContent = React51.useMemo(() => {
16293
+ const actionsContent = React50.useMemo(() => {
15934
16294
  if (actionsSlot) return actionsSlot;
15935
16295
  if (actions && actions.length > 0) {
15936
16296
  return actions.map((action, index) => {
@@ -16140,7 +16500,7 @@ function ContactSchedule({
16140
16500
  }
16141
16501
  });
16142
16502
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
16143
- const actionsContent = React51.useMemo(() => {
16503
+ const actionsContent = React50.useMemo(() => {
16144
16504
  if (actionsSlot) return actionsSlot;
16145
16505
  if (actions && actions.length > 0) {
16146
16506
  return actions.map((action, index) => {
@@ -16341,7 +16701,7 @@ function ContactSponsorship({
16341
16701
  }
16342
16702
  });
16343
16703
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
16344
- const actionsContent = React51.useMemo(() => {
16704
+ const actionsContent = React50.useMemo(() => {
16345
16705
  if (actionsSlot) return actionsSlot;
16346
16706
  if (actions && actions.length > 0) {
16347
16707
  return actions.map((action, index) => {
@@ -16538,7 +16898,7 @@ function ContactSupport({
16538
16898
  }
16539
16899
  });
16540
16900
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
16541
- const actionsContent = React51.useMemo(() => {
16901
+ const actionsContent = React50.useMemo(() => {
16542
16902
  if (actionsSlot) return actionsSlot;
16543
16903
  if (actions && actions.length > 0) {
16544
16904
  return actions.map((action, index) => {
@@ -16710,7 +17070,7 @@ function ContactTenant({
16710
17070
  }
16711
17071
  });
16712
17072
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
16713
- const actionsContent = React51.useMemo(() => {
17073
+ const actionsContent = React50.useMemo(() => {
16714
17074
  if (actionsSlot) return actionsSlot;
16715
17075
  if (actions && actions.length > 0) {
16716
17076
  return actions.map((action, index) => {
@@ -16911,7 +17271,7 @@ function ContactVendor({
16911
17271
  }
16912
17272
  });
16913
17273
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
16914
- const actionsContent = React51.useMemo(() => {
17274
+ const actionsContent = React50.useMemo(() => {
16915
17275
  if (actionsSlot) return actionsSlot;
16916
17276
  if (actions && actions.length > 0) {
16917
17277
  return actions.map((action, index) => {
@@ -17112,7 +17472,7 @@ function ContactVolunteer({
17112
17472
  }
17113
17473
  });
17114
17474
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
17115
- const actionsContent = React51.useMemo(() => {
17475
+ const actionsContent = React50.useMemo(() => {
17116
17476
  if (actionsSlot) return actionsSlot;
17117
17477
  if (actions && actions.length > 0) {
17118
17478
  return actions.map((action, index) => {
@@ -17313,7 +17673,7 @@ function ContactWarranty({
17313
17673
  }
17314
17674
  });
17315
17675
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
17316
- const actionsContent = React51.useMemo(() => {
17676
+ const actionsContent = React50.useMemo(() => {
17317
17677
  if (actionsSlot) return actionsSlot;
17318
17678
  if (actions && actions.length > 0) {
17319
17679
  return actions.map((action, index) => {
@@ -17514,7 +17874,7 @@ function ContactWedding({
17514
17874
  }
17515
17875
  });
17516
17876
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
17517
- const actionsContent = React51.useMemo(() => {
17877
+ const actionsContent = React50.useMemo(() => {
17518
17878
  if (actionsSlot) return actionsSlot;
17519
17879
  if (actions && actions.length > 0) {
17520
17880
  return actions.map((action, index) => {
@@ -17781,16 +18141,16 @@ function CarouselAnimatedSections({
17781
18141
  pattern = "diagonalCrossBasic",
17782
18142
  patternOpacity = 0.033
17783
18143
  }) {
17784
- const [currentIndex, setCurrentIndex] = React51.useState(0);
17785
- const [direction, setDirection] = React51.useState(0);
17786
- const [isAnimating, setIsAnimating] = React51.useState(false);
17787
- const goToNext = React51.useCallback(() => {
18144
+ const [currentIndex, setCurrentIndex] = React50.useState(0);
18145
+ const [direction, setDirection] = React50.useState(0);
18146
+ const [isAnimating, setIsAnimating] = React50.useState(false);
18147
+ const goToNext = React50.useCallback(() => {
17788
18148
  if (isAnimating || currentIndex >= (sections?.length ?? 0) - 1) return;
17789
18149
  setIsAnimating(true);
17790
18150
  setDirection(1);
17791
18151
  setCurrentIndex((prev) => prev + 1);
17792
18152
  }, [currentIndex, isAnimating, sections?.length]);
17793
- const goToPrev = React51.useCallback(() => {
18153
+ const goToPrev = React50.useCallback(() => {
17794
18154
  if (isAnimating || currentIndex <= 0) return;
17795
18155
  setIsAnimating(true);
17796
18156
  setDirection(-1);
@@ -17802,7 +18162,7 @@ function CarouselAnimatedSections({
17802
18162
  setDirection(index > currentIndex ? 1 : -1);
17803
18163
  setCurrentIndex(index);
17804
18164
  };
17805
- React51.useEffect(() => {
18165
+ React50.useEffect(() => {
17806
18166
  const handleKeyDown = (e) => {
17807
18167
  if (e.key === "ArrowDown" || e.key === "ArrowRight") {
17808
18168
  goToNext();
@@ -17828,7 +18188,7 @@ function CarouselAnimatedSections({
17828
18188
  })
17829
18189
  };
17830
18190
  const currentSection = sections?.[currentIndex];
17831
- const actionElements = React51.useMemo(() => {
18191
+ const actionElements = React50.useMemo(() => {
17832
18192
  if (actionsSlot) return actionsSlot;
17833
18193
  if (actions && actions.length > 0) {
17834
18194
  return actions.map((action, index) => /* @__PURE__ */ jsxs(
@@ -18076,11 +18436,11 @@ function CarouselAutoProgressSlides({
18076
18436
  pattern,
18077
18437
  patternOpacity
18078
18438
  }) {
18079
- const [currentIndex, setCurrentIndex] = React51.useState(0);
18439
+ const [currentIndex, setCurrentIndex] = React50.useState(0);
18080
18440
  const progress = useMotionValue(100);
18081
- const [direction, setDirection] = React51.useState(1);
18441
+ const [direction, setDirection] = React50.useState(1);
18082
18442
  const clipPath = useMotionTemplate`inset(0 ${progress}% 0 0 round 10px)`;
18083
- React51.useEffect(() => {
18443
+ React50.useEffect(() => {
18084
18444
  const interval = setInterval(() => {
18085
18445
  const currentProgress = progress.get();
18086
18446
  if (currentProgress > 0) {
@@ -18259,22 +18619,22 @@ function CarouselAutoProgressSlides({
18259
18619
  );
18260
18620
  }
18261
18621
  function useDotButton(emblaApi) {
18262
- const [selectedIndex, setSelectedIndex] = React51.useState(0);
18263
- const [scrollSnaps, setScrollSnaps] = React51.useState([]);
18264
- const onDotButtonClick = React51.useCallback(
18622
+ const [selectedIndex, setSelectedIndex] = React50.useState(0);
18623
+ const [scrollSnaps, setScrollSnaps] = React50.useState([]);
18624
+ const onDotButtonClick = React50.useCallback(
18265
18625
  (index) => {
18266
18626
  if (!emblaApi) return;
18267
18627
  emblaApi.scrollTo(index);
18268
18628
  },
18269
18629
  [emblaApi]
18270
18630
  );
18271
- const onInit = React51.useCallback((api) => {
18631
+ const onInit = React50.useCallback((api) => {
18272
18632
  setScrollSnaps(api.scrollSnapList());
18273
18633
  }, []);
18274
- const onSelect = React51.useCallback((api) => {
18634
+ const onSelect = React50.useCallback((api) => {
18275
18635
  setSelectedIndex(api.selectedScrollSnap());
18276
18636
  }, []);
18277
- React51.useEffect(() => {
18637
+ React50.useEffect(() => {
18278
18638
  if (!emblaApi) return;
18279
18639
  onInit(emblaApi);
18280
18640
  onSelect(emblaApi);
@@ -18283,8 +18643,8 @@ function useDotButton(emblaApi) {
18283
18643
  return { selectedIndex, scrollSnaps, onDotButtonClick };
18284
18644
  }
18285
18645
  function useAutoplay(emblaApi) {
18286
- const [autoplayIsPlaying, setAutoplayIsPlaying] = React51.useState(false);
18287
- const onAutoplayButtonClick = React51.useCallback(
18646
+ const [autoplayIsPlaying, setAutoplayIsPlaying] = React50.useState(false);
18647
+ const onAutoplayButtonClick = React50.useCallback(
18288
18648
  (callback) => {
18289
18649
  const autoplay = emblaApi?.plugins()?.autoplay;
18290
18650
  if (!autoplay) return;
@@ -18294,13 +18654,13 @@ function useAutoplay(emblaApi) {
18294
18654
  },
18295
18655
  [emblaApi]
18296
18656
  );
18297
- const toggleAutoplay = React51.useCallback(() => {
18657
+ const toggleAutoplay = React50.useCallback(() => {
18298
18658
  const autoplay = emblaApi?.plugins()?.autoplay;
18299
18659
  if (!autoplay) return;
18300
18660
  const playOrStop = autoplay.isPlaying() ? autoplay.stop : autoplay.play;
18301
18661
  playOrStop();
18302
18662
  }, [emblaApi]);
18303
- React51.useEffect(() => {
18663
+ React50.useEffect(() => {
18304
18664
  const autoplay = emblaApi?.plugins()?.autoplay;
18305
18665
  if (!autoplay) return;
18306
18666
  setAutoplayIsPlaying(autoplay.isPlaying());
@@ -18309,11 +18669,11 @@ function useAutoplay(emblaApi) {
18309
18669
  return { autoplayIsPlaying, toggleAutoplay, onAutoplayButtonClick };
18310
18670
  }
18311
18671
  function useAutoplayProgress(emblaApi, progressNode) {
18312
- const [showAutoplayProgress, setShowAutoplayProgress] = React51.useState(false);
18313
- const animationName = React51.useRef("");
18314
- const timeoutId = React51.useRef(0);
18315
- const rafId = React51.useRef(0);
18316
- const startProgress = React51.useCallback(
18672
+ const [showAutoplayProgress, setShowAutoplayProgress] = React50.useState(false);
18673
+ const animationName = React50.useRef("");
18674
+ const timeoutId = React50.useRef(0);
18675
+ const rafId = React50.useRef(0);
18676
+ const startProgress = React50.useCallback(
18317
18677
  (timeUntilNext) => {
18318
18678
  const node = progressNode.current;
18319
18679
  if (!node || timeUntilNext === null) return;
@@ -18333,12 +18693,12 @@ function useAutoplayProgress(emblaApi, progressNode) {
18333
18693
  },
18334
18694
  [progressNode]
18335
18695
  );
18336
- React51.useEffect(() => {
18696
+ React50.useEffect(() => {
18337
18697
  const autoplay = emblaApi?.plugins()?.autoplay;
18338
18698
  if (!autoplay) return;
18339
18699
  emblaApi.on("autoplay:timerset", () => startProgress(autoplay.timeUntilNext())).on("autoplay:timerstopped", () => setShowAutoplayProgress(false));
18340
18700
  }, [emblaApi, startProgress]);
18341
- React51.useEffect(() => {
18701
+ React50.useEffect(() => {
18342
18702
  return () => {
18343
18703
  cancelAnimationFrame(rafId.current);
18344
18704
  clearTimeout(timeoutId.current);
@@ -18365,7 +18725,7 @@ function CarouselAutoplayProgress({
18365
18725
  pattern,
18366
18726
  patternOpacity
18367
18727
  }) {
18368
- const progressNode = React51.useRef(null);
18728
+ const progressNode = React50.useRef(null);
18369
18729
  const [emblaRef, emblaApi] = useEmblaCarousel(options, [
18370
18730
  Autoplay({ playOnInit: true, delay: autoplayDelay })
18371
18731
  ]);
@@ -18546,20 +18906,20 @@ function CarouselFeatureBadge({
18546
18906
  containerMaxWidth = "2xl"
18547
18907
  }) {
18548
18908
  const [emblaRef, emblaApi] = useEmblaCarousel();
18549
- const [canScrollPrev, setCanScrollPrev] = React51.useState(false);
18550
- const [canScrollNext, setCanScrollNext] = React51.useState(false);
18551
- const scrollPrev = React51.useCallback(() => {
18909
+ const [canScrollPrev, setCanScrollPrev] = React50.useState(false);
18910
+ const [canScrollNext, setCanScrollNext] = React50.useState(false);
18911
+ const scrollPrev = React50.useCallback(() => {
18552
18912
  emblaApi?.scrollPrev();
18553
18913
  }, [emblaApi]);
18554
- const scrollNext = React51.useCallback(() => {
18914
+ const scrollNext = React50.useCallback(() => {
18555
18915
  emblaApi?.scrollNext();
18556
18916
  }, [emblaApi]);
18557
- const onSelect = React51.useCallback(() => {
18917
+ const onSelect = React50.useCallback(() => {
18558
18918
  if (!emblaApi) return;
18559
18919
  setCanScrollPrev(emblaApi.canScrollPrev());
18560
18920
  setCanScrollNext(emblaApi.canScrollNext());
18561
18921
  }, [emblaApi]);
18562
- React51.useEffect(() => {
18922
+ React50.useEffect(() => {
18563
18923
  if (!emblaApi) return;
18564
18924
  onSelect();
18565
18925
  emblaApi.on("reInit", onSelect);
@@ -18679,10 +19039,10 @@ function CarouselFullscreenScrollFx({
18679
19039
  pattern = "diagonalCrossBasic",
18680
19040
  patternOpacity = 0.033
18681
19041
  }) {
18682
- const containerRef = React51.useRef(null);
18683
- const scrollContainerRef = React51.useRef(null);
18684
- const [activeIndex, setActiveIndex] = React51.useState(0);
18685
- React51.useEffect(() => {
19042
+ const containerRef = React50.useRef(null);
19043
+ const scrollContainerRef = React50.useRef(null);
19044
+ const [activeIndex, setActiveIndex] = React50.useState(0);
19045
+ React50.useEffect(() => {
18686
19046
  const scrollContainer = scrollContainerRef.current;
18687
19047
  if (!scrollContainer || !slides?.length) return;
18688
19048
  const handleScroll = () => {
@@ -18694,7 +19054,7 @@ function CarouselFullscreenScrollFx({
18694
19054
  scrollContainer.addEventListener("scroll", handleScroll);
18695
19055
  return () => scrollContainer.removeEventListener("scroll", handleScroll);
18696
19056
  }, [slides]);
18697
- const scrollToSlide = React51.useCallback((index) => {
19057
+ const scrollToSlide = React50.useCallback((index) => {
18698
19058
  const scrollContainer = scrollContainerRef.current;
18699
19059
  if (!scrollContainer) return;
18700
19060
  const slideHeight = scrollContainer.clientHeight;
@@ -18777,7 +19137,7 @@ function CarouselFullscreenScrollFx({
18777
19137
  className: "flex h-screen flex-col snap-y snap-mandatory overflow-x-hidden overflow-y-auto scroll-smooth",
18778
19138
  style: { scrollbarWidth: "none", msOverflowStyle: "none" },
18779
19139
  children: slidesSlot ? slidesSlot : slides?.map((slide, index) => {
18780
- const renderActions = React51.useMemo(() => {
19140
+ const renderActions = React50.useMemo(() => {
18781
19141
  if (!slide.actions || slide.actions.length === 0) return null;
18782
19142
  return slide.actions.map((action, actionIndex) => {
18783
19143
  const {
@@ -18910,25 +19270,25 @@ function CarouselGalleryThumbnails({
18910
19270
  patternOpacity,
18911
19271
  slideMediaBrightness = "100"
18912
19272
  }) {
18913
- const [currentIndex, setCurrentIndex] = React51.useState(0);
18914
- const prevSlide = React51.useCallback(() => {
19273
+ const [currentIndex, setCurrentIndex] = React50.useState(0);
19274
+ const prevSlide = React50.useCallback(() => {
18915
19275
  setCurrentIndex(
18916
19276
  (prev) => prev === 0 ? (images?.length ?? 0) - 1 : prev - 1
18917
19277
  );
18918
19278
  }, [images?.length]);
18919
- const nextSlide = React51.useCallback(() => {
19279
+ const nextSlide = React50.useCallback(() => {
18920
19280
  setCurrentIndex(
18921
19281
  (prev) => prev === (images?.length ?? 0) - 1 ? 0 : prev + 1
18922
19282
  );
18923
19283
  }, [images?.length]);
18924
- React51.useEffect(() => {
19284
+ React50.useEffect(() => {
18925
19285
  if (!autoPlay) return;
18926
19286
  const interval = setInterval(() => {
18927
19287
  nextSlide();
18928
19288
  }, autoPlayInterval);
18929
19289
  return () => clearInterval(interval);
18930
19290
  }, [currentIndex, autoPlay, autoPlayInterval, nextSlide]);
18931
- React51.useEffect(() => {
19291
+ React50.useEffect(() => {
18932
19292
  const handleKeyDown = (e) => {
18933
19293
  if (e.key === "ArrowRight") {
18934
19294
  nextSlide();
@@ -19073,9 +19433,9 @@ function CarouselHorizontalCards({
19073
19433
  pattern,
19074
19434
  patternOpacity
19075
19435
  }) {
19076
- const carouselRef = React51.useRef(null);
19077
- const [isAtStart, setIsAtStart] = React51.useState(true);
19078
- const [isAtEnd, setIsAtEnd] = React51.useState(false);
19436
+ const carouselRef = React50.useRef(null);
19437
+ const [isAtStart, setIsAtStart] = React50.useState(true);
19438
+ const [isAtEnd, setIsAtEnd] = React50.useState(false);
19079
19439
  const scrollLeft = () => {
19080
19440
  if (carouselRef.current) {
19081
19441
  carouselRef.current.scrollBy({ left: -300, behavior: "smooth" });
@@ -19086,7 +19446,7 @@ function CarouselHorizontalCards({
19086
19446
  carouselRef.current.scrollBy({ left: 300, behavior: "smooth" });
19087
19447
  }
19088
19448
  };
19089
- React51.useEffect(() => {
19449
+ React50.useEffect(() => {
19090
19450
  const checkScrollPosition = () => {
19091
19451
  if (carouselRef.current) {
19092
19452
  const { scrollLeft: scrollLeft2, scrollWidth, clientWidth } = carouselRef.current;
@@ -19286,22 +19646,22 @@ function CarouselImageHero({
19286
19646
  pattern,
19287
19647
  patternOpacity
19288
19648
  }) {
19289
- const [currentImageIndex, setCurrentImageIndex] = React51.useState(0);
19290
- const intervalRef = React51.useRef(null);
19291
- const goToNext = React51.useCallback(() => {
19649
+ const [currentImageIndex, setCurrentImageIndex] = React50.useState(0);
19650
+ const intervalRef = React50.useRef(null);
19651
+ const goToNext = React50.useCallback(() => {
19292
19652
  setCurrentImageIndex((prevIndex) => (prevIndex + 1) % (images?.length ?? 1));
19293
19653
  }, [images?.length]);
19294
- const resetInterval = React51.useCallback(() => {
19654
+ const resetInterval = React50.useCallback(() => {
19295
19655
  if (intervalRef.current) {
19296
19656
  clearInterval(intervalRef.current);
19297
19657
  }
19298
19658
  intervalRef.current = setInterval(goToNext, autoPlayInterval);
19299
19659
  }, [goToNext, autoPlayInterval]);
19300
- const goToSlide = React51.useCallback((index) => {
19660
+ const goToSlide = React50.useCallback((index) => {
19301
19661
  setCurrentImageIndex(index);
19302
19662
  resetInterval();
19303
19663
  }, [resetInterval]);
19304
- React51.useEffect(() => {
19664
+ React50.useEffect(() => {
19305
19665
  resetInterval();
19306
19666
  return () => {
19307
19667
  if (intervalRef.current) {
@@ -19474,8 +19834,8 @@ function CarouselMultiStepShowcase({
19474
19834
  pattern,
19475
19835
  patternOpacity
19476
19836
  }) {
19477
- const [activeStep, setActiveStep] = React51.useState(0);
19478
- const [direction, setDirection] = React51.useState(0);
19837
+ const [activeStep, setActiveStep] = React50.useState(0);
19838
+ const [direction, setDirection] = React50.useState(0);
19479
19839
  const goToStep = (index) => {
19480
19840
  setDirection(index > activeStep ? 1 : -1);
19481
19841
  setActiveStep(index);
@@ -19767,9 +20127,9 @@ function CarouselPortfolioHero({
19767
20127
  patternOpacity,
19768
20128
  slideMediaBrightness = "50"
19769
20129
  }) {
19770
- const [currentIndex, setCurrentIndex] = React51.useState(0);
19771
- const intervalRef = React51.useRef(null);
19772
- const resetInterval = React51.useCallback(() => {
20130
+ const [currentIndex, setCurrentIndex] = React50.useState(0);
20131
+ const intervalRef = React50.useRef(null);
20132
+ const resetInterval = React50.useCallback(() => {
19773
20133
  if (intervalRef.current) {
19774
20134
  clearInterval(intervalRef.current);
19775
20135
  }
@@ -19777,17 +20137,17 @@ function CarouselPortfolioHero({
19777
20137
  setCurrentIndex((prevIndex) => (prevIndex + 1) % (slides?.length ?? 1));
19778
20138
  }, autoPlayInterval);
19779
20139
  }, [autoPlayInterval, slides?.length]);
19780
- const goToNext = React51.useCallback(() => {
20140
+ const goToNext = React50.useCallback(() => {
19781
20141
  setCurrentIndex((prevIndex) => (prevIndex + 1) % (slides?.length ?? 1));
19782
20142
  resetInterval();
19783
20143
  }, [slides?.length, resetInterval]);
19784
- const goToPrev = React51.useCallback(() => {
20144
+ const goToPrev = React50.useCallback(() => {
19785
20145
  setCurrentIndex(
19786
20146
  (prevIndex) => (prevIndex - 1 + (slides?.length ?? 1)) % (slides?.length ?? 1)
19787
20147
  );
19788
20148
  resetInterval();
19789
20149
  }, [slides?.length, resetInterval]);
19790
- React51.useEffect(() => {
20150
+ React50.useEffect(() => {
19791
20151
  resetInterval();
19792
20152
  return () => {
19793
20153
  if (intervalRef.current) {
@@ -19979,9 +20339,9 @@ function CarouselProductFeatureShowcase({
19979
20339
  pattern,
19980
20340
  patternOpacity
19981
20341
  }) {
19982
- const [activeIndex, setActiveIndex] = React51.useState(0);
19983
- const [activeColorIndex, setActiveColorIndex] = React51.useState(0);
19984
- const [direction, setDirection] = React51.useState(0);
20342
+ const [activeIndex, setActiveIndex] = React50.useState(0);
20343
+ const [activeColorIndex, setActiveColorIndex] = React50.useState(0);
20344
+ const [direction, setDirection] = React50.useState(0);
19985
20345
  const activeFeature = features?.[activeIndex];
19986
20346
  const goToNext = () => {
19987
20347
  setDirection(1);
@@ -20201,9 +20561,9 @@ function CarouselProductFeatureShowcase({
20201
20561
  }
20202
20562
  );
20203
20563
  }
20204
- var ProgressSliderContext = React51.createContext(void 0);
20564
+ var ProgressSliderContext = React50.createContext(void 0);
20205
20565
  function useProgressSliderContext() {
20206
- const context = React51.useContext(ProgressSliderContext);
20566
+ const context = React50.useContext(ProgressSliderContext);
20207
20567
  if (!context) {
20208
20568
  throw new Error(
20209
20569
  "useProgressSliderContext must be used within a ProgressSlider"
@@ -20289,19 +20649,19 @@ function CarouselProgressSlider({
20289
20649
  pattern,
20290
20650
  patternOpacity
20291
20651
  }) {
20292
- const [active, setActive] = React51.useState(slides?.[0]?.id ?? "");
20293
- const [progress, setProgress] = React51.useState(0);
20294
- const [isFastForward, setIsFastForward] = React51.useState(false);
20295
- const [isPaused, setIsPaused] = React51.useState(false);
20296
- const frame = React51.useRef(0);
20297
- const firstFrameTime = React51.useRef(performance.now());
20298
- const targetValue = React51.useRef(null);
20299
- const pausedProgress = React51.useRef(0);
20300
- const sliderValues = React51.useMemo(
20652
+ const [active, setActive] = React50.useState(slides?.[0]?.id ?? "");
20653
+ const [progress, setProgress] = React50.useState(0);
20654
+ const [isFastForward, setIsFastForward] = React50.useState(false);
20655
+ const [isPaused, setIsPaused] = React50.useState(false);
20656
+ const frame = React50.useRef(0);
20657
+ const firstFrameTime = React50.useRef(performance.now());
20658
+ const targetValue = React50.useRef(null);
20659
+ const pausedProgress = React50.useRef(0);
20660
+ const sliderValues = React50.useMemo(
20301
20661
  () => slides?.map((slide) => slide.id),
20302
20662
  [slides]
20303
20663
  );
20304
- React51.useEffect(() => {
20664
+ React50.useEffect(() => {
20305
20665
  if ((sliderValues?.length ?? 0) > 0 && !isPaused) {
20306
20666
  firstFrameTime.current = performance.now();
20307
20667
  if (pausedProgress.current > 0) {
@@ -20466,11 +20826,11 @@ function CarouselScrollingFeatureShowcase({
20466
20826
  pattern,
20467
20827
  patternOpacity
20468
20828
  }) {
20469
- const [activeFeature, setActiveFeature] = React51.useState(
20829
+ const [activeFeature, setActiveFeature] = React50.useState(
20470
20830
  features?.[0]?.id ?? ""
20471
20831
  );
20472
- const featureRefs = React51.useRef(/* @__PURE__ */ new Map());
20473
- React51.useEffect(() => {
20832
+ const featureRefs = React50.useRef(/* @__PURE__ */ new Map());
20833
+ React50.useEffect(() => {
20474
20834
  if (!features || features.length === 0) return;
20475
20835
  const observerOptions = {
20476
20836
  root: null,
@@ -21136,10 +21496,10 @@ var ImageSlider = ({
21136
21496
  optixFlowConfig
21137
21497
  }) => {
21138
21498
  const hasImages = images.length > 0;
21139
- const [currentIndex, setCurrentIndex] = React51.useState(
21499
+ const [currentIndex, setCurrentIndex] = React50.useState(
21140
21500
  () => normalizeIndex(startIndex, images.length)
21141
21501
  );
21142
- const handleNext = React51.useCallback(() => {
21502
+ const handleNext = React50.useCallback(() => {
21143
21503
  if (!hasImages) return;
21144
21504
  setCurrentIndex((prevIndex) => {
21145
21505
  const nextIndex = prevIndex + 1 >= images.length ? 0 : prevIndex + 1;
@@ -21147,7 +21507,7 @@ var ImageSlider = ({
21147
21507
  return nextIndex;
21148
21508
  });
21149
21509
  }, [hasImages, images.length, onSlideChange]);
21150
- const handlePrevious = React51.useCallback(() => {
21510
+ const handlePrevious = React50.useCallback(() => {
21151
21511
  if (!hasImages) return;
21152
21512
  setCurrentIndex((prevIndex) => {
21153
21513
  const nextIndex = prevIndex - 1 < 0 ? images.length - 1 : prevIndex - 1;
@@ -21155,11 +21515,11 @@ var ImageSlider = ({
21155
21515
  return nextIndex;
21156
21516
  });
21157
21517
  }, [hasImages, images.length, onSlideChange]);
21158
- React51.useEffect(() => {
21518
+ React50.useEffect(() => {
21159
21519
  if (!hasImages) return;
21160
21520
  setCurrentIndex(normalizeIndex(startIndex, images.length));
21161
21521
  }, [startIndex, images.length, hasImages]);
21162
- React51.useEffect(() => {
21522
+ React50.useEffect(() => {
21163
21523
  if (!enableKeyboard || !hasImages) return;
21164
21524
  const handleKeyDown = (event) => {
21165
21525
  if (event.key === "ArrowRight") {
@@ -21173,7 +21533,7 @@ var ImageSlider = ({
21173
21533
  window.removeEventListener("keydown", handleKeyDown);
21174
21534
  };
21175
21535
  }, [enableKeyboard, handleNext, handlePrevious, hasImages]);
21176
- React51.useEffect(() => {
21536
+ React50.useEffect(() => {
21177
21537
  if (!autoplay || images.length < 2) return;
21178
21538
  const interval = window.setInterval(handleNext, autoplayIntervalMs);
21179
21539
  return () => window.clearInterval(interval);
@@ -21302,7 +21662,7 @@ var platformIconMap = {
21302
21662
  dribbble: "cib/dribbble",
21303
21663
  unknown: "icon-park-solid/circular-connection"
21304
21664
  };
21305
- var SocialLinkIcon = React51.forwardRef(
21665
+ var SocialLinkIcon = React50.forwardRef(
21306
21666
  ({
21307
21667
  platformName,
21308
21668
  label,
@@ -21315,13 +21675,13 @@ var SocialLinkIcon = React51.forwardRef(
21315
21675
  ...pressableProps
21316
21676
  }, ref) => {
21317
21677
  const platform = usePlatformFromUrl(href);
21318
- const smartPlatformName = React51.useMemo(() => {
21678
+ const smartPlatformName = React50.useMemo(() => {
21319
21679
  return platform || platformName;
21320
21680
  }, [platform, platformName]);
21321
- const iconName = React51.useMemo(() => {
21681
+ const iconName = React50.useMemo(() => {
21322
21682
  return iconNameOverride || platformIconMap[smartPlatformName];
21323
21683
  }, [iconNameOverride, smartPlatformName]);
21324
- const accessibleLabel = React51.useMemo(() => {
21684
+ const accessibleLabel = React50.useMemo(() => {
21325
21685
  return label || platformName;
21326
21686
  }, [label, platformName]);
21327
21687
  return /* @__PURE__ */ jsx(
@@ -21746,7 +22106,7 @@ function AboutExpandableValues({
21746
22106
  pattern,
21747
22107
  patternOpacity
21748
22108
  }) {
21749
- const [expandedValue, setExpandedValue] = React51.useState(null);
22109
+ const [expandedValue, setExpandedValue] = React50.useState(null);
21750
22110
  const toggleExpand = useCallback((id) => {
21751
22111
  setExpandedValue((prev) => prev === id ? null : id);
21752
22112
  }, []);
@@ -22000,7 +22360,7 @@ function CommunityInitiatives({
22000
22360
  pattern,
22001
22361
  patternOpacity
22002
22362
  }) {
22003
- const [activeCategory, setActiveCategory] = React51.useState(
22363
+ const [activeCategory, setActiveCategory] = React50.useState(
22004
22364
  categories?.[0]?.id || ""
22005
22365
  );
22006
22366
  const currentCategory = categories?.find((category) => category.id === activeCategory) || categories?.[0];
@@ -22273,7 +22633,7 @@ function AboutCultureTabs({
22273
22633
  patternOpacity
22274
22634
  }) {
22275
22635
  const resolvedAspects = aspects ?? [];
22276
- const [activeTab, setActiveTab] = React51.useState(resolvedAspects[0]?.id || "");
22636
+ const [activeTab, setActiveTab] = React50.useState(resolvedAspects[0]?.id || "");
22277
22637
  const actionsContent = useMemo(() => {
22278
22638
  if (actionsSlot) return actionsSlot;
22279
22639
  if (!actions || actions.length === 0) return null;
@@ -23001,8 +23361,8 @@ var BrandAttribution = ({
23001
23361
  }
23002
23362
  const { prefix = "", anchorText, href, suffix = "" } = options[optionIndex];
23003
23363
  const ContainerEl = variant;
23004
- const [trackedHref, setTrackedHref] = React51.useState(href);
23005
- React51.useEffect(() => {
23364
+ const [trackedHref, setTrackedHref] = React50.useState(href);
23365
+ React50.useEffect(() => {
23006
23366
  setTrackedHref(buildTrackedHref(href));
23007
23367
  }, [href]);
23008
23368
  return /* @__PURE__ */ jsxs(ContainerEl, { className: containerClassName, children: [
@@ -23422,7 +23782,7 @@ function FooterSimpleCentered({
23422
23782
  ]);
23423
23783
  const bottomLinksContent = useMemo(() => {
23424
23784
  if (!bottomLinks || bottomLinks.length === 0) return null;
23425
- return bottomLinks.map((link, idx) => /* @__PURE__ */ jsx(React51.Fragment, { children: /* @__PURE__ */ jsx(
23785
+ return bottomLinks.map((link, idx) => /* @__PURE__ */ jsx(React50.Fragment, { children: /* @__PURE__ */ jsx(
23426
23786
  Pressable,
23427
23787
  {
23428
23788
  href: link.href,
@@ -25662,9 +26022,9 @@ function FeatureChecklistImage({
25662
26022
  }
25663
26023
  );
25664
26024
  }
25665
- var CarouselContext = React51.createContext(null);
26025
+ var CarouselContext = React50.createContext(null);
25666
26026
  function useCarousel() {
25667
- const context = React51.useContext(CarouselContext);
26027
+ const context = React50.useContext(CarouselContext);
25668
26028
  if (!context) {
25669
26029
  throw new Error("useCarousel must be used within a <Carousel />");
25670
26030
  }
@@ -25686,20 +26046,20 @@ function Carousel({
25686
26046
  },
25687
26047
  plugins
25688
26048
  );
25689
- const [canScrollPrev, setCanScrollPrev] = React51.useState(false);
25690
- const [canScrollNext, setCanScrollNext] = React51.useState(false);
25691
- const onSelect = React51.useCallback((api2) => {
26049
+ const [canScrollPrev, setCanScrollPrev] = React50.useState(false);
26050
+ const [canScrollNext, setCanScrollNext] = React50.useState(false);
26051
+ const onSelect = React50.useCallback((api2) => {
25692
26052
  if (!api2) return;
25693
26053
  setCanScrollPrev(api2.canScrollPrev());
25694
26054
  setCanScrollNext(api2.canScrollNext());
25695
26055
  }, []);
25696
- const scrollPrev = React51.useCallback(() => {
26056
+ const scrollPrev = React50.useCallback(() => {
25697
26057
  api?.scrollPrev();
25698
26058
  }, [api]);
25699
- const scrollNext = React51.useCallback(() => {
26059
+ const scrollNext = React50.useCallback(() => {
25700
26060
  api?.scrollNext();
25701
26061
  }, [api]);
25702
- const handleKeyDown = React51.useCallback(
26062
+ const handleKeyDown = React50.useCallback(
25703
26063
  (event) => {
25704
26064
  if (event.key === "ArrowLeft") {
25705
26065
  event.preventDefault();
@@ -25711,11 +26071,11 @@ function Carousel({
25711
26071
  },
25712
26072
  [scrollPrev, scrollNext]
25713
26073
  );
25714
- React51.useEffect(() => {
26074
+ React50.useEffect(() => {
25715
26075
  if (!api || !setApi) return;
25716
26076
  setApi(api);
25717
26077
  }, [api, setApi]);
25718
- React51.useEffect(() => {
26078
+ React50.useEffect(() => {
25719
26079
  if (!api) return;
25720
26080
  onSelect(api);
25721
26081
  api.on("reInit", onSelect);
@@ -26639,7 +26999,7 @@ function FeatureThreeColumnValues({
26639
26999
  patternOpacity,
26640
27000
  patternClassName
26641
27001
  }) {
26642
- const renderValueIcon = React51.useCallback(
27002
+ const renderValueIcon = React50.useCallback(
26643
27003
  (value) => {
26644
27004
  if (value.icon) return value.icon;
26645
27005
  if (value.iconName)
@@ -27141,7 +27501,7 @@ function FeatureTabbedContentImage({
27141
27501
  patternOpacity,
27142
27502
  patternClassName
27143
27503
  }) {
27144
- const renderFeatures = React51.useCallback(
27504
+ const renderFeatures = React50.useCallback(
27145
27505
  (slide) => {
27146
27506
  if (slide.featuresSlot) return slide.featuresSlot;
27147
27507
  if (!slide.features || slide.features.length === 0) return null;
@@ -27165,7 +27525,7 @@ function FeatureTabbedContentImage({
27165
27525
  },
27166
27526
  []
27167
27527
  );
27168
- const renderActions = React51.useCallback(
27528
+ const renderActions = React50.useCallback(
27169
27529
  (slide) => {
27170
27530
  if (slide.actionsSlot) return slide.actionsSlot;
27171
27531
  if (!slide.actions || slide.actions.length === 0) return null;
@@ -27208,7 +27568,7 @@ function FeatureTabbedContentImage({
27208
27568
  },
27209
27569
  []
27210
27570
  );
27211
- const renderImage = React51.useCallback(
27571
+ const renderImage = React50.useCallback(
27212
27572
  (slide) => {
27213
27573
  if (slide.imageSlot) return slide.imageSlot;
27214
27574
  if (!slide.image) return null;
@@ -27444,7 +27804,7 @@ function FeatureUtilityCardsGrid({
27444
27804
  }
27445
27805
  );
27446
27806
  }, [learnMoreSlot, learnMoreAction, background]);
27447
- const renderUtilityImage = React51.useCallback(
27807
+ const renderUtilityImage = React50.useCallback(
27448
27808
  (utility) => {
27449
27809
  if (utility.imageSlot) return utility.imageSlot;
27450
27810
  if (utility.image) {
@@ -27622,7 +27982,7 @@ function FeatureBentoUtilities({
27622
27982
  patternOpacity,
27623
27983
  patternClassName
27624
27984
  }) {
27625
- const renderCard = React51.useCallback(
27985
+ const renderCard = React50.useCallback(
27626
27986
  (card, index) => {
27627
27987
  const hasImage = card.imageSrc || card.imageSlot;
27628
27988
  const cardClasses = cn(
@@ -27678,7 +28038,7 @@ function FeatureBentoUtilities({
27678
28038
  },
27679
28039
  [optixFlowConfig]
27680
28040
  );
27681
- const renderColumn = React51.useCallback(
28041
+ const renderColumn = React50.useCallback(
27682
28042
  (cards, slot) => {
27683
28043
  if (slot) return slot;
27684
28044
  if (!cards || cards.length === 0) return null;
@@ -28924,7 +29284,7 @@ function FeatureBentoImageGrid({
28924
29284
  patternOpacity,
28925
29285
  patternClassName
28926
29286
  }) {
28927
- const renderItemIcon = React51.useCallback(
29287
+ const renderItemIcon = React50.useCallback(
28928
29288
  (item) => {
28929
29289
  if (item.icon) return item.icon;
28930
29290
  if (item.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: item.iconName, size: 24 });
@@ -28932,7 +29292,7 @@ function FeatureBentoImageGrid({
28932
29292
  },
28933
29293
  []
28934
29294
  );
28935
- const renderItemImage = React51.useCallback(
29295
+ const renderItemImage = React50.useCallback(
28936
29296
  (item, imageClassName) => {
28937
29297
  if (item.imageSlot) return item.imageSlot;
28938
29298
  if (item.imageSrc) {
@@ -28951,7 +29311,7 @@ function FeatureBentoImageGrid({
28951
29311
  },
28952
29312
  [optixFlowConfig]
28953
29313
  );
28954
- const renderLargeCard = React51.useCallback(
29314
+ const renderLargeCard = React50.useCallback(
28955
29315
  (item) => {
28956
29316
  const iconContent = renderItemIcon(item);
28957
29317
  const hasIconBadgeContent = iconContent || item.iconBadge;
@@ -29039,7 +29399,7 @@ function FeatureBentoImageGrid({
29039
29399
  },
29040
29400
  [largeCardClassName, renderItemImage, renderItemIcon]
29041
29401
  );
29042
- const renderSmallCard = React51.useCallback(
29402
+ const renderSmallCard = React50.useCallback(
29043
29403
  (item, index) => {
29044
29404
  const iconContent = renderItemIcon(item);
29045
29405
  const hasIconBadgeContent = iconContent || item.iconBadge;
@@ -29654,7 +30014,7 @@ function FeatureAccordionImage({
29654
30014
  patternOpacity,
29655
30015
  patternClassName
29656
30016
  }) {
29657
- const [activeItem, setActiveItem] = React51.useState(defaultValue || "item-0");
30017
+ const [activeItem, setActiveItem] = React50.useState(defaultValue || "item-0");
29658
30018
  const activeIndex = parseInt(activeItem.replace("item-", ""), 10) || 0;
29659
30019
  const currentImage = items?.[activeIndex] || items?.[0];
29660
30020
  const accordionItemsContent = useMemo(() => {
@@ -29803,7 +30163,7 @@ function FeatureCapabilitiesGrid({
29803
30163
  patternOpacity,
29804
30164
  patternClassName
29805
30165
  }) {
29806
- const renderItemIcon = React51.useCallback(
30166
+ const renderItemIcon = React50.useCallback(
29807
30167
  (item) => {
29808
30168
  if (item.icon) return item.icon;
29809
30169
  if (item.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: item.iconName, size: 20 });
@@ -29955,7 +30315,7 @@ function FeatureCapabilitiesGrid({
29955
30315
  }
29956
30316
  );
29957
30317
  }
29958
- var TeamMemberBackgroundImageCard = React51.forwardRef(
30318
+ var TeamMemberBackgroundImageCard = React50.forwardRef(
29959
30319
  ({ className, imageUrl, imageAlt, children, optixFlowConfig, background, ...props }, ref) => {
29960
30320
  return /* @__PURE__ */ jsxs(
29961
30321
  "div",
@@ -30003,7 +30363,7 @@ function TeamMediaShowcase({
30003
30363
  actionClassName,
30004
30364
  optixFlowConfig
30005
30365
  }) {
30006
- const renderItems = React51.useMemo(() => {
30366
+ const renderItems = React50.useMemo(() => {
30007
30367
  if (itemsSlot) return itemsSlot;
30008
30368
  return items.map((member, idx) => {
30009
30369
  const imageAlt = member.imageAlt || (member.name && typeof member.name === "string" && member.name.trim() !== "" ? member.name : `member-${idx}`);
@@ -30101,7 +30461,7 @@ function TeamSimpleGrid({
30101
30461
  memberNameClassName,
30102
30462
  memberRoleClassName
30103
30463
  }) {
30104
- const renderMembers = React51.useMemo(() => {
30464
+ const renderMembers = React50.useMemo(() => {
30105
30465
  if (membersSlot) return membersSlot;
30106
30466
  if (!members || members.length === 0) return null;
30107
30467
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -30263,7 +30623,7 @@ function FooterBrandLinksContact({
30263
30623
  linkListClassName,
30264
30624
  linkItemClassName
30265
30625
  ]);
30266
- const contactItemsContent = React51.useMemo(() => {
30626
+ const contactItemsContent = React50.useMemo(() => {
30267
30627
  if (!contactItems || contactItems.length === 0) return null;
30268
30628
  return contactItems.map((item, idx) => /* @__PURE__ */ jsxs(
30269
30629
  "div",
@@ -30621,7 +30981,7 @@ function TeamSocialGrid({
30621
30981
  memberRoleClassName,
30622
30982
  socialLinksClassName
30623
30983
  }) {
30624
- const renderMembers = React51.useMemo(() => {
30984
+ const renderMembers = React50.useMemo(() => {
30625
30985
  if (membersSlot) return membersSlot;
30626
30986
  if (!members || members.length === 0) return null;
30627
30987
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -30773,7 +31133,7 @@ function TeamGradientCards({
30773
31133
  memberRoleClassName,
30774
31134
  socialLinksClassName
30775
31135
  }) {
30776
- const renderMembers = React51.useMemo(() => {
31136
+ const renderMembers = React50.useMemo(() => {
30777
31137
  if (membersSlot) return membersSlot;
30778
31138
  if (!members || members.length === 0) return null;
30779
31139
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -30929,7 +31289,7 @@ function TeamBioBadges({
30929
31289
  memberBioClassName,
30930
31290
  socialLinksClassName
30931
31291
  }) {
30932
- const renderMembers = React51.useMemo(() => {
31292
+ const renderMembers = React50.useMemo(() => {
30933
31293
  if (membersSlot) return membersSlot;
30934
31294
  if (!members || members.length === 0) return null;
30935
31295
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -31106,7 +31466,7 @@ function TeamExpertiseCards({
31106
31466
  ctaDescriptionClassName,
31107
31467
  ctaButtonClassName
31108
31468
  }) {
31109
- const renderMembers = React51.useMemo(() => {
31469
+ const renderMembers = React50.useMemo(() => {
31110
31470
  if (membersSlot) return membersSlot;
31111
31471
  if (!members || members.length === 0) return null;
31112
31472
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -31183,7 +31543,7 @@ function TeamExpertiseCards({
31183
31543
  member.id
31184
31544
  ));
31185
31545
  }, [membersSlot, members, background, memberCardClassName, avatarClassName, memberNameClassName, memberRoleClassName, departmentBadgeClassName, memberDescriptionClassName, expertiseClassName]);
31186
- const renderCta = React51.useMemo(() => {
31546
+ const renderCta = React50.useMemo(() => {
31187
31547
  if (ctaSlot) return ctaSlot;
31188
31548
  return /* @__PURE__ */ jsxs(
31189
31549
  "div",
@@ -31299,7 +31659,7 @@ function TeamCompactGrid({
31299
31659
  ctaDescriptionClassName,
31300
31660
  ctaButtonClassName
31301
31661
  }) {
31302
- const renderMembers = React51.useMemo(() => {
31662
+ const renderMembers = React50.useMemo(() => {
31303
31663
  if (membersSlot) return membersSlot;
31304
31664
  if (!members || members.length === 0) return null;
31305
31665
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -31354,7 +31714,7 @@ function TeamCompactGrid({
31354
31714
  member.id
31355
31715
  ));
31356
31716
  }, [membersSlot, members, background, memberCardClassName, avatarClassName, memberNameClassName, memberRoleClassName, departmentBadgeClassName]);
31357
- const renderCta = React51.useMemo(() => {
31717
+ const renderCta = React50.useMemo(() => {
31358
31718
  if (ctaSlot) return ctaSlot;
31359
31719
  return /* @__PURE__ */ jsxs(
31360
31720
  "div",
@@ -31458,7 +31818,7 @@ function TeamInvestorShowcase({
31458
31818
  investorCompanyClassName,
31459
31819
  optixFlowConfig
31460
31820
  }) {
31461
- const renderInvestors = React51.useMemo(() => {
31821
+ const renderInvestors = React50.useMemo(() => {
31462
31822
  if (investorsSlot) return investorsSlot;
31463
31823
  if (!investors || investors.length === 0) return null;
31464
31824
  return investors.map((investor) => /* @__PURE__ */ jsxs("div", { className: investorCardClassName, children: [
@@ -31532,7 +31892,7 @@ function TeamCarouselExperience({
31532
31892
  memberRoleClassName,
31533
31893
  optixFlowConfig
31534
31894
  }) {
31535
- const renderMembers = React51.useMemo(() => {
31895
+ const renderMembers = React50.useMemo(() => {
31536
31896
  if (membersSlot) return membersSlot;
31537
31897
  if (!members || members.length === 0) return null;
31538
31898
  return members.map((member, idx) => /* @__PURE__ */ jsx(CarouselItem, { className: "max-w-72", children: /* @__PURE__ */ jsxs(
@@ -31666,20 +32026,20 @@ function TeamFilterableSearch({
31666
32026
  emptyStateClassName,
31667
32027
  emptyStateMessage
31668
32028
  }) {
31669
- const [searchQuery, setSearchQuery] = React51.useState("");
31670
- const [selectedDepartment, setSelectedDepartment] = React51.useState("All");
31671
- const departments = React51.useMemo(() => {
32029
+ const [searchQuery, setSearchQuery] = React50.useState("");
32030
+ const [selectedDepartment, setSelectedDepartment] = React50.useState("All");
32031
+ const departments = React50.useMemo(() => {
31672
32032
  const depts = new Set(members.map((m) => m.department));
31673
32033
  return ["All", ...Array.from(depts)];
31674
32034
  }, [members]);
31675
- const filteredMembers = React51.useMemo(() => {
32035
+ const filteredMembers = React50.useMemo(() => {
31676
32036
  return members.filter((member) => {
31677
32037
  const matchesSearch = searchQuery === "" || member.name.toLowerCase().includes(searchQuery.toLowerCase()) || member.role.toLowerCase().includes(searchQuery.toLowerCase()) || member.description.toLowerCase().includes(searchQuery.toLowerCase());
31678
32038
  const matchesDepartment = selectedDepartment === "All" || member.department === selectedDepartment;
31679
32039
  return matchesSearch && matchesDepartment;
31680
32040
  });
31681
32041
  }, [members, searchQuery, selectedDepartment]);
31682
- const renderFilters = React51.useMemo(() => {
32042
+ const renderFilters = React50.useMemo(() => {
31683
32043
  if (filtersSlot) return filtersSlot;
31684
32044
  return /* @__PURE__ */ jsxs(
31685
32045
  "div",
@@ -31734,7 +32094,7 @@ function TeamFilterableSearch({
31734
32094
  selectedDepartment,
31735
32095
  filterButtonClassName
31736
32096
  ]);
31737
- const renderMembers = React51.useMemo(() => {
32097
+ const renderMembers = React50.useMemo(() => {
31738
32098
  if (membersSlot) return membersSlot;
31739
32099
  return filteredMembers.map((member) => /* @__PURE__ */ jsx(
31740
32100
  "div",
@@ -31921,7 +32281,7 @@ function TeamCompactCta({
31921
32281
  memberRoleClassName,
31922
32282
  ctaClassName
31923
32283
  }) {
31924
- const renderMembers = React51.useMemo(() => {
32284
+ const renderMembers = React50.useMemo(() => {
31925
32285
  if (membersSlot) return membersSlot;
31926
32286
  if (!members || members.length === 0) return null;
31927
32287
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -31949,7 +32309,7 @@ function TeamCompactCta({
31949
32309
  member.id
31950
32310
  ));
31951
32311
  }, [membersSlot, members, memberCardClassName, avatarClassName, memberNameClassName, memberRoleClassName, background]);
31952
- const renderCta = React51.useMemo(() => {
32312
+ const renderCta = React50.useMemo(() => {
31953
32313
  if (ctaSlot) return ctaSlot;
31954
32314
  return /* @__PURE__ */ jsx(
31955
32315
  Pressable,
@@ -32040,7 +32400,7 @@ function TeamHoverHighlight({
32040
32400
  socialLinksClassName,
32041
32401
  optixFlowConfig
32042
32402
  }) {
32043
- const renderMembers = React51.useMemo(() => {
32403
+ const renderMembers = React50.useMemo(() => {
32044
32404
  if (membersSlot) return membersSlot;
32045
32405
  if (!members || members.length === 0) return null;
32046
32406
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -32189,7 +32549,7 @@ function TeamSocialCards({
32189
32549
  socialLinksClassName,
32190
32550
  optixFlowConfig
32191
32551
  }) {
32192
- const renderMembers = React51.useMemo(() => {
32552
+ const renderMembers = React50.useMemo(() => {
32193
32553
  if (membersSlot) return membersSlot;
32194
32554
  if (!members || members.length === 0) return null;
32195
32555
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -32359,7 +32719,7 @@ function TeamGridAnimated({
32359
32719
  "hsl(var(--muted))",
32360
32720
  "hsl(var(--warning)/0.2)"
32361
32721
  ];
32362
- const renderMembers = React51.useMemo(() => {
32722
+ const renderMembers = React50.useMemo(() => {
32363
32723
  if (membersSlot) return membersSlot;
32364
32724
  if (!members || members.length === 0) return null;
32365
32725
  return members.map((member, index) => /* @__PURE__ */ jsxs(
@@ -32459,7 +32819,7 @@ function TeamGridAnimated({
32459
32819
  memberDesignationClassName,
32460
32820
  socialLinksClassName
32461
32821
  ]);
32462
- const renderSocialLinksMain = React51.useMemo(() => {
32822
+ const renderSocialLinksMain = React50.useMemo(() => {
32463
32823
  if (socialLinksMainSlot) return socialLinksMainSlot;
32464
32824
  if (!socialLinksMain || socialLinksMain.length === 0) return null;
32465
32825
  return /* @__PURE__ */ jsxs("div", { className: "flex w-full items-center justify-center gap-4 py-4 md:justify-center", children: [
@@ -32576,7 +32936,7 @@ function TeamDepartmentSections({
32576
32936
  memberRoleClassName,
32577
32937
  optixFlowConfig
32578
32938
  }) {
32579
- const renderDepartments = React51.useMemo(() => {
32939
+ const renderDepartments = React50.useMemo(() => {
32580
32940
  if (departmentsSlot) return departmentsSlot;
32581
32941
  if (!departments || departments.length === 0) return null;
32582
32942
  return departments.map((department, deptIndex) => /* @__PURE__ */ jsxs(
@@ -32680,7 +33040,7 @@ function TeamAlternatingBios({
32680
33040
  socialLinksClassName,
32681
33041
  optixFlowConfig
32682
33042
  }) {
32683
- const renderMembers = React51.useMemo(() => {
33043
+ const renderMembers = React50.useMemo(() => {
32684
33044
  if (membersSlot) return membersSlot;
32685
33045
  if (!members || members.length === 0) return null;
32686
33046
  return members.map((member, index) => /* @__PURE__ */ jsxs(
@@ -32862,7 +33222,7 @@ function TeamAvatarSocial({
32862
33222
  memberRoleClassName,
32863
33223
  socialLinksClassName
32864
33224
  }) {
32865
- const renderMembers = React51.useMemo(() => {
33225
+ const renderMembers = React50.useMemo(() => {
32866
33226
  if (membersSlot) return membersSlot;
32867
33227
  if (!members || members.length === 0) return null;
32868
33228
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -33005,7 +33365,7 @@ function TeamHoverOverlay({
33005
33365
  socialLinksClassName,
33006
33366
  optixFlowConfig
33007
33367
  }) {
33008
- const renderMembers = React51.useMemo(() => {
33368
+ const renderMembers = React50.useMemo(() => {
33009
33369
  if (membersSlot) return membersSlot;
33010
33370
  if (!members || members.length === 0) return null;
33011
33371
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -33181,14 +33541,14 @@ function TeamRoleFilter({
33181
33541
  socialLinksClassName,
33182
33542
  optixFlowConfig
33183
33543
  }) {
33184
- const [selectedRole, setSelectedRole] = React51.useState("All");
33185
- const filteredMembers = React51.useMemo(() => {
33544
+ const [selectedRole, setSelectedRole] = React50.useState("All");
33545
+ const filteredMembers = React50.useMemo(() => {
33186
33546
  if (!members) return [];
33187
33547
  return members.filter(
33188
33548
  (member) => selectedRole === "All" ? true : member.role === selectedRole
33189
33549
  );
33190
33550
  }, [members, selectedRole]);
33191
- const renderRoles = React51.useMemo(() => {
33551
+ const renderRoles = React50.useMemo(() => {
33192
33552
  if (rolesSlot) return rolesSlot;
33193
33553
  if (!roles) return null;
33194
33554
  return /* @__PURE__ */ jsx(
@@ -33212,7 +33572,7 @@ function TeamRoleFilter({
33212
33572
  }
33213
33573
  );
33214
33574
  }, [rolesSlot, filtersClassName, roles, selectedRole, filterButtonClassName]);
33215
- const renderMembers = React51.useMemo(() => {
33575
+ const renderMembers = React50.useMemo(() => {
33216
33576
  if (membersSlot) return membersSlot;
33217
33577
  return filteredMembers.map((member) => /* @__PURE__ */ jsx(
33218
33578
  Card,
@@ -33372,7 +33732,7 @@ function TeamContactCards({
33372
33732
  socialLinksClassName,
33373
33733
  optixFlowConfig
33374
33734
  }) {
33375
- const getStatusColor = React51.useCallback((status) => {
33735
+ const getStatusColor = React50.useCallback((status) => {
33376
33736
  switch (status) {
33377
33737
  case "active":
33378
33738
  return "bg-success";
@@ -33382,7 +33742,7 @@ function TeamContactCards({
33382
33742
  return getTextColor(background, "muted");
33383
33743
  }
33384
33744
  }, [background]);
33385
- const renderMembers = React51.useMemo(() => {
33745
+ const renderMembers = React50.useMemo(() => {
33386
33746
  if (membersSlot) return membersSlot;
33387
33747
  if (!members || members.length === 0) return null;
33388
33748
  return members.map((member) => /* @__PURE__ */ jsx(Card, { className: cn("p-0", memberCardClassName), children: /* @__PURE__ */ jsxs(CardContent, { className: "p-6!", children: [
@@ -33589,7 +33949,7 @@ function TeamLargeImages({
33589
33949
  socialLinksClassName,
33590
33950
  optixFlowConfig
33591
33951
  }) {
33592
- const renderMembers = React51.useMemo(() => {
33952
+ const renderMembers = React50.useMemo(() => {
33593
33953
  if (membersSlot) return membersSlot;
33594
33954
  if (!members || members.length === 0) return null;
33595
33955
  return members.map((member) => /* @__PURE__ */ jsxs(
@@ -33764,7 +34124,7 @@ function TeamSkillBadges({
33764
34124
  socialLinksClassName,
33765
34125
  optixFlowConfig
33766
34126
  }) {
33767
- const renderMembers = React51.useMemo(() => {
34127
+ const renderMembers = React50.useMemo(() => {
33768
34128
  if (membersSlot) return membersSlot;
33769
34129
  if (!members || members.length === 0) return null;
33770
34130
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -33954,7 +34314,7 @@ function TeamTestimonialStats({
33954
34314
  socialLinksClassName,
33955
34315
  optixFlowConfig
33956
34316
  }) {
33957
- const renderMembers = React51.useMemo(() => {
34317
+ const renderMembers = React50.useMemo(() => {
33958
34318
  if (membersSlot) return membersSlot;
33959
34319
  if (!members || members.length === 0) return null;
33960
34320
  return members.map((member) => /* @__PURE__ */ jsx(
@@ -38098,7 +38458,7 @@ function BlogGridAuthorCardsComponent({
38098
38458
  pattern,
38099
38459
  patternOpacity
38100
38460
  }) {
38101
- const viewAllActionContent = React51.useMemo(() => {
38461
+ const viewAllActionContent = React50.useMemo(() => {
38102
38462
  if (viewAllSlot) return viewAllSlot;
38103
38463
  if (!viewAllAction) return null;
38104
38464
  const {
@@ -38123,7 +38483,7 @@ function BlogGridAuthorCardsComponent({
38123
38483
  }
38124
38484
  );
38125
38485
  }, [viewAllSlot, viewAllAction]);
38126
- const postsContent = React51.useMemo(() => {
38486
+ const postsContent = React50.useMemo(() => {
38127
38487
  if (postsSlot) return postsSlot;
38128
38488
  if (!posts || posts.length === 0) return null;
38129
38489
  return posts.map((post) => {
@@ -38235,7 +38595,7 @@ function BlogCardsTaglineCta({
38235
38595
  pattern,
38236
38596
  patternOpacity
38237
38597
  }) {
38238
- const ctaActionContent = React51.useMemo(() => {
38598
+ const ctaActionContent = React50.useMemo(() => {
38239
38599
  if (ctaSlot) return ctaSlot;
38240
38600
  if (!ctaAction) return null;
38241
38601
  const {
@@ -38263,7 +38623,7 @@ function BlogCardsTaglineCta({
38263
38623
  }
38264
38624
  );
38265
38625
  }, [ctaSlot, ctaAction, ctaClassName]);
38266
- const postsContent = React51.useMemo(() => {
38626
+ const postsContent = React50.useMemo(() => {
38267
38627
  if (postsSlot) return postsSlot;
38268
38628
  if (!posts || posts.length === 0) return null;
38269
38629
  return posts.map((post) => {
@@ -38409,7 +38769,7 @@ function BlogCardsReadTime({
38409
38769
  pattern,
38410
38770
  patternOpacity
38411
38771
  }) {
38412
- const renderedViewAllAction = React51.useMemo(() => {
38772
+ const renderedViewAllAction = React50.useMemo(() => {
38413
38773
  if (viewAllSlot) return viewAllSlot;
38414
38774
  if (!viewAllAction) return null;
38415
38775
  const {
@@ -38426,7 +38786,7 @@ function BlogCardsReadTime({
38426
38786
  iconAfter
38427
38787
  ] }) });
38428
38788
  }, [viewAllSlot, viewAllAction]);
38429
- const renderedPosts = React51.useMemo(() => {
38789
+ const renderedPosts = React50.useMemo(() => {
38430
38790
  if (postsSlot) return postsSlot;
38431
38791
  if (!posts || posts.length === 0) return null;
38432
38792
  return posts.map((post) => {
@@ -38563,7 +38923,7 @@ function BlogCategoryOverlay({
38563
38923
  pattern,
38564
38924
  patternOpacity
38565
38925
  }) {
38566
- const viewAllActionContent = React51.useMemo(() => {
38926
+ const viewAllActionContent = React50.useMemo(() => {
38567
38927
  if (viewAllSlot) return viewAllSlot;
38568
38928
  if (!viewAllAction) return null;
38569
38929
  const {
@@ -38591,7 +38951,7 @@ function BlogCategoryOverlay({
38591
38951
  }
38592
38952
  );
38593
38953
  }, [viewAllSlot, viewAllAction, viewAllClassName]);
38594
- const postsContent = React51.useMemo(() => {
38954
+ const postsContent = React50.useMemo(() => {
38595
38955
  if (postsSlot) return postsSlot;
38596
38956
  if (!posts || posts.length === 0) return null;
38597
38957
  return posts.map((post) => {
@@ -38739,7 +39099,7 @@ function BlogFeaturedPopular({
38739
39099
  }) {
38740
39100
  const featuredPost = posts?.[0];
38741
39101
  const popularPosts = posts?.slice(1);
38742
- const renderedFeaturedPost = React51.useMemo(() => {
39102
+ const renderedFeaturedPost = React50.useMemo(() => {
38743
39103
  if (featuredSlot) return featuredSlot;
38744
39104
  if (!featuredPost) return null;
38745
39105
  const postHref = featuredPost.href || featuredPost.url || featuredPost.link;
@@ -38791,7 +39151,7 @@ function BlogFeaturedPopular({
38791
39151
  featuredContentClassName,
38792
39152
  optixFlowConfig
38793
39153
  ]);
38794
- const renderedPopularPosts = React51.useMemo(() => {
39154
+ const renderedPopularPosts = React50.useMemo(() => {
38795
39155
  if (postsSlot) return postsSlot;
38796
39156
  if (!popularPosts || popularPosts.length === 0) return null;
38797
39157
  return popularPosts.map((post) => {
@@ -38908,7 +39268,7 @@ function BlogRelatedArticles({
38908
39268
  pattern,
38909
39269
  patternOpacity
38910
39270
  }) {
38911
- const renderedSeeAllAction = React51.useMemo(() => {
39271
+ const renderedSeeAllAction = React50.useMemo(() => {
38912
39272
  if (seeAllSlot) return seeAllSlot;
38913
39273
  if (!seeAllAction) return null;
38914
39274
  const {
@@ -38937,7 +39297,7 @@ function BlogRelatedArticles({
38937
39297
  }
38938
39298
  );
38939
39299
  }, [seeAllSlot, seeAllAction, seeAllClassName]);
38940
- const renderedArticles = React51.useMemo(() => {
39300
+ const renderedArticles = React50.useMemo(() => {
38941
39301
  if (articlesSlot) return articlesSlot;
38942
39302
  if (!articles || articles.length === 0) return null;
38943
39303
  return articles.map((item) => {
@@ -39245,7 +39605,7 @@ function BlogHorizontalCards({
39245
39605
  pattern,
39246
39606
  patternOpacity
39247
39607
  }) {
39248
- const ctaContent = React51.useMemo(() => {
39608
+ const ctaContent = React50.useMemo(() => {
39249
39609
  if (ctaSlot) return ctaSlot;
39250
39610
  if (!ctaAction) return null;
39251
39611
  const {
@@ -39270,7 +39630,7 @@ function BlogHorizontalCards({
39270
39630
  }
39271
39631
  );
39272
39632
  }, [ctaSlot, ctaAction]);
39273
- const postsContent = React51.useMemo(() => {
39633
+ const postsContent = React50.useMemo(() => {
39274
39634
  if (postsSlot) return postsSlot;
39275
39635
  if (!posts || posts.length === 0) return null;
39276
39636
  return posts.map((post) => {
@@ -39452,7 +39812,7 @@ function BreadcrumbSeparator({
39452
39812
  );
39453
39813
  }
39454
39814
  var POSTS_PER_PAGE = 6;
39455
- var BlogCard = React51.memo(function BlogCard2({
39815
+ var BlogCard = React50.memo(function BlogCard2({
39456
39816
  post,
39457
39817
  optixFlowConfig,
39458
39818
  className
@@ -39491,7 +39851,7 @@ var BlogCard = React51.memo(function BlogCard2({
39491
39851
  ] })
39492
39852
  ] }) });
39493
39853
  });
39494
- var FilterForm = React51.memo(function FilterForm2({
39854
+ var FilterForm = React50.memo(function FilterForm2({
39495
39855
  categories,
39496
39856
  selectedCategories,
39497
39857
  onCategoryChange,
@@ -39524,7 +39884,7 @@ var FilterForm = React51.memo(function FilterForm2({
39524
39884
  }
39525
39885
  );
39526
39886
  });
39527
- var BreadcrumbBlog = React51.memo(function BreadcrumbBlog2({
39887
+ var BreadcrumbBlog = React50.memo(function BreadcrumbBlog2({
39528
39888
  breadcrumb
39529
39889
  }) {
39530
39890
  return /* @__PURE__ */ jsx(Breadcrumb, { children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumb.map((item, i) => {
@@ -39606,12 +39966,12 @@ function BlogFilteredResultsComponent({
39606
39966
  }, [posts, selectedCategories]);
39607
39967
  const postsToDisplay = filteredPosts.length > 0 ? filteredPosts : posts || [];
39608
39968
  const hasMore = visibleCount < postsToDisplay.length;
39609
- const breadcrumbContent = React51.useMemo(() => {
39969
+ const breadcrumbContent = React50.useMemo(() => {
39610
39970
  if (breadcrumbSlot) return breadcrumbSlot;
39611
39971
  if (!breadcrumb || breadcrumb.length === 0) return null;
39612
39972
  return /* @__PURE__ */ jsx(BreadcrumbBlog, { breadcrumb });
39613
39973
  }, [breadcrumbSlot, breadcrumb]);
39614
- const primaryPostContent = React51.useMemo(() => {
39974
+ const primaryPostContent = React50.useMemo(() => {
39615
39975
  if (primaryPostSlot) return primaryPostSlot;
39616
39976
  if (!primaryPost) return null;
39617
39977
  return /* @__PURE__ */ jsx(
@@ -39623,7 +39983,7 @@ function BlogFilteredResultsComponent({
39623
39983
  }
39624
39984
  );
39625
39985
  }, [primaryPostSlot, primaryPost, optixFlowConfig, postCardClassName]);
39626
- const categoriesContent = React51.useMemo(() => {
39986
+ const categoriesContent = React50.useMemo(() => {
39627
39987
  if (categoriesSlot) return categoriesSlot;
39628
39988
  if (!categories || categories.length === 0) return null;
39629
39989
  return /* @__PURE__ */ jsx(
@@ -39642,7 +40002,7 @@ function BlogFilteredResultsComponent({
39642
40002
  handleCategoryChange,
39643
40003
  categoriesClassName
39644
40004
  ]);
39645
- const postsContent = React51.useMemo(() => {
40005
+ const postsContent = React50.useMemo(() => {
39646
40006
  if (postsSlot) return postsSlot;
39647
40007
  return postsToDisplay.slice(0, visibleCount).map((post) => {
39648
40008
  const postKey = post.id || String(post.title) || Math.random().toString();
@@ -39663,7 +40023,7 @@ function BlogFilteredResultsComponent({
39663
40023
  optixFlowConfig,
39664
40024
  postCardClassName
39665
40025
  ]);
39666
- const loadMoreContent = React51.useMemo(() => {
40026
+ const loadMoreContent = React50.useMemo(() => {
39667
40027
  if (loadMoreSlot) return loadMoreSlot;
39668
40028
  if (!loadMoreAction || !hasMore) return null;
39669
40029
  const {
@@ -39789,7 +40149,7 @@ function BlogMasonryFeaturedComponent({
39789
40149
  }) {
39790
40150
  const featuredPost = posts?.[0];
39791
40151
  const otherPosts = posts?.slice(1);
39792
- const featuredPostContent = React51.useMemo(() => {
40152
+ const featuredPostContent = React50.useMemo(() => {
39793
40153
  if (featuredSlot) return featuredSlot;
39794
40154
  if (!featuredPost) return null;
39795
40155
  const postHref = featuredPost.href || featuredPost.url || featuredPost.link || "#";
@@ -39839,7 +40199,7 @@ function BlogMasonryFeaturedComponent({
39839
40199
  featuredImageClassName,
39840
40200
  optixFlowConfig
39841
40201
  ]);
39842
- const otherPostsContent = React51.useMemo(() => {
40202
+ const otherPostsContent = React50.useMemo(() => {
39843
40203
  if (postsSlot) return postsSlot;
39844
40204
  if (!otherPosts || otherPosts.length === 0) return null;
39845
40205
  return otherPosts.map((post) => {
@@ -39928,7 +40288,7 @@ function BlogHorizontalTimelineComponent({
39928
40288
  pattern,
39929
40289
  patternOpacity
39930
40290
  }) {
39931
- const renderPosts = React51.useMemo(() => {
40291
+ const renderPosts = React50.useMemo(() => {
39932
40292
  if (postsSlot) return postsSlot;
39933
40293
  if (!posts || posts.length === 0) return null;
39934
40294
  return posts.map((post, index) => {
@@ -40053,7 +40413,7 @@ function BlogGridNinePosts({
40053
40413
  pattern,
40054
40414
  patternOpacity
40055
40415
  }) {
40056
- const renderedCtaAction = React51.useMemo(() => {
40416
+ const renderedCtaAction = React50.useMemo(() => {
40057
40417
  if (ctaSlot) return ctaSlot;
40058
40418
  if (!ctaAction) return null;
40059
40419
  const {
@@ -40078,7 +40438,7 @@ function BlogGridNinePosts({
40078
40438
  }
40079
40439
  );
40080
40440
  }, [ctaSlot, ctaAction]);
40081
- const renderedPosts = React51.useMemo(() => {
40441
+ const renderedPosts = React50.useMemo(() => {
40082
40442
  if (postsSlot) return postsSlot;
40083
40443
  if (!posts || posts.length === 0) return null;
40084
40444
  return posts.map((post) => {
@@ -40176,9 +40536,9 @@ var AppleCarousel = ({
40176
40536
  className,
40177
40537
  containerClassName
40178
40538
  }) => {
40179
- const carouselRef = React51__default.useRef(null);
40180
- const [canScrollLeft, setCanScrollLeft] = React51__default.useState(false);
40181
- const [canScrollRight, setCanScrollRight] = React51__default.useState(true);
40539
+ const carouselRef = React50__default.useRef(null);
40540
+ const [canScrollLeft, setCanScrollLeft] = React50__default.useState(false);
40541
+ const [canScrollRight, setCanScrollRight] = React50__default.useState(true);
40182
40542
  const [currentIndex, setCurrentIndex] = useState(0);
40183
40543
  useEffect(() => {
40184
40544
  if (carouselRef.current) {
@@ -40415,7 +40775,7 @@ function BlogCarouselAppleComponent({
40415
40775
  containerClassName,
40416
40776
  cardClassName
40417
40777
  }) {
40418
- const carouselCards = React51.useMemo(() => {
40778
+ const carouselCards = React50.useMemo(() => {
40419
40779
  if (!posts || posts.length === 0) return [];
40420
40780
  return posts.map(
40421
40781
  (post, idx) => ({
@@ -40427,7 +40787,7 @@ function BlogCarouselAppleComponent({
40427
40787
  })
40428
40788
  );
40429
40789
  }, [posts]);
40430
- const cardElements = React51.useMemo(() => {
40790
+ const cardElements = React50.useMemo(() => {
40431
40791
  if (!posts || posts.length === 0) return [];
40432
40792
  return carouselCards.map((card, index) => {
40433
40793
  const post = posts[index];
@@ -40512,7 +40872,7 @@ function ArticleHeroProseComponent({
40512
40872
  description,
40513
40873
  authorImage
40514
40874
  } = post ?? {};
40515
- const authorContent = React51.useMemo(() => {
40875
+ const authorContent = React50.useMemo(() => {
40516
40876
  if (authorSlot) return authorSlot;
40517
40877
  if (!authorName) return null;
40518
40878
  return /* @__PURE__ */ jsxs(
@@ -40546,7 +40906,7 @@ function ArticleHeroProseComponent({
40546
40906
  dateFormat,
40547
40907
  authorClassName
40548
40908
  ]);
40549
- const heroMediaContent = React51.useMemo(() => {
40909
+ const heroMediaContent = React50.useMemo(() => {
40550
40910
  if (heroMediaSlot) return heroMediaSlot;
40551
40911
  if (!image) return null;
40552
40912
  return /* @__PURE__ */ jsx(
@@ -40647,7 +41007,7 @@ function ArticleSidebarStickyComponent({
40647
41007
  pattern,
40648
41008
  patternOpacity
40649
41009
  }) {
40650
- const backLinkContent = React51.useMemo(() => {
41010
+ const backLinkContent = React50.useMemo(() => {
40651
41011
  if (backLinkSlot) return backLinkSlot;
40652
41012
  if (!backHref && !backText) return null;
40653
41013
  return /* @__PURE__ */ jsxs(
@@ -40665,7 +41025,7 @@ function ArticleSidebarStickyComponent({
40665
41025
  }
40666
41026
  );
40667
41027
  }, [backLinkSlot, backHref, backText, backIcon, backLinkClassName]);
40668
- const renderAuthor = React51.useCallback(
41028
+ const renderAuthor = React50.useCallback(
40669
41029
  (isMobile = false) => {
40670
41030
  if (authorSlot) return authorSlot;
40671
41031
  if (!authorName) return null;
@@ -40697,7 +41057,7 @@ function ArticleSidebarStickyComponent({
40697
41057
  authorClassName
40698
41058
  ]
40699
41059
  );
40700
- const heroMediaContent = React51.useMemo(() => {
41060
+ const heroMediaContent = React50.useMemo(() => {
40701
41061
  if (heroMediaSlot) return heroMediaSlot;
40702
41062
  if (!heroImageSrc) return null;
40703
41063
  return /* @__PURE__ */ jsx(
@@ -40804,10 +41164,10 @@ function ArticleTocSidebarComponent({
40804
41164
  patternOpacity
40805
41165
  }) {
40806
41166
  const ctaActions = ctaActionsProp ?? (ctaButtonText ? [{ label: ctaButtonText, href: ctaButtonHref || "#", variant: "default", className: "w-full" }] : []);
40807
- const [activeSection, setActiveSection] = React51.useState(
41167
+ const [activeSection, setActiveSection] = React50.useState(
40808
41168
  sections?.[0]?.id || ""
40809
41169
  );
40810
- React51.useEffect(() => {
41170
+ React50.useEffect(() => {
40811
41171
  if (!enableTocTracking || !sections || sections.length === 0) return;
40812
41172
  const observer = new IntersectionObserver(
40813
41173
  (entries) => {
@@ -40825,12 +41185,12 @@ function ArticleTocSidebarComponent({
40825
41185
  });
40826
41186
  return () => observer.disconnect();
40827
41187
  }, [sections, enableTocTracking]);
40828
- const categoryContent = React51.useMemo(() => {
41188
+ const categoryContent = React50.useMemo(() => {
40829
41189
  if (categorySlot) return categorySlot;
40830
41190
  if (!category) return null;
40831
41191
  return /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: category });
40832
41192
  }, [categorySlot, category]);
40833
- const authorContent = React51.useMemo(() => {
41193
+ const authorContent = React50.useMemo(() => {
40834
41194
  if (authorSlot) return authorSlot;
40835
41195
  if (!authorName) return null;
40836
41196
  return /* @__PURE__ */ jsxs("div", { className: cn("mt-6 flex items-center gap-4", authorClassName), children: [
@@ -40850,7 +41210,7 @@ function ArticleTocSidebarComponent({
40850
41210
  ] })
40851
41211
  ] });
40852
41212
  }, [authorSlot, authorName, authorImage, authorHref, publishDate, readTime, authorClassName]);
40853
- const heroMediaContent = React51.useMemo(() => {
41213
+ const heroMediaContent = React50.useMemo(() => {
40854
41214
  if (heroMediaSlot) return heroMediaSlot;
40855
41215
  if (!heroImageSrc) return null;
40856
41216
  return /* @__PURE__ */ jsx(
@@ -40863,7 +41223,7 @@ function ArticleTocSidebarComponent({
40863
41223
  }
40864
41224
  );
40865
41225
  }, [heroMediaSlot, heroImageSrc, heroImageAlt, heroImageClassName, optixFlowConfig]);
40866
- const tocContent = React51.useMemo(() => {
41226
+ const tocContent = React50.useMemo(() => {
40867
41227
  if (tocSlot) return tocSlot;
40868
41228
  if (!sections || sections.length === 0) return null;
40869
41229
  return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border p-4", tocClassName), children: [
@@ -40871,7 +41231,7 @@ function ArticleTocSidebarComponent({
40871
41231
  /* @__PURE__ */ jsx("nav", { className: "space-y-2", children: sections.map((section) => {
40872
41232
  const isActive = activeSection === section.id;
40873
41233
  if (renderSectionLink) {
40874
- return /* @__PURE__ */ jsx(React51.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
41234
+ return /* @__PURE__ */ jsx(React50.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
40875
41235
  }
40876
41236
  return /* @__PURE__ */ jsx(
40877
41237
  Pressable,
@@ -40888,7 +41248,7 @@ function ArticleTocSidebarComponent({
40888
41248
  }) })
40889
41249
  ] });
40890
41250
  }, [tocSlot, sections, activeSection, renderSectionLink, tocClassName]);
40891
- const ctaContent = React51.useMemo(() => {
41251
+ const ctaContent = React50.useMemo(() => {
40892
41252
  if (ctaSlot) return ctaSlot;
40893
41253
  if (!ctaTitle && !ctaDescription && (!ctaActions || ctaActions.length === 0)) return null;
40894
41254
  return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border p-4", getNestedCardBg(background, "subtle"), getNestedCardTextColor(background), ctaClassName), children: [
@@ -40977,11 +41337,11 @@ function ArticleBreadcrumbSocialComponent({
40977
41337
  patternOpacity
40978
41338
  }) {
40979
41339
  const author = authorProp ?? (authorName ? { name: authorName, image: authorImage, role: authorRole } : void 0);
40980
- const [activeSection, setActiveSection] = React51.useState(
41340
+ const [activeSection, setActiveSection] = React50.useState(
40981
41341
  sections?.[0]?.id || ""
40982
41342
  );
40983
- const [showBackToTop, setShowBackToTop] = React51.useState(false);
40984
- React51.useEffect(() => {
41343
+ const [showBackToTop, setShowBackToTop] = React50.useState(false);
41344
+ React50.useEffect(() => {
40985
41345
  if (!enableTocTracking || !sections || sections.length === 0) return;
40986
41346
  const observer = new IntersectionObserver(
40987
41347
  (entries) => {
@@ -40999,7 +41359,7 @@ function ArticleBreadcrumbSocialComponent({
40999
41359
  });
41000
41360
  return () => observer.disconnect();
41001
41361
  }, [sections, enableTocTracking]);
41002
- React51.useEffect(() => {
41362
+ React50.useEffect(() => {
41003
41363
  if (!enableBackToTop) return;
41004
41364
  const handleScroll = () => {
41005
41365
  setShowBackToTop(window.scrollY > 400);
@@ -41007,15 +41367,15 @@ function ArticleBreadcrumbSocialComponent({
41007
41367
  window.addEventListener("scroll", handleScroll);
41008
41368
  return () => window.removeEventListener("scroll", handleScroll);
41009
41369
  }, [enableBackToTop]);
41010
- const scrollToTop = React51.useCallback(() => {
41370
+ const scrollToTop = React50.useCallback(() => {
41011
41371
  window.scrollTo({ top: 0, behavior: "smooth" });
41012
41372
  }, []);
41013
- const breadcrumbsContent = React51.useMemo(() => {
41373
+ const breadcrumbsContent = React50.useMemo(() => {
41014
41374
  if (breadcrumbsSlot) return breadcrumbsSlot;
41015
41375
  if (!breadcrumbs || breadcrumbs.length === 0) return null;
41016
41376
  return /* @__PURE__ */ jsx(Breadcrumb, { className: cn("mb-8", breadcrumbClassName), children: /* @__PURE__ */ jsxs(BreadcrumbList, { children: [
41017
41377
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: "#", children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/home", size: 16 }) }) }) }),
41018
- breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
41378
+ breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
41019
41379
  /* @__PURE__ */ jsx(BreadcrumbSeparator, {}),
41020
41380
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: crumb.href, children: crumb.label }) }) })
41021
41381
  ] }, index)),
@@ -41025,7 +41385,7 @@ function ArticleBreadcrumbSocialComponent({
41025
41385
  ] })
41026
41386
  ] }) });
41027
41387
  }, [breadcrumbsSlot, breadcrumbs, currentPage, breadcrumbClassName]);
41028
- const authorContent = React51.useMemo(() => {
41388
+ const authorContent = React50.useMemo(() => {
41029
41389
  if (authorSlot) return authorSlot;
41030
41390
  if (!author) return null;
41031
41391
  return /* @__PURE__ */ jsxs(
@@ -41048,7 +41408,7 @@ function ArticleBreadcrumbSocialComponent({
41048
41408
  }
41049
41409
  );
41050
41410
  }, [authorSlot, author, publishDate, readTime, authorClassName]);
41051
- const heroMediaContent = React51.useMemo(() => {
41411
+ const heroMediaContent = React50.useMemo(() => {
41052
41412
  if (heroMediaSlot) return heroMediaSlot;
41053
41413
  if (!heroImageSrc) return null;
41054
41414
  return /* @__PURE__ */ jsx(
@@ -41070,7 +41430,7 @@ function ArticleBreadcrumbSocialComponent({
41070
41430
  heroImageClassName,
41071
41431
  optixFlowConfig
41072
41432
  ]);
41073
- const tocContent = React51.useMemo(() => {
41433
+ const tocContent = React50.useMemo(() => {
41074
41434
  if (tocSlot) return tocSlot;
41075
41435
  if (!sections || sections.length === 0) return null;
41076
41436
  return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border p-4", tocClassName), children: [
@@ -41078,7 +41438,7 @@ function ArticleBreadcrumbSocialComponent({
41078
41438
  /* @__PURE__ */ jsx("nav", { className: "space-y-2", children: sections.map((section) => {
41079
41439
  const isActive = activeSection === section.id;
41080
41440
  if (renderSectionLink) {
41081
- return /* @__PURE__ */ jsx(React51.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
41441
+ return /* @__PURE__ */ jsx(React50.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
41082
41442
  }
41083
41443
  return /* @__PURE__ */ jsx(
41084
41444
  Pressable,
@@ -41183,11 +41543,11 @@ function ArticleCompactTocComponent({
41183
41543
  pattern,
41184
41544
  patternOpacity
41185
41545
  }) {
41186
- const [activeSection, setActiveSection] = React51.useState(
41546
+ const [activeSection, setActiveSection] = React50.useState(
41187
41547
  sections?.[0]?.id || ""
41188
41548
  );
41189
- const [isTocOpen, setIsTocOpen] = React51.useState(false);
41190
- React51.useEffect(() => {
41549
+ const [isTocOpen, setIsTocOpen] = React50.useState(false);
41550
+ React50.useEffect(() => {
41191
41551
  if (!enableTocTracking) return;
41192
41552
  const observer = new IntersectionObserver(
41193
41553
  (entries) => {
@@ -41205,12 +41565,12 @@ function ArticleCompactTocComponent({
41205
41565
  });
41206
41566
  return () => observer.disconnect();
41207
41567
  }, [sections, enableTocTracking]);
41208
- const breadcrumbsContent = React51.useMemo(() => {
41568
+ const breadcrumbsContent = React50.useMemo(() => {
41209
41569
  if (breadcrumbsSlot) return breadcrumbsSlot;
41210
41570
  if (!breadcrumbs && !currentPage) return null;
41211
41571
  return /* @__PURE__ */ jsx(Breadcrumb, { className: cn("mb-6 md:mb-20", breadcrumbClassName), children: /* @__PURE__ */ jsxs(BreadcrumbList, { children: [
41212
41572
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: "#", children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/home", size: 16 }) }) }) }),
41213
- breadcrumbs?.map((crumb, index) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
41573
+ breadcrumbs?.map((crumb, index) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
41214
41574
  /* @__PURE__ */ jsx(BreadcrumbSeparator, {}),
41215
41575
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: crumb.href, children: crumb.label }) }) })
41216
41576
  ] }, index)),
@@ -41218,7 +41578,7 @@ function ArticleCompactTocComponent({
41218
41578
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbPage, { children: currentPage }) })
41219
41579
  ] }) });
41220
41580
  }, [breadcrumbsSlot, breadcrumbs, currentPage, breadcrumbClassName]);
41221
- const shareContent = React51.useMemo(() => {
41581
+ const shareContent = React50.useMemo(() => {
41222
41582
  if (shareSlot) return shareSlot;
41223
41583
  if (!socialLinks || socialLinks.length === 0) return null;
41224
41584
  return /* @__PURE__ */ jsxs("div", { className: cn("mt-6 flex items-center gap-2", shareClassName), children: [
@@ -41235,13 +41595,13 @@ function ArticleCompactTocComponent({
41235
41595
  ))
41236
41596
  ] });
41237
41597
  }, [shareSlot, socialLinks, shareClassName]);
41238
- const renderTocLinks = React51.useCallback(
41598
+ const renderTocLinks = React50.useCallback(
41239
41599
  (onLinkClick) => {
41240
41600
  if (!sections) return null;
41241
41601
  return sections.map((section) => {
41242
41602
  const isActive = activeSection === section.id;
41243
41603
  if (renderSectionLink) {
41244
- return /* @__PURE__ */ jsx(React51.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
41604
+ return /* @__PURE__ */ jsx(React50.Fragment, { children: renderSectionLink(section, isActive) }, section.id);
41245
41605
  }
41246
41606
  return /* @__PURE__ */ jsx(
41247
41607
  Pressable,
@@ -41260,7 +41620,7 @@ function ArticleCompactTocComponent({
41260
41620
  },
41261
41621
  [sections, activeSection, renderSectionLink]
41262
41622
  );
41263
- const tocContent = React51.useMemo(() => {
41623
+ const tocContent = React50.useMemo(() => {
41264
41624
  if (tocSlot) return tocSlot;
41265
41625
  if (!sections || sections.length === 0) return null;
41266
41626
  return /* @__PURE__ */ jsx("div", { className: "mb-8 lg:hidden", children: /* @__PURE__ */ jsxs(Popover, { open: isTocOpen, onOpenChange: setIsTocOpen, children: [
@@ -41293,7 +41653,7 @@ function ArticleCompactTocComponent({
41293
41653
  )
41294
41654
  ] }) });
41295
41655
  }, [tocSlot, sections, isTocOpen, tocClassName, renderTocLinks]);
41296
- const desktopTocContent = React51.useMemo(() => {
41656
+ const desktopTocContent = React50.useMemo(() => {
41297
41657
  if (tocSlot) return null;
41298
41658
  if (!sections || sections.length === 0) return null;
41299
41659
  return /* @__PURE__ */ jsx(
@@ -41310,7 +41670,7 @@ function ArticleCompactTocComponent({
41310
41670
  }
41311
41671
  );
41312
41672
  }, [tocSlot, sections, tocClassName, renderTocLinks]);
41313
- const heroMediaContent = React51.useMemo(() => {
41673
+ const heroMediaContent = React50.useMemo(() => {
41314
41674
  if (heroMediaSlot) return heroMediaSlot;
41315
41675
  if (!heroImageSrc) return null;
41316
41676
  return /* @__PURE__ */ jsx(
@@ -41440,10 +41800,10 @@ function ArticleChaptersAuthorComponent({
41440
41800
  variant: "default"
41441
41801
  }
41442
41802
  ] : []);
41443
- const [activeChapter, setActiveChapter] = React51.useState(
41803
+ const [activeChapter, setActiveChapter] = React50.useState(
41444
41804
  chapters?.[0]?.id || ""
41445
41805
  );
41446
- React51.useEffect(() => {
41806
+ React50.useEffect(() => {
41447
41807
  if (!enableChapterTracking || !chapters || chapters.length === 0) return;
41448
41808
  const observer = new IntersectionObserver(
41449
41809
  (entries) => {
@@ -41461,12 +41821,12 @@ function ArticleChaptersAuthorComponent({
41461
41821
  });
41462
41822
  return () => observer.disconnect();
41463
41823
  }, [chapters, enableChapterTracking]);
41464
- const breadcrumbsContent = React51.useMemo(() => {
41824
+ const breadcrumbsContent = React50.useMemo(() => {
41465
41825
  if (breadcrumbsSlot) return breadcrumbsSlot;
41466
41826
  if (!breadcrumbs || breadcrumbs.length === 0) return null;
41467
41827
  return /* @__PURE__ */ jsx(Breadcrumb, { className: cn("mb-8 md:mb-20", breadcrumbClassName), children: /* @__PURE__ */ jsxs(BreadcrumbList, { children: [
41468
41828
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: "#", children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/home", size: 16 }) }) }) }),
41469
- breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
41829
+ breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
41470
41830
  /* @__PURE__ */ jsx(BreadcrumbSeparator, {}),
41471
41831
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Pressable, { href: crumb.href, children: crumb.label }) }) })
41472
41832
  ] }, index)),
@@ -41474,7 +41834,7 @@ function ArticleChaptersAuthorComponent({
41474
41834
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsx(BreadcrumbPage, { children: typeof currentPage === "string" ? currentPage : currentPage }) })
41475
41835
  ] }) });
41476
41836
  }, [breadcrumbsSlot, breadcrumbs, currentPage, breadcrumbClassName]);
41477
- const chaptersNavContent = React51.useMemo(() => {
41837
+ const chaptersNavContent = React50.useMemo(() => {
41478
41838
  if (chaptersSlot) return chaptersSlot;
41479
41839
  if (!chapters || chapters.length === 0) return null;
41480
41840
  return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border p-4", chaptersClassName), children: [
@@ -41482,7 +41842,7 @@ function ArticleChaptersAuthorComponent({
41482
41842
  /* @__PURE__ */ jsx("nav", { className: "space-y-2", children: chapters.map((chapter) => {
41483
41843
  const isActive = activeChapter === chapter.id;
41484
41844
  if (renderChapterLink) {
41485
- return /* @__PURE__ */ jsx(React51.Fragment, { children: renderChapterLink(chapter, isActive) }, chapter.id);
41845
+ return /* @__PURE__ */ jsx(React50.Fragment, { children: renderChapterLink(chapter, isActive) }, chapter.id);
41486
41846
  }
41487
41847
  return /* @__PURE__ */ jsxs(
41488
41848
  Pressable,
@@ -41508,7 +41868,7 @@ function ArticleChaptersAuthorComponent({
41508
41868
  renderChapterLink,
41509
41869
  chaptersClassName
41510
41870
  ]);
41511
- const authorCardContent = React51.useMemo(() => {
41871
+ const authorCardContent = React50.useMemo(() => {
41512
41872
  if (authorSlot) return authorSlot;
41513
41873
  if (!author) return null;
41514
41874
  let socialLinksContent = null;
@@ -41569,7 +41929,7 @@ function ArticleChaptersAuthorComponent({
41569
41929
  socialLinksContent
41570
41930
  ] });
41571
41931
  }, [authorSlot, author, authorClassName]);
41572
- const heroMediaContent = React51.useMemo(() => {
41932
+ const heroMediaContent = React50.useMemo(() => {
41573
41933
  if (heroMediaSlot) return heroMediaSlot;
41574
41934
  if (!heroImageSrc) return null;
41575
41935
  return /* @__PURE__ */ jsx(
@@ -41591,7 +41951,7 @@ function ArticleChaptersAuthorComponent({
41591
41951
  heroImageClassName,
41592
41952
  optixFlowConfig
41593
41953
  ]);
41594
- const conclusionContent = React51.useMemo(() => {
41954
+ const conclusionContent = React50.useMemo(() => {
41595
41955
  if (conclusionSlot) return conclusionSlot;
41596
41956
  if (!conclusionTitle && !conclusionDescription && (!conclusionActions || conclusionActions.length === 0))
41597
41957
  return null;
@@ -41736,7 +42096,7 @@ function ArticleSplitAnimatedComponent({
41736
42096
  }) {
41737
42097
  const ctaActions = ctaActionsProp ?? (ctaText ? [{ label: ctaText, href: ctaHref || "#", variant: "default", size: "lg" }] : []);
41738
42098
  const MotionWrapper = enableAnimations ? motion.div : "div";
41739
- const categoryContent = React51.useMemo(() => {
42099
+ const categoryContent = React50.useMemo(() => {
41740
42100
  if (categorySlot) return categorySlot;
41741
42101
  if (!category) return null;
41742
42102
  return /* @__PURE__ */ jsx(
@@ -41751,7 +42111,7 @@ function ArticleSplitAnimatedComponent({
41751
42111
  }
41752
42112
  );
41753
42113
  }, [categorySlot, category, categoryHref, categoryClassName]);
41754
- const heroMediaContent = React51.useMemo(() => {
42114
+ const heroMediaContent = React50.useMemo(() => {
41755
42115
  if (heroMediaSlot) return heroMediaSlot;
41756
42116
  if (!image) return null;
41757
42117
  return /* @__PURE__ */ jsx(
@@ -41764,7 +42124,7 @@ function ArticleSplitAnimatedComponent({
41764
42124
  }
41765
42125
  );
41766
42126
  }, [heroMediaSlot, image, imageAlt, title, optixFlowConfig]);
41767
- const authorContent = React51.useMemo(() => {
42127
+ const authorContent = React50.useMemo(() => {
41768
42128
  if (authorSlot) return authorSlot;
41769
42129
  if (!authorName) return null;
41770
42130
  return /* @__PURE__ */ jsxs("div", { className: cn("mt-8 flex items-center gap-4", authorClassName), children: [
@@ -41778,7 +42138,7 @@ function ArticleSplitAnimatedComponent({
41778
42138
  ] })
41779
42139
  ] });
41780
42140
  }, [authorSlot, authorName, authorImage, authorHref, authorRole, authorClassName]);
41781
- const ctaContent = React51.useMemo(() => {
42141
+ const ctaContent = React50.useMemo(() => {
41782
42142
  if (ctaSlot) return ctaSlot;
41783
42143
  if (!ctaActions || ctaActions.length === 0) return null;
41784
42144
  return /* @__PURE__ */ jsx("div", { className: cn("mt-8 flex flex-wrap gap-3", ctaClassName), children: ctaActions.map((action, index) => {
@@ -43201,7 +43561,7 @@ function FaqSidebarNavigation({
43201
43561
  accordionTriggerClassName,
43202
43562
  accordionContentClassName
43203
43563
  }) {
43204
- const [activeCategory, setActiveCategory] = React51.useState(
43564
+ const [activeCategory, setActiveCategory] = React50.useState(
43205
43565
  categories && categories.length > 1 ? "all" : categories?.[0]?.id || ""
43206
43566
  );
43207
43567
  const filteredCategories = useMemo(() => {
@@ -44090,7 +44450,7 @@ function FaqSplitHero({
44090
44450
  imageArea
44091
44451
  ] }) });
44092
44452
  }
44093
- var Controls = React51.memo(
44453
+ var Controls = React50.memo(
44094
44454
  ({
44095
44455
  handleNext,
44096
44456
  handlePrevious,
@@ -44121,7 +44481,7 @@ var Controls = React51.memo(
44121
44481
  ] });
44122
44482
  }
44123
44483
  );
44124
- var FeatureCard = React51.memo(
44484
+ var FeatureCard = React50.memo(
44125
44485
  ({ feature, isActive, onClick }) => {
44126
44486
  const variants2 = useMemo(
44127
44487
  () => ({
@@ -44229,7 +44589,7 @@ var FeatureCard = React51.memo(
44229
44589
  ) });
44230
44590
  }
44231
44591
  );
44232
- var FeaturesDesktop = React51.memo(
44592
+ var FeaturesDesktop = React50.memo(
44233
44593
  ({
44234
44594
  features,
44235
44595
  handleNext,
@@ -44263,7 +44623,7 @@ var FeaturesDesktop = React51.memo(
44263
44623
  ] });
44264
44624
  }
44265
44625
  );
44266
- var FeaturesMobile = React51.memo(
44626
+ var FeaturesMobile = React50.memo(
44267
44627
  ({
44268
44628
  features,
44269
44629
  handleNext,
@@ -44354,8 +44714,8 @@ function FeatureAnimatedCarousel({
44354
44714
  spacing = "py-12 md:py-32",
44355
44715
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8"
44356
44716
  }) {
44357
- const [activeIndex, setActiveIndex] = React51.useState(0);
44358
- const [direction, setDirection] = React51.useState(1);
44717
+ const [activeIndex, setActiveIndex] = React50.useState(0);
44718
+ const [direction, setDirection] = React50.useState(1);
44359
44719
  const handleNext = useCallback(() => {
44360
44720
  if (features && activeIndex < features.length - 1) {
44361
44721
  setDirection(1);
@@ -45217,7 +45577,7 @@ function FooterInfoCardsAccordion({
45217
45577
  patternOpacity,
45218
45578
  optixFlowConfig
45219
45579
  }) {
45220
- const [email, setEmail] = React51.useState("");
45580
+ const [email, setEmail] = React50.useState("");
45221
45581
  (/* @__PURE__ */ new Date()).getFullYear();
45222
45582
  const handleSubmit = (e) => {
45223
45583
  e.preventDefault();
@@ -45522,13 +45882,13 @@ function CaseStudiesImageGrid({
45522
45882
  patternOpacity,
45523
45883
  optixFlowConfig
45524
45884
  }) {
45525
- const getGridClass = React51.useCallback((index) => {
45885
+ const getGridClass = React50.useCallback((index) => {
45526
45886
  if (index === 0 || index === 4) {
45527
45887
  return "row-span-2 aspect-square lg:aspect-auto";
45528
45888
  }
45529
45889
  return "aspect-3/2 md:aspect-2/1";
45530
45890
  }, []);
45531
- const renderedItems = React51.useMemo(() => {
45891
+ const renderedItems = React50.useMemo(() => {
45532
45892
  if (itemsSlot) return itemsSlot;
45533
45893
  if (!items || items.length === 0) return null;
45534
45894
  return items.map((item, index) => /* @__PURE__ */ jsxs(
@@ -45614,7 +45974,7 @@ function CaseStudiesTestimonialStats({
45614
45974
  patternOpacity,
45615
45975
  optixFlowConfig
45616
45976
  }) {
45617
- const renderedTestimonials = React51.useMemo(() => {
45977
+ const renderedTestimonials = React50.useMemo(() => {
45618
45978
  if (testimonialsSlot) return testimonialsSlot;
45619
45979
  if (!testimonials || testimonials.length === 0) return null;
45620
45980
  return testimonials.map((testimonial, index) => /* @__PURE__ */ jsxs("div", { className: testimonialItemClassName, children: [
@@ -49087,7 +49447,7 @@ function CaseStudiesFeaturedBorder({
49087
49447
  patternOpacity,
49088
49448
  optixFlowConfig
49089
49449
  }) {
49090
- const renderedFeatured = React51.useMemo(() => {
49450
+ const renderedFeatured = React50.useMemo(() => {
49091
49451
  if (featuredSlot) return featuredSlot;
49092
49452
  if (!featuredCaseStudy) return null;
49093
49453
  return /* @__PURE__ */ jsxs(
@@ -49161,7 +49521,7 @@ function CaseStudiesFeaturedBorder({
49161
49521
  featuredImageClassName,
49162
49522
  optixFlowConfig
49163
49523
  ]);
49164
- const renderedCaseStudies = React51.useMemo(() => {
49524
+ const renderedCaseStudies = React50.useMemo(() => {
49165
49525
  if (caseStudiesSlot) return caseStudiesSlot;
49166
49526
  if (!caseStudies || caseStudies.length === 0) return null;
49167
49527
  return caseStudies.map((item, idx) => /* @__PURE__ */ jsxs(
@@ -49270,7 +49630,7 @@ function CaseStudiesStatsCard({
49270
49630
  patternOpacity,
49271
49631
  optixFlowConfig
49272
49632
  }) {
49273
- const renderedStats = React51.useMemo(() => {
49633
+ const renderedStats = React50.useMemo(() => {
49274
49634
  if (statsSlot) return statsSlot;
49275
49635
  if (!stats || stats.length === 0) return null;
49276
49636
  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: [
@@ -49278,7 +49638,7 @@ function CaseStudiesStatsCard({
49278
49638
  /* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-muted-foreground", children: item.text })
49279
49639
  ] }, `stats-${i}`)) });
49280
49640
  }, [statsSlot, stats, statsClassName]);
49281
- const renderedAuthor = React51.useMemo(() => {
49641
+ const renderedAuthor = React50.useMemo(() => {
49282
49642
  if (authorSlot) return authorSlot;
49283
49643
  if (!author) return null;
49284
49644
  return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2.5", authorClassName), children: [
@@ -49292,7 +49652,7 @@ function CaseStudiesStatsCard({
49292
49652
  ] })
49293
49653
  ] });
49294
49654
  }, [authorSlot, author, authorClassName]);
49295
- const renderedActions = React51.useMemo(() => {
49655
+ const renderedActions = React50.useMemo(() => {
49296
49656
  if (actionsSlot) return actionsSlot;
49297
49657
  if (!actions || actions.length === 0) return null;
49298
49658
  return /* @__PURE__ */ jsx("div", { className: cn("shrink-0", actionsClassName), children: actions.map((action, index) => {
@@ -50780,7 +51140,7 @@ function HeroCenteredImageGrid({
50780
51140
  return logos.map((logo, index) => {
50781
51141
  const src = typeof logo.src === "string" ? logo.src : logo.src.light;
50782
51142
  typeof logo.src === "string" ? logo.src : logo.src.dark;
50783
- return /* @__PURE__ */ jsx(React51.Fragment, { children: /* @__PURE__ */ jsx(
51143
+ return /* @__PURE__ */ jsx(React50.Fragment, { children: /* @__PURE__ */ jsx(
50784
51144
  Img,
50785
51145
  {
50786
51146
  src,
@@ -59014,7 +59374,7 @@ function HeroEcommerceProductShowcase({
59014
59374
  const renderStats = useMemo(() => {
59015
59375
  if (statsSlot) return statsSlot;
59016
59376
  if (!stats || stats.length === 0) return null;
59017
- return /* @__PURE__ */ jsx("div", { className: cn("flex items-center gap-6 pt-4", statsClassName), children: stats.map((stat, index) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
59377
+ return /* @__PURE__ */ jsx("div", { className: cn("flex items-center gap-6 pt-4", statsClassName), children: stats.map((stat, index) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
59018
59378
  index > 0 && /* @__PURE__ */ jsx("div", { className: "h-12 w-px bg-border" }),
59019
59379
  /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
59020
59380
  /* @__PURE__ */ jsx("div", { className: "text-2xl font-bold ", children: stat.value }),
@@ -59910,7 +60270,7 @@ function ComparisonTableTwoColumn({
59910
60270
  patternOpacity,
59911
60271
  optixFlowConfig
59912
60272
  }) {
59913
- const tableContent = React51.useMemo(() => {
60273
+ const tableContent = React50.useMemo(() => {
59914
60274
  if (tableSlot) return tableSlot;
59915
60275
  if (!rows || rows.length === 0) return null;
59916
60276
  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(
@@ -59940,7 +60300,7 @@ function ComparisonTableTwoColumn({
59940
60300
  optixFlowConfig
59941
60301
  }
59942
60302
  ) : optionBLabel && (typeof optionBLabel === "string" ? /* @__PURE__ */ jsx("span", { className: "text-lg font-semibold", children: optionBLabel }) : optionBLabel) }),
59943
- rows.map((row, idx) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
60303
+ rows.map((row, idx) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
59944
60304
  /* @__PURE__ */ jsx("div", { className: "flex items-center border-b p-3 text-base font-medium md:p-4 md:text-lg", children: row.label }),
59945
60305
  /* @__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: [
59946
60306
  row.hasIcon && /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/circle-check-big", size: 20, className: "text-success" }),
@@ -59969,14 +60329,14 @@ function ComparisonTableTwoColumn({
59969
60329
  optionBLabel,
59970
60330
  optixFlowConfig
59971
60331
  ]);
59972
- const headingContent = React51.useMemo(() => {
60332
+ const headingContent = React50.useMemo(() => {
59973
60333
  if (!heading) return null;
59974
60334
  if (typeof heading === "string") {
59975
60335
  return /* @__PURE__ */ jsx("h1", { className: cn("mb-8 text-3xl font-bold md:mb-12 md:text-5xl", headingClassName), children: heading });
59976
60336
  }
59977
60337
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
59978
60338
  }, [heading, headingClassName]);
59979
- const descriptionContent = React51.useMemo(() => {
60339
+ const descriptionContent = React50.useMemo(() => {
59980
60340
  if (!description) return null;
59981
60341
  if (typeof description === "string") {
59982
60342
  return /* @__PURE__ */ jsx("p", { className: cn("mb-8 text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -60023,7 +60383,7 @@ function ComparisonFeatureCards({
60023
60383
  patternOpacity,
60024
60384
  optixFlowConfig
60025
60385
  }) {
60026
- const renderCard = React51.useCallback(
60386
+ const renderCard = React50.useCallback(
60027
60387
  (product, isHighlighted) => /* @__PURE__ */ jsxs(
60028
60388
  "div",
60029
60389
  {
@@ -60079,7 +60439,7 @@ function ComparisonFeatureCards({
60079
60439
  ),
60080
60440
  [cardClassName, optixFlowConfig]
60081
60441
  );
60082
- const cardsContent = React51.useMemo(() => {
60442
+ const cardsContent = React50.useMemo(() => {
60083
60443
  if (cardsSlot) return cardsSlot;
60084
60444
  if (!productA || !productB) return null;
60085
60445
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
@@ -60087,28 +60447,28 @@ function ComparisonFeatureCards({
60087
60447
  renderCard(productB, productB.highlighted ?? false)
60088
60448
  ] });
60089
60449
  }, [cardsSlot, productA, productB, renderCard]);
60090
- const headingContent = React51.useMemo(() => {
60450
+ const headingContent = React50.useMemo(() => {
60091
60451
  if (!heading) return null;
60092
60452
  if (typeof heading === "string") {
60093
60453
  return /* @__PURE__ */ jsx("h1", { className: cn("mb-6 text-4xl font-semibold md:text-7xl", headingClassName), children: heading });
60094
60454
  }
60095
60455
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
60096
60456
  }, [heading, headingClassName]);
60097
- const descriptionContent = React51.useMemo(() => {
60457
+ const descriptionContent = React50.useMemo(() => {
60098
60458
  if (!description) return null;
60099
60459
  if (typeof description === "string") {
60100
60460
  return /* @__PURE__ */ jsx("p", { className: cn("mx-auto max-w-4xl text-muted-foreground md:text-xl", descriptionClassName), children: description });
60101
60461
  }
60102
60462
  return /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description });
60103
60463
  }, [description, descriptionClassName]);
60104
- const suitabilityContent = React51.useMemo(() => {
60464
+ const suitabilityContent = React50.useMemo(() => {
60105
60465
  if (!suitabilityTitle && !suitabilityDescription) return null;
60106
60466
  return /* @__PURE__ */ jsxs("div", { className: suitabilityClassName, children: [
60107
60467
  suitabilityTitle && (typeof suitabilityTitle === "string" ? /* @__PURE__ */ jsx("h2", { className: "mb-4 text-3xl font-semibold", children: suitabilityTitle }) : suitabilityTitle),
60108
60468
  suitabilityDescription && (typeof suitabilityDescription === "string" ? /* @__PURE__ */ jsx("p", { className: "leading-6 text-muted-foreground md:text-lg", children: suitabilityDescription }) : suitabilityDescription)
60109
60469
  ] });
60110
60470
  }, [suitabilityTitle, suitabilityDescription, suitabilityClassName]);
60111
- const differencesContent = React51.useMemo(() => {
60471
+ const differencesContent = React50.useMemo(() => {
60112
60472
  if (!differencesTitle && !differencesDescription) return null;
60113
60473
  return /* @__PURE__ */ jsxs("div", { className: cn("mt-16", differencesClassName), children: [
60114
60474
  differencesTitle && (typeof differencesTitle === "string" ? /* @__PURE__ */ jsx("h2", { className: "mb-4 text-3xl font-semibold", children: differencesTitle }) : differencesTitle),
@@ -60156,7 +60516,7 @@ function ComparisonGridBadges({
60156
60516
  pattern,
60157
60517
  patternOpacity
60158
60518
  }) {
60159
- const featuresContent = React51.useMemo(() => {
60519
+ const featuresContent = React50.useMemo(() => {
60160
60520
  if (featuresSlot) return featuresSlot;
60161
60521
  if (!features || features.length === 0) return null;
60162
60522
  return features.map((feature, idx) => /* @__PURE__ */ jsxs(
@@ -60203,14 +60563,14 @@ function ComparisonGridBadges({
60203
60563
  idx
60204
60564
  ));
60205
60565
  }, [featuresSlot, features, featureCardClassName, badgeClassName, optionALabel, optionBLabel]);
60206
- const headingContent = React51.useMemo(() => {
60566
+ const headingContent = React50.useMemo(() => {
60207
60567
  if (!heading) return null;
60208
60568
  if (typeof heading === "string") {
60209
60569
  return /* @__PURE__ */ jsx("h2", { className: cn("mb-4 text-3xl font-bold md:text-5xl", headingClassName), children: heading });
60210
60570
  }
60211
60571
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
60212
60572
  }, [heading, headingClassName]);
60213
- const descriptionContent = React51.useMemo(() => {
60573
+ const descriptionContent = React50.useMemo(() => {
60214
60574
  if (!description) return null;
60215
60575
  if (typeof description === "string") {
60216
60576
  return /* @__PURE__ */ jsx("p", { className: cn("mx-auto max-w-2xl text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -60258,7 +60618,7 @@ function ComparisonMetricsRows({
60258
60618
  pattern,
60259
60619
  patternOpacity
60260
60620
  }) {
60261
- const metricsContent = React51.useMemo(() => {
60621
+ const metricsContent = React50.useMemo(() => {
60262
60622
  if (metricsSlot) return metricsSlot;
60263
60623
  if (!metrics || metrics.length === 0) return null;
60264
60624
  return /* @__PURE__ */ jsx(
@@ -60298,7 +60658,7 @@ function ComparisonMetricsRows({
60298
60658
  }
60299
60659
  );
60300
60660
  }, [metricsSlot, metrics, metricsClassName, metricRowClassName]);
60301
- const actionsContent = React51.useMemo(() => {
60661
+ const actionsContent = React50.useMemo(() => {
60302
60662
  if (actionsSlot) return actionsSlot;
60303
60663
  if (!actions || actions.length === 0) return null;
60304
60664
  return /* @__PURE__ */ jsx("div", { className: cn("flex justify-end", actionsClassName), children: actions.map((action, idx) => /* @__PURE__ */ jsxs(
@@ -60319,7 +60679,7 @@ function ComparisonMetricsRows({
60319
60679
  idx
60320
60680
  )) });
60321
60681
  }, [actionsSlot, actions, actionsClassName]);
60322
- const headingContent = React51.useMemo(() => {
60682
+ const headingContent = React50.useMemo(() => {
60323
60683
  if (!heading) return null;
60324
60684
  if (typeof heading === "string") {
60325
60685
  return /* @__PURE__ */ jsx(
@@ -60335,7 +60695,7 @@ function ComparisonMetricsRows({
60335
60695
  }
60336
60696
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
60337
60697
  }, [heading, headingClassName]);
60338
- const descriptionContent = React51.useMemo(() => {
60698
+ const descriptionContent = React50.useMemo(() => {
60339
60699
  if (!description) return null;
60340
60700
  if (typeof description === "string") {
60341
60701
  return /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -60398,7 +60758,7 @@ function ComparisonImageCards({
60398
60758
  patternOpacity,
60399
60759
  optixFlowConfig
60400
60760
  }) {
60401
- const renderCard = React51.useCallback(
60761
+ const renderCard = React50.useCallback(
60402
60762
  (option) => /* @__PURE__ */ jsx("div", { className: cn("relative h-full", cardClassName), children: /* @__PURE__ */ jsxs("div", { className: cn(
60403
60763
  "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]",
60404
60764
  getNestedCardBg(background, "accent"),
@@ -60422,7 +60782,7 @@ function ComparisonImageCards({
60422
60782
  ] }) }),
60423
60783
  [cardClassName, optixFlowConfig]
60424
60784
  );
60425
- const cardsContent = React51.useMemo(() => {
60785
+ const cardsContent = React50.useMemo(() => {
60426
60786
  if (cardsSlot) return cardsSlot;
60427
60787
  if (!optionA || !optionB) return null;
60428
60788
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
@@ -60440,14 +60800,14 @@ function ComparisonImageCards({
60440
60800
  )
60441
60801
  ] });
60442
60802
  }, [cardsSlot, optionA, optionB, dividerText, dividerClassName, renderCard]);
60443
- const headingContent = React51.useMemo(() => {
60803
+ const headingContent = React50.useMemo(() => {
60444
60804
  if (!heading) return null;
60445
60805
  if (typeof heading === "string") {
60446
60806
  return /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-medium sm:text-4xl md:text-5xl lg:text-6xl", headingClassName), children: heading });
60447
60807
  }
60448
60808
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
60449
60809
  }, [heading, headingClassName]);
60450
- const descriptionContent = React51.useMemo(() => {
60810
+ const descriptionContent = React50.useMemo(() => {
60451
60811
  if (!description) return null;
60452
60812
  if (typeof description === "string") {
60453
60813
  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 });
@@ -60577,7 +60937,7 @@ function ComparisonTableTabs({
60577
60937
  patternOpacity
60578
60938
  }) {
60579
60939
  const [selectedTab, setSelectedTab] = useState(models?.[0]?.name || "");
60580
- const renderStatusIcon = React51.useCallback((status) => {
60940
+ const renderStatusIcon = React50.useCallback((status) => {
60581
60941
  if (status === "positive") {
60582
60942
  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" }) });
60583
60943
  }
@@ -60586,7 +60946,7 @@ function ComparisonTableTabs({
60586
60946
  }
60587
60947
  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" }) });
60588
60948
  }, []);
60589
- const tableContent = React51.useMemo(() => {
60949
+ const tableContent = React50.useMemo(() => {
60590
60950
  if (tableSlot) return tableSlot;
60591
60951
  if (!models || models.length === 0 || !features || features.length === 0) return null;
60592
60952
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
@@ -60645,14 +61005,14 @@ function ComparisonTableTabs({
60645
61005
  ] }) })
60646
61006
  ] });
60647
61007
  }, [tableSlot, models, features, tabsClassName, tableClassName, tableHeaderClassName, tableCellClassName, selectedTab, renderStatusIcon]);
60648
- const headingContent = React51.useMemo(() => {
61008
+ const headingContent = React50.useMemo(() => {
60649
61009
  if (!heading) return null;
60650
61010
  if (typeof heading === "string") {
60651
61011
  return /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-bold md:text-4xl lg:text-5xl", headingClassName), children: heading });
60652
61012
  }
60653
61013
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
60654
61014
  }, [heading, headingClassName]);
60655
- const descriptionContent = React51.useMemo(() => {
61015
+ const descriptionContent = React50.useMemo(() => {
60656
61016
  if (!description) return null;
60657
61017
  if (typeof description === "string") {
60658
61018
  return /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -60743,7 +61103,7 @@ function ComparisonTableTooltips({
60743
61103
  pattern,
60744
61104
  patternOpacity
60745
61105
  }) {
60746
- const renderCellContent = React51.useCallback(
61106
+ const renderCellContent = React50.useCallback(
60747
61107
  (cell, isHighlighted) => {
60748
61108
  if (typeof cell === "string") {
60749
61109
  return cell;
@@ -60770,7 +61130,7 @@ function ComparisonTableTooltips({
60770
61130
  },
60771
61131
  []
60772
61132
  );
60773
- const tableContent = React51.useMemo(() => {
61133
+ const tableContent = React50.useMemo(() => {
60774
61134
  if (tableSlot) return tableSlot;
60775
61135
  if (!rows || rows.length === 0) return null;
60776
61136
  return /* @__PURE__ */ jsxs(Table, { className: cn("rounded border text-left shadow-lg", tableClassName), children: [
@@ -60796,14 +61156,14 @@ function ComparisonTableTooltips({
60796
61156
  ] }, idx)) })
60797
61157
  ] });
60798
61158
  }, [tableSlot, rows, tableClassName, tableHeaderClassName, tableCellClassName, optionALabel, optionBLabel, renderCellContent]);
60799
- const headingContent = React51.useMemo(() => {
61159
+ const headingContent = React50.useMemo(() => {
60800
61160
  if (!heading) return null;
60801
61161
  if (typeof heading === "string") {
60802
61162
  return /* @__PURE__ */ jsx("h2", { className: cn("mb-4 text-center text-4xl font-semibold", headingClassName), children: heading });
60803
61163
  }
60804
61164
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
60805
61165
  }, [heading, headingClassName]);
60806
- const descriptionContent = React51.useMemo(() => {
61166
+ const descriptionContent = React50.useMemo(() => {
60807
61167
  if (!description) return null;
60808
61168
  if (typeof description === "string") {
60809
61169
  return /* @__PURE__ */ jsx("p", { className: cn("mb-8 text-center text-muted-foreground", descriptionClassName), children: description });
@@ -60845,7 +61205,7 @@ function ComparisonFeatureGrid({
60845
61205
  pattern,
60846
61206
  patternOpacity
60847
61207
  }) {
60848
- const renderStatusIcon = React51.useCallback((status) => {
61208
+ const renderStatusIcon = React50.useCallback((status) => {
60849
61209
  if (status === true) {
60850
61210
  return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/check", size: 20, className: "text-success" });
60851
61211
  }
@@ -60854,7 +61214,7 @@ function ComparisonFeatureGrid({
60854
61214
  }
60855
61215
  return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/x", size: 20, className: "text-destructive" });
60856
61216
  }, []);
60857
- const gridContent = React51.useMemo(() => {
61217
+ const gridContent = React50.useMemo(() => {
60858
61218
  if (gridSlot) return gridSlot;
60859
61219
  if (!features || features.length === 0) return null;
60860
61220
  return /* @__PURE__ */ jsxs(
@@ -60920,14 +61280,14 @@ function ComparisonFeatureGrid({
60920
61280
  optionBLabel,
60921
61281
  renderStatusIcon
60922
61282
  ]);
60923
- const headingContent = React51.useMemo(() => {
61283
+ const headingContent = React50.useMemo(() => {
60924
61284
  if (!heading) return null;
60925
61285
  if (typeof heading === "string") {
60926
61286
  return /* @__PURE__ */ jsx("h2", { className: cn("mb-4 text-center text-4xl font-semibold", headingClassName), children: heading });
60927
61287
  }
60928
61288
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
60929
61289
  }, [heading, headingClassName]);
60930
- const descriptionContent = React51.useMemo(() => {
61290
+ const descriptionContent = React50.useMemo(() => {
60931
61291
  if (!description) return null;
60932
61292
  if (typeof description === "string") {
60933
61293
  return /* @__PURE__ */ jsx("p", { className: cn("mb-8 text-center text-muted-foreground", descriptionClassName), children: description });
@@ -60971,7 +61331,7 @@ function ComparisonAiModels({
60971
61331
  optixFlowConfig
60972
61332
  }) {
60973
61333
  const [hoveredModel, setHoveredModel] = useState(null);
60974
- const renderStatusIcon = React51.useCallback((status) => {
61334
+ const renderStatusIcon = React50.useCallback((status) => {
60975
61335
  if (status === "best") {
60976
61336
  return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/circle-check", size: 16, className: "text-success" });
60977
61337
  }
@@ -60980,7 +61340,7 @@ function ComparisonAiModels({
60980
61340
  }
60981
61341
  return /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/minus", size: 16, className: "text-muted-foreground" });
60982
61342
  }, []);
60983
- const getCellClassName = React51.useCallback(
61343
+ const getCellClassName = React50.useCallback(
60984
61344
  (status, modelKey) => {
60985
61345
  const baseClass = "cursor-pointer py-4 text-center font-medium transition-all duration-300";
60986
61346
  let statusClass = "";
@@ -61001,7 +61361,7 @@ function ComparisonAiModels({
61001
61361
  },
61002
61362
  [hoveredModel]
61003
61363
  );
61004
- const getSummaryCardClassName = React51.useCallback(
61364
+ const getSummaryCardClassName = React50.useCallback(
61005
61365
  (modelKey) => {
61006
61366
  const baseClass = "rounded border border-border/30 bg-background/50 p-3 transition-all duration-300";
61007
61367
  if (hoveredModel === modelKey) {
@@ -61016,7 +61376,7 @@ function ComparisonAiModels({
61016
61376
  },
61017
61377
  [hoveredModel]
61018
61378
  );
61019
- const tableContent = React51.useMemo(() => {
61379
+ const tableContent = React50.useMemo(() => {
61020
61380
  if (tableSlot) return tableSlot;
61021
61381
  if (!models || !comparisonData || comparisonData.length === 0) return null;
61022
61382
  return /* @__PURE__ */ jsx(
@@ -61094,7 +61454,7 @@ function ComparisonAiModels({
61094
61454
  getCellClassName,
61095
61455
  renderStatusIcon
61096
61456
  ]);
61097
- const analysisContent = React51.useMemo(() => {
61457
+ const analysisContent = React50.useMemo(() => {
61098
61458
  if (analysisSlot) return analysisSlot;
61099
61459
  if (!models) return null;
61100
61460
  return /* @__PURE__ */ jsx("div", { className: cn(
@@ -61135,14 +61495,14 @@ function ComparisonAiModels({
61135
61495
  ] })
61136
61496
  ] }) });
61137
61497
  }, [analysisSlot, models, analysisClassName, getSummaryCardClassName]);
61138
- const headingContent = React51.useMemo(() => {
61498
+ const headingContent = React50.useMemo(() => {
61139
61499
  if (!heading) return null;
61140
61500
  if (typeof heading === "string") {
61141
61501
  return /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-bold md:text-4xl lg:text-5xl", headingClassName), children: heading });
61142
61502
  }
61143
61503
  return /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading });
61144
61504
  }, [heading, headingClassName]);
61145
- const descriptionContent = React51.useMemo(() => {
61505
+ const descriptionContent = React50.useMemo(() => {
61146
61506
  if (!description) return null;
61147
61507
  if (typeof description === "string") {
61148
61508
  return /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-muted-foreground md:text-lg", descriptionClassName), children: description });
@@ -61192,7 +61552,7 @@ function ComparisonLegacyModern({
61192
61552
  pattern,
61193
61553
  patternOpacity
61194
61554
  }) {
61195
- const columnsContent = React51.useMemo(() => {
61555
+ const columnsContent = React50.useMemo(() => {
61196
61556
  if (columnsSlot) return columnsSlot;
61197
61557
  if (!legacyFeatures || legacyFeatures.length === 0 || !modernFeatures || modernFeatures.length === 0)
61198
61558
  return null;
@@ -61204,7 +61564,7 @@ function ComparisonLegacyModern({
61204
61564
  legacyColumnClassName
61205
61565
  ), children: [
61206
61566
  legacyTitle && (typeof legacyTitle === "string" ? /* @__PURE__ */ jsx("h3", { className: "text-2xl font-medium", children: legacyTitle }) : legacyTitle),
61207
- /* @__PURE__ */ jsx("ul", { className: "mt-9 space-y-3", children: legacyFeatures.map((feature, idx) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
61567
+ /* @__PURE__ */ jsx("ul", { className: "mt-9 space-y-3", children: legacyFeatures.map((feature, idx) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
61208
61568
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
61209
61569
  /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/x", size: 16, className: "my-1.5 shrink-0 text-muted-foreground" }),
61210
61570
  /* @__PURE__ */ jsx("li", { className: "text-sm", children: feature.text })
@@ -61221,7 +61581,7 @@ function ComparisonLegacyModern({
61221
61581
  ),
61222
61582
  children: [
61223
61583
  modernTitle && (typeof modernTitle === "string" ? /* @__PURE__ */ jsx("h3", { className: "text-2xl font-medium", children: modernTitle }) : modernTitle),
61224
- /* @__PURE__ */ jsx("ul", { className: "mt-9 space-y-3", children: modernFeatures.map((feature, idx) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
61584
+ /* @__PURE__ */ jsx("ul", { className: "mt-9 space-y-3", children: modernFeatures.map((feature, idx) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
61225
61585
  /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2 text-sm", children: [
61226
61586
  /* @__PURE__ */ jsx("span", { className: "text-lg", children: feature.emoji }),
61227
61587
  feature.text
@@ -61233,7 +61593,7 @@ function ComparisonLegacyModern({
61233
61593
  )
61234
61594
  ] });
61235
61595
  }, [columnsSlot, legacyFeatures, modernFeatures, legacyTitle, modernTitle, legacyColumnClassName, modernColumnClassName]);
61236
- const headingContent = React51.useMemo(() => {
61596
+ const headingContent = React50.useMemo(() => {
61237
61597
  if (!heading && !headingHighlight) return null;
61238
61598
  return /* @__PURE__ */ jsxs("h2", { className: cn("text-4xl font-medium md:text-5xl lg:text-7xl", headingClassName), children: [
61239
61599
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
@@ -61246,7 +61606,7 @@ function ComparisonLegacyModern({
61246
61606
  ] }) : headingHighlight)
61247
61607
  ] });
61248
61608
  }, [heading, headingHighlight, headingClassName, headingHighlightClassName]);
61249
- const descriptionContent = React51.useMemo(() => {
61609
+ const descriptionContent = React50.useMemo(() => {
61250
61610
  if (!description) return null;
61251
61611
  if (typeof description === "string") {
61252
61612
  return /* @__PURE__ */ jsx("p", { className: cn("text-lg", descriptionClassName), children: description });
@@ -61419,7 +61779,7 @@ var NavbarMobileMenu = ({
61419
61779
  closeIconClassName,
61420
61780
  title = "Mobile Navigation"
61421
61781
  }) => {
61422
- React51.useEffect(() => {
61782
+ React50.useEffect(() => {
61423
61783
  if (open) {
61424
61784
  const originalOverflow = document.body.style.overflow;
61425
61785
  document.body.style.overflow = "hidden";
@@ -61648,7 +62008,7 @@ var NavbarDropdownMenu = ({
61648
62008
  patternOpacity,
61649
62009
  optixFlowConfig
61650
62010
  }) => {
61651
- const [open, setOpen] = React51.useState(false);
62011
+ const [open, setOpen] = React50.useState(false);
61652
62012
  const renderAuthActions = useMemo(() => {
61653
62013
  if (authActionsSlot) return authActionsSlot;
61654
62014
  if (!authActions || authActions.length === 0) return null;
@@ -61874,7 +62234,7 @@ var NavbarCenteredMenu = ({
61874
62234
  patternOpacity,
61875
62235
  optixFlowConfig
61876
62236
  }) => {
61877
- const [open, setOpen] = React51.useState(false);
62237
+ const [open, setOpen] = React50.useState(false);
61878
62238
  const renderAuthActions = useMemo(() => {
61879
62239
  if (authActionsSlot) return authActionsSlot;
61880
62240
  if (!authActions || authActions.length === 0) return null;
@@ -62014,7 +62374,7 @@ var DesktopMenuItem = ({
62014
62374
  index,
62015
62375
  optixFlowConfig
62016
62376
  }) => {
62017
- const imagesRef = React51.useRef([]);
62377
+ const imagesRef = React50.useRef([]);
62018
62378
  const layout = link.layout || "simple-grid";
62019
62379
  const handleMouseEnter = (event) => {
62020
62380
  const index2 = Number(event.currentTarget.getAttribute("data-index"));
@@ -63249,7 +63609,7 @@ var NavbarFeatureGrid = ({
63249
63609
  patternOpacity,
63250
63610
  optixFlowConfig
63251
63611
  }) => {
63252
- const [open, setOpen] = React51.useState(false);
63612
+ const [open, setOpen] = React50.useState(false);
63253
63613
  const renderAuthActions = useMemo(() => {
63254
63614
  if (authActionsSlot) return authActionsSlot;
63255
63615
  if (!authActions || authActions.length === 0) return null;
@@ -66459,7 +66819,7 @@ var DesktopMenuItem7 = ({
66459
66819
  if (item.groups && item.groups.length > 0) {
66460
66820
  return /* @__PURE__ */ jsxs(NavigationMenuItem, { value: `${index}`, children: [
66461
66821
  /* @__PURE__ */ jsx(NavigationMenuTrigger, { children: item.label }),
66462
- /* @__PURE__ */ jsx(NavigationMenuContent, { className: "p-0", children: /* @__PURE__ */ jsx("div", { className: "flex", children: item.groups.map((group, groupIndex) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
66822
+ /* @__PURE__ */ jsx(NavigationMenuContent, { className: "p-0", children: /* @__PURE__ */ jsx("div", { className: "flex", children: item.groups.map((group, groupIndex) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
66463
66823
  groupIndex > 0 && /* @__PURE__ */ jsx(
66464
66824
  Separator,
66465
66825
  {
@@ -67211,7 +67571,7 @@ var NavbarSimpleLinks = ({
67211
67571
  const renderNavItems = useMemo(() => {
67212
67572
  if (navItemsSlot) return navItemsSlot;
67213
67573
  if (!navItems || navItems.length === 0) return null;
67214
- return navItems.map((item) => /* @__PURE__ */ jsx(React51.Fragment, { children: /* @__PURE__ */ jsx(NavigationMenuItem, { children: /* @__PURE__ */ jsx(
67574
+ return navItems.map((item) => /* @__PURE__ */ jsx(React50.Fragment, { children: /* @__PURE__ */ jsx(NavigationMenuItem, { children: /* @__PURE__ */ jsx(
67215
67575
  NavigationMenuLink,
67216
67576
  {
67217
67577
  "data-nav-item": item.name,
@@ -72240,7 +72600,7 @@ function PricingFullComparison({
72240
72600
  resolvedPlanIds[index]
72241
72601
  ))
72242
72602
  ] }) }),
72243
- /* @__PURE__ */ jsx("tbody", { children: categories.map((category) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
72603
+ /* @__PURE__ */ jsx("tbody", { children: categories.map((category) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
72244
72604
  /* @__PURE__ */ jsx("tr", { className: cn(getNestedCardBg(background), getNestedCardTextColor(background), categoryRowClassName), children: /* @__PURE__ */ jsx(
72245
72605
  "td",
72246
72606
  {
@@ -76841,9 +77201,9 @@ function ProcessStickySteps({
76841
77201
  );
76842
77202
  }
76843
77203
  var usePrevious = (value) => {
76844
- const [prev, setPrev] = React51.useState(void 0);
76845
- const ref = React51.useRef(value);
76846
- React51.useEffect(() => {
77204
+ const [prev, setPrev] = React50.useState(void 0);
77205
+ const ref = React50.useRef(value);
77206
+ React50.useEffect(() => {
76847
77207
  setPrev(ref.current);
76848
77208
  ref.current = value;
76849
77209
  }, [value]);
@@ -76856,12 +77216,12 @@ var ProcessCard = ({
76856
77216
  itemClassName,
76857
77217
  background
76858
77218
  }) => {
76859
- const ref = React51.useRef(null);
77219
+ const ref = React50.useRef(null);
76860
77220
  const itemInView = useInView(ref, {
76861
77221
  amount: 0,
76862
77222
  margin: "0px 0px -60% 0px"
76863
77223
  });
76864
- React51.useEffect(() => {
77224
+ React50.useEffect(() => {
76865
77225
  if (itemInView) {
76866
77226
  setActive(index);
76867
77227
  }
@@ -76911,7 +77271,7 @@ function ProcessScrollImage({
76911
77271
  ctaText,
76912
77272
  ctaUrl
76913
77273
  }) {
76914
- const [active, setActive] = React51.useState(0);
77274
+ const [active, setActive] = React50.useState(0);
76915
77275
  const previousActive = usePrevious(active);
76916
77276
  const resolvedHeading = title ?? heading;
76917
77277
  const resolvedActions = actions ?? (ctaText && ctaUrl ? [
@@ -77095,7 +77455,7 @@ var ProcessCard2 = ({
77095
77455
  hoverImageClassName,
77096
77456
  background
77097
77457
  }) => {
77098
- const [isHovered, setIsHovered] = React51.useState(false);
77458
+ const [isHovered, setIsHovered] = React50.useState(false);
77099
77459
  const titleText = typeof step.title === "string" ? step.title : `Step ${index + 1}`;
77100
77460
  return /* @__PURE__ */ jsxs(
77101
77461
  "li",
@@ -77419,7 +77779,7 @@ function ProcessExpandableTimeline({
77419
77779
  // Backwards compatibility
77420
77780
  title
77421
77781
  }) {
77422
- const [expandedIndex, setExpandedIndex] = React51.useState(null);
77782
+ const [expandedIndex, setExpandedIndex] = React50.useState(null);
77423
77783
  const resolvedHeading = title ?? heading;
77424
77784
  const toggleExpand = (index) => {
77425
77785
  setExpandedIndex(expandedIndex === index ? null : index);
@@ -82190,7 +82550,7 @@ function ListAchievementsShowcase({
82190
82550
  if (!items || items.length === 0) return null;
82191
82551
  return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col", itemsClassName), children: [
82192
82552
  /* @__PURE__ */ jsx(Separator, {}),
82193
- items.map((item, index) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
82553
+ items.map((item, index) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
82194
82554
  /* @__PURE__ */ jsxs(
82195
82555
  "div",
82196
82556
  {
@@ -82310,7 +82670,7 @@ function ListCareerTimeline({
82310
82670
  const renderExperiences = useMemo(() => {
82311
82671
  if (experiencesSlot) return experiencesSlot;
82312
82672
  if (!experiences || experiences.length === 0) return null;
82313
- return /* @__PURE__ */ jsx("div", { className: experiencesClassName, children: experiences.map((experience, idx) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
82673
+ return /* @__PURE__ */ jsx("div", { className: experiencesClassName, children: experiences.map((experience, idx) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
82314
82674
  /* @__PURE__ */ jsx(Separator, {}),
82315
82675
  /* @__PURE__ */ jsxs(
82316
82676
  "div",
@@ -82331,7 +82691,7 @@ function ListCareerTimeline({
82331
82691
  const renderAwards = useMemo(() => {
82332
82692
  if (awardsSlot) return awardsSlot;
82333
82693
  if (!awards || awards.length === 0) return null;
82334
- return /* @__PURE__ */ jsx("div", { className: awardsClassName, children: awards.map((award, idx) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
82694
+ return /* @__PURE__ */ jsx("div", { className: awardsClassName, children: awards.map((award, idx) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
82335
82695
  /* @__PURE__ */ jsx(Separator, {}),
82336
82696
  /* @__PURE__ */ jsxs(
82337
82697
  "div",
@@ -82466,7 +82826,7 @@ function ListMetricsDashboard({
82466
82826
  activeCategory: controlledActiveCategory,
82467
82827
  onActiveCategoryChange
82468
82828
  }) {
82469
- const [internalActiveTab, setInternalActiveTab] = React51.useState("all");
82829
+ const [internalActiveTab, setInternalActiveTab] = React50.useState("all");
82470
82830
  const activeTab = controlledActiveCategory ?? internalActiveTab;
82471
82831
  const handleTabChange = (value) => {
82472
82832
  if (onActiveCategoryChange) {
@@ -82950,7 +83310,7 @@ function ListSearchableGrid({
82950
83310
  searchTerm: controlledSearchTerm,
82951
83311
  onSearchTermChange
82952
83312
  }) {
82953
- const [internalSearchTerm, setInternalSearchTerm] = React51.useState("");
83313
+ const [internalSearchTerm, setInternalSearchTerm] = React50.useState("");
82954
83314
  const searchTerm = controlledSearchTerm ?? internalSearchTerm;
82955
83315
  const handleSearchChange = (value) => {
82956
83316
  if (onSearchTermChange) {
@@ -82959,7 +83319,7 @@ function ListSearchableGrid({
82959
83319
  setInternalSearchTerm(value);
82960
83320
  }
82961
83321
  };
82962
- const filteredItems = React51.useMemo(() => {
83322
+ const filteredItems = React50.useMemo(() => {
82963
83323
  if (!searchTerm) {
82964
83324
  return items ?? [];
82965
83325
  }
@@ -83122,7 +83482,7 @@ function ListSearchableGrid({
83122
83482
  }
83123
83483
  );
83124
83484
  }
83125
- var { useMemo: useMemo439 } = React51;
83485
+ var { useMemo: useMemo439 } = React50;
83126
83486
  function OfferModalNewsletterDiscount({
83127
83487
  title,
83128
83488
  emailPlaceholder,
@@ -83271,7 +83631,7 @@ function OfferModalNewsletterDiscount({
83271
83631
  }
83272
83632
  ) });
83273
83633
  }
83274
- var { useMemo: useMemo440 } = React51;
83634
+ var { useMemo: useMemo440 } = React50;
83275
83635
  function OfferModalMembershipImage({
83276
83636
  overline,
83277
83637
  title,
@@ -83560,7 +83920,7 @@ function SheetDescription({
83560
83920
  }
83561
83921
  );
83562
83922
  }
83563
- var { useMemo: useMemo441 } = React51;
83923
+ var { useMemo: useMemo441 } = React50;
83564
83924
  function OfferModalSheetNewsletter({
83565
83925
  logo,
83566
83926
  logoSlot,
@@ -84309,10 +84669,10 @@ function ProjectDetailSidebarNavigation(props) {
84309
84669
  heroImageClassName,
84310
84670
  metadataClassName
84311
84671
  } = props;
84312
- const [activeSection, setActiveSection] = React51.useState(
84672
+ const [activeSection, setActiveSection] = React50.useState(
84313
84673
  sections?.[0]?.id || ""
84314
84674
  );
84315
- React51.useEffect(() => {
84675
+ React50.useEffect(() => {
84316
84676
  const handleScroll = () => {
84317
84677
  const sectionElements = sections?.map(
84318
84678
  (section) => document.getElementById(section.id)
@@ -87172,7 +87532,7 @@ function ProjectDetailTabbedCaseStudy(props) {
87172
87532
  testimonialClassName,
87173
87533
  toolsClassName
87174
87534
  } = props;
87175
- const [activeTab, setActiveTab] = React51.useState(tabs?.[0]?.id || "");
87535
+ const [activeTab, setActiveTab] = React50.useState(tabs?.[0]?.id || "");
87176
87536
  const renderedBackAction = useMemo(() => {
87177
87537
  if (backActionSlot) return backActionSlot;
87178
87538
  if (!backAction) return null;
@@ -87560,7 +87920,7 @@ function RevealImage({
87560
87920
  index,
87561
87921
  optixFlowConfig
87562
87922
  }) {
87563
- const ref = React51.useRef(null);
87923
+ const ref = React50.useRef(null);
87564
87924
  const { scrollYProgress } = useScroll({
87565
87925
  target: ref,
87566
87926
  offset: ["start end", "end start"]
@@ -87755,7 +88115,7 @@ function ParallaxSection({
87755
88115
  index,
87756
88116
  optixFlowConfig
87757
88117
  }) {
87758
- const ref = React51.useRef(null);
88118
+ const ref = React50.useRef(null);
87759
88119
  const { scrollYProgress } = useScroll({
87760
88120
  target: ref,
87761
88121
  offset: ["start end", "end start"]
@@ -87828,7 +88188,7 @@ function ProjectDetailParallaxScroll(props) {
87828
88188
  heroImageClassName,
87829
88189
  sectionsClassName
87830
88190
  } = props;
87831
- const heroRef = React51.useRef(null);
88191
+ const heroRef = React50.useRef(null);
87832
88192
  const { scrollYProgress } = useScroll({
87833
88193
  target: heroRef,
87834
88194
  offset: ["start start", "end start"]
@@ -88158,7 +88518,7 @@ function BannerDeliveryCountdown({
88158
88518
  }, [prefixText, timerContent, middleText, deliveryDateContent]);
88159
88519
  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: [
88160
88520
  iconContent,
88161
- messageParts.length > 0 && /* @__PURE__ */ jsx("span", { children: messageParts.map((part, index) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
88521
+ messageParts.length > 0 && /* @__PURE__ */ jsx("span", { children: messageParts.map((part, index) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
88162
88522
  index > 0 ? " " : null,
88163
88523
  part
88164
88524
  ] }, index)) })
@@ -89294,7 +89654,7 @@ function IndustriesExpandableShowcase({
89294
89654
  patternClassName,
89295
89655
  optixFlowConfig
89296
89656
  }) {
89297
- const [activeContractor, setActiveContractor] = React51.useState(
89657
+ const [activeContractor, setActiveContractor] = React50.useState(
89298
89658
  contractors?.[0]?.id || ""
89299
89659
  );
89300
89660
  const handleContractorHover = (contractorId) => {
@@ -89947,7 +90307,7 @@ function ResourceDetailDocumentSidebar({
89947
90307
  }) {
89948
90308
  const renderedBreadcrumbs = useMemo(() => {
89949
90309
  if (breadcrumbsSlot) return breadcrumbsSlot;
89950
- return /* @__PURE__ */ jsx(Breadcrumb, { className: breadcrumbsClassName, children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumbs?.map((crumb, index) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
90310
+ return /* @__PURE__ */ jsx(Breadcrumb, { className: breadcrumbsClassName, children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumbs?.map((crumb, index) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
89951
90311
  /* @__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 }) }),
89952
90312
  index < (breadcrumbs?.length || 0) - 1 && /* @__PURE__ */ jsx(BreadcrumbSeparator, {})
89953
90313
  ] }, index)) }) });
@@ -93348,8 +93708,8 @@ function ServicesListTableHover({
93348
93708
  patternOpacity,
93349
93709
  optixFlowConfig
93350
93710
  }) {
93351
- const [hoveredIndex, setHoveredIndex] = React51.useState(null);
93352
- const [mousePosition, setMousePosition] = React51.useState({ x: 0, y: 0 });
93711
+ const [hoveredIndex, setHoveredIndex] = React50.useState(null);
93712
+ const [mousePosition, setMousePosition] = React50.useState({ x: 0, y: 0 });
93353
93713
  const handleMouseMove = (e) => {
93354
93714
  setMousePosition({ x: e.clientX, y: e.clientY });
93355
93715
  };
@@ -93599,7 +93959,7 @@ function ServicesListStickyImage({
93599
93959
  patternOpacity,
93600
93960
  optixFlowConfig
93601
93961
  }) {
93602
- const [activeIndex, setActiveIndex] = React51.useState(0);
93962
+ const [activeIndex, setActiveIndex] = React50.useState(0);
93603
93963
  const renderServices = () => {
93604
93964
  if (servicesSlot) return servicesSlot;
93605
93965
  if (!services || services.length === 0) return null;
@@ -93851,8 +94211,8 @@ function ServicesListVideoShowcase({
93851
94211
  patternOpacity,
93852
94212
  optixFlowConfig
93853
94213
  }) {
93854
- const [playingIndex, setPlayingIndex] = React51.useState(null);
93855
- const videoRefs = React51.useRef([]);
94214
+ const [playingIndex, setPlayingIndex] = React50.useState(null);
94215
+ const videoRefs = React50.useRef([]);
93856
94216
  const handleMouseEnter = (index) => {
93857
94217
  setPlayingIndex(index);
93858
94218
  videoRefs.current[index]?.play();
@@ -97145,7 +97505,7 @@ function StatsCircularProgress({
97145
97505
  statInfoClassName
97146
97506
  }) {
97147
97507
  const effectiveDefaultCategory = defaultCategory || (categories && categories.length > 0 ? categories[0].id : "");
97148
- const [category, setCategory] = React51.useState(effectiveDefaultCategory);
97508
+ const [category, setCategory] = React50.useState(effectiveDefaultCategory);
97149
97509
  const badgeContent = useMemo(() => {
97150
97510
  if (badgeSlot) return badgeSlot;
97151
97511
  if (!badge) return null;
@@ -97438,8 +97798,8 @@ function StatsCardGroup({
97438
97798
  );
97439
97799
  }
97440
97800
  function useAnimatedCounter(endValue, duration = 2e3, isVisible) {
97441
- const [count, setCount] = React51.useState(0);
97442
- React51.useEffect(() => {
97801
+ const [count, setCount] = React50.useState(0);
97802
+ React50.useEffect(() => {
97443
97803
  if (!isVisible) return;
97444
97804
  let startTime = null;
97445
97805
  let animationFrame;
@@ -97527,9 +97887,9 @@ function StatsAnimatedCounter({
97527
97887
  statLabelClassName,
97528
97888
  statIconClassName
97529
97889
  }) {
97530
- const [isVisible, setIsVisible] = React51.useState(false);
97531
- const sectionRef = React51.useRef(null);
97532
- React51.useEffect(() => {
97890
+ const [isVisible, setIsVisible] = React50.useState(false);
97891
+ const sectionRef = React50.useRef(null);
97892
+ React50.useEffect(() => {
97533
97893
  const observer = new IntersectionObserver(
97534
97894
  ([entry]) => {
97535
97895
  if (entry.isIntersecting) {
@@ -97617,8 +97977,8 @@ function StatsAnimatedCounter({
97617
97977
  );
97618
97978
  }
97619
97979
  function useNumberTicker(endValue, duration = 2500, isVisible, decimals = 0) {
97620
- const [displayValue, setDisplayValue] = React51.useState("0");
97621
- React51.useEffect(() => {
97980
+ const [displayValue, setDisplayValue] = React50.useState("0");
97981
+ React50.useEffect(() => {
97622
97982
  if (!isVisible) return;
97623
97983
  let startTime = null;
97624
97984
  let animationFrame;
@@ -97733,9 +98093,9 @@ function StatsNumberTicker({
97733
98093
  statLabelClassName,
97734
98094
  statDescriptionClassName
97735
98095
  }) {
97736
- const [isVisible, setIsVisible] = React51.useState(false);
97737
- const sectionRef = React51.useRef(null);
97738
- React51.useEffect(() => {
98096
+ const [isVisible, setIsVisible] = React50.useState(false);
98097
+ const sectionRef = React50.useRef(null);
98098
+ React50.useEffect(() => {
97739
98099
  const observer = new IntersectionObserver(
97740
98100
  ([entry]) => {
97741
98101
  if (entry.isIntersecting) {
@@ -97994,9 +98354,9 @@ function StatsBarComparison({
97994
98354
  barValueClassName,
97995
98355
  barTrackClassName
97996
98356
  }) {
97997
- const [isVisible, setIsVisible] = React51.useState(!animate);
97998
- const sectionRef = React51.useRef(null);
97999
- React51.useEffect(() => {
98357
+ const [isVisible, setIsVisible] = React50.useState(!animate);
98358
+ const sectionRef = React50.useRef(null);
98359
+ React50.useEffect(() => {
98000
98360
  if (!animate) return;
98001
98361
  const observer = new IntersectionObserver(
98002
98362
  ([entry]) => {
@@ -98174,7 +98534,7 @@ function TimelineVerticalIconDashed({
98174
98534
  "mx-auto flex flex-col items-center justify-center text-center sm:max-w-xl",
98175
98535
  stepsClassName
98176
98536
  ),
98177
- children: steps.map((step, index) => /* @__PURE__ */ jsxs(React51.Fragment, { children: [
98537
+ children: steps.map((step, index) => /* @__PURE__ */ jsxs(React50.Fragment, { children: [
98178
98538
  /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col items-center", stepClassName), children: [
98179
98539
  /* @__PURE__ */ jsx(
98180
98540
  "span",
@@ -98441,7 +98801,7 @@ function TimelineTwoColumnFeatured({
98441
98801
  style,
98442
98802
  optixFlowConfig
98443
98803
  }) {
98444
- const renderActions = React51.useMemo(() => {
98804
+ const renderActions = React50.useMemo(() => {
98445
98805
  if (actionsSlot) {
98446
98806
  return actionsSlot;
98447
98807
  }
@@ -98569,7 +98929,7 @@ function TimelineTwoColumnFeatured({
98569
98929
  }
98570
98930
  );
98571
98931
  }
98572
- var DiagonalPattern = React51.memo(({
98932
+ var DiagonalPattern = React50.memo(({
98573
98933
  className,
98574
98934
  patternOpacity = 0.15
98575
98935
  }) => {
@@ -98608,7 +98968,7 @@ function TimelineAlternatingDiagonal({
98608
98968
  style,
98609
98969
  optixFlowConfig
98610
98970
  }) {
98611
- const renderedBadge = React51.useMemo(() => {
98971
+ const renderedBadge = React50.useMemo(() => {
98612
98972
  if (badgeSlot) {
98613
98973
  return badgeSlot;
98614
98974
  }
@@ -98986,7 +99346,7 @@ function TimelineProductivityList({
98986
99346
  }
98987
99347
  );
98988
99348
  }
98989
- var ProcessBar = React51.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(React51.Fragment, { children: [
99349
+ var ProcessBar = React50.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(React50.Fragment, { children: [
98990
99350
  /* @__PURE__ */ jsx("div", { className: "flex flex-col items-center", children: /* @__PURE__ */ jsx(
98991
99351
  motion.div,
98992
99352
  {
@@ -99013,7 +99373,7 @@ var ProcessBar = React51.memo(({ currentStep, steps }) => /* @__PURE__ */ jsx("d
99013
99373
  )
99014
99374
  ] })
99015
99375
  ] }, index)) }) }));
99016
- var StepperContent = React51.memo(({ step, optixFlowConfig, imageClassName, descriptionClassName, background }) => {
99376
+ var StepperContent = React50.memo(({ step, optixFlowConfig, imageClassName, descriptionClassName, background }) => {
99017
99377
  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: [
99018
99378
  /* @__PURE__ */ jsx(
99019
99379
  motion.div,
@@ -99046,7 +99406,7 @@ var StepperContent = React51.memo(({ step, optixFlowConfig, imageClassName, desc
99046
99406
  )
99047
99407
  ] });
99048
99408
  });
99049
- var NavButtons = React51.memo(({ handlePrev, handleNext }) => /* @__PURE__ */ jsxs("div", { className: "flex w-full justify-end gap-3 tracking-tight", children: [
99409
+ var NavButtons = React50.memo(({ handlePrev, handleNext }) => /* @__PURE__ */ jsxs("div", { className: "flex w-full justify-end gap-3 tracking-tight", children: [
99050
99410
  /* @__PURE__ */ jsxs(
99051
99411
  Pressable,
99052
99412
  {
@@ -99097,10 +99457,10 @@ function TimelineStepperAnimated({
99097
99457
  }) {
99098
99458
  const safeInitialStep = (steps?.length ?? 0) > 0 ? Math.max(0, Math.min(initialStep ?? 0, (steps?.length ?? 1) - 1)) : 0;
99099
99459
  const [currentStep, setCurrentStep] = useState(safeInitialStep);
99100
- const handleNext = React51.useCallback(() => {
99460
+ const handleNext = React50.useCallback(() => {
99101
99461
  setCurrentStep((prev) => Math.min(prev + 1, (steps?.length ?? 1) - 1));
99102
99462
  }, [steps?.length]);
99103
- const handlePrev = React51.useCallback(() => {
99463
+ const handlePrev = React50.useCallback(() => {
99104
99464
  setCurrentStep((prev) => Math.max(prev - 1, 0));
99105
99465
  }, []);
99106
99466
  const safeCurrentStep = (steps?.length ?? 0) > 0 ? Math.max(0, Math.min(currentStep, (steps?.length ?? 1) - 1)) : 0;
@@ -99809,7 +100169,7 @@ function TimelineTabbedPhases({
99809
100169
  style,
99810
100170
  optixFlowConfig
99811
100171
  }) {
99812
- const renderDownloadButton = React51.useMemo(() => {
100172
+ const renderDownloadButton = React50.useMemo(() => {
99813
100173
  if (downloadSlot) {
99814
100174
  return downloadSlot;
99815
100175
  }
@@ -100029,7 +100389,7 @@ function TimelineProductLaunch({
100029
100389
  id,
100030
100390
  style
100031
100391
  }) {
100032
- const renderCta = React51.useMemo(() => {
100392
+ const renderCta = React50.useMemo(() => {
100033
100393
  if (ctaSlot) {
100034
100394
  return ctaSlot;
100035
100395
  }
@@ -100494,9 +100854,9 @@ function LinkTreeBlock({
100494
100854
  }) {
100495
100855
  const resolvedBackground = background;
100496
100856
  const resolvedPattern = pattern ?? backgroundPattern;
100497
- const [lightboxOpen, setLightboxOpen] = React51.useState(false);
100498
- const [lightboxIndex, setLightboxIndex] = React51.useState(0);
100499
- const lightboxItems = React51.useMemo(() => {
100857
+ const [lightboxOpen, setLightboxOpen] = React50.useState(false);
100858
+ const [lightboxIndex, setLightboxIndex] = React50.useState(0);
100859
+ const lightboxItems = React50.useMemo(() => {
100500
100860
  if (!mediaGallery || mediaGallery.length === 0) return [];
100501
100861
  return mediaGallery.slice(0, mediaGalleryLimit).map((item, index) => ({
100502
100862
  id: item.id ?? `media-${index}`,
@@ -100508,11 +100868,11 @@ function LinkTreeBlock({
100508
100868
  share: true
100509
100869
  }));
100510
100870
  }, [mediaGallery, mediaGalleryLimit]);
100511
- const handleMediaClick = React51.useCallback((index) => {
100871
+ const handleMediaClick = React50.useCallback((index) => {
100512
100872
  setLightboxIndex(index);
100513
100873
  setLightboxOpen(true);
100514
100874
  }, []);
100515
- const handleLightboxClose = React51.useCallback(() => {
100875
+ const handleLightboxClose = React50.useCallback(() => {
100516
100876
  setLightboxOpen(false);
100517
100877
  }, []);
100518
100878
  const resolveImage = (value, fallbackAlt) => {
@@ -100524,7 +100884,7 @@ function LinkTreeBlock({
100524
100884
  };
100525
100885
  const nameForAlt = typeof brandName === "string" ? brandName : "Brand avatar";
100526
100886
  const resolvedAvatar = resolveImage(brandAvatar || brandLogo, nameForAlt) || resolveImage(blockBrandedIconsAndPlaceholders.avatar1, nameForAlt);
100527
- const renderBrandHeader = React51.useMemo(() => {
100887
+ const renderBrandHeader = React50.useMemo(() => {
100528
100888
  if (brandSlot) return brandSlot;
100529
100889
  return /* @__PURE__ */ jsxs(
100530
100890
  "div",
@@ -100611,7 +100971,7 @@ function LinkTreeBlock({
100611
100971
  brandTagline,
100612
100972
  taglineClassName
100613
100973
  ]);
100614
- const renderLinks = React51.useMemo(() => {
100974
+ const renderLinks = React50.useMemo(() => {
100615
100975
  if (linksSlot) return linksSlot;
100616
100976
  if (!links || links.length === 0) return null;
100617
100977
  return /* @__PURE__ */ jsx("div", { className: cn("space-y-3", linksClassName), children: links.map((link, index) => {
@@ -100728,7 +101088,7 @@ function LinkTreeBlock({
100728
101088
  linkBadgeClassName,
100729
101089
  linkChevronClassName
100730
101090
  ]);
100731
- const renderMediaGallery = React51.useMemo(() => {
101091
+ const renderMediaGallery = React50.useMemo(() => {
100732
101092
  if (mediaGallerySlot) return mediaGallerySlot;
100733
101093
  if (!mediaGallery || mediaGallery.length === 0) return null;
100734
101094
  const items = mediaGallery.slice(0, mediaGalleryLimit);
@@ -100842,7 +101202,7 @@ function LinkTreeBlock({
100842
101202
  mediaGalleryOverlayClassName,
100843
101203
  mediaGalleryPlayIconClassName
100844
101204
  ]);
100845
- const renderSocialLinks = React51.useMemo(() => {
101205
+ const renderSocialLinks = React50.useMemo(() => {
100846
101206
  if (socialLinksSlot) return socialLinksSlot;
100847
101207
  if (!socialLinks || socialLinks.length === 0) return null;
100848
101208
  return /* @__PURE__ */ jsx(
@@ -100888,7 +101248,7 @@ function LinkTreeBlock({
100888
101248
  socialIconClassName,
100889
101249
  socialLinkClassName
100890
101250
  ]);
100891
- const renderFooter = React51.useMemo(() => {
101251
+ const renderFooter = React50.useMemo(() => {
100892
101252
  if (footerSlot) return footerSlot;
100893
101253
  if (!footerAction) return null;
100894
101254
  const resolvedFooterAction = footerAction;