@opensite/ui 2.1.9 → 2.2.2

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
@@ -9041,6 +9041,7 @@ function AboutNetworkSpotlight({
9041
9041
  spotlightCard,
9042
9042
  spotlightCardSlot,
9043
9043
  className,
9044
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
9044
9045
  contentClassName,
9045
9046
  eyebrowClassName,
9046
9047
  headingClassName,
@@ -9050,7 +9051,7 @@ function AboutNetworkSpotlight({
9050
9051
  imageClassName,
9051
9052
  spotlightCardClassName,
9052
9053
  background,
9053
- spacing,
9054
+ spacing = "py-32 md:py-32",
9054
9055
  pattern,
9055
9056
  patternOpacity,
9056
9057
  optixFlowConfig
@@ -9071,7 +9072,7 @@ function AboutNetworkSpotlight({
9071
9072
  /* @__PURE__ */ jsx("span", { children: item })
9072
9073
  ] }, index)) });
9073
9074
  }, [highlightsSlot, highlights, highlightsClassName]);
9074
- const actionsContent = useMemo(() => {
9075
+ useMemo(() => {
9075
9076
  if (actionsSlot) return actionsSlot;
9076
9077
  if (!actions || actions.length === 0) return null;
9077
9078
  return actions.map((action, index) => {
@@ -9135,9 +9136,10 @@ function AboutNetworkSpotlight({
9135
9136
  {
9136
9137
  background,
9137
9138
  spacing,
9138
- className: cn(className),
9139
9139
  pattern,
9140
9140
  patternOpacity,
9141
+ className,
9142
+ containerClassName,
9141
9143
  children: /* @__PURE__ */ jsxs(
9142
9144
  "div",
9143
9145
  {
@@ -9153,7 +9155,7 @@ function AboutNetworkSpotlight({
9153
9155
  whileInView: { opacity: 1, x: 0 },
9154
9156
  viewport: { once: true, margin: "-50px" },
9155
9157
  transition: { duration: 0.5 },
9156
- children: /* @__PURE__ */ jsxs("div", { className: "relative overflow-hidden rounded-3xl border border-white/10 shadow-2xl", children: [
9158
+ children: /* @__PURE__ */ jsxs("div", { className: "relative overflow-hidden rounded-3xl border border-white/10 shadow-2xl aspect-square md:aspect-auto", children: [
9157
9159
  /* @__PURE__ */ jsx(
9158
9160
  Img,
9159
9161
  {
@@ -9164,7 +9166,7 @@ function AboutNetworkSpotlight({
9164
9166
  }
9165
9167
  ),
9166
9168
  /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-linear-to-tr from-black/70 via-transparent to-transparent" }),
9167
- /* @__PURE__ */ jsx("div", { className: "absolute bottom-6 left-6 right-6", children: spotlightCardContent })
9169
+ /* @__PURE__ */ jsx("div", { className: "absolute bottom-2 md:bottom-6 left-2 md:left-6 right-2 md:right-6", children: spotlightCardContent })
9168
9170
  ] })
9169
9171
  }
9170
9172
  ),
@@ -9185,29 +9187,33 @@ function AboutNetworkSpotlight({
9185
9187
  ),
9186
9188
  children: eyebrow
9187
9189
  }
9188
- ) : /* @__PURE__ */ jsx("div", { className: eyebrowClassName, children: eyebrow })),
9190
+ ) : eyebrow),
9189
9191
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
9190
9192
  "h2",
9191
9193
  {
9192
9194
  className: cn(
9193
- "mt-2 text-3xl font-bold text-background md:text-4xl",
9195
+ "mt-2 text-3xl font-bold md:text-4xl text-pretty",
9194
9196
  headingClassName
9195
9197
  ),
9196
9198
  children: heading
9197
9199
  }
9198
- ) : /* @__PURE__ */ jsx("div", { className: cn("mt-2", headingClassName), children: heading })),
9200
+ ) : heading),
9199
9201
  description && (typeof description === "string" ? /* @__PURE__ */ jsx(
9200
9202
  "p",
9201
9203
  {
9202
- className: cn(
9203
- "mt-4 text-lg text-background/80",
9204
- descriptionClassName
9205
- ),
9204
+ className: cn("mt-4 text-lg text-pretty", descriptionClassName),
9206
9205
  children: description
9207
9206
  }
9208
- ) : /* @__PURE__ */ jsx("div", { className: cn("mt-4", descriptionClassName), children: description })),
9207
+ ) : description),
9209
9208
  (highlightsSlot || highlights && highlights.length > 0) && highlightsContent,
9210
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-8 flex flex-wrap gap-4", actionsClassName), children: actionsContent })
9209
+ /* @__PURE__ */ jsx(
9210
+ BlockActions,
9211
+ {
9212
+ actions,
9213
+ actionsSlot,
9214
+ actionsClassName
9215
+ }
9216
+ )
9211
9217
  ]
9212
9218
  }
9213
9219
  )
@@ -13686,104 +13692,115 @@ function ContactCallback({
13686
13692
  }
13687
13693
  );
13688
13694
  }
13695
+ var DEFAULT_STYLE_RULES = {
13696
+ formContainer: "",
13697
+ fieldsContainer: "",
13698
+ fieldClassName: "",
13699
+ formClassName: "space-y-6"
13700
+ };
13689
13701
  var DEFAULT_FORM_FIELDS3 = [
13690
13702
  {
13691
- name: "firstName",
13703
+ name: "fullName",
13692
13704
  type: "text",
13693
- label: "First Name",
13694
- placeholder: "John",
13705
+ label: "Full Name",
13706
+ placeholder: "Full Name",
13695
13707
  required: true,
13696
13708
  columnSpan: 6
13697
13709
  },
13698
13710
  {
13699
- name: "lastName",
13700
- type: "text",
13701
- label: "Last Name",
13702
- placeholder: "Doe",
13711
+ name: "email",
13712
+ type: "email",
13713
+ label: "Email",
13714
+ placeholder: "your@email.com",
13703
13715
  required: true,
13704
13716
  columnSpan: 6
13705
13717
  },
13706
13718
  {
13707
- name: "email",
13708
- type: "email",
13709
- label: "Email Address",
13710
- placeholder: "john@example.com",
13711
- required: true,
13719
+ name: "phone",
13720
+ type: "tel",
13721
+ label: "Phone",
13722
+ placeholder: "+1 (555) 000-0000",
13712
13723
  columnSpan: 12
13713
13724
  },
13714
13725
  {
13715
13726
  name: "message",
13716
13727
  type: "textarea",
13717
- label: "Message",
13718
- placeholder: "How can we help you?",
13728
+ label: "Your Message",
13729
+ placeholder: "How can we help you today?",
13719
13730
  required: true,
13720
13731
  rows: 4,
13721
13732
  columnSpan: 12
13722
- },
13723
- {
13724
- name: "privacyPolicy",
13725
- type: "checkbox",
13726
- label: "I agree to the privacy policy",
13727
- required: true,
13728
- columnSpan: 12
13729
13733
  }
13730
13734
  ];
13731
13735
  function ContactCard({
13732
- heading,
13733
- description,
13734
- actions,
13735
- actionsSlot,
13736
- actionsClassName,
13736
+ heading = "Get In Touch",
13737
+ description = "We'd love to hear from you. Send us a message and we'll respond as soon as possible.",
13738
+ buttonText = "Send Message",
13739
+ buttonIcon,
13737
13740
  contactOptions,
13738
13741
  contactOptionsSlot,
13739
- formFields,
13740
- successMessage = "Thank you! We'll be in touch soon.",
13742
+ socialLinks,
13743
+ socialLinksSlot,
13744
+ formEngineSetup,
13741
13745
  className,
13742
13746
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
13743
13747
  cardClassName,
13744
- formClassName,
13745
- successMessageClassName,
13746
- errorMessageClassName,
13748
+ cardContentClassName,
13747
13749
  infoPanelClassName,
13748
13750
  headingClassName,
13749
13751
  descriptionClassName,
13750
13752
  contactOptionsClassName,
13753
+ socialLinksClassName,
13754
+ gridClassName,
13751
13755
  background,
13752
13756
  spacing = "py-16 md:py-32",
13753
13757
  pattern,
13754
- patternOpacity,
13755
- formConfig,
13756
- onSubmit,
13757
- onSuccess,
13758
- onError
13758
+ patternOpacity
13759
13759
  }) {
13760
- const fields = useMemo(() => formFields || DEFAULT_FORM_FIELDS3, [formFields]);
13761
- const { form, submissionError, formMethod, resetSubmissionState } = useContactForm({
13762
- formFields: fields,
13763
- formConfig,
13764
- onSubmit,
13765
- onSuccess,
13766
- onError
13767
- });
13768
- const contactOptionsContent = useMemo(() => {
13760
+ const contactOptionsContent = React25.useMemo(() => {
13769
13761
  if (contactOptionsSlot) return contactOptionsSlot;
13770
13762
  if (contactOptions && contactOptions.length > 0) {
13771
- return contactOptions.map((option, key) => /* @__PURE__ */ jsxs(
13763
+ return contactOptions.map((option, key) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
13764
+ /* @__PURE__ */ jsx(
13765
+ DynamicIcon,
13766
+ {
13767
+ name: option.icon,
13768
+ size: 20,
13769
+ className: "shrink-0 text-muted-foreground"
13770
+ }
13771
+ ),
13772
+ option.href ? /* @__PURE__ */ jsx(
13773
+ Pressable,
13774
+ {
13775
+ href: option.href,
13776
+ className: "text-sm font-medium text-muted-foreground",
13777
+ children: option.info
13778
+ }
13779
+ ) : /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-muted-foreground", children: option.info })
13780
+ ] }, key));
13781
+ }
13782
+ return null;
13783
+ }, [contactOptionsSlot, contactOptions]);
13784
+ const socialLinksContent = React25.useMemo(() => {
13785
+ if (socialLinksSlot) return socialLinksSlot;
13786
+ if (socialLinks && socialLinks.length > 0) {
13787
+ return socialLinks.map((social, key) => /* @__PURE__ */ jsx(
13772
13788
  Pressable,
13773
13789
  {
13774
- variant: "link",
13775
- href: option.href,
13776
- className: "gap-4 font-bold",
13777
- children: [
13778
- /* @__PURE__ */ jsx(DynamicIcon, { name: option.icon, size: 20 }),
13779
- option.info
13780
- ]
13790
+ href: social.href,
13791
+ className: cn(
13792
+ "flex h-9 w-9 items-center justify-center",
13793
+ "rounded-full transition-colors",
13794
+ "text-muted-foreground hover:text-foreground"
13795
+ ),
13796
+ "aria-label": social.label,
13797
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: social.icon, size: 18 })
13781
13798
  },
13782
13799
  key
13783
13800
  ));
13784
13801
  }
13785
13802
  return null;
13786
- }, [contactOptionsSlot, contactOptions]);
13803
+ }, [socialLinksSlot, socialLinks]);
13787
13804
  return /* @__PURE__ */ jsx(
13788
13805
  Section,
13789
13806
  {
@@ -13793,82 +13810,89 @@ function ContactCard({
13793
13810
  patternOpacity,
13794
13811
  className,
13795
13812
  containerClassName,
13796
- children: /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs("div", { className: "grid items-start gap-10 md:gap-12 lg:grid-cols-2", children: [
13797
- /* @__PURE__ */ jsx(Card, { className: cn("p-6 lg:p-8 order-2 md:order-1", cardClassName), children: /* @__PURE__ */ jsxs(
13798
- Form,
13799
- {
13800
- form,
13801
- action: formConfig?.endpoint,
13802
- method: formMethod,
13803
- submissionError,
13804
- successMessage,
13805
- successMessageClassName,
13806
- errorMessageClassName,
13807
- submissionConfig: formConfig?.submissionConfig,
13808
- onNewSubmission: resetSubmissionState,
13809
- className: cn("space-y-6", formClassName),
13810
- children: [
13811
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-12 gap-6", children: fields.map((field) => /* @__PURE__ */ jsx(
13812
- "div",
13813
- {
13814
- className: getColumnSpanClass(field.columnSpan),
13815
- children: /* @__PURE__ */ jsx(DynamicFormField, { field })
13813
+ children: /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs(
13814
+ "div",
13815
+ {
13816
+ className: cn(
13817
+ "grid items-start gap-10 md:gap-12 grid-cols-1 lg:grid-cols-2",
13818
+ gridClassName
13819
+ ),
13820
+ children: [
13821
+ /* @__PURE__ */ jsx(Card, { className: cn("order-2 lg:order-1 pt-0 pb-0", cardClassName), children: /* @__PURE__ */ jsx(CardContent, { className: cn("p-6 lg:p-8", cardContentClassName), children: formEngineSetup ? /* @__PURE__ */ jsx(
13822
+ FormEngine,
13823
+ {
13824
+ formEngineSetup: {
13825
+ ...formEngineSetup,
13826
+ formLayoutSettings: {
13827
+ ...formEngineSetup.formLayoutSettings,
13828
+ formLayout: "standard",
13829
+ submitButtonSetup: {
13830
+ ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
13831
+ submitLabel: /* @__PURE__ */ jsxs(Fragment$1, { children: [
13832
+ buttonIcon,
13833
+ buttonText
13834
+ ] })
13835
+ }
13836
+ }
13816
13837
  },
13817
- field.name
13818
- )) }),
13819
- /* @__PURE__ */ jsx(
13820
- BlockActions,
13821
- {
13822
- actions,
13823
- actionsSlot,
13824
- actionsClassName
13825
- }
13826
- )
13827
- ]
13828
- }
13829
- ) }),
13830
- /* @__PURE__ */ jsxs(
13831
- "div",
13832
- {
13833
- className: cn(
13834
- "flex flex-col items-start gap-2 md:gap-4 order-1 md:order-2",
13835
- infoPanelClassName
13836
- ),
13837
- children: [
13838
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
13839
- "h2",
13840
- {
13841
- className: cn(
13842
- "text-4xl lg:text-6xl font-bold tracking-tight text-pretty",
13843
- headingClassName
13844
- ),
13845
- children: heading
13846
- }
13847
- ) : heading),
13848
- description && (typeof description === "string" ? /* @__PURE__ */ jsx(
13849
- "p",
13850
- {
13851
- className: cn(
13852
- "leading-relaxed text-pretty text-lg opacity-70",
13853
- descriptionClassName
13854
- ),
13855
- children: description
13856
- }
13857
- ) : description),
13858
- /* @__PURE__ */ jsx(
13859
- "div",
13860
- {
13861
- className: cn(
13862
- "mt-4 space-y-4 w-full md:w-fit px-6 py-6 md:px-12 md:py-8 bg-muted rounded-xl text-sm md:text-normal flex flex-col items-start gap-1",
13863
- contactOptionsClassName
13838
+ defaultFields: DEFAULT_FORM_FIELDS3,
13839
+ defaultStyleRules: DEFAULT_STYLE_RULES
13840
+ }
13841
+ ) : null }) }),
13842
+ /* @__PURE__ */ jsxs(
13843
+ "div",
13844
+ {
13845
+ className: cn(
13846
+ "flex flex-col items-start gap-2 md:gap-4 order-1 lg:order-2",
13847
+ infoPanelClassName
13848
+ ),
13849
+ children: [
13850
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
13851
+ "h2",
13852
+ {
13853
+ className: cn(
13854
+ "text-4xl lg:text-6xl font-bold tracking-tight text-pretty",
13855
+ headingClassName
13856
+ ),
13857
+ children: heading
13858
+ }
13859
+ ) : heading),
13860
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
13861
+ "p",
13862
+ {
13863
+ className: cn(
13864
+ "leading-relaxed text-pretty text-lg text-muted-foreground",
13865
+ descriptionClassName
13866
+ ),
13867
+ children: description
13868
+ }
13869
+ ) : description),
13870
+ contactOptionsContent && /* @__PURE__ */ jsx(
13871
+ "div",
13872
+ {
13873
+ className: cn(
13874
+ "mt-4 w-full rounded-xl bg-muted px-6 py-6 md:px-8 md:py-8 space-y-6",
13875
+ contactOptionsClassName
13876
+ ),
13877
+ children: contactOptionsContent
13878
+ }
13864
13879
  ),
13865
- children: contactOptionsContent
13866
- }
13867
- )
13868
- ]
13869
- }
13870
- )
13871
- ] }) })
13880
+ socialLinksContent && /* @__PURE__ */ jsx(
13881
+ "div",
13882
+ {
13883
+ className: cn(
13884
+ "mt-2 flex items-center gap-2",
13885
+ socialLinksClassName
13886
+ ),
13887
+ children: socialLinksContent
13888
+ }
13889
+ )
13890
+ ]
13891
+ }
13892
+ )
13893
+ ]
13894
+ }
13895
+ ) })
13872
13896
  }
