@sonordev/site-kit 4.0.0 → 4.0.2

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 (263) hide show
  1. package/agent-manifest.json +6 -1
  2. package/dist/AnalyticsProvider-5SX4ZRGN.js +31 -0
  3. package/dist/{AnalyticsProvider-HZTP36TY.js.map → AnalyticsProvider-5SX4ZRGN.js.map} +1 -1
  4. package/dist/AnalyticsProvider-6DIRTRRA.mjs +10 -0
  5. package/dist/{AnalyticsProvider-P6J5ZGZB.mjs.map → AnalyticsProvider-6DIRTRRA.mjs.map} +1 -1
  6. package/dist/ChatWidget-3SUC7HZA.js +20 -0
  7. package/dist/{ChatWidget-XJFFNLTK.js.map → ChatWidget-3SUC7HZA.js.map} +1 -1
  8. package/dist/ChatWidget-JTTERPI5.mjs +11 -0
  9. package/dist/{ChatWidget-Q4YJUQ36.mjs.map → ChatWidget-JTTERPI5.mjs.map} +1 -1
  10. package/dist/DatePicker-4WNKNNCV.mjs +4 -0
  11. package/dist/DatePicker-4WNKNNCV.mjs.map +1 -0
  12. package/dist/DatePicker-VPZR7RU3.js +13 -0
  13. package/dist/DatePicker-VPZR7RU3.js.map +1 -0
  14. package/dist/EngageWidget-3MDY2W5G.mjs +9 -0
  15. package/dist/{EngageWidget-IMQBLBII.mjs.map → EngageWidget-3MDY2W5G.mjs.map} +1 -1
  16. package/dist/EngageWidget-YVAIP2NW.js +18 -0
  17. package/dist/{EngageWidget-NGPAVLLE.js.map → EngageWidget-YVAIP2NW.js.map} +1 -1
  18. package/dist/FileField-PD52URLX.js +91 -0
  19. package/dist/FileField-PD52URLX.js.map +1 -0
  20. package/dist/FileField-XMBF3XCG.mjs +85 -0
  21. package/dist/FileField-XMBF3XCG.mjs.map +1 -0
  22. package/dist/{FormSpotlight-5YFKFZYS.mjs → FormSpotlight-72TYHDPV.mjs} +8 -7
  23. package/dist/FormSpotlight-72TYHDPV.mjs.map +1 -0
  24. package/dist/{FormSpotlight-7BH6QE6T.js → FormSpotlight-AL6KGMGG.js} +23 -22
  25. package/dist/FormSpotlight-AL6KGMGG.js.map +1 -0
  26. package/dist/{FormStage-KB4GYL5K.mjs → FormStage-GNBPJ7WX.mjs} +7 -7
  27. package/dist/FormStage-GNBPJ7WX.mjs.map +1 -0
  28. package/dist/{FormStage-7BVPTSSE.js → FormStage-NLO52ER2.js} +19 -19
  29. package/dist/FormStage-NLO52ER2.js.map +1 -0
  30. package/dist/ManagedForm-2SYVMJY6.mjs +14 -0
  31. package/dist/ManagedForm-2SYVMJY6.mjs.map +1 -0
  32. package/dist/ManagedForm-XWN3TVQQ.js +23 -0
  33. package/dist/ManagedForm-XWN3TVQQ.js.map +1 -0
  34. package/dist/{SignalCore-6GXPHNFA.mjs → SignalCore-4NOVH33M.mjs} +5 -5
  35. package/dist/{SignalCore-6GXPHNFA.mjs.map → SignalCore-4NOVH33M.mjs.map} +1 -1
  36. package/dist/{SignalCore-LJ3NUEU4.js → SignalCore-PD75O7GB.js} +11 -11
  37. package/dist/{SignalCore-LJ3NUEU4.js.map → SignalCore-PD75O7GB.js.map} +1 -1
  38. package/dist/SitemapSync-KKUF43DS.js +17 -0
  39. package/dist/{SitemapSync-BG2ZWSM6.js.map → SitemapSync-KKUF43DS.js.map} +1 -1
  40. package/dist/SitemapSync-UH6VZ55T.mjs +8 -0
  41. package/dist/{SitemapSync-5DGS2XLM.mjs.map → SitemapSync-UH6VZ55T.mjs.map} +1 -1
  42. package/dist/analytics/index.js +9 -9
  43. package/dist/analytics/index.mjs +4 -4
  44. package/dist/{chunk-BFADBU2B.js → chunk-2ACKOMAL.js} +105 -514
  45. package/dist/chunk-2ACKOMAL.js.map +1 -0
  46. package/dist/{chunk-64DQANST.js → chunk-2MIOQYF5.js} +6 -6
  47. package/dist/{chunk-64DQANST.js.map → chunk-2MIOQYF5.js.map} +1 -1
  48. package/dist/{chunk-FLTTRX4O.mjs → chunk-53RHVKTD.mjs} +5 -5
  49. package/dist/{chunk-FLTTRX4O.mjs.map → chunk-53RHVKTD.mjs.map} +1 -1
  50. package/dist/{chunk-NQRUCOI7.js → chunk-5QVXHD6V.js} +14 -14
  51. package/dist/{chunk-NQRUCOI7.js.map → chunk-5QVXHD6V.js.map} +1 -1
  52. package/dist/{chunk-J6UKM476.js → chunk-62Z4D3QR.js} +5 -5
  53. package/dist/{chunk-J6UKM476.js.map → chunk-62Z4D3QR.js.map} +1 -1
  54. package/dist/{chunk-744TJ7SN.mjs → chunk-6PNWJXAE.mjs} +3 -3
  55. package/dist/{chunk-744TJ7SN.mjs.map → chunk-6PNWJXAE.mjs.map} +1 -1
  56. package/dist/{chunk-NKKXKN5L.mjs → chunk-6ZFXASW6.mjs} +4 -4
  57. package/dist/{chunk-NKKXKN5L.mjs.map → chunk-6ZFXASW6.mjs.map} +1 -1
  58. package/dist/{chunk-YNIZKOEW.js → chunk-A624YYDG.js} +2 -2
  59. package/dist/{chunk-YNIZKOEW.js.map → chunk-A624YYDG.js.map} +1 -1
  60. package/dist/chunk-AJNT5GCU.mjs +183 -0
  61. package/dist/chunk-AJNT5GCU.mjs.map +1 -0
  62. package/dist/chunk-AQA4PFMJ.mjs +44 -0
  63. package/dist/chunk-AQA4PFMJ.mjs.map +1 -0
  64. package/dist/{chunk-AVHXVWWG.mjs → chunk-B7J7SU5A.mjs} +8 -8
  65. package/dist/{chunk-AVHXVWWG.mjs.map → chunk-B7J7SU5A.mjs.map} +1 -1
  66. package/dist/chunk-DVYYGHSG.js +285 -0
  67. package/dist/chunk-DVYYGHSG.js.map +1 -0
  68. package/dist/{chunk-HUYPO33T.mjs → chunk-FGN27J35.mjs} +4 -4
  69. package/dist/{chunk-HUYPO33T.mjs.map → chunk-FGN27J35.mjs.map} +1 -1
  70. package/dist/{chunk-O5Z7ZKYS.mjs → chunk-FZ643CZK.mjs} +4 -4
  71. package/dist/{chunk-O5Z7ZKYS.mjs.map → chunk-FZ643CZK.mjs.map} +1 -1
  72. package/dist/{chunk-3IXGYUUR.mjs → chunk-GCS4XZHC.mjs} +3 -3
  73. package/dist/{chunk-3IXGYUUR.mjs.map → chunk-GCS4XZHC.mjs.map} +1 -1
  74. package/dist/{chunk-BH3XILNX.mjs → chunk-HOB2A6JM.mjs} +3 -3
  75. package/dist/{chunk-BH3XILNX.mjs.map → chunk-HOB2A6JM.mjs.map} +1 -1
  76. package/dist/{chunk-U3OU4V56.mjs → chunk-JFVEKSZT.mjs} +5 -182
  77. package/dist/chunk-JFVEKSZT.mjs.map +1 -0
  78. package/dist/{chunk-PMCNKBYS.mjs → chunk-KNYK2VLX.mjs} +3 -3
  79. package/dist/{chunk-PMCNKBYS.mjs.map → chunk-KNYK2VLX.mjs.map} +1 -1
  80. package/dist/{chunk-6DJEXHZE.mjs → chunk-LB7LHVWI.mjs} +107 -503
  81. package/dist/chunk-LB7LHVWI.mjs.map +1 -0
  82. package/dist/{chunk-YOTQH4X4.js → chunk-LP6MC2RH.js} +14 -14
  83. package/dist/{chunk-YOTQH4X4.js.map → chunk-LP6MC2RH.js.map} +1 -1
  84. package/dist/chunk-LVCUT2OX.js +148 -0
  85. package/dist/chunk-LVCUT2OX.js.map +1 -0
  86. package/dist/chunk-LYAU5PRS.js +8 -0
  87. package/dist/{chunk-T7QIXFFM.js.map → chunk-LYAU5PRS.js.map} +1 -1
  88. package/dist/{chunk-OTAIUZED.js → chunk-MPACJDDG.js} +8 -8
  89. package/dist/{chunk-OTAIUZED.js.map → chunk-MPACJDDG.js.map} +1 -1
  90. package/dist/{chunk-W4WGNWQG.js → chunk-MRRTAJWQ.js} +3 -3
  91. package/dist/{chunk-W4WGNWQG.js.map → chunk-MRRTAJWQ.js.map} +1 -1
  92. package/dist/chunk-MU3D5IO7.mjs +283 -0
  93. package/dist/chunk-MU3D5IO7.mjs.map +1 -0
  94. package/dist/{chunk-L5NLP3EW.js → chunk-MVHR77V4.js} +11 -2
  95. package/dist/chunk-MVHR77V4.js.map +1 -0
  96. package/dist/chunk-MZY3MEUO.mjs +138 -0
  97. package/dist/chunk-MZY3MEUO.mjs.map +1 -0
  98. package/dist/chunk-NCWVR4BU.mjs +508 -0
  99. package/dist/chunk-NCWVR4BU.mjs.map +1 -0
  100. package/dist/{chunk-LKZF7343.js → chunk-NJN467OM.js} +14 -14
  101. package/dist/{chunk-LKZF7343.js.map → chunk-NJN467OM.js.map} +1 -1
  102. package/dist/{chunk-EZCDDRXA.mjs → chunk-NWJX6NHR.mjs} +4 -4
  103. package/dist/{chunk-EZCDDRXA.mjs.map → chunk-NWJX6NHR.mjs.map} +1 -1
  104. package/dist/chunk-NWPNFCNY.js +511 -0
  105. package/dist/chunk-NWPNFCNY.js.map +1 -0
  106. package/dist/{chunk-P64SKDBS.js → chunk-OP5FYTWJ.js} +12 -191
  107. package/dist/chunk-OP5FYTWJ.js.map +1 -0
  108. package/dist/{chunk-JM5JCIAY.js → chunk-PGND73EV.js} +4 -4
  109. package/dist/{chunk-JM5JCIAY.js.map → chunk-PGND73EV.js.map} +1 -1
  110. package/dist/chunk-QO5NS62X.js +46 -0
  111. package/dist/chunk-QO5NS62X.js.map +1 -0
  112. package/dist/chunk-QTN3F7D7.mjs +6 -0
  113. package/dist/{chunk-LLQEJDCA.mjs.map → chunk-QTN3F7D7.mjs.map} +1 -1
  114. package/dist/chunk-R4PCXP3F.mjs +60 -0
  115. package/dist/chunk-R4PCXP3F.mjs.map +1 -0
  116. package/dist/{chunk-BOWEGDKJ.js → chunk-RAX3HS4T.js} +15 -15
  117. package/dist/{chunk-BOWEGDKJ.js.map → chunk-RAX3HS4T.js.map} +1 -1
  118. package/dist/{chunk-SXE2TRRU.js → chunk-T2YAEBEY.js} +4 -4
  119. package/dist/{chunk-SXE2TRRU.js.map → chunk-T2YAEBEY.js.map} +1 -1
  120. package/dist/{chunk-I76F26IS.mjs → chunk-T5DXYGWK.mjs} +3 -3
  121. package/dist/{chunk-I76F26IS.mjs.map → chunk-T5DXYGWK.mjs.map} +1 -1
  122. package/dist/{chunk-KHJYA64F.mjs → chunk-U2CJZ6O5.mjs} +2 -2
  123. package/dist/{chunk-KHJYA64F.mjs.map → chunk-U2CJZ6O5.mjs.map} +1 -1
  124. package/dist/{chunk-TUVJQ6FS.mjs → chunk-UBNVD567.mjs} +3 -3
  125. package/dist/{chunk-TUVJQ6FS.mjs.map → chunk-UBNVD567.mjs.map} +1 -1
  126. package/dist/chunk-UQPUFRXF.mjs +104 -0
  127. package/dist/chunk-UQPUFRXF.mjs.map +1 -0
  128. package/dist/chunk-VLY3SFNH.js +64 -0
  129. package/dist/chunk-VLY3SFNH.js.map +1 -0
  130. package/dist/{chunk-MVMORDOM.mjs → chunk-VUIQLKJB.mjs} +3 -3
  131. package/dist/{chunk-MVMORDOM.mjs.map → chunk-VUIQLKJB.mjs.map} +1 -1
  132. package/dist/chunk-WHVUSVHA.js +110 -0
  133. package/dist/chunk-WHVUSVHA.js.map +1 -0
  134. package/dist/{chunk-H4F557CO.js → chunk-WNNY2BCV.js} +8 -8
  135. package/dist/{chunk-H4F557CO.js.map → chunk-WNNY2BCV.js.map} +1 -1
  136. package/dist/{chunk-KN2EYZYV.mjs → chunk-WSPGXSBU.mjs} +11 -2
  137. package/dist/chunk-WSPGXSBU.mjs.map +1 -0
  138. package/dist/{chunk-ZLVZOAJG.js → chunk-WXKEYKE6.js} +15 -15
  139. package/dist/{chunk-ZLVZOAJG.js.map → chunk-WXKEYKE6.js.map} +1 -1
  140. package/dist/{chunk-NWYXTJNW.mjs → chunk-XNPITFJ5.mjs} +3 -3
  141. package/dist/{chunk-NWYXTJNW.mjs.map → chunk-XNPITFJ5.mjs.map} +1 -1
  142. package/dist/{chunk-ZBFBNGQK.mjs → chunk-XRC3JZAK.mjs} +3 -3
  143. package/dist/{chunk-ZBFBNGQK.mjs.map → chunk-XRC3JZAK.mjs.map} +1 -1
  144. package/dist/{chunk-OWQFWDE2.js → chunk-Y26LKDE4.js} +9 -9
  145. package/dist/{chunk-OWQFWDE2.js.map → chunk-Y26LKDE4.js.map} +1 -1
  146. package/dist/{chunk-2OD3EGPO.js → chunk-ZK5VSIRO.js} +12 -12
  147. package/dist/{chunk-2OD3EGPO.js.map → chunk-ZK5VSIRO.js.map} +1 -1
  148. package/dist/{chunk-IPQ7Z5VT.js → chunk-ZPG4GTU7.js} +5 -5
  149. package/dist/{chunk-IPQ7Z5VT.js.map → chunk-ZPG4GTU7.js.map} +1 -1
  150. package/dist/chunk-ZRGCKWIT.js +188 -0
  151. package/dist/chunk-ZRGCKWIT.js.map +1 -0
  152. package/dist/cli/index.js +3 -3
  153. package/dist/cli/index.mjs +1 -1
  154. package/dist/client/index.js +5 -5
  155. package/dist/client/index.mjs +4 -4
  156. package/dist/commerce/index.js +56 -56
  157. package/dist/commerce/index.mjs +5 -5
  158. package/dist/engage/index.js +10 -9
  159. package/dist/engage/index.js.map +1 -1
  160. package/dist/engage/index.mjs +7 -6
  161. package/dist/engage/index.mjs.map +1 -1
  162. package/dist/fleet/index.js +9 -9
  163. package/dist/fleet/index.mjs +5 -5
  164. package/dist/forms/FileField.d.ts +31 -0
  165. package/dist/forms/FileField.d.ts.map +1 -0
  166. package/dist/forms/FormClient.d.ts +12 -1
  167. package/dist/forms/FormClient.d.ts.map +1 -1
  168. package/dist/forms/FormEnhancer.d.ts +72 -0
  169. package/dist/forms/FormEnhancer.d.ts.map +1 -0
  170. package/dist/forms/FormField.d.ts +26 -3
  171. package/dist/forms/FormField.d.ts.map +1 -1
  172. package/dist/forms/FormSpotlight.d.ts.map +1 -1
  173. package/dist/forms/FormStage.d.ts.map +1 -1
  174. package/dist/forms/HoneypotField.d.ts +8 -2
  175. package/dist/forms/HoneypotField.d.ts.map +1 -1
  176. package/dist/forms/ManagedForm.d.ts +1 -1
  177. package/dist/forms/ManagedForm.d.ts.map +1 -1
  178. package/dist/forms/ServerForm.d.ts +73 -0
  179. package/dist/forms/ServerForm.d.ts.map +1 -0
  180. package/dist/forms/StaticForm.d.ts +50 -0
  181. package/dist/forms/StaticForm.d.ts.map +1 -0
  182. package/dist/forms/experience-chrome.d.ts.map +1 -1
  183. package/dist/forms/field-controls.d.ts +7 -0
  184. package/dist/forms/field-controls.d.ts.map +1 -0
  185. package/dist/forms/index.d.ts +7 -0
  186. package/dist/forms/index.d.ts.map +1 -1
  187. package/dist/forms/index.js +33 -537
  188. package/dist/forms/index.js.map +1 -1
  189. package/dist/forms/index.mjs +14 -530
  190. package/dist/forms/index.mjs.map +1 -1
  191. package/dist/forms/native-fallback.d.ts +41 -0
  192. package/dist/forms/native-fallback.d.ts.map +1 -0
  193. package/dist/forms/native-fallback.test.d.ts +2 -0
  194. package/dist/forms/native-fallback.test.d.ts.map +1 -0
  195. package/dist/forms/normalize-config.d.ts +18 -0
  196. package/dist/forms/normalize-config.d.ts.map +1 -0
  197. package/dist/forms/server.d.ts +5 -0
  198. package/dist/forms/server.d.ts.map +1 -1
  199. package/dist/forms/server.js +47 -0
  200. package/dist/forms/server.js.map +1 -1
  201. package/dist/forms/server.mjs +44 -1
  202. package/dist/forms/server.mjs.map +1 -1
  203. package/dist/forms/static-form.test.d.ts +2 -0
  204. package/dist/forms/static-form.test.d.ts.map +1 -0
  205. package/dist/forms/static.d.ts +17 -0
  206. package/dist/forms/static.d.ts.map +1 -0
  207. package/dist/forms/static.js +20 -0
  208. package/dist/forms/static.js.map +1 -0
  209. package/dist/forms/static.mjs +11 -0
  210. package/dist/forms/static.mjs.map +1 -0
  211. package/dist/forms/submitForm.d.ts +4 -0
  212. package/dist/forms/submitForm.d.ts.map +1 -1
  213. package/dist/forms/types.d.ts +19 -0
  214. package/dist/forms/types.d.ts.map +1 -1
  215. package/dist/forms/useForm.d.ts.map +1 -1
  216. package/dist/images/index.js +11 -11
  217. package/dist/images/index.mjs +4 -4
  218. package/dist/index.js +109 -109
  219. package/dist/index.mjs +9 -9
  220. package/dist/layout/client.js +9 -9
  221. package/dist/layout/client.mjs +8 -8
  222. package/dist/layout/index.js +11 -11
  223. package/dist/layout/index.mjs +9 -9
  224. package/dist/maps/index.js +5 -5
  225. package/dist/maps/index.mjs +3 -3
  226. package/dist/search/index.js +4 -4
  227. package/dist/search/index.mjs +3 -3
  228. package/dist/seo/client.js +5 -5
  229. package/dist/seo/client.mjs +4 -4
  230. package/dist/seo/index.js +14 -14
  231. package/dist/seo/index.mjs +6 -6
  232. package/dist/seo/server.js +5 -5
  233. package/dist/seo/server.mjs +1 -1
  234. package/dist/server/index.js +3 -3
  235. package/dist/server/index.mjs +2 -2
  236. package/dist/shared/build-entries.d.ts +6 -0
  237. package/dist/shared/build-entries.d.ts.map +1 -1
  238. package/dist/shared/version.d.ts +1 -1
  239. package/dist/signal/index.js +11 -11
  240. package/dist/signal/index.mjs +2 -2
  241. package/dist/sync/index.js +16 -16
  242. package/dist/sync/index.mjs +4 -4
  243. package/package.json +9 -4
  244. package/dist/AnalyticsProvider-HZTP36TY.js +0 -31
  245. package/dist/AnalyticsProvider-P6J5ZGZB.mjs +0 -10
  246. package/dist/ChatWidget-Q4YJUQ36.mjs +0 -10
  247. package/dist/ChatWidget-XJFFNLTK.js +0 -19
  248. package/dist/EngageWidget-IMQBLBII.mjs +0 -9
  249. package/dist/EngageWidget-NGPAVLLE.js +0 -18
  250. package/dist/FormSpotlight-5YFKFZYS.mjs.map +0 -1
  251. package/dist/FormSpotlight-7BH6QE6T.js.map +0 -1
  252. package/dist/FormStage-7BVPTSSE.js.map +0 -1
  253. package/dist/FormStage-KB4GYL5K.mjs.map +0 -1
  254. package/dist/SitemapSync-5DGS2XLM.mjs +0 -8
  255. package/dist/SitemapSync-BG2ZWSM6.js +0 -17
  256. package/dist/chunk-6DJEXHZE.mjs.map +0 -1
  257. package/dist/chunk-BFADBU2B.js.map +0 -1
  258. package/dist/chunk-KN2EYZYV.mjs.map +0 -1
  259. package/dist/chunk-L5NLP3EW.js.map +0 -1
  260. package/dist/chunk-LLQEJDCA.mjs +0 -6
  261. package/dist/chunk-P64SKDBS.js.map +0 -1
  262. package/dist/chunk-T7QIXFFM.js +0 -8
  263. package/dist/chunk-U3OU4V56.mjs.map +0 -1
