@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-support.cjs
CHANGED
|
@@ -3,13 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var forms = require('@page-speed/forms');
|
|
6
|
-
var
|
|
6
|
+
var integration = require('@page-speed/forms/integration');
|
|
7
7
|
var clsx = require('clsx');
|
|
8
8
|
var tailwindMerge = require('tailwind-merge');
|
|
9
9
|
var classVarianceAuthority = require('class-variance-authority');
|
|
10
10
|
var jsxRuntime = require('react/jsx-runtime');
|
|
11
|
-
var LabelPrimitive = require('@radix-ui/react-label');
|
|
12
|
-
var integration = require('@page-speed/forms/integration');
|
|
13
11
|
|
|
14
12
|
function _interopNamespace(e) {
|
|
15
13
|
if (e && e.__esModule) return e;
|
|
@@ -30,11 +28,8 @@ function _interopNamespace(e) {
|
|
|
30
28
|
}
|
|
31
29
|
|
|
32
30
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
33
|
-
var LabelPrimitive__namespace = /*#__PURE__*/_interopNamespace(LabelPrimitive);
|
|
34
31
|
|
|
35
32
|
// components/blocks/contact/contact-support.tsx
|
|
36
|
-
var TextInput = inputs.TextInput;
|
|
37
|
-
var TextArea = inputs.TextArea;
|
|
38
33
|
function cn(...inputs) {
|
|
39
34
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
40
35
|
}
|
|
@@ -479,22 +474,6 @@ function CardContent({ className, ...props }) {
|
|
|
479
474
|
}
|
|
480
475
|
);
|
|
481
476
|
}
|
|
482
|
-
function Label({
|
|
483
|
-
className,
|
|
484
|
-
...props
|
|
485
|
-
}) {
|
|
486
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
487
|
-
LabelPrimitive__namespace.Root,
|
|
488
|
-
{
|
|
489
|
-
"data-slot": "label",
|
|
490
|
-
className: cn(
|
|
491
|
-
"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",
|
|
492
|
-
className
|
|
493
|
-
),
|
|
494
|
-
...props
|
|
495
|
-
}
|
|
496
|
-
);
|
|
497
|
-
}
|
|
498
477
|
var maxWidthStyles = {
|
|
499
478
|
sm: "max-w-screen-sm",
|
|
500
479
|
md: "max-w-screen-md",
|
|
@@ -870,15 +849,60 @@ var Section = React__namespace.default.forwardRef(
|
|
|
870
849
|
}
|
|
871
850
|
);
|
|
872
851
|
Section.displayName = "Section";
|
|
852
|
+
var DEFAULT_FORM_FIELDS = [
|
|
853
|
+
{
|
|
854
|
+
name: "first_name",
|
|
855
|
+
type: "text",
|
|
856
|
+
label: "First Name",
|
|
857
|
+
placeholder: "John",
|
|
858
|
+
required: true,
|
|
859
|
+
columnSpan: 6
|
|
860
|
+
},
|
|
861
|
+
{
|
|
862
|
+
name: "last_name",
|
|
863
|
+
type: "text",
|
|
864
|
+
label: "Last Name",
|
|
865
|
+
placeholder: "Doe",
|
|
866
|
+
required: true,
|
|
867
|
+
columnSpan: 6
|
|
868
|
+
},
|
|
869
|
+
{
|
|
870
|
+
name: "email",
|
|
871
|
+
type: "email",
|
|
872
|
+
label: "Email",
|
|
873
|
+
placeholder: "john@example.com",
|
|
874
|
+
required: true,
|
|
875
|
+
columnSpan: 12
|
|
876
|
+
},
|
|
877
|
+
{
|
|
878
|
+
name: "phone",
|
|
879
|
+
type: "tel",
|
|
880
|
+
label: "Phone",
|
|
881
|
+
placeholder: "+1 (555) 000-0000",
|
|
882
|
+
required: true,
|
|
883
|
+
columnSpan: 12
|
|
884
|
+
},
|
|
885
|
+
{
|
|
886
|
+
name: "message",
|
|
887
|
+
type: "textarea",
|
|
888
|
+
label: "Message",
|
|
889
|
+
placeholder: "Your message...",
|
|
890
|
+
required: true,
|
|
891
|
+
rows: 4,
|
|
892
|
+
columnSpan: 12
|
|
893
|
+
}
|
|
894
|
+
];
|
|
873
895
|
function ContactSupport({
|
|
874
896
|
heading,
|
|
875
897
|
description,
|
|
876
|
-
buttonText,
|
|
898
|
+
buttonText = "Submit",
|
|
877
899
|
buttonIcon,
|
|
878
900
|
actions,
|
|
879
901
|
actionsSlot,
|
|
902
|
+
formFields = DEFAULT_FORM_FIELDS,
|
|
903
|
+
successMessage = "Thank you! Your message has been sent successfully.",
|
|
880
904
|
className,
|
|
881
|
-
containerClassName,
|
|
905
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
882
906
|
headerClassName,
|
|
883
907
|
headingClassName,
|
|
884
908
|
descriptionClassName,
|
|
@@ -886,6 +910,8 @@ function ContactSupport({
|
|
|
886
910
|
cardContentClassName,
|
|
887
911
|
formClassName,
|
|
888
912
|
submitClassName,
|
|
913
|
+
successMessageClassName,
|
|
914
|
+
errorMessageClassName,
|
|
889
915
|
background = "white",
|
|
890
916
|
spacing = "xl",
|
|
891
917
|
pattern,
|
|
@@ -895,61 +921,52 @@ function ContactSupport({
|
|
|
895
921
|
onSuccess,
|
|
896
922
|
onError
|
|
897
923
|
}) {
|
|
898
|
-
const
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
924
|
+
const {
|
|
925
|
+
uploadTokens,
|
|
926
|
+
uploadProgress,
|
|
927
|
+
isUploading,
|
|
928
|
+
uploadFiles,
|
|
929
|
+
removeFile,
|
|
930
|
+
resetUpload
|
|
931
|
+
} = integration.useFileUpload({ onError });
|
|
932
|
+
const { form, submissionError, formMethod, resetSubmissionState } = integration.useContactForm({
|
|
933
|
+
formFields,
|
|
934
|
+
formConfig,
|
|
935
|
+
onSubmit,
|
|
936
|
+
onSuccess: (data) => {
|
|
937
|
+
resetUpload();
|
|
938
|
+
onSuccess?.(data);
|
|
913
939
|
},
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
return;
|
|
918
|
-
}
|
|
919
|
-
try {
|
|
920
|
-
let result;
|
|
921
|
-
if (shouldAutoSubmit) {
|
|
922
|
-
result = await integration.submitPageSpeedForm(values, formConfig);
|
|
923
|
-
}
|
|
924
|
-
if (onSubmit) {
|
|
925
|
-
await onSubmit(values);
|
|
926
|
-
}
|
|
927
|
-
if (shouldAutoSubmit || onSubmit) {
|
|
928
|
-
if (formConfig?.resetOnSuccess !== false) {
|
|
929
|
-
helpers.resetForm();
|
|
930
|
-
}
|
|
931
|
-
onSuccess?.(result);
|
|
932
|
-
}
|
|
933
|
-
} catch (error) {
|
|
934
|
-
if (error instanceof integration.PageSpeedFormSubmissionError && error.formErrors) {
|
|
935
|
-
helpers.setErrors(error.formErrors);
|
|
936
|
-
}
|
|
937
|
-
onError?.(error);
|
|
938
|
-
throw error;
|
|
939
|
-
}
|
|
940
|
-
}
|
|
940
|
+
onError,
|
|
941
|
+
resetOnSuccess: formConfig?.resetOnSuccess !== false,
|
|
942
|
+
uploadTokens
|
|
941
943
|
});
|
|
942
|
-
const
|
|
943
|
-
const actionsContent = React__namespace.useMemo(() => {
|
|
944
|
+
const actionsContent = React.useMemo(() => {
|
|
944
945
|
if (actionsSlot) return actionsSlot;
|
|
945
946
|
if (actions && actions.length > 0) {
|
|
946
947
|
return actions.map((action, index) => {
|
|
947
|
-
const {
|
|
948
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Pressable, { asButton: true, className: actionClassName, ...pressableProps, children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
949
|
-
icon,
|
|
948
|
+
const {
|
|
950
949
|
label,
|
|
951
|
-
|
|
952
|
-
|
|
950
|
+
icon,
|
|
951
|
+
iconAfter,
|
|
952
|
+
children,
|
|
953
|
+
className: actionClassName,
|
|
954
|
+
...pressableProps
|
|
955
|
+
} = action;
|
|
956
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
957
|
+
Pressable,
|
|
958
|
+
{
|
|
959
|
+
asButton: true,
|
|
960
|
+
className: actionClassName,
|
|
961
|
+
...pressableProps,
|
|
962
|
+
children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
963
|
+
icon,
|
|
964
|
+
label,
|
|
965
|
+
iconAfter
|
|
966
|
+
] })
|
|
967
|
+
},
|
|
968
|
+
index
|
|
969
|
+
);
|
|
953
970
|
});
|
|
954
971
|
}
|
|
955
972
|
return null;
|
|
@@ -962,60 +979,70 @@ function ContactSupport({
|
|
|
962
979
|
pattern,
|
|
963
980
|
patternOpacity,
|
|
964
981
|
className: cn("py-12", className),
|
|
965
|
-
|
|
982
|
+
containerClassName,
|
|
983
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-4xl", children: [
|
|
966
984
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-10 text-center", headerClassName), children: [
|
|
967
|
-
|
|
968
|
-
|
|
985
|
+
heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
986
|
+
"h2",
|
|
987
|
+
{
|
|
988
|
+
className: cn(
|
|
989
|
+
"mb-3 text-3xl font-bold tracking-tight text-balance",
|
|
990
|
+
headingClassName
|
|
991
|
+
),
|
|
992
|
+
children: heading
|
|
993
|
+
}
|
|
994
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
|
|
995
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
996
|
+
"p",
|
|
997
|
+
{
|
|
998
|
+
className: cn(
|
|
999
|
+
"leading-relaxed text-balance",
|
|
1000
|
+
descriptionClassName
|
|
1001
|
+
),
|
|
1002
|
+
children: description
|
|
1003
|
+
}
|
|
1004
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
|
|
969
1005
|
] }),
|
|
970
1006
|
/* @__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: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
971
1007
|
forms.Form,
|
|
972
1008
|
{
|
|
973
1009
|
form,
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
1010
|
+
notificationConfig: {
|
|
1011
|
+
submissionError,
|
|
1012
|
+
successMessage
|
|
1013
|
+
},
|
|
1014
|
+
styleConfig: {
|
|
1015
|
+
formClassName: cn("space-y-4", formClassName),
|
|
1016
|
+
successMessageClassName,
|
|
1017
|
+
errorMessageClassName
|
|
1018
|
+
},
|
|
1019
|
+
formConfig: {
|
|
1020
|
+
endpoint: formConfig?.endpoint,
|
|
1021
|
+
method: formMethod,
|
|
1022
|
+
submissionConfig: formConfig?.submissionConfig
|
|
1023
|
+
},
|
|
1024
|
+
onNewSubmission: () => {
|
|
1025
|
+
resetUpload();
|
|
1026
|
+
resetSubmissionState();
|
|
1027
|
+
},
|
|
977
1028
|
children: [
|
|
978
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
{
|
|
996
|
-
...field,
|
|
997
|
-
id: "email",
|
|
998
|
-
type: "email",
|
|
999
|
-
placeholder: "your@email.com",
|
|
1000
|
-
error: meta.touched && !!meta.error,
|
|
1001
|
-
"aria-label": "Email"
|
|
1002
|
-
}
|
|
1003
|
-
)
|
|
1004
|
-
] }) }),
|
|
1005
|
-
/* @__PURE__ */ jsxRuntime.jsx(forms.Field, { name: "message", children: ({ field, meta }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
1006
|
-
/* @__PURE__ */ jsxRuntime.jsx(Label, { htmlFor: "message", children: "Message" }),
|
|
1007
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1008
|
-
TextArea,
|
|
1009
|
-
{
|
|
1010
|
-
...field,
|
|
1011
|
-
id: "message",
|
|
1012
|
-
placeholder: "Describe your issue...",
|
|
1013
|
-
rows: 4,
|
|
1014
|
-
error: meta.touched && !!meta.error,
|
|
1015
|
-
"aria-label": "Message"
|
|
1016
|
-
}
|
|
1017
|
-
)
|
|
1018
|
-
] }) }),
|
|
1029
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-12 gap-6", children: formFields.map((field) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1030
|
+
"div",
|
|
1031
|
+
{
|
|
1032
|
+
className: integration.getColumnSpanClass(field.columnSpan),
|
|
1033
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1034
|
+
integration.DynamicFormField,
|
|
1035
|
+
{
|
|
1036
|
+
field,
|
|
1037
|
+
uploadProgress,
|
|
1038
|
+
onFileUpload: uploadFiles,
|
|
1039
|
+
onFileRemove: removeFile,
|
|
1040
|
+
isUploading
|
|
1041
|
+
}
|
|
1042
|
+
)
|
|
1043
|
+
},
|
|
1044
|
+
field.name
|
|
1045
|
+
)) }),
|
|
1019
1046
|
actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1020
1047
|
Pressable,
|
|
1021
1048
|
{
|
|
@@ -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,11 +7,6 @@ import 'class-variance-authority';
|
|
|
7
7
|
import './button-variants-lRElsmTc.cjs';
|
|
8
8
|
import 'class-variance-authority/types';
|
|
9
9
|
|
|
10
|
-
interface ContactSupportFormValues {
|
|
11
|
-
name: string;
|
|
12
|
-
email: string;
|
|
13
|
-
message: string;
|
|
14
|
-
}
|
|
15
10
|
interface ContactSupportProps {
|
|
16
11
|
/** Main heading text */
|
|
17
12
|
heading?: React.ReactNode;
|
|
@@ -25,6 +20,16 @@ interface ContactSupportProps {
|
|
|
25
20
|
actions?: ActionConfig[];
|
|
26
21
|
/** Custom slot for rendering actions (overrides actions array) */
|
|
27
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;
|
|
28
33
|
/** Additional CSS classes for the section */
|
|
29
34
|
className?: string;
|
|
30
35
|
/** Additional CSS classes for the container */
|
|
@@ -42,7 +47,12 @@ interface ContactSupportProps {
|
|
|
42
47
|
/** Additional CSS classes for the form */
|
|
43
48
|
formClassName?: string;
|
|
44
49
|
/** Additional CSS classes for the submit button */
|
|
45
|
-
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
|
+
/**
|
|
46
56
|
* Background style for the section
|
|
47
57
|
*/
|
|
48
58
|
background?: SectionBackground;
|
|
@@ -61,24 +71,23 @@ interface ContactSupportProps {
|
|
|
61
71
|
/** Form configuration for PageSpeed forms */
|
|
62
72
|
formConfig?: PageSpeedFormConfig;
|
|
63
73
|
/** Custom submit handler */
|
|
64
|
-
onSubmit?: (values:
|
|
74
|
+
onSubmit?: (values: Record<string, any>) => void | Promise<void>;
|
|
65
75
|
/** Success callback */
|
|
66
76
|
onSuccess?: (data: unknown) => void;
|
|
67
77
|
/** Error callback */
|
|
68
78
|
onError?: (error: Error) => void;
|
|
69
79
|
}
|
|
70
80
|
/**
|
|
71
|
-
* ContactSupport -
|
|
72
|
-
* Perfect for customer support and help desk scenarios.
|
|
81
|
+
* ContactSupport - Contact form with flexible field configuration
|
|
73
82
|
*
|
|
74
83
|
* @example
|
|
75
84
|
* ```tsx
|
|
76
85
|
* <ContactSupport
|
|
77
|
-
* heading="
|
|
86
|
+
* heading="Get Support"
|
|
78
87
|
* formConfig={{ endpoint: "/api/contact", format: "json" }}
|
|
79
88
|
* />
|
|
80
89
|
* ```
|
|
81
90
|
*/
|
|
82
|
-
declare function ContactSupport({ heading, description, buttonText, buttonIcon, actions, actionsSlot, className, containerClassName, headerClassName, headingClassName, descriptionClassName, cardClassName, cardContentClassName, formClassName, submitClassName, background, spacing, pattern, patternOpacity, formConfig, onSubmit, onSuccess, onError, }: ContactSupportProps): React.JSX.Element;
|
|
91
|
+
declare function ContactSupport({ 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, }: ContactSupportProps): React.JSX.Element;
|
|
83
92
|
|
|
84
93
|
export { ContactSupport, type ContactSupportProps };
|
|
@@ -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,11 +7,6 @@ import 'class-variance-authority';
|
|
|
7
7
|
import './button-variants-lRElsmTc.js';
|
|
8
8
|
import 'class-variance-authority/types';
|
|
9
9
|
|
|
10
|
-
interface ContactSupportFormValues {
|
|
11
|
-
name: string;
|
|
12
|
-
email: string;
|
|
13
|
-
message: string;
|
|
14
|
-
}
|
|
15
10
|
interface ContactSupportProps {
|
|
16
11
|
/** Main heading text */
|
|
17
12
|
heading?: React.ReactNode;
|
|
@@ -25,6 +20,16 @@ interface ContactSupportProps {
|
|
|
25
20
|
actions?: ActionConfig[];
|
|
26
21
|
/** Custom slot for rendering actions (overrides actions array) */
|
|
27
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;
|
|
28
33
|
/** Additional CSS classes for the section */
|
|
29
34
|
className?: string;
|
|
30
35
|
/** Additional CSS classes for the container */
|
|
@@ -42,7 +47,12 @@ interface ContactSupportProps {
|
|
|
42
47
|
/** Additional CSS classes for the form */
|
|
43
48
|
formClassName?: string;
|
|
44
49
|
/** Additional CSS classes for the submit button */
|
|
45
|
-
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
|
+
/**
|
|
46
56
|
* Background style for the section
|
|
47
57
|
*/
|
|
48
58
|
background?: SectionBackground;
|
|
@@ -61,24 +71,23 @@ interface ContactSupportProps {
|
|
|
61
71
|
/** Form configuration for PageSpeed forms */
|
|
62
72
|
formConfig?: PageSpeedFormConfig;
|
|
63
73
|
/** Custom submit handler */
|
|
64
|
-
onSubmit?: (values:
|
|
74
|
+
onSubmit?: (values: Record<string, any>) => void | Promise<void>;
|
|
65
75
|
/** Success callback */
|
|
66
76
|
onSuccess?: (data: unknown) => void;
|
|
67
77
|
/** Error callback */
|
|
68
78
|
onError?: (error: Error) => void;
|
|
69
79
|
}
|
|
70
80
|
/**
|
|
71
|
-
* ContactSupport -
|
|
72
|
-
* Perfect for customer support and help desk scenarios.
|
|
81
|
+
* ContactSupport - Contact form with flexible field configuration
|
|
73
82
|
*
|
|
74
83
|
* @example
|
|
75
84
|
* ```tsx
|
|
76
85
|
* <ContactSupport
|
|
77
|
-
* heading="
|
|
86
|
+
* heading="Get Support"
|
|
78
87
|
* formConfig={{ endpoint: "/api/contact", format: "json" }}
|
|
79
88
|
* />
|
|
80
89
|
* ```
|
|
81
90
|
*/
|
|
82
|
-
declare function ContactSupport({ heading, description, buttonText, buttonIcon, actions, actionsSlot, className, containerClassName, headerClassName, headingClassName, descriptionClassName, cardClassName, cardContentClassName, formClassName, submitClassName, background, spacing, pattern, patternOpacity, formConfig, onSubmit, onSuccess, onError, }: ContactSupportProps): React.JSX.Element;
|
|
91
|
+
declare function ContactSupport({ 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, }: ContactSupportProps): React.JSX.Element;
|
|
83
92
|
|
|
84
93
|
export { ContactSupport, type ContactSupportProps };
|