@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
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { Meta, Story } from '@storybook/addon-docs';
|
|
2
|
+
import * as Stories from '../SySelect.stories.ts';
|
|
3
|
+
import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg';
|
|
4
|
+
import '@/stories/styles/shared.css';
|
|
5
|
+
|
|
6
|
+
<Meta of={Stories} />
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
<div className="accessibility-guide">
|
|
10
|
+
<h1>Guide d'Accessibilité du Composant SySelect</h1>
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<div className="intro-section">
|
|
14
|
+
<img
|
|
15
|
+
src={AccessibilityIcon}
|
|
16
|
+
alt="Icône d'accessibilité"
|
|
17
|
+
className="accessibility-icon"
|
|
18
|
+
/>
|
|
19
|
+
<p className="intro-text">
|
|
20
|
+
Le composant SySelect a été conçu en suivant rigoureusement les recommandations d'accessibilité du W3C,
|
|
21
|
+
notamment le modèle <a href="https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-select-only/" target="_blank" rel="noopener noreferrer">WAI-ARIA pour les combobox select-only</a>.
|
|
22
|
+
Ce guide détaille comment notre implémentation respecte ces standards et garantit une expérience utilisateur inclusive.
|
|
23
|
+
</p>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<div className="criteria-section">
|
|
27
|
+
<h2>Critères d'accessibilité respectés</h2>
|
|
28
|
+
|
|
29
|
+
<div className="criteria-card">
|
|
30
|
+
<div className="criteria-header">
|
|
31
|
+
<span className="criteria-icon">🔍</span>
|
|
32
|
+
<h3>Structure sémantique</h3>
|
|
33
|
+
</div>
|
|
34
|
+
<ul>
|
|
35
|
+
<li><strong>Rôles ARIA appropriés</strong> : <code>role="combobox"</code> sur l'input, <code>role="listbox"</code> sur le menu déroulant</li>
|
|
36
|
+
<li><strong>Relations entre éléments</strong> : <code>aria-controls</code> pour lier le combobox au listbox</li>
|
|
37
|
+
<li><strong>Type d'interaction</strong> : <code>aria-haspopup="listbox"</code> et <code>aria-autocomplete="list"</code></li>
|
|
38
|
+
<li><strong>État du menu</strong> : <code>aria-expanded</code> indique si le menu est ouvert ou fermé</li>
|
|
39
|
+
</ul>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<div className="criteria-card">
|
|
43
|
+
<div className="criteria-header">
|
|
44
|
+
<span className="criteria-icon">⌨️</span>
|
|
45
|
+
<h3>Navigation clavier complète</h3>
|
|
46
|
+
</div>
|
|
47
|
+
<ul>
|
|
48
|
+
<li><strong>Flèches haut/bas</strong> : Navigation entre les options sans modifier la sélection</li>
|
|
49
|
+
<li><strong>Entrée</strong> : Sélection de l'option active et fermeture du menu</li>
|
|
50
|
+
<li><strong>Échap</strong> : Fermeture du menu sans modifier la sélection</li>
|
|
51
|
+
<li><strong>Caractères imprimables</strong> : Navigation vers l'option commençant par le(s) caractère(s) saisi(s)</li>
|
|
52
|
+
</ul>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<div className="criteria-card">
|
|
56
|
+
<div className="criteria-header">
|
|
57
|
+
<span className="criteria-icon">📱</span>
|
|
58
|
+
<h3>États et retours d'information</h3>
|
|
59
|
+
</div>
|
|
60
|
+
<ul>
|
|
61
|
+
<li><strong>Sélection active</strong> : <code>aria-activedescendant</code> indique l'option active pendant la navigation</li>
|
|
62
|
+
<li><strong>Option sélectionnée</strong> : <code>aria-selected="true"</code> sur l'option sélectionnée</li>
|
|
63
|
+
<li><strong>État de validation</strong> : <code>aria-required="true"</code> et <code>aria-invalid="true"</code> pour les champs obligatoires et en erreur</li>
|
|
64
|
+
<li><strong>Scroll automatique</strong> : Les options sont automatiquement scrollées dans la vue lors de la navigation</li>
|
|
65
|
+
</ul>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<div className="keyboard-section">
|
|
70
|
+
<h2>Détail de la navigation clavier</h2>
|
|
71
|
+
Le composant **SySelect** implémente le pattern de navigation au clavier recommandé par le W3C pour les *combobox select-only*.
|
|
72
|
+
<table
|
|
73
|
+
style={{
|
|
74
|
+
width: '100%',
|
|
75
|
+
borderCollapse: 'collapse',
|
|
76
|
+
marginTop: '1em',
|
|
77
|
+
}}
|
|
78
|
+
>
|
|
79
|
+
<thead>
|
|
80
|
+
<tr style={{ borderBottom: '1px solid #ddd', textAlign: 'left' }}>
|
|
81
|
+
<th style={{ padding: '8px' }}>Touche</th>
|
|
82
|
+
<th style={{ padding: '8px' }}>Action</th>
|
|
83
|
+
</tr>
|
|
84
|
+
</thead>
|
|
85
|
+
<tbody>
|
|
86
|
+
<tr>
|
|
87
|
+
<td style={{ padding: '8px' }}><code>Flèche bas</code></td>
|
|
88
|
+
<td style={{ padding: '8px' }}>
|
|
89
|
+
Ouvre le menu et déplace le focus sur la première option (ou la suivante si une option est déjà sélectionnée)
|
|
90
|
+
</td>
|
|
91
|
+
</tr>
|
|
92
|
+
<tr>
|
|
93
|
+
<td style={{ padding: '8px' }}><code>Flèche haut</code></td>
|
|
94
|
+
<td style={{ padding: '8px' }}>
|
|
95
|
+
Ouvre le menu et déplace le focus sur la dernière option
|
|
96
|
+
</td>
|
|
97
|
+
</tr>
|
|
98
|
+
<tr>
|
|
99
|
+
<td style={{ padding: '8px' }}><code>Flèches haut/bas</code></td>
|
|
100
|
+
<td style={{ padding: '8px' }}>
|
|
101
|
+
Déplace le focus dans la liste des options (sans modifier la sélection)
|
|
102
|
+
</td>
|
|
103
|
+
</tr>
|
|
104
|
+
<tr>
|
|
105
|
+
<td style={{ padding: '8px' }}><code>Entrée</code></td>
|
|
106
|
+
<td style={{ padding: '8px' }}>
|
|
107
|
+
Sélectionne l'option active et ferme le menu
|
|
108
|
+
</td>
|
|
109
|
+
</tr>
|
|
110
|
+
<tr>
|
|
111
|
+
<td style={{ padding: '8px' }}><code>Échap</code></td>
|
|
112
|
+
<td style={{ padding: '8px' }}>
|
|
113
|
+
Ferme le menu sans modifier la sélection
|
|
114
|
+
</td>
|
|
115
|
+
</tr>
|
|
116
|
+
<tr>
|
|
117
|
+
<td style={{ padding: '8px' }}><code>Caractères imprimables</code></td>
|
|
118
|
+
<td style={{ padding: '8px' }}>
|
|
119
|
+
Déplace le focus sur l'option commençant par le(s) caractère(s) saisi(s)
|
|
120
|
+
</td>
|
|
121
|
+
</tr>
|
|
122
|
+
</tbody>
|
|
123
|
+
</table>
|
|
124
|
+
<p style={{ marginTop: '1em' }}>
|
|
125
|
+
<strong>Note :</strong> Le focus DOM reste toujours sur l'élément <em>combobox</em>, tandis que le focus visuel est géré via <code>aria-activedescendant</code>.
|
|
126
|
+
</p>
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
<div className="implementation-section">
|
|
130
|
+
<h2>Spécificités d'implémentation</h2>
|
|
131
|
+
<p>
|
|
132
|
+
Conformément aux recommandations WAI-ARIA pour les combobox avec auto-complétion, notre implémentation :
|
|
133
|
+
</p>
|
|
134
|
+
<ul>
|
|
135
|
+
<li>Maintient le focus DOM sur l'input combobox pendant toute l'interaction</li>
|
|
136
|
+
<li>Utilise <code>aria-activedescendant</code> pour indiquer l'option active aux technologies d'assistance</li>
|
|
137
|
+
<li>Sépare clairement la navigation (flèches) de la sélection (Entrée)</li>
|
|
138
|
+
<li>Gère correctement les états visuels et programmatiques des options</li>
|
|
139
|
+
<li>Implémente un filtrage en temps réel des options basé sur la saisie utilisateur</li>
|
|
140
|
+
<li>Désactive l'auto-complétion du navigateur pour éviter les conflits</li>
|
|
141
|
+
</ul>
|
|
142
|
+
</div>
|
|
143
|
+
</div>
|
|
144
|
+
|
|
145
|
+
<div className="accessibility-guide">
|
|
146
|
+
<div className="header">
|
|
147
|
+
<h1>Accessibilité</h1>
|
|
148
|
+
</div>
|
|
149
|
+
|
|
150
|
+
<div class="mt-2">
|
|
151
|
+
<p>Rapport d’audit manuel : <a href="/audits/SySelect.xlsx" style={{ color:'#0C41BD' }}>Voir le rapport</a></p>
|
|
152
|
+
<p style={{ color: 'grey', fontSize: '14px', marginTop: '0px' }}>Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/787" target="_blank" style={{color:'#0C41BD'}}>issue #787</a>), (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/931" target="_blank" style={{color:'#0C41BD'}}>issue #931</a>)</p>
|
|
153
|
+
</div>
|
|
154
|
+
|
|
155
|
+
<br />
|
|
156
|
+
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
<style>
|
|
160
|
+
{
|
|
161
|
+
`
|
|
162
|
+
.accessibility-guide {
|
|
163
|
+
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
|
164
|
+
max-width: 1200px;
|
|
165
|
+
margin: 0 auto;
|
|
166
|
+
padding: 20px;
|
|
167
|
+
color: #333;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.intro-section {
|
|
171
|
+
display: flex;
|
|
172
|
+
align-items: center;
|
|
173
|
+
margin-bottom: 30px;
|
|
174
|
+
background-color: #f8f9fa;
|
|
175
|
+
padding: 20px;
|
|
176
|
+
border-radius: 8px;
|
|
177
|
+
border-left: 5px solid #0077cc;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.accessibility-icon {
|
|
181
|
+
width: 60px;
|
|
182
|
+
height: 60px;
|
|
183
|
+
margin-right: 20px;
|
|
184
|
+
flex-shrink: 0;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.intro-text {
|
|
188
|
+
font-size: 1.1em;
|
|
189
|
+
line-height: 1.6;
|
|
190
|
+
margin: 0;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.criteria-section {
|
|
194
|
+
margin-bottom: 40px;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.criteria-section h2,
|
|
198
|
+
.keyboard-section h2,
|
|
199
|
+
.implementation-section h2 {
|
|
200
|
+
border-bottom: 2px solid #eaecef;
|
|
201
|
+
padding-bottom: 10px;
|
|
202
|
+
margin-top: 30px;
|
|
203
|
+
margin-bottom: 20px;
|
|
204
|
+
color: #0077cc;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.criteria-card {
|
|
208
|
+
background-color: #fff;
|
|
209
|
+
border-radius: 8px;
|
|
210
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
211
|
+
padding: 20px;
|
|
212
|
+
margin-bottom: 20px;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.criteria-header {
|
|
216
|
+
display: flex;
|
|
217
|
+
align-items: center;
|
|
218
|
+
margin-bottom: 15px;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.criteria-icon {
|
|
222
|
+
font-size: 1.8em;
|
|
223
|
+
margin-right: 15px;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.criteria-header h3 {
|
|
227
|
+
margin: 0;
|
|
228
|
+
font-size: 1.3em;
|
|
229
|
+
color: #0077cc;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.criteria-card ul {
|
|
233
|
+
margin: 0;
|
|
234
|
+
padding-left: 20px;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.criteria-card li {
|
|
238
|
+
margin-bottom: 8px;
|
|
239
|
+
line-height: 1.5;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.keyboard-section {
|
|
243
|
+
background-color: #f0f7ff;
|
|
244
|
+
padding: 20px;
|
|
245
|
+
border-radius: 8px;
|
|
246
|
+
margin-bottom: 30px;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.implementation-section {
|
|
250
|
+
background-color: #f5f5f5;
|
|
251
|
+
padding: 20px;
|
|
252
|
+
border-radius: 8px;
|
|
253
|
+
margin-bottom: 30px;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.implementation-section ul {
|
|
257
|
+
padding-left: 20px;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.implementation-section li {
|
|
261
|
+
margin-bottom: 10px;
|
|
262
|
+
line-height: 1.5;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
code {
|
|
266
|
+
background-color: #f0f0f0;
|
|
267
|
+
padding: 2px 5px;
|
|
268
|
+
border-radius: 3px;
|
|
269
|
+
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
|
|
270
|
+
font-size: 0.9em;
|
|
271
|
+
}
|
|
272
|
+
`
|
|
273
|
+
}
|
|
274
|
+
</style>
|
|
@@ -10,6 +10,8 @@ export interface UseSySelectKeyboardOptions {
|
|
|
10
10
|
toggleMenu: (skipInitialFocus?: boolean) => void
|
|
11
11
|
selectItem: (item: ItemType | null | undefined, event?: Event) => void
|
|
12
12
|
getItemText: (item: unknown) => unknown
|
|
13
|
+
optionIdPrefix?: string
|
|
14
|
+
focusListItem?: boolean
|
|
13
15
|
}
|
|
14
16
|
|
|
15
17
|
export function useSySelectKeyboard(options: UseSySelectKeyboardOptions) {
|
|
@@ -19,8 +21,19 @@ export function useSySelectKeyboard(options: UseSySelectKeyboardOptions) {
|
|
|
19
21
|
toggleMenu,
|
|
20
22
|
selectItem,
|
|
21
23
|
getItemText,
|
|
24
|
+
optionIdPrefix = 'option',
|
|
25
|
+
focusListItem = true,
|
|
22
26
|
} = options
|
|
23
27
|
|
|
28
|
+
const getOptionId = (index: number) => `${optionIdPrefix}-${index}`
|
|
29
|
+
const parseIndexFromId = (id: string | null | undefined) => {
|
|
30
|
+
if (!id) return NaN
|
|
31
|
+
const parts = id.split('-')
|
|
32
|
+
const maybeIndex = parts[parts.length - 1] as string
|
|
33
|
+
const parsed = parseInt(maybeIndex)
|
|
34
|
+
return Number.isNaN(parsed) ? NaN : parsed
|
|
35
|
+
}
|
|
36
|
+
|
|
24
37
|
// État central pour le focus et la navigation
|
|
25
38
|
const activeDescendantId = ref('')
|
|
26
39
|
const lastFocusedIndex = ref(-1)
|
|
@@ -35,13 +48,13 @@ export function useSySelectKeyboard(options: UseSySelectKeyboardOptions) {
|
|
|
35
48
|
// Vérifier si l'index est valide
|
|
36
49
|
if (index >= 0 && index < formattedItems.value.length) {
|
|
37
50
|
// Mettre à jour l'ID pour ARIA
|
|
38
|
-
activeDescendantId.value =
|
|
51
|
+
activeDescendantId.value = getOptionId(index)
|
|
39
52
|
// Stocker l'index pour référence future
|
|
40
53
|
lastFocusedIndex.value = index
|
|
41
54
|
|
|
42
55
|
// Appliquer les changements visuels au prochain cycle de rendu
|
|
43
56
|
nextTick(() => {
|
|
44
|
-
const element = document.getElementById(
|
|
57
|
+
const element = document.getElementById(getOptionId(index))
|
|
45
58
|
if (element) {
|
|
46
59
|
// Supprimer le focus visuel des autres éléments
|
|
47
60
|
const allItems = document.querySelectorAll('.v-list-item')
|
|
@@ -52,6 +65,10 @@ export function useSySelectKeyboard(options: UseSySelectKeyboardOptions) {
|
|
|
52
65
|
})
|
|
53
66
|
|
|
54
67
|
element.setAttribute('tabindex', '0')
|
|
68
|
+
element.setAttribute('tabindex', focusListItem ? '0' : '-1')
|
|
69
|
+
if (focusListItem) {
|
|
70
|
+
element.focus()
|
|
71
|
+
}
|
|
55
72
|
element.classList.add('keyboard-focused')
|
|
56
73
|
element.scrollIntoView({ block: 'nearest' })
|
|
57
74
|
}
|
|
@@ -108,8 +125,7 @@ export function useSySelectKeyboard(options: UseSySelectKeyboardOptions) {
|
|
|
108
125
|
|
|
109
126
|
// Sinon, essayer de récupérer l'index à partir de l'ID ARIA
|
|
110
127
|
if (activeDescendantId.value) {
|
|
111
|
-
const
|
|
112
|
-
const activeIndex = activeIndexString ? parseInt(activeIndexString) : NaN
|
|
128
|
+
const activeIndex = parseIndexFromId(activeDescendantId.value)
|
|
113
129
|
if (!isNaN(activeIndex) && activeIndex >= 0 && activeIndex < formattedItems.value.length) {
|
|
114
130
|
// Synchroniser lastFocusedIndex avec l'index trouvé
|
|
115
131
|
lastFocusedIndex.value = activeIndex
|
|
@@ -300,16 +316,6 @@ export function useSySelectKeyboard(options: UseSySelectKeyboardOptions) {
|
|
|
300
316
|
}
|
|
301
317
|
|
|
302
318
|
const handleTabKey = () => {
|
|
303
|
-
if (isOpen.value && activeDescendantId.value) {
|
|
304
|
-
// Trouver l'item actuellement focusé
|
|
305
|
-
const currentIndexString = activeDescendantId.value.split('-')?.[1]
|
|
306
|
-
const currentIndex = currentIndexString ? parseInt(currentIndexString) : NaN
|
|
307
|
-
if (!isNaN(currentIndex) && currentIndex >= 0 && currentIndex < formattedItems.value.length) {
|
|
308
|
-
const currentItem = formattedItems.value[currentIndex]
|
|
309
|
-
// Sélectionner l'item qui a le focus
|
|
310
|
-
selectItem(currentItem)
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
319
|
// Fermer le menu (la navigation Tab normale continuera après)
|
|
314
320
|
if (isOpen.value) {
|
|
315
321
|
isOpen.value = false
|
|
@@ -322,8 +328,7 @@ export function useSySelectKeyboard(options: UseSySelectKeyboardOptions) {
|
|
|
322
328
|
// Watch activeDescendantId pour synchroniser lastFocusedIndex
|
|
323
329
|
watch(activeDescendantId, (newId) => {
|
|
324
330
|
if (newId) {
|
|
325
|
-
const
|
|
326
|
-
const index = indexString ? parseInt(indexString) : NaN
|
|
331
|
+
const index = parseIndexFromId(newId)
|
|
327
332
|
if (!isNaN(index) && index >= 0 && index < formattedItems.value.length) {
|
|
328
333
|
// Synchroniser lastFocusedIndex avec l'ID ARIA
|
|
329
334
|
lastFocusedIndex.value = index
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Meta, Canvas, Controls } from '@storybook/blocks';
|
|
2
|
+
import '../../../stories/styles/shared.css';
|
|
3
|
+
import * as SyCheckBoxGroupStories from './SyCheckBoxGroup.stories';
|
|
4
|
+
|
|
5
|
+
<Meta of={SyCheckBoxGroupStories} />
|
|
6
|
+
|
|
7
|
+
<div className="header">
|
|
8
|
+
<h1>SyCheckBoxGroup</h1>
|
|
9
|
+
<p>Le composant `SyCheckBoxGroup` est un groupe de cases à cocher basé sur `SyCheckbox`, conforme au style du Design System et qui respecte les règles d'accessibilité <abbr title="Référentiel Général d'Amélioration de l'Accessibilité">RGAA</abbr>.</p>
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
Il étend les fonctionnalités de base avec :
|
|
13
|
+
|
|
14
|
+
- La gestion d’un groupe d’options via la prop `options`
|
|
15
|
+
- Un mode **sélection unique** (par défaut) ou **multiple** (`multiple`)
|
|
16
|
+
- Un système de validation avancé (erreur, avertissement, succès)
|
|
17
|
+
|
|
18
|
+
<Canvas of={SyCheckBoxGroupStories.Default} />
|
|
19
|
+
|
|
20
|
+
# API
|
|
21
|
+
|
|
22
|
+
<Controls of={SyCheckBoxGroupStories.Default} />
|
|
23
|
+
|
|
24
|
+
## Validation
|
|
25
|
+
|
|
26
|
+
Le composant supporte trois types de validation :
|
|
27
|
+
|
|
28
|
+
- Règles d'erreur standard (`customRules`)
|
|
29
|
+
- Règles d'avertissement (`customWarningRules`)
|
|
30
|
+
- Règles de succès (`customSuccessRules`)
|
|
31
|
+
|
|
32
|
+
<a href="/?path=/docs/guide-du-dev-guide-de-validation-des-formulaires--docs" className="action-link">Pour plus d'informations sur la validation, consultez le guide de validation des formulaires.</a>
|