@cnamts/synapse 1.0.15 → 1.0.17
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-isr8mXVb.js → DateFilter-RHtdShO1.js} +12 -12
- package/dist/{NumberFilter-BOe7DqWX.js → NumberFilter-DXYz_b_w.js} +1 -1
- package/dist/{PeriodFilter-WTprpO40.js → PeriodFilter-CzphmrNu.js} +1 -1
- package/dist/{SelectFilter-CqlG5dmI.js → SelectFilter-a4fUV5Jp.js} +1 -1
- package/dist/{TextFilter-fVW5bsRw.js → TextFilter-CZ4LTKoq.js} +1 -1
- package/dist/components/Accordion/Accordion.d.ts +22 -7
- package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +2836 -2845
- package/dist/components/Amelipro/AmeliproCallback/AmeliproCallback.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +7 -7
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproFooter/AmeliproFooter.d.ts +18 -18
- package/dist/components/Amelipro/AmeliproHeader/AmeliproHeader.d.ts +9 -9
- package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproIcon/AmeliproIcon.d.ts +3 -1
- package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +5 -3
- package/dist/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproMenu/AmeliproMenu.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.d.ts +40 -8
- package/dist/components/Amelipro/AmeliproPatientLogged/types.d.ts +2 -1
- package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +1288 -1284
- package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +1936 -1930
- package/dist/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +2838 -2865
- package/dist/components/Amelipro/AmeliproStateTile/AmeliproStateTile.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproTabs/AmeliproTabBtn/AmeliproTabBtn.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +2849 -2867
- package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +397 -397
- package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +653 -642
- package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +233 -5
- package/dist/components/Amelipro/AmeliproTooltips/AmeliproTooltips.d.ts +6 -2
- package/dist/components/Amelipro/AmeliproTransmission/AmeliproTransmission.d.ts +9 -9
- package/dist/components/Amelipro/StructureMenu/StructureBtn/StructureBtn.d.ts +9 -0
- package/dist/components/Amelipro/StructureMenu/StructureItem/types.d.ts +1 -0
- package/dist/components/Amelipro/StructureMenu/StructureMenu.d.ts +9 -0
- package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +23 -2
- package/dist/components/Captcha/CaptchaHelpdesk.d.ts +6 -0
- package/dist/components/ChipList/locales.d.ts +1 -0
- package/dist/components/CookieBanner/CookieBanner.d.ts +117 -119
- package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +484 -484
- package/dist/components/CookiesSelection/CookiesSelection.d.ts +104 -106
- package/dist/components/Customs/Selects/SelectBtnField/SelectBtnField.d.ts +14 -10
- package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +118 -129
- package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +1 -3
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +1 -1
- package/dist/components/Customs/SyForm/SyForm.d.ts +60 -53
- package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +88 -0
- package/dist/components/Customs/SyRadioGroup/locales.d.ts +3 -0
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +644 -642
- package/dist/components/DataList/DataList.d.ts +6 -1
- package/dist/components/DataListGroup/DataListGroup.d.ts +14 -2
- package/dist/components/DataListItem/DataListItem.d.ts +3 -0
- package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +2986 -3098
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +1456 -1558
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +653 -652
- package/dist/components/DatePicker/composables/index.d.ts +4 -1
- package/dist/components/DatePicker/composables/useAsteriskDisplay.d.ts +1 -1
- package/dist/components/DatePicker/composables/useCalendarKeyboardNavigation.d.ts +11 -0
- package/dist/components/DatePicker/composables/useDatePickerState.d.ts +25 -0
- package/dist/components/DatePicker/composables/useDateTextField.d.ts +61 -0
- package/dist/components/DatePicker/composables/useHolidayHighlighting.d.ts +15 -0
- package/dist/components/DatePicker/constants/messages.d.ts +0 -1
- package/dist/components/DialogBox/DialogBox.d.ts +177 -179
- package/dist/components/DialogBox/config.d.ts +4 -0
- package/dist/components/FilterSideBar/FilterSideBar.d.ts +170 -173
- package/dist/components/FilterSideBar/locales.d.ts +5 -0
- package/dist/components/FooterBar/FooterBar.d.ts +5 -5
- package/dist/components/HeaderBar/HeaderBar.d.ts +4 -2
- package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +1 -1
- package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +15 -5
- package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +5 -1
- package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +234 -258
- package/dist/components/LangBtn/LangBtn.d.ts +173 -179
- package/dist/components/LogoBrandSection/LogoBrandSection.d.ts +1 -1
- package/dist/components/LunarCalendar/LunarCalendar.d.ts +29 -0
- package/dist/components/LunarCalendar/useLunarCalendarRules.d.ts +5 -0
- package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +13 -0
- package/dist/components/MaintenancePage/MaintenancePage.d.ts +8 -1
- package/dist/components/NirField/NirField.d.ts +1296 -1292
- package/dist/components/NotFoundPage/NotFoundPage.d.ts +9 -2
- package/dist/components/NotificationBar/Notification/Notification.d.ts +30 -0
- package/dist/components/NotificationBar/NotificationBar.d.ts +32 -20
- package/dist/components/PaginatedTable/PaginatedTable.d.ts +1 -1
- package/dist/components/PeriodField/PeriodField.d.ts +5855 -6079
- package/dist/components/PhoneField/PhoneField.d.ts +645 -643
- package/dist/components/SubHeader/SubHeader.d.ts +11 -8
- package/dist/components/SyAlert/SyAlert.d.ts +31 -31
- package/dist/components/SyTextArea/SyTextArea.d.ts +397 -395
- package/dist/components/SyTextArea/locales.d.ts +1 -0
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +193 -227
- package/dist/components/Tables/SyTable/SyTable.d.ts +192 -226
- package/dist/components/Tables/common/SyTableFilter.d.ts +1 -1
- package/dist/components/Tables/common/SyTablePagination.d.ts +118 -129
- package/dist/components/Tables/common/TableHeader.d.ts +52 -2
- package/dist/components/Tables/common/filters/DateFilter.d.ts +1 -1
- package/dist/components/Tables/common/filters/NumberFilter.d.ts +1 -1
- package/dist/components/Tables/common/filters/PeriodFilter.d.ts +1 -1
- package/dist/components/Tables/common/filters/SelectFilter.d.ts +1 -1
- package/dist/components/Tables/common/filters/TextFilter.d.ts +1 -1
- package/dist/components/Tables/common/locales.d.ts +1 -0
- package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +86 -90
- package/dist/components/Tables/common/tableFilterUtils.d.ts +2 -2
- package/dist/components/Tables/common/types.d.ts +3 -2
- package/dist/components/Tables/common/useTableCheckbox.d.ts +3 -2
- package/dist/components/Tables/common/useTableFilter.d.ts +1 -1
- package/dist/components/Tables/common/useTableItems.d.ts +6 -8
- package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +18 -18
- package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +2 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/design-system-v3.js +101 -98
- package/dist/design-system-v3.umd.cjs +25 -33
- package/dist/directives/lockFocus.d.ts +1 -1
- package/dist/main-BXIMMzFS.js +35408 -0
- package/dist/style.css +1 -1
- package/dist/utils/formatNir/formatNir.d.ts +2 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/insertAt.d.ts +1 -0
- package/dist/utils/rules/validateDateValue.d.ts +14 -0
- package/dist/vuetifyConfig.d.ts +6 -6
- package/package.json +14 -7
- package/src/assets/tokens.scss +2 -0
- package/src/components/Accordion/Accessibilite/AccessibilityGuide.mdx +70 -241
- package/src/components/Accordion/Accordion.mdx +6 -1
- package/src/components/Accordion/Accordion.stories.ts +88 -9
- package/src/components/Accordion/Accordion.vue +56 -24
- package/src/components/Accordion/tests/Accordion.a11y.spec.ts +46 -0
- package/src/components/Accordion/tests/__snapshots__/accordion.spec.ts.snap +26 -30
- package/src/components/Accordion/tests/accordion.spec.ts +27 -26
- package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/__snapshots__/AmeliproAccordionTemplate.spec.ts.snap +1 -18
- package/src/components/Amelipro/AmeliproAccordion/__tests__/AmeliproAccordion.spec.ts +178 -9
- package/src/components/Amelipro/AmeliproAccordion/__tests__/__snapshots__/AmeliproAccordion.spec.ts.snap +28 -121
- package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/__snapshots__/AmeliproAccordionFrieze.spec.ts.snap +15 -270
- package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +12 -194
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/__snapshots__/AmeliproAccordionResultTemplate.spec.ts.snap +1 -18
- package/src/components/Amelipro/AmeliproAccordionResult/__tests__/__snapshots__/AmeliproAccordionResult.spec.ts.snap +1 -18
- package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +12 -194
- package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.stories.ts +9 -9
- package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.vue +5 -4
- package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/AmeliproAutoCompleteField.spec.ts +6 -6
- package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +2 -0
- package/src/components/Amelipro/AmeliproBadge/__tests__/AmeliproBadge.spec.ts +135 -9
- package/src/components/Amelipro/AmeliproBadge/__tests__/__snapshots__/AmeliproBadge.spec.ts.snap +20 -5
- package/src/components/Amelipro/AmeliproBreadcrumb/__tests__/AmeliproBreadcrumb.spec.ts +195 -28
- package/src/components/Amelipro/AmeliproBreadcrumb/__tests__/__snapshots__/AmeliproBreadcrumb.spec.ts.snap +193 -124
- package/src/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.vue +1 -1
- package/src/components/Amelipro/AmeliproCaptcha/__tests__/AmeliproCaptcha.spec.ts +364 -12
- package/src/components/Amelipro/AmeliproCaptcha/__tests__/__snapshots__/AmeliproCaptcha.spec.ts.snap +30 -390
- package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +4 -36
- package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.stories.ts +10 -10
- package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.vue +7 -7
- package/src/components/Amelipro/AmeliproCheckbox/__tests__/AmeliproCheckbox.spec.ts +5 -5
- package/src/components/Amelipro/AmeliproCheckbox/__tests__/__snapshots__/AmeliproCheckbox.spec.ts.snap +1 -1
- package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.stories.ts +7 -6
- package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.vue +6 -6
- package/src/components/Amelipro/AmeliproCheckboxGroup/__tests__/AmeliproCheckboxGroup.spec.ts +6 -6
- package/src/components/Amelipro/AmeliproCheckboxGroup/__tests__/__snapshots__/AmeliproCheckboxGroup.spec.ts.snap +2 -2
- package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +2 -43
- package/src/components/Amelipro/AmeliproContentLayout/__tests__/AmeliproContentLayout.spec.ts +80 -9
- package/src/components/Amelipro/AmeliproContentLayout/__tests__/__snapshots__/AmeliproContentLayout.spec.ts.snap +25 -4
- package/src/components/Amelipro/AmeliproCopyBtn/__tests__/__snapshots__/AmeliproCopyBtn.spec.ts.snap +1 -13
- package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.stories.ts +7 -6
- package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +5 -5
- package/src/components/Amelipro/AmeliproCustomSelector/__tests__/AmeliproCustomSelector.spec.ts +187 -39
- package/src/components/Amelipro/AmeliproCustomSelector/__tests__/__snapshots__/AmeliproCustomSelector.spec.ts.snap +147 -147
- package/src/components/Amelipro/AmeliproDentalChart/tests/__snapshots__/AmeliproDentalChart.spec.ts.snap +1 -1
- package/src/components/Amelipro/AmeliproDialog/__tests__/__snapshots__/AmeliproDialog.spec.ts.snap +0 -2
- package/src/components/Amelipro/AmeliproErrorTemplate/__tests__/AmeliproErrorTemplate.spec.ts +160 -20
- package/src/components/Amelipro/AmeliproErrorTemplate/__tests__/__snapshots__/AmeliproErrorTemplate.spec.ts.snap +34 -177
- package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.vue +1 -0
- package/src/components/Amelipro/AmeliproFilePreview/__tests__/AmeliproFilePreview.spec.ts +248 -19
- package/src/components/Amelipro/AmeliproFilePreview/__tests__/__snapshots__/AmeliproFilePreview.spec.ts.snap +34 -203
- package/src/components/Amelipro/AmeliproFirstLogin/__tests__/__snapshots__/AmeliproFirstLogin.spec.ts.snap +6 -144
- package/src/components/Amelipro/AmeliproIcon/AmeliproIcon.vue +20 -2
- package/src/components/Amelipro/AmeliproIcon/__tests__/__snapshots__/AmeliproIcon.spec.ts.snap +1 -25
- package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.stories.ts +5 -5
- package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.vue +6 -6
- package/src/components/Amelipro/AmeliproIllustratedRadioGroup/__tests__/AmeliproIllustratedRadioGroup.spec.ts +22 -22
- package/src/components/Amelipro/AmeliproIllustratedRadioGroup/__tests__/__snapshots__/AmeliproIllustratedRadioGroup.spec.ts.snap +2 -2
- package/src/components/Amelipro/AmeliproMultipleFoldingCard/__tests__/AmeliproMultipleFoldingCard.spec.ts +304 -0
- package/src/components/Amelipro/AmeliproMultipleFoldingCard/__tests__/__snapshots__/AmeliproMultipleFoldingCard.spec.ts.snap +373 -0
- package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.stories.ts +64 -34
- package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.vue +75 -16
- package/src/components/Amelipro/AmeliproPatientLogged/__tests__/AmeliproPatientLogged.spec.ts +4 -2
- package/src/components/Amelipro/AmeliproPatientLogged/__tests__/__snapshots__/AmeliproPatientLogged.spec.ts.snap +63 -177
- package/src/components/Amelipro/AmeliproPatientLogged/types.d.ts +2 -1
- package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLogin.stories.ts +11 -5
- package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/AmeliproPatientLoginForm.vue +9 -1
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.vue +162 -72
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/AmeliproPostalAddressCityRow.spec.ts +2 -2
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/__snapshots__/AmeliproPostalAddressCityRow.spec.ts.snap +6 -39
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.stories.ts +3 -3
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.vue +8 -8
- package/src/components/Amelipro/AmeliproPostalAddressField/{tests → __tests__}/AmeliproPostalAddressField.spec.ts +2 -2
- package/src/components/Amelipro/AmeliproPostalAddressField/{tests → __tests__}/__snapshots__/AmeliproPostalAddressField.spec.ts.snap +11 -52
- package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.stories.ts +7 -7
- package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.vue +8 -8
- package/src/components/Amelipro/AmeliproRadioGroup/__tests__/AmeliproRadioGroup.spec.ts +6 -6
- package/src/components/Amelipro/AmeliproRadioGroup/__tests__/__snapshots__/AmeliproRadioGroup.spec.ts.snap +2 -2
- package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +2 -14
- package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.stories.ts +7 -7
- package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.vue +41 -5
- package/src/components/Amelipro/AmeliproSelect/__tests__/AmeliproSelect.spec.ts +12 -12
- package/src/components/Amelipro/AmeliproSelect/__tests__/__snapshots__/AmeliproSelect.spec.ts.snap +2 -2
- package/src/components/Amelipro/AmeliproStepper/AmeliproStepper.vue +2 -2
- package/src/components/Amelipro/AmeliproStepper/__tests__/__snapshots__/AmeliproStepper.spec.ts.snap +2 -2
- package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +2 -2
- package/src/components/Amelipro/AmeliproTable/__tests__/AmeliproTable.spec.ts +463 -68
- package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +176 -511
- package/src/components/Amelipro/AmeliproTabs/AmeliproTabs.stories.ts +94 -0
- package/src/components/Amelipro/AmeliproTabs/AmeliproTabs.vue +6 -2
- package/src/components/Amelipro/AmeliproTabs/__tests__/AmeliproTabs.spec.ts +4 -0
- package/src/components/Amelipro/AmeliproTabs/__tests__/__snapshots__/AmeliproTabs.spec.ts.snap +4 -2
- package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.stories.ts +6 -6
- package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.vue +4 -4
- package/src/components/Amelipro/AmeliproTextArea/__tests__/AmeliproTextArea.spec.ts +3 -3
- package/src/components/Amelipro/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +1 -2
- package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.stories.ts +78 -10
- package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.vue +114 -6
- package/src/components/Amelipro/AmeliproTextField/__tests__/AmeliproTextField.spec.ts +19 -7
- package/src/components/Amelipro/AmeliproTextField/__tests__/__snapshots__/AmeliproTextField.spec.ts.snap +2 -0
- package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.stories.ts +44 -0
- package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.vue +79 -1
- package/src/components/Amelipro/AmeliproTooltips/AmeliproTooltips.stories.ts +45 -0
- package/src/components/Amelipro/AmeliproTooltips/AmeliproTooltips.vue +6 -0
- package/src/components/Amelipro/AmeliproTooltips/__tests__/__snapshots__/AmeliproTooltips.spec.ts.snap +0 -2
- package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.stories.ts +2 -2
- package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.vue +21 -7
- package/src/components/Amelipro/AmeliproUpload/__tests__/AmeliproUpload.spec.ts +252 -44
- package/src/components/Amelipro/AmeliproUpload/__tests__/__snapshots__/AmeliproUpload.spec.ts.snap +166 -0
- package/src/components/Amelipro/ServiceMenu/ServiceBtn/__tests__/ServiceBtn.spec.ts +137 -0
- package/src/components/Amelipro/ServiceMenu/ServiceBtn/__tests__/__snapshots__/ServiceBtn.spec.ts.snap +56 -0
- package/src/components/Amelipro/ServiceMenu/ServiceList/__tests__/ServiceList.spec.ts +116 -0
- package/src/components/Amelipro/ServiceMenu/ServiceList/__tests__/__snapshots__/ServiceList.spec.ts.snap +58 -0
- package/src/components/Amelipro/ServiceMenu/ServiceMenuContent/__tests__/ServiceMenuContent.spec.ts +118 -0
- package/src/components/Amelipro/ServiceMenu/ServiceMenuContent/__tests__/__snapshots__/ServiceMenuContent.spec.ts.snap +151 -0
- package/src/components/Amelipro/ServiceMenu/__tests__/ServiceMenu.spec.ts +259 -0
- package/src/components/Amelipro/ServiceMenu/__tests__/__snapshots__/ServiceMenu.spec.ts.snap +102 -0
- package/src/components/Amelipro/StructureMenu/StructureBtn/StructureBtn.vue +13 -0
- package/src/components/Amelipro/StructureMenu/StructureBtn/__tests__/StructureBtn.spec.ts +96 -0
- package/src/components/Amelipro/StructureMenu/StructureBtn/__tests__/__snapshots__/StructureBtn.spec.ts.snap +63 -0
- package/src/components/Amelipro/StructureMenu/StructureItem/StructureItem.vue +14 -2
- package/src/components/Amelipro/StructureMenu/StructureItem/__tests__/StructureItem.spec.ts +133 -0
- package/src/components/Amelipro/StructureMenu/StructureItem/__tests__/__snapshots__/StructureItem.spec.ts.snap +159 -0
- package/src/components/Amelipro/StructureMenu/StructureItem/types.d.ts +1 -0
- package/src/components/Amelipro/StructureMenu/StructureList/__tests__/StructureList.spec.ts +190 -0
- package/src/components/Amelipro/StructureMenu/StructureList/__tests__/__snapshots__/StructureList.spec.ts.snap +109 -0
- package/src/components/Amelipro/StructureMenu/StructureMenu.stories.ts +93 -63
- package/src/components/Amelipro/StructureMenu/StructureMenu.vue +5 -0
- package/src/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.vue +22 -1
- package/src/components/Amelipro/StructureMenu/StructureTabs/__tests__/StructureTabs.spec.ts +163 -0
- package/src/components/Amelipro/StructureMenu/StructureTabs/__tests__/__snapshots__/StructureTabs.spec.ts.snap +105 -0
- package/src/components/Amelipro/StructureMenu/__tests__/StructureMenu.spec.ts +171 -0
- package/src/components/Amelipro/StructureMenu/__tests__/__snapshots__/StructureMenu.spec.ts.snap +39 -0
- package/src/components/Amelipro/UserInformationSummary/__tests__/UserInformationSummary.spec.ts +140 -0
- package/src/components/Amelipro/UserInformationSummary/{tests → __tests__}/__snapshots__/UserInformationSummary.spec.ts.snap +17 -24
- package/src/components/Amelipro/UserMenu/UserMenu.stories.ts +3 -3
- package/src/components/Amelipro/UserMenu/UserMenu.vue +2 -2
- package/src/components/Amelipro/UserMenu/UserMenuDetails/__tests__/UserMenuDetails.spec.ts +150 -0
- package/src/components/Amelipro/UserMenu/UserMenuDetails/__tests__/__snapshots__/UserMenuDetails.spec.ts.snap +117 -0
- package/src/components/Amelipro/UserMenu/__tests__/UserMenu.spec.ts +141 -0
- package/src/components/Amelipro/UserMenu/__tests__/__snapshots__/UserMenu.spec.ts.snap +103 -0
- package/src/components/BackBtn/tests/BackBtn.a11y.spec.ts +20 -0
- package/src/components/BackToTopBtn/BackToTopBtn.stories.ts +9 -0
- package/src/components/BackToTopBtn/tests/BackToTopBtn.a11y.spec.ts +37 -0
- package/src/components/Captcha/Captcha.vue +9 -24
- package/src/components/Captcha/CaptchaHelpdesk.vue +42 -0
- package/src/components/Captcha/tests/Captcha.a11y.spec.ts +49 -0
- package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +256 -268
- package/src/components/ChipList/ChipList.stories.ts +15 -0
- package/src/components/ChipList/ChipList.vue +20 -17
- package/src/components/ChipList/locales.ts +1 -0
- package/src/components/ChipList/tests/ChipList.a11y.spec.ts +40 -0
- package/src/components/CollapsibleList/Accessibilite.mdx +67 -11
- package/src/components/CollapsibleList/tests/CollapsibleList.a11y.spec.ts +38 -0
- package/src/components/ContextualMenu/ContextualMenu.stories.ts +3 -0
- package/src/components/ContextualMenu/tests/ContextualMenu.a11y.spec.ts +30 -0
- package/src/components/CookieBanner/CookieBanner.stories.ts +15 -0
- package/src/components/CookieBanner/CookieBanner.vue +0 -1
- package/src/components/CookieBanner/tests/CookieBanner.a11y.spec.ts +29 -0
- package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.a11y.spec.ts +46 -0
- package/src/components/CookiesSelection/CookiesTable/tests/CookiesTable.a11y.spec.ts +37 -0
- package/src/components/CookiesSelection/tests/CookiesSelection.a11y.spec.ts +58 -0
- package/src/components/CopyBtn/CopyBtn.stories.ts +21 -0
- package/src/components/CopyBtn/tests/CopyBtn.a11y.spec.ts +40 -0
- package/src/components/CopyBtn/tests/__snapshots__/CopyBtn.spec.ts.snap +0 -1
- package/src/components/Customs/Selects/SelectBtnField/Accessibilite.stories.ts +4 -0
- package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.stories.ts +154 -82
- package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +229 -125
- package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +12 -12
- package/src/components/Customs/Selects/SelectBtnField/tests/__snapshots__/SelectBtnField.spec.ts.snap +344 -826
- package/src/components/Customs/Selects/SyBtnSelect/SyBtnSelect.stories.ts +30 -0
- package/src/components/Customs/Selects/SyBtnSelect/SyBtnSelect.vue +1 -0
- package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +27 -0
- package/src/components/Customs/Selects/SySelect/SySelect.vue +215 -169
- package/src/components/Customs/Selects/SySelect/composables/tests/useSySelectKeyboard.spec.ts +4 -2
- package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +7 -9
- package/src/components/Customs/Selects/SySelect/tests/SySelect.a11y.spec.ts +40 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +7 -3
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +20 -2
- package/src/components/Customs/SyCheckbox/tests/SyCheckbox.a11y.spec.ts +26 -0
- package/src/components/Customs/SyForm/SyForm.a11y.spec.ts +33 -0
- package/src/components/Customs/SyForm/SyForm.mdx +47 -7
- package/src/components/Customs/SyForm/SyForm.stories.ts +38 -34
- package/src/components/Customs/SyForm/SyForm.vue +27 -6
- package/src/components/Customs/SyIcon/SyIcon.a11y.spec.ts +37 -0
- package/src/components/Customs/SyIcon/SyIcon.stories.ts +5 -0
- package/src/components/Customs/SyPagination/tests/SyPagination.a11y.spec.ts +27 -0
- package/src/components/Customs/SyRadioGroup/Accessibilite.mdx +263 -0
- package/src/components/Customs/SyRadioGroup/SyRadioGroup.mdx +37 -0
- package/src/components/Customs/SyRadioGroup/SyRadioGroup.stories.ts +665 -0
- package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +324 -0
- package/src/components/Customs/SyRadioGroup/locales.ts +3 -0
- package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.a11y.spec.ts +30 -0
- package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.spec.ts +135 -0
- package/src/components/Customs/SyTabs/SyTabs.stories.ts +33 -0
- package/src/components/Customs/SyTabs/SyTabs.vue +1 -1
- package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +51 -0
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +3 -0
- package/src/components/Customs/SyTextField/SyTextField.vue +232 -199
- package/src/components/Customs/SyTextField/tests/SyTextField.a11y.spec.ts +27 -0
- package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +32 -2
- package/src/components/DataList/DataList.mdx +3 -1
- package/src/components/DataList/DataList.stories.ts +67 -17
- package/src/components/DataList/DataList.vue +13 -1
- package/src/components/DataList/tests/DataList.a11y.spec.ts +35 -0
- package/src/components/DataListGroup/DataListGroup.stories.ts +42 -12
- package/src/components/DataListGroup/DataListGroup.vue +14 -1
- package/src/components/DataListGroup/tests/DataListGroup.a11y.spec.ts +24 -0
- package/src/components/DataListItem/DataListItem.vue +10 -2
- package/src/components/DataListItem/tests/DataListItem.a11y.spec.ts +31 -0
- package/src/components/DataListItem/tests/DataListItem.spec.ts +1 -1
- package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +45 -0
- package/src/components/DatePicker/CalendarMode/DatePicker.vue +230 -205
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +27 -0
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.events.spec.ts +5 -0
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +179 -179
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +54 -0
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +337 -278
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.a11y.spec.ts +26 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +234 -827
- package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +12 -0
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +46 -81
- package/src/components/DatePicker/DateTextInput/tests/DateTextInput.a11y.spec.ts +27 -0
- package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +350 -0
- package/src/components/DatePicker/composables/index.ts +4 -1
- package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +270 -0
- package/src/components/DatePicker/composables/tests/useDatePickerViewMode.spec.ts +61 -3
- package/src/components/DatePicker/composables/tests/useDateRangeInput.spec.ts +198 -0
- package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +36 -2
- package/src/components/DatePicker/composables/tests/useInputHandler.spec.ts +755 -0
- package/src/components/DatePicker/composables/tests/useKeyboardEvents.spec.ts +168 -0
- package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +40 -34
- package/src/components/DatePicker/composables/useAsteriskDisplay.ts +1 -2
- package/src/components/DatePicker/composables/useCalendarKeyboardNavigation.ts +155 -0
- package/src/components/DatePicker/composables/useDatePickerState.ts +163 -0
- package/src/components/DatePicker/composables/useDateRangeInput.ts +4 -8
- package/src/components/DatePicker/composables/useDateTextField.ts +156 -0
- package/src/components/DatePicker/composables/useHolidayHighlighting.ts +64 -0
- package/src/components/DatePicker/composables/useInputHandler.ts +25 -19
- package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +51 -26
- package/src/components/DatePicker/constants/messages.ts +0 -1
- package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +2 -2
- package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +16 -8
- package/src/components/DiacriticPicker/tests/DiacriticPicker.a11y.spec.ts +46 -0
- package/src/components/DialogBox/DialogBox.stories.ts +5 -2
- package/src/components/DialogBox/DialogBox.vue +5 -0
- package/src/components/DialogBox/config.ts +5 -0
- package/src/components/DialogBox/tests/DialogBox.a11y.spec.ts +43 -0
- package/src/components/DownloadBtn/tests/DownloadBtn.a11y.spec.ts +26 -0
- package/src/components/ErrorPage/ErrorPage.stories.ts +60 -0
- package/src/components/ErrorPage/ErrorPage.vue +1 -1
- package/src/components/ErrorPage/tests/ErrorPage.a11y.spec.ts +29 -0
- package/src/components/ErrorPage/tests/ErrorPage.spec.ts +17 -0
- package/src/components/ExternalLinks/ExternalLinks.stories.ts +21 -0
- package/src/components/ExternalLinks/tests/ExternalLinks.a11y.spec.ts +39 -0
- package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +0 -1
- package/src/components/FileList/FileList.stories.ts +3 -0
- package/src/components/FileList/tests/FileList.a11y.spec.ts +41 -0
- package/src/components/FilePreview/FilePreview.stories.ts +3 -0
- package/src/components/FilePreview/tests/FilePreview.a11y.spec.ts +47 -0
- package/src/components/FileUpload/tests/FileUpload.a11y.spec.ts +25 -0
- package/src/components/FilterInline/FilterInline.stories.ts +15 -0
- package/src/components/FilterInline/FilterInline.vue +8 -4
- package/src/components/FilterInline/tests/FilterInline.a11y.spec.ts +36 -0
- package/src/components/FilterInline/tests/__snapshots__/FilterInline.spec.ts.snap +0 -3
- package/src/components/FilterSideBar/Accessibilite.stories.ts +4 -0
- package/src/components/FilterSideBar/FilterSideBar.stories.ts +33 -11
- package/src/components/FilterSideBar/FilterSideBar.vue +146 -83
- package/src/components/FilterSideBar/locales.ts +6 -0
- package/src/components/FilterSideBar/tests/FilterSideBar.a11y.spec.ts +59 -0
- package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +2 -2
- package/src/components/FooterBar/Accessibilite.mdx +67 -11
- package/src/components/FooterBar/FooterBar.vue +1 -1
- package/src/components/FooterBar/config.ts +2 -2
- package/src/components/FooterBar/tests/FooterBar.a11y.spec.ts +31 -0
- package/src/components/FooterBar/tests/FooterBarConfig.spec.ts +1 -1
- package/src/components/FooterBar/tests/__snapshots__/FooterBar.spec.ts.snap +1 -1
- package/src/components/FranceConnectBtn/tests/FranceConnectBtn.a11y.spec.ts +25 -0
- package/src/components/HeaderBar/HeaderBar.stories.ts +21 -0
- package/src/components/HeaderBar/HeaderBar.vue +47 -40
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.stories.ts +12 -0
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.stories.ts +3 -0
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +4 -0
- package/src/components/HeaderBar/HeaderBurgerMenu/menu.scss +17 -7
- package/src/components/HeaderBar/consts.scss +0 -1
- package/src/components/HeaderBar/tests/HeaderBar.a11y.spec.ts +33 -0
- package/src/components/HeaderBar/tests/__snapshots__/HeaderBar.spec.ts.snap +58 -57
- package/src/components/HeaderLoading/tests/HeaderLoading.a11y.spec.ts +25 -0
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +42 -0
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +4 -0
- package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +6 -2
- package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.a11y.spec.ts +45 -0
- package/src/components/HeaderToolbar/HeaderToolbar.stories.ts +6 -0
- package/src/components/HeaderToolbar/HeaderToolbar.vue +0 -3
- package/src/components/HeaderToolbar/tests/HeaderToolbar.a11y.spec.ts +25 -0
- package/src/components/LangBtn/LangBtn.stories.ts +12 -0
- package/src/components/LangBtn/tests/LangBtn.a11y.spec.ts +25 -0
- package/src/components/Logo/tests/Logo.a11y.spec.ts +20 -0
- package/src/components/LogoBrandSection/tests/LogoBrandSection.a11y.spec.ts +38 -0
- package/src/components/LunarCalendar/LunarCalendar.mdx +33 -0
- package/src/components/LunarCalendar/LunarCalendar.stories.ts +232 -0
- package/src/components/LunarCalendar/LunarCalendar.vue +57 -0
- package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +31 -0
- package/src/components/LunarCalendar/tests/LunarCalendar.spec.ts +79 -0
- package/src/components/LunarCalendar/useLunarCalendarRules.ts +96 -0
- package/src/components/LunarCalendar/useLunarCalendarValidation.ts +47 -0
- package/src/components/MaintenancePage/MaintenancePage.stories.ts +46 -0
- package/src/components/MaintenancePage/MaintenancePage.vue +7 -5
- package/src/components/MaintenancePage/tests/MaintenancePage.a11y.spec.ts +21 -0
- package/src/components/NirField/NirField.stories.ts +6 -0
- package/src/components/NirField/tests/NirField.a11y.spec.ts +32 -0
- package/src/components/NotFoundPage/NotFoundPage.stories.ts +56 -0
- package/src/components/NotFoundPage/NotFoundPage.vue +7 -5
- package/src/components/NotFoundPage/tests/NotFoundPage.a11y.spec.ts +31 -0
- package/src/components/NotificationBar/Notification/Notification.vue +203 -0
- package/src/components/NotificationBar/NotificationBar.stories.ts +151 -140
- package/src/components/NotificationBar/NotificationBar.vue +148 -202
- package/src/components/NotificationBar/config.ts +1 -1
- package/src/components/NotificationBar/tests/NotificationBar.a11y.spec.ts +66 -0
- package/src/components/NotificationBar/tests/NotificationBar.spec.ts +173 -177
- package/src/components/NotificationBar/tests/__snapshots__/NotificationBar.spec.ts.snap +67 -29
- package/src/components/PageContainer/tests/PageContainer.a11y.spec.ts +27 -0
- package/src/components/PaginatedTable/PaginatedTable.stories.ts +21 -10
- package/src/components/PaginatedTable/PaginatedTable.vue +72 -36
- package/src/components/PaginatedTable/tests/PaginatedTable.a11y.spec.ts +43 -0
- package/src/components/PasswordField/PasswordField.stories.ts +39 -0
- package/src/components/PasswordField/tests/PasswordField.a11y.spec.ts +26 -0
- package/src/components/PeriodField/tests/PeriodField.a11y.spec.ts +31 -0
- package/src/components/PhoneField/PhoneField.stories.ts +51 -0
- package/src/components/PhoneField/PhoneField.vue +102 -83
- package/src/components/PhoneField/tests/PhoneField.a11y.spec.ts +34 -0
- package/src/components/RangeField/tests/RangeField.a11y.spec.ts +32 -0
- package/src/components/RatingPicker/RatingPicker.stories.ts +21 -0
- package/src/components/SearchListField/tests/SearchListField.spec.ts +7 -53
- package/src/components/SkipLink/Accessibilite.mdx +59 -13
- package/src/components/SkipLink/SkipLink.stories.ts +41 -8
- package/src/components/SubHeader/SubHeader.stories.ts +178 -92
- package/src/components/SubHeader/SubHeader.vue +84 -71
- package/src/components/SubHeader/config.ts +1 -1
- package/src/components/SyAlert/SyAlert.vue +6 -3
- package/src/components/SyTextArea/SyTextArea.stories.ts +40 -0
- package/src/components/SyTextArea/SyTextArea.vue +13 -0
- package/src/components/SyTextArea/locales.ts +1 -0
- package/src/components/SyTextArea/tests/SyTextArea.spec.ts +42 -0
- package/src/components/TableToolbar/TableToolbar.stories.ts +3 -0
- package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +24 -72
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +591 -24
- package/src/components/Tables/SyServerTable/SyServerTable.vue +19 -13
- package/src/components/Tables/SyTable/FilterRules.stories.ts +12 -0
- package/src/components/Tables/SyTable/SyTable.stories.ts +460 -18
- package/src/components/Tables/SyTable/SyTable.vue +16 -11
- package/src/components/Tables/common/TableHeader.vue +16 -7
- package/src/components/Tables/common/filters/DateFilter.vue +1 -1
- package/src/components/Tables/common/locales.ts +1 -0
- package/src/components/Tables/common/tableFilterUtils.ts +3 -3
- package/src/components/Tables/common/types.ts +4 -2
- package/src/components/Tables/common/useTableCheckbox.ts +4 -3
- package/src/components/Tables/common/useTableFilter.ts +2 -2
- package/src/components/Tables/common/useTableItems.ts +4 -19
- package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +31 -1
- package/src/components/UserMenuBtn/UserMenuBtn.vue +2 -1
- package/src/components/UserMenuBtn/tests/UserMenuBtn.a11y.spec.ts +31 -0
- package/src/components/index.ts +2 -0
- package/src/composables/validation/tests/useFormValidation.spec.ts +251 -0
- package/src/composables/validation/tests/useValidatable.spec.ts +90 -0
- package/src/directives/lockFocus.ts +12 -2
- package/src/stories/Accessibilite/Audit/Exemptions-derogations.mdx +241 -0
- package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +17 -10
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +16 -0
- package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +160 -106
- package/src/stories/Accessibilite/Vuetify/VuetifyItems.ts +2 -1
- package/src/stories/GuideDuDev/ClassesUtilitaires/DataUtilities.mdx +6 -6
- package/src/stories/GuideDuDev/ClassesUtilitaires/DomBrowserUtilities.mdx +52 -59
- package/src/stories/GuideDuDev/ClassesUtilitaires/FormattingUtilities.mdx +28 -8
- package/src/stories/GuideDuDev/ClassesUtilitaires/StorageUtilities.mdx +2 -2
- package/src/stories/GuideDuDev/ClassesUtilitaires/ValidationRules.mdx +3 -3
- package/src/stories/GuideDuDev/ClassesUtilitaires/ValidationUtilities.mdx +11 -11
- package/src/stories/GuideDuDev/ClassesUtilitaires/index.mdx +24 -14
- package/src/stories/GuideDuDev/MigrationDepuisBridge.mdx +1 -1
- package/src/stories/GuideDuDev/moduleDeNotification.mdx +1 -1
- package/src/stories/accessibility/AccessibilityGuideLayout.mdx +87 -0
- package/src/stories/styles/accessibility-guide.css +153 -0
- package/src/utils/formatNir/formatNir.ts +15 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/insertAt.ts +11 -0
- package/src/utils/rules/isDateValid/IsDateValid.mdx +2 -2
- package/src/utils/rules/isDateValid/IsDateValid.stories.ts +6 -4
- package/src/utils/rules/isDateValid/index.ts +23 -8
- package/src/utils/rules/isDateValid/tests/isDateValid.spec.ts +9 -0
- package/src/utils/rules/isExactLength/IsExactLenght.mdx +1 -1
- package/src/utils/rules/isHolidayDay/IsHolidayDay.mdx +19 -7
- package/src/utils/rules/isHolidayDay/index.ts +6 -8
- package/src/utils/rules/isHolidayDay/tests/isHolidayDay.spec.ts +13 -1
- package/src/utils/rules/isNotAfterDate/IsNotAfterDate.mdx +2 -2
- package/src/utils/rules/isNotAfterDate/IsNotAfterDate.stories.ts +9 -2
- package/src/utils/rules/isNotAfterDate/index.ts +5 -12
- package/src/utils/rules/isNotAfterDate/tests/isNotAfterDate.spec.ts +20 -0
- package/src/utils/rules/isNotAfterToday/IsNotAfterToday.mdx +2 -2
- package/src/utils/rules/isNotAfterToday/IsNotAfterToday.stories.ts +8 -2
- package/src/utils/rules/isNotAfterToday/index.ts +6 -6
- package/src/utils/rules/isNotAfterToday/tests/isNotAfterToday.spec.ts +20 -0
- package/src/utils/rules/isNotBeforeDate/IsNotBeforeDate.mdx +2 -2
- package/src/utils/rules/isNotBeforeDate/index.ts +5 -12
- package/src/utils/rules/isNotBeforeDate/tests/IsNotBeforeDate.spec.ts +20 -0
- package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.mdx +2 -2
- package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.stories.ts +8 -2
- package/src/utils/rules/isNotBeforeToday/index.ts +6 -6
- package/src/utils/rules/isNotBeforeToday/tests/notBeforeToday.spec.ts +19 -0
- package/src/utils/rules/validateDateValue.ts +37 -0
- package/src/vuetifyConfig.ts +6 -2
- package/dist/components/Customs/Selects/SelectBtnField/config.d.ts +0 -11
- package/dist/components/DatePicker/composables/useIconState.d.ts +0 -17
- package/dist/components/DatePicker/tests/setup.d.ts +0 -75370
- package/dist/components/Tables/common/formatters.d.ts +0 -17
- package/dist/main-CbBVJ_le.js +0 -34377
- package/dist/stories/Accessibilite/Vuetify/VuetifyItems.d.ts +0 -70
- package/dist/stories/DesignTokens/StylesTypographiques.stories.new.d.ts +0 -8
- package/dist/stories/DesignTokens/TypographyDisplay.d.ts +0 -28
- package/dist/stories/DesignTokens/vue-shims.d.ts +0 -6
- package/src/components/Amelipro/AmeliproMultipleFoldingCard/tests/AmeliproMultipleFoldingCard.spec.ts +0 -40
- package/src/components/Amelipro/AmeliproMultipleFoldingCard/tests/__snapshots__/AmeliproMultipleFoldingCard.spec.ts.snap +0 -369
- package/src/components/Amelipro/ServiceMenu/ServiceBtn/tests/ServiceBtn.spec.ts +0 -21
- package/src/components/Amelipro/ServiceMenu/ServiceBtn/tests/__snapshots__/ServiceBtn.spec.ts.snap +0 -100
- package/src/components/Amelipro/ServiceMenu/ServiceList/tests/ServiceList.spec.ts +0 -25
- package/src/components/Amelipro/ServiceMenu/ServiceList/tests/__snapshots__/ServiceList.spec.ts.snap +0 -245
- package/src/components/Amelipro/ServiceMenu/ServiceMenuContent/tests/ServiceMenuContent.spec.ts +0 -45
- package/src/components/Amelipro/ServiceMenu/ServiceMenuContent/tests/__snapshots__/ServiceMenuContent.spec.ts.snap +0 -787
- package/src/components/Amelipro/ServiceMenu/tests/ServiceMenu.spec.ts +0 -46
- package/src/components/Amelipro/ServiceMenu/tests/__snapshots__/ServiceMenu.spec.ts.snap +0 -111
- package/src/components/Amelipro/StructureMenu/StructureBtn/tests/StructureBtn.spec.ts +0 -17
- package/src/components/Amelipro/StructureMenu/StructureBtn/tests/__snapshots__/StructureBtn.spec.ts.snap +0 -34
- package/src/components/Amelipro/StructureMenu/StructureItem/tests/StructureItem.spec.ts +0 -21
- package/src/components/Amelipro/StructureMenu/StructureItem/tests/__snapshots__/StructureItem.spec.ts.snap +0 -106
- package/src/components/Amelipro/StructureMenu/StructureList/tests/StructureList.spec.ts +0 -33
- package/src/components/Amelipro/StructureMenu/StructureList/tests/__snapshots__/StructureList.spec.ts.snap +0 -353
- package/src/components/Amelipro/StructureMenu/StructureTabs/tests/StructureTabs.spec.ts +0 -60
- package/src/components/Amelipro/StructureMenu/StructureTabs/tests/__snapshots__/StructureTabs.spec.ts.snap +0 -824
- package/src/components/Amelipro/StructureMenu/tests/StructureMenu.spec.ts +0 -69
- package/src/components/Amelipro/StructureMenu/tests/__snapshots__/StructureMenu.spec.ts.snap +0 -1383
- package/src/components/Amelipro/UserInformationSummary/tests/UserInformationSummary.spec.ts +0 -24
- package/src/components/Amelipro/UserMenu/UserMenuDetails/tests/UserMenuDetails.spec.ts +0 -33
- package/src/components/Amelipro/UserMenu/UserMenuDetails/tests/__snapshots__/UserMenuDetails.spec.ts.snap +0 -3
- package/src/components/Amelipro/UserMenu/tests/UserMenu.spec.ts +0 -34
- package/src/components/Amelipro/UserMenu/tests/__snapshots__/UserMenu.spec.ts.snap +0 -101
- package/src/components/Customs/Selects/SelectBtnField/config.ts +0 -11
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.events.spec.ts +0 -151
- package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +0 -148
- package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +0 -361
- package/src/components/DatePicker/DateTextInput/DateTextInput.spec.ts +0 -709
- package/src/components/DatePicker/composables/tests/useIconState.spec.ts +0 -130
- package/src/components/DatePicker/composables/useIconState.ts +0 -53
- package/src/components/DatePicker/tests/DatePicker.validation.spec.ts +0 -4111
- package/src/components/DatePicker/tests/archiTest.md +0 -33
- package/src/components/DatePicker/tests/navigation.regression.spec.ts +0 -74
- package/src/components/DatePicker/tests/navigation.simple.spec.ts +0 -137
- package/src/components/DatePicker/tests/setup.ts +0 -243
- package/src/components/Tables/common/formatters.ts +0 -72
- package/src/components/Usages/tests/Usages.spec.ts +0 -155
|
@@ -1,943 +1,350 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { mount, flushPromises } from '@vue/test-utils'
|
|
2
|
+
import { describe, it, expect } from 'vitest'
|
|
3
|
+
import { nextTick } from 'vue'
|
|
3
4
|
import ComplexDatePicker from '../ComplexDatePicker.vue'
|
|
4
|
-
import DateTextInput from '../../DateTextInput/DateTextInput.vue'
|
|
5
|
-
|
|
6
|
-
// Mock des composables
|
|
7
|
-
vi.mock('@/composables/date/useDateFormatDayjs', () => ({
|
|
8
|
-
useDateFormat: () => ({
|
|
9
|
-
parseDate: vi.fn((dateStr) => {
|
|
10
|
-
if (!dateStr) return null
|
|
11
|
-
return new Date('2023-01-15')
|
|
12
|
-
}),
|
|
13
|
-
formatDate: vi.fn((date) => {
|
|
14
|
-
if (!date) return ''
|
|
15
|
-
return '15/01/2023'
|
|
16
|
-
}),
|
|
17
|
-
}),
|
|
18
|
-
}))
|
|
19
|
-
|
|
20
|
-
vi.mock('@/composables/date/useDateInitializationDayjs', () => ({
|
|
21
|
-
useDateInitialization: () => ({
|
|
22
|
-
initializeSelectedDates: vi.fn((value) => {
|
|
23
|
-
if (!value) return null
|
|
24
|
-
if (Array.isArray(value)) {
|
|
25
|
-
return value.map(() => new Date('2023-01-15'))
|
|
26
|
-
}
|
|
27
|
-
return new Date('2023-01-15')
|
|
28
|
-
}),
|
|
29
|
-
}),
|
|
30
|
-
}))
|
|
31
|
-
|
|
32
|
-
vi.mock('@/composables/date/useDatePickerAccessibility', () => ({
|
|
33
|
-
useDatePickerAccessibility: () => ({
|
|
34
|
-
updateAccessibility: vi.fn(),
|
|
35
|
-
}),
|
|
36
|
-
}))
|
|
37
|
-
|
|
38
|
-
// Mock avec des erreurs qui peuvent être modifiées
|
|
39
|
-
const mockErrors = { value: [] as string[] }
|
|
40
|
-
const mockWarnings = { value: [] as string[] }
|
|
41
|
-
const mockSuccesses = { value: [] as string[] }
|
|
42
|
-
const mockHasError = { value: false }
|
|
43
|
-
const mockHasWarning = { value: false }
|
|
44
|
-
const mockHasSuccess = { value: false }
|
|
45
|
-
const mockValidateField = vi.fn().mockReturnValue({ valid: true })
|
|
46
|
-
const mockClearValidation = vi.fn(() => {
|
|
47
|
-
mockErrors.value = []
|
|
48
|
-
mockWarnings.value = []
|
|
49
|
-
mockSuccesses.value = []
|
|
50
|
-
mockHasError.value = false
|
|
51
|
-
mockHasWarning.value = false
|
|
52
|
-
mockHasSuccess.value = false
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
vi.mock('@/composables/validation/useValidation', () => ({
|
|
56
|
-
useValidation: () => ({
|
|
57
|
-
errors: mockErrors,
|
|
58
|
-
warnings: mockWarnings,
|
|
59
|
-
successes: mockSuccesses,
|
|
60
|
-
hasError: mockHasError,
|
|
61
|
-
hasWarning: mockHasWarning,
|
|
62
|
-
hasSuccess: mockHasSuccess,
|
|
63
|
-
validateField: mockValidateField,
|
|
64
|
-
clearValidation: mockClearValidation,
|
|
65
|
-
}),
|
|
66
|
-
}))
|
|
67
|
-
|
|
68
|
-
vi.mock('../composables/useWeekendDays', () => ({
|
|
69
|
-
useWeekendDays: () => ({
|
|
70
|
-
displayWeekendDays: true,
|
|
71
|
-
}),
|
|
72
|
-
}))
|
|
73
|
-
|
|
74
|
-
vi.mock('../composables/useTodayButton', () => ({
|
|
75
|
-
useTodayButton: () => ({
|
|
76
|
-
todayInString: 'Aujourd\'hui : 15/01/2023',
|
|
77
|
-
selectToday: vi.fn((selectedDates) => {
|
|
78
|
-
if (Array.isArray(selectedDates.value)) {
|
|
79
|
-
selectedDates.value = [new Date('2023-01-15')]
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
selectedDates.value = new Date('2023-01-15')
|
|
83
|
-
}
|
|
84
|
-
}),
|
|
85
|
-
}),
|
|
86
|
-
}))
|
|
87
|
-
|
|
88
|
-
vi.mock('../composables/useDatePickerViewMode', () => ({
|
|
89
|
-
useDatePickerViewMode: vi.fn(() => ({
|
|
90
|
-
currentViewMode: 'month',
|
|
91
|
-
handleViewModeUpdate: vi.fn(),
|
|
92
|
-
handleYearUpdate: vi.fn(),
|
|
93
|
-
handleMonthUpdate: vi.fn(),
|
|
94
|
-
resetViewMode: vi.fn(),
|
|
95
|
-
})),
|
|
96
|
-
}))
|
|
97
|
-
|
|
98
|
-
// Créer un mock pour rangeBoundaryDates qui peut être observé par les watchers
|
|
99
|
-
const mockRangeBoundaryDates = { value: [new Date('2023-01-15'), new Date('2023-01-20')] }
|
|
100
|
-
|
|
101
|
-
vi.mock('../composables/useDateSelection', () => ({
|
|
102
|
-
useDateSelection: () => ({
|
|
103
|
-
updateSelectedDates: vi.fn((date) => {
|
|
104
|
-
return date
|
|
105
|
-
}),
|
|
106
|
-
rangeBoundaryDates: mockRangeBoundaryDates,
|
|
107
|
-
generateDateRange: vi.fn((start, end) => {
|
|
108
|
-
const result = [start]
|
|
109
|
-
if (end > start) result.push(end)
|
|
110
|
-
return result
|
|
111
|
-
}),
|
|
112
|
-
}),
|
|
113
|
-
}))
|
|
114
|
-
|
|
115
|
-
// Mock du document.addEventListener et removeEventListener pour les tests de clic extérieur
|
|
116
|
-
const addEventListenerSpy = vi.spyOn(document, 'addEventListener')
|
|
117
|
-
const removeEventListenerSpy = vi.spyOn(document, 'removeEventListener')
|
|
118
|
-
|
|
119
|
-
describe('ComplexDatePicker', () => {
|
|
120
|
-
let wrapper: VueWrapper<InstanceType<typeof ComplexDatePicker>>
|
|
121
|
-
|
|
122
|
-
// Configuration de base pour monter le composant
|
|
123
|
-
const createWrapper = (props = {}) => {
|
|
124
|
-
// Assurer que les mocks sont correctement réinitialisés avant chaque test
|
|
125
|
-
vi.clearAllMocks()
|
|
126
|
-
|
|
127
|
-
mockRangeBoundaryDates.value = [new Date('2023-01-15'), new Date('2023-01-20')]
|
|
128
|
-
return mount(ComplexDatePicker, {
|
|
129
|
-
props: {
|
|
130
|
-
...props,
|
|
131
|
-
},
|
|
132
|
-
global: {
|
|
133
|
-
stubs: {
|
|
134
|
-
VDatePicker: true,
|
|
135
|
-
VMenu: true,
|
|
136
|
-
},
|
|
137
|
-
mocks: {
|
|
138
|
-
// Mock des méthodes qui pourraient être appelées dans le template
|
|
139
|
-
$nextTick: () => Promise.resolve(),
|
|
140
|
-
},
|
|
141
|
-
},
|
|
142
|
-
shallow: false,
|
|
143
|
-
})
|
|
144
|
-
}
|
|
145
5
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
6
|
+
describe('ComplexDatePicker.clean', () => {
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
8
|
+
const mountComponent = (props: any = { label: 'Test' }) => mount(ComplexDatePicker, {
|
|
9
|
+
props,
|
|
149
10
|
})
|
|
150
11
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
wrapper.unmount()
|
|
154
|
-
}
|
|
155
|
-
})
|
|
12
|
+
it('renders in calendar mode by default', () => {
|
|
13
|
+
const wrapper = mountComponent()
|
|
156
14
|
|
|
157
|
-
it('devrait monter correctement avec les props par défaut', () => {
|
|
158
|
-
wrapper = createWrapper()
|
|
159
15
|
expect(wrapper.exists()).toBe(true)
|
|
16
|
+
// The activator text field should be present
|
|
17
|
+
const input = wrapper.find('input')
|
|
18
|
+
expect(input.exists()).toBe(true)
|
|
160
19
|
})
|
|
161
20
|
|
|
162
|
-
it('
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
noCalendar: true,
|
|
167
|
-
},
|
|
168
|
-
global: {
|
|
169
|
-
stubs: {
|
|
170
|
-
// Stubber tous les composants pour éviter les erreurs de rendu
|
|
171
|
-
DateTextInput: { template: '<div class="date-text-input-stub"></div>' },
|
|
172
|
-
VMenu: { template: '<div class="v-menu-stub"></div>' },
|
|
173
|
-
SyTextField: { template: '<div class="sy-text-field-stub"></div>' },
|
|
174
|
-
VDatePicker: { template: '<div class="v-date-picker-stub"></div>' },
|
|
175
|
-
},
|
|
176
|
-
},
|
|
177
|
-
shallow: true,
|
|
21
|
+
it('renders in text-only mode when noCalendar=true', () => {
|
|
22
|
+
const wrapper = mountComponent({
|
|
23
|
+
label: 'Date Field',
|
|
24
|
+
noCalendar: true,
|
|
178
25
|
})
|
|
179
26
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
expect(
|
|
183
|
-
expect(template).not.toContain('v-menu-stub')
|
|
184
|
-
})
|
|
185
|
-
|
|
186
|
-
it('devrait afficher VMenu quand noCalendar=false', () => {
|
|
187
|
-
wrapper = createWrapper({ noCalendar: false })
|
|
188
|
-
expect(wrapper.findComponent(DateTextInput).exists()).toBe(false)
|
|
189
|
-
expect(wrapper.find('.date-picker-container').exists()).toBe(true)
|
|
190
|
-
})
|
|
191
|
-
|
|
192
|
-
it('devrait initialiser correctement selectedDates à partir de modelValue', () => {
|
|
193
|
-
const testDate = '2023-01-15'
|
|
194
|
-
wrapper = createWrapper({ modelValue: testDate })
|
|
195
|
-
expect(wrapper.vm.selectedDates).toBeDefined()
|
|
27
|
+
expect(wrapper.exists()).toBe(true)
|
|
28
|
+
// In text-only mode there should be no calendar rendered
|
|
29
|
+
expect(wrapper.find('.v-date-picker').exists()).toBe(false)
|
|
196
30
|
})
|
|
197
31
|
|
|
198
|
-
it('
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
global: {
|
|
203
|
-
stubs: {
|
|
204
|
-
DateTextInput: true,
|
|
205
|
-
VMenu: true,
|
|
206
|
-
SyTextField: true,
|
|
207
|
-
VDatePicker: true,
|
|
208
|
-
},
|
|
209
|
-
},
|
|
32
|
+
it('emits update:modelValue when a valid date is typed (single mode)', async () => {
|
|
33
|
+
const wrapper = mountComponent({
|
|
34
|
+
label: 'Date Field',
|
|
35
|
+
format: 'DD/MM/YYYY',
|
|
210
36
|
})
|
|
211
37
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
expect(wrapper.emitted('update:modelValue')).toBeTruthy()
|
|
217
|
-
expect(wrapper.emitted('update:modelValue')![0]).toEqual(['15/01/2023'])
|
|
218
|
-
})
|
|
219
|
-
|
|
220
|
-
it('devrait valider le champ comme requis quand required=true et aucune date n\'est sélectionnée', async () => {
|
|
221
|
-
wrapper = createWrapper({ required: true })
|
|
222
|
-
|
|
223
|
-
// Réinitialiser les erreurs avant le test
|
|
224
|
-
mockErrors.value = []
|
|
225
|
-
|
|
226
|
-
// Simuler une validation forcée
|
|
227
|
-
await wrapper.vm.validateDates(true)
|
|
38
|
+
const input = wrapper.find('input')
|
|
39
|
+
await input.setValue('01/01/2025')
|
|
40
|
+
await input.trigger('blur')
|
|
41
|
+
await flushPromises()
|
|
228
42
|
|
|
229
|
-
|
|
230
|
-
|
|
43
|
+
const emitted = wrapper.emitted('update:modelValue')
|
|
44
|
+
expect(emitted).toBeTruthy()
|
|
45
|
+
expect(emitted && emitted[0][0]).toBe('01/01/2025')
|
|
231
46
|
|
|
232
|
-
|
|
47
|
+
const selectedDate = wrapper.vm.selectedDates as Date
|
|
48
|
+
expect(selectedDate).toBeInstanceOf(Date)
|
|
49
|
+
expect(wrapper.vm.currentMonth).toBe(String(selectedDate.getMonth()))
|
|
50
|
+
expect(wrapper.vm.currentMonthName).toBeTruthy()
|
|
233
51
|
})
|
|
234
52
|
|
|
235
|
-
it('
|
|
236
|
-
wrapper =
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
// Appeler la fonction
|
|
242
|
-
await wrapper.vm.updateDisplayFormattedDate()
|
|
243
|
-
await flushPromises()
|
|
53
|
+
it('respects disabled and readonly props when opening the calendar', async () => {
|
|
54
|
+
const wrapper = mountComponent({
|
|
55
|
+
label: 'Date Field',
|
|
56
|
+
format: 'DD/MM/YYYY',
|
|
57
|
+
disabled: true,
|
|
58
|
+
})
|
|
244
59
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
expect(wrapper.vm.
|
|
249
|
-
})
|
|
60
|
+
expect(wrapper.vm.isDatePickerVisible).toBe(false)
|
|
61
|
+
await wrapper.vm.openDatePicker()
|
|
62
|
+
await nextTick()
|
|
63
|
+
expect(wrapper.vm.isDatePickerVisible).toBe(false)
|
|
250
64
|
|
|
251
|
-
|
|
252
|
-
wrapper
|
|
253
|
-
|
|
254
|
-
expect(wrapper.vm.
|
|
255
|
-
expect(wrapper.vm.isDatePickerVisible).toBeDefined()
|
|
256
|
-
expect(wrapper.vm.selectedDates).toBeDefined()
|
|
257
|
-
expect(wrapper.vm.errorMessages).toBeDefined()
|
|
258
|
-
expect(wrapper.vm.handleClickOutside).toBeDefined()
|
|
259
|
-
expect(wrapper.vm.initializeSelectedDates).toBeDefined()
|
|
260
|
-
expect(wrapper.vm.updateAccessibility).toBeDefined()
|
|
261
|
-
expect(wrapper.vm.openDatePicker).toBeDefined()
|
|
262
|
-
expect(wrapper.vm.updateDisplayFormattedDate).toBeDefined()
|
|
65
|
+
await wrapper.setProps({ disabled: false, readonly: true })
|
|
66
|
+
await wrapper.vm.openDatePicker()
|
|
67
|
+
await nextTick()
|
|
68
|
+
expect(wrapper.vm.isDatePickerVisible).toBe(false)
|
|
263
69
|
})
|
|
264
70
|
|
|
265
|
-
it('
|
|
266
|
-
wrapper =
|
|
267
|
-
|
|
268
|
-
|
|
71
|
+
it('handleDateSelected updates model, selection and emits event in single mode', async () => {
|
|
72
|
+
const wrapper = mountComponent({
|
|
73
|
+
label: 'Date Field',
|
|
74
|
+
format: 'DD/MM/YYYY',
|
|
75
|
+
})
|
|
269
76
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
wrapper.unmount()
|
|
273
|
-
expect(removeEventListenerSpy).toHaveBeenCalledWith('click', expect.any(Function))
|
|
274
|
-
})
|
|
77
|
+
await wrapper.vm.handleDateSelected('01/01/2025')
|
|
78
|
+
await flushPromises()
|
|
275
79
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
expect(wrapper.vm.isDatePickerVisible).toBe(true)
|
|
280
|
-
})
|
|
80
|
+
const emittedUpdate = wrapper.emitted('update:modelValue')
|
|
81
|
+
expect(emittedUpdate).toBeTruthy()
|
|
82
|
+
expect(emittedUpdate && emittedUpdate[0][0]).toBe('01/01/2025')
|
|
281
83
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
await wrapper.vm.toggleDatePicker()
|
|
286
|
-
// Puis le fermer
|
|
287
|
-
await wrapper.vm.toggleDatePicker()
|
|
288
|
-
expect(wrapper.vm.isDatePickerVisible).toBe(false)
|
|
289
|
-
})
|
|
84
|
+
const emittedSelected = wrapper.emitted('date-selected')
|
|
85
|
+
expect(emittedSelected).toBeTruthy()
|
|
86
|
+
expect(emittedSelected && emittedSelected[0][0]).toBe('01/01/2025')
|
|
290
87
|
|
|
291
|
-
it('devrait sélectionner la date du jour quand handleSelectToday est appelé', async () => {
|
|
292
|
-
wrapper = createWrapper()
|
|
293
|
-
await wrapper.vm.toggleDatePicker()
|
|
294
|
-
// Simuler l'appel à handleSelectToday
|
|
295
|
-
await wrapper.vm.handleSelectToday()
|
|
296
|
-
// Vérifier que selectedDates est mis à jour
|
|
297
88
|
expect(wrapper.vm.selectedDates).toBeInstanceOf(Date)
|
|
89
|
+
|
|
90
|
+
const selectedDate = wrapper.vm.selectedDates as Date
|
|
91
|
+
expect(wrapper.vm.currentMonth).toBe(String(selectedDate.getMonth()))
|
|
92
|
+
expect(wrapper.vm.currentMonthName).toBeTruthy()
|
|
298
93
|
})
|
|
299
94
|
|
|
300
|
-
it('
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
},
|
|
306
|
-
global: {
|
|
307
|
-
stubs: {
|
|
308
|
-
DateTextInput: true,
|
|
309
|
-
VMenu: true,
|
|
310
|
-
SyTextField: true,
|
|
311
|
-
VDatePicker: true,
|
|
312
|
-
},
|
|
313
|
-
},
|
|
95
|
+
it('handleDateSelected updates model, selection and emits event in range mode', async () => {
|
|
96
|
+
const wrapper = mountComponent({
|
|
97
|
+
label: 'Date Field',
|
|
98
|
+
format: 'DD/MM/YYYY',
|
|
99
|
+
displayRange: true,
|
|
314
100
|
})
|
|
315
101
|
|
|
316
|
-
|
|
317
|
-
wrapper.vm.$emit('input', '15/01/2023')
|
|
102
|
+
await wrapper.vm.handleDateSelected(['01/01/2025', '10/01/2025'])
|
|
318
103
|
await flushPromises()
|
|
319
104
|
|
|
320
|
-
|
|
321
|
-
expect(
|
|
322
|
-
})
|
|
323
|
-
|
|
324
|
-
it('devrait émettre un événement blur quand un input perd le focus', async () => {
|
|
325
|
-
// Utiliser la fonction createWrapper pour bénéficier de l'initialisation correcte des mocks
|
|
326
|
-
wrapper = createWrapper()
|
|
105
|
+
const emittedUpdate = wrapper.emitted('update:modelValue')
|
|
106
|
+
expect(emittedUpdate).toBeTruthy()
|
|
327
107
|
|
|
328
|
-
|
|
329
|
-
expect(
|
|
108
|
+
const emittedSelected = wrapper.emitted('date-selected')
|
|
109
|
+
expect(emittedSelected).toBeTruthy()
|
|
330
110
|
|
|
331
|
-
|
|
332
|
-
wrapper.vm.$emit('blur')
|
|
333
|
-
await flushPromises()
|
|
111
|
+
expect(wrapper.vm.selectedDates).not.toBeNull()
|
|
334
112
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
113
|
+
const selection = wrapper.vm.selectedDates as Date | (Date | null)[]
|
|
114
|
+
const baseDate = Array.isArray(selection)
|
|
115
|
+
? (selection.find(date => date instanceof Date) as Date | undefined)
|
|
116
|
+
: selection
|
|
117
|
+
expect(baseDate).toBeInstanceOf(Date)
|
|
118
|
+
expect(wrapper.vm.currentMonth).toBe(String((baseDate as Date).getMonth()))
|
|
119
|
+
expect(wrapper.vm.currentMonthName).toBeTruthy()
|
|
338
120
|
})
|
|
339
121
|
|
|
340
|
-
it('
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
global: {
|
|
347
|
-
stubs: {
|
|
348
|
-
DateTextInput: true,
|
|
349
|
-
VMenu: true,
|
|
350
|
-
SyTextField: true,
|
|
351
|
-
VDatePicker: true,
|
|
352
|
-
},
|
|
353
|
-
},
|
|
122
|
+
it('initializes from external modelValue with dateFormatReturn in single mode', async () => {
|
|
123
|
+
const wrapper = mountComponent({
|
|
124
|
+
label: 'Date Field',
|
|
125
|
+
format: 'DD/MM/YYYY',
|
|
126
|
+
dateFormatReturn: 'YYYY-MM-DD',
|
|
127
|
+
modelValue: '2025-01-02',
|
|
354
128
|
})
|
|
355
129
|
|
|
356
|
-
// Simuler l'émission d'un événement date-selected depuis le composant
|
|
357
|
-
wrapper.vm.$emit('date-selected', '15/01/2023')
|
|
358
130
|
await flushPromises()
|
|
359
131
|
|
|
360
|
-
//
|
|
361
|
-
expect(wrapper.
|
|
132
|
+
// displayFormattedDate et l'input utilisent le format d'affichage
|
|
133
|
+
expect(wrapper.vm.displayFormattedDate).toBe('02/01/2025')
|
|
134
|
+
const input = wrapper.find('input')
|
|
135
|
+
expect((input.element as HTMLInputElement).value).toBe('02/01/2025')
|
|
362
136
|
})
|
|
363
137
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
138
|
+
it('initializes selection correctly from range modelValue in range mode', async () => {
|
|
139
|
+
const wrapper = mountComponent({
|
|
140
|
+
label: 'Date Field',
|
|
367
141
|
format: 'DD/MM/YYYY',
|
|
142
|
+
displayRange: true,
|
|
143
|
+
modelValue: ['01/01/2025', '10/01/2025'],
|
|
368
144
|
})
|
|
369
145
|
|
|
370
|
-
|
|
371
|
-
const input = wrapper.find('input')
|
|
372
|
-
if (input.exists()) {
|
|
373
|
-
await input.setValue('15012023')
|
|
374
|
-
await input.trigger('input')
|
|
375
|
-
await flushPromises()
|
|
376
|
-
|
|
377
|
-
// Vérifier que le composant existe toujours après l'opération
|
|
378
|
-
expect(wrapper.exists()).toBe(true)
|
|
379
|
-
}
|
|
380
|
-
})
|
|
381
|
-
|
|
382
|
-
it('devrait gérer différents formats de date', async () => {
|
|
383
|
-
wrapper = createWrapper({
|
|
384
|
-
format: 'MM-DD-YYYY',
|
|
385
|
-
})
|
|
146
|
+
await flushPromises()
|
|
386
147
|
|
|
387
|
-
|
|
388
|
-
expect(wrapper.props('format')).toBe('MM-DD-YYYY')
|
|
148
|
+
expect(wrapper.vm.selectedDates).not.toBeNull()
|
|
389
149
|
|
|
390
|
-
|
|
391
|
-
expect(
|
|
150
|
+
const input = wrapper.find('input')
|
|
151
|
+
expect((input.element as HTMLInputElement).value).toBe('01/01/2025 - ')
|
|
392
152
|
})
|
|
393
153
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
mockErrors.value = []
|
|
399
|
-
|
|
400
|
-
const customRules = [
|
|
401
|
-
{ type: 'maxDate', options: { date: '2023-12-31' } },
|
|
402
|
-
]
|
|
403
|
-
|
|
404
|
-
wrapper = createWrapper({
|
|
405
|
-
customRules,
|
|
406
|
-
modelValue: '15/01/2023',
|
|
407
|
-
disableErrorHandling: false,
|
|
154
|
+
it('formatDateInput formats raw digits according to the format and computes cursor position', () => {
|
|
155
|
+
const wrapper = mountComponent({
|
|
156
|
+
label: 'Date Field',
|
|
157
|
+
format: 'DD/MM/YYYY',
|
|
408
158
|
})
|
|
409
159
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
// Vérifier que validateField a été appelé au moins une fois
|
|
414
|
-
expect(mockValidateField).toHaveBeenCalled()
|
|
160
|
+
const { formatted, cursorPos } = wrapper.vm.formatDateInput('0101', 4)
|
|
161
|
+
expect(formatted).toBe('01/01')
|
|
162
|
+
expect(cursorPos).toBe(formatted.length)
|
|
415
163
|
})
|
|
416
164
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
// Créer un wrapper avec des règles personnalisées et des règles d'avertissement
|
|
424
|
-
wrapper = createWrapper({
|
|
425
|
-
customRules: [{ type: 'required', options: {} }],
|
|
426
|
-
customWarningRules: [{ type: 'minDate', options: { date: '2023-01-01' } }],
|
|
427
|
-
disableErrorHandling: false,
|
|
165
|
+
it('opens calendar when textFieldActivator is true and input is clicked', async () => {
|
|
166
|
+
const wrapper = mountComponent({
|
|
167
|
+
label: 'Date Field',
|
|
168
|
+
format: 'DD/MM/YYYY',
|
|
169
|
+
textFieldActivator: true,
|
|
428
170
|
})
|
|
429
171
|
|
|
430
|
-
// Simuler une erreur de validation standard
|
|
431
|
-
mockErrors.value = ['La date est requise.']
|
|
432
|
-
|
|
433
|
-
// Définir une date sélectionnée pour que la validation puisse s'exécuter
|
|
434
|
-
wrapper.vm.selectedDates = new Date('2023-01-15')
|
|
435
|
-
|
|
436
|
-
// Simuler la validation des dépendances
|
|
437
|
-
await wrapper.vm.validateDates(true)
|
|
438
|
-
|
|
439
|
-
// Vérifier que la validation des dépendances a été appelée malgré l'erreur standard
|
|
440
|
-
expect(mockValidateField).toHaveBeenCalled()
|
|
441
|
-
})
|
|
442
|
-
|
|
443
|
-
// Tests pour la gestion des événements clavier
|
|
444
|
-
it('devrait gérer correctement les événements clavier', async () => {
|
|
445
|
-
wrapper = createWrapper()
|
|
446
|
-
|
|
447
|
-
// Simuler un événement clavier sur le champ de texte
|
|
448
172
|
const input = wrapper.find('input')
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
// Vérifier que le composant existe toujours après l'opération
|
|
455
|
-
expect(wrapper.exists()).toBe(true)
|
|
456
|
-
}
|
|
173
|
+
expect(wrapper.vm.isDatePickerVisible).toBe(false)
|
|
174
|
+
await input.trigger('click')
|
|
175
|
+
await nextTick()
|
|
176
|
+
expect(wrapper.vm.isDatePickerVisible).toBe(true)
|
|
457
177
|
})
|
|
458
178
|
|
|
459
|
-
it('
|
|
460
|
-
wrapper =
|
|
179
|
+
it('toggles calendar visibility with Enter key on the input', async () => {
|
|
180
|
+
const wrapper = mountComponent({
|
|
181
|
+
label: 'Date Field',
|
|
182
|
+
format: 'DD/MM/YYYY',
|
|
183
|
+
})
|
|
461
184
|
|
|
462
|
-
// Simuler un événement clavier sur le champ de texte
|
|
463
185
|
const input = wrapper.find('input')
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
// Vérifier que le composant existe toujours après l'opération
|
|
470
|
-
expect(wrapper.exists()).toBe(true)
|
|
471
|
-
}
|
|
472
|
-
})
|
|
473
|
-
|
|
474
|
-
// Tests pour la synchronisation avec modelValue
|
|
475
|
-
it('devrait synchroniser correctement depuis modelValue', async () => {
|
|
476
|
-
wrapper = createWrapper()
|
|
477
|
-
|
|
478
|
-
// Mettre à jour la prop modelValue
|
|
479
|
-
await wrapper.setProps({ modelValue: '2023-02-15' })
|
|
480
|
-
await flushPromises()
|
|
481
|
-
|
|
482
|
-
// Vérifier que le composant existe toujours après l'opération
|
|
483
|
-
expect(wrapper.exists()).toBe(true)
|
|
484
|
-
|
|
485
|
-
// Vérifier que selectedDates est exposé
|
|
486
|
-
expect(wrapper.vm.selectedDates).toBeDefined()
|
|
186
|
+
expect(wrapper.vm.isDatePickerVisible).toBe(false)
|
|
187
|
+
await input.trigger('keydown', { key: 'Enter' })
|
|
188
|
+
await nextTick()
|
|
189
|
+
expect(wrapper.vm.isDatePickerVisible).toBe(true)
|
|
487
190
|
})
|
|
488
191
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
// Créer un wrapper avec displayRange=true
|
|
495
|
-
const wrapper = mount(ComplexDatePicker, {
|
|
496
|
-
props: {
|
|
497
|
-
displayRange: true,
|
|
498
|
-
format: 'DD/MM/YYYY',
|
|
499
|
-
// Ne pas définir modelValue initialement pour éviter les problèmes d'initialisation
|
|
500
|
-
},
|
|
501
|
-
global: {
|
|
502
|
-
stubs: {
|
|
503
|
-
VDatePicker: true,
|
|
504
|
-
VMenu: true,
|
|
505
|
-
},
|
|
506
|
-
},
|
|
507
|
-
})
|
|
508
|
-
|
|
509
|
-
await flushPromises()
|
|
510
|
-
|
|
511
|
-
// Vérifier que le composant existe
|
|
512
|
-
expect(wrapper.exists()).toBe(true)
|
|
513
|
-
|
|
514
|
-
// Maintenant, mettre à jour le modelValue après l'initialisation du composant
|
|
515
|
-
await wrapper.setProps({
|
|
516
|
-
modelValue: ['2023-03-10', '2023-03-15'],
|
|
192
|
+
it('does not open calendar with Enter key when readonly', async () => {
|
|
193
|
+
const wrapper = mountComponent({
|
|
194
|
+
label: 'Date Field',
|
|
195
|
+
format: 'DD/MM/YYYY',
|
|
196
|
+
readonly: true,
|
|
517
197
|
})
|
|
518
|
-
await flushPromises()
|
|
519
198
|
|
|
520
|
-
|
|
521
|
-
expect(wrapper.
|
|
199
|
+
const input = wrapper.find('input')
|
|
200
|
+
expect(wrapper.vm.isDatePickerVisible).toBe(false)
|
|
201
|
+
await input.trigger('keydown', { key: 'Enter' })
|
|
202
|
+
await nextTick()
|
|
203
|
+
expect(wrapper.vm.isDatePickerVisible).toBe(false)
|
|
522
204
|
})
|
|
523
205
|
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
props: {
|
|
529
|
-
format: 'MM/DD/YYYY',
|
|
530
|
-
},
|
|
531
|
-
global: {
|
|
532
|
-
stubs: {
|
|
533
|
-
VDatePicker: true,
|
|
534
|
-
VMenu: true,
|
|
535
|
-
SyTextField: {
|
|
536
|
-
template: '<div><input type="text" :value="modelValue" @input="$emit(\'update:modelValue\', $event.target.value)" /></div>',
|
|
537
|
-
props: ['modelValue'],
|
|
538
|
-
emits: ['update:modelValue'],
|
|
539
|
-
},
|
|
540
|
-
},
|
|
541
|
-
},
|
|
542
|
-
})
|
|
543
|
-
|
|
544
|
-
// Accéder directement à la fonction formatDateInput
|
|
545
|
-
const { formatDateInput } = wrapper.vm
|
|
546
|
-
|
|
547
|
-
// Tester le formatage automatique avec différentes entrées
|
|
548
|
-
const result1 = formatDateInput('0315')
|
|
549
|
-
expect(result1.formatted).toBe('03/15')
|
|
550
|
-
|
|
551
|
-
const result2 = formatDateInput('03152023')
|
|
552
|
-
expect(result2.formatted).toBe('03/15/2023')
|
|
553
|
-
|
|
554
|
-
// Tester avec le format YYYY-MM-DD
|
|
555
|
-
wrapper = createWrapper({
|
|
556
|
-
format: 'YYYY-MM-DD',
|
|
206
|
+
it('emits closed when handleClickOutside is called while open', () => {
|
|
207
|
+
const wrapper = mountComponent({
|
|
208
|
+
label: 'Date Field',
|
|
209
|
+
format: 'DD/MM/YYYY',
|
|
557
210
|
})
|
|
558
211
|
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
// Tester le formatage automatique avec différentes entrées
|
|
563
|
-
const result3 = formatDateInput2('2023')
|
|
564
|
-
expect(result3.formatted).toBe('2023')
|
|
565
|
-
|
|
566
|
-
const result4 = formatDateInput2('202303')
|
|
567
|
-
expect(result4.formatted).toBe('2023-03')
|
|
568
|
-
|
|
569
|
-
const result5 = formatDateInput2('20230315')
|
|
570
|
-
expect(result5.formatted).toBe('2023-03-15')
|
|
571
|
-
})
|
|
572
|
-
|
|
573
|
-
// Tests pour la validation du format de date
|
|
574
|
-
it('devrait valider correctement le format de date', async () => {
|
|
575
|
-
wrapper = createWrapper({ format: 'DD/MM/YYYY', required: true })
|
|
576
|
-
|
|
577
|
-
// Accéder à la fonction validateDateFormat
|
|
578
|
-
const { validateDateFormat } = wrapper.vm
|
|
212
|
+
const outsideElement = document.createElement('div')
|
|
213
|
+
wrapper.vm.isDatePickerVisible = true
|
|
214
|
+
wrapper.vm.handleClickOutside({ target: outsideElement } as unknown as MouseEvent)
|
|
579
215
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
// Avec hasInteracted.value = false par défaut, isValid devrait être true
|
|
583
|
-
expect(emptyResult.isValid).toBe(true)
|
|
584
|
-
expect(emptyResult.message).toBe('')
|
|
585
|
-
|
|
586
|
-
// Simuler une interaction avec le champ
|
|
587
|
-
const input = wrapper.find('input')
|
|
588
|
-
if (input.exists()) {
|
|
589
|
-
await input.trigger('focus')
|
|
590
|
-
await input.trigger('blur')
|
|
591
|
-
await flushPromises()
|
|
592
|
-
|
|
593
|
-
// Maintenant hasInteracted.value devrait être true
|
|
594
|
-
const emptyResultAfterInteraction = validateDateFormat('')
|
|
595
|
-
expect(emptyResultAfterInteraction.isValid).toBe(false)
|
|
596
|
-
expect(emptyResultAfterInteraction.message).toBe('La date est requise.')
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
// Tester avec une date invalide (caractères non autorisés)
|
|
600
|
-
const invalidCharsResult = validateDateFormat('12/AB/2023')
|
|
601
|
-
expect(invalidCharsResult.isValid).toBe(false)
|
|
602
|
-
|
|
603
|
-
// Tester avec une date au format invalide
|
|
604
|
-
const invalidFormatResult = validateDateFormat('32/13/2023')
|
|
605
|
-
expect(invalidFormatResult.isValid).toBe(false)
|
|
606
|
-
|
|
607
|
-
// Tester avec une date valide
|
|
608
|
-
const validResult = validateDateFormat('15/03/2023')
|
|
609
|
-
expect(validResult.isValid).toBe(true)
|
|
610
|
-
expect(validResult.message).toBe('')
|
|
216
|
+
const closedEvents = wrapper.emitted('closed')
|
|
217
|
+
expect(closedEvents).toBeTruthy()
|
|
611
218
|
})
|
|
612
219
|
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
wrapper = createWrapper({
|
|
220
|
+
it('updates internal month and year when VDatePicker emits updates', async () => {
|
|
221
|
+
const wrapper = mountComponent({
|
|
222
|
+
label: 'Date Field',
|
|
617
223
|
format: 'DD/MM/YYYY',
|
|
618
224
|
})
|
|
619
225
|
|
|
620
|
-
|
|
621
|
-
|
|
226
|
+
wrapper.vm.isDatePickerVisible = true
|
|
227
|
+
await nextTick()
|
|
622
228
|
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
expect(result1.formatted).toBe('03/15')
|
|
229
|
+
const datePicker = wrapper.findComponent({ name: 'VDatePicker' })
|
|
230
|
+
expect(datePicker.exists()).toBe(true)
|
|
626
231
|
|
|
627
|
-
|
|
628
|
-
|
|
232
|
+
await datePicker.vm.$emit('update:month', '5')
|
|
233
|
+
await datePicker.vm.$emit('update:year', '2030')
|
|
629
234
|
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
expect(
|
|
235
|
+
expect(wrapper.vm.currentMonth).toBe('5')
|
|
236
|
+
expect(wrapper.vm.currentMonthName).not.toBeNull()
|
|
237
|
+
expect(wrapper.vm.currentYear).toBe('2030')
|
|
238
|
+
expect(wrapper.vm.currentYearName).toBe('2030')
|
|
633
239
|
})
|
|
634
240
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
},
|
|
642
|
-
global: {
|
|
643
|
-
stubs: {
|
|
644
|
-
VDatePicker: true,
|
|
645
|
-
VMenu: true,
|
|
646
|
-
SyTextField: true,
|
|
647
|
-
},
|
|
648
|
-
},
|
|
241
|
+
it('validateOnSubmit returns false when required and empty in text-only mode', () => {
|
|
242
|
+
const wrapper = mountComponent({
|
|
243
|
+
label: 'Date Field',
|
|
244
|
+
noCalendar: true,
|
|
245
|
+
required: true,
|
|
246
|
+
format: 'DD/MM/YYYY',
|
|
649
247
|
})
|
|
650
248
|
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
// Tester avec une entrée vide
|
|
655
|
-
const emptyResult = formatDateInput('')
|
|
656
|
-
expect(emptyResult.formatted).toBe('')
|
|
657
|
-
|
|
658
|
-
// Tester avec des chiffres sans séparateur
|
|
659
|
-
const digitsResult = formatDateInput('1203')
|
|
660
|
-
expect(digitsResult.formatted).toBe('12/03')
|
|
661
|
-
|
|
662
|
-
// Tester avec une date complète sans séparateurs
|
|
663
|
-
const fullDateResult = formatDateInput('12032023')
|
|
664
|
-
expect(fullDateResult.formatted).toBe('12/03/2023')
|
|
665
|
-
|
|
666
|
-
// Tester avec une date déjà formatée
|
|
667
|
-
const formattedResult = formatDateInput('12/03/2023')
|
|
668
|
-
expect(formattedResult.formatted).toBe('12/03/2023')
|
|
249
|
+
const result = wrapper.vm.validateOnSubmit()
|
|
250
|
+
expect(result).toBe(false)
|
|
669
251
|
})
|
|
670
252
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
253
|
+
it('validateOnSubmit returns true when a valid value is present in text-only mode', async () => {
|
|
254
|
+
const wrapper = mountComponent({
|
|
255
|
+
label: 'Date Field',
|
|
256
|
+
noCalendar: true,
|
|
257
|
+
required: true,
|
|
675
258
|
format: 'DD/MM/YYYY',
|
|
676
|
-
modelValue: '
|
|
259
|
+
modelValue: '01/01/2025',
|
|
677
260
|
})
|
|
678
261
|
|
|
679
|
-
|
|
680
|
-
|
|
262
|
+
await nextTick()
|
|
263
|
+
const result = wrapper.vm.validateOnSubmit()
|
|
264
|
+
expect(result).toBe(true)
|
|
265
|
+
})
|
|
266
|
+
|
|
267
|
+
it('handleSelectToday selects today and keeps component usable', async () => {
|
|
268
|
+
const wrapper = mountComponent()
|
|
681
269
|
|
|
682
|
-
|
|
683
|
-
await wrapper.setProps({ modelValue: '2023-02-20' })
|
|
270
|
+
await wrapper.vm.handleSelectToday()
|
|
684
271
|
await flushPromises()
|
|
685
272
|
|
|
686
|
-
|
|
273
|
+
expect(wrapper.vm.selectedDates).not.toBeNull()
|
|
687
274
|
expect(wrapper.exists()).toBe(true)
|
|
688
275
|
})
|
|
689
276
|
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
required: false,
|
|
696
|
-
format: 'DD/MM/YYYY',
|
|
697
|
-
},
|
|
698
|
-
global: {
|
|
699
|
-
stubs: {
|
|
700
|
-
VDatePicker: true,
|
|
701
|
-
VMenu: true,
|
|
702
|
-
SyTextField: true,
|
|
703
|
-
},
|
|
704
|
-
},
|
|
277
|
+
it('validateOnSubmit returns false when required and empty in calendar mode', () => {
|
|
278
|
+
const wrapper = mountComponent({
|
|
279
|
+
label: 'Date Field',
|
|
280
|
+
required: true,
|
|
281
|
+
format: 'DD/MM/YYYY',
|
|
705
282
|
})
|
|
706
283
|
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
await input.trigger('blur')
|
|
712
|
-
await flushPromises()
|
|
713
|
-
|
|
714
|
-
// Vérifier qu'il n'y a pas d'erreur
|
|
715
|
-
expect(mockErrors.value.length).toBe(0)
|
|
716
|
-
}
|
|
284
|
+
const result = wrapper.vm.validateOnSubmit()
|
|
285
|
+
expect(result).toBe(false)
|
|
286
|
+
// Should surface at least one error message
|
|
287
|
+
expect(wrapper.vm.errorMessages.length).toBeGreaterThan(0)
|
|
717
288
|
})
|
|
718
289
|
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
required: true,
|
|
725
|
-
format: 'DD/MM/YYYY',
|
|
726
|
-
disableErrorHandling: false,
|
|
727
|
-
},
|
|
728
|
-
global: {
|
|
729
|
-
stubs: {
|
|
730
|
-
VDatePicker: true,
|
|
731
|
-
VMenu: true,
|
|
732
|
-
SyTextField: true,
|
|
733
|
-
},
|
|
734
|
-
},
|
|
290
|
+
it('validateDates flags an error when end date is before start date in range mode', () => {
|
|
291
|
+
const wrapper = mountComponent({
|
|
292
|
+
label: 'Date Field',
|
|
293
|
+
format: 'DD/MM/YYYY',
|
|
294
|
+
displayRange: true,
|
|
735
295
|
})
|
|
736
296
|
|
|
737
|
-
//
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
await input.trigger('blur') // Pour déclencher hasInteracted = true
|
|
743
|
-
await flushPromises()
|
|
744
|
-
|
|
745
|
-
// Forcer la validation
|
|
746
|
-
await wrapper.vm.validateDates(true)
|
|
747
|
-
|
|
748
|
-
// Vérifier qu'il y a une erreur
|
|
749
|
-
expect(mockErrors.value.length).toBeGreaterThan(0)
|
|
750
|
-
}
|
|
751
|
-
})
|
|
752
|
-
|
|
753
|
-
// Test pour la validation avec des caractères invalides
|
|
754
|
-
it('devrait rejeter une date avec des caractères invalides', async () => {
|
|
755
|
-
// Monter le composant
|
|
756
|
-
wrapper = mount(ComplexDatePicker, {
|
|
757
|
-
props: {
|
|
758
|
-
format: 'DD/MM/YYYY',
|
|
759
|
-
disableErrorHandling: false,
|
|
760
|
-
},
|
|
761
|
-
global: {
|
|
762
|
-
stubs: {
|
|
763
|
-
VDatePicker: true,
|
|
764
|
-
VMenu: true,
|
|
765
|
-
SyTextField: true,
|
|
766
|
-
},
|
|
767
|
-
},
|
|
768
|
-
})
|
|
297
|
+
// Start date after end date -> invalid range
|
|
298
|
+
wrapper.vm.selectedDates = [
|
|
299
|
+
new Date(2025, 0, 10),
|
|
300
|
+
new Date(2025, 0, 1),
|
|
301
|
+
]
|
|
769
302
|
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
await input.setValue('15/AB/2023')
|
|
774
|
-
await input.trigger('input')
|
|
775
|
-
await input.trigger('blur')
|
|
776
|
-
await flushPromises()
|
|
777
|
-
|
|
778
|
-
// Vérifier que la validation a été appelée
|
|
779
|
-
expect(mockClearValidation).toHaveBeenCalled()
|
|
780
|
-
}
|
|
303
|
+
const result = wrapper.vm.validateDates(true)
|
|
304
|
+
expect(result.hasError).toBe(true)
|
|
305
|
+
expect(wrapper.vm.errorMessages.length).toBeGreaterThan(0)
|
|
781
306
|
})
|
|
782
307
|
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
format: 'DD/MM/YYYY',
|
|
789
|
-
disableErrorHandling: false,
|
|
790
|
-
},
|
|
791
|
-
global: {
|
|
792
|
-
stubs: {
|
|
793
|
-
VDatePicker: true,
|
|
794
|
-
VMenu: true,
|
|
795
|
-
SyTextField: true,
|
|
796
|
-
},
|
|
797
|
-
},
|
|
308
|
+
it('validateDates does not flag an error for an incomplete range when not forced', () => {
|
|
309
|
+
const wrapper = mountComponent({
|
|
310
|
+
label: 'Date Field',
|
|
311
|
+
format: 'DD/MM/YYYY',
|
|
312
|
+
displayRange: true,
|
|
798
313
|
})
|
|
799
314
|
|
|
800
|
-
//
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
await input.trigger('blur')
|
|
806
|
-
await flushPromises()
|
|
807
|
-
|
|
808
|
-
// Vérifier que la validation a été appelée
|
|
809
|
-
expect(mockClearValidation).toHaveBeenCalled()
|
|
810
|
-
}
|
|
811
|
-
})
|
|
812
|
-
|
|
813
|
-
// Test pour la validation avec un format de date valide
|
|
814
|
-
it('devrait accepter une date valide avec le format principal', async () => {
|
|
815
|
-
// Monter le composant
|
|
816
|
-
wrapper = mount(ComplexDatePicker, {
|
|
817
|
-
props: {
|
|
818
|
-
format: 'DD/MM/YYYY',
|
|
819
|
-
disableErrorHandling: false,
|
|
820
|
-
},
|
|
821
|
-
global: {
|
|
822
|
-
stubs: {
|
|
823
|
-
VDatePicker: true,
|
|
824
|
-
VMenu: true,
|
|
825
|
-
SyTextField: true,
|
|
826
|
-
},
|
|
827
|
-
},
|
|
828
|
-
})
|
|
315
|
+
// First boundary set, second still empty (user is still typing)
|
|
316
|
+
wrapper.vm.selectedDates = [
|
|
317
|
+
new Date(2025, 0, 1),
|
|
318
|
+
null,
|
|
319
|
+
]
|
|
829
320
|
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
await input.setValue('15/03/2023')
|
|
834
|
-
await input.trigger('input')
|
|
835
|
-
await input.trigger('blur')
|
|
836
|
-
await flushPromises()
|
|
837
|
-
|
|
838
|
-
// Vérifier que la validation a été appelée
|
|
839
|
-
expect(mockClearValidation).toHaveBeenCalled()
|
|
840
|
-
}
|
|
321
|
+
const result = wrapper.vm.validateDates()
|
|
322
|
+
expect(result.hasError).toBe(false)
|
|
323
|
+
expect(wrapper.vm.errorMessages.length).toBe(0)
|
|
841
324
|
})
|
|
842
325
|
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
format: 'DD/MM/YYYY',
|
|
849
|
-
dateFormatReturn: 'YYYY-MM-DD',
|
|
850
|
-
},
|
|
851
|
-
global: {
|
|
852
|
-
stubs: {
|
|
853
|
-
VDatePicker: true,
|
|
854
|
-
VMenu: true,
|
|
855
|
-
SyTextField: true,
|
|
856
|
-
},
|
|
857
|
-
},
|
|
326
|
+
it('reset clears selection, errors and closes the calendar', async () => {
|
|
327
|
+
const wrapper = mountComponent({
|
|
328
|
+
label: 'Date Field',
|
|
329
|
+
required: true,
|
|
330
|
+
format: 'DD/MM/YYYY',
|
|
858
331
|
})
|
|
859
332
|
|
|
860
|
-
// Simuler une
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
await input.trigger('input')
|
|
865
|
-
await input.trigger('blur')
|
|
866
|
-
await flushPromises()
|
|
867
|
-
|
|
868
|
-
// Vérifier qu'il n'y a pas d'erreur
|
|
869
|
-
expect(mockErrors.value.length).toBe(0)
|
|
870
|
-
}
|
|
871
|
-
})
|
|
872
|
-
|
|
873
|
-
// Tests pour la validation de la saisie manuelle
|
|
874
|
-
it('devrait valider correctement une date valide saisie manuellement', async () => {
|
|
875
|
-
wrapper = createWrapper({ format: 'DD/MM/YYYY' })
|
|
333
|
+
// Simuler une erreur required
|
|
334
|
+
wrapper.vm.selectedDates = null
|
|
335
|
+
wrapper.vm.validateDates(true)
|
|
336
|
+
expect(wrapper.vm.errorMessages.length).toBeGreaterThan(0)
|
|
876
337
|
|
|
877
|
-
//
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
await input.setValue('15/01/2023')
|
|
882
|
-
await input.trigger('input')
|
|
883
|
-
await input.trigger('blur')
|
|
884
|
-
await flushPromises()
|
|
885
|
-
|
|
886
|
-
// Vérifier qu'il n'y a pas d'erreur
|
|
887
|
-
expect(mockErrors.value.length).toBe(0)
|
|
888
|
-
}
|
|
889
|
-
})
|
|
890
|
-
|
|
891
|
-
it('devrait détecter une date invalide saisie manuellement', async () => {
|
|
892
|
-
// Réinitialiser les mocks avant le test
|
|
893
|
-
vi.clearAllMocks()
|
|
894
|
-
mockErrors.value = []
|
|
895
|
-
|
|
896
|
-
wrapper = createWrapper({ format: 'DD/MM/YYYY', disableErrorHandling: false })
|
|
897
|
-
|
|
898
|
-
// Simuler une saisie dans le champ de texte
|
|
899
|
-
const input = wrapper.find('input')
|
|
900
|
-
if (input.exists()) {
|
|
901
|
-
// Saisir une date invalide
|
|
902
|
-
await input.setValue('99/99/9999')
|
|
903
|
-
await input.trigger('input')
|
|
904
|
-
await input.trigger('blur')
|
|
905
|
-
await flushPromises()
|
|
906
|
-
|
|
907
|
-
// Vérifier que la validation a été appelée
|
|
908
|
-
expect(mockClearValidation).toHaveBeenCalled()
|
|
909
|
-
}
|
|
910
|
-
})
|
|
911
|
-
|
|
912
|
-
// Tests pour la gestion de la perte de focus
|
|
913
|
-
it('devrait émettre un événement blur lors de la perte de focus', async () => {
|
|
914
|
-
// Utiliser createWrapper pour bénéficier de l'initialisation correcte des mocks
|
|
915
|
-
wrapper = createWrapper()
|
|
916
|
-
|
|
917
|
-
// S'assurer que le wrapper est correctement monté
|
|
918
|
-
expect(wrapper.exists()).toBe(true)
|
|
338
|
+
// Ouvrir le calendrier puis réinitialiser
|
|
339
|
+
await wrapper.vm.toggleDatePicker()
|
|
340
|
+
await nextTick()
|
|
341
|
+
expect(wrapper.vm.isDatePickerVisible).toBe(true)
|
|
919
342
|
|
|
920
|
-
|
|
921
|
-
wrapper.vm.$emit('blur')
|
|
343
|
+
wrapper.vm.reset()
|
|
922
344
|
await flushPromises()
|
|
923
345
|
|
|
924
|
-
|
|
925
|
-
expect(wrapper.
|
|
926
|
-
expect(wrapper.
|
|
927
|
-
})
|
|
928
|
-
|
|
929
|
-
it('devrait respecter la propriété readonly dans le mode calendrier', async () => {
|
|
930
|
-
// Monter le composant avec readonly=true et noCalendar=false (mode calendrier)
|
|
931
|
-
wrapper = createWrapper({
|
|
932
|
-
readonly: true,
|
|
933
|
-
noCalendar: false,
|
|
934
|
-
})
|
|
935
|
-
|
|
936
|
-
// Vérifier que le composant a bien la propriété readonly définie
|
|
937
|
-
expect(wrapper.props('readonly')).toBe(true)
|
|
938
|
-
|
|
939
|
-
// Note: Ce test vérifie que la propriété readonly est correctement passée au composant.
|
|
940
|
-
// La correction du bug a été de modifier ':readonly="false"' en ':readonly="props.readonly"'
|
|
941
|
-
// dans le template du ComplexDatePicker pour que le mode readonly soit respecté.
|
|
346
|
+
expect(wrapper.vm.selectedDates).toBeNull()
|
|
347
|
+
expect(wrapper.vm.errorMessages.length).toBe(0)
|
|
348
|
+
expect(wrapper.vm.isDatePickerVisible).toBe(false)
|
|
942
349
|
})
|
|
943
350
|
})
|