@digigov/form 2.0.0-2a26e869 → 2.0.0-44e7106a

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 (333) hide show
  1. package/Field/FieldBase/index.js +6 -1
  2. package/Field/FieldBase.js.map +2 -2
  3. package/Field/FieldBaseContainer/index.js +6 -4
  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 +15 -4
  8. package/Field/index.js.map +2 -2
  9. package/Field/types.d.ts +13 -3
  10. package/Field/utils/index.js +7 -0
  11. package/Field/utils/index.js.map +2 -2
  12. package/Field/utils/useField/index.js +14 -1
  13. package/Field/utils/useField.js.map +2 -2
  14. package/FieldArray/FieldArray.stories.d.ts +1 -0
  15. package/FieldArray/FormDialog/index.js +397 -0
  16. package/{inputs/Input/inputsInputScenarios → FieldArray/FormDialog}/package.json +1 -1
  17. package/FieldArray/FormDialog.d.ts +66 -0
  18. package/FieldArray/FormDialog.js.map +7 -0
  19. package/FieldArray/__stories__/Default.d.ts +1 -1
  20. package/FieldArray/__stories__/WithExactLength.d.ts +1 -1
  21. package/FieldArray/__stories__/WithModal.d.ts +2 -0
  22. package/FieldArray/index.d.ts +6 -0
  23. package/FieldArray/index.js +62 -23
  24. package/FieldArray/index.js.map +2 -2
  25. package/FieldObject/index.d.ts +5 -0
  26. package/FieldObject/index.js +30 -15
  27. package/FieldObject/index.js.map +2 -2
  28. package/FormBuilder/FormBuilder.stories.d.ts +2 -0
  29. package/FormBuilder/__stories__/AutoErrorGrouping.d.ts +1 -1
  30. package/FormBuilder/__stories__/Default.d.ts +1 -1
  31. package/FormBuilder/__stories__/ErrorGrouping.d.ts +1 -1
  32. package/FormBuilder/index.js +10 -2
  33. package/FormBuilder/index.js.map +2 -2
  34. package/MultiplicityField/MultiplicityField.stories.d.ts +2 -0
  35. package/MultiplicityField/__stories__/Default.d.ts +1 -1
  36. package/MultiplicityField/__stories__/PreviewDisplay.d.ts +1 -1
  37. package/MultiplicityField/__stories__/WithExactLength.d.ts +1 -1
  38. package/MultiplicityField/__stories__/WithMaxLength.d.ts +1 -1
  39. package/MultiplicityField/__stories__/WithMinAndMaxLength.d.ts +1 -1
  40. package/MultiplicityField/__stories__/WithMinLength.d.ts +1 -1
  41. package/MultiplicityField/add-objects/index.js +2 -0
  42. package/MultiplicityField/add-objects.js.map +2 -2
  43. package/MultiplicityField/index.js +4 -1
  44. package/MultiplicityField/index.js.map +2 -2
  45. package/MultiplicityField/types.d.ts +1 -0
  46. package/Questions/Questions.stories.d.ts +2 -0
  47. package/Questions/__stories__/Default.d.ts +1 -1
  48. package/cjs/Field/FieldBase/index.js +6 -1
  49. package/cjs/Field/FieldBase.js.map +2 -2
  50. package/cjs/Field/FieldBaseContainer/index.js +5 -3
  51. package/cjs/Field/FieldBaseContainer.js.map +3 -3
  52. package/cjs/Field/FieldConditional/index.js +4 -0
  53. package/cjs/Field/FieldConditional.js.map +2 -2
  54. package/cjs/Field/index.js +15 -4
  55. package/cjs/Field/index.js.map +2 -2
  56. package/cjs/Field/types.js.map +1 -1
  57. package/cjs/Field/utils/index.js +7 -0
  58. package/cjs/Field/utils/index.js.map +3 -3
  59. package/cjs/Field/utils/useField/index.js +14 -1
  60. package/cjs/Field/utils/useField.js.map +2 -2
  61. package/cjs/FieldArray/FormDialog/index.js +416 -0
  62. package/cjs/FieldArray/FormDialog.js.map +7 -0
  63. package/cjs/FieldArray/index.js +62 -23
  64. package/cjs/FieldArray/index.js.map +2 -2
  65. package/cjs/FieldObject/index.js +30 -15
  66. package/cjs/FieldObject/index.js.map +2 -2
  67. package/cjs/FormBuilder/index.js +9 -1
  68. package/cjs/FormBuilder/index.js.map +2 -2
  69. package/cjs/MultiplicityField/add-objects/index.js +2 -0
  70. package/cjs/MultiplicityField/add-objects.js.map +2 -2
  71. package/cjs/MultiplicityField/index.js +4 -1
  72. package/cjs/MultiplicityField/index.js.map +2 -2
  73. package/cjs/MultiplicityField/types.js.map +1 -1
  74. package/cjs/inputs/AutoCompleteInput/index.js +2 -1
  75. package/cjs/inputs/AutoCompleteInput/index.js.map +2 -2
  76. package/cjs/inputs/Checkboxes/index.js +2 -0
  77. package/cjs/inputs/Checkboxes/index.js.map +2 -2
  78. package/cjs/inputs/DateInput/index.js +23 -8
  79. package/cjs/inputs/DateInput/index.js.map +2 -2
  80. package/cjs/inputs/DateTimeInput/index.js +224 -0
  81. package/cjs/inputs/DateTimeInput/index.js.map +7 -0
  82. package/cjs/inputs/FileInput/index.js +51 -31
  83. package/cjs/inputs/FileInput/index.js.map +2 -2
  84. package/cjs/inputs/ImageInput/index.js +7 -1
  85. package/cjs/inputs/ImageInput/index.js.map +2 -2
  86. package/cjs/inputs/Input/index.js +7 -1
  87. package/cjs/inputs/Input/index.js.map +2 -2
  88. package/cjs/inputs/OtpInput/index.js +1 -0
  89. package/cjs/inputs/OtpInput/index.js.map +2 -2
  90. package/cjs/inputs/Radio/index.js +1 -0
  91. package/cjs/inputs/Radio/index.js.map +2 -2
  92. package/cjs/inputs/Select/index.js +9 -2
  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 +10 -1
  97. package/cjs/lazy.js.map +2 -2
  98. package/cjs/registry/index.js +12 -6
  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 +20 -6
  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/datetime/index.js +151 -0
  108. package/cjs/validators/utils/datetime.js.map +7 -0
  109. package/cjs/validators/utils/file/index.js +30 -17
  110. package/cjs/validators/utils/file.js.map +2 -2
  111. package/cjs/validators/utils/index.js +8 -2
  112. package/cjs/validators/utils/index.js.map +2 -2
  113. package/index.js +1 -1
  114. package/inputs/AutoCompleteInput/AutoComplete.stories.d.ts +2 -0
  115. package/inputs/AutoCompleteInput/__stories__/Default.d.ts +1 -1
  116. package/inputs/AutoCompleteInput/__stories__/Multiple.d.ts +1 -1
  117. package/inputs/AutoCompleteInput/index.js +2 -1
  118. package/inputs/AutoCompleteInput/index.js.map +2 -2
  119. package/inputs/Checkboxes/Checkboxes.stories.d.ts +2 -0
  120. package/inputs/Checkboxes/__stories__/Conditional.d.ts +1 -1
  121. package/inputs/Checkboxes/__stories__/Default.d.ts +1 -1
  122. package/inputs/Checkboxes/__stories__/WithDivider.d.ts +1 -1
  123. package/inputs/Checkboxes/index.js +2 -0
  124. package/inputs/Checkboxes/index.js.map +2 -2
  125. package/inputs/DateInput/DateInput.stories.d.ts +2 -0
  126. package/inputs/DateInput/__stories__/Default.d.ts +1 -1
  127. package/inputs/DateInput/index.js +23 -8
  128. package/inputs/DateInput/index.js.map +2 -2
  129. package/inputs/DateTimeInput/DateTimeInput.stories.d.ts +9 -0
  130. package/inputs/DateTimeInput/__stories__/Default.d.ts +3 -0
  131. package/inputs/DateTimeInput/index.d.ts +13 -0
  132. package/inputs/DateTimeInput/index.js +194 -0
  133. package/inputs/DateTimeInput/index.js.map +7 -0
  134. package/inputs/DateTimeInput/index.test.d.ts +1 -0
  135. package/inputs/DateTimeInput/package.json +6 -0
  136. package/inputs/FileInput/FileInput.stories.d.ts +3 -0
  137. package/inputs/FileInput/__stories__/Default.d.ts +1 -1
  138. package/inputs/FileInput/__stories__/WithBorderAndLink.d.ts +3 -0
  139. package/inputs/FileInput/index.d.ts +12 -0
  140. package/inputs/FileInput/index.js +56 -33
  141. package/inputs/FileInput/index.js.map +2 -2
  142. package/inputs/ImageInput/ImageInput.stories.d.ts +2 -0
  143. package/inputs/ImageInput/__stories__/Default.d.ts +1 -1
  144. package/inputs/ImageInput/__stories__/MaxSize.d.ts +1 -1
  145. package/inputs/ImageInput/__stories__/WithInvalidImageDimension.d.ts +1 -1
  146. package/inputs/ImageInput/index.js +7 -1
  147. package/inputs/ImageInput/index.js.map +2 -2
  148. package/inputs/Input/Input.stories.d.ts +4 -0
  149. package/inputs/Input/__stories__/AFM.d.ts +1 -1
  150. package/inputs/Input/__stories__/AMKA.d.ts +3 -0
  151. package/inputs/Input/__stories__/Boolean.d.ts +1 -1
  152. package/inputs/Input/__stories__/Email.d.ts +3 -0
  153. package/inputs/Input/__stories__/IBAN.d.ts +1 -1
  154. package/inputs/Input/__stories__/Integer.d.ts +1 -1
  155. package/inputs/Input/__stories__/LandlineNumber.d.ts +1 -1
  156. package/inputs/Input/__stories__/MobilePhone.d.ts +1 -1
  157. package/inputs/Input/__stories__/PhoneNumber.d.ts +1 -1
  158. package/inputs/Input/__stories__/PostalCode.d.ts +1 -1
  159. package/inputs/Input/__stories__/String.d.ts +1 -1
  160. package/inputs/Input/__stories__/StringWithTrimValidation.d.ts +1 -1
  161. package/inputs/Input/__stories__/TextWithLimit.d.ts +1 -1
  162. package/inputs/Input/index.d.ts +2 -1
  163. package/inputs/Input/index.js +7 -1
  164. package/inputs/Input/index.js.map +2 -2
  165. package/inputs/Label/Label.stories.d.ts +2 -0
  166. package/inputs/Label/__stories__/Default.d.ts +1 -1
  167. package/inputs/OtpInput/OtpInput.stories.d.ts +2 -0
  168. package/inputs/OtpInput/__stories__/Default.d.ts +1 -1
  169. package/inputs/OtpInput/index.js +1 -0
  170. package/inputs/OtpInput/index.js.map +2 -2
  171. package/inputs/Radio/Radio.stories.d.ts +2 -0
  172. package/inputs/Radio/__stories__/Conditional.d.ts +1 -1
  173. package/inputs/Radio/__stories__/Default.d.ts +1 -1
  174. package/inputs/Radio/__stories__/WithDivider.d.ts +1 -1
  175. package/inputs/Radio/index.js +1 -0
  176. package/inputs/Radio/index.js.map +2 -2
  177. package/inputs/Select/Select.stories.d.ts +2 -0
  178. package/inputs/Select/__stories__/Default.d.ts +1 -1
  179. package/inputs/Select/index.d.ts +2 -1
  180. package/inputs/Select/index.js +9 -2
  181. package/inputs/Select/index.js.map +2 -2
  182. package/inputs/inputsScenarios/index.js +2 -2
  183. package/inputs/inputsScenarios.d.ts +1 -1
  184. package/inputs/inputsScenarios.js.map +2 -2
  185. package/lazy/index.js +10 -1
  186. package/package.json +5 -5
  187. package/registry/index.js +12 -6
  188. package/src/Field/FieldBase.tsx +5 -0
  189. package/src/Field/FieldBaseContainer.tsx +10 -4
  190. package/src/Field/FieldConditional.tsx +4 -0
  191. package/src/Field/doc.mdx +202 -1
  192. package/src/Field/index.tsx +20 -5
  193. package/src/Field/types.tsx +15 -3
  194. package/src/Field/utils/index.ts +7 -0
  195. package/src/Field/utils/useField.ts +14 -2
  196. package/src/FieldArray/FieldArray.stories.js +1 -0
  197. package/src/FieldArray/FormDialog.tsx +565 -0
  198. package/src/FieldArray/__stories__/Default.tsx +2 -1
  199. package/src/FieldArray/__stories__/WithExactLength.tsx +2 -1
  200. package/src/FieldArray/__stories__/WithModal.tsx +160 -0
  201. package/src/FieldArray/index.test.tsx +8 -0
  202. package/src/FieldArray/index.tsx +85 -48
  203. package/src/FieldObject/index.tsx +39 -18
  204. package/src/FormBuilder/FormBuilder.stories.js +3 -0
  205. package/src/FormBuilder/__stories__/AutoErrorGrouping.tsx +1 -1
  206. package/src/FormBuilder/__stories__/Default.tsx +1 -1
  207. package/src/FormBuilder/__stories__/ErrorGrouping.tsx +1 -1
  208. package/src/FormBuilder/doc.mdx +9 -4
  209. package/src/FormBuilder/index.test.tsx +20 -17
  210. package/src/FormBuilder/index.tsx +11 -2
  211. package/src/FormBuilder/interaction.test.tsx +8 -0
  212. package/src/FormBuilder/scenarios.test.tsx +14 -7
  213. package/src/MultiplicityField/MultiplicityField.stories.js +3 -0
  214. package/src/MultiplicityField/__stories__/Default.tsx +1 -1
  215. package/src/MultiplicityField/__stories__/PreviewDisplay.tsx +1 -1
  216. package/src/MultiplicityField/__stories__/WithExactLength.tsx +1 -1
  217. package/src/MultiplicityField/__stories__/WithMaxLength.tsx +1 -1
  218. package/src/MultiplicityField/__stories__/WithMinAndMaxLength.tsx +1 -1
  219. package/src/MultiplicityField/__stories__/WithMinLength.tsx +1 -1
  220. package/src/MultiplicityField/add-objects.tsx +2 -0
  221. package/src/MultiplicityField/doc.mdx +101 -83
  222. package/src/MultiplicityField/index.test.tsx +4 -0
  223. package/src/MultiplicityField/index.tsx +3 -0
  224. package/src/MultiplicityField/types.ts +1 -0
  225. package/src/Questions/Questions.stories.js +3 -0
  226. package/src/Questions/__snapshots__/index.spec.tsx.snap +3 -1
  227. package/src/Questions/__stories__/Default.tsx +1 -1
  228. package/src/Questions/doc.mdx +21 -41
  229. package/src/Questions/index.test.tsx +4 -0
  230. package/src/doc.mdx +26 -11
  231. package/src/inputs/AutoCompleteInput/AutoComplete.stories.js +3 -0
  232. package/src/inputs/AutoCompleteInput/__stories__/Default.tsx +1 -1
  233. package/src/inputs/AutoCompleteInput/__stories__/Multiple.tsx +1 -1
  234. package/src/inputs/AutoCompleteInput/index.test.tsx +4 -0
  235. package/src/inputs/AutoCompleteInput/index.tsx +1 -0
  236. package/src/inputs/Checkboxes/Checkboxes.stories.js +3 -0
  237. package/src/inputs/Checkboxes/__stories__/Conditional.tsx +1 -1
  238. package/src/inputs/Checkboxes/__stories__/Default.tsx +1 -1
  239. package/src/inputs/Checkboxes/__stories__/WithDivider.tsx +1 -1
  240. package/src/inputs/Checkboxes/index.test.tsx +4 -0
  241. package/src/inputs/Checkboxes/index.tsx +2 -0
  242. package/src/inputs/DateInput/DateInput.stories.js +3 -0
  243. package/src/inputs/DateInput/__stories__/Default.tsx +1 -1
  244. package/src/inputs/DateInput/index.test.tsx +4 -0
  245. package/src/inputs/DateInput/index.tsx +24 -7
  246. package/src/inputs/DateTimeInput/DateTimeInput.stories.js +11 -0
  247. package/src/inputs/DateTimeInput/__stories__/Default.tsx +25 -0
  248. package/src/inputs/DateTimeInput/doc.mdx +16 -0
  249. package/src/inputs/DateTimeInput/index.test.tsx +24 -0
  250. package/src/inputs/DateTimeInput/index.tsx +209 -0
  251. package/src/inputs/FileInput/FileInput.stories.js +4 -0
  252. package/src/inputs/FileInput/__stories__/Default.tsx +1 -1
  253. package/src/inputs/FileInput/__stories__/WithBorderAndLink.tsx +34 -0
  254. package/src/inputs/FileInput/index.test.tsx +8 -0
  255. package/src/inputs/FileInput/index.tsx +57 -22
  256. package/src/inputs/ImageInput/ImageInput.stories.js +3 -0
  257. package/src/inputs/ImageInput/__stories__/Default.tsx +1 -1
  258. package/src/inputs/ImageInput/__stories__/MaxSize.tsx +1 -1
  259. package/src/inputs/ImageInput/__stories__/WithInvalidImageDimension.tsx +1 -1
  260. package/src/inputs/ImageInput/index.test.tsx +4 -4
  261. package/src/inputs/ImageInput/index.tsx +7 -1
  262. package/src/inputs/Input/Input.stories.js +5 -0
  263. package/src/inputs/Input/__stories__/AFM.tsx +1 -1
  264. package/src/inputs/Input/__stories__/AMKA.tsx +23 -0
  265. package/src/inputs/Input/__stories__/Boolean.tsx +1 -1
  266. package/src/inputs/Input/__stories__/Email.tsx +23 -0
  267. package/src/inputs/Input/__stories__/IBAN.tsx +1 -1
  268. package/src/inputs/Input/__stories__/Integer.tsx +1 -1
  269. package/src/inputs/Input/__stories__/LandlineNumber.tsx +1 -1
  270. package/src/inputs/Input/__stories__/MobilePhone.tsx +1 -1
  271. package/src/inputs/Input/__stories__/PhoneNumber.tsx +1 -1
  272. package/src/inputs/Input/__stories__/PostalCode.tsx +1 -1
  273. package/src/inputs/Input/__stories__/String.tsx +1 -1
  274. package/src/inputs/Input/__stories__/StringWithTrimValidation.tsx +1 -1
  275. package/src/inputs/Input/__stories__/TextWithLimit.tsx +1 -1
  276. package/src/inputs/Input/index.test.tsx +12 -0
  277. package/src/inputs/Input/index.tsx +10 -2
  278. package/src/inputs/Label/Label.stories.js +3 -0
  279. package/src/inputs/Label/__stories__/Default.tsx +1 -1
  280. package/src/inputs/Label/index.test.tsx +4 -0
  281. package/src/inputs/OtpInput/OtpInput.stories.js +3 -0
  282. package/src/inputs/OtpInput/__stories__/Default.tsx +1 -1
  283. package/src/inputs/OtpInput/index.test.tsx +4 -0
  284. package/src/inputs/OtpInput/index.tsx +1 -0
  285. package/src/inputs/Radio/Radio.stories.js +3 -0
  286. package/src/inputs/Radio/__stories__/Conditional.tsx +1 -1
  287. package/src/inputs/Radio/__stories__/Default.tsx +1 -1
  288. package/src/inputs/Radio/__stories__/WithDivider.tsx +1 -1
  289. package/src/inputs/Radio/index.test.tsx +4 -0
  290. package/src/inputs/Radio/index.tsx +1 -0
  291. package/src/inputs/Select/Select.stories.js +3 -0
  292. package/src/inputs/Select/__stories__/Default.tsx +1 -1
  293. package/src/inputs/Select/index.test.tsx +4 -0
  294. package/src/inputs/Select/index.tsx +13 -4
  295. package/src/inputs/inputsScenarios.ts +2 -2
  296. package/src/lazy.js +10 -1
  297. package/src/registry.js +12 -6
  298. package/src/types.tsx +2 -1
  299. package/src/utils.ts +27 -6
  300. package/src/validators/index.ts +29 -6
  301. package/src/validators/utils/amka.ts +39 -0
  302. package/src/validators/utils/datetime.ts +130 -0
  303. package/src/validators/utils/file.ts +33 -19
  304. package/src/validators/utils/index.ts +5 -1
  305. package/types.d.ts +2 -1
  306. package/types.js.map +1 -1
  307. package/utils/index.js +20 -6
  308. package/utils.d.ts +2 -0
  309. package/utils.js.map +2 -2
  310. package/validators/index.d.ts +1 -1
  311. package/validators/index.js +25 -7
  312. package/validators/index.js.map +2 -2
  313. package/validators/utils/amka/index.js +36 -0
  314. package/validators/utils/amka/package.json +6 -0
  315. package/validators/utils/amka.d.ts +6 -0
  316. package/validators/utils/amka.js.map +7 -0
  317. package/validators/utils/datetime/index.js +116 -0
  318. package/validators/utils/datetime/package.json +6 -0
  319. package/validators/utils/datetime.d.ts +9 -0
  320. package/validators/utils/datetime.js.map +7 -0
  321. package/validators/utils/file/index.js +30 -17
  322. package/validators/utils/file.js.map +2 -2
  323. package/validators/utils/index.d.ts +2 -0
  324. package/validators/utils/index.js +5 -1
  325. package/validators/utils/index.js.map +2 -2
  326. package/cjs/inputs/Input/inputsInputScenarios/index.js +0 -439
  327. package/cjs/inputs/Input/inputsInputScenarios.js.map +0 -7
  328. package/inputs/ImageInput/__stories__/WithInvalidImageSize.d.ts +0 -3
  329. package/inputs/Input/inputsInputScenarios/index.js +0 -406
  330. package/inputs/Input/inputsInputScenarios.d.ts +0 -57
  331. package/inputs/Input/inputsInputScenarios.js.map +0 -7
  332. package/src/inputs/ImageInput/__stories__/WithInvalidImageSize.tsx +0 -36
  333. package/src/inputs/Input/inputsInputScenarios.ts +0 -404
