@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.cjs CHANGED
@@ -9081,6 +9081,7 @@ function AboutNetworkSpotlight({
9081
9081
  spotlightCard,
9082
9082
  spotlightCardSlot,
9083
9083
  className,
9084
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
9084
9085
  contentClassName,
9085
9086
  eyebrowClassName,
9086
9087
  headingClassName,
@@ -9090,7 +9091,7 @@ function AboutNetworkSpotlight({
9090
9091
  imageClassName,
9091
9092
  spotlightCardClassName,
9092
9093
  background,
9093
- spacing,
9094
+ spacing = "py-32 md:py-32",
9094
9095
  pattern,
9095
9096
  patternOpacity,
9096
9097
  optixFlowConfig
@@ -9111,7 +9112,7 @@ function AboutNetworkSpotlight({
9111
9112
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: item })
9112
9113
  ] }, index)) });
9113
9114
  }, [highlightsSlot, highlights, highlightsClassName]);
9114
- const actionsContent = React25.useMemo(() => {
9115
+ React25.useMemo(() => {
9115
9116
  if (actionsSlot) return actionsSlot;
9116
9117
  if (!actions || actions.length === 0) return null;
9117
9118
  return actions.map((action, index) => {
@@ -9175,9 +9176,10 @@ function AboutNetworkSpotlight({
9175
9176
  {
9176
9177
  background,
9177
9178
  spacing,
9178
- className: cn(className),
9179
9179
  pattern,
9180
9180
  patternOpacity,
9181
+ className,
9182
+ containerClassName,
9181
9183
  children: /* @__PURE__ */ jsxRuntime.jsxs(
9182
9184
  "div",
9183
9185
  {
@@ -9193,7 +9195,7 @@ function AboutNetworkSpotlight({
9193
9195
  whileInView: { opacity: 1, x: 0 },
9194
9196
  viewport: { once: true, margin: "-50px" },
9195
9197
  transition: { duration: 0.5 },
9196
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative overflow-hidden rounded-3xl border border-white/10 shadow-2xl", children: [
9198
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative overflow-hidden rounded-3xl border border-white/10 shadow-2xl aspect-square md:aspect-auto", children: [
9197
9199
  /* @__PURE__ */ jsxRuntime.jsx(
9198
9200
  img.Img,
9199
9201
  {
@@ -9204,7 +9206,7 @@ function AboutNetworkSpotlight({
9204
9206
  }
9205
9207
  ),
9206
9208
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-linear-to-tr from-black/70 via-transparent to-transparent" }),
9207
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-6 left-6 right-6", children: spotlightCardContent })
9209
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-2 md:bottom-6 left-2 md:left-6 right-2 md:right-6", children: spotlightCardContent })
9208
9210
  ] })
9209
9211
  }
9210
9212
  ),
@@ -9225,29 +9227,33 @@ function AboutNetworkSpotlight({
9225
9227
  ),
9226
9228
  children: eyebrow
9227
9229
  }
9228
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: eyebrowClassName, children: eyebrow })),
9230
+ ) : eyebrow),
9229
9231
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
9230
9232
  "h2",
9231
9233
  {
9232
9234
  className: cn(
9233
- "mt-2 text-3xl font-bold text-background md:text-4xl",
9235
+ "mt-2 text-3xl font-bold md:text-4xl text-pretty",
9234
9236
  headingClassName
9235
9237
  ),
9236
9238
  children: heading
9237
9239
  }
9238
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-2", headingClassName), children: heading })),
9240
+ ) : heading),
9239
9241
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
9240
9242
  "p",
9241
9243
  {
9242
- className: cn(
9243
- "mt-4 text-lg text-background/80",
9244
- descriptionClassName
9245
- ),
9244
+ className: cn("mt-4 text-lg text-pretty", descriptionClassName),
9246
9245
  children: description
9247
9246
  }
9248
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-4", descriptionClassName), children: description })),
9247
+ ) : description),
9249
9248
  (highlightsSlot || highlights && highlights.length > 0) && highlightsContent,
9250
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-8 flex flex-wrap gap-4", actionsClassName), children: actionsContent })
9249
+ /* @__PURE__ */ jsxRuntime.jsx(
9250
+ BlockActions,
9251
+ {
9252
+ actions,
9253
+ actionsSlot,
9254
+ actionsClassName
9255
+ }
9256
+ )
9251
9257
  ]
9252
9258
  }
9253
9259
  )
@@ -13726,104 +13732,115 @@ function ContactCallback({
13726
13732
  }
13727
13733
  );
13728
13734
  }
13735
+ var DEFAULT_STYLE_RULES = {
13736
+ formContainer: "",
13737
+ fieldsContainer: "",
13738
+ fieldClassName: "",
13739
+ formClassName: "space-y-6"
13740
+ };
13729
13741
  var DEFAULT_FORM_FIELDS3 = [
13730
13742
  {
13731
- name: "firstName",
13743
+ name: "fullName",
13732
13744
  type: "text",
13733
- label: "First Name",
13734
- placeholder: "John",
13745
+ label: "Full Name",
13746
+ placeholder: "Full Name",
13735
13747
  required: true,
13736
13748
  columnSpan: 6
13737
13749
  },
13738
13750
  {
13739
- name: "lastName",
13740
- type: "text",
13741
- label: "Last Name",
13742
- placeholder: "Doe",
13751
+ name: "email",
13752
+ type: "email",
13753
+ label: "Email",
13754
+ placeholder: "your@email.com",
13743
13755
  required: true,
13744
13756
  columnSpan: 6
13745
13757
  },
13746
13758
  {
13747
- name: "email",
13748
- type: "email",
13749
- label: "Email Address",
13750
- placeholder: "john@example.com",
13751
- required: true,
13759
+ name: "phone",
13760
+ type: "tel",
13761
+ label: "Phone",
13762
+ placeholder: "+1 (555) 000-0000",
13752
13763
  columnSpan: 12
13753
13764
  },
13754
13765
  {
13755
13766
  name: "message",
13756
13767
  type: "textarea",
13757
- label: "Message",
13758
- placeholder: "How can we help you?",
13768
+ label: "Your Message",
13769
+ placeholder: "How can we help you today?",
13759
13770
  required: true,
13760
13771
  rows: 4,
13761
13772
  columnSpan: 12
13762
- },
13763
- {
13764
- name: "privacyPolicy",
13765
- type: "checkbox",
13766
- label: "I agree to the privacy policy",
13767
- required: true,
13768
- columnSpan: 12
13769
13773
  }
13770
13774
  ];
