@digigov/form 2.0.0-8e254888 → 2.0.0-a402a664

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 (320) hide show
  1. package/Field/FieldBase/index.js +6 -2
  2. package/Field/FieldBase.js.map +2 -2
  3. package/Field/FieldBaseContainer/index.js +5 -3
  4. package/Field/FieldBaseContainer.js.map +2 -2
  5. package/Field/FieldConditional/index.js +4 -0
  6. package/Field/FieldConditional.js.map +2 -2
  7. package/Field/index.js +10 -4
  8. package/Field/index.js.map +2 -2
  9. package/Field/types.d.ts +11 -3
  10. package/Field/utils/index.js +3 -1
  11. package/Field/utils/index.js.map +2 -2
  12. package/Field/utils/useField/index.js +8 -1
  13. package/Field/utils/useField.js.map +2 -2
  14. package/FieldArray/FormDialog/index.js +314 -196
  15. package/FieldArray/FormDialog.d.ts +20 -7
  16. package/FieldArray/FormDialog.js.map +3 -3
  17. package/FieldArray/__stories__/Default.d.ts +1 -1
  18. package/FieldArray/__stories__/WithExactLength.d.ts +1 -1
  19. package/FieldArray/__stories__/WithModal.d.ts +1 -1
  20. package/FieldArray/index.d.ts +1 -0
  21. package/FieldArray/index.js +12 -7
  22. package/FieldArray/index.js.map +2 -2
  23. package/FieldObject/index.d.ts +3 -0
  24. package/FieldObject/index.js +26 -15
  25. package/FieldObject/index.js.map +2 -2
  26. package/FormBuilder/FormBuilder.stories.d.ts +2 -0
  27. package/FormBuilder/__stories__/AutoErrorGrouping.d.ts +1 -1
  28. package/FormBuilder/__stories__/Default.d.ts +1 -1
  29. package/FormBuilder/__stories__/ErrorGrouping.d.ts +1 -1
  30. package/FormBuilder/index.d.ts +1 -1
  31. package/FormBuilder/index.js +11 -6
  32. package/FormBuilder/index.js.map +2 -2
  33. package/FormContext/index.js +6 -2
  34. package/FormContext.d.ts +1 -0
  35. package/FormContext.js.map +2 -2
  36. package/MultiplicityField/MultiplicityField.stories.d.ts +2 -0
  37. package/MultiplicityField/__stories__/Default.d.ts +1 -1
  38. package/MultiplicityField/__stories__/PreviewDisplay.d.ts +1 -1
  39. package/MultiplicityField/__stories__/WithExactLength.d.ts +1 -1
  40. package/MultiplicityField/__stories__/WithMaxLength.d.ts +1 -1
  41. package/MultiplicityField/__stories__/WithMinAndMaxLength.d.ts +1 -1
  42. package/MultiplicityField/__stories__/WithMinLength.d.ts +1 -1
  43. package/MultiplicityField/add-objects/index.js +2 -0
  44. package/MultiplicityField/add-objects.js.map +2 -2
  45. package/MultiplicityField/index.js +4 -1
  46. package/MultiplicityField/index.js.map +2 -2
  47. package/MultiplicityField/types.d.ts +1 -0
  48. package/Questions/Questions.stories.d.ts +2 -0
  49. package/Questions/__stories__/Default.d.ts +1 -1
  50. package/cjs/Field/FieldBase/index.js +6 -2
  51. package/cjs/Field/FieldBase.js.map +2 -2
  52. package/cjs/Field/FieldBaseContainer/index.js +4 -2
  53. package/cjs/Field/FieldBaseContainer.js.map +3 -3
  54. package/cjs/Field/FieldConditional/index.js +4 -0
  55. package/cjs/Field/FieldConditional.js.map +2 -2
  56. package/cjs/Field/index.js +10 -4
  57. package/cjs/Field/index.js.map +2 -2
  58. package/cjs/Field/types.js.map +1 -1
  59. package/cjs/Field/utils/index.js +3 -1
  60. package/cjs/Field/utils/index.js.map +2 -2
  61. package/cjs/Field/utils/useField/index.js +8 -1
  62. package/cjs/Field/utils/useField.js.map +2 -2
  63. package/cjs/FieldArray/FormDialog/index.js +309 -194
  64. package/cjs/FieldArray/FormDialog.js.map +3 -3
  65. package/cjs/FieldArray/index.js +12 -7
  66. package/cjs/FieldArray/index.js.map +2 -2
  67. package/cjs/FieldObject/index.js +26 -15
  68. package/cjs/FieldObject/index.js.map +2 -2
  69. package/cjs/FormBuilder/index.js +11 -6
  70. package/cjs/FormBuilder/index.js.map +2 -2
  71. package/cjs/FormContext/index.js +7 -2
  72. package/cjs/FormContext.js.map +2 -2
  73. package/cjs/MultiplicityField/add-objects/index.js +2 -0
  74. package/cjs/MultiplicityField/add-objects.js.map +2 -2
  75. package/cjs/MultiplicityField/index.js +4 -1
  76. package/cjs/MultiplicityField/index.js.map +2 -2
  77. package/cjs/MultiplicityField/types.js.map +1 -1
  78. package/cjs/inputs/Checkboxes/index.js +1 -1
  79. package/cjs/inputs/Checkboxes/index.js.map +2 -2
  80. package/cjs/inputs/DateInput/index.js +20 -8
  81. package/cjs/inputs/DateInput/index.js.map +2 -2
  82. package/cjs/inputs/DateTimeInput/index.js +23 -10
  83. package/cjs/inputs/DateTimeInput/index.js.map +2 -2
  84. package/cjs/inputs/FileInput/index.js +26 -21
  85. package/cjs/inputs/FileInput/index.js.map +2 -2
  86. package/cjs/inputs/ImageInput/__stories__/logo.d/index.js +1 -0
  87. package/cjs/inputs/ImageInput/__stories__/logo.d.js.map +7 -0
  88. package/cjs/inputs/ImageInput/index.js +41 -10
  89. package/cjs/inputs/ImageInput/index.js.map +2 -2
  90. package/cjs/inputs/Input/index.js +4 -4
  91. package/cjs/inputs/Input/index.js.map +2 -2
  92. package/cjs/inputs/Select/index.js +4 -3
  93. package/cjs/inputs/Select/index.js.map +2 -2
  94. package/cjs/inputs/inputsScenarios/index.js +2 -2
  95. package/cjs/inputs/inputsScenarios.js.map +2 -2
  96. package/cjs/lazy/index.js +2 -1
  97. package/cjs/lazy.js.map +2 -2
  98. package/cjs/registry/index.js +8 -8
  99. package/cjs/registry.js.map +2 -2
  100. package/cjs/types.js.map +1 -1
  101. package/cjs/utils/index.js +20 -6
  102. package/cjs/utils.js.map +2 -2
  103. package/cjs/validators/index.js +10 -5
  104. package/cjs/validators/index.js.map +2 -2
  105. package/cjs/validators/utils/amka/index.js +60 -0
  106. package/cjs/validators/utils/amka.js.map +7 -0
  107. package/cjs/validators/utils/file/index.js +30 -17
  108. package/cjs/validators/utils/file.js.map +2 -2
  109. package/cjs/validators/utils/index.js +5 -1
  110. package/cjs/validators/utils/index.js.map +2 -2
  111. package/index.js +1 -1
  112. package/inputs/AutoCompleteInput/AutoComplete.stories.d.ts +2 -0
  113. package/inputs/AutoCompleteInput/__stories__/Default.d.ts +1 -1
  114. package/inputs/AutoCompleteInput/__stories__/Multiple.d.ts +1 -1
  115. package/inputs/Checkboxes/Checkboxes.stories.d.ts +2 -0
  116. package/inputs/Checkboxes/__stories__/Conditional.d.ts +1 -1
  117. package/inputs/Checkboxes/__stories__/Default.d.ts +1 -1
  118. package/inputs/Checkboxes/__stories__/WithDivider.d.ts +1 -1
  119. package/inputs/Checkboxes/index.js +1 -1
  120. package/inputs/Checkboxes/index.js.map +2 -2
  121. package/inputs/DateInput/DateInput.stories.d.ts +2 -0
  122. package/inputs/DateInput/__stories__/Default.d.ts +1 -1
  123. package/inputs/DateInput/index.js +20 -8
  124. package/inputs/DateInput/index.js.map +2 -2
  125. package/inputs/DateTimeInput/DateTimeInput.stories.d.ts +2 -0
  126. package/inputs/DateTimeInput/__stories__/Default.d.ts +1 -1
  127. package/inputs/DateTimeInput/index.js +23 -10
  128. package/inputs/DateTimeInput/index.js.map +2 -2
  129. package/inputs/FileInput/FileInput.stories.d.ts +3 -0
  130. package/inputs/FileInput/__stories__/Default.d.ts +1 -1
  131. package/inputs/FileInput/__stories__/WithBorderAndLink.d.ts +3 -0
  132. package/inputs/FileInput/index.d.ts +6 -3
  133. package/inputs/FileInput/index.js +31 -23
  134. package/inputs/FileInput/index.js.map +2 -2
  135. package/inputs/ImageInput/ImageInput.stories.d.ts +4 -1
  136. package/inputs/ImageInput/__stories__/Default.d.ts +1 -1
  137. package/inputs/ImageInput/__stories__/MaxSize.d.ts +1 -1
  138. package/inputs/ImageInput/__stories__/WithInitialValues.d.ts +3 -0
  139. package/inputs/ImageInput/__stories__/WithInvalidImageDimension.d.ts +1 -1
  140. package/inputs/ImageInput/__stories__/logo.d/index.js +1 -0
  141. package/inputs/ImageInput/__stories__/logo.d/package.json +6 -0
  142. package/inputs/ImageInput/__stories__/logo.d.js.map +7 -0
  143. package/inputs/ImageInput/index.d.ts +9 -1
  144. package/inputs/ImageInput/index.js +42 -11
  145. package/inputs/ImageInput/index.js.map +2 -2
  146. package/inputs/Input/Input.stories.d.ts +4 -0
  147. package/inputs/Input/__stories__/AFM.d.ts +1 -1
  148. package/inputs/Input/__stories__/AMKA.d.ts +3 -0
  149. package/inputs/Input/__stories__/Boolean.d.ts +1 -1
  150. package/inputs/Input/__stories__/Email.d.ts +3 -0
  151. package/inputs/Input/__stories__/IBAN.d.ts +1 -1
  152. package/inputs/Input/__stories__/Integer.d.ts +1 -1
  153. package/inputs/Input/__stories__/LandlineNumber.d.ts +1 -1
  154. package/inputs/Input/__stories__/MobilePhone.d.ts +1 -1
  155. package/inputs/Input/__stories__/PhoneNumber.d.ts +1 -1
  156. package/inputs/Input/__stories__/PostalCode.d.ts +1 -1
  157. package/inputs/Input/__stories__/String.d.ts +1 -1
  158. package/inputs/Input/__stories__/StringWithTrimValidation.d.ts +1 -1
  159. package/inputs/Input/__stories__/TextWithLimit.d.ts +1 -1
  160. package/inputs/Input/index.d.ts +2 -1
  161. package/inputs/Input/index.js +4 -4
  162. package/inputs/Input/index.js.map +2 -2
  163. package/inputs/Label/Label.stories.d.ts +2 -0
  164. package/inputs/Label/__stories__/Default.d.ts +1 -1
  165. package/inputs/OtpInput/OtpInput.stories.d.ts +2 -0
  166. package/inputs/OtpInput/__stories__/Default.d.ts +1 -1
  167. package/inputs/Radio/Radio.stories.d.ts +2 -0
  168. package/inputs/Radio/__stories__/Conditional.d.ts +1 -1
  169. package/inputs/Radio/__stories__/Default.d.ts +1 -1
  170. package/inputs/Radio/__stories__/WithDivider.d.ts +1 -1
  171. package/inputs/Select/Select.stories.d.ts +2 -0
  172. package/inputs/Select/__stories__/Default.d.ts +1 -1
  173. package/inputs/Select/index.d.ts +2 -1
  174. package/inputs/Select/index.js +4 -3
  175. package/inputs/Select/index.js.map +2 -2
  176. package/inputs/inputsScenarios/index.js +2 -2
  177. package/inputs/inputsScenarios.d.ts +1 -1
  178. package/inputs/inputsScenarios.js.map +2 -2
  179. package/lazy/index.js +2 -1
  180. package/package.json +8 -8
  181. package/registry/index.js +8 -8
  182. package/src/Field/FieldBase.tsx +5 -1
  183. package/src/Field/FieldBaseContainer.tsx +8 -4
  184. package/src/Field/FieldConditional.tsx +4 -0
  185. package/src/Field/doc.mdx +202 -1
  186. package/src/Field/index.tsx +15 -5
  187. package/src/Field/types.tsx +12 -3
  188. package/src/Field/utils/index.ts +2 -0
  189. package/src/Field/utils/useField.ts +9 -1
  190. package/src/FieldArray/FormDialog.tsx +430 -243
  191. package/src/FieldArray/__stories__/Default.tsx +1 -1
  192. package/src/FieldArray/__stories__/WithExactLength.tsx +1 -1
  193. package/src/FieldArray/__stories__/WithModal.tsx +4 -3
  194. package/src/FieldArray/index.test.tsx +4 -0
  195. package/src/FieldArray/index.tsx +26 -30
  196. package/src/FieldObject/index.tsx +33 -18
  197. package/src/FormBuilder/FormBuilder.stories.js +3 -0
  198. package/src/FormBuilder/__stories__/AutoErrorGrouping.tsx +1 -1
  199. package/src/FormBuilder/__stories__/Default.tsx +1 -1
  200. package/src/FormBuilder/__stories__/ErrorGrouping.tsx +1 -1
  201. package/src/FormBuilder/doc.mdx +9 -4
  202. package/src/FormBuilder/index.test.tsx +4 -0
  203. package/src/FormBuilder/index.tsx +12 -6
  204. package/src/FormBuilder/interaction.test.tsx +8 -0
  205. package/src/FormBuilder/scenarios.test.tsx +7 -7
  206. package/src/FormContext.tsx +5 -1
  207. package/src/MultiplicityField/MultiplicityField.stories.js +3 -0
  208. package/src/MultiplicityField/__stories__/Default.tsx +1 -1
  209. package/src/MultiplicityField/__stories__/PreviewDisplay.tsx +1 -1
  210. package/src/MultiplicityField/__stories__/WithExactLength.tsx +1 -1
  211. package/src/MultiplicityField/__stories__/WithMaxLength.tsx +1 -1
  212. package/src/MultiplicityField/__stories__/WithMinAndMaxLength.tsx +1 -1
  213. package/src/MultiplicityField/__stories__/WithMinLength.tsx +1 -1
  214. package/src/MultiplicityField/add-objects.tsx +2 -0
  215. package/src/MultiplicityField/doc.mdx +101 -83
  216. package/src/MultiplicityField/index.test.tsx +4 -0
  217. package/src/MultiplicityField/index.tsx +3 -0
  218. package/src/MultiplicityField/types.ts +1 -0
  219. package/src/Questions/Questions.stories.js +3 -0
  220. package/src/Questions/__snapshots__/index.spec.tsx.snap +2 -1
  221. package/src/Questions/__stories__/Default.tsx +1 -1
  222. package/src/Questions/doc.mdx +21 -41
  223. package/src/Questions/index.test.tsx +4 -0
  224. package/src/doc.mdx +26 -11
  225. package/src/inputs/AutoCompleteInput/AutoComplete.stories.js +3 -0
  226. package/src/inputs/AutoCompleteInput/__stories__/Default.tsx +1 -1
  227. package/src/inputs/AutoCompleteInput/__stories__/Multiple.tsx +1 -1
  228. package/src/inputs/AutoCompleteInput/index.test.tsx +4 -0
  229. package/src/inputs/Checkboxes/Checkboxes.stories.js +3 -0
  230. package/src/inputs/Checkboxes/__stories__/Conditional.tsx +1 -1
  231. package/src/inputs/Checkboxes/__stories__/Default.tsx +1 -1
  232. package/src/inputs/Checkboxes/__stories__/WithDivider.tsx +1 -1
  233. package/src/inputs/Checkboxes/index.test.tsx +4 -0
  234. package/src/inputs/Checkboxes/index.tsx +1 -1
  235. package/src/inputs/DateInput/DateInput.stories.js +3 -0
  236. package/src/inputs/DateInput/__stories__/Default.tsx +1 -1
  237. package/src/inputs/DateInput/index.test.tsx +4 -0
  238. package/src/inputs/DateInput/index.tsx +21 -7
  239. package/src/inputs/DateTimeInput/DateTimeInput.stories.js +3 -0
  240. package/src/inputs/DateTimeInput/__stories__/Default.tsx +1 -1
  241. package/src/inputs/DateTimeInput/index.test.tsx +4 -0
  242. package/src/inputs/DateTimeInput/index.tsx +24 -9
  243. package/src/inputs/FileInput/FileInput.stories.js +4 -0
  244. package/src/inputs/FileInput/__stories__/Default.tsx +1 -1
  245. package/src/inputs/FileInput/__stories__/WithBorderAndLink.tsx +34 -0
  246. package/src/inputs/FileInput/index.test.tsx +8 -0
  247. package/src/inputs/FileInput/index.tsx +41 -30
  248. package/src/inputs/ImageInput/ImageInput.stories.js +5 -1
  249. package/src/inputs/ImageInput/__stories__/Default.tsx +1 -1
  250. package/src/inputs/ImageInput/__stories__/MaxSize.tsx +3 -2
  251. package/src/inputs/ImageInput/__stories__/{WithInvalidImageSize.tsx → WithInitialValues.tsx} +12 -3
  252. package/src/inputs/ImageInput/__stories__/WithInvalidImageDimension.tsx +1 -1
  253. package/src/inputs/ImageInput/__stories__/logo.d.ts +4 -0
  254. package/src/inputs/ImageInput/__stories__/logo.png +0 -0
  255. package/src/inputs/ImageInput/index.test.tsx +8 -4
  256. package/src/inputs/ImageInput/index.tsx +100 -48
  257. package/src/inputs/Input/Input.stories.js +5 -0
  258. package/src/inputs/Input/__stories__/AFM.tsx +1 -1
  259. package/src/inputs/Input/__stories__/AMKA.tsx +23 -0
  260. package/src/inputs/Input/__stories__/Boolean.tsx +1 -1
  261. package/src/inputs/Input/__stories__/Email.tsx +23 -0
  262. package/src/inputs/Input/__stories__/IBAN.tsx +1 -1
  263. package/src/inputs/Input/__stories__/Integer.tsx +1 -1
  264. package/src/inputs/Input/__stories__/LandlineNumber.tsx +1 -1
  265. package/src/inputs/Input/__stories__/MobilePhone.tsx +1 -1
  266. package/src/inputs/Input/__stories__/PhoneNumber.tsx +1 -1
  267. package/src/inputs/Input/__stories__/PostalCode.tsx +1 -1
  268. package/src/inputs/Input/__stories__/String.tsx +1 -1
  269. package/src/inputs/Input/__stories__/StringWithTrimValidation.tsx +1 -1
  270. package/src/inputs/Input/__stories__/TextWithLimit.tsx +1 -1
  271. package/src/inputs/Input/index.test.tsx +12 -0
  272. package/src/inputs/Input/index.tsx +5 -3
  273. package/src/inputs/Label/Label.stories.js +3 -0
  274. package/src/inputs/Label/__stories__/Default.tsx +1 -1
  275. package/src/inputs/Label/index.test.tsx +4 -0
  276. package/src/inputs/OtpInput/OtpInput.stories.js +3 -0
  277. package/src/inputs/OtpInput/__stories__/Default.tsx +1 -1
  278. package/src/inputs/OtpInput/index.test.tsx +4 -0
  279. package/src/inputs/Radio/Radio.stories.js +3 -0
  280. package/src/inputs/Radio/__stories__/Conditional.tsx +1 -1
  281. package/src/inputs/Radio/__stories__/Default.tsx +1 -1
  282. package/src/inputs/Radio/__stories__/WithDivider.tsx +1 -1
  283. package/src/inputs/Radio/index.test.tsx +4 -0
  284. package/src/inputs/Select/Select.stories.js +3 -0
  285. package/src/inputs/Select/__stories__/Default.tsx +1 -1
  286. package/src/inputs/Select/index.test.tsx +4 -0
  287. package/src/inputs/Select/index.tsx +7 -4
  288. package/src/inputs/inputsScenarios.ts +2 -2
  289. package/src/lazy.js +2 -1
  290. package/src/registry.js +8 -8
  291. package/src/types.tsx +2 -1
  292. package/src/utils.ts +27 -6
  293. package/src/validators/index.ts +16 -5
  294. package/src/validators/utils/amka.ts +39 -0
  295. package/src/validators/utils/file.ts +33 -19
  296. package/src/validators/utils/index.ts +4 -1
  297. package/types.d.ts +2 -1
  298. package/types.js.map +1 -1
  299. package/utils/index.js +20 -6
  300. package/utils.d.ts +2 -0
  301. package/utils.js.map +2 -2
  302. package/validators/index.d.ts +1 -1
  303. package/validators/index.js +11 -5
  304. package/validators/index.js.map +2 -2
  305. package/validators/utils/amka/index.js +36 -0
  306. package/{inputs/Input/inputsInputScenarios → validators/utils/amka}/package.json +1 -1
  307. package/validators/utils/amka.d.ts +6 -0
  308. package/validators/utils/amka.js.map +7 -0
  309. package/validators/utils/file/index.js +30 -17
  310. package/validators/utils/file.js.map +2 -2
  311. package/validators/utils/index.d.ts +1 -0
  312. package/validators/utils/index.js +4 -1
  313. package/validators/utils/index.js.map +2 -2
  314. package/cjs/inputs/Input/inputsInputScenarios/index.js +0 -439
  315. package/cjs/inputs/Input/inputsInputScenarios.js.map +0 -7
  316. package/inputs/ImageInput/__stories__/WithInvalidImageSize.d.ts +0 -3
  317. package/inputs/Input/inputsInputScenarios/index.js +0 -406
  318. package/inputs/Input/inputsInputScenarios.d.ts +0 -57
  319. package/inputs/Input/inputsInputScenarios.js.map +0 -7
  320. package/src/inputs/Input/inputsInputScenarios.ts +0 -404
