@digigov/form 2.0.0-2445d5cb → 2.0.0-298cfc51

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 (245) hide show
  1. package/Field/FieldBase/index.js +1 -0
  2. package/Field/FieldBase.js.map +2 -2
  3. package/Field/FieldBaseContainer/index.js +2 -2
  4. package/Field/FieldBaseContainer.js.map +2 -2
  5. package/Field/FieldConditional/index.js +7 -3
  6. package/Field/FieldConditional.js.map +2 -2
  7. package/Field/index.js +5 -2
  8. package/Field/index.js.map +2 -2
  9. package/Field/types.d.ts +5 -1
  10. package/Field/utils/index.d.ts +1 -0
  11. package/Field/utils/index.js +18 -1
  12. package/Field/utils/index.js.map +2 -2
  13. package/FieldArray/index.d.ts +1 -0
  14. package/FieldArray/index.js +7 -5
  15. package/FieldArray/index.js.map +2 -2
  16. package/FieldObject/index.d.ts +2 -0
  17. package/FieldObject/index.js +9 -5
  18. package/FieldObject/index.js.map +2 -2
  19. package/Fieldset/index.d.ts +1 -1
  20. package/Fieldset/index.js +5 -5
  21. package/Fieldset/index.js.map +2 -2
  22. package/Fieldset/types.d.ts +2 -3
  23. package/FormBuilder/index.d.ts +8 -2
  24. package/FormBuilder/index.js +150 -6
  25. package/FormBuilder/index.js.map +3 -3
  26. package/MultiplicityField/add-objects/index.js +7 -5
  27. package/MultiplicityField/add-objects.js.map +2 -2
  28. package/MultiplicityField/index.js +16 -12
  29. package/MultiplicityField/index.js.map +2 -2
  30. package/Questions/QuestionsContext.d.ts +0 -1
  31. package/Questions/Step/StepContext.d.ts +0 -1
  32. package/Questions/Step/StepTitle/index.js +4 -3
  33. package/Questions/Step/StepTitle.d.ts +1 -1
  34. package/Questions/Step/StepTitle.js.map +2 -2
  35. package/Questions/Step/types.d.ts +0 -1
  36. package/Questions/types.d.ts +0 -1
  37. package/cjs/Field/FieldBase/index.js +1 -0
  38. package/cjs/Field/FieldBase.js.map +2 -2
  39. package/cjs/Field/FieldBaseContainer/index.js +4 -4
  40. package/cjs/Field/FieldBaseContainer.js.map +3 -3
  41. package/cjs/Field/FieldConditional/index.js +7 -3
  42. package/cjs/Field/FieldConditional.js.map +2 -2
  43. package/cjs/Field/index.js +5 -2
  44. package/cjs/Field/index.js.map +2 -2
  45. package/cjs/Field/types.js.map +1 -1
  46. package/cjs/Field/utils/index.js +18 -0
  47. package/cjs/Field/utils/index.js.map +2 -2
  48. package/cjs/FieldArray/index.js +9 -7
  49. package/cjs/FieldArray/index.js.map +3 -3
  50. package/cjs/FieldObject/index.js +10 -6
  51. package/cjs/FieldObject/index.js.map +3 -3
  52. package/cjs/Fieldset/index.js +10 -10
  53. package/cjs/Fieldset/index.js.map +3 -3
  54. package/cjs/Fieldset/types.js.map +1 -1
  55. package/cjs/FormBuilder/index.js +165 -5
  56. package/cjs/FormBuilder/index.js.map +3 -3
  57. package/cjs/MultiplicityField/add-objects/index.js +11 -9
  58. package/cjs/MultiplicityField/add-objects.js.map +3 -3
  59. package/cjs/MultiplicityField/index.js +15 -16
  60. package/cjs/MultiplicityField/index.js.map +3 -3
  61. package/cjs/Questions/Step/StepTitle/index.js +5 -5
  62. package/cjs/Questions/Step/StepTitle.js.map +3 -3
  63. package/cjs/index.js +11 -155
  64. package/cjs/index.js.map +4 -4
  65. package/cjs/inputs/AutoCompleteInput/__stories__/Multiple/index.js +0 -1
  66. package/cjs/inputs/AutoCompleteInput/__stories__/Multiple.js.map +2 -2
  67. package/cjs/inputs/AutoCompleteInput/index.js +8 -6
  68. package/cjs/inputs/AutoCompleteInput/index.js.map +3 -3
  69. package/cjs/inputs/Checkboxes/index.js +7 -9
  70. package/cjs/inputs/Checkboxes/index.js.map +3 -3
  71. package/cjs/inputs/DateInput/index.js +3 -4
  72. package/cjs/inputs/DateInput/index.js.map +3 -3
  73. package/cjs/inputs/FileInput/index.js +7 -8
  74. package/cjs/inputs/FileInput/index.js.map +3 -3
  75. package/cjs/inputs/ImageInput/ImageInput.stories/index.js +4 -4
  76. package/cjs/inputs/ImageInput/ImageInput.stories.js.map +2 -2
  77. package/cjs/inputs/ImageInput/__stories__/MaxSize/index.js +69 -0
  78. package/cjs/inputs/ImageInput/__stories__/MaxSize.js.map +7 -0
  79. package/cjs/inputs/ImageInput/__stories__/WithInvalidImageDimension/index.js +2 -1
  80. package/cjs/inputs/ImageInput/__stories__/WithInvalidImageDimension.js.map +2 -2
  81. package/cjs/inputs/ImageInput/index.js +8 -8
  82. package/cjs/inputs/ImageInput/index.js.map +3 -3
  83. package/cjs/inputs/Input/__stories__/LandlineNumber/index.js +1 -0
  84. package/cjs/inputs/Input/__stories__/LandlineNumber.js.map +2 -2
  85. package/cjs/inputs/Input/__stories__/MobilePhone/index.js +1 -0
  86. package/cjs/inputs/Input/__stories__/MobilePhone.js.map +2 -2
  87. package/cjs/inputs/Input/__stories__/PhoneNumber/index.js +1 -0
  88. package/cjs/inputs/Input/__stories__/PhoneNumber.js.map +2 -2
  89. package/cjs/inputs/Input/__stories__/PostalCode/index.js +1 -0
  90. package/cjs/inputs/Input/__stories__/PostalCode.js.map +2 -2
  91. package/cjs/inputs/Input/index.js +20 -7
  92. package/cjs/inputs/Input/index.js.map +3 -3
  93. package/cjs/inputs/Label/index.js +3 -3
  94. package/cjs/inputs/Label/index.js.map +3 -3
  95. package/cjs/inputs/Radio/__stories__/Conditional.js.map +2 -2
  96. package/cjs/inputs/Radio/index.js +56 -10
  97. package/cjs/inputs/Radio/index.js.map +3 -3
  98. package/cjs/inputs/Select/index.js +3 -4
  99. package/cjs/inputs/Select/index.js.map +3 -3
  100. package/cjs/inputs/inputsScenarios/index.js +0 -1
  101. package/cjs/inputs/inputsScenarios.js.map +2 -2
  102. package/cjs/lazy/index.js +7 -2
  103. package/cjs/lazy.js.map +2 -2
  104. package/cjs/registry/index.js +2 -0
  105. package/cjs/registry.js.map +2 -2
  106. package/cjs/types.js.map +1 -1
  107. package/cjs/validators/index.js +16 -66
  108. package/cjs/validators/index.js.map +3 -3
  109. package/cjs/validators/utils/date/index.js +138 -0
  110. package/cjs/validators/utils/date.js.map +7 -0
  111. package/cjs/validators/utils/file/index.js +1 -1
  112. package/cjs/validators/utils/file.js.map +2 -2
  113. package/cjs/validators/utils/index.js +3 -1
  114. package/cjs/validators/utils/index.js.map +2 -2
  115. package/index.d.ts +5 -8
  116. package/index.js +9 -152
  117. package/index.js.map +4 -4
  118. package/inputs/AutoCompleteInput/__stories__/Multiple/index.js +0 -1
  119. package/inputs/AutoCompleteInput/__stories__/Multiple.js.map +2 -2
  120. package/inputs/AutoCompleteInput/index.js +10 -6
  121. package/inputs/AutoCompleteInput/index.js.map +2 -2
  122. package/inputs/Checkboxes/index.js +8 -6
  123. package/inputs/Checkboxes/index.js.map +2 -2
  124. package/inputs/DateInput/index.js +5 -3
  125. package/inputs/DateInput/index.js.map +2 -2
  126. package/inputs/FileInput/index.js +5 -6
  127. package/inputs/FileInput/index.js.map +2 -2
  128. package/inputs/ImageInput/ImageInput.stories/index.js +2 -2
  129. package/inputs/ImageInput/ImageInput.stories.d.ts +1 -1
  130. package/inputs/ImageInput/ImageInput.stories.js.map +2 -2
  131. package/inputs/ImageInput/__stories__/MaxSize/index.js +36 -0
  132. package/inputs/ImageInput/__stories__/MaxSize/package.json +6 -0
  133. package/inputs/ImageInput/__stories__/MaxSize.d.ts +3 -0
  134. package/inputs/ImageInput/__stories__/MaxSize.js.map +7 -0
  135. package/inputs/ImageInput/__stories__/WithInvalidImageDimension/index.js +2 -1
  136. package/inputs/ImageInput/__stories__/WithInvalidImageDimension.js.map +2 -2
  137. package/inputs/ImageInput/index.js +7 -7
  138. package/inputs/ImageInput/index.js.map +2 -2
  139. package/inputs/Input/__stories__/LandlineNumber/index.js +1 -0
  140. package/inputs/Input/__stories__/LandlineNumber.js.map +2 -2
  141. package/inputs/Input/__stories__/MobilePhone/index.js +1 -0
  142. package/inputs/Input/__stories__/MobilePhone.js.map +2 -2
  143. package/inputs/Input/__stories__/PhoneNumber/index.js +1 -0
  144. package/inputs/Input/__stories__/PhoneNumber.js.map +2 -2
  145. package/inputs/Input/__stories__/PostalCode/index.js +1 -0
  146. package/inputs/Input/__stories__/PostalCode.js.map +2 -2
  147. package/inputs/Input/index.js +18 -5
  148. package/inputs/Input/index.js.map +3 -3
  149. package/inputs/Label/index.js +2 -2
  150. package/inputs/Label/index.js.map +2 -2
  151. package/inputs/Radio/__stories__/Conditional.js.map +2 -2
  152. package/inputs/Radio/index.d.ts +4 -0
  153. package/inputs/Radio/index.js +57 -8
  154. package/inputs/Radio/index.js.map +2 -2
  155. package/inputs/Select/index.js +1 -2
  156. package/inputs/Select/index.js.map +2 -2
  157. package/inputs/inputsScenarios/index.js +0 -1
  158. package/inputs/inputsScenarios.d.ts +0 -42
  159. package/inputs/inputsScenarios.js.map +2 -2
  160. package/lazy/index.js +7 -2
  161. package/lazy.d.ts +16 -8
  162. package/lazy.js.map +2 -2
  163. package/package.json +4 -4
  164. package/registry/index.js +2 -0
  165. package/registry.d.ts +1 -0
  166. package/registry.js.map +2 -2
  167. package/src/Field/FieldBase.tsx +1 -0
  168. package/src/Field/FieldBaseContainer.tsx +2 -2
  169. package/src/Field/FieldConditional.tsx +4 -0
  170. package/src/Field/index.tsx +4 -1
  171. package/src/Field/types.tsx +24 -20
  172. package/src/Field/utils/index.ts +18 -1
  173. package/src/FieldArray/index.tsx +9 -5
  174. package/src/FieldObject/index.tsx +8 -2
  175. package/src/Fieldset/index.tsx +5 -5
  176. package/src/Fieldset/types.tsx +2 -2
  177. package/src/FormBuilder/{FormBuilder.mdx → doc.mdx} +20 -33
  178. package/src/FormBuilder/index.tsx +179 -7
  179. package/src/FormBuilder/scenarios.test.tsx +2 -2
  180. package/src/MultiplicityField/add-objects.tsx +6 -5
  181. package/src/MultiplicityField/{MultiplicityField.mdx → doc.mdx} +12 -16
  182. package/src/MultiplicityField/index.tsx +15 -12
  183. package/src/Questions/Step/StepTitle.tsx +4 -3
  184. package/src/Questions/__snapshots__/index.spec.tsx.snap +8 -4
  185. package/src/Questions/{index.mdx → doc.mdx} +9 -12
  186. package/src/create-simple-form.mdx +2 -6
  187. package/src/{index.mdx → doc.mdx} +4 -8
  188. package/src/index.ts +6 -0
  189. package/src/inputs/AutoCompleteInput/__stories__/Multiple.tsx +0 -1
  190. package/src/inputs/AutoCompleteInput/{index.mdx → doc.mdx} +2 -13
  191. package/src/inputs/AutoCompleteInput/index.tsx +36 -29
  192. package/src/inputs/Checkboxes/{index.mdx → doc.mdx} +5 -15
  193. package/src/inputs/Checkboxes/index.test.tsx +16 -17
  194. package/src/inputs/Checkboxes/index.tsx +9 -7
  195. package/src/inputs/DateInput/{index.mdx → doc.mdx} +1 -8
  196. package/src/inputs/DateInput/index.tsx +5 -3
  197. package/src/inputs/FileInput/{index.mdx → doc.mdx} +1 -5
  198. package/src/inputs/FileInput/index.tsx +5 -6
  199. package/src/inputs/ImageInput/ImageInput.stories.js +2 -1
  200. package/src/inputs/ImageInput/__stories__/MaxSize.tsx +37 -0
  201. package/src/inputs/ImageInput/__stories__/WithInvalidImageDimension.tsx +2 -0
  202. package/src/inputs/ImageInput/doc.mdx +23 -0
  203. package/src/inputs/ImageInput/index.test.tsx +4 -0
  204. package/src/inputs/ImageInput/index.tsx +9 -11
  205. package/src/inputs/Input/__stories__/LandlineNumber.tsx +2 -1
  206. package/src/inputs/Input/__stories__/MobilePhone.tsx +1 -0
  207. package/src/inputs/Input/__stories__/PhoneNumber.tsx +1 -0
  208. package/src/inputs/Input/__stories__/PostalCode.tsx +1 -0
  209. package/src/inputs/Input/doc.mdx +56 -0
  210. package/src/inputs/Input/index.tsx +33 -30
  211. package/src/inputs/Label/doc.mdx +14 -0
  212. package/src/inputs/Label/index.tsx +2 -3
  213. package/src/inputs/OtpInput/{index.mdx → doc.mdx} +1 -8
  214. package/src/inputs/Radio/__stories__/Conditional.tsx +2 -1
  215. package/src/inputs/Radio/{index.mdx → doc.mdx} +5 -15
  216. package/src/inputs/Radio/index.tsx +75 -9
  217. package/src/inputs/Select/{index.mdx → doc.mdx} +1 -5
  218. package/src/inputs/Select/index.tsx +1 -2
  219. package/src/inputs/inputsScenarios.ts +147 -148
  220. package/src/installation.mdx +2 -5
  221. package/src/lazy.js +7 -2
  222. package/src/registry.js +2 -0
  223. package/src/types.tsx +1 -0
  224. package/src/validators/index.ts +33 -71
  225. package/src/validators/utils/date.ts +107 -0
  226. package/src/validators/utils/file.ts +1 -1
  227. package/src/validators/utils/index.ts +1 -0
  228. package/types.d.ts +1 -1
  229. package/types.js.map +1 -1
  230. package/validators/index.js +20 -67
  231. package/validators/index.js.map +2 -2
  232. package/validators/utils/date/index.js +103 -0
  233. package/validators/utils/date/package.json +6 -0
  234. package/validators/utils/date.d.ts +9 -0
  235. package/validators/utils/date.js.map +7 -0
  236. package/validators/utils/file/index.js +1 -1
  237. package/validators/utils/file.js.map +2 -2
  238. package/validators/utils/index.d.ts +1 -0
  239. package/validators/utils/index.js +1 -0
  240. package/validators/utils/index.js.map +2 -2
  241. package/src/index.tsx +0 -178
  242. package/src/inputs/ImageInput/index.mdx +0 -19
  243. package/src/inputs/Input/index.mdx +0 -95
  244. package/src/inputs/Label/index.mdx +0 -0
  245. /package/src/Field/{index.mdx → doc.mdx} +0 -0