13771
13775
  function ContactCard({
13772
- heading,
13773
- description,
13774
- actions,
13775
- actionsSlot,
13776
- actionsClassName,
13776
+ heading = "Get In Touch",
13777
+ description = "We'd love to hear from you. Send us a message and we'll respond as soon as possible.",
13778
+ buttonText = "Send Message",
13779
+ buttonIcon,
13777
13780
  contactOptions,
13778
13781
  contactOptionsSlot,
13779
- formFields,
13780
- successMessage = "Thank you! We'll be in touch soon.",
13782
+ socialLinks,
13783
+ socialLinksSlot,
13784
+ formEngineSetup,
13781
13785
  className,
13782
13786
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
13783
13787
  cardClassName,
13784
- formClassName,
13785
- successMessageClassName,
13786
- errorMessageClassName,
13788
+ cardContentClassName,
13787
13789
  infoPanelClassName,
13788
13790
  headingClassName,
13789
13791
  descriptionClassName,
13790
13792
  contactOptionsClassName,
13793
+ socialLinksClassName,
13794
+ gridClassName,
13791
13795
  background,
13792
13796
  spacing = "py-16 md:py-32",
13793
13797
  pattern,
13794
- patternOpacity,
13795
- formConfig,
13796
- onSubmit,
13797
- onSuccess,
13798
- onError
13798
+ patternOpacity
13799
13799
  }) {
13800
- const fields = React25.useMemo(() => formFields || DEFAULT_FORM_FIELDS3, [formFields]);
13801
- const { form, submissionError, formMethod, resetSubmissionState } = integration.useContactForm({
13802
- formFields: fields,
13803
- formConfig,
13804
- onSubmit,
13805
- onSuccess,
13806
- onError
13807
- });
13808
- const contactOptionsContent = React25.useMemo(() => {
13800
+ const contactOptionsContent = React25__namespace.useMemo(() => {
13809
13801
  if (contactOptionsSlot) return contactOptionsSlot;
13810
13802
  if (contactOptions && contactOptions.length > 0) {
13811
- return contactOptions.map((option, key) => /* @__PURE__ */ jsxRuntime.jsxs(
13803
+ return contactOptions.map((option, key) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
13804
+ /* @__PURE__ */ jsxRuntime.jsx(
13805
+ DynamicIcon,
13806
+ {
13807
+ name: option.icon,
13808
+ size: 20,
13809
+ className: "shrink-0 text-muted-foreground"
13810
+ }
13811
+ ),
13812
+ option.href ? /* @__PURE__ */ jsxRuntime.jsx(
13813
+ Pressable,
13814
+ {
13815
+ href: option.href,
13816
+ className: "text-sm font-medium text-muted-foreground",
13817
+ children: option.info
13818
+ }
13819
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-muted-foreground", children: option.info })
13820
+ ] }, key));
13821
+ }
13822
+ return null;
13823
+ }, [contactOptionsSlot, contactOptions]);
13824
+ const socialLinksContent = React25__namespace.useMemo(() => {
13825
+ if (socialLinksSlot) return socialLinksSlot;
13826
+ if (socialLinks && socialLinks.length > 0) {
13827
+ return socialLinks.map((social, key) => /* @__PURE__ */ jsxRuntime.jsx(
13812
13828
  Pressable,
13813
13829
  {
13814
- variant: "link",
13815
- href: option.href,
13816
- className: "gap-4 font-bold",
13817
- children: [
13818
- /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: option.icon, size: 20 }),
13819
- option.info
13820
- ]
13830
+ href: social.href,
13831
+ className: cn(
13832
+ "flex h-9 w-9 items-center justify-center",
13833
+ "rounded-full transition-colors",
13834
+ "text-muted-foreground hover:text-foreground"
13835
+ ),
13836
+ "aria-label": social.label,
13837
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: social.icon, size: 18 })
13821
13838
  },
13822
13839
  key
13823
13840
  ));
13824
13841
  }
13825
13842
  return null;
13826
- }, [contactOptionsSlot, contactOptions]);
13843
+ }, [socialLinksSlot, socialLinks]);
13827
13844
  return /* @__PURE__ */ jsxRuntime.jsx(
13828
13845
  Section,
13829
13846
  {
@@ -13833,82 +13850,89 @@ function ContactCard({
13833
13850
  patternOpacity,
13834
13851
  className,
13835
13852
  containerClassName,
13836
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid items-start gap-10 md:gap-12 lg:grid-cols-2", children: [
13837
- /* @__PURE__ */ jsxRuntime.jsx(Card, { className: cn("p-6 lg:p-8 order-2 md:order-1", cardClassName), children: /* @__PURE__ */ jsxRuntime.jsxs(
13838
- forms.Form,
13839
- {
13840
- form,
13841
- action: formConfig?.endpoint,
13842
- method: formMethod,
13843
- submissionError,
13844
- successMessage,
13845
- successMessageClassName,
13846
- errorMessageClassName,
13847
- submissionConfig: formConfig?.submissionConfig,
13848
- onNewSubmission: resetSubmissionState,
13849
- className: cn("space-y-6", formClassName),
13850
- children: [
13851
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-12 gap-6", children: fields.map((field) => /* @__PURE__ */ jsxRuntime.jsx(
13852
- "div",
13853
- {
13854
- className: integration.getColumnSpanClass(field.columnSpan),
13855
- children: /* @__PURE__ */ jsxRuntime.jsx(integration.DynamicFormField, { field })
13853
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs(
13854
+ "div",
13855
+ {
13856
+ className: cn(
13857
+ "grid items-start gap-10 md:gap-12 grid-cols-1 lg:grid-cols-2",
13858
+ gridClassName
13859
+ ),
13860
+ children: [
13861
+ /* @__PURE__ */ jsxRuntime.jsx(Card, { className: cn("order-2 lg:order-1 pt-0 pb-0", cardClassName), children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: cn("p-6 lg:p-8", cardContentClassName), children: formEngineSetup ? /* @__PURE__ */ jsxRuntime.jsx(
13862
+ integration.FormEngine,
13863
+ {
13864
+ formEngineSetup: {
13865
+ ...formEngineSetup,
13866
+ formLayoutSettings: {
13867
+ ...formEngineSetup.formLayoutSettings,
13868
+ formLayout: "standard",
13869
+ submitButtonSetup: {
13870
+ ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
13871
+ submitLabel: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
13872
+ buttonIcon,
13873
+ buttonText
13874
+ ] })
13875
+ }
13876
+ }
13856
13877
  },
13857
- field.name
13858
- )) }),
13859
- /* @__PURE__ */ jsxRuntime.jsx(
13860
- BlockActions,
13861
- {
13862
- actions,
13863
- actionsSlot,
13864
- actionsClassName
13865
- }
13866
- )
13867
- ]
13868
- }
13869
- ) }),
13870
- /* @__PURE__ */ jsxRuntime.jsxs(
13871
- "div",
13872
- {
13873
- className: cn(
13874
- "flex flex-col items-start gap-2 md:gap-4 order-1 md:order-2",
13875
- infoPanelClassName
13876
- ),
13877
- children: [
13878
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
13879
- "h2",
13880
- {
13881
- className: cn(
13882
- "text-4xl lg:text-6xl font-bold tracking-tight text-pretty",
13883
- headingClassName
13884
- ),
13885
- children: heading
13886
- }
13887
- ) : heading),
13888
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
13889
- "p",
13890
- {
13891
- className: cn(
13892
- "leading-relaxed text-pretty text-lg opacity-70",
13893
- descriptionClassName
13894
- ),
13895
- children: description
13896
- }
13897
- ) : description),
13898
- /* @__PURE__ */ jsxRuntime.jsx(
13899
- "div",
13900
- {
13901
- className: cn(
13902
- "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",
13903
- contactOptionsClassName
13878
+ defaultFields: DEFAULT_FORM_FIELDS3,
13879
+ defaultStyleRules: DEFAULT_STYLE_RULES
13880
+ }
13881
+ ) : null }) }),
13882
+ /* @__PURE__ */ jsxRuntime.jsxs(
13883
+ "div",
13884
+ {
13885
+ className: cn(
13886
+ "flex flex-col items-start gap-2 md:gap-4 order-1 lg:order-2",
13887
+ infoPanelClassName
13888
+ ),
13889
+ children: [
13890
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
13891
+ "h2",
13892
+ {
13893
+ className: cn(
13894
+ "text-4xl lg:text-6xl font-bold tracking-tight text-pretty",
13895
+ headingClassName
13896
+ ),
13897
+ children: heading
13898
+ }
13899
+ ) : heading),
13900
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
13901
+ "p",
13902
+ {
13903
+ className: cn(
13904
+ "leading-relaxed text-pretty text-lg text-muted-foreground",
13905
+ descriptionClassName
13906
+ ),
13907
+ children: description
13908
+ }
13909
+ ) : description),
13910
+ contactOptionsContent && /* @__PURE__ */ jsxRuntime.jsx(
13911
+ "div",
13912
+ {
13913
+ className: cn(
13914
+ "mt-4 w-full rounded-xl bg-muted px-6 py-6 md:px-8 md:py-8 space-y-6",
13915
+ contactOptionsClassName
13916
+ ),
13917
+ children: contactOptionsContent
13918
+ }
13904
13919
  ),
13905
- children: contactOptionsContent
13906
- }
13907
- )
13908
- ]
13909
- }
13910
- )
13911
- ] }) })
13920
+ socialLinksContent && /* @__PURE__ */ jsxRuntime.jsx(
13921
+ "div",
13922
+ {
13923
+ className: cn(
13924
+ "mt-2 flex items-center gap-2",
13925
+ socialLinksClassName
13926
+ ),
13927
+ children: socialLinksContent
13928
+ }
13929
+ )
13930
+ ]
13931
+ }
13932
+ )
13933
+ ]
13934
+ }
13935
+ ) })
13912
13936
  }
13913
13937
  );
13914
13938
  }
@@ -14725,6 +14749,12 @@ function ContactConsultation({
14725
14749
  }
14726
14750
  );
14727
14751
  }
