@cnamts/synapse 1.0.5 → 1.0.7
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-BQpRKTju.js → DateFilter-CHDLz2EO.js} +1 -1
- package/dist/{NumberFilter-BykSKt2D.js → NumberFilter-DXNQ4Uls.js} +1 -1
- package/dist/{PeriodFilter-Cks6NygV.js → PeriodFilter-C8Qf3Jcn.js} +1 -1
- package/dist/{SelectFilter-DEL5dHd_.js → SelectFilter-B2Ejs4Cb.js} +1 -1
- package/dist/{TextFilter-0RAFj7Oe.js → TextFilter-CfR5_A1S.js} +1 -1
- package/dist/components/Amelipro/AmeliproAccordion/AmeliproAccordion.d.ts +103 -0
- package/dist/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.d.ts +105 -0
- package/dist/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.d.ts +116 -0
- package/dist/components/Amelipro/AmeliproAccordionGroup/types.d.ts +4 -0
- package/dist/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.d.ts +220 -0
- package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.d.ts +68 -0
- package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.d.ts +70 -0
- package/dist/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.d.ts +204 -0
- package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +26 -26
- package/dist/components/Amelipro/AmeliproBadge/AmeliproBadge.d.ts +59 -0
- package/dist/components/Amelipro/AmeliproBtn/AmeliproBtn.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.d.ts +132 -0
- package/dist/components/Amelipro/AmeliproCaptcha/types.d.ts +5 -0
- package/dist/components/Amelipro/AmeliproCard/AmeliproCard.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +214 -0
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +70 -0
- package/dist/components/Amelipro/AmeliproCarousel/types.d.ts +7 -0
- package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +125 -0
- package/dist/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.d.ts +126 -0
- package/dist/components/Amelipro/AmeliproCustomSelector/types.d.ts +6 -0
- package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproResultList/AmeliproResultList.d.ts +164 -0
- package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +27 -27
- package/dist/components/Amelipro/AmeliproStateTile/AmeliproStateTile.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproTable/AmeliproTable.d.ts +190 -0
- package/dist/components/Amelipro/AmeliproTable/types.d.ts +34 -0
- package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +32 -32
- package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +6 -6
- package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +7 -7
- package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +2 -2
- package/dist/components/Amelipro/AmeliproTooltips/AmeliproTooltips.d.ts +2 -2
- package/dist/components/Amelipro/types.d.ts +6 -0
- package/dist/components/ChipList/ChipList.d.ts +4 -0
- package/dist/components/ChipList/locales.d.ts +4 -2
- package/dist/components/CookieBanner/CookieBanner.d.ts +1 -1
- package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +8 -8
- package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +454 -8
- package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +6 -1
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +2 -0
- package/dist/components/Customs/SyTabs/SyTabs.d.ts +71 -0
- package/dist/components/Customs/SyTabs/config.d.ts +17 -0
- package/dist/components/Customs/SyTabs/types.d.ts +11 -0
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +12 -10
- package/dist/components/DataList/DataList.d.ts +10 -1
- package/dist/components/DataListGroup/DataListGroup.d.ts +10 -1
- package/dist/components/DataListItem/DataListItem.d.ts +1 -1
- package/dist/components/DataListItem/config.d.ts +1 -1
- package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +4825 -244
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +58 -29
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +28 -10
- package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +18 -8
- package/dist/components/DatePicker/composables/useKeyboardEvents.d.ts +41 -0
- package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +4 -9
- package/dist/components/DatePicker/composables/useTodayButton.d.ts +1 -0
- package/dist/components/DatePicker/utils/dateFormattingUtils.d.ts +72 -0
- package/dist/components/DatePicker/utils/validationUtils.d.ts +38 -0
- package/dist/components/DialogBox/DialogBox.d.ts +219 -0
- package/dist/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.d.ts +9 -3
- package/dist/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.d.ts +6 -1
- package/dist/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.d.ts +11 -1
- package/dist/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.d.ts +11 -1
- package/dist/components/HeaderBar/HeaderBurgerMenu/locals.d.ts +2 -0
- package/dist/components/HeaderBar/HeaderBurgerMenu/useMenuPosition.d.ts +4 -0
- package/dist/components/HeaderLoading/HeaderLoading.d.ts +27 -0
- package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +110 -3
- package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +19 -1
- package/dist/components/LangBtn/LangBtn.d.ts +2 -2
- package/dist/components/NirField/NirField.d.ts +30 -20
- package/dist/components/PeriodField/PeriodField.d.ts +10949 -1783
- package/dist/components/PhoneField/PhoneField.d.ts +1866 -2
- package/dist/components/PhoneField/indicatifs.d.ts +1 -0
- package/dist/components/PhoneField/locales.d.ts +1 -0
- package/dist/components/RangeField/RangeField.d.ts +1 -1
- package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +1 -1
- package/dist/components/SubHeader/SubHeader.d.ts +8 -0
- package/dist/components/SubHeader/locales.d.ts +1 -0
- package/dist/components/SyTextArea/SyTextArea.d.ts +6 -6
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -4
- package/dist/components/Tables/SyTable/SyTable.d.ts +5 -4
- package/dist/components/Tables/common/SyTablePagination.d.ts +458 -7
- package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +2 -2
- package/dist/components/Tables/common/types.d.ts +2 -0
- package/dist/components/index.d.ts +13 -0
- package/dist/composables/index.d.ts +1 -0
- package/dist/composables/usePagination.d.ts +16 -0
- package/dist/design-system-v3.js +174 -160
- package/dist/design-system-v3.umd.cjs +290 -281
- package/dist/directives/lockFocus.d.ts +17 -0
- package/dist/{main-Co2P_lBt.js → main-C66C1BkG.js} +14406 -11554
- package/dist/style.css +1 -1
- package/package.json +4 -1
- package/src/assets/amelipro/apTheme.scss +149 -0
- package/src/assets/amelipro/apTokens.scss +0 -148
- package/src/assets/amelipro/icons.ts +38 -11
- package/src/assets/overrides/_btns.scss +15 -0
- package/src/assets/overrides/_container.scss +36 -0
- package/src/assets/overrides/_forms.scss +7 -0
- package/src/assets/{_spacers.scss → overrides/_spacers.scss} +0 -7
- package/src/assets/overrides/_tables.scss +18 -0
- package/src/assets/overrides/_tooltips.scss +10 -0
- package/src/assets/overrides/_typography.scss +196 -0
- package/src/assets/settings.scss +11 -51
- package/src/assets/themes.scss +10 -0
- package/src/assets/tokens.scss +9 -156
- package/src/components/Accordion/composables/__tests__/useAccordionGroupCommunication.spec.ts +80 -40
- package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordion.mdx +15 -0
- package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordion.stories.ts +83 -0
- package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordion.vue +86 -0
- package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +242 -0
- package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/AmeliproAccordionTemplate.spec.ts +20 -0
- package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/__snapshots__/AmeliproAccordionTemplate.spec.ts.snap +124 -0
- package/src/components/Amelipro/AmeliproAccordion/__tests__/AmeliproAccordion.spec.ts +20 -0
- package/src/components/Amelipro/AmeliproAccordion/__tests__/__snapshots__/AmeliproAccordion.spec.ts.snap +124 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.mdx +20 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.stories.ts +135 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.vue +107 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/AmeliproAccordionGroup.spec.ts +37 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/__snapshots__/AmeliproAccordionGroup.spec.ts.snap +513 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/types.d.ts +4 -0
- package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.mdx +16 -0
- package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.stories.ts +300 -0
- package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +288 -0
- package/src/components/Amelipro/AmeliproAccordionList/__tests__/AmeliproAccordionList.spec.ts +38 -0
- package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +1712 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.mdx +19 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.stories.ts +68 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.vue +66 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.vue +145 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/AmeliproAccordionResultTemplate.spec.ts +24 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/__snapshots__/AmeliproAccordionResultTemplate.spec.ts.snap +127 -0
- package/src/components/Amelipro/AmeliproAccordionResult/__tests__/AmeliproAccordionResult.spec.ts +24 -0
- package/src/components/Amelipro/AmeliproAccordionResult/__tests__/__snapshots__/AmeliproAccordionResult.spec.ts.snap +123 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.mdx +20 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.stories.ts +273 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +275 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/AmeliproAccordionResultList.spec.ts +38 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +1593 -0
- package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.mdx +15 -0
- package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.stories.ts +54 -0
- package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.vue +76 -0
- package/src/components/Amelipro/AmeliproBadge/__tests__/AmeliproBadge.spec.ts +20 -0
- package/src/components/Amelipro/AmeliproBadge/__tests__/__snapshots__/AmeliproBadge.spec.ts.snap +19 -0
- package/src/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.mdx +15 -0
- package/src/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.stories.ts +87 -0
- package/src/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.vue +233 -0
- package/src/components/Amelipro/AmeliproCaptcha/__tests__/AmeliproCaptcha.spec.ts +24 -0
- package/src/components/Amelipro/AmeliproCaptcha/__tests__/__snapshots__/AmeliproCaptcha.spec.ts.snap +384 -0
- package/src/components/Amelipro/AmeliproCaptcha/types.d.ts +5 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.mdx +15 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.stories.ts +191 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.vue +263 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.vue +93 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/__tests__/AmeliproCarouselItem.spec.ts +24 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/__tests__/__snapshots__/AmeliproCarouselItem.spec.ts.snap +43 -0
- package/src/components/Amelipro/AmeliproCarousel/__tests__/AmeliproCarousel.spec.ts +40 -0
- package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +342 -0
- package/src/components/Amelipro/AmeliproCarousel/types.d.ts +8 -0
- package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.mdx +18 -0
- package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.stories.ts +67 -0
- package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +233 -0
- package/src/components/Amelipro/AmeliproClickableTile/tests/AmeliproClickableTile.spec.ts +21 -0
- package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +140 -0
- package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.mdx +15 -0
- package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.stories.ts +143 -0
- package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +351 -0
- package/src/components/Amelipro/AmeliproCustomSelector/__tests__/AmeliproCustomSelector.spec.ts +50 -0
- package/src/components/Amelipro/AmeliproCustomSelector/__tests__/__snapshots__/AmeliproCustomSelector.spec.ts.snap +186 -0
- package/src/components/Amelipro/AmeliproCustomSelector/types.d.ts +6 -0
- package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +7 -1
- package/src/components/Amelipro/AmeliproHeader/tests/__snapshots__/AmeliproHeader.spec.ts.snap +5 -711
- package/src/components/Amelipro/AmeliproIcon/iconList.ts +6 -0
- package/src/components/Amelipro/AmeliproPageLayout/tests/__snapshots__/AmeliproPageLayout.spec.ts.snap +5 -711
- package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.mdx +15 -0
- package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.stories.ts +264 -0
- package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +231 -0
- package/src/components/Amelipro/AmeliproResultList/__tests__/AmeliproResultList.spec.ts +37 -0
- package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +434 -0
- package/src/components/Amelipro/AmeliproTable/AmeliproTable.mdx +22 -0
- package/src/components/Amelipro/AmeliproTable/AmeliproTable.stories.ts +550 -0
- package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +422 -0
- package/src/components/Amelipro/AmeliproTable/__tests__/AmeliproTable.spec.ts +72 -0
- package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +424 -0
- package/src/components/Amelipro/AmeliproTable/types.d.ts +34 -0
- package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.stories.ts +2 -2
- package/src/components/Amelipro/ServiceMenu/ServiceMenu.vue +12 -1
- package/src/components/Amelipro/ServiceMenu/tests/__snapshots__/ServiceMenu.spec.ts.snap +0 -820
- package/src/components/Amelipro/types.ts +8 -0
- package/src/components/ChipList/Accessibilite.stories.ts +4 -0
- package/src/components/ChipList/ChipList.vue +185 -42
- package/src/components/ChipList/locales.ts +4 -2
- package/src/components/ChipList/tests/chipList.spec.ts +7 -4
- package/src/components/CollapsibleList/CollapsibleList.vue +0 -2
- package/src/components/CookieBanner/CookieBanner.vue +1 -3
- package/src/components/CopyBtn/CopyBtn.vue +9 -2
- package/src/components/CopyBtn/tests/CopyBtn.spec.ts +3 -1
- package/src/components/Customs/Selects/SelectOverview.mdx +18 -15
- package/src/components/Customs/Selects/SyBtnSelect/SyBtnSelect.stories.ts +10 -10
- package/src/components/Customs/Selects/SySelect/Accessibilite.mdx +7 -0
- package/src/components/Customs/Selects/SySelect/Accessibilite.stories.ts +4 -1
- package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +92 -4
- package/src/components/Customs/Selects/SySelect/SySelect.vue +373 -56
- package/src/components/Customs/Selects/SySelect/composables/tests/useSySelectKeyboard.spec.ts +14 -5
- package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +129 -12
- package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +3 -1
- package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +165 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +28 -9
- package/src/components/Customs/SyIcon/SyIcon.spec.ts +3 -0
- package/src/components/Customs/SyTabs/Accessibilite.mdx +309 -0
- package/src/components/Customs/SyTabs/SyTabs.mdx +117 -0
- package/src/components/Customs/SyTabs/SyTabs.stories.ts +354 -0
- package/src/components/Customs/SyTabs/SyTabs.vue +350 -0
- package/src/components/Customs/SyTabs/config.ts +17 -0
- package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +425 -0
- package/src/components/Customs/SyTabs/types.ts +12 -0
- package/src/components/Customs/SyTextField/Accessibilite.stories.ts +3 -1
- package/src/components/Customs/SyTextField/SyTextField.mdx +3 -0
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +221 -7
- package/src/components/Customs/SyTextField/SyTextField.vue +226 -29
- package/src/components/DataList/Accessibilite.stories.ts +4 -0
- package/src/components/DataList/DataList.vue +52 -47
- package/src/components/DataListGroup/Accessibilite.stories.ts +4 -0
- package/src/components/DataListGroup/DataListGroup.vue +32 -15
- package/src/components/DataListItem/DataListItem.vue +72 -65
- package/src/components/DataListItem/config.ts +1 -1
- package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +3 -3
- package/src/components/DatePicker/CalendarMode/DatePicker.vue +59 -18
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +174 -0
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +421 -636
- package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +215 -0
- package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +218 -0
- package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.mdx +2 -0
- package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +287 -1
- package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +218 -0
- package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +281 -0
- package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +1 -1
- package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +17 -4
- package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +111 -18
- package/src/components/DatePicker/DateTextInput/DateTextInput.spec.ts +238 -6
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +716 -759
- package/src/components/DatePicker/composables/tests/useDateInputEditing.spec.ts +4 -4
- package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +17 -10
- package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +11 -3
- package/src/components/DatePicker/composables/useDateInputEditing.ts +119 -225
- package/src/components/DatePicker/composables/useDisplayedDateString.ts +18 -4
- package/src/components/DatePicker/composables/useKeyboardEvents.ts +149 -0
- package/src/components/DatePicker/composables/useManualDateValidation.ts +27 -68
- package/src/components/DatePicker/composables/useTodayButton.ts +13 -1
- package/src/components/DatePicker/utils/dateFormattingUtils.ts +293 -0
- package/src/components/DatePicker/utils/validationUtils.ts +90 -0
- package/src/components/DialogBox/Accessibilite.stories.ts +4 -0
- package/src/components/DialogBox/DialogBox.stories.ts +22 -10
- package/src/components/DialogBox/DialogBox.vue +89 -22
- package/src/components/DialogBox/tests/DialogBox.spec.ts +22 -0
- package/src/components/DialogBox/tests/__snapshots__/DialogBox.spec.ts.snap +12 -6
- package/src/components/FileUpload/tests/FileUpload.spec.ts +3 -0
- package/src/components/FooterBar/FooterBar.vue +1 -0
- package/src/components/HeaderBar/Accessibilite.stories.ts +4 -0
- package/src/components/HeaderBar/HeaderBar.mdx +47 -22
- package/src/components/HeaderBar/HeaderBar.stories.ts +54 -13
- package/src/components/HeaderBar/HeaderBar.vue +2 -1
- package/src/components/HeaderBar/HeaderBurgerMenu/Accessibilite.stories.ts +4 -0
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.stories.ts +160 -82
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.vue +41 -56
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +10 -3
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.vue +41 -18
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/tests/HeaderMenuSection.spec.ts +7 -2
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.stories.ts +36 -9
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +41 -9
- package/src/components/HeaderBar/HeaderBurgerMenu/locals.ts +2 -0
- package/src/components/HeaderBar/HeaderBurgerMenu/tests/HeaderBurgerMenu.spec.ts +1 -1
- package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/HeaderBurgerMenu.spec.ts.snap +8 -3
- package/src/components/HeaderBar/HeaderBurgerMenu/useMenuPosition.ts +50 -0
- package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +5 -5
- package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +7 -4
- package/src/components/HeaderBar/locales.ts +1 -1
- package/src/components/HeaderBar/tests/__snapshots__/HeaderBar.spec.ts.snap +2 -1
- package/src/components/HeaderLoading/Accessibilite.mdx +429 -8
- package/src/components/HeaderLoading/Accessibilite.stories.ts +4 -0
- package/src/components/HeaderLoading/HeaderLoading.vue +59 -1
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.mdx +17 -2
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +91 -2
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +37 -1
- package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +276 -21
- package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +4 -2
- package/src/components/LangBtn/LangBtn.vue +0 -3
- package/src/components/LogoBrandSection/Accessibilite.stories.ts +4 -1
- package/src/components/LogoBrandSection/LogoBrandSection.stories.ts +2 -2
- package/src/components/LogoBrandSection/LogoBrandSection.vue +13 -8
- package/src/components/LogoBrandSection/locales.ts +1 -1
- package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +1 -1
- package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +6 -4
- package/src/components/NirField/NirField.mdx +3 -0
- package/src/components/NirField/NirField.vue +15 -6
- package/src/components/NirField/tests/NirField.spec.ts +159 -12
- package/src/components/PasswordField/PasswordField.mdx +3 -0
- package/src/components/PeriodField/PeriodField.mdx +2 -0
- package/src/components/PeriodField/PeriodField.stories.ts +195 -0
- package/src/components/PhoneField/Accessibilite.stories.ts +4 -0
- package/src/components/PhoneField/PhoneField.mdx +3 -1
- package/src/components/PhoneField/PhoneField.stories.ts +285 -1
- package/src/components/PhoneField/PhoneField.vue +228 -95
- package/src/components/PhoneField/indicatifs.ts +102 -102
- package/src/components/PhoneField/locales.ts +1 -0
- package/src/components/PhoneField/tests/PhoneField.spec.ts +429 -2
- package/src/components/SkipLink/SkipLink.vue +3 -31
- package/src/components/SkipLink/tests/skipLink.spec.ts +0 -21
- package/src/components/SubHeader/Accessibilite.stories.ts +8 -0
- package/src/components/SubHeader/SubHeader.mdx +1 -0
- package/src/components/SubHeader/SubHeader.stories.ts +179 -60
- package/src/components/SubHeader/SubHeader.vue +45 -15
- package/src/components/SubHeader/locales.ts +1 -0
- package/src/components/SyAlert/SyAlert.vue +6 -0
- package/src/components/Tables/SyServerTable/SyServerTable.mdx +3 -10
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +242 -0
- package/src/components/Tables/SyServerTable/SyServerTable.vue +29 -10
- package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +104 -6
- package/src/components/Tables/SyTable/SyTable.mdx +3 -10
- package/src/components/Tables/SyTable/SyTable.stories.ts +242 -0
- package/src/components/Tables/SyTable/SyTable.vue +2 -0
- package/src/components/Tables/common/SyTablePagination.vue +13 -6
- package/src/components/Tables/common/TableHeader.vue +10 -7
- package/src/components/Tables/common/tableAccessibilityUtils.ts +13 -2
- package/src/components/Tables/common/tests/SyTablePagination.spec.ts +157 -0
- package/src/components/Tables/common/types.ts +2 -0
- package/src/components/Tables/common/useTableAria.ts +17 -1
- package/src/components/UserMenuBtn/tests/UserMenuBtn.spec.ts +2 -1
- package/src/components/index.ts +13 -0
- package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +34 -5
- package/src/composables/index.ts +3 -0
- package/src/composables/useFilterable/useFilterable.ts +23 -1
- package/src/composables/usePagination.ts +103 -0
- package/src/designTokens/tokens/amelipro/apColors.ts +1 -1
- package/src/designTokens/tokens/cnam/cnamSemantic.ts +3 -3
- package/src/directives/lockFocus.ts +48 -0
- package/src/main.ts +1 -2
- package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +1 -8
- package/src/stories/Accessibilite/{Aculturation/AuditDesignSystem.mdx → AuditDesignSystem.mdx} +1 -1
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/FauxPositifs.mdx +102 -0
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/FauxPositifs.stories.ts +219 -0
- package/src/stories/Accessibilite/KitDePreAudit/Outils/{Tanaguru.mdx → Tanaguru/Utilisation.mdx} +1 -1
- package/src/stories/Components/Components.stories.ts +1 -1
- package/src/stories/DesignTokens/ColorIntegrationExample.vue +43 -0
- package/src/stories/DesignTokens/Colors.mdx +2 -0
- package/src/stories/DesignTokens/colors.stories.ts +9 -0
- package/src/stories/GuideDuDev/FormValidationGuide.mdx +342 -0
- package/src/stories/Templates/Templates.stories.ts +1 -1
- package/src/utils/functions/ameliproColors/ameliproColors.ts +1 -1
- package/src/vuetifyConfig.ts +3 -3
- package/dist/components/DataList/locales.d.ts +0 -3
- package/dist/directives/letterSpacing.d.ts +0 -27
- package/src/assets/_fonts.scss +0 -6
- package/src/assets/_typography.scss +0 -157
- package/src/components/DataList/locales.ts +0 -3
- package/src/components/PhoneField/tests/PhoneField.additional.spec.ts +0 -266
- package/src/directives/letterSpacing.ts +0 -233
- /package/src/assets/{_elevations.scss → overrides/_elevations.scss} +0 -0
- /package/src/assets/{_radius.scss → overrides/_radius.scss} +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const config = {
|
|
2
|
+
sheet: {
|
|
3
|
+
theme: 'default',
|
|
4
|
+
dense: false,
|
|
5
|
+
color: '#fff',
|
|
6
|
+
},
|
|
7
|
+
tabs: {
|
|
8
|
+
'height': '48',
|
|
9
|
+
'show-arrows': true,
|
|
10
|
+
},
|
|
11
|
+
tab: {
|
|
12
|
+
'base-color': '#0C419A',
|
|
13
|
+
'active-color': '#0C419A',
|
|
14
|
+
'slider-color': '#0C419A',
|
|
15
|
+
'ripple': false,
|
|
16
|
+
},
|
|
17
|
+
}
|
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest'
|
|
2
|
+
import { mount } from '@vue/test-utils'
|
|
3
|
+
import { nextTick } from 'vue'
|
|
4
|
+
import SyTabs from '@/components/Customs/SyTabs/SyTabs.vue'
|
|
5
|
+
import { vuetify } from '@tests/unit/setup'
|
|
6
|
+
|
|
7
|
+
describe('SyTabs', () => {
|
|
8
|
+
// Données de test
|
|
9
|
+
const testItems = [
|
|
10
|
+
{ label: 'Tab 1', value: 'tab1', content: 'Contenu du Tab 1' },
|
|
11
|
+
{ label: 'Tab 2', value: 'tab2', content: 'Contenu du Tab 2' },
|
|
12
|
+
{ label: 'Tab 3', value: 'tab3', content: 'Contenu du Tab 3' },
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
// Options de montage par défaut
|
|
16
|
+
const defaultMountOptions = {
|
|
17
|
+
props: {
|
|
18
|
+
items: testItems,
|
|
19
|
+
},
|
|
20
|
+
global: {
|
|
21
|
+
plugins: [vuetify],
|
|
22
|
+
},
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Utilitaire pour créer le wrapper avec les options par défaut
|
|
26
|
+
const createWrapper = (options = {}) => {
|
|
27
|
+
return mount(SyTabs, {
|
|
28
|
+
...defaultMountOptions,
|
|
29
|
+
...options,
|
|
30
|
+
})
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Tests de rendu
|
|
34
|
+
describe('Rendu', () => {
|
|
35
|
+
it('doit afficher correctement les onglets', () => {
|
|
36
|
+
const wrapper = createWrapper()
|
|
37
|
+
|
|
38
|
+
// Vérifier que tous les onglets sont rendus
|
|
39
|
+
const tabButtons = wrapper.findAll('.sy-tabs__button')
|
|
40
|
+
expect(tabButtons.length).toBe(testItems.length)
|
|
41
|
+
|
|
42
|
+
// Vérifier le texte des onglets
|
|
43
|
+
testItems.forEach((item, index) => {
|
|
44
|
+
expect(tabButtons[index].text()).toBe(item.label.toUpperCase())
|
|
45
|
+
})
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
it('doit afficher le contenu de l\'onglet actif', () => {
|
|
49
|
+
const wrapper = createWrapper()
|
|
50
|
+
|
|
51
|
+
// Par défaut, le premier onglet devrait être actif
|
|
52
|
+
const visiblePanel = wrapper.find('.sy-tabs-panel:not([hidden])')
|
|
53
|
+
expect(visiblePanel.exists()).toBe(true)
|
|
54
|
+
expect(visiblePanel.text()).toContain(testItems[0].content)
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
it('doit ajouter la classe active au bouton d\'onglet actif', () => {
|
|
58
|
+
const wrapper = createWrapper()
|
|
59
|
+
|
|
60
|
+
// Le premier onglet devrait avoir la classe active
|
|
61
|
+
const activeTab = wrapper.find('.sy-tabs__button--active')
|
|
62
|
+
expect(activeTab.exists()).toBe(true)
|
|
63
|
+
expect(activeTab.text()).toBe(testItems[0].label.toUpperCase())
|
|
64
|
+
})
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
// Tests des props
|
|
68
|
+
describe('Props', () => {
|
|
69
|
+
it('doit respecter la prop modelValue numérique', async () => {
|
|
70
|
+
const wrapper = createWrapper({
|
|
71
|
+
props: {
|
|
72
|
+
...defaultMountOptions.props,
|
|
73
|
+
modelValue: 1,
|
|
74
|
+
},
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
await nextTick()
|
|
78
|
+
|
|
79
|
+
// Vérifier que le deuxième onglet est actif
|
|
80
|
+
const activeTab = wrapper.find('.sy-tabs__button--active')
|
|
81
|
+
expect(activeTab.text()).toBe(testItems[1].label.toUpperCase())
|
|
82
|
+
|
|
83
|
+
// Vérifier que le bon panneau est affiché
|
|
84
|
+
const visiblePanel = wrapper.find('.sy-tabs-panel:not([hidden])')
|
|
85
|
+
expect(visiblePanel.attributes('id')).toBe('panel-1')
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
it('doit respecter la prop modelValue de type string', async () => {
|
|
89
|
+
const wrapper = createWrapper({
|
|
90
|
+
props: {
|
|
91
|
+
...defaultMountOptions.props,
|
|
92
|
+
modelValue: 'tab2',
|
|
93
|
+
},
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
await nextTick()
|
|
97
|
+
|
|
98
|
+
// Vérifier que le bon onglet est actif
|
|
99
|
+
const activeTab = wrapper.find('.sy-tabs__button--active')
|
|
100
|
+
expect(activeTab.text()).toBe(testItems[1].label.toUpperCase())
|
|
101
|
+
})
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
// Tests d'interaction
|
|
105
|
+
describe('Interaction', () => {
|
|
106
|
+
it('doit changer d\'onglet actif au clic', async () => {
|
|
107
|
+
const wrapper = createWrapper()
|
|
108
|
+
|
|
109
|
+
// Cliquer sur le deuxième onglet
|
|
110
|
+
const secondTab = wrapper.findAll('.sy-tabs__button')[1]
|
|
111
|
+
await secondTab.trigger('click')
|
|
112
|
+
|
|
113
|
+
// Vérifier que le deuxième onglet est maintenant actif
|
|
114
|
+
expect(secondTab.classes()).toContain('sy-tabs__button--active')
|
|
115
|
+
|
|
116
|
+
// Vérifier que l'événement update:modelValue a été émis
|
|
117
|
+
const emitted = wrapper.emitted('update:modelValue')
|
|
118
|
+
expect(emitted).toBeTruthy()
|
|
119
|
+
if (emitted) {
|
|
120
|
+
expect(emitted[0]).toEqual([1])
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Vérifier que le bon panneau est visible
|
|
124
|
+
const visiblePanel = wrapper.find('.sy-tabs-panel:not([hidden])')
|
|
125
|
+
expect(visiblePanel.attributes('id')).toBe('panel-1')
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
it('doit émettre l\'événement update:modelValue avec la bonne valeur', async () => {
|
|
129
|
+
const wrapper = createWrapper({
|
|
130
|
+
props: {
|
|
131
|
+
...defaultMountOptions.props,
|
|
132
|
+
modelValue: 'tab1',
|
|
133
|
+
},
|
|
134
|
+
})
|
|
135
|
+
|
|
136
|
+
// Cliquer sur le troisième onglet
|
|
137
|
+
const thirdTab = wrapper.findAll('.sy-tabs__button')[2]
|
|
138
|
+
await thirdTab.trigger('click')
|
|
139
|
+
|
|
140
|
+
// Vérifier que l'événement update:modelValue a été émis avec la bonne valeur
|
|
141
|
+
const emitted = wrapper.emitted('update:modelValue')
|
|
142
|
+
expect(emitted).toBeTruthy()
|
|
143
|
+
if (emitted) {
|
|
144
|
+
expect(emitted[0]).toEqual(['tab3'])
|
|
145
|
+
}
|
|
146
|
+
})
|
|
147
|
+
})
|
|
148
|
+
|
|
149
|
+
// Tests d'accessibilité et navigation clavier
|
|
150
|
+
describe('Accessibilité et navigation clavier', () => {
|
|
151
|
+
it('doit contenir les attributs ARIA appropriés', () => {
|
|
152
|
+
const wrapper = createWrapper()
|
|
153
|
+
|
|
154
|
+
// Vérifier les attributs ARIA du tablist
|
|
155
|
+
const nav = wrapper.find('[role="tablist"]')
|
|
156
|
+
expect(nav.exists()).toBe(true)
|
|
157
|
+
expect(nav.attributes('aria-label')).toBeDefined()
|
|
158
|
+
|
|
159
|
+
// Vérifier les attributs ARIA des onglets
|
|
160
|
+
const firstTab = wrapper.findAll('[role="tab"]')[0]
|
|
161
|
+
expect(firstTab.attributes('aria-selected')).toBe('true')
|
|
162
|
+
expect(firstTab.attributes('aria-controls')).toBe('panel-0')
|
|
163
|
+
|
|
164
|
+
// Vérifier les attributs ARIA des panneaux
|
|
165
|
+
const firstPanel = wrapper.find('[role="tabpanel"]')
|
|
166
|
+
expect(firstPanel.attributes('aria-labelledby')).toBe('tab-0')
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
it('doit activer un onglet avec les touches Enter/Space', async () => {
|
|
170
|
+
const wrapper = createWrapper()
|
|
171
|
+
|
|
172
|
+
// Simuler une pression de touche Enter sur le deuxième onglet
|
|
173
|
+
const secondTab = wrapper.findAll('.sy-tabs__button')[1]
|
|
174
|
+
await secondTab.trigger('keydown', {
|
|
175
|
+
key: 'Enter',
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
// Vérifier que le deuxième onglet est actif
|
|
179
|
+
expect(secondTab.classes()).toContain('sy-tabs__button--active')
|
|
180
|
+
})
|
|
181
|
+
|
|
182
|
+
it('doit naviguer vers l\'onglet de gauche avec ArrowLeft', async () => {
|
|
183
|
+
// Mock pour document.getElementById
|
|
184
|
+
const mockElement = {
|
|
185
|
+
focus: vi.fn(),
|
|
186
|
+
}
|
|
187
|
+
document.getElementById = vi.fn().mockImplementation((id) => {
|
|
188
|
+
if (id === 'tab-0') {
|
|
189
|
+
return mockElement
|
|
190
|
+
}
|
|
191
|
+
return null
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
const wrapper = createWrapper({
|
|
195
|
+
props: {
|
|
196
|
+
...defaultMountOptions.props,
|
|
197
|
+
modelValue: 1, // Commencer au deuxième onglet
|
|
198
|
+
},
|
|
199
|
+
})
|
|
200
|
+
|
|
201
|
+
// Accéder directement à l'instance du composant
|
|
202
|
+
const vm = wrapper.vm as unknown as { handleArrowNavigation: (event: KeyboardEvent, activeIndex: number) => void }
|
|
203
|
+
|
|
204
|
+
// Créer un événement avec preventDefault
|
|
205
|
+
const event = new KeyboardEvent('keydown', { key: 'ArrowLeft' })
|
|
206
|
+
event.preventDefault = vi.fn()
|
|
207
|
+
|
|
208
|
+
// Appeler directement la méthode handleArrowNavigation
|
|
209
|
+
vm.handleArrowNavigation(event, 1) // 1 = deuxième onglet (index actif)
|
|
210
|
+
|
|
211
|
+
// Vérifier que l'événement a été émis avec la bonne valeur
|
|
212
|
+
const emitted = wrapper.emitted('update:modelValue')
|
|
213
|
+
expect(emitted).toBeTruthy()
|
|
214
|
+
// Type guard pour TypeScript
|
|
215
|
+
if (emitted) {
|
|
216
|
+
expect(emitted[0]).toEqual([0])
|
|
217
|
+
}
|
|
218
|
+
})
|
|
219
|
+
|
|
220
|
+
it('doit naviguer vers l\'onglet de droite avec ArrowRight', async () => {
|
|
221
|
+
// Mock pour document.getElementById qui filtre les appels non pertinents
|
|
222
|
+
const mockElement = {
|
|
223
|
+
focus: vi.fn(),
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Mock complet qui retourne mockElement uniquement pour tab-1
|
|
227
|
+
document.getElementById = vi.fn().mockImplementation((id) => {
|
|
228
|
+
if (id === 'tab-1') {
|
|
229
|
+
return mockElement
|
|
230
|
+
}
|
|
231
|
+
return null
|
|
232
|
+
})
|
|
233
|
+
|
|
234
|
+
const wrapper = createWrapper()
|
|
235
|
+
|
|
236
|
+
// Simuler une navigation avec flèche droite
|
|
237
|
+
const activeTab = wrapper.find('.sy-tabs__button--active')
|
|
238
|
+
await activeTab.trigger('keydown', {
|
|
239
|
+
key: 'ArrowRight',
|
|
240
|
+
preventDefault: vi.fn(),
|
|
241
|
+
})
|
|
242
|
+
|
|
243
|
+
// Vérifier l'émission de l'événement
|
|
244
|
+
const emitted = wrapper.emitted('update:modelValue')
|
|
245
|
+
expect(emitted).toBeTruthy()
|
|
246
|
+
if (emitted) {
|
|
247
|
+
expect(emitted[0]).toEqual([1])
|
|
248
|
+
}
|
|
249
|
+
})
|
|
250
|
+
|
|
251
|
+
it('doit naviguer vers le premier onglet avec Home', async () => {
|
|
252
|
+
// Mock pour document.getElementById qui filtre les appels non pertinents
|
|
253
|
+
const mockElement = {
|
|
254
|
+
focus: vi.fn(),
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Mock complet qui retourne mockElement uniquement pour tab-0
|
|
258
|
+
document.getElementById = vi.fn().mockImplementation((id) => {
|
|
259
|
+
if (id === 'tab-0') {
|
|
260
|
+
return mockElement
|
|
261
|
+
}
|
|
262
|
+
return null
|
|
263
|
+
})
|
|
264
|
+
|
|
265
|
+
const wrapper = createWrapper({
|
|
266
|
+
props: {
|
|
267
|
+
...defaultMountOptions.props,
|
|
268
|
+
modelValue: 2, // Commencer au dernier onglet
|
|
269
|
+
},
|
|
270
|
+
})
|
|
271
|
+
|
|
272
|
+
// Simuler une navigation avec Home
|
|
273
|
+
const activeTab = wrapper.find('.sy-tabs__button--active')
|
|
274
|
+
await activeTab.trigger('keydown', {
|
|
275
|
+
key: 'Home',
|
|
276
|
+
preventDefault: vi.fn(),
|
|
277
|
+
})
|
|
278
|
+
|
|
279
|
+
// Vérifier l'émission de l'événement
|
|
280
|
+
const emitted = wrapper.emitted('update:modelValue')
|
|
281
|
+
expect(emitted).toBeTruthy()
|
|
282
|
+
if (emitted) {
|
|
283
|
+
expect(emitted[0]).toEqual([0])
|
|
284
|
+
}
|
|
285
|
+
})
|
|
286
|
+
|
|
287
|
+
it('doit naviguer vers le dernier onglet avec End', async () => {
|
|
288
|
+
// Mock pour document.getElementById qui filtre les appels non pertinents
|
|
289
|
+
const mockElement = {
|
|
290
|
+
focus: vi.fn(),
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// Mock complet qui retourne mockElement uniquement pour tab-2
|
|
294
|
+
document.getElementById = vi.fn().mockImplementation((id) => {
|
|
295
|
+
if (id === 'tab-2') {
|
|
296
|
+
return mockElement
|
|
297
|
+
}
|
|
298
|
+
return null
|
|
299
|
+
})
|
|
300
|
+
|
|
301
|
+
const wrapper = createWrapper()
|
|
302
|
+
|
|
303
|
+
// Simuler une navigation avec End
|
|
304
|
+
const activeTab = wrapper.find('.sy-tabs__button--active')
|
|
305
|
+
await activeTab.trigger('keydown', {
|
|
306
|
+
key: 'End',
|
|
307
|
+
preventDefault: vi.fn(),
|
|
308
|
+
})
|
|
309
|
+
|
|
310
|
+
// Vérifier l'émission de l'événement
|
|
311
|
+
const emitted = wrapper.emitted('update:modelValue')
|
|
312
|
+
expect(emitted).toBeTruthy()
|
|
313
|
+
if (emitted) {
|
|
314
|
+
expect(emitted[0]).toEqual([2])
|
|
315
|
+
}
|
|
316
|
+
})
|
|
317
|
+
})
|
|
318
|
+
|
|
319
|
+
// Tests de la boucle de navigation
|
|
320
|
+
describe('Boucle de navigation', () => {
|
|
321
|
+
it('doit boucler vers le dernier onglet avec ArrowLeft depuis le premier', async () => {
|
|
322
|
+
// Mock pour document.getElementById qui filtre les appels non pertinents
|
|
323
|
+
const mockElement = {
|
|
324
|
+
focus: vi.fn(),
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// Mock complet qui retourne mockElement uniquement pour le dernier tab
|
|
328
|
+
const lastTabIndex = testItems.length - 1
|
|
329
|
+
document.getElementById = vi.fn().mockImplementation((id) => {
|
|
330
|
+
if (id === `tab-${lastTabIndex}`) {
|
|
331
|
+
return mockElement
|
|
332
|
+
}
|
|
333
|
+
return null
|
|
334
|
+
})
|
|
335
|
+
|
|
336
|
+
const wrapper = createWrapper()
|
|
337
|
+
|
|
338
|
+
// Simuler une navigation avec flèche gauche depuis le premier onglet
|
|
339
|
+
const firstTab = wrapper.findAll('.sy-tabs__button')[0]
|
|
340
|
+
await firstTab.trigger('keydown', {
|
|
341
|
+
key: 'ArrowLeft',
|
|
342
|
+
preventDefault: vi.fn(),
|
|
343
|
+
})
|
|
344
|
+
|
|
345
|
+
// Vérifier l'émission de l'événement
|
|
346
|
+
const emitted = wrapper.emitted('update:modelValue')
|
|
347
|
+
expect(emitted).toBeTruthy()
|
|
348
|
+
if (emitted) {
|
|
349
|
+
expect(emitted[0]).toEqual([lastTabIndex])
|
|
350
|
+
}
|
|
351
|
+
})
|
|
352
|
+
|
|
353
|
+
it('doit boucler vers le premier onglet avec ArrowRight depuis le dernier', async () => {
|
|
354
|
+
// Mock pour document.getElementById
|
|
355
|
+
const mockElement = {
|
|
356
|
+
focus: vi.fn(),
|
|
357
|
+
}
|
|
358
|
+
document.getElementById = vi.fn().mockImplementation((id) => {
|
|
359
|
+
if (id === 'tab-0') {
|
|
360
|
+
return mockElement
|
|
361
|
+
}
|
|
362
|
+
return null
|
|
363
|
+
})
|
|
364
|
+
|
|
365
|
+
const lastIndex = testItems.length - 1
|
|
366
|
+
const wrapper = createWrapper({
|
|
367
|
+
props: {
|
|
368
|
+
...defaultMountOptions.props,
|
|
369
|
+
modelValue: lastIndex,
|
|
370
|
+
},
|
|
371
|
+
})
|
|
372
|
+
|
|
373
|
+
// Accéder directement à l'instance du composant
|
|
374
|
+
const vm = wrapper.vm as unknown as { handleArrowNavigation: (event: KeyboardEvent, activeIndex: number) => void }
|
|
375
|
+
|
|
376
|
+
// Créer un événement avec preventDefault
|
|
377
|
+
const event = new KeyboardEvent('keydown', { key: 'ArrowRight' })
|
|
378
|
+
event.preventDefault = vi.fn()
|
|
379
|
+
|
|
380
|
+
// Appeler directement la méthode handleArrowNavigation
|
|
381
|
+
vm.handleArrowNavigation(event, lastIndex) // dernier onglet
|
|
382
|
+
|
|
383
|
+
// Vérifier l'émission de l'événement
|
|
384
|
+
const emitted = wrapper.emitted('update:modelValue')
|
|
385
|
+
expect(emitted).toBeTruthy()
|
|
386
|
+
if (emitted) {
|
|
387
|
+
expect(emitted[0]).toEqual([0])
|
|
388
|
+
}
|
|
389
|
+
})
|
|
390
|
+
})
|
|
391
|
+
|
|
392
|
+
// Tests avec différentes configurations
|
|
393
|
+
describe('Configurations personnalisées', () => {
|
|
394
|
+
it('doit permettre de personnaliser les options', () => {
|
|
395
|
+
// Modifier la stratégie de test puisque Vuetify gère les props différemment
|
|
396
|
+
// Nous allons vérifier l'application des styles plutôt que les props directement
|
|
397
|
+
const wrapper = createWrapper({
|
|
398
|
+
props: {
|
|
399
|
+
...defaultMountOptions.props,
|
|
400
|
+
vuetifyOptions: {
|
|
401
|
+
sheet: {
|
|
402
|
+
dense: true,
|
|
403
|
+
color: 'primary',
|
|
404
|
+
},
|
|
405
|
+
tabs: {
|
|
406
|
+
height: '60',
|
|
407
|
+
},
|
|
408
|
+
},
|
|
409
|
+
},
|
|
410
|
+
})
|
|
411
|
+
|
|
412
|
+
// Vérifier la structure du composant
|
|
413
|
+
const sheet = wrapper.findComponent({ name: 'VSheet' })
|
|
414
|
+
expect(sheet.exists()).toBe(true)
|
|
415
|
+
|
|
416
|
+
// Vérifier que les tabs existent
|
|
417
|
+
const tabList = wrapper.find('.sy-tabs__list')
|
|
418
|
+
expect(tabList.exists()).toBe(true)
|
|
419
|
+
|
|
420
|
+
// Vérifier que tous les items sont rendus
|
|
421
|
+
const tabItems = wrapper.findAll('.sy-tabs__item')
|
|
422
|
+
expect(tabItems.length).toBe(testItems.length)
|
|
423
|
+
})
|
|
424
|
+
})
|
|
425
|
+
})
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { RouteLocationRaw } from 'vue-router'
|
|
2
|
+
|
|
3
|
+
export interface TabItem {
|
|
4
|
+
label: string
|
|
5
|
+
value: string | number
|
|
6
|
+
content?: string
|
|
7
|
+
disabled?: boolean
|
|
8
|
+
/** URL pour navigation directe */
|
|
9
|
+
href?: string
|
|
10
|
+
/** Cible pour vue-router */
|
|
11
|
+
to?: RouteLocationRaw
|
|
12
|
+
}
|
|
@@ -222,7 +222,9 @@ export const Legende: StoryObj = {
|
|
|
222
222
|
rapport</a></p>
|
|
223
223
|
<p style="color: grey; font-size: 14px">Correctifs associés (<a
|
|
224
224
|
href="https://github.com/assurance-maladie-digital/design-system/issues/4028" target="_blank"
|
|
225
|
-
style="color:#0C41BD;">issue #4028</a
|
|
225
|
+
style="color:#0C41BD;">issue #4028</a>, <a
|
|
226
|
+
href="https://github.com/assurance-maladie-digital/design-system-v3/pull/935" target="_blank"
|
|
227
|
+
style="color:#0C41BD;">issue #935</a>)</p>
|
|
226
228
|
</div>
|
|
227
229
|
`,
|
|
228
230
|
}
|
|
@@ -63,3 +63,6 @@ Le champ adapte automatiquement son apparence selon son état :
|
|
|
63
63
|
</template>
|
|
64
64
|
`}
|
|
65
65
|
/>
|
|
66
|
+
|
|
67
|
+
<a href="/?path=/docs/guide-du-dev-guide-de-validation-des-formulaires--docs" className="action-link">Pour plus d'informations sur la validation, consultez le guide de validation des formulaires.</a>
|
|
68
|
+
|