@uptrademedia/site-kit 1.0.1 → 1.0.4
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/SetupWizard-Cki06kB0.d.mts +12 -0
- package/dist/SetupWizard-Cki06kB0.d.ts +12 -0
- package/dist/analytics/index.d.mts +87 -0
- package/dist/analytics/index.d.ts +87 -0
- package/dist/blog/index.d.mts +24 -0
- package/dist/blog/index.d.ts +24 -0
- package/dist/blog/index.js.map +1 -1
- package/dist/blog/index.mjs.map +1 -1
- package/dist/chunk-2IHTEKHU.mjs +332 -0
- package/dist/chunk-2IHTEKHU.mjs.map +1 -0
- package/dist/chunk-5R4R3WDP.js +1451 -0
- package/dist/chunk-5R4R3WDP.js.map +1 -0
- package/dist/{chunk-RV7H3I6J.js → chunk-ADHVEFWD.js} +68 -2
- package/dist/chunk-ADHVEFWD.js.map +1 -0
- package/dist/chunk-BGJLOJ7T.mjs +605 -0
- package/dist/chunk-BGJLOJ7T.mjs.map +1 -0
- package/dist/chunk-BZBJVG5Y.js +88 -0
- package/dist/chunk-BZBJVG5Y.js.map +1 -0
- package/dist/{chunk-COI6GOX2.mjs → chunk-DOHML47I.mjs} +3 -3
- package/dist/chunk-DOHML47I.mjs.map +1 -0
- package/dist/chunk-DRFTRTKV.js +809 -0
- package/dist/chunk-DRFTRTKV.js.map +1 -0
- package/dist/chunk-EL5QTAA3.mjs +805 -0
- package/dist/chunk-EL5QTAA3.mjs.map +1 -0
- package/dist/chunk-GAJLEDRD.js +334 -0
- package/dist/chunk-GAJLEDRD.js.map +1 -0
- package/dist/{chunk-3MUOUXHV.js → chunk-K2HWVOEO.js} +3 -3
- package/dist/chunk-K2HWVOEO.js.map +1 -0
- package/dist/chunk-O2OHHBUD.js +997 -0
- package/dist/chunk-O2OHHBUD.js.map +1 -0
- package/dist/chunk-QAYJV4KK.js +608 -0
- package/dist/chunk-QAYJV4KK.js.map +1 -0
- package/dist/{chunk-FEBYQGY4 2.mjs → chunk-SMUFNQLM.mjs} +67 -3
- package/dist/chunk-SMUFNQLM.mjs.map +1 -0
- package/dist/chunk-VDMZZL2O.mjs +83 -0
- package/dist/chunk-VDMZZL2O.mjs.map +1 -0
- package/dist/chunk-XFRPT5ZX.mjs +1449 -0
- package/dist/chunk-XFRPT5ZX.mjs.map +1 -0
- package/dist/chunk-XQJX252G.mjs +981 -0
- package/dist/chunk-XQJX252G.mjs.map +1 -0
- package/dist/commerce/index.d.mts +168 -0
- package/dist/commerce/index.d.ts +168 -0
- package/dist/commerce/index.js +38 -38
- package/dist/commerce/index.mjs +1 -1
- package/dist/commerce/server.d.mts +98 -0
- package/dist/commerce/server.d.ts +98 -0
- package/dist/engage/index.d.mts +27 -0
- package/dist/engage/index.d.ts +27 -0
- package/dist/engage/index.js +7 -40
- package/dist/engage/index.js.map +1 -1
- package/dist/engage/index.mjs +1 -41
- package/dist/engage/index.mjs.map +1 -1
- package/dist/forms/index.d.mts +437 -0
- package/dist/forms/index.d.ts +437 -0
- package/dist/forms/index.js +13 -5
- package/dist/forms/index.js.map +1 -1
- package/dist/forms/index.mjs +2 -2
- package/dist/forms/index.mjs.map +1 -1
- package/dist/{generators-7Y5ABRYV 2.mjs → generators-TO2FKJR6.mjs} +134 -3
- package/dist/generators-TO2FKJR6.mjs.map +1 -0
- package/dist/{generators-GWIYCA5M.js → generators-YZWIGHCO.js} +135 -2
- package/dist/generators-YZWIGHCO.js.map +1 -0
- package/dist/images/index.d.mts +133 -0
- package/dist/images/index.d.ts +133 -0
- package/dist/images/index.js +41 -0
- package/dist/images/index.js.map +1 -0
- package/dist/images/index.mjs +8 -0
- package/dist/images/index.mjs.map +1 -0
- package/dist/index.d.mts +649 -0
- package/dist/index.d.ts +649 -0
- package/dist/index.js +1355 -104
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1242 -76
- package/dist/index.mjs.map +1 -1
- package/dist/redirects/index.d.mts +72 -0
- package/dist/redirects/index.d.ts +72 -0
- package/dist/redirects/index.js +25 -0
- package/dist/redirects/index.js.map +1 -0
- package/dist/redirects/index.mjs +4 -0
- package/dist/redirects/index.mjs.map +1 -0
- package/dist/routing-BWjUF7lp.d.ts +105 -0
- package/dist/routing-CgmRi9tD.d.mts +105 -0
- package/dist/{scanner-MF7P3CDE 2.mjs → scanner-AZV5I6US.mjs} +123 -4
- package/dist/scanner-AZV5I6US.mjs.map +1 -0
- package/dist/{scanner-NT6YG4TD 2.js → scanner-ETJAMIT7.js} +124 -3
- package/dist/scanner-ETJAMIT7.js.map +1 -0
- package/dist/seo/index.d.mts +273 -0
- package/dist/seo/index.d.ts +273 -0
- package/dist/seo/server.d.mts +89 -0
- package/dist/seo/server.d.ts +89 -0
- package/dist/setup/client.d.mts +60 -0
- package/dist/setup/client.d.ts +60 -0
- package/dist/setup/client.js +30 -0
- package/dist/setup/client.js.map +1 -0
- package/dist/setup/client.mjs +5 -0
- package/dist/setup/client.mjs.map +1 -0
- package/dist/setup/index.d.mts +5 -0
- package/dist/setup/index.d.ts +5 -0
- package/dist/setup/index.js +28 -1043
- package/dist/setup/index.js.map +1 -1
- package/dist/setup/index.mjs +3 -1043
- package/dist/setup/index.mjs.map +1 -1
- package/dist/setup/server.d.mts +14 -0
- package/dist/setup/server.d.ts +14 -0
- package/dist/setup/server.js +13 -0
- package/dist/setup/server.js.map +1 -0
- package/dist/setup/server.mjs +4 -0
- package/dist/setup/server.mjs.map +1 -0
- package/dist/sitemap/index.d.mts +78 -0
- package/dist/sitemap/index.d.ts +78 -0
- package/dist/types-BDojCvvL.d.mts +156 -0
- package/dist/types-BDojCvvL.d.ts +156 -0
- package/dist/types-BmzutFwy.d.mts +227 -0
- package/dist/types-BmzutFwy.d.ts +227 -0
- package/dist/types-C0pJGfbH.d.mts +155 -0
- package/dist/types-C0pJGfbH.d.ts +155 -0
- package/dist/types-DA_Kocle.d.mts +127 -0
- package/dist/types-DA_Kocle.d.ts +127 -0
- package/dist/types-lFLKKn0G.d.mts +163 -0
- package/dist/types-lFLKKn0G.d.ts +163 -0
- package/dist/types-nB206tPK.d.mts +309 -0
- package/dist/types-nB206tPK.d.ts +309 -0
- package/dist/useEventModal-6U1pF3_g.d.mts +209 -0
- package/dist/useEventModal-BA8g-1-P.d.ts +209 -0
- package/package.json +21 -1
- package/dist/chunk-3MUOUXHV.js.map +0 -1
- package/dist/chunk-4HVYXYQL 2.mjs +0 -255
- package/dist/chunk-4HVYXYQL.mjs +0 -255
- package/dist/chunk-4HVYXYQL.mjs.map +0 -1
- package/dist/chunk-COI6GOX2.mjs.map +0 -1
- package/dist/chunk-EQCVQC35.js 2.map +0 -1
- package/dist/chunk-FEBYQGY4.mjs +0 -251
- package/dist/chunk-FEBYQGY4.mjs.map +0 -1
- package/dist/chunk-NYKRE2FL 2.mjs +0 -31
- package/dist/chunk-NYKRE2FL.mjs 2.map +0 -1
- package/dist/chunk-RV7H3I6J.js 2.map +0 -1
- package/dist/chunk-RV7H3I6J.js.map +0 -1
- package/dist/chunk-TUKGA3UK.js +0 -257
- package/dist/chunk-TUKGA3UK.js 2.map +0 -1
- package/dist/chunk-TUKGA3UK.js.map +0 -1
- package/dist/generators-7Y5ABRYV.mjs +0 -161
- package/dist/generators-7Y5ABRYV.mjs 2.map +0 -1
- package/dist/generators-7Y5ABRYV.mjs.map +0 -1
- package/dist/generators-GWIYCA5M.js 2.map +0 -1
- package/dist/generators-GWIYCA5M.js.map +0 -1
- package/dist/index 2.mjs +0 -74
- package/dist/index.js 2.map +0 -1
- package/dist/migrator-V6KS75EA 2.mjs +0 -265
- package/dist/migrator-V6KS75EA.mjs 2.map +0 -1
- package/dist/migrator-XKM7YQCY.js 2.map +0 -1
- package/dist/scanner-MF7P3CDE.mjs +0 -14386
- package/dist/scanner-MF7P3CDE.mjs 2.map +0 -1
- package/dist/scanner-MF7P3CDE.mjs.map +0 -1
- package/dist/scanner-NT6YG4TD.js +0 -14397
- package/dist/scanner-NT6YG4TD.js 2.map +0 -1
- package/dist/scanner-NT6YG4TD.js.map +0 -1
- package/dist/web-vitals-BH55V7EJ.js 2.map +0 -1
- package/dist/web-vitals-RJYPWAR3 2.mjs +0 -241
- package/dist/web-vitals-RJYPWAR3.mjs 2.map +0 -1
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @uptrade/site-kit/forms - Type definitions
|
|
3
|
+
*/
|
|
4
|
+
interface ManagedFormConfig {
|
|
5
|
+
id: string;
|
|
6
|
+
project_id: string;
|
|
7
|
+
slug: string;
|
|
8
|
+
name: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
instructions?: string;
|
|
11
|
+
/** Form type determines routing */
|
|
12
|
+
form_type: FormRoutingType;
|
|
13
|
+
/** Configuration */
|
|
14
|
+
success_message: string;
|
|
15
|
+
redirect_url?: string;
|
|
16
|
+
notification_emails?: string[];
|
|
17
|
+
/** Appearance */
|
|
18
|
+
submit_button_text: string;
|
|
19
|
+
layout: 'stacked' | 'inline' | 'grid';
|
|
20
|
+
/** Behavior - multi-step */
|
|
21
|
+
show_progress: boolean;
|
|
22
|
+
enable_save_draft: boolean;
|
|
23
|
+
honeypot_enabled?: boolean;
|
|
24
|
+
/** Status */
|
|
25
|
+
is_active: boolean;
|
|
26
|
+
/** Timestamps */
|
|
27
|
+
created_at: string;
|
|
28
|
+
updated_at: string;
|
|
29
|
+
/** Relations */
|
|
30
|
+
steps?: FormStep[];
|
|
31
|
+
fields?: FormField[];
|
|
32
|
+
total_steps: number;
|
|
33
|
+
is_multi_step: boolean;
|
|
34
|
+
}
|
|
35
|
+
type FormRoutingType = 'prospect' | 'contact' | 'support' | 'feedback' | 'newsletter' | 'custom';
|
|
36
|
+
interface FormStep {
|
|
37
|
+
id: string;
|
|
38
|
+
form_id: string;
|
|
39
|
+
step_number: number;
|
|
40
|
+
title?: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
/** Conditional display based on field values */
|
|
43
|
+
condition?: ConditionalLogic;
|
|
44
|
+
}
|
|
45
|
+
type FieldType = 'text' | 'email' | 'phone' | 'number' | 'textarea' | 'select' | 'multi-select' | 'checkbox' | 'radio' | 'date' | 'time' | 'datetime' | 'file' | 'signature' | 'rating' | 'slider' | 'hidden' | 'heading' | 'paragraph';
|
|
46
|
+
interface FormField {
|
|
47
|
+
id: string;
|
|
48
|
+
form_id: string;
|
|
49
|
+
step_id?: string;
|
|
50
|
+
slug: string;
|
|
51
|
+
label: string;
|
|
52
|
+
placeholder?: string;
|
|
53
|
+
help_text?: string;
|
|
54
|
+
/** Field type */
|
|
55
|
+
field_type: FieldType;
|
|
56
|
+
/** Options (for select, radio, checkbox) */
|
|
57
|
+
options?: FieldOption[];
|
|
58
|
+
/** Validation */
|
|
59
|
+
is_required: boolean;
|
|
60
|
+
validation?: ValidationRules;
|
|
61
|
+
/** Conditional logic */
|
|
62
|
+
conditional?: ConditionalLogic;
|
|
63
|
+
/** Mapping for routing */
|
|
64
|
+
destination_field?: string;
|
|
65
|
+
/** Layout */
|
|
66
|
+
width: 'full' | 'half' | 'third' | 'quarter';
|
|
67
|
+
sort_order: number;
|
|
68
|
+
/** Default value */
|
|
69
|
+
default_value?: string;
|
|
70
|
+
}
|
|
71
|
+
interface FieldOption {
|
|
72
|
+
value: string;
|
|
73
|
+
label: string;
|
|
74
|
+
}
|
|
75
|
+
interface ValidationRules {
|
|
76
|
+
min_length?: number;
|
|
77
|
+
max_length?: number;
|
|
78
|
+
min?: number;
|
|
79
|
+
max?: number;
|
|
80
|
+
pattern?: string;
|
|
81
|
+
custom_error?: string;
|
|
82
|
+
}
|
|
83
|
+
interface ConditionalLogic {
|
|
84
|
+
show_when: {
|
|
85
|
+
field: string;
|
|
86
|
+
operator: 'equals' | 'not_equals' | 'contains' | 'not_contains' | 'greater_than' | 'less_than' | 'is_empty' | 'not_empty';
|
|
87
|
+
value?: string | number | boolean;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
interface FormSubmission {
|
|
91
|
+
id: string;
|
|
92
|
+
form_id: string;
|
|
93
|
+
project_id: string;
|
|
94
|
+
/** Submitted data */
|
|
95
|
+
data: Record<string, unknown>;
|
|
96
|
+
/** Routing */
|
|
97
|
+
routing_type: FormRoutingType;
|
|
98
|
+
routing_status: 'pending' | 'processing' | 'completed' | 'failed';
|
|
99
|
+
routed_to_id?: string;
|
|
100
|
+
routed_to_type?: string;
|
|
101
|
+
routing_error?: string;
|
|
102
|
+
/** Source */
|
|
103
|
+
source_url?: string;
|
|
104
|
+
source_page?: string;
|
|
105
|
+
utm_source?: string;
|
|
106
|
+
utm_medium?: string;
|
|
107
|
+
utm_campaign?: string;
|
|
108
|
+
referrer?: string;
|
|
109
|
+
/** Visitor */
|
|
110
|
+
ip_address?: string;
|
|
111
|
+
user_agent?: string;
|
|
112
|
+
session_id?: string;
|
|
113
|
+
/** Spam */
|
|
114
|
+
is_spam: boolean;
|
|
115
|
+
spam_score?: number;
|
|
116
|
+
created_at: string;
|
|
117
|
+
}
|
|
118
|
+
interface ManagedFormProps {
|
|
119
|
+
/** Form key from Portal */
|
|
120
|
+
formId: string;
|
|
121
|
+
/** Project ID */
|
|
122
|
+
projectId: string;
|
|
123
|
+
/** Custom class name */
|
|
124
|
+
className?: string;
|
|
125
|
+
/** Success callback */
|
|
126
|
+
onSuccess?: (submission: FormSubmission) => void;
|
|
127
|
+
/** Error callback */
|
|
128
|
+
onError?: (error: Error) => void;
|
|
129
|
+
/** Custom render function */
|
|
130
|
+
children?: (props: FormRenderProps) => React.ReactNode;
|
|
131
|
+
}
|
|
132
|
+
interface FormRenderProps {
|
|
133
|
+
/** Form configuration */
|
|
134
|
+
config: ManagedFormConfig;
|
|
135
|
+
/** All fields for current step */
|
|
136
|
+
fields: FormField[];
|
|
137
|
+
/** Current step (1-indexed) */
|
|
138
|
+
step: number;
|
|
139
|
+
/** Total steps */
|
|
140
|
+
totalSteps: number;
|
|
141
|
+
/** Current values */
|
|
142
|
+
values: Record<string, unknown>;
|
|
143
|
+
/** Validation errors */
|
|
144
|
+
errors: Record<string, string>;
|
|
145
|
+
/** Submit in progress */
|
|
146
|
+
isSubmitting: boolean;
|
|
147
|
+
/** Progress percentage */
|
|
148
|
+
progress: number;
|
|
149
|
+
/** Go to next step */
|
|
150
|
+
nextStep: () => boolean;
|
|
151
|
+
/** Go to previous step */
|
|
152
|
+
prevStep: () => void;
|
|
153
|
+
/** Go to specific step */
|
|
154
|
+
goToStep: (step: number) => void;
|
|
155
|
+
/** Submit the form */
|
|
156
|
+
submit: () => Promise<void>;
|
|
157
|
+
/** Set field value */
|
|
158
|
+
setFieldValue: (key: string, value: unknown) => void;
|
|
159
|
+
/** Check if field should be visible (conditional logic) */
|
|
160
|
+
isFieldVisible: (field: FormField) => boolean;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export type { FormSubmission as F, ManagedFormConfig as M, FormField as a, ManagedFormProps as b, FormRenderProps as c };
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @uptrade/site-kit/forms - Type definitions
|
|
3
|
+
*/
|
|
4
|
+
interface ManagedFormConfig {
|
|
5
|
+
id: string;
|
|
6
|
+
project_id: string;
|
|
7
|
+
slug: string;
|
|
8
|
+
name: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
instructions?: string;
|
|
11
|
+
/** Form type determines routing */
|
|
12
|
+
form_type: FormRoutingType;
|
|
13
|
+
/** Configuration */
|
|
14
|
+
success_message: string;
|
|
15
|
+
redirect_url?: string;
|
|
16
|
+
notification_emails?: string[];
|
|
17
|
+
/** Appearance */
|
|
18
|
+
submit_button_text: string;
|
|
19
|
+
layout: 'stacked' | 'inline' | 'grid';
|
|
20
|
+
/** Behavior - multi-step */
|
|
21
|
+
show_progress: boolean;
|
|
22
|
+
enable_save_draft: boolean;
|
|
23
|
+
honeypot_enabled?: boolean;
|
|
24
|
+
/** Status */
|
|
25
|
+
is_active: boolean;
|
|
26
|
+
/** Timestamps */
|
|
27
|
+
created_at: string;
|
|
28
|
+
updated_at: string;
|
|
29
|
+
/** Relations */
|
|
30
|
+
steps?: FormStep[];
|
|
31
|
+
fields?: FormField[];
|
|
32
|
+
total_steps: number;
|
|
33
|
+
is_multi_step: boolean;
|
|
34
|
+
}
|
|
35
|
+
type FormRoutingType = 'prospect' | 'contact' | 'support' | 'feedback' | 'newsletter' | 'custom';
|
|
36
|
+
interface FormStep {
|
|
37
|
+
id: string;
|
|
38
|
+
form_id: string;
|
|
39
|
+
step_number: number;
|
|
40
|
+
title?: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
/** Conditional display based on field values */
|
|
43
|
+
condition?: ConditionalLogic;
|
|
44
|
+
}
|
|
45
|
+
type FieldType = 'text' | 'email' | 'phone' | 'number' | 'textarea' | 'select' | 'multi-select' | 'checkbox' | 'radio' | 'date' | 'time' | 'datetime' | 'file' | 'signature' | 'rating' | 'slider' | 'hidden' | 'heading' | 'paragraph';
|
|
46
|
+
interface FormField {
|
|
47
|
+
id: string;
|
|
48
|
+
form_id: string;
|
|
49
|
+
step_id?: string;
|
|
50
|
+
slug: string;
|
|
51
|
+
label: string;
|
|
52
|
+
placeholder?: string;
|
|
53
|
+
help_text?: string;
|
|
54
|
+
/** Field type */
|
|
55
|
+
field_type: FieldType;
|
|
56
|
+
/** Options (for select, radio, checkbox) */
|
|
57
|
+
options?: FieldOption[];
|
|
58
|
+
/** Validation */
|
|
59
|
+
is_required: boolean;
|
|
60
|
+
validation?: ValidationRules;
|
|
61
|
+
/** Conditional logic */
|
|
62
|
+
conditional?: ConditionalLogic;
|
|
63
|
+
/** Mapping for routing */
|
|
64
|
+
destination_field?: string;
|
|
65
|
+
/** Layout */
|
|
66
|
+
width: 'full' | 'half' | 'third' | 'quarter';
|
|
67
|
+
sort_order: number;
|
|
68
|
+
/** Default value */
|
|
69
|
+
default_value?: string;
|
|
70
|
+
}
|
|
71
|
+
interface FieldOption {
|
|
72
|
+
value: string;
|
|
73
|
+
label: string;
|
|
74
|
+
}
|
|
75
|
+
interface ValidationRules {
|
|
76
|
+
min_length?: number;
|
|
77
|
+
max_length?: number;
|
|
78
|
+
min?: number;
|
|
79
|
+
max?: number;
|
|
80
|
+
pattern?: string;
|
|
81
|
+
custom_error?: string;
|
|
82
|
+
}
|
|
83
|
+
interface ConditionalLogic {
|
|
84
|
+
show_when: {
|
|
85
|
+
field: string;
|
|
86
|
+
operator: 'equals' | 'not_equals' | 'contains' | 'not_contains' | 'greater_than' | 'less_than' | 'is_empty' | 'not_empty';
|
|
87
|
+
value?: string | number | boolean;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
interface FormSubmission {
|
|
91
|
+
id: string;
|
|
92
|
+
form_id: string;
|
|
93
|
+
project_id: string;
|
|
94
|
+
/** Submitted data */
|
|
95
|
+
data: Record<string, unknown>;
|
|
96
|
+
/** Routing */
|
|
97
|
+
routing_type: FormRoutingType;
|
|
98
|
+
routing_status: 'pending' | 'processing' | 'completed' | 'failed';
|
|
99
|
+
routed_to_id?: string;
|
|
100
|
+
routed_to_type?: string;
|
|
101
|
+
routing_error?: string;
|
|
102
|
+
/** Source */
|
|
103
|
+
source_url?: string;
|
|
104
|
+
source_page?: string;
|
|
105
|
+
utm_source?: string;
|
|
106
|
+
utm_medium?: string;
|
|
107
|
+
utm_campaign?: string;
|
|
108
|
+
referrer?: string;
|
|
109
|
+
/** Visitor */
|
|
110
|
+
ip_address?: string;
|
|
111
|
+
user_agent?: string;
|
|
112
|
+
session_id?: string;
|
|
113
|
+
/** Spam */
|
|
114
|
+
is_spam: boolean;
|
|
115
|
+
spam_score?: number;
|
|
116
|
+
created_at: string;
|
|
117
|
+
}
|
|
118
|
+
interface ManagedFormProps {
|
|
119
|
+
/** Form key from Portal */
|
|
120
|
+
formId: string;
|
|
121
|
+
/** Project ID */
|
|
122
|
+
projectId: string;
|
|
123
|
+
/** Custom class name */
|
|
124
|
+
className?: string;
|
|
125
|
+
/** Success callback */
|
|
126
|
+
onSuccess?: (submission: FormSubmission) => void;
|
|
127
|
+
/** Error callback */
|
|
128
|
+
onError?: (error: Error) => void;
|
|
129
|
+
/** Custom render function */
|
|
130
|
+
children?: (props: FormRenderProps) => React.ReactNode;
|
|
131
|
+
}
|
|
132
|
+
interface FormRenderProps {
|
|
133
|
+
/** Form configuration */
|
|
134
|
+
config: ManagedFormConfig;
|
|
135
|
+
/** All fields for current step */
|
|
136
|
+
fields: FormField[];
|
|
137
|
+
/** Current step (1-indexed) */
|
|
138
|
+
step: number;
|
|
139
|
+
/** Total steps */
|
|
140
|
+
totalSteps: number;
|
|
141
|
+
/** Current values */
|
|
142
|
+
values: Record<string, unknown>;
|
|
143
|
+
/** Validation errors */
|
|
144
|
+
errors: Record<string, string>;
|
|
145
|
+
/** Submit in progress */
|
|
146
|
+
isSubmitting: boolean;
|
|
147
|
+
/** Progress percentage */
|
|
148
|
+
progress: number;
|
|
149
|
+
/** Go to next step */
|
|
150
|
+
nextStep: () => boolean;
|
|
151
|
+
/** Go to previous step */
|
|
152
|
+
prevStep: () => void;
|
|
153
|
+
/** Go to specific step */
|
|
154
|
+
goToStep: (step: number) => void;
|
|
155
|
+
/** Submit the form */
|
|
156
|
+
submit: () => Promise<void>;
|
|
157
|
+
/** Set field value */
|
|
158
|
+
setFieldValue: (key: string, value: unknown) => void;
|
|
159
|
+
/** Check if field should be visible (conditional logic) */
|
|
160
|
+
isFieldVisible: (field: FormField) => boolean;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export type { FormSubmission as F, ManagedFormConfig as M, FormField as a, ManagedFormProps as b, FormRenderProps as c };
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @uptrade/site-kit/commerce - Commerce Types
|
|
3
|
+
*
|
|
4
|
+
* Types for products, services, classes, events, and checkout flows.
|
|
5
|
+
*/
|
|
6
|
+
type OfferingType = 'product' | 'service' | 'class' | 'event' | 'subscription';
|
|
7
|
+
type OfferingStatus = 'draft' | 'active' | 'archived' | 'sold_out';
|
|
8
|
+
type PriceType = 'fixed' | 'variable' | 'quote' | 'free';
|
|
9
|
+
interface CommerceOffering {
|
|
10
|
+
id: string;
|
|
11
|
+
project_id: string;
|
|
12
|
+
type: OfferingType;
|
|
13
|
+
status: OfferingStatus;
|
|
14
|
+
name: string;
|
|
15
|
+
slug: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
short_description?: string;
|
|
18
|
+
long_description?: string;
|
|
19
|
+
featured_image_url?: string;
|
|
20
|
+
gallery_images?: string[];
|
|
21
|
+
price_type: PriceType;
|
|
22
|
+
price?: number;
|
|
23
|
+
compare_at_price?: number;
|
|
24
|
+
currency: string;
|
|
25
|
+
price_is_public: boolean;
|
|
26
|
+
billing_period?: 'weekly' | 'monthly' | 'quarterly' | 'yearly';
|
|
27
|
+
track_inventory?: boolean;
|
|
28
|
+
inventory_count?: number;
|
|
29
|
+
allow_backorder?: boolean;
|
|
30
|
+
duration_minutes?: number;
|
|
31
|
+
capacity?: number;
|
|
32
|
+
location?: string;
|
|
33
|
+
is_virtual?: boolean;
|
|
34
|
+
virtual_meeting_url?: string;
|
|
35
|
+
requires_booking?: boolean;
|
|
36
|
+
booking_lead_time_hours?: number;
|
|
37
|
+
category?: CommerceCategory;
|
|
38
|
+
category_id?: string;
|
|
39
|
+
tags?: string[];
|
|
40
|
+
seo_title?: string;
|
|
41
|
+
seo_description?: string;
|
|
42
|
+
features?: string[];
|
|
43
|
+
specifications?: Record<string, string>;
|
|
44
|
+
schedules?: CommerceSchedule[];
|
|
45
|
+
next_schedule?: CommerceSchedule;
|
|
46
|
+
variants?: CommerceVariant[];
|
|
47
|
+
created_at: string;
|
|
48
|
+
updated_at?: string;
|
|
49
|
+
}
|
|
50
|
+
interface CommerceCategory {
|
|
51
|
+
id: string;
|
|
52
|
+
name: string;
|
|
53
|
+
slug: string;
|
|
54
|
+
description?: string;
|
|
55
|
+
image_url?: string;
|
|
56
|
+
parent_id?: string;
|
|
57
|
+
}
|
|
58
|
+
interface CommerceVariant {
|
|
59
|
+
id: string;
|
|
60
|
+
offering_id: string;
|
|
61
|
+
name: string;
|
|
62
|
+
sku?: string;
|
|
63
|
+
price?: number;
|
|
64
|
+
inventory_count?: number;
|
|
65
|
+
options?: Record<string, string>;
|
|
66
|
+
image_url?: string;
|
|
67
|
+
is_default?: boolean;
|
|
68
|
+
}
|
|
69
|
+
interface CommerceSchedule {
|
|
70
|
+
id: string;
|
|
71
|
+
offering_id: string;
|
|
72
|
+
starts_at: string;
|
|
73
|
+
ends_at: string;
|
|
74
|
+
timezone: string;
|
|
75
|
+
capacity?: number;
|
|
76
|
+
spots_remaining?: number;
|
|
77
|
+
status: 'scheduled' | 'cancelled' | 'completed';
|
|
78
|
+
is_recurring?: boolean;
|
|
79
|
+
}
|
|
80
|
+
interface CartItem {
|
|
81
|
+
offering: CommerceOffering;
|
|
82
|
+
variant?: CommerceVariant;
|
|
83
|
+
schedule?: CommerceSchedule;
|
|
84
|
+
quantity: number;
|
|
85
|
+
unit_price: number;
|
|
86
|
+
total_price: number;
|
|
87
|
+
}
|
|
88
|
+
interface Cart {
|
|
89
|
+
items: CartItem[];
|
|
90
|
+
subtotal: number;
|
|
91
|
+
tax_amount: number;
|
|
92
|
+
discount_amount: number;
|
|
93
|
+
total: number;
|
|
94
|
+
discount_code?: string;
|
|
95
|
+
}
|
|
96
|
+
interface CheckoutCustomer {
|
|
97
|
+
name: string;
|
|
98
|
+
email: string;
|
|
99
|
+
phone?: string;
|
|
100
|
+
}
|
|
101
|
+
interface CheckoutResult {
|
|
102
|
+
success: boolean;
|
|
103
|
+
sale_id?: string;
|
|
104
|
+
payment_url?: string;
|
|
105
|
+
checkout_url?: string;
|
|
106
|
+
confirmation_number?: string;
|
|
107
|
+
error?: string;
|
|
108
|
+
}
|
|
109
|
+
interface OfferingCardProps {
|
|
110
|
+
offering: CommerceOffering;
|
|
111
|
+
variant?: 'card' | 'horizontal' | 'minimal' | 'featured';
|
|
112
|
+
showImage?: boolean;
|
|
113
|
+
showPrice?: boolean;
|
|
114
|
+
showDescription?: boolean;
|
|
115
|
+
showCta?: boolean;
|
|
116
|
+
ctaText?: string;
|
|
117
|
+
onCtaClick?: (offering: CommerceOffering) => void;
|
|
118
|
+
onSelect?: (offering: CommerceOffering) => void;
|
|
119
|
+
className?: string;
|
|
120
|
+
imageClassName?: string;
|
|
121
|
+
titleClassName?: string;
|
|
122
|
+
priceClassName?: string;
|
|
123
|
+
descriptionClassName?: string;
|
|
124
|
+
ctaClassName?: string;
|
|
125
|
+
}
|
|
126
|
+
interface OfferingListProps {
|
|
127
|
+
projectId?: string;
|
|
128
|
+
offerings?: CommerceOffering[];
|
|
129
|
+
type?: OfferingType | OfferingType[];
|
|
130
|
+
category?: string;
|
|
131
|
+
limit?: number;
|
|
132
|
+
status?: OfferingStatus;
|
|
133
|
+
layout?: 'grid' | 'list' | 'carousel';
|
|
134
|
+
columns?: 2 | 3 | 4;
|
|
135
|
+
cardVariant?: 'card' | 'minimal' | 'featured';
|
|
136
|
+
showFilters?: boolean;
|
|
137
|
+
emptyMessage?: string;
|
|
138
|
+
showImage?: boolean;
|
|
139
|
+
showPrice?: boolean;
|
|
140
|
+
showDescription?: boolean;
|
|
141
|
+
showCta?: boolean;
|
|
142
|
+
ctaText?: string;
|
|
143
|
+
onCtaClick?: (offering: CommerceOffering) => void;
|
|
144
|
+
onSelect?: (offering: CommerceOffering) => void;
|
|
145
|
+
className?: string;
|
|
146
|
+
cardClassName?: string;
|
|
147
|
+
filterClassName?: string;
|
|
148
|
+
renderCard?: (offering: CommerceOffering) => React.ReactNode;
|
|
149
|
+
renderEmpty?: () => React.ReactNode;
|
|
150
|
+
}
|
|
151
|
+
interface OfferingDetailProps {
|
|
152
|
+
projectId: string;
|
|
153
|
+
slug: string;
|
|
154
|
+
showBooking?: boolean;
|
|
155
|
+
showCheckout?: boolean;
|
|
156
|
+
onAddToCart?: (offering: CommerceOffering, variant?: CommerceVariant) => void;
|
|
157
|
+
className?: string;
|
|
158
|
+
}
|
|
159
|
+
interface EventTileProps {
|
|
160
|
+
event: CommerceOffering;
|
|
161
|
+
schedule?: CommerceSchedule;
|
|
162
|
+
variant?: 'standard' | 'compact' | 'featured';
|
|
163
|
+
showDate?: boolean;
|
|
164
|
+
showTime?: boolean;
|
|
165
|
+
showLocation?: boolean;
|
|
166
|
+
showCapacity?: boolean;
|
|
167
|
+
showPrice?: boolean;
|
|
168
|
+
showCta?: boolean;
|
|
169
|
+
ctaText?: string;
|
|
170
|
+
showRegistration?: boolean;
|
|
171
|
+
compact?: boolean;
|
|
172
|
+
onRegister?: (event: CommerceOffering, schedule: CommerceSchedule) => void;
|
|
173
|
+
onCtaClick?: (event: CommerceOffering) => void;
|
|
174
|
+
className?: string;
|
|
175
|
+
dateClassName?: string;
|
|
176
|
+
titleClassName?: string;
|
|
177
|
+
ctaClassName?: string;
|
|
178
|
+
}
|
|
179
|
+
interface UpcomingEventsProps {
|
|
180
|
+
projectId?: string;
|
|
181
|
+
events?: CommerceOffering[];
|
|
182
|
+
limit?: number;
|
|
183
|
+
category?: string;
|
|
184
|
+
variant?: 'standard' | 'compact';
|
|
185
|
+
showPast?: boolean;
|
|
186
|
+
layout?: 'list' | 'grid' | 'calendar' | 'vertical' | 'horizontal';
|
|
187
|
+
showViewAll?: boolean;
|
|
188
|
+
viewAllUrl?: string;
|
|
189
|
+
viewAllText?: string;
|
|
190
|
+
emptyMessage?: string;
|
|
191
|
+
title?: string;
|
|
192
|
+
onSelect?: (event: CommerceOffering, schedule: CommerceSchedule) => void;
|
|
193
|
+
onRegister?: (event: CommerceOffering) => void;
|
|
194
|
+
onCtaClick?: (event: CommerceOffering) => void;
|
|
195
|
+
className?: string;
|
|
196
|
+
titleClassName?: string;
|
|
197
|
+
eventClassName?: string;
|
|
198
|
+
}
|
|
199
|
+
interface ProductEmbedProps {
|
|
200
|
+
projectId?: string;
|
|
201
|
+
product?: CommerceOffering;
|
|
202
|
+
/** Specific product slug, or 'latest' for most recent */
|
|
203
|
+
slug?: string | 'latest';
|
|
204
|
+
mode?: 'specific' | 'latest' | 'featured';
|
|
205
|
+
/** Category to filter by (used with 'latest') */
|
|
206
|
+
category?: string;
|
|
207
|
+
variant?: 'card' | 'horizontal' | 'minimal' | 'featured';
|
|
208
|
+
showImage?: boolean;
|
|
209
|
+
showPrice?: boolean;
|
|
210
|
+
showDescription?: boolean;
|
|
211
|
+
showBuyButton?: boolean;
|
|
212
|
+
showCta?: boolean;
|
|
213
|
+
ctaText?: string;
|
|
214
|
+
onCtaClick?: (offering: CommerceOffering) => void;
|
|
215
|
+
className?: string;
|
|
216
|
+
}
|
|
217
|
+
interface EventEmbedProps {
|
|
218
|
+
projectId?: string;
|
|
219
|
+
event?: CommerceOffering;
|
|
220
|
+
/** Specific event slug, or 'next' for upcoming */
|
|
221
|
+
slug?: string | 'next';
|
|
222
|
+
mode?: 'specific' | 'next';
|
|
223
|
+
/** Category to filter by */
|
|
224
|
+
category?: string;
|
|
225
|
+
variant?: 'standard' | 'compact' | 'featured';
|
|
226
|
+
showDate?: boolean;
|
|
227
|
+
showTime?: boolean;
|
|
228
|
+
showLocation?: boolean;
|
|
229
|
+
showCapacity?: boolean;
|
|
230
|
+
showPrice?: boolean;
|
|
231
|
+
showCta?: boolean;
|
|
232
|
+
ctaText?: string;
|
|
233
|
+
showRegistration?: boolean;
|
|
234
|
+
compact?: boolean;
|
|
235
|
+
onRegister?: (event: CommerceOffering) => void;
|
|
236
|
+
onCtaClick?: (event: CommerceOffering) => void;
|
|
237
|
+
className?: string;
|
|
238
|
+
}
|
|
239
|
+
interface CheckoutFormProps {
|
|
240
|
+
projectId?: string;
|
|
241
|
+
offering: CommerceOffering;
|
|
242
|
+
variant?: CommerceVariant;
|
|
243
|
+
schedule?: CommerceSchedule;
|
|
244
|
+
scheduleId?: string;
|
|
245
|
+
variantId?: string;
|
|
246
|
+
quantity?: number;
|
|
247
|
+
mode?: 'checkout' | 'register';
|
|
248
|
+
showQuantity?: boolean;
|
|
249
|
+
submitText?: string;
|
|
250
|
+
onSuccess?: (result: CheckoutResult) => void;
|
|
251
|
+
onError?: (error: string) => void;
|
|
252
|
+
className?: string;
|
|
253
|
+
formClassName?: string;
|
|
254
|
+
inputClassName?: string;
|
|
255
|
+
buttonClassName?: string;
|
|
256
|
+
}
|
|
257
|
+
interface AdditionalFieldOption {
|
|
258
|
+
value: string;
|
|
259
|
+
label: string;
|
|
260
|
+
}
|
|
261
|
+
interface AdditionalField {
|
|
262
|
+
name: string;
|
|
263
|
+
label: string;
|
|
264
|
+
type?: 'text' | 'email' | 'tel' | 'select' | 'textarea';
|
|
265
|
+
required?: boolean;
|
|
266
|
+
options?: AdditionalFieldOption[];
|
|
267
|
+
placeholder?: string;
|
|
268
|
+
}
|
|
269
|
+
interface RegistrationFormProps {
|
|
270
|
+
projectId?: string;
|
|
271
|
+
event: CommerceOffering;
|
|
272
|
+
schedule?: CommerceSchedule;
|
|
273
|
+
scheduleId?: string;
|
|
274
|
+
title?: string;
|
|
275
|
+
submitText?: string;
|
|
276
|
+
successMessage?: string;
|
|
277
|
+
collectPhone?: boolean;
|
|
278
|
+
additionalFields?: AdditionalField[];
|
|
279
|
+
onSuccess?: (result: CheckoutResult) => void;
|
|
280
|
+
onError?: (error: string) => void;
|
|
281
|
+
className?: string;
|
|
282
|
+
formClassName?: string;
|
|
283
|
+
inputClassName?: string;
|
|
284
|
+
buttonClassName?: string;
|
|
285
|
+
}
|
|
286
|
+
interface CommerceApiConfig {
|
|
287
|
+
projectId: string;
|
|
288
|
+
apiUrl?: string;
|
|
289
|
+
getAuthToken?: () => Promise<string> | string;
|
|
290
|
+
}
|
|
291
|
+
interface FetchOfferingsOptions {
|
|
292
|
+
type?: OfferingType | OfferingType[];
|
|
293
|
+
category?: string;
|
|
294
|
+
status?: OfferingStatus;
|
|
295
|
+
limit?: number;
|
|
296
|
+
offset?: number;
|
|
297
|
+
orderBy?: 'name' | 'price' | 'created_at' | 'sort_order';
|
|
298
|
+
order?: 'asc' | 'desc';
|
|
299
|
+
includeSchedules?: boolean;
|
|
300
|
+
}
|
|
301
|
+
interface FetchEventsOptions {
|
|
302
|
+
upcoming?: boolean;
|
|
303
|
+
past?: boolean;
|
|
304
|
+
limit?: number;
|
|
305
|
+
offset?: number;
|
|
306
|
+
category?: string;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
export type { AdditionalFieldOption as A, CommerceOffering as C, EventTileProps as E, FetchOfferingsOptions as F, OfferingType as O, PriceType as P, RegistrationFormProps as R, UpcomingEventsProps as U, CommerceVariant as a, CheckoutResult as b, CommerceSchedule as c, OfferingStatus as d, CommerceCategory as e, CartItem as f, Cart as g, CheckoutCustomer as h, OfferingCardProps as i, OfferingListProps as j, OfferingDetailProps as k, ProductEmbedProps as l, EventEmbedProps as m, CheckoutFormProps as n, AdditionalField as o, CommerceApiConfig as p, FetchEventsOptions as q };
|