14752
+ var DEFAULT_STYLE_RULES2 = {
14753
+ formContainer: "",
14754
+ fieldsContainer: "",
14755
+ fieldClassName: "",
14756
+ formClassName: "space-y-6"
14757
+ };
14728
14758
  var DEFAULT_FORM_FIELDS7 = [
14729
14759
  {
14730
14760
  name: "firstName",
@@ -14767,87 +14797,26 @@ function ContactDark({
14767
14797
  contactDescription = "Fill up the form and our team will get back to you within 24 hours.",
14768
14798
  buttonText = "Submit",
14769
14799
  buttonIcon,
14770
- actions,
14771
- actionsSlot,
14772
14800
  contactOptions,
14773
14801
  contactOptionsSlot,
14774
14802
  socialLinks,
14775
14803
  socialLinksSlot,
14776
- formFields = DEFAULT_FORM_FIELDS7,
14777
- successMessage = "Thank you! Your message has been sent successfully.",
14804
+ formEngineSetup,
14778
14805
  className,
14779
14806
  headerClassName,
14780
14807
  headingClassName,
14781
14808
  descriptionClassName,
14782
14809
  cardClassName,
14783
14810
  formPanelClassName,
14784
- formClassName,
14785
- submitClassName,
14786
14811
  infoPanelClassName,
14787
14812
  contactOptionsClassName,
14788
14813
  socialLinksClassName,
14789
- successMessageClassName,
14790
- errorMessageClassName,
14791
14814
  background,
14792
14815
  spacing = "py-8 md:py-32",
14793
14816
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
14794
14817
  pattern,
14795
- patternOpacity,
14796
- formConfig,
14797
- onSubmit,
14798
- onSuccess,
14799
- onError
14818
+ patternOpacity
14800
14819
  }) {
14801
- const {
14802
- uploadTokens,
14803
- uploadProgress,
14804
- isUploading,
14805
- uploadFiles,
14806
- removeFile,
14807
- resetUpload
14808
- } = integration.useFileUpload({ onError });
14809
- const { form, submissionError, formMethod, resetSubmissionState } = integration.useContactForm({
14810
- formFields,
14811
- formConfig,
14812
- onSubmit,
14813
- onSuccess: (data) => {
14814
- resetUpload();
14815
- onSuccess?.(data);
14816
- },
14817
- onError,
14818
- resetOnSuccess: formConfig?.resetOnSuccess !== false,
14819
- uploadTokens
14820
- });
14821
- const actionsContent = React25__namespace.useMemo(() => {
14822
- if (actionsSlot) return actionsSlot;
14823
- if (actions && actions.length > 0) {
14824
- return actions.map((action, index) => {
14825
- const {
14826
- label,
14827
- icon,
14828
- iconAfter,
14829
- children,
14830
- className: actionClassName,
14831
- ...pressableProps
14832
- } = action;
14833
- return /* @__PURE__ */ jsxRuntime.jsx(
14834
- Pressable,
14835
- {
14836
- asButton: true,
14837
- className: actionClassName,
14838
- ...pressableProps,
14839
- children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
14840
- icon,
14841
- label,
14842
- iconAfter
14843
- ] })
14844
- },
14845
- index
14846
- );
14847
- });
14848
- }
14849
- return null;
14850
- }, [actionsSlot, actions]);
14851
14820
  const contactOptionsContent = React25__namespace.useMemo(() => {
14852
14821
  if (contactOptionsSlot) return contactOptionsSlot;
14853
14822
  if (contactOptions && contactOptions.length > 0) {
@@ -14902,124 +14871,104 @@ function ContactDark({
14902
14871
  patternOpacity,
14903
14872
  className,
14904
14873
  containerClassName,
14905
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
14906
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-10 text-center", headerClassName), children: [
14907
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
14908
- "h2",
14909
- {
14910
- className: cn(
14911
- "mb-3 text-3xl font-bold tracking-tight text-balance",
14912
- headingClassName
14913
- ),
14914
- children: heading
14915
- }
14916
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
14917
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
14918
- "p",
14919
- {
14920
- className: cn(
14921
- "leading-relaxed text-balance",
14922
- descriptionClassName
14923
- ),
14924
- children: description
14925
- }
14926
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
14927
- ] }),
14928
- /* @__PURE__ */ jsxRuntime.jsxs(
14929
- Card,
14930
- {
14931
- className: cn(
14932
- "grid gap-0 overflow-hidden grid-cols-1 lg:grid-cols-2 pt-0 pb-0",
14933
- cardClassName
14934
- ),
14935
- children: [
14936
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("p-6 lg:p-12", formPanelClassName), children: /* @__PURE__ */ jsxRuntime.jsxs(
14937
- forms.Form,
14938
- {
14939
- form,
14940
- notificationConfig: {
14941
- submissionError,
14942
- successMessage
14943
- },
14944
- styleConfig: {
14945
- formClassName: cn("space-y-6", formClassName),
14946
- successMessageClassName,
14947
- errorMessageClassName
14948
- },
14949
- formConfig: {
14950
- endpoint: formConfig?.endpoint,
14951
- method: formMethod,
14952
- submissionConfig: formConfig?.submissionConfig
14953
- },
14954
- onNewSubmission: () => {
14955
- resetUpload();
14956
- resetSubmissionState();
14957
- },
14958
- children: [
14959
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-12 gap-6", children: formFields.map((field) => /* @__PURE__ */ jsxRuntime.jsx(
14960
- "div",
14961
- {
14962
- className: integration.getColumnSpanClass(field.columnSpan),
14963
- children: /* @__PURE__ */ jsxRuntime.jsx(
14964
- integration.DynamicFormField,
14874
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs(
14875
+ Card,
14876
+ {
14877
+ className: cn(
14878
+ "grid gap-0 overflow-hidden grid-cols-1 lg:grid-cols-2 pt-0 pb-0",
14879
+ cardClassName
14880
+ ),
14881
+ children: [
14882
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("p-6 lg:p-12", formPanelClassName), children: formEngineSetup ? /* @__PURE__ */ jsxRuntime.jsx(
14883
+ integration.FormEngine,
14884
+ {
14885
+ formEngineSetup: {
14886
+ ...formEngineSetup,
14887
+ formLayoutSettings: {
14888
+ ...formEngineSetup.formLayoutSettings,
14889
+ formLayout: "standard",
14890
+ submitButtonSetup: {
14891
+ ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
14892
+ submitLabel: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
14893
+ buttonIcon,
14894
+ buttonText
14895
+ ] })
14896
+ }
14897
+ }
14898
+ },
14899
+ defaultFields: DEFAULT_FORM_FIELDS7,
14900
+ defaultStyleRules: DEFAULT_STYLE_RULES2
14901
+ }
14902
+ ) : null }),
14903
+ /* @__PURE__ */ jsxRuntime.jsxs(
14904
+ "div",
14905
+ {
14906
+ className: cn(
14907
+ "flex flex-col justify-between bg-primary p-6 text-primary-foreground lg:p-8",
14908
+ infoPanelClassName
14909
+ ),
14910
+ children: [
14911
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs(
14912
+ "div",
14913
+ {
14914
+ className: cn(
14915
+ "pb-6 md:pb-8 border-b-2 border-border/50 mb-6 md:mb-8 text-left",
14916
+ headerClassName
14917
+ ),
14918
+ children: [
14919
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
14920
+ "h2",
14921
+ {
14922
+ className: cn(
14923
+ "text-3xl font-bold tracking-tight text-pretty md:text-5xl",
14924
+ headingClassName
14925
+ ),
14926
+ children: heading
14927
+ }
14928
+ ) : heading),
14929
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
14930
+ "p",
14965
14931
  {
14966
- field,
14967
- uploadProgress,
14968
- onFileUpload: uploadFiles,
14969
- onFileRemove: removeFile,
14970
- isUploading
14932
+ className: cn(
14933
+ "leading-relaxed text-balance",
14934
+ descriptionClassName
14935
+ ),
14936
+ children: description
14971
14937
  }
14972
- )
14973
- },
14974
- field.name
14975
- )) }),
14976
- actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxRuntime.jsxs(
14977
- Pressable,
14978
- {
14979
- componentType: "button",
14980
- type: "submit",
14981
- className: cn("w-full", submitClassName),
14982
- asButton: true,
14983
- disabled: form.isSubmitting,
14984
- children: [
14985
- buttonIcon,
14986
- buttonText
14987
- ]
14988
- }
14989
- )
14990
- ]
14991
- }
14992
- ) }),
14993
- /* @__PURE__ */ jsxRuntime.jsxs(
14994
- "div",
14995
- {
14996
- className: cn(
14997
- "flex flex-col justify-between bg-primary p-6 text-primary-foreground lg:p-8",
14998
- infoPanelClassName
14999
- ),
15000
- children: [
15001
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
15002
- contactHeading && (typeof contactHeading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-3 text-xl font-semibold", children: contactHeading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-3", children: contactHeading })),
15003
- contactDescription && (typeof contactDescription === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-8 text-sm text-primary-foreground/80", children: contactDescription }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-8", children: contactDescription })),
15004
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("space-y-4", contactOptionsClassName), children: contactOptionsContent })
15005
- ] }),
14938
+ ) : description)
14939
+ ]
14940
+ }
14941
+ ) }),
14942
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-4", children: [
14943
+ contactHeading && (typeof contactHeading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xl font-semibold", children: contactHeading }) : contactHeading),
14944
+ contactDescription && (typeof contactDescription === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-primary-foreground/80", children: contactDescription }) : contactDescription),
15006
14945
  /* @__PURE__ */ jsxRuntime.jsx(
15007
14946
  "div",
15008
14947
  {
15009
14948
  className: cn(
15010
- "mt-8 flex items-center gap-4",
15011
- socialLinksClassName
14949
+ "pt-6 md:pt-8 space-y-4",
14950
+ contactOptionsClassName
15012
14951
  ),
15013
- children: socialLinksContent
14952
+ children: contactOptionsContent
15014
14953
  }
15015
14954
  )
15016
- ]
15017
- }
15018
- )
15019
- ]
15020
- }
15021
- )
15022
- ] })
14955
+ ] }),
14956
+ /* @__PURE__ */ jsxRuntime.jsx(
14957
+ "div",
14958
+ {
14959
+ className: cn(
14960
+ "mt-8 flex items-center gap-4",
14961
+ socialLinksClassName
14962
+ ),
14963
+ children: socialLinksContent
14964
+ }
14965
+ )
14966
+ ]
14967
+ }
14968
+ )
14969
+ ]
14970
+ }
14971
+ ) })
15023
14972
  }
15024
14973
  );
15025
14974
  }
@@ -15368,32 +15317,12 @@ function ContactDemo({
15368
15317
  }
15369
15318
  );
15370
15319
  }