13873
13897
  );
13874
13898
  }
@@ -14685,6 +14709,12 @@ function ContactConsultation({
14685
14709
  }
14686
14710
  );
14687
14711
  }
14712
+ var DEFAULT_STYLE_RULES2 = {
14713
+ formContainer: "",
14714
+ fieldsContainer: "",
14715
+ fieldClassName: "",
14716
+ formClassName: "space-y-6"
14717
+ };
14688
14718
  var DEFAULT_FORM_FIELDS7 = [
14689
14719
  {
14690
14720
  name: "firstName",
@@ -14727,87 +14757,26 @@ function ContactDark({
14727
14757
  contactDescription = "Fill up the form and our team will get back to you within 24 hours.",
14728
14758
  buttonText = "Submit",
14729
14759
  buttonIcon,
14730
- actions,
14731
- actionsSlot,
14732
14760
  contactOptions,
14733
14761
  contactOptionsSlot,
14734
14762
  socialLinks,
14735
14763
  socialLinksSlot,
14736
- formFields = DEFAULT_FORM_FIELDS7,
14737
- successMessage = "Thank you! Your message has been sent successfully.",
14764
+ formEngineSetup,
14738
14765
  className,
14739
14766
  headerClassName,
14740
14767
  headingClassName,
14741
14768
  descriptionClassName,
14742
14769
  cardClassName,
14743
14770
  formPanelClassName,
14744
- formClassName,
14745
- submitClassName,
14746
14771
  infoPanelClassName,
14747
14772
  contactOptionsClassName,
14748
14773
  socialLinksClassName,
14749
- successMessageClassName,
14750
- errorMessageClassName,
14751
14774
  background,
14752
14775
  spacing = "py-8 md:py-32",
14753
14776
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
14754
14777
  pattern,
14755
- patternOpacity,
14756
- formConfig,
14757
- onSubmit,
14758
- onSuccess,
14759
- onError
14778
+ patternOpacity
14760
14779
  }) {
14761
- const {
14762
- uploadTokens,
14763
- uploadProgress,
14764
- isUploading,
14765
- uploadFiles,
14766
- removeFile,
14767
- resetUpload
14768
- } = useFileUpload({ onError });
14769
- const { form, submissionError, formMethod, resetSubmissionState } = useContactForm({
14770
- formFields,
14771
- formConfig,
14772
- onSubmit,
14773
- onSuccess: (data) => {
14774
- resetUpload();
14775
- onSuccess?.(data);
14776
- },
14777
- onError,
14778
- resetOnSuccess: formConfig?.resetOnSuccess !== false,
14779
- uploadTokens
14780
- });
14781
- const actionsContent = React25.useMemo(() => {
14782
- if (actionsSlot) return actionsSlot;
14783
- if (actions && actions.length > 0) {
14784
- return actions.map((action, index) => {
14785
- const {
14786
- label,
14787
- icon,
14788
- iconAfter,
14789
- children,
14790
- className: actionClassName,
14791
- ...pressableProps
14792
- } = action;
14793
- return /* @__PURE__ */ jsx(
14794
- Pressable,
14795
- {
14796
- asButton: true,
14797
- className: actionClassName,
14798
- ...pressableProps,
14799
- children: children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
14800
- icon,
14801
- label,
14802
- iconAfter
14803
- ] })
14804
- },
14805
- index
14806
- );
14807
- });
14808
- }
14809
- return null;
14810
- }, [actionsSlot, actions]);
14811
14780
  const contactOptionsContent = React25.useMemo(() => {
14812
14781
  if (contactOptionsSlot) return contactOptionsSlot;
14813
14782
  if (contactOptions && contactOptions.length > 0) {
@@ -14862,124 +14831,104 @@ function ContactDark({
14862
14831
  patternOpacity,
14863
14832
  className,
14864
14833
  containerClassName,
14865
- children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
14866
- /* @__PURE__ */ jsxs("div", { className: cn("mb-10 text-center", headerClassName), children: [
14867
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
14868
- "h2",
14869
- {
14870
- className: cn(
14871
- "mb-3 text-3xl font-bold tracking-tight text-balance",
14872
- headingClassName
14873
- ),
14874
- children: heading
14875
- }
14876
- ) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
14877
- description && (typeof description === "string" ? /* @__PURE__ */ jsx(
14878
- "p",
14879
- {
14880
- className: cn(
14881
- "leading-relaxed text-balance",
14882
- descriptionClassName
14883
- ),
14884
- children: description
14885
- }
14886
- ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
14887
- ] }),
14888
- /* @__PURE__ */ jsxs(
14889
- Card,
14890
- {
14891
- className: cn(
14892
- "grid gap-0 overflow-hidden grid-cols-1 lg:grid-cols-2 pt-0 pb-0",
14893
- cardClassName
14894
- ),
14895
- children: [
14896
- /* @__PURE__ */ jsx("div", { className: cn("p-6 lg:p-12", formPanelClassName), children: /* @__PURE__ */ jsxs(
14897
- Form,
14898
- {
14899
- form,
14900
- notificationConfig: {
14901
- submissionError,
14902
- successMessage
14903
- },
14904
- styleConfig: {
14905
- formClassName: cn("space-y-6", formClassName),
14906
- successMessageClassName,
14907
- errorMessageClassName
14908
- },
14909
- formConfig: {
14910
- endpoint: formConfig?.endpoint,
14911
- method: formMethod,
14912
- submissionConfig: formConfig?.submissionConfig
14913
- },
14914
- onNewSubmission: () => {
14915
- resetUpload();
14916
- resetSubmissionState();
14917
- },
14918
- children: [
14919
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-12 gap-6", children: formFields.map((field) => /* @__PURE__ */ jsx(
14920
- "div",
14921
- {
14922
- className: getColumnSpanClass(field.columnSpan),
14923
- children: /* @__PURE__ */ jsx(
14924
- DynamicFormField,
14834
+ children: /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs(
14835
+ Card,
14836
+ {
14837
+ className: cn(
14838
+ "grid gap-0 overflow-hidden grid-cols-1 lg:grid-cols-2 pt-0 pb-0",
14839
+ cardClassName
14840
+ ),
14841
+ children: [
14842
+ /* @__PURE__ */ jsx("div", { className: cn("p-6 lg:p-12", formPanelClassName), children: formEngineSetup ? /* @__PURE__ */ jsx(
14843
+ FormEngine,
14844
+ {
14845
+ formEngineSetup: {
14846
+ ...formEngineSetup,
14847
+ formLayoutSettings: {
14848
+ ...formEngineSetup.formLayoutSettings,
14849
+ formLayout: "standard",
14850
+ submitButtonSetup: {
14851
+ ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
14852
+ submitLabel: /* @__PURE__ */ jsxs(Fragment$1, { children: [
14853
+ buttonIcon,
14854
+ buttonText
14855
+ ] })
14856
+ }
14857
+ }
14858
+ },
14859
+ defaultFields: DEFAULT_FORM_FIELDS7,
14860
+ defaultStyleRules: DEFAULT_STYLE_RULES2
14861
+ }
14862
+ ) : null }),
14863
+ /* @__PURE__ */ jsxs(
14864
+ "div",
14865
+ {
14866
+ className: cn(
14867
+ "flex flex-col justify-between bg-primary p-6 text-primary-foreground lg:p-8",
14868
+ infoPanelClassName
14869
+ ),
14870
+ children: [
14871
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(
14872
+ "div",
14873
+ {
14874
+ className: cn(
14875
+ "pb-6 md:pb-8 border-b-2 border-border/50 mb-6 md:mb-8 text-left",
14876
+ headerClassName
14877
+ ),
14878
+ children: [
14879
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
14880
+ "h2",
14881
+ {
14882
+ className: cn(
14883
+ "text-3xl font-bold tracking-tight text-pretty md:text-5xl",
14884
+ headingClassName
14885
+ ),
14886
+ children: heading
14887
+ }
14888
+ ) : heading),
14889
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
14890
+ "p",
14925
14891
  {
14926
- field,
14927
- uploadProgress,
14928
- onFileUpload: uploadFiles,
14929
- onFileRemove: removeFile,
14930
- isUploading
14892
+ className: cn(
14893
+ "leading-relaxed text-balance",
14894
+ descriptionClassName
14895
+ ),
14896
+ children: description
14931
14897
  }
14932
- )
14933
- },
14934
- field.name
14935
- )) }),
14936
- actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxs(
14937
- Pressable,
14938
- {
14939
- componentType: "button",
14940
- type: "submit",
14941
- className: cn("w-full", submitClassName),
14942
- asButton: true,
14943
- disabled: form.isSubmitting,
14944
- children: [
14945
- buttonIcon,
14946
- buttonText
14947
- ]
14948
- }
14949
- )
14950
- ]
14951
- }
14952
- ) }),
14953
- /* @__PURE__ */ jsxs(
14954
- "div",
14955
- {
14956
- className: cn(
14957
- "flex flex-col justify-between bg-primary p-6 text-primary-foreground lg:p-8",
14958
- infoPanelClassName
14959
- ),
14960
- children: [
14961
- /* @__PURE__ */ jsxs("div", { children: [
14962
- contactHeading && (typeof contactHeading === "string" ? /* @__PURE__ */ jsx("h3", { className: "mb-3 text-xl font-semibold", children: contactHeading }) : /* @__PURE__ */ jsx("div", { className: "mb-3", children: contactHeading })),
14963
- contactDescription && (typeof contactDescription === "string" ? /* @__PURE__ */ jsx("p", { className: "mb-8 text-sm text-primary-foreground/80", children: contactDescription }) : /* @__PURE__ */ jsx("div", { className: "mb-8", children: contactDescription })),
14964
- /* @__PURE__ */ jsx("div", { className: cn("space-y-4", contactOptionsClassName), children: contactOptionsContent })
14965
- ] }),
14898
+ ) : description)
14899
+ ]
14900
+ }
14901
+ ) }),
14902
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start gap-4", children: [
14903
+ contactHeading && (typeof contactHeading === "string" ? /* @__PURE__ */ jsx("h3", { className: "text-xl font-semibold", children: contactHeading }) : contactHeading),
14904
+ contactDescription && (typeof contactDescription === "string" ? /* @__PURE__ */ jsx("p", { className: "text-sm text-primary-foreground/80", children: contactDescription }) : contactDescription),
14966
14905
  /* @__PURE__ */ jsx(
14967
14906
  "div",
14968
14907
  {
14969
14908
  className: cn(
14970
- "mt-8 flex items-center gap-4",
14971
- socialLinksClassName
14909
+ "pt-6 md:pt-8 space-y-4",
14910
+ contactOptionsClassName
14972
14911
  ),
14973
- children: socialLinksContent
14912
+ children: contactOptionsContent
14974
14913
  }
14975
14914
  )
14976
- ]
14977
- }
14978
- )
14979
- ]
14980
- }
14981
- )
14982
- ] })
14915
+ ] }),
14916
+ /* @__PURE__ */ jsx(
14917
+ "div",
14918
+ {
14919
+ className: cn(
14920
+ "mt-8 flex items-center gap-4",
14921
+ socialLinksClassName
14922
+ ),
14923
+ children: socialLinksContent
14924
+ }
14925
+ )
14926
+ ]
14927
+ }
14928
+ )
14929
+ ]
14930
+ }
14931
+ ) })
14983
14932
  }
