@digigov/form 0.10.6 → 0.10.7
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.
- package/.eslintrc.js +3 -0
- package/.prettierrc.js +3 -0
- package/CHANGELOG.json +1392 -0
- package/CHANGELOG.md +8 -1
- package/coverage/clover.xml +859 -0
- package/coverage/coverage-final.json +51 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +386 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov-report/src/Field/FieldBase.tsx.html +379 -0
- package/coverage/lcov-report/src/Field/FieldConditional.tsx.html +310 -0
- package/coverage/lcov-report/src/Field/FieldContainer.tsx.html +256 -0
- package/coverage/lcov-report/src/Field/index.html +176 -0
- package/coverage/lcov-report/src/Field/index.tsx.html +352 -0
- package/coverage/lcov-report/src/Field/utils.ts.html +559 -0
- package/coverage/lcov-report/src/FieldArray/index.html +116 -0
- package/coverage/lcov-report/src/FieldArray/index.tsx.html +319 -0
- package/coverage/lcov-report/src/FieldObject/index.html +116 -0
- package/coverage/lcov-report/src/FieldObject/index.tsx.html +364 -0
- package/coverage/lcov-report/src/Fieldset/index.html +116 -0
- package/coverage/lcov-report/src/Fieldset/index.tsx.html +202 -0
- package/coverage/lcov-report/src/FormBuilder/FormBuilder.tsx.html +580 -0
- package/coverage/lcov-report/src/FormBuilder/index.html +131 -0
- package/coverage/lcov-report/src/FormBuilder/index.tsx.html +94 -0
- package/coverage/lcov-report/src/FormContext.tsx.html +109 -0
- package/coverage/lcov-report/src/MultiplicityField/add-objects.tsx.html +637 -0
- package/coverage/lcov-report/src/MultiplicityField/index.html +131 -0
- package/coverage/lcov-report/src/MultiplicityField/index.tsx.html +580 -0
- package/coverage/lcov-report/src/Questions/Questions.tsx.html +307 -0
- package/coverage/lcov-report/src/Questions/QuestionsContext.tsx.html +112 -0
- package/coverage/lcov-report/src/Questions/Step/ReviewStep.tsx.html +274 -0
- package/coverage/lcov-report/src/Questions/Step/Step.tsx.html +286 -0
- package/coverage/lcov-report/src/Questions/Step/StepArrayReview.tsx.html +289 -0
- package/coverage/lcov-report/src/Questions/Step/StepContext.tsx.html +148 -0
- package/coverage/lcov-report/src/Questions/Step/StepDescription.tsx.html +184 -0
- package/coverage/lcov-report/src/Questions/Step/StepForm.tsx.html +265 -0
- package/coverage/lcov-report/src/Questions/Step/StepQuote.tsx.html +109 -0
- package/coverage/lcov-report/src/Questions/Step/StepTitle.tsx.html +265 -0
- package/coverage/lcov-report/src/Questions/Step/getAddMoreFields.tsx.html +169 -0
- package/coverage/lcov-report/src/Questions/Step/index.html +266 -0
- package/coverage/lcov-report/src/Questions/Step/index.ts.html +124 -0
- package/coverage/lcov-report/src/Questions/Step/types.tsx.html +181 -0
- package/coverage/lcov-report/src/Questions/getNextStep.tsx.html +157 -0
- package/coverage/lcov-report/src/Questions/index.html +161 -0
- package/coverage/lcov-report/src/Questions/index.tsx.html +100 -0
- package/coverage/lcov-report/src/index.html +176 -0
- package/coverage/lcov-report/src/index.ts.html +94 -0
- package/coverage/lcov-report/src/inputs/Checkboxes/index.html +116 -0
- package/coverage/lcov-report/src/inputs/Checkboxes/index.tsx.html +307 -0
- package/coverage/lcov-report/src/inputs/DateInput/index.html +116 -0
- package/coverage/lcov-report/src/inputs/DateInput/index.tsx.html +475 -0
- package/coverage/lcov-report/src/inputs/FileInput/index.html +116 -0
- package/coverage/lcov-report/src/inputs/FileInput/index.tsx.html +313 -0
- package/coverage/lcov-report/src/inputs/Input/index.html +116 -0
- package/coverage/lcov-report/src/inputs/Input/index.tsx.html +271 -0
- package/coverage/lcov-report/src/inputs/Label/index.html +116 -0
- package/coverage/lcov-report/src/inputs/Label/index.tsx.html +217 -0
- package/coverage/lcov-report/src/inputs/Radio/index.html +116 -0
- package/coverage/lcov-report/src/inputs/Radio/index.tsx.html +256 -0
- package/coverage/lcov-report/src/inputs/Select/index.html +116 -0
- package/coverage/lcov-report/src/inputs/Select/index.tsx.html +196 -0
- package/coverage/lcov-report/src/inputs/index.html +116 -0
- package/coverage/lcov-report/src/inputs/index.ts.html +106 -0
- package/coverage/lcov-report/src/internal.ts.html +184 -0
- package/coverage/lcov-report/src/types.tsx.html +406 -0
- package/coverage/lcov-report/src/utils.ts.html +319 -0
- package/coverage/lcov-report/src/validators/index.html +116 -0
- package/coverage/lcov-report/src/validators/index.ts.html +694 -0
- package/coverage/lcov-report/src/validators/utils/afm.ts.html +196 -0
- package/coverage/lcov-report/src/validators/utils/file.ts.html +160 -0
- package/coverage/lcov-report/src/validators/utils/iban.ts.html +442 -0
- package/coverage/lcov-report/src/validators/utils/index.html +236 -0
- package/coverage/lcov-report/src/validators/utils/index.ts.html +367 -0
- package/coverage/lcov-report/src/validators/utils/int.ts.html +151 -0
- package/coverage/lcov-report/src/validators/utils/number.ts.html +139 -0
- package/coverage/lcov-report/src/validators/utils/phone.ts.html +445 -0
- package/coverage/lcov-report/src/validators/utils/postal_code.ts.html +184 -0
- package/coverage/lcov-report/src/validators/utils/uuid4.ts.html +148 -0
- package/coverage/lcov.info +1969 -0
- package/dist/CHANGELOG.md +432 -0
- package/{Field → dist/Field}/FieldBase.d.ts +0 -0
- package/{Field → dist/Field}/FieldBase.js +3 -3
- package/dist/Field/FieldBaseContainer.d.ts +4 -0
- package/{Field/FieldContainer.js → dist/Field/FieldBaseContainer.js} +10 -10
- package/{Field → dist/Field}/FieldConditional.d.ts +0 -0
- package/{Field → dist/Field}/FieldConditional.js +0 -0
- package/{Field → dist/Field}/index.d.ts +0 -0
- package/{Field → dist/Field}/index.js +0 -0
- package/{Field → dist/Field}/index.mdx +0 -0
- package/{Field → dist/Field}/types.d.ts +0 -0
- package/{Field → dist/Field}/types.js +0 -0
- package/{Field → dist/Field}/utils.d.ts +0 -0
- package/{Field → dist/Field}/utils.js +0 -0
- package/{FieldArray → dist/FieldArray}/FieldArray.stories.d.ts +0 -0
- package/{FieldArray → dist/FieldArray}/FieldArray.stories.js +0 -0
- package/{FieldArray → dist/FieldArray}/FieldArray.stories.playwright.json +0 -0
- package/{FieldArray → dist/FieldArray}/__stories__/Default.d.ts +0 -0
- package/{FieldArray → dist/FieldArray}/__stories__/Default.js +0 -0
- package/{FieldArray → dist/FieldArray}/__stories__/WithExactLength.d.ts +0 -0
- package/{FieldArray → dist/FieldArray}/__stories__/WithExactLength.js +0 -0
- package/{FieldArray → dist/FieldArray}/index.d.ts +0 -0
- package/{FieldArray → dist/FieldArray}/index.js +2 -2
- package/{FieldObject → dist/FieldObject}/index.d.ts +0 -0
- package/{FieldObject → dist/FieldObject}/index.js +0 -0
- package/{Fieldset → dist/Fieldset}/FieldsetWithContext.d.ts +0 -0
- package/{Fieldset → dist/Fieldset}/FieldsetWithContext.js +0 -0
- package/{Fieldset → dist/Fieldset}/index.d.ts +2 -1
- package/{Fieldset → dist/Fieldset}/index.js +8 -9
- package/{Fieldset → dist/Fieldset}/types.d.ts +0 -0
- package/{Fieldset → dist/Fieldset}/types.js +0 -0
- package/{Form.stories.d.ts → dist/Form.stories.d.ts} +0 -0
- package/{Form.stories.js → dist/Form.stories.js} +0 -0
- package/{Form.stories.playwright.json → dist/Form.stories.playwright.json} +0 -0
- package/{FormBuilder → dist/FormBuilder}/FormBuilder.d.ts +0 -0
- package/{FormBuilder → dist/FormBuilder}/FormBuilder.js +0 -0
- package/{FormBuilder → dist/FormBuilder}/FormBuilder.mdx +0 -0
- package/{FormBuilder → dist/FormBuilder}/FormBuilder.stories.d.ts +0 -0
- package/{FormBuilder → dist/FormBuilder}/FormBuilder.stories.js +0 -0
- package/{FormBuilder → dist/FormBuilder}/FormBuilder.stories.playwright.json +0 -0
- package/{FormBuilder → dist/FormBuilder}/__stories__/Default.d.ts +0 -0
- package/{FormBuilder → dist/FormBuilder}/__stories__/Default.js +0 -0
- package/{FormBuilder → dist/FormBuilder}/index.d.ts +0 -0
- package/{FormBuilder → dist/FormBuilder}/index.js +0 -0
- package/{FormContext.d.ts → dist/FormContext.d.ts} +0 -0
- package/{FormContext.js → dist/FormContext.js} +0 -0
- package/{LICENSE → dist/LICENSE} +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/MultiplicityField.mdx +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/MultiplicityField.stories.d.ts +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/MultiplicityField.stories.js +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/MultiplicityField.stories.playwright.json +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/__stories__/Default.d.ts +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/__stories__/Default.js +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/__stories__/PreviewDisplay.d.ts +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/__stories__/PreviewDisplay.js +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/__stories__/WithExactLength.d.ts +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/__stories__/WithExactLength.js +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/__stories__/WithMaxLength.d.ts +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/__stories__/WithMaxLength.js +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/__stories__/WithMinAndMaxLength.d.ts +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/__stories__/WithMinAndMaxLength.js +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/__stories__/WithMinLength.d.ts +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/__stories__/WithMinLength.js +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/add-objects.d.ts +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/add-objects.js +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/index.d.ts +0 -0
- package/{MultiplicityField → dist/MultiplicityField}/index.js +2 -2
- package/{Questions → dist/Questions}/Questions.d.ts +0 -0
- package/{Questions → dist/Questions}/Questions.js +0 -0
- package/{Questions → dist/Questions}/QuestionsContext.d.ts +0 -0
- package/{Questions → dist/Questions}/QuestionsContext.js +0 -0
- package/{Questions → dist/Questions}/Step/ReviewStep.d.ts +0 -0
- package/{Questions → dist/Questions}/Step/ReviewStep.js +0 -0
- package/{Questions → dist/Questions}/Step/Step.d.ts +0 -0
- package/{Questions → dist/Questions}/Step/Step.js +0 -0
- package/{Questions → dist/Questions}/Step/StepArrayReview.d.ts +0 -0
- package/{Questions → dist/Questions}/Step/StepArrayReview.js +0 -0
- package/{Questions → dist/Questions}/Step/StepContext.d.ts +0 -0
- package/{Questions → dist/Questions}/Step/StepContext.js +0 -0
- package/{Questions → dist/Questions}/Step/StepDescription.d.ts +0 -0
- package/{Questions → dist/Questions}/Step/StepDescription.js +0 -0
- package/{Questions → dist/Questions}/Step/StepForm.d.ts +0 -0
- package/{Questions → dist/Questions}/Step/StepForm.js +0 -0
- package/{Questions → dist/Questions}/Step/StepQuote.d.ts +0 -0
- package/{Questions → dist/Questions}/Step/StepQuote.js +0 -0
- package/{Questions → dist/Questions}/Step/StepTitle.d.ts +0 -0
- package/{Questions → dist/Questions}/Step/StepTitle.js +0 -0
- package/{Questions → dist/Questions}/Step/getAddMoreFields.d.ts +0 -0
- package/{Questions → dist/Questions}/Step/getAddMoreFields.js +0 -0
- package/{Questions → dist/Questions}/Step/index.d.ts +0 -0
- package/{Questions → dist/Questions}/Step/index.js +0 -0
- package/{Questions → dist/Questions}/Step/types.d.ts +0 -0
- package/{Questions → dist/Questions}/Step/types.js +0 -0
- package/{Questions → dist/Questions}/__snapshots__/index.spec.tsx.snap +0 -0
- package/{Questions → dist/Questions}/getNextStep.d.ts +0 -0
- package/{Questions → dist/Questions}/getNextStep.js +0 -0
- package/{Questions → dist/Questions}/index.d.ts +0 -0
- package/{Questions → dist/Questions}/index.js +0 -0
- package/{Questions → dist/Questions}/index.mdx +0 -0
- package/{Questions → dist/Questions}/index.spec.d.ts +0 -0
- package/{Questions → dist/Questions}/index.spec.js +0 -0
- package/{Questions → dist/Questions}/types.d.ts +0 -0
- package/{Questions → dist/Questions}/types.js +0 -0
- package/{es/inputs/Checkboxes/index.mdx → dist/README.md} +0 -0
- package/{__stories__ → dist/__stories__}/AutoCompleteField.d.ts +0 -0
- package/{__stories__ → dist/__stories__}/AutoCompleteField.js +0 -0
- package/{__stories__ → dist/__stories__}/IntField.d.ts +0 -0
- package/{__stories__ → dist/__stories__}/IntField.js +0 -0
- package/{create-simple-form.mdx → dist/create-simple-form.mdx} +0 -0
- package/{es → dist/es}/Field/FieldBase.js +3 -3
- package/{esm/Field/FieldContainer.js → dist/es/Field/FieldBaseContainer.js} +7 -7
- package/{es → dist/es}/Field/FieldConditional.js +0 -0
- package/{es → dist/es}/Field/index.js +0 -0
- package/{es → dist/es}/Field/index.mdx +0 -0
- package/{es → dist/es}/Field/types.js +0 -0
- package/{es → dist/es}/Field/utils.js +0 -0
- package/{es → dist/es}/FieldArray/FieldArray.stories.js +0 -0
- package/{es → dist/es}/FieldArray/FieldArray.stories.playwright.json +0 -0
- package/{es → dist/es}/FieldArray/__stories__/Default.js +0 -0
- package/{es → dist/es}/FieldArray/__stories__/WithExactLength.js +0 -0
- package/{esm → dist/es}/FieldArray/index.js +1 -1
- package/{es → dist/es}/FieldObject/index.js +0 -0
- package/{es → dist/es}/Fieldset/FieldsetWithContext.js +0 -0
- package/{esm → dist/es}/Fieldset/index.js +2 -5
- package/{es → dist/es}/Fieldset/types.js +0 -0
- package/{es → dist/es}/Form.stories.js +0 -0
- package/{es → dist/es}/Form.stories.playwright.json +0 -0
- package/{es → dist/es}/FormBuilder/FormBuilder.js +0 -0
- package/{es → dist/es}/FormBuilder/FormBuilder.mdx +0 -0
- package/{es → dist/es}/FormBuilder/FormBuilder.stories.js +0 -0
- package/{es → dist/es}/FormBuilder/FormBuilder.stories.playwright.json +0 -0
- package/{es → dist/es}/FormBuilder/__stories__/Default.js +0 -0
- package/{es → dist/es}/FormBuilder/index.js +0 -0
- package/{es → dist/es}/FormContext.js +0 -0
- package/{es → dist/es}/MultiplicityField/MultiplicityField.mdx +0 -0
- package/{es → dist/es}/MultiplicityField/MultiplicityField.stories.js +0 -0
- package/{es → dist/es}/MultiplicityField/MultiplicityField.stories.playwright.json +0 -0
- package/{es → dist/es}/MultiplicityField/__stories__/Default.js +0 -0
- package/{es → dist/es}/MultiplicityField/__stories__/PreviewDisplay.js +0 -0
- package/{es → dist/es}/MultiplicityField/__stories__/WithExactLength.js +0 -0
- package/{es → dist/es}/MultiplicityField/__stories__/WithMaxLength.js +0 -0
- package/{es → dist/es}/MultiplicityField/__stories__/WithMinAndMaxLength.js +0 -0
- package/{es → dist/es}/MultiplicityField/__stories__/WithMinLength.js +0 -0
- package/{es → dist/es}/MultiplicityField/add-objects.js +0 -0
- package/{esm → dist/es}/MultiplicityField/index.js +1 -1
- package/{es → dist/es}/Questions/Questions.js +0 -0
- package/{es → dist/es}/Questions/QuestionsContext.js +0 -0
- package/{es → dist/es}/Questions/Step/ReviewStep.js +0 -0
- package/{es → dist/es}/Questions/Step/Step.js +0 -0
- package/{es → dist/es}/Questions/Step/StepArrayReview.js +0 -0
- package/{es → dist/es}/Questions/Step/StepContext.js +0 -0
- package/{es → dist/es}/Questions/Step/StepDescription.js +0 -0
- package/{es → dist/es}/Questions/Step/StepForm.js +0 -0
- package/{es → dist/es}/Questions/Step/StepQuote.js +0 -0
- package/{es → dist/es}/Questions/Step/StepTitle.js +0 -0
- package/{es → dist/es}/Questions/Step/getAddMoreFields.js +0 -0
- package/{es → dist/es}/Questions/Step/index.js +0 -0
- package/{es → dist/es}/Questions/Step/types.js +0 -0
- package/{es → dist/es}/Questions/__snapshots__/index.spec.tsx.snap +0 -0
- package/{es → dist/es}/Questions/getNextStep.js +0 -0
- package/{es → dist/es}/Questions/index.js +0 -0
- package/{es → dist/es}/Questions/index.mdx +0 -0
- package/{es → dist/es}/Questions/index.spec.js +0 -0
- package/{es → dist/es}/Questions/types.js +0 -0
- package/{es → dist/es}/__stories__/AutoCompleteField.js +0 -0
- package/{es → dist/es}/__stories__/IntField.js +0 -0
- package/{es → dist/es}/create-simple-form.mdx +0 -0
- package/{es → dist/es}/index.js +0 -0
- package/{es → dist/es}/index.mdx +0 -0
- package/{es → dist/es}/inputs/AutoComplete/index.js +0 -0
- package/{es → dist/es}/inputs/Checkboxes/Checkboxes.stories.js +0 -0
- package/{es → dist/es}/inputs/Checkboxes/Checkboxes.stories.playwright.json +0 -0
- package/{es → dist/es}/inputs/Checkboxes/__stories__/Default.js +0 -0
- package/{es → dist/es}/inputs/Checkboxes/index.js +0 -0
- package/{es/inputs/Label → dist/es/inputs/Checkboxes}/index.mdx +0 -0
- package/{es → dist/es}/inputs/DateInput/DateInput.stories.js +0 -0
- package/{es → dist/es}/inputs/DateInput/DateInput.stories.playwright.json +0 -0
- package/{es → dist/es}/inputs/DateInput/__stories__/Default.js +0 -0
- package/{esm → dist/es}/inputs/DateInput/index.js +2 -2
- package/{es → dist/es}/inputs/FileInput/FileInput.stories.js +0 -0
- package/{es → dist/es}/inputs/FileInput/FileInput.stories.playwright.json +0 -0
- package/{es → dist/es}/inputs/FileInput/__stories__/Default.js +0 -0
- package/{es → dist/es}/inputs/FileInput/index.js +0 -0
- package/{es → dist/es}/inputs/Input/Input.stories.js +0 -0
- package/{es → dist/es}/inputs/Input/Input.stories.playwright.json +0 -0
- package/{es → dist/es}/inputs/Input/__stories__/AFM.js +0 -0
- package/{es → dist/es}/inputs/Input/__stories__/Boolean.js +0 -0
- package/{es → dist/es}/inputs/Input/__stories__/Default.js +0 -0
- package/{es → dist/es}/inputs/Input/__stories__/IBAN.js +0 -0
- package/{es → dist/es}/inputs/Input/__stories__/Integer.js +0 -0
- package/{es → dist/es}/inputs/Input/__stories__/MobilePhone.js +0 -0
- package/{es → dist/es}/inputs/Input/__stories__/PhoneNumber.js +0 -0
- package/{es → dist/es}/inputs/Input/__stories__/PostalCode.js +0 -0
- package/{es → dist/es}/inputs/Input/index.js +0 -0
- package/{es → dist/es}/inputs/Input/index.mdx +0 -0
- package/{es → dist/es}/inputs/Label/Label.stories.js +0 -0
- package/{es → dist/es}/inputs/Label/Label.stories.playwright.json +0 -0
- package/{es → dist/es}/inputs/Label/__stories__/Default.js +0 -0
- package/{es → dist/es}/inputs/Label/index.js +0 -0
- package/{es/inputs/Radio → dist/es/inputs/Label}/index.mdx +0 -0
- package/{es → dist/es}/inputs/Radio/Radio.stories.js +0 -0
- package/{es → dist/es}/inputs/Radio/Radio.stories.playwright.json +0 -0
- package/{es → dist/es}/inputs/Radio/__stories__/Default.js +0 -0
- package/{es → dist/es}/inputs/Radio/index.js +2 -2
- package/{esm/inputs/Checkboxes → dist/es/inputs/Radio}/index.mdx +0 -0
- package/{es → dist/es}/inputs/Select/Select.stories.js +0 -0
- package/{es → dist/es}/inputs/Select/Select.stories.playwright.json +0 -0
- package/{es → dist/es}/inputs/Select/__stories__/Default.js +0 -0
- package/{esm → dist/es}/inputs/Select/index.js +2 -2
- package/{es → dist/es}/inputs/index.js +0 -0
- package/{es → dist/es}/installation.mdx +0 -0
- package/{es → dist/es}/internal.js +0 -0
- package/{esm → dist/es}/registry.js +2 -2
- package/{es → dist/es}/types.js +0 -0
- package/{es → dist/es}/utils.js +0 -0
- package/{es → dist/es}/validators/index.js +0 -0
- package/{es → dist/es}/validators/types.js +0 -0
- package/{es → dist/es}/validators/utils/afm.js +0 -0
- package/{es → dist/es}/validators/utils/file.js +0 -0
- package/{es → dist/es}/validators/utils/iban.js +0 -0
- package/{es → dist/es}/validators/utils/index.js +0 -0
- package/{es → dist/es}/validators/utils/int.js +0 -0
- package/{es → dist/es}/validators/utils/number.js +0 -0
- package/{es → dist/es}/validators/utils/phone.js +0 -0
- package/{es → dist/es}/validators/utils/postal_code.js +0 -0
- package/{es → dist/es}/validators/utils/uuid4.js +0 -0
- package/{es → dist/es}/validators/validators.spec.js +0 -0
- package/{esm → dist/esm}/Field/FieldBase.js +3 -3
- package/{es/Field/FieldContainer.js → dist/esm/Field/FieldBaseContainer.js} +7 -7
- package/{esm → dist/esm}/Field/FieldConditional.js +0 -0
- package/{esm → dist/esm}/Field/index.js +0 -0
- package/{esm → dist/esm}/Field/index.mdx +0 -0
- package/{esm → dist/esm}/Field/types.js +0 -0
- package/{esm → dist/esm}/Field/utils.js +0 -0
- package/{esm → dist/esm}/FieldArray/FieldArray.stories.js +0 -0
- package/{esm → dist/esm}/FieldArray/FieldArray.stories.playwright.json +0 -0
- package/{esm → dist/esm}/FieldArray/__stories__/Default.js +0 -0
- package/{esm → dist/esm}/FieldArray/__stories__/WithExactLength.js +0 -0
- package/{es → dist/esm}/FieldArray/index.js +1 -1
- package/{esm → dist/esm}/FieldObject/index.js +0 -0
- package/{esm → dist/esm}/Fieldset/FieldsetWithContext.js +0 -0
- package/{es → dist/esm}/Fieldset/index.js +2 -5
- package/{esm → dist/esm}/Fieldset/types.js +0 -0
- package/{esm → dist/esm}/Form.stories.js +0 -0
- package/{esm → dist/esm}/Form.stories.playwright.json +0 -0
- package/{esm → dist/esm}/FormBuilder/FormBuilder.js +0 -0
- package/{esm → dist/esm}/FormBuilder/FormBuilder.mdx +0 -0
- package/{esm → dist/esm}/FormBuilder/FormBuilder.stories.js +0 -0
- package/{esm → dist/esm}/FormBuilder/FormBuilder.stories.playwright.json +0 -0
- package/{esm → dist/esm}/FormBuilder/__stories__/Default.js +0 -0
- package/{esm → dist/esm}/FormBuilder/index.js +0 -0
- package/{esm → dist/esm}/FormContext.js +0 -0
- package/{esm → dist/esm}/MultiplicityField/MultiplicityField.mdx +0 -0
- package/{esm → dist/esm}/MultiplicityField/MultiplicityField.stories.js +0 -0
- package/{esm → dist/esm}/MultiplicityField/MultiplicityField.stories.playwright.json +0 -0
- package/{esm → dist/esm}/MultiplicityField/__stories__/Default.js +0 -0
- package/{esm → dist/esm}/MultiplicityField/__stories__/PreviewDisplay.js +0 -0
- package/{esm → dist/esm}/MultiplicityField/__stories__/WithExactLength.js +0 -0
- package/{esm → dist/esm}/MultiplicityField/__stories__/WithMaxLength.js +0 -0
- package/{esm → dist/esm}/MultiplicityField/__stories__/WithMinAndMaxLength.js +0 -0
- package/{esm → dist/esm}/MultiplicityField/__stories__/WithMinLength.js +0 -0
- package/{esm → dist/esm}/MultiplicityField/add-objects.js +0 -0
- package/{es → dist/esm}/MultiplicityField/index.js +1 -1
- package/{esm → dist/esm}/Questions/Questions.js +0 -0
- package/{esm → dist/esm}/Questions/QuestionsContext.js +0 -0
- package/{esm → dist/esm}/Questions/Step/ReviewStep.js +0 -0
- package/{esm → dist/esm}/Questions/Step/Step.js +0 -0
- package/{esm → dist/esm}/Questions/Step/StepArrayReview.js +0 -0
- package/{esm → dist/esm}/Questions/Step/StepContext.js +0 -0
- package/{esm → dist/esm}/Questions/Step/StepDescription.js +0 -0
- package/{esm → dist/esm}/Questions/Step/StepForm.js +0 -0
- package/{esm → dist/esm}/Questions/Step/StepQuote.js +0 -0
- package/{esm → dist/esm}/Questions/Step/StepTitle.js +0 -0
- package/{esm → dist/esm}/Questions/Step/getAddMoreFields.js +0 -0
- package/{esm → dist/esm}/Questions/Step/index.js +0 -0
- package/{esm → dist/esm}/Questions/Step/types.js +0 -0
- package/{esm → dist/esm}/Questions/__snapshots__/index.spec.tsx.snap +0 -0
- package/{esm → dist/esm}/Questions/getNextStep.js +0 -0
- package/{esm → dist/esm}/Questions/index.js +0 -0
- package/{esm → dist/esm}/Questions/index.mdx +0 -0
- package/{esm → dist/esm}/Questions/index.spec.js +0 -0
- package/{esm → dist/esm}/Questions/types.js +0 -0
- package/{esm → dist/esm}/__stories__/AutoCompleteField.js +0 -0
- package/{esm → dist/esm}/__stories__/IntField.js +0 -0
- package/{esm → dist/esm}/create-simple-form.mdx +0 -0
- package/{esm → dist/esm}/index.js +1 -1
- package/{esm → dist/esm}/index.mdx +0 -0
- package/{esm → dist/esm}/inputs/AutoComplete/index.js +0 -0
- package/{esm → dist/esm}/inputs/Checkboxes/Checkboxes.stories.js +0 -0
- package/{esm → dist/esm}/inputs/Checkboxes/Checkboxes.stories.playwright.json +0 -0
- package/{esm → dist/esm}/inputs/Checkboxes/__stories__/Default.js +0 -0
- package/{esm → dist/esm}/inputs/Checkboxes/index.js +0 -0
- package/{esm/inputs/Label → dist/esm/inputs/Checkboxes}/index.mdx +0 -0
- package/{esm → dist/esm}/inputs/DateInput/DateInput.stories.js +0 -0
- package/{esm → dist/esm}/inputs/DateInput/DateInput.stories.playwright.json +0 -0
- package/{esm → dist/esm}/inputs/DateInput/__stories__/Default.js +0 -0
- package/{es → dist/esm}/inputs/DateInput/index.js +2 -2
- package/{esm → dist/esm}/inputs/FileInput/FileInput.stories.js +0 -0
- package/{esm → dist/esm}/inputs/FileInput/FileInput.stories.playwright.json +0 -0
- package/{esm → dist/esm}/inputs/FileInput/__stories__/Default.js +0 -0
- package/{esm → dist/esm}/inputs/FileInput/index.js +0 -0
- package/{esm → dist/esm}/inputs/Input/Input.stories.js +0 -0
- package/{esm → dist/esm}/inputs/Input/Input.stories.playwright.json +0 -0
- package/{esm → dist/esm}/inputs/Input/__stories__/AFM.js +0 -0
- package/{esm → dist/esm}/inputs/Input/__stories__/Boolean.js +0 -0
- package/{esm → dist/esm}/inputs/Input/__stories__/Default.js +0 -0
- package/{esm → dist/esm}/inputs/Input/__stories__/IBAN.js +0 -0
- package/{esm → dist/esm}/inputs/Input/__stories__/Integer.js +0 -0
- package/{esm → dist/esm}/inputs/Input/__stories__/MobilePhone.js +0 -0
- package/{esm → dist/esm}/inputs/Input/__stories__/PhoneNumber.js +0 -0
- package/{esm → dist/esm}/inputs/Input/__stories__/PostalCode.js +0 -0
- package/{esm → dist/esm}/inputs/Input/index.js +0 -0
- package/{esm → dist/esm}/inputs/Input/index.mdx +0 -0
- package/{esm → dist/esm}/inputs/Label/Label.stories.js +0 -0
- package/{esm → dist/esm}/inputs/Label/Label.stories.playwright.json +0 -0
- package/{esm → dist/esm}/inputs/Label/__stories__/Default.js +0 -0
- package/{esm → dist/esm}/inputs/Label/index.js +0 -0
- package/{esm/inputs/Radio → dist/esm/inputs/Label}/index.mdx +0 -0
- package/{esm → dist/esm}/inputs/Radio/Radio.stories.js +0 -0
- package/{esm → dist/esm}/inputs/Radio/Radio.stories.playwright.json +0 -0
- package/{esm → dist/esm}/inputs/Radio/__stories__/Default.js +0 -0
- package/{esm → dist/esm}/inputs/Radio/index.js +2 -2
- package/{inputs/Checkboxes → dist/esm/inputs/Radio}/index.mdx +0 -0
- package/{esm → dist/esm}/inputs/Select/Select.stories.js +0 -0
- package/{esm → dist/esm}/inputs/Select/Select.stories.playwright.json +0 -0
- package/{esm → dist/esm}/inputs/Select/__stories__/Default.js +0 -0
- package/{es → dist/esm}/inputs/Select/index.js +2 -2
- package/{esm → dist/esm}/inputs/index.js +0 -0
- package/{esm → dist/esm}/installation.mdx +0 -0
- package/{esm → dist/esm}/internal.js +0 -0
- package/{es → dist/esm}/registry.js +2 -2
- package/{esm → dist/esm}/types.js +0 -0
- package/{esm → dist/esm}/utils.js +0 -0
- package/{esm → dist/esm}/validators/index.js +0 -0
- package/{esm → dist/esm}/validators/types.js +0 -0
- package/{esm → dist/esm}/validators/utils/afm.js +0 -0
- package/{esm → dist/esm}/validators/utils/file.js +0 -0
- package/{esm → dist/esm}/validators/utils/iban.js +0 -0
- package/{esm → dist/esm}/validators/utils/index.js +0 -0
- package/{esm → dist/esm}/validators/utils/int.js +0 -0
- package/{esm → dist/esm}/validators/utils/number.js +0 -0
- package/{esm → dist/esm}/validators/utils/phone.js +0 -0
- package/{esm → dist/esm}/validators/utils/postal_code.js +0 -0
- package/{esm → dist/esm}/validators/utils/uuid4.js +0 -0
- package/{esm → dist/esm}/validators/validators.spec.js +0 -0
- package/{index.d.ts → dist/index.d.ts} +0 -0
- package/{index.js → dist/index.js} +0 -0
- package/{index.mdx → dist/index.mdx} +0 -0
- package/{inputs → dist/inputs}/AutoComplete/index.d.ts +0 -0
- package/{inputs → dist/inputs}/AutoComplete/index.js +0 -0
- package/{inputs → dist/inputs}/Checkboxes/Checkboxes.stories.d.ts +0 -0
- package/{inputs → dist/inputs}/Checkboxes/Checkboxes.stories.js +0 -0
- package/{inputs → dist/inputs}/Checkboxes/Checkboxes.stories.playwright.json +0 -0
- package/{inputs → dist/inputs}/Checkboxes/__stories__/Default.d.ts +0 -0
- package/{inputs → dist/inputs}/Checkboxes/__stories__/Default.js +0 -0
- package/{inputs → dist/inputs}/Checkboxes/index.d.ts +0 -0
- package/{inputs → dist/inputs}/Checkboxes/index.js +0 -0
- package/{inputs/Label → dist/inputs/Checkboxes}/index.mdx +0 -0
- package/{inputs → dist/inputs}/DateInput/DateInput.stories.d.ts +0 -0
- package/{inputs → dist/inputs}/DateInput/DateInput.stories.js +0 -0
- package/{inputs → dist/inputs}/DateInput/DateInput.stories.playwright.json +0 -0
- package/{inputs → dist/inputs}/DateInput/__stories__/Default.d.ts +0 -0
- package/{inputs → dist/inputs}/DateInput/__stories__/Default.js +0 -0
- package/{inputs → dist/inputs}/DateInput/index.d.ts +0 -0
- package/{inputs → dist/inputs}/DateInput/index.js +2 -2
- package/{inputs → dist/inputs}/FileInput/FileInput.stories.d.ts +0 -0
- package/{inputs → dist/inputs}/FileInput/FileInput.stories.js +0 -0
- package/{inputs → dist/inputs}/FileInput/FileInput.stories.playwright.json +0 -0
- package/{inputs → dist/inputs}/FileInput/__stories__/Default.d.ts +0 -0
- package/{inputs → dist/inputs}/FileInput/__stories__/Default.js +0 -0
- package/{inputs → dist/inputs}/FileInput/index.d.ts +0 -0
- package/{inputs → dist/inputs}/FileInput/index.js +0 -0
- package/{inputs → dist/inputs}/Input/Input.stories.d.ts +0 -0
- package/{inputs → dist/inputs}/Input/Input.stories.js +0 -0
- package/{inputs → dist/inputs}/Input/Input.stories.playwright.json +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/AFM.d.ts +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/AFM.js +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/Boolean.d.ts +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/Boolean.js +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/Default.d.ts +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/Default.js +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/IBAN.d.ts +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/IBAN.js +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/Integer.d.ts +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/Integer.js +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/MobilePhone.d.ts +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/MobilePhone.js +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/PhoneNumber.d.ts +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/PhoneNumber.js +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/PostalCode.d.ts +0 -0
- package/{inputs → dist/inputs}/Input/__stories__/PostalCode.js +0 -0
- package/{inputs → dist/inputs}/Input/index.d.ts +0 -0
- package/{inputs → dist/inputs}/Input/index.js +0 -0
- package/{inputs → dist/inputs}/Input/index.mdx +0 -0
- package/{inputs → dist/inputs}/Label/Label.stories.d.ts +0 -0
- package/{inputs → dist/inputs}/Label/Label.stories.js +0 -0
- package/{inputs → dist/inputs}/Label/Label.stories.playwright.json +0 -0
- package/{inputs → dist/inputs}/Label/__stories__/Default.d.ts +0 -0
- package/{inputs → dist/inputs}/Label/__stories__/Default.js +0 -0
- package/{inputs → dist/inputs}/Label/index.d.ts +0 -0
- package/{inputs → dist/inputs}/Label/index.js +0 -0
- package/{inputs/Radio → dist/inputs/Label}/index.mdx +0 -0
- package/{inputs → dist/inputs}/Radio/Radio.stories.d.ts +0 -0
- package/{inputs → dist/inputs}/Radio/Radio.stories.js +0 -0
- package/{inputs → dist/inputs}/Radio/Radio.stories.playwright.json +0 -0
- package/{inputs → dist/inputs}/Radio/__stories__/Default.d.ts +0 -0
- package/{inputs → dist/inputs}/Radio/__stories__/Default.js +0 -0
- package/{inputs → dist/inputs}/Radio/index.d.ts +0 -0
- package/{inputs → dist/inputs}/Radio/index.js +2 -2
- package/dist/inputs/Radio/index.mdx +0 -0
- package/{inputs → dist/inputs}/Select/Select.stories.d.ts +0 -0
- package/{inputs → dist/inputs}/Select/Select.stories.js +0 -0
- package/{inputs → dist/inputs}/Select/Select.stories.playwright.json +0 -0
- package/{inputs → dist/inputs}/Select/__stories__/Default.d.ts +0 -0
- package/{inputs → dist/inputs}/Select/__stories__/Default.js +0 -0
- package/{inputs → dist/inputs}/Select/index.d.ts +0 -0
- package/{inputs → dist/inputs}/Select/index.js +2 -2
- package/{inputs → dist/inputs}/index.d.ts +0 -0
- package/{inputs → dist/inputs}/index.js +0 -0
- package/{installation.mdx → dist/installation.mdx} +0 -0
- package/{internal.d.ts → dist/internal.d.ts} +0 -0
- package/{internal.js → dist/internal.js} +0 -0
- package/dist/package.json +31 -0
- package/{registry.d.ts → dist/registry.d.ts} +1 -1
- package/{registry.js → dist/registry.js} +3 -3
- package/{types.d.ts → dist/types.d.ts} +0 -0
- package/{types.js → dist/types.js} +0 -0
- package/{utils.d.ts → dist/utils.d.ts} +0 -0
- package/{utils.js → dist/utils.js} +0 -0
- package/{validators → dist/validators}/index.d.ts +0 -0
- package/{validators → dist/validators}/index.js +0 -0
- package/{validators → dist/validators}/types.d.ts +0 -0
- package/{validators → dist/validators}/types.js +0 -0
- package/{validators → dist/validators}/utils/afm.d.ts +0 -0
- package/{validators → dist/validators}/utils/afm.js +0 -0
- package/{validators → dist/validators}/utils/file.d.ts +0 -0
- package/{validators → dist/validators}/utils/file.js +0 -0
- package/{validators → dist/validators}/utils/iban.d.ts +0 -0
- package/{validators → dist/validators}/utils/iban.js +0 -0
- package/{validators → dist/validators}/utils/index.d.ts +0 -0
- package/{validators → dist/validators}/utils/index.js +0 -0
- package/{validators → dist/validators}/utils/int.d.ts +0 -0
- package/{validators → dist/validators}/utils/int.js +0 -0
- package/{validators → dist/validators}/utils/number.d.ts +0 -0
- package/{validators → dist/validators}/utils/number.js +0 -0
- package/{validators → dist/validators}/utils/phone.d.ts +0 -0
- package/{validators → dist/validators}/utils/phone.js +0 -0
- package/{validators → dist/validators}/utils/postal_code.d.ts +0 -0
- package/{validators → dist/validators}/utils/postal_code.js +0 -0
- package/{validators → dist/validators}/utils/uuid4.d.ts +0 -0
- package/{validators → dist/validators}/utils/uuid4.js +0 -0
- package/{validators → dist/validators}/validators.spec.d.ts +0 -0
- package/{validators → dist/validators}/validators.spec.js +0 -0
- package/docs/index.mdx +6 -0
- package/form.build.log +16 -0
- package/package.json +31 -10
- package/src/Field/FieldBase.tsx +99 -0
- package/src/Field/FieldBaseContainer.tsx +57 -0
- package/src/Field/FieldConditional.tsx +75 -0
- package/src/Field/index.mdx +6 -0
- package/src/Field/index.tsx +92 -0
- package/src/Field/types.tsx +102 -0
- package/src/Field/utils.ts +164 -0
- package/src/FieldArray/FieldArray.stories.js +7 -0
- package/src/FieldArray/FieldArray.stories.playwright.json +353 -0
- package/src/FieldArray/__stories__/Default.tsx +95 -0
- package/src/FieldArray/__stories__/WithExactLength.tsx +95 -0
- package/src/FieldArray/index.tsx +83 -0
- package/src/FieldObject/index.tsx +92 -0
- package/src/Fieldset/FieldsetWithContext.tsx +41 -0
- package/src/Fieldset/index.tsx +40 -0
- package/src/Fieldset/types.tsx +6 -0
- package/src/Form.stories.js +5 -0
- package/src/Form.stories.playwright.json +143 -0
- package/src/FormBuilder/FormBuilder.mdx +271 -0
- package/src/FormBuilder/FormBuilder.stories.js +6 -0
- package/src/FormBuilder/FormBuilder.stories.playwright.json +52 -0
- package/src/FormBuilder/FormBuilder.tsx +165 -0
- package/src/FormBuilder/__stories__/Default.tsx +23 -0
- package/src/FormBuilder/index.tsx +3 -0
- package/src/FormContext.tsx +8 -0
- package/src/MultiplicityField/MultiplicityField.mdx +580 -0
- package/src/MultiplicityField/MultiplicityField.stories.js +11 -0
- package/src/MultiplicityField/MultiplicityField.stories.playwright.json +1370 -0
- package/src/MultiplicityField/__stories__/Default.tsx +100 -0
- package/src/MultiplicityField/__stories__/PreviewDisplay.tsx +160 -0
- package/src/MultiplicityField/__stories__/WithExactLength.tsx +99 -0
- package/src/MultiplicityField/__stories__/WithMaxLength.tsx +102 -0
- package/src/MultiplicityField/__stories__/WithMinAndMaxLength.tsx +103 -0
- package/src/MultiplicityField/__stories__/WithMinLength.tsx +102 -0
- package/src/MultiplicityField/add-objects.tsx +186 -0
- package/src/MultiplicityField/index.tsx +166 -0
- package/src/Questions/Questions.tsx +74 -0
- package/src/Questions/QuestionsContext.tsx +9 -0
- package/src/Questions/Step/ReviewStep.tsx +63 -0
- package/src/Questions/Step/Step.tsx +67 -0
- package/src/Questions/Step/StepArrayReview.tsx +68 -0
- package/src/Questions/Step/StepContext.tsx +21 -0
- package/src/Questions/Step/StepDescription.tsx +33 -0
- package/src/Questions/Step/StepForm.tsx +60 -0
- package/src/Questions/Step/StepQuote.tsx +8 -0
- package/src/Questions/Step/StepTitle.tsx +60 -0
- package/src/Questions/Step/getAddMoreFields.tsx +28 -0
- package/src/Questions/Step/index.ts +13 -0
- package/src/Questions/Step/types.tsx +32 -0
- package/src/Questions/__snapshots__/index.spec.tsx.snap +887 -0
- package/src/Questions/getNextStep.tsx +24 -0
- package/src/Questions/index.mdx +13 -0
- package/src/Questions/index.spec.tsx +72 -0
- package/src/Questions/index.tsx +5 -0
- package/src/Questions/types.tsx +25 -0
- package/src/__stories__/AutoCompleteField.tsx +45 -0
- package/src/__stories__/IntField.tsx +38 -0
- package/src/create-simple-form.mdx +518 -0
- package/src/index.mdx +44 -0
- package/src/index.ts +3 -0
- package/src/inputs/AutoComplete/index.tsx +85 -0
- package/src/inputs/Checkboxes/Checkboxes.stories.js +6 -0
- package/src/inputs/Checkboxes/Checkboxes.stories.playwright.json +69 -0
- package/src/inputs/Checkboxes/__stories__/Default.tsx +39 -0
- package/src/inputs/Checkboxes/index.mdx +0 -0
- package/src/inputs/Checkboxes/index.tsx +77 -0
- package/src/inputs/DateInput/DateInput.stories.js +6 -0
- package/src/inputs/DateInput/DateInput.stories.playwright.json +72 -0
- package/src/inputs/DateInput/__stories__/Default.tsx +41 -0
- package/src/inputs/DateInput/index.tsx +130 -0
- package/src/inputs/FileInput/FileInput.stories.js +6 -0
- package/src/inputs/FileInput/FileInput.stories.playwright.json +75 -0
- package/src/inputs/FileInput/__stories__/Default.tsx +23 -0
- package/src/inputs/FileInput/index.tsx +76 -0
- package/src/inputs/Input/Input.stories.js +13 -0
- package/src/inputs/Input/Input.stories.playwright.json +376 -0
- package/src/inputs/Input/__stories__/AFM.tsx +24 -0
- package/src/inputs/Input/__stories__/Boolean.tsx +26 -0
- package/src/inputs/Input/__stories__/Default.tsx +25 -0
- package/src/inputs/Input/__stories__/IBAN.tsx +26 -0
- package/src/inputs/Input/__stories__/Integer.tsx +25 -0
- package/src/inputs/Input/__stories__/MobilePhone.tsx +24 -0
- package/src/inputs/Input/__stories__/PhoneNumber.tsx +24 -0
- package/src/inputs/Input/__stories__/PostalCode.tsx +25 -0
- package/src/inputs/Input/index.mdx +8 -0
- package/src/inputs/Input/index.tsx +62 -0
- package/src/inputs/Label/Label.stories.js +6 -0
- package/src/inputs/Label/Label.stories.playwright.json +40 -0
- package/src/inputs/Label/__stories__/Default.tsx +28 -0
- package/src/inputs/Label/index.mdx +0 -0
- package/src/inputs/Label/index.tsx +44 -0
- package/src/inputs/Radio/Radio.stories.js +6 -0
- package/src/inputs/Radio/Radio.stories.playwright.json +57 -0
- package/src/inputs/Radio/__stories__/Default.tsx +42 -0
- package/src/inputs/Radio/index.mdx +0 -0
- package/src/inputs/Radio/index.tsx +57 -0
- package/src/inputs/Select/Select.stories.js +6 -0
- package/src/inputs/Select/Select.stories.playwright.json +22 -0
- package/src/inputs/Select/__stories__/Default.tsx +47 -0
- package/src/inputs/Select/index.tsx +37 -0
- package/src/inputs/index.ts +7 -0
- package/src/installation.mdx +72 -0
- package/src/internal.ts +34 -0
- package/src/registry.js +134 -0
- package/src/types.tsx +110 -0
- package/src/utils.ts +78 -0
- package/src/validators/index.ts +203 -0
- package/src/validators/types.ts +2 -0
- package/src/validators/utils/afm.ts +37 -0
- package/src/validators/utils/file.ts +25 -0
- package/src/validators/utils/iban.ts +119 -0
- package/src/validators/utils/index.ts +94 -0
- package/src/validators/utils/int.ts +22 -0
- package/src/validators/utils/number.ts +18 -0
- package/src/validators/utils/phone.ts +120 -0
- package/src/validators/utils/postal_code.ts +33 -0
- package/src/validators/utils/uuid4.ts +21 -0
- package/src/validators/validators.spec.ts +122 -0
- package/tsconfig.json +14 -0
- package/tsconfig.production.json +49 -0
- package/Field/FieldContainer.d.ts +0 -4
package/src/types.tsx
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { UseFormReturn, UseFormProps } from 'react-hook-form';
|
|
2
|
+
import { GridProps } from '@digigov/ui/layouts/Grid';
|
|
3
|
+
import { ValidatorSchema } from '@digigov/form/validators/types';
|
|
4
|
+
import { FieldComponentRegistry } from '@digigov/form/Field/types';
|
|
5
|
+
|
|
6
|
+
export type FieldError = {
|
|
7
|
+
message: string;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export type FieldLabelProps = {
|
|
11
|
+
primary?: string;
|
|
12
|
+
secondary?: string;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export interface FieldCondition {
|
|
16
|
+
is: string;
|
|
17
|
+
then?: Partial<FieldSpec>;
|
|
18
|
+
else?: Partial<FieldSpec>;
|
|
19
|
+
}
|
|
20
|
+
export interface FieldSpec {
|
|
21
|
+
key: string; // !TODO rename key to name;
|
|
22
|
+
type?:
|
|
23
|
+
| 'int'
|
|
24
|
+
| 'string'
|
|
25
|
+
| 'text'
|
|
26
|
+
| 'boolean'
|
|
27
|
+
| 'email'
|
|
28
|
+
| 'uuid4'
|
|
29
|
+
| 'choice:multiple'
|
|
30
|
+
| 'choice:single'
|
|
31
|
+
| 'mobile_phone'
|
|
32
|
+
| 'date'
|
|
33
|
+
| 'afm'
|
|
34
|
+
| 'iban'
|
|
35
|
+
| 'file'
|
|
36
|
+
| 'postal_code'
|
|
37
|
+
| 'phone_number'
|
|
38
|
+
| 'array'
|
|
39
|
+
| 'object';
|
|
40
|
+
component?: any;
|
|
41
|
+
condition?: Record<string, FieldCondition>;
|
|
42
|
+
controlled?: boolean;
|
|
43
|
+
label?: FieldLabelProps;
|
|
44
|
+
extra?: Record<string, any>;
|
|
45
|
+
editable?: boolean;
|
|
46
|
+
required?: boolean;
|
|
47
|
+
enabled?: boolean;
|
|
48
|
+
layout?: Record<
|
|
49
|
+
string,
|
|
50
|
+
| GridProps['xs']
|
|
51
|
+
| GridProps['sm']
|
|
52
|
+
| GridProps['md']
|
|
53
|
+
| GridProps['lg']
|
|
54
|
+
| GridProps['xl']
|
|
55
|
+
>;
|
|
56
|
+
validators?: ValidatorSchema[];
|
|
57
|
+
wrapper?: 'label' | 'fieldset';
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface FieldsetSpec {
|
|
61
|
+
key: string;
|
|
62
|
+
fields: string[];
|
|
63
|
+
label?: FieldLabelProps;
|
|
64
|
+
body?: React.ReactNode;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export type FormData = UseFormProps['defaultValues'];
|
|
68
|
+
|
|
69
|
+
export interface FormContextProps {
|
|
70
|
+
fieldsetsMap?: Record<string, FieldsetSpec>;
|
|
71
|
+
fieldsMap: Record<string, FieldSpec>;
|
|
72
|
+
control: UseFormReturn['control'];
|
|
73
|
+
register: UseFormReturn['register'];
|
|
74
|
+
trigger: UseFormReturn['trigger'];
|
|
75
|
+
clearErrors: UseFormReturn['clearErrors'];
|
|
76
|
+
watch: UseFormReturn['watch'];
|
|
77
|
+
getFieldState: UseFormReturn['getFieldState'];
|
|
78
|
+
setValue: UseFormReturn['setValue'];
|
|
79
|
+
getValues: UseFormReturn['getValues'];
|
|
80
|
+
unregister: UseFormReturn['unregister'];
|
|
81
|
+
formState: UseFormReturn['formState'];
|
|
82
|
+
reset: UseFormReturn['reset'];
|
|
83
|
+
registerField: (field: FieldSpec) => void;
|
|
84
|
+
errors: UseFormReturn['formState']['errors'];
|
|
85
|
+
componentRegistry?: FieldComponentRegistry;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface FormBuilderProps {
|
|
89
|
+
fields?: FieldSpec[];
|
|
90
|
+
fieldsets?: FieldsetSpec[];
|
|
91
|
+
initial?: FormData;
|
|
92
|
+
onSubmit?: (data: FormData) => void | null | FieldError[];
|
|
93
|
+
mode?: UseFormProps['mode'];
|
|
94
|
+
reValidateMode?: UseFormProps['reValidateMode'];
|
|
95
|
+
criteriaMode?: UseFormProps['criteriaMode'];
|
|
96
|
+
children?: React.ReactNode;
|
|
97
|
+
shouldFocusError?: boolean;
|
|
98
|
+
auto?: boolean;
|
|
99
|
+
validatorRegistry?: Record<string, ValidatorSchema[]>;
|
|
100
|
+
componentRegistry?: FieldComponentRegistry;
|
|
101
|
+
grid?: boolean;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export interface FormBaseProps
|
|
105
|
+
extends Omit<FormBuilderProps, 'fields' | 'fieldsets' | 'auto'> {
|
|
106
|
+
fieldsetsMap?: Record<string, FieldsetSpec>;
|
|
107
|
+
fieldsMap: Record<string, FieldSpec>;
|
|
108
|
+
registerField: (field: FieldSpec) => void;
|
|
109
|
+
resolver: any;
|
|
110
|
+
}
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as Yup from 'yup';
|
|
2
|
+
import { validateFieldsNatively } from '@hookform/resolvers';
|
|
3
|
+
import { appendErrors, FieldError } from 'react-hook-form';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Why `path!` ? because it could be `undefined` in some case
|
|
7
|
+
* https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string
|
|
8
|
+
*/
|
|
9
|
+
const parseErrorSchema = (
|
|
10
|
+
error: Yup.ValidationError,
|
|
11
|
+
validateAllFieldCriteria: boolean
|
|
12
|
+
) => {
|
|
13
|
+
return (error.inner || []).reduce<Record<string, FieldError>>(
|
|
14
|
+
(previous, error) => {
|
|
15
|
+
error.path = error.path?.replace(/\[([0-9]+)\]/g, '.$1');
|
|
16
|
+
if (!previous[error.path!]) {
|
|
17
|
+
previous[error.path!] = { message: error.message, type: error.type! };
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (validateAllFieldCriteria) {
|
|
21
|
+
const types = previous[error.path!].types;
|
|
22
|
+
const messages = types && types[error.type!];
|
|
23
|
+
|
|
24
|
+
previous[error.path!] = appendErrors(
|
|
25
|
+
error.path!,
|
|
26
|
+
validateAllFieldCriteria,
|
|
27
|
+
previous,
|
|
28
|
+
error.type!,
|
|
29
|
+
messages
|
|
30
|
+
? ([] as string[]).concat(messages as string[], error.message)
|
|
31
|
+
: error.message
|
|
32
|
+
) as FieldError;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return previous;
|
|
36
|
+
},
|
|
37
|
+
{}
|
|
38
|
+
);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export const yupResolver = (
|
|
42
|
+
schema: any,
|
|
43
|
+
schemaOptions: any = {},
|
|
44
|
+
resolverOptions: any = {}
|
|
45
|
+
) => async (values, context, options) => {
|
|
46
|
+
try {
|
|
47
|
+
if (schemaOptions.context && process.env.NODE_ENV === 'development') {
|
|
48
|
+
// eslint-disable-next-line no-console
|
|
49
|
+
console.warn(
|
|
50
|
+
"You should not used the yup options context. Please, use the 'useForm' context object instead"
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const result = await schema[
|
|
55
|
+
resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'
|
|
56
|
+
](values, Object.assign({ abortEarly: false }, schemaOptions, { context }));
|
|
57
|
+
|
|
58
|
+
options.shouldUseNativeValidation && validateFieldsNatively({}, options);
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
values: resolverOptions.rawValues ? values : result,
|
|
62
|
+
errors: {},
|
|
63
|
+
};
|
|
64
|
+
} catch (e) {
|
|
65
|
+
if (!e.inner) {
|
|
66
|
+
throw e;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const parsed = parseErrorSchema(
|
|
70
|
+
e,
|
|
71
|
+
!options.shouldUseNativeValidation && options.criteriaMode === 'all'
|
|
72
|
+
);
|
|
73
|
+
return {
|
|
74
|
+
values: {},
|
|
75
|
+
errors: parsed,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
};
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import * as yup from 'yup';
|
|
2
|
+
import { FieldSpec } from '@digigov/form/types';
|
|
3
|
+
import { ValidatorSchema } from '@digigov/form/validators/types';
|
|
4
|
+
import { MutableRefObject, useMemo } from 'react';
|
|
5
|
+
import dayjs from 'dayjs';
|
|
6
|
+
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
7
|
+
import {
|
|
8
|
+
getYupObjectShape,
|
|
9
|
+
AFM_VALIDATOR,
|
|
10
|
+
FILE_MAX_SIZE_VALIDATOR,
|
|
11
|
+
IBAN_VALIDATOR,
|
|
12
|
+
MOBILE_PHONE_VALIDATOR,
|
|
13
|
+
PHONE_NUMBER_VALIDATOR,
|
|
14
|
+
POSTALCODE_VALIDATOR,
|
|
15
|
+
UUID4_VALIDATOR,
|
|
16
|
+
} from '@digigov/form/validators/utils';
|
|
17
|
+
import { MixedSchema } from 'yup/lib/mixed';
|
|
18
|
+
import { RequiredArraySchema } from 'yup/lib/array';
|
|
19
|
+
import { AnyObject } from 'yup/lib/types';
|
|
20
|
+
import Lazy from 'yup/lib/Lazy';
|
|
21
|
+
import { TypeOfShape, AssertsShape } from 'yup/lib/object';
|
|
22
|
+
import { AnyObjectSchema, StringSchema } from 'yup';
|
|
23
|
+
import { NUMBER_VALIDATOR } from '@digigov/form/validators/utils/number';
|
|
24
|
+
import { INT_VALIDATOR } from '@digigov/form/validators/utils/int';
|
|
25
|
+
dayjs.extend(customParseFormat);
|
|
26
|
+
|
|
27
|
+
const VALID_DATE_FORMATS = ['DD/MM/YYYY'];
|
|
28
|
+
const DATE_CACHE = {};
|
|
29
|
+
const getDate = (v) => {
|
|
30
|
+
return DATE_CACHE[v] ? DATE_CACHE[v] : dayjs(v, VALID_DATE_FORMATS, true);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export const getYUPTypeMap = (): Record<string, any> => {
|
|
34
|
+
const yupTypeMap = {
|
|
35
|
+
file: (field): MixedSchema => {
|
|
36
|
+
return yup
|
|
37
|
+
.mixed()
|
|
38
|
+
.transform((value) => {
|
|
39
|
+
if (!value.length) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
return value;
|
|
43
|
+
})
|
|
44
|
+
.nullable()
|
|
45
|
+
.test(FILE_MAX_SIZE_VALIDATOR(field));
|
|
46
|
+
},
|
|
47
|
+
string: yup.string,
|
|
48
|
+
text: yup.string,
|
|
49
|
+
boolean: yup.boolean,
|
|
50
|
+
object: (
|
|
51
|
+
field
|
|
52
|
+
):
|
|
53
|
+
| yup.ObjectSchema<any, AnyObject, TypeOfShape<any>, AssertsShape<any>>
|
|
54
|
+
| Lazy<any, unknown> => {
|
|
55
|
+
return getYupObjectShape(field.extra.fields, yupTypeMap);
|
|
56
|
+
},
|
|
57
|
+
array: (
|
|
58
|
+
field
|
|
59
|
+
):
|
|
60
|
+
| yup.ArraySchema<any, AnyObject, any[] | undefined>
|
|
61
|
+
| RequiredArraySchema<any, AnyObject, any[] | undefined> => {
|
|
62
|
+
if (typeof field.extra.of === 'object') {
|
|
63
|
+
// else if the field is an object then it is a scalar type
|
|
64
|
+
// eg. number, string etc.
|
|
65
|
+
let arrayValidator = yup
|
|
66
|
+
.array()
|
|
67
|
+
.of(yupTypeMap[field.extra.of.type](field.extra.of))
|
|
68
|
+
.required(field.required);
|
|
69
|
+
if (field.extra.length)
|
|
70
|
+
arrayValidator = arrayValidator.length(field.extra.length, {
|
|
71
|
+
key: 'form.error.array.length',
|
|
72
|
+
context: {
|
|
73
|
+
length: field.extra.length,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
if (field.extra.min)
|
|
77
|
+
arrayValidator = arrayValidator.min(field.extra.min, {
|
|
78
|
+
key: 'form.error.array.min',
|
|
79
|
+
context: {
|
|
80
|
+
min: field.extra.min,
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
if (field.extra.max)
|
|
84
|
+
arrayValidator = arrayValidator.max(field.extra.max, {
|
|
85
|
+
key: 'form.error.array.max',
|
|
86
|
+
context: {
|
|
87
|
+
max: field.extra.max,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
return arrayValidator;
|
|
91
|
+
} else if (typeof field.extra.of === 'string') {
|
|
92
|
+
return yup.array().of(yupTypeMap[field.extra.of]());
|
|
93
|
+
} else {
|
|
94
|
+
// in any other case it will be string
|
|
95
|
+
return yup.array().of(yup.string());
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
int: (): MixedSchema =>
|
|
99
|
+
yup
|
|
100
|
+
.mixed()
|
|
101
|
+
.transform((_, val) => (val !== '' ? Number(val) : null))
|
|
102
|
+
.test(NUMBER_VALIDATOR())
|
|
103
|
+
.test(INT_VALIDATOR()),
|
|
104
|
+
email: (): yup.StringSchema => yup.string().email('form.error.email'),
|
|
105
|
+
afm: (): yup.StringSchema => yup.string().test(AFM_VALIDATOR),
|
|
106
|
+
uuid4: (): yup.StringSchema => yup.string().test(UUID4_VALIDATOR),
|
|
107
|
+
iban: (field): yup.StringSchema => yup.string().test(IBAN_VALIDATOR(field)),
|
|
108
|
+
postal_code: (field): yup.StringSchema =>
|
|
109
|
+
yup.string().test(POSTALCODE_VALIDATOR(field)),
|
|
110
|
+
mobile_phone: (): yup.StringSchema =>
|
|
111
|
+
yup.string().test(MOBILE_PHONE_VALIDATOR),
|
|
112
|
+
phone_number: (field): yup.StringSchema =>
|
|
113
|
+
yup.string().test(PHONE_NUMBER_VALIDATOR(field)),
|
|
114
|
+
'choice:multiple': (): yup.ArraySchema<
|
|
115
|
+
yup.StringSchema<string | undefined, AnyObject, string | undefined>,
|
|
116
|
+
AnyObject,
|
|
117
|
+
(string | undefined)[] | null | undefined,
|
|
118
|
+
(string | undefined)[] | null | undefined
|
|
119
|
+
> => yup.array().of(yup.string()).nullable(),
|
|
120
|
+
'choice:single': (): StringSchema<
|
|
121
|
+
string | null | undefined,
|
|
122
|
+
AnyObject,
|
|
123
|
+
string | null | undefined
|
|
124
|
+
> => yup.string().nullable(),
|
|
125
|
+
date: (field) => {
|
|
126
|
+
let simpleDate = yup
|
|
127
|
+
.string()
|
|
128
|
+
.nullable(true)
|
|
129
|
+
.test('date', 'form.error.date.invalid', function (value) {
|
|
130
|
+
if (!value) return true;
|
|
131
|
+
const date = getDate(value);
|
|
132
|
+
return date.isValid();
|
|
133
|
+
});
|
|
134
|
+
const params = field.extra || {};
|
|
135
|
+
if (params.max) {
|
|
136
|
+
let maxDate;
|
|
137
|
+
if (params.max === 'now') {
|
|
138
|
+
const today = new Date();
|
|
139
|
+
maxDate = new Date(today);
|
|
140
|
+
} else {
|
|
141
|
+
maxDate = getDate(params.max).toDate();
|
|
142
|
+
}
|
|
143
|
+
const maxNextDate = new Date(maxDate);
|
|
144
|
+
maxNextDate.setDate(maxDate.getDate() + 1);
|
|
145
|
+
simpleDate = simpleDate.test({
|
|
146
|
+
name: 'earlier-than',
|
|
147
|
+
message: {
|
|
148
|
+
key: 'form.error.date.earlier_than',
|
|
149
|
+
context: {
|
|
150
|
+
maxDate: maxNextDate.toLocaleDateString(),
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
test: function (value) {
|
|
154
|
+
if (!value) return true;
|
|
155
|
+
const date = getDate(value);
|
|
156
|
+
const isValid = +date.toDate() < +maxDate;
|
|
157
|
+
return isValid;
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
if (params.min) {
|
|
162
|
+
let minDate;
|
|
163
|
+
if (params.min === 'now') {
|
|
164
|
+
const today = new Date();
|
|
165
|
+
minDate = new Date(today);
|
|
166
|
+
} else {
|
|
167
|
+
minDate = getDate(params.min).toDate();
|
|
168
|
+
}
|
|
169
|
+
const minPreviousDate = new Date(minDate);
|
|
170
|
+
minPreviousDate.setDate(minDate.getDate() - 1);
|
|
171
|
+
simpleDate = simpleDate.test({
|
|
172
|
+
name: 'later-than',
|
|
173
|
+
message: {
|
|
174
|
+
key: 'form.error.date.later_than',
|
|
175
|
+
context: {
|
|
176
|
+
minDate: minPreviousDate.toLocaleDateString(),
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
test: function (value) {
|
|
180
|
+
if (!value) return true;
|
|
181
|
+
const date = getDate(value);
|
|
182
|
+
const isValid = +date.toDate() > +minDate;
|
|
183
|
+
return isValid;
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
return simpleDate;
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
return yupTypeMap;
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
export interface MutableRefObjectProps {}
|
|
194
|
+
// Create a yup validation schema from given fields input
|
|
195
|
+
export function useValidationSchema(
|
|
196
|
+
fields: FieldSpec[] | MutableRefObject<MutableRefObjectProps>,
|
|
197
|
+
validatorRegistry?: Record<string, ValidatorSchema[]>
|
|
198
|
+
): Lazy<any, unknown> | AnyObjectSchema | void {
|
|
199
|
+
return useMemo(() => {
|
|
200
|
+
const yupTypeMap = getYUPTypeMap();
|
|
201
|
+
return getYupObjectShape(fields, yupTypeMap, validatorRegistry);
|
|
202
|
+
}, []);
|
|
203
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export function validateAFM(afm: string): boolean {
|
|
2
|
+
if (afm.length !== 9) {
|
|
3
|
+
// "afm should be 9 digits"
|
|
4
|
+
return false;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
if (!/^\d+$/.test(afm)) {
|
|
8
|
+
// "This is not a number"
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (afm === '0'.repeat(9)) {
|
|
13
|
+
// "This is zero number (000000000)"
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const sum = afm
|
|
18
|
+
.substring(0, 8)
|
|
19
|
+
.split('')
|
|
20
|
+
.reduce((s, v, i) => s + (parseInt(v) << (8 - i)), 0);
|
|
21
|
+
|
|
22
|
+
const calc = sum % 11;
|
|
23
|
+
const d9 = parseInt(afm[8]);
|
|
24
|
+
const valid = calc % 10 === d9;
|
|
25
|
+
return valid;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const AFM_VALIDATOR = {
|
|
29
|
+
name: 'afm-validator',
|
|
30
|
+
message: 'form.error.afm',
|
|
31
|
+
test: (value): boolean => {
|
|
32
|
+
if (value) {
|
|
33
|
+
return validateAFM(value);
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
36
|
+
},
|
|
37
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ValidatorSchema } from '@digigov/form/validators/types';
|
|
2
|
+
import { FieldSpec } from '@digigov/form/types';
|
|
3
|
+
|
|
4
|
+
const DEFAULT_FILE_MAX_SIZE = 10000000;
|
|
5
|
+
|
|
6
|
+
export const FILE_MAX_SIZE_VALIDATOR = (field: FieldSpec): ValidatorSchema => ({
|
|
7
|
+
name: 'file-max-size-validator',
|
|
8
|
+
message: 'form.error.file_size',
|
|
9
|
+
test: (value: File[]): boolean => {
|
|
10
|
+
if (field.extra && field.extra.maxSize && value) {
|
|
11
|
+
for (const file of value) {
|
|
12
|
+
if (file.size >= field.extra.maxSize) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
} else if (value) {
|
|
17
|
+
for (const file of value) {
|
|
18
|
+
if (file.size >= DEFAULT_FILE_MAX_SIZE) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return true;
|
|
24
|
+
},
|
|
25
|
+
});
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { FieldSpec } from '@digigov/form/types';
|
|
2
|
+
import { ValidatorSchema } from '@digigov/form/validators/types';
|
|
3
|
+
export function validateIban(value: string, countryCode: string): boolean {
|
|
4
|
+
value = value.replace(/\s/g, '').replace(/-/g, '');
|
|
5
|
+
if (value.match(/^[0-9]*$/i)) {
|
|
6
|
+
// this is for greek iban without the country code
|
|
7
|
+
if (value.length !== 25) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
} else {
|
|
11
|
+
value = value.toUpperCase();
|
|
12
|
+
if (countryCode) {
|
|
13
|
+
if (!value.startsWith(countryCode.toUpperCase())) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
if (value.length === ibanCountryCodesLengths[countryCode.toUpperCase()]) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (value.length !== 27) {
|
|
21
|
+
// this is for greek iban
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const IBAN_VALIDATOR = (field: FieldSpec): ValidatorSchema => {
|
|
29
|
+
const countryCode = field?.extra?.country;
|
|
30
|
+
return {
|
|
31
|
+
name: 'iban-validator',
|
|
32
|
+
message: 'form.error.iban',
|
|
33
|
+
test: (value: string): boolean => {
|
|
34
|
+
if (!value) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return validateIban(value, countryCode);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const ibanCountryCodesLengths = {
|
|
43
|
+
AD: 24,
|
|
44
|
+
AT: 20,
|
|
45
|
+
AZ: 28,
|
|
46
|
+
BH: 22,
|
|
47
|
+
BY: 28,
|
|
48
|
+
BE: 16,
|
|
49
|
+
BA: 20,
|
|
50
|
+
BR: 29,
|
|
51
|
+
BG: 22,
|
|
52
|
+
CR: 22,
|
|
53
|
+
HR: 21,
|
|
54
|
+
CY: 28,
|
|
55
|
+
CZ: 24,
|
|
56
|
+
DK: 18,
|
|
57
|
+
DO: 28,
|
|
58
|
+
EG: 29,
|
|
59
|
+
SV: 28,
|
|
60
|
+
EE: 20,
|
|
61
|
+
FO: 18,
|
|
62
|
+
FI: 18,
|
|
63
|
+
FR: 27,
|
|
64
|
+
GE: 22,
|
|
65
|
+
DE: 22,
|
|
66
|
+
GI: 23,
|
|
67
|
+
GR: 27,
|
|
68
|
+
GL: 18,
|
|
69
|
+
GT: 28,
|
|
70
|
+
VA: 22,
|
|
71
|
+
HU: 28,
|
|
72
|
+
IS: 26,
|
|
73
|
+
IQ: 23,
|
|
74
|
+
IE: 22,
|
|
75
|
+
IL: 23,
|
|
76
|
+
IT: 27,
|
|
77
|
+
JO: 30,
|
|
78
|
+
KZ: 20,
|
|
79
|
+
XK: 20,
|
|
80
|
+
KW: 30,
|
|
81
|
+
LV: 21,
|
|
82
|
+
LB: 28,
|
|
83
|
+
LI: 21,
|
|
84
|
+
LT: 20,
|
|
85
|
+
LU: 20,
|
|
86
|
+
MT: 31,
|
|
87
|
+
MR: 27,
|
|
88
|
+
MU: 30,
|
|
89
|
+
MD: 24,
|
|
90
|
+
MC: 27,
|
|
91
|
+
ME: 22,
|
|
92
|
+
NL: 18,
|
|
93
|
+
MK: 19,
|
|
94
|
+
NO: 15,
|
|
95
|
+
PK: 24,
|
|
96
|
+
PS: 29,
|
|
97
|
+
PL: 28,
|
|
98
|
+
PT: 25,
|
|
99
|
+
QA: 29,
|
|
100
|
+
RO: 24,
|
|
101
|
+
LC: 32,
|
|
102
|
+
SM: 27,
|
|
103
|
+
ST: 25,
|
|
104
|
+
SA: 24,
|
|
105
|
+
RS: 22,
|
|
106
|
+
SC: 31,
|
|
107
|
+
SK: 24,
|
|
108
|
+
SI: 19,
|
|
109
|
+
ES: 24,
|
|
110
|
+
SE: 24,
|
|
111
|
+
CH: 21,
|
|
112
|
+
TL: 23,
|
|
113
|
+
TN: 24,
|
|
114
|
+
TR: 26,
|
|
115
|
+
UA: 29,
|
|
116
|
+
AE: 23,
|
|
117
|
+
GB: 22,
|
|
118
|
+
VG: 24,
|
|
119
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import * as yup from 'yup';
|
|
2
|
+
import { FieldSpec } from '@digigov/form/types';
|
|
3
|
+
import { ValidatorSchema } from '@digigov/form/validators/types';
|
|
4
|
+
|
|
5
|
+
export * from '@digigov/form/validators/utils/afm';
|
|
6
|
+
export * from '@digigov/form/validators/utils/file';
|
|
7
|
+
export * from '@digigov/form/validators/utils/iban';
|
|
8
|
+
export * from '@digigov/form/validators/utils/phone';
|
|
9
|
+
export * from '@digigov/form/validators/utils/postal_code';
|
|
10
|
+
export * from '@digigov/form/validators/utils/uuid4';
|
|
11
|
+
|
|
12
|
+
export function getYupField(field: FieldSpec, yupTypeMap: Record<string, any>) {
|
|
13
|
+
const yupField = yupTypeMap[field?.type || 'string'] || yupTypeMap['string'];
|
|
14
|
+
return yupField(field);
|
|
15
|
+
}
|
|
16
|
+
export function computeShape(
|
|
17
|
+
fields: FieldSpec[],
|
|
18
|
+
yupTypeMap: Record<string, ValidatorSchema>,
|
|
19
|
+
validatorRegistry: Record<string, ValidatorSchema[]> | undefined
|
|
20
|
+
) {
|
|
21
|
+
const fieldSchemas = {};
|
|
22
|
+
const objectFields: Record<string, FieldSpec[]> = {};
|
|
23
|
+
fields.forEach((field) => {
|
|
24
|
+
let yupField = getYupField(field, yupTypeMap);
|
|
25
|
+
if (field.condition) {
|
|
26
|
+
for (const key in field.condition) {
|
|
27
|
+
let then: any, otherwise: any;
|
|
28
|
+
if (field.condition[key].then) {
|
|
29
|
+
if (field.condition[key].then?.required === false) {
|
|
30
|
+
then = yupField;
|
|
31
|
+
} else if (field.condition[key].then?.required === true) {
|
|
32
|
+
then = yupField.required('form.error.required');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (field.condition[key].else) {
|
|
36
|
+
if (field.condition[key].else?.required === false) {
|
|
37
|
+
otherwise = yupField;
|
|
38
|
+
} else if (field.condition[key].else?.required === true) {
|
|
39
|
+
otherwise = yupField.required('form.error.required');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (then || otherwise) {
|
|
43
|
+
yupField = yupField.when(key, {
|
|
44
|
+
is: field.condition[key].is,
|
|
45
|
+
then,
|
|
46
|
+
otherwise,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
} else if (field.required) {
|
|
51
|
+
yupField = yupField.required('form.error.required');
|
|
52
|
+
}
|
|
53
|
+
if (validatorRegistry && field.type && validatorRegistry[field.type]) {
|
|
54
|
+
validatorRegistry[field.type].forEach((validator: any) => {
|
|
55
|
+
yupField = yupField.test(validator);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
if (field.validators) {
|
|
59
|
+
field.validators.forEach((validator) => {
|
|
60
|
+
yupField = yupField.test(validator);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
fieldSchemas[field.key] = yupField;
|
|
64
|
+
});
|
|
65
|
+
for (const objectKey in objectFields) {
|
|
66
|
+
fieldSchemas[objectKey] = getYupObjectShape(
|
|
67
|
+
objectFields[objectKey],
|
|
68
|
+
yupTypeMap,
|
|
69
|
+
validatorRegistry
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
return fieldSchemas;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function getYupObjectShape(
|
|
76
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
77
|
+
fields: FieldSpec[] | any,
|
|
78
|
+
yupTypeMap: Record<string, any>,
|
|
79
|
+
validatorRegistry?: Record<string, ValidatorSchema[]>
|
|
80
|
+
) {
|
|
81
|
+
if (!fields.current) {
|
|
82
|
+
const fieldSchemas = computeShape(fields, yupTypeMap, validatorRegistry);
|
|
83
|
+
return yup.object().shape(fieldSchemas);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return yup.lazy(function () {
|
|
87
|
+
const fieldSchemas = computeShape(
|
|
88
|
+
Object.values(fields.current),
|
|
89
|
+
yupTypeMap,
|
|
90
|
+
validatorRegistry
|
|
91
|
+
);
|
|
92
|
+
return yup.object().shape(fieldSchemas);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ValidatorSchema } from '@digigov/form/validators/types';
|
|
2
|
+
|
|
3
|
+
export function validateIntNumber(number: number): boolean {
|
|
4
|
+
if (number === undefined) {
|
|
5
|
+
return false;
|
|
6
|
+
} else {
|
|
7
|
+
return Number.isInteger(number) && Number(number) > 0;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const INT_VALIDATOR = (): ValidatorSchema => {
|
|
12
|
+
return {
|
|
13
|
+
name: 'int-validator',
|
|
14
|
+
message: 'form.error.positive_integer_number',
|
|
15
|
+
test: (value: number): boolean => {
|
|
16
|
+
if (value === null) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
return validateIntNumber(value);
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
};
|