15371
- var DEFAULT_CONTACT_ITEMS = [
15372
- {
15373
- icon: "lucide/phone",
15374
- title: "Critical Hotline",
15375
- subtitle: "+1 (555) 911-0000",
15376
- href: "tel:+15559110000"
15377
- },
15378
- {
15379
- icon: "lucide/mail",
15380
- title: "Email Support",
15381
- subtitle: "emergency@support.com",
15382
- href: "mailto:emergency@support.com"
15383
- },
15384
- {
15385
- icon: "lucide/message-circle",
15386
- title: "Live Chat",
15387
- subtitle: "24/7 Available",
15388
- href: "#chat"
15389
- },
15390
- {
15391
- icon: "lucide/map-pin",
15392
- title: "Visit Us",
15393
- subtitle: "123 Support Lane",
15394
- href: "#location"
15395
- }
15396
- ];
15320
+ var DEFAULT_STYLE_RULES3 = {
15321
+ formContainer: "",
15322
+ fieldsContainer: "",
15323
+ fieldClassName: "",
15324
+ formClassName: "space-y-4"
15325
+ };
15397
15326
  var PRIORITIES = [
15398
15327
  {
15399
15328
  value: "critical",
@@ -15468,281 +15397,182 @@ var DEFAULT_FORM_FIELDS9 = [
15468
15397
  function ContactEmergency({
15469
15398
  heading,
15470
15399
  description,
15471
- contactItems = DEFAULT_CONTACT_ITEMS,
15400
+ contactItems,
15472
15401
  buttonText = "Submit Emergency Request",
15473
15402
  buttonIcon,
15403
+ formEngineSetup,
15404
+ className,
15405
+ headerClassName,
15406
+ headingClassName,
15407
+ descriptionClassName,
15408
+ spacing = "py-16 md:py-32",
15409
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
15410
+ background,
15411
+ pattern,
15412
+ patternOpacity
15413
+ }) {
15414
+ return /* @__PURE__ */ jsxRuntime.jsx(
15415
+ Section,
15416
+ {
15417
+ background,
15418
+ spacing,
15419
+ pattern,
15420
+ patternOpacity,
15421
+ className,
15422
+ containerClassName,
15423
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid md:grid-cols-2 gap-12 md:gap-28", children: [
15424
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start justify-between h-full gap-8 md:gap-12", children: [
15425
+ /* @__PURE__ */ jsxRuntime.jsxs(
15426
+ "div",
15427
+ {
15428
+ className: cn(
15429
+ "flex flex-col items-start gap-4 text-left",
15430
+ headerClassName
15431
+ ),
15432
+ children: [
15433
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
15434
+ "h2",
15435
+ {
15436
+ className: cn(
15437
+ "text-4xl lg:text-5xl xl:text-6xl font-bold text-pretty",
15438
+ headingClassName
15439
+ ),
15440
+ children: heading
15441
+ }
15442
+ ) : heading),
15443
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
15444
+ "p",
15445
+ {
15446
+ className: cn(
15447
+ "leading-relaxed text-pretty md:text-balance text-lg",
15448
+ descriptionClassName
15449
+ ),
15450
+ children: description
15451
+ }
15452
+ ) : description)
15453
+ ]
15454
+ }
15455
+ ),
15456
+ contactItems && contactItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 md:gap-6 w-full", children: contactItems.map((item, index) => /* @__PURE__ */ jsxRuntime.jsx(
15457
+ Pressable,
15458
+ {
15459
+ href: item.href,
15460
+ className: cn(
15461
+ "rounded-xl border bg-transparent hover:bg-muted ring-2",
15462
+ "px-4 py-4 flex",
15463
+ "justify-start items-start transition-all",
15464
+ "duration-500 hover:text-muted-foreground",
15465
+ item.className
15466
+ ),
15467
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
15468
+ item.icon ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center p-2 rounded-xl border bg-primary text-primary-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(
15469
+ DynamicIcon,
15470
+ {
15471
+ name: item.icon,
15472
+ size: item.iconSize ?? 24
15473
+ }
15474
+ ) }) : null,
15475
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
15476
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-bold text-xs uppercase opacity-70", children: item.title }),
15477
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-md font-medium", children: item.subtitle })
15478
+ ] })
15479
+ ] })
15480
+ },
15481
+ index
15482
+ )) })
15483
+ ] }) }),
15484
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-6", children: formEngineSetup ? /* @__PURE__ */ jsxRuntime.jsx(
15485
+ integration.FormEngine,
15486
+ {
15487
+ formEngineSetup: {
15488
+ ...formEngineSetup,
15489
+ formLayoutSettings: {
15490
+ ...formEngineSetup.formLayoutSettings,
15491
+ formLayout: "standard",
15492
+ submitButtonSetup: {
15493
+ ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
15494
+ submitLabel: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
15495
+ buttonIcon,
15496
+ buttonText
15497
+ ] })
15498
+ }
15499
+ }
15500
+ },
15501
+ defaultFields: DEFAULT_FORM_FIELDS9,
15502
+ defaultStyleRules: DEFAULT_STYLE_RULES3
15503
+ }
15504
+ ) : null })
15505
+ ] })
15506
+ }
15507
+ );
15508
+ }
15509
+ var DEFAULT_FORM_FIELDS10 = [
15510
+ {
15511
+ name: "first_name",
15512
+ type: "text",
15513
+ label: "First Name",
15514
+ placeholder: "John",
15515
+ required: true,
15516
+ columnSpan: 6
15517
+ },
15518
+ {
15519
+ name: "last_name",
15520
+ type: "text",
15521
+ label: "Last Name",
15522
+ placeholder: "Doe",
15523
+ required: true,
15524
+ columnSpan: 6
15525
+ },
15526
+ {
15527
+ name: "email",
15528
+ type: "email",
15529
+ label: "Email",
15530
+ placeholder: "john@example.com",
15531
+ required: true,
15532
+ columnSpan: 12
15533
+ },
15534
+ {
15535
+ name: "phone",
15536
+ type: "tel",
15537
+ label: "Phone",
15538
+ placeholder: "+1 (555) 000-0000",
15539
+ required: true,
15540
+ columnSpan: 12
15541
+ },
15542
+ {
15543
+ name: "message",
15544
+ type: "textarea",
15545
+ label: "Message",
15546
+ placeholder: "Your message...",
15547
+ required: true,
15548
+ rows: 4,
15549
+ columnSpan: 12
15550
+ }
15551
+ ];
15552
+ function ContactEvent({
15553
+ heading,
15554
+ description,
15555
+ buttonText = "Submit",
15556
+ buttonIcon,
15474
15557
  actions,
15475
15558
  actionsSlot,
15476
- formFields = DEFAULT_FORM_FIELDS9,
15477
- successMessage = "Thank you! Your emergency request has been received.",
15559
+ formFields = DEFAULT_FORM_FIELDS10,
15560
+ successMessage = "Thank you! Your message has been sent successfully.",
15478
15561
  className,
15562
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
15479
15563
  headerClassName,
15480
15564
  headingClassName,
15481
15565
  descriptionClassName,
15566
+ cardClassName,
15567
+ cardContentClassName,
15482
15568
  formClassName,
15483
15569
  submitClassName,
15484
15570
  successMessageClassName,
15485
15571
  errorMessageClassName,
15486
- spacing = "py-8 md:py-32",
15487
- containerClassName = "w-full max-w-full relative z-10 px-6 sm:px-6 md:px-8 lg:px-8",
15488
- background,
15572
+ background = "white",
15573
+ spacing = "xl",
15489
15574
  pattern,
15490
- patternOpacity,
15491
- formConfig,
15492
- onSubmit,
15493
- onSuccess,
15494
- onError
15495
- }) {
15496
- const {
15497
- uploadTokens,
15498
- uploadProgress,
15499
- isUploading,
15500
- uploadFiles,
15501
- removeFile,
15502
- resetUpload
15503
- } = integration.useFileUpload({ onError });
15504
- const { form, submissionError, formMethod, resetSubmissionState } = integration.useContactForm({
15505
- formFields,
15506
- formConfig,
15507
- onSubmit,
15508
- onSuccess: (data) => {
15509
- resetUpload();
15510
- onSuccess?.(data);
15511
- },
15512
- onError,
15513
- resetOnSuccess: formConfig?.resetOnSuccess !== false,
15514
- uploadTokens
15515
- });
15516
- const otherFields = formFields.filter((f) => f.name !== "priority");
15517
- const actionsContent = React25.useMemo(() => {
15518
- if (actionsSlot) return actionsSlot;
15519
- if (actions && actions.length > 0) {
15520
- return actions.map((action, index) => {
15521
- const {
15522
- label,
15523
- icon,
15524
- iconAfter,
15525
- children,
15526
- className: actionClassName,
15527
- ...pressableProps
15528
- } = action;
15529
- return /* @__PURE__ */ jsxRuntime.jsx(
15530
- Pressable,
15531
- {
15532
- asButton: true,
15533
- className: actionClassName,
15534
- ...pressableProps,
15535
- children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
15536
- icon,
15537
- label,
15538
- iconAfter
15539
- ] })
15540
- },
15541
- index
15542
- );
15543
- });
15544
- }
15545
- return null;
15546
- }, [actionsSlot, actions]);
15547
- return /* @__PURE__ */ jsxRuntime.jsx(
15548
- Section,
15549
- {
15550
- background,
15551
- spacing,
15552
- pattern,
15553
- patternOpacity,
15554
- className,
15555
- containerClassName,
15556
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs(
15557
- forms.Form,
15558
- {
15559
- form,
15560
- notificationConfig: {
15561
- submissionError,
15562
- successMessage
15563
- },
15564
- styleConfig: {
15565
- formClassName,
15566
- successMessageClassName,
15567
- errorMessageClassName
15568
- },
15569
- formConfig: {
15570
- endpoint: formConfig?.endpoint,
15571
- method: formMethod,
15572
- submissionConfig: formConfig?.submissionConfig
15573
- },
15574
- onNewSubmission: () => {
15575
- resetUpload();
15576
- resetSubmissionState();
15577
- },
15578
- children: [
15579
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("p-0 md:p-12"), children: [
15580
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid md:grid-cols-2 gap-12 md:gap-24", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b border-border/60 p-6 md:border-b-0 md:border-r md:border-border/60", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col items-start gap-8 md:gap-12", children: /* @__PURE__ */ jsxRuntime.jsxs(
15581
- "div",
15582
- {
15583
- className: cn(
15584
- "flex flex-col items-start gap-4 text-left",
15585
- headerClassName
15586
- ),
15587
- children: [
15588
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
15589
- "h2",
15590
- {
15591
- className: cn(
15592
- "text-4xl lg:text-5xl xl:text-6xl font-bold",
15593
- headingClassName
15594
- ),
15595
- children: heading
15596
- }
15597
- ) : heading),
15598
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
15599
- "p",
15600
- {
15601
- className: cn(
15602
- "leading-relaxed",
15603
- descriptionClassName
15604
- ),
15605
- children: description
15606
- }
15607
- ) : description)
15608
- ]
15609
- }
15610
- ) }) }) }),
15611
- contactItems && contactItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 md:gap-6 w-full", children: contactItems.map((item, index) => /* @__PURE__ */ jsxRuntime.jsx(
15612
- Pressable,
15613
- {
15614
- href: item.href,
15615
- className: cn(
15616
- "rounded-md border bg-muted ring-2",
15617
- "text-muted-foreground px-4 py-3 flex",
15618
- "justify-start items-start transition-shadow",
15619
- "duration-500 hover:shadow-xl",
15620
- item.className
15621
- ),
15622
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
15623
- item.icon ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center p-2 rounded-xl border bg-primary text-primary-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(
15624
- DynamicIcon,
15625
- {
15626
- name: item.icon,
15627
- size: item.iconSize ?? 24
15628
- }
15629
- ) }) : null,
15630
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
15631
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-bold text-xs uppercase opacity-70", children: item.title }),
15632
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-md font-semibold", children: item.subtitle })
15633
- ] })
15634
- ] })
15635
- },
15636
- index
15637
- )) })
15638
- ] }) }),
15639
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-6", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
15640
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-12 gap-4", children: otherFields.map((field) => /* @__PURE__ */ jsxRuntime.jsx(
15641
- "div",
15642
- {
15643
- className: integration.getColumnSpanClass(field.columnSpan),
15644
- children: /* @__PURE__ */ jsxRuntime.jsx(
15645
- integration.DynamicFormField,
15646
- {
15647
- field,
15648
- uploadProgress,
15649
- onFileUpload: uploadFiles,
15650
- onFileRemove: removeFile,
15651
- isUploading
15652
- }
15653
- )
15654
- },
15655
- field.name
15656
- )) }),
15657
- actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxRuntime.jsxs(
15658
- Pressable,
15659
- {
15660
- componentType: "button",
15661
- type: "submit",
15662
- className: cn("w-full", submitClassName),
15663
- size: "lg",
15664
- asButton: true,
15665
- disabled: form.isSubmitting,
15666
- children: [
15667
- buttonIcon,
15668
- buttonText
15669
- ]
15670
- }
15671
- )
15672
- ] }) })
15673
- ]
15674
- }
15675
- ) })
15676
- }
15677
- );
15678
- }
15679
- var DEFAULT_FORM_FIELDS10 = [
15680
- {
15681
- name: "first_name",
15682
- type: "text",
15683
- label: "First Name",
15684
- placeholder: "John",
15685
- required: true,
15686
- columnSpan: 6
15687
- },
15688
- {
15689
- name: "last_name",
15690
- type: "text",
15691
- label: "Last Name",
15692
- placeholder: "Doe",
15693
- required: true,
15694
- columnSpan: 6
15695
- },
15696
- {
15697
- name: "email",
15698
- type: "email",
15699
- label: "Email",
15700
- placeholder: "john@example.com",
15701
- required: true,
15702
- columnSpan: 12
15703
- },
15704
- {
15705
- name: "phone",
15706
- type: "tel",
15707
- label: "Phone",
15708
- placeholder: "+1 (555) 000-0000",
15709
- required: true,
15710
- columnSpan: 12
15711
- },
15712
- {
15713
- name: "message",
15714
- type: "textarea",
15715
- label: "Message",
15716
- placeholder: "Your message...",
15717
- required: true,
15718
- rows: 4,
15719
- columnSpan: 12
15720
- }
15721
- ];
15722
- function ContactEvent({
15723
- heading,
15724
- description,
15725
- buttonText = "Submit",
15726
- buttonIcon,
15727
- actions,
15728
- actionsSlot,
15729
- formFields = DEFAULT_FORM_FIELDS10,
15730
- successMessage = "Thank you! Your message has been sent successfully.",
15731
- className,
15732
- containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
15733
- headerClassName,
15734
- headingClassName,
15735
- descriptionClassName,
15736
- cardClassName,
15737
- cardContentClassName,
15738
- formClassName,
15739
- submitClassName,
15740
- successMessageClassName,
15741
- errorMessageClassName,
15742
- background = "white",
15743
- spacing = "xl",
15744
- pattern,
15745
- patternOpacity = 0.1,
15575
+ patternOpacity = 0.1,
15746
15576
  formConfig,
15747
15577
  onSubmit,
15748
15578
  onSuccess,
@@ -15952,7 +15782,7 @@ function AccordionContent({
15952
15782
  }
15953
15783
  );
15954
15784
  }
15955
- var DEFAULT_STYLE_RULES = {
15785
+ var DEFAULT_STYLE_RULES4 = {
15956
15786
  formContainer: "",
15957
15787
  fieldsContainer: "",
15958
15788
  fieldClassName: "",
@@ -16023,23 +15853,6 @@ function ContactFaq({
16023
15853
  pattern,
16024
15854
  patternOpacity
16025
15855
  }) {
16026
- const formStyleRules = React25__namespace.useMemo(() => {
16027
- return {
16028
- formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES.formContainer,
16029
- fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES.fieldsContainer,
16030
- fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES.fieldClassName,
16031
- formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES.formClassName,
16032
- successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES.successMessageClassName,
16033
- errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES.errorMessageClassName
16034
- };
16035
- }, [formEngineSetup?.formLayoutSettings?.styleRules]);
16036
- const formFields = React25__namespace.useMemo(() => {
16037
- if (formEngineSetup && formEngineSetup?.fields && formEngineSetup?.fields?.length > 0) {
16038
- return formEngineSetup.fields;
16039
- } else {
16040
- return DEFAULT_FORM_FIELDS11;
16041
- }
16042
- }, [formEngineSetup?.fields]);
16043
15856
  const hasFaqItems = itemsSlot || items && items.length > 0;
16044
15857
  const faqContent = React25.useMemo(() => {
16045
15858
  if (itemsSlot) return itemsSlot;
@@ -16133,24 +15946,26 @@ function ContactFaq({
16133
15946
  ),
16134
15947
  children: formHeading
16135
15948
  }
16136
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: formHeadingClassName, children: formHeading })),
15949
+ ) : formHeading),
16137
15950
  formEngineSetup ? /* @__PURE__ */ jsxRuntime.jsx(
16138
15951
  integration.FormEngine,
16139
15952
  {
16140
- ...formEngineSetup,
16141
- formLayoutSettings: {
16142
- ...formEngineSetup.formLayoutSettings,
16143
- formLayout: "standard",
16144
- submitButtonSetup: {
16145
- ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
16146
- submitLabel: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
16147
- buttonIcon,
16148
- buttonText
16149
- ] })
16150
- },
16151
- styleRules: formStyleRules
15953
+ formEngineSetup: {
15954
+ ...formEngineSetup,
15955
+ formLayoutSettings: {
15956
+ ...formEngineSetup.formLayoutSettings,
15957
+ formLayout: "standard",
15958
+ submitButtonSetup: {
15959
+ ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
15960
+ submitLabel: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
15961
+ buttonIcon,
15962
+ buttonText
15963
+ ] })
15964
+ }
15965
+ }
16152
15966
  },