14984
14933
  );
14985
14934
  }
@@ -15328,32 +15277,12 @@ function ContactDemo({
15328
15277
  }
15329
15278
  );
15330
15279
  }
15331
- var DEFAULT_CONTACT_ITEMS = [
15332
- {
15333
- icon: "lucide/phone",
15334
- title: "Critical Hotline",
15335
- subtitle: "+1 (555) 911-0000",
15336
- href: "tel:+15559110000"
15337
- },
15338
- {
15339
- icon: "lucide/mail",
15340
- title: "Email Support",
15341
- subtitle: "emergency@support.com",
15342
- href: "mailto:emergency@support.com"
15343
- },
15344
- {
15345
- icon: "lucide/message-circle",
15346
- title: "Live Chat",
15347
- subtitle: "24/7 Available",
15348
- href: "#chat"
15349
- },
15350
- {
15351
- icon: "lucide/map-pin",
15352
- title: "Visit Us",
15353
- subtitle: "123 Support Lane",
15354
- href: "#location"
15355
- }
15356
- ];
15280
+ var DEFAULT_STYLE_RULES3 = {
15281
+ formContainer: "",
15282
+ fieldsContainer: "",
15283
+ fieldClassName: "",
15284
+ formClassName: "space-y-4"
15285
+ };
15357
15286
  var PRIORITIES = [
15358
15287
  {
15359
15288
  value: "critical",
@@ -15428,281 +15357,182 @@ var DEFAULT_FORM_FIELDS9 = [
15428
15357
  function ContactEmergency({
15429
15358
  heading,
15430
15359
  description,
15431
- contactItems = DEFAULT_CONTACT_ITEMS,
15360
+ contactItems,
15432
15361
  buttonText = "Submit Emergency Request",
15433
15362
  buttonIcon,
15363
+ formEngineSetup,
15364
+ className,
15365
+ headerClassName,
15366
+ headingClassName,
15367
+ descriptionClassName,
15368
+ spacing = "py-16 md:py-32",
15369
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
15370
+ background,
15371
+ pattern,
15372
+ patternOpacity
15373
+ }) {
15374
+ return /* @__PURE__ */ jsx(
15375
+ Section,
15376
+ {
15377
+ background,
15378
+ spacing,
15379
+ pattern,
15380
+ patternOpacity,
15381
+ className,
15382
+ containerClassName,
15383
+ children: /* @__PURE__ */ jsxs("div", { className: "grid md:grid-cols-2 gap-12 md:gap-28", children: [
15384
+ /* @__PURE__ */ jsx("div", { className: "h-full", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start justify-between h-full gap-8 md:gap-12", children: [
15385
+ /* @__PURE__ */ jsxs(
15386
+ "div",
15387
+ {
15388
+ className: cn(
15389
+ "flex flex-col items-start gap-4 text-left",
15390
+ headerClassName
15391
+ ),
15392
+ children: [
15393
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
15394
+ "h2",
15395
+ {
15396
+ className: cn(
15397
+ "text-4xl lg:text-5xl xl:text-6xl font-bold text-pretty",
15398
+ headingClassName
15399
+ ),
15400
+ children: heading
15401
+ }
15402
+ ) : heading),
15403
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
15404
+ "p",
15405
+ {
15406
+ className: cn(
15407
+ "leading-relaxed text-pretty md:text-balance text-lg",
15408
+ descriptionClassName
15409
+ ),
15410
+ children: description
15411
+ }
15412
+ ) : description)
15413
+ ]
15414
+ }
15415
+ ),
15416
+ contactItems && contactItems.length > 0 && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 md:gap-6 w-full", children: contactItems.map((item, index) => /* @__PURE__ */ jsx(
15417
+ Pressable,
15418
+ {
15419
+ href: item.href,
15420
+ className: cn(
15421
+ "rounded-xl border bg-transparent hover:bg-muted ring-2",
15422
+ "px-4 py-4 flex",
15423
+ "justify-start items-start transition-all",
15424
+ "duration-500 hover:text-muted-foreground",
15425
+ item.className
15426
+ ),
15427
+ children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
15428
+ item.icon ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center p-2 rounded-xl border bg-primary text-primary-foreground", children: /* @__PURE__ */ jsx(
15429
+ DynamicIcon,
15430
+ {
15431
+ name: item.icon,
15432
+ size: item.iconSize ?? 24
15433
+ }
15434
+ ) }) : null,
15435
+ /* @__PURE__ */ jsxs("div", { children: [
15436
+ /* @__PURE__ */ jsx("p", { className: "font-bold text-xs uppercase opacity-70", children: item.title }),
15437
+ /* @__PURE__ */ jsx("p", { className: "text-md font-medium", children: item.subtitle })
15438
+ ] })
15439
+ ] })
15440
+ },
15441
+ index
15442
+ )) })
15443
+ ] }) }),
15444
+ /* @__PURE__ */ jsx("div", { className: "p-6", children: formEngineSetup ? /* @__PURE__ */ jsx(
15445
+ FormEngine,
15446
+ {
15447
+ formEngineSetup: {
15448
+ ...formEngineSetup,
15449
+ formLayoutSettings: {
15450
+ ...formEngineSetup.formLayoutSettings,
15451
+ formLayout: "standard",
15452
+ submitButtonSetup: {
15453
+ ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
15454
+ submitLabel: /* @__PURE__ */ jsxs(Fragment$1, { children: [
15455
+ buttonIcon,
15456
+ buttonText
15457
+ ] })
15458
+ }
15459
+ }
15460
+ },
15461
+ defaultFields: DEFAULT_FORM_FIELDS9,
15462
+ defaultStyleRules: DEFAULT_STYLE_RULES3
15463
+ }
15464
+ ) : null })
15465
+ ] })
15466
+ }
15467
+ );
15468
+ }
15469
+ var DEFAULT_FORM_FIELDS10 = [
15470
+ {
15471
+ name: "first_name",
15472
+ type: "text",
15473
+ label: "First Name",
15474
+ placeholder: "John",
15475
+ required: true,
15476
+ columnSpan: 6
15477
+ },
15478
+ {
15479
+ name: "last_name",
15480
+ type: "text",
15481
+ label: "Last Name",
15482
+ placeholder: "Doe",
15483
+ required: true,
15484
+ columnSpan: 6
15485
+ },
15486
+ {
15487
+ name: "email",
15488
+ type: "email",
15489
+ label: "Email",
15490
+ placeholder: "john@example.com",
15491
+ required: true,
15492
+ columnSpan: 12
15493
+ },
15494
+ {
15495
+ name: "phone",
15496
+ type: "tel",
15497
+ label: "Phone",
15498
+ placeholder: "+1 (555) 000-0000",
15499
+ required: true,
15500
+ columnSpan: 12
15501
+ },
15502
+ {
15503
+ name: "message",
15504
+ type: "textarea",
15505
+ label: "Message",
15506
+ placeholder: "Your message...",
15507
+ required: true,
15508
+ rows: 4,
15509
+ columnSpan: 12
15510
+ }
15511
+ ];
15512
+ function ContactEvent({
15513
+ heading,
15514
+ description,
15515
+ buttonText = "Submit",
15516
+ buttonIcon,
15434
15517
  actions,
15435
15518
  actionsSlot,
15436
- formFields = DEFAULT_FORM_FIELDS9,
15437
- successMessage = "Thank you! Your emergency request has been received.",
15519
+ formFields = DEFAULT_FORM_FIELDS10,
15520
+ successMessage = "Thank you! Your message has been sent successfully.",
15438
15521
  className,
15522
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
15439
15523
  headerClassName,
15440
15524
  headingClassName,
15441
15525
  descriptionClassName,
15526
+ cardClassName,
15527
+ cardContentClassName,
15442
15528
  formClassName,
15443
15529
  submitClassName,
15444
15530
  successMessageClassName,
15445
15531
  errorMessageClassName,
15446
- spacing = "py-8 md:py-32",
15447
- containerClassName = "w-full max-w-full relative z-10 px-6 sm:px-6 md:px-8 lg:px-8",
15448
- background,
15532
+ background = "white",
15533
+ spacing = "xl",
15449
15534
  pattern,
15450
- patternOpacity,
15451
- formConfig,
15452
- onSubmit,
15453
- onSuccess,
15454
- onError
15455
- }) {
15456
- const {
15457
- uploadTokens,
15458
- uploadProgress,
15459
- isUploading,
15460
- uploadFiles,
15461
- removeFile,
15462
- resetUpload
15463
- } = useFileUpload({ onError });
15464
- const { form, submissionError, formMethod, resetSubmissionState } = useContactForm({
15465
- formFields,
15466
- formConfig,
15467
- onSubmit,
15468
- onSuccess: (data) => {
15469
- resetUpload();
15470
- onSuccess?.(data);
15471
- },
15472
- onError,
15473
- resetOnSuccess: formConfig?.resetOnSuccess !== false,
15474
- uploadTokens
15475
- });
15476
- const otherFields = formFields.filter((f) => f.name !== "priority");
15477
- const actionsContent = useMemo(() => {
15478
- if (actionsSlot) return actionsSlot;
15479
- if (actions && actions.length > 0) {
15480
- return actions.map((action, index) => {
15481
- const {
15482
- label,
15483
- icon,
15484
- iconAfter,
15485
- children,
15486
- className: actionClassName,
15487
- ...pressableProps
15488
- } = action;
15489
- return /* @__PURE__ */ jsx(
15490
- Pressable,
15491
- {
15492
- asButton: true,
15493
- className: actionClassName,
15494
- ...pressableProps,
15495
- children: children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
15496
- icon,
15497
- label,
15498
- iconAfter
15499
- ] })
15500
- },
15501
- index
15502
- );
15503
- });
15504
- }
15505
- return null;
15506
- }, [actionsSlot, actions]);
15507
- return /* @__PURE__ */ jsx(
15508
- Section,
15509
- {
15510
- background,
15511
- spacing,
15512
- pattern,
15513
- patternOpacity,
15514
- className,
15515
- containerClassName,
15516
- children: /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs(
15517
- Form,
15518
- {
15519
- form,
15520
- notificationConfig: {
15521
- submissionError,
15522
- successMessage
15523
- },
15524
- styleConfig: {
15525
- formClassName,
15526
- successMessageClassName,
15527
- errorMessageClassName
15528
- },
15529
- formConfig: {
15530
- endpoint: formConfig?.endpoint,
15531
- method: formMethod,
15532
- submissionConfig: formConfig?.submissionConfig
15533
- },
15534
- onNewSubmission: () => {
15535
- resetUpload();
15536
- resetSubmissionState();
15537
- },
15538
- children: [
15539
- /* @__PURE__ */ jsx("div", { className: "flex", children: /* @__PURE__ */ jsxs("div", { className: cn("p-0 md:p-12"), children: [
15540
- /* @__PURE__ */ jsx("div", { className: "grid md:grid-cols-2 gap-12 md:gap-24", children: /* @__PURE__ */ jsx("div", { className: "border-b border-border/60 p-6 md:border-b-0 md:border-r md:border-border/60", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col items-start gap-8 md:gap-12", children: /* @__PURE__ */ jsxs(
15541
- "div",
15542
- {
15543
- className: cn(
15544
- "flex flex-col items-start gap-4 text-left",
15545
- headerClassName
15546
- ),
15547
- children: [
15548
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
15549
- "h2",
15550
- {
15551
- className: cn(
15552
- "text-4xl lg:text-5xl xl:text-6xl font-bold",
15553
- headingClassName
15554
- ),
15555
- children: heading
15556
- }
15557
- ) : heading),
15558
- description && (typeof description === "string" ? /* @__PURE__ */ jsx(
15559
- "p",
15560
- {
15561
- className: cn(
15562
- "leading-relaxed",
15563
- descriptionClassName
15564
- ),
15565
- children: description
15566
- }
15567
- ) : description)
15568
- ]
15569
- }
15570
- ) }) }) }),
15571
- contactItems && contactItems.length > 0 && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 md:gap-6 w-full", children: contactItems.map((item, index) => /* @__PURE__ */ jsx(
15572
- Pressable,
15573
- {
15574
- href: item.href,
15575
- className: cn(
15576
- "rounded-md border bg-muted ring-2",
15577
- "text-muted-foreground px-4 py-3 flex",
15578
- "justify-start items-start transition-shadow",
15579
- "duration-500 hover:shadow-xl",
15580
- item.className
15581
- ),
15582
- children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
15583
- item.icon ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center p-2 rounded-xl border bg-primary text-primary-foreground", children: /* @__PURE__ */ jsx(
15584
- DynamicIcon,
15585
- {
15586
- name: item.icon,
15587
- size: item.iconSize ?? 24
15588
- }
15589
- ) }) : null,
15590
- /* @__PURE__ */ jsxs("div", { children: [
15591
- /* @__PURE__ */ jsx("p", { className: "font-bold text-xs uppercase opacity-70", children: item.title }),
15592
- /* @__PURE__ */ jsx("p", { className: "text-md font-semibold", children: item.subtitle })
15593
- ] })
15594
- ] })
15595
- },
15596
- index
15597
- )) })
15598
- ] }) }),
15599
- /* @__PURE__ */ jsx("div", { className: "p-6", children: /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
15600
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-12 gap-4", children: otherFields.map((field) => /* @__PURE__ */ jsx(
15601
- "div",
15602
- {
15603
- className: getColumnSpanClass(field.columnSpan),
15604
- children: /* @__PURE__ */ jsx(
15605
- DynamicFormField,
15606
- {
15607
- field,
15608
- uploadProgress,
15609
- onFileUpload: uploadFiles,
15610
- onFileRemove: removeFile,
15611
- isUploading
15612
- }
15613
- )
15614
- },
15615
- field.name
15616
- )) }),
15617
- actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxs(
15618
- Pressable,
15619
- {
15620
- componentType: "button",
15621
- type: "submit",
15622
- className: cn("w-full", submitClassName),
15623
- size: "lg",
15624
- asButton: true,
15625
- disabled: form.isSubmitting,
15626
- children: [
15627
- buttonIcon,
15628
- buttonText
15629
- ]
15630
- }
15631
- )
15632
- ] }) })
15633
- ]
15634
- }
15635
- ) })
15636
- }
15637
- );
15638
- }
15639
- var DEFAULT_FORM_FIELDS10 = [
15640
- {
15641
- name: "first_name",
15642
- type: "text",
15643
- label: "First Name",
15644
- placeholder: "John",
15645
- required: true,
15646
- columnSpan: 6
15647
- },
15648
- {
15649
- name: "last_name",
15650
- type: "text",
15651
- label: "Last Name",
15652
- placeholder: "Doe",
15653
- required: true,
15654
- columnSpan: 6
15655
- },
15656
- {
15657
- name: "email",
15658
- type: "email",
15659
- label: "Email",
15660
- placeholder: "john@example.com",
15661
- required: true,
15662
- columnSpan: 12
15663
- },
15664
- {
15665
- name: "phone",
15666
- type: "tel",
15667
- label: "Phone",
15668
- placeholder: "+1 (555) 000-0000",
15669
- required: true,
15670
- columnSpan: 12
15671
- },
15672
- {
15673
- name: "message",
15674
- type: "textarea",
15675
- label: "Message",
15676
- placeholder: "Your message...",
15677
- required: true,
15678
- rows: 4,
15679
- columnSpan: 12
15680
- }
15681
- ];
15682
- function ContactEvent({
15683
- heading,
15684
- description,
15685
- buttonText = "Submit",
15686
- buttonIcon,
15687
- actions,
15688
- actionsSlot,
15689
- formFields = DEFAULT_FORM_FIELDS10,
15690
- successMessage = "Thank you! Your message has been sent successfully.",
15691
- className,
15692
- containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
15693
- headerClassName,
15694
- headingClassName,
15695
- descriptionClassName,
15696
- cardClassName,
15697
- cardContentClassName,
15698
- formClassName,
15699
- submitClassName,
15700
- successMessageClassName,
15701
- errorMessageClassName,
15702
- background = "white",
15703
- spacing = "xl",
15704
- pattern,
15705
- patternOpacity = 0.1,
15535
+ patternOpacity = 0.1,
15706
15536
  formConfig,
15707
15537
  onSubmit,
15708
15538
  onSuccess,
@@ -15912,7 +15742,7 @@ function AccordionContent({
15912
15742
  }
15913
15743
  );
15914
15744
  }
15915
- var DEFAULT_STYLE_RULES = {
15745
+ var DEFAULT_STYLE_RULES4 = {
15916
15746
  formContainer: "",
15917
15747
  fieldsContainer: "",
15918
15748
  fieldClassName: "",
@@ -15983,23 +15813,6 @@ function ContactFaq({
15983
15813
  pattern,
15984
15814
  patternOpacity
15985
15815
  }) {
15986
- const formStyleRules = React25.useMemo(() => {
15987
- return {
15988
- formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES.formContainer,
15989
- fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES.fieldsContainer,
15990
- fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES.fieldClassName,
15991
- formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES.formClassName,
15992
- successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES.successMessageClassName,
15993
- errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES.errorMessageClassName
15994
- };
15995
- }, [formEngineSetup?.formLayoutSettings?.styleRules]);
15996
- const formFields = React25.useMemo(() => {
15997
- if (formEngineSetup && formEngineSetup?.fields && formEngineSetup?.fields?.length > 0) {
15998
- return formEngineSetup.fields;
15999
- } else {
16000
- return DEFAULT_FORM_FIELDS11;
16001
- }
16002
- }, [formEngineSetup?.fields]);
16003
15816
  const hasFaqItems = itemsSlot || items && items.length > 0;
16004
15817
  const faqContent = useMemo(() => {
16005
15818
  if (itemsSlot) return itemsSlot;
@@ -16093,24 +15906,26 @@ function ContactFaq({
16093
15906
  ),
16094
15907
  children: formHeading
16095
15908
  }
16096
- ) : /* @__PURE__ */ jsx("div", { className: formHeadingClassName, children: formHeading })),
15909
+ ) : formHeading),
16097
15910
  formEngineSetup ? /* @__PURE__ */ jsx(
16098
15911
  FormEngine,
16099
15912
  {
16100
- ...formEngineSetup,
16101
- formLayoutSettings: {
16102
- ...formEngineSetup.formLayoutSettings,
16103
- formLayout: "standard",
16104
- submitButtonSetup: {
16105
- ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
16106
- submitLabel: /* @__PURE__ */ jsxs(Fragment$1, { children: [
16107
- buttonIcon,
16108
- buttonText
16109
- ] })
16110
- },
16111
- styleRules: formStyleRules
15913
+ formEngineSetup: {
15914
+ ...formEngineSetup,
15915
+ formLayoutSettings: {
15916
+ ...formEngineSetup.formLayoutSettings,
15917
+ formLayout: "standard",
15918
+ submitButtonSetup: {
15919
+ ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
15920
+ submitLabel: /* @__PURE__ */ jsxs(Fragment$1, { children: [
15921
+ buttonIcon,
15922
+ buttonText
15923
+ ] })
15924
+ }
15925
+ }
16112
15926
  },
16113
- fields: formFields
15927
+ defaultFields: DEFAULT_FORM_FIELDS11,
15928
+ defaultStyleRules: DEFAULT_STYLE_RULES4
16114
15929
  }
16115
15930
  ) : null
16116
15931
  ] }) }),
