@digigov/form 2.0.0-555d1027 → 2.0.0-5701c39b

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 (433) hide show
  1. package/Field/ErrorGroup.d.ts +3 -3
  2. package/Field/ErrorGroup.js.map +1 -1
  3. package/Field/FieldBase/index.js +2 -1
  4. package/Field/FieldBase.d.ts +1 -1
  5. package/Field/FieldBase.js.map +2 -2
  6. package/Field/FieldBaseContainer/index.js +36 -34
  7. package/Field/FieldBaseContainer.d.ts +2 -2
  8. package/Field/FieldBaseContainer.js.map +2 -2
  9. package/Field/FieldConditional.d.ts +1 -1
  10. package/Field/FieldConditional.js.map +1 -1
  11. package/Field/index.d.ts +1 -1
  12. package/Field/index.js +16 -26
  13. package/Field/index.js.map +2 -2
  14. package/Field/types.d.ts +11 -10
  15. package/Field/utils/evaluateFieldWithConditions.d.ts +2 -2
  16. package/Field/utils/evaluateFieldWithConditions.js.map +2 -2
  17. package/Field/utils/resolveField/index.js +35 -0
  18. package/Field/utils/{calculateField → resolveField}/package.json +1 -1
  19. package/Field/utils/resolveField.d.ts +3 -0
  20. package/Field/utils/resolveField.js.map +7 -0
  21. package/Field/utils/useField/index.js +4 -2
  22. package/Field/utils/useField.d.ts +1 -1
  23. package/Field/utils/useField.js.map +2 -2
  24. package/FieldArray/BaseFieldArray/index.js +76 -0
  25. package/{inputs/inputsScenarios → FieldArray/BaseFieldArray}/package.json +1 -1
  26. package/FieldArray/BaseFieldArray.d.ts +5 -0
  27. package/FieldArray/BaseFieldArray.js.map +7 -0
  28. package/FieldArray/FieldArray.stories.d.ts +1 -0
  29. package/FieldArray/FormDialog/ArrayDisplay/ArrayContainerDisplay/index.js +23 -0
  30. package/FieldArray/FormDialog/ArrayDisplay/ArrayContainerDisplay/package.json +6 -0
  31. package/FieldArray/FormDialog/ArrayDisplay/ArrayContainerDisplay.d.ts +9 -0
  32. package/FieldArray/FormDialog/ArrayDisplay/ArrayContainerDisplay.js.map +7 -0
  33. package/FieldArray/FormDialog/ArrayDisplay/ArrayDisplay.stories.d.ts +13 -0
  34. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/index.js +184 -0
  35. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/package.json +6 -0
  36. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.d.ts +26 -0
  37. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.js.map +7 -0
  38. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader/index.js +11 -0
  39. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader/package.json +6 -0
  40. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.d.ts +5 -0
  41. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.js.map +7 -0
  42. package/FieldArray/FormDialog/ArrayDisplay/__stories__/Cards.d.ts +2 -0
  43. package/FieldArray/FormDialog/ArrayDisplay/__stories__/Default.d.ts +2 -0
  44. package/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnly.d.ts +2 -0
  45. package/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnlyCards.d.ts +2 -0
  46. package/FieldArray/FormDialog/ArrayDisplay/__stories__/Sortable.d.ts +2 -0
  47. package/FieldArray/FormDialog/ArrayDisplay/__stories__/SortableCards.d.ts +2 -0
  48. package/FieldArray/FormDialog/ArrayDisplay/index.d.ts +15 -0
  49. package/FieldArray/FormDialog/ArrayDisplay/index.js +57 -0
  50. package/FieldArray/FormDialog/ArrayDisplay/index.js.map +7 -0
  51. package/FieldArray/FormDialog/ArrayDisplay/package.json +6 -0
  52. package/FieldArray/FormDialog/ArrayEditModal/index.js +158 -0
  53. package/FieldArray/FormDialog/ArrayEditModal/package.json +6 -0
  54. package/FieldArray/FormDialog/ArrayEditModal.d.ts +24 -0
  55. package/FieldArray/FormDialog/ArrayEditModal.js.map +7 -0
  56. package/FieldArray/FormDialog/index.d.ts +19 -0
  57. package/FieldArray/FormDialog/index.js +183 -348
  58. package/FieldArray/FormDialog/index.js.map +7 -0
  59. package/FieldArray/__stories__/CardsWithError.d.ts +15 -0
  60. package/FieldArray/index.d.ts +4 -2
  61. package/FieldArray/index.js +34 -56
  62. package/FieldArray/index.js.map +2 -2
  63. package/FieldObject/index.d.ts +4 -4
  64. package/FieldObject/index.js +5 -12
  65. package/FieldObject/index.js.map +2 -2
  66. package/Fieldset/FieldsetWithContext.js.map +1 -1
  67. package/Fieldset/index.d.ts +1 -1
  68. package/Fieldset/index.js.map +1 -1
  69. package/Fieldset/types.d.ts +2 -2
  70. package/FormBuilder/index.d.ts +1 -1
  71. package/FormBuilder/index.js +158 -132
  72. package/FormBuilder/index.js.map +2 -2
  73. package/FormContext.d.ts +2 -2
  74. package/FormContext.js.map +2 -2
  75. package/MultiplicityField/add-objects/index.js +10 -19
  76. package/MultiplicityField/add-objects.d.ts +1 -1
  77. package/MultiplicityField/add-objects.js.map +2 -2
  78. package/MultiplicityField/index.d.ts +2 -2
  79. package/MultiplicityField/index.js.map +2 -2
  80. package/MultiplicityField/types.d.ts +2 -2
  81. package/Questions/Questions.d.ts +1 -1
  82. package/Questions/Questions.js.map +1 -1
  83. package/Questions/QuestionsContext.d.ts +1 -1
  84. package/Questions/QuestionsContext.js.map +1 -1
  85. package/Questions/Step/Step.d.ts +1 -1
  86. package/Questions/Step/Step.js.map +1 -1
  87. package/Questions/Step/StepArrayReview.d.ts +1 -1
  88. package/Questions/Step/StepArrayReview.js.map +1 -1
  89. package/Questions/Step/StepContext.d.ts +1 -1
  90. package/Questions/Step/StepContext.js.map +1 -1
  91. package/Questions/Step/StepDescription.d.ts +1 -1
  92. package/Questions/Step/StepDescription.js.map +2 -2
  93. package/Questions/Step/StepForm.d.ts +2 -2
  94. package/Questions/Step/StepForm.js.map +1 -1
  95. package/Questions/Step/StepQuote.d.ts +1 -1
  96. package/Questions/Step/StepQuote.js.map +2 -2
  97. package/Questions/Step/StepTitle.d.ts +1 -1
  98. package/Questions/Step/StepTitle.js.map +2 -2
  99. package/Questions/Step/getAddMoreFields.d.ts +2 -2
  100. package/Questions/Step/getAddMoreFields.js.map +1 -1
  101. package/Questions/Step/types.d.ts +1 -1
  102. package/Questions/getNextStep.d.ts +1 -1
  103. package/Questions/getNextStep.js.map +1 -1
  104. package/Questions/types.d.ts +1 -1
  105. package/cjs/Field/ErrorGroup.js.map +1 -1
  106. package/cjs/Field/FieldBase/index.js +2 -1
  107. package/cjs/Field/FieldBase.js.map +2 -2
  108. package/cjs/Field/FieldBaseContainer/index.js +36 -34
  109. package/cjs/Field/FieldBaseContainer.js.map +2 -2
  110. package/cjs/Field/FieldConditional.js.map +1 -1
  111. package/cjs/Field/index.js +16 -23
  112. package/cjs/Field/index.js.map +2 -2
  113. package/cjs/Field/types.js.map +1 -1
  114. package/cjs/Field/utils/evaluateFieldWithConditions.js.map +2 -2
  115. package/cjs/Field/utils/resolveField/index.js +55 -0
  116. package/cjs/Field/utils/resolveField.js.map +7 -0
  117. package/cjs/Field/utils/useField/index.js +4 -2
  118. package/cjs/Field/utils/useField.js.map +2 -2
  119. package/cjs/FieldArray/BaseFieldArray/index.js +109 -0
  120. package/cjs/FieldArray/BaseFieldArray.js.map +7 -0
  121. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayContainerDisplay/index.js +56 -0
  122. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayContainerDisplay.js.map +7 -0
  123. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/index.js +209 -0
  124. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.js.map +7 -0
  125. package/cjs/{locales/el → FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader}/index.js +16 -7
  126. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.js.map +7 -0
  127. package/cjs/FieldArray/FormDialog/ArrayDisplay/index.js +90 -0
  128. package/cjs/FieldArray/FormDialog/ArrayDisplay/index.js.map +7 -0
  129. package/cjs/FieldArray/FormDialog/ArrayEditModal/index.js +186 -0
  130. package/cjs/FieldArray/FormDialog/ArrayEditModal.js.map +7 -0
  131. package/cjs/FieldArray/FormDialog/index.js +174 -331
  132. package/cjs/FieldArray/FormDialog/index.js.map +7 -0
  133. package/cjs/FieldArray/index.js +33 -55
  134. package/cjs/FieldArray/index.js.map +3 -3
  135. package/cjs/FieldObject/index.js +5 -9
  136. package/cjs/FieldObject/index.js.map +2 -2
  137. package/cjs/Fieldset/FieldsetWithContext.js.map +1 -1
  138. package/cjs/Fieldset/index.js.map +1 -1
  139. package/cjs/Fieldset/types.js.map +1 -1
  140. package/cjs/FormBuilder/index.js +159 -133
  141. package/cjs/FormBuilder/index.js.map +3 -3
  142. package/cjs/FormContext.js.map +2 -2
  143. package/cjs/MultiplicityField/add-objects/index.js +9 -13
  144. package/cjs/MultiplicityField/add-objects.js.map +2 -2
  145. package/cjs/MultiplicityField/index.js.map +2 -2
  146. package/cjs/MultiplicityField/types.js.map +1 -1
  147. package/cjs/Questions/Questions.js.map +1 -1
  148. package/cjs/Questions/QuestionsContext.js.map +1 -1
  149. package/cjs/Questions/Step/Step.js.map +1 -1
  150. package/cjs/Questions/Step/StepArrayReview.js.map +1 -1
  151. package/cjs/Questions/Step/StepContext.js.map +1 -1
  152. package/cjs/Questions/Step/StepDescription.js.map +2 -2
  153. package/cjs/Questions/Step/StepForm.js.map +1 -1
  154. package/cjs/Questions/Step/StepQuote.js.map +2 -2
  155. package/cjs/Questions/Step/StepTitle.js.map +2 -2
  156. package/cjs/Questions/Step/getAddMoreFields.js.map +1 -1
  157. package/cjs/Questions/Step/types.js.map +1 -1
  158. package/cjs/Questions/getNextStep.js.map +1 -1
  159. package/cjs/Questions/types.js.map +1 -1
  160. package/cjs/hooks/useFieldFocusManager/index.js +135 -0
  161. package/cjs/hooks/useFieldFocusManager.js.map +7 -0
  162. package/cjs/hooks/utils/index.js +98 -0
  163. package/cjs/hooks/utils.js.map +7 -0
  164. package/cjs/inputs/AutoCompleteInput/index.js.map +2 -2
  165. package/cjs/inputs/Checkboxes/index.js +68 -63
  166. package/cjs/inputs/Checkboxes/index.js.map +2 -2
  167. package/cjs/inputs/DateInput/index.js +10 -5
  168. package/cjs/inputs/DateInput/index.js.map +2 -2
  169. package/cjs/inputs/DateTimeInput/index.js +10 -5
  170. package/cjs/inputs/DateTimeInput/index.js.map +2 -2
  171. package/cjs/inputs/FileInput/index.js +6 -14
  172. package/cjs/inputs/FileInput/index.js.map +2 -2
  173. package/cjs/inputs/ImageInput/index.js +4 -4
  174. package/cjs/inputs/ImageInput/index.js.map +2 -2
  175. package/cjs/inputs/Input/index.js +5 -4
  176. package/cjs/inputs/Input/index.js.map +2 -2
  177. package/cjs/inputs/Label/index.js.map +1 -1
  178. package/cjs/inputs/OtpInput/index.js +36 -31
  179. package/cjs/inputs/OtpInput/index.js.map +2 -2
  180. package/cjs/inputs/Radio/index.js +7 -5
  181. package/cjs/inputs/Radio/index.js.map +3 -3
  182. package/cjs/inputs/Select/index.js +2 -2
  183. package/cjs/inputs/Select/index.js.map +2 -2
  184. package/cjs/{Field/utils → inputs/registry}/index.js +4 -4
  185. package/cjs/inputs/registry.js.map +7 -0
  186. package/cjs/lazy/index.js +12 -9
  187. package/cjs/lazy.js.map +2 -2
  188. package/cjs/registry/index.js +25 -11
  189. package/cjs/registry.js.map +2 -2
  190. package/cjs/types.js.map +1 -1
  191. package/cjs/utils/index.js +9 -0
  192. package/cjs/utils.js.map +2 -2
  193. package/cjs/validators/index.js +5 -2
  194. package/cjs/validators/index.js.map +2 -2
  195. package/cjs/validators/types.js.map +1 -1
  196. package/cjs/validators/utils/date/index.js +6 -1
  197. package/cjs/validators/utils/date.js.map +2 -2
  198. package/cjs/validators/utils/datetime/index.js +6 -1
  199. package/cjs/validators/utils/datetime.js.map +2 -2
  200. package/cjs/validators/utils/email/index.js +39 -0
  201. package/cjs/validators/utils/email.js.map +7 -0
  202. package/cjs/validators/utils/file.js.map +1 -1
  203. package/cjs/validators/utils/iban.js.map +1 -1
  204. package/cjs/validators/utils/image.js.map +1 -1
  205. package/cjs/validators/utils/index.js.map +1 -1
  206. package/cjs/validators/utils/int.js.map +1 -1
  207. package/cjs/validators/utils/number.js.map +1 -1
  208. package/cjs/validators/utils/otp.js.map +1 -1
  209. package/cjs/validators/utils/phone.js.map +1 -1
  210. package/cjs/validators/utils/postal_code.js.map +1 -1
  211. package/cjs/validators/utils/text_limit.js.map +1 -1
  212. package/hooks/useFieldFocusManager/index.js +116 -0
  213. package/hooks/useFieldFocusManager/package.json +6 -0
  214. package/hooks/useFieldFocusManager.d.ts +25 -0
  215. package/hooks/useFieldFocusManager.js.map +7 -0
  216. package/hooks/utils/index.js +73 -0
  217. package/{Field → hooks}/utils/package.json +1 -1
  218. package/hooks/utils.d.ts +18 -0
  219. package/hooks/utils.js.map +7 -0
  220. package/index.js +1 -1
  221. package/inputs/AutoCompleteInput/index.d.ts +3 -3
  222. package/inputs/AutoCompleteInput/index.js +1 -3
  223. package/inputs/AutoCompleteInput/index.js.map +2 -2
  224. package/inputs/Checkboxes/index.d.ts +5 -3
  225. package/inputs/Checkboxes/index.js +68 -63
  226. package/inputs/Checkboxes/index.js.map +2 -2
  227. package/inputs/DateInput/index.d.ts +2 -5
  228. package/inputs/DateInput/index.js +10 -5
  229. package/inputs/DateInput/index.js.map +2 -2
  230. package/inputs/DateTimeInput/index.d.ts +2 -5
  231. package/inputs/DateTimeInput/index.js +10 -5
  232. package/inputs/DateTimeInput/index.js.map +2 -2
  233. package/inputs/FileInput/index.d.ts +4 -4
  234. package/inputs/FileInput/index.js +7 -18
  235. package/inputs/FileInput/index.js.map +2 -2
  236. package/inputs/ImageInput/index.d.ts +2 -2
  237. package/inputs/ImageInput/index.js +4 -4
  238. package/inputs/ImageInput/index.js.map +2 -2
  239. package/inputs/Input/index.d.ts +3 -1
  240. package/inputs/Input/index.js +5 -4
  241. package/inputs/Input/index.js.map +2 -2
  242. package/inputs/Label/index.d.ts +1 -1
  243. package/inputs/Label/index.js.map +1 -1
  244. package/inputs/OtpInput/index.d.ts +1 -5
  245. package/inputs/OtpInput/index.js +36 -31
  246. package/inputs/OtpInput/index.js.map +2 -2
  247. package/inputs/Radio/index.d.ts +6 -4
  248. package/inputs/Radio/index.js +7 -5
  249. package/inputs/Radio/index.js.map +3 -3
  250. package/inputs/Select/index.d.ts +4 -2
  251. package/inputs/Select/index.js +2 -2
  252. package/inputs/Select/index.js.map +2 -2
  253. package/{Field/utils → inputs/registry}/index.js +1 -1
  254. package/{locales/el → inputs/registry}/package.json +1 -1
  255. package/{Field/utils/index.d.ts → inputs/registry.d.ts} +2 -1
  256. package/inputs/registry.js.map +7 -0
  257. package/lazy/index.js +12 -9
  258. package/package.json +4 -4
  259. package/registry/index.js +25 -11
  260. package/src/Field/ErrorGroup.tsx +3 -3
  261. package/src/Field/FieldBase.tsx +3 -2
  262. package/src/Field/FieldBaseContainer.tsx +68 -58
  263. package/src/Field/FieldConditional.tsx +1 -1
  264. package/src/Field/index.tsx +16 -36
  265. package/src/Field/types.tsx +11 -12
  266. package/src/Field/utils/evaluateFieldWithConditions.ts +5 -2
  267. package/src/Field/utils/resolveField.ts +58 -0
  268. package/src/Field/utils/useField.ts +3 -1
  269. package/src/FieldArray/BaseFieldArray.tsx +97 -0
  270. package/src/FieldArray/FieldArray.stories.js +1 -0
  271. package/src/FieldArray/FormDialog/ArrayDisplay/ArrayContainerDisplay.tsx +45 -0
  272. package/src/FieldArray/FormDialog/ArrayDisplay/ArrayDisplay.stories.js +14 -0
  273. package/src/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.tsx +337 -0
  274. package/src/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.tsx +15 -0
  275. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/Cards.tsx +88 -0
  276. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/Default.tsx +93 -0
  277. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnly.tsx +79 -0
  278. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnlyCards.tsx +75 -0
  279. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/Sortable.tsx +93 -0
  280. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/SortableCards.tsx +88 -0
  281. package/src/FieldArray/FormDialog/ArrayDisplay/index.test.tsx +44 -0
  282. package/src/FieldArray/FormDialog/ArrayDisplay/index.tsx +67 -0
  283. package/src/FieldArray/FormDialog/ArrayEditModal.tsx +241 -0
  284. package/src/FieldArray/FormDialog/index.tsx +302 -0
  285. package/src/FieldArray/__stories__/CardsWithError.tsx +124 -0
  286. package/src/FieldArray/__tests__/fieldset-multiplicity.spec.tsx +271 -0
  287. package/src/FieldArray/__tests__/multiplicity-attachment.spec.tsx +280 -0
  288. package/src/FieldArray/__tests__/multiplicity-optional.spec.tsx +232 -0
  289. package/src/FieldArray/__tests__/multiplicity-required.spec.tsx +170 -0
  290. package/src/FieldArray/__tests__/nested-fieldset-multiplicity.spec.tsx +627 -0
  291. package/src/FieldArray/__tests__/preference-multiple-choice.spec.tsx +222 -0
  292. package/src/FieldArray/index.spec.tsx +355 -0
  293. package/src/FieldArray/index.test.tsx +4 -0
  294. package/src/FieldArray/index.tsx +43 -63
  295. package/src/FieldObject/index.tsx +9 -17
  296. package/src/Fieldset/FieldsetWithContext.tsx +1 -1
  297. package/src/Fieldset/index.tsx +1 -1
  298. package/src/Fieldset/types.tsx +2 -2
  299. package/src/FormBuilder/index.tsx +190 -144
  300. package/src/FormBuilder/scenarios.test.tsx +760 -1
  301. package/src/FormContext.tsx +3 -2
  302. package/src/MultiplicityField/__stories__/PreviewDisplay.tsx +1 -3
  303. package/src/MultiplicityField/add-objects.tsx +12 -21
  304. package/src/MultiplicityField/index.tsx +3 -2
  305. package/src/MultiplicityField/types.ts +5 -2
  306. package/src/Questions/Questions.tsx +2 -2
  307. package/src/Questions/QuestionsContext.tsx +1 -1
  308. package/src/Questions/Step/Step.tsx +1 -1
  309. package/src/Questions/Step/StepArrayReview.tsx +2 -2
  310. package/src/Questions/Step/StepContext.tsx +1 -1
  311. package/src/Questions/Step/StepDescription.tsx +2 -1
  312. package/src/Questions/Step/StepForm.tsx +2 -2
  313. package/src/Questions/Step/StepQuote.tsx +2 -1
  314. package/src/Questions/Step/StepTitle.tsx +2 -1
  315. package/src/Questions/Step/getAddMoreFields.tsx +2 -2
  316. package/src/Questions/Step/types.tsx +1 -1
  317. package/src/Questions/getNextStep.tsx +1 -1
  318. package/src/Questions/types.tsx +1 -1
  319. package/src/hooks/__tests__/useFieldFocusManager.spec.tsx +1079 -0
  320. package/src/hooks/__tests__/utils.spec.ts +568 -0
  321. package/src/hooks/useFieldFocusManager.ts +162 -0
  322. package/src/hooks/utils.ts +122 -0
  323. package/src/inputs/AutoCompleteInput/index.tsx +4 -6
  324. package/src/inputs/Checkboxes/index.tsx +98 -87
  325. package/src/inputs/DateInput/index.tsx +19 -6
  326. package/src/inputs/DateTimeInput/index.tsx +19 -6
  327. package/src/inputs/FileInput/index.tsx +15 -21
  328. package/src/inputs/ImageInput/index.tsx +6 -6
  329. package/src/inputs/Input/index.tsx +12 -8
  330. package/src/inputs/Label/index.tsx +1 -1
  331. package/src/inputs/OtpInput/index.tsx +43 -34
  332. package/src/inputs/Radio/index.tsx +33 -22
  333. package/src/inputs/Select/index.tsx +6 -4
  334. package/src/{Field/utils/index.ts → inputs/registry.ts} +3 -1
  335. package/src/lazy.js +12 -9
  336. package/src/registry.js +25 -11
  337. package/src/types.tsx +13 -5
  338. package/src/utils.ts +14 -2
  339. package/src/validators/index.ts +15 -11
  340. package/src/validators/types.ts +1 -1
  341. package/src/validators/utils/date.ts +8 -3
  342. package/src/validators/utils/datetime.ts +8 -3
  343. package/src/validators/utils/email.ts +11 -0
  344. package/src/validators/utils/file.ts +2 -2
  345. package/src/validators/utils/iban.ts +2 -2
  346. package/src/validators/utils/image.ts +2 -2
  347. package/src/validators/utils/index.ts +2 -2
  348. package/src/validators/utils/int.ts +1 -1
  349. package/src/validators/utils/number.ts +1 -1
  350. package/src/validators/utils/otp.ts +2 -2
  351. package/src/validators/utils/phone.ts +2 -2
  352. package/src/validators/utils/postal_code.ts +2 -2
  353. package/src/validators/utils/text_limit.ts +2 -2
  354. package/types.d.ts +9 -4
  355. package/types.js.map +1 -1
  356. package/utils/index.js +8 -0
  357. package/utils.d.ts +2 -1
  358. package/utils.js.map +2 -2
  359. package/validators/index.d.ts +5 -5
  360. package/validators/index.js +5 -2
  361. package/validators/index.js.map +2 -2
  362. package/validators/types.d.ts +1 -1
  363. package/validators/utils/date/index.js +6 -1
  364. package/validators/utils/date.d.ts +2 -2
  365. package/validators/utils/date.js.map +2 -2
  366. package/validators/utils/datetime/index.js +6 -1
  367. package/validators/utils/datetime.d.ts +2 -2
  368. package/validators/utils/datetime.js.map +2 -2
  369. package/validators/utils/email/index.js +16 -0
  370. package/validators/utils/email/package.json +6 -0
  371. package/validators/utils/email.d.ts +5 -0
  372. package/validators/utils/email.js.map +7 -0
  373. package/validators/utils/file.d.ts +2 -2
  374. package/validators/utils/file.js.map +1 -1
  375. package/validators/utils/iban.d.ts +2 -2
  376. package/validators/utils/iban.js.map +1 -1
  377. package/validators/utils/image.d.ts +2 -2
  378. package/validators/utils/image.js.map +1 -1
  379. package/validators/utils/index.d.ts +2 -2
  380. package/validators/utils/index.js.map +1 -1
  381. package/validators/utils/int.d.ts +1 -1
  382. package/validators/utils/int.js.map +1 -1
  383. package/validators/utils/number.d.ts +1 -1
  384. package/validators/utils/number.js.map +1 -1
  385. package/validators/utils/otp.d.ts +2 -2
  386. package/validators/utils/otp.js.map +1 -1
  387. package/validators/utils/phone.d.ts +2 -2
  388. package/validators/utils/phone.js.map +1 -1
  389. package/validators/utils/postal_code.d.ts +2 -2
  390. package/validators/utils/postal_code.js.map +1 -1
  391. package/validators/utils/text_limit.d.ts +2 -2
  392. package/validators/utils/text_limit.js.map +1 -1
  393. package/Field/utils/calculateField/index.js +0 -27
  394. package/Field/utils/calculateField.d.ts +0 -2
  395. package/Field/utils/calculateField.js.map +0 -7
  396. package/Field/utils/index.js.map +0 -7
  397. package/FieldArray/FormDialog.d.ts +0 -67
  398. package/FieldArray/FormDialog.js.map +0 -7
  399. package/FormBuilder/index.test.d.ts +0 -1
  400. package/FormBuilder/interaction.test.d.ts +0 -1
  401. package/FormBuilder/scenarios.test.d.ts +0 -88
  402. package/MultiplicityField/index.test.d.ts +0 -1
  403. package/Questions/index.spec.d.ts +0 -1
  404. package/Questions/index.test.d.ts +0 -1
  405. package/cjs/Field/utils/calculateField/index.js +0 -50
  406. package/cjs/Field/utils/calculateField.js.map +0 -7
  407. package/cjs/Field/utils/index.js.map +0 -7
  408. package/cjs/FieldArray/FormDialog.js.map +0 -7
  409. package/cjs/inputs/inputsScenarios/index.js +0 -533
  410. package/cjs/inputs/inputsScenarios.js.map +0 -7
  411. package/cjs/locales/el.js.map +0 -7
  412. package/inputs/AutoCompleteInput/index.test.d.ts +0 -1
  413. package/inputs/Checkboxes/index.test.d.ts +0 -1
  414. package/inputs/DateInput/index.test.d.ts +0 -1
  415. package/inputs/DateTimeInput/index.test.d.ts +0 -1
  416. package/inputs/FileInput/index.test.d.ts +0 -1
  417. package/inputs/ImageInput/index.test.d.ts +0 -1
  418. package/inputs/Input/index.test.d.ts +0 -1
  419. package/inputs/Label/index.test.d.ts +0 -1
  420. package/inputs/OtpInput/index.test.d.ts +0 -1
  421. package/inputs/Radio/index.test.d.ts +0 -1
  422. package/inputs/Select/index.test.d.ts +0 -1
  423. package/inputs/inputsScenarios/index.js +0 -499
  424. package/inputs/inputsScenarios.d.ts +0 -296
  425. package/inputs/inputsScenarios.js.map +0 -7
  426. package/locales/el/index.js +0 -6
  427. package/locales/el.d.ts +0 -2
  428. package/locales/el.js.map +0 -7
  429. package/src/Field/utils/calculateField.ts +0 -49
  430. package/src/FieldArray/FormDialog.tsx +0 -568
  431. package/src/inputs/inputsScenarios.ts +0 -496
  432. package/src/locales/el.ts +0 -3
  433. /package/{FieldArray/index.test.d.ts → hooks/__tests__/utils.spec.d.ts} +0 -0