@@ -5,5 +5,6 @@ export default {
5
5
  displayName: 'ImageInput',
6
6
  };
7
7
  export { Default } from '@digigov/form/inputs/ImageInput/__stories__/Default';
8
- export { WithInvalidImageSize } from '@digigov/form/inputs/ImageInput/__stories__/WithInvalidImageSize';
9
8
  export { WithInvalidImageDimension } from '@digigov/form/inputs/ImageInput/__stories__/WithInvalidImageDimension';
9
+ export { MaxSize } from '@digigov/form/inputs/ImageInput/__stories__/MaxSize';
10
+
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import FormBuilder, { Field, Fieldset } from '@digigov/form';
3
+ import { FieldSpec } from '@digigov/form/types';
4
+ import { Button } from '@digigov/ui/form/Button';
5
+ const FIELDS: FieldSpec[] = [
6
+ {
7
+ key: 'image',
8
+ type: 'image',
9
+ required: true,
10
+ label: {
11
+ primary: 'Ανέβασμα φωτογραφίας',
12
+ secondary: 'Μέγιστο μέγεθος φωτογραφίας: 10KB.',
13
+ },
14
+ extra: {
15
+ limit: {
16
+ maxSize: 1000,
17
+ },
18
+ }
19
+ },
20
+ ];
21
+
22
+ export const MaxSize = () => (
23
+ <FormBuilder
24
+ fields={FIELDS}
25
+ onSubmit={(data) => {
26
+ console.log(data);
27
+ }}
28
+ >
29
+ <Fieldset>
30
+ {FIELDS.map((field) => (
31
+ <Field key={field.key} name={field.key} />
32
+ ))}
33
+ </Fieldset>
34
+ <Button type="submit">Συνέχεια</Button>
35
+ </FormBuilder>
36
+ );
37
+ export default MaxSize;
@@ -9,6 +9,8 @@ const FIELDS: FieldSpec[] = [
9
9
  required: true,
10
10
  label: {
11
11
  primary: 'Ανέβασμα φωτογραφίας',
12
+ secondary:
13
+ 'Οι επιτρεπόμενες διαστάσεις είναι για το ύψος από 100 μέχρι 400 και για το πλάτος από 100 μέχρι 400.',
12
14
  },
13
15
  extra: {
14
16
  limit: {
@@ -0,0 +1,23 @@
1
+ ---
2
+ title: Image Input
3
+ ---
4
+
5
+ # Image input
6
+
7
+
8
+
9
+ Input element of type `image` defines an image as a submit button, i.e. submit buttons that take the form of an image rather than text.
10
+
11
+ ## How to use
12
+
13
+ ### Default
14
+
15
+ <code src="@digigov/form/inputs/ImageInput/__stories__/Default.tsx" />
16
+
17
+ ### Display with max size
18
+
19
+ <code src="@digigov/form/inputs/ImageInput/__stories__/MaxSize.tsx" />
20
+
21
+ ### Display with min and max image dimensions
22
+
23
+ <code src="@digigov/form/inputs/ImageInput/__stories__/WithInvalidImageDimension.tsx" />
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { test, expect } from '@playwright/experimental-ct-react';
3
3
  import TestVariant from '@digigov/ui/utils/TestVariant'
4
4
  import { Default } from '@digigov/form/inputs/ImageInput/__stories__/Default';
5
+ import { MaxSize } from '@digigov/form/inputs/ImageInput/__stories__/MaxSize';
5
6
  import { WithInvalidImageDimension } from '@digigov/form/inputs/ImageInput/__stories__/WithInvalidImageDimension';
6
7
  import { WithInvalidImageSize } from '@digigov/form/inputs/ImageInput/__stories__/WithInvalidImageSize';
7
8
 
@@ -12,6 +13,9 @@ test('renders the All ImageInput variants', async ({ mount, page }) => {
12
13
  <TestVariant title="Default">
13
14
  <Default />
14
15
  </TestVariant>
16
+ <TestVariant title="MaxSize">
17
+ <MaxSize />
18
+ </TestVariant>
15
19
  <TestVariant title="WithInvalidImageDimension">
16
20
  <WithInvalidImageDimension />
17
21
  </TestVariant>
@@ -1,12 +1,11 @@
1
1
  import React, { useState, useCallback } from 'react';
2
2
  import { UncontrolledFieldProps } from '@digigov/form/Field/types';
3
- import FileUpload from '@digigov/react-core/FileUpload';
4
- import FileUploadContainer from '@digigov/react-core/FileUploadContainer';
5
- import CoreHint from '@digigov/react-core/Hint';
6
- import Button, { ButtonGroup } from '@digigov/ui/form/Button';
3
+ import { Button, ButtonGroup } from '@digigov/ui/form/Button';
4
+ import { FileUpload, FileUploadContainer } from '@digigov/ui/form/FileUpload';
7
5
  import { useTranslation } from '@digigov/ui/i18n';
8
- import Paragraph from '@digigov/ui/typography/Paragraph';
9
-
6
+ import { Hint } from '@digigov/ui/typography/Hint';
7
+ import { Paragraph } from '@digigov/ui/typography/Paragraph';
8
+ import { Base } from '@digigov/ui/utils/Base';
10
9
  export interface ImageProps {
11
10
  src?: any;
12
11
  }
@@ -20,7 +19,7 @@ export interface Limit {
20
19
  }
21
20
 
22
21
  export const Image: React.FC<ImageProps> = React.memo(function Image({ src }) {
23
- return <img src={src} className="ds-image--ratio" />;
22
+ return <Base as="img" src={src} className="ds-image--ratio" />;
24
23
  });
25
24
  export interface ImageInputProps extends Omit<UncontrolledFieldProps, 'extra'> {
26
25
  extra?: {
@@ -72,13 +71,12 @@ export const ImageInput: React.FC<ImageInputProps> = React.forwardRef(
72
71
  {selectedImage !== null ? (
73
72
  <>
74
73
  <Paragraph>
75
- <b>{t('upload.image')}:</b> {`${selectedImage?.name}`}
74
+ <Base as="b">{t('upload.image')}:</Base>{' '}
75
+ {`${selectedImage?.name}`}
76
76
  </Paragraph>
77
77
  </>
78
78
  ) : (
79
- <CoreHint className="ds-dashed--border">
80
- {t('upload.no_image')}
81
- </CoreHint>
79
+ <Hint className="ds-dashed--border">{t('upload.no_image')}</Hint>
82
80
  )}
83
81
  <>
84
82
  {selectedImage !== null && <Image src={imageUrl} />}
@@ -12,12 +12,13 @@ export const LandlineNumber = () => (
12
12
  key="phone-number"
13
13
  name="phone-number"
14
14
  type="phone_number"
15
+ autoComplete='tel'
15
16
  label={{
16
17
  primary: 'Σταθερό τηλέφωνο',
17
18
  }}
18
19
  extra={{
19
20
  countries: ['gr'],
20
- phoneType:'landline',
21
+ phoneType: 'landline',
21
22
  }}
22
23
  required
23
24
  />
@@ -12,6 +12,7 @@ export const MobilePhone = () => (
12
12
  key="mobile-phone"
13
13
  name="mobile-phone"
14
14
  type="mobile_phone"
15
+ autoComplete='tel'
15
16
  label={{
16
17
  primary: 'Κινητό τηλέφωνο',
17
18
  }}
@@ -12,6 +12,7 @@ export const PhoneNumber = () => (
12
12
  key="phone-number"
13
13
  name="phone-number"
14
14
  type="phone_number"
15
+ autoComplete='tel'
15
16
  label={{
16
17
  primary: 'Tηλέφωνο',
17
18
  }}
@@ -12,6 +12,7 @@ export const PostalCode = () => (
12
12
  key="postal-code"
13
13
  name="postal-code"
14
14
  type="postal_code"
15
+ autoComplete='postal-code'
15
16
  label={{
16
17
  primary: 'Ταχυδρομικός κωδικός',
17
18
  }}
@@ -0,0 +1,56 @@
1
+ ---
2
+ title: Input
3
+ ---
4
+
5
+ # Input
6
+
7
+ The input element of type `string` is used to create interactive controls for web-based forms in order to accept data from the user;
8
+ a wide variety of types of input data and control widgets are available, depending on the device and user agent. The input element is one of the most powerful and complex in all of HTML due to the sheer number of combinations of input types and attributes.
9
+
10
+ ## How to use
11
+
12
+ ### String
13
+
14
+ <code src="@digigov/form/inputs/Input/__stories__/String.tsx" />
15
+
16
+ ### Boolean
17
+
18
+ <code src="@digigov/form/inputs/Input/__stories__/Boolean.tsx" />
19
+
20
+ ### AFM
21
+
22
+ <code src="@digigov/form/inputs/Input/__stories__/AFM.tsx" />
23
+
24
+
25
+ ### IBAN
26
+
27
+ <code src="@digigov/form/inputs/Input/__stories__/IBAN.tsx" />
28
+
29
+
30
+ ### Integer
31
+
32
+ <code src="@digigov/form/inputs/Input/__stories__/Integer.tsx" />
33
+
34
+
35
+ ### Landline number
36
+
37
+ <code src="@digigov/form/inputs/Input/__stories__/LandlineNumber.tsx" />
38
+
39
+
40
+ ### Mobile phone
41
+
42
+ <code src="@digigov/form/inputs/Input/__stories__/MobilePhone.tsx" />
43
+
44
+
45
+ ### Phone number
46
+
47
+ <code src="@digigov/form/inputs/Input/__stories__/PhoneNumber.tsx" />
48
+
49
+
50
+ ### Postal code
51
+
52
+ <code src="@digigov/form/inputs/Input/__stories__/PostalCode.tsx" />
53
+
54
+ ### Text with character limit
55
+
56
+ <code src="@digigov/form/inputs/Input/__stories__/TextWithLimit.tsx" />
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
2
  import { useWatch } from 'react-hook-form';
3
3
  import { UncontrolledFieldProps } from '@digigov/form/Field/types';
4
- import { Hint } from '@digigov/react-core/Hint';
5
- import TextArea from '@digigov/react-core/TextArea';
6
- import TextInput from '@digigov/react-core/TextInput';
4
+ import { TextArea } from '@digigov/ui/form/TextArea';
5
+ import { TextInput } from '@digigov/ui/form/TextInput';
7
6
  import { useTranslation } from '@digigov/ui/i18n';
7
+ import { Hint } from '@digigov/ui/typography/Hint';
8
8
 
9
9
  const TYPES_MAP = {
10
10
  string: 'text',
@@ -28,7 +28,7 @@ export interface InputProps extends Omit<UncontrolledFieldProps, 'extra'> {
28
28
  }
29
29
 
30
30
  export const Input: React.ExoticComponent<InputProps> = React.forwardRef(
31
- function WrappedInput({ name, control, type, extra, ...props }, ref: never) {
31
+ function WrappedInput({ name, control, type, extra, Field, ...props }, ref: never) {
32
32
  // eslint-disable-next-line prefer-const
33
33
  let { multiline = false, rows, limit } = extra || {};
34
34
  const { className } = extra || {};
@@ -40,6 +40,27 @@ export const Input: React.ExoticComponent<InputProps> = React.forwardRef(
40
40
  const fieldType = TYPES_MAP[type || 'text'] || 'text';
41
41
  const { t } = useTranslation();
42
42
  const currentValue: string | '' = useWatch({ control, name });
43
+
44
+ const getRemainingChars = (currentValue, limit) => {
45
+ if (currentValue) {
46
+ return limit?.max - currentValue.length;
47
+ }
48
+ return limit?.max;
49
+ };
50
+
51
+ const constructRemainingText = (currentValue, limit) => {
52
+ const remainingChars = getRemainingChars(currentValue, limit);
53
+ let remainingText =
54
+ Math.abs(remainingChars) === 1
55
+ ? t('form.info.text.character')
56
+ : t('form.info.text.characters');
57
+ remainingText +=
58
+ remainingChars > 0
59
+ ? ` ${t('form.info.text.remaining')}.`
60
+ : ` ${t('form.info.text.too_many')}.`;
61
+ return remainingText;
62
+ };
63
+
43
64
  if (multiline === true) {
44
65
  return (
45
66
  <>
@@ -56,32 +77,13 @@ export const Input: React.ExoticComponent<InputProps> = React.forwardRef(
56
77
  }}
57
78
  />
58
79
  {limit?.max && (
59
- <Hint>
60
- {currentValue === undefined ||
61
- (currentValue?.length >= 0 &&
62
- currentValue?.length <= limit?.max) ? (
63
- <span>
64
- {t('form.info.text.you_have')}{' '}
65
- <b>
66
- {!currentValue
67
- ? limit.max
68
- : limit?.max - currentValue?.length}
69
- </b>{' '}
70
- {currentValue && limit?.max - currentValue?.length === 1
71
- ? `${t('form.info.text.character')}`
72
- : `${t('form.info.text.characters')}`}{' '}
73
- {t('form.info.text.remaining')}.
74
- </span>
75
- ) : (
76
- <span style={{ color: '#b60202' }}>
77
- {t('form.info.text.you_have')}{' '}
78
- <b>{currentValue && currentValue?.length - limit?.max}</b>{' '}
79
- {currentValue?.length - limit?.max === 1
80
- ? `${t('form.info.text.character')}`
81
- : `${t('form.info.text.characters')}`}{' '}
82
- {t('form.info.text.too_many')}.
83
- </span>
84
- )}
80
+ <Hint display={'flex'}>
81
+ {t('form.info.text.you_have')}
82
+ <Hint fontWeight="bold">
83
+ &nbsp;{`${Math.abs(getRemainingChars(currentValue, limit))}`}
84
+ &nbsp;
85
+ </Hint>
86
+ {constructRemainingText(currentValue, limit)}
85
87
  </Hint>
86
88
  )}
87
89
  </>
@@ -91,6 +93,7 @@ export const Input: React.ExoticComponent<InputProps> = React.forwardRef(
91
93
  <TextInput
92
94
  name={name}
93
95
  type={fieldType}
96
+ data-type={type}
94
97
  className={className}
95
98
  ref={ref}
96
99
  {...{ ...props, reset: undefined, required: undefined }}
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: Label
3
+ ---
4
+
5
+ # Label
6
+
7
+
8
+ The Label component is used to display descriptive text for form sections or fields. It supports both primary and secondary text, allowing for a title and optional subtitle.
9
+
10
+ ## How to use
11
+
12
+ ### Default
13
+
14
+ <code src="@digigov/form/inputs/Label/__stories__/Default.tsx" />
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import { FieldLabelProps } from '@digigov/form/types';
3
- import Hint from '@digigov/react-core/Hint';
4
- import LabelTitle from '@digigov/react-core/LabelTitle';
3
+ import { LabelTitle } from '@digigov/ui/form/LabelContainer';
5
4
  import { useTranslation } from '@digigov/ui/i18n';
5
+ import { Hint } from '@digigov/ui/typography/Hint';
6
6
 
7
7
  export interface FieldOptionProps {
8
8
  label?: FieldLabelProps;
@@ -39,5 +39,4 @@ export const Label: React.FC<LabelProps> = ({ className, label, value }) => {
39
39
  );
40
40
  };
41
41
 
42
-
43
42
  export default Label;
@@ -13,11 +13,4 @@ on a computer system or other digital device.
13
13
 
14
14
  ### Default
15
15
 
16
- <Story
17
- packageName="@digigov/form"
18
- component="inputs/OtpInput"
19
- story="Default.tsx"
20
- />
21
-
22
-
23
-
16
+ <code src="@digigov/form/inputs/OtpInput/__stories__/Default.tsx" />
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
- import FormBuilder, { Field, FieldSpec } from '@digigov/form';
2
+ import FormBuilder, { Field } from '@digigov/form';
3
+ import { FieldSpec } from '@digigov/form/types';
3
4
  import { Button } from '@digigov/ui/form/Button';
4
5
 
5
6
  const fields: FieldSpec[] = [
@@ -10,24 +10,14 @@ Radios are used to let a user select one option of a limited number of choices.
10
10
 
11
11
  ### Default
12
12
 
13
- <Story
14
- packageName="@digigov/form"
15
- component="inputs/Radio"
16
- story="Default.tsx"
17
- />
13
+ <code src="@digigov/form/inputs/Radio/__stories__/Default.tsx" />
14
+
18
15
 
19
16
  ### Conditional
20
17
 
21
- <Story
22
- packageName="@digigov/form"
23
- component="inputs/Radio"
24
- story="Conditional.tsx"
25
- />
18
+ <code src="@digigov/form/inputs/Radio/__stories__/Conditional.tsx" />
19
+
26
20
 
27
21
  ### With divider
28
22
 
29
- <Story
30
- packageName="@digigov/form"
31
- component="inputs/Radio"
32
- story="WithDivider.tsx"
33
- />
23
+ <code src="@digigov/form/inputs/Radio/__stories__/WithDivider.tsx" />
@@ -2,11 +2,14 @@ import React from 'react';
2
2
  import { useWatch } from 'react-hook-form';
3
3
  import { UncontrolledFieldProps } from '@digigov/form/Field/types';
4
4
  import { FieldOptionProps } from '@digigov/form/inputs/Label';
5
- import Hint from '@digigov/react-core/Hint';
6
- import { RadioConditional } from '@digigov/react-core/RadioConditional';
7
- import RadioContainer from '@digigov/react-core/RadioContainer';
8
- import RadioItem from '@digigov/react-core/RadioItem';
5
+ import {
6
+ RadioContainer,
7
+ RadioItem,
8
+ RadioConditional,
9
+ } from '@digigov/ui/form/RadioContainer';
9
10
  import { useTranslation } from '@digigov/ui/i18n';
11
+ import { Hint } from '@digigov/ui/typography/Hint';
12
+ import { Base } from '@digigov/ui/utils/Base';
10
13
 
11
14
  export interface RadioButtonsGroupProps
12
15
  extends Omit<UncontrolledFieldProps, 'extra'> {
@@ -24,13 +27,13 @@ export const RadioButtonsGroup: React.FC<RadioButtonsGroupProps> = ({
24
27
  register,
25
28
  extra: { options, className },
26
29
  disabled,
27
- fieldComponent: Field,
30
+ Field,
28
31
  ...props
29
32
  }) => {
30
33
  const currentValue: string | undefined = useWatch({ control, name });
31
34
  const { t } = useTranslation();
32
35
  return (
33
- <RadioContainer className={className} defaultValue={currentValue} id={name}>
36
+ <RadioContainer className={className} id={name}>
34
37
  {options.map(
35
38
  ({
36
39
  label,
@@ -40,7 +43,7 @@ export const RadioButtonsGroup: React.FC<RadioButtonsGroupProps> = ({
40
43
  selected,
41
44
  ...option
42
45
  }) => (
43
- <div key={`${name}.${v}`}>
46
+ <Base as="div" key={`${name}.${v}`}>
44
47
  <RadioItem
45
48
  {...register(name)}
46
49
  id={`${name}.${v}`}
@@ -56,7 +59,9 @@ export const RadioButtonsGroup: React.FC<RadioButtonsGroupProps> = ({
56
59
  type: 'radio',
57
60
  }}
58
61
  >
59
- {(label && label.primary && t(label.primary)) || v}
62
+ {label && label.primary && (
63
+ <Base as="span">{t(label.primary) || v}</Base>
64
+ )}
60
65
  {label && label.secondary && <Hint>{t(label.secondary)}</Hint>}
61
66
  </RadioItem>
62
67
  {selected && selected()}
@@ -67,7 +72,68 @@ export const RadioButtonsGroup: React.FC<RadioButtonsGroupProps> = ({
67
72
  ))}
68
73
  </RadioConditional>
69
74
  )}
70
- </div>
75
+ </Base>
76
+ )
77
+ )}
78
+ </RadioContainer>
79
+ );
80
+ };
81
+ export const ControlledRadioButtonsGroup: React.FC<
82
+ RadioButtonsGroupProps & { onChange: (e: any) => void; value: any }
83
+ > = ({
84
+ name,
85
+ extra: { options, className },
86
+ disabled,
87
+ onChange,
88
+ value,
89
+ Field,
90
+ ...props
91
+ }) => {
92
+ const currentValue: string | undefined = value;
93
+ const { t } = useTranslation();
94
+ return (
95
+ <RadioContainer className={className} id={name}>
96
+ {options.map(
97
+ ({
98
+ label,
99
+ value: v,
100
+ show,
101
+ disabled: optionDisabled,
102
+ selected,
103
+ ...option
104
+ }) => (
105
+ <React.Fragment key={`${name}.${v}`}>
106
+ <RadioItem
107
+ onChange={(e) => {
108
+ console.log(e);
109
+ onChange(e);
110
+ }}
111
+ id={`${name}.${v}`}
112
+ value={v}
113
+ checked={currentValue === v}
114
+ disabled={disabled || optionDisabled}
115
+ {...option}
116
+ {...{
117
+ ...props,
118
+ reset: undefined,
119
+ required: undefined,
120
+ error: undefined,
121
+ 'aria-describedby': undefined,
122
+ type: 'radio',
123
+ }}
124
+ >
125
+ {(label && label.primary && t(label.primary)) || v}
126
+ {label && label.secondary && <Hint>{t(label.secondary)}</Hint>}
127
+ </RadioItem>
128
+ {selected && selected()}
129
+ {currentValue === v && show && (
130
+ <RadioConditional>
131
+ {show.map((fieldName) => (
132
+ <Field name={fieldName} key={fieldName} />
133
+ ))}
134
+ </RadioConditional>
135
+ )}
136
+ </React.Fragment>
71
137
  )
72
138
  )}
73
139
  </RadioContainer>
@@ -10,8 +10,4 @@ The select element represents a control that provides a menu of options.
10
10
 
11
11
  ### Default
12
12
 
13
- <Story
14
- packageName="@digigov/form"
15
- component="inputs/Select"
16
- story="Default.tsx"
17
- />
13
+ <code src="@digigov/form/inputs/Select/__stories__/Default.tsx" />
@@ -1,8 +1,7 @@
1
1
  import React from 'react';
2
2
  import { UncontrolledFieldProps } from '@digigov/form/Field/types';
3
3
  import { FieldOptionProps } from '@digigov/form/inputs/Label';
4
- import SelectContainer from '@digigov/react-core/SelectContainer';
5
- import SelectOption from '@digigov/react-core/SelectOption';
4
+ import { SelectContainer, SelectOption } from '@digigov/ui/form/SelectContainer';
6
5
 
7
6
  export interface SelectProps extends Omit<UncontrolledFieldProps, 'extra'> {
8
7
  extra: {