@opensite/ui 1.9.8 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contact-demo.cjs +106 -406
- package/dist/contact-demo.d.cts +36 -111
- package/dist/contact-demo.d.ts +36 -111
- package/dist/contact-demo.js +108 -405
- package/dist/contact-emergency.cjs +129 -158
- package/dist/contact-emergency.d.cts +23 -12
- package/dist/contact-emergency.d.ts +23 -12
- package/dist/contact-emergency.js +131 -159
- package/dist/contact-event.cjs +106 -147
- package/dist/contact-event.d.cts +36 -66
- package/dist/contact-event.d.ts +36 -66
- package/dist/contact-event.js +108 -148
- package/dist/contact-feedback.cjs +109 -102
- package/dist/contact-feedback.d.cts +36 -63
- package/dist/contact-feedback.d.ts +36 -63
- package/dist/contact-feedback.js +111 -103
- package/dist/contact-fitness.cjs +107 -148
- package/dist/contact-fitness.d.cts +36 -66
- package/dist/contact-fitness.d.ts +36 -66
- package/dist/contact-fitness.js +109 -149
- package/dist/contact-guest.cjs +107 -148
- package/dist/contact-guest.d.cts +35 -65
- package/dist/contact-guest.d.ts +35 -65
- package/dist/contact-guest.js +109 -149
- package/dist/contact-image.cjs +108 -149
- package/dist/contact-image.d.cts +35 -65
- package/dist/contact-image.d.ts +35 -65
- package/dist/contact-image.js +110 -150
- package/dist/contact-insurance.cjs +107 -148
- package/dist/contact-insurance.d.cts +36 -66
- package/dist/contact-insurance.d.ts +36 -66
- package/dist/contact-insurance.js +109 -149
- package/dist/contact-interview.cjs +106 -147
- package/dist/contact-interview.d.cts +20 -12
- package/dist/contact-interview.d.ts +20 -12
- package/dist/contact-interview.js +108 -148
- package/dist/contact-locations.cjs +106 -147
- package/dist/contact-locations.d.cts +21 -13
- package/dist/contact-locations.d.ts +21 -13
- package/dist/contact-locations.js +108 -148
- package/dist/contact-maintenance.cjs +103 -143
- package/dist/contact-maintenance.d.cts +21 -13
- package/dist/contact-maintenance.d.ts +21 -13
- package/dist/contact-maintenance.js +105 -144
- package/dist/contact-map.cjs +103 -143
- package/dist/contact-map.d.cts +20 -12
- package/dist/contact-map.d.ts +20 -12
- package/dist/contact-map.js +105 -144
- package/dist/contact-minimal.cjs +126 -242
- package/dist/contact-minimal.d.cts +36 -70
- package/dist/contact-minimal.d.ts +36 -70
- package/dist/contact-minimal.js +128 -243
- package/dist/contact-moving.cjs +103 -143
- package/dist/contact-moving.d.cts +20 -12
- package/dist/contact-moving.d.ts +20 -12
- package/dist/contact-moving.js +105 -144
- package/dist/contact-multistep.cjs +104 -144
- package/dist/contact-multistep.d.cts +21 -13
- package/dist/contact-multistep.d.ts +21 -13
- package/dist/contact-multistep.js +106 -145
- package/dist/contact-partnership.cjs +103 -143
- package/dist/contact-partnership.d.cts +19 -11
- package/dist/contact-partnership.d.ts +19 -11
- package/dist/contact-partnership.js +105 -144
- package/dist/contact-press.cjs +144 -150
- package/dist/contact-press.d.cts +21 -13
- package/dist/contact-press.d.ts +21 -13
- package/dist/contact-press.js +146 -151
- package/dist/contact-quote.cjs +144 -150
- package/dist/contact-quote.d.cts +19 -11
- package/dist/contact-quote.d.ts +19 -11
- package/dist/contact-quote.js +146 -151
- package/dist/contact-referral.cjs +144 -150
- package/dist/contact-referral.d.cts +20 -12
- package/dist/contact-referral.d.ts +20 -12
- package/dist/contact-referral.js +146 -151
- package/dist/contact-report.cjs +144 -150
- package/dist/contact-report.d.cts +21 -13
- package/dist/contact-report.d.ts +21 -13
- package/dist/contact-report.js +146 -151
- package/dist/contact-reservation.cjs +144 -150
- package/dist/contact-reservation.d.cts +20 -12
- package/dist/contact-reservation.d.ts +20 -12
- package/dist/contact-reservation.js +146 -151
- package/dist/contact-retreat.cjs +144 -150
- package/dist/contact-retreat.d.cts +21 -13
- package/dist/contact-retreat.d.ts +21 -13
- package/dist/contact-retreat.js +146 -151
- package/dist/contact-rsvp.cjs +144 -150
- package/dist/contact-rsvp.d.cts +20 -12
- package/dist/contact-rsvp.d.ts +20 -12
- package/dist/contact-rsvp.js +146 -151
- package/dist/contact-sales.cjs +131 -146
- package/dist/contact-sales.d.cts +34 -65
- package/dist/contact-sales.d.ts +34 -65
- package/dist/contact-sales.js +133 -147
- package/dist/contact-schedule.cjs +144 -150
- package/dist/contact-schedule.d.cts +20 -12
- package/dist/contact-schedule.d.ts +20 -12
- package/dist/contact-schedule.js +146 -151
- package/dist/contact-sponsorship.cjs +144 -150
- package/dist/contact-sponsorship.d.cts +21 -13
- package/dist/contact-sponsorship.d.ts +21 -13
- package/dist/contact-sponsorship.js +146 -151
- package/dist/contact-support.cjs +147 -120
- package/dist/contact-support.d.cts +21 -12
- package/dist/contact-support.d.ts +21 -12
- package/dist/contact-support.js +149 -121
- package/dist/contact-tenant.cjs +144 -150
- package/dist/contact-tenant.d.cts +20 -12
- package/dist/contact-tenant.d.ts +20 -12
- package/dist/contact-tenant.js +146 -151
- package/dist/contact-vendor.cjs +144 -150
- package/dist/contact-vendor.d.cts +20 -12
- package/dist/contact-vendor.d.ts +20 -12
- package/dist/contact-vendor.js +146 -151
- package/dist/contact-volunteer.cjs +144 -150
- package/dist/contact-volunteer.d.cts +20 -12
- package/dist/contact-volunteer.d.ts +20 -12
- package/dist/contact-volunteer.js +146 -151
- package/dist/contact-warranty.cjs +144 -150
- package/dist/contact-warranty.d.cts +20 -12
- package/dist/contact-warranty.d.ts +20 -12
- package/dist/contact-warranty.js +146 -151
- package/dist/contact-wedding.cjs +144 -150
- package/dist/contact-wedding.d.cts +20 -12
- package/dist/contact-wedding.d.ts +20 -12
- package/dist/contact-wedding.js +146 -151
- package/dist/registry.cjs +5791 -5883
- package/dist/registry.js +4527 -4619
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { PageSpeedFormConfig } from '@page-speed/forms/integration';
|
|
2
|
+
import { FormFieldConfig, PageSpeedFormConfig } from '@page-speed/forms/integration';
|
|
3
3
|
import { f as SectionBackground, g as SectionSpacing, t as PatternName } from './community-initiatives-Bz_A5vLU.cjs';
|
|
4
4
|
import { A as ActionConfig } from './blocks-Cohq4eio.cjs';
|
|
5
5
|
import 'react/jsx-runtime';
|
|
@@ -7,13 +7,6 @@ import 'class-variance-authority';
|
|
|
7
7
|
import './button-variants-lRElsmTc.cjs';
|
|
8
8
|
import 'class-variance-authority/types';
|
|
9
9
|
|
|
10
|
-
interface ContactLocationsFormValues {
|
|
11
|
-
first_name: string;
|
|
12
|
-
last_name: string;
|
|
13
|
-
email: string;
|
|
14
|
-
phone: string;
|
|
15
|
-
message: string;
|
|
16
|
-
}
|
|
17
10
|
interface ContactLocationsProps {
|
|
18
11
|
/** Main heading text */
|
|
19
12
|
heading?: React.ReactNode;
|
|
@@ -27,6 +20,16 @@ interface ContactLocationsProps {
|
|
|
27
20
|
actions?: ActionConfig[];
|
|
28
21
|
/** Custom slot for rendering actions (overrides actions array) */
|
|
29
22
|
actionsSlot?: React.ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* Array of form field configurations
|
|
25
|
+
* If not provided, defaults to: first_name, last_name, email, phone, message
|
|
26
|
+
*/
|
|
27
|
+
formFields?: FormFieldConfig[];
|
|
28
|
+
/**
|
|
29
|
+
* Success message to display after form submission
|
|
30
|
+
* @default "Thank you! Your message has been sent successfully."
|
|
31
|
+
*/
|
|
32
|
+
successMessage?: React.ReactNode;
|
|
30
33
|
/** Additional CSS classes for the section */
|
|
31
34
|
className?: string;
|
|
32
35
|
/** Additional CSS classes for the container */
|
|
@@ -44,7 +47,12 @@ interface ContactLocationsProps {
|
|
|
44
47
|
/** Additional CSS classes for the form */
|
|
45
48
|
formClassName?: string;
|
|
46
49
|
/** Additional CSS classes for the submit button */
|
|
47
|
-
submitClassName?: string;
|
|
50
|
+
submitClassName?: string;
|
|
51
|
+
/** Additional CSS classes for the success message */
|
|
52
|
+
successMessageClassName?: string;
|
|
53
|
+
/** Additional CSS classes for the error message */
|
|
54
|
+
errorMessageClassName?: string;
|
|
55
|
+
/**
|
|
48
56
|
* Background style for the section
|
|
49
57
|
*/
|
|
50
58
|
background?: SectionBackground;
|
|
@@ -63,23 +71,23 @@ interface ContactLocationsProps {
|
|
|
63
71
|
/** Form configuration for PageSpeed forms */
|
|
64
72
|
formConfig?: PageSpeedFormConfig;
|
|
65
73
|
/** Custom submit handler */
|
|
66
|
-
onSubmit?: (values:
|
|
74
|
+
onSubmit?: (values: Record<string, any>) => void | Promise<void>;
|
|
67
75
|
/** Success callback */
|
|
68
76
|
onSuccess?: (data: unknown) => void;
|
|
69
77
|
/** Error callback */
|
|
70
78
|
onError?: (error: Error) => void;
|
|
71
79
|
}
|
|
72
80
|
/**
|
|
73
|
-
* ContactLocations - Contact form with
|
|
81
|
+
* ContactLocations - Contact form with flexible field configuration
|
|
74
82
|
*
|
|
75
83
|
* @example
|
|
76
84
|
* ```tsx
|
|
77
85
|
* <ContactLocations
|
|
78
|
-
* heading="
|
|
86
|
+
* heading="Contact Location"
|
|
79
87
|
* formConfig={{ endpoint: "/api/contact", format: "json" }}
|
|
80
88
|
* />
|
|
81
89
|
* ```
|
|
82
90
|
*/
|
|
83
|
-
declare function ContactLocations({ heading, description, buttonText, buttonIcon, actions, actionsSlot, className, headerClassName, headingClassName, descriptionClassName, cardClassName, cardContentClassName, formClassName, submitClassName, background, spacing,
|
|
91
|
+
declare function ContactLocations({ heading, description, buttonText, buttonIcon, actions, actionsSlot, formFields, successMessage, className, containerClassName, headerClassName, headingClassName, descriptionClassName, cardClassName, cardContentClassName, formClassName, submitClassName, successMessageClassName, errorMessageClassName, background, spacing, pattern, patternOpacity, formConfig, onSubmit, onSuccess, onError, }: ContactLocationsProps): React.JSX.Element;
|
|
84
92
|
|
|
85
93
|
export { ContactLocations, type ContactLocationsProps };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { PageSpeedFormConfig } from '@page-speed/forms/integration';
|
|
2
|
+
import { FormFieldConfig, PageSpeedFormConfig } from '@page-speed/forms/integration';
|
|
3
3
|
import { f as SectionBackground, g as SectionSpacing, t as PatternName } from './community-initiatives-Bi_ClKrO.js';
|
|
4
4
|
import { A as ActionConfig } from './blocks-k17uluAz.js';
|
|
5
5
|
import 'react/jsx-runtime';
|
|
@@ -7,13 +7,6 @@ import 'class-variance-authority';
|
|
|
7
7
|
import './button-variants-lRElsmTc.js';
|
|
8
8
|
import 'class-variance-authority/types';
|
|
9
9
|
|
|
10
|
-
interface ContactLocationsFormValues {
|
|
11
|
-
first_name: string;
|
|
12
|
-
last_name: string;
|
|
13
|
-
email: string;
|
|
14
|
-
phone: string;
|
|
15
|
-
message: string;
|
|
16
|
-
}
|
|
17
10
|
interface ContactLocationsProps {
|
|
18
11
|
/** Main heading text */
|
|
19
12
|
heading?: React.ReactNode;
|
|
@@ -27,6 +20,16 @@ interface ContactLocationsProps {
|
|
|
27
20
|
actions?: ActionConfig[];
|
|
28
21
|
/** Custom slot for rendering actions (overrides actions array) */
|
|
29
22
|
actionsSlot?: React.ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* Array of form field configurations
|
|
25
|
+
* If not provided, defaults to: first_name, last_name, email, phone, message
|
|
26
|
+
*/
|
|
27
|
+
formFields?: FormFieldConfig[];
|
|
28
|
+
/**
|
|
29
|
+
* Success message to display after form submission
|
|
30
|
+
* @default "Thank you! Your message has been sent successfully."
|
|
31
|
+
*/
|
|
32
|
+
successMessage?: React.ReactNode;
|
|
30
33
|
/** Additional CSS classes for the section */
|
|
31
34
|
className?: string;
|
|
32
35
|
/** Additional CSS classes for the container */
|
|
@@ -44,7 +47,12 @@ interface ContactLocationsProps {
|
|
|
44
47
|
/** Additional CSS classes for the form */
|
|
45
48
|
formClassName?: string;
|
|
46
49
|
/** Additional CSS classes for the submit button */
|
|
47
|
-
submitClassName?: string;
|
|
50
|
+
submitClassName?: string;
|
|
51
|
+
/** Additional CSS classes for the success message */
|
|
52
|
+
successMessageClassName?: string;
|
|
53
|
+
/** Additional CSS classes for the error message */
|
|
54
|
+
errorMessageClassName?: string;
|
|
55
|
+
/**
|
|
48
56
|
* Background style for the section
|
|
49
57
|
*/
|
|
50
58
|
background?: SectionBackground;
|
|
@@ -63,23 +71,23 @@ interface ContactLocationsProps {
|
|
|
63
71
|
/** Form configuration for PageSpeed forms */
|
|
64
72
|
formConfig?: PageSpeedFormConfig;
|
|
65
73
|
/** Custom submit handler */
|
|
66
|
-
onSubmit?: (values:
|
|
74
|
+
onSubmit?: (values: Record<string, any>) => void | Promise<void>;
|
|
67
75
|
/** Success callback */
|
|
68
76
|
onSuccess?: (data: unknown) => void;
|
|
69
77
|
/** Error callback */
|
|
70
78
|
onError?: (error: Error) => void;
|
|
71
79
|
}
|
|
72
80
|
/**
|
|
73
|
-
* ContactLocations - Contact form with
|
|
81
|
+
* ContactLocations - Contact form with flexible field configuration
|
|
74
82
|
*
|
|
75
83
|
* @example
|
|
76
84
|
* ```tsx
|
|
77
85
|
* <ContactLocations
|
|
78
|
-
* heading="
|
|
86
|
+
* heading="Contact Location"
|
|
79
87
|
* formConfig={{ endpoint: "/api/contact", format: "json" }}
|
|
80
88
|
* />
|
|
81
89
|
* ```
|
|
82
90
|
*/
|
|
83
|
-
declare function ContactLocations({ heading, description, buttonText, buttonIcon, actions, actionsSlot, className, headerClassName, headingClassName, descriptionClassName, cardClassName, cardContentClassName, formClassName, submitClassName, background, spacing,
|
|
91
|
+
declare function ContactLocations({ heading, description, buttonText, buttonIcon, actions, actionsSlot, formFields, successMessage, className, containerClassName, headerClassName, headingClassName, descriptionClassName, cardClassName, cardContentClassName, formClassName, submitClassName, successMessageClassName, errorMessageClassName, background, spacing, pattern, patternOpacity, formConfig, onSubmit, onSuccess, onError, }: ContactLocationsProps): React.JSX.Element;
|
|
84
92
|
|
|
85
93
|
export { ContactLocations, type ContactLocationsProps };
|
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import React__default from 'react';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import React__default, { useMemo } from 'react';
|
|
4
|
+
import { Form } from '@page-speed/forms';
|
|
5
|
+
import { useFileUpload, useContactForm, getColumnSpanClass, DynamicFormField } from '@page-speed/forms/integration';
|
|
6
6
|
import { clsx } from 'clsx';
|
|
7
7
|
import { twMerge } from 'tailwind-merge';
|
|
8
8
|
import { cva } from 'class-variance-authority';
|
|
9
9
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
10
|
-
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
11
|
-
import { submitPageSpeedForm, PageSpeedFormSubmissionError } from '@page-speed/forms/integration';
|
|
12
10
|
|
|
13
11
|
// components/blocks/contact/contact-locations.tsx
|
|
14
|
-
var TextInput = TextInput$1;
|
|
15
|
-
var TextArea = TextArea$1;
|
|
16
12
|
function cn(...inputs) {
|
|
17
13
|
return twMerge(clsx(inputs));
|
|
18
14
|
}
|
|
@@ -457,22 +453,6 @@ function CardContent({ className, ...props }) {
|
|
|
457
453
|
}
|
|
458
454
|
);
|
|
459
455
|
}
|
|
460
|
-
function Label({
|
|
461
|
-
className,
|
|
462
|
-
...props
|
|
463
|
-
}) {
|
|
464
|
-
return /* @__PURE__ */ jsx(
|
|
465
|
-
LabelPrimitive.Root,
|
|
466
|
-
{
|
|
467
|
-
"data-slot": "label",
|
|
468
|
-
className: cn(
|
|
469
|
-
"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
|
|
470
|
-
className
|
|
471
|
-
),
|
|
472
|
-
...props
|
|
473
|
-
}
|
|
474
|
-
);
|
|
475
|
-
}
|
|
476
456
|
var maxWidthStyles = {
|
|
477
457
|
sm: "max-w-screen-sm",
|
|
478
458
|
md: "max-w-screen-md",
|
|
@@ -848,14 +828,60 @@ var Section = React__default.forwardRef(
|
|
|
848
828
|
}
|
|
849
829
|
);
|
|
850
830
|
Section.displayName = "Section";
|
|
831
|
+
var DEFAULT_FORM_FIELDS = [
|
|
832
|
+
{
|
|
833
|
+
name: "first_name",
|
|
834
|
+
type: "text",
|
|
835
|
+
label: "First Name",
|
|
836
|
+
placeholder: "John",
|
|
837
|
+
required: true,
|
|
838
|
+
columnSpan: 6
|
|
839
|
+
},
|
|
840
|
+
{
|
|
841
|
+
name: "last_name",
|
|
842
|
+
type: "text",
|
|
843
|
+
label: "Last Name",
|
|
844
|
+
placeholder: "Doe",
|
|
845
|
+
required: true,
|
|
846
|
+
columnSpan: 6
|
|
847
|
+
},
|
|
848
|
+
{
|
|
849
|
+
name: "email",
|
|
850
|
+
type: "email",
|
|
851
|
+
label: "Email",
|
|
852
|
+
placeholder: "john@example.com",
|
|
853
|
+
required: true,
|
|
854
|
+
columnSpan: 12
|
|
855
|
+
},
|
|
856
|
+
{
|
|
857
|
+
name: "phone",
|
|
858
|
+
type: "tel",
|
|
859
|
+
label: "Phone",
|
|
860
|
+
placeholder: "+1 (555) 000-0000",
|
|
861
|
+
required: true,
|
|
862
|
+
columnSpan: 12
|
|
863
|
+
},
|
|
864
|
+
{
|
|
865
|
+
name: "message",
|
|
866
|
+
type: "textarea",
|
|
867
|
+
label: "Message",
|
|
868
|
+
placeholder: "Your message...",
|
|
869
|
+
required: true,
|
|
870
|
+
rows: 4,
|
|
871
|
+
columnSpan: 12
|
|
872
|
+
}
|
|
873
|
+
];
|
|
851
874
|
function ContactLocations({
|
|
852
875
|
heading,
|
|
853
876
|
description,
|
|
854
|
-
buttonText,
|
|
877
|
+
buttonText = "Submit",
|
|
855
878
|
buttonIcon,
|
|
856
879
|
actions,
|
|
857
880
|
actionsSlot,
|
|
881
|
+
formFields = DEFAULT_FORM_FIELDS,
|
|
882
|
+
successMessage = "Thank you! Your message has been sent successfully.",
|
|
858
883
|
className,
|
|
884
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
859
885
|
headerClassName,
|
|
860
886
|
headingClassName,
|
|
861
887
|
descriptionClassName,
|
|
@@ -863,66 +889,38 @@ function ContactLocations({
|
|
|
863
889
|
cardContentClassName,
|
|
864
890
|
formClassName,
|
|
865
891
|
submitClassName,
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
892
|
+
successMessageClassName,
|
|
893
|
+
errorMessageClassName,
|
|
894
|
+
background = "white",
|
|
895
|
+
spacing = "xl",
|
|
869
896
|
pattern,
|
|
870
|
-
patternOpacity,
|
|
897
|
+
patternOpacity = 0.1,
|
|
871
898
|
formConfig,
|
|
872
899
|
onSubmit,
|
|
873
900
|
onSuccess,
|
|
874
901
|
onError
|
|
875
902
|
}) {
|
|
876
|
-
const
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
return void 0;
|
|
892
|
-
},
|
|
893
|
-
phone: (value) => !value ? "Phone is required" : void 0,
|
|
894
|
-
message: (value) => !value ? "Message is required" : void 0
|
|
903
|
+
const {
|
|
904
|
+
uploadTokens,
|
|
905
|
+
uploadProgress,
|
|
906
|
+
isUploading,
|
|
907
|
+
uploadFiles,
|
|
908
|
+
removeFile,
|
|
909
|
+
resetUpload
|
|
910
|
+
} = useFileUpload({ onError });
|
|
911
|
+
const { form, submissionError, formMethod, resetSubmissionState } = useContactForm({
|
|
912
|
+
formFields,
|
|
913
|
+
formConfig,
|
|
914
|
+
onSubmit,
|
|
915
|
+
onSuccess: (data) => {
|
|
916
|
+
resetUpload();
|
|
917
|
+
onSuccess?.(data);
|
|
895
918
|
},
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
return;
|
|
900
|
-
}
|
|
901
|
-
try {
|
|
902
|
-
let result;
|
|
903
|
-
if (shouldAutoSubmit) {
|
|
904
|
-
result = await submitPageSpeedForm(values, formConfig);
|
|
905
|
-
}
|
|
906
|
-
if (onSubmit) {
|
|
907
|
-
await onSubmit(values);
|
|
908
|
-
}
|
|
909
|
-
if (shouldAutoSubmit || onSubmit) {
|
|
910
|
-
if (formConfig?.resetOnSuccess !== false) {
|
|
911
|
-
helpers.resetForm();
|
|
912
|
-
}
|
|
913
|
-
onSuccess?.(result);
|
|
914
|
-
}
|
|
915
|
-
} catch (error) {
|
|
916
|
-
if (error instanceof PageSpeedFormSubmissionError && error.formErrors) {
|
|
917
|
-
helpers.setErrors(error.formErrors);
|
|
918
|
-
}
|
|
919
|
-
onError?.(error);
|
|
920
|
-
throw error;
|
|
921
|
-
}
|
|
922
|
-
}
|
|
919
|
+
onError,
|
|
920
|
+
resetOnSuccess: formConfig?.resetOnSuccess !== false,
|
|
921
|
+
uploadTokens
|
|
923
922
|
});
|
|
924
|
-
const
|
|
925
|
-
const actionsContent = React.useMemo(() => {
|
|
923
|
+
const actionsContent = useMemo(() => {
|
|
926
924
|
if (actionsSlot) return actionsSlot;
|
|
927
925
|
if (actions && actions.length > 0) {
|
|
928
926
|
return actions.map((action, index) => {
|
|
@@ -959,9 +957,9 @@ function ContactLocations({
|
|
|
959
957
|
spacing,
|
|
960
958
|
pattern,
|
|
961
959
|
patternOpacity,
|
|
962
|
-
className,
|
|
960
|
+
className: cn("py-12", className),
|
|
963
961
|
containerClassName,
|
|
964
|
-
children: /* @__PURE__ */ jsxs("div", { className: "
|
|
962
|
+
children: /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-4xl", children: [
|
|
965
963
|
/* @__PURE__ */ jsxs("div", { className: cn("mb-10 text-center", headerClassName), children: [
|
|
966
964
|
heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
|
|
967
965
|
"h2",
|
|
@@ -988,80 +986,42 @@ function ContactLocations({
|
|
|
988
986
|
Form,
|
|
989
987
|
{
|
|
990
988
|
form,
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
989
|
+
notificationConfig: {
|
|
990
|
+
submissionError,
|
|
991
|
+
successMessage
|
|
992
|
+
},
|
|
993
|
+
styleConfig: {
|
|
994
|
+
formClassName: cn("space-y-4", formClassName),
|
|
995
|
+
successMessageClassName,
|
|
996
|
+
errorMessageClassName
|
|
997
|
+
},
|
|
998
|
+
formConfig: {
|
|
999
|
+
endpoint: formConfig?.endpoint,
|
|
1000
|
+
method: formMethod,
|
|
1001
|
+
submissionConfig: formConfig?.submissionConfig
|
|
1002
|
+
},
|
|
1003
|
+
onNewSubmission: () => {
|
|
1004
|
+
resetUpload();
|
|
1005
|
+
resetSubmissionState();
|
|
1006
|
+
},
|
|
994
1007
|
children: [
|
|
995
|
-
/* @__PURE__ */
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
...field,
|
|
1002
|
-
id: "first-name",
|
|
1003
|
-
placeholder: "John",
|
|
1004
|
-
error: meta.touched && !!meta.error,
|
|
1005
|
-
"aria-label": "First Name"
|
|
1006
|
-
}
|
|
1007
|
-
)
|
|
1008
|
-
] }) }),
|
|
1009
|
-
/* @__PURE__ */ jsx(Field, { name: "last_name", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
1010
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "last-name", children: "Last Name" }),
|
|
1011
|
-
/* @__PURE__ */ jsx(
|
|
1012
|
-
TextInput,
|
|
1008
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-12 gap-6", children: formFields.map((field) => /* @__PURE__ */ jsx(
|
|
1009
|
+
"div",
|
|
1010
|
+
{
|
|
1011
|
+
className: getColumnSpanClass(field.columnSpan),
|
|
1012
|
+
children: /* @__PURE__ */ jsx(
|
|
1013
|
+
DynamicFormField,
|
|
1013
1014
|
{
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1015
|
+
field,
|
|
1016
|
+
uploadProgress,
|
|
1017
|
+
onFileUpload: uploadFiles,
|
|
1018
|
+
onFileRemove: removeFile,
|
|
1019
|
+
isUploading
|
|
1019
1020
|
}
|
|
1020
1021
|
)
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "email", children: "Email" }),
|
|
1025
|
-
/* @__PURE__ */ jsx(
|
|
1026
|
-
TextInput,
|
|
1027
|
-
{
|
|
1028
|
-
...field,
|
|
1029
|
-
id: "email",
|
|
1030
|
-
type: "email",
|
|
1031
|
-
placeholder: "john@example.com",
|
|
1032
|
-
error: meta.touched && !!meta.error,
|
|
1033
|
-
"aria-label": "Email"
|
|
1034
|
-
}
|
|
1035
|
-
)
|
|
1036
|
-
] }) }),
|
|
1037
|
-
/* @__PURE__ */ jsx(Field, { name: "phone", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
1038
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "phone", children: "Phone" }),
|
|
1039
|
-
/* @__PURE__ */ jsx(
|
|
1040
|
-
TextInput,
|
|
1041
|
-
{
|
|
1042
|
-
...field,
|
|
1043
|
-
id: "phone",
|
|
1044
|
-
type: "tel",
|
|
1045
|
-
placeholder: "+1 (555) 000-0000",
|
|
1046
|
-
error: meta.touched && !!meta.error,
|
|
1047
|
-
"aria-label": "Phone"
|
|
1048
|
-
}
|
|
1049
|
-
)
|
|
1050
|
-
] }) }),
|
|
1051
|
-
/* @__PURE__ */ jsx(Field, { name: "message", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
1052
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "message", children: "Message" }),
|
|
1053
|
-
/* @__PURE__ */ jsx(
|
|
1054
|
-
TextArea,
|
|
1055
|
-
{
|
|
1056
|
-
...field,
|
|
1057
|
-
id: "message",
|
|
1058
|
-
placeholder: "Your message...",
|
|
1059
|
-
rows: 4,
|
|
1060
|
-
error: meta.touched && !!meta.error,
|
|
1061
|
-
"aria-label": "Message"
|
|
1062
|
-
}
|
|
1063
|
-
)
|
|
1064
|
-
] }) }),
|
|
1022
|
+
},
|
|
1023
|
+
field.name
|
|
1024
|
+
)) }),
|
|
1065
1025
|
actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxs(
|
|
1066
1026
|
Pressable,
|
|
1067
1027
|
{
|