@@ -0,0 +1,135 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var useFieldFocusManager_exports = {};
19
+ __export(useFieldFocusManager_exports, {
20
+ default: () => useFieldFocusManager_default,
21
+ useFieldFocusManager: () => useFieldFocusManager
22
+ });
23
+ module.exports = __toCommonJS(useFieldFocusManager_exports);
24
+ var import_react = require("react");
25
+ var import_utils = require("@digigov/form/hooks/utils");
26
+ function useFieldFocusManager({
27
+ enabled = true,
28
+ control,
29
+ subscribe,
30
+ setFocus
31
+ }) {
32
+ const customFocusableElements = (0, import_react.useRef)(/* @__PURE__ */ new Map());
33
+ const focusableElements = (0, import_react.useRef)(/* @__PURE__ */ new Map());
34
+ (0, import_react.useEffect)(() => {
35
+ if (!enabled) {
36
+ customFocusableElements.current.clear();
37
+ focusableElements.current.clear();
38
+ return;
39
+ }
40
+ }, [enabled]);
41
+ const updateFocusableElements = (0, import_react.useCallback)(() => {
42
+ focusableElements.current.clear();
43
+ const formElements = (0, import_utils.extractFieldEntries)(control._fields);
44
+ const customFieldRefs = (0, import_utils.mapElementsToFields)(
45
+ customFocusableElements.current
46
+ );
47
+ const customElements = (0, import_utils.extractFieldEntries)(customFieldRefs);
48
+ const combinedElements = new Map(formElements);
49
+ customElements.forEach((element, fieldName) => {
50
+ combinedElements.set(fieldName, element);
51
+ });
52
+ focusableElements.current = (0, import_utils.sortElementsByPosition)(combinedElements);
53
+ }, [control._fields]);
54
+ const registerCustomFocusableElement = (0, import_react.useCallback)(
55
+ (fieldName, element) => {
56
+ if (fieldName && element) {
57
+ customFocusableElements.current.set(fieldName, element);
58
+ updateFocusableElements();
59
+ }
60
+ return function unregister() {
61
+ customFocusableElements.current.delete(fieldName);
62
+ updateFocusableElements();
63
+ };
64
+ },
65
+ [updateFocusableElements]
66
+ );
67
+ (0, import_react.useEffect)(() => {
68
+ if (!enabled || !subscribe) return;
69
+ const callback = subscribe({
70
+ formState: {
71
+ errors: true
72
+ // Subscribe to any form state change that might indicate field structure changes
73
+ },
74
+ callback: () => {
75
+ setTimeout(updateFocusableElements, 0);
76
+ }
77
+ });
78
+ updateFocusableElements();
79
+ return () => callback();
80
+ }, [enabled, updateFocusableElements, subscribe]);
81
+ const focusOnError = (0, import_react.useCallback)(
82
+ (errors) => {
83
+ if (!enabled) return;
84
+ if (!errors || Object.keys(errors).length === 0) return;
85
+ for (const [fieldName, element] of Array.from(
86
+ focusableElements.current
87
+ )) {
88
+ if (hasFieldError(errors, fieldName)) {
89
+ if (element && typeof element.focus === "function") {
90
+ element.focus();
91
+ return;
92
+ } else if (element && element.name) {
93
+ setFocus(fieldName);
94
+ return;
95
+ }
96
+ }
97
+ }
98
+ },
99
+ [enabled, setFocus]
100
+ );
101
+ return {
102
+ /**
103
+ * Registers a custom focusable element with the given field name.
104
+ *
105
+ * Returns a callback function to unregister the element by field name.
106
+ *
107
+ * @param fieldName - The name of the field to associate with the element.
108
+ * @param element - The HTML element to register as focusable.
109
+ */
110
+ registerCustomFocusableElement,
111
+ focusOnError
112
+ };
113
+ }
114
+ function hasFieldError(errors, fieldName) {
115
+ if (!errors || typeof errors !== "object") return false;
116
+ if (errors[fieldName]) {
117
+ return true;
118
+ }
119
+ const keys = fieldName.split(/[.[\]]+/).filter(Boolean);
120
+ let current = errors;
121
+ for (const key of keys) {
122
+ if (current && typeof current === "object") {
123
+ current = current[key];
124
+ } else {
125
+ return false;
126
+ }
127
+ }
128
+ return !!current;
129
+ }
130
+ var useFieldFocusManager_default = useFieldFocusManager;
131
+ // Annotate the CommonJS export names for ESM import in node:
132
+ 0 && (module.exports = {
133
+ useFieldFocusManager
134
+ });
135
+ //# sourceMappingURL=useFieldFocusManager.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/useFieldFocusManager.ts"],
4
+ "sourcesContent": ["import { useCallback, useEffect, useRef } from 'react';\nimport type { Control, FieldValues, Ref, UseFormReturn } from 'react-hook-form';\nimport {\n extractFieldEntries,\n mapElementsToFields,\n sortElementsByPosition,\n} from '@digigov/form/hooks/utils';\n\nexport interface UseFieldFocusManagerProps<T extends FieldValues> {\n enabled?: boolean;\n control: Control<T>;\n subscribe: UseFormReturn['subscribe'];\n setFocus: UseFormReturn['setFocus'];\n}\n\n/**\n * Custom hook to manage focus on form fields.\n *\n * It collects all focusable elements from the form fields and sorts them according to their position in the DOM.\n */\nexport function useFieldFocusManager<T extends FieldValues>({\n enabled = true,\n control,\n subscribe,\n setFocus,\n}: UseFieldFocusManagerProps<T>) {\n /** Array to hold any external focusable elements registered by the user */\n const customFocusableElements = useRef(new Map<string, HTMLElement>());\n /** Map to hold focusable elements by field name */\n const focusableElements = useRef(new Map<string, Ref>());\n\n // When disabled, clear custom focusable elements and focusable elements map\n useEffect(() => {\n if (!enabled) {\n customFocusableElements.current.clear();\n focusableElements.current.clear();\n return;\n }\n }, [enabled]);\n\n const updateFocusableElements = useCallback(() => {\n // Clear existing focusable elements\n focusableElements.current.clear();\n // Extract from form fields\n const formElements = extractFieldEntries(control._fields);\n // Extract from custom elements (convert to FieldRefs format first)\n const customFieldRefs = mapElementsToFields(\n customFocusableElements.current\n );\n const customElements = extractFieldEntries(customFieldRefs);\n\n // Combine both maps\n const combinedElements = new Map(formElements);\n customElements.forEach((element, fieldName) => {\n combinedElements.set(fieldName, element);\n });\n\n // Sort once by DOM position\n focusableElements.current = sortElementsByPosition(combinedElements);\n }, [control._fields]);\n\n // Register / unregister custom focusable elements\n const registerCustomFocusableElement = useCallback(\n (fieldName: string, element: HTMLElement) => {\n if (fieldName && element) {\n customFocusableElements.current.set(fieldName, element);\n updateFocusableElements();\n }\n\n return function unregister() {\n customFocusableElements.current.delete(fieldName);\n updateFocusableElements();\n };\n },\n [updateFocusableElements]\n );\n\n // Collect focusable elements when fields change\n useEffect(() => {\n if (!enabled || !subscribe) return;\n const callback = subscribe({\n formState: {\n errors: true,\n // Subscribe to any form state change that might indicate field structure changes\n },\n callback: () => {\n // Defer to next tick to ensure DOM is updated\n setTimeout(updateFocusableElements, 0);\n },\n });\n\n // Initial update\n updateFocusableElements();\n\n return () => callback();\n }, [enabled, updateFocusableElements, subscribe]);\n\n // Subscribe to errors and focus the first field (according to the DOM) with an error\n const focusOnError = useCallback(\n (errors: Record<string, any>) => {\n if (!enabled) return;\n if (!errors || Object.keys(errors).length === 0) return;\n for (const [fieldName, element] of Array.from(\n focusableElements.current\n )) {\n if (hasFieldError(errors, fieldName)) {\n if (element && typeof element.focus === 'function') {\n element.focus(); // Focus the element directly\n return;\n } else if (element && element.name) {\n setFocus(fieldName); // Field is registered with react-hook-form\n return;\n }\n }\n }\n },\n [enabled, setFocus]\n );\n\n return {\n /**\n * Registers a custom focusable element with the given field name.\n *\n * Returns a callback function to unregister the element by field name.\n *\n * @param fieldName - The name of the field to associate with the element.\n * @param element - The HTML element to register as focusable.\n */\n registerCustomFocusableElement,\n focusOnError,\n };\n}\n\n// Helper function to check for nested field errors\nfunction hasFieldError(\n errors: Record<string, any>,\n fieldName: string\n): boolean {\n if (!errors || typeof errors !== 'object') return false;\n\n // Handle direct field names first\n if (errors[fieldName]) {\n return true;\n }\n\n // Split the field name and traverse the error object\n const keys = fieldName.split(/[.[\\]]+/).filter(Boolean);\n let current = errors;\n\n for (const key of keys) {\n if (current && typeof current === 'object') {\n current = current[key];\n } else {\n return false;\n }\n }\n\n // Check if we found a truthy error value\n return !!current;\n}\n\nexport default useFieldFocusManager;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,98 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var utils_exports = {};
19
+ __export(utils_exports, {
20
+ extractFieldEntries: () => extractFieldEntries,
21
+ mapElementsToFields: () => mapElementsToFields,
22
+ sortElementsByPosition: () => sortElementsByPosition
23
+ });
24
+ module.exports = __toCommonJS(utils_exports);
25
+ function extractFieldEntries(fields, prefix = "") {
26
+ const elementMap = /* @__PURE__ */ new Map();
27
+ const fieldEntries = Object.entries(fields);
28
+ if (fieldEntries.length === 0) return elementMap;
29
+ Object.entries(fields).forEach(([fieldName, field]) => {
30
+ if (!field) return;
31
+ const fullFieldName = prefix ? `${prefix}.${fieldName}` : fieldName;
32
+ if (isField(field)) {
33
+ const element = field._f.ref;
34
+ if (element) {
35
+ elementMap.set(fullFieldName, element);
36
+ }
37
+ } else if (isFieldRefs(field)) {
38
+ const keys = Object.keys(field);
39
+ const numericKeys = keys.filter((key) => /^\d+$/.test(key));
40
+ const hasNumericKeys = numericKeys.length > 0;
41
+ if (hasNumericKeys) {
42
+ numericKeys.forEach((index) => {
43
+ const arrayItem = field[index];
44
+ if (arrayItem && isFieldRefs(arrayItem)) {
45
+ const nestedEntries = extractFieldEntries(
46
+ arrayItem,
47
+ `${fullFieldName}.${index}`
48
+ );
49
+ nestedEntries.forEach((element, fieldName2) => {
50
+ elementMap.set(fieldName2, element);
51
+ });
52
+ }
53
+ });
54
+ } else {
55
+ const nestedEntries = extractFieldEntries(field, fullFieldName);
56
+ nestedEntries.forEach((element, fieldName2) => {
57
+ elementMap.set(fieldName2, element);
58
+ });
59
+ }
60
+ }
61
+ });
62
+ return elementMap;
63
+ }
64
+ const isField = (fieldRef) => Boolean(
65
+ fieldRef && typeof fieldRef === "object" && "_f" in fieldRef && fieldRef._f && "ref" in fieldRef._f
66
+ );
67
+ const isFieldRefs = (fieldRef) => Boolean(fieldRef && typeof fieldRef === "object" && !isField(fieldRef));
68
+ function sortElementsByPosition(elements) {
69
+ const sortedEntries = Array.from(elements.entries()).sort(([, a], [, b]) => {
70
+ if (isActualHTMLElement(a) && isActualHTMLElement(b)) {
71
+ const aPosition = a.compareDocumentPosition(b);
72
+ if (aPosition & Node.DOCUMENT_POSITION_FOLLOWING) return -1;
73
+ if (aPosition & Node.DOCUMENT_POSITION_PRECEDING) return 1;
74
+ }
75
+ return 0;
76
+ });
77
+ return new Map(sortedEntries);
78
+ }
79
+ const isActualHTMLElement = (ref) => ref instanceof HTMLElement && typeof ref.focus === "function";
80
+ function mapElementsToFields(elements) {
81
+ const fields = {};
82
+ elements.forEach((element, fieldName) => {
83
+ fields[fieldName] = {
84
+ _f: {
85
+ ref: element,
86
+ name: fieldName
87
+ }
88
+ };
89
+ });
90
+ return fields;
91
+ }
92
+ // Annotate the CommonJS export names for ESM import in node:
93
+ 0 && (module.exports = {
94
+ extractFieldEntries,
95
+ mapElementsToFields,
96
+ sortElementsByPosition
97
+ });
98
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/utils.ts"],
4
+ "sourcesContent": ["import type { Field, FieldRefs, Ref } from 'react-hook-form';\n\n/**\n * Recursively extracts field entries from nested form field structure.\n * Handles both regular nested objects and array-like structures.\n */\nexport function extractFieldEntries(\n fields: FieldRefs,\n prefix = ''\n): Map<string, Ref> {\n const elementMap = new Map<string, Ref>();\n\n const fieldEntries = Object.entries(fields);\n if (fieldEntries.length === 0) return elementMap;\n\n Object.entries(fields).forEach(([fieldName, field]) => {\n if (!field) return;\n const fullFieldName = prefix ? `${prefix}.${fieldName}` : fieldName;\n\n // Handle direct field with ref\n if (isField(field)) {\n const element = field._f.ref;\n if (element) {\n elementMap.set(fullFieldName, element);\n }\n }\n\n // Handle array fields (numeric keys indicate array indices)\n else if (isFieldRefs(field)) {\n // Check if any keys are numeric (indicating an array structure)\n // Filter out non-numeric keys like '_f' which contains field metadata\n const keys = Object.keys(field);\n const numericKeys = keys.filter((key) => /^\\d+$/.test(key));\n const hasNumericKeys = numericKeys.length > 0;\n\n if (hasNumericKeys) {\n // Process only the numeric array indices, ignore metadata keys like '_f'\n numericKeys.forEach((index) => {\n const arrayItem = field[index];\n if (arrayItem && isFieldRefs(arrayItem)) {\n const nestedEntries = extractFieldEntries(\n arrayItem,\n `${fullFieldName}.${index}`\n );\n // Merge nested entries into main map\n nestedEntries.forEach((element, fieldName) => {\n elementMap.set(fieldName, element);\n });\n }\n });\n } else {\n // Handle regular nested objects\n const nestedEntries = extractFieldEntries(field, fullFieldName);\n // Merge nested entries into main map\n nestedEntries.forEach((element, fieldName) => {\n elementMap.set(fieldName, element);\n });\n }\n }\n });\n\n return elementMap;\n}\n\n/** Type guard to check if a ref is a Field object */\nconst isField = (fieldRef: FieldRefs[keyof FieldRefs]): fieldRef is Field =>\n Boolean(\n fieldRef &&\n typeof fieldRef === 'object' &&\n '_f' in fieldRef &&\n fieldRef._f &&\n 'ref' in fieldRef._f\n );\n\n/** Type guard to check if a ref is a FieldRefs object (nested fields) */\nconst isFieldRefs = (\n fieldRef: FieldRefs[keyof FieldRefs]\n): fieldRef is FieldRefs =>\n Boolean(fieldRef && typeof fieldRef === 'object' && !isField(fieldRef));\n\n/**\n * Sorts a map of HTML elements by their position in the DOM.\n * Elements appearing earlier in the document order come first.\n */\nexport function sortElementsByPosition(\n elements: Map<string, Ref>\n): Map<string, Ref> {\n const sortedEntries = Array.from(elements.entries()).sort(([, a], [, b]) => {\n if (isActualHTMLElement(a) && isActualHTMLElement(b)) {\n const aPosition = a.compareDocumentPosition(b);\n if (aPosition & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n if (aPosition & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n }\n return 0; // keep original order\n });\n return new Map(sortedEntries);\n}\n\n/** Type guard to check if a ref is an actual HTML element */\nconst isActualHTMLElement = (ref: Ref): ref is Ref & HTMLElement =>\n ref instanceof HTMLElement && typeof ref.focus === 'function';\n\n/**\n * Maps a collection of HTML elements to a FieldRefs structure.\n *\n * It's not a direct conversion, but rather a way to create a simple FieldRefs\n * structure that can be used with React Hook Form.\n */\nexport function mapElementsToFields(\n elements: Map<string, HTMLElement>\n): Record<string, Field> {\n const fields = {};\n elements.forEach((element, fieldName) => {\n fields[fieldName] = {\n _f: {\n ref: element,\n name: fieldName,\n },\n };\n });\n return fields;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,SAAS,oBACd,QACA,SAAS,IACS;AAClB,QAAM,aAAa,oBAAI,IAAiB;AAExC,QAAM,eAAe,OAAO,QAAQ,MAAM;AAC1C,MAAI,aAAa,WAAW,EAAG,QAAO;AAEtC,SAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,WAAW,KAAK,MAAM;AACrD,QAAI,CAAC,MAAO;AACZ,UAAM,gBAAgB,SAAS,GAAG,MAAM,IAAI,SAAS,KAAK;AAG1D,QAAI,QAAQ,KAAK,GAAG;AAClB,YAAM,UAAU,MAAM,GAAG;AACzB,UAAI,SAAS;AACX,mBAAW,IAAI,eAAe,OAAO;AAAA,MACvC;AAAA,IACF,WAGS,YAAY,KAAK,GAAG;AAG3B,YAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,YAAM,cAAc,KAAK,OAAO,CAAC,QAAQ,QAAQ,KAAK,GAAG,CAAC;AAC1D,YAAM,iBAAiB,YAAY,SAAS;AAE5C,UAAI,gBAAgB;AAElB,oBAAY,QAAQ,CAAC,UAAU;AAC7B,gBAAM,YAAY,MAAM,KAAK;AAC7B,cAAI,aAAa,YAAY,SAAS,GAAG;AACvC,kBAAM,gBAAgB;AAAA,cACpB;AAAA,cACA,GAAG,aAAa,IAAI,KAAK;AAAA,YAC3B;AAEA,0BAAc,QAAQ,CAAC,SAASA,eAAc;AAC5C,yBAAW,IAAIA,YAAW,OAAO;AAAA,YACnC,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AAEL,cAAM,gBAAgB,oBAAoB,OAAO,aAAa;AAE9D,sBAAc,QAAQ,CAAC,SAASA,eAAc;AAC5C,qBAAW,IAAIA,YAAW,OAAO;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAGA,MAAM,UAAU,CAAC,aACf;AAAA,EACE,YACE,OAAO,aAAa,YACpB,QAAQ,YACR,SAAS,MACT,SAAS,SAAS;AACtB;AAGF,MAAM,cAAc,CAClB,aAEA,QAAQ,YAAY,OAAO,aAAa,YAAY,CAAC,QAAQ,QAAQ,CAAC;AAMjE,SAAS,uBACd,UACkB;AAClB,QAAM,gBAAgB,MAAM,KAAK,SAAS,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM;AAC1E,QAAI,oBAAoB,CAAC,KAAK,oBAAoB,CAAC,GAAG;AACpD,YAAM,YAAY,EAAE,wBAAwB,CAAC;AAC7C,UAAI,YAAY,KAAK,4BAA6B,QAAO;AACzD,UAAI,YAAY,KAAK,4BAA6B,QAAO;AAAA,IAC3D;AACA,WAAO;AAAA,EACT,CAAC;AACD,SAAO,IAAI,IAAI,aAAa;AAC9B;AAGA,MAAM,sBAAsB,CAAC,QAC3B,eAAe,eAAe,OAAO,IAAI,UAAU;AAQ9C,SAAS,oBACd,UACuB;AACvB,QAAM,SAAS,CAAC;AAChB,WAAS,QAAQ,CAAC,SAAS,cAAc;AACvC,WAAO,SAAS,IAAI;AAAA,MAClB,IAAI;AAAA,QACF,KAAK;AAAA,QACL,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO;AACT;",
6
+ "names": ["fieldName"]
7
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/inputs/AutoCompleteInput/index.tsx"],
4
- "sourcesContent": ["import React, { useCallback } from 'react';\nimport { ControlledFieldProps } from '@digigov/form/Field/types';\nimport { FieldOptionProps } from '@digigov/form/inputs/Label';\nimport {\n AutoComplete,\n AutoCompleteProps as UIAutoCompleteProps,\n} from '@digigov/ui/form/AutoComplete';\nimport { Hint } from '@digigov/ui/typography/Hint';\nimport { Base } from '@digigov/ui/utils/Base';\nexport interface AutoCompleteInputExtra\n extends Omit<\n UIAutoCompleteProps,\n | 'source'\n | 'id'\n | 'templates'\n | 'defaultValue'\n | 'onConfirm'\n | 'dropdownArrow'\n > {\n options: FieldOptionProps[];\n}\n\nexport interface AutoCompleteInputProps\n extends Omit<ControlledFieldProps, 'value' | 'onChange' | 'extra'> {\n extra: AutoCompleteInputExtra;\n value: string;\n onChange: (v: string | string[] | undefined) => void;\n}\n\nexport const AutoCompleteInput: React.FC<AutoCompleteInputProps> = ({\n name,\n type,\n extra: { options },\n onChange,\n value,\n ...props\n}) => {\n const suggest = useCallback(\n function suggest(\n query: string,\n syncResults: (options: any[]) => void\n ): void {\n syncResults(\n query\n ? options.filter(function (option) {\n return (\n `${option.value} ${option.label?.primary || ''} ${\n option.label?.secondary || ''\n }`\n .toLowerCase()\n .indexOf(query.toLowerCase()) !== -1\n );\n })\n : options\n );\n },\n [options]\n );\n\n return (\n <AutoComplete\n multiple={type === 'choice:multiple' ? true : false}\n source={suggest}\n onConfirm={(value) => {\n if (Array.isArray(value)) {\n const selectedValues = value.map((item) => item.value);\n if (selectedValues.length > 0) onChange(selectedValues);\n else onChange(undefined);\n } else {\n onChange(value.value);\n }\n }}\n templates={{\n suggestion({ label, value }) {\n return (\n <Base as=\"div\">\n {(label && label.primary && label.primary) || value}\n {label && label.secondary && <Hint>{label.secondary}</Hint>}\n </Base>\n );\n },\n inputValue: (option) => {\n if (!option) {\n return '';\n }\n return option.label.primary || option.value;\n },\n }}\n {...{\n ...props,\n reset: undefined,\n required: undefined,\n Field: undefined,\n }}\n name={name}\n id={`${name}-id`}\n defaultValue={value}\n />\n );\n};\n\nexport default AutoCompleteInput;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAmC;AAGnC,0BAGO;AACP,kBAAqB;AACrB,kBAAqB;AAqBd,MAAM,oBAAsD,CAAC;AAAA,EAClE;AAAA,EACA;AAAA,EACA,OAAO,EAAE,QAAQ;AAAA,EACjB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,cAAU;AAAA,IACd,SAASA,SACP,OACA,aACM;AACN;AAAA,QACE,QACI,QAAQ,OAAO,SAAU,QAAQ;AAC/B,iBACE,GAAG,OAAO,KAAK,IAAI,OAAO,OAAO,WAAW,EAAE,IAC5C,OAAO,OAAO,aAAa,EAC7B,GACG,YAAY,EACZ,QAAQ,MAAM,YAAY,CAAC,MAAM;AAAA,QAExC,CAAC,IACD;AAAA,MACN;AAAA,IACF;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAEA,SACE,6BAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,SAAS,oBAAoB,OAAO;AAAA,MAC9C,QAAQ;AAAA,MACR,WAAW,CAACC,WAAU;AACpB,YAAI,MAAM,QAAQA,MAAK,GAAG;AACxB,gBAAM,iBAAiBA,OAAM,IAAI,CAAC,SAAS,KAAK,KAAK;AACrD,cAAI,eAAe,SAAS,EAAG,UAAS,cAAc;AAAA,cACjD,UAAS,MAAS;AAAA,QACzB,OAAO;AACL,mBAASA,OAAM,KAAK;AAAA,QACtB;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,WAAW,EAAE,OAAO,OAAAA,OAAM,GAAG;AAC3B,iBACE,6BAAAD,QAAA,cAAC,oBAAK,IAAG,SACL,SAAS,MAAM,WAAW,MAAM,WAAYC,QAC7C,SAAS,MAAM,aAAa,6BAAAD,QAAA,cAAC,wBAAM,MAAM,SAAU,CACtD;AAAA,QAEJ;AAAA,QACA,YAAY,CAAC,WAAW;AACtB,cAAI,CAAC,QAAQ;AACX,mBAAO;AAAA,UACT;AACA,iBAAO,OAAO,MAAM,WAAW,OAAO;AAAA,QACxC;AAAA,MACF;AAAA,MACC,GAAG;AAAA,QACF,GAAG;AAAA,QACH,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA,MACA;AAAA,MACA,IAAI,GAAG,IAAI;AAAA,MACX,cAAc;AAAA;AAAA,EAChB;AAEJ;AAEA,IAAO,4BAAQ;",
4
+ "sourcesContent": ["import React, { useCallback } from 'react';\nimport type { ControlledFieldProps } from '@digigov/form/Field/types';\nimport type { FieldOptionProps } from '@digigov/form/inputs/Label';\nimport type { AutoCompleteProps as UIAutoCompleteProps } from '@digigov/ui/form/AutoComplete';\nimport { AutoComplete } from '@digigov/ui/form/AutoComplete';\nimport { Hint } from '@digigov/ui/typography/Hint';\nimport { Base } from '@digigov/ui/utils/Base';\nexport interface AutoCompleteInputExtra\n extends Omit<\n UIAutoCompleteProps,\n | 'source'\n | 'id'\n | 'templates'\n | 'defaultValue'\n | 'onConfirm'\n | 'dropdownArrow'\n > {\n options: FieldOptionProps[];\n}\n\nexport interface AutoCompleteInputProps\n extends Omit<ControlledFieldProps, 'value' | 'onChange' | 'extra'> {\n extra: AutoCompleteInputExtra;\n value: string;\n onChange: (v: string | string[] | undefined) => void;\n}\n\nexport const AutoCompleteInput: React.FC<AutoCompleteInputProps> = ({\n name,\n type,\n extra: { options },\n onChange,\n value,\n ...props\n}) => {\n const suggest = useCallback(\n function suggest(\n query: string,\n syncResults: (options: any[]) => void\n ): void {\n syncResults(\n query\n ? options.filter(function (option) {\n return (\n `${option.value} ${option.label?.primary || ''} ${\n option.label?.secondary || ''\n }`\n .toLowerCase()\n .indexOf(query.toLowerCase()) !== -1\n );\n })\n : options\n );\n },\n [options]\n );\n\n return (\n <AutoComplete\n multiple={type === 'choice:multiple' ? true : false}\n source={suggest}\n onConfirm={(value) => {\n if (Array.isArray(value)) {\n const selectedValues = value.map((item) => item.value);\n if (selectedValues.length > 0) onChange(selectedValues);\n else onChange(undefined);\n } else {\n onChange(value.value);\n }\n }}\n templates={{\n suggestion({ label, value }) {\n return (\n <Base as=\"div\">\n {(label && label.primary && label.primary) || value}\n {label && label.secondary && <Hint>{label.secondary}</Hint>}\n </Base>\n );\n },\n inputValue: (option) => {\n if (!option) {\n return '';\n }\n return option.label.primary || option.value;\n },\n }}\n {...{\n ...props,\n reset: undefined,\n required: undefined,\n Field: undefined,\n }}\n name={name}\n id={`${name}-id`}\n defaultValue={value}\n />\n );\n};\n\nexport default AutoCompleteInput;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAmC;AAInC,0BAA6B;AAC7B,kBAAqB;AACrB,kBAAqB;AAqBd,MAAM,oBAAsD,CAAC;AAAA,EAClE;AAAA,EACA;AAAA,EACA,OAAO,EAAE,QAAQ;AAAA,EACjB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,cAAU;AAAA,IACd,SAASA,SACP,OACA,aACM;AACN;AAAA,QACE,QACI,QAAQ,OAAO,SAAU,QAAQ;AAC/B,iBACE,GAAG,OAAO,KAAK,IAAI,OAAO,OAAO,WAAW,EAAE,IAC5C,OAAO,OAAO,aAAa,EAC7B,GACG,YAAY,EACZ,QAAQ,MAAM,YAAY,CAAC,MAAM;AAAA,QAExC,CAAC,IACD;AAAA,MACN;AAAA,IACF;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAEA,SACE,6BAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,SAAS,oBAAoB,OAAO;AAAA,MAC9C,QAAQ;AAAA,MACR,WAAW,CAACC,WAAU;AACpB,YAAI,MAAM,QAAQA,MAAK,GAAG;AACxB,gBAAM,iBAAiBA,OAAM,IAAI,CAAC,SAAS,KAAK,KAAK;AACrD,cAAI,eAAe,SAAS,EAAG,UAAS,cAAc;AAAA,cACjD,UAAS,MAAS;AAAA,QACzB,OAAO;AACL,mBAASA,OAAM,KAAK;AAAA,QACtB;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,WAAW,EAAE,OAAO,OAAAA,OAAM,GAAG;AAC3B,iBACE,6BAAAD,QAAA,cAAC,oBAAK,IAAG,SACL,SAAS,MAAM,WAAW,MAAM,WAAYC,QAC7C,SAAS,MAAM,aAAa,6BAAAD,QAAA,cAAC,wBAAM,MAAM,SAAU,CACtD;AAAA,QAEJ;AAAA,QACA,YAAY,CAAC,WAAW;AACtB,cAAI,CAAC,QAAQ;AACX,mBAAO;AAAA,UACT;AACA,iBAAO,OAAO,MAAM,WAAW,OAAO;AAAA,QACxC;AAAA,MACF;AAAA,MACC,GAAG;AAAA,QACF,GAAG;AAAA,QACH,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA,MACA;AAAA,MACA,IAAI,GAAG,IAAI;AAAA,MACX,cAAc;AAAA;AAAA,EAChB;AAEJ;AAEA,IAAO,4BAAQ;",
6
6
  "names": ["suggest", "React", "value"]
7
7
  }
@@ -32,73 +32,78 @@ __export(Checkboxes_exports, {
32
32
  });
33
33
  module.exports = __toCommonJS(Checkboxes_exports);
34
34
  var import_react = __toESM(require("react"));
35
+ var import_utils = require("@digigov/form/utils");
35
36
  var import_Checkbox = require("@digigov/ui/form/Checkbox");
36
37
  var import_i18n = require("@digigov/ui/i18n");
37
38
  var import_Hint = require("@digigov/ui/typography/Hint");
38
- const Checkboxes = ({
39
- name,
40
- onChange,
41
- value,
42
- extra: { options, className },
43
- disabled,
44
- Field,
45
- ...props
46
- }) => {
47
- if (!value) value = [];
48
- const handleChange = (optionValue, idx, show) => (evt) => {
49
- let newValue = [];
50
- if (evt.currentTarget.checked) {
51
- newValue = value.concat([optionValue]);
52
- } else {
53
- newValue = value.filter((val) => val !== optionValue);
54
- }
55
- if (show && show.length > 0) {
56
- setChecked(
57
- (items) => items.map((item, index) => index === idx ? !item : item)
58
- );
59
- }
60
- if (newValue.length === 0) newValue = void 0;
61
- onChange(newValue);
62
- };
63
- const { t } = (0, import_i18n.useTranslation)();
64
- const [checked, setChecked] = (0, import_react.useState)(
65
- Array(options.length).fill(false)
66
- );
67
- return /* @__PURE__ */ import_react.default.createElement(import_Checkbox.Checkbox, { className }, options.map(
68
- ({
69
- label,
70
- value: v,
71
- show,
72
- disabled: optionDisabled,
73
- selected,
74
- ...option
75
- }, index) => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, { key: index }, /* @__PURE__ */ import_react.default.createElement(
76
- import_Checkbox.CheckboxItem,
77
- {
78
- key: `${name}.${index}`,
79
- name: `${name}.${v}`,
80
- id: `${name}.${v}`,
39
+ const Checkboxes = import_react.default.forwardRef(
40
+ ({
41
+ name,
42
+ onChange,
43
+ value,
44
+ extra: { options, className },
45
+ disabled,
46
+ Field,
47
+ ...props
48
+ }, ref) => {
49
+ if (!value) value = [];
50
+ const handleChange = (optionValue, idx, show) => (evt) => {
51
+ let newValue = [];
52
+ if (evt.currentTarget.checked) {
53
+ newValue = value.concat([optionValue]);
54
+ } else {
55
+ newValue = value.filter((val) => val !== optionValue);
56
+ }
57
+ if (show && show.length > 0) {
58
+ setChecked(
59
+ (items) => items.map((item, index) => index === idx ? !item : item)
60
+ );
61
+ }
62
+ if (newValue.length === 0) newValue = void 0;
63
+ onChange(newValue);
64
+ };
65
+ const { t } = (0, import_i18n.useTranslation)();
66
+ const [checked, setChecked] = (0, import_react.useState)(
67
+ Array(options.length).fill(false)
68
+ );
69
+ return /* @__PURE__ */ import_react.default.createElement(import_Checkbox.Checkbox, { className }, options.map(
70
+ ({
71
+ label,
81
72
  value: v,
82
- disabled: disabled || optionDisabled,
83
- checked: value?.includes(v),
84
- onChange: handleChange(v, index, show),
85
- ...option,
86
- ...{
87
- ...props,
88
- reset: void 0,
89
- defaultValue: void 0,
90
- error: void 0,
91
- onBlur: void 0,
92
- required: void 0,
93
- "aria-describedby": void 0,
94
- type: "checkbox"
95
- }
96
- },
97
- label && label.primary && t(label.primary) || value,
98
- label && label.secondary && /* @__PURE__ */ import_react.default.createElement(import_Hint.Hint, null, t(label.secondary))
99
- ), !!checked[index] && show && Field && /* @__PURE__ */ import_react.default.createElement(import_Checkbox.CheckboxConditional, null, show.map((fieldName) => /* @__PURE__ */ import_react.default.createElement(Field, { name: fieldName, key: fieldName }))), selected && selected())
100
- ));
101
- };
73
+ show,
74
+ disabled: optionDisabled,
75
+ selected,
76
+ ...option
77
+ }, index) => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, { key: index }, /* @__PURE__ */ import_react.default.createElement(
78
+ import_Checkbox.CheckboxItem,
79
+ {
80
+ ref: index === 0 ? ref : void 0,
81
+ key: `${name}.${index}`,
82
+ name: `${name}.${v}`,
83
+ id: `${name}.${v}`,
84
+ value: v,
85
+ disabled: disabled || optionDisabled,
86
+ checked: value?.includes(v),
87
+ onChange: handleChange(v, index, show),
88
+ ...option,
89
+ ...{
90
+ ...(0, import_utils.omit)(props, ["resetField"]),
91
+ reset: void 0,
92
+ defaultValue: void 0,
93
+ error: void 0,
94
+ onBlur: void 0,
95
+ required: void 0,
96
+ "aria-describedby": void 0,
97
+ type: "checkbox"
98
+ }
99
+ },
100
+ label && label.primary && t(label.primary) || value,
101
+ label && label.secondary && /* @__PURE__ */ import_react.default.createElement(import_Hint.Hint, null, t(label.secondary))
102
+ ), !!checked[index] && show && Field && /* @__PURE__ */ import_react.default.createElement(import_Checkbox.CheckboxConditional, null, show.map((fieldName) => /* @__PURE__ */ import_react.default.createElement(Field, { name: fieldName, key: fieldName }))), selected && selected())
103
+ ));
104
+ }
105
+ );
106
+ Checkboxes.displayName = "Checkboxes";
102
107
  var Checkboxes_default = Checkboxes;
103
108
  // Annotate the CommonJS export names for ESM import in node:
104
109
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/inputs/Checkboxes/index.tsx"],
4
- "sourcesContent": ["import React, { useState } from 'react';\nimport { ControlledFieldProps } from '@digigov/form/Field/types';\nimport { FieldOptionProps } from '@digigov/form/inputs/Label';\nimport {\n Checkbox,\n CheckboxItem,\n CheckboxConditional,\n} from '@digigov/ui/form/Checkbox';\nimport { useTranslation } from '@digigov/ui/i18n';\nimport { Hint } from '@digigov/ui/typography/Hint';\n\nexport interface CheckboxesProps\n extends Omit<ControlledFieldProps, 'extra' | 'value'> {\n value?: string[];\n extra: {\n className?: string;\n options: FieldOptionProps[];\n };\n fieldComponent: React.FC<Omit<ControlledFieldProps, 'value' | 'onChange'>>;\n}\n\nexport const Checkboxes: React.FC<CheckboxesProps> = ({\n name,\n onChange,\n value,\n extra: { options, className },\n disabled,\n Field,\n ...props\n}) => {\n if (!value) value = [];\n const handleChange =\n (optionValue, idx, show) =>\n (evt): void => {\n let newValue: any = [];\n if (evt.currentTarget.checked) {\n newValue = value.concat([optionValue]);\n } else {\n newValue = value.filter((val) => val !== optionValue);\n }\n if (show && show.length > 0) {\n setChecked((items) =>\n items.map((item, index) => (index === idx ? !item : item))\n );\n }\n\n // reset value to undefined instead of an empty array\n // so the error state mechanism can throw validation errors\n if (newValue.length === 0) newValue = undefined;\n onChange(newValue);\n };\n const { t } = useTranslation();\n const [checked, setChecked] = useState(\n Array<boolean>(options.length).fill(false)\n );\n return (\n <Checkbox className={className}>\n {options.map(\n (\n {\n label,\n value: v,\n show,\n disabled: optionDisabled,\n selected,\n ...option\n },\n index\n ) => (\n <React.Fragment key={index}>\n <CheckboxItem\n key={`${name}.${index}`}\n name={`${name}.${v}`}\n id={`${name}.${v}`}\n value={v}\n disabled={disabled || optionDisabled}\n checked={value?.includes(v)}\n onChange={handleChange(v, index, show)}\n {...option}\n {...{\n ...props,\n reset: undefined,\n defaultValue: undefined,\n error: undefined,\n onBlur: undefined,\n required: undefined,\n 'aria-describedby': undefined,\n type: 'checkbox',\n }}\n >\n {(label && label.primary && t(label.primary)) || value}\n {label && label.secondary && <Hint>{t(label.secondary)}</Hint>}\n </CheckboxItem>\n\n {!!checked[index] && show && Field && (\n <CheckboxConditional>\n {show.map((fieldName) => (\n <Field name={fieldName} key={fieldName} />\n ))}\n </CheckboxConditional>\n )}\n {selected && selected()}\n </React.Fragment>\n )\n )}\n </Checkbox>\n );\n};\n\nexport default Checkboxes;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAgC;AAGhC,sBAIO;AACP,kBAA+B;AAC/B,kBAAqB;AAYd,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO,EAAE,SAAS,UAAU;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,MAAI,CAAC,MAAO,SAAQ,CAAC;AACrB,QAAM,eACJ,CAAC,aAAa,KAAK,SACnB,CAAC,QAAc;AACb,QAAI,WAAgB,CAAC;AACrB,QAAI,IAAI,cAAc,SAAS;AAC7B,iBAAW,MAAM,OAAO,CAAC,WAAW,CAAC;AAAA,IACvC,OAAO;AACL,iBAAW,MAAM,OAAO,CAAC,QAAQ,QAAQ,WAAW;AAAA,IACtD;AACA,QAAI,QAAQ,KAAK,SAAS,GAAG;AAC3B;AAAA,QAAW,CAAC,UACV,MAAM,IAAI,CAAC,MAAM,UAAW,UAAU,MAAM,CAAC,OAAO,IAAK;AAAA,MAC3D;AAAA,IACF;AAIA,QAAI,SAAS,WAAW,EAAG,YAAW;AACtC,aAAS,QAAQ;AAAA,EACnB;AACF,QAAM,EAAE,EAAE,QAAI,4BAAe;AAC7B,QAAM,CAAC,SAAS,UAAU,QAAI;AAAA,IAC5B,MAAe,QAAQ,MAAM,EAAE,KAAK,KAAK;AAAA,EAC3C;AACA,SACE,6BAAAA,QAAA,cAAC,4BAAS,aACP,QAAQ;AAAA,IACP,CACE;AAAA,MACE;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA,GAAG;AAAA,IACL,GACA,UAEA,6BAAAA,QAAA,cAAC,aAAAA,QAAM,UAAN,EAAe,KAAK,SACnB,6BAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,GAAG,IAAI,IAAI,KAAK;AAAA,QACrB,MAAM,GAAG,IAAI,IAAI,CAAC;AAAA,QAClB,IAAI,GAAG,IAAI,IAAI,CAAC;AAAA,QAChB,OAAO;AAAA,QACP,UAAU,YAAY;AAAA,QACtB,SAAS,OAAO,SAAS,CAAC;AAAA,QAC1B,UAAU,aAAa,GAAG,OAAO,IAAI;AAAA,QACpC,GAAG;AAAA,QACH,GAAG;AAAA,UACF,GAAG;AAAA,UACH,OAAO;AAAA,UACP,cAAc;AAAA,UACd,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,oBAAoB;AAAA,UACpB,MAAM;AAAA,QACR;AAAA;AAAA,MAEE,SAAS,MAAM,WAAW,EAAE,MAAM,OAAO,KAAM;AAAA,MAChD,SAAS,MAAM,aAAa,6BAAAA,QAAA,cAAC,wBAAM,EAAE,MAAM,SAAS,CAAE;AAAA,IACzD,GAEC,CAAC,CAAC,QAAQ,KAAK,KAAK,QAAQ,SAC3B,6BAAAA,QAAA,cAAC,2CACE,KAAK,IAAI,CAAC,cACT,6BAAAA,QAAA,cAAC,SAAM,MAAM,WAAW,KAAK,WAAW,CACzC,CACH,GAED,YAAY,SAAS,CACxB;AAAA,EAEJ,CACF;AAEJ;AAEA,IAAO,qBAAQ;",
4
+ "sourcesContent": ["import React, { useState } from 'react';\nimport type { UseFormReturn } from 'react-hook-form';\nimport type { ControlledFieldProps } from '@digigov/form/Field/types';\nimport type { FieldOptionProps } from '@digigov/form/inputs/Label';\nimport { omit } from '@digigov/form/utils';\nimport {\n Checkbox,\n CheckboxItem,\n CheckboxConditional,\n} from '@digigov/ui/form/Checkbox';\nimport { useTranslation } from '@digigov/ui/i18n';\nimport { Hint } from '@digigov/ui/typography/Hint';\n\nexport interface CheckboxesProps\n extends Omit<ControlledFieldProps, 'extra' | 'value'> {\n value?: string[];\n extra: {\n className?: string;\n options: FieldOptionProps[];\n };\n fieldComponent: React.FC<Omit<ControlledFieldProps, 'value' | 'onChange'>>;\n resetField: UseFormReturn['resetField'];\n}\n\nexport const Checkboxes = React.forwardRef<HTMLInputElement, CheckboxesProps>(\n (\n {\n name,\n onChange,\n value,\n extra: { options, className },\n disabled,\n Field,\n ...props\n },\n ref\n ) => {\n if (!value) value = [];\n const handleChange =\n (optionValue, idx, show) =>\n (evt): void => {\n let newValue: any = [];\n if (evt.currentTarget.checked) {\n newValue = value.concat([optionValue]);\n } else {\n newValue = value.filter((val) => val !== optionValue);\n }\n if (show && show.length > 0) {\n setChecked((items) =>\n items.map((item, index) => (index === idx ? !item : item))\n );\n }\n\n // reset value to undefined instead of an empty array\n // so the error state mechanism can throw validation errors\n if (newValue.length === 0) newValue = undefined;\n onChange(newValue);\n };\n const { t } = useTranslation();\n const [checked, setChecked] = useState(\n Array<boolean>(options.length).fill(false)\n );\n return (\n <Checkbox className={className}>\n {options.map(\n (\n {\n label,\n value: v,\n show,\n disabled: optionDisabled,\n selected,\n ...option\n },\n index\n ) => (\n <React.Fragment key={index}>\n <CheckboxItem\n ref={index === 0 ? ref : undefined}\n key={`${name}.${index}`}\n name={`${name}.${v}`}\n id={`${name}.${v}`}\n value={v}\n disabled={disabled || optionDisabled}\n checked={value?.includes(v)}\n onChange={handleChange(v, index, show)}\n {...option}\n {...{\n ...omit(props, ['resetField']),\n reset: undefined,\n defaultValue: undefined,\n error: undefined,\n onBlur: undefined,\n required: undefined,\n 'aria-describedby': undefined,\n type: 'checkbox',\n }}\n >\n {(label && label.primary && t(label.primary)) || value}\n {label && label.secondary && <Hint>{t(label.secondary)}</Hint>}\n </CheckboxItem>\n\n {!!checked[index] && show && Field && (\n <CheckboxConditional>\n {show.map((fieldName) => (\n <Field name={fieldName} key={fieldName} />\n ))}\n </CheckboxConditional>\n )}\n {selected && selected()}\n </React.Fragment>\n )\n )}\n </Checkbox>\n );\n }\n);\n\nCheckboxes.displayName = 'Checkboxes';\n\nexport default Checkboxes;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAgC;AAIhC,mBAAqB;AACrB,sBAIO;AACP,kBAA+B;AAC/B,kBAAqB;AAad,MAAM,aAAa,aAAAA,QAAM;AAAA,EAC9B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,EAAE,SAAS,UAAU;AAAA,IAC5B;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,QAAI,CAAC,MAAO,SAAQ,CAAC;AACrB,UAAM,eACJ,CAAC,aAAa,KAAK,SACnB,CAAC,QAAc;AACb,UAAI,WAAgB,CAAC;AACrB,UAAI,IAAI,cAAc,SAAS;AAC7B,mBAAW,MAAM,OAAO,CAAC,WAAW,CAAC;AAAA,MACvC,OAAO;AACL,mBAAW,MAAM,OAAO,CAAC,QAAQ,QAAQ,WAAW;AAAA,MACtD;AACA,UAAI,QAAQ,KAAK,SAAS,GAAG;AAC3B;AAAA,UAAW,CAAC,UACV,MAAM,IAAI,CAAC,MAAM,UAAW,UAAU,MAAM,CAAC,OAAO,IAAK;AAAA,QAC3D;AAAA,MACF;AAIA,UAAI,SAAS,WAAW,EAAG,YAAW;AACtC,eAAS,QAAQ;AAAA,IACnB;AACF,UAAM,EAAE,EAAE,QAAI,4BAAe;AAC7B,UAAM,CAAC,SAAS,UAAU,QAAI;AAAA,MAC5B,MAAe,QAAQ,MAAM,EAAE,KAAK,KAAK;AAAA,IAC3C;AACA,WACE,6BAAAA,QAAA,cAAC,4BAAS,aACP,QAAQ;AAAA,MACP,CACE;AAAA,QACE;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA,GAAG;AAAA,MACL,GACA,UAEA,6BAAAA,QAAA,cAAC,aAAAA,QAAM,UAAN,EAAe,KAAK,SACnB,6BAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,UAAU,IAAI,MAAM;AAAA,UACzB,KAAK,GAAG,IAAI,IAAI,KAAK;AAAA,UACrB,MAAM,GAAG,IAAI,IAAI,CAAC;AAAA,UAClB,IAAI,GAAG,IAAI,IAAI,CAAC;AAAA,UAChB,OAAO;AAAA,UACP,UAAU,YAAY;AAAA,UACtB,SAAS,OAAO,SAAS,CAAC;AAAA,UAC1B,UAAU,aAAa,GAAG,OAAO,IAAI;AAAA,UACpC,GAAG;AAAA,UACH,GAAG;AAAA,YACF,OAAG,mBAAK,OAAO,CAAC,YAAY,CAAC;AAAA,YAC7B,OAAO;AAAA,YACP,cAAc;AAAA,YACd,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,UAAU;AAAA,YACV,oBAAoB;AAAA,YACpB,MAAM;AAAA,UACR;AAAA;AAAA,QAEE,SAAS,MAAM,WAAW,EAAE,MAAM,OAAO,KAAM;AAAA,QAChD,SAAS,MAAM,aAAa,6BAAAA,QAAA,cAAC,wBAAM,EAAE,MAAM,SAAS,CAAE;AAAA,MACzD,GAEC,CAAC,CAAC,QAAQ,KAAK,KAAK,QAAQ,SAC3B,6BAAAA,QAAA,cAAC,2CACE,KAAK,IAAI,CAAC,cACT,6BAAAA,QAAA,cAAC,SAAM,MAAM,WAAW,KAAK,WAAW,CACzC,CACH,GAED,YAAY,SAAS,CACxB;AAAA,IAEJ,CACF;AAAA,EAEJ;AACF;AAEA,WAAW,cAAc;AAEzB,IAAO,qBAAQ;",
6
6
  "names": ["React"]
7
7
  }
@@ -98,10 +98,13 @@ const makeDate = (val) => {
98
98
  }
99
99
  return "";
100
100
  };
101
- const DatePart = ({ label, ...props }) => {
102
- return /* @__PURE__ */ import_react.default.createElement(import_DateInputContainer.DateInputItem, { ...props }, label);
103
- };
104
- const DateInput = ({ name, ...props }) => {
101
+ const DatePart = import_react.default.forwardRef(
102
+ ({ label, ...props }, ref) => {
103
+ return /* @__PURE__ */ import_react.default.createElement(import_DateInputContainer.DateInputItem, { ...props, ref }, label);
104
+ }
105
+ );
106
+ DatePart.displayName = "DatePart";
107
+ const DateInput = import_react.default.forwardRef(({ name, ...props }, ref) => {
105
108
  const { t } = (0, import_i18n.useTranslation)();
106
109
  const form = (0, import_FormContext.useFormContext)();
107
110
  (0, import_react.useEffect)(() => {
@@ -121,6 +124,7 @@ const DateInput = ({ name, ...props }) => {
121
124
  return /* @__PURE__ */ import_react.default.createElement(import_DateInputContainer.DateInputContainer, null, /* @__PURE__ */ import_react.default.createElement(
122
125
  DatePart,
123
126
  {
127
+ ref,
124
128
  label: t("form.label.day"),
125
129
  onChange: date.setDay,
126
130
  onBlur: (e) => {
@@ -174,7 +178,8 @@ const DateInput = ({ name, ...props }) => {
174
178
  error: !date.year ? props.error : false
175
179
  }
176
180
  ));
177
- };
181
+ });
182
+ DateInput.displayName = "DateInput";
178
183
  var DateInput_default = DateInput;
179
184
  // Annotate the CommonJS export names for ESM import in node:
180
185
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/inputs/DateInput/index.tsx"],
4
- "sourcesContent": ["import React, { useMemo, useEffect } from 'react';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { UncontrolledFieldProps } from '@digigov/form/Field/types';\nimport { useFormContext } from '@digigov/form/FormContext';\nimport {\n DateInputContainer,\n DateInputItem,\n} from '@digigov/ui/form/DateInputContainer';\nimport { useTranslation } from '@digigov/ui/i18n';\ndayjs.extend(customParseFormat);\n\nexport interface DateInputProps extends Omit<UncontrolledFieldProps, 'extra'> {\n extra?: {\n max?: string;\n min?: string;\n };\n}\n\nfunction useDate(name, value, form) {\n const [year, month, day] = useMemo(() => {\n if (!value || value.length === 0) {\n return ['', '', ''];\n }\n const [day, month, year] = value.split('/');\n return [year, month, day];\n }, [value]);\n\n function update(value) {\n form.setValue(name, value, { shouldValidate: false });\n }\n\n function set(year, month, day) {\n const value = `${day || ''}/${month || ''}/${year || ''}`;\n if (!year && !month && !day) {\n update('');\n } else {\n update(value);\n }\n }\n\n function setYear(evt) {\n const val = evt.target.value.trim();\n set(val, month, day);\n }\n\n function setMonth(evt, cast) {\n let val = evt.target.value.trim();\n if (cast && val && val.length === 1) {\n val = '0' + val;\n }\n set(year, val, day);\n }\n\n function setDay(evt, cast) {\n let val = evt.target.value.trim();\n if (cast && val && val.length === 1) {\n val = '0' + val;\n }\n set(year, month, val);\n }\n\n function trigger() {\n if (form.formState.isSubmitted) {\n form.trigger(name);\n }\n }\n\n return {\n day,\n month,\n year,\n setYear,\n setMonth,\n setDay,\n trigger,\n };\n}\n\nconst VALID_FORMATS = ['DD/MM/YYYY'];\n\nconst makeDate = (val) => {\n const date = dayjs(val, VALID_FORMATS, true);\n if (date.isValid()) {\n return date.format('DD/MM/YYYY');\n }\n return '';\n};\n\nconst DatePart = ({ label, ...props }) => {\n return <DateInputItem {...props}>{label}</DateInputItem>;\n};\n\nexport const DateInput = ({ name, ...props }) => {\n const { t } = useTranslation();\n const form = useFormContext();\n\n useEffect(() => {\n const initialValue = form.getValues(name);\n // checks if the initial value is undefined and if the default value is valid date\n if (initialValue === undefined && props.defaultValue) {\n form.setValue(name, makeDate(props.defaultValue), {\n shouldValidate: false,\n });\n } else {\n // checks if the initial value is a valid date\n form.setValue(name, makeDate(initialValue), {\n shouldValidate: false,\n });\n }\n }, []);\n\n const value = form.getValues(name);\n const date = useDate(name, value, form);\n\n return (\n <DateInputContainer>\n <DatePart\n label={t('form.label.day')}\n onChange={date.setDay}\n onBlur={(e) => {\n if (date.day && date.day.length === 1) {\n date.setDay(e, true);\n }\n date.trigger();\n }}\n value={date.day}\n width={2}\n name={`${name}-day`}\n id={`${name}-day`}\n maxLength=\"2\"\n disabled={props.disabled}\n aria-required={props['aria-required']}\n error={!date.day ? props.error : false}\n />\n <DatePart\n label={t('form.label.month')}\n onChange={date.setMonth}\n onBlur={(e) => {\n if (date.month && date.month.length === 1) {\n date.setMonth(e, true);\n }\n date.trigger();\n }}\n value={date.month}\n width={2}\n name={`${name}-month`}\n id={`${name}-month`}\n maxLength=\"2\"\n disabled={props.disabled}\n aria-required={props['aria-required']}\n error={!date.month ? props.error : false}\n />\n <DatePart\n label={t('form.label.year')}\n onChange={date.setYear}\n onBlur={date.trigger}\n value={date.year}\n width={4}\n name={`${name}-year`}\n id={`${name}-year`}\n maxLength=\"4\"\n disabled={props.disabled}\n aria-required={props['aria-required']}\n error={!date.year ? props.error : false}\n />\n </DateInputContainer>\n );\n};\n\nexport default DateInput;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA0C;AAC1C,mBAAkB;AAClB,+BAA8B;AAE9B,yBAA+B;AAC/B,gCAGO;AACP,kBAA+B;AAC/B,aAAAA,QAAM,OAAO,yBAAAC,OAAiB;AAS9B,SAAS,QAAQ,MAAM,OAAO,MAAM;AAClC,QAAM,CAAC,MAAM,OAAO,GAAG,QAAI,sBAAQ,MAAM;AACvC,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,aAAO,CAAC,IAAI,IAAI,EAAE;AAAA,IACpB;AACA,UAAM,CAACC,MAAKC,QAAOC,KAAI,IAAI,MAAM,MAAM,GAAG;AAC1C,WAAO,CAACA,OAAMD,QAAOD,IAAG;AAAA,EAC1B,GAAG,CAAC,KAAK,CAAC;AAEV,WAAS,OAAOG,QAAO;AACrB,SAAK,SAAS,MAAMA,QAAO,EAAE,gBAAgB,MAAM,CAAC;AAAA,EACtD;AAEA,WAAS,IAAID,OAAMD,QAAOD,MAAK;AAC7B,UAAMG,SAAQ,GAAGH,QAAO,EAAE,IAAIC,UAAS,EAAE,IAAIC,SAAQ,EAAE;AACvD,QAAI,CAACA,SAAQ,CAACD,UAAS,CAACD,MAAK;AAC3B,aAAO,EAAE;AAAA,IACX,OAAO;AACL,aAAOG,MAAK;AAAA,IACd;AAAA,EACF;AAEA,WAAS,QAAQ,KAAK;AACpB,UAAM,MAAM,IAAI,OAAO,MAAM,KAAK;AAClC,QAAI,KAAK,OAAO,GAAG;AAAA,EACrB;AAEA,WAAS,SAAS,KAAK,MAAM;AAC3B,QAAI,MAAM,IAAI,OAAO,MAAM,KAAK;AAChC,QAAI,QAAQ,OAAO,IAAI,WAAW,GAAG;AACnC,YAAM,MAAM;AAAA,IACd;AACA,QAAI,MAAM,KAAK,GAAG;AAAA,EACpB;AAEA,WAAS,OAAO,KAAK,MAAM;AACzB,QAAI,MAAM,IAAI,OAAO,MAAM,KAAK;AAChC,QAAI,QAAQ,OAAO,IAAI,WAAW,GAAG;AACnC,YAAM,MAAM;AAAA,IACd;AACA,QAAI,MAAM,OAAO,GAAG;AAAA,EACtB;AAEA,WAAS,UAAU;AACjB,QAAI,KAAK,UAAU,aAAa;AAC9B,WAAK,QAAQ,IAAI;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,MAAM,gBAAgB,CAAC,YAAY;AAEnC,MAAM,WAAW,CAAC,QAAQ;AACxB,QAAM,WAAO,aAAAL,SAAM,KAAK,eAAe,IAAI;AAC3C,MAAI,KAAK,QAAQ,GAAG;AAClB,WAAO,KAAK,OAAO,YAAY;AAAA,EACjC;AACA,SAAO;AACT;AAEA,MAAM,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,MAAM;AACxC,SAAO,6BAAAM,QAAA,cAAC,2CAAe,GAAG,SAAQ,KAAM;AAC1C;AAEO,MAAM,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,MAAM;AAC/C,QAAM,EAAE,EAAE,QAAI,4BAAe;AAC7B,QAAM,WAAO,mCAAe;AAE5B,8BAAU,MAAM;AACd,UAAM,eAAe,KAAK,UAAU,IAAI;AAExC,QAAI,iBAAiB,UAAa,MAAM,cAAc;AACpD,WAAK,SAAS,MAAM,SAAS,MAAM,YAAY,GAAG;AAAA,QAChD,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH,OAAO;AAEL,WAAK,SAAS,MAAM,SAAS,YAAY,GAAG;AAAA,QAC1C,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQ,KAAK,UAAU,IAAI;AACjC,QAAM,OAAO,QAAQ,MAAM,OAAO,IAAI;AAEtC,SACE,6BAAAA,QAAA,cAAC,oDACC,6BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,EAAE,gBAAgB;AAAA,MACzB,UAAU,KAAK;AAAA,MACf,QAAQ,CAAC,MAAM;AACb,YAAI,KAAK,OAAO,KAAK,IAAI,WAAW,GAAG;AACrC,eAAK,OAAO,GAAG,IAAI;AAAA,QACrB;AACA,aAAK,QAAQ;AAAA,MACf;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM,GAAG,IAAI;AAAA,MACb,IAAI,GAAG,IAAI;AAAA,MACX,WAAU;AAAA,MACV,UAAU,MAAM;AAAA,MAChB,iBAAe,MAAM,eAAe;AAAA,MACpC,OAAO,CAAC,KAAK,MAAM,MAAM,QAAQ;AAAA;AAAA,EACnC,GACA,6BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,EAAE,kBAAkB;AAAA,MAC3B,UAAU,KAAK;AAAA,MACf,QAAQ,CAAC,MAAM;AACb,YAAI,KAAK,SAAS,KAAK,MAAM,WAAW,GAAG;AACzC,eAAK,SAAS,GAAG,IAAI;AAAA,QACvB;AACA,aAAK,QAAQ;AAAA,MACf;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM,GAAG,IAAI;AAAA,MACb,IAAI,GAAG,IAAI;AAAA,MACX,WAAU;AAAA,MACV,UAAU,MAAM;AAAA,MAChB,iBAAe,MAAM,eAAe;AAAA,MACpC,OAAO,CAAC,KAAK,QAAQ,MAAM,QAAQ;AAAA;AAAA,EACrC,GACA,6BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,EAAE,iBAAiB;AAAA,MAC1B,UAAU,KAAK;AAAA,MACf,QAAQ,KAAK;AAAA,MACb,OAAO,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,MAAM,GAAG,IAAI;AAAA,MACb,IAAI,GAAG,IAAI;AAAA,MACX,WAAU;AAAA,MACV,UAAU,MAAM;AAAA,MAChB,iBAAe,MAAM,eAAe;AAAA,MACpC,OAAO,CAAC,KAAK,OAAO,MAAM,QAAQ;AAAA;AAAA,EACpC,CACF;AAEJ;AAEA,IAAO,oBAAQ;",
4
+ "sourcesContent": ["import React, { useMemo, useEffect } from 'react';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport type { UncontrolledFieldProps } from '@digigov/form/Field/types';\nimport { useFormContext } from '@digigov/form/FormContext';\nimport {\n DateInputContainer,\n DateInputItem,\n} from '@digigov/ui/form/DateInputContainer';\nimport { useTranslation } from '@digigov/ui/i18n';\ndayjs.extend(customParseFormat);\n\nexport interface DateInputProps extends Omit<UncontrolledFieldProps, 'extra'> {\n extra?: {\n max?: string;\n min?: string;\n };\n}\n\nfunction useDate(name, value, form) {\n const [year, month, day] = useMemo(() => {\n if (!value || value.length === 0) {\n return ['', '', ''];\n }\n const [day, month, year] = value.split('/');\n return [year, month, day];\n }, [value]);\n\n function update(value) {\n form.setValue(name, value, { shouldValidate: false });\n }\n\n function set(year, month, day) {\n const value = `${day || ''}/${month || ''}/${year || ''}`;\n if (!year && !month && !day) {\n update('');\n } else {\n update(value);\n }\n }\n\n function setYear(evt) {\n const val = evt.target.value.trim();\n set(val, month, day);\n }\n\n function setMonth(evt, cast) {\n let val = evt.target.value.trim();\n if (cast && val && val.length === 1) {\n val = '0' + val;\n }\n set(year, val, day);\n }\n\n function setDay(evt, cast) {\n let val = evt.target.value.trim();\n if (cast && val && val.length === 1) {\n val = '0' + val;\n }\n set(year, month, val);\n }\n\n function trigger() {\n if (form.formState.isSubmitted) {\n form.trigger(name);\n }\n }\n\n return {\n day,\n month,\n year,\n setYear,\n setMonth,\n setDay,\n trigger,\n };\n}\n\nconst VALID_FORMATS = ['DD/MM/YYYY'];\n\nconst makeDate = (val) => {\n const date = dayjs(val, VALID_FORMATS, true);\n if (date.isValid()) {\n return date.format('DD/MM/YYYY');\n }\n return '';\n};\n\nconst DatePart = React.forwardRef<HTMLInputElement, Record<string, any>>(\n ({ label, ...props }, ref) => {\n return (\n <DateInputItem {...props} ref={ref}>\n {label}\n </DateInputItem>\n );\n }\n);\nDatePart.displayName = 'DatePart';\n\nexport const DateInput = React.forwardRef<\n HTMLInputElement,\n Record<string, any>\n>(({ name, ...props }, ref) => {\n const { t } = useTranslation();\n const form = useFormContext();\n\n useEffect(() => {\n const initialValue = form.getValues(name);\n // checks if the initial value is undefined and if the default value is valid date\n if (initialValue === undefined && props.defaultValue) {\n form.setValue(name, makeDate(props.defaultValue), {\n shouldValidate: false,\n });\n } else {\n // checks if the initial value is a valid date\n form.setValue(name, makeDate(initialValue), {\n shouldValidate: false,\n });\n }\n }, []);\n\n const value = form.getValues(name);\n const date = useDate(name, value, form);\n\n return (\n <DateInputContainer>\n <DatePart\n ref={ref}\n label={t('form.label.day')}\n onChange={date.setDay}\n onBlur={(e) => {\n if (date.day && date.day.length === 1) {\n date.setDay(e, true);\n }\n date.trigger();\n }}\n value={date.day}\n width={2}\n name={`${name}-day`}\n id={`${name}-day`}\n maxLength=\"2\"\n disabled={props.disabled}\n aria-required={props['aria-required']}\n error={!date.day ? props.error : false}\n />\n <DatePart\n label={t('form.label.month')}\n onChange={date.setMonth}\n onBlur={(e) => {\n if (date.month && date.month.length === 1) {\n date.setMonth(e, true);\n }\n date.trigger();\n }}\n value={date.month}\n width={2}\n name={`${name}-month`}\n id={`${name}-month`}\n maxLength=\"2\"\n disabled={props.disabled}\n aria-required={props['aria-required']}\n error={!date.month ? props.error : false}\n />\n <DatePart\n label={t('form.label.year')}\n onChange={date.setYear}\n onBlur={date.trigger}\n value={date.year}\n width={4}\n name={`${name}-year`}\n id={`${name}-year`}\n maxLength=\"4\"\n disabled={props.disabled}\n aria-required={props['aria-required']}\n error={!date.year ? props.error : false}\n />\n </DateInputContainer>\n );\n});\n\nDateInput.displayName = 'DateInput';\n\nexport default DateInput;\n"],
5
+ "mappings": "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",
6
6
  "names": ["dayjs", "customParseFormat", "day", "month", "year", "value", "React"]
7
7
  }
@@ -120,10 +120,13 @@ const makeDateTime = (val) => {
120
120
  }
121
121
  return "";
122
122
  };
123
- const DateTimePart = ({ label, ...props }) => {
124
- return /* @__PURE__ */ import_react.default.createElement(import_DateInputContainer.DateInputItem, { ...props }, label);
125
- };
126
- const DateTimeInput = ({ name, ...props }) => {
123
+ const DateTimePart = import_react.default.forwardRef(
124
+ ({ label, ...props }, ref) => {
125
+ return /* @__PURE__ */ import_react.default.createElement(import_DateInputContainer.DateInputItem, { ...props, ref }, label);
126
+ }
127
+ );
128
+ DateTimePart.displayName = "DateTimePart";
129
+ const DateTimeInput = import_react.default.forwardRef(({ name, ...props }, ref) => {
127
130
  const { t } = (0, import_i18n.useTranslation)();
128
131
  const form = (0, import_FormContext.useFormContext)();
129
132
  (0, import_react.useEffect)(() => {
@@ -143,6 +146,7 @@ const DateTimeInput = ({ name, ...props }) => {
143
146
  return /* @__PURE__ */ import_react.default.createElement(import_DateInputContainer.DateInputContainer, null, /* @__PURE__ */ import_react.default.createElement(
144
147
  DateTimePart,
145
148
  {
149
+ ref,
146
150
  label: t("form.label.day"),
147
151
  onChange: dateTime.setDay,
148
152
  onBlur: (e) => {
@@ -236,7 +240,8 @@ const DateTimeInput = ({ name, ...props }) => {
236
240
  error: !dateTime.minutes ? props.error : false
237
241
  }
238
242
  ));
239
- };
243
+ });
244
+ DateTimeInput.displayName = "DateTimeInput";
240
245
  var DateTimeInput_default = DateTimeInput;
241
246
  // Annotate the CommonJS export names for ESM import in node:
242
247
  0 && (module.exports = {