@@ -16782,6 +16597,12 @@ function ContactGuest({
16782
16597
  }
16783
16598
  );
16784
16599
  }
16600
+ var DEFAULT_STYLE_RULES5 = {
16601
+ formContainer: "",
16602
+ fieldsContainer: "",
16603
+ fieldClassName: "",
16604
+ formClassName: "space-y-4"
16605
+ };
16785
16606
  var DEFAULT_FORM_FIELDS15 = [
16786
16607
  {
16787
16608
  name: "first_name",
@@ -16826,207 +16647,172 @@ var DEFAULT_FORM_FIELDS15 = [
16826
16647
  }
16827
16648
  ];
16828
16649
  function ContactImage({
16650
+ eyebrow,
16829
16651
  heading,
16830
16652
  description,
16831
- buttonText = "Submit",
16653
+ buttonText = "Send Message",
16832
16654
  buttonIcon,
16833
- actions,
16834
- actionsSlot,
16835
- formFields = DEFAULT_FORM_FIELDS15,
16836
- successMessage = "Thank you! Your message has been sent successfully.",
16655
+ image,
16656
+ contactOverlays,
16657
+ contactOverlaysSlot,
16658
+ formEngineSetup,
16659
+ className,
16660
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
16661
+ contentClassName,
16662
+ eyebrowClassName,
16837
16663
  headingClassName,
16838
16664
  descriptionClassName,
16839
- cardClassName,
16840
- cardContentClassName,
16841
- formClassName,
16842
- submitClassName,
16843
- successMessageClassName,
16844
- errorMessageClassName,
16845
- backgroundImage,
16665
+ imageClassName,
16666
+ contactOverlaysClassName,
16846
16667
  background,
16847
- optixFlowConfig,
16848
- spacing = "none",
16849
- className,
16850
- containerClassName = "px-0 sm:px-0 lg:px-0 max-w-full relative z-10 h-screen w-screen flex justify-center items-center",
16851
- contentClassName = "",
16668
+ spacing = "py-16 md:py-32",
16852
16669
  pattern,
16853
- patternOpacity = 0.1,
16854
- formConfig,
16855
- onSubmit,
16856
- onSuccess,
16857
- onError
16670
+ patternOpacity,
16671
+ optixFlowConfig
16858
16672
  }) {
16859
- const {
16860
- uploadTokens,
16861
- uploadProgress,
16862
- isUploading,
16863
- uploadFiles,
16864
- removeFile,
16865
- resetUpload
16866
- } = useFileUpload({ onError });
16867
- const { form, submissionError, formMethod, resetSubmissionState } = useContactForm({
16868
- formFields,
16869
- formConfig,
16870
- onSubmit,
16871
- onSuccess: (data) => {
16872
- resetUpload();
16873
- onSuccess?.(data);
16874
- },
16875
- onError,
16876
- resetOnSuccess: formConfig?.resetOnSuccess !== false,
16877
- uploadTokens
16878
- });
16879
- const actionsContent = useMemo(() => {
16880
- if (actionsSlot) return actionsSlot;
16881
- if (actions && actions.length > 0) {
16882
- return actions.map((action, index) => {
16883
- const {
16884
- label,
16885
- icon,
16886
- iconAfter,
16887
- children,
16888
- className: actionClassName,
16889
- ...pressableProps
16890
- } = action;
16673
+ const contactOverlaysContent = React25.useMemo(() => {
16674
+ if (contactOverlaysSlot) return contactOverlaysSlot;
16675
+ if (!contactOverlays || contactOverlays.length === 0) return null;
16676
+ return /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-3", contactOverlaysClassName), children: contactOverlays.map((item, index) => {
16677
+ const content = /* @__PURE__ */ jsxs(
16678
+ "div",
16679
+ {
16680
+ className: cn(
16681
+ "rounded-2xl border border-white/10 bg-foreground/80 p-4 backdrop-blur-sm",
16682
+ item.className
16683
+ ),
16684
+ children: [
16685
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
16686
+ /* @__PURE__ */ jsx("div", { className: "flex size-fit p-2 items-center justify-center rounded-full bg-primary text-primary-foreground", children: /* @__PURE__ */ jsx(DynamicIcon, { name: item.icon, size: 18 }) }),
16687
+ /* @__PURE__ */ jsxs("div", { children: [
16688
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-bold uppercase tracking-[0.15em] text-background/70", children: item.label }),
16689
+ /* @__PURE__ */ jsx("p", { className: "font-semibold text-background", children: item.title })
16690
+ ] })
16691
+ ] }),
16692
+ item.description && /* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-background/80", children: item.description })
16693
+ ]
16694
+ }
16695
+ );
16696
+ if (item.href) {
16891
16697
  return /* @__PURE__ */ jsx(
16892
- Pressable,
16698
+ "a",
16893
16699
  {
16894
- asButton: true,
16895
- className: actionClassName,
16896
- ...pressableProps,
16897
- children: children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
16898
- icon,
16899
- label,
16900
- iconAfter
16901
- ] })
16700
+ href: item.href,
16701
+ className: "block transition-transform hover:scale-[1.02]",
16702
+ children: content
16902
16703
  },
16903
16704
  index
16904
16705
  );
16905
- });
16906
- }
16907
- return null;
16908
- }, [actionsSlot, actions]);
16909
- const renderBackground = useMemo(() => {
16910
- if (!backgroundImage) return null;
16911
- return /* @__PURE__ */ jsxs("div", { className: "absolute inset-0", children: [
16912
- /* @__PURE__ */ jsx(
16913
- Img,
16914
- {
16915
- src: backgroundImage,
16916
- alt: "Full screen background image",
16917
- className: "h-full w-full object-cover",
16918
- loading: "eager",
16919
- optixFlowConfig
16920
- }
16921
- ),
16922
- /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-linear-to-b from-black/80 via-black/65 to-black/20" })
16923
- ] });
16924
- }, [backgroundImage, optixFlowConfig]);
16925
- return /* @__PURE__ */ jsxs(
16706
+ }
16707
+ return /* @__PURE__ */ jsx("div", { children: content }, index);
16708
+ }) });
16709
+ }, [contactOverlaysSlot, contactOverlays, contactOverlaysClassName]);
16710
+ return /* @__PURE__ */ jsx(
16926
16711
  Section,
16927
16712
  {
16928
16713
  background,
16929
16714
  spacing,
16715
+ className,
16716
+ containerClassName,
16930
16717
  pattern,
16931
16718
  patternOpacity,
16932
- className: cn(
16933
- "relative flex h-full min-h-screen w-screen items-center justify-center overflow-hidden bg-black pb-0 pt-0 md:pt-0 px-0",
16934
- className
16935
- ),
16936
- containerClassName,
16937
- children: [
16938
- renderBackground,
16939
- /* @__PURE__ */ jsx(
16940
- "div",
16941
- {
16942
- className: cn(
16943
- "flex flex-col gap-4 md:gap-6 px-6 pt-28 pb-6 md:pt-0 md:pb-0",
16944
- "relative z-30 m-auto max-w-full md:max-w-md flex-col items-center justify-center text-center",
16945
- contentClassName
16946
- ),
16947
- children: /* @__PURE__ */ jsx(Card, { className: cn("mx-auto max-w-xl", cardClassName), children: /* @__PURE__ */ jsxs(CardContent, { className: cn("p-6 lg:p-8", cardContentClassName), children: [
16948
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
16949
- "h2",
16950
- {
16951
- className: cn(
16952
- "text-5xl md:text-6xl lg:text-7xl text-card-foreground text-shadow-2xl font-semibold",
16953
- headingClassName
16954
- ),
16955
- children: heading
16956
- }
16957
- ) : heading),
16958
- description && (typeof description === "string" ? /* @__PURE__ */ jsx(
16959
- "p",
16960
- {
16961
- className: cn(
16962
- "text-center text-base text-balance text-card-foreground text-shadow-2xl",
16963
- descriptionClassName
16719
+ children: /* @__PURE__ */ jsxs(
16720
+ "div",
16721
+ {
16722
+ className: cn(
16723
+ "grid grid-cols-1 items-center gap-12 lg:grid-cols-2",
16724
+ contentClassName
16725
+ ),
16726
+ children: [
16727
+ image && /* @__PURE__ */ jsx(
16728
+ motion.div,
16729
+ {
16730
+ initial: { opacity: 0, x: -20 },
16731
+ whileInView: { opacity: 1, x: 0 },
16732
+ viewport: { once: true, margin: "-50px" },
16733
+ transition: { duration: 0.5 },
16734
+ className: "order-2 lg:order-1",
16735
+ children: /* @__PURE__ */ jsxs("div", { className: "relative overflow-hidden rounded-3xl border border-white/10 shadow-2xl", children: [
16736
+ /* @__PURE__ */ jsx(
16737
+ Img,
16738
+ {
16739
+ src: image.src,
16740
+ alt: image.alt,
16741
+ className: cn("h-full w-full object-cover", imageClassName),
16742
+ optixFlowConfig
16743
+ }
16964
16744
  ),
16965
- children: description
16966
- }
16967
- ) : description),
16968
- /* @__PURE__ */ jsxs(
16969
- Form,
16970
- {
16971
- form,
16972
- notificationConfig: {
16973
- submissionError,
16974
- successMessage
16975
- },
16976
- styleConfig: {
16977
- formClassName: cn("space-y-4", formClassName),
16978
- successMessageClassName,
16979
- errorMessageClassName
16980
- },
16981
- formConfig: {
16982
- endpoint: formConfig?.endpoint,
16983
- method: formMethod,
16984
- submissionConfig: formConfig?.submissionConfig
16985
- },
16986
- onNewSubmission: () => {
16987
- resetUpload();
16988
- resetSubmissionState();
16989
- },
16990
- children: [
16991
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-12 gap-6", children: formFields.map((field) => /* @__PURE__ */ jsx(
16992
- "div",
16993
- {
16994
- className: getColumnSpanClass(field.columnSpan),
16995
- children: /* @__PURE__ */ jsx(
16996
- DynamicFormField,
16997
- {
16998
- field,
16999
- uploadProgress,
17000
- onFileUpload: uploadFiles,
17001
- onFileRemove: removeFile,
17002
- isUploading
16745
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-linear-to-tr from-black/70 via-transparent to-transparent" }),
16746
+ contactOverlaysContent && /* @__PURE__ */ jsx("div", { className: "absolute bottom-6 left-6 right-6", children: contactOverlaysContent })
16747
+ ] })
16748
+ }
16749
+ ),
16750
+ /* @__PURE__ */ jsxs(
16751
+ motion.div,
16752
+ {
16753
+ initial: { opacity: 0, x: 20 },
16754
+ whileInView: { opacity: 1, x: 0 },
16755
+ viewport: { once: true, margin: "-50px" },
16756
+ transition: { duration: 0.5 },
16757
+ className: "order-1 lg:order-2",
16758
+ children: [
16759
+ eyebrow && (typeof eyebrow === "string" ? /* @__PURE__ */ jsx(
16760
+ "p",
16761
+ {
16762
+ className: cn(
16763
+ "text-sm font-semibold uppercase tracking-[0.2em] text-muted-foreground",
16764
+ eyebrowClassName
16765
+ ),
16766
+ children: eyebrow
16767
+ }
16768
+ ) : /* @__PURE__ */ jsx("div", { className: eyebrowClassName, children: eyebrow })),
16769
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
16770
+ "h2",
16771
+ {
16772
+ className: cn(
16773
+ "mt-2 text-3xl font-bold md:text-4xl lg:text-5xl",
16774
+ headingClassName
16775
+ ),
16776
+ children: heading
16777
+ }
16778
+ ) : /* @__PURE__ */ jsx("div", { className: cn("mt-2", headingClassName), children: heading })),
16779
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
16780
+ "p",
16781
+ {
16782
+ className: cn(
16783
+ "mt-4 text-lg text-muted-foreground",
16784
+ descriptionClassName
16785
+ ),
16786
+ children: description
16787
+ }
16788
+ ) : /* @__PURE__ */ jsx("div", { className: cn("mt-4", descriptionClassName), children: description })),
16789
+ /* @__PURE__ */ jsx("div", { className: "mt-8", children: formEngineSetup ? /* @__PURE__ */ jsx(
16790
+ FormEngine,
16791
+ {
16792
+ formEngineSetup: {
16793
+ ...formEngineSetup,
16794
+ formLayoutSettings: {
16795
+ ...formEngineSetup.formLayoutSettings,
16796
+ formLayout: "standard",
16797
+ submitButtonSetup: {
16798
+ ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
16799
+ submitLabel: /* @__PURE__ */ jsxs(Fragment$1, { children: [
16800
+ buttonIcon,
16801
+ buttonText
16802
+ ] })
17003
16803
  }
17004
- )
16804
+ }
17005
16805
  },
17006
- field.name
17007
- )) }),
17008
- actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxs(
17009
- Pressable,
17010
- {
17011
- componentType: "button",
17012
- type: "submit",
17013
- className: cn("w-full", submitClassName),
17014
- size: "lg",
17015
- asButton: true,
17016
- disabled: form.isSubmitting,
17017
- children: [
17018
- buttonIcon,
17019
- buttonText
17020
- ]
17021
- }
17022
- )
17023
- ]
17024
- }
17025
- )
17026
- ] }) })
17027
- }
17028
- )
17029
- ]
16806
+ defaultFields: DEFAULT_FORM_FIELDS15,
16807
+ defaultStyleRules: DEFAULT_STYLE_RULES5
16808
+ }
16809
+ ) : null })
16810
+ ]
16811
+ }
16812
+ )
16813
+ ]
16814
+ }
16815
+ )
17030
16816
  }