@@ -2,16 +2,21 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkYVJASVVK_js = require('../chunk-YVJASVVK.js');
5
- var chunkBFADBU2B_js = require('../chunk-BFADBU2B.js');
6
- var chunkP64SKDBS_js = require('../chunk-P64SKDBS.js');
7
- var chunkKHPJ3CEL_js = require('../chunk-KHPJ3CEL.js');
5
+ var chunkNWPNFCNY_js = require('../chunk-NWPNFCNY.js');
6
+ require('../chunk-LVCUT2OX.js');
7
+ var chunkDVYYGHSG_js = require('../chunk-DVYYGHSG.js');
8
+ var chunkWHVUSVHA_js = require('../chunk-WHVUSVHA.js');
9
+ require('../chunk-HGNSJXWT.js');
10
+ require('../chunk-VLY3SFNH.js');
11
+ var chunk2ACKOMAL_js = require('../chunk-2ACKOMAL.js');
12
+ var chunkOP5FYTWJ_js = require('../chunk-OP5FYTWJ.js');
13
+ var chunkZRGCKWIT_js = require('../chunk-ZRGCKWIT.js');
14
+ require('../chunk-KHPJ3CEL.js');
8
15
  require('../chunk-VJMPIRSD.js');
9
- var chunkZLVZOAJG_js = require('../chunk-ZLVZOAJG.js');
10
- require('../chunk-JM5JCIAY.js');
11
- require('../chunk-T7QIXFFM.js');
16
+ var chunkWXKEYKE6_js = require('../chunk-WXKEYKE6.js');
17
+ require('../chunk-PGND73EV.js');
18
+ require('../chunk-LYAU5PRS.js');
12
19
  require('../chunk-SNAQBZPT.js');