@@ -34,6 +34,10 @@ test('renders the All MultiplicityField variants', async ({ mount, page }) => {
34
34
  )
35
35
  await page.evaluate(() => document.fonts.ready);
36
36
 
37
+ // Move the mouse to the top-left corner to avoid random hover issues
38
+ await page.mouse.move(0, 0);
39
+
40
+
37
41
  const screenshot = await page.screenshot({ fullPage: true, animations: 'disabled' });
38
42
  expect(screenshot).toMatchSnapshot();
39
43
  });
@@ -31,6 +31,7 @@ export const Multiplicity: React.FC<MultiplicityProps> = ({
31
31
  setValue,
32
32
  getValues,
33
33
  unregister,
34
+ resetField,
34
35
  Field,
35
36
  }) => {
36
37
  const { fields, append, remove } = useFieldArray({
@@ -60,6 +61,7 @@ export const Multiplicity: React.FC<MultiplicityProps> = ({
60
61
  hasError={formState.isSubmitted && !formState.isSubmitting && !!error}
61
62
  wrapper="fieldset"
62
63
  name={name}
64
+ register={register}
63
65
  >
64
66
  {stashedObjects.length > 0 ? (
65
67
  <div>
@@ -98,6 +100,7 @@ export const Multiplicity: React.FC<MultiplicityProps> = ({
98
100
  getValues={getValues}
99
101
  unregister={unregister}
100
102
  trigger={trigger}
103
+ resetField={resetField}
101
104
  clearErrors={clearErrors}
102
105
  Field={Field}
103
106
  />
@@ -12,6 +12,7 @@ export interface MultiplicityProps
12
12
  setValue: UseFormReturn['setValue'];
13
13
  getValues: UseFormReturn['getValues'];
14
14
  unregister: UseFormReturn['unregister'];
15
+ resetField?: UseFormReturn['resetField'];
15
16
  error?: ErrorOption;
16
17
  extra?: Record<string, any>;
17
18
  label?: FieldSpec['label'];
@@ -1,7 +1,10 @@
1
1
  import Questions from '@digigov/form/Questions';
2
+ import doc from './doc.mdx?raw';
2
3
  export default {
3
4
  title: 'Digigov Form/Questions',
4
5
  component: Questions,
6
+ tags: ['autodocs'],
7
+ markdown: doc,
5
8
  displayName: 'Questions',
6
9
  };
7
10
  export { Default } from '@digigov/form/Questions/__stories__/Default';
@@ -5,6 +5,7 @@ exports[`renders the Questions 1`] = `
5
5
  <div>
6
6
  <a
7
7
  class="ds-print-hidden ds-back-link"
8
+ href=""
8
9
  tabindex="0"
9
10
  >
10
11
  <svg
@@ -45,7 +46,7 @@ exports[`renders the Questions 1`] = `
45
46
  class="ds-form"
46
47
  >
47
48
  <div
48
- class="ds-field xs:ds-grid__col-span-12 sm:ds-grid__col-span-12 md:ds-grid__col-span-12 lg:ds-grid__col-span-12 xl:ds-grid__col-span-12"
49
+ class="ds-field ds-grid-item xs:ds-grid__col-span-12 sm:ds-grid__col-span-12 md:ds-grid__col-span-12 lg:ds-grid__col-span-12 xl:ds-grid__col-span-12"
49
50
  >
50
51
  <label
51
52
  class="ds-label"
@@ -67,6 +68,7 @@ exports[`renders the Questions 1`] = `
67
68
  id="name"
68
69
  name="name"
69
70
  type="text"
71
+ value=""
70
72
  />
71
73
  </label>
72
74
  </div>
@@ -75,7 +75,7 @@ const steps = [
75
75
  },
76
76
  ];
77
77
 
78
- export function Default() {
78
+ export function Default(_: any) {
79
79
  return (
80
80
  <BasicLayout>
81
81
  <Top>
@@ -14,6 +14,7 @@ import {
14
14
  TableDataCell,
15
15
  } from '@digigov/react-core';
16
16
 
17
+ # Questions
17
18
 
18
19
  Question pages are used to ask users meaningful questions needed by your
19
20
  GOV.GR service, or even gather data about their persona or their application
@@ -46,7 +47,7 @@ import { Field } from '@digigov/form';
46
47
  const steps = [
47
48
  {
48
49
  name: 'residency',
49
- title: 'Where do you live?',
50
+ title: 'Που μένετε;',
50
51
  fields: [
51
52
  {
52
53
  key: 'countries',
@@ -56,25 +57,25 @@ const steps = [
56
57
  options: [
57
58
  {
58
59
  label: {
59
- primary: 'Greece',
60
+ primary: 'Ελλάδα',
60
61
  },
61
62
  value: 'greece',
62
63
  },
63
64
  {
64
65
  label: {
65
- primary: 'Cyprus',
66
+ primary: 'Κύπρος',
66
67
  },
67
68
  value: 'cyprus',
68
69
  },
69
70
  {
70
71
  label: {
71
- primary: 'European Union',
72
+ primary: 'Ευρωπαϊκή Ένωση',
72
73
  },
73
74
  value: 'eu',
74
75
  },
75
76
  {
76
77
  label: {
77
- primary: 'United States of America',
78
+ primary: 'Ηνωμένες Πολιτείες της Αμερικής',
78
79
  },
79
80
  value: 'usa',
80
81
  },
@@ -85,12 +86,12 @@ const steps = [
85
86
  },
86
87
  {
87
88
  name: 'dob',
88
- title: 'When is your birthday?',
89
+ title: 'Ποια είναι ημερομηνία γέννησής σας;',
89
90
  fields: [
90
91
  {
91
92
  key: 'dob',
92
93
  label: {
93
- primary: 'Birthday',
94
+ primary: 'Ημερομηνία γέννησης',
94
95
  },
95
96
  type: 'date',
96
97
  required: true,
@@ -184,7 +185,7 @@ object. The most basic properties are the following:
184
185
  ```json pure title="step-name.json"
185
186
  {
186
187
  "name": "name",
187
- "title": "What is your name?",
188
+ "title": "Ποιο είναι το όνομά σας;",
188
189
  "fields": [
189
190
  {
190
191
  "key": "name",
@@ -210,7 +211,7 @@ the next `step`.
210
211
  const steps = [
211
212
  {
212
213
  name: 'age',
213
- title: 'What is your age?',
214
+ title: 'Ποια είναι η ηλικία σας?',
214
215
  fields: [
215
216
  {
216
217
  key: 'age',
@@ -226,13 +227,13 @@ const steps = [
226
227
  },
227
228
  {
228
229
  name: 'citizen-underage',
229
- title: 'Are you a student?',
230
+ title: 'Είστε μαθητής;',
230
231
  fields: [ ... ]
231
232
  },
232
233
  {
233
234
  // highlight-next-line
234
235
  name: 'citizen-adult',
235
- title: 'Are you currently employed?',
236
+ title: 'Εργάζεστε;',
236
237
  fields: [
237
238
  {
238
239
  key: 'citizen-underage-employed',
@@ -242,11 +243,11 @@ const steps = [
242
243
  options: [
243
244
  {
244
245
  label: {primary: "Yes"},
245
- value: 'yes',
246
+ value: 'Ναι',
246
247
  },
247
248
  {
248
249
  label: {primary: "No"},
249
- value: 'no',
250
+ value: 'ΌΧι',
250
251
  }
251
252
  ]
252
253
  }
@@ -280,7 +281,7 @@ import TranslatorsHeader from 'translators-landing/components/TranslatorsHeader'
280
281
  const steps = [
281
282
  {
282
283
  name: 'age',
283
- title: 'What is your age?',
284
+ title: 'Ποια είναι η ηλικία σας;',
284
285
  fields: [
285
286
  {
286
287
  key: 'age',
@@ -294,7 +295,7 @@ const steps = [
294
295
  },
295
296
  {
296
297
  name: 'citizen-underage',
297
- title: 'Are you a student?',
298
+ title: 'Είστε μαθητής;',
298
299
  fields: [
299
300
  {
300
301
  key: 'citizen-underage-student',
@@ -303,11 +304,11 @@ const steps = [
303
304
  extra: {
304
305
  options: [
305
306
  {
306
- label: { primary: 'Yes' },
307
+ label: { primary: 'Ναι' },
307
308
  value: 'yes',
308
309
  },
309
310
  {
310
- label: { primary: 'No' },
311
+ label: { primary: 'Όχι' },
311
312
  value: 'no',
312
313
  },
313
314
  ],
@@ -317,7 +318,7 @@ const steps = [
317
318
  },
318
319
  {
319
320
  name: 'citizen-adult',
320
- title: 'Are you currently employed?',
321
+ title: 'Εργάζεστε;',
321
322
  fields: [
322
323
  {
323
324
  key: 'citizen-adult-employed',
@@ -326,11 +327,11 @@ const steps = [
326
327
  extra: {
327
328
  options: [
328
329
  {
329
- label: { primary: 'Yes' },
330
+ label: { primary: 'Ναι' },
330
331
  value: 'yes',
331
332
  },
332
333
  {
333
- label: { primary: 'No' },
334
+ label: { primary: 'Όχι' },
334
335
  value: 'no',
335
336
  },
336
337
  ],
@@ -389,24 +390,3 @@ export default function Index() {
389
390
  );
390
391
  }
391
392
  ```
392
-
393
- ## Prop types
394
-
395
- <TableContainer>
396
- <Table>
397
- <TableHead>
398
- <TableRow>
399
- <TableHeadCell>Περίοδος</TableHeadCell>
400
- <TableHeadCell>Κανονικό ποσό</TableHeadCell>
401
- <TableHeadCell>Μειωμένο ποσό</TableHeadCell>
402
- </TableRow>
403
- </TableHead>
404
- <TableBody>
405
- <TableRow>
406
- <TableDataCell>Πρώτες 6 εβδομάδες </TableDataCell>
407
- <TableDataCell> €109.80 / εβδομάδα</TableDataCell>
408
- <TableDataCell> €69.80 / εβδομάδα</TableDataCell>
409
- </TableRow>
410
- </TableBody>
411
- </Table>
412
- </TableContainer>
@@ -14,6 +14,10 @@ test('renders the All Questions variants', async ({ mount, page }) => {
14
14
  )
15
15
  await page.evaluate(() => document.fonts.ready);
16
16
 
17
+ // Move the mouse to the top-left corner to avoid random hover issues
18
+ await page.mouse.move(0, 0);
19
+
20
+
17
21
  const screenshot = await page.screenshot({ fullPage: true, animations: 'disabled' });
18
22
  expect(screenshot).toMatchSnapshot();
19
23
  });
package/src/doc.mdx CHANGED
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  id: Introduction
3
- title: Digigov Form
4
- sidebar_label: Introduction to Digigov Form
5
3
  ---
6
4
 
5
+ # Digigov form
6
+
7
7
  Digigov Form is an off-the-shelf solution for managing web forms using
8
8
  Reactjs. It supports flexible and multi-step forms and easy-to-use validation.
9
9
  This page will guide you through everything you need to create accessible and
10
10
  dynamic forms that can handle all sorts of user inputs.
11
11
 
12
12
  <img
13
- src="/img/form.svg"
13
+ src="/tmp/form.svg"
14
14
  style={{ margin: '3rem 0', maxWidth: '450px', width: '60%' }}
15
15
  />
16
16
 
@@ -30,18 +30,33 @@ will be able to save via an JSON API.
30
30
  The `@digigov/form` NPM package contains React components and validators. The
31
31
  library uses basic, semantically correct HTML5 input fields.
32
32
 
33
- It adds dynamic control, interactivity and validations to the core input
34
- components implemented in `@digigov/react-core`. Styling is provided by
35
- `@digigov/css` library following the [GOV.GR design
36
- system](https://guide.services.gov.gr).
33
+ ### 📦 Installation
34
+
35
+ ```sh
36
+ yarn add @digigov/form
37
+
38
+ ```
39
+
40
+ Or using npm:
41
+
42
+ ```sh
43
+ npm install i @digigov/form
37
44
 
38
- Digigov Form uses two main libraries internally. The first is [React Hook
39
- Form](https://www.react-hook-form.com/) which helps us manage the form state and
40
- perform actions and mutations on it. The second is
41
- [Yup](https://github.com/jquense/yup) and it is used to validate form data. It
45
+ ```
46
+
47
+ `digigov/form` is a **form management solution** which adds dynamic control while simplifies handling user input, based on:
48
+
49
+ ✅ [React Hook Form](https://www.react-hook-form.com/) which helps us manage the form state and
50
+ perform actions and mutations on it.
51
+
52
+ 🛠️ [Yup](https://github.com/jquense/yup) and it is used to validate form data. It
42
53
  interfaces with React Hook Form right out of the box, but also enables us to
43
54
  define custom validation types such as AMKA, AFM etc.
44
55
 
56
+ 🔄 [Multi-step](/components/@digigov/form/Questions) forms for complex workflows.
57
+
58
+ 🔗 [digigov/form](/components/@digigov/form/FormBuilder) components for a consistent UI.
59
+
45
60
  Some basic functionalites of `@digigov/form` will be presented in the following
46
61
  sections and also we are going to guide you through some more advanced topics
47
62
  such as internationalisation, custom data validation etc.
@@ -1,7 +1,10 @@
1
1
  import AutoComplete from '@digigov/form/inputs/AutoCompleteInput';
2
+ import doc from './doc.mdx?raw';
2
3
  export default {
3
4
  title: 'Digigov Form/inputs/AutoCompleteInput',
4
5
  component: AutoComplete,
6
+ tags: ['autodocs'],
7
+ markdown: doc,
5
8
  displayName: 'AutoCompleteInput',
6
9
  };
7
10
  export { Default } from '@digigov/form/inputs/AutoCompleteInput/__stories__/Default';
@@ -29,7 +29,7 @@ const fields: FieldSpec[] = [
29
29
 
30
30
  const initialValues = {};
31
31
 
32
- export const Default = () => (
32
+ export const Default = (_: any) => (
33
33
  <FormBuilder
34
34
  fields={fields}
35
35
  onSubmit={(data) => {
@@ -29,7 +29,7 @@ const fields: FieldSpec[] = [
29
29
 
30
30
  const initialValues = {};
31
31
 
32
- export const Multiple = () => (
32
+ export const Multiple = (_: any) => (
33
33
  <FormBuilder
34
34
  fields={fields}
35
35
  onSubmit={(data) => {
@@ -18,6 +18,10 @@ test('renders the All AutoCompleteInput variants', async ({ mount, page }) => {
18
18
  )
19
19
  await page.evaluate(() => document.fonts.ready);
20
20
 
21
+ // Move the mouse to the top-left corner to avoid random hover issues
22
+ await page.mouse.move(0, 0);
23
+
24
+
21
25
  const screenshot = await page.screenshot({ fullPage: true, animations: 'disabled' });
22
26
  expect(screenshot).toMatchSnapshot();
23
27
  });
@@ -90,6 +90,7 @@ export const AutoCompleteInput: React.FC<AutoCompleteInputProps> = ({
90
90
  ...props,
91
91
  reset: undefined,
92
92
  required: undefined,
93
+ Field: undefined,
93
94
  }}
94
95
  name={name}
95
96
  id={`${name}-id`}
@@ -1,7 +1,10 @@
1
1
  import Checkboxes from '@digigov/form/inputs/Checkboxes';
2
+ import doc from './doc.mdx?raw';
2
3
  export default {
3
4
  title: 'Digigov Form/inputs/Checkboxes',
4
5
  component: Checkboxes,
6
+ tags: ['autodocs'],
7
+ markdown: doc,
5
8
  displayName: 'Checkboxes',
6
9
  };
7
10
  export { Default } from '@digigov/form/inputs/Checkboxes/__stories__/Default';
@@ -84,7 +84,7 @@ const fields: FieldSpec[] = [
84
84
  },
85
85
  ];
86
86
 
87
- export const Conditional = () => (
87
+ export const Conditional = (_: any) => (
88
88
  <FormBuilder
89
89
  onSubmit={(data) => {
90
90
  console.log(data);
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import FormBuilder, { Field } from '@digigov/form';
3
3
  import { Button } from '@digigov/ui/form/Button';
4
4
 
5
- export const Default = () => (
5
+ export const Default = (_: any) => (
6
6
  <FormBuilder
7
7
  onSubmit={(data) => {
8
8
  console.log(data);
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import FormBuilder, { Field } from '@digigov/form';
3
3
  import { Button } from '@digigov/ui/form/Button';
4
4
 
5
- export const WithDivider = () => (
5
+ export const WithDivider = (_: any) => (
6
6
  <FormBuilder
7
7
  onSubmit={(data) => {
8
8
  console.log(data);
@@ -22,6 +22,10 @@ test('renders the All Checkboxes variants', async ({ mount, page }) => {
22
22
  )
23
23
  await page.evaluate(() => document.fonts.ready);
24
24
 
25
+ // Move the mouse to the top-left corner to avoid random hover issues
26
+ await page.mouse.move(0, 0);
27
+
28
+
25
29
  const screenshot = await page.screenshot({ fullPage: true, animations: 'disabled' });
26
30
  expect(screenshot).toMatchSnapshot();
27
31
  });
@@ -75,6 +75,7 @@ export const Checkboxes: React.FC<CheckboxesProps> = ({
75
75
  <CheckboxItem
76
76
  key={`${name}.${index}`}
77
77
  name={`${name}.${v}`}
78
+ id={`${name}.${v}`}
78
79
  value={v}
79
80
  disabled={disabled || optionDisabled}
80
81
  checked={value?.includes(v)}
@@ -84,6 +85,7 @@ export const Checkboxes: React.FC<CheckboxesProps> = ({
84
85
  ...props,
85
86
  reset: undefined,
86
87
  defaultValue: undefined,
88
+ error: undefined,
87
89
  onBlur: undefined,
88
90
  required: undefined,
89
91
  'aria-describedby': undefined,
@@ -1,7 +1,10 @@
1
1
  import DateInput from '@digigov/form/inputs/DateInput';
2
+ import doc from './doc.mdx?raw';
2
3
  export default {
3
4
  title: 'Digigov Form/inputs/DateInput',
4
5
  component: DateInput,
6
+ tags: ['autodocs'],
7
+ markdown: doc,
5
8
  displayName: 'DateInput',
6
9
  };
7
10
  export { Default } from '@digigov/form/inputs/DateInput/__stories__/Default';
@@ -14,7 +14,7 @@ const fields = [
14
14
  } as const,
15
15
  ];
16
16
 
17
- export const Default = () => (
17
+ export const Default = (_: any) => (
18
18
  <FormBuilder onSubmit={() => console.log('kati')}>
19
19
  {fields.map(({ key, ...field }) => {
20
20
  return <Field {...field} name={key} key={key} />;
@@ -14,6 +14,10 @@ test('renders the All DateInput variants', async ({ mount, page }) => {
14
14
  )
15
15
  await page.evaluate(() => document.fonts.ready);
16
16
 
17
+ // Move the mouse to the top-left corner to avoid random hover issues
18
+ await page.mouse.move(0, 0);
19
+
20
+
17
21
  const screenshot = await page.screenshot({ fullPage: true, animations: 'disabled' });
18
22
  expect(screenshot).toMatchSnapshot();
19
23
  });
@@ -2,6 +2,7 @@ import React, { useMemo, useState } from 'react';
2
2
  import dayjs from 'dayjs';
3
3
  import customParseFormat from 'dayjs/plugin/customParseFormat';
4
4
  import { UncontrolledFieldProps } from '@digigov/form/Field/types';
5
+ import { useFormContext } from '@digigov/form/FormBuilder';
5
6
  import {
6
7
  DateInputContainer,
7
8
  DateInputItem,
@@ -16,22 +17,26 @@ export interface DateInputProps extends Omit<UncontrolledFieldProps, 'extra'> {
16
17
  };
17
18
  }
18
19
 
19
- function useDate(value, onChange) {
20
+ function useDate(name, value, form) {
20
21
  const [year, month, day] = useMemo(() => {
21
22
  if (!value || value.length === 0) {
22
- onChange('');
23
+ update('');
23
24
  return ['', '', ''];
24
25
  }
25
26
  const [day, month, year] = value.split('/');
26
27
  return [year, month, day];
27
28
  }, [value]);
28
29
 
30
+ function update(value) {
31
+ form.setValue(name, value, { shouldValidate: false });
32
+ }
33
+
29
34
  function set(year, month, day) {
30
35
  const value = `${day || ''}/${month || ''}/${year || ''}`;
31
36
  if (!year && !month && !day) {
32
- onChange(null);
37
+ update('');
33
38
  } else {
34
- onChange(value);
39
+ update(value);
35
40
  }
36
41
  }
37
42
 
@@ -56,6 +61,12 @@ function useDate(value, onChange) {
56
61
  set(year, month, val);
57
62
  }
58
63
 
64
+ function trigger() {
65
+ if (form.formState.isSubmitted) {
66
+ form.trigger(name);
67
+ }
68
+ }
69
+
59
70
  return {
60
71
  day,
61
72
  month,
@@ -63,6 +74,7 @@ function useDate(value, onChange) {
63
74
  setYear,
64
75
  setMonth,
65
76
  setDay,
77
+ trigger,
66
78
  };
67
79
  }
68
80
 
@@ -90,17 +102,19 @@ export const DateInput = ({ name, ...props }) => {
90
102
  return props.value;
91
103
  }, [props.value, initial]);
92
104
 
93
- const date = useDate(value || makeDate(props.defaultValue), props.onChange);
105
+ const form = useFormContext();
106
+ const date = useDate(name, value || makeDate(props.defaultValue), form);
94
107
 
95
108
  return (
96
109
  <DateInputContainer>
97
110
  <DatePart
98
111
  label={t('form.label.day')}
99
112
  onChange={date.setDay}
100
- onBlur={(e) => date.setDay(e, true)}
113
+ onBlur={date.trigger}
101
114
  value={date.day}
102
115
  width={2}
103
116
  name={`${name}-day`}
117
+ id={`${name}-day`}
104
118
  maxLength="2"
105
119
  disabled={props.disabled}
106
120
  aria-required={props['aria-required']}
@@ -109,10 +123,11 @@ export const DateInput = ({ name, ...props }) => {
109
123
  <DatePart
110
124
  label={t('form.label.month')}
111
125
  onChange={date.setMonth}
112
- onBlur={(e) => date.setMonth(e, true)}
126
+ onBlur={date.trigger}
113
127
  value={date.month}
114
128
  width={2}
115
129
  name={`${name}-month`}
130
+ id={`${name}-month`}
116
131
  maxLength="2"
117
132
  disabled={props.disabled}
118
133
  aria-required={props['aria-required']}
@@ -121,9 +136,11 @@ export const DateInput = ({ name, ...props }) => {
121
136
  <DatePart
122
137
  label={t('form.label.year')}
123
138
  onChange={date.setYear}
139
+ onBlur={date.trigger}
124
140
  value={date.year}
125
141
  width={4}
126
142
  name={`${name}-year`}
143
+ id={`${name}-year`}
127
144
  maxLength="4"
128
145
  disabled={props.disabled}
129
146
  aria-required={props['aria-required']}
@@ -0,0 +1,11 @@
1
+ import { Default } from './__stories__/Default';
2
+ import doc from './doc.mdx?raw';
3
+
4
+ export default {
5
+ title: 'Form/Inputs/DateTimeInput',
6
+ component: Default,
7
+ tags: ['autodocs'],
8
+ markdown: doc,
9
+ };
10
+
11
+ export { Default };
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import FormBuilder, { Field } from '@digigov/form';
3
+ import { Button } from '@digigov/ui/form/Button';
4
+
5
+ const fields = [
6
+ {
7
+ key: 'datetime-example',
8
+ type: 'datetime',
9
+ required: true,
10
+ label: {
11
+ primary: 'Πότε εκδόθηκε το διαβατήριο σας;',
12
+ secondary: 'Για παράδειγμα, 05 11 2020',
13
+ },
14
+ } as const,
15
+ ];
16
+
17
+ export const Default = (_: any) => (
18
+ <FormBuilder onSubmit={() => console.log('kati')}>
19
+ {fields.map(({ key, ...field }) => {
20
+ return <Field {...field} name={key} key={key} />;
21
+ })}
22
+ <Button type="submit">Συνέχεια</Button>
23
+ </FormBuilder>
24
+ );
25
+ export default Default;
@@ -0,0 +1,16 @@
1
+ ---
2
+ title: DateTime Input
3
+ ---
4
+
5
+ # DateTime input
6
+
7
+
8
+
9
+ Input element of type `datetime` create input fields that let the user enter a date and time,
10
+ either with a textbox that validates the input or a special date picker interface.
11
+
12
+ ## How to use
13
+
14
+ ### Default
15
+
16
+ <code src="@digigov/form/inputs/DateTimeInput/__stories__/Default.tsx" />