@10x-media/form-builder 0.1.0-beta.1 → 0.1.0-beta.11

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 (556) hide show
  1. package/CHANGELOG.md +304 -0
  2. package/README.md +6 -4
  3. package/dist/actions/assertNoBlockCollision.js +18 -0
  4. package/dist/actions/assertNoBlockCollision.js.map +1 -0
  5. package/dist/actions/body/converters.d.ts +20 -0
  6. package/dist/actions/body/converters.js +57 -0
  7. package/dist/actions/body/converters.js.map +1 -0
  8. package/dist/actions/body/escapeHtml.d.ts +6 -0
  9. package/dist/actions/body/escapeHtml.js +14 -0
  10. package/dist/actions/body/escapeHtml.js.map +1 -0
  11. package/dist/actions/body/serializeBody.d.ts +55 -0
  12. package/dist/actions/body/serializeBody.js +78 -0
  13. package/dist/actions/body/serializeBody.js.map +1 -0
  14. package/dist/actions/body/serializeSlate.js +31 -0
  15. package/dist/actions/body/serializeSlate.js.map +1 -0
  16. package/dist/actions/body/textOfBody.d.ts +13 -0
  17. package/dist/actions/body/textOfBody.js +35 -0
  18. package/dist/actions/body/textOfBody.js.map +1 -0
  19. package/dist/actions/body/wildcards.d.ts +10 -0
  20. package/dist/actions/body/wildcards.js +33 -0
  21. package/dist/actions/body/wildcards.js.map +1 -0
  22. package/dist/actions/buildActionBlocks.js +12 -9
  23. package/dist/actions/buildActionBlocks.js.map +1 -1
  24. package/dist/actions/builtin/confirmation.js +47 -43
  25. package/dist/actions/builtin/confirmation.js.map +1 -1
  26. package/dist/actions/builtin/emailAction.d.ts +19 -0
  27. package/dist/actions/builtin/emailAction.js +114 -0
  28. package/dist/actions/builtin/emailAction.js.map +1 -0
  29. package/dist/actions/builtin/emailTeam.js +20 -38
  30. package/dist/actions/builtin/emailTeam.js.map +1 -1
  31. package/dist/actions/builtin/index.d.ts +16 -1
  32. package/dist/actions/builtin/index.js +21 -7
  33. package/dist/actions/builtin/index.js.map +1 -1
  34. package/dist/actions/builtin/signedWebhook.js +6 -2
  35. package/dist/actions/builtin/signedWebhook.js.map +1 -1
  36. package/dist/actions/defineAction.d.ts +8 -5
  37. package/dist/actions/defineAction.js.map +1 -1
  38. package/dist/actions/dispatch.js +3 -2
  39. package/dist/actions/dispatch.js.map +1 -1
  40. package/dist/actions/emailRecipients.d.ts +12 -0
  41. package/dist/actions/emailRecipients.js +143 -0
  42. package/dist/actions/emailRecipients.js.map +1 -0
  43. package/dist/actions/fromAddresses.d.ts +21 -0
  44. package/dist/actions/fromAddresses.js +74 -0
  45. package/dist/actions/fromAddresses.js.map +1 -0
  46. package/dist/actions/recipientSources.d.ts +34 -0
  47. package/dist/actions/recipientSources.js +11 -0
  48. package/dist/actions/recipientSources.js.map +1 -0
  49. package/dist/actions/registry.d.ts +2 -1
  50. package/dist/actions/registry.js +2 -6
  51. package/dist/actions/registry.js.map +1 -1
  52. package/dist/actions/runActions.js +10 -1
  53. package/dist/actions/runActions.js.map +1 -1
  54. package/dist/actions/task.js +40 -15
  55. package/dist/actions/task.js.map +1 -1
  56. package/dist/aggregation/aggregateResponses.d.ts +9 -0
  57. package/dist/aggregation/aggregateResponses.js +8 -14
  58. package/dist/aggregation/aggregateResponses.js.map +1 -1
  59. package/dist/aggregation/resolveResultsRequest.d.ts +35 -6
  60. package/dist/aggregation/resolveResultsRequest.js +68 -11
  61. package/dist/aggregation/resolveResultsRequest.js.map +1 -1
  62. package/dist/calc/computeCalcFields.js +2 -1
  63. package/dist/calc/computeCalcFields.js.map +1 -1
  64. package/dist/calc/evaluate.js +1 -2
  65. package/dist/calc/evaluate.js.map +1 -1
  66. package/dist/calc/normalizeCalc.js +6 -19
  67. package/dist/calc/normalizeCalc.js.map +1 -1
  68. package/dist/calc/types.d.ts +8 -2
  69. package/dist/calc/types.js +22 -0
  70. package/dist/calc/types.js.map +1 -0
  71. package/dist/client/ByteSizeField.d.ts +29 -0
  72. package/dist/client/ByteSizeField.js +58 -0
  73. package/dist/client/ByteSizeField.js.map +1 -0
  74. package/dist/client/ClosePollButton.d.ts +15 -0
  75. package/dist/client/ClosePollButton.js +80 -0
  76. package/dist/client/ClosePollButton.js.map +1 -0
  77. package/dist/client/CondensedArray.d.ts +15 -0
  78. package/dist/client/CondensedArray.js +97 -0
  79. package/dist/client/CondensedArray.js.map +1 -0
  80. package/dist/client/ConditionBuilder.js +2 -1
  81. package/dist/client/ConditionBuilder.js.map +1 -1
  82. package/dist/client/ConsentBlockLabel.d.ts +15 -0
  83. package/dist/client/ConsentBlockLabel.js +71 -0
  84. package/dist/client/ConsentBlockLabel.js.map +1 -0
  85. package/dist/client/ConsentSourceRowLabel.d.ts +9 -0
  86. package/dist/client/ConsentSourceRowLabel.js +21 -0
  87. package/dist/client/ConsentSourceRowLabel.js.map +1 -0
  88. package/dist/client/EndpointOptionsSelect.d.ts +46 -0
  89. package/dist/client/EndpointOptionsSelect.js +106 -0
  90. package/dist/client/EndpointOptionsSelect.js.map +1 -0
  91. package/dist/client/FieldBlockLabel.d.ts +18 -0
  92. package/dist/client/FieldBlockLabel.js +34 -0
  93. package/dist/client/FieldBlockLabel.js.map +1 -0
  94. package/dist/client/FieldNameSelect.d.ts +37 -0
  95. package/dist/client/FieldNameSelect.js +72 -0
  96. package/dist/client/FieldNameSelect.js.map +1 -0
  97. package/dist/client/FlowBuilder.d.ts +2 -2
  98. package/dist/client/FlowBuilder.js +137 -88
  99. package/dist/client/FlowBuilder.js.map +1 -1
  100. package/dist/client/FormConditionField.js +1 -4
  101. package/dist/client/FormConditionField.js.map +1 -1
  102. package/dist/client/RecipientsSelect.d.ts +35 -0
  103. package/dist/client/RecipientsSelect.js +193 -0
  104. package/dist/client/RecipientsSelect.js.map +1 -0
  105. package/dist/client/RuleDescription.d.ts +21 -0
  106. package/dist/client/RuleDescription.js +19 -0
  107. package/dist/client/RuleDescription.js.map +1 -0
  108. package/dist/client/admin.css +275 -0
  109. package/dist/client/endpointOptions.js +29 -0
  110. package/dist/client/endpointOptions.js.map +1 -0
  111. package/dist/client/flowAuthoring.js +142 -0
  112. package/dist/client/flowAuthoring.js.map +1 -0
  113. package/dist/client/synthesizeClientField.js +21 -10
  114. package/dist/client/synthesizeClientField.js.map +1 -1
  115. package/dist/client/toStaticLabel.js +13 -0
  116. package/dist/client/toStaticLabel.js.map +1 -0
  117. package/dist/collections/buttonFields.d.ts +34 -0
  118. package/dist/collections/buttonFields.js +35 -0
  119. package/dist/collections/buttonFields.js.map +1 -0
  120. package/dist/collections/cells/FieldCountCell.d.ts +15 -0
  121. package/dist/collections/cells/FieldCountCell.js +18 -0
  122. package/dist/collections/cells/FieldCountCell.js.map +1 -0
  123. package/dist/collections/cells/FlowStepsCell.d.ts +14 -0
  124. package/dist/collections/cells/FlowStepsCell.js +17 -0
  125. package/dist/collections/cells/FlowStepsCell.js.map +1 -0
  126. package/dist/collections/formSubmissions.js +133 -47
  127. package/dist/collections/formSubmissions.js.map +1 -1
  128. package/dist/collections/forms.js +416 -114
  129. package/dist/collections/forms.js.map +1 -1
  130. package/dist/collections/formsEndpoints.js +101 -0
  131. package/dist/collections/formsEndpoints.js.map +1 -0
  132. package/dist/collections/redirectFields.d.ts +29 -0
  133. package/dist/conditions/conditionType.js +9 -2
  134. package/dist/conditions/conditionType.js.map +1 -1
  135. package/dist/conditions/evaluate.js +1 -1
  136. package/dist/conditions/evaluate.js.map +1 -1
  137. package/dist/conditions/fieldTypes.d.ts +3 -1
  138. package/dist/conditions/fieldTypes.js +4 -1
  139. package/dist/conditions/fieldTypes.js.map +1 -1
  140. package/dist/conditions/normalizeConditions.js +20 -6
  141. package/dist/conditions/normalizeConditions.js.map +1 -1
  142. package/dist/consent/applyConsentStatements.d.ts +14 -0
  143. package/dist/consent/applyConsentStatements.js +17 -0
  144. package/dist/consent/applyConsentStatements.js.map +1 -0
  145. package/dist/consent/captureConsent.d.ts +38 -11
  146. package/dist/consent/captureConsent.js +60 -13
  147. package/dist/consent/captureConsent.js.map +1 -1
  148. package/dist/consent/consentSourcesField.d.ts +66 -0
  149. package/dist/consent/consentSourcesField.js +90 -0
  150. package/dist/consent/consentSourcesField.js.map +1 -0
  151. package/dist/consent/resolveConsentEntries.d.ts +24 -0
  152. package/dist/consent/resolveConsentEntries.js +40 -0
  153. package/dist/consent/resolveConsentEntries.js.map +1 -0
  154. package/dist/consent/resolveConsentSourcesRequest.d.ts +37 -0
  155. package/dist/consent/resolveConsentSourcesRequest.js +54 -0
  156. package/dist/consent/resolveConsentSourcesRequest.js.map +1 -0
  157. package/dist/consent/resolveConsentStatements.d.ts +45 -0
  158. package/dist/consent/resolveConsentStatements.js +44 -0
  159. package/dist/consent/resolveConsentStatements.js.map +1 -0
  160. package/dist/consent/resolvePublishedVersionRef.d.ts +17 -11
  161. package/dist/consent/resolvePublishedVersionRef.js +13 -10
  162. package/dist/consent/resolvePublishedVersionRef.js.map +1 -1
  163. package/dist/consent/types.d.ts +61 -0
  164. package/dist/context/formContext.d.ts +30 -0
  165. package/dist/context/formContext.js +54 -0
  166. package/dist/context/formContext.js.map +1 -0
  167. package/dist/email/departments.d.ts +59 -0
  168. package/dist/email/departments.js +87 -0
  169. package/dist/email/departments.js.map +1 -0
  170. package/dist/email/departmentsField.d.ts +53 -0
  171. package/dist/email/departmentsField.js +73 -0
  172. package/dist/email/departmentsField.js.map +1 -0
  173. package/dist/exports/client.d.ts +13 -1
  174. package/dist/exports/client.js +13 -1
  175. package/dist/exports/i18n.d.ts +5 -2
  176. package/dist/exports/i18n.js +5 -2
  177. package/dist/exports/react.d.ts +26 -8
  178. package/dist/exports/react.js +19 -3
  179. package/dist/exports/rsc.d.ts +9 -1
  180. package/dist/exports/rsc.js +9 -1
  181. package/dist/exports/types.d.ts +19 -10
  182. package/dist/fields/buildFieldBlocks.js +53 -19
  183. package/dist/fields/buildFieldBlocks.js.map +1 -1
  184. package/dist/fields/builtin/calculation.js +122 -2
  185. package/dist/fields/builtin/calculation.js.map +1 -1
  186. package/dist/fields/builtin/checkbox.js +8 -0
  187. package/dist/fields/builtin/checkbox.js.map +1 -1
  188. package/dist/fields/builtin/consent.js +30 -15
  189. package/dist/fields/builtin/consent.js.map +1 -1
  190. package/dist/fields/builtin/country.d.ts +13 -0
  191. package/dist/fields/builtin/country.js +30 -0
  192. package/dist/fields/builtin/country.js.map +1 -0
  193. package/dist/fields/builtin/date.js +31 -0
  194. package/dist/fields/builtin/date.js.map +1 -0
  195. package/dist/fields/builtin/email.js +1 -1
  196. package/dist/fields/builtin/email.js.map +1 -1
  197. package/dist/fields/builtin/file.d.ts +15 -0
  198. package/dist/fields/builtin/file.js +95 -8
  199. package/dist/fields/builtin/file.js.map +1 -1
  200. package/dist/fields/builtin/index.d.ts +26 -0
  201. package/dist/fields/builtin/index.js +30 -6
  202. package/dist/fields/builtin/index.js.map +1 -1
  203. package/dist/fields/builtin/message.js +30 -0
  204. package/dist/fields/builtin/message.js.map +1 -0
  205. package/dist/fields/builtin/repeater.js +49 -0
  206. package/dist/fields/builtin/repeater.js.map +1 -0
  207. package/dist/fields/builtin/select.js +8 -3
  208. package/dist/fields/builtin/select.js.map +1 -1
  209. package/dist/fields/builtin/state.d.ts +13 -0
  210. package/dist/fields/builtin/state.js +30 -0
  211. package/dist/fields/builtin/state.js.map +1 -0
  212. package/dist/fields/data/regions.d.ts +21 -0
  213. package/dist/fields/data/regions.js +1238 -0
  214. package/dist/fields/data/regions.js.map +1 -0
  215. package/dist/fields/fieldKey.d.ts +15 -0
  216. package/dist/fields/fieldKey.js +16 -0
  217. package/dist/fields/fieldKey.js.map +1 -0
  218. package/dist/fields/fieldNamesOfType.js +30 -0
  219. package/dist/fields/fieldNamesOfType.js.map +1 -0
  220. package/dist/fields/instanceOptions.js +20 -0
  221. package/dist/fields/instanceOptions.js.map +1 -0
  222. package/dist/fields/localizedIf.d.ts +13 -0
  223. package/dist/fields/localizedIf.js +12 -0
  224. package/dist/fields/localizedIf.js.map +1 -0
  225. package/dist/fields/registry.d.ts +3 -1
  226. package/dist/fields/registry.js +23 -8
  227. package/dist/fields/registry.js.map +1 -1
  228. package/dist/fields/sharedConfig.js +120 -58
  229. package/dist/fields/sharedConfig.js.map +1 -1
  230. package/dist/fields/types.d.ts +71 -7
  231. package/dist/flow/engine.d.ts +6 -4
  232. package/dist/flow/engine.js +11 -6
  233. package/dist/flow/engine.js.map +1 -1
  234. package/dist/flow/normalizeFlow.js +28 -9
  235. package/dist/flow/normalizeFlow.js.map +1 -1
  236. package/dist/flow/stepLabel.js +15 -0
  237. package/dist/flow/stepLabel.js.map +1 -0
  238. package/dist/flow/types.d.ts +12 -3
  239. package/dist/flow/types.js +11 -0
  240. package/dist/flow/types.js.map +1 -0
  241. package/dist/form/pollState.d.ts +22 -0
  242. package/dist/form/pollState.js +17 -0
  243. package/dist/form/pollState.js.map +1 -0
  244. package/dist/form/toFormDocument.d.ts +102 -0
  245. package/dist/form/toFormDocument.js +87 -0
  246. package/dist/form/toFormDocument.js.map +1 -0
  247. package/dist/form/types.d.ts +65 -0
  248. package/dist/index.d.ts +55 -39
  249. package/dist/index.js +89 -23
  250. package/dist/index.js.map +1 -1
  251. package/dist/options.d.ts +236 -0
  252. package/dist/plugin/applyRegistryConfig.d.ts +11 -0
  253. package/dist/plugin/applyRegistryConfig.js +20 -0
  254. package/dist/plugin/applyRegistryConfig.js.map +1 -0
  255. package/dist/plugin/collectionOverrides.d.ts +22 -0
  256. package/dist/plugin/customState.js +26 -0
  257. package/dist/plugin/customState.js.map +1 -0
  258. package/dist/plugin/registerCollections.js +40 -20
  259. package/dist/plugin/registerCollections.js.map +1 -1
  260. package/dist/plugin/uploadsCollection.d.ts +16 -0
  261. package/dist/plugin/uploadsCollection.js +53 -0
  262. package/dist/plugin/uploadsCollection.js.map +1 -0
  263. package/dist/poll/applyPollOptions.js +18 -0
  264. package/dist/poll/applyPollOptions.js.map +1 -0
  265. package/dist/poll/buildPollOptionSourceFields.js +50 -0
  266. package/dist/poll/buildPollOptionSourceFields.js.map +1 -0
  267. package/dist/poll/closeJob.d.ts +52 -0
  268. package/dist/poll/closeJob.js +119 -0
  269. package/dist/poll/closeJob.js.map +1 -0
  270. package/dist/poll/definePollOptionSource.d.ts +44 -0
  271. package/dist/poll/definePollOptionSource.js +6 -0
  272. package/dist/poll/definePollOptionSource.js.map +1 -0
  273. package/dist/poll/definePollType.d.ts +34 -0
  274. package/dist/poll/definePollType.js +6 -0
  275. package/dist/poll/definePollType.js.map +1 -0
  276. package/dist/poll/effectivePollOptions.d.ts +38 -0
  277. package/dist/poll/effectivePollOptions.js +64 -0
  278. package/dist/poll/effectivePollOptions.js.map +1 -0
  279. package/dist/poll/mostVoted.d.ts +21 -0
  280. package/dist/poll/mostVoted.js +32 -0
  281. package/dist/poll/mostVoted.js.map +1 -0
  282. package/dist/poll/outcomeBeforeChange.js +91 -0
  283. package/dist/poll/outcomeBeforeChange.js.map +1 -0
  284. package/dist/poll/outcomeFields.d.ts +38 -0
  285. package/dist/poll/outcomeFields.js +52 -0
  286. package/dist/poll/outcomeFields.js.map +1 -0
  287. package/dist/poll/pollTypeRegistry.d.ts +34 -0
  288. package/dist/poll/pollTypeRegistry.js +69 -0
  289. package/dist/poll/pollTypeRegistry.js.map +1 -0
  290. package/dist/poll/registry.d.ts +17 -0
  291. package/dist/poll/registry.js +12 -0
  292. package/dist/poll/registry.js.map +1 -0
  293. package/dist/poll/resolvePollCloseRequest.js +105 -0
  294. package/dist/poll/resolvePollCloseRequest.js.map +1 -0
  295. package/dist/poll/resolvePollOptions.d.ts +29 -0
  296. package/dist/poll/resolvePollOptions.js +52 -0
  297. package/dist/poll/resolvePollOptions.js.map +1 -0
  298. package/dist/poll/resolvePollOptionsRequest.js +50 -0
  299. package/dist/poll/resolvePollOptionsRequest.js.map +1 -0
  300. package/dist/poll/resolvePollOutcome.d.ts +34 -0
  301. package/dist/poll/resolvePollOutcome.js +76 -0
  302. package/dist/poll/resolvePollOutcome.js.map +1 -0
  303. package/dist/poll/resultsField.js +21 -0
  304. package/dist/poll/resultsField.js.map +1 -0
  305. package/dist/prefill/valuesFromSearchParams.js +5 -9
  306. package/dist/prefill/valuesFromSearchParams.js.map +1 -1
  307. package/dist/presentations/types.d.ts +3 -2
  308. package/dist/react/Form.d.ts +74 -20
  309. package/dist/react/Form.js +346 -180
  310. package/dist/react/Form.js.map +1 -1
  311. package/dist/react/FormContext.d.ts +44 -1
  312. package/dist/react/FormContext.js.map +1 -1
  313. package/dist/react/FormControls.d.ts +55 -0
  314. package/dist/react/FormControls.js +56 -0
  315. package/dist/react/FormControls.js.map +1 -0
  316. package/dist/react/FormFields.d.ts +18 -0
  317. package/dist/react/FormFields.js +114 -0
  318. package/dist/react/FormFields.js.map +1 -0
  319. package/dist/react/FormLayout.d.ts +4 -2
  320. package/dist/react/FormLayout.js +3 -2
  321. package/dist/react/FormLayout.js.map +1 -1
  322. package/dist/react/FormResults.d.ts +6 -3
  323. package/dist/react/FormResults.js +37 -29
  324. package/dist/react/FormResults.js.map +1 -1
  325. package/dist/react/FormSteps.d.ts +17 -0
  326. package/dist/react/FormSteps.js +35 -0
  327. package/dist/react/FormSteps.js.map +1 -0
  328. package/dist/react/Poll.d.ts +17 -6
  329. package/dist/react/Poll.js +79 -21
  330. package/dist/react/Poll.js.map +1 -1
  331. package/dist/react/captcha/HcaptchaCaptcha.d.ts +28 -0
  332. package/dist/react/captcha/HcaptchaCaptcha.js +53 -0
  333. package/dist/react/captcha/HcaptchaCaptcha.js.map +1 -0
  334. package/dist/react/captcha/RecaptchaCaptcha.d.ts +41 -0
  335. package/dist/react/captcha/RecaptchaCaptcha.js +93 -0
  336. package/dist/react/captcha/RecaptchaCaptcha.js.map +1 -0
  337. package/dist/react/captcha/TurnstileCaptcha.d.ts +28 -0
  338. package/dist/react/captcha/TurnstileCaptcha.js +53 -0
  339. package/dist/react/captcha/TurnstileCaptcha.js.map +1 -0
  340. package/dist/react/captcha/types.d.ts +8 -0
  341. package/dist/react/captcha/useCaptchaScript.js +45 -0
  342. package/dist/react/captcha/useCaptchaScript.js.map +1 -0
  343. package/dist/react/captcha/vendors.js +8 -0
  344. package/dist/react/captcha/vendors.js.map +1 -0
  345. package/dist/react/contract.d.ts +2 -3
  346. package/dist/react/contract.js.map +1 -1
  347. package/dist/react/fetchResults.d.ts +1 -1
  348. package/dist/react/fetchResults.js +1 -1
  349. package/dist/react/fetchResults.js.map +1 -1
  350. package/dist/react/presentation/DialogSurface.js +1 -4
  351. package/dist/react/presentation/DialogSurface.js.map +1 -1
  352. package/dist/react/primitives/Checkbox.d.ts +4 -2
  353. package/dist/react/primitives/Checkbox.js +2 -1
  354. package/dist/react/primitives/Checkbox.js.map +1 -1
  355. package/dist/react/primitives/FieldShell.d.ts +2 -4
  356. package/dist/react/primitives/FieldShell.js +12 -19
  357. package/dist/react/primitives/FieldShell.js.map +1 -1
  358. package/dist/react/primitives/Input.d.ts +1 -1
  359. package/dist/react/primitives/Input.js.map +1 -1
  360. package/dist/react/renderers/calculation.js +1 -4
  361. package/dist/react/renderers/calculation.js.map +1 -1
  362. package/dist/react/renderers/checkbox.js +1 -4
  363. package/dist/react/renderers/checkbox.js.map +1 -1
  364. package/dist/react/renderers/consent.js +78 -35
  365. package/dist/react/renderers/consent.js.map +1 -1
  366. package/dist/react/renderers/date.js +33 -0
  367. package/dist/react/renderers/date.js.map +1 -0
  368. package/dist/react/renderers/email.js +1 -4
  369. package/dist/react/renderers/email.js.map +1 -1
  370. package/dist/react/renderers/file.js +29 -14
  371. package/dist/react/renderers/file.js.map +1 -1
  372. package/dist/react/renderers/index.js +9 -0
  373. package/dist/react/renderers/index.js.map +1 -1
  374. package/dist/react/renderers/message.js +41 -0
  375. package/dist/react/renderers/message.js.map +1 -0
  376. package/dist/react/renderers/number.js +1 -4
  377. package/dist/react/renderers/number.js.map +1 -1
  378. package/dist/react/renderers/region.js +43 -0
  379. package/dist/react/renderers/region.js.map +1 -0
  380. package/dist/react/renderers/repeater.js +131 -0
  381. package/dist/react/renderers/repeater.js.map +1 -0
  382. package/dist/react/renderers/select.js +1 -4
  383. package/dist/react/renderers/select.js.map +1 -1
  384. package/dist/react/renderers/text.js +1 -4
  385. package/dist/react/renderers/text.js.map +1 -1
  386. package/dist/react/renderers/textarea.js +1 -4
  387. package/dist/react/renderers/textarea.js.map +1 -1
  388. package/dist/react/state.d.ts +40 -3
  389. package/dist/react/state.js +64 -9
  390. package/dist/react/state.js.map +1 -1
  391. package/dist/react/uploadFile.d.ts +2 -2
  392. package/dist/react/uploadFile.js +1 -1
  393. package/dist/react/uploadFile.js.map +1 -1
  394. package/dist/react/useField.d.ts +0 -1
  395. package/dist/react/useField.js +6 -6
  396. package/dist/react/useField.js.map +1 -1
  397. package/dist/react/useFormState.d.ts +1 -1
  398. package/dist/react/useFormState.js +1 -1
  399. package/dist/react/useFormState.js.map +1 -1
  400. package/dist/react/validateField.js +3 -6
  401. package/dist/react/validateField.js.map +1 -1
  402. package/dist/recall/interpolate.d.ts +4 -3
  403. package/dist/recall/interpolate.js +5 -4
  404. package/dist/recall/interpolate.js.map +1 -1
  405. package/dist/recall/resolver.d.ts +1 -1
  406. package/dist/recall/resolver.js +14 -2
  407. package/dist/recall/resolver.js.map +1 -1
  408. package/dist/spam/captcha.d.ts +4 -3
  409. package/dist/spam/captcha.js +4 -3
  410. package/dist/spam/captcha.js.map +1 -1
  411. package/dist/spam/clientIp.js +9 -0
  412. package/dist/spam/clientIp.js.map +1 -0
  413. package/dist/spam/constants.js +13 -1
  414. package/dist/spam/constants.js.map +1 -1
  415. package/dist/spam/identify.js +3 -6
  416. package/dist/spam/identify.js.map +1 -1
  417. package/dist/spam/providers/hcaptcha.d.ts +17 -0
  418. package/dist/spam/providers/hcaptcha.js +18 -0
  419. package/dist/spam/providers/hcaptcha.js.map +1 -0
  420. package/dist/spam/providers/recaptcha.d.ts +23 -0
  421. package/dist/spam/providers/recaptcha.js +23 -0
  422. package/dist/spam/providers/recaptcha.js.map +1 -0
  423. package/dist/spam/providers/siteverify.js +34 -0
  424. package/dist/spam/providers/siteverify.js.map +1 -0
  425. package/dist/spam/providers/turnstile.d.ts +17 -0
  426. package/dist/spam/providers/turnstile.js +18 -0
  427. package/dist/spam/providers/turnstile.js.map +1 -0
  428. package/dist/spam/resolveSpam.js +2 -1
  429. package/dist/spam/resolveSpam.js.map +1 -1
  430. package/dist/spam/spamGuard.js +23 -10
  431. package/dist/spam/spamGuard.js.map +1 -1
  432. package/dist/spam/types.d.ts +19 -4
  433. package/dist/submissions/SubmissionAnswers.d.ts +2 -4
  434. package/dist/submissions/SubmissionAnswers.js +114 -34
  435. package/dist/submissions/SubmissionAnswers.js.map +1 -1
  436. package/dist/submissions/SubmissionAnswersClient.js +178 -0
  437. package/dist/submissions/SubmissionAnswersClient.js.map +1 -0
  438. package/dist/submissions/coerceBoolean.js +14 -0
  439. package/dist/submissions/coerceBoolean.js.map +1 -0
  440. package/dist/submissions/createSubmission.d.ts +36 -0
  441. package/dist/submissions/createSubmission.js +26 -0
  442. package/dist/submissions/createSubmission.js.map +1 -0
  443. package/dist/submissions/runSubmission.d.ts +10 -0
  444. package/dist/submissions/runSubmission.js +128 -27
  445. package/dist/submissions/runSubmission.js.map +1 -1
  446. package/dist/submissions/types.d.ts +12 -4
  447. package/dist/submissions/validateSubmission.js +62 -11
  448. package/dist/submissions/validateSubmission.js.map +1 -1
  449. package/dist/submissions/verifyContext.js +35 -0
  450. package/dist/submissions/verifyContext.js.map +1 -0
  451. package/dist/submissions/votedCookie.d.ts +13 -0
  452. package/dist/submissions/votedCookie.js +27 -0
  453. package/dist/submissions/votedCookie.js.map +1 -0
  454. package/dist/translations/clientRuntimeKeys.d.ts +17 -0
  455. package/dist/translations/clientRuntimeKeys.js +46 -0
  456. package/dist/translations/clientRuntimeKeys.js.map +1 -0
  457. package/dist/translations/de.d.ts +12 -0
  458. package/dist/translations/de.js +313 -0
  459. package/dist/translations/de.js.map +1 -0
  460. package/dist/translations/en.js +207 -27
  461. package/dist/translations/en.js.map +1 -1
  462. package/dist/translations/index.d.ts +14 -5
  463. package/dist/translations/index.js +14 -3
  464. package/dist/translations/index.js.map +1 -1
  465. package/dist/translations/keys.d.ts +203 -23
  466. package/dist/translations/keys.js +204 -24
  467. package/dist/translations/keys.js.map +1 -1
  468. package/dist/translations/makeTranslate.d.ts +7 -3
  469. package/dist/translations/makeTranslate.js +12 -3
  470. package/dist/translations/makeTranslate.js.map +1 -1
  471. package/dist/translations/server.js +8 -1
  472. package/dist/translations/server.js.map +1 -1
  473. package/dist/uploads/captureFileRef.d.ts +10 -3
  474. package/dist/uploads/captureFileRef.js +18 -9
  475. package/dist/uploads/captureFileRef.js.map +1 -1
  476. package/dist/uploads/formatBytes.d.ts +9 -0
  477. package/dist/uploads/formatBytes.js +25 -0
  478. package/dist/uploads/formatBytes.js.map +1 -0
  479. package/dist/uploads/resolveFileRef.js +3 -2
  480. package/dist/uploads/resolveFileRef.js.map +1 -1
  481. package/dist/uploads/types.d.ts +1 -2
  482. package/dist/validation/buildRuleBlocks.js +18 -17
  483. package/dist/validation/buildRuleBlocks.js.map +1 -1
  484. package/dist/validation/builtin/email.js +2 -1
  485. package/dist/validation/builtin/email.js.map +1 -1
  486. package/dist/validation/builtin/index.d.ts +14 -0
  487. package/dist/validation/builtin/index.js +12 -1
  488. package/dist/validation/builtin/index.js.map +1 -1
  489. package/dist/validation/builtin/matchesField.js +3 -7
  490. package/dist/validation/builtin/matchesField.js.map +1 -1
  491. package/dist/validation/builtin/max.js +1 -0
  492. package/dist/validation/builtin/max.js.map +1 -1
  493. package/dist/validation/builtin/maxDate.js +24 -0
  494. package/dist/validation/builtin/maxDate.js.map +1 -0
  495. package/dist/validation/builtin/maxLength.js +1 -0
  496. package/dist/validation/builtin/maxLength.js.map +1 -1
  497. package/dist/validation/builtin/min.js +1 -0
  498. package/dist/validation/builtin/min.js.map +1 -1
  499. package/dist/validation/builtin/minDate.js +24 -0
  500. package/dist/validation/builtin/minDate.js.map +1 -0
  501. package/dist/validation/builtin/minLength.js +1 -0
  502. package/dist/validation/builtin/minLength.js.map +1 -1
  503. package/dist/validation/builtin/notAlreadySubmitted.js +2 -0
  504. package/dist/validation/builtin/notAlreadySubmitted.js.map +1 -1
  505. package/dist/validation/builtin/oneOf.js +1 -0
  506. package/dist/validation/builtin/oneOf.js.map +1 -1
  507. package/dist/validation/builtin/pattern.js +11 -2
  508. package/dist/validation/builtin/pattern.js.map +1 -1
  509. package/dist/validation/builtin/url.js +1 -0
  510. package/dist/validation/builtin/url.js.map +1 -1
  511. package/dist/validation/builtin/validateDateBound.js +18 -0
  512. package/dist/validation/builtin/validateDateBound.js.map +1 -0
  513. package/dist/validation/builtin/validateRegexParams.js +44 -0
  514. package/dist/validation/builtin/validateRegexParams.js.map +1 -0
  515. package/dist/validation/emailPattern.js +10 -0
  516. package/dist/validation/emailPattern.js.map +1 -0
  517. package/dist/validation/fieldTargetParam.d.ts +22 -0
  518. package/dist/validation/fieldTargetParam.js +38 -0
  519. package/dist/validation/fieldTargetParam.js.map +1 -0
  520. package/dist/validation/registry.d.ts +2 -1
  521. package/dist/validation/registry.js +2 -9
  522. package/dist/validation/registry.js.map +1 -1
  523. package/dist/validation/runValidation.js +9 -30
  524. package/dist/validation/runValidation.js.map +1 -1
  525. package/dist/validation/types.d.ts +5 -11
  526. package/dist/validation/validateUrl.js +22 -0
  527. package/dist/validation/validateUrl.js.map +1 -0
  528. package/package.json +7 -5
  529. package/styles/form-builder.css +10 -190
  530. package/dist/collections/uploads.d.ts +0 -29
  531. package/dist/collections/uploads.js +0 -46
  532. package/dist/collections/uploads.js.map +0 -1
  533. package/dist/consent/buildConsentSourceConfig.js +0 -49
  534. package/dist/consent/buildConsentSourceConfig.js.map +0 -1
  535. package/dist/consent/builtin/index.d.ts +0 -7
  536. package/dist/consent/builtin/index.js +0 -11
  537. package/dist/consent/builtin/index.js.map +0 -1
  538. package/dist/consent/builtin/pageReference.js +0 -75
  539. package/dist/consent/builtin/pageReference.js.map +0 -1
  540. package/dist/consent/builtin/static.js +0 -44
  541. package/dist/consent/builtin/static.js.map +0 -1
  542. package/dist/consent/defineConsentSource.d.ts +0 -35
  543. package/dist/consent/defineConsentSource.js +0 -6
  544. package/dist/consent/defineConsentSource.js.map +0 -1
  545. package/dist/consent/registry.d.ts +0 -16
  546. package/dist/consent/registry.js +0 -16
  547. package/dist/consent/registry.js.map +0 -1
  548. package/dist/consent/resolveConsentLinks.d.ts +0 -19
  549. package/dist/consent/resolveConsentLinks.js +0 -26
  550. package/dist/consent/resolveConsentLinks.js.map +0 -1
  551. package/dist/presentations/registry.d.ts +0 -15
  552. package/dist/presentations/registry.js +0 -15
  553. package/dist/presentations/registry.js.map +0 -1
  554. package/dist/react/toFormDocument.d.ts +0 -24
  555. package/dist/react/toFormDocument.js +0 -22
  556. package/dist/react/toFormDocument.js.map +0 -1
