@cnamts/synapse 1.0.9 → 1.0.10
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-BylukfjR.js → DateFilter-C0wDuzgn.js} +1 -1
- package/dist/{NumberFilter-C_bUk9o1.js → NumberFilter-CBj7zdOi.js} +1 -1
- package/dist/{PeriodFilter-dVOmcfmt.js → PeriodFilter-DB4wWyKy.js} +1 -1
- package/dist/{SelectFilter-BW8KpXkQ.js → SelectFilter-Dces8572.js} +1 -1
- package/dist/{TextFilter-diwVzTz7.js → TextFilter-BU9nlkuS.js} +1 -1
- package/dist/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.d.ts +110 -0
- package/dist/components/Amelipro/AmeliproAccordionFrieze/types.d.ts +6 -0
- package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +120 -120
- package/dist/components/Amelipro/AmeliproBtn/AmeliproBtn.d.ts +2 -2
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproDentalChart/AmeliproDentalChart.d.ts +47 -0
- package/dist/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.d.ts +88 -0
- package/dist/components/Amelipro/AmeliproDentalChart/types.d.ts +13 -0
- package/dist/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.d.ts +70 -0
- package/dist/components/Amelipro/AmeliproFirstLogin/locales.d.ts +46 -0
- package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.d.ts +149 -0
- package/dist/components/Amelipro/AmeliproPatientLogged/types.d.ts +48 -0
- package/dist/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLogin.d.ts +177 -0
- package/dist/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/AmeliproPatientLoginForm.d.ts +169 -0
- package/dist/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/types.d.ts +5 -0
- package/dist/components/Amelipro/AmeliproPatientLogin/types.d.ts +5 -0
- package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +2925 -0
- package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/types.d.ts +11 -0
- package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +4489 -0
- package/dist/components/Amelipro/AmeliproPostalAddressField/types.d.ts +17 -0
- package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +120 -120
- package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +120 -120
- package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +12 -12
- package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +30 -30
- package/dist/components/Amelipro/AmeliproTooltips/AmeliproTooltips.d.ts +12 -2
- package/dist/components/CookieBanner/CookieBanner.d.ts +7 -7
- package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +20 -20
- package/dist/components/CookiesSelection/CookiesSelection.d.ts +9 -9
- package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +7 -6
- package/dist/components/Customs/SyForm/SyForm.d.ts +1820 -0
- package/dist/components/Customs/SyTabs/SyTabs.d.ts +3 -1
- package/dist/components/Customs/SyTabs/useTabTransition.d.ts +5 -0
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +36 -31
- package/dist/components/Customs/SyTextField/types.d.ts +1 -1
- package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +232 -134
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +121 -71
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +60 -37
- package/dist/components/DatePicker/composables/useDateValidation.d.ts +14 -2
- package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +2 -2
- package/dist/components/DatePicker/tests/setup.d.ts +74354 -0
- package/dist/components/DialogBox/DialogBox.d.ts +10 -10
- package/dist/components/DialogBox/locales.d.ts +1 -0
- package/dist/components/DialogBox/useDraggable.d.ts +2 -0
- package/dist/components/FilterSideBar/FilterSideBar.d.ts +7 -7
- package/dist/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.d.ts +2 -0
- package/dist/components/HeaderNavigationBar/types.d.ts +1 -0
- package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +842 -9
- package/dist/components/HeaderToolbar/locales.d.ts +3 -0
- package/dist/components/HeaderToolbar/useMobileRightMenu.d.ts +10 -0
- package/dist/components/LangBtn/LangBtn.d.ts +8 -8
- package/dist/components/NirField/NirField.d.ts +90 -65
- package/dist/components/NirField/locales.d.ts +6 -4
- package/dist/components/PasswordField/PasswordField.d.ts +3 -1
- package/dist/components/PasswordField/locales.d.ts +2 -0
- package/dist/components/PeriodField/PeriodField.d.ts +460 -260
- package/dist/components/PhoneField/PhoneField.d.ts +45 -32
- package/dist/components/RangeField/RangeField.d.ts +11 -1
- package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +2 -2
- package/dist/components/RangeField/config.d.ts +3 -0
- package/dist/components/RatingPicker/EmotionPicker/EmotionPicker.d.ts +3 -1
- package/dist/components/RatingPicker/EmotionPicker/locales.d.ts +2 -0
- package/dist/components/RatingPicker/NumberPicker/NumberPicker.d.ts +3 -1
- package/dist/components/RatingPicker/StarsPicker/StarsPicker.d.ts +3 -1
- package/dist/components/RatingPicker/locales.d.ts +1 -0
- package/dist/components/SearchListField/SearchListField.d.ts +6 -6
- package/dist/components/SyAlert/SyAlert.d.ts +2 -2
- package/dist/components/SyTextArea/SyTextArea.d.ts +13 -13
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +3 -5
- package/dist/components/Tables/SyTable/SyTable.d.ts +3 -5
- package/dist/components/Tables/common/SyTablePagination.d.ts +8 -6
- package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +4 -4
- package/dist/components/Tables/common/usePagination.d.ts +1 -3
- package/dist/components/Tables/common/useTableCheckbox.d.ts +1 -1
- package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +4 -4
- package/dist/components/index.d.ts +8 -0
- package/dist/composables/validation/useFormValidation.d.ts +24 -0
- package/dist/composables/validation/useValidatable.d.ts +17 -0
- package/dist/design-system-v3.js +181 -173
- package/dist/design-system-v3.umd.cjs +265 -263
- package/dist/{main-2eWGB7zZ.js → main-Dt4iNotT.js} +14095 -11151
- package/dist/style.css +1 -1
- package/dist/tooth-11-B9fN9Ow_.js +4 -0
- package/dist/tooth-12-BOOjuDe9.js +4 -0
- package/dist/tooth-13-DVU7jhZ8.js +4 -0
- package/dist/tooth-14-CXNleTBu.js +4 -0
- package/dist/tooth-15-iq3z8dzZ.js +4 -0
- package/dist/tooth-16-BuNIHSQk.js +4 -0
- package/dist/tooth-17-DLb4ijsH.js +4 -0
- package/dist/tooth-18-huijQe68.js +4 -0
- package/dist/tooth-21-Bl7Q-o4y.js +4 -0
- package/dist/tooth-22-ChQKI3h5.js +4 -0
- package/dist/tooth-23-CkzbEvBa.js +4 -0
- package/dist/tooth-24-BpaPUSEp.js +4 -0
- package/dist/tooth-25-BaVfhAL6.js +4 -0
- package/dist/tooth-26-BnL03Jv5.js +4 -0
- package/dist/tooth-27-BaHyZfhH.js +4 -0
- package/dist/tooth-28-BrMBVEgX.js +4 -0
- package/dist/tooth-31-DEH3Btej.js +4 -0
- package/dist/tooth-32-Dqcy596v.js +4 -0
- package/dist/tooth-33-DLzQOVky.js +4 -0
- package/dist/tooth-34-36nkjUPW.js +4 -0
- package/dist/tooth-35-VfFhleWT.js +4 -0
- package/dist/tooth-36-BHwtGkLx.js +4 -0
- package/dist/tooth-37-CT47Rtk-.js +4 -0
- package/dist/tooth-38-D15JmYSD.js +4 -0
- package/dist/tooth-41--x9N_iSc.js +4 -0
- package/dist/tooth-42-DZ1D3qmP.js +4 -0
- package/dist/tooth-43-C9T3b5_0.js +4 -0
- package/dist/tooth-44-CsPRBSZV.js +4 -0
- package/dist/tooth-45-Dg3wQunm.js +4 -0
- package/dist/tooth-46-DAOEt4G5.js +4 -0
- package/dist/tooth-47-DcqUeVM0.js +4 -0
- package/dist/tooth-48-0MVzkYem.js +4 -0
- package/dist/tooth-51-DOTod22I.js +4 -0
- package/dist/tooth-52-DZB1Jabv.js +4 -0
- package/dist/tooth-53-nunm2BQr.js +4 -0
- package/dist/tooth-54-BwdYfBd-.js +4 -0
- package/dist/tooth-55-BUJdNwqL.js +4 -0
- package/dist/tooth-61-BwqR1B88.js +4 -0
- package/dist/tooth-62-BzaECsvF.js +4 -0
- package/dist/tooth-63-wjdIfSq2.js +4 -0
- package/dist/tooth-64-CGW4ZcUq.js +4 -0
- package/dist/tooth-65-DxH4GgAL.js +4 -0
- package/dist/tooth-71-CmjVz11G.js +4 -0
- package/dist/tooth-72-CCyNUD-W.js +4 -0
- package/dist/tooth-73-D6aJwVz4.js +4 -0
- package/dist/tooth-74-zNtDQ6ig.js +4 -0
- package/dist/tooth-75-DDEx6y4E.js +4 -0
- package/dist/tooth-81-xg8UVvz2.js +4 -0
- package/dist/tooth-82-CtNXwBtB.js +4 -0
- package/dist/tooth-83-C2ODw7VT.js +4 -0
- package/dist/tooth-84-BKIdO9HA.js +4 -0
- package/dist/tooth-85-3YmvfAsK.js +4 -0
- package/package.json +2 -2
- package/src/assets/amelipro/img/dental-chart-img/tooth-11.svg +16 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-12.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-13.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-14.svg +26 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-15.svg +21 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-16.svg +31 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-17.svg +26 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-18.svg +26 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-21.svg +16 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-22.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-23.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-24.svg +26 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-25.svg +21 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-26.svg +31 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-27.svg +26 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-28.svg +26 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-31.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-32.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-33.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-34.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-35.svg +22 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-36.svg +26 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-37.svg +26 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-38.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-41.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-42.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-43.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-44.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-45.svg +22 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-46.svg +26 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-47.svg +26 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-48.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-51.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-52.svg +16 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-53.svg +16 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-54.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-55.svg +16 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-61.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-62.svg +16 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-63.svg +16 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-64.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-65.svg +16 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-71.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-72.svg +16 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-73.svg +16 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-74.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-75.svg +16 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-81.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-82.svg +16 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-83.svg +16 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-84.svg +11 -0
- package/src/assets/amelipro/img/dental-chart-img/tooth-85.svg +16 -0
- package/src/assets/amelipro/img/idpa/apcv_logo.svg +16 -0
- package/src/assets/amelipro/img/idpa/carte-vitale.svg +75 -0
- package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.mdx +15 -0
- package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.stories.ts +261 -0
- package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +419 -0
- package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/AmeliproAccordionFrieze.spec.ts +98 -0
- package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/__snapshots__/AmeliproAccordionFrieze.spec.ts.snap +858 -0
- package/src/components/Amelipro/AmeliproAccordionFrieze/types.d.ts +6 -0
- package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +2 -2
- package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +0 -4
- package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +2 -2
- package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +0 -4
- package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.stories.ts +97 -0
- package/src/components/Amelipro/AmeliproBtn/AmeliproBtn.stories.ts +190 -8
- package/src/components/Amelipro/AmeliproCallback/AmeliproCallback.stories.ts +321 -0
- package/src/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.vue +1 -1
- package/src/components/Amelipro/AmeliproCard/AmeliproCard.stories.ts +360 -0
- package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.stories.ts +1 -1
- package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.stories.ts +2 -2
- package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.vue +1 -1
- package/src/components/Amelipro/AmeliproChips/AmeliproChips.stories.ts +46 -0
- package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.stories.ts +173 -0
- package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.stories.ts +112 -26
- package/src/components/Amelipro/AmeliproDentalChart/AmeliproDentalChart.mdx +15 -0
- package/src/components/Amelipro/AmeliproDentalChart/AmeliproDentalChart.stories.ts +1078 -0
- package/src/components/Amelipro/AmeliproDentalChart/AmeliproDentalChart.vue +163 -0
- package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +183 -0
- package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/tests/AmeliproTooth.spec.ts +20 -0
- package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/tests/__snapshots__/AmeliproTooth.spec.ts.snap +39 -0
- package/src/components/Amelipro/AmeliproDentalChart/tests/AmeliproDentalChart.spec.ts +468 -0
- package/src/components/Amelipro/AmeliproDentalChart/tests/__snapshots__/AmeliproDentalChart.spec.ts.snap +2589 -0
- package/src/components/Amelipro/AmeliproDentalChart/types.d.ts +13 -0
- package/src/components/Amelipro/AmeliproDialog/AmeliproDialog.stories.ts +333 -0
- package/src/components/Amelipro/AmeliproDialog/AmeliproDialog.vue +7 -2
- package/src/components/Amelipro/AmeliproDialog/tests/__snapshots__/AmeliproDialog.spec.ts.snap +1 -0
- package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +1 -1
- package/src/components/Amelipro/AmeliproErrorTemplate/__tests__/__snapshots__/AmeliproErrorTemplate.spec.ts.snap +1 -2
- package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.mdx +15 -0
- package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.stories.ts +287 -0
- package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +331 -0
- package/src/components/Amelipro/AmeliproFirstLogin/__tests__/AmeliproFirstLogin.spec.ts +29 -0
- package/src/components/Amelipro/AmeliproFirstLogin/__tests__/__snapshots__/AmeliproFirstLogin.spec.ts.snap +1210 -0
- package/src/components/Amelipro/AmeliproFirstLogin/locales.ts +48 -0
- package/src/components/Amelipro/AmeliproIcon/AmeliproIcon.stories.ts +61 -1
- package/src/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.stories.ts +174 -0
- package/src/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.stories.ts +186 -0
- package/src/components/Amelipro/AmeliproMailTile/AmeliproMailTile.stories.ts +237 -0
- package/src/components/Amelipro/AmeliproMessage/AmeliproMessage.stories.ts +111 -0
- package/src/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.stories.ts +199 -0
- package/src/components/Amelipro/AmeliproNumberedCard/AmeliproNumberedCard.stories.ts +150 -0
- package/src/components/Amelipro/AmeliproOnboarding/AmeliproOnboarding.stories.ts +281 -8
- package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.stories.ts +123 -43
- package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.mdx +18 -0
- package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.stories.ts +250 -0
- package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.vue +520 -0
- package/src/components/Amelipro/AmeliproPatientLogged/__tests__/AmeliproPatientLogged.spec.ts +79 -0
- package/src/components/Amelipro/AmeliproPatientLogged/__tests__/__snapshots__/AmeliproPatientLogged.spec.ts.snap +1140 -0
- package/src/components/Amelipro/AmeliproPatientLogged/types.d.ts +49 -0
- package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLogin.mdx +18 -0
- package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLogin.stories.ts +151 -0
- package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLogin.vue +231 -0
- package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/AmeliproPatientLoginForm.vue +252 -0
- package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/__tests__/AmeliproPatientLoginForm.spec.ts +46 -0
- package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/__tests__/__snapshots__/AmeliproPatientLoginForm.spec.ts.snap +33 -0
- package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/types.d.ts +6 -0
- package/src/components/Amelipro/AmeliproPatientLogin/__tests__/AmeliproPatientLogin.spec.ts +49 -0
- package/src/components/Amelipro/AmeliproPatientLogin/__tests__/__snapshots__/AmeliproPatientLogin.spec.ts.snap +60 -0
- package/src/components/Amelipro/AmeliproPatientLogin/types.d.ts +6 -0
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.vue +464 -0
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/AmeliproPostalAddressCityRow.spec.ts +41 -0
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/__snapshots__/AmeliproPostalAddressCityRow.spec.ts.snap +548 -0
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/types.d.ts +12 -0
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.mdx +15 -0
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.stories.ts +133 -0
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.vue +360 -0
- package/src/components/Amelipro/AmeliproPostalAddressField/tests/AmeliproPostalAddressField.spec.ts +27 -0
- package/src/components/Amelipro/AmeliproPostalAddressField/tests/__snapshots__/AmeliproPostalAddressField.spec.ts.snap +548 -0
- package/src/components/Amelipro/AmeliproPostalAddressField/types.d.ts +18 -0
- package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.vue +4 -3
- package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +2 -2
- package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +0 -4
- package/src/components/Amelipro/AmeliproStateTile/AmeliproStateTile.stories.ts +210 -0
- package/src/components/Amelipro/AmeliproStatus/AmeliproStatus.stories.ts +326 -0
- package/src/components/Amelipro/AmeliproTable/AmeliproTable.stories.ts +232 -4
- package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +3 -2
- package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +0 -4
- package/src/components/Amelipro/AmeliproTabs/AmeliproTabs.vue +1 -1
- package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.stories.ts +2 -2
- package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.stories.ts +222 -6
- package/src/components/Amelipro/AmeliproTooltips/AmeliproTooltips.stories.ts +169 -0
- package/src/components/Amelipro/AmeliproTooltips/AmeliproTooltips.vue +6 -1
- package/src/components/Amelipro/AmeliproTooltips/tests/__snapshots__/AmeliproTooltips.spec.ts.snap +1 -5
- package/src/components/Amelipro/AmeliproTransmission/AmeliproTransmission.stories.ts +160 -0
- package/src/components/Amelipro/StructureMenu/StructureMenu.vue +1 -1
- package/src/components/Amelipro/StructureMenu/tests/__snapshots__/StructureMenu.spec.ts.snap +1 -2
- package/src/components/Customs/Selects/SySelect/SySelect.vue +43 -1
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +4 -0
- package/src/components/Customs/SyForm/Introduction.mdx +132 -0
- package/src/components/Customs/SyForm/SyForm.mdx +105 -0
- package/src/components/Customs/SyForm/SyForm.stories.ts +375 -0
- package/src/components/Customs/SyForm/SyForm.vue +80 -0
- package/src/components/Customs/SyTabs/SyTabs.stories.ts +31 -0
- package/src/components/Customs/SyTabs/SyTabs.vue +185 -27
- package/src/components/Customs/SyTabs/useTabTransition.ts +42 -0
- package/src/components/Customs/SyTextField/SyTextField.vue +12 -3
- package/src/components/Customs/SyTextField/types.d.ts +1 -1
- package/src/components/DataListItem/DataListItem.vue +12 -13
- package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +242 -41
- package/src/components/DatePicker/CalendarMode/DatePicker.vue +30 -12
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +246 -59
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +40 -10
- package/src/components/DatePicker/DatePickerOverview.mdx +5 -1
- package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.mdx +21 -21
- package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +240 -133
- package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +29 -1
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +32 -9
- package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +166 -38
- package/src/components/DatePicker/composables/useDateValidation.ts +8 -5
- package/src/components/DatePicker/composables/useManualDateValidation.ts +23 -6
- package/src/components/DatePicker/datePickers.stories.ts +28 -0
- package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +47 -58
- package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +2 -2
- package/src/components/DatePicker/tests/DatePicker.validation.spec.ts +4654 -0
- package/src/components/DatePicker/tests/archiTest.md +33 -0
- package/src/components/DatePicker/tests/setup.ts +243 -0
- package/src/components/DialogBox/DialogBox.stories.ts +1 -1
- package/src/components/DialogBox/DialogBox.vue +25 -8
- package/src/components/DialogBox/locales.ts +1 -0
- package/src/components/DialogBox/tests/DialogBox.spec.ts +187 -15
- package/src/components/DialogBox/useDraggable.ts +92 -4
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +4 -0
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/tests/__snapshots__/HeaderMenuItem.spec.ts.snap +4 -1
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +18 -2
- package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +14 -4
- package/src/components/HeaderNavigationBar/types.ts +1 -0
- package/src/components/HeaderToolbar/Accessibilite.stories.ts +8 -0
- package/src/components/HeaderToolbar/HeaderToolbar.mdx +0 -1
- package/src/components/HeaderToolbar/HeaderToolbar.stories.ts +65 -6
- package/src/components/HeaderToolbar/HeaderToolbar.vue +589 -162
- package/src/components/HeaderToolbar/locales.ts +3 -0
- package/src/components/HeaderToolbar/useMobileRightMenu.ts +121 -0
- package/src/components/NirField/Accessibilite.stories.ts +4 -0
- package/src/components/NirField/NirField.stories.ts +0 -11
- package/src/components/NirField/NirField.vue +164 -53
- package/src/components/NirField/locales.ts +6 -4
- package/src/components/NirField/tests/NirField.spec.ts +2 -2
- package/src/components/PasswordField/Accessibilite.stories.ts +96 -0
- package/src/components/PasswordField/PasswordField.stories.ts +8 -1
- package/src/components/PasswordField/PasswordField.vue +98 -19
- package/src/components/PasswordField/locales.ts +2 -0
- package/src/components/PasswordField/tests/PasswordField.spec.ts +1 -1
- package/src/components/PhoneField/PhoneField.vue +4 -0
- package/src/components/RangeField/Accessibilite.stories.ts +4 -0
- package/src/components/RangeField/RangeField.stories.ts +60 -0
- package/src/components/RangeField/RangeField.vue +37 -21
- package/src/components/RangeField/RangeSlider/RangeSlider.vue +30 -8
- package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -0
- package/src/components/RangeField/RangeSlider/tests/__snapshots__/rangeSlider.spec.ts.snap +12 -4
- package/src/components/RangeField/RangeSlider/tests/useMouseSlide.spec.ts +9 -1
- package/src/components/RangeField/RangeSlider/useMouseSlide.ts +23 -8
- package/src/components/RangeField/config.ts +3 -1
- package/src/components/RangeField/tests/__snapshots__/RangeField.spec.ts.snap +132 -141
- package/src/components/RatingPicker/Accessibilite.stories.ts +4 -0
- package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +119 -66
- package/src/components/RatingPicker/EmotionPicker/locales.ts +2 -0
- package/src/components/RatingPicker/EmotionPicker/tests/EmotionPicker.spec.ts +4 -4
- package/src/components/RatingPicker/EmotionPicker/tests/__snapshots__/EmotionPicker.spec.ts.snap +462 -678
- package/src/components/RatingPicker/NumberPicker/NumberPicker.vue +106 -42
- package/src/components/RatingPicker/NumberPicker/tests/NumberPicker.spec.ts +3 -3
- package/src/components/RatingPicker/NumberPicker/tests/__snapshots__/NumberPicker.spec.ts.snap +119 -515
- package/src/components/RatingPicker/Rating.ts +5 -1
- package/src/components/RatingPicker/RatingPicker.stories.ts +5 -6
- package/src/components/RatingPicker/RatingPicker.vue +7 -2
- package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +78 -42
- package/src/components/RatingPicker/StarsPicker/tests/StarsPicker.spec.ts +7 -7
- package/src/components/RatingPicker/StarsPicker/tests/__snapshots__/StarsPicker.spec.ts.snap +163 -245
- package/src/components/RatingPicker/locales.ts +1 -0
- package/src/components/RatingPicker/tests/__snapshots__/RatingPicker.spec.ts.snap +120 -516
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +109 -84
- package/src/components/Tables/SyServerTable/SyServerTable.vue +51 -16
- package/src/components/Tables/SyTable/SyTable.vue +1 -6
- package/src/components/Tables/SyTable/tests/SyTable.spec.ts +6 -0
- package/src/components/Tables/common/SyTablePagination.vue +0 -6
- package/src/components/Tables/common/tableProps.ts +19 -1
- package/src/components/Tables/common/usePagination.ts +0 -6
- package/src/components/Tables/common/useTableCheckbox.ts +5 -5
- package/src/components/index.ts +8 -0
- package/src/composables/rules/useFieldValidation.ts +21 -3
- package/src/composables/validation/AvecVosComposants.mdx +145 -0
- package/src/composables/validation/FormValidation.mdx +151 -0
- package/src/composables/validation/FormValidation.stories.ts +402 -0
- package/src/composables/validation/useFormValidation.ts +91 -0
- package/src/composables/validation/useValidatable.ts +41 -0
- package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +2 -2
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +2 -2
- package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +2 -2
- package/src/stories/Demarrer/Accueil.stories.ts +6 -6
- package/src/stories/GuideDuDev/Installation.mdx +13 -0
- package/src/stories/GuideDuDev/LesBreackingChanges.mdx +1 -1
- package/src/stories/GuideDuDev/MigrationDepuisBridge.mdx +1 -1
- package/src/stories/GuideDuDev/MigrationDepuisVue2.mdx +1 -1
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
|
-
import { VMenu, VList, VListItem
|
|
3
|
-
import { mdiChevronDown, mdiChevronRight } from '@mdi/js'
|
|
2
|
+
import { VMenu, VList, VListItem } from 'vuetify/components'
|
|
3
|
+
import { mdiChevronDown, mdiChevronRight, mdiMenu } from '@mdi/js'
|
|
4
4
|
import { ref, type PropType, nextTick, onMounted, onBeforeUnmount, watch } from 'vue'
|
|
5
5
|
import type { MenuItem, SelectItem } from './types'
|
|
6
6
|
import { useDisplay } from 'vuetify'
|
|
7
|
+
import { useMobileRightMenu } from './useMobileRightMenu'
|
|
8
|
+
import SyIcon from '@/components/Customs/SyIcon/SyIcon.vue'
|
|
9
|
+
|
|
10
|
+
import { locales } from './locales'
|
|
7
11
|
|
|
8
12
|
const elementWidth = ref(0)
|
|
9
13
|
const menuOpen = ref(false)
|
|
@@ -27,6 +31,10 @@
|
|
|
27
31
|
},
|
|
28
32
|
],
|
|
29
33
|
},
|
|
34
|
+
currentPageIndex: {
|
|
35
|
+
type: Number,
|
|
36
|
+
default: null,
|
|
37
|
+
},
|
|
30
38
|
rightMenu: {
|
|
31
39
|
type: Array as PropType<MenuItem[]>,
|
|
32
40
|
default: () => [
|
|
@@ -153,66 +161,156 @@
|
|
|
153
161
|
},
|
|
154
162
|
],
|
|
155
163
|
},
|
|
156
|
-
|
|
164
|
+
ariaLeftLabel: {
|
|
157
165
|
type: String,
|
|
158
|
-
default: '
|
|
166
|
+
default: 'Choix du public',
|
|
159
167
|
},
|
|
160
|
-
|
|
168
|
+
ariaRightLabel: {
|
|
161
169
|
type: String,
|
|
162
|
-
default: '
|
|
170
|
+
default: 'Menu institutionnel',
|
|
163
171
|
},
|
|
164
172
|
})
|
|
165
173
|
|
|
174
|
+
// Display breakpoint helpers
|
|
166
175
|
const { smAndDown } = useDisplay()
|
|
167
176
|
|
|
177
|
+
// Return proper link component
|
|
168
178
|
const getLinkComponent = (item: MenuItem): string => {
|
|
169
|
-
if (item.href)
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
return 'a' // fix doc
|
|
177
|
-
}
|
|
179
|
+
if (item.href) return 'a'
|
|
180
|
+
// Safely detect a possible router "to" without using 'any'
|
|
181
|
+
const maybeTo = (item as unknown as { to?: unknown }).to
|
|
182
|
+
if (maybeTo !== undefined && maybeTo !== null) return 'RouterLink'
|
|
183
|
+
return 'a'
|
|
178
184
|
}
|
|
179
185
|
|
|
186
|
+
// Overlay and focus state
|
|
180
187
|
const showOverlay = ref(false)
|
|
181
188
|
const highlightMenu = ref(false)
|
|
182
189
|
const activeIndex = ref<number | null>(null)
|
|
190
|
+
const activeDescendantId = ref<string | null>(null)
|
|
191
|
+
// Transient audit compatibility: when true, all items are tabbable (0) just after open
|
|
192
|
+
const leftMenuAuditTransient = ref(false)
|
|
193
|
+
|
|
194
|
+
const menuButtonRef = ref<HTMLElement | null>(null)
|
|
195
|
+
|
|
196
|
+
// Resolve the interactive ancestor (a/button/focusable) for the left menu activator span
|
|
197
|
+
const getLeftActivatorInteractiveEl = (): HTMLElement | null => {
|
|
198
|
+
const raw = menuButtonRef.value as unknown as { $el?: unknown } | HTMLElement | null
|
|
199
|
+
const baseEl = (raw && (raw as { $el?: unknown }).$el) ? (raw as { $el: unknown }).$el as HTMLElement : (raw as HTMLElement | null)
|
|
200
|
+
const elem = baseEl instanceof HTMLElement ? baseEl : null
|
|
201
|
+
const target = elem?.closest('a,button,[tabindex]:not([tabindex="-1"])') as HTMLElement | null
|
|
202
|
+
if (target) return target
|
|
203
|
+
// Fallback to DOM query if ref resolution fails
|
|
204
|
+
return document.querySelector('#left-menu li:nth-child(2) a') as HTMLElement | null
|
|
205
|
+
}
|
|
206
|
+
// Mobile burger and focus management via composable
|
|
207
|
+
const {
|
|
208
|
+
mobileMenuOpen,
|
|
209
|
+
mobileBurgerButtonRef,
|
|
210
|
+
mobileRightMenuRef,
|
|
211
|
+
mobileActiveDescendantId,
|
|
212
|
+
handleMobileMenuKeydown,
|
|
213
|
+
onMobileMenuModel,
|
|
214
|
+
openMobileMenuAndFocus,
|
|
215
|
+
} = useMobileRightMenu()
|
|
216
|
+
const leftMenuListRef = ref<HTMLElement | null>(null)
|
|
217
|
+
const leftMenuRef = ref<HTMLElement | null>(null)
|
|
218
|
+
|
|
219
|
+
// Resolve the actual HTMLElement of the left dropdown list (works with Vuetify component refs and teleported content)
|
|
220
|
+
const getLeftDropdownEl = (): HTMLElement | null => {
|
|
221
|
+
const refVal = leftMenuListRef.value as unknown as { $el?: unknown } | HTMLElement | null
|
|
222
|
+
const maybeEl = (refVal && (refVal as { $el?: unknown }).$el) ?? refVal
|
|
223
|
+
// If we got a real HTMLElement, return it; otherwise fallback to the id in the DOM
|
|
224
|
+
if (maybeEl instanceof HTMLElement) return maybeEl
|
|
225
|
+
return document.getElementById('left-dropdown-menu')
|
|
226
|
+
}
|
|
183
227
|
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
228
|
+
const isCurrentRightLink = (item: MenuItem): boolean => {
|
|
229
|
+
if (!item.href) return false
|
|
230
|
+
try {
|
|
231
|
+
const target = new URL(item.href, window.location.href)
|
|
232
|
+
const current = new URL(window.location.href)
|
|
233
|
+
return target.origin === current.origin && target.pathname === current.pathname
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
return false
|
|
188
237
|
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// Mobile handlers are provided by the composable
|
|
241
|
+
|
|
242
|
+
const onLeftMenuModel = (val: boolean) => {
|
|
243
|
+
if (val) {
|
|
244
|
+
leftMenuAuditTransient.value = true
|
|
245
|
+
showOverlay.value = true
|
|
246
|
+
nextTick(() => {
|
|
247
|
+
setTimeout(() => {
|
|
248
|
+
const container = getLeftDropdownEl()
|
|
249
|
+
const first = container?.querySelector('[role="menuitem"]') as HTMLElement | null
|
|
250
|
+
if (first) {
|
|
251
|
+
activeDescendantId.value = first.id || 'menu-item-0'
|
|
252
|
+
first.focus()
|
|
253
|
+
}
|
|
254
|
+
}, 30)
|
|
255
|
+
})
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
hideOverlay()
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// Hide overlay and reset menu state
|
|
263
|
+
const hideOverlay = () => {
|
|
189
264
|
showOverlay.value = false
|
|
190
|
-
menuOpen.value = false
|
|
265
|
+
menuOpen.value = false
|
|
266
|
+
activeDescendantId.value = null
|
|
191
267
|
}
|
|
268
|
+
|
|
269
|
+
// Handle click on left menu links
|
|
192
270
|
const handleLink = (index: number) => {
|
|
193
271
|
if (index === 1) {
|
|
272
|
+
// Toggle overlay visibility when clicking the dropdown activator (required by tests)
|
|
194
273
|
showOverlay.value = !showOverlay.value
|
|
195
274
|
}
|
|
196
275
|
}
|
|
276
|
+
|
|
277
|
+
// Update active link and manage overlay highlight logic
|
|
197
278
|
const checkActiveLink = (index: number) => {
|
|
198
|
-
|
|
279
|
+
if (props.currentPageIndex === null) {
|
|
280
|
+
activeIndex.value = index
|
|
281
|
+
}
|
|
199
282
|
if (index !== 1) {
|
|
283
|
+
// Clicking a normal link should close any overlay/menu
|
|
200
284
|
highlightMenu.value = false
|
|
285
|
+
hideOverlay()
|
|
201
286
|
}
|
|
202
287
|
}
|
|
203
288
|
|
|
289
|
+
// onMobileMenuModel provided by composable
|
|
290
|
+
|
|
291
|
+
// openMobileMenuAndFocus provided by composable
|
|
292
|
+
|
|
293
|
+
// Computed pour déterminer quel élément doit avoir aria-current
|
|
294
|
+
const getCurrentPageIndex = () => {
|
|
295
|
+
return props.currentPageIndex !== null ? props.currentPageIndex : activeIndex.value
|
|
296
|
+
}
|
|
297
|
+
|
|
204
298
|
const deleteActiveLink = () => {
|
|
205
299
|
activeIndex.value = null
|
|
300
|
+
// Close any overlay when navigating via right menu
|
|
301
|
+
hideOverlay()
|
|
206
302
|
}
|
|
207
303
|
|
|
208
304
|
const handleKeyboardEnter = (item: MenuItem, index: number) => {
|
|
209
305
|
if (index === 1) {
|
|
210
|
-
// Pour le menu déroulant,
|
|
211
|
-
|
|
306
|
+
// Pour le menu déroulant, ouvrir le menu et l'overlay
|
|
307
|
+
openMenuWithKeyboard()
|
|
212
308
|
}
|
|
213
309
|
else if (item.href) {
|
|
214
310
|
// Pour les liens, naviguer vers la destination
|
|
215
311
|
checkActiveLink(index)
|
|
312
|
+
// Ensure overlay is closed when navigating via keyboard
|
|
313
|
+
hideOverlay()
|
|
216
314
|
if (item.openInNewTab) {
|
|
217
315
|
window.open(item.href, '_blank', 'noopener,noreferrer')
|
|
218
316
|
}
|
|
@@ -224,6 +322,8 @@
|
|
|
224
322
|
// Pour les liens RouterLink, on ne fait que mettre à jour l'activeIndex
|
|
225
323
|
// car Vue Router gérera la navigation
|
|
226
324
|
checkActiveLink(index)
|
|
325
|
+
// Ensure overlay is closed when navigating via router
|
|
326
|
+
hideOverlay()
|
|
227
327
|
}
|
|
228
328
|
}
|
|
229
329
|
|
|
@@ -235,6 +335,15 @@
|
|
|
235
335
|
activeIndex.value = 1
|
|
236
336
|
selectedSubItemText.value = subItem.text // Update selected sub-item tracker
|
|
237
337
|
|
|
338
|
+
// Fermer le menu et l'overlay puis rediriger le focus sur le bouton
|
|
339
|
+
hideOverlay()
|
|
340
|
+
|
|
341
|
+
// Rediriger le focus sur le bouton après sélection
|
|
342
|
+
nextTick(() => {
|
|
343
|
+
const focusTarget = getLeftActivatorInteractiveEl()
|
|
344
|
+
focusTarget?.focus()
|
|
345
|
+
})
|
|
346
|
+
|
|
238
347
|
if (subItem.href) {
|
|
239
348
|
if (subItem.openInNewTab) {
|
|
240
349
|
window.open(subItem.href, '_blank', 'noopener,noreferrer')
|
|
@@ -247,9 +356,12 @@
|
|
|
247
356
|
|
|
248
357
|
const updateWidth = async () => {
|
|
249
358
|
await nextTick()
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
359
|
+
// Measure second left-menu item width using the leftMenuRef (nav > ul > li:nth-child(2))
|
|
360
|
+
const navLike = leftMenuRef.value as unknown as { $el?: unknown } | HTMLElement | null
|
|
361
|
+
const navEl = (navLike && (navLike as { $el?: unknown }).$el) ? (navLike as { $el: unknown }).$el as HTMLElement : (navLike as HTMLElement | null)
|
|
362
|
+
const secondLi = navEl?.querySelector('ul > li:nth-child(2)') as HTMLElement | null
|
|
363
|
+
if (secondLi) {
|
|
364
|
+
elementWidth.value = secondLi.offsetWidth || 0
|
|
253
365
|
}
|
|
254
366
|
}
|
|
255
367
|
|
|
@@ -268,6 +380,109 @@
|
|
|
268
380
|
window.removeEventListener('resize', updateWidth)
|
|
269
381
|
})
|
|
270
382
|
|
|
383
|
+
// Gestion de la navigation clavier dans le menu (scopée au menu courant)
|
|
384
|
+
const handleMenuKeydown = (event: KeyboardEvent) => {
|
|
385
|
+
// Exit transient audit mode on first real keyboard interaction inside the menu
|
|
386
|
+
if (leftMenuAuditTransient.value) leftMenuAuditTransient.value = false
|
|
387
|
+
const container = event.currentTarget as HTMLElement | null
|
|
388
|
+
const menuItems = container ? (Array.from(container.querySelectorAll('[role="menuitem"]')) as HTMLElement[]) : []
|
|
389
|
+
if (!menuItems || menuItems.length === 0) return
|
|
390
|
+
|
|
391
|
+
const currentIndex = activeDescendantId.value
|
|
392
|
+
? menuItems.findIndex(item => item.id === activeDescendantId.value)
|
|
393
|
+
: -1
|
|
394
|
+
|
|
395
|
+
let newIndex = currentIndex
|
|
396
|
+
|
|
397
|
+
switch (event.key) {
|
|
398
|
+
case 'ArrowDown':
|
|
399
|
+
event.preventDefault()
|
|
400
|
+
newIndex = currentIndex < menuItems.length - 1 ? currentIndex + 1 : 0
|
|
401
|
+
break
|
|
402
|
+
case 'ArrowUp':
|
|
403
|
+
event.preventDefault()
|
|
404
|
+
newIndex = currentIndex > 0 ? currentIndex - 1 : menuItems.length - 1
|
|
405
|
+
break
|
|
406
|
+
case 'Home':
|
|
407
|
+
event.preventDefault()
|
|
408
|
+
newIndex = 0
|
|
409
|
+
break
|
|
410
|
+
case 'End':
|
|
411
|
+
event.preventDefault()
|
|
412
|
+
newIndex = menuItems.length - 1
|
|
413
|
+
break
|
|
414
|
+
case 'Escape': {
|
|
415
|
+
event.preventDefault()
|
|
416
|
+
menuOpen.value = false
|
|
417
|
+
showOverlay.value = false
|
|
418
|
+
activeDescendantId.value = null
|
|
419
|
+
// Retourner le focus sur le lien du 2ème menu (Professionnel de santé) via ref robuste
|
|
420
|
+
const secondMenuItem = getLeftActivatorInteractiveEl()
|
|
421
|
+
secondMenuItem?.focus()
|
|
422
|
+
return
|
|
423
|
+
}
|
|
424
|
+
case 'Enter':
|
|
425
|
+
case ' ':
|
|
426
|
+
event.preventDefault()
|
|
427
|
+
if (currentIndex >= 0) {
|
|
428
|
+
(menuItems[currentIndex] as HTMLElement).click()
|
|
429
|
+
}
|
|
430
|
+
return
|
|
431
|
+
default: {
|
|
432
|
+
// Navigation par caractère - recherche d'un item qui commence par la lettre tapée
|
|
433
|
+
if (event.key.length === 1 && /^[a-zA-ZÀ-ÿ]$/.test(event.key)) {
|
|
434
|
+
event.preventDefault()
|
|
435
|
+
const searchChar = event.key.toLowerCase()
|
|
436
|
+
|
|
437
|
+
// Commencer la recherche à partir de l'élément suivant le focus actuel
|
|
438
|
+
const startIndex = currentIndex >= 0 ? currentIndex + 1 : 0
|
|
439
|
+
|
|
440
|
+
// Rechercher d'abord à partir de l'index de départ jusqu'à la fin
|
|
441
|
+
for (let i = startIndex; i < menuItems.length; i++) {
|
|
442
|
+
const itemText = menuItems[i].textContent?.trim().toLowerCase()
|
|
443
|
+
if (itemText && itemText.startsWith(searchChar)) {
|
|
444
|
+
activeDescendantId.value = (menuItems[i] as HTMLElement).id
|
|
445
|
+
return
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
// Si rien trouvé, rechercher du début jusqu'à l'index de départ
|
|
450
|
+
for (let i = 0; i < startIndex; i++) {
|
|
451
|
+
const itemText = (menuItems[i] as HTMLElement).textContent?.trim().toLowerCase()
|
|
452
|
+
if (itemText && itemText.startsWith(searchChar)) {
|
|
453
|
+
activeDescendantId.value = (menuItems[i] as HTMLElement).id
|
|
454
|
+
return
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
break
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
if (newIndex !== currentIndex && newIndex >= 0) {
|
|
463
|
+
activeDescendantId.value = menuItems[newIndex].id
|
|
464
|
+
// Move real focus to the active item (roving tabindex)
|
|
465
|
+
const nextEl = menuItems[newIndex] as HTMLElement
|
|
466
|
+
nextTick(() => nextEl.focus())
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// Ouvrir le menu et placer le focus sur le premier élément (menu gauche)
|
|
471
|
+
const openMenuWithKeyboard = () => {
|
|
472
|
+
menuOpen.value = true
|
|
473
|
+
showOverlay.value = true
|
|
474
|
+
nextTick(() => {
|
|
475
|
+
setTimeout(() => {
|
|
476
|
+
const container = getLeftDropdownEl()
|
|
477
|
+
const firstMenuItem = container?.querySelector('[role="menuitem"]') as HTMLElement | null
|
|
478
|
+
if (firstMenuItem) {
|
|
479
|
+
activeDescendantId.value = firstMenuItem.id || 'menu-item-0'
|
|
480
|
+
firstMenuItem.focus()
|
|
481
|
+
}
|
|
482
|
+
}, 30)
|
|
483
|
+
})
|
|
484
|
+
}
|
|
485
|
+
|
|
271
486
|
defineExpose({
|
|
272
487
|
hideOverlay,
|
|
273
488
|
handleLink,
|
|
@@ -279,147 +494,247 @@
|
|
|
279
494
|
getLinkComponent,
|
|
280
495
|
handleSubMenuItemClick,
|
|
281
496
|
handleKeyboardEnter,
|
|
497
|
+
openMenuWithKeyboard,
|
|
498
|
+
handleMenuKeydown,
|
|
282
499
|
})
|
|
283
500
|
</script>
|
|
284
501
|
|
|
285
502
|
<template>
|
|
286
|
-
<
|
|
503
|
+
<header class="toolbar">
|
|
287
504
|
<div class="container">
|
|
288
|
-
<
|
|
289
|
-
<
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
:href="item.href"
|
|
314
|
-
:rel="item.openInNewTab ? 'noopener noreferrer' : undefined"
|
|
315
|
-
:tabindex="0"
|
|
316
|
-
:target="item.openInNewTab ? '_blank' : undefined"
|
|
317
|
-
:title="item.title"
|
|
318
|
-
:to="item.to"
|
|
319
|
-
:aria-current="activeIndex === index ? 'page' : undefined"
|
|
320
|
-
@click="checkActiveLink(index)"
|
|
321
|
-
@focus="index === 1 && showOverlay ? highlightMenu = true : null"
|
|
322
|
-
@mouseover="index === 1 && showOverlay ? highlightMenu = true : null"
|
|
323
|
-
@keydown.enter.prevent="handleKeyboardEnter(item, index)"
|
|
505
|
+
<section class="left-section">
|
|
506
|
+
<slot name="left-menu">
|
|
507
|
+
<button
|
|
508
|
+
v-if="showOverlay"
|
|
509
|
+
:aria-label="locales.closeOverlay"
|
|
510
|
+
class="overlay"
|
|
511
|
+
@click="hideOverlay"
|
|
512
|
+
@keydown.enter="hideOverlay"
|
|
513
|
+
@keydown.esc="hideOverlay"
|
|
514
|
+
/>
|
|
515
|
+
<nav
|
|
516
|
+
id="left-menu"
|
|
517
|
+
ref="leftMenuRef"
|
|
518
|
+
:aria-label="props.ariaLeftLabel"
|
|
519
|
+
role="navigation"
|
|
520
|
+
>
|
|
521
|
+
<ul>
|
|
522
|
+
<li
|
|
523
|
+
v-for="(item, index) in props.leftMenu"
|
|
524
|
+
:key="index"
|
|
525
|
+
:class="{
|
|
526
|
+
active: getCurrentPageIndex() === index && selectedSubItemText !== 'Professionnel de santé',
|
|
527
|
+
'menu-open': index === 1 && menuOpen,
|
|
528
|
+
'current-page': getCurrentPageIndex() === index
|
|
529
|
+
}"
|
|
324
530
|
>
|
|
325
|
-
<
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
:
|
|
332
|
-
:
|
|
333
|
-
|
|
334
|
-
|
|
531
|
+
<component
|
|
532
|
+
:is="getLinkComponent(item as MenuItem)"
|
|
533
|
+
:aria-label="itemsSelectMenu && index === 1 ? dropdownMenuTitle + '' : item.title"
|
|
534
|
+
:href="item.href"
|
|
535
|
+
:rel="item.openInNewTab ? 'noopener noreferrer' : undefined"
|
|
536
|
+
:tabindex="0"
|
|
537
|
+
:target="item.openInNewTab ? '_blank' : undefined"
|
|
538
|
+
:to="item.to"
|
|
539
|
+
:aria-current="getCurrentPageIndex() === index ? 'page' : undefined"
|
|
540
|
+
:aria-expanded="itemsSelectMenu && index === 1 ? (menuOpen ? 'true' : 'false') : undefined"
|
|
541
|
+
:aria-haspopup="itemsSelectMenu && index === 1 ? 'menu' : undefined"
|
|
542
|
+
:aria-controls="itemsSelectMenu && index === 1 && menuOpen ? 'left-dropdown-menu' : undefined"
|
|
543
|
+
@click="checkActiveLink(index)"
|
|
544
|
+
@focus="index === 1 && showOverlay ? highlightMenu = true : null"
|
|
545
|
+
@mouseover="index === 1 && showOverlay ? highlightMenu = true : null"
|
|
546
|
+
@keydown.enter.prevent="handleKeyboardEnter(item, index)"
|
|
547
|
+
@keydown.space.prevent="index === 1 ? openMenuWithKeyboard() : null"
|
|
548
|
+
@keydown.arrow-down.prevent="index === 1 ? openMenuWithKeyboard() : null"
|
|
335
549
|
>
|
|
336
|
-
<
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
:aria-expanded="menuOpen ? 'true' : 'false'"
|
|
343
|
-
:aria-haspopup="'true'"
|
|
344
|
-
class="sy-header-button d-flex justify-space-between"
|
|
345
|
-
@click="handleLink(index); checkActiveLink(index)"
|
|
346
|
-
>
|
|
347
|
-
{{ dropdownMenuTitle }}
|
|
348
|
-
<v-icon
|
|
349
|
-
:icon="mdiChevronDown"
|
|
350
|
-
size="small"
|
|
351
|
-
class="ml-1"
|
|
352
|
-
/>
|
|
353
|
-
</button>
|
|
354
|
-
</template>
|
|
355
|
-
<v-list
|
|
356
|
-
dense
|
|
357
|
-
:class="smAndDown ? 'mt-2 smAndDown' : 'mt-3'"
|
|
358
|
-
:style="smAndDown ? {width: '110vh'} : {width: elementWidth >= 260 ? elementWidth + 'px' : '236px'}"
|
|
550
|
+
<span
|
|
551
|
+
v-if="itemsSelectMenu && index === 1"
|
|
552
|
+
ref="menuButtonRef"
|
|
553
|
+
:class="{ 'link-active': activeIndex === index, 'menu-open': menuOpen }"
|
|
554
|
+
:style="smAndDown ? {minWidth: '136px'} : {minWidth: '236px'}"
|
|
555
|
+
class="sy-header-button d-flex justify-space-between"
|
|
359
556
|
>
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
:
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
557
|
+
{{ dropdownMenuTitle }}
|
|
558
|
+
<SyIcon
|
|
559
|
+
:icon="mdiChevronDown"
|
|
560
|
+
size="small"
|
|
561
|
+
decorative
|
|
562
|
+
class="ml-1"
|
|
563
|
+
/>
|
|
564
|
+
</span>
|
|
565
|
+
<v-menu
|
|
566
|
+
v-if="itemsSelectMenu && index === 1"
|
|
567
|
+
v-model="menuOpen"
|
|
568
|
+
location="bottom"
|
|
569
|
+
attach="body"
|
|
570
|
+
scroll-strategy="none"
|
|
571
|
+
:offset="[-12,0]"
|
|
572
|
+
:close-on-content-click="true"
|
|
573
|
+
activator="parent"
|
|
574
|
+
content-class="left-dropdown-menu"
|
|
575
|
+
@update:model-value="onLeftMenuModel"
|
|
576
|
+
>
|
|
577
|
+
<v-list
|
|
578
|
+
id="left-dropdown-menu"
|
|
579
|
+
ref="leftMenuListRef"
|
|
580
|
+
role="menu"
|
|
581
|
+
tabindex="-1"
|
|
582
|
+
:class="smAndDown ? 'mt-2 smAndDown' : 'mt-3'"
|
|
583
|
+
:style="smAndDown ? { width: '100vw', maxWidth: '100vw' } : { width: elementWidth >= 260 ? elementWidth + 'px' : '236px' }"
|
|
584
|
+
:aria-activedescendant="activeDescendantId || undefined"
|
|
585
|
+
@keydown="handleMenuKeydown"
|
|
367
586
|
>
|
|
368
|
-
<v-list-item
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
587
|
+
<v-list-item
|
|
588
|
+
v-for="(subItem, subIndex) in itemsSelectMenu"
|
|
589
|
+
:id="`menu-item-${subIndex}`"
|
|
590
|
+
:key="subIndex"
|
|
591
|
+
role="menuitem"
|
|
592
|
+
:tabindex="leftMenuAuditTransient ? 0 : (activeDescendantId === `menu-item-${subIndex}` ? 0 : -1)"
|
|
593
|
+
:aria-selected="undefined"
|
|
594
|
+
:class="{
|
|
595
|
+
'subitem-selected': subItem.text === selectedSubItemText,
|
|
596
|
+
'menu-item-focused': activeDescendantId === `menu-item-${subIndex}`
|
|
597
|
+
}"
|
|
598
|
+
@click="handleSubMenuItemClick(subItem)"
|
|
599
|
+
>
|
|
600
|
+
<v-list-item-title
|
|
601
|
+
class="text-primary"
|
|
602
|
+
role="presentation"
|
|
603
|
+
>
|
|
604
|
+
<SyIcon
|
|
605
|
+
:icon="mdiChevronRight"
|
|
606
|
+
size="small"
|
|
607
|
+
decorative
|
|
608
|
+
class="ml-1"
|
|
609
|
+
/>
|
|
610
|
+
<span>
|
|
611
|
+
{{ subItem.text }}
|
|
612
|
+
</span>
|
|
613
|
+
</v-list-item-title>
|
|
614
|
+
</v-list-item>
|
|
615
|
+
</v-list>
|
|
616
|
+
</v-menu>
|
|
617
|
+
<span
|
|
618
|
+
v-else
|
|
619
|
+
class="link"
|
|
620
|
+
>
|
|
621
|
+
{{ item.title }}
|
|
622
|
+
</span>
|
|
623
|
+
</component>
|
|
624
|
+
</li>
|
|
625
|
+
</ul>
|
|
626
|
+
</nav>
|
|
627
|
+
</slot>
|
|
628
|
+
</section>
|
|
629
|
+
<section class="right-section">
|
|
630
|
+
<!-- Mobile burger menu for right menu (accessible) -->
|
|
631
|
+
<div
|
|
632
|
+
v-if="smAndDown"
|
|
633
|
+
class="mobile-burger"
|
|
397
634
|
>
|
|
398
|
-
<
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
635
|
+
<v-menu
|
|
636
|
+
v-model="mobileMenuOpen"
|
|
637
|
+
location="bottom right"
|
|
638
|
+
origin="top right"
|
|
639
|
+
attach="body"
|
|
640
|
+
content-class="mobile-burger-menu"
|
|
641
|
+
eager
|
|
642
|
+
:offset="[0,0]"
|
|
643
|
+
:close-on-content-click="true"
|
|
644
|
+
@update:model-value="onMobileMenuModel"
|
|
645
|
+
>
|
|
646
|
+
<template #activator="{ props: activatorProps }">
|
|
647
|
+
<button
|
|
648
|
+
ref="mobileBurgerButtonRef"
|
|
649
|
+
type="button"
|
|
650
|
+
class="burger-btn"
|
|
651
|
+
v-bind="activatorProps"
|
|
652
|
+
:aria-label="props.ariaRightLabel"
|
|
653
|
+
:title="props.ariaRightLabel"
|
|
654
|
+
aria-haspopup="menu"
|
|
655
|
+
:aria-expanded="mobileMenuOpen ? 'true' : 'false'"
|
|
656
|
+
aria-controls="mobile-right-menu"
|
|
657
|
+
@keydown.space.prevent="openMobileMenuAndFocus()"
|
|
658
|
+
@keydown.enter.prevent="openMobileMenuAndFocus()"
|
|
659
|
+
>
|
|
660
|
+
<SyIcon
|
|
661
|
+
:icon="mdiMenu"
|
|
662
|
+
size="small"
|
|
663
|
+
decorative
|
|
664
|
+
/>
|
|
665
|
+
</button>
|
|
666
|
+
</template>
|
|
667
|
+
<v-list
|
|
668
|
+
id="mobile-right-menu"
|
|
669
|
+
ref="mobileRightMenuRef"
|
|
670
|
+
role="menu"
|
|
671
|
+
tabindex="-1"
|
|
672
|
+
:aria-activedescendant="mobileActiveDescendantId || undefined"
|
|
673
|
+
:aria-label="props.ariaRightLabel"
|
|
674
|
+
@keydown="handleMobileMenuKeydown"
|
|
402
675
|
>
|
|
403
|
-
<
|
|
404
|
-
|
|
405
|
-
:
|
|
676
|
+
<v-list-item
|
|
677
|
+
v-for="(item, index) in props.rightMenu"
|
|
678
|
+
:id="`mobile-item-${index}`"
|
|
679
|
+
:key="index"
|
|
680
|
+
link
|
|
681
|
+
role="menuitem"
|
|
682
|
+
:aria-current="isCurrentRightLink(item) ? 'page' : undefined"
|
|
406
683
|
:href="item.href"
|
|
407
|
-
:rel="item.openInNewTab ? 'noopener noreferrer' : undefined"
|
|
408
|
-
:tabindex="0"
|
|
409
|
-
:aria-current="activeIndex === index ? 'page' : undefined"
|
|
410
|
-
:target="item.openInNewTab ? '_blank' : undefined"
|
|
411
|
-
:title="item.title"
|
|
412
684
|
:to="item.to"
|
|
413
|
-
|
|
685
|
+
:target="item.openInNewTab ? '_blank' : undefined"
|
|
686
|
+
:rel="item.openInNewTab ? 'noopener noreferrer' : undefined"
|
|
687
|
+
:class="{ 'mobile-right-link': true, 'menu-item-focused': mobileActiveDescendantId === `mobile-item-${index}` }"
|
|
688
|
+
tabindex="0"
|
|
689
|
+
@click="mobileMenuOpen = false"
|
|
414
690
|
>
|
|
415
|
-
<
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
691
|
+
<v-list-item-title class="text-primary">
|
|
692
|
+
<SyIcon
|
|
693
|
+
:icon="mdiChevronRight"
|
|
694
|
+
size="small"
|
|
695
|
+
decorative
|
|
696
|
+
class="mr-1"
|
|
697
|
+
/>
|
|
698
|
+
{{ item.title }}
|
|
699
|
+
</v-list-item-title>
|
|
700
|
+
</v-list-item>
|
|
701
|
+
</v-list>
|
|
702
|
+
</v-menu>
|
|
703
|
+
</div>
|
|
704
|
+
<slot
|
|
705
|
+
v-if="!smAndDown"
|
|
706
|
+
name="right-menu"
|
|
707
|
+
>
|
|
708
|
+
<nav
|
|
709
|
+
id="right-menu"
|
|
710
|
+
:aria-label="props.ariaRightLabel"
|
|
711
|
+
role="navigation"
|
|
712
|
+
>
|
|
713
|
+
<ul>
|
|
714
|
+
<li
|
|
715
|
+
v-for="(item, index) in props.rightMenu"
|
|
716
|
+
:key="index"
|
|
717
|
+
>
|
|
718
|
+
<component
|
|
719
|
+
:is="getLinkComponent(item as MenuItem)"
|
|
720
|
+
:aria-label="item.title"
|
|
721
|
+
:href="item.href"
|
|
722
|
+
:rel="item.openInNewTab ? 'noopener noreferrer' : undefined"
|
|
723
|
+
:tabindex="0"
|
|
724
|
+
:target="item.openInNewTab ? '_blank' : undefined"
|
|
725
|
+
:title="item.title"
|
|
726
|
+
:to="item.to"
|
|
727
|
+
@click="deleteActiveLink()"
|
|
728
|
+
>
|
|
729
|
+
<span class="right-menu-item">{{ item.title }}</span>
|
|
730
|
+
</component>
|
|
731
|
+
</li>
|
|
732
|
+
</ul>
|
|
733
|
+
</nav>
|
|
734
|
+
</slot>
|
|
735
|
+
</section>
|
|
421
736
|
</div>
|
|
422
|
-
</
|
|
737
|
+
</header>
|
|
423
738
|
</template>
|
|
424
739
|
|
|
425
740
|
<style lang="scss" scoped>
|
|
@@ -440,6 +755,7 @@ $user-assure: tokens.$user-assure;
|
|
|
440
755
|
$user-professionnel: tokens.$user-professionnel;
|
|
441
756
|
$user-entreprise: tokens.$user-entreprise;
|
|
442
757
|
$first-item-width: 95px;
|
|
758
|
+
$first-item-max-width: 320px;
|
|
443
759
|
$first-item-width-mobile: 32px;
|
|
444
760
|
$second-item-max-height: 44px;
|
|
445
761
|
$second-item-max-height-mobile: 38px;
|
|
@@ -467,14 +783,18 @@ $z-overlay: 5; // Sans !important pour éviter des problèmes
|
|
|
467
783
|
// Container for toolbar content
|
|
468
784
|
.container {
|
|
469
785
|
width: 100%;
|
|
470
|
-
|
|
786
|
+
|
|
787
|
+
/* Use min-height to allow growth with large text instead of clipping */
|
|
788
|
+
min-height: $container-max-height;
|
|
789
|
+
height: auto;
|
|
471
790
|
max-width: $header-max-width;
|
|
472
791
|
display: flex;
|
|
473
792
|
align-items: center;
|
|
474
793
|
justify-content: space-between;
|
|
475
794
|
|
|
476
795
|
@media (width <= $header-breakpoint-sm) {
|
|
477
|
-
|
|
796
|
+
min-height: $container-max-height-mobile;
|
|
797
|
+
height: auto;
|
|
478
798
|
}
|
|
479
799
|
|
|
480
800
|
// Common list styling
|
|
@@ -482,6 +802,9 @@ $z-overlay: 5; // Sans !important pour éviter des problèmes
|
|
|
482
802
|
display: flex;
|
|
483
803
|
align-items: center;
|
|
484
804
|
justify-content: flex-start;
|
|
805
|
+
|
|
806
|
+
/* Allow wrapping when text is zoomed so items don't overflow */
|
|
807
|
+
flex-wrap: wrap;
|
|
485
808
|
list-style: none;
|
|
486
809
|
text-decoration: none;
|
|
487
810
|
}
|
|
@@ -522,6 +845,7 @@ $z-overlay: 5; // Sans !important pour éviter des problèmes
|
|
|
522
845
|
// Premier élément (Assuré)
|
|
523
846
|
li:first-child {
|
|
524
847
|
min-width: $first-item-width;
|
|
848
|
+
max-width: $first-item-max-width;
|
|
525
849
|
background: transparent;
|
|
526
850
|
text-align: center;
|
|
527
851
|
z-index: 1; // Position basse pour passer sous l'overlay
|
|
@@ -534,25 +858,39 @@ $z-overlay: 5; // Sans !important pour éviter des problèmes
|
|
|
534
858
|
a:hover {
|
|
535
859
|
background: $user-assure;
|
|
536
860
|
}
|
|
861
|
+
|
|
862
|
+
// Indicateur visuel non-colorimétrique pour la page actuelle
|
|
863
|
+
&.current-page {
|
|
864
|
+
position: relative;
|
|
865
|
+
|
|
866
|
+
a {
|
|
867
|
+
font-weight: 900;
|
|
868
|
+
text-decoration: underline;
|
|
869
|
+
}
|
|
870
|
+
}
|
|
537
871
|
}
|
|
538
872
|
|
|
539
873
|
// Deuxième élément (Professionnel de santé)
|
|
540
874
|
li:nth-child(2) {
|
|
541
875
|
z-index: $z-menu-item; // Augmenté pour rester au-dessus de l'overlay
|
|
542
|
-
|
|
876
|
+
|
|
877
|
+
/* Allow height to grow with larger text sizes */
|
|
878
|
+
min-height: $second-item-max-height;
|
|
543
879
|
position: relative; // Ajout pour garantir l'effet du z-index
|
|
544
880
|
|
|
545
881
|
@media (width <= $header-breakpoint-sm) {
|
|
546
|
-
|
|
882
|
+
min-height: $second-item-max-height-mobile;
|
|
547
883
|
}
|
|
548
884
|
|
|
549
885
|
a {
|
|
550
|
-
|
|
886
|
+
/* Let the link grow in height with text zoom */
|
|
887
|
+
min-height: $second-item-max-height;
|
|
551
888
|
position: relative; // Garantit l'application du z-index
|
|
552
889
|
z-index: $z-button; // S'assure que le lien reste visible
|
|
890
|
+
max-width: $first-item-max-width;
|
|
553
891
|
|
|
554
892
|
@media (width <= $header-breakpoint-sm) {
|
|
555
|
-
|
|
893
|
+
min-height: $second-item-max-height-mobile;
|
|
556
894
|
}
|
|
557
895
|
}
|
|
558
896
|
|
|
@@ -562,7 +900,9 @@ $z-overlay: 5; // Sans !important pour éviter des problèmes
|
|
|
562
900
|
.sy-header-button {
|
|
563
901
|
text-align: left;
|
|
564
902
|
text-decoration: underline;
|
|
565
|
-
|
|
903
|
+
|
|
904
|
+
/* Allow wrapping to avoid clipping on text zoom */
|
|
905
|
+
white-space: normal;
|
|
566
906
|
}
|
|
567
907
|
}
|
|
568
908
|
|
|
@@ -575,6 +915,17 @@ $z-overlay: 5; // Sans !important pour éviter des problèmes
|
|
|
575
915
|
text-decoration: underline;
|
|
576
916
|
}
|
|
577
917
|
}
|
|
918
|
+
|
|
919
|
+
// Indicateur visuel non-colorimétrique pour la page actuelle
|
|
920
|
+
&.current-page {
|
|
921
|
+
position: relative;
|
|
922
|
+
|
|
923
|
+
a,
|
|
924
|
+
button,
|
|
925
|
+
.sy-header-button {
|
|
926
|
+
text-decoration: underline;
|
|
927
|
+
}
|
|
928
|
+
}
|
|
578
929
|
}
|
|
579
930
|
|
|
580
931
|
// Troisième élément (Entreprise)
|
|
@@ -587,6 +938,16 @@ $z-overlay: 5; // Sans !important pour éviter des problèmes
|
|
|
587
938
|
a:hover {
|
|
588
939
|
background: $user-entreprise;
|
|
589
940
|
}
|
|
941
|
+
|
|
942
|
+
// Indicateur visuel non-colorimétrique pour la page actuelle
|
|
943
|
+
&.current-page {
|
|
944
|
+
position: relative;
|
|
945
|
+
|
|
946
|
+
a {
|
|
947
|
+
font-weight: 900;
|
|
948
|
+
text-decoration: underline;
|
|
949
|
+
}
|
|
950
|
+
}
|
|
590
951
|
}
|
|
591
952
|
}
|
|
592
953
|
|
|
@@ -599,11 +960,14 @@ $z-overlay: 5; // Sans !important pour éviter des problèmes
|
|
|
599
960
|
}
|
|
600
961
|
|
|
601
962
|
ul {
|
|
602
|
-
|
|
603
|
-
|
|
963
|
+
/* Allow wrapping on text zoom to keep content visible and maintain contrast */
|
|
964
|
+
display: flex;
|
|
965
|
+
flex-wrap: wrap;
|
|
966
|
+
white-space: normal;
|
|
967
|
+
overflow: visible;
|
|
604
968
|
|
|
605
969
|
li {
|
|
606
|
-
display: inline-
|
|
970
|
+
display: inline-flex;
|
|
607
971
|
}
|
|
608
972
|
}
|
|
609
973
|
}
|
|
@@ -669,9 +1033,20 @@ $z-overlay: 5; // Sans !important pour éviter des problèmes
|
|
|
669
1033
|
}
|
|
670
1034
|
}
|
|
671
1035
|
|
|
1036
|
+
span {
|
|
1037
|
+
white-space: normal !important; // Override Vuetify nowrap
|
|
1038
|
+
}
|
|
1039
|
+
|
|
672
1040
|
&.v-list-item--link:hover {
|
|
673
1041
|
background-color: transparent;
|
|
674
1042
|
}
|
|
1043
|
+
|
|
1044
|
+
// Style pour l'élément ayant le focus via aria-activedescendant
|
|
1045
|
+
&.menu-item-focused {
|
|
1046
|
+
background-color: rgb(25 118 210 / 12%);
|
|
1047
|
+
outline: 2px solid #1976d2;
|
|
1048
|
+
outline-offset: -2px;
|
|
1049
|
+
}
|
|
675
1050
|
}
|
|
676
1051
|
|
|
677
1052
|
.v-list-item-title {
|
|
@@ -734,6 +1109,50 @@ $z-overlay: 5; // Sans !important pour éviter des problèmes
|
|
|
734
1109
|
}
|
|
735
1110
|
}
|
|
736
1111
|
|
|
1112
|
+
/* Make left dropdown overlay full-width on mobile */
|
|
1113
|
+
:deep(.left-dropdown-menu) {
|
|
1114
|
+
@media (width <= $header-breakpoint-sm) {
|
|
1115
|
+
width: 100vw !important;
|
|
1116
|
+
max-width: 100vw !important;
|
|
1117
|
+
left: 0 !important;
|
|
1118
|
+
right: 0 !important;
|
|
1119
|
+
transform: none !important; /* avoid centering transforms that reduce width */
|
|
1120
|
+
}
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
/* Ensure burger menu overlay content fits and aligns right on mobile */
|
|
1124
|
+
:deep(.mobile-burger-menu) {
|
|
1125
|
+
max-width: 100vw;
|
|
1126
|
+
width: auto;
|
|
1127
|
+
|
|
1128
|
+
/* Always align to the right edge when attached to body */
|
|
1129
|
+
left: auto !important;
|
|
1130
|
+
right: 0 !important;
|
|
1131
|
+
transform: none !important;
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
/* Mobile burger visibility and button focus styles */
|
|
1135
|
+
.mobile-burger {
|
|
1136
|
+
display: none;
|
|
1137
|
+
|
|
1138
|
+
@media (width <= $header-breakpoint-md) {
|
|
1139
|
+
display: block;
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
.burger-btn {
|
|
1143
|
+
background: transparent;
|
|
1144
|
+
border: 1px solid transparent;
|
|
1145
|
+
padding: 6px 8px;
|
|
1146
|
+
border-radius: 4px;
|
|
1147
|
+
cursor: pointer;
|
|
1148
|
+
|
|
1149
|
+
&:focus-visible {
|
|
1150
|
+
outline: 2px solid #1976d2;
|
|
1151
|
+
outline-offset: 2px;
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1154
|
+
}
|
|
1155
|
+
|
|
737
1156
|
.v-overlay--active {
|
|
738
1157
|
z-index: $z-overlay;
|
|
739
1158
|
}
|
|
@@ -749,4 +1168,12 @@ $z-overlay: 5; // Sans !important pour éviter des problèmes
|
|
|
749
1168
|
border: none;
|
|
750
1169
|
z-index: 3;
|
|
751
1170
|
}
|
|
1171
|
+
|
|
1172
|
+
/* Ensure focused menu item styles also apply to teleported overlay content */
|
|
1173
|
+
:deep(.menu-item-focused) {
|
|
1174
|
+
background-color: rgb(25 118 210 / 12%);
|
|
1175
|
+
outline: 2px solid #1976d2;
|
|
1176
|
+
outline-offset: -2px;
|
|
1177
|
+
}
|
|
1178
|
+
|
|
752
1179
|
</style>
|