@cnamts/synapse 1.0.19 → 1.0.21
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/{DateFilter-CeVuSfJ9.js → DateFilter-uN8OURoP.js} +1 -1
- package/dist/{NumberFilter-C8PAu_sw.js → NumberFilter-sm1dQNQi.js} +1 -1
- package/dist/{PeriodFilter-UMUaxx3d.js → PeriodFilter-Cklsxnh9.js} +1 -1
- package/dist/{SelectFilter-CqZl8CYt.js → SelectFilter-CWefj27Z.js} +1 -1
- package/dist/{TextFilter-D_RhhNOh.js → TextFilter-Ddyj885L.js} +1 -1
- package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +4 -4
- package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +17 -7
- package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +4 -4
- package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +4 -4
- package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +2416 -0
- package/dist/components/Customs/Selects/SyAutocomplete/types.d.ts +5 -0
- package/dist/components/Customs/Selects/SyAutocomplete/utils/ariaManager.d.ts +14 -0
- package/dist/components/Customs/Selects/SyAutocomplete/utils/useItemUtils.d.ts +16 -0
- package/dist/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.d.ts +28 -0
- package/dist/components/Customs/Selects/SyAutocomplete/utils/useSelectionLogic.d.ts +12 -0
- package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +2 -0
- package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +160 -0
- package/dist/components/Customs/SyCheckBoxGroup/locales.d.ts +3 -0
- package/dist/components/Customs/SyCheckBoxGroup/types.d.ts +10 -0
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +1545 -2
- package/dist/components/Customs/SyIcon/SyIcon.d.ts +2 -1
- package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +1495 -2
- package/dist/components/DatePicker/composables/useDateSelection.d.ts +1 -0
- package/dist/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.d.ts +60 -0
- package/dist/components/ErrorPage/ErrorPage.d.ts +1 -12
- package/dist/components/ErrorPage/locales.d.ts +18 -3
- package/dist/components/FileUpload/FileUpload.d.ts +2 -0
- package/dist/components/MaintenancePage/locales.d.ts +18 -2
- package/dist/components/NotFoundPage/locales.d.ts +20 -4
- package/dist/components/PaginatedTable/PaginatedTable.d.ts +1 -1
- package/dist/components/PaginatedTable/Pagination.d.ts +17 -0
- package/dist/components/StatusPage/StatusPage.d.ts +39 -0
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -5
- package/dist/components/Tables/SyTable/SyTable.d.ts +5 -5
- package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +13 -3
- package/dist/components/index.d.ts +4 -0
- package/dist/components/types.d.ts +15 -0
- package/dist/composables/useFormFieldErrorHandling.d.ts +31 -0
- package/dist/design-system-v3.js +126 -122
- package/dist/design-system-v3.umd.cjs +325 -314
- package/dist/{main-B39UVv5p.js → main-CWniLr0s.js} +15837 -14587
- package/dist/modules.d.ts +6 -0
- package/dist/style.css +1 -1
- package/dist/utils/theme/index.d.ts +6 -0
- package/package.json +12 -10
- package/src/assets/amelipro/icons.ts +166 -153
- package/src/components/Accordion/Accordion.mdx +4 -1
- package/src/components/Accordion/{Accessibilite/AccessibilityGuide.mdx → accessibilite/Accessibility.mdx} +2 -2
- package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.stories.ts +73 -14
- package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +119 -27
- package/src/components/Amelipro/AmeliproClickableTile/tests/AmeliproClickableTile.a11y.spec.ts +304 -0
- package/src/components/Amelipro/AmeliproClickableTile/tests/AmeliproClickableTile.spec.ts +435 -9
- package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +60 -0
- package/src/components/Amelipro/AmeliproIcon/__tests__/AmeliproIcon.spec.ts +1 -1
- package/src/components/Amelipro/AmeliproIcon/iconList.ts +2 -0
- package/src/components/BackBtn/BackBtn.vue +5 -4
- package/src/components/BackBtn/accessibilite/Accessibility.mdx +15 -0
- package/src/components/BackToTopBtn/BackToTopBtn.vue +6 -3
- package/src/components/BackToTopBtn/accessibilite/Accessibility.mdx +15 -0
- package/src/components/Captcha/Captcha.vue +5 -1
- package/src/components/Captcha/CaptchaAlert.vue +9 -7
- package/src/components/Captcha/accessibilite/Accessibility.mdx +10 -0
- package/src/components/ChipList/accessibilite/Accessibility.mdx +15 -0
- package/src/components/CollapsibleList/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +8 -6
- package/src/components/Common/IconSlot/IconSlot.vue +1 -1
- package/src/components/ContextualMenu/ContextualMenu.stories.ts +0 -3
- package/src/components/ContextualMenu/accessibilite/Accessibility.mdx +71 -0
- package/src/components/CookieBanner/CookieBanner.stories.ts +11 -20
- package/src/components/CookieBanner/CookieBanner.vue +20 -5
- package/src/components/CookieBanner/accessibilite/Accessibility.mdx +71 -0
- package/src/components/CookieBanner/tests/CookieBanner.spec.ts +48 -4
- package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +5 -4
- package/src/components/CopyBtn/CopyBtn.vue +6 -3
- package/src/components/CopyBtn/accessibilite/Accessibility.mdx +15 -0
- package/src/components/Customs/Selects/SelectBtnField/accessibilite/Accessibility.mdx +15 -0
- package/src/components/Customs/Selects/SelectOverview.mdx +112 -1
- package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.mdx +52 -0
- package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +979 -0
- package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +653 -0
- package/src/components/Customs/Selects/{SySelect → SyAutocomplete/accessibilite}/Accessibilite.stories.ts +7 -38
- package/src/components/Customs/Selects/{SySelect/Accessibilite.mdx → SyAutocomplete/accessibilite/Accessibility.mdx} +15 -20
- package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +72 -0
- package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +345 -0
- package/src/components/Customs/Selects/SyAutocomplete/types.ts +7 -0
- package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +180 -0
- package/src/components/Customs/Selects/SyAutocomplete/utils/useItemUtils.ts +46 -0
- package/src/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.ts +107 -0
- package/src/components/Customs/Selects/SyAutocomplete/utils/useSelectionLogic.ts +74 -0
- package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +13 -9
- package/src/components/Customs/Selects/SyInputSelect/accessibilite/Accessibility.mdx +12 -0
- package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +43 -34
- package/src/components/Customs/Selects/SySelect/SySelect.vue +19 -2
- package/src/components/Customs/Selects/SySelect/accessibilite/Accessibility.mdx +274 -0
- package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +21 -16
- package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.mdx +32 -0
- package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +856 -0
- package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +334 -0
- package/src/components/Customs/SyCheckBoxGroup/accessibilite/Accessibility.mdx +243 -0
- package/src/components/Customs/SyCheckBoxGroup/locales.ts +3 -0
- package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.a11y.spec.ts +30 -0
- package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.spec.ts +152 -0
- package/src/components/Customs/SyCheckBoxGroup/types.ts +10 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +16 -27
- package/src/components/Customs/SyCheckbox/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +3 -3
- package/src/components/Customs/SyForm/SyForm.a11y.spec.ts +1 -1
- package/src/components/Customs/SyForm/accessibilite/Accessibility.mdx +10 -0
- package/src/components/Customs/SyIcon/SyIcon.mdx +4 -1
- package/src/components/Customs/SyIcon/SyIcon.vue +4 -3
- package/src/components/Customs/SyIcon/{Accessibilite.stories.ts → accessibilite/Accessibilite.stories.ts} +3 -3
- package/src/components/Customs/SyIcon/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +2 -2
- package/src/components/Customs/SyPagination/SyPagination.mdx +4 -2
- package/src/components/Customs/SyPagination/accessibilite/Accessibility.mdx +10 -0
- package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +16 -43
- package/src/components/Customs/SyRadioGroup/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +2 -2
- package/src/components/Customs/SyTabs/SyTabs.mdx +4 -2
- package/src/components/Customs/SyTabs/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +2 -2
- package/src/components/Customs/SyTextField/SyTextField.mdx +1 -2
- package/src/components/Customs/SyTextField/SyTextField.vue +13 -0
- package/src/components/Customs/SyTextField/accessibilite/Accessibility.mdx +15 -0
- package/src/components/DataList/accessibilite/Accessibility.mdx +15 -0
- package/src/components/DataListGroup/accessibilite/Accessibility.mdx +14 -0
- package/src/components/DatePicker/Accessibilite.mdx +1 -1
- package/src/components/DatePicker/Accessibilite.stories.ts +1 -1
- package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +7 -4
- package/src/components/DatePicker/CalendarMode/DatePicker.vue +49 -13
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +43 -2
- package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +297 -0
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +48 -21
- package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +98 -0
- package/src/components/DatePicker/composables/useDateSelection.ts +5 -0
- package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +273 -0
- package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +4 -4
- package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +10 -0
- package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.mdx +83 -0
- package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.stories.ts +502 -0
- package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.vue +428 -0
- package/src/components/DeclarationAccessibilityPage/accessibilite/Accessibility.mdx +75 -0
- package/src/components/DeclarationAccessibilityPage/tests/DeclarationAccessibilityPage.a11y.spec.ts +53 -0
- package/src/components/DeclarationAccessibilityPage/tests/DeclarationAccessibilityPage.spec.ts +59 -0
- package/src/components/DiacriticPicker/DiacriticPicker.vue +20 -1
- package/src/components/DiacriticPicker/accessibilite/Accessibility.mdx +10 -0
- package/src/components/DialogBox/accessibilite/Accessibility.mdx +15 -0
- package/src/components/DownloadBtn/DownloadBtn.vue +5 -4
- package/src/components/DownloadBtn/accessibilite/Accessibility.mdx +15 -0
- package/src/components/ErrorPage/ErrorPage.mdx +6 -16
- package/src/components/ErrorPage/ErrorPage.stories.ts +16 -87
- package/src/components/ErrorPage/ErrorPage.vue +38 -125
- package/src/components/ErrorPage/accessibilite/Accessibility.mdx +77 -0
- package/src/components/ErrorPage/assets/error-ap.svg +1774 -0
- package/src/components/ErrorPage/locales.ts +21 -3
- package/src/components/ErrorPage/tests/ErrorPage.a11y.spec.ts +5 -13
- package/src/components/ErrorPage/tests/ErrorPage.spec.ts +2 -41
- package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +8 -266
- package/src/components/ExternalLinks/accessibilite/Accessibility.mdx +15 -0
- package/src/components/FileList/UploadItem/UploadItem.vue +25 -20
- package/src/components/FileList/accessibilite/Accessibility.mdx +12 -0
- package/src/components/FilePreview/accessibilite/Accessibility.mdx +12 -0
- package/src/components/FileUpload/FileUpload.vue +5 -0
- package/src/components/FileUpload/FileUploadContent.vue +5 -4
- package/src/components/FileUpload/accessibilite/Accessibility.mdx +12 -0
- package/src/components/FilterInline/FilterInline.vue +5 -4
- package/src/components/FilterInline/accessibilite/Accessibility.mdx +12 -0
- package/src/components/FilterSideBar/accessibilite/Accessibility.mdx +15 -0
- package/src/components/FooterBar/FooterBar.stories.ts +18 -14
- package/src/components/FooterBar/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +3 -4
- package/src/components/FooterBar/defaultSocialMediaLinks.ts +6 -4
- package/src/components/FranceConnectBtn/FranceConnectBtn.vue +6 -5
- package/src/components/FranceConnectBtn/accessibilite/Accessibility.mdx +15 -0
- package/src/components/FranceConnectBtn/tests/__snapshots__/FranceConnectBtn.spec.ts.snap +3 -0
- package/src/components/HeaderBar/HeaderBurgerMenu/accessibilite/Accessibility.mdx +15 -0
- package/src/components/HeaderBar/accessibilite/Accessibility.mdx +15 -0
- package/src/components/HeaderBar/{Usages.mdx → usages/Usages.mdx} +2 -2
- package/src/components/HeaderLoading/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +9 -5
- package/src/components/HeaderToolbar/accessibilite/Accessibility.mdx +15 -0
- package/src/components/LangBtn/LangBtn.vue +5 -4
- package/src/components/LangBtn/accessibilite/Accessibility.mdx +15 -0
- package/src/components/Logo/accessibilite/Accessibility.mdx +17 -0
- package/src/components/LogoBrandSection/accessibilite/Accessibility.mdx +12 -0
- package/src/components/LunarCalendar/accessibilite/Accessibility.mdx +10 -0
- package/src/components/MaintenancePage/MaintenancePage.mdx +1 -1
- package/src/components/MaintenancePage/MaintenancePage.vue +15 -7
- package/src/components/MaintenancePage/accessibilite/Accessibility.mdx +70 -0
- package/src/components/MaintenancePage/assets/maintenance-ap.svg +1718 -0
- package/src/components/MaintenancePage/locales.ts +24 -3
- package/src/components/MaintenancePage/tests/MaintenancePage.a11y.spec.ts +75 -3
- package/src/components/MaintenancePage/tests/MaintenancePage.spec.ts +42 -2
- package/src/components/MaintenancePage/tests/__snapshots__/MaintenancePage.spec.ts.snap +3 -2
- package/src/components/NirField/accessibilite/Accessibility.mdx +15 -0
- package/src/components/NotFoundPage/NotFoundPage.mdx +1 -1
- package/src/components/NotFoundPage/NotFoundPage.stories.ts +3 -3
- package/src/components/NotFoundPage/NotFoundPage.vue +16 -11
- package/src/components/NotFoundPage/accessibilite/Accessibility.mdx +87 -0
- package/src/components/NotFoundPage/assets/not-found-ap.svg +2061 -0
- package/src/components/NotFoundPage/locales.ts +24 -4
- package/src/components/NotFoundPage/tests/NotFoundPage.a11y.spec.ts +168 -4
- package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +100 -12
- package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +2 -2
- package/src/components/NotificationBar/Notification/Notification.vue +1 -1
- package/src/components/NotificationBar/NotificationBar.mdx +2 -2
- package/src/components/NotificationBar/accessibilite/Accessibility.mdx +75 -0
- package/src/components/PageContainer/{AccessibilityGuide.mdx → accessibilite/Accessibility.mdx} +7 -4
- package/src/components/PageContainer/tests/PageContainer.a11y.spec.ts +14 -7
- package/src/components/PaginatedTable/PaginatedTable.vue +27 -47
- package/src/components/PaginatedTable/Pagination.vue +93 -0
- package/src/components/PaginatedTable/accessibilite/Accessibility.mdx +12 -0
- package/src/components/PasswordField/PasswordField.vue +2 -1
- package/src/components/PasswordField/accessibilite/Accessibility.mdx +108 -0
- package/src/components/PeriodField/accessibilite/Accessibility.mdx +12 -0
- package/src/components/PhoneField/PhoneField.stories.ts +46 -38
- package/src/components/PhoneField/accessibilite/Accessibility.mdx +15 -0
- package/src/components/RangeField/accessibilite/Accessibility.mdx +15 -0
- package/src/components/RatingPicker/accessibilite/Accessibility.mdx +15 -0
- package/src/components/SearchListField/SearchListField.vue +6 -3
- package/src/components/SearchListField/accessibilite/Accessibility.mdx +15 -0
- package/src/components/SkipLink/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +7 -4
- package/src/components/SocialMediaLinks/DefaultSocialMediaLinks.ts +6 -4
- package/src/components/SocialMediaLinks/SocialMediaLinks.mdx +7 -5
- package/src/components/SocialMediaLinks/SocialMediaLinks.stories.ts +17 -13
- package/src/components/SocialMediaLinks/SocialMediaLinks.vue +9 -1
- package/src/components/SocialMediaLinks/accessibilite/Accessibility.mdx +67 -0
- package/src/components/SocialMediaLinks/tests/DefaultSocialMediaLinks.spec.ts +5 -5
- package/src/components/SocialMediaLinks/tests/SocialMediaLinks.a11y.spec.ts +59 -0
- package/src/components/SocialMediaLinks/tests/SocialMediaLinks.spec.ts +9 -7
- package/src/components/StatusPage/StatusPage.mdx +22 -0
- package/src/components/StatusPage/StatusPage.stories.ts +193 -0
- package/src/components/StatusPage/StatusPage.vue +145 -0
- package/src/components/StatusPage/accessibilite/Accessibility.mdx +81 -0
- package/src/components/StatusPage/tests/StatusPage.a11y.spec.ts +29 -0
- package/src/components/StatusPage/tests/StatusPage.spec.ts +50 -0
- package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +270 -0
- package/src/components/SubHeader/accessibilite/Accessibility.mdx +15 -0
- package/src/components/SyAlert/SyAlert.vue +6 -6
- package/src/components/SyAlert/accessibilite/Accessibility.mdx +12 -0
- package/src/components/SyTextArea/accessibilite/Accessibility.mdx +10 -0
- package/src/components/TableToolbar/TableToolbar.stories.ts +6 -6
- package/src/components/TableToolbar/TableToolbar.vue +7 -4
- package/src/components/TableToolbar/accessibilite/Accessibility.mdx +12 -0
- package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +0 -5
- package/src/components/Tables/SyServerTable/SyServerTable.mdx +4 -1
- package/src/components/Tables/SyServerTable/accessibilite/Accessibility.mdx +10 -0
- package/src/components/Tables/SyTable/SyTable.mdx +4 -1
- package/src/components/Tables/SyTable/accessibilite/Accessibility.mdx +10 -0
- package/src/components/Tables/common/TableHeader.vue +3 -1
- package/src/components/Tables/common/organizeColumns/OrganizeColumns.vue +18 -14
- package/src/components/ToolbarContainer/ToolbarContainer.mdx +2 -1
- package/src/components/ToolbarContainer/ToolbarContainer.stories.ts +563 -420
- package/src/components/ToolbarContainer/accessibilite/Accessibility.mdx +69 -0
- package/src/components/UploadWorkflow/UploadWorkflow.mdx +11 -1
- package/src/components/UploadWorkflow/UploadWorkflow.stories.ts +107 -3
- package/src/components/UploadWorkflow/UploadWorkflow.vue +35 -24
- package/src/components/UploadWorkflow/accessibilite/Accessibility.mdx +12 -0
- package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +48 -0
- package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +9 -5
- package/src/components/UploadWorkflow/useFileList.ts +7 -0
- package/src/components/Usages/Usages.vue +3 -2
- package/src/components/UserMenuBtn/UserMenuBtn.vue +7 -5
- package/src/components/UserMenuBtn/accessibilite/Accessibility.mdx +12 -0
- package/src/components/index.ts +5 -0
- package/src/components/types.ts +10 -0
- package/src/composables/rules/tests/useFieldValidation.spec.ts +39 -3
- package/src/composables/rules/useFieldValidation.ts +31 -9
- package/src/composables/useFormFieldErrorHandling.ts +141 -0
- package/src/modules.d.ts +6 -0
- package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +7 -0
- package/src/utils/theme/index.ts +19 -0
- package/src/utils/theme/tests/useThemeLocales.spec.ts +245 -0
- package/dist/components/MaintenancePage/index.d.ts +0 -2
- package/src/components/BackBtn/Accessibilite.mdx +0 -14
- package/src/components/BackBtn/Accessibilite.stories.ts +0 -30
- package/src/components/BackToTopBtn/Accessibilite.mdx +0 -14
- package/src/components/BackToTopBtn/Accessibilite.stories.ts +0 -31
- package/src/components/ChipList/Accessibilite.mdx +0 -14
- package/src/components/ChipList/Accessibilite.stories.ts +0 -31
- package/src/components/CollapsibleList/Accessibilite.stories.ts +0 -29
- package/src/components/ContextualMenu/Accessibilite.mdx +0 -13
- package/src/components/ContextualMenu/Accessibilite.stories.ts +0 -29
- package/src/components/CookieBanner/Accessibilite.mdx +0 -13
- package/src/components/CookieBanner/Accessibilite.stories.ts +0 -30
- package/src/components/CopyBtn/Accessibilite.mdx +0 -13
- package/src/components/CopyBtn/Accessibilite.stories.ts +0 -29
- package/src/components/Customs/Selects/SelectBtnField/Accessibilite.mdx +0 -14
- package/src/components/Customs/Selects/SelectBtnField/Accessibilite.stories.ts +0 -29
- package/src/components/Customs/Selects/SyInputSelect/Accessibilite.mdx +0 -13
- package/src/components/Customs/Selects/SyInputSelect/Accessibilite.stories.ts +0 -25
- package/src/components/Customs/SyPagination/tests/SyPagination.a11y.spec.ts +0 -27
- package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +0 -51
- package/src/components/Customs/SyTextField/Accessibilite.mdx +0 -14
- package/src/components/Customs/SyTextField/Accessibilite.stories.ts +0 -34
- package/src/components/DataList/Accessibilite.mdx +0 -13
- package/src/components/DataList/Accessibilite.stories.ts +0 -29
- package/src/components/DataListGroup/Accessibilite.mdx +0 -13
- package/src/components/DataListGroup/Accessibilite.stories.ts +0 -29
- package/src/components/DataListItem/tests/DataListItem.a11y.spec.ts +0 -31
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +0 -27
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.a11y.spec.ts +0 -26
- package/src/components/DatePicker/DateTextInput/tests/DateTextInput.a11y.spec.ts +0 -27
- package/src/components/DialogBox/Accessibilite.mdx +0 -14
- package/src/components/DialogBox/Accessibilite.stories.ts +0 -29
- package/src/components/DownloadBtn/Accessibilite.mdx +0 -14
- package/src/components/DownloadBtn/Accessibilite.stories.ts +0 -29
- package/src/components/DownloadBtn/tests/DownloadBtn.a11y.spec.ts +0 -26
- package/src/components/ErrorPage/Accessibilite.mdx +0 -13
- package/src/components/ErrorPage/Accessibilite.stories.ts +0 -36
- package/src/components/ExternalLinks/Accessibilite.mdx +0 -18
- package/src/components/ExternalLinks/Accessibilite.stories.ts +0 -62
- package/src/components/ExternalLinks/tests/ExternalLinks.a11y.spec.ts +0 -39
- package/src/components/FileList/Accessibilite.mdx +0 -13
- package/src/components/FileList/Accessibilite.stories.ts +0 -26
- package/src/components/FilePreview/Accessibilite.mdx +0 -14
- package/src/components/FilePreview/Accessibilite.stories.ts +0 -26
- package/src/components/FileUpload/Accessibilite.mdx +0 -13
- package/src/components/FileUpload/Accessibilite.stories.ts +0 -26
- package/src/components/FilterInline/Accessibilite.mdx +0 -15
- package/src/components/FilterInline/Accessibilite.stories.ts +0 -26
- package/src/components/FilterSideBar/Accessibilite.mdx +0 -13
- package/src/components/FilterSideBar/Accessibilite.stories.ts +0 -30
- package/src/components/FooterBar/Accessibilite.stories.ts +0 -26
- package/src/components/FranceConnectBtn/Accessibilite.mdx +0 -13
- package/src/components/FranceConnectBtn/Accessibilite.stories.ts +0 -30
- package/src/components/HeaderBar/Accessibilite.mdx +0 -13
- package/src/components/HeaderBar/Accessibilite.stories.ts +0 -31
- package/src/components/HeaderBar/HeaderBurgerMenu/Accessibilite.mdx +0 -13
- package/src/components/HeaderBar/HeaderBurgerMenu/Accessibilite.stories.ts +0 -30
- package/src/components/HeaderLoading/Accessibilite.stories.ts +0 -31
- package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.a11y.spec.ts +0 -45
- package/src/components/HeaderToolbar/Accessibilite.mdx +0 -13
- package/src/components/HeaderToolbar/Accessibilite.stories.ts +0 -36
- package/src/components/HeaderToolbar/tests/HeaderToolbar.a11y.spec.ts +0 -25
- package/src/components/LangBtn/Accessibilite.mdx +0 -13
- package/src/components/LangBtn/Accessibilite.stories.ts +0 -32
- package/src/components/Logo/Accessibilite.mdx +0 -13
- package/src/components/Logo/Accessibilite.stories.ts +0 -30
- package/src/components/LogoBrandSection/Accessibilite.mdx +0 -13
- package/src/components/LogoBrandSection/Accessibilite.stories.ts +0 -26
- package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +0 -31
- package/src/components/MaintenancePage/Accessibilite.mdx +0 -13
- package/src/components/MaintenancePage/Accessibilite.stories.ts +0 -36
- package/src/components/MaintenancePage/index.ts +0 -3
- package/src/components/NirField/Accessibilite.mdx +0 -13
- package/src/components/NirField/Accessibilite.stories.ts +0 -31
- package/src/components/NotFoundPage/Accessibilite.mdx +0 -13
- package/src/components/NotFoundPage/Accessibilite.stories.ts +0 -36
- package/src/components/NotificationBar/Accessibilite.mdx +0 -13
- package/src/components/NotificationBar/Accessibilite.stories.ts +0 -30
- package/src/components/PageContainer/Accessibilite.mdx +0 -13
- package/src/components/PageContainer/Accessibilite.stories.ts +0 -30
- package/src/components/PaginatedTable/Accessibilite.mdx +0 -13
- package/src/components/PaginatedTable/Accessibilite.stories.ts +0 -26
- package/src/components/PaginatedTable/tests/PaginatedTable.a11y.spec.ts +0 -43
- package/src/components/PasswordField/Accessibilite.mdx +0 -13
- package/src/components/PasswordField/Accessibilite.stories.ts +0 -121
- package/src/components/PeriodField/Accessibilite.mdx +0 -13
- package/src/components/PeriodField/Accessibilite.stories.ts +0 -27
- package/src/components/PhoneField/Accessibilite.mdx +0 -13
- package/src/components/PhoneField/Accessibilite.stories.ts +0 -32
- package/src/components/PhoneField/tests/PhoneField.a11y.spec.ts +0 -34
- package/src/components/RangeField/Accessibilite.mdx +0 -13
- package/src/components/RangeField/Accessibilite.stories.ts +0 -32
- package/src/components/RatingPicker/Accessibilite.mdx +0 -13
- package/src/components/RatingPicker/Accessibilite.stories.ts +0 -30
- package/src/components/SearchListField/Accessibilite.mdx +0 -13
- package/src/components/SearchListField/Accessibilite.stories.ts +0 -30
- package/src/components/SkipLink/Accessibilite.stories.ts +0 -36
- package/src/components/SocialMediaLinks/Accessibilite.mdx +0 -13
- package/src/components/SocialMediaLinks/Accessibilite.stories.ts +0 -36
- package/src/components/SubHeader/Accessibilite.mdx +0 -13
- package/src/components/SubHeader/Accessibilite.stories.ts +0 -36
- package/src/components/SyAlert/Accessibilite.mdx +0 -13
- package/src/components/SyAlert/Accessibilite.stories.ts +0 -30
- package/src/components/TableToolbar/Accessibilite.mdx +0 -13
- package/src/components/TableToolbar/Accessibilite.stories.ts +0 -26
- package/src/components/UploadWorkflow/Accessibilite.mdx +0 -13
- package/src/components/UploadWorkflow/Accessibilite.stories.ts +0 -26
- package/src/components/UserMenuBtn/Accessibilite.mdx +0 -13
- package/src/components/UserMenuBtn/Accessibilite.stories.ts +0 -25
- /package/src/components/HeaderBar/{Usages.stories.ts → usages/Usages.stories.ts} +0 -0
- /package/src/components/NotFoundPage/assets/{not-found.svg → not-found-cnam.svg} +0 -0
- /package/src/components/SyBtnMenu/accessibilite/{AccessibilityGuide.mdx → Accessibility.mdx} +0 -0
package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Meta, StoryFn } from '@storybook/vue3'
|
|
2
2
|
import DatePickerValidationExamples from '../docExamples/DatePickerValidationExamples.vue'
|
|
3
3
|
import DatePickerBidirectionalValidation from '../docExamples/DatePickerBidirectionalValidation.vue'
|
|
4
|
+
import BidirectionalComplexValidation from '../docExamples/BidirectionalComplexValidation.vue'
|
|
4
5
|
|
|
5
6
|
export default {
|
|
6
7
|
title: 'Composants/Formulaires/DatePicker/Validation',
|
|
@@ -421,3 +422,299 @@ BidirectionalValidation.parameters = {
|
|
|
421
422
|
},
|
|
422
423
|
],
|
|
423
424
|
}
|
|
425
|
+
|
|
426
|
+
export const BidirectionalComplexDatePickerValidation: StoryFn = () => ({
|
|
427
|
+
components: {
|
|
428
|
+
BidirectionalComplexValidation,
|
|
429
|
+
},
|
|
430
|
+
template: '<BidirectionalComplexValidation />',
|
|
431
|
+
})
|
|
432
|
+
|
|
433
|
+
BidirectionalComplexDatePickerValidation.parameters = {
|
|
434
|
+
sourceCode: [
|
|
435
|
+
{
|
|
436
|
+
name: 'Template',
|
|
437
|
+
code: `
|
|
438
|
+
<template>
|
|
439
|
+
<div class="date-picker-bidirectional-validation">
|
|
440
|
+
<h1 class="text-h5 mb-6">
|
|
441
|
+
Validation bidirectionnelle entre deux DatePickers
|
|
442
|
+
</h1>
|
|
443
|
+
|
|
444
|
+
<div class="text-body-2 mb-4">
|
|
445
|
+
Ce composant démontre la validation bidirectionnelle entre deux DatePickers. Les règles de validation sont appliquées dans les deux sens :
|
|
446
|
+
<ul class="ml-4">
|
|
447
|
+
<li>La date de fin doit être postérieure ou égale à la date de début</li>
|
|
448
|
+
<li>La date de début doit être antérieure ou égale à la date de fin</li>
|
|
449
|
+
<li>Lorsque la date de début change, la validation de la date de fin est mise à jour</li>
|
|
450
|
+
<li>Lorsque la date de fin change, la validation de la date de début est mise à jour</li>
|
|
451
|
+
</ul>
|
|
452
|
+
</div>
|
|
453
|
+
|
|
454
|
+
<div class="date-range-container mb-6">
|
|
455
|
+
<div class="date-picker-wrapper">
|
|
456
|
+
<h3 class="text-subtitle-1 mb-2">
|
|
457
|
+
Date de début
|
|
458
|
+
</h3>
|
|
459
|
+
<DatePicker
|
|
460
|
+
ref="startDatePickerRef"
|
|
461
|
+
v-model="startDate"
|
|
462
|
+
placeholder="Date de début"
|
|
463
|
+
:custom-rules="startDateRules"
|
|
464
|
+
use-combined-mode
|
|
465
|
+
required
|
|
466
|
+
@update:model-value="validateEndDate"
|
|
467
|
+
/>
|
|
468
|
+
</div>
|
|
469
|
+
<div class="date-picker-wrapper">
|
|
470
|
+
<h3 class="text-subtitle-1 mb-2">
|
|
471
|
+
Date de fin
|
|
472
|
+
</h3>
|
|
473
|
+
<DatePicker
|
|
474
|
+
ref="endDatePickerRef"
|
|
475
|
+
v-model="endDate"
|
|
476
|
+
placeholder="Date de fin"
|
|
477
|
+
:custom-rules="endDateRules"
|
|
478
|
+
use-combined-mode
|
|
479
|
+
required
|
|
480
|
+
@update:model-value="validateStartDate"
|
|
481
|
+
/>
|
|
482
|
+
</div>
|
|
483
|
+
</div>
|
|
484
|
+
|
|
485
|
+
<div class="actions mb-4">
|
|
486
|
+
<v-btn
|
|
487
|
+
size="small"
|
|
488
|
+
color="primary"
|
|
489
|
+
class="mr-2"
|
|
490
|
+
@click="resetDates"
|
|
491
|
+
>
|
|
492
|
+
Réinitialiser
|
|
493
|
+
</v-btn>
|
|
494
|
+
|
|
495
|
+
<v-btn
|
|
496
|
+
size="small"
|
|
497
|
+
color="success"
|
|
498
|
+
class="mr-2"
|
|
499
|
+
@click="setTestDates"
|
|
500
|
+
>
|
|
501
|
+
Dates valides
|
|
502
|
+
</v-btn>
|
|
503
|
+
|
|
504
|
+
<v-btn
|
|
505
|
+
size="small"
|
|
506
|
+
color="error"
|
|
507
|
+
@click="setInvalidDates"
|
|
508
|
+
>
|
|
509
|
+
Dates invalides
|
|
510
|
+
</v-btn>
|
|
511
|
+
</div>
|
|
512
|
+
|
|
513
|
+
<div class="current-values mt-4">
|
|
514
|
+
<p><strong>Date de début :</strong> {{ startDate || 'Non sélectionnée' }}</p>
|
|
515
|
+
<p><strong>Date de fin :</strong> {{ endDate || 'Non sélectionnée' }}</p>
|
|
516
|
+
</div>
|
|
517
|
+
|
|
518
|
+
<div class="mt-6 pa-4 bg-grey-lighten-4 rounded">
|
|
519
|
+
<h3 class="text-subtitle-1 mb-2">
|
|
520
|
+
Comment fonctionne la validation bidirectionnelle
|
|
521
|
+
</h3>
|
|
522
|
+
<p class="text-body-2">
|
|
523
|
+
La validation bidirectionnelle entre les DatePickers est implémentée grâce à des règles de validation personnalisées
|
|
524
|
+
qui vérifient la relation entre les deux dates. Chaque DatePicker a sa propre règle qui vérifie sa valeur par rapport à l'autre.
|
|
525
|
+
</p>
|
|
526
|
+
<p class="text-body-2 mt-2">
|
|
527
|
+
Lorsqu'une date change, un watcher déclenche la validation de l'autre DatePicker. Cela garantit que les messages d'erreur
|
|
528
|
+
sont toujours à jour, même lorsque les dates sont modifiées dans n'importe quel ordre.
|
|
529
|
+
</p>
|
|
530
|
+
<p class="text-body-2 mt-2">
|
|
531
|
+
Les messages d'erreur apparaissent directement dans les composants DatePicker, ce qui améliore l'expérience utilisateur
|
|
532
|
+
en fournissant un retour immédiat sur la validité des dates sélectionnées.
|
|
533
|
+
</p>
|
|
534
|
+
<p class="text-body-2 mt-2">
|
|
535
|
+
Vous trouverez le code source dans la story Bidirectional Validation.
|
|
536
|
+
</p>
|
|
537
|
+
</div>
|
|
538
|
+
</div>
|
|
539
|
+
</template>
|
|
540
|
+
`,
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
name: 'Script',
|
|
544
|
+
code: `
|
|
545
|
+
<script lang="ts" setup>
|
|
546
|
+
// useDateFormat n'est plus nécessaire avec les règles prédéfinies
|
|
547
|
+
|
|
548
|
+
// État des dates
|
|
549
|
+
const startDate = ref<string | null>(null)
|
|
550
|
+
const endDate = ref<string | null>(null)
|
|
551
|
+
|
|
552
|
+
// Références aux composants CalendarMode pour accéder à leurs méthodes
|
|
553
|
+
const startDatePickerRef = ref<InstanceType<typeof DatePicker> | null>(null)
|
|
554
|
+
const endDatePickerRef = ref<InstanceType<typeof DatePicker> | null>(null)
|
|
555
|
+
|
|
556
|
+
// Les règles de validation sont définies directement dans les computed startDateRules et endDateRules
|
|
557
|
+
|
|
558
|
+
// Règles de validation pour la date de début
|
|
559
|
+
const startDateRules = computed(() => {
|
|
560
|
+
const rules = [
|
|
561
|
+
{
|
|
562
|
+
type: 'required',
|
|
563
|
+
options: {
|
|
564
|
+
message: 'La date de début est requise.',
|
|
565
|
+
},
|
|
566
|
+
},
|
|
567
|
+
]
|
|
568
|
+
|
|
569
|
+
// Ajouter la règle notAfterDate seulement si endDate.value existe
|
|
570
|
+
if (endDate.value) {
|
|
571
|
+
rules.push({
|
|
572
|
+
type: 'notAfterDate',
|
|
573
|
+
|
|
574
|
+
options: {
|
|
575
|
+
message: 'La date de début ne peut pas être postérieure à la date de fin',
|
|
576
|
+
date: endDate.value, // Déjà une chaîne au format DD/MM/YYYY
|
|
577
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- mock Axios headers
|
|
578
|
+
} as any,
|
|
579
|
+
})
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
return rules
|
|
583
|
+
})
|
|
584
|
+
|
|
585
|
+
// Règles de validation pour la date de fin
|
|
586
|
+
const endDateRules = computed(() => {
|
|
587
|
+
const rules = [
|
|
588
|
+
{
|
|
589
|
+
type: 'required',
|
|
590
|
+
options: {
|
|
591
|
+
message: 'La date de fin est requise.',
|
|
592
|
+
},
|
|
593
|
+
},
|
|
594
|
+
]
|
|
595
|
+
// Ajouter la règle notBeforeDate seulement si startDate.value existe
|
|
596
|
+
if (startDate.value) {
|
|
597
|
+
rules.push({
|
|
598
|
+
type: 'notBeforeDate',
|
|
599
|
+
|
|
600
|
+
options: {
|
|
601
|
+
message: 'La date de fin ne peut pas être antérieure à la date de début',
|
|
602
|
+
date: startDate.value, // Déjà une chaîne au format DD/MM/YYYY
|
|
603
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- mock Axios headers
|
|
604
|
+
} as any,
|
|
605
|
+
})
|
|
606
|
+
}
|
|
607
|
+
return rules
|
|
608
|
+
})
|
|
609
|
+
|
|
610
|
+
// Fonction pour forcer la validation de la date de fin quand la date de début change
|
|
611
|
+
const validateEndDate = () => {
|
|
612
|
+
if (endDatePickerRef.value && endDate.value) {
|
|
613
|
+
// On utilise validateOnSubmit pour forcer la validation complète
|
|
614
|
+
endDatePickerRef.value.validateOnSubmit()
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
// Fonction pour forcer la validation de la date de début quand la date de fin change
|
|
619
|
+
const validateStartDate = () => {
|
|
620
|
+
if (startDatePickerRef.value && startDate.value) {
|
|
621
|
+
// On utilise validateOnSubmit pour forcer la validation complète
|
|
622
|
+
startDatePickerRef.value.validateOnSubmit()
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
// Watcher pour la date de début qui force la revalidation de la date de fin
|
|
627
|
+
watch(startDate, () => {
|
|
628
|
+
// Laisser le temps au système de mettre à jour les valeurs
|
|
629
|
+
setTimeout(() => {
|
|
630
|
+
validateEndDate()
|
|
631
|
+
}, 0)
|
|
632
|
+
})
|
|
633
|
+
|
|
634
|
+
// Watcher pour la date de fin qui force la revalidation de la date de début
|
|
635
|
+
watch(endDate, () => {
|
|
636
|
+
// Laisser le temps au système de mettre à jour les valeurs
|
|
637
|
+
setTimeout(() => {
|
|
638
|
+
validateStartDate()
|
|
639
|
+
}, 0)
|
|
640
|
+
})
|
|
641
|
+
|
|
642
|
+
// Fonction pour définir des dates de test
|
|
643
|
+
const setTestDates = () => {
|
|
644
|
+
// Définir une date de début (aujourd'hui)
|
|
645
|
+
const today = new Date()
|
|
646
|
+
const day = String(today.getDate()).padStart(2, '0')
|
|
647
|
+
const month = String(today.getMonth() + 1).padStart(2, '0')
|
|
648
|
+
const year = today.getFullYear()
|
|
649
|
+
startDate.value = day + '/' + month + '/' + year
|
|
650
|
+
|
|
651
|
+
// Définir une date de fin (demain) - pour démontrer une validation valide
|
|
652
|
+
const tomorrow = new Date(today)
|
|
653
|
+
tomorrow.setDate(today.getDate() + 1)
|
|
654
|
+
const tomorrowDay = String(tomorrow.getDate()).padStart(2, '0')
|
|
655
|
+
const tomorrowMonth = String(tomorrow.getMonth() + 1).padStart(2, '0')
|
|
656
|
+
const tomorrowYear = tomorrow.getFullYear()
|
|
657
|
+
endDate.value = tomorrowDay + '/' + tomorrowMonth + '/' + tomorrowYear
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
// Fonction pour définir des dates invalides (date de fin avant date de début)
|
|
661
|
+
const setInvalidDates = () => {
|
|
662
|
+
// Définir une date de début (aujourd'hui)
|
|
663
|
+
const today = new Date()
|
|
664
|
+
const day = String(today.getDate()).padStart(2, '0')
|
|
665
|
+
const month = String(today.getMonth() + 1).padStart(2, '0')
|
|
666
|
+
const year = today.getFullYear()
|
|
667
|
+
startDate.value = day + '/' + month + '/' + year
|
|
668
|
+
|
|
669
|
+
// Définir une date de fin (hier) - pour démontrer une validation invalide
|
|
670
|
+
const yesterday = new Date(today)
|
|
671
|
+
yesterday.setDate(today.getDate() - 1)
|
|
672
|
+
const yesterdayDay = String(yesterday.getDate()).padStart(2, '0')
|
|
673
|
+
const yesterdayMonth = String(yesterday.getMonth() + 1).padStart(2, '0')
|
|
674
|
+
const yesterdayYear = yesterday.getFullYear()
|
|
675
|
+
endDate.value = yesterdayDay + '/' + yesterdayMonth + '/' + yesterdayYear
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
// Fonction pour réinitialiser les dates
|
|
679
|
+
const resetDates = () => {
|
|
680
|
+
startDate.value = null
|
|
681
|
+
endDate.value = null
|
|
682
|
+
}
|
|
683
|
+
</script>
|
|
684
|
+
`,
|
|
685
|
+
},
|
|
686
|
+
{
|
|
687
|
+
name: 'Style',
|
|
688
|
+
code: `
|
|
689
|
+
<style scoped>
|
|
690
|
+
.date-picker-bidirectional-validation {
|
|
691
|
+
padding: 20px;
|
|
692
|
+
max-width: 800px;
|
|
693
|
+
margin: 0 auto;
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
.date-range-container {
|
|
697
|
+
display: flex;
|
|
698
|
+
gap: 20px;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
.date-picker-wrapper {
|
|
702
|
+
flex: 1;
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
.actions {
|
|
706
|
+
display: flex;
|
|
707
|
+
flex-wrap: wrap;
|
|
708
|
+
gap: 8px;
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
.current-values {
|
|
712
|
+
padding: 15px;
|
|
713
|
+
background-color: #f5f5f5;
|
|
714
|
+
border-radius: 4px;
|
|
715
|
+
}
|
|
716
|
+
</style>
|
|
717
|
+
`,
|
|
718
|
+
},
|
|
719
|
+
],
|
|
720
|
+
}
|
|
@@ -103,30 +103,57 @@
|
|
|
103
103
|
|
|
104
104
|
/**
|
|
105
105
|
* =====================
|
|
106
|
-
* Validation setup (safe wrapper for readonly)
|
|
106
|
+
* Validation setup (safe wrapper for readonly, reactive to toggles)
|
|
107
107
|
* =====================
|
|
108
108
|
*/
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
})
|
|
115
|
-
: {
|
|
116
|
-
errors: ref<string[]>([]),
|
|
117
|
-
warnings: ref<string[]>([]),
|
|
118
|
-
successes: ref<string[]>([]),
|
|
119
|
-
hasError: ref(false),
|
|
120
|
-
clearValidation: () => {},
|
|
121
|
-
validateField: () => ({
|
|
122
|
-
hasError: false,
|
|
123
|
-
hasWarning: false,
|
|
124
|
-
hasSuccess: false,
|
|
125
|
-
state: { errors: [], warnings: [], successes: [] },
|
|
126
|
-
} as ValidationResult),
|
|
127
|
-
}
|
|
109
|
+
const baseValidation = useValidation({
|
|
110
|
+
showSuccessMessages: props.showSuccessMessages,
|
|
111
|
+
fieldIdentifier: props.label || props.placeholder,
|
|
112
|
+
disableErrorHandling: props.disableErrorHandling,
|
|
113
|
+
})
|
|
128
114
|
|
|
129
|
-
const
|
|
115
|
+
const readonlyValidation = {
|
|
116
|
+
errors: ref<string[]>([]),
|
|
117
|
+
warnings: ref<string[]>([]),
|
|
118
|
+
successes: ref<string[]>([]),
|
|
119
|
+
hasError: ref(false),
|
|
120
|
+
clearValidation: () => {},
|
|
121
|
+
validateField: () => ({
|
|
122
|
+
hasError: false,
|
|
123
|
+
hasWarning: false,
|
|
124
|
+
hasSuccess: false,
|
|
125
|
+
state: { errors: [], warnings: [], successes: [] },
|
|
126
|
+
} as ValidationResult),
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const validationApi = computed(() => (readonly.value ? readonlyValidation : baseValidation))
|
|
130
|
+
|
|
131
|
+
const errors = computed({
|
|
132
|
+
get: () => validationApi.value.errors.value,
|
|
133
|
+
set: (value) => { validationApi.value.errors.value = value },
|
|
134
|
+
})
|
|
135
|
+
const warnings = computed({
|
|
136
|
+
get: () => validationApi.value.warnings.value,
|
|
137
|
+
set: (value) => { validationApi.value.warnings.value = value },
|
|
138
|
+
})
|
|
139
|
+
const successes = computed({
|
|
140
|
+
get: () => validationApi.value.successes.value,
|
|
141
|
+
set: (value) => { validationApi.value.successes.value = value },
|
|
142
|
+
})
|
|
143
|
+
const hasError = computed(() => {
|
|
144
|
+
const api = validationApi.value
|
|
145
|
+
// baseValidation exposes a computed hasError, readonly stub exposes a ref
|
|
146
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- computed/ref dual shape
|
|
147
|
+
return (api as any).hasError?.value ?? api.errors.value.length > 0
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
const clearValidation = () => validationApi.value.clearValidation()
|
|
151
|
+
|
|
152
|
+
const validateField = (
|
|
153
|
+
value: unknown,
|
|
154
|
+
rules?: ValidationRule[],
|
|
155
|
+
warningRules?: ValidationRule[],
|
|
156
|
+
): ValidationResult => validationApi.value.validateField(value, rules, warningRules)
|
|
130
157
|
|
|
131
158
|
// Agrégation des erreurs internes et externes
|
|
132
159
|
const errorMessages = computed(() => [...errors.value, ...props.externalErrorMessages])
|
|
@@ -231,6 +231,45 @@ export default meta
|
|
|
231
231
|
type Story = StoryObj<typeof meta>
|
|
232
232
|
|
|
233
233
|
export const Default: Story = {
|
|
234
|
+
parameters: {
|
|
235
|
+
sourceCode: [
|
|
236
|
+
{
|
|
237
|
+
name: 'Script',
|
|
238
|
+
code: `
|
|
239
|
+
<script setup lang="ts">
|
|
240
|
+
import { ref } from 'vue'
|
|
241
|
+
import { DatePicker } from '@cnamts/synapse'
|
|
242
|
+
|
|
243
|
+
const date = ref<string | null>(null)
|
|
244
|
+
</script>
|
|
245
|
+
`,
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
name: 'Template',
|
|
249
|
+
code: `
|
|
250
|
+
<template>
|
|
251
|
+
<div>
|
|
252
|
+
<DatePicker
|
|
253
|
+
v-model="date"
|
|
254
|
+
format="DD/MM/YYYY"
|
|
255
|
+
date-format-return=""
|
|
256
|
+
placeholder="JJ/MM/AAAA"
|
|
257
|
+
label="Date avec règles de validation"
|
|
258
|
+
required
|
|
259
|
+
is-outlined
|
|
260
|
+
display-icon
|
|
261
|
+
:no-icon="false"
|
|
262
|
+
:no-calendar="true"
|
|
263
|
+
/>
|
|
264
|
+
<div style="margin-top: 10px; font-family: monospace; color: #666;">
|
|
265
|
+
Valeur : {{ date }}
|
|
266
|
+
</div>
|
|
267
|
+
</div>
|
|
268
|
+
</template>
|
|
269
|
+
`,
|
|
270
|
+
},
|
|
271
|
+
],
|
|
272
|
+
},
|
|
234
273
|
args: {
|
|
235
274
|
'noCalendar': true,
|
|
236
275
|
'format': 'DD/MM/YYYY',
|
|
@@ -275,6 +314,51 @@ export const Default: Story = {
|
|
|
275
314
|
}
|
|
276
315
|
|
|
277
316
|
export const Required: Story = {
|
|
317
|
+
parameters: {
|
|
318
|
+
sourceCode: [
|
|
319
|
+
{
|
|
320
|
+
name: 'Script',
|
|
321
|
+
code: `
|
|
322
|
+
<script setup lang="ts">
|
|
323
|
+
import { ref } from 'vue'
|
|
324
|
+
import { DatePicker } from '@cnamts/synapse'
|
|
325
|
+
|
|
326
|
+
const date = ref<string | null>(null)
|
|
327
|
+
</script>
|
|
328
|
+
`,
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
name: 'Template',
|
|
332
|
+
code: `
|
|
333
|
+
<template>
|
|
334
|
+
<div>
|
|
335
|
+
<h4 class="mb-4">Sans astérisque :</h4>
|
|
336
|
+
<DatePicker
|
|
337
|
+
v-model="date"
|
|
338
|
+
format="DD/MM/YYYY"
|
|
339
|
+
placeholder="JJ/MM/AAAA"
|
|
340
|
+
label="Date avec règles de validation"
|
|
341
|
+
required
|
|
342
|
+
is-outlined
|
|
343
|
+
:no-calendar="true"
|
|
344
|
+
/>
|
|
345
|
+
<h4 class="mb-4">Avec astérisque :</h4>
|
|
346
|
+
<DatePicker
|
|
347
|
+
v-model="date"
|
|
348
|
+
format="DD/MM/YYYY"
|
|
349
|
+
placeholder="JJ/MM/AAAA"
|
|
350
|
+
label="Date avec règles de validation"
|
|
351
|
+
required
|
|
352
|
+
is-outlined
|
|
353
|
+
:no-calendar="true"
|
|
354
|
+
display-asterisk
|
|
355
|
+
/>
|
|
356
|
+
</div>
|
|
357
|
+
</template>
|
|
358
|
+
`,
|
|
359
|
+
},
|
|
360
|
+
],
|
|
361
|
+
},
|
|
278
362
|
args: {
|
|
279
363
|
'noCalendar': true,
|
|
280
364
|
'format': 'DD/MM/YYYY',
|
|
@@ -359,6 +443,7 @@ export const EuropeanFormat: Story = {
|
|
|
359
443
|
'format': 'DD/MM/YYYY',
|
|
360
444
|
'dateFormatReturn': 'YYYY/MM/DD',
|
|
361
445
|
'placeholder': 'JJ/MM/AAAA',
|
|
446
|
+
'label': 'Date avec règles de validation',
|
|
362
447
|
'required': true,
|
|
363
448
|
'noIcon': true,
|
|
364
449
|
'onUpdate:modelValue': fn(),
|
|
@@ -421,6 +506,7 @@ export const CustomRules: Story = {
|
|
|
421
506
|
'noCalendar': true,
|
|
422
507
|
'format': 'DD/MM/YYYY',
|
|
423
508
|
'dateFormatReturn': 'DD/MM/YYYY',
|
|
509
|
+
'label': 'Date avec règles personnalisées',
|
|
424
510
|
'placeholder': 'DD/MM/YYYY',
|
|
425
511
|
'required': true,
|
|
426
512
|
'customRules': [{
|
|
@@ -492,6 +578,7 @@ export const WarningRules: Story = {
|
|
|
492
578
|
'noCalendar': true,
|
|
493
579
|
'format': 'DD/MM/YYYY',
|
|
494
580
|
'placeholder': 'JJ/MM/AAAA',
|
|
581
|
+
'label': 'Date avec règles d\'avertissement',
|
|
495
582
|
'customWarningRules': [{
|
|
496
583
|
type: 'custom',
|
|
497
584
|
options: {
|
|
@@ -553,6 +640,7 @@ export const WithAppendIcon: Story = {
|
|
|
553
640
|
'noCalendar': true,
|
|
554
641
|
'format': 'DD/MM/YYYY',
|
|
555
642
|
'placeholder': 'JJ/MM/AAAA',
|
|
643
|
+
'label': 'Date avec icône en suffixe',
|
|
556
644
|
'displayAppendIcon': true,
|
|
557
645
|
'onUpdate:modelValue': fn(),
|
|
558
646
|
'onFocus': fn(),
|
|
@@ -623,6 +711,7 @@ export const WithErrorDisabled: Story = {
|
|
|
623
711
|
format: 'DD/MM/YYYY',
|
|
624
712
|
dateFormatReturn: 'YYYY/MM/DD',
|
|
625
713
|
placeholder: 'Date requise sans erreur',
|
|
714
|
+
label: 'Date requise sans erreur',
|
|
626
715
|
required: true,
|
|
627
716
|
noIcon: true,
|
|
628
717
|
disableErrorHandling: true,
|
|
@@ -757,6 +846,7 @@ export const AutoClampFeature: Story = {
|
|
|
757
846
|
<DatePicker
|
|
758
847
|
v-model="dateSlash"
|
|
759
848
|
placeholder="Saisie avec auto clamp - séparateur /"
|
|
849
|
+
label="Date"
|
|
760
850
|
format="DD/MM/YYYY"
|
|
761
851
|
noCalendar
|
|
762
852
|
autoClamp
|
|
@@ -767,6 +857,7 @@ export const AutoClampFeature: Story = {
|
|
|
767
857
|
<DatePicker
|
|
768
858
|
v-model="dateDash"
|
|
769
859
|
placeholder="Saisie avec auto clamp - séparateur -"
|
|
860
|
+
label="Date"
|
|
770
861
|
format="DD-MM-YYYY"
|
|
771
862
|
noCalendar
|
|
772
863
|
autoClamp
|
|
@@ -777,6 +868,7 @@ export const AutoClampFeature: Story = {
|
|
|
777
868
|
<DatePicker
|
|
778
869
|
v-model="dateDot"
|
|
779
870
|
placeholder="Saisie avec auto clamp - séparateur ."
|
|
871
|
+
label="Date"
|
|
780
872
|
format="YYYY.MM.DD"
|
|
781
873
|
noCalendar
|
|
782
874
|
autoClamp
|
|
@@ -787,6 +879,7 @@ export const AutoClampFeature: Story = {
|
|
|
787
879
|
<DatePicker
|
|
788
880
|
v-model="dateRange"
|
|
789
881
|
placeholder="Saisie plage avec auto clamp"
|
|
882
|
+
label="Date"
|
|
790
883
|
format="DD/MM/YYYY"
|
|
791
884
|
displayRange
|
|
792
885
|
noCalendar
|
|
@@ -874,6 +967,7 @@ export const DifferentFormats: Story = {
|
|
|
874
967
|
<DatePicker
|
|
875
968
|
v-model="value1"
|
|
876
969
|
placeholder="Format JJ/MM/AAAA"
|
|
970
|
+
label="Date"
|
|
877
971
|
format="DD/MM/YYYY"
|
|
878
972
|
no-calendar
|
|
879
973
|
class="py-4"
|
|
@@ -881,6 +975,7 @@ export const DifferentFormats: Story = {
|
|
|
881
975
|
<DatePicker
|
|
882
976
|
v-model="value2"
|
|
883
977
|
placeholder="Format MM/JJ/AAAA"
|
|
978
|
+
label="Date"
|
|
884
979
|
format="MM/DD/YYYY"
|
|
885
980
|
no-calendar
|
|
886
981
|
class="py-4"
|
|
@@ -888,6 +983,7 @@ export const DifferentFormats: Story = {
|
|
|
888
983
|
<DatePicker
|
|
889
984
|
v-model="value3"
|
|
890
985
|
placeholder="Format AAAA-MM-JJ"
|
|
986
|
+
label="Date"
|
|
891
987
|
format="YYYY-MM-DD"
|
|
892
988
|
no-calendar
|
|
893
989
|
class="py-4"
|
|
@@ -895,6 +991,7 @@ export const DifferentFormats: Story = {
|
|
|
895
991
|
<DatePicker
|
|
896
992
|
v-model="value4"
|
|
897
993
|
placeholder="Format JJ-MM-AA"
|
|
994
|
+
label="Date"
|
|
898
995
|
format="DD-MM-YY"
|
|
899
996
|
no-calendar
|
|
900
997
|
class="py-4"
|
|
@@ -902,6 +999,7 @@ export const DifferentFormats: Story = {
|
|
|
902
999
|
<DatePicker
|
|
903
1000
|
v-model="value5"
|
|
904
1001
|
placeholder="Format JJ.MM.AAAA"
|
|
1002
|
+
label="Date"
|
|
905
1003
|
format="DD.MM.YYYY"
|
|
906
1004
|
no-calendar
|
|
907
1005
|
class="py-4"
|
|
@@ -14,6 +14,10 @@ export function useDateSelection(
|
|
|
14
14
|
// Stockage des dates de début et de fin pour les plages
|
|
15
15
|
const rangeBoundaryDates = ref<[Date | null, Date | null] | null>(null)
|
|
16
16
|
|
|
17
|
+
const resetRange = () => {
|
|
18
|
+
rangeBoundaryDates.value = null
|
|
19
|
+
}
|
|
20
|
+
|
|
17
21
|
/**
|
|
18
22
|
* Génère toutes les dates entre deux dates (incluses)
|
|
19
23
|
*/
|
|
@@ -117,5 +121,6 @@ export function useDateSelection(
|
|
|
117
121
|
updateSelectedDates,
|
|
118
122
|
rangeBoundaryDates,
|
|
119
123
|
generateDateRange,
|
|
124
|
+
resetRange,
|
|
120
125
|
}
|
|
121
126
|
}
|