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

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 (399) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +43 -1402
  3. package/dist/actions/buildActionBlocks.js +19 -0
  4. package/dist/actions/buildActionBlocks.js.map +1 -0
  5. package/dist/actions/builtin/confirmation.js +49 -0
  6. package/dist/actions/builtin/confirmation.js.map +1 -0
  7. package/dist/actions/builtin/emailTeam.js +46 -0
  8. package/dist/actions/builtin/emailTeam.js.map +1 -0
  9. package/dist/actions/builtin/index.d.ts +7 -0
  10. package/dist/actions/builtin/index.js +13 -0
  11. package/dist/actions/builtin/index.js.map +1 -0
  12. package/dist/actions/builtin/signedWebhook.js +49 -0
  13. package/dist/actions/builtin/signedWebhook.js.map +1 -0
  14. package/dist/actions/defineAction.d.ts +36 -0
  15. package/dist/actions/defineAction.js +6 -0
  16. package/dist/actions/defineAction.js.map +1 -0
  17. package/dist/actions/dispatch.js +48 -0
  18. package/dist/actions/dispatch.js.map +1 -0
  19. package/dist/actions/registry.d.ts +16 -0
  20. package/dist/actions/registry.js +16 -0
  21. package/dist/actions/registry.js.map +1 -0
  22. package/dist/actions/runActions.d.ts +9 -0
  23. package/dist/actions/runActions.js +34 -0
  24. package/dist/actions/runActions.js.map +1 -0
  25. package/dist/actions/sign.d.ts +7 -0
  26. package/dist/actions/sign.js +9 -0
  27. package/dist/actions/sign.js.map +1 -0
  28. package/dist/actions/task.js +82 -0
  29. package/dist/actions/task.js.map +1 -0
  30. package/dist/aggregation/aggregateResponses.d.ts +31 -0
  31. package/dist/aggregation/aggregateResponses.js +86 -0
  32. package/dist/aggregation/aggregateResponses.js.map +1 -0
  33. package/dist/aggregation/aggregateRows.d.ts +10 -0
  34. package/dist/aggregation/aggregateRows.js +64 -0
  35. package/dist/aggregation/aggregateRows.js.map +1 -0
  36. package/dist/aggregation/resolveResultsRequest.d.ts +32 -0
  37. package/dist/aggregation/resolveResultsRequest.js +56 -0
  38. package/dist/aggregation/resolveResultsRequest.js.map +1 -0
  39. package/dist/aggregation/types.d.ts +39 -0
  40. package/dist/calc/computeCalcFields.d.ts +15 -0
  41. package/dist/calc/computeCalcFields.js +27 -0
  42. package/dist/calc/computeCalcFields.js.map +1 -0
  43. package/dist/calc/evaluate.d.ts +8 -0
  44. package/dist/calc/evaluate.js +59 -0
  45. package/dist/calc/evaluate.js.map +1 -0
  46. package/dist/calc/normalizeCalc.d.ts +8 -0
  47. package/dist/calc/normalizeCalc.js +100 -0
  48. package/dist/calc/normalizeCalc.js.map +1 -0
  49. package/dist/calc/types.d.ts +28 -0
  50. package/dist/client/ConditionBuilder.js +121 -0
  51. package/dist/client/ConditionBuilder.js.map +1 -0
  52. package/dist/client/ConditionRow.js +150 -0
  53. package/dist/client/ConditionRow.js.map +1 -0
  54. package/dist/client/FlowBuilder.d.ts +15 -0
  55. package/dist/client/FlowBuilder.js +408 -0
  56. package/dist/client/FlowBuilder.js.map +1 -0
  57. package/dist/client/FormConditionField.d.ts +21 -0
  58. package/dist/client/FormConditionField.js +33 -0
  59. package/dist/client/FormConditionField.js.map +1 -0
  60. package/dist/client/synthesizeClientField.js +46 -0
  61. package/dist/client/synthesizeClientField.js.map +1 -0
  62. package/dist/collections/formSubmissions.js +138 -0
  63. package/dist/collections/formSubmissions.js.map +1 -0
  64. package/dist/collections/forms.js +187 -0
  65. package/dist/collections/forms.js.map +1 -0
  66. package/dist/collections/uploads.d.ts +29 -0
  67. package/dist/collections/uploads.js +46 -0
  68. package/dist/collections/uploads.js.map +1 -0
  69. package/dist/conditions/conditionType.js +14 -0
  70. package/dist/conditions/conditionType.js.map +1 -0
  71. package/dist/conditions/evaluate.d.ts +17 -0
  72. package/dist/conditions/evaluate.js +94 -0
  73. package/dist/conditions/evaluate.js.map +1 -0
  74. package/dist/conditions/fieldTypes.d.ts +9 -0
  75. package/dist/{fieldTypes-CzhhJXjg.js → conditions/fieldTypes.js} +2 -2
  76. package/dist/conditions/fieldTypes.js.map +1 -0
  77. package/dist/conditions/normalizeConditions.js +47 -0
  78. package/dist/conditions/normalizeConditions.js.map +1 -0
  79. package/dist/conditions/types.d.ts +8 -0
  80. package/dist/consent/buildConsentSourceConfig.js +49 -0
  81. package/dist/consent/buildConsentSourceConfig.js.map +1 -0
  82. package/dist/consent/builtin/index.d.ts +7 -0
  83. package/dist/consent/builtin/index.js +11 -0
  84. package/dist/consent/builtin/index.js.map +1 -0
  85. package/dist/consent/builtin/pageReference.js +75 -0
  86. package/dist/consent/builtin/pageReference.js.map +1 -0
  87. package/dist/consent/builtin/static.js +44 -0
  88. package/dist/consent/builtin/static.js.map +1 -0
  89. package/dist/consent/captureConsent.d.ts +28 -0
  90. package/dist/consent/captureConsent.js +26 -0
  91. package/dist/consent/captureConsent.js.map +1 -0
  92. package/dist/consent/defineConsentSource.d.ts +35 -0
  93. package/dist/consent/defineConsentSource.js +6 -0
  94. package/dist/consent/defineConsentSource.js.map +1 -0
  95. package/dist/consent/registry.d.ts +16 -0
  96. package/dist/consent/registry.js +16 -0
  97. package/dist/consent/registry.js.map +1 -0
  98. package/dist/consent/resolveConsentLinks.d.ts +19 -0
  99. package/dist/consent/resolveConsentLinks.js +26 -0
  100. package/dist/consent/resolveConsentLinks.js.map +1 -0
  101. package/dist/consent/resolvePublishedVersionRef.d.ts +17 -0
  102. package/dist/consent/resolvePublishedVersionRef.js +27 -0
  103. package/dist/consent/resolvePublishedVersionRef.js.map +1 -0
  104. package/dist/events/noopSink.js +6 -0
  105. package/dist/events/noopSink.js.map +1 -0
  106. package/dist/events/resolveEventSink.js +8 -0
  107. package/dist/events/resolveEventSink.js.map +1 -0
  108. package/dist/events/types.d.ts +31 -0
  109. package/dist/exports/client.d.ts +3 -21
  110. package/dist/exports/client.js +3 -319
  111. package/dist/exports/i18n.d.ts +3 -138
  112. package/dist/exports/i18n.js +2 -2
  113. package/dist/exports/react.d.ts +45 -550
  114. package/dist/exports/react.js +39 -1563
  115. package/dist/exports/rsc.d.ts +2 -16
  116. package/dist/exports/rsc.js +1 -54
  117. package/dist/exports/types.d.ts +27 -5
  118. package/dist/fields/buildFieldBlocks.js +46 -0
  119. package/dist/fields/buildFieldBlocks.js.map +1 -0
  120. package/dist/fields/builtin/calculation.js +24 -0
  121. package/dist/fields/builtin/calculation.js.map +1 -0
  122. package/dist/fields/builtin/checkbox.js +13 -0
  123. package/dist/fields/builtin/checkbox.js.map +1 -0
  124. package/dist/fields/builtin/consent.js +32 -0
  125. package/dist/fields/builtin/consent.js.map +1 -0
  126. package/dist/fields/builtin/email.js +18 -0
  127. package/dist/fields/builtin/email.js.map +1 -0
  128. package/dist/fields/builtin/file.js +40 -0
  129. package/dist/fields/builtin/file.js.map +1 -0
  130. package/dist/fields/builtin/index.js +25 -0
  131. package/dist/fields/builtin/index.js.map +1 -0
  132. package/dist/fields/builtin/number.js +17 -0
  133. package/dist/fields/builtin/number.js.map +1 -0
  134. package/dist/fields/builtin/select.js +44 -0
  135. package/dist/fields/builtin/select.js.map +1 -0
  136. package/dist/fields/builtin/text.js +13 -0
  137. package/dist/fields/builtin/text.js.map +1 -0
  138. package/dist/fields/builtin/textarea.js +13 -0
  139. package/dist/fields/builtin/textarea.js.map +1 -0
  140. package/dist/fields/defineFormField.d.ts +13 -0
  141. package/dist/fields/defineFormField.js +12 -0
  142. package/dist/fields/defineFormField.js.map +1 -0
  143. package/dist/fields/registry.d.ts +10 -0
  144. package/dist/fields/registry.js +24 -0
  145. package/dist/fields/registry.js.map +1 -0
  146. package/dist/fields/sharedConfig.js +89 -0
  147. package/dist/fields/sharedConfig.js.map +1 -0
  148. package/dist/fields/types.d.ts +88 -0
  149. package/dist/flow/engine.d.ts +17 -0
  150. package/dist/flow/engine.js +24 -0
  151. package/dist/flow/engine.js.map +1 -0
  152. package/dist/flow/normalizeFlow.js +35 -0
  153. package/dist/flow/normalizeFlow.js.map +1 -0
  154. package/dist/{types-DsJ_6kGJ.d.ts → flow/types.d.ts} +2 -2
  155. package/dist/index.d.ts +74 -4
  156. package/dist/index.js +40 -1889
  157. package/dist/index.js.map +1 -1
  158. package/dist/plugin/access.js +12 -0
  159. package/dist/plugin/access.js.map +1 -0
  160. package/dist/plugin/registerCollections.js +40 -0
  161. package/dist/plugin/registerCollections.js.map +1 -0
  162. package/dist/plugin/registerTranslations.js +19 -0
  163. package/dist/plugin/registerTranslations.js.map +1 -0
  164. package/dist/prefill/valuesFromSearchParams.d.ts +18 -0
  165. package/dist/prefill/valuesFromSearchParams.js +45 -0
  166. package/dist/prefill/valuesFromSearchParams.js.map +1 -0
  167. package/dist/presentations/defaults.d.ts +33 -0
  168. package/dist/presentations/defaults.js +35 -0
  169. package/dist/presentations/defaults.js.map +1 -0
  170. package/dist/presentations/registry.d.ts +15 -0
  171. package/dist/presentations/registry.js +15 -0
  172. package/dist/presentations/registry.js.map +1 -0
  173. package/dist/presentations/types.d.ts +18 -0
  174. package/dist/react/Form.d.ts +81 -0
  175. package/dist/react/Form.js +457 -0
  176. package/dist/react/Form.js.map +1 -0
  177. package/dist/react/FormContext.d.ts +16 -0
  178. package/dist/react/FormContext.js +14 -0
  179. package/dist/react/FormContext.js.map +1 -0
  180. package/dist/react/FormLayout.d.ts +20 -0
  181. package/dist/react/FormLayout.js +14 -0
  182. package/dist/react/FormLayout.js.map +1 -0
  183. package/dist/react/FormResults.d.ts +25 -0
  184. package/dist/react/FormResults.js +85 -0
  185. package/dist/react/FormResults.js.map +1 -0
  186. package/dist/react/Honeypot.d.ts +22 -0
  187. package/dist/react/Honeypot.js +38 -0
  188. package/dist/react/Honeypot.js.map +1 -0
  189. package/dist/react/Poll.d.ts +32 -0
  190. package/dist/react/Poll.js +77 -0
  191. package/dist/react/Poll.js.map +1 -0
  192. package/dist/react/cn.d.ts +6 -0
  193. package/dist/react/cn.js +8 -0
  194. package/dist/react/cn.js.map +1 -0
  195. package/dist/react/contract.d.ts +32 -0
  196. package/dist/react/contract.js +7 -0
  197. package/dist/react/contract.js.map +1 -0
  198. package/dist/react/events.js +14 -0
  199. package/dist/react/events.js.map +1 -0
  200. package/dist/react/fetchResults.d.ts +25 -0
  201. package/dist/react/fetchResults.js +31 -0
  202. package/dist/react/fetchResults.js.map +1 -0
  203. package/dist/react/presentation/Backdrop.d.ts +18 -0
  204. package/dist/react/presentation/Backdrop.js +14 -0
  205. package/dist/react/presentation/Backdrop.js.map +1 -0
  206. package/dist/react/presentation/DialogSurface.d.ts +35 -0
  207. package/dist/react/presentation/DialogSurface.js +56 -0
  208. package/dist/react/presentation/DialogSurface.js.map +1 -0
  209. package/dist/react/presentation/presentations.d.ts +7 -0
  210. package/dist/react/presentation/presentations.js +32 -0
  211. package/dist/react/presentation/presentations.js.map +1 -0
  212. package/dist/react/presentation/registry.d.ts +11 -0
  213. package/dist/react/presentation/registry.js +12 -0
  214. package/dist/react/presentation/registry.js.map +1 -0
  215. package/dist/react/presentation/types.d.ts +19 -0
  216. package/dist/react/presentation/useDismiss.d.ts +19 -0
  217. package/dist/react/presentation/useDismiss.js +33 -0
  218. package/dist/react/presentation/useDismiss.js.map +1 -0
  219. package/dist/react/presentation/useFocusTrap.d.ts +8 -0
  220. package/dist/react/presentation/useFocusTrap.js +35 -0
  221. package/dist/react/presentation/useFocusTrap.js.map +1 -0
  222. package/dist/react/presentation/useScrollLock.d.ts +6 -0
  223. package/dist/react/presentation/useScrollLock.js +18 -0
  224. package/dist/react/presentation/useScrollLock.js.map +1 -0
  225. package/dist/react/primitives/Checkbox.d.ts +26 -0
  226. package/dist/react/primitives/Checkbox.js +20 -0
  227. package/dist/react/primitives/Checkbox.js.map +1 -0
  228. package/dist/react/primitives/FieldShell.d.ts +31 -0
  229. package/dist/react/primitives/FieldShell.js +51 -0
  230. package/dist/react/primitives/FieldShell.js.map +1 -0
  231. package/dist/react/primitives/Input.d.ts +30 -0
  232. package/dist/react/primitives/Input.js +21 -0
  233. package/dist/react/primitives/Input.js.map +1 -0
  234. package/dist/react/primitives/Select.d.ts +34 -0
  235. package/dist/react/primitives/Select.js +26 -0
  236. package/dist/react/primitives/Select.js.map +1 -0
  237. package/dist/react/primitives/Textarea.d.ts +28 -0
  238. package/dist/react/primitives/Textarea.js +20 -0
  239. package/dist/react/primitives/Textarea.js.map +1 -0
  240. package/dist/react/recall.js +20 -0
  241. package/dist/react/recall.js.map +1 -0
  242. package/dist/react/registry.d.ts +16 -0
  243. package/dist/react/registry.js +16 -0
  244. package/dist/react/registry.js.map +1 -0
  245. package/dist/react/renderers/calculation.js +30 -0
  246. package/dist/react/renderers/calculation.js.map +1 -0
  247. package/dist/react/renderers/checkbox.js +35 -0
  248. package/dist/react/renderers/checkbox.js.map +1 -0
  249. package/dist/react/renderers/consent.js +54 -0
  250. package/dist/react/renderers/consent.js.map +1 -0
  251. package/dist/react/renderers/email.js +37 -0
  252. package/dist/react/renderers/email.js.map +1 -0
  253. package/dist/react/renderers/file.js +92 -0
  254. package/dist/react/renderers/file.js.map +1 -0
  255. package/dist/react/renderers/index.d.ts +8 -0
  256. package/dist/react/renderers/index.js +26 -0
  257. package/dist/react/renderers/index.js.map +1 -0
  258. package/dist/react/renderers/number.js +40 -0
  259. package/dist/react/renderers/number.js.map +1 -0
  260. package/dist/react/renderers/select.js +38 -0
  261. package/dist/react/renderers/select.js.map +1 -0
  262. package/dist/react/renderers/text.js +37 -0
  263. package/dist/react/renderers/text.js.map +1 -0
  264. package/dist/react/renderers/textarea.js +36 -0
  265. package/dist/react/renderers/textarea.js.map +1 -0
  266. package/dist/react/resolveForm.js +16 -0
  267. package/dist/react/resolveForm.js.map +1 -0
  268. package/dist/react/state.d.ts +15 -0
  269. package/dist/react/state.js +70 -0
  270. package/dist/react/state.js.map +1 -0
  271. package/dist/react/submitForm.d.ts +31 -0
  272. package/dist/react/submitForm.js +58 -0
  273. package/dist/react/submitForm.js.map +1 -0
  274. package/dist/react/toFormDocument.d.ts +24 -0
  275. package/dist/react/toFormDocument.js +22 -0
  276. package/dist/react/toFormDocument.js.map +1 -0
  277. package/dist/react/uploadFile.d.ts +23 -0
  278. package/dist/react/uploadFile.js +39 -0
  279. package/dist/react/uploadFile.js.map +1 -0
  280. package/dist/react/useField.d.ts +14 -0
  281. package/dist/react/useField.js +49 -0
  282. package/dist/react/useField.js.map +1 -0
  283. package/dist/react/useFormState.d.ts +8 -0
  284. package/dist/react/useFormState.js +9 -0
  285. package/dist/react/useFormState.js.map +1 -0
  286. package/dist/react/useFormStep.d.ts +8 -0
  287. package/dist/react/useFormStep.js +9 -0
  288. package/dist/react/useFormStep.js.map +1 -0
  289. package/dist/react/validateField.js +30 -0
  290. package/dist/react/validateField.js.map +1 -0
  291. package/dist/recall/interpolate.d.ts +10 -0
  292. package/dist/recall/interpolate.js +16 -0
  293. package/dist/recall/interpolate.js.map +1 -0
  294. package/dist/recall/resolver.d.ts +22 -0
  295. package/dist/recall/resolver.js +36 -0
  296. package/dist/recall/resolver.js.map +1 -0
  297. package/dist/spam/captcha.d.ts +12 -0
  298. package/dist/spam/captcha.js +11 -0
  299. package/dist/spam/captcha.js.map +1 -0
  300. package/dist/spam/constants.d.ts +12 -0
  301. package/dist/spam/constants.js +15 -0
  302. package/dist/spam/constants.js.map +1 -0
  303. package/dist/spam/identify.d.ts +12 -0
  304. package/dist/spam/identify.js +20 -0
  305. package/dist/spam/identify.js.map +1 -0
  306. package/dist/spam/rateLimiter.d.ts +18 -0
  307. package/dist/spam/rateLimiter.js +41 -0
  308. package/dist/spam/rateLimiter.js.map +1 -0
  309. package/dist/spam/reserved.js +30 -0
  310. package/dist/spam/reserved.js.map +1 -0
  311. package/dist/spam/resolveSpam.d.ts +12 -0
  312. package/dist/spam/resolveSpam.js +42 -0
  313. package/dist/spam/resolveSpam.js.map +1 -0
  314. package/dist/spam/spamGuard.js +68 -0
  315. package/dist/spam/spamGuard.js.map +1 -0
  316. package/dist/spam/types.d.ts +73 -0
  317. package/dist/spam/uploadHooks.js +33 -0
  318. package/dist/spam/uploadHooks.js.map +1 -0
  319. package/dist/submissions/SubmissionAnswers.d.ts +16 -0
  320. package/dist/submissions/SubmissionAnswers.js +57 -0
  321. package/dist/submissions/SubmissionAnswers.js.map +1 -0
  322. package/dist/submissions/runSubmission.js +205 -0
  323. package/dist/submissions/runSubmission.js.map +1 -0
  324. package/dist/submissions/types.d.ts +33 -0
  325. package/dist/submissions/validateSubmission.js +59 -0
  326. package/dist/submissions/validateSubmission.js.map +1 -0
  327. package/dist/translations/en.d.ts +12 -0
  328. package/dist/{translations-edMqq_2e.js → translations/en.js} +3 -22
  329. package/dist/translations/en.js.map +1 -0
  330. package/dist/translations/index.d.ts +14 -0
  331. package/dist/translations/index.js +26 -0
  332. package/dist/translations/index.js.map +1 -0
  333. package/dist/translations/keys.d.ts +132 -0
  334. package/dist/{keys-N5xGiUsh.js → translations/keys.js} +2 -2
  335. package/dist/translations/keys.js.map +1 -0
  336. package/dist/translations/makeTranslate.d.ts +11 -0
  337. package/dist/translations/makeTranslate.js +11 -0
  338. package/dist/translations/makeTranslate.js.map +1 -0
  339. package/dist/translations/server.js +25 -0
  340. package/dist/translations/server.js.map +1 -0
  341. package/dist/translations/useTranslation.js +12 -0
  342. package/dist/translations/useTranslation.js.map +1 -0
  343. package/dist/uploads/captureFileRef.d.ts +27 -0
  344. package/dist/uploads/captureFileRef.js +34 -0
  345. package/dist/uploads/captureFileRef.js.map +1 -0
  346. package/dist/uploads/resolveFileRef.d.ts +26 -0
  347. package/dist/uploads/resolveFileRef.js +44 -0
  348. package/dist/uploads/resolveFileRef.js.map +1 -0
  349. package/dist/uploads/types.d.ts +20 -0
  350. package/dist/validation/buildRuleBlocks.js +46 -0
  351. package/dist/validation/buildRuleBlocks.js.map +1 -0
  352. package/dist/validation/builtin/email.js +19 -0
  353. package/dist/validation/builtin/email.js.map +1 -0
  354. package/dist/validation/builtin/index.js +27 -0
  355. package/dist/validation/builtin/index.js.map +1 -0
  356. package/dist/validation/builtin/matchesField.js +20 -0
  357. package/dist/validation/builtin/matchesField.js.map +1 -0
  358. package/dist/validation/builtin/max.js +21 -0
  359. package/dist/validation/builtin/max.js.map +1 -0
  360. package/dist/validation/builtin/maxLength.js +26 -0
  361. package/dist/validation/builtin/maxLength.js.map +1 -0
  362. package/dist/validation/builtin/min.js +21 -0
  363. package/dist/validation/builtin/min.js.map +1 -0
  364. package/dist/validation/builtin/minLength.js +26 -0
  365. package/dist/validation/builtin/minLength.js.map +1 -0
  366. package/dist/validation/builtin/notAlreadySubmitted.js +32 -0
  367. package/dist/validation/builtin/notAlreadySubmitted.js.map +1 -0
  368. package/dist/validation/builtin/oneOf.js +34 -0
  369. package/dist/validation/builtin/oneOf.js.map +1 -0
  370. package/dist/validation/builtin/pattern.js +41 -0
  371. package/dist/validation/builtin/pattern.js.map +1 -0
  372. package/dist/validation/builtin/url.js +22 -0
  373. package/dist/validation/builtin/url.js.map +1 -0
  374. package/dist/validation/defineValidationRule.d.ts +12 -0
  375. package/dist/validation/defineValidationRule.js +11 -0
  376. package/dist/validation/defineValidationRule.js.map +1 -0
  377. package/dist/validation/message.js +14 -0
  378. package/dist/validation/message.js.map +1 -0
  379. package/dist/validation/registry.d.ts +10 -0
  380. package/dist/validation/registry.js +20 -0
  381. package/dist/validation/registry.js.map +1 -0
  382. package/dist/validation/runValidation.js +111 -0
  383. package/dist/validation/runValidation.js.map +1 -0
  384. package/dist/validation/types.d.ts +76 -0
  385. package/package.json +8 -5
  386. package/styles/form-builder.css +201 -11
  387. package/dist/constants-B-BUfetP.d.ts +0 -288
  388. package/dist/exports/client.js.map +0 -1
  389. package/dist/exports/react.js.map +0 -1
  390. package/dist/exports/rsc.js.map +0 -1
  391. package/dist/fieldTypes-B8jkNRob.d.ts +0 -188
  392. package/dist/fieldTypes-CzhhJXjg.js.map +0 -1
  393. package/dist/index-DfFYGbVF.d.ts +0 -481
  394. package/dist/keys-N5xGiUsh.js.map +0 -1
  395. package/dist/registry-CoCyhtvB.js +0 -282
  396. package/dist/registry-CoCyhtvB.js.map +0 -1
  397. package/dist/resolver-OeQyVH2N.js +0 -665
  398. package/dist/resolver-OeQyVH2N.js.map +0 -1
  399. package/dist/translations-edMqq_2e.js.map +0 -1