@@ -2,25 +2,23 @@ import { keys } from "../translations/keys.js";
2
2
  import { asFieldTranslate } from "../translations/server.js";
3
3
  import { defaultFieldDefinitions } from "../fields/builtin/index.js";
4
4
  import { buildRegistry } from "../fields/registry.js";
5
- import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { SubmissionAnswersClient } from "./SubmissionAnswersClient.js";
6
+ import { jsx } from "react/jsx-runtime";
6
7
  //#region src/submissions/SubmissionAnswers.tsx
7
8
  const registry = buildRegistry(defaultFieldDefinitions);
8
- /** A stored file answer's link, when the captured `FileRef` carries a url; null otherwise. */
9
- const fileHref = (raw) => {
10
- if (raw && typeof raw === "object" && "url" in raw) {
11
- const ref = raw;
12
- if (typeof ref.url === "string" && ref.url.length > 0) return {
13
- url: ref.url,
14
- filename: typeof ref.filename === "string" ? ref.filename : ref.url
15
- };
9
+ const formatDate = (iso, locale) => {
10
+ try {
11
+ return new Intl.DateTimeFormat(locale, {
12
+ dateStyle: "medium",
13
+ timeStyle: "short"
14
+ }).format(new Date(iso));
15
+ } catch {
16
+ return iso;
16
17
  }
17
- return null;
18
18
  };
19
19
  /**
20
- * Read-only, localized submission view (server component). Renders each answered field's snapshot
21
- * label next to its type-aware formatted value via the field type's `format`, using the request
22
- * locale and i18n, with no client bundle. The built-in field types are formatted directly; threading
23
- * the full resolved registry (custom types) to the view is a future enhancement.
20
+ * Server component. Formats submission data into serializable props and delegates
21
+ * rendering to the client component which uses Payload's UI components.
24
22
  */
25
23
  const SubmissionAnswers = ({ data, req }) => {
26
24
  const doc = data ?? {};
@@ -28,27 +26,109 @@ const SubmissionAnswers = ({ data, req }) => {
28
26
  const values = doc.values ?? [];
29
27
  const locale = doc.locale ?? req.locale ?? "en";
30
28
  const t = asFieldTranslate(req.i18n.t);
31
- if (descriptors.length === 0) return /* @__PURE__ */ jsx("p", { children: t(keys.submissionNoAnswers) });
29
+ const rawConsent = doc.consent ?? [];
30
+ const meta = doc.meta;
32
31
  const valueByField = new Map(values.map((entry) => [entry.field, entry.value]));
33
- return /* @__PURE__ */ jsxs("div", {
34
- className: "form-builder-submission-answers",
35
- children: [/* @__PURE__ */ jsx("h4", { children: t(keys.submissionAnswers) }), /* @__PURE__ */ jsx("dl", { children: descriptors.map((descriptor) => {
36
- const definition = registry.get(descriptor.fieldType);
37
- const raw = valueByField.get(descriptor.field);
38
- const formatted = definition?.format ? definition.format({
39
- value: raw,
40
- config: {},
41
- optionLabels: descriptor.optionLabels,
42
- locale,
43
- t
44
- }) : raw == null ? "" : String(raw);
45
- const href = descriptor.fieldType === "file" ? fileHref(raw) : null;
46
- return /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("dt", { children: descriptor.label }), /* @__PURE__ */ jsx("dd", { children: href ? /* @__PURE__ */ jsx("a", {
47
- href: href.url,
48
- rel: "noreferrer",
49
- children: href.filename
50
- }) : formatted })] }, descriptor.field);
51
- }) })]
32
+ const answers = [];
33
+ const repeaters = [];
34
+ for (const descriptor of descriptors) {
35
+ const raw = valueByField.get(descriptor.field);
36
+ if (descriptor.fieldType === "repeater") {
37
+ const rows = Array.isArray(raw) ? raw : [];
38
+ const subDescs = descriptor.subFieldDescriptors ?? [];
39
+ repeaters.push({
40
+ field: descriptor.field,
41
+ label: descriptor.label,
42
+ rows: rows.map((row, rowIndex) => ({
43
+ id: String(rowIndex),
44
+ subFields: subDescs.map((sub) => {
45
+ const subDef = registry.get(sub.fieldType);
46
+ const subRaw = row[sub.field];
47
+ const formatted = subDef?.format ? subDef.format({
48
+ value: subRaw,
49
+ config: {},
50
+ optionLabels: sub.optionLabels,
51
+ locale,
52
+ t
53
+ }) : subRaw == null ? "" : String(subRaw);
54
+ return {
55
+ label: sub.label,
56
+ value: formatted || "—"
57
+ };
58
+ })
59
+ }))
60
+ });
61
+ continue;
62
+ }
63
+ const def = registry.get(descriptor.fieldType);
64
+ const formatted = def?.format ? def.format({
65
+ value: raw,
66
+ config: {},
67
+ optionLabels: descriptor.optionLabels,
68
+ locale,
69
+ t
70
+ }) : raw == null ? "" : String(raw);
71
+ if (descriptor.fieldType === "file") {
72
+ const ref = raw && typeof raw === "object" && "url" in raw ? raw : null;
73
+ const url = typeof ref?.url === "string" ? ref.url : void 0;
74
+ const filename = typeof ref?.filename === "string" ? ref.filename : url ?? "";
75
+ answers.push({
76
+ field: descriptor.field,
77
+ label: descriptor.label,
78
+ value: filename,
79
+ href: url
80
+ });
81
+ } else answers.push({
82
+ field: descriptor.field,
83
+ label: descriptor.label,
84
+ value: formatted || "—",
85
+ multiline: descriptor.fieldType === "textarea",
86
+ ...descriptor.width ? { width: descriptor.width } : {}
87
+ });
88
+ }
89
+ const consent = rawConsent.map((entry) => ({
90
+ ...entry,
91
+ at: formatDate(entry.at, locale)
92
+ }));
93
+ const metaItems = [{
94
+ label: t(keys.submissionMetaLocale),
95
+ value: locale
96
+ }];
97
+ if (meta) {
98
+ if (meta.at) metaItems.push({
99
+ label: t(keys.submissionMetaReceivedAt),
100
+ value: formatDate(meta.at, locale)
101
+ });
102
+ if (meta.ip) metaItems.push({
103
+ label: t(keys.submissionMetaIp),
104
+ value: meta.ip
105
+ });
106
+ if (meta.ua) metaItems.push({
107
+ label: t(keys.submissionMetaUserAgent),
108
+ value: String(meta.ua)
109
+ });
110
+ if (meta.spam) {
111
+ const captcha = typeof meta.spam === "object" && "captcha" in meta.spam ? String(meta.spam.captcha) : "—";
112
+ metaItems.push({
113
+ label: t(keys.submissionMetaCaptcha),
114
+ value: captcha
115
+ });
116
+ }
117
+ }
118
+ return /* @__PURE__ */ jsx(SubmissionAnswersClient, {
119
+ answers,
120
+ repeaters,
121
+ consent,
122
+ meta: metaItems,
123
+ labels: {
124
+ answers: t(keys.submissionAnswers),
125
+ consent: t(keys.submissionConsent),
126
+ submissionDetails: t(keys.submissionDetails),
127
+ agreed: t(keys.submissionConsentAgreed),
128
+ declined: t(keys.submissionConsentDeclined),
129
+ row: t(keys.repeaterRow),
130
+ empty: t(keys.submissionNoAnswers)
131
+ }
52
132
  });
53
133
  };
54
134
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"SubmissionAnswers.js","names":[],"sources":["../../src/submissions/SubmissionAnswers.tsx"],"sourcesContent":["import type { UIFieldServerProps } from 'payload'\nimport { defaultFieldDefinitions } from '../fields/builtin'\nimport { buildRegistry } from '../fields/registry'\nimport { keys } from '../translations/keys'\nimport { asFieldTranslate } from '../translations/server'\nimport type { SubmissionDescriptor, SubmissionValue } from './types'\n\nconst registry = buildRegistry(defaultFieldDefinitions)\n\ntype SubmissionDoc = {\n\tvalues?: SubmissionValue[]\n\tdescriptors?: SubmissionDescriptor[]\n\tlocale?: string\n}\n\n/** A stored file answer's link, when the captured `FileRef` carries a url; null otherwise. */\nconst fileHref = (raw: unknown): { url: string; filename: string } | null => {\n\tif (raw && typeof raw === 'object' && 'url' in raw) {\n\t\tconst ref = raw as { url?: unknown; filename?: unknown }\n\t\tif (typeof ref.url === 'string' && ref.url.length > 0) {\n\t\t\treturn { url: ref.url, filename: typeof ref.filename === 'string' ? ref.filename : ref.url }\n\t\t}\n\t}\n\treturn null\n}\n\n/**\n * Read-only, localized submission view (server component). Renders each answered field's snapshot\n * label next to its type-aware formatted value via the field type's `format`, using the request\n * locale and i18n, with no client bundle. The built-in field types are formatted directly; threading\n * the full resolved registry (custom types) to the view is a future enhancement.\n */\nexport const SubmissionAnswers = ({ data, req }: UIFieldServerProps) => {\n\tconst doc = (data ?? {}) as SubmissionDoc\n\tconst descriptors = doc.descriptors ?? []\n\tconst values = doc.values ?? []\n\tconst locale = doc.locale ?? req.locale ?? 'en'\n\tconst t = asFieldTranslate(req.i18n.t)\n\n\tif (descriptors.length === 0) {\n\t\treturn <p>{t(keys.submissionNoAnswers)}</p>\n\t}\n\n\tconst valueByField = new Map(values.map((entry) => [entry.field, entry.value]))\n\n\treturn (\n\t\t<div className=\"form-builder-submission-answers\">\n\t\t\t<h4>{t(keys.submissionAnswers)}</h4>\n\t\t\t<dl>\n\t\t\t\t{descriptors.map((descriptor) => {\n\t\t\t\t\tconst definition = registry.get(descriptor.fieldType)\n\t\t\t\t\tconst raw = valueByField.get(descriptor.field)\n\t\t\t\t\tconst formatted = definition?.format\n\t\t\t\t\t\t? definition.format({\n\t\t\t\t\t\t\t\tvalue: raw,\n\t\t\t\t\t\t\t\tconfig: {},\n\t\t\t\t\t\t\t\toptionLabels: descriptor.optionLabels,\n\t\t\t\t\t\t\t\tlocale,\n\t\t\t\t\t\t\t\tt,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: raw == null\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: String(raw)\n\t\t\t\t\tconst href = descriptor.fieldType === 'file' ? fileHref(raw) : null\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={descriptor.field}>\n\t\t\t\t\t\t\t<dt>{descriptor.label}</dt>\n\t\t\t\t\t\t\t<dd>\n\t\t\t\t\t\t\t\t{href ? (\n\t\t\t\t\t\t\t\t\t<a href={href.url} rel=\"noreferrer\">\n\t\t\t\t\t\t\t\t\t\t{href.filename}\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\tformatted\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</dd>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</dl>\n\t\t</div>\n\t)\n}\n"],"mappings":";;;;;;AAOA,MAAM,WAAW,cAAc,uBAAuB;;AAStD,MAAM,YAAY,QAA2D;CAC5E,IAAI,OAAO,OAAO,QAAQ,YAAY,SAAS,KAAK;EACnD,MAAM,MAAM;EACZ,IAAI,OAAO,IAAI,QAAQ,YAAY,IAAI,IAAI,SAAS,GACnD,OAAO;GAAE,KAAK,IAAI;GAAK,UAAU,OAAO,IAAI,aAAa,WAAW,IAAI,WAAW,IAAI;EAAI;CAE7F;CACA,OAAO;AACR;;;;;;;AAQA,MAAa,qBAAqB,EAAE,MAAM,UAA8B;CACvE,MAAM,MAAO,QAAQ,CAAC;CACtB,MAAM,cAAc,IAAI,eAAe,CAAC;CACxC,MAAM,SAAS,IAAI,UAAU,CAAC;CAC9B,MAAM,SAAS,IAAI,UAAU,IAAI,UAAU;CAC3C,MAAM,IAAI,iBAAiB,IAAI,KAAK,CAAC;CAErC,IAAI,YAAY,WAAW,GAC1B,OAAO,oBAAC,KAAD,EAAA,UAAI,EAAE,KAAK,mBAAmB,EAAK,CAAA;CAG3C,MAAM,eAAe,IAAI,IAAI,OAAO,KAAK,UAAU,CAAC,MAAM,OAAO,MAAM,KAAK,CAAC,CAAC;CAE9E,OACC,qBAAC,OAAD;EAAK,WAAU;YAAf,CACC,oBAAC,MAAD,EAAA,UAAK,EAAE,KAAK,iBAAiB,EAAM,CAAA,GACnC,oBAAC,MAAD,EAAA,UACE,YAAY,KAAK,eAAe;GAChC,MAAM,aAAa,SAAS,IAAI,WAAW,SAAS;GACpD,MAAM,MAAM,aAAa,IAAI,WAAW,KAAK;GAC7C,MAAM,YAAY,YAAY,SAC3B,WAAW,OAAO;IAClB,OAAO;IACP,QAAQ,CAAC;IACT,cAAc,WAAW;IACzB;IACA;GACD,CAAC,IACA,OAAO,OACN,KACA,OAAO,GAAG;GACd,MAAM,OAAO,WAAW,cAAc,SAAS,SAAS,GAAG,IAAI;GAC/D,OACC,qBAAC,OAAD,EAAA,UAAA,CACC,oBAAC,MAAD,EAAA,UAAK,WAAW,MAAU,CAAA,GAC1B,oBAAC,MAAD,EAAA,UACE,OACA,oBAAC,KAAD;IAAG,MAAM,KAAK;IAAK,KAAI;cACrB,KAAK;GACJ,CAAA,IAEH,UAEE,CAAA,CACA,EAAA,GAXK,WAAW,KAWhB;EAEP,CAAC,EACE,CAAA,CACA;;AAEP"}
1
+ {"version":3,"file":"SubmissionAnswers.js","names":[],"sources":["../../src/submissions/SubmissionAnswers.tsx"],"sourcesContent":["import type { UIFieldServerProps } from 'payload'\nimport { defaultFieldDefinitions } from '../fields/builtin'\nimport { buildRegistry } from '../fields/registry'\nimport { keys } from '../translations/keys'\nimport { asFieldTranslate } from '../translations/server'\nimport type {\n\tAnswerItem,\n\tConsentItem,\n\tMetaItem,\n\tRepeaterItem,\n\tSubmissionAnswersLabels,\n} from './SubmissionAnswersClient'\nimport { SubmissionAnswersClient } from './SubmissionAnswersClient'\nimport type { SubmissionDescriptor, SubmissionValue } from './types'\n\nconst registry = buildRegistry(defaultFieldDefinitions)\n\ntype ConsentEntry = {\n\tfield: string\n\tagreed: boolean\n\t/** The consent source's name at submit time (see `ConsentProof.name`). */\n\tname?: string\n\t/** The plain-text snapshot of the wording agreed to (see `ConsentProof.statementText`). */\n\tstatementText?: string\n\tversionRef?: string\n\tat: string\n}\n\ntype MetaSpam = { captcha?: string }\n\ntype SubmissionMeta = {\n\tat?: string\n\tip?: string\n\tua?: string\n\tspam?: MetaSpam\n\t[key: string]: unknown\n}\n\ntype SubmissionDoc = {\n\tvalues?: SubmissionValue[]\n\tdescriptors?: SubmissionDescriptor[]\n\tlocale?: string\n\tconsent?: ConsentEntry[]\n\tmeta?: SubmissionMeta\n}\n\nconst formatDate = (iso: string, locale: string): string => {\n\ttry {\n\t\treturn new Intl.DateTimeFormat(locale, { dateStyle: 'medium', timeStyle: 'short' }).format(\n\t\t\tnew Date(iso)\n\t\t)\n\t} catch {\n\t\treturn iso\n\t}\n}\n\n/**\n * Server component. Formats submission data into serializable props and delegates\n * rendering to the client component which uses Payload's UI components.\n */\nexport const SubmissionAnswers = ({ data, req }: UIFieldServerProps) => {\n\tconst doc = (data ?? {}) as SubmissionDoc\n\tconst descriptors = doc.descriptors ?? []\n\tconst values = doc.values ?? []\n\tconst locale = doc.locale ?? req.locale ?? 'en'\n\tconst t = asFieldTranslate(req.i18n.t)\n\tconst rawConsent = doc.consent ?? []\n\tconst meta = doc.meta\n\n\tconst valueByField = new Map(values.map((entry) => [entry.field, entry.value]))\n\n\tconst answers: AnswerItem[] = []\n\tconst repeaters: RepeaterItem[] = []\n\n\tfor (const descriptor of descriptors) {\n\t\tconst raw = valueByField.get(descriptor.field)\n\n\t\tif (descriptor.fieldType === 'repeater') {\n\t\t\tconst rows = Array.isArray(raw) ? (raw as Array<Record<string, unknown>>) : []\n\t\t\tconst subDescs = descriptor.subFieldDescriptors ?? []\n\t\t\trepeaters.push({\n\t\t\t\tfield: descriptor.field,\n\t\t\t\tlabel: descriptor.label,\n\t\t\t\trows: rows.map((row, rowIndex) => ({\n\t\t\t\t\tid: String(rowIndex),\n\t\t\t\t\tsubFields: subDescs.map((sub) => {\n\t\t\t\t\t\tconst subDef = registry.get(sub.fieldType)\n\t\t\t\t\t\tconst subRaw = row[sub.field]\n\t\t\t\t\t\tconst formatted = subDef?.format\n\t\t\t\t\t\t\t? subDef.format({\n\t\t\t\t\t\t\t\t\tvalue: subRaw,\n\t\t\t\t\t\t\t\t\tconfig: {},\n\t\t\t\t\t\t\t\t\toptionLabels: sub.optionLabels,\n\t\t\t\t\t\t\t\t\tlocale,\n\t\t\t\t\t\t\t\t\tt,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t: subRaw == null\n\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t: String(subRaw)\n\t\t\t\t\t\treturn { label: sub.label, value: formatted || '—' }\n\t\t\t\t\t}),\n\t\t\t\t})),\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\tconst def = registry.get(descriptor.fieldType)\n\t\tconst formatted = def?.format\n\t\t\t? def.format({ value: raw, config: {}, optionLabels: descriptor.optionLabels, locale, t })\n\t\t\t: raw == null\n\t\t\t\t? ''\n\t\t\t\t: String(raw)\n\n\t\tif (descriptor.fieldType === 'file') {\n\t\t\tconst ref =\n\t\t\t\traw && typeof raw === 'object' && 'url' in raw\n\t\t\t\t\t? (raw as { url?: string; filename?: string })\n\t\t\t\t\t: null\n\t\t\tconst url = typeof ref?.url === 'string' ? ref.url : undefined\n\t\t\tconst filename = typeof ref?.filename === 'string' ? ref.filename : (url ?? '')\n\t\t\tanswers.push({ field: descriptor.field, label: descriptor.label, value: filename, href: url })\n\t\t} else {\n\t\t\tanswers.push({\n\t\t\t\tfield: descriptor.field,\n\t\t\t\tlabel: descriptor.label,\n\t\t\t\tvalue: formatted || '—',\n\t\t\t\tmultiline: descriptor.fieldType === 'textarea',\n\t\t\t\t...(descriptor.width ? { width: descriptor.width } : {}),\n\t\t\t})\n\t\t}\n\t}\n\n\tconst consent: ConsentItem[] = rawConsent.map((entry) => ({\n\t\t...entry,\n\t\tat: formatDate(entry.at, locale),\n\t}))\n\n\tconst metaItems: MetaItem[] = [{ label: t(keys.submissionMetaLocale), value: locale }]\n\tif (meta) {\n\t\tif (meta.at)\n\t\t\tmetaItems.push({\n\t\t\t\tlabel: t(keys.submissionMetaReceivedAt),\n\t\t\t\tvalue: formatDate(meta.at, locale),\n\t\t\t})\n\t\tif (meta.ip) metaItems.push({ label: t(keys.submissionMetaIp), value: meta.ip })\n\t\tif (meta.ua) metaItems.push({ label: t(keys.submissionMetaUserAgent), value: String(meta.ua) })\n\t\tif (meta.spam) {\n\t\t\tconst captcha =\n\t\t\t\ttypeof meta.spam === 'object' && 'captcha' in meta.spam\n\t\t\t\t\t? String((meta.spam as MetaSpam).captcha)\n\t\t\t\t\t: '—'\n\t\t\tmetaItems.push({ label: t(keys.submissionMetaCaptcha), value: captcha })\n\t\t}\n\t}\n\n\tconst labels: SubmissionAnswersLabels = {\n\t\tanswers: t(keys.submissionAnswers),\n\t\tconsent: t(keys.submissionConsent),\n\t\tsubmissionDetails: t(keys.submissionDetails),\n\t\tagreed: t(keys.submissionConsentAgreed),\n\t\tdeclined: t(keys.submissionConsentDeclined),\n\t\trow: t(keys.repeaterRow),\n\t\tempty: t(keys.submissionNoAnswers),\n\t}\n\n\treturn (\n\t\t<SubmissionAnswersClient\n\t\t\tanswers={answers}\n\t\t\trepeaters={repeaters}\n\t\t\tconsent={consent}\n\t\t\tmeta={metaItems}\n\t\t\tlabels={labels}\n\t\t/>\n\t)\n}\n"],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ "use client";
2
+ import { FieldLabel, Pill, TextInput } from "@payloadcms/ui";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/submissions/SubmissionAnswersClient.tsx
5
+ const noop = (_e) => {};
6
+ /** Horizontal gutter between fields sharing a row; also trimmed from each fractional basis so widths wrap cleanly rather than overflow. */
7
+ const FIELD_GAP = "calc(var(--base, 20px) / 2)";
8
+ const BASIS = {
9
+ full: "100%",
10
+ half: "50%",
11
+ third: "33.333%",
12
+ twoThirds: "66.666%"
13
+ };
14
+ /**
15
+ * Flex sizing for one answer field. Full fields (and file links / repeaters) claim a whole row;
16
+ * fractional ones sit side by side, their basis trimmed by the gutter and floored by `min-width`
17
+ * so a half or third never collapses on a narrow admin panel (it wraps to its own row instead).
18
+ */
19
+ const widthStyle = (width) => {
20
+ const basis = BASIS[width ?? "full"];
21
+ return basis === "100%" ? { flex: "1 1 100%" } : {
22
+ flex: `0 1 calc(${basis} - ${FIELD_GAP})`,
23
+ minWidth: "min(100%, 12rem)"
24
+ };
25
+ };
26
+ const answersGrid = {
27
+ display: "flex",
28
+ flexWrap: "wrap",
29
+ columnGap: FIELD_GAP
30
+ };
31
+ const fullWidth = { flex: "1 1 100%" };
32
+ const rowHeading = {
33
+ fontSize: "0.75rem",
34
+ fontWeight: 600,
35
+ color: "var(--theme-elevation-500)",
36
+ margin: "0 0 4px"
37
+ };
38
+ const linkStyle = {
39
+ display: "block",
40
+ padding: "8px 0",
41
+ color: "var(--theme-text)",
42
+ textDecoration: "underline"
43
+ };
44
+ const SubmissionAnswersClient = ({ answers, repeaters, consent, meta, labels }) => {
45
+ if (!(answers.length > 0 || repeaters.length > 0 || consent.length > 0 || meta.length > 0)) return /* @__PURE__ */ jsx("p", {
46
+ style: { color: "var(--theme-elevation-500)" },
47
+ children: labels.empty
48
+ });
49
+ return /* @__PURE__ */ jsxs("div", {
50
+ className: "field-type",
51
+ style: {
52
+ display: "flex",
53
+ flexDirection: "column",
54
+ gap: "32px"
55
+ },
56
+ children: [
57
+ (answers.length > 0 || repeaters.length > 0) && /* @__PURE__ */ jsxs("section", { children: [/* @__PURE__ */ jsx(FieldLabel, { label: labels.answers }), /* @__PURE__ */ jsxs("div", {
58
+ className: "render-fields",
59
+ style: answersGrid,
60
+ children: [answers.map(({ field, label, value, href, width }) => href ? /* @__PURE__ */ jsxs("div", {
61
+ className: "field-type",
62
+ style: fullWidth,
63
+ children: [/* @__PURE__ */ jsx(FieldLabel, { label }), /* @__PURE__ */ jsx("a", {
64
+ href,
65
+ target: "_blank",
66
+ rel: "noreferrer",
67
+ style: linkStyle,
68
+ children: value
69
+ })]
70
+ }, field) : /* @__PURE__ */ jsx(TextInput, {
71
+ path: `sa-${field}`,
72
+ label,
73
+ value,
74
+ readOnly: true,
75
+ onChange: noop,
76
+ style: widthStyle(width)
77
+ }, field)), repeaters.map(({ field, label, rows }) => /* @__PURE__ */ jsxs("div", {
78
+ className: "field-type",
79
+ style: fullWidth,
80
+ children: [/* @__PURE__ */ jsx(FieldLabel, { label }), rows.length === 0 ? /* @__PURE__ */ jsx(TextInput, {
81
+ path: `sa-${field}-empty`,
82
+ label: "",
83
+ value: "—",
84
+ readOnly: true,
85
+ onChange: noop
86
+ }) : /* @__PURE__ */ jsx("div", {
87
+ style: {
88
+ display: "flex",
89
+ flexDirection: "column",
90
+ gap: "8px",
91
+ marginTop: "4px"
92
+ },
93
+ children: rows.map((row) => /* @__PURE__ */ jsxs("div", {
94
+ style: {
95
+ border: "1px solid var(--theme-elevation-150)",
96
+ borderRadius: "4px",
97
+ padding: "4px 12px 0"
98
+ },
99
+ children: [/* @__PURE__ */ jsx("p", {
100
+ style: rowHeading,
101
+ children: labels.row.replace("{n}", String(Number(row.id) + 1))
102
+ }), row.subFields.map((subField) => /* @__PURE__ */ jsx(TextInput, {
103
+ path: `sa-${field}-${row.id}-${subField.label}`,
104
+ label: subField.label,
105
+ value: subField.value,
106
+ readOnly: true,
107
+ onChange: noop
108
+ }, subField.label))]
109
+ }, row.id))
110
+ })]
111
+ }, field))]
112
+ })] }),
113
+ consent.length > 0 && /* @__PURE__ */ jsxs("section", { children: [/* @__PURE__ */ jsx(FieldLabel, { label: labels.consent }), /* @__PURE__ */ jsx("div", {
114
+ className: "render-fields",
115
+ children: consent.map((entry) => /* @__PURE__ */ jsxs("div", {
116
+ className: "field-type",
117
+ children: [/* @__PURE__ */ jsx(FieldLabel, { label: entry.field }), /* @__PURE__ */ jsxs("div", {
118
+ style: {
119
+ display: "flex",
120
+ flexDirection: "column",
121
+ gap: "4px"
122
+ },
123
+ children: [
124
+ /* @__PURE__ */ jsxs("div", {
125
+ style: {
126
+ display: "flex",
127
+ alignItems: "center",
128
+ gap: "8px",
129
+ flexWrap: "wrap"
130
+ },
131
+ children: [/* @__PURE__ */ jsx(Pill, {
132
+ pillStyle: entry.agreed ? "success" : "error",
133
+ size: "small",
134
+ rounded: true,
135
+ children: entry.agreed ? labels.agreed : labels.declined
136
+ }), entry.name ? /* @__PURE__ */ jsxs("span", {
137
+ style: {
138
+ fontSize: "0.8rem",
139
+ color: "var(--theme-text)"
140
+ },
141
+ children: [entry.name, entry.versionRef ? ` (v${entry.versionRef})` : ""]
142
+ }) : null]
143
+ }),
144
+ entry.statementText ? /* @__PURE__ */ jsx("span", {
145
+ style: {
146
+ fontSize: "0.8rem",
147
+ color: "var(--theme-elevation-600)"
148
+ },
149
+ children: entry.statementText
150
+ }) : null,
151
+ /* @__PURE__ */ jsx("span", {
152
+ style: {
153
+ fontSize: "0.75rem",
154
+ color: "var(--theme-elevation-500)"
155
+ },
156
+ children: entry.at
157
+ })
158
+ ]
159
+ })]
160
+ }, entry.field))
161
+ })] }),
162
+ meta.length > 0 && /* @__PURE__ */ jsxs("section", { children: [/* @__PURE__ */ jsx(FieldLabel, { label: labels.submissionDetails }), /* @__PURE__ */ jsx("div", {
163
+ className: "render-fields",
164
+ children: meta.map((item) => /* @__PURE__ */ jsx(TextInput, {
165
+ path: `sa-meta-${item.label}`,
166
+ label: item.label,
167
+ value: item.value,
168
+ readOnly: true,
169
+ onChange: noop
170
+ }, item.label))
171
+ })] })
172
+ ]
173
+ });
174
+ };
175
+ //#endregion
176
+ export { SubmissionAnswersClient };
177
+
178
+ //# sourceMappingURL=SubmissionAnswersClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubmissionAnswersClient.js","names":[],"sources":["../../src/submissions/SubmissionAnswersClient.tsx"],"sourcesContent":["'use client'\n\nimport { FieldLabel, Pill, TextInput } from '@payloadcms/ui'\nimport type { ChangeEvent } from 'react'\nimport type { SubmissionWidth } from './types'\n\nexport type AnswerItem = {\n\tfield: string\n\tlabel: string\n\tvalue: string\n\thref?: string\n\tmultiline?: boolean\n\twidth?: SubmissionWidth\n}\n\nexport type RepeaterRow = {\n\tid: string\n\tsubFields: Array<{ label: string; value: string }>\n}\n\nexport type RepeaterItem = {\n\tfield: string\n\tlabel: string\n\trows: RepeaterRow[]\n}\n\nexport type ConsentItem = {\n\tfield: string\n\tagreed: boolean\n\t/** The consent source's name at submit time (see `ConsentProof.name`). */\n\tname?: string\n\t/** The plain-text snapshot of the wording agreed to (see `ConsentProof.statementText`). */\n\tstatementText?: string\n\tversionRef?: string\n\tat: string\n}\n\nexport type MetaItem = {\n\tlabel: string\n\tvalue: string\n}\n\nexport type SubmissionAnswersLabels = {\n\tanswers: string\n\tconsent: string\n\tsubmissionDetails: string\n\tagreed: string\n\tdeclined: string\n\t/** Row heading template containing `{n}`, the 1-based row number. */\n\trow: string\n\tempty: string\n}\n\ntype Props = {\n\tanswers: AnswerItem[]\n\trepeaters: RepeaterItem[]\n\tconsent: ConsentItem[]\n\tmeta: MetaItem[]\n\tlabels: SubmissionAnswersLabels\n}\n\nconst noop = (_e: ChangeEvent<HTMLInputElement>) => {}\n\n/** Horizontal gutter between fields sharing a row; also trimmed from each fractional basis so widths wrap cleanly rather than overflow. */\nconst FIELD_GAP = 'calc(var(--base, 20px) / 2)'\n\nconst BASIS: Record<SubmissionWidth, string> = {\n\tfull: '100%',\n\thalf: '50%',\n\tthird: '33.333%',\n\ttwoThirds: '66.666%',\n}\n\n/**\n * Flex sizing for one answer field. Full fields (and file links / repeaters) claim a whole row;\n * fractional ones sit side by side, their basis trimmed by the gutter and floored by `min-width`\n * so a half or third never collapses on a narrow admin panel (it wraps to its own row instead).\n */\nconst widthStyle = (width?: SubmissionWidth): React.CSSProperties => {\n\tconst basis = BASIS[width ?? 'full']\n\treturn basis === '100%'\n\t\t? { flex: '1 1 100%' }\n\t\t: { flex: `0 1 calc(${basis} - ${FIELD_GAP})`, minWidth: 'min(100%, 12rem)' }\n}\n\nconst answersGrid: React.CSSProperties = {\n\tdisplay: 'flex',\n\tflexWrap: 'wrap',\n\tcolumnGap: FIELD_GAP,\n}\n\nconst fullWidth: React.CSSProperties = { flex: '1 1 100%' }\n\nconst rowHeading: React.CSSProperties = {\n\tfontSize: '0.75rem',\n\tfontWeight: 600,\n\tcolor: 'var(--theme-elevation-500)',\n\tmargin: '0 0 4px',\n}\n\nconst linkStyle: React.CSSProperties = {\n\tdisplay: 'block',\n\tpadding: '8px 0',\n\tcolor: 'var(--theme-text)',\n\ttextDecoration: 'underline',\n}\n\nexport const SubmissionAnswersClient = ({ answers, repeaters, consent, meta, labels }: Props) => {\n\tconst hasContent =\n\t\tanswers.length > 0 || repeaters.length > 0 || consent.length > 0 || meta.length > 0\n\n\tif (!hasContent) {\n\t\treturn <p style={{ color: 'var(--theme-elevation-500)' }}>{labels.empty}</p>\n\t}\n\n\treturn (\n\t\t<div className=\"field-type\" style={{ display: 'flex', flexDirection: 'column', gap: '32px' }}>\n\t\t\t{(answers.length > 0 || repeaters.length > 0) && (\n\t\t\t\t<section>\n\t\t\t\t\t<FieldLabel label={labels.answers} />\n\t\t\t\t\t<div className=\"render-fields\" style={answersGrid}>\n\t\t\t\t\t\t{answers.map(({ field, label, value, href, width }) =>\n\t\t\t\t\t\t\thref ? (\n\t\t\t\t\t\t\t\t<div key={field} className=\"field-type\" style={fullWidth}>\n\t\t\t\t\t\t\t\t\t<FieldLabel label={label} />\n\t\t\t\t\t\t\t\t\t<a href={href} target=\"_blank\" rel=\"noreferrer\" style={linkStyle}>\n\t\t\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\t\tkey={field}\n\t\t\t\t\t\t\t\t\tpath={`sa-${field}`}\n\t\t\t\t\t\t\t\t\tlabel={label}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\treadOnly\n\t\t\t\t\t\t\t\t\tonChange={noop}\n\t\t\t\t\t\t\t\t\tstyle={widthStyle(width)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{repeaters.map(({ field, label, rows }) => (\n\t\t\t\t\t\t\t<div key={field} className=\"field-type\" style={fullWidth}>\n\t\t\t\t\t\t\t\t<FieldLabel label={label} />\n\t\t\t\t\t\t\t\t{rows.length === 0 ? (\n\t\t\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\t\t\tpath={`sa-${field}-empty`}\n\t\t\t\t\t\t\t\t\t\tlabel=\"\"\n\t\t\t\t\t\t\t\t\t\tvalue=\"—\"\n\t\t\t\t\t\t\t\t\t\treadOnly\n\t\t\t\t\t\t\t\t\t\tonChange={noop}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\t\t\t\t\t\t\tgap: '8px',\n\t\t\t\t\t\t\t\t\t\t\tmarginTop: '4px',\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{rows.map((row) => (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder: '1px solid var(--theme-elevation-150)',\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: '4px 12px 0',\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<p style={rowHeading}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{labels.row.replace('{n}', String(Number(row.id) + 1))}\n\t\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t\t{row.subFields.map((subField) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={subField.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpath={`sa-${field}-${row.id}-${subField.label}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={subField.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={subField.value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treadOnly\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={noop}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\t\t\t)}\n\n\t\t\t{consent.length > 0 && (\n\t\t\t\t<section>\n\t\t\t\t\t<FieldLabel label={labels.consent} />\n\t\t\t\t\t<div className=\"render-fields\">\n\t\t\t\t\t\t{consent.map((entry) => (\n\t\t\t\t\t\t\t<div key={entry.field} className=\"field-type\">\n\t\t\t\t\t\t\t\t<FieldLabel label={entry.field} />\n\t\t\t\t\t\t\t\t<div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{ display: 'flex', alignItems: 'center', gap: '8px', flexWrap: 'wrap' }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Pill pillStyle={entry.agreed ? 'success' : 'error'} size=\"small\" rounded>\n\t\t\t\t\t\t\t\t\t\t\t{entry.agreed ? labels.agreed : labels.declined}\n\t\t\t\t\t\t\t\t\t\t</Pill>\n\t\t\t\t\t\t\t\t\t\t{entry.name ? (\n\t\t\t\t\t\t\t\t\t\t\t<span style={{ fontSize: '0.8rem', color: 'var(--theme-text)' }}>\n\t\t\t\t\t\t\t\t\t\t\t\t{entry.name}\n\t\t\t\t\t\t\t\t\t\t\t\t{entry.versionRef ? ` (v${entry.versionRef})` : ''}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t{entry.statementText ? (\n\t\t\t\t\t\t\t\t\t\t<span style={{ fontSize: '0.8rem', color: 'var(--theme-elevation-600)' }}>\n\t\t\t\t\t\t\t\t\t\t\t{entry.statementText}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t<span style={{ fontSize: '0.75rem', color: 'var(--theme-elevation-500)' }}>\n\t\t\t\t\t\t\t\t\t\t{entry.at}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\t\t\t)}\n\n\t\t\t{meta.length > 0 && (\n\t\t\t\t<section>\n\t\t\t\t\t<FieldLabel label={labels.submissionDetails} />\n\t\t\t\t\t<div className=\"render-fields\">\n\t\t\t\t\t\t{meta.map((item) => (\n\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\tkey={item.label}\n\t\t\t\t\t\t\t\tpath={`sa-meta-${item.label}`}\n\t\t\t\t\t\t\t\tlabel={item.label}\n\t\t\t\t\t\t\t\tvalue={item.value}\n\t\t\t\t\t\t\t\treadOnly\n\t\t\t\t\t\t\t\tonChange={noop}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ //#region src/submissions/coerceBoolean.ts
2
+ /** Strings that count as boolean true. Shared by prefill and submit-time coercion so they never diverge. */
3
+ const TRUTHY_STRINGS = new Set([
4
+ "true",
5
+ "1",
6
+ "on",
7
+ "yes"
8
+ ]);
9
+ /** True when a string is an affirmative token (trimmed, case-insensitive); everything else is false. */
10
+ const isTruthyString = (value) => TRUTHY_STRINGS.has(value.trim().toLowerCase());
11
+ //#endregion
12
+ export { isTruthyString };
13
+
14
+ //# sourceMappingURL=coerceBoolean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coerceBoolean.js","names":[],"sources":["../../src/submissions/coerceBoolean.ts"],"sourcesContent":["/** Strings that count as boolean true. Shared by prefill and submit-time coercion so they never diverge. */\nexport const TRUTHY_STRINGS = new Set(['true', '1', 'on', 'yes'])\n\n/** True when a string is an affirmative token (trimmed, case-insensitive); everything else is false. */\nexport const isTruthyString = (value: string): boolean =>\n\tTRUTHY_STRINGS.has(value.trim().toLowerCase())\n"],"mappings":";;AACA,MAAa,iBAAiB,IAAI,IAAI;CAAC;CAAQ;CAAK;CAAM;AAAK,CAAC;;AAGhE,MAAa,kBAAkB,UAC9B,eAAe,IAAI,MAAM,KAAK,EAAE,YAAY,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { SubmissionDescriptor, SubmissionValue } from "./types.js";
2
+ import { ConsentProofEntry } from "./runSubmission.js";
3
+ import { Payload, PayloadRequest } from "payload";
4
+
5
+ //#region src/submissions/createSubmission.d.ts
6
+ type CreateSubmissionArgs = {
7
+ form: number | string;
8
+ values: SubmissionValue[]; /** Thread the incoming request when there is one, so spam metadata (IP, user agent) and per-identity rate limiting see it. */
9
+ req?: PayloadRequest;
10
+ };
11
+ /** The stored shape of a `form-submissions` document, as written by the collection's own hooks. */
12
+ type CreatedSubmission = {
13
+ id: number | string;
14
+ form: number | string;
15
+ status: 'complete' | 'partial';
16
+ locale?: string;
17
+ values?: SubmissionValue[];
18
+ descriptors?: SubmissionDescriptor[];
19
+ consent?: ConsentProofEntry[];
20
+ meta?: Record<string, unknown>;
21
+ createdAt: string;
22
+ updatedAt: string;
23
+ };
24
+ /**
25
+ * Server-side counterpart to the browser `submitForm` helper: a typed wrapper over `payload.create`
26
+ * for the `form-submissions` collection. Submitting this way runs the exact same pipeline a browser
27
+ * or raw REST submit does, server-authoritative validation, spam metadata capture when `req` is
28
+ * threaded through, descriptor snapshotting, consent capture, and post-submit action dispatch, since
29
+ * all of it lives in the collection's own hooks rather than in a route handler. Use it from server
30
+ * code (a script, a queued job, another collection's hook) instead of hand-rolling the collection
31
+ * slug and body shape.
32
+ */
33
+ declare const createSubmission: (payload: Payload, args: CreateSubmissionArgs) => Promise<CreatedSubmission>;
34
+ //#endregion
35
+ export { CreateSubmissionArgs, CreatedSubmission, createSubmission };
36
+ //# sourceMappingURL=createSubmission.d.ts.map
@@ -0,0 +1,26 @@
1
+ import { FORM_SUBMISSIONS_SLUG } from "../collections/formSubmissions.js";
2
+ //#region src/submissions/createSubmission.ts
3
+ /**
4
+ * Server-side counterpart to the browser `submitForm` helper: a typed wrapper over `payload.create`
5
+ * for the `form-submissions` collection. Submitting this way runs the exact same pipeline a browser
6
+ * or raw REST submit does, server-authoritative validation, spam metadata capture when `req` is
7
+ * threaded through, descriptor snapshotting, consent capture, and post-submit action dispatch, since
8
+ * all of it lives in the collection's own hooks rather than in a route handler. Use it from server
9
+ * code (a script, a queued job, another collection's hook) instead of hand-rolling the collection
10
+ * slug and body shape.
11
+ */
12
+ const createSubmission = (payload, args) => {
13
+ const create = payload.create;
14
+ return create({
15
+ collection: FORM_SUBMISSIONS_SLUG,
16
+ data: {
17
+ form: args.form,
18
+ values: args.values
19
+ },
20
+ req: args.req
21
+ });
22
+ };
23
+ //#endregion
24
+ export { createSubmission };
25
+
26
+ //# sourceMappingURL=createSubmission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSubmission.js","names":[],"sources":["../../src/submissions/createSubmission.ts"],"sourcesContent":["import type { Payload, PayloadRequest } from 'payload'\nimport { FORM_SUBMISSIONS_SLUG } from '../collections/formSubmissions'\nimport type { ConsentProofEntry } from './runSubmission'\nimport type { SubmissionDescriptor, SubmissionValue } from './types'\n\nexport type CreateSubmissionArgs = {\n\tform: number | string\n\tvalues: SubmissionValue[]\n\t/** Thread the incoming request when there is one, so spam metadata (IP, user agent) and per-identity rate limiting see it. */\n\treq?: PayloadRequest\n}\n\n/** The stored shape of a `form-submissions` document, as written by the collection's own hooks. */\nexport type CreatedSubmission = {\n\tid: number | string\n\tform: number | string\n\tstatus: 'complete' | 'partial'\n\tlocale?: string\n\tvalues?: SubmissionValue[]\n\tdescriptors?: SubmissionDescriptor[]\n\tconsent?: ConsentProofEntry[]\n\tmeta?: Record<string, unknown>\n\tcreatedAt: string\n\tupdatedAt: string\n}\n\n/**\n * Server-side counterpart to the browser `submitForm` helper: a typed wrapper over `payload.create`\n * for the `form-submissions` collection. Submitting this way runs the exact same pipeline a browser\n * or raw REST submit does, server-authoritative validation, spam metadata capture when `req` is\n * threaded through, descriptor snapshotting, consent capture, and post-submit action dispatch, since\n * all of it lives in the collection's own hooks rather than in a route handler. Use it from server\n * code (a script, a queued job, another collection's hook) instead of hand-rolling the collection\n * slug and body shape.\n */\nexport const createSubmission = (\n\tpayload: Payload,\n\targs: CreateSubmissionArgs\n): Promise<CreatedSubmission> => {\n\t// `form-submissions` is registered by this plugin at runtime, so a host's generated Payload types\n\t// need not describe it, and when they do, pin its `form` relationship to whichever single id type\n\t// (string or number) that host's database uses. `form` here accepts either, so create through a\n\t// slug-agnostic signature instead of the host's own shape (same idiom as `registerReliability`'s\n\t// locks-collection create in the jobs plugin).\n\tconst create = payload.create as unknown as (options: {\n\t\tcollection: string\n\t\tdata: { form: number | string; values: SubmissionValue[] }\n\t\treq?: PayloadRequest\n\t}) => Promise<CreatedSubmission>\n\treturn create({\n\t\tcollection: FORM_SUBMISSIONS_SLUG,\n\t\tdata: { form: args.form, values: args.values },\n\t\treq: args.req,\n\t})\n}\n"],"mappings":";;;;;;;;;;;AAmCA,MAAa,oBACZ,SACA,SACgC;CAMhC,MAAM,SAAS,QAAQ;CAKvB,OAAO,OAAO;EACb,YAAY;EACZ,MAAM;GAAE,MAAM,KAAK;GAAM,QAAQ,KAAK;EAAO;EAC7C,KAAK,KAAK;CACX,CAAC;AACF"}
@@ -0,0 +1,10 @@
1
+ import { ConsentProof } from "../consent/captureConsent.js";
2
+ import { Payload, PayloadRequest } from "payload";
3
+
4
+ //#region src/submissions/runSubmission.d.ts
5
+ type ConsentProofEntry = {
6
+ field: string;
7
+ } & ConsentProof;
8
+ //#endregion
9
+ export { ConsentProofEntry };
10
+ //# sourceMappingURL=runSubmission.d.ts.map