@cnamts/synapse 1.0.7 → 1.0.9
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-CHDLz2EO.js → DateFilter-BylukfjR.js} +1 -1
- package/dist/{NumberFilter-DXNQ4Uls.js → NumberFilter-C_bUk9o1.js} +1 -1
- package/dist/{PeriodFilter-C8Qf3Jcn.js → PeriodFilter-dVOmcfmt.js} +1 -1
- package/dist/{SelectFilter-B2Ejs4Cb.js → SelectFilter-BW8KpXkQ.js} +1 -1
- package/dist/{TextFilter-CfR5_A1S.js → TextFilter-diwVzTz7.js} +1 -1
- package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +2785 -2770
- package/dist/components/Amelipro/AmeliproCallback/AmeliproCallback.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +7 -7
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.d.ts +30 -0
- package/dist/components/Amelipro/AmeliproContentLayout/index.d.ts +2 -0
- package/dist/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.d.ts +24 -0
- package/dist/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.d.ts +128 -0
- package/dist/components/Amelipro/AmeliproErrorTemplate/errorTemplateTypes.d.ts +2 -0
- package/dist/components/Amelipro/AmeliproErrorTemplate/types.d.ts +7 -0
- package/dist/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.d.ts +91 -0
- package/dist/components/Amelipro/AmeliproFooter/AmeliproFooter.d.ts +18 -18
- package/dist/components/Amelipro/AmeliproHeader/AmeliproHeader.d.ts +9 -9
- package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproMenu/AmeliproMenu.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +2766 -2751
- package/dist/components/Amelipro/AmeliproStateTile/AmeliproStateTile.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +2766 -2751
- package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +388 -386
- package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +632 -630
- package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproTransmission/AmeliproTransmission.d.ts +9 -9
- package/dist/components/CookieBanner/CookieBanner.d.ts +116 -114
- package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +465 -465
- package/dist/components/CookiesSelection/CookiesSelection.d.ts +103 -101
- package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +106 -1510
- package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +0 -1
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +1 -1
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +634 -632
- package/dist/components/DataList/DataList.d.ts +1 -1
- package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +2875 -2843
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +1446 -1430
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +643 -641
- package/dist/components/DialogBox/DialogBox.d.ts +172 -169
- package/dist/components/DialogBox/config.d.ts +3 -3
- package/dist/components/DialogBox/locales.d.ts +2 -0
- package/dist/components/DialogBox/useDraggable.d.ts +8 -0
- package/dist/components/FilterSideBar/FilterSideBar.d.ts +159 -157
- package/dist/components/FooterBar/FooterBar.d.ts +5 -5
- package/dist/components/HeaderBar/HeaderBar.d.ts +2 -2
- package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +1 -1
- package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +1 -1
- package/dist/components/LangBtn/LangBtn.d.ts +169 -167
- package/dist/components/LogoBrandSection/LogoBrandSection.d.ts +1 -1
- package/dist/components/NirField/NirField.d.ts +1277 -1273
- package/dist/components/PeriodField/PeriodField.d.ts +5752 -5688
- package/dist/components/PhoneField/PhoneField.d.ts +647 -636
- package/dist/components/SearchListField/SearchListField.d.ts +105 -105
- package/dist/components/SyAlert/SyAlert.d.ts +29 -29
- package/dist/components/SyTextArea/SyTextArea.d.ts +389 -387
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +207 -175
- package/dist/components/Tables/SyTable/SyTable.d.ts +208 -176
- package/dist/components/Tables/common/SyTableFilter.d.ts +1 -1
- package/dist/components/Tables/common/SyTablePagination.d.ts +106 -1510
- package/dist/components/Tables/common/filters/DateFilter.d.ts +1 -1
- package/dist/components/Tables/common/filters/NumberFilter.d.ts +1 -1
- package/dist/components/Tables/common/filters/PeriodFilter.d.ts +1 -1
- package/dist/components/Tables/common/filters/SelectFilter.d.ts +1 -1
- package/dist/components/Tables/common/filters/TextFilter.d.ts +1 -1
- package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +82 -82
- package/dist/components/Tables/common/tableProps.d.ts +11 -0
- package/dist/components/Tables/common/types.d.ts +8 -4
- package/dist/components/Tables/common/useStoredOptions.d.ts +14 -0
- package/dist/components/Tables/common/useTableHeaders.d.ts +3 -2
- package/dist/components/Tables/common/useTableItems.d.ts +0 -1
- package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +16 -16
- package/dist/components/index.d.ts +4 -0
- package/dist/design-system-v3.js +166 -162
- package/dist/design-system-v3.umd.cjs +269 -268
- package/dist/main-2eWGB7zZ.js +30203 -0
- package/dist/services/NotificationService.d.ts +1 -0
- package/dist/style.css +1 -1
- package/dist/vuetifyConfig.d.ts +6 -6
- package/package.json +1 -1
- package/src/assets/amelipro/img/ico_pdf.svg +15 -0
- package/src/assets/amelipro/img/navigateurs.png +0 -0
- package/src/assets/amelipro/img/visuel_deconnexion.svg +973 -0
- package/src/assets/amelipro/img/visuel_erreur_403.svg +3652 -0
- package/src/assets/amelipro/img/visuel_erreur_404.svg +1801 -0
- package/src/assets/amelipro/img/visuel_erreur_500.svg +989 -0
- package/src/assets/amelipro/img/visuel_erreur_503.svg +1005 -0
- package/src/assets/amelipro/img/visuel_navigateur_obsolete.svg +828 -0
- package/src/assets/amelipro/pdf/charte-pour-pdf.pdf +0 -0
- package/src/components/Accordion/Accessibilite/AccessibilityGuide.mdx +5 -2
- package/src/components/Accordion/Accordion.mdx +5 -3
- package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordion.stories.ts +258 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.stories.ts +321 -0
- package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.stories.ts +656 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.mdx +1 -3
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.stories.ts +208 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.stories.ts +562 -0
- package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.stories.ts +480 -0
- package/src/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.stories.ts +267 -0
- package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.stories.ts +287 -6
- package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.stories.ts +433 -0
- package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.mdx +15 -0
- package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.stories.ts +44 -0
- package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.vue +55 -0
- package/src/components/Amelipro/AmeliproContentLayout/__tests__/AmeliproContentLayout.spec.ts +20 -0
- package/src/components/Amelipro/AmeliproContentLayout/__tests__/__snapshots__/AmeliproContentLayout.spec.ts.snap +24 -0
- package/src/components/Amelipro/AmeliproContentLayout/index.ts +3 -0
- package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.mdx +18 -0
- package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.stories.ts +68 -0
- package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.vue +73 -0
- package/src/components/Amelipro/AmeliproCopyBtn/__tests__/AmeliproCopyBtn.spec.ts +20 -0
- package/src/components/Amelipro/AmeliproCopyBtn/__tests__/__snapshots__/AmeliproCopyBtn.spec.ts.snap +84 -0
- package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.stories.ts +422 -0
- package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +2 -2
- package/src/components/Amelipro/AmeliproCustomSelector/__tests__/__snapshots__/AmeliproCustomSelector.spec.ts.snap +4 -6
- package/src/components/Amelipro/AmeliproDisclosure/AmeliproDisclosure.stories.ts +92 -0
- package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.mdx +23 -0
- package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.stories.ts +386 -0
- package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +187 -0
- package/src/components/Amelipro/AmeliproErrorTemplate/__tests__/AmeliproErrorTemplate.spec.ts +31 -0
- package/src/components/Amelipro/AmeliproErrorTemplate/__tests__/__snapshots__/AmeliproErrorTemplate.spec.ts.snap +185 -0
- package/src/components/Amelipro/AmeliproErrorTemplate/errorTemplateTypes.ts +85 -0
- package/src/components/Amelipro/AmeliproErrorTemplate/types.d.ts +7 -0
- package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.mdx +15 -0
- package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.stories.ts +71 -0
- package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.vue +161 -0
- package/src/components/Amelipro/AmeliproFilePreview/__tests__/AmeliproFilePreview.spec.ts +28 -0
- package/src/components/Amelipro/AmeliproFilePreview/__tests__/__snapshots__/AmeliproFilePreview.spec.ts.snap +209 -0
- package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.stories.ts +194 -0
- package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.stories.ts +639 -0
- package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.stories.ts +648 -0
- package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.stories.ts +392 -0
- package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.stories.ts +351 -0
- package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.stories.ts +634 -38
- package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.vue +1 -1
- package/src/components/Amelipro/ServiceMenu/ServiceMenu.mdx +5 -3
- package/src/components/Amelipro/StructureMenu/StructureMenu.mdx +5 -3
- package/src/components/Amelipro/UserMenu/UserMenu.mdx +5 -3
- package/src/components/BackBtn/Accessibilite.mdx +6 -2
- package/src/components/BackBtn/BackBtn.mdx +5 -3
- package/src/components/BackBtn/BackBtn.stories.ts +1 -0
- package/src/components/BackBtn/Usages.mdx +5 -3
- package/src/components/BackToTopBtn/Accessibilite.mdx +6 -2
- package/src/components/BackToTopBtn/BackToTopBtn.mdx +5 -4
- package/src/components/BackToTopBtn/Usages.mdx +5 -3
- package/src/components/ChipList/Accessibilite.mdx +6 -2
- package/src/components/ChipList/ChipList.mdx +5 -3
- package/src/components/CollapsibleList/Accessibilite.mdx +6 -2
- package/src/components/CollapsibleList/CollapsibleList.mdx +5 -3
- package/src/components/ContextualMenu/Accessibilite.mdx +6 -2
- package/src/components/ContextualMenu/ContextualMenu.mdx +7 -4
- package/src/components/ContextualMenu/Usages.mdx +5 -3
- package/src/components/CookieBanner/Accessibilite.mdx +6 -2
- package/src/components/CookieBanner/CookieBanner.mdx +5 -8
- package/src/components/CopyBtn/Accessibilite.mdx +6 -2
- package/src/components/CopyBtn/CopyBtn.mdx +5 -3
- package/src/components/CopyBtn/Usages.mdx +5 -3
- package/src/components/Customs/Selects/SelectBtnField/Accessibilite.mdx +6 -2
- package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.mdx +7 -4
- package/src/components/Customs/Selects/SelectBtnField/Usages.mdx +5 -3
- package/src/components/Customs/Selects/SelectOverview.mdx +27 -60
- package/src/components/Customs/Selects/SyBtnSelect/Accessibilite.mdx +6 -2
- package/src/components/Customs/Selects/SyBtnSelect/SyBtnSelect.mdx +6 -4
- package/src/components/Customs/Selects/SyInputSelect/Accessibilite.mdx +6 -2
- package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.mdx +9 -1
- package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +14 -0
- package/src/components/Customs/Selects/SySelect/Accessibilite.mdx +7 -3
- package/src/components/Customs/Selects/SySelect/SySelect.mdx +6 -4
- package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +2 -2
- package/src/components/Customs/Selects/SySelect/SySelect.vue +289 -375
- package/src/components/Customs/Selects/SySelect/Usages.mdx +5 -3
- package/src/components/Customs/Selects/SySelect/composables/tests/useSySelectKeyboard.spec.ts +0 -10
- package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +0 -5
- package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +184 -25
- package/src/components/Customs/SyCheckbox/Accessibilite.mdx +6 -3
- package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +5 -3
- package/src/components/Customs/SyIcon/Accessibilite.mdx +5 -5
- package/src/components/Customs/SyIcon/SyIcon.mdx +5 -7
- package/src/components/Customs/SyPagination/SyPagination.mdx +7 -4
- package/src/components/Customs/SyTabs/Accessibilite.mdx +4 -1
- package/src/components/Customs/SyTabs/SyTabs.mdx +5 -3
- package/src/components/Customs/SyTabs/SyTabs.vue +87 -24
- package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +18 -0
- package/src/components/Customs/SyTextField/Accessibilite.mdx +6 -2
- package/src/components/Customs/SyTextField/SyTextField.mdx +5 -6
- package/src/components/Customs/SyTextField/SyTextField.vue +17 -4
- package/src/components/Customs/SyTextField/Usages.mdx +1 -0
- package/src/components/DataList/Accessibilite.mdx +6 -2
- package/src/components/DataList/DataList.mdx +5 -3
- package/src/components/DataListGroup/Accessibilite.mdx +6 -2
- package/src/components/DataListGroup/DataListGroup.mdx +5 -3
- package/src/components/DatePicker/Accessibilite.mdx +6 -2
- package/src/components/DatePicker/CalendarMode/DatePicker.mdx +5 -3
- package/src/components/DatePicker/CalendarMode/DatePicker.vue +6 -3
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.mdx +5 -6
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +14 -3
- package/src/components/DatePicker/DatePickerOverview.mdx +5 -3
- package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.mdx +5 -3
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +37 -32
- package/src/components/DatePicker/DateTextInput/NoCalendar.mdx +5 -3
- package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +3 -0
- package/src/components/DatePicker/Usages.mdx +5 -3
- package/src/components/DiacriticPicker/DiacriticPicker.mdx +5 -3
- package/src/components/DialogBox/Accessibilite.mdx +6 -2
- package/src/components/DialogBox/DialogBox.mdx +5 -3
- package/src/components/DialogBox/DialogBox.stories.ts +83 -0
- package/src/components/DialogBox/DialogBox.vue +41 -6
- package/src/components/DialogBox/Usages.mdx +5 -3
- package/src/components/DialogBox/config.ts +3 -3
- package/src/components/DialogBox/locales.ts +2 -0
- package/src/components/DialogBox/tests/DialogBox.spec.ts +132 -3
- package/src/components/DialogBox/tests/__snapshots__/DialogBox.spec.ts.snap +14 -11
- package/src/components/DialogBox/useDraggable.ts +98 -0
- package/src/components/DownloadBtn/Accessibilite.mdx +6 -2
- package/src/components/DownloadBtn/DownloadBtn.mdx +7 -4
- package/src/components/DownloadBtn/DownloadBtn.vue +1 -1
- package/src/components/DownloadBtn/tests/DownloadBtn.spec.ts +2 -3
- package/src/components/ErrorPage/Accessibilite.mdx +6 -2
- package/src/components/ErrorPage/ErrorPage.mdx +5 -3
- package/src/components/ExternalLinks/Accessibilite.mdx +6 -2
- package/src/components/ExternalLinks/ExternalLinks.mdx +5 -8
- package/src/components/ExternalLinks/Usages.mdx +5 -3
- package/src/components/FileList/Accessibilite.mdx +6 -2
- package/src/components/FileList/FileList.mdx +5 -4
- package/src/components/FilePreview/Accessibilite.mdx +6 -2
- package/src/components/FilePreview/FilePreview.mdx +7 -7
- package/src/components/FileUpload/Accessibilite.mdx +6 -2
- package/src/components/FileUpload/FileUpload.mdx +7 -4
- package/src/components/FilterInline/Accessibilite.mdx +6 -2
- package/src/components/FilterInline/FilterInline.mdx +5 -5
- package/src/components/FilterSideBar/Accessibilite.mdx +6 -2
- package/src/components/FilterSideBar/FilterSideBar.mdx +5 -4
- package/src/components/FooterBar/Accessibilite.mdx +6 -2
- package/src/components/FooterBar/FooterBar.mdx +5 -3
- package/src/components/FranceConnectBtn/Accessibilite.mdx +6 -2
- package/src/components/FranceConnectBtn/FranceConnectBtn.mdx +5 -3
- package/src/components/HeaderBar/Accessibilite.mdx +6 -2
- package/src/components/HeaderBar/HeaderBar.mdx +4 -4
- package/src/components/HeaderBar/HeaderBurgerMenu/Accessibilite.mdx +6 -2
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.mdx +9 -13
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.mdx +1 -1
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.mdx +5 -5
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.mdx +1 -2
- package/src/components/HeaderBar/Usages.mdx +5 -3
- package/src/components/HeaderLoading/Accessibilite.mdx +2 -1
- package/src/components/HeaderLoading/HeaderLoading.mdx +5 -3
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.mdx +1 -8
- package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +17 -9
- package/src/components/HeaderToolbar/Accessibilite.mdx +6 -2
- package/src/components/HeaderToolbar/HeaderToolbar.mdx +5 -3
- package/src/components/LangBtn/Accessibilite.mdx +6 -2
- package/src/components/LangBtn/LangBtn.mdx +5 -3
- package/src/components/Logo/Accessibilite.mdx +6 -2
- package/src/components/Logo/Logo.mdx +5 -3
- package/src/components/LogoBrandSection/Accessibilite.mdx +6 -2
- package/src/components/LogoBrandSection/LogoBrandSection.mdx +5 -3
- package/src/components/MaintenancePage/Accessibilite.mdx +6 -2
- package/src/components/MaintenancePage/MaintenancePage.mdx +6 -4
- package/src/components/NirField/Accessibilite.mdx +6 -2
- package/src/components/NirField/NirField.mdx +5 -7
- package/src/components/NirField/NirField.vue +13 -118
- package/src/components/NirField/Usages.mdx +5 -3
- package/src/components/NotFoundPage/Accessibilite.mdx +6 -2
- package/src/components/NotFoundPage/NotFoundPage.mdx +6 -4
- package/src/components/NotificationBar/Accessibilite.mdx +6 -2
- package/src/components/NotificationBar/NotificationBar.mdx +5 -1
- package/src/components/NotificationBar/NotificationBar.stories.ts +128 -2
- package/src/components/NotificationBar/NotificationBar.vue +16 -1
- package/src/components/NotificationBar/Usages.mdx +5 -3
- package/src/components/NotificationBar/tests/NotificationBar.spec.ts +65 -0
- package/src/components/PageContainer/Accessibilite.mdx +6 -2
- package/src/components/PageContainer/PageContainer.mdx +5 -3
- package/src/components/PaginatedTable/Accessibilite.mdx +6 -2
- package/src/components/PaginatedTable/PaginatedTable.mdx +5 -3
- package/src/components/PasswordField/Accessibilite.mdx +6 -2
- package/src/components/PasswordField/PasswordField.mdx +5 -3
- package/src/components/PeriodField/Accessibilite.mdx +6 -2
- package/src/components/PeriodField/PeriodField.mdx +5 -3
- package/src/components/PhoneField/Accessibilite.mdx +6 -2
- package/src/components/PhoneField/PhoneField.mdx +5 -3
- package/src/components/PhoneField/PhoneField.stories.ts +17 -218
- package/src/components/PhoneField/PhoneField.vue +17 -11
- package/src/components/PhoneField/Usages.mdx +5 -3
- package/src/components/PhoneField/tests/PhoneField.spec.ts +51 -15
- package/src/components/RangeField/Accessibilite.mdx +6 -2
- package/src/components/RangeField/RangeField.mdx +5 -7
- package/src/components/RatingPicker/Accessibilite.mdx +6 -2
- package/src/components/RatingPicker/RatingPicker.mdx +5 -4
- package/src/components/SearchListField/Accessibilite.mdx +6 -2
- package/src/components/SearchListField/SearchListField.mdx +7 -5
- package/src/components/SkipLink/Accessibilite.mdx +6 -2
- package/src/components/SkipLink/SkipLink.mdx +5 -3
- package/src/components/SkipLink/Usages.mdx +5 -3
- package/src/components/SocialMediaLinks/Accessibilite.mdx +6 -2
- package/src/components/SocialMediaLinks/SocialMediaLinks.mdx +5 -3
- package/src/components/SubHeader/Accessibilite.mdx +6 -2
- package/src/components/SubHeader/SubHeader.mdx +5 -3
- package/src/components/SyAlert/Accessibilite.mdx +6 -2
- package/src/components/SyAlert/SyAlert.mdx +7 -4
- package/src/components/SyAlert/Usages.mdx +5 -3
- package/src/components/SyTextArea/SyTextArea.mdx +5 -3
- package/src/components/TableToolbar/Accessibilite.mdx +6 -2
- package/src/components/TableToolbar/TableToolbar.mdx +6 -3
- package/src/components/Tables/SyServerTable/SyServerTable.mdx +5 -3
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +4 -0
- package/src/components/Tables/SyServerTable/SyServerTable.vue +36 -74
- package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +46 -7
- package/src/components/Tables/SyTable/SyTable.mdx +5 -3
- package/src/components/Tables/SyTable/SyTable.stories.ts +5 -1
- package/src/components/Tables/SyTable/SyTable.vue +38 -60
- package/src/components/Tables/SyTable/tests/SyTable.spec.ts +9 -7
- package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +6 -1
- package/src/components/Tables/common/tableProps.ts +53 -0
- package/src/components/Tables/common/tableStyles.scss +4 -0
- package/src/components/Tables/common/tests/tableUtils.spec.ts +4 -151
- package/src/components/Tables/common/types.ts +12 -2
- package/src/components/Tables/common/useStoredOptions.ts +36 -0
- package/src/components/Tables/common/useTableHeaders.ts +10 -7
- package/src/components/Tables/common/useTableItems.ts +0 -20
- package/src/components/ToolbarContainer/ToolbarContainer.mdx +1 -0
- package/src/components/UploadWorkflow/Accessibilite.mdx +6 -2
- package/src/components/UploadWorkflow/UploadWorkflow.mdx +5 -7
- package/src/components/UserMenuBtn/Accessibilite.mdx +6 -2
- package/src/components/UserMenuBtn/UserMenuBtn.mdx +5 -3
- package/src/components/index.ts +4 -0
- package/src/services/NotificationService.ts +9 -0
- package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +2 -65
- package/src/stories/Accessibilite/Audit/RGAA.mdx +2 -20
- package/src/stories/Accessibilite/AuditDesignSystem.mdx +4 -47
- package/src/stories/Accessibilite/Avancement/Avancement.mdx +5 -68
- package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +267 -198
- package/src/stories/Accessibilite/Introduction.mdx +2 -20
- package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +4 -21
- package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +3 -20
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +5 -50
- package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +3 -46
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/FauxPositifs.mdx +3 -39
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/Utilisation.mdx +4 -54
- package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +4 -51
- package/src/stories/Accessibilite/Vuetify/Vuetify.mdx +3 -11
- package/src/stories/Accessibilite/Vuetify/Vuetify.stories.ts +2 -2
- package/src/stories/Accessibilite/Vuetify/VuetifyItems.ts +6 -3
- package/src/stories/Components/Components.stories.ts +1 -1
- package/src/stories/Demarrer/CreerUneIssue.mdx +4 -1
- package/src/stories/Demarrer/PolitiqueDeConfidentialite.mdx +0 -2
- package/src/stories/Demarrer/PolitiqueDeConfidentialite.stories.ts +3 -0
- package/src/stories/Demarrer/Releases.mdx +0 -2
- package/src/stories/Demarrer/Releases.stories.ts +3 -0
- package/src/stories/DesignTokens/Arrondis.mdx +7 -1
- package/src/stories/DesignTokens/Colors.mdx +7 -1
- package/src/stories/DesignTokens/Conteneurs.mdx +6 -1
- package/src/stories/DesignTokens/Elevations.mdx +7 -1
- package/src/stories/DesignTokens/Espacements.mdx +7 -1
- package/src/stories/DesignTokens/Introduction.mdx +5 -3
- package/src/stories/DesignTokens/StylesTypographiques.mdx +6 -1
- package/src/stories/DesignTokens/Typographie.mdx +5 -1
- package/src/stories/Directives/SvgDirective.mdx +3 -22
- package/src/stories/EcoConception/EcoGuideComponent.vue +569 -0
- package/src/stories/EcoConception/Introduction.mdx +190 -13
- package/src/stories/EcoConception/Referentiel.mdx +13 -0
- package/src/stories/EcoConception/datas/back_rules.json +184 -0
- package/src/stories/EcoConception/datas/ux_ui_rules.json +1073 -0
- package/src/stories/EcoConception/ecoconception.stories.ts +30 -0
- package/src/stories/GuideDuDev/ClassesUtilitaires/DataUtilities.mdx +7 -3
- package/src/stories/GuideDuDev/ClassesUtilitaires/DomBrowserUtilities.mdx +9 -1
- package/src/stories/GuideDuDev/ClassesUtilitaires/FormattingUtilities.mdx +7 -3
- package/src/stories/GuideDuDev/ClassesUtilitaires/StorageUtilities.mdx +5 -1
- package/src/stories/GuideDuDev/ClassesUtilitaires/ValidationRules.mdx +7 -3
- package/src/stories/GuideDuDev/ClassesUtilitaires/ValidationUtilities.mdx +7 -3
- package/src/stories/GuideDuDev/ClassesUtilitaires/index.mdx +5 -2
- package/src/stories/GuideDuDev/FormValidationGuide.mdx +7 -3
- package/src/stories/GuideDuDev/LesBreackingChanges.mdx +6 -2
- package/src/stories/GuideDuDev/MigrationDepuisBridge.mdx +7 -2
- package/src/stories/GuideDuDev/MigrationDepuisVue2.mdx +7 -2
- package/src/stories/GuideDuDev/PortailAgent.mdx +6 -1
- package/src/stories/GuideDuDev/Theme.mdx +8 -2
- package/src/stories/GuideDuDev/UtiliserLesRules.mdx +7 -3
- package/src/stories/GuideDuDev/moduleDeNotification.mdx +8 -3
- package/src/stories/GuideDuDev/vuetifyOptions.mdx +5 -1
- package/src/stories/Templates/Templates.stories.ts +1 -1
- package/src/stories/styles/shared.css +16 -0
- package/src/utils/rules/Rules.mdx +26 -3
- package/src/utils/rules/doMatchPattern/DoMachPattern.mdx +27 -4
- package/src/utils/rules/isDateValid/IsDateValid.mdx +27 -4
- package/src/utils/rules/isExactLength/IsExactLenght.mdx +27 -4
- package/src/utils/rules/isHolidayDay/IsHolidayDay.mdx +27 -4
- package/src/utils/rules/isMaxLength/IsMaxLength.mdx +27 -4
- package/src/utils/rules/isMinLength/IsMinLength.mdx +27 -4
- package/src/utils/rules/isNotAfterDate/IsNotAfterDate.mdx +27 -4
- package/src/utils/rules/isNotAfterToday/IsNotAfterToday.mdx +27 -4
- package/src/utils/rules/isNotBeforeDate/IsNotBeforeDate.mdx +27 -4
- package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.mdx +27 -3
- package/src/utils/rules/isRequired/IsRequired.mdx +27 -4
- package/src/utils/rules/isValidEmail/IsValidEmail.mdx +27 -4
- package/dist/components/Tables/common/tableStorageUtils.d.ts +0 -69
- package/dist/components/Tables/common/tableUtils.d.ts +0 -79
- package/dist/main-C66C1BkG.js +0 -29878
- package/dist/stories/EcoConception/ecoDesignItems.d.ts +0 -4
- package/src/components/DownloadBtn/tests/__snapshots__/DownloadBtn.spec.ts.snap +0 -92
- package/src/components/Tables/common/tableStorageUtils.ts +0 -127
- package/src/components/Tables/common/tableUtils.ts +0 -102
- package/src/stories/EcoConception/ecoDesignItems.ts +0 -55
- package/src/stories/EcoConception/econception.stories.ts +0 -30
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
inheritAttrs: false,
|
|
5
5
|
})
|
|
6
6
|
import { mdiInformation, mdiMenuDown, mdiCloseCircle } from '@mdi/js'
|
|
7
|
-
import { ref, watch, onMounted,
|
|
7
|
+
import { ref, watch, onMounted, computed, nextTick, type PropType } from 'vue'
|
|
8
8
|
import { useSySelectKeyboard } from './composables/useSySelectKeyboard'
|
|
9
9
|
import { vRgaaSvgFix } from '../../../../directives/rgaaSvgFix'
|
|
10
10
|
import type { VList, VTextField } from 'vuetify/components'
|
|
@@ -136,12 +136,12 @@
|
|
|
136
136
|
const labelWidth = ref(0)
|
|
137
137
|
const labelRef = ref<HTMLElement | null>(null)
|
|
138
138
|
const list = ref<VList | null>(null)
|
|
139
|
+
const textInput = ref<InstanceType<typeof VTextField> | null>(null)
|
|
139
140
|
|
|
140
141
|
const toggleMenu = (skipInitialFocus = false) => {
|
|
141
142
|
if (props.readonly) return
|
|
142
143
|
isOpen.value = !isOpen.value
|
|
143
144
|
if (isOpen.value) {
|
|
144
|
-
updateListPosition()
|
|
145
145
|
// Initialiser la sélection à l'ouverture seulement si pas ouvert via clavier
|
|
146
146
|
if (!skipInitialFocus) {
|
|
147
147
|
nextTick(() => {
|
|
@@ -173,18 +173,6 @@
|
|
|
173
173
|
const inputId = ref(`sy-select-${Math.random().toString(36).substring(7)}`)
|
|
174
174
|
// Generate unique menu ID for each component instance to avoid conflicts and validation issues
|
|
175
175
|
const uniqueMenuId = ref(props.menuId === 'sy-select-menu' ? `sy-select-menu-${Math.random().toString(36).substring(7)}` : props.menuId)
|
|
176
|
-
const listStyles = ref<Record<string, string>>({})
|
|
177
|
-
const updateListPosition = () => {
|
|
178
|
-
if (textInput.value?.$el) {
|
|
179
|
-
const rect = textInput.value.$el.getBoundingClientRect()
|
|
180
|
-
listStyles.value = {
|
|
181
|
-
position: 'fixed',
|
|
182
|
-
top: props.density === 'compact' ? `${rect.bottom + 22}px` : `${rect.bottom}px`,
|
|
183
|
-
left: `${rect.left}px`,
|
|
184
|
-
zIndex: '999',
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
176
|
|
|
189
177
|
const selectItem = (item: ItemType | null, event?: Event) => {
|
|
190
178
|
// Prevent default action if event is provided
|
|
@@ -217,7 +205,6 @@
|
|
|
217
205
|
if (event?.type === 'keydown' || event?.type === 'click') {
|
|
218
206
|
if (!isOpen.value) {
|
|
219
207
|
isOpen.value = true
|
|
220
|
-
updateListPosition()
|
|
221
208
|
}
|
|
222
209
|
|
|
223
210
|
// S'assurer que le focus DOM revient à l'input et restaurer le focus visuel
|
|
@@ -388,8 +375,6 @@
|
|
|
388
375
|
return (props.required || props.errorMessages.length > 0) && !selectedItem.value
|
|
389
376
|
})
|
|
390
377
|
|
|
391
|
-
const textInput = ref<InstanceType<typeof VTextField> | null>(null)
|
|
392
|
-
|
|
393
378
|
// Détecte s'il y a des messages d'erreur, de succès ou d'avertissement
|
|
394
379
|
const hasMessages = computed(() => {
|
|
395
380
|
if (props.disableErrorHandling) return false
|
|
@@ -449,7 +434,6 @@
|
|
|
449
434
|
toggleMenu,
|
|
450
435
|
selectItem,
|
|
451
436
|
getItemText,
|
|
452
|
-
updateListPosition,
|
|
453
437
|
})
|
|
454
438
|
|
|
455
439
|
// Function to check if an item is the default option (e.g., "-choisir-")
|
|
@@ -541,11 +525,6 @@
|
|
|
541
525
|
|
|
542
526
|
// Then emit the update to the parent
|
|
543
527
|
emit('update:modelValue', updatedArray)
|
|
544
|
-
|
|
545
|
-
// Force update of the UI
|
|
546
|
-
nextTick(() => {
|
|
547
|
-
updateListPosition()
|
|
548
|
-
})
|
|
549
528
|
}
|
|
550
529
|
}
|
|
551
530
|
|
|
@@ -569,63 +548,95 @@
|
|
|
569
548
|
}
|
|
570
549
|
})
|
|
571
550
|
|
|
572
|
-
|
|
551
|
+
const ariaManager = {
|
|
552
|
+
cleanInputAttributes(inputElement: HTMLElement): void {
|
|
553
|
+
if (!inputElement) return
|
|
573
554
|
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
inputElement.setAttribute('aria-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
}
|
|
593
|
-
else {
|
|
594
|
-
inputElement.removeAttribute('aria-controls')
|
|
595
|
-
}
|
|
596
|
-
// Note: aria-autocomplete is omitted for select-only combobox (invalid to set to 'none')
|
|
597
|
-
inputElement.setAttribute('aria-haspopup', 'listbox')
|
|
598
|
-
if (isOpen.value && activeDescendantId.value) {
|
|
599
|
-
inputElement.setAttribute('aria-activedescendant', activeDescendantId.value)
|
|
600
|
-
}
|
|
601
|
-
if (isRequired.value) {
|
|
602
|
-
inputElement.setAttribute('aria-required', 'true')
|
|
603
|
-
}
|
|
604
|
-
if (hasError.value) {
|
|
605
|
-
inputElement.setAttribute('aria-invalid', 'true')
|
|
606
|
-
}
|
|
555
|
+
inputElement.removeAttribute('aria-describedby')
|
|
556
|
+
inputElement.removeAttribute('size')
|
|
557
|
+
inputElement.removeAttribute('tabindex')
|
|
558
|
+
inputElement.removeAttribute('aria-hidden')
|
|
559
|
+
},
|
|
560
|
+
|
|
561
|
+
updateInputState(inputElement: HTMLElement, isOpenValue: boolean, menuId: string, activeDescendant?: string): void {
|
|
562
|
+
if (!inputElement) return
|
|
563
|
+
|
|
564
|
+
inputElement.setAttribute('role', 'combobox')
|
|
565
|
+
inputElement.setAttribute('aria-expanded', isOpenValue ? 'true' : 'false')
|
|
566
|
+
inputElement.setAttribute('aria-haspopup', 'listbox')
|
|
567
|
+
|
|
568
|
+
if (isOpenValue) {
|
|
569
|
+
inputElement.setAttribute('aria-controls', menuId)
|
|
570
|
+
}
|
|
571
|
+
else {
|
|
572
|
+
inputElement.removeAttribute('aria-controls')
|
|
607
573
|
}
|
|
608
574
|
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
parentElement.removeAttribute('aria-expanded')
|
|
615
|
-
parentElement.removeAttribute('aria-controls')
|
|
616
|
-
parentElement.removeAttribute('aria-haspopup')
|
|
617
|
-
parentElement.removeAttribute('aria-activedescendant')
|
|
618
|
-
parentElement.removeAttribute('aria-required')
|
|
619
|
-
parentElement.removeAttribute('aria-invalid')
|
|
620
|
-
parentElement.removeAttribute('aria-hidden')
|
|
621
|
-
|
|
622
|
-
// Remove role="alert" and aria-live from message containers to prevent screen reader interruption
|
|
623
|
-
const messagesElements = parentElement.querySelectorAll('[role="alert"]')
|
|
624
|
-
messagesElements.forEach((element: Element) => {
|
|
625
|
-
element.removeAttribute('role')
|
|
626
|
-
element.removeAttribute('aria-live')
|
|
627
|
-
})
|
|
575
|
+
if (isOpenValue && activeDescendant) {
|
|
576
|
+
inputElement.setAttribute('aria-activedescendant', activeDescendant)
|
|
577
|
+
}
|
|
578
|
+
else {
|
|
579
|
+
inputElement.removeAttribute('aria-activedescendant')
|
|
628
580
|
}
|
|
581
|
+
},
|
|
582
|
+
|
|
583
|
+
updateValidationAttributes(inputElement: HTMLElement, isRequiredValue: boolean, hasErrorValue: boolean): void {
|
|
584
|
+
if (!inputElement) return
|
|
585
|
+
|
|
586
|
+
if (isRequiredValue) {
|
|
587
|
+
inputElement.setAttribute('aria-required', 'true')
|
|
588
|
+
}
|
|
589
|
+
else {
|
|
590
|
+
inputElement.removeAttribute('aria-required')
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
if (hasErrorValue) {
|
|
594
|
+
inputElement.setAttribute('aria-invalid', 'true')
|
|
595
|
+
}
|
|
596
|
+
else {
|
|
597
|
+
inputElement.removeAttribute('aria-invalid')
|
|
598
|
+
}
|
|
599
|
+
},
|
|
600
|
+
|
|
601
|
+
cleanParentAttributes(parentElement: HTMLElement): void {
|
|
602
|
+
if (!parentElement) return
|
|
603
|
+
|
|
604
|
+
parentElement.removeAttribute('role')
|
|
605
|
+
parentElement.removeAttribute('aria-expanded')
|
|
606
|
+
parentElement.removeAttribute('aria-controls')
|
|
607
|
+
parentElement.removeAttribute('aria-haspopup')
|
|
608
|
+
parentElement.removeAttribute('aria-activedescendant')
|
|
609
|
+
parentElement.removeAttribute('aria-required')
|
|
610
|
+
parentElement.removeAttribute('aria-invalid')
|
|
611
|
+
parentElement.removeAttribute('aria-hidden')
|
|
612
|
+
},
|
|
613
|
+
|
|
614
|
+
cleanAlertAttributes(parentElement: HTMLElement): void {
|
|
615
|
+
if (!parentElement) return
|
|
616
|
+
|
|
617
|
+
const messagesElements = parentElement.querySelectorAll('[role="alert"]')
|
|
618
|
+
messagesElements.forEach((element: Element) => {
|
|
619
|
+
element.removeAttribute('role')
|
|
620
|
+
element.removeAttribute('aria-live')
|
|
621
|
+
})
|
|
622
|
+
},
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
const setupAriaAttributes = () => {
|
|
626
|
+
if (!textInput.value || !textInput.value.$el) return
|
|
627
|
+
|
|
628
|
+
const inputElement = textInput.value.$el.querySelector('input') as HTMLElement
|
|
629
|
+
const parentElement = textInput.value.$el as HTMLElement
|
|
630
|
+
|
|
631
|
+
if (inputElement) {
|
|
632
|
+
ariaManager.cleanInputAttributes(inputElement)
|
|
633
|
+
ariaManager.updateInputState(inputElement, isOpen.value, uniqueMenuId.value, activeDescendantId.value)
|
|
634
|
+
ariaManager.updateValidationAttributes(inputElement, Boolean(isRequired.value), Boolean(hasError.value))
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
if (parentElement) {
|
|
638
|
+
ariaManager.cleanParentAttributes(parentElement)
|
|
639
|
+
ariaManager.cleanAlertAttributes(parentElement)
|
|
629
640
|
}
|
|
630
641
|
}
|
|
631
642
|
|
|
@@ -633,94 +644,37 @@
|
|
|
633
644
|
if (labelRef.value) {
|
|
634
645
|
labelWidth.value = labelRef.value.offsetWidth + 64
|
|
635
646
|
}
|
|
636
|
-
window.addEventListener('scroll', updateListPosition, true)
|
|
637
|
-
window.addEventListener('resize', updateListPosition)
|
|
638
647
|
|
|
639
|
-
// Use nextTick to ensure the DOM is fully rendered
|
|
640
648
|
nextTick(() => {
|
|
641
|
-
// Initial setup
|
|
642
649
|
setupAriaAttributes()
|
|
643
650
|
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
mutationObserver = new MutationObserver((mutations) => {
|
|
647
|
-
let needsCleanup = false
|
|
648
|
-
mutations.forEach((mutation) => {
|
|
649
|
-
if (mutation.type === 'attributes') {
|
|
650
|
-
const target = mutation.target as HTMLElement
|
|
651
|
-
const attributeName = mutation.attributeName
|
|
652
|
-
|
|
653
|
-
// Check if problematic attributes were added to input
|
|
654
|
-
if (target.tagName === 'INPUT' && (
|
|
655
|
-
attributeName === 'role'
|
|
656
|
-
|| attributeName === 'aria-hidden'
|
|
657
|
-
|| attributeName === 'aria-expanded'
|
|
658
|
-
|| attributeName === 'aria-controls'
|
|
659
|
-
|| attributeName === 'aria-haspopup'
|
|
660
|
-
)) {
|
|
661
|
-
needsCleanup = true
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
// Check if aria-hidden was added to parent
|
|
665
|
-
if (target === textInput.value?.$el && attributeName === 'aria-hidden') {
|
|
666
|
-
needsCleanup = true
|
|
667
|
-
}
|
|
668
|
-
|
|
669
|
-
// Check if role="alert" or aria-live was added to any element (error messages)
|
|
670
|
-
if (attributeName === 'role' && (target as HTMLElement).getAttribute('role') === 'alert') {
|
|
671
|
-
needsCleanup = true
|
|
672
|
-
}
|
|
673
|
-
if (attributeName === 'aria-live') {
|
|
674
|
-
needsCleanup = true
|
|
675
|
-
}
|
|
676
|
-
}
|
|
677
|
-
})
|
|
678
|
-
|
|
679
|
-
if (needsCleanup) {
|
|
680
|
-
// Use setTimeout to avoid infinite loops
|
|
681
|
-
setTimeout(setupAriaAttributes, 0)
|
|
682
|
-
}
|
|
683
|
-
})
|
|
684
|
-
|
|
685
|
-
// Observe both the parent element and its children
|
|
686
|
-
mutationObserver.observe(textInput.value.$el, {
|
|
687
|
-
attributes: true,
|
|
688
|
-
subtree: true,
|
|
689
|
-
attributeFilter: ['role', 'aria-hidden', 'aria-expanded', 'aria-controls', 'aria-haspopup', 'aria-live'],
|
|
690
|
-
})
|
|
691
|
-
}
|
|
651
|
+
setTimeout(setupAriaAttributes, 100)
|
|
652
|
+
setTimeout(setupAriaAttributes, 300)
|
|
692
653
|
})
|
|
693
654
|
})
|
|
694
655
|
|
|
695
|
-
// Watchers to update ARIA attributes dynamically on input element
|
|
696
656
|
watch(isOpen, (newValue) => {
|
|
697
657
|
nextTick(() => {
|
|
698
|
-
if (textInput.value
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
inputElement.setAttribute('aria-activedescendant', activeDescendantId.value)
|
|
704
|
-
}
|
|
705
|
-
else {
|
|
706
|
-
inputElement.removeAttribute('aria-activedescendant')
|
|
707
|
-
}
|
|
708
|
-
}
|
|
658
|
+
if (!textInput.value || !textInput.value.$el) return
|
|
659
|
+
|
|
660
|
+
const inputElement = textInput.value.$el.querySelector('input') as HTMLElement
|
|
661
|
+
if (inputElement) {
|
|
662
|
+
ariaManager.updateInputState(inputElement, newValue, uniqueMenuId.value, activeDescendantId.value)
|
|
709
663
|
}
|
|
710
664
|
})
|
|
711
665
|
})
|
|
712
666
|
|
|
713
667
|
watch(activeDescendantId, (newValue) => {
|
|
714
668
|
nextTick(() => {
|
|
715
|
-
if (textInput.value
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
669
|
+
if (!textInput.value || !textInput.value.$el || !isOpen.value) return
|
|
670
|
+
|
|
671
|
+
const inputElement = textInput.value.$el.querySelector('input') as HTMLElement
|
|
672
|
+
if (inputElement) {
|
|
673
|
+
if (newValue) {
|
|
674
|
+
inputElement.setAttribute('aria-activedescendant', newValue)
|
|
675
|
+
}
|
|
676
|
+
else {
|
|
677
|
+
inputElement.removeAttribute('aria-activedescendant')
|
|
724
678
|
}
|
|
725
679
|
}
|
|
726
680
|
})
|
|
@@ -728,244 +682,214 @@
|
|
|
728
682
|
|
|
729
683
|
watch(hasError, (newValue) => {
|
|
730
684
|
nextTick(() => {
|
|
731
|
-
if (textInput.value
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
}
|
|
685
|
+
if (!textInput.value || !textInput.value.$el) return
|
|
686
|
+
|
|
687
|
+
const inputElement = textInput.value.$el.querySelector('input') as HTMLElement
|
|
688
|
+
if (inputElement) {
|
|
689
|
+
ariaManager.updateValidationAttributes(
|
|
690
|
+
inputElement,
|
|
691
|
+
Boolean(isRequired.value),
|
|
692
|
+
Boolean(newValue),
|
|
693
|
+
)
|
|
741
694
|
}
|
|
742
695
|
})
|
|
743
696
|
})
|
|
744
697
|
|
|
745
|
-
// Watch for selection changes to enforce correct accessibility attributes
|
|
746
|
-
// This prevents Vuetify from overriding our combobox attributes
|
|
747
698
|
watch(selectedItem, () => {
|
|
748
699
|
nextTick(() => {
|
|
749
|
-
if (textInput.value
|
|
750
|
-
const inputElement = textInput.value.$el?.querySelector?.('input')
|
|
751
|
-
if (inputElement) {
|
|
752
|
-
// Ensure combobox role is maintained on input
|
|
753
|
-
inputElement.setAttribute('role', 'combobox')
|
|
754
|
-
// Ensure aria-hidden is never set to true
|
|
755
|
-
inputElement.removeAttribute('aria-hidden')
|
|
756
|
-
// Maintain other combobox attributes
|
|
757
|
-
inputElement.setAttribute('aria-expanded', isOpen.value ? 'true' : 'false')
|
|
758
|
-
inputElement.setAttribute('aria-haspopup', 'listbox')
|
|
759
|
-
// Note: aria-autocomplete is omitted for select-only combobox
|
|
760
|
-
// Only set aria-controls when menu is open and element exists
|
|
761
|
-
if (isOpen.value) {
|
|
762
|
-
inputElement.setAttribute('aria-controls', uniqueMenuId.value)
|
|
763
|
-
}
|
|
764
|
-
else {
|
|
765
|
-
inputElement.removeAttribute('aria-controls')
|
|
766
|
-
}
|
|
767
|
-
|
|
768
|
-
// Only add aria-required if the component is actually required
|
|
769
|
-
if (isRequired.value) {
|
|
770
|
-
inputElement.setAttribute('aria-required', 'true')
|
|
771
|
-
}
|
|
772
|
-
else {
|
|
773
|
-
inputElement.removeAttribute('aria-required')
|
|
774
|
-
}
|
|
775
|
-
}
|
|
700
|
+
if (!textInput.value || !textInput.value.$el) return
|
|
776
701
|
|
|
777
|
-
|
|
778
|
-
const parentElement = textInput.value.$el
|
|
779
|
-
if (parentElement) {
|
|
780
|
-
parentElement.removeAttribute('role')
|
|
781
|
-
parentElement.removeAttribute('aria-hidden')
|
|
782
|
-
parentElement.removeAttribute('aria-expanded')
|
|
783
|
-
parentElement.removeAttribute('aria-haspopup')
|
|
784
|
-
parentElement.removeAttribute('aria-controls')
|
|
785
|
-
parentElement.removeAttribute('aria-required')
|
|
786
|
-
}
|
|
787
|
-
}
|
|
702
|
+
setupAriaAttributes()
|
|
788
703
|
})
|
|
789
704
|
}, { deep: true })
|
|
790
705
|
|
|
791
|
-
onUnmounted(() => {
|
|
792
|
-
window.removeEventListener('scroll', updateListPosition, true)
|
|
793
|
-
window.removeEventListener('resize', updateListPosition)
|
|
794
|
-
|
|
795
|
-
// Clean up MutationObserver
|
|
796
|
-
if (mutationObserver) {
|
|
797
|
-
mutationObserver.disconnect()
|
|
798
|
-
mutationObserver = null
|
|
799
|
-
}
|
|
800
|
-
})
|
|
801
|
-
|
|
802
706
|
defineExpose({
|
|
803
707
|
isOpen,
|
|
804
708
|
closeList,
|
|
805
709
|
})
|
|
710
|
+
|
|
711
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
712
|
+
function initializeActivatorProps(activatorProps: Record<string, any>) {
|
|
713
|
+
return {
|
|
714
|
+
// the ref is needed by Vuetify to position the menu and by us for accessibility
|
|
715
|
+
ref: (el) => {
|
|
716
|
+
textInput.value = el
|
|
717
|
+
activatorProps.ref?.(el)
|
|
718
|
+
},
|
|
719
|
+
}
|
|
720
|
+
}
|
|
806
721
|
</script>
|
|
807
722
|
|
|
808
723
|
<template>
|
|
809
|
-
<
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
v-click-outside="closeList"
|
|
814
|
-
v-rgaa-svg-fix="true"
|
|
815
|
-
:title="$attrs['aria-label'] || labelWithAsterisk"
|
|
816
|
-
color="primary"
|
|
817
|
-
:disabled="disabled"
|
|
818
|
-
:label="labelWithAsterisk"
|
|
819
|
-
:aria-label="$attrs['aria-label'] || labelWithAsterisk"
|
|
820
|
-
:error-messages="props.disableErrorHandling ? [] : errorMessages"
|
|
821
|
-
:variant="outlined ? 'outlined' : 'underlined'"
|
|
822
|
-
:rules="isRequired && !props.disableErrorHandling ? ['Le champ est requis.'] : []"
|
|
823
|
-
:bg-color="props.bgColor"
|
|
824
|
-
:density="props.density"
|
|
825
|
-
:active="hasChips || isOpen"
|
|
826
|
-
readonly
|
|
827
|
-
:hide-details="props.hideMessages && !showHelpTextAsMessage"
|
|
828
|
-
:hint="showHelpTextAsMessage ? props.helpText : ''"
|
|
829
|
-
:persistent-hint="!!showHelpTextAsMessage"
|
|
830
|
-
:autocomplete="props.autocomplete"
|
|
831
|
-
class="sy-select"
|
|
832
|
-
:class="{ 'sy-select--clearable': props.clearable }"
|
|
833
|
-
:width="calculatedWidth"
|
|
834
|
-
:style="hasError ? { minWidth: `${labelWidth + 18}px`} : {minWidth: `${labelWidth}px`}"
|
|
835
|
-
v-bind="Object.fromEntries(Object.entries($attrs).filter(([key]) => key !== 'display-asterisk'))"
|
|
836
|
-
@click="toggleMenu"
|
|
837
|
-
@keydown.enter.prevent="handleEnterKey"
|
|
838
|
-
@keydown.space.prevent="handleSpaceKey"
|
|
839
|
-
@keydown.down.prevent="handleDownKey"
|
|
840
|
-
@keydown.up.prevent="handleUpKey"
|
|
841
|
-
@keydown.esc.prevent="handleEscapeKey"
|
|
842
|
-
@keydown.home.prevent="handleHomeKey"
|
|
843
|
-
@keydown.end.prevent="handleEndKey"
|
|
844
|
-
@keydown.page-up.prevent="handlePageUpKey"
|
|
845
|
-
@keydown.page-down.prevent="handlePageDownKey"
|
|
846
|
-
@keydown.tab="handleTabKey"
|
|
847
|
-
@keydown="(e) => {
|
|
848
|
-
// Handle printable characters for keyboard navigation
|
|
849
|
-
if (!e.ctrlKey && !e.altKey && !e.metaKey) {
|
|
850
|
-
handleCharacterKey(e.key)
|
|
851
|
-
}
|
|
852
|
-
}"
|
|
724
|
+
<VMenu
|
|
725
|
+
v-model="isOpen"
|
|
726
|
+
transition="slide-y-transition"
|
|
727
|
+
max-height="300px"
|
|
853
728
|
>
|
|
854
|
-
<
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
v-
|
|
860
|
-
:
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
:
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
:
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
@keydown.
|
|
887
|
-
@keydown.
|
|
888
|
-
@
|
|
729
|
+
<template #activator="{ props: activatorProps }">
|
|
730
|
+
<VTextField
|
|
731
|
+
:id="inputId"
|
|
732
|
+
v-model="selectedItemText"
|
|
733
|
+
v-click-outside="closeList"
|
|
734
|
+
v-rgaa-svg-fix="true"
|
|
735
|
+
:title="$attrs['aria-label'] || labelWithAsterisk"
|
|
736
|
+
color="primary"
|
|
737
|
+
:disabled="disabled"
|
|
738
|
+
:label="labelWithAsterisk"
|
|
739
|
+
:aria-label="$attrs['aria-label'] || labelWithAsterisk"
|
|
740
|
+
:error-messages="props.disableErrorHandling ? [] : errorMessages"
|
|
741
|
+
:variant="outlined ? 'outlined' : 'underlined'"
|
|
742
|
+
:rules="isRequired && !props.disableErrorHandling ? ['Le champ est requis.'] : []"
|
|
743
|
+
:bg-color="props.bgColor"
|
|
744
|
+
:density="props.density"
|
|
745
|
+
:active="hasChips || isOpen"
|
|
746
|
+
readonly
|
|
747
|
+
:hide-details="props.hideMessages && !showHelpTextAsMessage"
|
|
748
|
+
:hint="showHelpTextAsMessage ? props.helpText : ''"
|
|
749
|
+
:persistent-hint="!!showHelpTextAsMessage"
|
|
750
|
+
:autocomplete="props.autocomplete"
|
|
751
|
+
class="sy-select"
|
|
752
|
+
:class="{ 'sy-select--clearable': props.clearable }"
|
|
753
|
+
:width="calculatedWidth"
|
|
754
|
+
:style="hasError ? { minWidth: `${labelWidth + 18}px`} : {minWidth: `${labelWidth}px`}"
|
|
755
|
+
v-bind="{
|
|
756
|
+
...Object.fromEntries(Object.entries($attrs).filter(([key]) => key !== 'display-asterisk')),
|
|
757
|
+
...initializeActivatorProps(activatorProps),
|
|
758
|
+
}"
|
|
759
|
+
@click="toggleMenu"
|
|
760
|
+
@keydown.enter.prevent="handleEnterKey"
|
|
761
|
+
@keydown.space.prevent="handleSpaceKey"
|
|
762
|
+
@keydown.down.prevent="handleDownKey"
|
|
763
|
+
@keydown.up.prevent="handleUpKey"
|
|
764
|
+
@keydown.esc.prevent="handleEscapeKey"
|
|
765
|
+
@keydown.home.prevent="handleHomeKey"
|
|
766
|
+
@keydown.end.prevent="handleEndKey"
|
|
767
|
+
@keydown.page-up.prevent="handlePageUpKey"
|
|
768
|
+
@keydown.page-down.prevent="handlePageDownKey"
|
|
769
|
+
@keydown.tab="handleTabKey"
|
|
770
|
+
@keydown="(e) => {
|
|
771
|
+
// Handle printable characters for keyboard navigation
|
|
772
|
+
if (!e.ctrlKey && !e.altKey && !e.metaKey) {
|
|
773
|
+
handleCharacterKey(e.key)
|
|
774
|
+
}
|
|
775
|
+
}"
|
|
889
776
|
>
|
|
890
|
-
<
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
777
|
+
<div
|
|
778
|
+
v-if="hasChips"
|
|
779
|
+
class="d-flex flex-wrap gap-1"
|
|
780
|
+
>
|
|
781
|
+
<VChip
|
|
782
|
+
v-for="item in selectedItem"
|
|
783
|
+
:key="props.returnObject ? item[props.valueKey] : item"
|
|
784
|
+
size="small"
|
|
785
|
+
class="ma-1"
|
|
786
|
+
closable
|
|
787
|
+
:close-label="`Supprimer ${getChipText(item)}`"
|
|
788
|
+
@click:close="removeChip(item)"
|
|
789
|
+
>
|
|
790
|
+
{{ getChipText(item) }}
|
|
791
|
+
</VChip>
|
|
792
|
+
</div>
|
|
793
|
+
<template #append-inner>
|
|
794
|
+
<SyIcon
|
|
795
|
+
v-if="hasError"
|
|
796
|
+
class="mr-6"
|
|
797
|
+
color="error"
|
|
798
|
+
:icon="mdiInformation"
|
|
799
|
+
:decorative="false"
|
|
800
|
+
label="Information"
|
|
801
|
+
role="img"
|
|
802
|
+
/>
|
|
803
|
+
<button
|
|
804
|
+
v-if="props.clearable && selectedItemText"
|
|
805
|
+
type="button"
|
|
806
|
+
class="sy-select__clear-button"
|
|
807
|
+
:style="{ right: hasError ? '62px' : '42px' }"
|
|
808
|
+
:aria-label="locales.clear"
|
|
809
|
+
@keydown.enter.prevent="$event => selectItem(null, $event)"
|
|
810
|
+
@keydown.space.prevent="$event => selectItem(null, $event)"
|
|
811
|
+
@click.stop.prevent="$event => selectItem(null, $event)"
|
|
812
|
+
>
|
|
813
|
+
<SyIcon
|
|
814
|
+
class="sy-select__clear-icon"
|
|
815
|
+
:icon="mdiCloseCircle"
|
|
816
|
+
:decorative="true"
|
|
817
|
+
/>
|
|
818
|
+
</button>
|
|
819
|
+
<SyIcon
|
|
820
|
+
class="arrow"
|
|
821
|
+
:icon="mdiMenuDown"
|
|
822
|
+
:decorative="true"
|
|
823
|
+
/>
|
|
824
|
+
</template>
|
|
825
|
+
</VTextField>
|
|
826
|
+
<span
|
|
827
|
+
ref="labelRef"
|
|
828
|
+
class="hidden-label"
|
|
829
|
+
>{{ label }}</span>
|
|
901
830
|
</template>
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
@keydown.up.prevent="handleUpKey"
|
|
927
|
-
@keydown.home.prevent="handleHomeKey"
|
|
928
|
-
@keydown.end.prevent="handleEndKey"
|
|
929
|
-
@keydown.page-up.prevent="handlePageUpKey"
|
|
930
|
-
@keydown.page-down.prevent="handlePageDownKey"
|
|
931
|
-
@click.stop
|
|
932
|
-
>
|
|
933
|
-
<VListItem
|
|
934
|
-
v-for="(item, index) in formattedItems"
|
|
935
|
-
:id="`option-${index}`"
|
|
936
|
-
:key="index"
|
|
937
|
-
:ref="'options-' + index"
|
|
938
|
-
role="option"
|
|
939
|
-
class="v-list-item"
|
|
940
|
-
:aria-selected="isItemSelected(item) ? 'true' : 'false'"
|
|
941
|
-
tabindex="-1"
|
|
942
|
-
:class="{ active: isItemSelected(item) || `option-${index}` === activeDescendantId }"
|
|
943
|
-
@click.stop="(event) => selectItem(item, event)"
|
|
831
|
+
<VList
|
|
832
|
+
:id="uniqueMenuId"
|
|
833
|
+
ref="list"
|
|
834
|
+
class="v-list"
|
|
835
|
+
role="listbox"
|
|
836
|
+
:aria-multiselectable="props.multiple ? 'true' : undefined"
|
|
837
|
+
:aria-label="$attrs['aria-label'] || labelWithAsterisk"
|
|
838
|
+
:style="{
|
|
839
|
+
minWidth: `${textInput?.$el.offsetWidth}px`,
|
|
840
|
+
marginTop: props.hideMessages ? '0' : '-22px',
|
|
841
|
+
}"
|
|
842
|
+
bg-color="white"
|
|
843
|
+
tabindex="0"
|
|
844
|
+
:title="props.multiple ? 'Sélection multiple' : 'Sélection'"
|
|
845
|
+
@keydown.esc.prevent="closeList"
|
|
846
|
+
@keydown.tab="handleTabKey"
|
|
847
|
+
@keydown.enter.prevent="handleEnterKey"
|
|
848
|
+
@keydown.down.prevent="handleDownKey"
|
|
849
|
+
@keydown.up.prevent="handleUpKey"
|
|
850
|
+
@keydown.home.prevent="handleHomeKey"
|
|
851
|
+
@keydown.end.prevent="handleEndKey"
|
|
852
|
+
@keydown.page-up.prevent="handlePageUpKey"
|
|
853
|
+
@keydown.page-down.prevent="handlePageDownKey"
|
|
854
|
+
@click.stop
|
|
944
855
|
>
|
|
945
|
-
<
|
|
946
|
-
v-
|
|
947
|
-
|
|
856
|
+
<VListItem
|
|
857
|
+
v-for="(item, index) in formattedItems"
|
|
858
|
+
:id="`option-${index}`"
|
|
859
|
+
:key="index"
|
|
860
|
+
:ref="'options-' + index"
|
|
861
|
+
role="option"
|
|
862
|
+
class="v-list-item"
|
|
863
|
+
:aria-selected="isItemSelected(item) ? 'true' : 'false'"
|
|
864
|
+
tabindex="-1"
|
|
865
|
+
:class="{ active: isItemSelected(item) || `option-${index}` === activeDescendantId }"
|
|
866
|
+
@click.stop="(event) => selectItem(item, event)"
|
|
948
867
|
>
|
|
949
|
-
<
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
868
|
+
<template
|
|
869
|
+
v-if="props.multiple && !isDefaultOption(item)"
|
|
870
|
+
#prepend
|
|
871
|
+
>
|
|
872
|
+
<SyCheckbox
|
|
873
|
+
:model-value="isItemSelected(item)"
|
|
874
|
+
density="compact"
|
|
875
|
+
hide-details
|
|
876
|
+
color="primary"
|
|
877
|
+
class="mt-0 pt-0 mr-1"
|
|
878
|
+
:title="getItemText(item)"
|
|
879
|
+
:aria-label="getItemText(item)"
|
|
880
|
+
@click.stop="(event) => selectItem(item, event)"
|
|
881
|
+
/>
|
|
882
|
+
</template>
|
|
883
|
+
<VListItemTitle>
|
|
884
|
+
<span
|
|
885
|
+
v-if="allowHtml"
|
|
886
|
+
v-html="getItemText(item)"
|
|
887
|
+
/>
|
|
888
|
+
<span v-else>{{ getItemText(item) }}</span>
|
|
889
|
+
</VListItemTitle>
|
|
890
|
+
</VListItem>
|
|
891
|
+
</VList>
|
|
892
|
+
</VMenu>
|
|
969
893
|
|
|
970
894
|
<div
|
|
971
895
|
v-if="showHelpTextBelow"
|
|
@@ -994,16 +918,6 @@
|
|
|
994
918
|
}
|
|
995
919
|
}
|
|
996
920
|
|
|
997
|
-
.v-list {
|
|
998
|
-
margin-top: -22px;
|
|
999
|
-
max-height: 300px;
|
|
1000
|
-
padding: 0;
|
|
1001
|
-
box-shadow: 0 2px 5px rgb(0 0 0 / 12%), 0 2px 10px rgb(0 0 0 / 8%);
|
|
1002
|
-
border-radius: 4px;
|
|
1003
|
-
overflow-y: auto;
|
|
1004
|
-
z-index: 2;
|
|
1005
|
-
}
|
|
1006
|
-
|
|
1007
921
|
.v-list-item:hover {
|
|
1008
922
|
background-color: rgb(0 0 0 / 4%);
|
|
1009
923
|
}
|