@@ -0,0 +1,26 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ //#region src/react/primitives/Select.tsx
4
+ const Select = ({ id, name, value, options, onChange, onBlur, required, disabled, invalid, describedById, placeholder }) => /* @__PURE__ */ jsxs("select", {
5
+ id,
6
+ name,
7
+ className: "fb-select",
8
+ value,
9
+ required,
10
+ disabled,
11
+ "aria-invalid": invalid || void 0,
12
+ "aria-describedby": describedById,
13
+ onChange: (event) => onChange(event.target.value),
14
+ onBlur,
15
+ children: [placeholder !== void 0 ? /* @__PURE__ */ jsx("option", {
16
+ value: "",
17
+ children: placeholder
18
+ }) : null, options.map((option) => /* @__PURE__ */ jsx("option", {
19
+ value: option.value,
20
+ children: option.label
21
+ }, option.value))]
22
+ });
23
+ //#endregion
24
+ export { Select };
25
+
26
+ //# sourceMappingURL=Select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.js","names":[],"sources":["../../../src/react/primitives/Select.tsx"],"sourcesContent":["'use client'\n\nexport type SelectOption = { label: string; value: string }\n\nexport type SelectProps = {\n\tid: string\n\tname: string\n\tvalue: string\n\toptions: SelectOption[]\n\tonChange: (value: string) => void\n\tonBlur?: () => void\n\trequired?: boolean\n\tdisabled?: boolean\n\tinvalid?: boolean\n\tdescribedById?: string\n\tplaceholder?: string\n}\n\nexport const Select = ({\n\tid,\n\tname,\n\tvalue,\n\toptions,\n\tonChange,\n\tonBlur,\n\trequired,\n\tdisabled,\n\tinvalid,\n\tdescribedById,\n\tplaceholder,\n}: SelectProps) => (\n\t<select\n\t\tid={id}\n\t\tname={name}\n\t\tclassName=\"fb-select\"\n\t\tvalue={value}\n\t\trequired={required}\n\t\tdisabled={disabled}\n\t\taria-invalid={invalid || undefined}\n\t\taria-describedby={describedById}\n\t\tonChange={(event) => onChange(event.target.value)}\n\t\tonBlur={onBlur}\n\t>\n\t\t{placeholder !== undefined ? <option value=\"\">{placeholder}</option> : null}\n\t\t{options.map((option) => (\n\t\t\t<option key={option.value} value={option.value}>\n\t\t\t\t{option.label}\n\t\t\t</option>\n\t\t))}\n\t</select>\n)\n"],"mappings":";;;AAkBA,MAAa,UAAU,EACtB,IACA,MACA,OACA,SACA,UACA,QACA,UACA,UACA,SACA,eACA,kBAEA,qBAAC,UAAD;CACK;CACE;CACN,WAAU;CACH;CACG;CACA;CACV,gBAAc,WAAW,KAAA;CACzB,oBAAkB;CAClB,WAAW,UAAU,SAAS,MAAM,OAAO,KAAK;CACxC;WAVT,CAYE,gBAAgB,KAAA,IAAY,oBAAC,UAAD;EAAQ,OAAM;YAAI;CAAoB,CAAA,IAAI,MACtE,QAAQ,KAAK,WACb,oBAAC,UAAD;EAA2B,OAAO,OAAO;YACvC,OAAO;CACD,GAFK,OAAO,KAEZ,CACR,CACM"}
@@ -0,0 +1,28 @@
1
+ //#region src/react/primitives/Textarea.d.ts
2
+ type TextareaProps = {
3
+ id: string;
4
+ name: string;
5
+ value: string;
6
+ onChange: (value: string) => void;
7
+ onBlur?: () => void;
8
+ placeholder?: string;
9
+ required?: boolean;
10
+ disabled?: boolean;
11
+ invalid?: boolean;
12
+ describedById?: string;
13
+ };
14
+ declare const Textarea: ({
15
+ id,
16
+ name,
17
+ value,
18
+ onChange,
19
+ onBlur,
20
+ placeholder,
21
+ required,
22
+ disabled,
23
+ invalid,
24
+ describedById
25
+ }: TextareaProps) => import("react/jsx-runtime").JSX.Element;
26
+ //#endregion
27
+ export { Textarea, TextareaProps };
28
+ //# sourceMappingURL=Textarea.d.ts.map
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/react/primitives/Textarea.tsx
4
+ const Textarea = ({ id, name, value, onChange, onBlur, placeholder, required, disabled, invalid, describedById }) => /* @__PURE__ */ jsx("textarea", {
5
+ id,
6
+ name,
7
+ className: "fb-textarea",
8
+ value,
9
+ placeholder,
10
+ required,
11
+ disabled,
12
+ "aria-invalid": invalid || void 0,
13
+ "aria-describedby": describedById,
14
+ onChange: (e) => onChange(e.target.value),
15
+ onBlur
16
+ });
17
+ //#endregion
18
+ export { Textarea };
19
+
20
+ //# sourceMappingURL=Textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.js","names":[],"sources":["../../../src/react/primitives/Textarea.tsx"],"sourcesContent":["'use client'\n\nexport type TextareaProps = {\n\tid: string\n\tname: string\n\tvalue: string\n\tonChange: (value: string) => void\n\tonBlur?: () => void\n\tplaceholder?: string\n\trequired?: boolean\n\tdisabled?: boolean\n\tinvalid?: boolean\n\tdescribedById?: string\n}\n\nexport const Textarea = ({\n\tid,\n\tname,\n\tvalue,\n\tonChange,\n\tonBlur,\n\tplaceholder,\n\trequired,\n\tdisabled,\n\tinvalid,\n\tdescribedById,\n}: TextareaProps) => (\n\t<textarea\n\t\tid={id}\n\t\tname={name}\n\t\tclassName=\"fb-textarea\"\n\t\tvalue={value}\n\t\tplaceholder={placeholder}\n\t\trequired={required}\n\t\tdisabled={disabled}\n\t\taria-invalid={invalid || undefined}\n\t\taria-describedby={describedById}\n\t\tonChange={(e) => onChange(e.target.value)}\n\t\tonBlur={onBlur}\n\t/>\n)\n"],"mappings":";;;AAeA,MAAa,YAAY,EACxB,IACA,MACA,OACA,UACA,QACA,aACA,UACA,UACA,SACA,oBAEA,oBAAC,YAAD;CACK;CACE;CACN,WAAU;CACH;CACM;CACH;CACA;CACV,gBAAc,WAAW,KAAA;CACzB,oBAAkB;CAClB,WAAW,MAAM,SAAS,EAAE,OAAO,KAAK;CAChC;AACR,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { interpolate } from "../recall/interpolate.js";
2
+ //#region src/react/recall.ts
3
+ /**
4
+ * Return a copy of the field with recall tokens interpolated in its label, description, and option
5
+ * labels. Never alters `name` (identity for React keys and state lookups must stay stable).
6
+ */
7
+ const applyRecall = (field, resolve) => {
8
+ const next = { ...field };
9
+ if (typeof field.label === "string") next.label = interpolate(field.label, resolve);
10
+ if (typeof field.description === "string") next.description = interpolate(field.description, resolve);
11
+ if (Array.isArray(field.options)) next.options = field.options.map((option) => option && typeof option.label === "string" ? {
12
+ ...option,
13
+ label: interpolate(option.label, resolve)
14
+ } : option);
15
+ return next;
16
+ };
17
+ //#endregion
18
+ export { applyRecall };
19
+
20
+ //# sourceMappingURL=recall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.js","names":[],"sources":["../../src/react/recall.ts"],"sourcesContent":["import { interpolate } from '../recall/interpolate'\nimport type { RecallResolver } from '../recall/resolver'\nimport type { FormFieldInstance } from '../submissions/types'\n\ntype Option = { label?: string; value?: string }\n\n/**\n * Return a copy of the field with recall tokens interpolated in its label, description, and option\n * labels. Never alters `name` (identity for React keys and state lookups must stay stable).\n */\nexport const applyRecall = (\n\tfield: FormFieldInstance,\n\tresolve: RecallResolver\n): FormFieldInstance => {\n\tconst next: FormFieldInstance = { ...field }\n\tif (typeof field.label === 'string') {\n\t\tnext.label = interpolate(field.label, resolve)\n\t}\n\tif (typeof field.description === 'string') {\n\t\tnext.description = interpolate(field.description, resolve)\n\t}\n\tif (Array.isArray(field.options)) {\n\t\tnext.options = (field.options as Option[]).map((option) =>\n\t\t\toption && typeof option.label === 'string'\n\t\t\t\t? { ...option, label: interpolate(option.label, resolve) }\n\t\t\t\t: option\n\t\t)\n\t}\n\treturn next\n}\n"],"mappings":";;;;;;AAUA,MAAa,eACZ,OACA,YACuB;CACvB,MAAM,OAA0B,EAAE,GAAG,MAAM;CAC3C,IAAI,OAAO,MAAM,UAAU,UAC1B,KAAK,QAAQ,YAAY,MAAM,OAAO,OAAO;CAE9C,IAAI,OAAO,MAAM,gBAAgB,UAChC,KAAK,cAAc,YAAY,MAAM,aAAa,OAAO;CAE1D,IAAI,MAAM,QAAQ,MAAM,OAAO,GAC9B,KAAK,UAAW,MAAM,QAAqB,KAAK,WAC/C,UAAU,OAAO,OAAO,UAAU,WAC/B;EAAE,GAAG;EAAQ,OAAO,YAAY,OAAO,OAAO,OAAO;CAAE,IACvD,MACJ;CAED,OAAO;AACR"}
@@ -0,0 +1,16 @@
1
+ import { FieldRenderer } from "./contract.js";
2
+
3
+ //#region src/react/registry.d.ts
4
+ type RendererRegistry = Map<string, FieldRenderer>;
5
+ /** Per-type renderer override: `false` removes, `true` keeps the default, a renderer adds or replaces one. */
6
+ type RendererOption = boolean | FieldRenderer;
7
+ type RenderersConfig = Record<string, RendererOption>;
8
+ /**
9
+ * Resolve the active renderer registry from the defaults and a consumer override map. `false` removes a
10
+ * type, `true` keeps the default (no-op when none exists), a renderer adds a new type or replaces one.
11
+ * Mirrors the field-type and validation-rule registry convention.
12
+ */
13
+ declare const resolveRenderers: (defaults: Record<string, FieldRenderer>, config?: RenderersConfig) => RendererRegistry;
14
+ //#endregion
15
+ export { RendererOption, RendererRegistry, RenderersConfig, resolveRenderers };
16
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1,16 @@
1
+ //#region src/react/registry.ts
2
+ /**
3
+ * Resolve the active renderer registry from the defaults and a consumer override map. `false` removes a
4
+ * type, `true` keeps the default (no-op when none exists), a renderer adds a new type or replaces one.
5
+ * Mirrors the field-type and validation-rule registry convention.
6
+ */
7
+ const resolveRenderers = (defaults, config = {}) => {
8
+ const registry = new Map(Object.entries(defaults));
9
+ for (const [type, option] of Object.entries(config)) if (option === false) registry.delete(type);
10
+ else if (option === true) {} else registry.set(type, option);
11
+ return registry;
12
+ };
13
+ //#endregion
14
+ export { resolveRenderers };
15
+
16
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","names":[],"sources":["../../src/react/registry.ts"],"sourcesContent":["import type { FieldRenderer } from './contract'\n\nexport type RendererRegistry = Map<string, FieldRenderer>\n\n/** Per-type renderer override: `false` removes, `true` keeps the default, a renderer adds or replaces one. */\nexport type RendererOption = boolean | FieldRenderer\n\nexport type RenderersConfig = Record<string, RendererOption>\n\n/**\n * Resolve the active renderer registry from the defaults and a consumer override map. `false` removes a\n * type, `true` keeps the default (no-op when none exists), a renderer adds a new type or replaces one.\n * Mirrors the field-type and validation-rule registry convention.\n */\nexport const resolveRenderers = (\n\tdefaults: Record<string, FieldRenderer>,\n\tconfig: RenderersConfig = {}\n): RendererRegistry => {\n\tconst registry: RendererRegistry = new Map(Object.entries(defaults))\n\tfor (const [type, option] of Object.entries(config)) {\n\t\tif (option === false) {\n\t\t\tregistry.delete(type)\n\t\t} else if (option === true) {\n\t\t\t// keep the default; no-op when no default exists for this key\n\t\t} else {\n\t\t\tregistry.set(type, option)\n\t\t}\n\t}\n\treturn registry\n}\n"],"mappings":";;;;;;AAcA,MAAa,oBACZ,UACA,SAA0B,CAAC,MACL;CACtB,MAAM,WAA6B,IAAI,IAAI,OAAO,QAAQ,QAAQ,CAAC;CACnE,KAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,MAAM,GACjD,IAAI,WAAW,OACd,SAAS,OAAO,IAAI;MACd,IAAI,WAAW,MAAM,CAE5B,OACC,SAAS,IAAI,MAAM,MAAM;CAG3B,OAAO;AACR"}
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ import { defineFieldRenderer } from "../contract.js";
3
+ import { FieldShell } from "../primitives/FieldShell.js";
4
+ import { useId } from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/react/renderers/calculation.tsx
7
+ /** Read-only renderer for a calculation field: the value is derived, never user-editable, so it shows in an `<output>` rather than an input. */
8
+ const calculationRenderer = defineFieldRenderer(({ field, value, errors, warnings, required }) => {
9
+ const id = useId();
10
+ const describedById = `${id}-desc`;
11
+ return /* @__PURE__ */ jsx(FieldShell, {
12
+ id,
13
+ label: field.label,
14
+ description: typeof field.description === "string" ? field.description : void 0,
15
+ required,
16
+ errors,
17
+ warnings,
18
+ describedById,
19
+ children: /* @__PURE__ */ jsx("output", {
20
+ id,
21
+ className: "fb-field__calc",
22
+ "aria-describedby": describedById,
23
+ children: value == null ? "" : String(value)
24
+ })
25
+ });
26
+ });
27
+ //#endregion
28
+ export { calculationRenderer };
29
+
30
+ //# sourceMappingURL=calculation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculation.js","names":[],"sources":["../../../src/react/renderers/calculation.tsx"],"sourcesContent":["'use client'\n\nimport { useId } from 'react'\nimport { defineFieldRenderer } from '../contract'\nimport { FieldShell } from '../primitives/FieldShell'\n\n/** Read-only renderer for a calculation field: the value is derived, never user-editable, so it shows in an `<output>` rather than an input. */\nexport const calculationRenderer = defineFieldRenderer<number | undefined>(\n\t({ field, value, errors, warnings, required }) => {\n\t\tconst id = useId()\n\t\tconst describedById = `${id}-desc`\n\t\treturn (\n\t\t\t<FieldShell\n\t\t\t\tid={id}\n\t\t\t\tlabel={field.label}\n\t\t\t\tdescription={typeof field.description === 'string' ? field.description : undefined}\n\t\t\t\trequired={required}\n\t\t\t\terrors={errors}\n\t\t\t\twarnings={warnings}\n\t\t\t\tdescribedById={describedById}\n\t\t\t>\n\t\t\t\t<output id={id} className=\"fb-field__calc\" aria-describedby={describedById}>\n\t\t\t\t\t{value == null ? '' : String(value)}\n\t\t\t\t</output>\n\t\t\t</FieldShell>\n\t\t)\n\t}\n)\n"],"mappings":";;;;;;;AAOA,MAAa,sBAAsB,qBACjC,EAAE,OAAO,OAAO,QAAQ,UAAU,eAAe;CACjD,MAAM,KAAK,MAAM;CACjB,MAAM,gBAAgB,GAAG,GAAG;CAC5B,OACC,oBAAC,YAAD;EACK;EACJ,OAAO,MAAM;EACb,aAAa,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc,KAAA;EAC/D;EACF;EACE;EACK;YAEf,oBAAC,UAAD;GAAY;GAAI,WAAU;GAAiB,oBAAkB;aAC3D,SAAS,OAAO,KAAK,OAAO,KAAK;EAC3B,CAAA;CACG,CAAA;AAEd,CACD"}
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import { defineFieldRenderer } from "../contract.js";
3
+ import { FieldShell } from "../primitives/FieldShell.js";
4
+ import { Checkbox } from "../primitives/Checkbox.js";
5
+ import { useId } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ //#region src/react/renderers/checkbox.tsx
8
+ const checkboxRenderer = defineFieldRenderer(({ field, name, value, onChange, onBlur, errors, warnings, required, disabled }) => {
9
+ const id = useId();
10
+ const describedById = `${id}-desc`;
11
+ return /* @__PURE__ */ jsx(FieldShell, {
12
+ id,
13
+ label: field.label,
14
+ description: typeof field.description === "string" ? field.description : void 0,
15
+ required,
16
+ errors,
17
+ warnings,
18
+ describedById,
19
+ children: /* @__PURE__ */ jsx(Checkbox, {
20
+ id,
21
+ name,
22
+ checked: value ?? false,
23
+ onChange,
24
+ onBlur,
25
+ required,
26
+ disabled,
27
+ invalid: errors.length > 0,
28
+ describedById
29
+ })
30
+ });
31
+ });
32
+ //#endregion
33
+ export { checkboxRenderer };
34
+
35
+ //# sourceMappingURL=checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.js","names":[],"sources":["../../../src/react/renderers/checkbox.tsx"],"sourcesContent":["'use client'\n\nimport { useId } from 'react'\nimport { defineFieldRenderer } from '../contract'\nimport { Checkbox } from '../primitives/Checkbox'\nimport { FieldShell } from '../primitives/FieldShell'\n\nexport const checkboxRenderer = defineFieldRenderer<boolean>(\n\t({ field, name, value, onChange, onBlur, errors, warnings, required, disabled }) => {\n\t\tconst id = useId()\n\t\tconst describedById = `${id}-desc`\n\t\treturn (\n\t\t\t<FieldShell\n\t\t\t\tid={id}\n\t\t\t\tlabel={field.label}\n\t\t\t\tdescription={typeof field.description === 'string' ? field.description : undefined}\n\t\t\t\trequired={required}\n\t\t\t\terrors={errors}\n\t\t\t\twarnings={warnings}\n\t\t\t\tdescribedById={describedById}\n\t\t\t>\n\t\t\t\t<Checkbox\n\t\t\t\t\tid={id}\n\t\t\t\t\tname={name}\n\t\t\t\t\tchecked={value ?? false}\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\trequired={required}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tinvalid={errors.length > 0}\n\t\t\t\t\tdescribedById={describedById}\n\t\t\t\t/>\n\t\t\t</FieldShell>\n\t\t)\n\t}\n)\n"],"mappings":";;;;;;;AAOA,MAAa,mBAAmB,qBAC9B,EAAE,OAAO,MAAM,OAAO,UAAU,QAAQ,QAAQ,UAAU,UAAU,eAAe;CACnF,MAAM,KAAK,MAAM;CACjB,MAAM,gBAAgB,GAAG,GAAG;CAC5B,OACC,oBAAC,YAAD;EACK;EACJ,OAAO,MAAM;EACb,aAAa,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc,KAAA;EAC/D;EACF;EACE;EACK;YAEf,oBAAC,UAAD;GACK;GACE;GACN,SAAS,SAAS;GACR;GACF;GACE;GACA;GACV,SAAS,OAAO,SAAS;GACV;EACf,CAAA;CACU,CAAA;AAEd,CACD"}
@@ -0,0 +1,54 @@
1
+ "use client";
2
+ import { defineFieldRenderer } from "../contract.js";
3
+ import { FieldShell } from "../primitives/FieldShell.js";
4
+ import { Checkbox } from "../primitives/Checkbox.js";
5
+ import { useId } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/react/renderers/consent.tsx
8
+ const consentRenderer = defineFieldRenderer(({ field, name, value, onChange, onBlur, errors, warnings, required, disabled }) => {
9
+ const id = useId();
10
+ const describedById = `${id}-desc`;
11
+ const text = (raw) => typeof raw === "string" && raw.trim() !== "" ? raw : void 0;
12
+ const statement = text(field.statement) ?? text(field.label);
13
+ const links = Array.isArray(field.consentLinks) ? field.consentLinks : (() => {
14
+ const sc = field.sourceConfig;
15
+ if (sc && typeof sc.url === "string" && sc.url) return [{
16
+ label: typeof sc.label === "string" ? sc.label : "Policy",
17
+ url: sc.url
18
+ }];
19
+ return [];
20
+ })();
21
+ return /* @__PURE__ */ jsxs(FieldShell, {
22
+ id,
23
+ label: statement,
24
+ description: typeof field.description === "string" ? field.description : void 0,
25
+ required,
26
+ errors,
27
+ warnings,
28
+ describedById,
29
+ children: [/* @__PURE__ */ jsx(Checkbox, {
30
+ id,
31
+ name,
32
+ checked: value ?? false,
33
+ onChange,
34
+ onBlur,
35
+ required,
36
+ disabled,
37
+ invalid: errors.length > 0,
38
+ describedById
39
+ }), links.length > 0 ? /* @__PURE__ */ jsx("span", {
40
+ className: "fb-consent__links",
41
+ children: links.map((link) => /* @__PURE__ */ jsx("a", {
42
+ href: link.url,
43
+ target: "_blank",
44
+ rel: "noopener noreferrer",
45
+ className: "fb-consent__link",
46
+ children: link.label
47
+ }, link.url))
48
+ }) : null]
49
+ });
50
+ });
51
+ //#endregion
52
+ export { consentRenderer };
53
+
54
+ //# sourceMappingURL=consent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent.js","names":[],"sources":["../../../src/react/renderers/consent.tsx"],"sourcesContent":["'use client'\n\nimport { useId } from 'react'\nimport type { ConsentLink } from '../../consent/defineConsentSource'\nimport { defineFieldRenderer } from '../contract'\nimport { Checkbox } from '../primitives/Checkbox'\nimport { FieldShell } from '../primitives/FieldShell'\n\nexport const consentRenderer = defineFieldRenderer<boolean>(\n\t({ field, name, value, onChange, onBlur, errors, warnings, required, disabled }) => {\n\t\tconst id = useId()\n\t\tconst describedById = `${id}-desc`\n\t\t// The visible agreement text labels the checkbox. Prefer the explicit `statement`; fall back to the\n\t\t// field `label` so a consent field authored with only a label (or a blank statement) is never an\n\t\t// unlabelled control (a11y). A blank or whitespace-only value counts as absent.\n\t\tconst text = (raw: unknown): string | undefined =>\n\t\t\ttypeof raw === 'string' && raw.trim() !== '' ? raw : undefined\n\t\tconst statement = text(field.statement) ?? text(field.label)\n\n\t\tconst links: ConsentLink[] = Array.isArray(field.consentLinks)\n\t\t\t? (field.consentLinks as ConsentLink[])\n\t\t\t: (() => {\n\t\t\t\t\tconst sc = field.sourceConfig as Record<string, unknown> | undefined\n\t\t\t\t\tif (sc && typeof sc.url === 'string' && sc.url) {\n\t\t\t\t\t\treturn [{ label: typeof sc.label === 'string' ? sc.label : 'Policy', url: sc.url }]\n\t\t\t\t\t}\n\t\t\t\t\treturn []\n\t\t\t\t})()\n\n\t\treturn (\n\t\t\t<FieldShell\n\t\t\t\tid={id}\n\t\t\t\tlabel={statement}\n\t\t\t\tdescription={typeof field.description === 'string' ? field.description : undefined}\n\t\t\t\trequired={required}\n\t\t\t\terrors={errors}\n\t\t\t\twarnings={warnings}\n\t\t\t\tdescribedById={describedById}\n\t\t\t>\n\t\t\t\t<Checkbox\n\t\t\t\t\tid={id}\n\t\t\t\t\tname={name}\n\t\t\t\t\tchecked={value ?? false}\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\trequired={required}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tinvalid={errors.length > 0}\n\t\t\t\t\tdescribedById={describedById}\n\t\t\t\t/>\n\t\t\t\t{links.length > 0 ? (\n\t\t\t\t\t<span className=\"fb-consent__links\">\n\t\t\t\t\t\t{links.map((link) => (\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\tkey={link.url}\n\t\t\t\t\t\t\t\thref={link.url}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\tclassName=\"fb-consent__link\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{link.label}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</span>\n\t\t\t\t) : null}\n\t\t\t</FieldShell>\n\t\t)\n\t}\n)\n"],"mappings":";;;;;;;AAQA,MAAa,kBAAkB,qBAC7B,EAAE,OAAO,MAAM,OAAO,UAAU,QAAQ,QAAQ,UAAU,UAAU,eAAe;CACnF,MAAM,KAAK,MAAM;CACjB,MAAM,gBAAgB,GAAG,GAAG;CAI5B,MAAM,QAAQ,QACb,OAAO,QAAQ,YAAY,IAAI,KAAK,MAAM,KAAK,MAAM,KAAA;CACtD,MAAM,YAAY,KAAK,MAAM,SAAS,KAAK,KAAK,MAAM,KAAK;CAE3D,MAAM,QAAuB,MAAM,QAAQ,MAAM,YAAY,IACzD,MAAM,sBACA;EACP,MAAM,KAAK,MAAM;EACjB,IAAI,MAAM,OAAO,GAAG,QAAQ,YAAY,GAAG,KAC1C,OAAO,CAAC;GAAE,OAAO,OAAO,GAAG,UAAU,WAAW,GAAG,QAAQ;GAAU,KAAK,GAAG;EAAI,CAAC;EAEnF,OAAO,CAAC;CACT,GAAG;CAEL,OACC,qBAAC,YAAD;EACK;EACJ,OAAO;EACP,aAAa,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc,KAAA;EAC/D;EACF;EACE;EACK;YAPhB,CASC,oBAAC,UAAD;GACK;GACE;GACN,SAAS,SAAS;GACR;GACF;GACE;GACA;GACV,SAAS,OAAO,SAAS;GACV;EACf,CAAA,GACA,MAAM,SAAS,IACf,oBAAC,QAAD;GAAM,WAAU;aACd,MAAM,KAAK,SACX,oBAAC,KAAD;IAEC,MAAM,KAAK;IACX,QAAO;IACP,KAAI;IACJ,WAAU;cAET,KAAK;GACJ,GAPG,KAAK,GAOR,CACH;EACI,CAAA,IACH,IACO;;AAEd,CACD"}
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ import { defineFieldRenderer } from "../contract.js";
3
+ import { FieldShell } from "../primitives/FieldShell.js";
4
+ import { Input } from "../primitives/Input.js";
5
+ import { useId } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ //#region src/react/renderers/email.tsx
8
+ const emailRenderer = defineFieldRenderer(({ field, name, value, onChange, onBlur, errors, warnings, required, disabled }) => {
9
+ const id = useId();
10
+ const describedById = `${id}-desc`;
11
+ return /* @__PURE__ */ jsx(FieldShell, {
12
+ id,
13
+ label: field.label,
14
+ description: typeof field.description === "string" ? field.description : void 0,
15
+ required,
16
+ errors,
17
+ warnings,
18
+ describedById,
19
+ children: /* @__PURE__ */ jsx(Input, {
20
+ id,
21
+ name,
22
+ type: "email",
23
+ value: value ?? "",
24
+ onChange,
25
+ onBlur,
26
+ placeholder: typeof field.placeholder === "string" ? field.placeholder : void 0,
27
+ required,
28
+ disabled,
29
+ invalid: errors.length > 0,
30
+ describedById
31
+ })
32
+ });
33
+ });
34
+ //#endregion
35
+ export { emailRenderer };
36
+
37
+ //# sourceMappingURL=email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.js","names":[],"sources":["../../../src/react/renderers/email.tsx"],"sourcesContent":["'use client'\n\nimport { useId } from 'react'\nimport { defineFieldRenderer } from '../contract'\nimport { FieldShell } from '../primitives/FieldShell'\nimport { Input } from '../primitives/Input'\n\nexport const emailRenderer = defineFieldRenderer<string>(\n\t({ field, name, value, onChange, onBlur, errors, warnings, required, disabled }) => {\n\t\tconst id = useId()\n\t\tconst describedById = `${id}-desc`\n\t\treturn (\n\t\t\t<FieldShell\n\t\t\t\tid={id}\n\t\t\t\tlabel={field.label}\n\t\t\t\tdescription={typeof field.description === 'string' ? field.description : undefined}\n\t\t\t\trequired={required}\n\t\t\t\terrors={errors}\n\t\t\t\twarnings={warnings}\n\t\t\t\tdescribedById={describedById}\n\t\t\t>\n\t\t\t\t<Input\n\t\t\t\t\tid={id}\n\t\t\t\t\tname={name}\n\t\t\t\t\ttype=\"email\"\n\t\t\t\t\tvalue={value ?? ''}\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\tplaceholder={typeof field.placeholder === 'string' ? field.placeholder : undefined}\n\t\t\t\t\trequired={required}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tinvalid={errors.length > 0}\n\t\t\t\t\tdescribedById={describedById}\n\t\t\t\t/>\n\t\t\t</FieldShell>\n\t\t)\n\t}\n)\n"],"mappings":";;;;;;;AAOA,MAAa,gBAAgB,qBAC3B,EAAE,OAAO,MAAM,OAAO,UAAU,QAAQ,QAAQ,UAAU,UAAU,eAAe;CACnF,MAAM,KAAK,MAAM;CACjB,MAAM,gBAAgB,GAAG,GAAG;CAC5B,OACC,oBAAC,YAAD;EACK;EACJ,OAAO,MAAM;EACb,aAAa,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc,KAAA;EAC/D;EACF;EACE;EACK;YAEf,oBAAC,OAAD;GACK;GACE;GACN,MAAK;GACL,OAAO,SAAS;GACN;GACF;GACR,aAAa,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc,KAAA;GAC/D;GACA;GACV,SAAS,OAAO,SAAS;GACV;EACf,CAAA;CACU,CAAA;AAEd,CACD"}
@@ -0,0 +1,92 @@
1
+ "use client";
2
+ import { defineFieldRenderer } from "../contract.js";
3
+ import { FieldShell } from "../primitives/FieldShell.js";
4
+ import { uploadFile } from "../uploadFile.js";
5
+ import { useId, useState } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/react/renderers/file.tsx
8
+ const acceptOf = (mimeTypes) => {
9
+ if (!Array.isArray(mimeTypes)) return;
10
+ const types = mimeTypes.filter((entry) => typeof entry === "string");
11
+ return types.length > 0 ? types.join(",") : void 0;
12
+ };
13
+ /**
14
+ * Headless file renderer: a native file input that uploads the chosen file to the upload collection and
15
+ * stores the returned id as the field value. The server re-derives filename/mimeType/filesize from the
16
+ * stored doc at submit, so the client value is only the id. Shows the uploaded filename with a clear
17
+ * control and surfaces upload errors. Single file (v1); the upload posts to the default `/api` route.
18
+ */
19
+ const fileRenderer = defineFieldRenderer(({ field, name, value, onChange, onBlur, errors, warnings, required, disabled }) => {
20
+ const id = useId();
21
+ const describedById = `${id}-desc`;
22
+ const [uploading, setUploading] = useState(false);
23
+ const [filename, setFilename] = useState(void 0);
24
+ const [localError, setLocalError] = useState(void 0);
25
+ const collection = typeof field.relationTo === "string" ? field.relationTo : "form-uploads";
26
+ const accept = acceptOf(field.mimeTypes);
27
+ const allErrors = localError ? [...errors, localError] : errors;
28
+ const displayName = filename ?? (value !== void 0 && value !== null && value !== "" ? "Uploaded file" : void 0);
29
+ const handleChange = async (event) => {
30
+ const selected = event.target.files?.[0];
31
+ if (!selected) return;
32
+ setUploading(true);
33
+ setLocalError(void 0);
34
+ const result = await uploadFile({
35
+ file: selected,
36
+ collection
37
+ });
38
+ setUploading(false);
39
+ if (result.ok) {
40
+ setFilename(selected.name);
41
+ onChange(result.id);
42
+ } else setLocalError(result.message ?? "Upload failed");
43
+ };
44
+ const clear = () => {
45
+ setFilename(void 0);
46
+ setLocalError(void 0);
47
+ onChange("");
48
+ };
49
+ return /* @__PURE__ */ jsxs(FieldShell, {
50
+ id,
51
+ label: field.label,
52
+ description: typeof field.description === "string" ? field.description : void 0,
53
+ required,
54
+ errors: allErrors,
55
+ warnings,
56
+ describedById,
57
+ children: [
58
+ /* @__PURE__ */ jsx("input", {
59
+ id,
60
+ name,
61
+ type: "file",
62
+ accept,
63
+ disabled: disabled || uploading,
64
+ onChange: (event) => {
65
+ handleChange(event);
66
+ },
67
+ onBlur,
68
+ "aria-invalid": allErrors.length > 0,
69
+ "aria-describedby": describedById
70
+ }),
71
+ uploading ? /* @__PURE__ */ jsx("p", {
72
+ className: "fb-field__file-status",
73
+ "aria-live": "polite",
74
+ children: "Uploading"
75
+ }) : null,
76
+ displayName ? /* @__PURE__ */ jsxs("p", {
77
+ className: "fb-field__file-name",
78
+ children: [/* @__PURE__ */ jsx("span", { children: displayName }), /* @__PURE__ */ jsx("button", {
79
+ type: "button",
80
+ className: "fb-field__file-clear",
81
+ onClick: clear,
82
+ disabled,
83
+ children: "Remove"
84
+ })]
85
+ }) : null
86
+ ]
87
+ });
88
+ });
89
+ //#endregion
90
+ export { fileRenderer };
91
+
92
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","names":[],"sources":["../../../src/react/renderers/file.tsx"],"sourcesContent":["'use client'\n\nimport { type ChangeEvent, useId, useState } from 'react'\nimport { defineFieldRenderer } from '../contract'\nimport { FieldShell } from '../primitives/FieldShell'\nimport { uploadFile } from '../uploadFile'\n\nconst acceptOf = (mimeTypes: unknown): string | undefined => {\n\tif (!Array.isArray(mimeTypes)) {\n\t\treturn undefined\n\t}\n\tconst types = mimeTypes.filter((entry): entry is string => typeof entry === 'string')\n\treturn types.length > 0 ? types.join(',') : undefined\n}\n\n/**\n * Headless file renderer: a native file input that uploads the chosen file to the upload collection and\n * stores the returned id as the field value. The server re-derives filename/mimeType/filesize from the\n * stored doc at submit, so the client value is only the id. Shows the uploaded filename with a clear\n * control and surfaces upload errors. Single file (v1); the upload posts to the default `/api` route.\n */\nexport const fileRenderer = defineFieldRenderer<string | number>(\n\t({ field, name, value, onChange, onBlur, errors, warnings, required, disabled }) => {\n\t\tconst id = useId()\n\t\tconst describedById = `${id}-desc`\n\t\tconst [uploading, setUploading] = useState(false)\n\t\tconst [filename, setFilename] = useState<string | undefined>(undefined)\n\t\tconst [localError, setLocalError] = useState<string | undefined>(undefined)\n\n\t\tconst collection = typeof field.relationTo === 'string' ? field.relationTo : 'form-uploads'\n\t\tconst accept = acceptOf(field.mimeTypes)\n\t\tconst allErrors = localError ? [...errors, localError] : errors\n\t\t// Show the just-uploaded filename, or a generic indicator when the field already holds an id (recall/prefill): the filename is not part of the client value.\n\t\tconst hasValue = value !== undefined && value !== null && value !== ''\n\t\tconst displayName = filename ?? (hasValue ? 'Uploaded file' : undefined)\n\n\t\tconst handleChange = async (event: ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst selected = event.target.files?.[0]\n\t\t\tif (!selected) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsetUploading(true)\n\t\t\tsetLocalError(undefined)\n\t\t\tconst result = await uploadFile({ file: selected, collection })\n\t\t\tsetUploading(false)\n\t\t\tif (result.ok) {\n\t\t\t\tsetFilename(selected.name)\n\t\t\t\tonChange(result.id)\n\t\t\t} else {\n\t\t\t\tsetLocalError(result.message ?? 'Upload failed')\n\t\t\t}\n\t\t}\n\n\t\tconst clear = () => {\n\t\t\tsetFilename(undefined)\n\t\t\tsetLocalError(undefined)\n\t\t\tonChange('')\n\t\t}\n\n\t\treturn (\n\t\t\t<FieldShell\n\t\t\t\tid={id}\n\t\t\t\tlabel={field.label}\n\t\t\t\tdescription={typeof field.description === 'string' ? field.description : undefined}\n\t\t\t\trequired={required}\n\t\t\t\terrors={allErrors}\n\t\t\t\twarnings={warnings}\n\t\t\t\tdescribedById={describedById}\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tid={id}\n\t\t\t\t\tname={name}\n\t\t\t\t\ttype=\"file\"\n\t\t\t\t\taccept={accept}\n\t\t\t\t\tdisabled={disabled || uploading}\n\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\tvoid handleChange(event)\n\t\t\t\t\t}}\n\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\taria-invalid={allErrors.length > 0}\n\t\t\t\t\taria-describedby={describedById}\n\t\t\t\t/>\n\t\t\t\t{uploading ? (\n\t\t\t\t\t<p className=\"fb-field__file-status\" aria-live=\"polite\">\n\t\t\t\t\t\tUploading\n\t\t\t\t\t</p>\n\t\t\t\t) : null}\n\t\t\t\t{displayName ? (\n\t\t\t\t\t<p className=\"fb-field__file-name\">\n\t\t\t\t\t\t<span>{displayName}</span>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"fb-field__file-clear\"\n\t\t\t\t\t\t\tonClick={clear}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tRemove\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</p>\n\t\t\t\t) : null}\n\t\t\t</FieldShell>\n\t\t)\n\t}\n)\n"],"mappings":";;;;;;;AAOA,MAAM,YAAY,cAA2C;CAC5D,IAAI,CAAC,MAAM,QAAQ,SAAS,GAC3B;CAED,MAAM,QAAQ,UAAU,QAAQ,UAA2B,OAAO,UAAU,QAAQ;CACpF,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK,GAAG,IAAI,KAAA;AAC7C;;;;;;;AAQA,MAAa,eAAe,qBAC1B,EAAE,OAAO,MAAM,OAAO,UAAU,QAAQ,QAAQ,UAAU,UAAU,eAAe;CACnF,MAAM,KAAK,MAAM;CACjB,MAAM,gBAAgB,GAAG,GAAG;CAC5B,MAAM,CAAC,WAAW,gBAAgB,SAAS,KAAK;CAChD,MAAM,CAAC,UAAU,eAAe,SAA6B,KAAA,CAAS;CACtE,MAAM,CAAC,YAAY,iBAAiB,SAA6B,KAAA,CAAS;CAE1E,MAAM,aAAa,OAAO,MAAM,eAAe,WAAW,MAAM,aAAa;CAC7E,MAAM,SAAS,SAAS,MAAM,SAAS;CACvC,MAAM,YAAY,aAAa,CAAC,GAAG,QAAQ,UAAU,IAAI;CAGzD,MAAM,cAAc,aADH,UAAU,KAAA,KAAa,UAAU,QAAQ,UAAU,KACxB,kBAAkB,KAAA;CAE9D,MAAM,eAAe,OAAO,UAAyC;EACpE,MAAM,WAAW,MAAM,OAAO,QAAQ;EACtC,IAAI,CAAC,UACJ;EAED,aAAa,IAAI;EACjB,cAAc,KAAA,CAAS;EACvB,MAAM,SAAS,MAAM,WAAW;GAAE,MAAM;GAAU;EAAW,CAAC;EAC9D,aAAa,KAAK;EAClB,IAAI,OAAO,IAAI;GACd,YAAY,SAAS,IAAI;GACzB,SAAS,OAAO,EAAE;EACnB,OACC,cAAc,OAAO,WAAW,eAAe;CAEjD;CAEA,MAAM,cAAc;EACnB,YAAY,KAAA,CAAS;EACrB,cAAc,KAAA,CAAS;EACvB,SAAS,EAAE;CACZ;CAEA,OACC,qBAAC,YAAD;EACK;EACJ,OAAO,MAAM;EACb,aAAa,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc,KAAA;EAC/D;EACV,QAAQ;EACE;EACK;YAPhB;GASC,oBAAC,SAAD;IACK;IACE;IACN,MAAK;IACG;IACR,UAAU,YAAY;IACtB,WAAW,UAAU;KACpB,aAAkB,KAAK;IACxB;IACQ;IACR,gBAAc,UAAU,SAAS;IACjC,oBAAkB;GAClB,CAAA;GACA,YACA,oBAAC,KAAD;IAAG,WAAU;IAAwB,aAAU;cAAS;GAErD,CAAA,IACA;GACH,cACA,qBAAC,KAAD;IAAG,WAAU;cAAb,CACC,oBAAC,QAAD,EAAA,UAAO,YAAkB,CAAA,GACzB,oBAAC,UAAD;KACC,MAAK;KACL,WAAU;KACV,SAAS;KACC;eACV;IAEO,CAAA,CACN;QACA;EACO;;AAEd,CACD"}
@@ -0,0 +1,8 @@
1
+ import { FieldRenderer } from "../contract.js";
2
+
3
+ //#region src/react/renderers/index.d.ts
4
+ /** The built-in field renderers, keyed by field-type slug. Override via the renderer registry. */
5
+ declare const defaultRenderers: Record<string, FieldRenderer>;
6
+ //#endregion
7
+ export { defaultRenderers };
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,26 @@
1
+ import { calculationRenderer } from "./calculation.js";
2
+ import { checkboxRenderer } from "./checkbox.js";
3
+ import { consentRenderer } from "./consent.js";
4
+ import { emailRenderer } from "./email.js";
5
+ import { fileRenderer } from "./file.js";
6
+ import { numberRenderer } from "./number.js";
7
+ import { selectRenderer } from "./select.js";
8
+ import { textRenderer } from "./text.js";
9
+ import { textareaRenderer } from "./textarea.js";
10
+ //#region src/react/renderers/index.ts
11
+ /** The built-in field renderers, keyed by field-type slug. Override via the renderer registry. */
12
+ const defaultRenderers = {
13
+ calculation: calculationRenderer,
14
+ checkbox: checkboxRenderer,
15
+ consent: consentRenderer,
16
+ email: emailRenderer,
17
+ file: fileRenderer,
18
+ number: numberRenderer,
19
+ select: selectRenderer,
20
+ text: textRenderer,
21
+ textarea: textareaRenderer
22
+ };
23
+ //#endregion
24
+ export { defaultRenderers };
25
+
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/react/renderers/index.ts"],"sourcesContent":["import type { FieldRenderer } from '../contract'\nimport { calculationRenderer } from './calculation'\nimport { checkboxRenderer } from './checkbox'\nimport { consentRenderer } from './consent'\nimport { emailRenderer } from './email'\nimport { fileRenderer } from './file'\nimport { numberRenderer } from './number'\nimport { selectRenderer } from './select'\nimport { textRenderer } from './text'\nimport { textareaRenderer } from './textarea'\n\n/** The built-in field renderers, keyed by field-type slug. Override via the renderer registry. */\nexport const defaultRenderers: Record<string, FieldRenderer> = {\n\tcalculation: calculationRenderer as FieldRenderer,\n\tcheckbox: checkboxRenderer as FieldRenderer,\n\tconsent: consentRenderer as FieldRenderer,\n\temail: emailRenderer as FieldRenderer,\n\tfile: fileRenderer as FieldRenderer,\n\tnumber: numberRenderer as FieldRenderer,\n\tselect: selectRenderer as FieldRenderer,\n\ttext: textRenderer as FieldRenderer,\n\ttextarea: textareaRenderer as FieldRenderer,\n}\n"],"mappings":";;;;;;;;;;;AAYA,MAAa,mBAAkD;CAC9D,aAAa;CACb,UAAU;CACV,SAAS;CACT,OAAO;CACP,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,MAAM;CACN,UAAU;AACX"}
@@ -0,0 +1,40 @@
1
+ "use client";
2
+ import { defineFieldRenderer } from "../contract.js";
3
+ import { FieldShell } from "../primitives/FieldShell.js";
4
+ import { Input } from "../primitives/Input.js";
5
+ import { useId } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ //#region src/react/renderers/number.tsx
8
+ const numberRenderer = defineFieldRenderer(({ field, name, value, onChange, onBlur, errors, warnings, required, disabled }) => {
9
+ const id = useId();
10
+ const describedById = `${id}-desc`;
11
+ return /* @__PURE__ */ jsx(FieldShell, {
12
+ id,
13
+ label: field.label,
14
+ description: typeof field.description === "string" ? field.description : void 0,
15
+ required,
16
+ errors,
17
+ warnings,
18
+ describedById,
19
+ children: /* @__PURE__ */ jsx(Input, {
20
+ id,
21
+ name,
22
+ type: "number",
23
+ value: value == null ? "" : String(value),
24
+ onChange: (raw) => {
25
+ const next = Number(raw);
26
+ onChange(raw === "" || Number.isNaN(next) ? void 0 : next);
27
+ },
28
+ onBlur,
29
+ placeholder: typeof field.placeholder === "string" ? field.placeholder : void 0,
30
+ required,
31
+ disabled,
32
+ invalid: errors.length > 0,
33
+ describedById
34
+ })
35
+ });
36
+ });
37
+ //#endregion
38
+ export { numberRenderer };
39
+
40
+ //# sourceMappingURL=number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.js","names":[],"sources":["../../../src/react/renderers/number.tsx"],"sourcesContent":["'use client'\n\nimport { useId } from 'react'\nimport { defineFieldRenderer } from '../contract'\nimport { FieldShell } from '../primitives/FieldShell'\nimport { Input } from '../primitives/Input'\n\nexport const numberRenderer = defineFieldRenderer<number | undefined>(\n\t({ field, name, value, onChange, onBlur, errors, warnings, required, disabled }) => {\n\t\tconst id = useId()\n\t\tconst describedById = `${id}-desc`\n\t\treturn (\n\t\t\t<FieldShell\n\t\t\t\tid={id}\n\t\t\t\tlabel={field.label}\n\t\t\t\tdescription={typeof field.description === 'string' ? field.description : undefined}\n\t\t\t\trequired={required}\n\t\t\t\terrors={errors}\n\t\t\t\twarnings={warnings}\n\t\t\t\tdescribedById={describedById}\n\t\t\t>\n\t\t\t\t<Input\n\t\t\t\t\tid={id}\n\t\t\t\t\tname={name}\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\tvalue={value == null ? '' : String(value)}\n\t\t\t\t\tonChange={(raw) => {\n\t\t\t\t\t\tconst next = Number(raw)\n\t\t\t\t\t\tonChange(raw === '' || Number.isNaN(next) ? undefined : next)\n\t\t\t\t\t}}\n\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\tplaceholder={typeof field.placeholder === 'string' ? field.placeholder : undefined}\n\t\t\t\t\trequired={required}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tinvalid={errors.length > 0}\n\t\t\t\t\tdescribedById={describedById}\n\t\t\t\t/>\n\t\t\t</FieldShell>\n\t\t)\n\t}\n)\n"],"mappings":";;;;;;;AAOA,MAAa,iBAAiB,qBAC5B,EAAE,OAAO,MAAM,OAAO,UAAU,QAAQ,QAAQ,UAAU,UAAU,eAAe;CACnF,MAAM,KAAK,MAAM;CACjB,MAAM,gBAAgB,GAAG,GAAG;CAC5B,OACC,oBAAC,YAAD;EACK;EACJ,OAAO,MAAM;EACb,aAAa,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc,KAAA;EAC/D;EACF;EACE;EACK;YAEf,oBAAC,OAAD;GACK;GACE;GACN,MAAK;GACL,OAAO,SAAS,OAAO,KAAK,OAAO,KAAK;GACxC,WAAW,QAAQ;IAClB,MAAM,OAAO,OAAO,GAAG;IACvB,SAAS,QAAQ,MAAM,OAAO,MAAM,IAAI,IAAI,KAAA,IAAY,IAAI;GAC7D;GACQ;GACR,aAAa,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc,KAAA;GAC/D;GACA;GACV,SAAS,OAAO,SAAS;GACV;EACf,CAAA;CACU,CAAA;AAEd,CACD"}
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ import { defineFieldRenderer } from "../contract.js";
3
+ import { FieldShell } from "../primitives/FieldShell.js";
4
+ import { Select } from "../primitives/Select.js";
5
+ import { useId } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ //#region src/react/renderers/select.tsx
8
+ const selectRenderer = defineFieldRenderer(({ field, name, value, onChange, onBlur, errors, warnings, required, disabled }) => {
9
+ const id = useId();
10
+ const describedById = `${id}-desc`;
11
+ const options = Array.isArray(field.options) ? field.options : [];
12
+ return /* @__PURE__ */ jsx(FieldShell, {
13
+ id,
14
+ label: field.label,
15
+ description: typeof field.description === "string" ? field.description : void 0,
16
+ required,
17
+ errors,
18
+ warnings,
19
+ describedById,
20
+ children: /* @__PURE__ */ jsx(Select, {
21
+ id,
22
+ name,
23
+ value: value ?? "",
24
+ options,
25
+ onChange,
26
+ onBlur,
27
+ placeholder: typeof field.placeholder === "string" ? field.placeholder : void 0,
28
+ required,
29
+ disabled,
30
+ invalid: errors.length > 0,
31
+ describedById
32
+ })
33
+ });
34
+ });
35
+ //#endregion
36
+ export { selectRenderer };
37
+
38
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","names":[],"sources":["../../../src/react/renderers/select.tsx"],"sourcesContent":["'use client'\n\nimport { useId } from 'react'\nimport { defineFieldRenderer } from '../contract'\nimport { FieldShell } from '../primitives/FieldShell'\nimport { Select } from '../primitives/Select'\n\nexport const selectRenderer = defineFieldRenderer<string>(\n\t({ field, name, value, onChange, onBlur, errors, warnings, required, disabled }) => {\n\t\tconst id = useId()\n\t\tconst describedById = `${id}-desc`\n\t\tconst options = Array.isArray(field.options)\n\t\t\t? (field.options as { label: string; value: string }[])\n\t\t\t: []\n\t\treturn (\n\t\t\t<FieldShell\n\t\t\t\tid={id}\n\t\t\t\tlabel={field.label}\n\t\t\t\tdescription={typeof field.description === 'string' ? field.description : undefined}\n\t\t\t\trequired={required}\n\t\t\t\terrors={errors}\n\t\t\t\twarnings={warnings}\n\t\t\t\tdescribedById={describedById}\n\t\t\t>\n\t\t\t\t<Select\n\t\t\t\t\tid={id}\n\t\t\t\t\tname={name}\n\t\t\t\t\tvalue={value ?? ''}\n\t\t\t\t\toptions={options}\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\tplaceholder={typeof field.placeholder === 'string' ? field.placeholder : undefined}\n\t\t\t\t\trequired={required}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tinvalid={errors.length > 0}\n\t\t\t\t\tdescribedById={describedById}\n\t\t\t\t/>\n\t\t\t</FieldShell>\n\t\t)\n\t}\n)\n"],"mappings":";;;;;;;AAOA,MAAa,iBAAiB,qBAC5B,EAAE,OAAO,MAAM,OAAO,UAAU,QAAQ,QAAQ,UAAU,UAAU,eAAe;CACnF,MAAM,KAAK,MAAM;CACjB,MAAM,gBAAgB,GAAG,GAAG;CAC5B,MAAM,UAAU,MAAM,QAAQ,MAAM,OAAO,IACvC,MAAM,UACP,CAAC;CACJ,OACC,oBAAC,YAAD;EACK;EACJ,OAAO,MAAM;EACb,aAAa,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc,KAAA;EAC/D;EACF;EACE;EACK;YAEf,oBAAC,QAAD;GACK;GACE;GACN,OAAO,SAAS;GACP;GACC;GACF;GACR,aAAa,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc,KAAA;GAC/D;GACA;GACV,SAAS,OAAO,SAAS;GACV;EACf,CAAA;CACU,CAAA;AAEd,CACD"}
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ import { defineFieldRenderer } from "../contract.js";
3
+ import { FieldShell } from "../primitives/FieldShell.js";
4
+ import { Input } from "../primitives/Input.js";
5
+ import { useId } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ //#region src/react/renderers/text.tsx
8
+ const textRenderer = defineFieldRenderer(({ field, name, value, onChange, onBlur, errors, warnings, required, disabled }) => {
9
+ const id = useId();
10
+ const describedById = `${id}-desc`;
11
+ return /* @__PURE__ */ jsx(FieldShell, {
12
+ id,
13
+ label: field.label,
14
+ description: typeof field.description === "string" ? field.description : void 0,
15
+ required,
16
+ errors,
17
+ warnings,
18
+ describedById,
19
+ children: /* @__PURE__ */ jsx(Input, {
20
+ id,
21
+ name,
22
+ type: "text",
23
+ value: value ?? "",
24
+ onChange,
25
+ onBlur,
26
+ placeholder: typeof field.placeholder === "string" ? field.placeholder : void 0,
27
+ required,
28
+ disabled,
29
+ invalid: errors.length > 0,
30
+ describedById
31
+ })
32
+ });
33
+ });
34
+ //#endregion
35
+ export { textRenderer };
36
+
37
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","names":[],"sources":["../../../src/react/renderers/text.tsx"],"sourcesContent":["'use client'\n\nimport { useId } from 'react'\nimport { defineFieldRenderer } from '../contract'\nimport { FieldShell } from '../primitives/FieldShell'\nimport { Input } from '../primitives/Input'\n\nexport const textRenderer = defineFieldRenderer<string>(\n\t({ field, name, value, onChange, onBlur, errors, warnings, required, disabled }) => {\n\t\tconst id = useId()\n\t\tconst describedById = `${id}-desc`\n\t\treturn (\n\t\t\t<FieldShell\n\t\t\t\tid={id}\n\t\t\t\tlabel={field.label}\n\t\t\t\tdescription={typeof field.description === 'string' ? field.description : undefined}\n\t\t\t\trequired={required}\n\t\t\t\terrors={errors}\n\t\t\t\twarnings={warnings}\n\t\t\t\tdescribedById={describedById}\n\t\t\t>\n\t\t\t\t<Input\n\t\t\t\t\tid={id}\n\t\t\t\t\tname={name}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={value ?? ''}\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\tplaceholder={typeof field.placeholder === 'string' ? field.placeholder : undefined}\n\t\t\t\t\trequired={required}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tinvalid={errors.length > 0}\n\t\t\t\t\tdescribedById={describedById}\n\t\t\t\t/>\n\t\t\t</FieldShell>\n\t\t)\n\t}\n)\n"],"mappings":";;;;;;;AAOA,MAAa,eAAe,qBAC1B,EAAE,OAAO,MAAM,OAAO,UAAU,QAAQ,QAAQ,UAAU,UAAU,eAAe;CACnF,MAAM,KAAK,MAAM;CACjB,MAAM,gBAAgB,GAAG,GAAG;CAC5B,OACC,oBAAC,YAAD;EACK;EACJ,OAAO,MAAM;EACb,aAAa,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc,KAAA;EAC/D;EACF;EACE;EACK;YAEf,oBAAC,OAAD;GACK;GACE;GACN,MAAK;GACL,OAAO,SAAS;GACN;GACF;GACR,aAAa,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc,KAAA;GAC/D;GACA;GACV,SAAS,OAAO,SAAS;GACV;EACf,CAAA;CACU,CAAA;AAEd,CACD"}