17031
16817
  );
17032
16818
  }
@@ -21807,7 +21593,7 @@ function ContactTenant({
21807
21593
  }
21808
21594
  );
21809
21595
  }
21810
- var DEFAULT_STYLE_RULES2 = {
21596
+ var DEFAULT_STYLE_RULES6 = {
21811
21597
  formContainer: "",
21812
21598
  fieldsContainer: "",
21813
21599
  fieldClassName: "",
@@ -21872,23 +21658,6 @@ function ContactVendor({
21872
21658
  pattern,
21873
21659
  patternOpacity = 0.1
21874
21660
  }) {
21875
- const formStyleRules = React25.useMemo(() => {
21876
- return {
21877
- formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES2.formContainer,
21878
- fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES2.fieldsContainer,
21879
- fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES2.fieldClassName,
21880
- formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES2.formClassName,
21881
- successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES2.successMessageClassName,
21882
- errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES2.errorMessageClassName
21883
- };
21884
- }, [formEngineSetup?.formLayoutSettings?.styleRules]);
21885
- const formFields = React25.useMemo(() => {
21886
- if (formEngineSetup && formEngineSetup?.fields && formEngineSetup?.fields?.length > 0) {
21887
- return formEngineSetup.fields;
21888
- } else {
21889
- return DEFAULT_FORM_FIELDS38;
21890
- }
21891
- }, [formEngineSetup?.fields]);
21892
21661
  return /* @__PURE__ */ jsx(
21893
21662
  Section,
21894
21663
  {
@@ -21924,12 +21693,9 @@ function ContactVendor({
21924
21693
  /* @__PURE__ */ jsx(Card, { className: cn("mx-auto max-w-xl", cardClassName), children: /* @__PURE__ */ jsx(CardContent, { className: cn("p-6 lg:p-8", cardContentClassName), children: formEngineSetup ? /* @__PURE__ */ jsx(
21925
21694
  FormEngine,
21926
21695
  {
21927
- ...formEngineSetup,
21928
- formLayoutSettings: {
21929
- ...formEngineSetup.formLayoutSettings,
21930
- styleRules: formStyleRules
21931
- },
21932
- fields: formFields
21696
+ formEngineSetup,
21697
+ defaultFields: DEFAULT_FORM_FIELDS38,
21698
+ defaultStyleRules: DEFAULT_STYLE_RULES6
21933
21699
  }
21934
21700
  ) : null }) })
21935
21701
  ] })
@@ -31264,61 +31030,49 @@ function TeamSocialGrid({
31264
31030
  }
31265
31031
  ),
31266
31032
  /* @__PURE__ */ jsx("p", { className: cn("text-center font-medium", memberNameClassName), children: member.name }),
31267
- /* @__PURE__ */ jsx(
31268
- "p",
31269
- {
31270
- className: cn(
31271
- "text-center",
31272
- getTextColor(background, "muted"),
31273
- memberRoleClassName
31274
- ),
31275
- children: member.role
31276
- }
31277
- ),
31278
- member.social && /* @__PURE__ */ jsxs(
31279
- "div",
31280
- {
31281
- className: cn(
31282
- "mt-2 flex gap-2",
31283
- getTextColor(background, "muted"),
31284
- socialLinksClassName
31285
- ),
31286
- children: [
31287
- member.social.github && /* @__PURE__ */ jsx(
31288
- Pressable,
31289
- {
31290
- href: member.social.github,
31291
- className: "transition-colors",
31292
- "aria-label": `${member.name}'s GitHub`,
31293
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/github", size: 20 })
31294
- }
31295
- ),
31296
- member.social.twitter && /* @__PURE__ */ jsx(
31297
- Pressable,
31298
- {
31299
- href: member.social.twitter,
31300
- className: "transition-colors",
31301
- "aria-label": `${member.name}'s Twitter`,
31302
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/twitter", size: 20 })
31303
- }
31304
- ),
31305
- member.social.linkedin && /* @__PURE__ */ jsx(
31306
- Pressable,
31307
- {
31308
- href: member.social.linkedin,
31309
- className: "transition-colors",
31310
- "aria-label": `${member.name}'s LinkedIn`,
31311
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/linkedin", size: 20 })
31312
- }
31313
- )
31314
- ]
31315
- }
31316
- )
31033
+ /* @__PURE__ */ jsx("p", { className: cn("text-center", memberRoleClassName), children: member.role }),
31034
+ member.social && /* @__PURE__ */ jsxs("div", { className: cn("mt-2 flex gap-2", socialLinksClassName), children: [
31035
+ member.social.github && /* @__PURE__ */ jsx(
31036
+ Pressable,
31037
+ {
31038
+ href: member.social.github,
31039
+ className: "transition-colors",
31040
+ "aria-label": `${member.name}'s GitHub`,
31041
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/github", size: 20 })
31042
+ }
31043
+ ),
31044
+ member.social.twitter && /* @__PURE__ */ jsx(
31045
+ Pressable,
31046
+ {
31047
+ href: member.social.twitter,
31048
+ className: "transition-colors",
31049
+ "aria-label": `${member.name}'s Twitter`,
31050
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/twitter", size: 20 })
31051
+ }
31052
+ ),
31053
+ member.social.linkedin && /* @__PURE__ */ jsx(
31054
+ Pressable,
31055
+ {
31056
+ href: member.social.linkedin,
31057
+ className: "transition-colors",
31058
+ "aria-label": `${member.name}'s LinkedIn`,
31059
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/linkedin", size: 20 })
31060
+ }
31061
+ )
31062
+ ] })
31317
31063
  ]
31318
31064
  },
31319
31065
  member.id
31320
31066
  ));
