@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
package/dist/contact-press.d.cts
CHANGED
|
@@ -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 ContactPressFormValues {
|
|
11
|
-
first_name: string;
|
|
12
|
-
last_name: string;
|
|
13
|
-
email: string;
|
|
14
|
-
phone: string;
|
|
15
|
-
message: string;
|
|
16
|
-
}
|
|
17
10
|
interface ContactPressProps {
|
|
18
11
|
/** Main heading text */
|
|
19
12
|
heading?: React.ReactNode;
|
|
@@ -27,6 +20,16 @@ interface ContactPressProps {
|
|
|
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 ContactPressProps {
|
|
|
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 ContactPressProps {
|
|
|
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
|
-
* ContactPress - Contact form with
|
|
81
|
+
* ContactPress - Contact form with flexible field configuration
|
|
74
82
|
*
|
|
75
83
|
* @example
|
|
76
84
|
* ```tsx
|
|
77
85
|
* <ContactPress
|
|
78
|
-
* heading="Press
|
|
86
|
+
* heading="Press Inquiry"
|
|
79
87
|
* formConfig={{ endpoint: "/api/contact", format: "json" }}
|
|
80
88
|
* />
|
|
81
89
|
* ```
|
|
82
90
|
*/
|
|
83
|
-
declare function ContactPress({ heading, description, buttonText, buttonIcon, actions, actionsSlot, className, containerClassName, headerClassName, headingClassName, descriptionClassName, cardClassName, cardContentClassName, formClassName, submitClassName, background, spacing, pattern, patternOpacity, formConfig, onSubmit, onSuccess, onError, }: ContactPressProps): React.JSX.Element;
|
|
91
|
+
declare function ContactPress({ 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, }: ContactPressProps): React.JSX.Element;
|
|
84
92
|
|
|
85
93
|
export { ContactPress, type ContactPressProps };
|
package/dist/contact-press.d.ts
CHANGED
|
@@ -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 ContactPressFormValues {
|
|
11
|
-
first_name: string;
|
|
12
|
-
last_name: string;
|
|
13
|
-
email: string;
|
|
14
|
-
phone: string;
|
|
15
|
-
message: string;
|
|
16
|
-
}
|
|
17
10
|
interface ContactPressProps {
|
|
18
11
|
/** Main heading text */
|
|
19
12
|
heading?: React.ReactNode;
|
|
@@ -27,6 +20,16 @@ interface ContactPressProps {
|
|
|
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 ContactPressProps {
|
|
|
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 ContactPressProps {
|
|
|
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
|
-
* ContactPress - Contact form with
|
|
81
|
+
* ContactPress - Contact form with flexible field configuration
|
|
74
82
|
*
|
|
75
83
|
* @example
|
|
76
84
|
* ```tsx
|
|
77
85
|
* <ContactPress
|
|
78
|
-
* heading="Press
|
|
86
|
+
* heading="Press Inquiry"
|
|
79
87
|
* formConfig={{ endpoint: "/api/contact", format: "json" }}
|
|
80
88
|
* />
|
|
81
89
|
* ```
|
|
82
90
|
*/
|
|
83
|
-
declare function ContactPress({ heading, description, buttonText, buttonIcon, actions, actionsSlot, className, containerClassName, headerClassName, headingClassName, descriptionClassName, cardClassName, cardContentClassName, formClassName, submitClassName, background, spacing, pattern, patternOpacity, formConfig, onSubmit, onSuccess, onError, }: ContactPressProps): React.JSX.Element;
|
|
91
|
+
declare function ContactPress({ 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, }: ContactPressProps): React.JSX.Element;
|
|
84
92
|
|
|
85
93
|
export { ContactPress, type ContactPressProps };
|
package/dist/contact-press.js
CHANGED
|
@@ -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-press.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,15 +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 ContactPress({
|
|
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,
|
|
859
|
-
containerClassName,
|
|
884
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
860
885
|
headerClassName,
|
|
861
886
|
headingClassName,
|
|
862
887
|
descriptionClassName,
|
|
@@ -864,6 +889,8 @@ function ContactPress({
|
|
|
864
889
|
cardContentClassName,
|
|
865
890
|
formClassName,
|
|
866
891
|
submitClassName,
|
|
892
|
+
successMessageClassName,
|
|
893
|
+
errorMessageClassName,
|
|
867
894
|
background = "white",
|
|
868
895
|
spacing = "xl",
|
|
869
896
|
pattern,
|
|
@@ -873,65 +900,52 @@ function ContactPress({
|
|
|
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) => {
|
|
929
|
-
const {
|
|
930
|
-
return /* @__PURE__ */ jsx(Pressable, { asButton: true, className: actionClassName, ...pressableProps, children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
931
|
-
icon,
|
|
927
|
+
const {
|
|
932
928
|
label,
|
|
933
|
-
|
|
934
|
-
|
|
929
|
+
icon,
|
|
930
|
+
iconAfter,
|
|
931
|
+
children,
|
|
932
|
+
className: actionClassName,
|
|
933
|
+
...pressableProps
|
|
934
|
+
} = action;
|
|
935
|
+
return /* @__PURE__ */ jsx(
|
|
936
|
+
Pressable,
|
|
937
|
+
{
|
|
938
|
+
asButton: true,
|
|
939
|
+
className: actionClassName,
|
|
940
|
+
...pressableProps,
|
|
941
|
+
children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
942
|
+
icon,
|
|
943
|
+
label,
|
|
944
|
+
iconAfter
|
|
945
|
+
] })
|
|
946
|
+
},
|
|
947
|
+
index
|
|
948
|
+
);
|
|
935
949
|
});
|
|
936
950
|
}
|
|
937
951
|
return null;
|
|
@@ -944,89 +958,70 @@ function ContactPress({
|
|
|
944
958
|
pattern,
|
|
945
959
|
patternOpacity,
|
|
946
960
|
className: cn("py-12", className),
|
|
947
|
-
|
|
961
|
+
containerClassName,
|
|
962
|
+
children: /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-4xl", children: [
|
|
948
963
|
/* @__PURE__ */ jsxs("div", { className: cn("mb-10 text-center", headerClassName), children: [
|
|
949
|
-
|
|
950
|
-
|
|
964
|
+
heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
|
|
965
|
+
"h2",
|
|
966
|
+
{
|
|
967
|
+
className: cn(
|
|
968
|
+
"mb-3 text-3xl font-bold tracking-tight text-balance",
|
|
969
|
+
headingClassName
|
|
970
|
+
),
|
|
971
|
+
children: heading
|
|
972
|
+
}
|
|
973
|
+
) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
|
|
974
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx(
|
|
975
|
+
"p",
|
|
976
|
+
{
|
|
977
|
+
className: cn(
|
|
978
|
+
"leading-relaxed text-balance",
|
|
979
|
+
descriptionClassName
|
|
980
|
+
),
|
|
981
|
+
children: description
|
|
982
|
+
}
|
|
983
|
+
) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
|
|
951
984
|
] }),
|
|
952
985
|
/* @__PURE__ */ jsx(Card, { className: cn("mx-auto max-w-xl", cardClassName), children: /* @__PURE__ */ jsx(CardContent, { className: cn("p-6 lg:p-8", cardContentClassName), children: /* @__PURE__ */ jsxs(
|
|
953
986
|
Form,
|
|
954
987
|
{
|
|
955
988
|
form,
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
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
|
+
},
|
|
959
1007
|
children: [
|
|
960
|
-
/* @__PURE__ */
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
...field,
|
|
967
|
-
id: "first-name",
|
|
968
|
-
placeholder: "John",
|
|
969
|
-
error: meta.touched && !!meta.error,
|
|
970
|
-
"aria-label": "First Name"
|
|
971
|
-
}
|
|
972
|
-
)
|
|
973
|
-
] }) }),
|
|
974
|
-
/* @__PURE__ */ jsx(Field, { name: "last_name", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
975
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "last-name", children: "Last Name" }),
|
|
976
|
-
/* @__PURE__ */ jsx(
|
|
977
|
-
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,
|
|
978
1014
|
{
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
1015
|
+
field,
|
|
1016
|
+
uploadProgress,
|
|
1017
|
+
onFileUpload: uploadFiles,
|
|
1018
|
+
onFileRemove: removeFile,
|
|
1019
|
+
isUploading
|
|
984
1020
|
}
|
|
985
1021
|
)
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "email", children: "Email" }),
|
|
990
|
-
/* @__PURE__ */ jsx(
|
|
991
|
-
TextInput,
|
|
992
|
-
{
|
|
993
|
-
...field,
|
|
994
|
-
id: "email",
|
|
995
|
-
type: "email",
|
|
996
|
-
placeholder: "john@example.com",
|
|
997
|
-
error: meta.touched && !!meta.error,
|
|
998
|
-
"aria-label": "Email"
|
|
999
|
-
}
|
|
1000
|
-
)
|
|
1001
|
-
] }) }),
|
|
1002
|
-
/* @__PURE__ */ jsx(Field, { name: "phone", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
1003
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "phone", children: "Phone" }),
|
|
1004
|
-
/* @__PURE__ */ jsx(
|
|
1005
|
-
TextInput,
|
|
1006
|
-
{
|
|
1007
|
-
...field,
|
|
1008
|
-
id: "phone",
|
|
1009
|
-
type: "tel",
|
|
1010
|
-
placeholder: "+1 (555) 000-0000",
|
|
1011
|
-
error: meta.touched && !!meta.error,
|
|
1012
|
-
"aria-label": "Phone"
|
|
1013
|
-
}
|
|
1014
|
-
)
|
|
1015
|
-
] }) }),
|
|
1016
|
-
/* @__PURE__ */ jsx(Field, { name: "message", children: ({ field, meta }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
1017
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "message", children: "Message" }),
|
|
1018
|
-
/* @__PURE__ */ jsx(
|
|
1019
|
-
TextArea,
|
|
1020
|
-
{
|
|
1021
|
-
...field,
|
|
1022
|
-
id: "message",
|
|
1023
|
-
placeholder: "Your message...",
|
|
1024
|
-
rows: 4,
|
|
1025
|
-
error: meta.touched && !!meta.error,
|
|
1026
|
-
"aria-label": "Message"
|
|
1027
|
-
}
|
|
1028
|
-
)
|
|
1029
|
-
] }) }),
|
|
1022
|
+
},
|
|
1023
|
+
field.name
|
|
1024
|
+
)) }),
|
|
1030
1025
|
actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxs(
|
|
1031
1026
|
Pressable,
|
|
1032
1027
|
{
|