@cnamts/synapse 1.0.22 → 1.0.24
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/dist/AutocompleteFilter-BWLR3U7W.js +114 -0
- package/dist/AutocompleteFilter-D9jzRzAL.cjs +1 -0
- package/dist/{DateFilter-B5n-ZkLi.js → DateFilter-BpwFexzi.js} +1 -1
- package/dist/DateFilter-DTUl8hb1.cjs +1 -0
- package/dist/{NumberFilter-CtiZ9uj8.js → NumberFilter-Bz_NTdX9.js} +3 -3
- package/dist/NumberFilter-MAEojdk0.cjs +1 -0
- package/dist/PeriodFilter-CC4WgIhl.cjs +1 -0
- package/dist/{PeriodFilter-DzqiMb-b.js → PeriodFilter-DX_wy9g-.js} +1 -1
- package/dist/SelectFilter-BR3fvl-a.cjs +1 -0
- package/dist/SelectFilter-xqiPtPgX.js +135 -0
- package/dist/{TextFilter-BOFRNfcX.js → TextFilter-BBl3JFqK.js} +7 -7
- package/dist/TextFilter-CCfYFl5F.cjs +1 -0
- package/dist/apLightTheme-CFSRrjv2.cjs +1 -0
- package/dist/apLightTheme-D1P4jcD0.js +1231 -0
- package/dist/components/Accordion/Accordion.d.ts +13 -2
- package/dist/components/Accordion/composables/useAccordionState.d.ts +2 -1
- package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7022 -9616
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +2 -2
- package/dist/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +2 -2
- package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +40 -40
- package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +61 -61
- package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +7168 -9762
- package/dist/components/Amelipro/AmeliproStepper/AmeliproStepper.d.ts +2 -2
- package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +7506 -10100
- package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +22 -22
- package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +42 -42
- package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +2 -2
- package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +20 -498
- package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +130 -147
- package/dist/components/Customs/Selects/SyAutocomplete/locales.d.ts +5 -0
- package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +6 -6
- package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +13 -17
- package/dist/components/Customs/Selects/SySelect/locales.d.ts +1 -0
- package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +9 -9
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +29 -507
- package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +29 -507
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +64 -81
- package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +640 -780
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +322 -407
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +114 -156
- package/dist/components/DatePicker/composables/index.d.ts +1 -0
- package/dist/components/DatePicker/composables/useDatePickerFocusTrap.d.ts +11 -0
- package/dist/components/DatePicker/composables/useDateTextField.d.ts +4 -4
- package/dist/components/DatePicker/composables/useDateValidation.d.ts +3 -3
- package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
- package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +2 -2
- package/dist/components/ErrorPage/ErrorPage.d.ts +3 -1
- package/dist/components/FileList/UploadItem/UploadItem.d.ts +6 -0
- package/dist/components/FileList/UploadItem/locales.d.ts +1 -4
- package/dist/components/FileUpload/FileUploadContent.d.ts +2 -0
- package/dist/components/FileUpload/validateFiles.d.ts +2 -1
- package/dist/components/HeaderBar/HeaderBar.d.ts +2 -1
- package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +2 -1
- package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +6 -5
- package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +20 -28
- package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +3 -3
- package/dist/components/MonthPicker/MonthPicker.d.ts +1903 -0
- package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +1863 -0
- package/dist/components/MonthPicker/MonthPickerText/useTextField.d.ts +21 -0
- package/dist/components/MonthPicker/MonthPickerVisual/MonthPickerVisual.d.ts +21 -0
- package/dist/components/MonthPicker/MonthPickerVisual/MonthPickerVisualProps.d.ts +12 -0
- package/dist/components/MonthPicker/MonthPickerVisual/MonthSelector.d.ts +11 -0
- package/dist/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.d.ts +6 -0
- package/dist/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.d.ts +14 -0
- package/dist/components/MonthPicker/MonthPickerVisual/YearSelector.d.ts +14 -0
- package/dist/components/MonthPicker/MonthPickerVisual/useMonthGrid.d.ts +9 -0
- package/dist/components/MonthPicker/MonthPickerVisual/useYearGrid.d.ts +8 -0
- package/dist/components/MonthPicker/MonthPickerVisual/utils.d.ts +8 -0
- package/dist/components/MonthPicker/locales.d.ts +12 -0
- package/dist/components/MonthPicker/useMonthPickerValidation.d.ts +25 -0
- package/dist/components/NirField/NirField.d.ts +209 -271
- package/dist/components/NirField/locales.d.ts +10 -10
- package/dist/components/NirField/useNirValidation.d.ts +64 -0
- package/dist/components/NotificationBar/Notification/Notification.d.ts +3 -0
- package/dist/components/PasswordField/PasswordField.d.ts +9 -10
- package/dist/components/PeriodField/PeriodField.d.ts +1379 -1659
- package/dist/components/PhoneField/PhoneField.d.ts +90 -125
- package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +12 -12
- package/dist/components/SyBtnMenu/SyBtnMenu.d.ts +1 -1
- package/dist/components/SyHeading/SyHeading.a11y.test.d.ts +1 -0
- package/dist/components/SyHeading/SyHeading.d.ts +4 -2
- package/dist/components/SyHeading/SyHeading.test.d.ts +1 -0
- package/dist/components/SyTextArea/SyTextArea.d.ts +35 -15
- package/dist/components/SyTextArea/useDefaultValidationRules.d.ts +11 -0
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +11 -8
- package/dist/components/Tables/SyTable/SyTable.d.ts +11 -8
- package/dist/components/Tables/common/SyTableFilter.d.ts +2 -3
- package/dist/components/Tables/common/SyTablePagination.d.ts +21 -23
- package/dist/components/Tables/common/filters/AutocompleteFilter.d.ts +120 -0
- package/dist/components/Tables/common/filters/locales.d.ts +0 -1
- package/dist/components/Tables/common/types.d.ts +19 -3
- package/dist/components/Tables/common/useClickableTableRow.d.ts +17 -0
- package/dist/components/Tables/common/usePagination.d.ts +3 -1
- package/dist/components/Tables/common/usePinnedColumns.d.ts +31 -0
- package/dist/components/Tables/common/useTableHeaders.d.ts +2 -0
- package/dist/components/Tables/common/useTableRowCheckboxAccessibility.d.ts +5 -0
- package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +6 -6
- package/dist/components/index.d.ts +1 -0
- package/dist/composables/date/useDatePickerAccessibility.d.ts +1 -1
- package/dist/composables/rules/useFieldValidation.d.ts +4 -4
- package/dist/composables/unifyValidation/useCustomValidation.d.ts +8 -0
- package/dist/composables/unifyValidation/useValidation.d.ts +102 -0
- package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +18 -0
- package/dist/composables/useFormFieldErrorHandling.d.ts +2 -2
- package/dist/composables/validation/useFormValidation.d.ts +11 -2
- package/dist/composables/validation/useValidation.d.ts +15 -9
- package/dist/design-system-v3.d.ts +2 -0
- package/dist/design-system-v3.js +196 -194
- package/dist/design-system-v3.umd.cjs +1 -1066
- package/dist/designTokens/tokens/cnam/cnamContextual.d.ts +5 -0
- package/dist/{main-CEl4J8_T.js → main-BtTqyn4z.js} +16983 -15576
- package/dist/main-C1e3eoxd.cjs +1067 -0
- package/dist/synapse.css +1 -0
- package/dist/tooth-11-D3sLWv2n.cjs +1 -0
- package/dist/tooth-12-CXrLuH03.cjs +1 -0
- package/dist/tooth-13-BSfo5fpT.cjs +1 -0
- package/dist/tooth-14-DMzulx0h.cjs +1 -0
- package/dist/tooth-15-BKRFVi-9.cjs +1 -0
- package/dist/tooth-16-CpuxAbuM.cjs +1 -0
- package/dist/tooth-17-BPoahUdg.cjs +1 -0
- package/dist/tooth-18-DhHJz8sy.cjs +1 -0
- package/dist/tooth-21-Dgd5hn_X.cjs +1 -0
- package/dist/tooth-22-C2Tn19sB.cjs +1 -0
- package/dist/tooth-23-C9uaaSGb.cjs +1 -0
- package/dist/tooth-24-BrK9UGpf.cjs +1 -0
- package/dist/tooth-25-CE_EfGNp.cjs +1 -0
- package/dist/tooth-26-Ctv4i9Fy.cjs +1 -0
- package/dist/tooth-27-C5J7JkWM.cjs +1 -0
- package/dist/tooth-28-Z9oWqjo0.cjs +1 -0
- package/dist/tooth-31-BrYqmkTi.cjs +1 -0
- package/dist/tooth-32-BNNR0oCZ.cjs +1 -0
- package/dist/tooth-33-DuxvqO2J.cjs +1 -0
- package/dist/tooth-34-BCSCXMB6.cjs +1 -0
- package/dist/tooth-35-BLUXkX88.cjs +1 -0
- package/dist/tooth-36-IrKHYqlA.cjs +1 -0
- package/dist/tooth-37-BYqpdMwo.cjs +1 -0
- package/dist/tooth-38-B_eNXXdu.cjs +1 -0
- package/dist/tooth-41-Ddva4Ot8.cjs +1 -0
- package/dist/tooth-42-szcDqlM0.cjs +1 -0
- package/dist/tooth-43-B3ka6rQm.cjs +1 -0
- package/dist/tooth-44-CazyQucj.cjs +1 -0
- package/dist/tooth-45-B4HQtc8n.cjs +1 -0
- package/dist/tooth-46-BPM40gbG.cjs +1 -0
- package/dist/tooth-47-Dvr20dlh.cjs +1 -0
- package/dist/tooth-48-Bd8ljGsF.cjs +1 -0
- package/dist/tooth-51-OBpwCOF3.cjs +1 -0
- package/dist/tooth-52-aKxyHcmq.cjs +1 -0
- package/dist/tooth-53-vCwJjTOc.cjs +1 -0
- package/dist/tooth-54-DsWu2iFy.cjs +1 -0
- package/dist/tooth-55-BxC1X2Dn.cjs +1 -0
- package/dist/tooth-61-BbLvxMQi.cjs +1 -0
- package/dist/tooth-62-CmTkWczP.cjs +1 -0
- package/dist/tooth-63-DI7l_2qI.cjs +1 -0
- package/dist/tooth-64-B21sOsJh.cjs +1 -0
- package/dist/tooth-65-D2ZC2VEr.cjs +1 -0
- package/dist/tooth-71-D473PPO5.cjs +1 -0
- package/dist/tooth-72-Drh1wnNu.cjs +1 -0
- package/dist/tooth-73-DzlwYI23.cjs +1 -0
- package/dist/tooth-74-8aGvcZPg.cjs +1 -0
- package/dist/tooth-75-BFK7At_r.cjs +1 -0
- package/dist/tooth-81-BZmR-I0M.cjs +1 -0
- package/dist/tooth-82-euVfUUZV.cjs +1 -0
- package/dist/tooth-83-KV010j64.cjs +1 -0
- package/dist/tooth-84-BBg1RjhZ.cjs +1 -0
- package/dist/tooth-85-Cr-kc1wM.cjs +1 -0
- package/dist/vuetifyConfig.js +561 -0
- package/dist/vuetifyConfig.umd.cjs +1 -0
- package/package.json +18 -6
- package/src/assets/apTokens.scss +2 -2
- package/src/assets/overrides/_btns.scss +2 -0
- package/src/assets/overrides/_forms.scss +9 -0
- package/src/assets/overrides/_icons.scss +41 -4
- package/src/assets/overrides/_tables.scss +19 -0
- package/src/assets/overrides/_typography.scss +0 -10
- package/src/components/Accordion/Accordion.mdx +23 -9
- package/src/components/Accordion/Accordion.stories.ts +153 -3
- package/src/components/Accordion/Accordion.vue +7 -6
- package/src/components/Accordion/composables/__tests__/useAccordionState.spec.ts +40 -12
- package/src/components/Accordion/composables/useAccordionState.ts +3 -4
- package/src/components/Accordion/tests/accordion.spec.ts +131 -19
- package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +2 -2
- package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +1 -1
- package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.mdx +3 -1
- package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.stories.ts +8 -0
- package/src/components/Amelipro/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +2 -2
- package/src/components/BackBtn/accessibilite/Accessibility.mdx +62 -10
- package/src/components/BackToTopBtn/BackToTopBtn.stories.ts +9 -3
- package/src/components/BackToTopBtn/accessibilite/Accessibility.mdx +86 -6
- package/src/components/Captcha/accessibilite/Accessibility.mdx +86 -8
- package/src/components/Captcha/tests/Captcha.spec.ts +0 -29
- package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +14 -122
- package/src/components/ChipList/ChipList.stories.ts +0 -15
- package/src/components/ChipList/ChipList.vue +5 -1
- package/src/components/ChipList/accessibilite/Accessibility.mdx +83 -10
- package/src/components/ChipList/tests/ChipList.a11y.spec.ts +41 -0
- package/src/components/Customs/Selects/SelectBtnField/accessibilite/Accessibility.mdx +124 -10
- package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +379 -93
- package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +162 -84
- package/src/components/Customs/Selects/SyAutocomplete/accessibilite/Accessibilite.stories.ts +40 -1
- package/src/components/Customs/Selects/SyAutocomplete/accessibilite/Accessibility.mdx +7 -1
- package/src/components/Customs/Selects/SyAutocomplete/locales.ts +5 -0
- package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +96 -0
- package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +377 -9
- package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +27 -13
- package/src/components/Customs/Selects/SyAutocomplete/utils/useSelectionLogic.ts +9 -10
- package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -4
- package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +8 -9
- package/src/components/Customs/Selects/SyInputSelect/tests/SyInputSelect.spec.ts +10 -10
- package/src/components/Customs/Selects/SySelect/SySelect.vue +60 -14
- package/src/components/Customs/Selects/SySelect/locales.ts +1 -0
- package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +54 -0
- package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +6 -9
- package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +10 -16
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +16 -11
- package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +35 -0
- package/src/components/Customs/SyCheckbox/tests/SyCheckbox.a11y.spec.ts +134 -2
- package/src/components/Customs/SyForm/SyForm.stories.ts +31 -5
- package/src/components/Customs/SyIcon/SyIcon.vue +1 -1
- package/src/components/Customs/SyIcon/tests/SyIcon.a11y.spec.ts +20 -0
- package/src/components/Customs/SyIconButton/SyIconButton.mdx +46 -0
- package/src/components/Customs/SyIconButton/SyIconButton.stories.ts +184 -0
- package/src/components/Customs/SyIconButton/SyIconButton.vue +38 -0
- package/src/components/Customs/SyIconButton/accessibilite/Accessibility.mdx +64 -0
- package/src/components/Customs/SyIconButton/tests/SyIconButton.a11y.spec.ts +87 -0
- package/src/components/Customs/SyIconButton/tests/SyIconButton.spec.ts +152 -0
- package/src/components/Customs/SyIconButton/tests/__snapshots__/SyIconButton.spec.ts.snap +61 -0
- package/src/components/Customs/SyPagination/SyPagination.vue +5 -5
- package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +4 -7
- package/src/components/Customs/SyTextField/SyTextField.mdx +1 -1
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +29 -27
- package/src/components/Customs/SyTextField/SyTextField.vue +174 -159
- package/src/components/Customs/SyTextField/accessibilite/Accessibility.mdx +67 -9
- package/src/components/Customs/SyTextField/tests/SyTextField.a11y.spec.ts +47 -0
- package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +155 -10
- package/src/components/DataList/accessibilite/Accessibility.mdx +79 -11
- package/src/components/DataListGroup/accessibilite/Accessibility.mdx +80 -11
- package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +62 -58
- package/src/components/DatePicker/CalendarMode/DatePicker.vue +330 -223
- package/src/components/DatePicker/CalendarMode/accessibilite/Accessibility.mdx +82 -0
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +141 -0
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +2 -56
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +195 -159
- package/src/components/DatePicker/ComplexDatePicker/accessibilite/Accessibility.mdx +76 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +10 -10
- package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +8 -8
- package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +106 -8
- package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +12 -11
- package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +12 -12
- package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +0 -12
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +63 -57
- package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +3 -0
- package/src/components/DatePicker/DateTextInput/accessibilite/Accessibility.mdx +66 -0
- package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +52 -1
- package/src/components/DatePicker/composables/index.ts +1 -0
- package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +109 -65
- package/src/components/DatePicker/composables/tests/useDatePickerFocusTrap.spec.ts +138 -0
- package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +74 -18
- package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +39 -0
- package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +91 -0
- package/src/components/DatePicker/composables/useCalendarKeyboardNavigation.ts +442 -36
- package/src/components/DatePicker/composables/useDatePickerFocusTrap.ts +92 -0
- package/src/components/DatePicker/composables/useDateTextField.ts +7 -6
- package/src/components/DatePicker/composables/useDateValidation.ts +36 -35
- package/src/components/DatePicker/composables/useInputBlurHandler.ts +3 -3
- package/src/components/DatePicker/composables/useManualDateValidation.ts +6 -2
- package/src/components/DiacriticPicker/accessibilite/Accessibility.mdx +76 -8
- package/src/components/DownloadBtn/tests/DownloadBtn.a11y.spec.ts +25 -0
- package/src/components/ErrorPage/ErrorPage.stories.ts +113 -19
- package/src/components/ErrorPage/ErrorPage.vue +17 -2
- package/src/components/ErrorPage/tests/ErrorPage.a11y.spec.ts +17 -0
- package/src/components/ErrorPage/tests/ErrorPage.spec.ts +21 -1
- package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +0 -1
- package/src/components/ExternalLinks/tests/ExternalLinks.a11y.spec.ts +23 -0
- package/src/components/FileList/FileList.stories.ts +51 -1
- package/src/components/FileList/UploadItem/UploadItem.vue +13 -6
- package/src/components/FileList/UploadItem/locales.ts +3 -12
- package/src/components/FileList/accessibilite/Accessibility.mdx +3 -0
- package/src/components/FileUpload/FileUpload.vue +2 -1
- package/src/components/FileUpload/FileUploadContent.vue +2 -1
- package/src/components/FileUpload/tests/FileUpload.spec.ts +47 -0
- package/src/components/FileUpload/validateFiles.ts +5 -2
- package/src/components/FranceConnectBtn/accessibilite/Accessibility.mdx +62 -9
- package/src/components/HeaderBar/HeaderBar.stories.ts +14 -2
- package/src/components/HeaderBar/HeaderBar.vue +2 -1
- package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +2 -1
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +2 -1
- package/src/components/Logo/accessibilite/Accessibility.mdx +73 -11
- package/src/components/LogoBrandSection/accessibilite/Accessibility.mdx +85 -9
- package/src/components/LunarCalendar/accessibilite/Accessibility.mdx +74 -8
- package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +163 -0
- package/src/components/LunarCalendar/tests/LunarCalendar.spec.ts +3 -1
- package/src/components/LunarCalendar/useLunarCalendarValidation.ts +4 -5
- package/src/components/MaintenancePage/MaintenancePage.vue +1 -1
- package/src/components/MaintenancePage/tests/MaintenancePage.spec.ts +4 -5
- package/src/components/MaintenancePage/tests/__snapshots__/MaintenancePage.spec.ts.snap +0 -1
- package/src/components/MonthPicker/MonthPicker.mdx +35 -0
- package/src/components/MonthPicker/MonthPicker.stories.ts +527 -0
- package/src/components/MonthPicker/MonthPicker.vue +79 -0
- package/src/components/MonthPicker/MonthPickerText/MonthPickerInput.vue +89 -0
- package/src/components/MonthPicker/MonthPickerText/useTextField.ts +27 -0
- package/src/components/MonthPicker/MonthPickerVisual/MonthPickerVisual.vue +154 -0
- package/src/components/MonthPicker/MonthPickerVisual/MonthPickerVisualProps.ts +13 -0
- package/src/components/MonthPicker/MonthPickerVisual/MonthSelector.vue +137 -0
- package/src/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.vue +60 -0
- package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +149 -0
- package/src/components/MonthPicker/MonthPickerVisual/YearSelector.vue +143 -0
- package/src/components/MonthPicker/MonthPickerVisual/useMonthGrid.ts +45 -0
- package/src/components/MonthPicker/MonthPickerVisual/useYearGrid.ts +45 -0
- package/src/components/MonthPicker/MonthPickerVisual/utils.ts +17 -0
- package/src/components/MonthPicker/accessibilite/Accessibility.mdx +59 -0
- package/src/components/MonthPicker/locales.ts +12 -0
- package/src/components/MonthPicker/tests/MonthPicker.a11y.spec.ts +71 -0
- package/src/components/MonthPicker/tests/MonthPicker.spec.ts +1249 -0
- package/src/components/MonthPicker/tests/__snapshots__/MonthPicker.spec.ts.snap +2545 -0
- package/src/components/MonthPicker/useMonthPickerValidation.ts +30 -0
- package/src/components/NirField/NirField.mdx +1 -2
- package/src/components/NirField/NirField.stories.ts +70 -6
- package/src/components/NirField/NirField.vue +64 -260
- package/src/components/NirField/accessibilite/Accessibility.mdx +2 -2
- package/src/components/NirField/locales.ts +1 -1
- package/src/components/NirField/tests/NirField.spec.ts +6 -0
- package/src/components/NirField/useNirValidation.ts +271 -0
- package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +2 -3
- package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +22 -14
- package/src/components/NotificationBar/Notification/Notification.vue +3 -1
- package/src/components/NotificationBar/NotificationBar.stories.ts +154 -0
- package/src/components/NotificationBar/tests/NotificationBar.a11y.spec.ts +26 -0
- package/src/components/NotificationBar/tests/NotificationBar.spec.ts +60 -0
- package/src/components/PasswordField/PasswordField.stories.ts +4 -4
- package/src/components/PasswordField/PasswordField.vue +18 -24
- package/src/components/PasswordField/tests/PasswordField.spec.ts +6 -3
- package/src/components/PeriodField/PeriodField.stories.ts +4 -4
- package/src/components/PeriodField/PeriodField.vue +57 -57
- package/src/components/PeriodField/__tests__/PeriodField.async.spec.ts +32 -0
- package/src/components/PeriodField/accessibilite/Accessibility.mdx +68 -8
- package/src/components/PeriodField/tests/PeriodField.spec.ts +28 -2
- package/src/components/PhoneField/PhoneField.vue +5 -6
- package/src/components/PhoneField/tests/PhoneField.spec.ts +1 -0
- package/src/components/RangeField/RangeField.vue +6 -0
- package/src/components/RangeField/accessibilite/Accessibility.mdx +79 -11
- package/src/components/SkipLink/tests/SkipLink.a11y.spec.ts +23 -0
- package/src/components/StatusPage/StatusPage.stories.ts +118 -0
- package/src/components/StatusPage/StatusPage.vue +5 -3
- package/src/components/StatusPage/tests/StatusPage.a11y.spec.ts +22 -0
- package/src/components/StatusPage/tests/StatusPage.spec.ts +22 -0
- package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +22 -14
- package/src/components/SubHeader/tests/SubHeader.a11y.spec.ts +20 -0
- package/src/components/SyAlert/SyAlert.vue +1 -0
- package/src/components/SyAlert/accessibilite/Accessibility.mdx +79 -9
- package/src/components/SyAlert/tests/SyAlert.a11y.spec.ts +23 -0
- package/src/components/SyHeading/SyHeading.a11y.test.ts +149 -0
- package/src/components/SyHeading/SyHeading.test.ts +115 -0
- package/src/components/SyHeading/SyHeading.vue +5 -3
- package/src/components/SyTextArea/SyTextArea.stories.ts +138 -2
- package/src/components/SyTextArea/SyTextArea.vue +53 -23
- package/src/components/SyTextArea/accessibilite/Accessibility.mdx +80 -8
- package/src/components/SyTextArea/tests/SyTextArea.a11y.spec.ts +151 -0
- package/src/components/SyTextArea/tests/SyTextArea.spec.ts +126 -3
- package/src/components/SyTextArea/useDefaultValidationRules.ts +74 -0
- package/src/components/Tables/SyServerTable/SyServerTable.mdx +25 -0
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +673 -1
- package/src/components/Tables/SyServerTable/SyServerTable.vue +148 -91
- package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +58 -0
- package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +122 -0
- package/src/components/Tables/SyTable/SyTable.mdx +25 -0
- package/src/components/Tables/SyTable/SyTable.stories.ts +452 -1
- package/src/components/Tables/SyTable/SyTable.vue +130 -56
- package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +57 -0
- package/src/components/Tables/SyTable/tests/SyTable.spec.ts +108 -0
- package/src/components/Tables/common/SyTableFilter.vue +22 -2
- package/src/components/Tables/common/TableHeader.vue +5 -1
- package/src/components/Tables/common/filters/AutocompleteFilter.vue +160 -0
- package/src/components/Tables/common/filters/NumberFilter.vue +1 -1
- package/src/components/Tables/common/filters/SelectFilter.vue +10 -11
- package/src/components/Tables/common/filters/TextFilter.vue +1 -1
- package/src/components/Tables/common/filters/getFilterComponent.ts +8 -1
- package/src/components/Tables/common/filters/locales.ts +0 -1
- package/src/components/Tables/common/filters/tests/AutocompleteFilter.a11y.spec.ts +110 -0
- package/src/components/Tables/common/filters/tests/AutocompleteFilter.spec.ts +203 -0
- package/src/components/Tables/common/filters/tests/SelectFilter.a11y.spec.ts +104 -0
- package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +152 -16
- package/src/components/Tables/common/tableFilterUtils.ts +3 -0
- package/src/components/Tables/common/tableStyles.scss +48 -4
- package/src/components/Tables/common/tests/filterByRange.spec.ts +2 -1
- package/src/components/Tables/common/types.ts +13 -4
- package/src/components/Tables/common/useClickableTableRow.ts +103 -0
- package/src/components/Tables/common/usePagination.ts +13 -0
- package/src/components/Tables/common/usePinnedColumns.ts +237 -0
- package/src/components/Tables/common/useTableHeaders.ts +3 -3
- package/src/components/Tables/common/useTableRowCheckboxAccessibility.ts +41 -0
- package/src/components/ToolbarContainer/tests/ToolbarContainer.a11y.spec.ts +126 -0
- package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +2 -2
- package/src/components/index.ts +1 -0
- package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +2 -6
- package/src/composables/date/useDatePickerAccessibility.ts +42 -207
- package/src/composables/rules/tests/useFieldValidation.spec.ts +120 -120
- package/src/composables/rules/useFieldValidation.ts +34 -17
- package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +601 -0
- package/src/composables/unifyValidation/tests/useValidation.spec.ts +2048 -0
- package/src/composables/unifyValidation/tests/useVuetifyValidation.spec.ts +184 -0
- package/src/composables/unifyValidation/useCustomValidation.ts +95 -0
- package/src/composables/unifyValidation/useValidation.ts +190 -0
- package/src/composables/unifyValidation/useVuetifyValidation.ts +54 -0
- package/src/composables/useFormFieldErrorHandling.ts +15 -9
- package/src/composables/validation/tests/useFormValidation.spec.ts +14 -0
- package/src/composables/validation/tests/useValidation.spec.ts +116 -21
- package/src/composables/validation/useFormValidation.ts +20 -13
- package/src/composables/validation/useValidatable.ts +8 -1
- package/src/composables/validation/useValidation.ts +135 -99
- package/src/composantsVuetify/Introduction.mdx +48 -0
- package/src/composantsVuetify/VBtn/VBtn.mdx +72 -0
- package/src/composantsVuetify/VBtn/v-btn.stories.ts +121 -0
- package/src/composantsVuetify/VTooltip/VTooltip.mdx +32 -0
- package/src/composantsVuetify/VTooltip/v-tooltip.stories.ts +95 -0
- package/src/designTokens/tokens/cnam/cnamContextual.ts +6 -1
- package/src/designTokens/tokens/cnam/cnamSemantic.ts +2 -2
- package/src/stories/Components/Components.stories.ts +74 -9
- package/src/stories/Demarrer/Accueil.stories.ts +3 -3
- package/src/stories/GuideDuDev/Amelipro.mdx +15 -0
- package/src/stories/GuideDuDev/Amelipro.stories.ts +209 -0
- package/src/stories/GuideDuDev/vuetifyOptions.mdx +3 -3
- package/dist/SelectFilter-BOYlF7rX.js +0 -136
- package/dist/style.css +0 -1
- package/src/components/DatePicker/Accessibilite.mdx +0 -14
|
@@ -52,8 +52,8 @@ export const Required: StoryObj = {
|
|
|
52
52
|
const datePicker1 = ref()
|
|
53
53
|
const date1 = ref('')
|
|
54
54
|
|
|
55
|
-
const handleSubmit = () => {
|
|
56
|
-
const isValid1 = datePicker1.value?.validateOnSubmit()
|
|
55
|
+
const handleSubmit = async () => {
|
|
56
|
+
const isValid1 = await datePicker1.value?.validateOnSubmit()
|
|
57
57
|
|
|
58
58
|
if (!isValid1) {
|
|
59
59
|
alert('Corrigez les erreurs avant de soumettre !')
|
|
@@ -72,8 +72,8 @@ export const Required: StoryObj = {
|
|
|
72
72
|
const datePicker1 = ref()
|
|
73
73
|
const date1 = ref(null)
|
|
74
74
|
|
|
75
|
-
const handleSubmit = () => {
|
|
76
|
-
const isValid1 = datePicker1.value?.validateOnSubmit()
|
|
75
|
+
const handleSubmit = async () => {
|
|
76
|
+
const isValid1 = await datePicker1.value?.validateOnSubmit()
|
|
77
77
|
|
|
78
78
|
if (!isValid1) {
|
|
79
79
|
alert('Corrigez les erreurs avant de soumettre !')
|
|
@@ -114,6 +114,104 @@ export const Required: StoryObj = {
|
|
|
114
114
|
}),
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
+
export const NotRequired: StoryObj = {
|
|
118
|
+
parameters: {
|
|
119
|
+
sourceCode: [
|
|
120
|
+
{
|
|
121
|
+
name: 'Template',
|
|
122
|
+
code: `
|
|
123
|
+
<template>
|
|
124
|
+
<v-form @submit.prevent="handleSubmit">
|
|
125
|
+
<div style="display: flex; flex-direction: column; gap: 16px;">
|
|
126
|
+
<div>
|
|
127
|
+
<h3 class="mb-4">Avec calendrier</h3>
|
|
128
|
+
<DatePicker
|
|
129
|
+
ref="datePicker1"
|
|
130
|
+
v-model="date1"
|
|
131
|
+
format="DD/MM/YYYY"
|
|
132
|
+
placeholder="Date requise"
|
|
133
|
+
useCombinedMode
|
|
134
|
+
/>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
<button type="submit" style="margin-top: 16px; padding: 8px 16px; background-color:#0c419a; color: white; border: none; border-radius: 4px; cursor: pointer;">
|
|
138
|
+
Soumettre
|
|
139
|
+
</button>
|
|
140
|
+
</v-form>
|
|
141
|
+
</template>
|
|
142
|
+
`,
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
name: 'Script',
|
|
146
|
+
code: `
|
|
147
|
+
<script setup lang="ts">
|
|
148
|
+
import { ref } from 'vue'
|
|
149
|
+
import { DatePicker } from '@cnamts/synapse'
|
|
150
|
+
|
|
151
|
+
const datePicker1 = ref()
|
|
152
|
+
const date1 = ref('')
|
|
153
|
+
|
|
154
|
+
const handleSubmit = async () => {
|
|
155
|
+
const isValid1 = await datePicker1.value?.validateOnSubmit()
|
|
156
|
+
|
|
157
|
+
if (!isValid1) {
|
|
158
|
+
alert('Corrigez les erreurs avant de soumettre !')
|
|
159
|
+
} else {
|
|
160
|
+
alert('Formulaire soumis avec succès !')
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
</script>
|
|
164
|
+
`,
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
},
|
|
168
|
+
render: () => ({
|
|
169
|
+
components: { DatePicker },
|
|
170
|
+
setup() {
|
|
171
|
+
const datePicker1 = ref()
|
|
172
|
+
const date1 = ref(null)
|
|
173
|
+
|
|
174
|
+
const handleSubmit = async () => {
|
|
175
|
+
const isValid1 = await datePicker1.value?.validateOnSubmit()
|
|
176
|
+
|
|
177
|
+
if (!isValid1) {
|
|
178
|
+
alert('Corrigez les erreurs avant de soumettre !')
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
alert('Formulaire soumis avec succès !')
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return {
|
|
186
|
+
datePicker1,
|
|
187
|
+
date1,
|
|
188
|
+
handleSubmit,
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
template: `
|
|
192
|
+
<div class="d-flex flex-wrap align-center pa-4">
|
|
193
|
+
<form @submit.prevent="handleSubmit" style="width: 100%;">
|
|
194
|
+
<div style="display: flex; flex-direction: column; gap: 16px;">
|
|
195
|
+
<div>
|
|
196
|
+
<DatePicker
|
|
197
|
+
ref="datePicker1"
|
|
198
|
+
v-model="date1"
|
|
199
|
+
format="DD/MM/YYYY"
|
|
200
|
+
placeholder="Date requise"
|
|
201
|
+
useCombinedMode
|
|
202
|
+
:is-validate-on-blur="false"
|
|
203
|
+
/>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
<button type="submit" style="margin-top: 16px; padding: 8px 16px; background-color:#0c419a; color: white; border: none; border-radius: 4px; cursor: pointer;">
|
|
207
|
+
Soumettre
|
|
208
|
+
</button>
|
|
209
|
+
</form>
|
|
210
|
+
</div>
|
|
211
|
+
`,
|
|
212
|
+
}),
|
|
213
|
+
}
|
|
214
|
+
|
|
117
215
|
export const WithCustomRulesAndRequired: StoryObj = {
|
|
118
216
|
parameters: {
|
|
119
217
|
sourceCode: [
|
|
@@ -154,8 +252,8 @@ export const WithCustomRulesAndRequired: StoryObj = {
|
|
|
154
252
|
const datePicker1 = ref()
|
|
155
253
|
const date1 = ref('01/01/2100')
|
|
156
254
|
|
|
157
|
-
const handleSubmit = () => {
|
|
158
|
-
const isValid1 = datePicker1.value?.validateOnSubmit()
|
|
255
|
+
const handleSubmit = async () => {
|
|
256
|
+
const isValid1 = await datePicker1.value?.validateOnSubmit()
|
|
159
257
|
|
|
160
258
|
if (!isValid1) {
|
|
161
259
|
alert('Corrigez les erreurs avant de soumettre !')
|
|
@@ -174,8 +272,8 @@ export const WithCustomRulesAndRequired: StoryObj = {
|
|
|
174
272
|
const datePicker1 = ref()
|
|
175
273
|
const date1 = ref('01/01/2100')
|
|
176
274
|
|
|
177
|
-
const handleSubmit = () => {
|
|
178
|
-
const isValid1 = datePicker1.value?.validateOnSubmit()
|
|
275
|
+
const handleSubmit = async () => {
|
|
276
|
+
const isValid1 = await datePicker1.value?.validateOnSubmit()
|
|
179
277
|
|
|
180
278
|
if (!isValid1) {
|
|
181
279
|
alert('Corrigez les erreurs avant de soumettre !')
|
|
@@ -52,8 +52,8 @@ export const Required: StoryObj = {
|
|
|
52
52
|
const datePicker1 = ref()
|
|
53
53
|
const date1 = ref('')
|
|
54
54
|
|
|
55
|
-
const handleSubmit = () => {
|
|
56
|
-
const isValid1 = datePicker1.value?.validateOnSubmit()
|
|
55
|
+
const handleSubmit = async () => {
|
|
56
|
+
const isValid1 = await datePicker1.value?.validateOnSubmit()
|
|
57
57
|
|
|
58
58
|
if (!isValid1) {
|
|
59
59
|
alert('Corrigez les erreurs avant de soumettre !')
|
|
@@ -72,8 +72,8 @@ export const Required: StoryObj = {
|
|
|
72
72
|
const datePicker1 = ref()
|
|
73
73
|
const date1 = ref('')
|
|
74
74
|
|
|
75
|
-
const handleSubmit = () => {
|
|
76
|
-
const isValid1 = datePicker1.value?.validateOnSubmit()
|
|
75
|
+
const handleSubmit = async () => {
|
|
76
|
+
const isValid1 = await datePicker1.value?.validateOnSubmit()
|
|
77
77
|
if (!isValid1) {
|
|
78
78
|
alert('Corrigez les erreurs avant de soumettre !')
|
|
79
79
|
}
|
|
@@ -131,7 +131,7 @@ export const WithCustomRulesAndRequired: StoryObj = {
|
|
|
131
131
|
placeholder="Date requise"
|
|
132
132
|
noCalendar
|
|
133
133
|
:customRules="[
|
|
134
|
-
{ type: 'notAfterToday', options: { message: 'La date ne peut pas être après aujourd'hui' } },
|
|
134
|
+
{ type: 'notAfterToday', options: { message: 'La date ne peut pas être après aujourd\\'hui' } },
|
|
135
135
|
]"
|
|
136
136
|
/>
|
|
137
137
|
</div>
|
|
@@ -153,8 +153,8 @@ export const WithCustomRulesAndRequired: StoryObj = {
|
|
|
153
153
|
const datePicker1 = ref()
|
|
154
154
|
const date1 = ref('01/01/2100')
|
|
155
155
|
|
|
156
|
-
const handleSubmit = () => {
|
|
157
|
-
const isValid1 = datePicker1.value?.validateOnSubmit()
|
|
156
|
+
const handleSubmit = async (): Promise<void> => {
|
|
157
|
+
const isValid1 = await datePicker1.value?.validateOnSubmit()
|
|
158
158
|
|
|
159
159
|
if (!isValid1) {
|
|
160
160
|
alert('Corrigez les erreurs avant de soumettre !')
|
|
@@ -170,11 +170,11 @@ export const WithCustomRulesAndRequired: StoryObj = {
|
|
|
170
170
|
render: () => ({
|
|
171
171
|
components: { DatePicker },
|
|
172
172
|
setup() {
|
|
173
|
-
const datePicker1 = ref()
|
|
173
|
+
const datePicker1 = ref<typeof DatePicker>()
|
|
174
174
|
const date1 = ref('01/01/2100')
|
|
175
175
|
|
|
176
|
-
const handleSubmit = () => {
|
|
177
|
-
const isValid1 = datePicker1.value?.validateOnSubmit()
|
|
176
|
+
const handleSubmit = async (): Promise<void> => {
|
|
177
|
+
const isValid1 = await datePicker1.value?.validateOnSubmit()
|
|
178
178
|
|
|
179
179
|
if (!isValid1) {
|
|
180
180
|
alert('Corrigez les erreurs avant de soumettre !')
|
|
@@ -197,13 +197,14 @@ export const WithCustomRulesAndRequired: StoryObj = {
|
|
|
197
197
|
<div>
|
|
198
198
|
<DatePicker
|
|
199
199
|
ref="datePicker1"
|
|
200
|
+
label="Date"
|
|
200
201
|
v-model="date1"
|
|
201
202
|
required
|
|
202
203
|
format="DD/MM/YYYY"
|
|
203
204
|
placeholder="Date requise"
|
|
204
205
|
noCalendar
|
|
205
206
|
:custom-rules="[
|
|
206
|
-
{ type: 'notAfterToday', options: { message: 'La date ne peut pas être après
|
|
207
|
+
{ type: 'notAfterToday', options: { message: 'La date ne peut pas être après aujourd\\'hui' } },
|
|
207
208
|
]"
|
|
208
209
|
/>
|
|
209
210
|
</div>
|
|
@@ -63,9 +63,9 @@ export const Required: StoryObj = {
|
|
|
63
63
|
const datePicker2 = ref()
|
|
64
64
|
const date2 = ref('')
|
|
65
65
|
|
|
66
|
-
const handleSubmit = () => {
|
|
67
|
-
const isValid1 = datePicker1.value?.validateOnSubmit()
|
|
68
|
-
const isValid2 = datePicker2.value?.validateOnSubmit()
|
|
66
|
+
const handleSubmit = async () => {
|
|
67
|
+
const isValid1 = await datePicker1.value?.validateOnSubmit()
|
|
68
|
+
const isValid2 = await datePicker2.value?.validateOnSubmit()
|
|
69
69
|
|
|
70
70
|
if (!isValid1 || !isValid2) {
|
|
71
71
|
alert('Corrigez les erreurs avant de soumettre !')
|
|
@@ -87,9 +87,9 @@ export const Required: StoryObj = {
|
|
|
87
87
|
const datePicker2 = ref()
|
|
88
88
|
const date2 = ref('')
|
|
89
89
|
|
|
90
|
-
const handleSubmit = () => {
|
|
91
|
-
const isValid1 = datePicker1.value?.validateOnSubmit()
|
|
92
|
-
const isValid2 = datePicker2.value?.validateOnSubmit()
|
|
90
|
+
const handleSubmit = async () => {
|
|
91
|
+
const isValid1 = await datePicker1.value?.validateOnSubmit()
|
|
92
|
+
const isValid2 = await datePicker2.value?.validateOnSubmit()
|
|
93
93
|
|
|
94
94
|
if (!isValid1 || !isValid2) {
|
|
95
95
|
alert('Corrigez les erreurs avant de soumettre !')
|
|
@@ -197,9 +197,9 @@ export const WithCustomRulesAndRequired: StoryObj = {
|
|
|
197
197
|
const datePicker2 = ref()
|
|
198
198
|
const date2 = ref('01/01/2100')
|
|
199
199
|
|
|
200
|
-
const handleSubmit = () => {
|
|
201
|
-
const isValid1 = datePicker1.value?.validateOnSubmit()
|
|
202
|
-
const isValid2 = datePicker2.value?.validateOnSubmit()
|
|
200
|
+
const handleSubmit = async (): Promise<void> => {
|
|
201
|
+
const isValid1 = await datePicker1.value?.validateOnSubmit()
|
|
202
|
+
const isValid2 = await datePicker2.value?.validateOnSubmit()
|
|
203
203
|
|
|
204
204
|
if (!isValid1 || !isValid2) {
|
|
205
205
|
alert('Corrigez les erreurs avant de soumettre !')
|
|
@@ -221,9 +221,9 @@ export const WithCustomRulesAndRequired: StoryObj = {
|
|
|
221
221
|
const datePicker2 = ref()
|
|
222
222
|
const date2 = ref('01/01/2100')
|
|
223
223
|
|
|
224
|
-
const handleSubmit = () => {
|
|
225
|
-
const isValid1 = datePicker1.value?.validateOnSubmit()
|
|
226
|
-
const isValid2 = datePicker2.value?.validateOnSubmit()
|
|
224
|
+
const handleSubmit = async (): Promise<void> => {
|
|
225
|
+
const isValid1 = await datePicker1.value?.validateOnSubmit()
|
|
226
|
+
const isValid2 = await datePicker2.value?.validateOnSubmit()
|
|
227
227
|
|
|
228
228
|
if (!isValid1 || !isValid2) {
|
|
229
229
|
alert('Corrigez les erreurs avant de soumettre !')
|
|
@@ -180,9 +180,6 @@ type Story = StoryObj<typeof meta>
|
|
|
180
180
|
|
|
181
181
|
export const Default: Story = {
|
|
182
182
|
parameters: {
|
|
183
|
-
a11y: {
|
|
184
|
-
disable: true,
|
|
185
|
-
},
|
|
186
183
|
sourceCode: [
|
|
187
184
|
{
|
|
188
185
|
name: 'Template',
|
|
@@ -240,9 +237,6 @@ export const Default: Story = {
|
|
|
240
237
|
|
|
241
238
|
export const WithInitialValue: Story = {
|
|
242
239
|
parameters: {
|
|
243
|
-
a11y: {
|
|
244
|
-
disable: true,
|
|
245
|
-
},
|
|
246
240
|
sourceCode: [
|
|
247
241
|
{
|
|
248
242
|
name: 'Template',
|
|
@@ -299,9 +293,6 @@ export const WithInitialValue: Story = {
|
|
|
299
293
|
|
|
300
294
|
export const WithCustomFormat: Story = {
|
|
301
295
|
parameters: {
|
|
302
|
-
a11y: {
|
|
303
|
-
disable: true,
|
|
304
|
-
},
|
|
305
296
|
sourceCode: [
|
|
306
297
|
{
|
|
307
298
|
name: 'Template',
|
|
@@ -356,9 +347,6 @@ export const WithCustomFormat: Story = {
|
|
|
356
347
|
|
|
357
348
|
export const WithValidation: Story = {
|
|
358
349
|
parameters: {
|
|
359
|
-
a11y: {
|
|
360
|
-
disable: true,
|
|
361
|
-
},
|
|
362
350
|
sourceCode: [
|
|
363
351
|
{
|
|
364
352
|
name: 'Template',
|
|
@@ -21,64 +21,59 @@
|
|
|
21
21
|
|
|
22
22
|
dayjs.extend(customParseFormat)
|
|
23
23
|
|
|
24
|
-
/**
|
|
25
|
-
* =====================
|
|
26
|
-
* Props / Emits
|
|
27
|
-
* =====================
|
|
28
|
-
*/
|
|
29
24
|
const props = withDefaults(defineProps<{
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
autoClamp?: boolean
|
|
26
|
+
bgColor?: string
|
|
27
|
+
customRules?: ValidationRule[]
|
|
28
|
+
customWarningRules?: ValidationRule[]
|
|
33
29
|
dateFormatReturn?: string
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
density?: 'default' | 'comfortable' | 'compact'
|
|
31
|
+
disableErrorHandling?: boolean
|
|
36
32
|
disabled?: boolean
|
|
37
|
-
readonly?: boolean
|
|
38
|
-
title?: string | false
|
|
39
|
-
isOutlined?: boolean
|
|
40
|
-
displayIcon?: boolean
|
|
41
33
|
displayAppendIcon?: boolean
|
|
42
|
-
|
|
43
|
-
customRules?: ValidationRule[]
|
|
44
|
-
customWarningRules?: ValidationRule[]
|
|
34
|
+
displayIcon?: boolean
|
|
45
35
|
displayPrependIcon?: boolean
|
|
46
|
-
disableErrorHandling?: boolean
|
|
47
|
-
showSuccessMessages?: boolean
|
|
48
|
-
bgColor?: string
|
|
49
36
|
displayRange?: boolean
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
density?: 'default' | 'comfortable' | 'compact'
|
|
37
|
+
externalErrorMessages?: string[]
|
|
38
|
+
format?: string
|
|
53
39
|
hint?: string
|
|
40
|
+
isOutlined?: boolean
|
|
41
|
+
isValidateOnBlur?: boolean
|
|
42
|
+
label: string
|
|
43
|
+
modelValue?: DateValue
|
|
44
|
+
noIcon?: boolean
|
|
54
45
|
persistentHint?: boolean
|
|
55
|
-
|
|
46
|
+
placeholder?: string
|
|
47
|
+
readonly?: boolean
|
|
48
|
+
required?: boolean
|
|
49
|
+
showSuccessMessages?: boolean
|
|
50
|
+
title?: string | false
|
|
56
51
|
}>(), {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
52
|
+
autoClamp: true,
|
|
53
|
+
bgColor: 'white',
|
|
54
|
+
customRules: () => [],
|
|
55
|
+
customWarningRules: () => [],
|
|
60
56
|
dateFormatReturn: undefined,
|
|
61
|
-
|
|
57
|
+
density: 'default',
|
|
58
|
+
disableErrorHandling: false,
|
|
62
59
|
disabled: false,
|
|
63
|
-
readonly: false,
|
|
64
|
-
title: false,
|
|
65
|
-
isOutlined: true,
|
|
66
|
-
displayIcon: true,
|
|
67
60
|
displayAppendIcon: false,
|
|
68
|
-
|
|
69
|
-
customRules: () => [],
|
|
70
|
-
customWarningRules: () => [],
|
|
61
|
+
displayIcon: true,
|
|
71
62
|
displayPrependIcon: true,
|
|
72
|
-
disableErrorHandling: false,
|
|
73
|
-
showSuccessMessages: true,
|
|
74
|
-
bgColor: 'white',
|
|
75
63
|
displayRange: false,
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
density: 'default',
|
|
64
|
+
externalErrorMessages: () => [],
|
|
65
|
+
format: DATE_PICKER_MESSAGES.FORMAT_DEFAULT,
|
|
79
66
|
hint: undefined,
|
|
67
|
+
isOutlined: true,
|
|
68
|
+
isValidateOnBlur: true,
|
|
69
|
+
modelValue: undefined,
|
|
70
|
+
noIcon: false,
|
|
80
71
|
persistentHint: false,
|
|
81
|
-
|
|
72
|
+
placeholder: undefined,
|
|
73
|
+
readonly: false,
|
|
74
|
+
required: false,
|
|
75
|
+
showSuccessMessages: true,
|
|
76
|
+
title: false,
|
|
82
77
|
})
|
|
83
78
|
|
|
84
79
|
const emit = defineEmits<{
|
|
@@ -149,11 +144,11 @@
|
|
|
149
144
|
|
|
150
145
|
const clearValidation = () => validationApi.value.clearValidation()
|
|
151
146
|
|
|
152
|
-
const validateField = (
|
|
147
|
+
const validateField = async (
|
|
153
148
|
value: unknown,
|
|
154
149
|
rules?: ValidationRule[],
|
|
155
150
|
warningRules?: ValidationRule[],
|
|
156
|
-
): ValidationResult => validationApi.value.validateField(value, rules, warningRules)
|
|
151
|
+
): Promise<ValidationResult> => await validationApi.value.validateField(value, rules, warningRules)
|
|
157
152
|
|
|
158
153
|
// Agrégation des erreurs internes et externes
|
|
159
154
|
const errorMessages = computed(() => [...errors.value, ...props.externalErrorMessages])
|
|
@@ -163,15 +158,15 @@
|
|
|
163
158
|
/**
|
|
164
159
|
* Safe validate utility
|
|
165
160
|
*/
|
|
166
|
-
const safeValidateField = (
|
|
161
|
+
const safeValidateField = async (
|
|
167
162
|
value: unknown,
|
|
168
163
|
rules?: ValidationRule[],
|
|
169
164
|
warningRules?: ValidationRule[],
|
|
170
|
-
): ValidationResult => {
|
|
165
|
+
): Promise<ValidationResult> => {
|
|
171
166
|
if (readonly.value) {
|
|
172
167
|
return { hasError: false, hasWarning: false, hasSuccess: false, state: { errors: [], warnings: [], successes: [] } }
|
|
173
168
|
}
|
|
174
|
-
return validateField(value, rules, warningRules) ?? { hasError: false, hasWarning: false, hasSuccess: false, state: { errors: [], warnings: [], successes: [] } }
|
|
169
|
+
return await validateField(value, rules, warningRules) ?? { hasError: false, hasWarning: false, hasSuccess: false, state: { errors: [], warnings: [], successes: [] } }
|
|
175
170
|
}
|
|
176
171
|
|
|
177
172
|
/**
|
|
@@ -200,7 +195,7 @@
|
|
|
200
195
|
const isUpdatingFromInternal = ref(false)
|
|
201
196
|
const isFocused = ref(false)
|
|
202
197
|
const hasInteracted = ref(false)
|
|
203
|
-
const ariaLabel = ref(
|
|
198
|
+
const ariaLabel = ref(props.label || props.placeholder || DATE_PICKER_MESSAGES.LABEL_DEFAULT)
|
|
204
199
|
|
|
205
200
|
const { validateDateFormat: _validateDateFormat } = useDateFormatValidation({
|
|
206
201
|
format: displayFormat.value,
|
|
@@ -231,7 +226,9 @@
|
|
|
231
226
|
const isValidating = ref(false)
|
|
232
227
|
|
|
233
228
|
const updateDisplayValue = (dateDisplayText: string) => (inputValue.value = dateDisplayText)
|
|
234
|
-
const updateAriaLabel = (ariaLabelText: string) =>
|
|
229
|
+
const updateAriaLabel = (ariaLabelText: string) => {
|
|
230
|
+
ariaLabel.value = ariaLabelText || props.label || props.placeholder || DATE_PICKER_MESSAGES.LABEL_DEFAULT
|
|
231
|
+
}
|
|
235
232
|
|
|
236
233
|
const { formatDateInput, handlePaste: handlePasteSingle, isHandlingBackspace } = useDateInputEditing({
|
|
237
234
|
format: displayFormat.value,
|
|
@@ -583,9 +580,18 @@
|
|
|
583
580
|
emit('update:model-value', val)
|
|
584
581
|
}
|
|
585
582
|
|
|
586
|
-
function runRules(value: string): boolean {
|
|
583
|
+
async function runRules(value: string): Promise<boolean> {
|
|
587
584
|
clearValidation()
|
|
588
|
-
|
|
585
|
+
|
|
586
|
+
// Vérifier si la valeur est vide ou est un squelette (ex: "__//____" pour DD/MM/YYYY)
|
|
587
|
+
// Un squelette ne contient que des underscores, des espaces et les séparateurs du format
|
|
588
|
+
const formatSeparators = props.format.replace(/[A-Za-z]/g, '')
|
|
589
|
+
// Créer un pattern qui autorise uniquement underscores, espaces et séparateurs du format
|
|
590
|
+
const allowedChars = ['_', ' ', ...new Set(formatSeparators.split(''))].map(char => char.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('')
|
|
591
|
+
const skeletonPattern = new RegExp(`^[${allowedChars}]+$`)
|
|
592
|
+
const isEmptyOrSkeleton = !value || value.trim() === '' || skeletonPattern.test(value)
|
|
593
|
+
|
|
594
|
+
if (isEmptyOrSkeleton) {
|
|
589
595
|
if (required.value && hasInteracted.value && !readonly.value && !props.disableErrorHandling) {
|
|
590
596
|
errors.value.push(DATE_PICKER_MESSAGES.ERROR_REQUIRED)
|
|
591
597
|
return false
|
|
@@ -602,7 +608,7 @@
|
|
|
602
608
|
|
|
603
609
|
if (isRange.value && value.includes(' - ')) {
|
|
604
610
|
const [startDateText, endDateText] = value.split(' - ')
|
|
605
|
-
if (startDateText && !endDateText) return !!validateManualInput(startDateText)
|
|
611
|
+
if (startDateText && !endDateText) return !!(await validateManualInput(startDateText))
|
|
606
612
|
|
|
607
613
|
if (startDateText && endDateText) {
|
|
608
614
|
const formatValidationResult = validateDateFormatForSingleOrRange(value)
|
|
@@ -618,14 +624,14 @@
|
|
|
618
624
|
errors.value.push(DATE_PICKER_MESSAGES.ERROR_END_BEFORE_START)
|
|
619
625
|
return false
|
|
620
626
|
}
|
|
621
|
-
safeValidateField(startDate, computed(() => props.customRules).value, computed(() => props.customWarningRules).value)
|
|
622
|
-
if (errors.value.length === 0) safeValidateField(endDate, computed(() => props.customRules).value, computed(() => props.customWarningRules).value)
|
|
627
|
+
await safeValidateField(startDate, computed(() => props.customRules).value, computed(() => props.customWarningRules).value)
|
|
628
|
+
if (errors.value.length === 0) await safeValidateField(endDate, computed(() => props.customRules).value, computed(() => props.customWarningRules).value)
|
|
623
629
|
}
|
|
624
630
|
}
|
|
625
631
|
return !hasError.value
|
|
626
632
|
}
|
|
627
633
|
|
|
628
|
-
return !!validateManualInput(value)
|
|
634
|
+
return !!(await validateManualInput(value))
|
|
629
635
|
}
|
|
630
636
|
|
|
631
637
|
/**
|
|
@@ -660,7 +666,7 @@
|
|
|
660
666
|
emit('focus')
|
|
661
667
|
}
|
|
662
668
|
|
|
663
|
-
function onBlur() {
|
|
669
|
+
async function onBlur() {
|
|
664
670
|
isFocused.value = false
|
|
665
671
|
hasInteracted.value = true
|
|
666
672
|
|
|
@@ -678,7 +684,7 @@
|
|
|
678
684
|
|
|
679
685
|
if (inputValue.value) {
|
|
680
686
|
const formatValidationResult = validateDateFormatForSingleOrRange(inputValue.value)
|
|
681
|
-
const customRulesValidationResult = safeValidateField(inputValue.value, computed(() => props.customRules).value, computed(() => props.customWarningRules).value)
|
|
687
|
+
const customRulesValidationResult = await safeValidateField(inputValue.value, computed(() => props.customRules).value, computed(() => props.customWarningRules).value)
|
|
682
688
|
|
|
683
689
|
if (formatValidationResult.isValid && !customRulesValidationResult.hasError && !isRange.value) {
|
|
684
690
|
const parsedDate = dayjs(inputValue.value, displayFormat.value, true).toDate()
|
|
@@ -683,6 +683,7 @@ export const WithErrorDisabled: Story = {
|
|
|
683
683
|
v-model="date1"
|
|
684
684
|
format="DD/MM/YYYY"
|
|
685
685
|
placeholder="Date requise sans erreur"
|
|
686
|
+
label="Date requise sans erreur"
|
|
686
687
|
required
|
|
687
688
|
no-icon
|
|
688
689
|
no-calendar
|
|
@@ -695,6 +696,7 @@ export const WithErrorDisabled: Story = {
|
|
|
695
696
|
v-model="date2"
|
|
696
697
|
format="DD/MM/YYYY"
|
|
697
698
|
placeholder="Date requise avec erreur"
|
|
699
|
+
label="Date requise avec erreur"
|
|
698
700
|
required
|
|
699
701
|
no-icon
|
|
700
702
|
no-calendar
|
|
@@ -745,6 +747,7 @@ export const WithErrorDisabled: Story = {
|
|
|
745
747
|
v-model="date2"
|
|
746
748
|
format="DD/MM/YYYY"
|
|
747
749
|
placeholder="Date requise avec erreur"
|
|
750
|
+
label="Date requise avec erreur"
|
|
748
751
|
required
|
|
749
752
|
no-icon
|
|
750
753
|
no-calendar
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Meta, Story } from '@storybook/addon-docs'
|
|
2
|
+
import * as Stories from '../NoCalendar.stories.ts'
|
|
3
|
+
import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg'
|
|
4
|
+
import '@/stories/styles/shared.css'
|
|
5
|
+
import {
|
|
6
|
+
AccessibilityGuideLayout,
|
|
7
|
+
CriteriaSection,
|
|
8
|
+
CriteriaCard,
|
|
9
|
+
DemoSection,
|
|
10
|
+
BestPracticesSection,
|
|
11
|
+
ResourcesSection,
|
|
12
|
+
} from '@/stories/accessibility/AccessibilityGuideLayout.mdx'
|
|
13
|
+
|
|
14
|
+
<Meta of={Stories} />
|
|
15
|
+
|
|
16
|
+
<AccessibilityGuideLayout
|
|
17
|
+
componentName="DateTextInput (saisie manuelle)"
|
|
18
|
+
iconSrc={AccessibilityIcon}
|
|
19
|
+
>
|
|
20
|
+
<CriteriaSection>
|
|
21
|
+
<CriteriaCard title="Structure sémantique" icon="🔍">
|
|
22
|
+
<ul>
|
|
23
|
+
<li><strong>Rôle</strong> : input type="text" (role implicite <code>textbox</code>), <code>aria-required</code> synchronisé quand <code>required</code>.</li>
|
|
24
|
+
<li><strong>Association</strong> : label natif ou <code>aria-label</code> / <code>aria-labelledby</code> pour les champs sans libellé visible (libellé calculé dynamiquement selon label/placeholder).</li>
|
|
25
|
+
<li><strong>Descriptions</strong> : <code>aria-describedby</code> relie aides contextuelles/hints et messages d’erreur/succès/avertissements.</li>
|
|
26
|
+
<li><strong>États</strong> : <code>aria-invalid</code>, <code>aria-disabled</code>, <code>aria-readonly</code> et zones de messages reflètent la validation et les props.</li>
|
|
27
|
+
</ul>
|
|
28
|
+
</CriteriaCard>
|
|
29
|
+
|
|
30
|
+
<CriteriaCard title="Saisie et clavier" icon="⌨️">
|
|
31
|
+
<ul>
|
|
32
|
+
<li><strong>Tab</strong> : entrée et sortie du champ sans piège de focus (pas de panneau).</li>
|
|
33
|
+
<li><strong>Masque léger</strong> : l’option <code>autoClamp</code> ajoute les séparateurs mais n’empêche pas la saisie ni la navigation au clavier (retours chariot, flèches, copier/coller conservés).</li>
|
|
34
|
+
<li><strong>Raccourcis</strong> : <kbd>Ctrl/Cmd+A</kbd>, <kbd>Ctrl/Cmd+C</kbd>, <kbd>Ctrl/Cmd+V</kbd> restent utilisables pour éditer la valeur.</li>
|
|
35
|
+
<li><strong>Plage de dates</strong> : la chaîne <code>start - end</code> est éditable (séparateur conservé), aucune navigation forcée.</li>
|
|
36
|
+
<li><strong>Lecture seule</strong> : aucune validation ni effacement, bouton clear désactivé.</li>
|
|
37
|
+
</ul>
|
|
38
|
+
</CriteriaCard>
|
|
39
|
+
|
|
40
|
+
<CriteriaCard title="Messages et retours" icon="📣">
|
|
41
|
+
<ul>
|
|
42
|
+
<li><strong>Statuts</strong> : erreurs/avertissements/succès affichés sous le champ (zone annoncée via <code>aria-live</code> si activé côté navigateur/lecteur).</li>
|
|
43
|
+
<li><strong>Formats attendus</strong> : placeholder et hint expliquent la structure (JJ/MM/AAAA…).</li>
|
|
44
|
+
<li><strong>Validation manuelle</strong> : <code>customRules</code> / <code>customWarningRules</code> exposent des messages dédiés.</li>
|
|
45
|
+
</ul>
|
|
46
|
+
</CriteriaCard>
|
|
47
|
+
</CriteriaSection>
|
|
48
|
+
|
|
49
|
+
<DemoSection title="Saisie clavier et autoClamp">
|
|
50
|
+
<Story of={Stories.AutoClampFeature} />
|
|
51
|
+
</DemoSection>
|
|
52
|
+
|
|
53
|
+
<BestPracticesSection>
|
|
54
|
+
- Fournir un libellé explicite ou <code>aria-label</code> quand le label visuel est masqué ou tronqué.
|
|
55
|
+
- Afficher un placeholder cohérent avec le format attendu et conserver un hint persistent pour les formats non standards.
|
|
56
|
+
- En lecture seule, désactiver les actions d’ouverture/validation et laisser l’icône décorative optionnelle mais non interactive.
|
|
57
|
+
- En mode plage, préciser dans le hint l’ordre attendu (début puis fin) et conserver la séparatrice <code>" - "</code>.
|
|
58
|
+
- Avec <code>autoClamp</code>, signaler que les séparateurs sont ajoutés automatiquement sans bloquer les corrections clavier.
|
|
59
|
+
</BestPracticesSection>
|
|
60
|
+
|
|
61
|
+
<ResourcesSection>
|
|
62
|
+
- Stories : <code>Default</code> (champ requis), <code>AutoClampFeature</code> (saisie assistée), <code>DifferentFormats</code> (formats multiples), <code>CustomRules</code> / <code>WarningRules</code> (messages dédiés), <code>Range</code> (plage éditable).
|
|
63
|
+
- Spécification WAI-ARIA : rôle textbox et gestion de <code>aria-invalid</code> / <code>aria-required</code> / <code>aria-describedby</code>.
|
|
64
|
+
- Tests axe : <code>DateTextInput.a11y.spec.ts</code> (scénario champ requis, vérifie les attributs aria et les messages).
|
|
65
|
+
</ResourcesSection>
|
|
66
|
+
</AccessibilityGuideLayout>
|