16153
- fields: formFields
15967
+ defaultFields: DEFAULT_FORM_FIELDS11,
15968
+ defaultStyleRules: DEFAULT_STYLE_RULES4
16154
15969
  }
16155
15970
  ) : null
16156
15971
  ] }) }),
@@ -16822,6 +16637,12 @@ function ContactGuest({
16822
16637
  }
16823
16638
  );
16824
16639
  }
16640
+ var DEFAULT_STYLE_RULES5 = {
16641
+ formContainer: "",
16642
+ fieldsContainer: "",
16643
+ fieldClassName: "",
16644
+ formClassName: "space-y-4"
16645
+ };
16825
16646
  var DEFAULT_FORM_FIELDS15 = [
16826
16647
  {
16827
16648
  name: "first_name",
@@ -16866,207 +16687,172 @@ var DEFAULT_FORM_FIELDS15 = [
16866
16687
  }
16867
16688
  ];
16868
16689
  function ContactImage({
16690
+ eyebrow,
16869
16691
  heading,
16870
16692
  description,
16871
- buttonText = "Submit",
16693
+ buttonText = "Send Message",
16872
16694
  buttonIcon,
16873
- actions,
16874
- actionsSlot,
16875
- formFields = DEFAULT_FORM_FIELDS15,
16876
- successMessage = "Thank you! Your message has been sent successfully.",
16695
+ image,
16696
+ contactOverlays,
16697
+ contactOverlaysSlot,
16698
+ formEngineSetup,
16699
+ className,
16700
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
16701
+ contentClassName,
16702
+ eyebrowClassName,
16877
16703
  headingClassName,
16878
16704
  descriptionClassName,
16879
- cardClassName,
16880
- cardContentClassName,
16881
- formClassName,
16882
- submitClassName,
16883
- successMessageClassName,
16884
- errorMessageClassName,
16885
- backgroundImage,
16705
+ imageClassName,
16706
+ contactOverlaysClassName,
16886
16707
  background,
16887
- optixFlowConfig,
16888
- spacing = "none",
16889
- className,
16890
- containerClassName = "px-0 sm:px-0 lg:px-0 max-w-full relative z-10 h-screen w-screen flex justify-center items-center",
16891
- contentClassName = "",
16708
+ spacing = "py-16 md:py-32",
16892
16709
  pattern,
16893
- patternOpacity = 0.1,
16894
- formConfig,
16895
- onSubmit,
16896
- onSuccess,
16897
- onError
16710
+ patternOpacity,
16711
+ optixFlowConfig
16898
16712
  }) {
16899
- const {
16900
- uploadTokens,
16901
- uploadProgress,
16902
- isUploading,
16903
- uploadFiles,
16904
- removeFile,
16905
- resetUpload
16906
- } = integration.useFileUpload({ onError });
16907
- const { form, submissionError, formMethod, resetSubmissionState } = integration.useContactForm({
16908
- formFields,
16909
- formConfig,
16910
- onSubmit,
16911
- onSuccess: (data) => {
16912
- resetUpload();
16913
- onSuccess?.(data);
16914
- },
16915
- onError,
16916
- resetOnSuccess: formConfig?.resetOnSuccess !== false,
16917
- uploadTokens
16918
- });
16919
- const actionsContent = React25.useMemo(() => {
16920
- if (actionsSlot) return actionsSlot;
16921
- if (actions && actions.length > 0) {
16922
- return actions.map((action, index) => {
16923
- const {
16924
- label,
16925
- icon,
16926
- iconAfter,
16927
- children,
16928
- className: actionClassName,
16929
- ...pressableProps
16930
- } = action;
16713
+ const contactOverlaysContent = React25__namespace.useMemo(() => {
16714
+ if (contactOverlaysSlot) return contactOverlaysSlot;
16715
+ if (!contactOverlays || contactOverlays.length === 0) return null;
16716
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-col gap-3", contactOverlaysClassName), children: contactOverlays.map((item, index) => {
16717
+ const content = /* @__PURE__ */ jsxRuntime.jsxs(
16718
+ "div",
16719
+ {
16720
+ className: cn(
16721
+ "rounded-2xl border border-white/10 bg-foreground/80 p-4 backdrop-blur-sm",
16722
+ item.className
16723
+ ),
16724
+ children: [
16725
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
16726
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-fit p-2 items-center justify-center rounded-full bg-primary text-primary-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: item.icon, size: 18 }) }),
16727
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
16728
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-bold uppercase tracking-[0.15em] text-background/70", children: item.label }),
16729
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-semibold text-background", children: item.title })
16730
+ ] })
16731
+ ] }),
16732
+ item.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-background/80", children: item.description })
16733
+ ]
16734
+ }
16735
+ );
16736
+ if (item.href) {
16931
16737
  return /* @__PURE__ */ jsxRuntime.jsx(
16932
- Pressable,
16738
+ "a",
16933
16739
  {
16934
- asButton: true,
16935
- className: actionClassName,
16936
- ...pressableProps,
16937
- children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
16938
- icon,
16939
- label,
16940
- iconAfter
16941
- ] })
16740
+ href: item.href,
16741
+ className: "block transition-transform hover:scale-[1.02]",
16742
+ children: content
16942
16743
  },
16943
16744
  index
16944
16745
  );
