@sonordev/site-kit 1.2.7
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/README.md +376 -0
- package/dist/SetupWizard-Cki06kB0.d.mts +12 -0
- package/dist/SetupWizard-Cki06kB0.d.ts +12 -0
- package/dist/analytics/index.d.mts +93 -0
- package/dist/analytics/index.d.ts +93 -0
- package/dist/analytics/index.js +89 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/index.mjs +71 -0
- package/dist/analytics/index.mjs.map +1 -0
- package/dist/api-CWtoFJCO.d.mts +137 -0
- package/dist/api-CWtoFJCO.d.ts +137 -0
- package/dist/blog/index.d.mts +305 -0
- package/dist/blog/index.d.ts +305 -0
- package/dist/blog/index.js +1578 -0
- package/dist/blog/index.js.map +1 -0
- package/dist/blog/index.mjs +1562 -0
- package/dist/blog/index.mjs.map +1 -0
- package/dist/blog/server.d.mts +229 -0
- package/dist/blog/server.d.ts +229 -0
- package/dist/blog/server.js +692 -0
- package/dist/blog/server.js.map +1 -0
- package/dist/blog/server.mjs +666 -0
- package/dist/blog/server.mjs.map +1 -0
- package/dist/chunk-24277A3Q.mjs +968 -0
- package/dist/chunk-24277A3Q.mjs.map +1 -0
- package/dist/chunk-373TK6TZ.js +321 -0
- package/dist/chunk-373TK6TZ.js.map +1 -0
- package/dist/chunk-3MYZS6PD.js +30 -0
- package/dist/chunk-3MYZS6PD.js.map +1 -0
- package/dist/chunk-43GBM4SX.js +283 -0
- package/dist/chunk-43GBM4SX.js.map +1 -0
- package/dist/chunk-4XPGGLVP.mjs +53 -0
- package/dist/chunk-4XPGGLVP.mjs.map +1 -0
- package/dist/chunk-622GAQP5.js +2008 -0
- package/dist/chunk-622GAQP5.js.map +1 -0
- package/dist/chunk-6BIPAKL4.mjs +28 -0
- package/dist/chunk-6BIPAKL4.mjs.map +1 -0
- package/dist/chunk-6ZCISNAB.mjs +343 -0
- package/dist/chunk-6ZCISNAB.mjs.map +1 -0
- package/dist/chunk-72MQFHYJ.js +1429 -0
- package/dist/chunk-72MQFHYJ.js.map +1 -0
- package/dist/chunk-7557OTHW.js +62 -0
- package/dist/chunk-7557OTHW.js.map +1 -0
- package/dist/chunk-7FUV73JZ.js +981 -0
- package/dist/chunk-7FUV73JZ.js.map +1 -0
- package/dist/chunk-7RF6PVHA.mjs +324 -0
- package/dist/chunk-7RF6PVHA.mjs.map +1 -0
- package/dist/chunk-7RYCHO6D.mjs +134 -0
- package/dist/chunk-7RYCHO6D.mjs.map +1 -0
- package/dist/chunk-7UKPRW25.mjs +1999 -0
- package/dist/chunk-7UKPRW25.mjs.map +1 -0
- package/dist/chunk-7URAOG2M.js +14864 -0
- package/dist/chunk-7URAOG2M.js.map +1 -0
- package/dist/chunk-AFAO3TGS.mjs +810 -0
- package/dist/chunk-AFAO3TGS.mjs.map +1 -0
- package/dist/chunk-BYLIU6XG.js +343 -0
- package/dist/chunk-BYLIU6XG.js.map +1 -0
- package/dist/chunk-D63MUKZ6.mjs +4423 -0
- package/dist/chunk-D63MUKZ6.mjs.map +1 -0
- package/dist/chunk-DDKW2FNA.js +390 -0
- package/dist/chunk-DDKW2FNA.js.map +1 -0
- package/dist/chunk-DQYMKR27.mjs +341 -0
- package/dist/chunk-DQYMKR27.mjs.map +1 -0
- package/dist/chunk-DW5UJKHH.js +221 -0
- package/dist/chunk-DW5UJKHH.js.map +1 -0
- package/dist/chunk-EEZCR6E6.js +50 -0
- package/dist/chunk-EEZCR6E6.js.map +1 -0
- package/dist/chunk-GCJXQ4AG.mjs +59 -0
- package/dist/chunk-GCJXQ4AG.mjs.map +1 -0
- package/dist/chunk-JGNQK2G6.mjs +14845 -0
- package/dist/chunk-JGNQK2G6.mjs.map +1 -0
- package/dist/chunk-JTLOJLWQ.mjs +563 -0
- package/dist/chunk-JTLOJLWQ.mjs.map +1 -0
- package/dist/chunk-K23A4G76.mjs +202 -0
- package/dist/chunk-K23A4G76.mjs.map +1 -0
- package/dist/chunk-KKU3K7RG.js +336 -0
- package/dist/chunk-KKU3K7RG.js.map +1 -0
- package/dist/chunk-KUGMH4ZF.js +571 -0
- package/dist/chunk-KUGMH4ZF.js.map +1 -0
- package/dist/chunk-LBVWVP72.js +110 -0
- package/dist/chunk-LBVWVP72.js.map +1 -0
- package/dist/chunk-LIVWLY2P.js +138 -0
- package/dist/chunk-LIVWLY2P.js.map +1 -0
- package/dist/chunk-M2T6R7BA.mjs +1003 -0
- package/dist/chunk-M2T6R7BA.mjs.map +1 -0
- package/dist/chunk-MV3QN7PW.mjs +47 -0
- package/dist/chunk-MV3QN7PW.mjs.map +1 -0
- package/dist/chunk-OB7E654K.js +72 -0
- package/dist/chunk-OB7E654K.js.map +1 -0
- package/dist/chunk-OIIKTGRL.mjs +380 -0
- package/dist/chunk-OIIKTGRL.mjs.map +1 -0
- package/dist/chunk-P3UWIUJS.mjs +1427 -0
- package/dist/chunk-P3UWIUJS.mjs.map +1 -0
- package/dist/chunk-PKN27UMH.mjs +136 -0
- package/dist/chunk-PKN27UMH.mjs.map +1 -0
- package/dist/chunk-QXV4667R.mjs +105 -0
- package/dist/chunk-QXV4667R.mjs.map +1 -0
- package/dist/chunk-S7FRYNSU.mjs +315 -0
- package/dist/chunk-S7FRYNSU.mjs.map +1 -0
- package/dist/chunk-TFLQX7K7.mjs +68 -0
- package/dist/chunk-TFLQX7K7.mjs.map +1 -0
- package/dist/chunk-UWE5PCYJ.mjs +279 -0
- package/dist/chunk-UWE5PCYJ.mjs.map +1 -0
- package/dist/chunk-UYFDNX2F.js +4469 -0
- package/dist/chunk-UYFDNX2F.js.map +1 -0
- package/dist/chunk-W4PALSGM.js +350 -0
- package/dist/chunk-W4PALSGM.js.map +1 -0
- package/dist/chunk-WECQ6KOB.js +1008 -0
- package/dist/chunk-WECQ6KOB.js.map +1 -0
- package/dist/chunk-XQQWI6WB.js +814 -0
- package/dist/chunk-XQQWI6WB.js.map +1 -0
- package/dist/chunk-XZJOZJB6.js +140 -0
- package/dist/chunk-XZJOZJB6.js.map +1 -0
- package/dist/chunk-ZSMWDLMK.js +63 -0
- package/dist/chunk-ZSMWDLMK.js.map +1 -0
- package/dist/cli/index.js +37243 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/index.mjs +37209 -0
- package/dist/cli/index.mjs.map +1 -0
- package/dist/commerce/index.d.mts +170 -0
- package/dist/commerce/index.d.ts +170 -0
- package/dist/commerce/index.js +174 -0
- package/dist/commerce/index.js.map +1 -0
- package/dist/commerce/index.mjs +5 -0
- package/dist/commerce/index.mjs.map +1 -0
- package/dist/commerce/server.d.mts +107 -0
- package/dist/commerce/server.d.ts +107 -0
- package/dist/commerce/server.js +187 -0
- package/dist/commerce/server.js.map +1 -0
- package/dist/commerce/server.mjs +177 -0
- package/dist/commerce/server.mjs.map +1 -0
- package/dist/config/index.d.mts +43 -0
- package/dist/config/index.d.ts +43 -0
- package/dist/config/index.js +66 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/index.mjs +64 -0
- package/dist/config/index.mjs.map +1 -0
- package/dist/engage/index.d.mts +33 -0
- package/dist/engage/index.d.ts +33 -0
- package/dist/engage/index.js +22 -0
- package/dist/engage/index.js.map +1 -0
- package/dist/engage/index.mjs +5 -0
- package/dist/engage/index.mjs.map +1 -0
- package/dist/forms/index.d.mts +437 -0
- package/dist/forms/index.d.ts +437 -0
- package/dist/forms/index.js +1168 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/forms/index.mjs +1142 -0
- package/dist/forms/index.mjs.map +1 -0
- package/dist/generators-2XKQMPKH.mjs +4 -0
- package/dist/generators-2XKQMPKH.mjs.map +1 -0
- package/dist/generators-DTMO36DV.js +33 -0
- package/dist/generators-DTMO36DV.js.map +1 -0
- package/dist/images/index.d.mts +4 -0
- package/dist/images/index.d.ts +4 -0
- package/dist/images/index.js +46 -0
- package/dist/images/index.js.map +1 -0
- package/dist/images/index.mjs +5 -0
- package/dist/images/index.mjs.map +1 -0
- package/dist/images/server.d.mts +69 -0
- package/dist/images/server.d.ts +69 -0
- package/dist/images/server.js +21 -0
- package/dist/images/server.js.map +1 -0
- package/dist/images/server.mjs +4 -0
- package/dist/images/server.mjs.map +1 -0
- package/dist/index.d.mts +846 -0
- package/dist/index.d.ts +846 -0
- package/dist/index.js +2623 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2416 -0
- package/dist/index.mjs.map +1 -0
- package/dist/layout/index.d.mts +53 -0
- package/dist/layout/index.d.ts +53 -0
- package/dist/layout/index.js +187 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/layout/index.mjs +185 -0
- package/dist/layout/index.mjs.map +1 -0
- package/dist/llms/index.d.mts +448 -0
- package/dist/llms/index.d.ts +448 -0
- package/dist/llms/index.js +581 -0
- package/dist/llms/index.js.map +1 -0
- package/dist/llms/index.mjs +529 -0
- package/dist/llms/index.mjs.map +1 -0
- package/dist/manifest/index.d.mts +62 -0
- package/dist/manifest/index.d.ts +62 -0
- package/dist/manifest/index.js +85 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/manifest/index.mjs +83 -0
- package/dist/manifest/index.mjs.map +1 -0
- package/dist/middleware/index.d.mts +63 -0
- package/dist/middleware/index.d.ts +63 -0
- package/dist/middleware/index.js +54 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/index.mjs +51 -0
- package/dist/middleware/index.mjs.map +1 -0
- package/dist/migrator-2MQHOFDQ.mjs +4 -0
- package/dist/migrator-2MQHOFDQ.mjs.map +1 -0
- package/dist/migrator-THJCF6MZ.js +37 -0
- package/dist/migrator-THJCF6MZ.js.map +1 -0
- package/dist/redirects/index.d.mts +78 -0
- package/dist/redirects/index.d.ts +78 -0
- package/dist/redirects/index.js +26 -0
- package/dist/redirects/index.js.map +1 -0
- package/dist/redirects/index.mjs +5 -0
- package/dist/redirects/index.mjs.map +1 -0
- package/dist/reputation/index.d.mts +57 -0
- package/dist/reputation/index.d.ts +57 -0
- package/dist/reputation/index.js +21 -0
- package/dist/reputation/index.js.map +1 -0
- package/dist/reputation/index.mjs +4 -0
- package/dist/reputation/index.mjs.map +1 -0
- package/dist/robots/index.d.mts +38 -0
- package/dist/robots/index.d.ts +38 -0
- package/dist/robots/index.js +52 -0
- package/dist/robots/index.js.map +1 -0
- package/dist/robots/index.mjs +50 -0
- package/dist/robots/index.mjs.map +1 -0
- package/dist/routing-B5XS-6_W.d.mts +118 -0
- package/dist/routing-DZYzyDHw.d.ts +118 -0
- package/dist/scanner-GAF5PO5F.js +53 -0
- package/dist/scanner-GAF5PO5F.js.map +1 -0
- package/dist/scanner-LKJKW7IT.mjs +4 -0
- package/dist/scanner-LKJKW7IT.mjs.map +1 -0
- package/dist/securityHeaders-nwZ6nP4g.d.mts +24 -0
- package/dist/securityHeaders-nwZ6nP4g.d.ts +24 -0
- package/dist/seo/index.d.mts +600 -0
- package/dist/seo/index.d.ts +600 -0
- package/dist/seo/index.js +883 -0
- package/dist/seo/index.js.map +1 -0
- package/dist/seo/index.mjs +773 -0
- package/dist/seo/index.mjs.map +1 -0
- package/dist/seo/register-sitemap-cli.js +151 -0
- package/dist/seo/register-sitemap-cli.js.map +1 -0
- package/dist/seo/register-sitemap-cli.mjs +144 -0
- package/dist/seo/register-sitemap-cli.mjs.map +1 -0
- package/dist/seo/server.d.mts +107 -0
- package/dist/seo/server.d.ts +107 -0
- package/dist/seo/server.js +207 -0
- package/dist/seo/server.js.map +1 -0
- package/dist/seo/server.mjs +186 -0
- package/dist/seo/server.mjs.map +1 -0
- package/dist/server-api-EWXKOQZA.mjs +4 -0
- package/dist/server-api-EWXKOQZA.mjs.map +1 -0
- package/dist/server-api-GJPNRYUP.js +81 -0
- package/dist/server-api-GJPNRYUP.js.map +1 -0
- package/dist/setup/client.d.mts +60 -0
- package/dist/setup/client.d.ts +60 -0
- package/dist/setup/client.js +31 -0
- package/dist/setup/client.js.map +1 -0
- package/dist/setup/client.mjs +6 -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 +35 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/index.mjs +6 -0
- package/dist/setup/index.mjs.map +1 -0
- 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/site-config/index.d.mts +24 -0
- package/dist/site-config/index.d.ts +24 -0
- package/dist/site-config/index.js +17 -0
- package/dist/site-config/index.js.map +1 -0
- package/dist/site-config/index.mjs +4 -0
- package/dist/site-config/index.mjs.map +1 -0
- package/dist/sitemap/index.d.mts +96 -0
- package/dist/sitemap/index.d.ts +96 -0
- package/dist/sitemap/index.js +288 -0
- package/dist/sitemap/index.js.map +1 -0
- package/dist/sitemap/index.mjs +285 -0
- package/dist/sitemap/index.mjs.map +1 -0
- package/dist/socket-loader-J26QHHOB.js +16 -0
- package/dist/socket-loader-J26QHHOB.js.map +1 -0
- package/dist/socket-loader-R7S2YJ2J.mjs +14 -0
- package/dist/socket-loader-R7S2YJ2J.mjs.map +1 -0
- package/dist/types-0dmq3k20.d.mts +168 -0
- package/dist/types-0dmq3k20.d.ts +168 -0
- package/dist/types-Blb2QNkV.d.mts +263 -0
- package/dist/types-Blb2QNkV.d.ts +263 -0
- package/dist/types-BnCwwUX3.d.mts +250 -0
- package/dist/types-BnCwwUX3.d.ts +250 -0
- package/dist/types-CGlnp43R.d.mts +312 -0
- package/dist/types-CGlnp43R.d.ts +312 -0
- package/dist/types-D08004rU.d.mts +179 -0
- package/dist/types-D08004rU.d.ts +179 -0
- package/dist/types-DNSYU7qI.d.mts +127 -0
- package/dist/types-DNSYU7qI.d.ts +127 -0
- package/dist/types-KZP_VWZp.d.mts +266 -0
- package/dist/types-KZP_VWZp.d.ts +266 -0
- package/dist/useEventModal-BVTx69XE.d.mts +274 -0
- package/dist/useEventModal-Dx1dItTJ.d.ts +274 -0
- package/dist/web-vitals-444RLW3B.js +252 -0
- package/dist/web-vitals-444RLW3B.js.map +1 -0
- package/dist/web-vitals-KPICZIEF.mjs +241 -0
- package/dist/web-vitals-KPICZIEF.mjs.map +1 -0
- package/package.json +192 -0
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
import { F as FormSubmission, M as ManagedFormConfig, a as FormField$2, b as ManagedFormProps, c as FormRenderProps } from '../types-0dmq3k20.mjs';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
|
+
import React__default from 'react';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @sonordev/site-kit/forms - Forms API Client
|
|
7
|
+
*
|
|
8
|
+
* Full API client for form management. Allows developers to create, update,
|
|
9
|
+
* and delete forms programmatically. Changes sync to Portal automatically.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```tsx
|
|
13
|
+
* import { formsApi } from '@sonordev/site-kit/forms'
|
|
14
|
+
*
|
|
15
|
+
* // Create a new form
|
|
16
|
+
* const form = await formsApi.create({
|
|
17
|
+
* projectId: 'xxx',
|
|
18
|
+
* slug: 'contact-us',
|
|
19
|
+
* name: 'Contact Form',
|
|
20
|
+
* formType: 'prospect',
|
|
21
|
+
* fields: [
|
|
22
|
+
* { slug: 'name', label: 'Name', fieldType: 'text', isRequired: true },
|
|
23
|
+
* { slug: 'email', label: 'Email', fieldType: 'email', isRequired: true },
|
|
24
|
+
* { slug: 'message', label: 'Message', fieldType: 'textarea' },
|
|
25
|
+
* ]
|
|
26
|
+
* })
|
|
27
|
+
*
|
|
28
|
+
* // Update fields
|
|
29
|
+
* await formsApi.update(form.id, {
|
|
30
|
+
* fields: [...form.fields, { slug: 'phone', label: 'Phone', fieldType: 'phone' }]
|
|
31
|
+
* })
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
type FormType = 'prospect' | 'contact' | 'support' | 'feedback' | 'newsletter' | 'custom';
|
|
35
|
+
type FieldType = 'text' | 'email' | 'phone' | 'number' | 'textarea' | 'select' | 'multi_select' | 'radio' | 'checkbox' | 'date' | 'time' | 'datetime' | 'url' | 'file' | 'rating' | 'slider' | 'hidden' | 'heading' | 'paragraph';
|
|
36
|
+
type FieldWidth = 'full' | 'half' | 'third' | 'quarter';
|
|
37
|
+
interface FieldOption {
|
|
38
|
+
value: string;
|
|
39
|
+
label: string;
|
|
40
|
+
disabled?: boolean;
|
|
41
|
+
}
|
|
42
|
+
interface FieldValidation {
|
|
43
|
+
min?: number;
|
|
44
|
+
max?: number;
|
|
45
|
+
minLength?: number;
|
|
46
|
+
maxLength?: number;
|
|
47
|
+
pattern?: string;
|
|
48
|
+
patternMessage?: string;
|
|
49
|
+
}
|
|
50
|
+
interface FieldConditional {
|
|
51
|
+
field: string;
|
|
52
|
+
operator: 'equals' | 'not_equals' | 'contains' | 'not_contains' | 'is_empty' | 'not_empty' | 'greater_than' | 'less_than';
|
|
53
|
+
value?: string | number | boolean;
|
|
54
|
+
}
|
|
55
|
+
interface FormField$1 {
|
|
56
|
+
id?: string;
|
|
57
|
+
slug: string;
|
|
58
|
+
label: string;
|
|
59
|
+
fieldType: FieldType;
|
|
60
|
+
placeholder?: string;
|
|
61
|
+
helpText?: string;
|
|
62
|
+
defaultValue?: string;
|
|
63
|
+
isRequired?: boolean;
|
|
64
|
+
validation?: FieldValidation;
|
|
65
|
+
options?: FieldOption[];
|
|
66
|
+
conditional?: FieldConditional;
|
|
67
|
+
width?: FieldWidth;
|
|
68
|
+
sortOrder?: number;
|
|
69
|
+
destinationField?: string;
|
|
70
|
+
stepId?: string;
|
|
71
|
+
}
|
|
72
|
+
interface FormStep {
|
|
73
|
+
id?: string;
|
|
74
|
+
stepNumber: number;
|
|
75
|
+
title?: string;
|
|
76
|
+
description?: string;
|
|
77
|
+
condition?: FieldConditional;
|
|
78
|
+
}
|
|
79
|
+
interface Form {
|
|
80
|
+
id: string;
|
|
81
|
+
projectId: string;
|
|
82
|
+
slug: string;
|
|
83
|
+
name: string;
|
|
84
|
+
description?: string;
|
|
85
|
+
formType: FormType;
|
|
86
|
+
successMessage: string;
|
|
87
|
+
redirectUrl?: string;
|
|
88
|
+
notificationEmails?: string[];
|
|
89
|
+
submitButtonText: string;
|
|
90
|
+
layout: 'stacked' | 'inline' | 'grid';
|
|
91
|
+
showProgress: boolean;
|
|
92
|
+
enableSaveDraft: boolean;
|
|
93
|
+
isActive: boolean;
|
|
94
|
+
createdAt: string;
|
|
95
|
+
updatedAt: string;
|
|
96
|
+
fields?: FormField$1[];
|
|
97
|
+
steps?: FormStep[];
|
|
98
|
+
}
|
|
99
|
+
interface CreateFormInput {
|
|
100
|
+
projectId: string;
|
|
101
|
+
slug: string;
|
|
102
|
+
name: string;
|
|
103
|
+
description?: string;
|
|
104
|
+
formType?: FormType;
|
|
105
|
+
successMessage?: string;
|
|
106
|
+
redirectUrl?: string;
|
|
107
|
+
notificationEmails?: string[];
|
|
108
|
+
submitButtonText?: string;
|
|
109
|
+
layout?: 'stacked' | 'inline' | 'grid';
|
|
110
|
+
showProgress?: boolean;
|
|
111
|
+
enableSaveDraft?: boolean;
|
|
112
|
+
isActive?: boolean;
|
|
113
|
+
fields?: FormField$1[];
|
|
114
|
+
steps?: FormStep[];
|
|
115
|
+
}
|
|
116
|
+
interface UpdateFormInput {
|
|
117
|
+
slug?: string;
|
|
118
|
+
name?: string;
|
|
119
|
+
description?: string;
|
|
120
|
+
formType?: FormType;
|
|
121
|
+
successMessage?: string;
|
|
122
|
+
redirectUrl?: string;
|
|
123
|
+
notificationEmails?: string[];
|
|
124
|
+
submitButtonText?: string;
|
|
125
|
+
layout?: 'stacked' | 'inline' | 'grid';
|
|
126
|
+
showProgress?: boolean;
|
|
127
|
+
enableSaveDraft?: boolean;
|
|
128
|
+
isActive?: boolean;
|
|
129
|
+
fields?: FormField$1[];
|
|
130
|
+
steps?: FormStep[];
|
|
131
|
+
}
|
|
132
|
+
interface FormsListOptions {
|
|
133
|
+
projectId?: string;
|
|
134
|
+
formType?: FormType;
|
|
135
|
+
isActive?: boolean;
|
|
136
|
+
search?: string;
|
|
137
|
+
}
|
|
138
|
+
interface FormsApiConfig {
|
|
139
|
+
baseUrl: string;
|
|
140
|
+
apiKey?: string;
|
|
141
|
+
getAuthToken?: () => Promise<string> | string;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Configure the forms API client
|
|
145
|
+
*/
|
|
146
|
+
declare function configureFormsApi(options: FormsApiConfig): void;
|
|
147
|
+
declare const formsApi: {
|
|
148
|
+
/**
|
|
149
|
+
* List all forms for a project
|
|
150
|
+
*/
|
|
151
|
+
list(options?: FormsListOptions): Promise<Form[]>;
|
|
152
|
+
/**
|
|
153
|
+
* Get a single form by ID or slug
|
|
154
|
+
*/
|
|
155
|
+
get(idOrSlug: string): Promise<Form>;
|
|
156
|
+
/**
|
|
157
|
+
* Create a new form
|
|
158
|
+
*/
|
|
159
|
+
create(input: CreateFormInput): Promise<Form>;
|
|
160
|
+
/**
|
|
161
|
+
* Update an existing form
|
|
162
|
+
*/
|
|
163
|
+
update(id: string, input: UpdateFormInput): Promise<Form>;
|
|
164
|
+
/**
|
|
165
|
+
* Delete a form
|
|
166
|
+
*/
|
|
167
|
+
delete(id: string): Promise<void>;
|
|
168
|
+
/**
|
|
169
|
+
* Add a field to an existing form
|
|
170
|
+
*/
|
|
171
|
+
addField(formId: string, field: FormField$1): Promise<Form>;
|
|
172
|
+
/**
|
|
173
|
+
* Update a field in an existing form
|
|
174
|
+
*/
|
|
175
|
+
updateField(formId: string, fieldSlug: string, updates: Partial<FormField$1>): Promise<Form>;
|
|
176
|
+
/**
|
|
177
|
+
* Remove a field from a form
|
|
178
|
+
*/
|
|
179
|
+
removeField(formId: string, fieldSlug: string): Promise<Form>;
|
|
180
|
+
/**
|
|
181
|
+
* Reorder fields in a form
|
|
182
|
+
*/
|
|
183
|
+
reorderFields(formId: string, fieldSlugs: string[]): Promise<Form>;
|
|
184
|
+
/**
|
|
185
|
+
* Clone a form
|
|
186
|
+
*/
|
|
187
|
+
clone(formId: string, newSlug: string, newName?: string): Promise<Form>;
|
|
188
|
+
/**
|
|
189
|
+
* Activate or deactivate a form
|
|
190
|
+
*/
|
|
191
|
+
setActive(formId: string, isActive: boolean): Promise<Form>;
|
|
192
|
+
/**
|
|
193
|
+
* Sync a form definition to the backend
|
|
194
|
+
* Creates the form if it doesn't exist, updates if it does
|
|
195
|
+
* Perfect for defining forms in code during development
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```tsx
|
|
199
|
+
* // In your app initialization or form component
|
|
200
|
+
* await formsApi.sync({
|
|
201
|
+
* slug: 'contact',
|
|
202
|
+
* name: 'Contact Form',
|
|
203
|
+
* formType: 'prospect',
|
|
204
|
+
* fields: [
|
|
205
|
+
* field.text('name', 'Your Name', { isRequired: true }),
|
|
206
|
+
* field.email('email', 'Email Address'),
|
|
207
|
+
* field.phone('phone', 'Phone Number'),
|
|
208
|
+
* field.textarea('message', 'Message'),
|
|
209
|
+
* ]
|
|
210
|
+
* })
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
213
|
+
sync(input: Omit<CreateFormInput, "projectId">): Promise<Form & {
|
|
214
|
+
synced: boolean;
|
|
215
|
+
created: boolean;
|
|
216
|
+
updated: boolean;
|
|
217
|
+
}>;
|
|
218
|
+
/**
|
|
219
|
+
* Sync multiple forms at once
|
|
220
|
+
* Useful for initializing all forms in your app
|
|
221
|
+
*/
|
|
222
|
+
syncAll(forms: Array<Omit<CreateFormInput, "projectId">>): Promise<Array<Form & {
|
|
223
|
+
synced: boolean;
|
|
224
|
+
created: boolean;
|
|
225
|
+
updated: boolean;
|
|
226
|
+
}>>;
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* Helper functions to build field definitions
|
|
230
|
+
*/
|
|
231
|
+
declare const field: {
|
|
232
|
+
text: (slug: string, label: string, options?: Partial<FormField$1>) => FormField$1;
|
|
233
|
+
email: (slug: string, label: string, options?: Partial<FormField$1>) => FormField$1;
|
|
234
|
+
phone: (slug: string, label: string, options?: Partial<FormField$1>) => FormField$1;
|
|
235
|
+
textarea: (slug: string, label: string, options?: Partial<FormField$1>) => FormField$1;
|
|
236
|
+
select: (slug: string, label: string, choices: Array<{
|
|
237
|
+
value: string;
|
|
238
|
+
label: string;
|
|
239
|
+
}>, options?: Partial<FormField$1>) => FormField$1;
|
|
240
|
+
radio: (slug: string, label: string, choices: Array<{
|
|
241
|
+
value: string;
|
|
242
|
+
label: string;
|
|
243
|
+
}>, options?: Partial<FormField$1>) => FormField$1;
|
|
244
|
+
checkbox: (slug: string, label: string, options?: Partial<FormField$1>) => FormField$1;
|
|
245
|
+
date: (slug: string, label: string, options?: Partial<FormField$1>) => FormField$1;
|
|
246
|
+
number: (slug: string, label: string, options?: Partial<FormField$1>) => FormField$1;
|
|
247
|
+
rating: (slug: string, label: string, options?: Partial<FormField$1>) => FormField$1;
|
|
248
|
+
file: (slug: string, label: string, options?: Partial<FormField$1>) => FormField$1;
|
|
249
|
+
hidden: (slug: string, defaultValue: string) => FormField$1;
|
|
250
|
+
heading: (slug: string, label: string) => FormField$1;
|
|
251
|
+
paragraph: (slug: string, label: string) => FormField$1;
|
|
252
|
+
};
|
|
253
|
+
interface FormDefinition extends Omit<CreateFormInput, 'projectId'> {
|
|
254
|
+
slug: string;
|
|
255
|
+
name: string;
|
|
256
|
+
fields: FormField$1[];
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Define a form declaratively
|
|
260
|
+
* Returns a form definition that can be synced to the backend
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* ```tsx
|
|
264
|
+
* // forms/contact.ts
|
|
265
|
+
* import { defineForm, field } from '@sonordev/site-kit/forms'
|
|
266
|
+
*
|
|
267
|
+
* export const contactForm = defineForm({
|
|
268
|
+
* slug: 'contact',
|
|
269
|
+
* name: 'Contact Us',
|
|
270
|
+
* formType: 'prospect',
|
|
271
|
+
* successMessage: 'Thanks! We\'ll be in touch soon.',
|
|
272
|
+
* fields: [
|
|
273
|
+
* field.text('name', 'Your Name', { isRequired: true }),
|
|
274
|
+
* field.email('email', 'Email Address'),
|
|
275
|
+
* field.phone('phone', 'Phone Number'),
|
|
276
|
+
* field.select('service', 'Service Needed', [
|
|
277
|
+
* { value: 'consultation', label: 'Free Consultation' },
|
|
278
|
+
* { value: 'representation', label: 'Legal Representation' },
|
|
279
|
+
* ]),
|
|
280
|
+
* field.textarea('message', 'Tell us about your case'),
|
|
281
|
+
* ]
|
|
282
|
+
* })
|
|
283
|
+
*
|
|
284
|
+
* // Then in your app:
|
|
285
|
+
* await formsApi.sync(contactForm)
|
|
286
|
+
* ```
|
|
287
|
+
*/
|
|
288
|
+
declare function defineForm(definition: FormDefinition): FormDefinition;
|
|
289
|
+
/**
|
|
290
|
+
* Initialize multiple forms and sync them to the backend
|
|
291
|
+
* Call this once during app initialization (e.g., in layout.tsx or _app.tsx)
|
|
292
|
+
*
|
|
293
|
+
* @example
|
|
294
|
+
* ```tsx
|
|
295
|
+
* // app/layout.tsx
|
|
296
|
+
* import { initializeForms } from '@sonordev/site-kit/forms'
|
|
297
|
+
* import { contactForm } from './forms/contact'
|
|
298
|
+
* import { consultationForm } from './forms/consultation'
|
|
299
|
+
*
|
|
300
|
+
* // Initialize forms (runs once per build/server start in dev)
|
|
301
|
+
* if (process.env.NODE_ENV === 'development') {
|
|
302
|
+
* initializeForms([contactForm, consultationForm])
|
|
303
|
+
* }
|
|
304
|
+
* ```
|
|
305
|
+
*/
|
|
306
|
+
declare function initializeForms(forms: FormDefinition[]): Promise<void>;
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* @sonordev/site-kit/forms - useForm Hook
|
|
310
|
+
*
|
|
311
|
+
* Headless hook for complete control over form rendering.
|
|
312
|
+
* Fetches form config from API, handles validation, state, and submission.
|
|
313
|
+
*
|
|
314
|
+
* @example
|
|
315
|
+
* ```tsx
|
|
316
|
+
* const { form, fields, values, errors, setFieldValue, submit, isSubmitting } = useForm('contact-form')
|
|
317
|
+
*
|
|
318
|
+
* return (
|
|
319
|
+
* <form onSubmit={(e) => { e.preventDefault(); submit() }}>
|
|
320
|
+
* {fields.map(field => (
|
|
321
|
+
* <MyCustomInput
|
|
322
|
+
* key={field.slug}
|
|
323
|
+
* label={field.label}
|
|
324
|
+
* value={values[field.slug]}
|
|
325
|
+
* error={errors[field.slug]}
|
|
326
|
+
* onChange={(val) => setFieldValue(field.slug, val)}
|
|
327
|
+
* />
|
|
328
|
+
* ))}
|
|
329
|
+
* <button type="submit" disabled={isSubmitting}>Submit</button>
|
|
330
|
+
* </form>
|
|
331
|
+
* )
|
|
332
|
+
* ```
|
|
333
|
+
*/
|
|
334
|
+
|
|
335
|
+
interface UseFormOptions {
|
|
336
|
+
/** Project ID (defaults to SiteKitProvider config) */
|
|
337
|
+
projectId?: string;
|
|
338
|
+
/** Callback when form submits successfully */
|
|
339
|
+
onSuccess?: (submission: FormSubmission) => void;
|
|
340
|
+
/** Callback when submission fails */
|
|
341
|
+
onError?: (error: Error) => void;
|
|
342
|
+
/** Initial values to prefill */
|
|
343
|
+
initialValues?: Record<string, unknown>;
|
|
344
|
+
/** Auto-redirect after success (override form config) */
|
|
345
|
+
redirectUrl?: string | false;
|
|
346
|
+
}
|
|
347
|
+
interface UseFormReturn {
|
|
348
|
+
/** Form configuration (null while loading) */
|
|
349
|
+
form: ManagedFormConfig | null;
|
|
350
|
+
/** Loading state */
|
|
351
|
+
isLoading: boolean;
|
|
352
|
+
/** Error fetching form */
|
|
353
|
+
fetchError: Error | null;
|
|
354
|
+
/** All form fields */
|
|
355
|
+
allFields: FormField$2[];
|
|
356
|
+
/** Fields for current step (multi-step) or all fields (single step) */
|
|
357
|
+
fields: FormField$2[];
|
|
358
|
+
/** Visible fields only (respecting conditional logic) */
|
|
359
|
+
visibleFields: FormField$2[];
|
|
360
|
+
/** Current form values */
|
|
361
|
+
values: Record<string, unknown>;
|
|
362
|
+
/** Current validation errors */
|
|
363
|
+
errors: Record<string, string>;
|
|
364
|
+
/** Set a single field value */
|
|
365
|
+
setFieldValue: (key: string, value: unknown) => void;
|
|
366
|
+
/** Set multiple field values at once */
|
|
367
|
+
setValues: (values: Record<string, unknown>) => void;
|
|
368
|
+
/** Clear all errors */
|
|
369
|
+
clearErrors: () => void;
|
|
370
|
+
/** Multi-step state */
|
|
371
|
+
step: number;
|
|
372
|
+
totalSteps: number;
|
|
373
|
+
isMultiStep: boolean;
|
|
374
|
+
progress: number;
|
|
375
|
+
/** Multi-step navigation */
|
|
376
|
+
nextStep: () => boolean;
|
|
377
|
+
prevStep: () => void;
|
|
378
|
+
goToStep: (step: number) => void;
|
|
379
|
+
canGoNext: boolean;
|
|
380
|
+
canGoPrev: boolean;
|
|
381
|
+
isLastStep: boolean;
|
|
382
|
+
/** Validate current step */
|
|
383
|
+
validate: () => boolean;
|
|
384
|
+
/** Validate a single field */
|
|
385
|
+
validateField: (field: FormField$2) => string | null;
|
|
386
|
+
/** Check if a field is visible (conditional logic) */
|
|
387
|
+
isFieldVisible: (field: FormField$2) => boolean;
|
|
388
|
+
/** Submit the form */
|
|
389
|
+
submit: () => Promise<void>;
|
|
390
|
+
/** Submission state */
|
|
391
|
+
isSubmitting: boolean;
|
|
392
|
+
isComplete: boolean;
|
|
393
|
+
/** Reset form to initial state */
|
|
394
|
+
reset: () => void;
|
|
395
|
+
}
|
|
396
|
+
declare function useForm(formIdOrSlug: string, options?: UseFormOptions): UseFormReturn;
|
|
397
|
+
|
|
398
|
+
declare function ManagedForm({ formId, projectId, className, onSuccess, onError, children, }: ManagedFormProps): react_jsx_runtime.JSX.Element;
|
|
399
|
+
|
|
400
|
+
interface FormClientProps {
|
|
401
|
+
config: ManagedFormConfig;
|
|
402
|
+
className?: string;
|
|
403
|
+
onSuccess?: (submission: FormSubmission) => void;
|
|
404
|
+
onError?: (error: Error) => void;
|
|
405
|
+
customRender?: (props: FormRenderProps) => React__default.ReactNode;
|
|
406
|
+
}
|
|
407
|
+
declare function FormClient({ config, className, onSuccess, onError, customRender, }: FormClientProps): react_jsx_runtime.JSX.Element;
|
|
408
|
+
|
|
409
|
+
interface FormFieldProps {
|
|
410
|
+
field: FormField$2;
|
|
411
|
+
value: unknown;
|
|
412
|
+
error?: string;
|
|
413
|
+
onChange: (value: unknown) => void;
|
|
414
|
+
/** Optional class name prefix for custom styling */
|
|
415
|
+
classPrefix?: string;
|
|
416
|
+
}
|
|
417
|
+
declare function FormField({ field, value, error, onChange, classPrefix }: FormFieldProps): react_jsx_runtime.JSX.Element;
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* @sonordev/site-kit/forms - Form Tracking Hook
|
|
421
|
+
*
|
|
422
|
+
* Tracks form analytics including step progress and abandonment
|
|
423
|
+
*/
|
|
424
|
+
interface UseFormTrackingOptions {
|
|
425
|
+
formId: string;
|
|
426
|
+
totalSteps: number;
|
|
427
|
+
enabled?: boolean;
|
|
428
|
+
debug?: boolean;
|
|
429
|
+
}
|
|
430
|
+
interface FormTrackingReturn {
|
|
431
|
+
trackStepChange: (step: number) => void;
|
|
432
|
+
trackComplete: () => void;
|
|
433
|
+
sessionId: string;
|
|
434
|
+
}
|
|
435
|
+
declare function useFormTracking({ formId, totalSteps, enabled, debug, }: UseFormTrackingOptions): FormTrackingReturn;
|
|
436
|
+
|
|
437
|
+
export { type CreateFormInput, type FieldType, type Form, FormClient, type FormDefinition, type FormField$1 as FormField, FormField as FormFieldComponent, FormField$2 as FormFieldConfig, type FormStep, FormSubmission, type FormType, type FormsListOptions, ManagedForm, ManagedFormConfig, type UpdateFormInput, type UseFormOptions, type UseFormReturn, configureFormsApi, defineForm, field, formsApi, initializeForms, useForm, useFormTracking };
|