package/lazy/index.js CHANGED
@@ -9,12 +9,12 @@ export default {
9
9
  'FieldBase': lazy(() => import('@digigov/form/Field/FieldBase').then((module) => ({ default: module['FieldBase'] }))),
10
10
  'FieldBaseContainer': lazy(() => import('@digigov/form/Field/FieldBaseContainer').then((module) => ({ default: module['FieldBaseContainer'] }))),
11
11
  'FieldConditional': lazy(() => import('@digigov/form/Field/FieldConditional').then((module) => ({ default: module['FieldConditional'] }))),
12
- 'FieldObject': lazy(() => import('@digigov/form/FieldObject').then((module) => ({ default: module['FieldObject'] }))),
13
12
  'FormDialog': lazy(() => import('@digigov/form/FieldArray/FormDialog').then((module) => ({ default: module['FormDialog'] }))),
14
13
  'ArrayItemModal': lazy(() => import('@digigov/form/FieldArray/FormDialog').then((module) => ({ default: module['ArrayItemModal'] }))),
15
14
  'ArrayItemHeader': lazy(() => import('@digigov/form/FieldArray/FormDialog').then((module) => ({ default: module['ArrayItemHeader'] }))),
16
15
  'ArrayItemDisplay': lazy(() => import('@digigov/form/FieldArray/FormDialog').then((module) => ({ default: module['ArrayItemDisplay'] }))),
17
16
  'FieldArray': lazy(() => import('@digigov/form/FieldArray').then((module) => ({ default: module['FieldArray'] }))),
17
+ 'FieldObject': lazy(() => import('@digigov/form/FieldObject').then((module) => ({ default: module['FieldObject'] }))),
18
18
  'FieldsetWithContext': lazy(() => import('@digigov/form/Fieldset/FieldsetWithContext').then((module) => ({ default: module['FieldsetWithContext'] }))),
19
19
  'FieldsetLabel': lazy(() => import('@digigov/form/Fieldset').then((module) => ({ default: module['FieldsetLabel'] }))),
20
20
  'FieldsetCaption': lazy(() => import('@digigov/form/Fieldset').then((module) => ({ default: module['FieldsetCaption'] }))),
@@ -57,6 +57,7 @@ export default {
57
57
  'RadioButtonsGroup': lazy(() => import('@digigov/form/inputs/Radio').then((module) => ({ default: module['RadioButtonsGroup'] }))),
58
58
  'ControlledRadioButtonsGroup': lazy(() => import('@digigov/form/inputs/Radio').then((module) => ({ default: module['ControlledRadioButtonsGroup'] }))),
59
59
  'AFM_VALIDATOR': lazy(() => import('@digigov/form/validators/utils').then((module) => ({ default: module['AFM_VALIDATOR'] }))),
60
+ 'AMKA_VALIDATOR': lazy(() => import('@digigov/form/validators/utils').then((module) => ({ default: module['AMKA_VALIDATOR'] }))),
60
61
  'LATER_THAN_VALIDATOR': lazy(() => import('@digigov/form/validators/utils').then((module) => ({ default: module['LATER_THAN_VALIDATOR'] }))),
61
62
  'EARLIER_THAN_VALIDATOR': lazy(() => import('@digigov/form/validators/utils').then((module) => ({ default: module['EARLIER_THAN_VALIDATOR'] }))),
62
63
  'DATE_VALIDATOR': lazy(() => import('@digigov/form/validators/utils').then((module) => ({ default: module['DATE_VALIDATOR'] }))),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digigov/form",
3
- "version": "2.0.0-8e254888",
3
+ "version": "2.0.0-a402a664",
4
4
  "description": "@digigov form builder",
5
5
  "author": "GRNET Developers <devs@lists.grnet.gr>",
6
6
  "license": "BSD-2-Clause",
@@ -10,18 +10,18 @@
10
10
  "access": "public"
11
11
  },
12
12
  "dependencies": {
13
- "react-hook-form": "7.33.1",
13
+ "react-hook-form": "7.56.1",
14
14
  "yup": "0.32.11",
15
15
  "dayjs": "1.10.4",
16
- "@hookform/resolvers": "3.9.0",
17
- "@digigov/react-icons": "2.0.0-8e254888"
16
+ "@hookform/resolvers": "5.0.1",
17
+ "@digigov/react-icons": "2.0.0-a402a664"
18
18
  },
19
19
  "peerDependencies": {
20
- "@digigov/ui": "2.0.0-8e254888",
21
- "@digigov/react-core": "2.0.0-8e254888",
20
+ "@digigov/ui": "2.0.0-a402a664",
21
+ "@digigov/react-core": "2.0.0-a402a664",
22
22
  "clsx": "1.1.1",
23
- "react": ">=16.8.0 <19.0.0",
24
- "react-dom": ">=16.8.0 <19.0.0"
23
+ "react": "^18.3.0 || ^19.1.0",
24
+ "react-dom": "^18.3.0 || ^19.1.0"
25
25
  },
26
26
  "gitHead": "c903a46306f77f55ad7fc4d2e274006f39a6c871",
27
27
  "private": false,
package/registry/index.js CHANGED
@@ -10,9 +10,9 @@ import * as _digigov_form_Field_FieldBaseContainer from "@digigov/form/Field/Fie
10
10
  import * as _digigov_form_Field_FieldConditional from "@digigov/form/Field/FieldConditional";
11
11
  import * as _digigov_form_Field from "@digigov/form/Field";
12
12
  import * as _digigov_form_Field_types from "@digigov/form/Field/types";
13
- import * as _digigov_form_FieldObject from "@digigov/form/FieldObject";
14
13
  import * as _digigov_form_FieldArray_FormDialog from "@digigov/form/FieldArray/FormDialog";
15
14
  import * as _digigov_form_FieldArray from "@digigov/form/FieldArray";
15
+ import * as _digigov_form_FieldObject from "@digigov/form/FieldObject";
16
16
  import * as _digigov_form_Fieldset_FieldsetWithContext from "@digigov/form/Fieldset/FieldsetWithContext";
17
17
  import * as _digigov_form_Fieldset from "@digigov/form/Fieldset";
18
18
  import * as _digigov_form_Fieldset_types from "@digigov/form/Fieldset/types";
@@ -45,19 +45,19 @@ import * as _digigov_form_Questions_Step_StepTitle from "@digigov/form/Questions
45
45
  import * as _digigov_form_Questions_Step_getAddMoreFields from "@digigov/form/Questions/Step/getAddMoreFields";
46
46
  import * as _digigov_form_Questions_Step from "@digigov/form/Questions/Step";
47
47
  import * as _digigov_form_Questions_Step_types from "@digigov/form/Questions/Step/types";
48
- import * as _digigov_form_inputs_AutoCompleteInput from "@digigov/form/inputs/AutoCompleteInput";
49
48
  import * as _digigov_form_inputs_Checkboxes from "@digigov/form/inputs/Checkboxes";
49
+ import * as _digigov_form_inputs_AutoCompleteInput from "@digigov/form/inputs/AutoCompleteInput";
50
50
  import * as _digigov_form_inputs_DateInput from "@digigov/form/inputs/DateInput";
51
- import * as _digigov_form_inputs_FileInput from "@digigov/form/inputs/FileInput";
52
51
  import * as _digigov_form_inputs_DateTimeInput from "@digigov/form/inputs/DateTimeInput";
52
+ import * as _digigov_form_inputs_FileInput from "@digigov/form/inputs/FileInput";
53
53
  import * as _digigov_form_inputs_ImageInput from "@digigov/form/inputs/ImageInput";
54
54
  import * as _digigov_form_inputs_Input from "@digigov/form/inputs/Input";
55
- import * as _digigov_form_inputs_Input_inputsInputScenarios from "@digigov/form/inputs/Input/inputsInputScenarios";
56
55
  import * as _digigov_form_inputs_Label from "@digigov/form/inputs/Label";
57
56
  import * as _digigov_form_inputs_OtpInput from "@digigov/form/inputs/OtpInput";
58
57
  import * as _digigov_form_inputs_Radio from "@digigov/form/inputs/Radio";
59
58
  import * as _digigov_form_inputs_Select from "@digigov/form/inputs/Select";
60
59
  import * as _digigov_form_validators_utils_afm from "@digigov/form/validators/utils/afm";
60
+ import * as _digigov_form_validators_utils_amka from "@digigov/form/validators/utils/amka";
61
61
  import * as _digigov_form_validators_utils_date from "@digigov/form/validators/utils/date";
62
62
  import * as _digigov_form_validators_utils_datetime from "@digigov/form/validators/utils/datetime";
63
63
  import * as _digigov_form_validators_utils_file from "@digigov/form/validators/utils/file";
@@ -101,9 +101,9 @@ export default {
101
101
  '@digigov/form/Field/FieldConditional': lazyImport(_digigov_form_Field_FieldConditional),
102
102
  '@digigov/form/Field': lazyImport(_digigov_form_Field),
103
103
  '@digigov/form/Field/types': lazyImport(_digigov_form_Field_types),
104
- '@digigov/form/FieldObject': lazyImport(_digigov_form_FieldObject),
105
104
  '@digigov/form/FieldArray/FormDialog': lazyImport(_digigov_form_FieldArray_FormDialog),
106
105
  '@digigov/form/FieldArray': lazyImport(_digigov_form_FieldArray),
106
+ '@digigov/form/FieldObject': lazyImport(_digigov_form_FieldObject),
107
107
  '@digigov/form/Fieldset/FieldsetWithContext': lazyImport(_digigov_form_Fieldset_FieldsetWithContext),
108
108
  '@digigov/form/Fieldset': lazyImport(_digigov_form_Fieldset),
109
109
  '@digigov/form/Fieldset/types': lazyImport(_digigov_form_Fieldset_types),
@@ -136,19 +136,19 @@ export default {
136
136
  '@digigov/form/Questions/Step/getAddMoreFields': lazyImport(_digigov_form_Questions_Step_getAddMoreFields),
137
137
  '@digigov/form/Questions/Step': lazyImport(_digigov_form_Questions_Step),
138
138
  '@digigov/form/Questions/Step/types': lazyImport(_digigov_form_Questions_Step_types),
139
- '@digigov/form/inputs/AutoCompleteInput': lazyImport(_digigov_form_inputs_AutoCompleteInput),
140
139
  '@digigov/form/inputs/Checkboxes': lazyImport(_digigov_form_inputs_Checkboxes),
140
+ '@digigov/form/inputs/AutoCompleteInput': lazyImport(_digigov_form_inputs_AutoCompleteInput),
141
141
  '@digigov/form/inputs/DateInput': lazyImport(_digigov_form_inputs_DateInput),
142
- '@digigov/form/inputs/FileInput': lazyImport(_digigov_form_inputs_FileInput),
143
142
  '@digigov/form/inputs/DateTimeInput': lazyImport(_digigov_form_inputs_DateTimeInput),
143
+ '@digigov/form/inputs/FileInput': lazyImport(_digigov_form_inputs_FileInput),
144
144
  '@digigov/form/inputs/ImageInput': lazyImport(_digigov_form_inputs_ImageInput),
145
145
  '@digigov/form/inputs/Input': lazyImport(_digigov_form_inputs_Input),
146
- '@digigov/form/inputs/Input/inputsInputScenarios': lazyImport(_digigov_form_inputs_Input_inputsInputScenarios),
147
146
  '@digigov/form/inputs/Label': lazyImport(_digigov_form_inputs_Label),
148
147
  '@digigov/form/inputs/OtpInput': lazyImport(_digigov_form_inputs_OtpInput),
149
148
  '@digigov/form/inputs/Radio': lazyImport(_digigov_form_inputs_Radio),
150
149
  '@digigov/form/inputs/Select': lazyImport(_digigov_form_inputs_Select),
151
150
  '@digigov/form/validators/utils/afm': lazyImport(_digigov_form_validators_utils_afm),
151
+ '@digigov/form/validators/utils/amka': lazyImport(_digigov_form_validators_utils_amka),
152
152
  '@digigov/form/validators/utils/date': lazyImport(_digigov_form_validators_utils_date),
153
153
  '@digigov/form/validators/utils/datetime': lazyImport(_digigov_form_validators_utils_datetime),
154
154
  '@digigov/form/validators/utils/file': lazyImport(_digigov_form_validators_utils_file),
@@ -39,10 +39,12 @@ export const FieldBase: React.FC<FieldBaseProps> = ({
39
39
  <FieldBaseContainer
40
40
  label={label}
41
41
  layout={layout}
42
+ register={register}
42
43
  error={errorGroupContext ? undefined : error}
43
44
  hasError={!!error}
44
45
  wrapper={wrapper}
45
46
  name={name}
47
+ controlled={controlled}
46
48
  >
47
49
  <Controller
48
50
  control={control}
@@ -74,6 +76,7 @@ export const FieldBase: React.FC<FieldBaseProps> = ({
74
76
  <FieldBaseContainer
75
77
  label={label}
76
78
  layout={layout}
79
+ register={register}
77
80
  error={errorGroupContext ? undefined : error}
78
81
  hasError={!!error}
79
82
  wrapper={wrapper}
@@ -90,6 +93,7 @@ export const FieldBase: React.FC<FieldBaseProps> = ({
90
93
  aria-describedby={error && `${name}-error`}
91
94
  required={required}
92
95
  disabled={editable === false}
96
+ defaultValue={defaultValue}
93
97
  {...componentProps}
94
98
  />
95
99
  ) : (
@@ -100,11 +104,11 @@ export const FieldBase: React.FC<FieldBaseProps> = ({
100
104
  error={!!error}
101
105
  extra={extra}
102
106
  type={type}
107
+ defaultValue={defaultValue}
103
108
  aria-required={!!required}
104
109
  aria-describedby={error && `${name}-error`}
105
110
  required={required}
106
111
  disabled={editable === false}
107
- ref={undefined}
108
112
  {...componentProps}
109
113
  />
110
114
  )}
@@ -3,7 +3,7 @@ import { FieldContainerProps } from '@digigov/form/Field/types';
3
3
  import Label from '@digigov/form/inputs/Label';
4
4
  import { ErrorMessage } from '@digigov/react-core/ErrorMessage';
5
5
  import FieldContainer from '@digigov/react-core/FieldContainer';
6
- import CoreFieldset from '@digigov/react-core/Fieldset';
6
+ import Fieldset from '@digigov/react-core/Fieldset';
7
7
  import FieldsetLegend from '@digigov/react-core/FieldsetLegend';
8
8
  import LabelContainer from '@digigov/react-core/LabelContainer';
9
9
  import { useTranslation } from '@digigov/ui/i18n';
@@ -17,6 +17,8 @@ export const FieldBaseContainer: React.FC<FieldContainerProps> = ({
17
17
  error,
18
18
  hasError,
19
19
  layout,
20
+ controlled,
21
+ labelSize = 'sm',
20
22
  }) => {
21
23
  const { t } = useTranslation();
22
24
  const errorMessage = error?.message.key
@@ -26,8 +28,10 @@ export const FieldBaseContainer: React.FC<FieldContainerProps> = ({
26
28
  if (wrapper === 'fieldset') {
27
29
  return (
28
30
  <FieldContainer error={hasError} {...layout}>
29
- <CoreFieldset>
30
- <FieldsetLegend size="sm">{label && label.primary}</FieldsetLegend>
31
+ <Fieldset {...(controlled && { tabIndex: -1 })}>
32
+ <FieldsetLegend size={labelSize}>
33
+ {label && label.primary}
34
+ </FieldsetLegend>
31
35
  {label && label.secondary && <Hint>{t(label.secondary)}</Hint>}
32
36
  {error && (
33
37
  <ErrorMessage id={`${name}-error`}>
@@ -36,7 +40,7 @@ export const FieldBaseContainer: React.FC<FieldContainerProps> = ({
36
40
  )}
37
41
  {children}
38
42
  {label && label.hint && <Hint size="sm">{label.hint}</Hint>}
39
- </CoreFieldset>
43
+ </Fieldset>
40
44
  </FieldContainer>
41
45
  );
42
46
  } else {
@@ -13,6 +13,7 @@ const ChildFieldMemo = React.memo(
13
13
  field,
14
14
  control,
15
15
  reset,
16
+ resetField,
16
17
  register,
17
18
  error,
18
19
  Field,
@@ -27,6 +28,7 @@ const ChildFieldMemo = React.memo(
27
28
  Field={Field}
28
29
  name={newField.key}
29
30
  reset={reset}
31
+ resetField={resetField}
30
32
  control={control}
31
33
  register={register}
32
34
  error={error}
@@ -54,6 +56,7 @@ export const FieldConditional: React.FC<FieldConditionalProps> = ({
54
56
  field,
55
57
  register,
56
58
  reset,
59
+ resetField,
57
60
  error,
58
61
  Field,
59
62
  }) => {
@@ -76,6 +79,7 @@ export const FieldConditional: React.FC<FieldConditionalProps> = ({
76
79
  control={control}
77
80
  register={register}
78
81
  reset={reset}
82
+ resetField={resetField}
79
83
  error={error}
80
84
  Field={Field}
81
85
  />
package/src/Field/doc.mdx CHANGED
@@ -3,4 +3,205 @@ title: Form
3
3
  parent: docs/form/components
4
4
  ---
5
5
 
6
- hello md
6
+ # Field
7
+
8
+ Field allow users to create different types of inputs based on data that is described by a particular config schema.
9
+
10
+ ```jsx
11
+ import React from 'react';
12
+ import FormBuilder, { Field } from '@digigov/form';
13
+ import { Button } from '@digigov/ui/form/Button';
14
+
15
+ const fields = [
16
+ {
17
+ key: 'first_name',
18
+ type: 'string',
19
+ required: true,
20
+ label: {
21
+ primary: 'Ποιo είναι το όνομά σας;',
22
+ },
23
+ },
24
+ ];
25
+
26
+ export const MyComponent = () => (
27
+ <FormBuilder onSubmit={(data) => console.log(data)}>
28
+ {fields.map(({ key, ...field }) => {
29
+ return <Field {...field} name={key} key={key} />;
30
+ })}
31
+ <Button type="submit">Συνέχεια</Button>
32
+ </FormBuilder>
33
+ );
34
+ export default MyComponent;
35
+ ```
36
+
37
+ ## Accessibility & Usability
38
+
39
+ Our goal is to create semantically correct and valid forms, which means
40
+ we must avoid mixing form-related HTML elements (like form, input, label) with generic
41
+ ones (such as div, cards, or custom components). For instance, if a paragraph element is
42
+ placed inside a form, React will display warnings in the console. Rather than building overly
43
+ complex interfaces that attempt to accomplish too much too quickly, Digigov Form encourages
44
+ using forms in their intended way—filling out and validating inputs, and then submitting the form
45
+ as a whole.
46
+
47
+ Additionally, we must ensure our interfaces are fully accessible to screen readers and other
48
+ assistive technologies. This is why we designed the flow to be as guided and recoverable as possible.
49
+ Forms and fields should be clear and logical, reading like well-written text for the users.
50
+ If validation fails, the system provides users with meaningful error messages and clear instructions on how to correct the errors.
51
+ Once validation is successful, the data can be submitted. It is crucial to provide helpful information to users at each step.
52
+ Therefore, we should avoid relying on flashy “magic” UX solutions that assume users have advanced digital skills,
53
+ as these are often intended for expert use cases.
54
+
55
+ ## Introducing the Field component
56
+
57
+ Field is a component that creates `form` inputs dynamically based on a `data config` schema.
58
+ The config structure is a `key-value` pair of data that describes the input fields and its usage.
59
+ In order to create an input, we need to provide a specific type of input for each field,
60
+ and we can use the `type` property for this.
61
+
62
+ ## Field types
63
+
64
+ The `type` property determines the type of input field to be rendered. Below are the available types and their descriptions.
65
+
66
+ | Type | Input Description |
67
+ | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
68
+ | `int` | A whole number. |
69
+ | `string` | A text string (e.g., name, address). |
70
+ | `text` | A larger text input, suitable for paragraphs or multiline text. |
71
+ | `boolean` | A binary value, typically a checkbox or toggle (true/false). |
72
+ | `email` | An email address (e.g., example@example.com). |
73
+ | `uuid4` | A universally unique identifier (UUID) in version 4 format. |
74
+ | `choice:multiple` | A selection of multiple options from a list (e.g., checkboxes). |
75
+ | `choice:single` | A single selection from a list (e.g., radio buttons). |
76
+ | `mobile_phone` | A phone number, typically with country code (e.g., +1-234-567-890). |
77
+ | `date` | A date input, typically in the format YYYY-MM-DD. |
78
+ | `datetime` | A date and time input, typically in the format YYYY-MM-DD HH:MM:SS. |
79
+ | `otp` | A one-time password, typically a short numeric or alphanumeric string. |
80
+ | `afm` | A Greek Tax Identification Number (AFM). |
81
+ | `iban` | An International Bank Account Number (IBAN). |
82
+ | `file` | A file upload input (e.g., for documents, images). |
83
+ | `image` | A file input that specifically handles images. |
84
+ | `postal_code` | A postal code input (e.g., ZIP code, postcode). |
85
+ | `phone_number` | A phone number input (e.g., with or without country code). |
86
+ | `array` | A list of values, typically displayed as multiple inputs ([MultiplicityField](/components/@digigov/form/MultiplicityField.html)). |
87
+ | `object` | A structured data object, often used for more complex or nested forms. |
88
+
89
+ ## Field properties
90
+
91
+ The Field component accepts several properties, that describes the input fields and its usage.
92
+
93
+ | Property | Type | Description |
94
+ | -------------- | ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
95
+ | `key` | `string` | The name of the field (TODO: rename to `name`). |
96
+ | `type` | Describes the format of each field, e.g., `type: 'string'` is a simple input format field | The type of input field. Defines the kind of value it accepts. |
97
+ | `trim` | `boolean` | If `true`, trims the input value. |
98
+ | `component` | `any` | A custom React component for the input field. |
99
+ | `autoComplete` | `string` | The `autocomplete` attribute value for the input field (e.g., 'on', 'off'). |
100
+ | `maxLength` | `number` | The maximum number of characters the input can accept. |
101
+ | `condition` | `Record<string, FieldCondition>` | Conditions for when the field should be shown, enabled, or validated. |
102
+ | `controlled` | `boolean` | If `true`, the input value is controlled by React state. |
103
+ | `label` | `FieldLabelProps` | The label associated with the input field. |
104
+ | `extra` | `Record<string, any>` | Extra custom attributes or settings for the field. |
105
+ | `editable` | `boolean` | If `false`, the field cannot be edited. |
106
+ | `variant` | `'inline' \| 'dialog'` | Defines the display variant of the field (e.g., inline or in a dialog). |
107
+ | `required` | `boolean` | If `true`, the field is required to be filled. |
108
+ | `enabled` | `boolean` | If `false`, the field is disabled and cannot be interacted with. |
109
+ | `disabled` | `boolean` | If `true`, the field is disabled. |
110
+ | `layout` | `Record<string, GridProps['xs' \| 'sm' \| 'md' \| 'lg' \| 'xl']>` | Defines the layout settings for the field (grid system). |
111
+ | `validators` | `ValidatorSchema[]` | Array of validators to be applied to the input field. |
112
+ | `wrapper` | `'label' \| 'fieldset'` | Defines the wrapping element for the field (label or fieldset). |
113
+ | `maxWidth` | `string` | The maximum width of the field. |
114
+ | `maxHeight` | `string` | The maximum height of the field. |
115
+ | `width` | `string` | The width of the field. |
116
+
117
+ ### How to use it
118
+
119
+ The `Field` component is a fundamental building block of the `form`.
120
+ We can implement a `Field` by using the `data config` or we can fill the `Field` directly with its properties.
121
+
122
+ First, we need to import the `FormBuilder` component from the `@digigov/form` path.
123
+
124
+ ```jsx pure
125
+ import React from 'react';
126
+ import FormBuilder from '@digigov/form';
127
+ import Button from '@digigov/ui/form/Button';
128
+
129
+ export default function MyFieldComponent() {
130
+ return (
131
+ <FormBuilder>
132
+ {/* this is where all fields will eventually be rendered */}
133
+ <Button type="submit">Συνέχεια</Button>
134
+ </FormBuilder>
135
+ );
136
+ }
137
+ ```
138
+
139
+ #### Data config
140
+
141
+ The `data config` is an array of objects that contains the configuration for each field.
142
+
143
+ ```jsx pure
144
+ const fields = [
145
+ {
146
+ key: 'first_name',
147
+ type: 'string',
148
+ required: true,
149
+ label: {
150
+ primary: 'Ποιo είναι το όνομά σας;',
151
+ },
152
+ },
153
+ ];
154
+ ```
155
+
156
+ Then we can use the `fields` array to render the Field(s).
157
+
158
+ ```jsx pure
159
+ import React from 'react';
160
+ import FormBuilder, { Field } from '@digigov/form';
161
+ import { Button } from '@digigov/ui/form/Button';
162
+
163
+ const fields = [
164
+ {
165
+ key: 'first_name',
166
+ type: 'string',
167
+ required: true,
168
+ label: {
169
+ primary: 'Ποιo είναι το όνομά σας;',
170
+ },
171
+ },
172
+ ];
173
+
174
+ export const MyComponent = () => (
175
+ <FormBuilder onSubmit={(data) => console.log(data)}>
176
+ {fields.map(({ key, ...field }) => {
177
+ return <Field {...field} name={key} key={key} />;
178
+ })}
179
+ <Button type="submit">Συνέχεια</Button>
180
+ </FormBuilder>
181
+ );
182
+ export default MyComponent;
183
+ ```
184
+
185
+ #### Directly
186
+
187
+ We can also use the `Field` component directly and pass the properties to it.
188
+
189
+ ```jsx pure
190
+ import React from 'react';
191
+ import FormBuilder, { Field } from '@digigov/form';
192
+ import { Button } from '@digigov/ui/form/Button';
193
+
194
+ export const MyComponent = () => (
195
+ <FormBuilder onSubmit={(data) => console.log(data)}>
196
+ <Field
197
+ key="first_name"
198
+ name="first_name"
199
+ label={{ primary: 'Οχήματα' }}
200
+ type="sting"
201
+ required
202
+ />
203
+ <Button type="submit">Συνέχεια</Button>
204
+ </FormBuilder>
205
+ );
206
+ export default MyComponent;
207
+ ```
@@ -16,7 +16,6 @@ import FieldArray from '@digigov/form/FieldArray';
16
16
  import Multiplicity from '@digigov/form/MultiplicityField';
17
17
  export const Field: React.FC<FieldProps> = ({
18
18
  name,
19
- disabled,
20
19
  children,
21
20
  ...customField
22
21
  }) => {
@@ -25,6 +24,7 @@ export const Field: React.FC<FieldProps> = ({
25
24
  control,
26
25
  register,
27
26
  reset,
27
+ resetField,
28
28
  error,
29
29
  componentRegistry,
30
30
  formState,
@@ -47,12 +47,12 @@ export const Field: React.FC<FieldProps> = ({
47
47
  ),
48
48
  [field]
49
49
  );
50
-
51
50
  if (calculatedField.condition) {
52
51
  return (
53
52
  <FieldConditional
54
53
  control={control}
55
54
  reset={reset}
55
+ resetField={resetField}
56
56
  register={register}
57
57
  field={calculatedField as FieldWithCondition}
58
58
  error={error}
@@ -68,12 +68,15 @@ export const Field: React.FC<FieldProps> = ({
68
68
  trigger={trigger}
69
69
  register={register}
70
70
  clearErrors={clearErrors}
71
- error={error}
71
+ error={
72
+ formState.isSubmitted && !formState.isSubmitting ? error : undefined
73
+ }
72
74
  getValues={getValues}
73
75
  setValue={setValue}
74
76
  formState={formState}
75
77
  Field={Field}
76
78
  reset={reset}
79
+ resetField={resetField}
77
80
  {...calculatedField}
78
81
  />
79
82
  );
@@ -94,20 +97,27 @@ export const Field: React.FC<FieldProps> = ({
94
97
  setValue={setValue}
95
98
  getValues={getValues}
96
99
  unregister={unregister}
100
+ resetField={resetField}
97
101
  Field={Field}
98
102
  {...calculatedField}
99
103
  />
100
104
  );
101
105
  }
106
+ const editable =
107
+ customField.editable === false || customField.disabled === true
108
+ ? false
109
+ : true;
110
+ const customError = error ? error : formState?.errors[name];
102
111
  return (
103
112
  <FieldBase
104
113
  {...calculatedField}
114
+ editable={editable}
105
115
  name={name}
106
- disabled={disabled}
107
116
  control={control}
108
117
  register={register}
109
118
  reset={reset}
110
- error={error}
119
+ error={customError}
120
+ resetField={resetField}
111
121
  Field={Field}
112
122
  />
113
123
  );
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { ErrorOption, UseFormReturn, UseFormProps } from 'react-hook-form';
3
3
  import { ValidatorSchema } from '@digigov/form/validators/types';
4
+ import { FieldsetLegendProps } from '@digigov/ui/form/FieldContainer';
4
5
  import { GridProps } from '@digigov/ui/layouts/Grid';
5
6
 
6
7
  export interface FieldLabelProps {
@@ -25,6 +26,7 @@ export interface FieldSpec {
25
26
  | 'datetime'
26
27
  | 'otp'
27
28
  | 'afm'
29
+ | 'amka'
28
30
  | 'iban'
29
31
  | 'file'
30
32
  | 'image'
@@ -35,6 +37,7 @@ export interface FieldSpec {
35
37
  trim?: boolean;
36
38
  component?: any;
37
39
  autoComplete?: string;
40
+ placeholder?: string;
38
41
  maxLength?: number;
39
42
  condition?: Record<string, FieldCondition>;
40
43
  controlled?: boolean;
@@ -44,7 +47,7 @@ export interface FieldSpec {
44
47
  variant?: 'inline' | 'dialog';
45
48
  required?: boolean;
46
49
  enabled?: boolean;
47
- disabled?: boolean;
50
+ disabled?: boolean; // TODO: keep disabled or editable
48
51
  layout?: Record<
49
52
  string,
50
53
  | GridProps['xs']
@@ -79,6 +82,7 @@ export interface FieldConditionalProps {
79
82
  control: UseFormReturn['control'];
80
83
  register: UseFormReturn['register'];
81
84
  reset: UseFormReturn['reset'];
85
+ resetField?: UseFormReturn['resetField'];
82
86
  error?: ErrorOption;
83
87
  Field: React.FC<FieldProps>;
84
88
  }
@@ -92,12 +96,15 @@ export interface FieldComponentItem {
92
96
 
93
97
  export interface FieldContainerProps {
94
98
  name?: FieldSpec['key'];
99
+ register: FieldBaseProps['register'];
95
100
  layout?: FieldSpec['layout'];
96
101
  label?: FieldSpec['label'];
97
102
  error?: ErrorOption | Record<string, any>;
98
103
  hasError?: boolean;
99
104
  children?: React.ReactNode;
105
+ controlled?: boolean;
100
106
  wrapper?: FieldSpec['wrapper'];
107
+ labelSize?: FieldsetLegendProps['size'];
101
108
  }
102
109
 
103
110
  export type FieldComponentRegistry = Record<string, FieldComponentItem>;
@@ -116,7 +123,7 @@ export interface ControlledFieldProps {
116
123
  error?: boolean;
117
124
  name?: string;
118
125
  disabled?: boolean;
119
- Field: React.FC<FieldProps>;
126
+ Field?: React.FC<FieldProps>;
120
127
  }
121
128
 
122
129
  export interface UncontrolledFieldProps {
@@ -144,7 +151,8 @@ export interface FieldBaseProps extends CalculatedField {
144
151
  control: UseFormReturn['control'];
145
152
  register: UseFormReturn['register'];
146
153
  reset: UseFormReturn['reset'];
147
- Field: React.FC<FieldProps>;
154
+ resetField?: UseFormReturn['resetField'];
155
+ Field?: React.FC<FieldProps>;
148
156
  }
149
157
 
150
158
  export interface FieldProps extends FieldSpec {
@@ -157,6 +165,7 @@ export interface UseFieldProps {
157
165
  control: FieldBaseProps['control'];
158
166
  register: FieldBaseProps['register'];
159
167
  reset: FieldBaseProps['reset'];
168
+ resetField: FieldBaseProps['resetField'];
160
169
  watch: UseFormReturn['watch'];
161
170
  formState: UseFormReturn['formState'];
162
171
  getFieldState: UseFormReturn['getFieldState'];
@@ -20,10 +20,12 @@ export const FIELD_COMPONENTS: FieldComponentRegistry = {
20
20
  file: {
21
21
  wrapper: 'fieldset',
22
22
  component: FileInput,
23
+ // controlled: true,
23
24
  },
24
25
  image: {
25
26
  wrapper: 'fieldset',
26
27
  component: ImageInput,
28
+ controlled: true,
27
29
  },
28
30
  date: {
29
31
  wrapper: 'fieldset',
@@ -11,6 +11,7 @@ export const useField = (
11
11
  control,
12
12
  register,
13
13
  reset,
14
+ resetField,
14
15
  trigger,
15
16
  clearErrors,
16
17
  errors,
@@ -30,11 +31,17 @@ export const useField = (
30
31
  `);
31
32
  }
32
33
  let error = errors[name];
33
- const nameIndexRegex = name.match(/^(.*?)\.(\d+)$/);
34
+
35
+ const nameIndexRegex = name.match(/^\[*(.*?)\.(\d+)\]*$/);
34
36
  if (nameIndexRegex) {
35
37
  const [, fieldArrayName, indexStr] = nameIndexRegex;
36
38
  error = errors[fieldArrayName]?.[Number(indexStr)];
37
39
  }
40
+ const nestedNameIndexRegex = name.match(/^\[*(.*?)\.(\d+)\.(.*?)\]*$/);
41
+ if (nestedNameIndexRegex) {
42
+ const [, fieldArrayName, indexStr, fieldItemName] = nestedNameIndexRegex;
43
+ error = errors[fieldArrayName]?.[Number(indexStr)]?.[fieldItemName];
44
+ }
38
45
  useMemo(
39
46
  () => customField?.type && registerField({ ...customField, key: name }),
40
47
  [customField, name, registerField]
@@ -44,6 +51,7 @@ export const useField = (
44
51
  control,
45
52
  register,
46
53
  reset,
54
+ resetField,
47
55
  trigger,
48
56
  watch,
49
57
  componentRegistry,