16945
- });
16946
- }
16947
- return null;
16948
- }, [actionsSlot, actions]);
16949
- const renderBackground = React25.useMemo(() => {
16950
- if (!backgroundImage) return null;
16951
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0", children: [
16952
- /* @__PURE__ */ jsxRuntime.jsx(
16953
- img.Img,
16954
- {
16955
- src: backgroundImage,
16956
- alt: "Full screen background image",
16957
- className: "h-full w-full object-cover",
16958
- loading: "eager",
16959
- optixFlowConfig
16960
- }
16961
- ),
16962
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-linear-to-b from-black/80 via-black/65 to-black/20" })
16963
- ] });
16964
- }, [backgroundImage, optixFlowConfig]);
16965
- return /* @__PURE__ */ jsxRuntime.jsxs(
16746
+ }
16747
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { children: content }, index);
16748
+ }) });
16749
+ }, [contactOverlaysSlot, contactOverlays, contactOverlaysClassName]);
16750
+ return /* @__PURE__ */ jsxRuntime.jsx(
16966
16751
  Section,
16967
16752
  {
16968
16753
  background,
16969
16754
  spacing,
16755
+ className,
16756
+ containerClassName,
16970
16757
  pattern,
16971
16758
  patternOpacity,
16972
- className: cn(
16973
- "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",
16974
- className
16975
- ),
16976
- containerClassName,
16977
- children: [
16978
- renderBackground,
16979
- /* @__PURE__ */ jsxRuntime.jsx(
16980
- "div",
16981
- {
16982
- className: cn(
16983
- "flex flex-col gap-4 md:gap-6 px-6 pt-28 pb-6 md:pt-0 md:pb-0",
16984
- "relative z-30 m-auto max-w-full md:max-w-md flex-col items-center justify-center text-center",
16985
- contentClassName
16986
- ),
16987
- children: /* @__PURE__ */ jsxRuntime.jsx(Card, { className: cn("mx-auto max-w-xl", cardClassName), children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: cn("p-6 lg:p-8", cardContentClassName), children: [
16988
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
16989
- "h2",
16990
- {
16991
- className: cn(
16992
- "text-5xl md:text-6xl lg:text-7xl text-card-foreground text-shadow-2xl font-semibold",
16993
- headingClassName
16994
- ),
16995
- children: heading
16996
- }
16997
- ) : heading),
16998
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
16999
- "p",
17000
- {
17001
- className: cn(
17002
- "text-center text-base text-balance text-card-foreground text-shadow-2xl",
17003
- descriptionClassName
16759
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
16760
+ "div",
16761
+ {
16762
+ className: cn(
16763
+ "grid grid-cols-1 items-center gap-12 lg:grid-cols-2",
16764
+ contentClassName
16765
+ ),
16766
+ children: [
16767
+ image && /* @__PURE__ */ jsxRuntime.jsx(
16768
+ framerMotion.motion.div,
16769
+ {
16770
+ initial: { opacity: 0, x: -20 },
16771
+ whileInView: { opacity: 1, x: 0 },
16772
+ viewport: { once: true, margin: "-50px" },
16773
+ transition: { duration: 0.5 },
16774
+ className: "order-2 lg:order-1",
16775
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative overflow-hidden rounded-3xl border border-white/10 shadow-2xl", children: [
16776
+ /* @__PURE__ */ jsxRuntime.jsx(
16777
+ img.Img,
16778
+ {
16779
+ src: image.src,
16780
+ alt: image.alt,
16781
+ className: cn("h-full w-full object-cover", imageClassName),
16782
+ optixFlowConfig
16783
+ }
17004
16784
  ),
17005
- children: description
17006
- }
17007
- ) : description),
17008
- /* @__PURE__ */ jsxRuntime.jsxs(
17009
- forms.Form,
17010
- {
17011
- form,
17012
- notificationConfig: {
17013
- submissionError,
17014
- successMessage
17015
- },
17016
- styleConfig: {
17017
- formClassName: cn("space-y-4", formClassName),
17018
- successMessageClassName,
17019
- errorMessageClassName
17020
- },
17021
- formConfig: {
17022
- endpoint: formConfig?.endpoint,
17023
- method: formMethod,
17024
- submissionConfig: formConfig?.submissionConfig
17025
- },
17026
- onNewSubmission: () => {
17027
- resetUpload();
17028
- resetSubmissionState();
17029
- },
17030
- children: [
17031
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-12 gap-6", children: formFields.map((field) => /* @__PURE__ */ jsxRuntime.jsx(
17032
- "div",
17033
- {
17034
- className: integration.getColumnSpanClass(field.columnSpan),
17035
- children: /* @__PURE__ */ jsxRuntime.jsx(
17036
- integration.DynamicFormField,
17037
- {
17038
- field,
17039
- uploadProgress,
17040
- onFileUpload: uploadFiles,
17041
- onFileRemove: removeFile,
17042
- isUploading
16785
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-linear-to-tr from-black/70 via-transparent to-transparent" }),
16786
+ contactOverlaysContent && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-6 left-6 right-6", children: contactOverlaysContent })
16787
+ ] })
16788
+ }
16789
+ ),
16790
+ /* @__PURE__ */ jsxRuntime.jsxs(
16791
+ framerMotion.motion.div,
16792
+ {
16793
+ initial: { opacity: 0, x: 20 },
16794
+ whileInView: { opacity: 1, x: 0 },
16795
+ viewport: { once: true, margin: "-50px" },
16796
+ transition: { duration: 0.5 },
16797
+ className: "order-1 lg:order-2",
16798
+ children: [
16799
+ eyebrow && (typeof eyebrow === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
16800
+ "p",
16801
+ {
16802
+ className: cn(
16803
+ "text-sm font-semibold uppercase tracking-[0.2em] text-muted-foreground",
16804
+ eyebrowClassName
16805
+ ),
16806
+ children: eyebrow
16807
+ }
16808
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: eyebrowClassName, children: eyebrow })),
16809
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
16810
+ "h2",
16811
+ {
16812
+ className: cn(
16813
+ "mt-2 text-3xl font-bold md:text-4xl lg:text-5xl",
16814
+ headingClassName
16815
+ ),
16816
+ children: heading
16817
+ }
16818
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-2", headingClassName), children: heading })),
16819
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
16820
+ "p",
16821
+ {
16822
+ className: cn(
16823
+ "mt-4 text-lg text-muted-foreground",
16824
+ descriptionClassName
16825
+ ),
16826
+ children: description
16827
+ }
16828
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-4", descriptionClassName), children: description })),
16829
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-8", children: formEngineSetup ? /* @__PURE__ */ jsxRuntime.jsx(
16830
+ integration.FormEngine,
16831
+ {
16832
+ formEngineSetup: {
16833
+ ...formEngineSetup,
16834
+ formLayoutSettings: {
16835
+ ...formEngineSetup.formLayoutSettings,
16836
+ formLayout: "standard",
16837
+ submitButtonSetup: {
16838
+ ...formEngineSetup.formLayoutSettings?.submitButtonSetup,
16839
+ submitLabel: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
16840
+ buttonIcon,
16841
+ buttonText
16842
+ ] })
17043
16843
  }
17044
- )
16844
+ }
17045
16845
  },
17046
- field.name
17047
- )) }),
17048
- actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxRuntime.jsxs(
17049
- Pressable,
17050
- {
17051
- componentType: "button",
17052
- type: "submit",
17053
- className: cn("w-full", submitClassName),
17054
- size: "lg",
17055
- asButton: true,
17056
- disabled: form.isSubmitting,
17057
- children: [
17058
- buttonIcon,
17059
- buttonText
17060
- ]
17061
- }
17062
- )
17063
- ]
17064
- }
17065
- )
17066
- ] }) })
17067
- }
17068
- )
17069
- ]
16846
+ defaultFields: DEFAULT_FORM_FIELDS15,
16847
+ defaultStyleRules: DEFAULT_STYLE_RULES5
16848
+ }
16849
+ ) : null })
16850
+ ]
16851
+ }
16852
+ )
16853
+ ]
16854
+ }
16855
+ )
17070
16856
  }
17071
16857
  );
17072
16858
  }
@@ -21847,7 +21633,7 @@ function ContactTenant({
21847
21633
  }
21848
21634
  );
21849
21635
  }
21850
- var DEFAULT_STYLE_RULES2 = {
21636
+ var DEFAULT_STYLE_RULES6 = {
21851
21637
  formContainer: "",
21852
21638
  fieldsContainer: "",
21853
21639
  fieldClassName: "",
@@ -21912,23 +21698,6 @@ function ContactVendor({
21912
21698
  pattern,
21913
21699
  patternOpacity = 0.1
21914
21700
  }) {
21915
- const formStyleRules = React25__namespace.useMemo(() => {
21916
- return {
21917
- formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES2.formContainer,
21918
- fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES2.fieldsContainer,
21919
- fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES2.fieldClassName,
21920
- formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES2.formClassName,
21921
- successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES2.successMessageClassName,
21922
- errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES2.errorMessageClassName
21923
- };
21924
- }, [formEngineSetup?.formLayoutSettings?.styleRules]);
21925
- const formFields = React25__namespace.useMemo(() => {
21926
- if (formEngineSetup && formEngineSetup?.fields && formEngineSetup?.fields?.length > 0) {
21927
- return formEngineSetup.fields;
21928
- } else {
21929
- return DEFAULT_FORM_FIELDS38;
21930
- }
21931
- }, [formEngineSetup?.fields]);
21932
21701
  return /* @__PURE__ */ jsxRuntime.jsx(
21933
21702
  Section,
21934
21703
  {
@@ -21964,12 +21733,9 @@ function ContactVendor({
21964
21733
  /* @__PURE__ */ jsxRuntime.jsx(Card, { className: cn("mx-auto max-w-xl", cardClassName), children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: cn("p-6 lg:p-8", cardContentClassName), children: formEngineSetup ? /* @__PURE__ */ jsxRuntime.jsx(
21965
21734
  integration.FormEngine,
21966
21735
  {
21967
- ...formEngineSetup,
21968
- formLayoutSettings: {
21969
- ...formEngineSetup.formLayoutSettings,
21970
- styleRules: formStyleRules
21971
- },
21972
- fields: formFields
21736
+ formEngineSetup,
21737
+ defaultFields: DEFAULT_FORM_FIELDS38,
21738
+ defaultStyleRules: DEFAULT_STYLE_RULES6
21973
21739
  }
21974
21740
  ) : null }) })
21975
21741
  ] })
@@ -31304,61 +31070,49 @@ function TeamSocialGrid({
31304
31070
  }
31305
31071
  ),
31306
31072
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-center font-medium", memberNameClassName), children: member.name }),
31307
- /* @__PURE__ */ jsxRuntime.jsx(
31308
- "p",
31309
- {
31310
- className: cn(
31311
- "text-center",
31312
- getTextColor(background, "muted"),
31313
- memberRoleClassName
31314
- ),
31315
- children: member.role
31316
- }
31317
- ),
31318
- member.social && /* @__PURE__ */ jsxRuntime.jsxs(
31319
- "div",
31320
- {
31321
- className: cn(
31322
- "mt-2 flex gap-2",
31323
- getTextColor(background, "muted"),
31324
- socialLinksClassName
31325
- ),
31326
- children: [
31327
- member.social.github && /* @__PURE__ */ jsxRuntime.jsx(
31328
- Pressable,
31329
- {
31330
- href: member.social.github,
31331
- className: "transition-colors",
31332
- "aria-label": `${member.name}'s GitHub`,
31333
- children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/github", size: 20 })
31334
- }
31335
- ),
31336
- member.social.twitter && /* @__PURE__ */ jsxRuntime.jsx(
31337
- Pressable,
31338
- {
31339
- href: member.social.twitter,
31340
- className: "transition-colors",
31341
- "aria-label": `${member.name}'s Twitter`,
31342
- children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/twitter", size: 20 })
31343
- }
31344
- ),
31345
- member.social.linkedin && /* @__PURE__ */ jsxRuntime.jsx(
31346
- Pressable,
31347
- {
31348
- href: member.social.linkedin,
31349
- className: "transition-colors",
31350
- "aria-label": `${member.name}'s LinkedIn`,
31351
- children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/linkedin", size: 20 })
31352
- }
31353
- )
31354
- ]
31355
- }
31356
- )
31073
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-center", memberRoleClassName), children: member.role }),
31074
+ member.social && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mt-2 flex gap-2", socialLinksClassName), children: [
31075
+ member.social.github && /* @__PURE__ */ jsxRuntime.jsx(
31076
+ Pressable,
31077
+ {
31078
+ href: member.social.github,
31079
+ className: "transition-colors",
31080
+ "aria-label": `${member.name}'s GitHub`,
31081
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/github", size: 20 })
31082
+ }
31083
+ ),
31084
+ member.social.twitter && /* @__PURE__ */ jsxRuntime.jsx(
31085
+ Pressable,
31086
+ {
31087
+ href: member.social.twitter,
31088
+ className: "transition-colors",
31089
+ "aria-label": `${member.name}'s Twitter`,
31090
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/twitter", size: 20 })
31091
+ }
31092
+ ),
31093
+ member.social.linkedin && /* @__PURE__ */ jsxRuntime.jsx(
31094
+ Pressable,
31095
+ {
31096
+ href: member.social.linkedin,
31097
+ className: "transition-colors",
31098
+ "aria-label": `${member.name}'s LinkedIn`,
31099
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/linkedin", size: 20 })
31100
+ }
31101
+ )
31102
+ ] })
31357
31103
  ]