31321
- }, [membersSlot, members, memberCardClassName, avatarClassName, memberNameClassName, memberRoleClassName, socialLinksClassName]);
31067
+ }, [
31068
+ membersSlot,
31069
+ members,
31070
+ memberCardClassName,
31071
+ avatarClassName,
31072
+ memberNameClassName,
31073
+ memberRoleClassName,
31074
+ socialLinksClassName
31075
+ ]);
31322
31076
  return /* @__PURE__ */ jsxs(
31323
31077
  Section,
31324
31078
  {
@@ -31349,11 +31103,7 @@ function TeamSocialGrid({
31349
31103
  description && (typeof description === "string" ? /* @__PURE__ */ jsx(
31350
31104
  "p",
31351
31105
  {
31352
- className: cn(
31353
- "mb-8 max-w-3xl lg:text-xl",
31354
- getTextColor(background, "muted"),
31355
- descriptionClassName
31356
- ),
31106
+ className: cn("mb-8 max-w-3xl lg:text-xl", descriptionClassName),
31357
31107
  children: description
31358
31108
  }
31359
31109
  ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
@@ -51328,7 +51078,7 @@ function HeroImageLeftContent({
51328
51078
  }
51329
51079
  );
51330
51080
  }
51331
- var DEFAULT_STYLE_RULES3 = {
51081
+ var DEFAULT_STYLE_RULES7 = {
51332
51082
  formContainer: "",
51333
51083
  fieldsContainer: "",
51334
51084
  fieldClassName: "",
@@ -51399,23 +51149,6 @@ function HeroImageSlider({
51399
51149
  privacyNoticeClassName,
51400
51150
  gridClassName
51401
51151
  }) {
51402
- const formStyleRules = React25.useMemo(() => {
51403
- return {
51404
- formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES3.formContainer,
51405
- fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES3.fieldsContainer,
51406
- fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES3.fieldClassName,
51407
- formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES3.formClassName,
51408
- successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES3.successMessageClassName,
51409
- errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES3.errorMessageClassName
51410
- };
51411
- }, [formEngineSetup?.formLayoutSettings?.styleRules]);
51412
- const formFields = React25.useMemo(() => {
51413
- if (formEngineSetup && formEngineSetup?.fields && formEngineSetup?.fields?.length > 0) {
51414
- return formEngineSetup.fields;
51415
- } else {
51416
- return DEFAULT_FORM_FIELDS42;
51417
- }
51418
- }, [formEngineSetup?.fields]);
51419
51152
  const renderActions = useMemo(() => {
51420
51153
  if (actionsSlot) return actionsSlot;
51421
51154
  if (!actions || actions.length === 0) return null;
@@ -51574,20 +51307,22 @@ function HeroImageSlider({
51574
51307
  /* @__PURE__ */ jsx(
51575
51308
  FormEngine,
51576
51309
  {
51577
- ...formEngineSetup,
51578
- formLayoutSettings: {
51579
- ...formEngineSetup?.formLayoutSettings,
51580
- formLayout: "standard",
51581
- submitButtonSetup: {
51582
- ...formEngineSetup?.formLayoutSettings?.submitButtonSetup,
51583
- submitLabel: /* @__PURE__ */ jsxs(Fragment$1, { children: [
51584
- buttonIcon,
51585
- buttonText
51586
- ] })
51587
- },
51588
- styleRules: formStyleRules
51310
+ formEngineSetup: {
51311
+ ...formEngineSetup,
51312
+ formLayoutSettings: {
51313
+ ...formEngineSetup?.formLayoutSettings,
51314
+ formLayout: "standard",
51315
+ submitButtonSetup: {
51316
+ ...formEngineSetup?.formLayoutSettings?.submitButtonSetup,
51317
+ submitLabel: /* @__PURE__ */ jsxs(Fragment$1, { children: [
51318
+ buttonIcon,
51319
+ buttonText
51320
+ ] })
51321
+ }
51322
+ }
51589
51323
  },
51590
- fields: formFields
51324
+ defaultFields: DEFAULT_FORM_FIELDS42,
51325
+ defaultStyleRules: DEFAULT_STYLE_RULES7
51591
51326
  }
51592
51327
  ),
51593
51328
  privacyNotice && /* @__PURE__ */ jsx(
@@ -61426,7 +61161,7 @@ function HeroPricingComparison({
61426
61161
  }
61427
61162
  );
61428
61163
  }
61429
- var DEFAULT_STYLE_RULES4 = {
61164
+ var DEFAULT_STYLE_RULES8 = {
61430
61165
  formContainer: "mt-10 flex justify-center items-center w-full max-w-md flex-col gap-4 sm:flex-row",
61431
61166
  fieldsContainer: "",
61432
61167
  fieldClassName: "",
@@ -61464,23 +61199,6 @@ function HeroNewsletterMinimal({
61464
61199
  disclaimerClassName,
61465
61200
  statsClassName
61466
61201
  }) {
61467
- const formStyleRules = React25.useMemo(() => {
61468
- return {
61469
- formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES4.formContainer,
61470
- fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES4.fieldsContainer,
61471
- fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES4.fieldClassName,
61472
- formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES4.formClassName,
61473
- successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES4.successMessageClassName,
61474
- errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES4.errorMessageClassName
61475
- };
61476
- }, [formEngineSetup?.formLayoutSettings?.styleRules]);
61477
- const formFields = React25.useMemo(() => {
61478
- if (formEngineSetup && formEngineSetup?.fields && formEngineSetup?.fields?.length > 0) {
61479
- return formEngineSetup.fields;
61480
- } else {
61481
- return DEFAULT_FORM_FIELDS45;
61482
- }
61483
- }, [formEngineSetup?.fields]);
61484
61202
  const renderStats = React25.useMemo(() => {
61485
61203
  if (statsSlot) return statsSlot;
61486
61204
  if (!stats || stats.length === 0) return null;
@@ -61519,22 +61237,24 @@ function HeroNewsletterMinimal({
61519
61237
  /* @__PURE__ */ jsx(
61520
61238
  FormEngine,
61521
61239
  {
61522
- ...formEngineSetup,
61523
- formLayoutSettings: {
61524
- ...formEngineSetup.formLayoutSettings,
61525
- formLayout: "button-group",
61526
- buttonGroupSetup: {
61527
- ...formEngineSetup.formLayoutSettings?.buttonGroupSetup,
61528
- size: "lg",
61529
- submitLabel: /* @__PURE__ */ jsxs(Fragment$1, { children: [
61530
- action.label,
61531
- action.iconAfter
61532
- ] }),
61533
- submitVariant: action.variant || "default"
61534
- },
61535
- styleRules: formStyleRules
61240
+ formEngineSetup: {
61241
+ ...formEngineSetup,
61242
+ formLayoutSettings: {
61243
+ ...formEngineSetup.formLayoutSettings,
61244
+ formLayout: "button-group",
61245
+ buttonGroupSetup: {
61246
+ ...formEngineSetup.formLayoutSettings?.buttonGroupSetup,
61247
+ size: "lg",
61248
+ submitLabel: /* @__PURE__ */ jsxs(Fragment$1, { children: [
61249
+ action.label,
61250
+ action.iconAfter
61251
+ ] }),
61252
+ submitVariant: action.variant || "default"
61253
+ }
61254
+ }
61536
61255
  },
61537
- fields: formFields
61256
+ defaultFields: DEFAULT_FORM_FIELDS45,
61257
+ defaultStyleRules: DEFAULT_STYLE_RULES8
61538
61258
  }
61539
61259
  ),
61540
61260
  helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm mt-2 text-center"), children: helperText }) : helperText)
@@ -61543,8 +61263,6 @@ function HeroNewsletterMinimal({
61543
61263
  formSlot,
61544
61264
  formEngineSetup,
61545
61265
  buttonAction,
61546
- formFields,
61547
- formStyleRules,
61548
61266
  helperText
61549
61267
  ]);
61550
61268
  return /* @__PURE__ */ jsx(
@@ -85478,7 +85196,7 @@ function ListSearchableGrid({
85478
85196
  }
85479
85197
  );
85480
85198
  }
85481
- var { useMemo: useMemo445 } = React25;
85199
+ var { useMemo: useMemo441 } = React25;
85482
85200
  function OfferModalNewsletterDiscount({
85483
85201
  title,
85484
85202
  emailPlaceholder,
@@ -85546,7 +85264,7 @@ function OfferModalNewsletterDiscount({
85546
85264
  });
85547
85265
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
85548
85266
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
85549
- const renderCloseButton = useMemo445(() => {
85267
+ const renderCloseButton = useMemo441(() => {
85550
85268
  if (closeButtonSlot) return closeButtonSlot;
85551
85269
  if (!closeButtonText) return null;
85552
85270
  return /* @__PURE__ */ jsx("div", { className: "absolute end-1.5 top-1.5", children: /* @__PURE__ */ jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsx(
@@ -85560,12 +85278,12 @@ function OfferModalNewsletterDiscount({
85560
85278
  }
85561
85279
  ) }) });
85562
85280
  }, [closeButtonSlot, closeButtonText, closeClassName]);
85563
- const renderHeader = useMemo445(() => {
85281
+ const renderHeader = useMemo441(() => {
85564
85282
  if (headerSlot) return headerSlot;
85565
85283
  if (!title) return null;
85566
85284
  return /* @__PURE__ */ jsx(DialogHeader, { className: headerClassName, children: typeof title === "string" ? /* @__PURE__ */ jsx(DialogTitle, { className: cn("text-start font-serif text-2xl font-normal leading-snug", titleClassName), children: title }) : /* @__PURE__ */ jsx(DialogTitle, { className: cn("text-start font-serif text-2xl font-normal leading-snug", titleClassName), children: title }) });
85567
85285
  }, [headerSlot, title, headerClassName, titleClassName]);
85568
- const renderForm = useMemo445(() => {
85286
+ const renderForm = useMemo441(() => {
85569
85287
  if (formSlot) return formSlot;
85570
85288
  return /* @__PURE__ */ jsxs(
85571
85289
  Form,
@@ -85627,7 +85345,7 @@ function OfferModalNewsletterDiscount({
85627
85345
  }
85628
85346
  ) });
85629
85347
  }
85630
- var { useMemo: useMemo446 } = React25;
85348
+ var { useMemo: useMemo442 } = React25;
85631
85349
  function OfferModalMembershipImage({
85632
85350
  overline,
85633
85351
  title,
@@ -85704,7 +85422,7 @@ function OfferModalMembershipImage({
85704
85422
  });
85705
85423
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
85706
85424
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
85707
- const renderImage = useMemo446(() => {
85425
+ const renderImage = useMemo442(() => {
85708
85426
  if (imageSlot) return imageSlot;
85709
85427
  if (!image) return null;
85710
85428
  return /* @__PURE__ */ jsx("div", { className: cn("max-h-[290px] h-full overflow-hidden max-lg:hidden", imageWrapperClassName), children: /* @__PURE__ */ jsx(
@@ -85717,7 +85435,7 @@ function OfferModalMembershipImage({
85717
85435
  }
85718
85436
  ) });
85719
85437
  }, [imageSlot, image, imageWrapperClassName, imageClassName, optixFlowConfig]);
85720
- const renderCloseButton = useMemo446(() => {
85438
+ const renderCloseButton = useMemo442(() => {
85721
85439
  if (closeButtonSlot) return closeButtonSlot;
85722
85440
  return /* @__PURE__ */ jsx("div", { className: "absolute -end-px -top-px z-10", children: /* @__PURE__ */ jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsx(
85723
85441
  Pressable,
@@ -85733,7 +85451,7 @@ function OfferModalMembershipImage({
85733
85451
  }
85734
85452
  ) }) });
85735
85453
  }, [closeButtonSlot, closeClassName]);
85736
- const renderForm = useMemo446(() => {
85454
+ const renderForm = useMemo442(() => {
85737
85455
  if (formSlot) return formSlot;
85738
85456
  return /* @__PURE__ */ jsxs(
85739
85457
  Form,
@@ -85796,7 +85514,7 @@ function OfferModalMembershipImage({
85796
85514
  }
85797
85515
  );
85798
85516
  }, [formSlot, form, formConfig, formMethod, emailPlaceholder, inputClassName, submitClassName, buttonText, formClassName]);
85799
- const renderFooter = useMemo446(() => {
85517
+ const renderFooter = useMemo442(() => {
85800
85518
  if (footerSlot) return footerSlot;
85801
85519
  if (!description) return null;
85802
85520
  return /* @__PURE__ */ jsx(DialogFooter, { className: footerClassName, children: /* @__PURE__ */ jsx(DialogDescription, { className: cn("text-muted-foreground text-center text-xs leading-relaxed", descriptionClassName), children: description }) });
@@ -85916,7 +85634,7 @@ function SheetDescription({
85916
85634
  }
85917
85635
  );
85918
85636
  }
85919
- var { useMemo: useMemo447 } = React25;
85637
+ var { useMemo: useMemo443 } = React25;
85920
85638
  function OfferModalSheetNewsletter({
85921
85639
  logo,
85922
85640
  logoSlot,
@@ -85999,7 +85717,7 @@ function OfferModalSheetNewsletter({
85999
85717
  });
86000
85718
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
86001
85719
  const sheetProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
86002
- const renderLogo = useMemo447(() => {
85720
+ const renderLogo = useMemo443(() => {
86003
85721
  if (logoSlot) return logoSlot;
86004
85722
  if (!logo) return null;
86005
85723
  const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
@@ -86013,7 +85731,7 @@ function OfferModalSheetNewsletter({
86013
85731
  }
86014
85732
  );
86015
85733
  }, [logoSlot, logo, logoClassName, optixFlowConfig]);
86016
- const renderHeader = useMemo447(() => {
85734
+ const renderHeader = useMemo443(() => {
86017
85735
  if (headerSlot) return headerSlot;
86018
85736
  return /* @__PURE__ */ jsxs(SheetHeader, { className: cn("gap-8 p-0", headerClassName), children: [
86019
85737
  renderLogo,
@@ -86023,7 +85741,7 @@ function OfferModalSheetNewsletter({
86023
85741
  ] })
86024
85742
  ] });
86025
85743
  }, [headerSlot, renderLogo, headerClassName, title, titleClassName, description, descriptionClassName]);
86026
- const renderForm = useMemo447(() => {
85744
+ const renderForm = useMemo443(() => {
86027
85745
  if (formSlot) return formSlot;
86028
85746
  return /* @__PURE__ */ jsx(
86029
85747
  Form,
@@ -86071,7 +85789,7 @@ function OfferModalSheetNewsletter({
86071
85789
  }
86072
85790
  );
86073
85791
  }, [formSlot, form, formConfig, formMethod, emailPlaceholder, inputClassName, submitClassName, buttonText, formClassName]);
86074
- const renderLegal = useMemo447(() => {
85792
+ const renderLegal = useMemo443(() => {
86075
85793
  if (legalSlot) return legalSlot;
86076
85794
  if (!termsUrl || !termsText || !privacyUrl || !privacyText) return null;
86077
85795
  return /* @__PURE__ */ jsxs("p", { className: cn("text-muted-foreground text-xs", legalClassName), children: [
@@ -86085,7 +85803,7 @@ function OfferModalSheetNewsletter({
86085
85803
  "."
86086
85804
  ] });
86087
85805
  }, [legalSlot, termsUrl, termsText, privacyUrl, privacyText, legalClassName]);
86088
- const renderImage = useMemo447(() => {
85806
+ const renderImage = useMemo443(() => {
86089
85807
  if (imageSlot) return imageSlot;
86090
85808
  if (!image) return null;
86091
85809
  return /* @__PURE__ */ jsx("div", { className: cn("h-1/2 basis-1/2", imageWrapperClassName), children: /* @__PURE__ */ jsx(AspectRatio, { ratio: 1, className: "overflow-hidden", children: /* @__PURE__ */ jsx(
@@ -105215,11 +104933,16 @@ var BLOCK_REGISTRY = {
105215
104933
  props: "ContactCardProps",
105216
104934
  exampleUsage: `
105217
104935
  <ContactCard
105218
- heading="Get in Touch"
105219
- description="We'd love to hear from you"
105220
- formHeading="Contact us"
104936
+ heading="Get In Touch"
104937
+ description="We'd love to hear from you. Send us a message and we'll respond as soon as possible."
105221
104938
  buttonText="Send Message"
105222
- formConfig={{ endpoint: "/api/contact", format: "json" }}
104939
+ contactOptions={[
104940
+ { icon: "Phone", info: "+1 (555) 987-6543", href: "tel:+15559876543" },
104941
+ { icon: "Mail", info: "support@example.com", href: "mailto:support@example.com" },
104942
+ { icon: "MapPin", info: "456 Business Ave, New York, NY 10001" },
104943
+ { icon: "Clock", info: "Mon-Fri: 9 AM - 6 PM EST" },
104944
+ ]}
104945
+ formEngineSetup={{ formConfig: { endpoint: "/api/contact", format: "json" } }}
105223
104946
  />
105224
104947
  `.trim()
105225
104948
  },
@@ -105320,7 +105043,7 @@ var BLOCK_REGISTRY = {
105320
105043
  heading="Contact Us"
105321
105044
  description="Any questions or remarks? Just write us a message!"
105322
105045
  buttonText="Send Message"
105323
- formConfig={{ endpoint: "/api/contact", format: "json" }}
105046
+ formEngineSetup={{ formConfig: { endpoint: "/api/contact", format: "json" } }}
105324
105047
  />
105325
105048
  `.trim()
105326
105049
  },
@@ -105371,7 +105094,7 @@ var BLOCK_REGISTRY = {
105371
105094
  heading="Emergency Contact"
105372
105095
  description="We're here to help 24/7"
105373
105096
  buttonText="Submit Emergency Request"
105374
- formConfig={{ endpoint: "/api/emergency", format: "json" }}
105097
+ formEngineSetup={{ formConfig: { endpoint: "/api/emergency", format: "json" } }}
105375
105098
  />
105376
105099
  `.trim()
105377
105100
  },
@@ -105403,7 +105126,16 @@ var BLOCK_REGISTRY = {
105403
105126
  id: "contact-faq",
105404
105127
  name: "Contact FAQ",
105405
105128
  description: "A two-column contact form with an FAQ accordion sidebar. Displays frequently asked questions alongside a contact form so visitors can find answers before submitting inquiries. Falls back to a single-column centered layout when no FAQ items are provided.",
105406
- semanticTags: ["contact", "faq", "questions", "inquiry", "form", "support", "accordion", "two-column"],
105129
+ semanticTags: [
105130
+ "contact",
105131
+ "faq",
105132
+ "questions",
105133
+ "inquiry",
105134
+ "form",
105135
+ "support",
105136
+ "accordion",
105137
+ "two-column"
105138
+ ],
105407
105139
  category: "contact",
105408
105140
  component: ContactFaq,
105409
105141
  props: "ContactFaqProps",
@@ -105496,17 +105228,29 @@ var BLOCK_REGISTRY = {
105496
105228
  "contact-image": {
105497
105229
  id: "contact-image",
105498
105230
  name: "Contact Image",
105499
- description: "Contact form with image background layout. Features a clean card design with first name, last name, email, phone, and message fields.",
105500
- semanticTags: ["contact", "form", "image", "card", "simple"],
105231
+ description: "Split-layout contact form with an image panel featuring overlay contact items (phone, email, etc.) on the left and a form with heading on the right. Modern, professional design with motion animations.",
105232
+ semanticTags: [
105233
+ "contact",
105234
+ "form",
105235
+ "image",
105236
+ "split-layout",
105237
+ "overlay",
105238
+ "modern"
105239
+ ],
105501
105240
  category: "contact",
105502
105241
  component: ContactImage,
105503
105242
  props: "ContactImageProps",
105504
105243
  exampleUsage: `
105505
105244
  <ContactImage
105506
- heading="Get in Touch"
105507
- description="We'd love to hear from you"
105508
- buttonText="Send Message"
105509
- formConfig={{ endpoint: "/api/contact", format: "json" }}
105245
+ eyebrow="Get in Touch"
105246
+ heading="Contact Us"
105247
+ description="We'd love to hear from you."
105248
+ image={{ src: "/office.jpg", alt: "Our office" }}
105249
+ contactOverlays={[
105250
+ { icon: "lucide/phone", label: "Phone", title: "+1 (555) 987-6543", href: "tel:+15559876543" },
105251
+ { icon: "lucide/mail", label: "Email", title: "support@example.com", href: "mailto:support@example.com" },
105252
+ ]}
105253
+ formEngineSetup={{ formConfig: { endpoint: "/api/contact", format: "json" } }}
105510
105254
  />
105511
105255
  `.trim()
105512
105256
  },