13
- var react = require('react');
14
- var jsxRuntime = require('react/jsx-runtime');
15
20
 
16
21
  // src/forms/formsApi.ts
17
22
  var config = null;
@@ -42,7 +47,7 @@ async function apiRequest(method, path, body) {
42
47
  const token = await getAuthToken();
43
48
  headers["Authorization"] = `Bearer ${token}`;
44
49
  }
45
- const response = await chunkZLVZOAJG_js.sonorFetch(`${baseUrl}${path}`, {
50
+ const response = await chunkWXKEYKE6_js.sonorFetch(`${baseUrl}${path}`, {
46
51
  method,
47
52
  headers,
48
53
  body: body ? JSON.stringify(body) : void 0
@@ -330,552 +335,43 @@ async function initializeForms(forms) {
330
335
  console.error("[Site-Kit] Failed to sync forms:", error);
331
336
  }
332
337
  }
333
- function HoneypotField({ name, value, onChange }) {
334
- return /* @__PURE__ */ jsxRuntime.jsx(
335
- "input",
336
- {
337
- type: "text",
338
- name,
339
- tabIndex: -1,
340
- autoComplete: "new-password",
341
- "aria-hidden": "true",
342
- inert: true,
343
- "data-sk-honeypot": "",
344
- "data-1p-ignore": "",
345
- "data-lpignore": "true",
346
- "data-form-type": "other",
347
- "data-bwignore": "",
348
- style: {
349
- position: "absolute",
350
- left: -9999,
351
- width: 1,
352
- height: 1,
353
- overflow: "hidden",
354
- opacity: 0,
355
- visibility: "hidden",
356
- pointerEvents: "none"
357
- },
358
- value,
359
- onChange: (e) => {
360
- onChange(e.target.value);
361
- if (e.target.value) {
362
- console.warn("[Forms] Honeypot triggered");
363
- }
364
- }
365
- }
366
- );
367
- }
368
- function FormClient({
369
- config: config2,
370
- className,
371
- onSuccess,
372
- onError,
373
- customRender,
374
- experience
375
- }) {
376
- const [values, setValues] = react.useState(() => {
377
- const defaults = {};
378
- for (const field2 of config2.fields || []) {
379
- if (field2.default_value !== void 0 && field2.default_value !== null) {
380
- defaults[field2.slug] = field2.default_value;
381
- }
382
- }
383
- return defaults;
384
- });
385
- const [errors, setErrors] = react.useState({});
386
- const [step, setStep] = react.useState(1);
387
- const [stepDirection, setStepDirection] = react.useState("forward");
388
- const [isSubmitting, setIsSubmitting] = react.useState(false);
389
- const [isComplete, setIsComplete] = react.useState(false);
390
- const [submitError, setSubmitError] = react.useState(null);
391
- const [honeypotValue, setHoneypotValue] = react.useState("");
392
- const [touched, setTouched] = react.useState({});
393
- const honeypotFieldName = config2.honeypot_field || chunkKHPJ3CEL_js.DEFAULT_HONEYPOT_FIELD;
394
- const formLoadedAt = react.useRef(Date.now());
395
- const isSubmittingRef = react.useRef(false);
396
- const stageBeatCount = react.useMemo(() => chunkBFADBU2B_js.countStageViews(config2), [config2]);
397
- const questionCount = react.useMemo(() => chunkBFADBU2B_js.countStageQuestions(config2), [config2]);
398
- const requested = experience ?? (config2.layout === "stage" ? "stage" : config2.layout === "classic" ? "classic" : "spotlight");
399
- const resolvedExperience = !customRender && questionCount > 0 && requested !== "classic" ? requested : "classic";
400
- const { trackStepChange, trackComplete } = chunkP64SKDBS_js.useFormTracking({
401
- formId: config2.id,
402
- // Alternate experiences report their unit (beat / field index) as the
403
- // step — form_analytics becomes a drop-off funnel with zero API changes.
404
- totalSteps: resolvedExperience === "stage" ? stageBeatCount : resolvedExperience === "spotlight" ? questionCount : config2.total_steps
405
- });
406
- const [Celebration, setCelebration] = react.useState(null);
407
- react.useEffect(() => {
408
- if (!isSubmitting && !isComplete) return;
409
- let cancelled = false;
410
- import('../FormCelebration-O2O5S6JI.js').then((m) => {
411
- if (!cancelled) setCelebration(() => m.FormCelebration);
412
- }).catch(() => {
413
- });
414
- return () => {
415
- cancelled = true;
416
- };
417
- }, [isSubmitting, isComplete]);
418
- const [Experience, setExperience] = react.useState(null);
419
- react.useEffect(() => {
420
- if (resolvedExperience === "classic") {
421
- setExperience(null);
422
- return;
423
- }
424
- let cancelled = false;
425
- const load = resolvedExperience === "stage" ? import('../FormStage-7BVPTSSE.js').then((m) => m.FormStage) : import('../FormSpotlight-7BH6QE6T.js').then((m) => m.FormSpotlight);
426
- load.then((Component) => {
427
- if (!cancelled) setExperience(() => Component);
428
- }).catch((err) => {
429
- console.error("[Forms] Experience failed to load; using classic form:", err);
430
- });
431
- return () => {
432
- cancelled = true;
433
- };
434
- }, [resolvedExperience]);
435
- const currentFields = react.useMemo(() => {
436
- if (!config2.is_multi_step) {
437
- return config2.fields || [];
438
- }
439
- const currentStepConfig2 = config2.steps?.find((s) => s.step_number === step);
440
- if (!currentStepConfig2) return config2.fields || [];
441
- return (config2.fields || []).filter((f) => f.step_id === currentStepConfig2.id);
442
- }, [config2, step]);
443
- const isFieldVisible = react.useCallback((field2) => {
444
- if (!field2.conditional?.show_when) return true;
445
- const { field: condField, operator, value } = field2.conditional.show_when;
446
- const fieldValue = values[condField];
447
- switch (operator) {
448
- case "equals":
449
- return fieldValue === value;
450
- case "not_equals":
451
- return fieldValue !== value;
452
- case "contains":
453
- return String(fieldValue).includes(String(value));
454
- case "not_contains":
455
- return !String(fieldValue).includes(String(value));
456
- case "is_empty":
457
- return !fieldValue || fieldValue === "";
458
- case "not_empty":
459
- return !!fieldValue && fieldValue !== "";
460
- case "greater_than":
461
- return Number(fieldValue) > Number(value);
462
- case "less_than":
463
- return Number(fieldValue) < Number(value);
464
- default:
465
- return true;
466
- }
467
- }, [values]);
468
- const validateField = react.useCallback((field2) => {
469
- if (!isFieldVisible(field2)) return null;
470
- if (["heading", "section_header", "paragraph", "hidden"].includes(field2.field_type)) return null;
471
- const value = values[field2.slug];
472
- const rules = field2.validation || {};
473
- if (field2.is_required && (!value || value === "")) {
474
- return rules.custom_error || `${field2.label} is required`;
475
- }
476
- if (!value) return null;
477
- const strValue = String(value);
478
- if (rules.min_length && strValue.length < rules.min_length) {
479
- return `${field2.label} must be at least ${rules.min_length} characters`;
480
- }
481
- if (rules.max_length && strValue.length > rules.max_length) {
482
- return `${field2.label} must be no more than ${rules.max_length} characters`;
483
- }
484
- if (rules.min !== void 0 && Number(value) < rules.min) {
485
- return `${field2.label} must be at least ${rules.min}`;
486
- }
487
- if (rules.max !== void 0 && Number(value) > rules.max) {
488
- return `${field2.label} must be no more than ${rules.max}`;
489
- }
490
- if (rules.pattern) {
491
- try {
492
- if (!new RegExp(rules.pattern).test(strValue)) {
493
- return rules.custom_error || `${field2.label} is invalid`;
494
- }
495
- } catch {
496
- }
497
- }
498
- if (field2.field_type === "email" && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(strValue)) {
499
- return "Please enter a valid email address";
500
- }
501
- if (field2.field_type === "phone" && !/^[\d\s\-\+\(\)]+$/.test(strValue)) {
502
- return "Please enter a valid phone number";
503
- }
504
- return null;
505
- }, [values, isFieldVisible]);
506
- const fieldIsComplete = react.useCallback((field2) => {
507
- if (!isFieldVisible(field2)) return false;
508
- if (["heading", "section_header", "paragraph", "hidden"].includes(field2.field_type)) return false;
509
- const value = values[field2.slug];
510
- if (value === void 0 || value === null || value === "") return false;
511
- return validateField(field2) === null;
512
- }, [values, isFieldVisible, validateField]);
513
- const momentum = react.useMemo(() => {
514
- const measurable = (config2.fields || []).filter(
515
- (f) => f.is_required && isFieldVisible(f) && !["heading", "section_header", "paragraph", "hidden"].includes(f.field_type)
516
- );
517
- return { done: measurable.filter(fieldIsComplete).length, total: measurable.length };
518
- }, [config2, isFieldVisible, fieldIsComplete]);
519
- const validateStep = react.useCallback(() => {
520
- const newErrors = {};
521
- for (const field2 of currentFields) {
522
- const error = validateField(field2);
523
- if (error) {
524
- newErrors[field2.slug] = error;
525
- }
526
- }
527
- setErrors(newErrors);
528
- return Object.keys(newErrors).length === 0;
529
- }, [currentFields, validateField]);
530
- const validateAll = react.useCallback(() => {
531
- const allFields = config2.fields || [];
532
- const newErrors = {};
533
- for (const field2 of allFields) {
534
- const error = validateField(field2);
535
- if (error) newErrors[field2.slug] = error;
536
- }
537
- setErrors(newErrors);
538
- if (Object.keys(newErrors).length === 0) return { ok: true, firstErrorStep: null };
539
- let firstErrorStep = null;
540
- if (config2.is_multi_step && config2.steps) {
541
- const ordered = [...config2.steps].sort((a, b) => a.step_number - b.step_number);
542
- for (const s of ordered) {
543
- if (allFields.some((f) => f.step_id === s.id && newErrors[f.slug])) {
544
- firstErrorStep = s.step_number;
545
- break;
546
- }
547
- }
548
- }
549
- return { ok: false, firstErrorStep };
550
- }, [config2, validateField]);
551
- const buildVisibleValues = react.useCallback(() => {
552
- const out = {};
553
- for (const field2 of config2.fields || []) {
554
- if (!isFieldVisible(field2)) continue;
555
- if (field2.slug in values) out[field2.slug] = values[field2.slug];
556
- }
557
- return out;
558
- }, [config2, values, isFieldVisible]);
559
- const setFieldValue = react.useCallback((key, value) => {
560
- setTouched((prev) => prev[key] ? prev : { ...prev, [key]: true });
561
- setValues((prev) => ({ ...prev, [key]: value }));
562
- if (errors[key]) {
563
- setErrors((prev) => {
564
- const next = { ...prev };
565
- delete next[key];
566
- return next;
567
- });
568
- }
569
- }, [errors]);
570
- const nextStep = react.useCallback(() => {
571
- if (!validateStep()) return false;
572
- if (step < config2.total_steps) {
573
- const newStep = step + 1;
574
- setStepDirection("forward");
575
- setStep(newStep);
576
- trackStepChange(newStep);
577
- return true;
578
- }
579
- return false;
580
- }, [step, config2.total_steps, validateStep, trackStepChange]);
581
- const prevStep = react.useCallback(() => {
582
- if (step > 1) {
583
- const newStep = step - 1;
584
- setStepDirection("back");
585
- setStep(newStep);
586
- trackStepChange(newStep);
587
- }
588
- }, [step, trackStepChange]);
589
- const goToStep = react.useCallback((targetStep) => {
590
- if (targetStep >= 1 && targetStep <= config2.total_steps) {
591
- setStepDirection(targetStep < step ? "back" : "forward");
592
- setStep(targetStep);
593
- trackStepChange(targetStep);
594
- }
595
- }, [step, config2.total_steps, trackStepChange]);
596
- const submit = react.useCallback(async () => {
597
- if (isSubmittingRef.current) return;
598
- const { ok, firstErrorStep } = validateAll();
599
- if (!ok) {
600
- if (firstErrorStep != null) {
601
- setStepDirection("back");
602
- setStep(firstErrorStep);
603
- }
604
- return;
605
- }
606
- isSubmittingRef.current = true;
607
- setIsSubmitting(true);
608
- setSubmitError(null);
609
- try {
610
- const data = await chunkP64SKDBS_js.submitForm({
611
- config: config2,
612
- values: buildVisibleValues(),
613
- honeypotValue: config2.honeypot_enabled ? honeypotValue : "",
614
- formLoadedAt: formLoadedAt.current
615
- });
616
- trackComplete();
617
- setIsComplete(true);
618
- onSuccess?.(data);
619
- if (config2.redirect_url) {
620
- window.location.href = config2.redirect_url;
621
- }
622
- } catch (error) {
623
- console.error("[Forms] Submission error:", error);
624
- setSubmitError("Something went wrong sending your submission. Please try again.");
625
- onError?.(error);
626
- } finally {
627
- isSubmittingRef.current = false;
628
- setIsSubmitting(false);
629
- }
630
- }, [config2, honeypotValue, validateAll, buildVisibleValues, trackComplete, onSuccess, onError]);
631
- const progress = react.useMemo(() => {
632
- return Math.round(step / config2.total_steps * 100);
633
- }, [step, config2.total_steps]);
634
- const currentStepConfig = react.useMemo(
635
- () => config2.steps?.find((s) => s.step_number === step),
636
- [config2.steps, step]
637
- );
638
- const stepPanelRef = react.useRef(null);
639
- const hasNavigatedRef = react.useRef(false);
640
- react.useEffect(() => {
641
- if (!config2.is_multi_step) return;
642
- if (!hasNavigatedRef.current) {
643
- hasNavigatedRef.current = true;
644
- return;
645
- }
646
- stepPanelRef.current?.focus();
647
- }, [step, config2.is_multi_step]);
648
- const renderProps = {
649
- config: config2,
650
- fields: currentFields,
651
- step,
652
- totalSteps: config2.total_steps,
653
- values,
654
- errors,
655
- isSubmitting,
656
- progress,
657
- nextStep,
658
- prevStep,
659
- goToStep,
660
- submit,
661
- setFieldValue,
662
- isFieldVisible
663
- };
664
- if (isComplete) {
665
- const raw = config2.success_message;
666
- const message = typeof raw === "string" && raw.trim().length > 0 ? raw.trim() : chunkP64SKDBS_js.DEFAULT_FORM_SUCCESS_MESSAGE;
667
- if (Celebration) return /* @__PURE__ */ jsxRuntime.jsx(Celebration, { message, className });
668
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className, "data-sk-part": "celebration-fallback", role: "status", children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: message }) });
669
- }
670
- if (customRender) {
671
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: customRender(renderProps) });
672
- }
673
- if (resolvedExperience !== "classic" && Experience) {
674
- const bundle = {
675
- config: config2,
676
- values,
677
- errors,
678
- touched,
679
- isSubmitting,
680
- submitError,
681
- momentum,
682
- className,
683
- setFieldValue,
684
- validateField,
685
- isFieldVisible,
686
- fieldIsComplete,
687
- applyFieldError: (slug, message) => setErrors((prev) => ({ ...prev, [slug]: message })),
688
- submit,
689
- trackStepChange,
690
- honeypot: config2.honeypot_enabled ? /* @__PURE__ */ jsxRuntime.jsx(
691
- HoneypotField,
692
- {
693
- name: honeypotFieldName,
694
- value: honeypotValue,
695
- onChange: setHoneypotValue
696
- }
697
- ) : null
698
- };
699
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
700
- /* @__PURE__ */ jsxRuntime.jsx(chunkBFADBU2B_js.DelightStyles, {}),
701
- /* @__PURE__ */ jsxRuntime.jsx(Experience, { ...bundle })
702
- ] });
703
- }
704
- return /* @__PURE__ */ jsxRuntime.jsxs(
705
- "form",
706
- {
707
- "data-sk-state": isSubmitting ? "submitting" : "idle",
708
- "data-sk-ready": momentum.total > 0 && momentum.done >= momentum.total && step >= config2.total_steps ? "true" : void 0,
709
- className: `sk-form ${className || ""}`,
710
- onSubmit: (e) => {
711
- e.preventDefault();
712
- if (step < config2.total_steps) {
713
- nextStep();
714
- } else {
715
- submit();
716
- }
717
- },
718
- children: [
719
- /* @__PURE__ */ jsxRuntime.jsx(chunkBFADBU2B_js.DelightStyles, {}),
720
- /* @__PURE__ */ jsxRuntime.jsx(chunkBFADBU2B_js.FormMomentum, { done: momentum.done, total: momentum.total }),
721
- config2.is_multi_step && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sk-form__progress", children: [
722
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sk-form__progress-header", children: [
723
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "sk-form__progress-step", children: [
724
- "Step ",
725
- step,
726
- " of ",
727
- config2.total_steps
728
- ] }),
729
- config2.show_progress && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "sk-form__progress-percent", children: [
730
- progress,
731
- "%"
732
- ] })
733
- ] }),
734
- /* @__PURE__ */ jsxRuntime.jsx(
735
- "div",
736
- {
737
- className: "sk-form__progress-track",
738
- role: "progressbar",
739
- "aria-valuemin": 1,
740
- "aria-valuemax": config2.total_steps,
741
- "aria-valuenow": step,
742
- "aria-valuetext": `Step ${step} of ${config2.total_steps}`,
743
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sk-form__progress-bar", style: { width: `${progress}%` } })
744
- }
745
- ),
746
- /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "sk-form__progress-dots", "aria-hidden": "true", children: Array.from({ length: config2.total_steps }, (_, i) => i + 1).map((n) => /* @__PURE__ */ jsxRuntime.jsx(
747
- "li",
748
- {
749
- className: "sk-form__progress-dot" + (n === step ? " sk-form__progress-dot--current" : "") + (n < step ? " sk-form__progress-dot--done" : "")
750
- },
751
- n
752
- )) })
753
- ] }),
754
- /* @__PURE__ */ jsxRuntime.jsxs(
755
- "div",
756
- {
757
- ref: stepPanelRef,
758
- tabIndex: -1,
759
- className: "sk-form__step" + (config2.is_multi_step ? ` sk-form__step--${stepDirection}` : ""),
760
- children: [
761
- config2.is_multi_step && (currentStepConfig?.title || currentStepConfig?.description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sk-form__step-intro", children: [
762
- currentStepConfig.title && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "sk-form__step-title", children: currentStepConfig.title }),
763
- currentStepConfig.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "sk-form__step-description", children: currentStepConfig.description })
764
- ] }),
765
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sk-form__fields", children: currentFields.map((field2) => {
766
- if (!isFieldVisible(field2)) return null;
767
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `sk-form__field-wrapper sk-form__field-wrapper--${field2.width || "full"}`, children: /* @__PURE__ */ jsxRuntime.jsx(
768
- chunkBFADBU2B_js.FormField,
769
- {
770
- field: field2,
771
- value: values[field2.slug],
772
- error: errors[field2.slug],
773
- showValid: !!touched[field2.slug] && !errors[field2.slug] && fieldIsComplete(field2),
774
- onChange: (value) => setFieldValue(field2.slug, value)
775
- }
776
- ) }, field2.id);
777
- }) })
778
- ]
779
- },
780
- step
781
- ),
782
- /* @__PURE__ */ jsxRuntime.jsxs(
783
- "div",
784
- {
785
- className: "sk-form__actions",
786
- style: { justifyContent: step > 1 ? "space-between" : "flex-end" },
787
- children: [
788
- step > 1 && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "sk-form__btn sk-form__btn--back", onClick: prevStep, children: "Back" }),
789
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "submit", className: "sk-form__btn sk-form__btn--submit", disabled: isSubmitting, children: isSubmitting ? "Submitting..." : step < config2.total_steps ? "Next" : config2.submit_button_text })
790
- ]
791
- }
792
- ),
793
- submitError && /* @__PURE__ */ jsxRuntime.jsx(
794
- "p",
795
- {
796
- className: "sk-form__submit-error",
797
- role: "alert",
798
- style: { color: "var(--sk-error, #dc2626)", fontSize: 14, marginTop: 12 },
799
- children: submitError
800
- }
801
- ),
802
- config2.honeypot_enabled && /* @__PURE__ */ jsxRuntime.jsx(
803
- HoneypotField,
804
- {
805
- name: honeypotFieldName,
806
- value: honeypotValue,
807
- onChange: setHoneypotValue
808
- }
809
- )
810
- ]
811
- }
812
- );
813
- }
814
- function ManagedForm({
815
- formId,
816
- projectId,
817
- className,
818
- onSuccess,
819
- onError,
820
- initialConfig,
821
- experience,
822
- children
823
- }) {
824
- const {
825
- form,
826
- isLoading,
827
- fetchError
828
- } = chunkP64SKDBS_js.useForm(formId, {
829
- projectId,
830
- onSuccess,
831
- onError,
832
- initialForm: initialConfig
833
- });
834
- if (isLoading) {
835
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className, children: /* @__PURE__ */ jsxRuntime.jsx("p", { style: { color: "#6b7280" }, children: "Loading form..." }) });
836
- }
837
- if (fetchError || !form) {
838
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className, children: /* @__PURE__ */ jsxRuntime.jsx("p", { style: { color: "var(--sk-error, #dc2626)" }, children: fetchError?.message || "Form not found or inactive." }) });
839
- }
840
- return /* @__PURE__ */ jsxRuntime.jsx(
841
- FormClient,
842
- {
843
- config: form,
844
- className,
845
- onSuccess,
846
- onError,
847
- customRender: children,
848
- experience
849
- }
850
- );
851
- }
852
338
 
