@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.
Files changed (300) hide show
  1. package/README.md +376 -0
  2. package/dist/SetupWizard-Cki06kB0.d.mts +12 -0
  3. package/dist/SetupWizard-Cki06kB0.d.ts +12 -0
  4. package/dist/analytics/index.d.mts +93 -0
  5. package/dist/analytics/index.d.ts +93 -0
  6. package/dist/analytics/index.js +89 -0
  7. package/dist/analytics/index.js.map +1 -0
  8. package/dist/analytics/index.mjs +71 -0
  9. package/dist/analytics/index.mjs.map +1 -0
  10. package/dist/api-CWtoFJCO.d.mts +137 -0
  11. package/dist/api-CWtoFJCO.d.ts +137 -0
  12. package/dist/blog/index.d.mts +305 -0
  13. package/dist/blog/index.d.ts +305 -0
  14. package/dist/blog/index.js +1578 -0
  15. package/dist/blog/index.js.map +1 -0
  16. package/dist/blog/index.mjs +1562 -0
  17. package/dist/blog/index.mjs.map +1 -0
  18. package/dist/blog/server.d.mts +229 -0
  19. package/dist/blog/server.d.ts +229 -0
  20. package/dist/blog/server.js +692 -0
  21. package/dist/blog/server.js.map +1 -0
  22. package/dist/blog/server.mjs +666 -0
  23. package/dist/blog/server.mjs.map +1 -0
  24. package/dist/chunk-24277A3Q.mjs +968 -0
  25. package/dist/chunk-24277A3Q.mjs.map +1 -0
  26. package/dist/chunk-373TK6TZ.js +321 -0
  27. package/dist/chunk-373TK6TZ.js.map +1 -0
  28. package/dist/chunk-3MYZS6PD.js +30 -0
  29. package/dist/chunk-3MYZS6PD.js.map +1 -0
  30. package/dist/chunk-43GBM4SX.js +283 -0
  31. package/dist/chunk-43GBM4SX.js.map +1 -0
  32. package/dist/chunk-4XPGGLVP.mjs +53 -0
  33. package/dist/chunk-4XPGGLVP.mjs.map +1 -0
  34. package/dist/chunk-622GAQP5.js +2008 -0
  35. package/dist/chunk-622GAQP5.js.map +1 -0
  36. package/dist/chunk-6BIPAKL4.mjs +28 -0
  37. package/dist/chunk-6BIPAKL4.mjs.map +1 -0
  38. package/dist/chunk-6ZCISNAB.mjs +343 -0
  39. package/dist/chunk-6ZCISNAB.mjs.map +1 -0
  40. package/dist/chunk-72MQFHYJ.js +1429 -0
  41. package/dist/chunk-72MQFHYJ.js.map +1 -0
  42. package/dist/chunk-7557OTHW.js +62 -0
  43. package/dist/chunk-7557OTHW.js.map +1 -0
  44. package/dist/chunk-7FUV73JZ.js +981 -0
  45. package/dist/chunk-7FUV73JZ.js.map +1 -0
  46. package/dist/chunk-7RF6PVHA.mjs +324 -0
  47. package/dist/chunk-7RF6PVHA.mjs.map +1 -0
  48. package/dist/chunk-7RYCHO6D.mjs +134 -0
  49. package/dist/chunk-7RYCHO6D.mjs.map +1 -0
  50. package/dist/chunk-7UKPRW25.mjs +1999 -0
  51. package/dist/chunk-7UKPRW25.mjs.map +1 -0
  52. package/dist/chunk-7URAOG2M.js +14864 -0
  53. package/dist/chunk-7URAOG2M.js.map +1 -0
  54. package/dist/chunk-AFAO3TGS.mjs +810 -0
  55. package/dist/chunk-AFAO3TGS.mjs.map +1 -0
  56. package/dist/chunk-BYLIU6XG.js +343 -0
  57. package/dist/chunk-BYLIU6XG.js.map +1 -0
  58. package/dist/chunk-D63MUKZ6.mjs +4423 -0
  59. package/dist/chunk-D63MUKZ6.mjs.map +1 -0
  60. package/dist/chunk-DDKW2FNA.js +390 -0
  61. package/dist/chunk-DDKW2FNA.js.map +1 -0
  62. package/dist/chunk-DQYMKR27.mjs +341 -0
  63. package/dist/chunk-DQYMKR27.mjs.map +1 -0
  64. package/dist/chunk-DW5UJKHH.js +221 -0
  65. package/dist/chunk-DW5UJKHH.js.map +1 -0
  66. package/dist/chunk-EEZCR6E6.js +50 -0
  67. package/dist/chunk-EEZCR6E6.js.map +1 -0
  68. package/dist/chunk-GCJXQ4AG.mjs +59 -0
  69. package/dist/chunk-GCJXQ4AG.mjs.map +1 -0
  70. package/dist/chunk-JGNQK2G6.mjs +14845 -0
  71. package/dist/chunk-JGNQK2G6.mjs.map +1 -0
  72. package/dist/chunk-JTLOJLWQ.mjs +563 -0
  73. package/dist/chunk-JTLOJLWQ.mjs.map +1 -0
  74. package/dist/chunk-K23A4G76.mjs +202 -0
  75. package/dist/chunk-K23A4G76.mjs.map +1 -0
  76. package/dist/chunk-KKU3K7RG.js +336 -0
  77. package/dist/chunk-KKU3K7RG.js.map +1 -0
  78. package/dist/chunk-KUGMH4ZF.js +571 -0
  79. package/dist/chunk-KUGMH4ZF.js.map +1 -0
  80. package/dist/chunk-LBVWVP72.js +110 -0
  81. package/dist/chunk-LBVWVP72.js.map +1 -0
  82. package/dist/chunk-LIVWLY2P.js +138 -0
  83. package/dist/chunk-LIVWLY2P.js.map +1 -0
  84. package/dist/chunk-M2T6R7BA.mjs +1003 -0
  85. package/dist/chunk-M2T6R7BA.mjs.map +1 -0
  86. package/dist/chunk-MV3QN7PW.mjs +47 -0
  87. package/dist/chunk-MV3QN7PW.mjs.map +1 -0
  88. package/dist/chunk-OB7E654K.js +72 -0
  89. package/dist/chunk-OB7E654K.js.map +1 -0
  90. package/dist/chunk-OIIKTGRL.mjs +380 -0
  91. package/dist/chunk-OIIKTGRL.mjs.map +1 -0
  92. package/dist/chunk-P3UWIUJS.mjs +1427 -0
  93. package/dist/chunk-P3UWIUJS.mjs.map +1 -0
  94. package/dist/chunk-PKN27UMH.mjs +136 -0
  95. package/dist/chunk-PKN27UMH.mjs.map +1 -0
  96. package/dist/chunk-QXV4667R.mjs +105 -0
  97. package/dist/chunk-QXV4667R.mjs.map +1 -0
  98. package/dist/chunk-S7FRYNSU.mjs +315 -0
  99. package/dist/chunk-S7FRYNSU.mjs.map +1 -0
  100. package/dist/chunk-TFLQX7K7.mjs +68 -0
  101. package/dist/chunk-TFLQX7K7.mjs.map +1 -0
  102. package/dist/chunk-UWE5PCYJ.mjs +279 -0
  103. package/dist/chunk-UWE5PCYJ.mjs.map +1 -0
  104. package/dist/chunk-UYFDNX2F.js +4469 -0
  105. package/dist/chunk-UYFDNX2F.js.map +1 -0
  106. package/dist/chunk-W4PALSGM.js +350 -0
  107. package/dist/chunk-W4PALSGM.js.map +1 -0
  108. package/dist/chunk-WECQ6KOB.js +1008 -0
  109. package/dist/chunk-WECQ6KOB.js.map +1 -0
  110. package/dist/chunk-XQQWI6WB.js +814 -0
  111. package/dist/chunk-XQQWI6WB.js.map +1 -0
  112. package/dist/chunk-XZJOZJB6.js +140 -0
  113. package/dist/chunk-XZJOZJB6.js.map +1 -0
  114. package/dist/chunk-ZSMWDLMK.js +63 -0
  115. package/dist/chunk-ZSMWDLMK.js.map +1 -0
  116. package/dist/cli/index.js +37243 -0
  117. package/dist/cli/index.js.map +1 -0
  118. package/dist/cli/index.mjs +37209 -0
  119. package/dist/cli/index.mjs.map +1 -0
  120. package/dist/commerce/index.d.mts +170 -0
  121. package/dist/commerce/index.d.ts +170 -0
  122. package/dist/commerce/index.js +174 -0
  123. package/dist/commerce/index.js.map +1 -0
  124. package/dist/commerce/index.mjs +5 -0
  125. package/dist/commerce/index.mjs.map +1 -0
  126. package/dist/commerce/server.d.mts +107 -0
  127. package/dist/commerce/server.d.ts +107 -0
  128. package/dist/commerce/server.js +187 -0
  129. package/dist/commerce/server.js.map +1 -0
  130. package/dist/commerce/server.mjs +177 -0
  131. package/dist/commerce/server.mjs.map +1 -0
  132. package/dist/config/index.d.mts +43 -0
  133. package/dist/config/index.d.ts +43 -0
  134. package/dist/config/index.js +66 -0
  135. package/dist/config/index.js.map +1 -0
  136. package/dist/config/index.mjs +64 -0
  137. package/dist/config/index.mjs.map +1 -0
  138. package/dist/engage/index.d.mts +33 -0
  139. package/dist/engage/index.d.ts +33 -0
  140. package/dist/engage/index.js +22 -0
  141. package/dist/engage/index.js.map +1 -0
  142. package/dist/engage/index.mjs +5 -0
  143. package/dist/engage/index.mjs.map +1 -0
  144. package/dist/forms/index.d.mts +437 -0
  145. package/dist/forms/index.d.ts +437 -0
  146. package/dist/forms/index.js +1168 -0
  147. package/dist/forms/index.js.map +1 -0
  148. package/dist/forms/index.mjs +1142 -0
  149. package/dist/forms/index.mjs.map +1 -0
  150. package/dist/generators-2XKQMPKH.mjs +4 -0
  151. package/dist/generators-2XKQMPKH.mjs.map +1 -0
  152. package/dist/generators-DTMO36DV.js +33 -0
  153. package/dist/generators-DTMO36DV.js.map +1 -0
  154. package/dist/images/index.d.mts +4 -0
  155. package/dist/images/index.d.ts +4 -0
  156. package/dist/images/index.js +46 -0
  157. package/dist/images/index.js.map +1 -0
  158. package/dist/images/index.mjs +5 -0
  159. package/dist/images/index.mjs.map +1 -0
  160. package/dist/images/server.d.mts +69 -0
  161. package/dist/images/server.d.ts +69 -0
  162. package/dist/images/server.js +21 -0
  163. package/dist/images/server.js.map +1 -0
  164. package/dist/images/server.mjs +4 -0
  165. package/dist/images/server.mjs.map +1 -0
  166. package/dist/index.d.mts +846 -0
  167. package/dist/index.d.ts +846 -0
  168. package/dist/index.js +2623 -0
  169. package/dist/index.js.map +1 -0
  170. package/dist/index.mjs +2416 -0
  171. package/dist/index.mjs.map +1 -0
  172. package/dist/layout/index.d.mts +53 -0
  173. package/dist/layout/index.d.ts +53 -0
  174. package/dist/layout/index.js +187 -0
  175. package/dist/layout/index.js.map +1 -0
  176. package/dist/layout/index.mjs +185 -0
  177. package/dist/layout/index.mjs.map +1 -0
  178. package/dist/llms/index.d.mts +448 -0
  179. package/dist/llms/index.d.ts +448 -0
  180. package/dist/llms/index.js +581 -0
  181. package/dist/llms/index.js.map +1 -0
  182. package/dist/llms/index.mjs +529 -0
  183. package/dist/llms/index.mjs.map +1 -0
  184. package/dist/manifest/index.d.mts +62 -0
  185. package/dist/manifest/index.d.ts +62 -0
  186. package/dist/manifest/index.js +85 -0
  187. package/dist/manifest/index.js.map +1 -0
  188. package/dist/manifest/index.mjs +83 -0
  189. package/dist/manifest/index.mjs.map +1 -0
  190. package/dist/middleware/index.d.mts +63 -0
  191. package/dist/middleware/index.d.ts +63 -0
  192. package/dist/middleware/index.js +54 -0
  193. package/dist/middleware/index.js.map +1 -0
  194. package/dist/middleware/index.mjs +51 -0
  195. package/dist/middleware/index.mjs.map +1 -0
  196. package/dist/migrator-2MQHOFDQ.mjs +4 -0
  197. package/dist/migrator-2MQHOFDQ.mjs.map +1 -0
  198. package/dist/migrator-THJCF6MZ.js +37 -0
  199. package/dist/migrator-THJCF6MZ.js.map +1 -0
  200. package/dist/redirects/index.d.mts +78 -0
  201. package/dist/redirects/index.d.ts +78 -0
  202. package/dist/redirects/index.js +26 -0
  203. package/dist/redirects/index.js.map +1 -0
  204. package/dist/redirects/index.mjs +5 -0
  205. package/dist/redirects/index.mjs.map +1 -0
  206. package/dist/reputation/index.d.mts +57 -0
  207. package/dist/reputation/index.d.ts +57 -0
  208. package/dist/reputation/index.js +21 -0
  209. package/dist/reputation/index.js.map +1 -0
  210. package/dist/reputation/index.mjs +4 -0
  211. package/dist/reputation/index.mjs.map +1 -0
  212. package/dist/robots/index.d.mts +38 -0
  213. package/dist/robots/index.d.ts +38 -0
  214. package/dist/robots/index.js +52 -0
  215. package/dist/robots/index.js.map +1 -0
  216. package/dist/robots/index.mjs +50 -0
  217. package/dist/robots/index.mjs.map +1 -0
  218. package/dist/routing-B5XS-6_W.d.mts +118 -0
  219. package/dist/routing-DZYzyDHw.d.ts +118 -0
  220. package/dist/scanner-GAF5PO5F.js +53 -0
  221. package/dist/scanner-GAF5PO5F.js.map +1 -0
  222. package/dist/scanner-LKJKW7IT.mjs +4 -0
  223. package/dist/scanner-LKJKW7IT.mjs.map +1 -0
  224. package/dist/securityHeaders-nwZ6nP4g.d.mts +24 -0
  225. package/dist/securityHeaders-nwZ6nP4g.d.ts +24 -0
  226. package/dist/seo/index.d.mts +600 -0
  227. package/dist/seo/index.d.ts +600 -0
  228. package/dist/seo/index.js +883 -0
  229. package/dist/seo/index.js.map +1 -0
  230. package/dist/seo/index.mjs +773 -0
  231. package/dist/seo/index.mjs.map +1 -0
  232. package/dist/seo/register-sitemap-cli.js +151 -0
  233. package/dist/seo/register-sitemap-cli.js.map +1 -0
  234. package/dist/seo/register-sitemap-cli.mjs +144 -0
  235. package/dist/seo/register-sitemap-cli.mjs.map +1 -0
  236. package/dist/seo/server.d.mts +107 -0
  237. package/dist/seo/server.d.ts +107 -0
  238. package/dist/seo/server.js +207 -0
  239. package/dist/seo/server.js.map +1 -0
  240. package/dist/seo/server.mjs +186 -0
  241. package/dist/seo/server.mjs.map +1 -0
  242. package/dist/server-api-EWXKOQZA.mjs +4 -0
  243. package/dist/server-api-EWXKOQZA.mjs.map +1 -0
  244. package/dist/server-api-GJPNRYUP.js +81 -0
  245. package/dist/server-api-GJPNRYUP.js.map +1 -0
  246. package/dist/setup/client.d.mts +60 -0
  247. package/dist/setup/client.d.ts +60 -0
  248. package/dist/setup/client.js +31 -0
  249. package/dist/setup/client.js.map +1 -0
  250. package/dist/setup/client.mjs +6 -0
  251. package/dist/setup/client.mjs.map +1 -0
  252. package/dist/setup/index.d.mts +5 -0
  253. package/dist/setup/index.d.ts +5 -0
  254. package/dist/setup/index.js +35 -0
  255. package/dist/setup/index.js.map +1 -0
  256. package/dist/setup/index.mjs +6 -0
  257. package/dist/setup/index.mjs.map +1 -0
  258. package/dist/setup/server.d.mts +14 -0
  259. package/dist/setup/server.d.ts +14 -0
  260. package/dist/setup/server.js +13 -0
  261. package/dist/setup/server.js.map +1 -0
  262. package/dist/setup/server.mjs +4 -0
  263. package/dist/setup/server.mjs.map +1 -0
  264. package/dist/site-config/index.d.mts +24 -0
  265. package/dist/site-config/index.d.ts +24 -0
  266. package/dist/site-config/index.js +17 -0
  267. package/dist/site-config/index.js.map +1 -0
  268. package/dist/site-config/index.mjs +4 -0
  269. package/dist/site-config/index.mjs.map +1 -0
  270. package/dist/sitemap/index.d.mts +96 -0
  271. package/dist/sitemap/index.d.ts +96 -0
  272. package/dist/sitemap/index.js +288 -0
  273. package/dist/sitemap/index.js.map +1 -0
  274. package/dist/sitemap/index.mjs +285 -0
  275. package/dist/sitemap/index.mjs.map +1 -0
  276. package/dist/socket-loader-J26QHHOB.js +16 -0
  277. package/dist/socket-loader-J26QHHOB.js.map +1 -0
  278. package/dist/socket-loader-R7S2YJ2J.mjs +14 -0
  279. package/dist/socket-loader-R7S2YJ2J.mjs.map +1 -0
  280. package/dist/types-0dmq3k20.d.mts +168 -0
  281. package/dist/types-0dmq3k20.d.ts +168 -0
  282. package/dist/types-Blb2QNkV.d.mts +263 -0
  283. package/dist/types-Blb2QNkV.d.ts +263 -0
  284. package/dist/types-BnCwwUX3.d.mts +250 -0
  285. package/dist/types-BnCwwUX3.d.ts +250 -0
  286. package/dist/types-CGlnp43R.d.mts +312 -0
  287. package/dist/types-CGlnp43R.d.ts +312 -0
  288. package/dist/types-D08004rU.d.mts +179 -0
  289. package/dist/types-D08004rU.d.ts +179 -0
  290. package/dist/types-DNSYU7qI.d.mts +127 -0
  291. package/dist/types-DNSYU7qI.d.ts +127 -0
  292. package/dist/types-KZP_VWZp.d.mts +266 -0
  293. package/dist/types-KZP_VWZp.d.ts +266 -0
  294. package/dist/useEventModal-BVTx69XE.d.mts +274 -0
  295. package/dist/useEventModal-Dx1dItTJ.d.ts +274 -0
  296. package/dist/web-vitals-444RLW3B.js +252 -0
  297. package/dist/web-vitals-444RLW3B.js.map +1 -0
  298. package/dist/web-vitals-KPICZIEF.mjs +241 -0
  299. package/dist/web-vitals-KPICZIEF.mjs.map +1 -0
  300. 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 };