31358
31104
  },
31359
31105
  member.id
31360
31106
  ));
31361
- }, [membersSlot, members, memberCardClassName, avatarClassName, memberNameClassName, memberRoleClassName, socialLinksClassName]);
31107
+ }, [
31108
+ membersSlot,
31109
+ members,
31110
+ memberCardClassName,
31111
+ avatarClassName,
31112
+ memberNameClassName,
31113
+ memberRoleClassName,
31114
+ socialLinksClassName
31115
+ ]);
31362
31116
  return /* @__PURE__ */ jsxRuntime.jsxs(
31363
31117
  Section,
31364
31118
  {
@@ -31389,11 +31143,7 @@ function TeamSocialGrid({
31389
31143
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
31390
31144
  "p",
31391
31145
  {
31392
- className: cn(
31393
- "mb-8 max-w-3xl lg:text-xl",
31394
- getTextColor(background, "muted"),
31395
- descriptionClassName
31396
- ),
31146
+ className: cn("mb-8 max-w-3xl lg:text-xl", descriptionClassName),
31397
31147
  children: description
31398
31148
  }
31399
31149
  ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
@@ -51368,7 +51118,7 @@ function HeroImageLeftContent({
51368
51118
  }
51369
51119
  );
51370
51120
  }
51371
- var DEFAULT_STYLE_RULES3 = {
51121
+ var DEFAULT_STYLE_RULES7 = {
51372
51122
  formContainer: "",
51373
51123
  fieldsContainer: "",
51374
51124
  fieldClassName: "",
@@ -51439,23 +51189,6 @@ function HeroImageSlider({
51439
51189
  privacyNoticeClassName,
51440
51190
  gridClassName
51441
51191
  }) {
51442
- const formStyleRules = React25__namespace.useMemo(() => {
51443
- return {
51444
- formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES3.formContainer,
51445
- fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES3.fieldsContainer,
51446
- fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES3.fieldClassName,
51447
- formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES3.formClassName,
51448
- successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES3.successMessageClassName,
51449
- errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES3.errorMessageClassName
51450
- };
51451
- }, [formEngineSetup?.formLayoutSettings?.styleRules]);
51452
- const formFields = React25__namespace.useMemo(() => {
51453
- if (formEngineSetup && formEngineSetup?.fields && formEngineSetup?.fields?.length > 0) {
51454
- return formEngineSetup.fields;
51455
- } else {
51456
- return DEFAULT_FORM_FIELDS42;
51457
- }
51458
- }, [formEngineSetup?.fields]);
51459
51192
  const renderActions = React25.useMemo(() => {
51460
51193
  if (actionsSlot) return actionsSlot;
51461
51194
  if (!actions || actions.length === 0) return null;
@@ -51614,20 +51347,22 @@ function HeroImageSlider({
51614
51347
  /* @__PURE__ */ jsxRuntime.jsx(
51615
51348
  integration.FormEngine,
51616
51349
  {
51617
- ...formEngineSetup,
51618
- formLayoutSettings: {
51619
- ...formEngineSetup?.formLayoutSettings,
51620
- formLayout: "standard",
51621
- submitButtonSetup: {
51622
- ...formEngineSetup?.formLayoutSettings?.submitButtonSetup,
51623
- submitLabel: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
51624
- buttonIcon,
51625
- buttonText
51626
- ] })
51627
- },
51628
- styleRules: formStyleRules
51350
+ formEngineSetup: {
51351
+ ...formEngineSetup,
51352
+ formLayoutSettings: {
51353
+ ...formEngineSetup?.formLayoutSettings,
51354
+ formLayout: "standard",
51355
+ submitButtonSetup: {
51356
+ ...formEngineSetup?.formLayoutSettings?.submitButtonSetup,
51357
+ submitLabel: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
51358
+ buttonIcon,
51359
+ buttonText
51360
+ ] })
51361
+ }
51362
+ }
51629
51363
  },
51630
- fields: formFields
51364
+ defaultFields: DEFAULT_FORM_FIELDS42,
51365
+ defaultStyleRules: DEFAULT_STYLE_RULES7
51631
51366
  }
51632
51367
  ),
51633
51368
  privacyNotice && /* @__PURE__ */ jsxRuntime.jsx(
@@ -61466,7 +61201,7 @@ function HeroPricingComparison({
61466
61201
  }
61467
61202
  );
61468
61203
  }
61469
- var DEFAULT_STYLE_RULES4 = {
61204
+ var DEFAULT_STYLE_RULES8 = {
61470
61205
  formContainer: "mt-10 flex justify-center items-center w-full max-w-md flex-col gap-4 sm:flex-row",
61471
61206
  fieldsContainer: "",
61472
61207
  fieldClassName: "",
@@ -61504,23 +61239,6 @@ function HeroNewsletterMinimal({
61504
61239
  disclaimerClassName,
61505
61240
  statsClassName
61506
61241
  }) {
61507
- const formStyleRules = React25__namespace.useMemo(() => {
61508
- return {
61509
- formContainer: formEngineSetup?.formLayoutSettings?.styleRules?.formContainer ?? DEFAULT_STYLE_RULES4.formContainer,
61510
- fieldsContainer: formEngineSetup?.formLayoutSettings?.styleRules?.fieldsContainer ?? DEFAULT_STYLE_RULES4.fieldsContainer,
61511
- fieldClassName: formEngineSetup?.formLayoutSettings?.styleRules?.fieldClassName ?? DEFAULT_STYLE_RULES4.fieldClassName,
61512
- formClassName: formEngineSetup?.formLayoutSettings?.styleRules?.formClassName ?? DEFAULT_STYLE_RULES4.formClassName,
61513
- successMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.successMessageClassName ?? DEFAULT_STYLE_RULES4.successMessageClassName,
61514
- errorMessageClassName: formEngineSetup?.formLayoutSettings?.styleRules?.errorMessageClassName ?? DEFAULT_STYLE_RULES4.errorMessageClassName
61515
- };
61516
- }, [formEngineSetup?.formLayoutSettings?.styleRules]);
61517
- const formFields = React25__namespace.useMemo(() => {
61518
- if (formEngineSetup && formEngineSetup?.fields && formEngineSetup?.fields?.length > 0) {
61519
- return formEngineSetup.fields;
61520
- } else {
61521
- return DEFAULT_FORM_FIELDS45;
61522
- }
61523
- }, [formEngineSetup?.fields]);
61524
61242
  const renderStats = React25__namespace.useMemo(() => {
61525
61243
  if (statsSlot) return statsSlot;
61526
61244
  if (!stats || stats.length === 0) return null;
@@ -61559,22 +61277,24 @@ function HeroNewsletterMinimal({
61559
61277
  /* @__PURE__ */ jsxRuntime.jsx(
61560
61278
  integration.FormEngine,
61561
61279
  {
61562
- ...formEngineSetup,
61563
- formLayoutSettings: {
61564
- ...formEngineSetup.formLayoutSettings,
61565
- formLayout: "button-group",
61566
- buttonGroupSetup: {
61567
- ...formEngineSetup.formLayoutSettings?.buttonGroupSetup,
61568
- size: "lg",
61569
- submitLabel: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
61570
- action.label,
61571
- action.iconAfter
61572
- ] }),
61573
- submitVariant: action.variant || "default"
61574
- },
61575
- styleRules: formStyleRules
61280
+ formEngineSetup: {
61281
+ ...formEngineSetup,
61282
+ formLayoutSettings: {
61283
+ ...formEngineSetup.formLayoutSettings,
61284
+ formLayout: "button-group",
61285
+ buttonGroupSetup: {
61286
+ ...formEngineSetup.formLayoutSettings?.buttonGroupSetup,
61287
+ size: "lg",
61288
+ submitLabel: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
61289
+ action.label,
61290
+ action.iconAfter
61291
+ ] }),
61292
+ submitVariant: action.variant || "default"
61293
+ }
61294
+ }
61576
61295
  },
61577
- fields: formFields
61296
+ defaultFields: DEFAULT_FORM_FIELDS45,
61297
+ defaultStyleRules: DEFAULT_STYLE_RULES8
61578
61298
  }
61579
61299
  ),
61580
61300
  helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm mt-2 text-center"), children: helperText }) : helperText)
@@ -61583,8 +61303,6 @@ function HeroNewsletterMinimal({
61583
61303
  formSlot,
61584
61304
  formEngineSetup,
61585
61305
  buttonAction,
61586
- formFields,
61587
- formStyleRules,
61588
61306
  helperText
61589
61307
  ]);
61590
61308
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -85518,7 +85236,7 @@ function ListSearchableGrid({
85518
85236
  }
85519
85237
  );
85520
85238
  }
85521
- var { useMemo: useMemo445 } = React25__namespace;
85239
+ var { useMemo: useMemo441 } = React25__namespace;
85522
85240
  function OfferModalNewsletterDiscount({
85523
85241
  title,
85524
85242
  emailPlaceholder,
@@ -85586,7 +85304,7 @@ function OfferModalNewsletterDiscount({
85586
85304
  });
85587
85305
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
85588
85306
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
85589
- const renderCloseButton = useMemo445(() => {
85307
+ const renderCloseButton = useMemo441(() => {
85590
85308
  if (closeButtonSlot) return closeButtonSlot;
85591
85309
  if (!closeButtonText) return null;
85592
85310
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute end-1.5 top-1.5", children: /* @__PURE__ */ jsxRuntime.jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -85600,12 +85318,12 @@ function OfferModalNewsletterDiscount({
85600
85318
  }
85601
85319
  ) }) });
85602
85320
  }, [closeButtonSlot, closeButtonText, closeClassName]);
85603
- const renderHeader = useMemo445(() => {
85321
+ const renderHeader = useMemo441(() => {
85604
85322
  if (headerSlot) return headerSlot;
85605
85323
  if (!title) return null;
85606
85324
  return /* @__PURE__ */ jsxRuntime.jsx(DialogHeader, { className: headerClassName, children: typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { className: cn("text-start font-serif text-2xl font-normal leading-snug", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { className: cn("text-start font-serif text-2xl font-normal leading-snug", titleClassName), children: title }) });
85607
85325
  }, [headerSlot, title, headerClassName, titleClassName]);
85608
- const renderForm = useMemo445(() => {
85326
+ const renderForm = useMemo441(() => {
85609
85327
  if (formSlot) return formSlot;
85610
85328
  return /* @__PURE__ */ jsxRuntime.jsxs(
85611
85329
  forms.Form,
@@ -85667,7 +85385,7 @@ function OfferModalNewsletterDiscount({
85667
85385
  }
85668
85386
  ) });
85669
85387
  }
85670
- var { useMemo: useMemo446 } = React25__namespace;
85388
+ var { useMemo: useMemo442 } = React25__namespace;
85671
85389
  function OfferModalMembershipImage({
85672
85390
  overline,
85673
85391
  title,
@@ -85744,7 +85462,7 @@ function OfferModalMembershipImage({
85744
85462
  });
85745
85463
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
85746
85464
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
85747
- const renderImage = useMemo446(() => {
85465
+ const renderImage = useMemo442(() => {
85748
85466
  if (imageSlot) return imageSlot;
85749
85467
  if (!image) return null;
85750
85468
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("max-h-[290px] h-full overflow-hidden max-lg:hidden", imageWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -85757,7 +85475,7 @@ function OfferModalMembershipImage({
85757
85475
  }
85758
85476
  ) });
85759
85477
  }, [imageSlot, image, imageWrapperClassName, imageClassName, optixFlowConfig]);
85760
- const renderCloseButton = useMemo446(() => {
85478
+ const renderCloseButton = useMemo442(() => {
85761
85479
  if (closeButtonSlot) return closeButtonSlot;
85762
85480
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -end-px -top-px z-10", children: /* @__PURE__ */ jsxRuntime.jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
85763
85481
  Pressable,
@@ -85773,7 +85491,7 @@ function OfferModalMembershipImage({
85773
85491
  }
85774
85492
  ) }) });
85775
85493
  }, [closeButtonSlot, closeClassName]);
85776
- const renderForm = useMemo446(() => {
85494
+ const renderForm = useMemo442(() => {
85777
85495
  if (formSlot) return formSlot;
85778
85496
  return /* @__PURE__ */ jsxRuntime.jsxs(
85779
85497
  forms.Form,
@@ -85836,7 +85554,7 @@ function OfferModalMembershipImage({
85836
85554
  }
85837
85555
  );
85838
85556
  }, [formSlot, form, formConfig, formMethod, emailPlaceholder, inputClassName, submitClassName, buttonText, formClassName]);
85839
- const renderFooter = useMemo446(() => {
85557
+ const renderFooter = useMemo442(() => {
85840
85558
  if (footerSlot) return footerSlot;
85841
85559
  if (!description) return null;
85842
85560
  return /* @__PURE__ */ jsxRuntime.jsx(DialogFooter, { className: footerClassName, children: /* @__PURE__ */ jsxRuntime.jsx(DialogDescription, { className: cn("text-muted-foreground text-center text-xs leading-relaxed", descriptionClassName), children: description }) });
@@ -85956,7 +85674,7 @@ function SheetDescription({
85956
85674
  }
85957
85675
  );
85958
85676
  }
85959
- var { useMemo: useMemo447 } = React25__namespace;
85677
+ var { useMemo: useMemo443 } = React25__namespace;
85960
85678
  function OfferModalSheetNewsletter({
85961
85679
  logo,
85962
85680
  logoSlot,
@@ -86039,7 +85757,7 @@ function OfferModalSheetNewsletter({
86039
85757
  });
86040
85758
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
86041
85759
  const sheetProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
86042
- const renderLogo = useMemo447(() => {
85760
+ const renderLogo = useMemo443(() => {
86043
85761
  if (logoSlot) return logoSlot;
86044
85762
  if (!logo) return null;
86045
85763
  const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
@@ -86053,7 +85771,7 @@ function OfferModalSheetNewsletter({
86053
85771
  }
86054
85772
  );
86055
85773
  }, [logoSlot, logo, logoClassName, optixFlowConfig]);
86056
- const renderHeader = useMemo447(() => {
85774
+ const renderHeader = useMemo443(() => {
86057
85775
  if (headerSlot) return headerSlot;
86058
85776
  return /* @__PURE__ */ jsxRuntime.jsxs(SheetHeader, { className: cn("gap-8 p-0", headerClassName), children: [
86059
85777
  renderLogo,
@@ -86063,7 +85781,7 @@ function OfferModalSheetNewsletter({
86063
85781
  ] })
86064
85782
  ] });
86065
85783
  }, [headerSlot, renderLogo, headerClassName, title, titleClassName, description, descriptionClassName]);
86066
- const renderForm = useMemo447(() => {
85784
+ const renderForm = useMemo443(() => {
86067
85785
  if (formSlot) return formSlot;
86068
85786
  return /* @__PURE__ */ jsxRuntime.jsx(
86069
85787
  forms.Form,
@@ -86111,7 +85829,7 @@ function OfferModalSheetNewsletter({
86111
85829
  }
86112
85830
  );
86113
85831
  }, [formSlot, form, formConfig, formMethod, emailPlaceholder, inputClassName, submitClassName, buttonText, formClassName]);
86114
- const renderLegal = useMemo447(() => {
85832
+ const renderLegal = useMemo443(() => {
86115
85833
  if (legalSlot) return legalSlot;
86116
85834
  if (!termsUrl || !termsText || !privacyUrl || !privacyText) return null;
86117
85835
  return /* @__PURE__ */ jsxRuntime.jsxs("p", { className: cn("text-muted-foreground text-xs", legalClassName), children: [
@@ -86125,7 +85843,7 @@ function OfferModalSheetNewsletter({
86125
85843
  "."
86126
85844
  ] });
86127
85845
  }, [legalSlot, termsUrl, termsText, privacyUrl, privacyText, legalClassName]);
86128
- const renderImage = useMemo447(() => {
85846
+ const renderImage = useMemo443(() => {
86129
85847
  if (imageSlot) return imageSlot;
86130
85848
  if (!image) return null;
86131
85849
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("h-1/2 basis-1/2", imageWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 1, className: "overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -105255,11 +104973,16 @@ var BLOCK_REGISTRY = {
105255
104973
  props: "ContactCardProps",
105256
104974
  exampleUsage: `
105257
104975
  <ContactCard
105258
- heading="Get in Touch"
105259
- description="We'd love to hear from you"
105260
- formHeading="Contact us"
104976
+ heading="Get In Touch"
104977
+ description="We'd love to hear from you. Send us a message and we'll respond as soon as possible."
105261
104978
  buttonText="Send Message"
105262
- formConfig={{ endpoint: "/api/contact", format: "json" }}
104979
+ contactOptions={[
104980
+ { icon: "Phone", info: "+1 (555) 987-6543", href: "tel:+15559876543" },
104981
+ { icon: "Mail", info: "support@example.com", href: "mailto:support@example.com" },
104982
+ { icon: "MapPin", info: "456 Business Ave, New York, NY 10001" },
104983
+ { icon: "Clock", info: "Mon-Fri: 9 AM - 6 PM EST" },
104984
+ ]}
104985
+ formEngineSetup={{ formConfig: { endpoint: "/api/contact", format: "json" } }}
105263
104986
  />
105264
104987
  `.trim()
105265
104988
  },
@@ -105360,7 +105083,7 @@ var BLOCK_REGISTRY = {
105360
105083
  heading="Contact Us"
105361
105084
  description="Any questions or remarks? Just write us a message!"
105362
105085
  buttonText="Send Message"
105363
- formConfig={{ endpoint: "/api/contact", format: "json" }}
105086
+ formEngineSetup={{ formConfig: { endpoint: "/api/contact", format: "json" } }}
105364
105087
  />
105365
105088
  `.trim()
105366
105089
  },
@@ -105411,7 +105134,7 @@ var BLOCK_REGISTRY = {
105411
105134
  heading="Emergency Contact"
105412
105135
  description="We're here to help 24/7"
105413
105136
  buttonText="Submit Emergency Request"
105414
- formConfig={{ endpoint: "/api/emergency", format: "json" }}
105137
+ formEngineSetup={{ formConfig: { endpoint: "/api/emergency", format: "json" } }}
105415
105138
  />
105416
105139
  `.trim()
105417
105140
  },
@@ -105443,7 +105166,16 @@ var BLOCK_REGISTRY = {
105443
105166
  id: "contact-faq",
105444
105167
  name: "Contact FAQ",
105445
105168
  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.",
105446
- semanticTags: ["contact", "faq", "questions", "inquiry", "form", "support", "accordion", "two-column"],
105169
+ semanticTags: [
105170
+ "contact",
105171
+ "faq",
105172
+ "questions",
105173
+ "inquiry",
105174
+ "form",
105175
+ "support",
105176
+ "accordion",
105177
+ "two-column"
105178
+ ],
105447
105179
  category: "contact",
105448
105180
  component: ContactFaq,
105449
105181
  props: "ContactFaqProps",
@@ -105536,17 +105268,29 @@ var BLOCK_REGISTRY = {
105536
105268
  "contact-image": {
105537
105269
  id: "contact-image",
105538
105270
  name: "Contact Image",
105539
- description: "Contact form with image background layout. Features a clean card design with first name, last name, email, phone, and message fields.",
105540
- semanticTags: ["contact", "form", "image", "card", "simple"],
105271
+ 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.",
105272
+ semanticTags: [
105273
+ "contact",
105274
+ "form",
105275
+ "image",
105276
+ "split-layout",
105277
+ "overlay",
105278
+ "modern"
105279
+ ],
105541
105280
  category: "contact",
105542
105281
  component: ContactImage,
105543
105282
  props: "ContactImageProps",
105544
105283
  exampleUsage: `
105545
105284
  <ContactImage
105546
- heading="Get in Touch"
105547
- description="We'd love to hear from you"
105548
- buttonText="Send Message"
105549
- formConfig={{ endpoint: "/api/contact", format: "json" }}
105285
+ eyebrow="Get in Touch"
105286
+ heading="Contact Us"
105287
+ description="We'd love to hear from you."
105288
+ image={{ src: "/office.jpg", alt: "Our office" }}
105289
+ contactOverlays={[
105290
+ { icon: "lucide/phone", label: "Phone", title: "+1 (555) 987-6543", href: "tel:+15559876543" },
105291
+ { icon: "lucide/mail", label: "Email", title: "support@example.com", href: "mailto:support@example.com" },
105292
+ ]}
105293
+ formEngineSetup={{ formConfig: { endpoint: "/api/contact", format: "json" } }}
105550
105294
  />
105551
105295
  `.trim()
105552
105296
  },