853
339
  Object.defineProperty(exports, "FormCelebration", {
854
340
  enumerable: true,
855
341
  get: function () { return chunkYVJASVVK_js.FormCelebration; }
856
342
  });
343
+ Object.defineProperty(exports, "FormClient", {
344
+ enumerable: true,
345
+ get: function () { return chunkNWPNFCNY_js.FormClient; }
346
+ });
347
+ Object.defineProperty(exports, "ManagedForm", {
348
+ enumerable: true,
349
+ get: function () { return chunkNWPNFCNY_js.ManagedForm; }
350
+ });
857
351
  Object.defineProperty(exports, "DatePicker", {
858
352
  enumerable: true,
859
- get: function () { return chunkBFADBU2B_js.DatePicker; }
353
+ get: function () { return chunkDVYYGHSG_js.DatePicker; }
860
354
  });
861
- Object.defineProperty(exports, "FormFieldComponent", {
355
+ Object.defineProperty(exports, "FormEnhancer", {
862
356
  enumerable: true,
863
- get: function () { return chunkBFADBU2B_js.FormField; }
357
+ get: function () { return chunkWHVUSVHA_js.FormEnhancer; }
864
358
  });
865
- Object.defineProperty(exports, "DEFAULT_FORM_SUCCESS_MESSAGE", {
359
+ Object.defineProperty(exports, "FormFieldComponent", {
866
360
  enumerable: true,
867
- get: function () { return chunkP64SKDBS_js.DEFAULT_FORM_SUCCESS_MESSAGE; }
361
+ get: function () { return chunk2ACKOMAL_js.FormField; }
868
362
  });
869
363
  Object.defineProperty(exports, "useForm", {
870
364
  enumerable: true,
871
- get: function () { return chunkP64SKDBS_js.useForm; }
365
+ get: function () { return chunkOP5FYTWJ_js.useForm; }
872
366
  });
873
367
  Object.defineProperty(exports, "useFormTracking", {
874
368
  enumerable: true,
875
- get: function () { return chunkP64SKDBS_js.useFormTracking; }
369
+ get: function () { return chunkOP5FYTWJ_js.useFormTracking; }
370
+ });
371
+ Object.defineProperty(exports, "DEFAULT_FORM_SUCCESS_MESSAGE", {
372
+ enumerable: true,
373
+ get: function () { return chunkZRGCKWIT_js.DEFAULT_FORM_SUCCESS_MESSAGE; }
876
374
  });
877
- exports.FormClient = FormClient;
878
- exports.ManagedForm = ManagedForm;
879
375
  exports.configureFormsApi = configureFormsApi;
880
376
  exports.defineForm = defineForm;
881
377
  exports.field = field;