@cnamts/synapse 1.0.0 → 1.0.2
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/README.md +1 -1
- package/dist/DateFilter-YWOTbfeL.js +98 -0
- package/dist/NumberFilter-DMmMgALM.js +121 -0
- package/dist/PeriodFilter-Bok5BHcn.js +112 -0
- package/dist/SelectFilter-BKud2WhN.js +136 -0
- package/dist/TextFilter-DvMf2thH.js +114 -0
- package/dist/{components/BackBtn → common}/constants/ExpertiseLevelEnum.d.ts +3 -0
- package/dist/components/Accordion/Accordion.d.ts +2 -1
- package/dist/components/Accordion/composables/useAccordionGroupCommunication.d.ts +5 -0
- package/dist/components/Accordion/composables/useAccordionKeyboardNavigation.d.ts +12 -0
- package/dist/components/Accordion/composables/useAccordionState.d.ts +13 -0
- package/dist/components/BackBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/BackToTopBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/ChipList/AccessibiliteItems.d.ts +1 -1
- package/dist/components/CollapsibleList/AccessibiliteItems.d.ts +1 -1
- package/dist/components/ContextualMenu/AccessibiliteItems.d.ts +1 -1
- package/dist/components/CookieBanner/AccessibiliteItems.d.ts +1 -1
- package/dist/components/CopyBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Customs/SyBtnSelect/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +85 -0
- package/dist/components/Customs/SyInputSelect/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Customs/SyInputSelect/SyInputSelect.d.ts +2 -0
- package/dist/components/Customs/SySelect/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Customs/SySelect/SySelect.d.ts +33 -13
- package/dist/components/Customs/SyTextField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +2 -2
- package/dist/components/DataList/AccessibiliteItems.d.ts +1 -1
- package/dist/components/DataListGroup/AccessibiliteItems.d.ts +1 -1
- package/dist/components/DatePicker/AccessibiliteItems.d.ts +1 -1
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +4295 -0
- package/dist/components/DatePicker/{DatePicker.d.ts → DatePicker/DatePicker.d.ts} +158 -104
- package/dist/components/DatePicker/{DateTextInput.d.ts → DateTextInput/DateTextInput.d.ts} +35 -27
- package/dist/components/DatePicker/composables/index.d.ts +17 -0
- package/dist/components/DatePicker/composables/useAsteriskDisplay.d.ts +14 -0
- package/dist/components/DatePicker/composables/useDateAutoClamp.d.ts +16 -0
- package/dist/components/DatePicker/composables/useDateFormatValidation.d.ts +25 -0
- package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +33 -0
- package/dist/components/DatePicker/composables/useDatePickerViewMode.d.ts +16 -0
- package/dist/components/DatePicker/composables/useDatePickerVisibility.d.ts +27 -0
- package/dist/components/DatePicker/composables/useDateRangeInput.d.ts +29 -0
- package/dist/components/DatePicker/composables/useDateRangeValidation.d.ts +11 -0
- package/dist/components/DatePicker/composables/useDateSelection.d.ts +10 -0
- package/dist/components/DatePicker/composables/useDateValidation.d.ts +35 -0
- package/dist/components/DatePicker/composables/useDisplayedDateString.d.ts +19 -0
- package/dist/components/DatePicker/composables/useIconState.d.ts +17 -0
- package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +31 -0
- package/dist/components/DatePicker/composables/useInputHandler.d.ts +32 -0
- package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +33 -0
- package/dist/components/DatePicker/composables/useMonthButtonCustomization.d.ts +12 -0
- package/dist/components/DatePicker/composables/useTodayButton.d.ts +16 -0
- package/dist/components/DatePicker/composables/useWeekendDays.d.ts +11 -0
- package/dist/components/DatePicker/constants/messages.d.ts +29 -0
- package/dist/components/DatePicker/types.d.ts +13 -0
- package/dist/components/DialogBox/AccessibiliteItems.d.ts +1 -1
- package/dist/components/DownloadBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/ErrorPage/AccessibiliteItems.d.ts +1 -1
- package/dist/components/ExternalLinks/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FileList/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FilePreview/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FileUpload/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FilterInline/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FilterSideBar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FilterSideBar/FilterSideBar.d.ts +395 -1
- package/dist/components/FooterBar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FranceConnectBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/HeaderBar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.d.ts +1 -1
- package/dist/components/HeaderLoading/AccessibiliteItems.d.ts +1 -1
- package/dist/components/HeaderToolbar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/LangBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Logo/AccessibiliteItems.d.ts +1 -1
- package/dist/components/LogoBrandSection/AccessibiliteItems.d.ts +1 -1
- package/dist/components/MaintenancePage/AccessibiliteItems.d.ts +1 -1
- package/dist/components/NirField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/NirField/NirField.d.ts +7 -3
- package/dist/components/NirField/nirValidation.d.ts +1 -1
- package/dist/components/NotFoundPage/AccessibiliteItems.d.ts +1 -1
- package/dist/components/NotificationBar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PageContainer/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PaginatedTable/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PasswordField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PasswordField/PasswordField.d.ts +2 -0
- package/dist/components/PeriodField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PeriodField/PeriodField.d.ts +219 -41
- package/dist/components/PhoneField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PhoneField/PhoneField.d.ts +2 -2
- package/dist/components/RangeField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/RangeField/RangeField.d.ts +2 -0
- package/dist/components/RatingPicker/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SearchListField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SearchListField/SearchListField.d.ts +9 -0
- package/dist/components/SelectBtnField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SkipLink/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SocialMediaLinks/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SubHeader/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SyAlert/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SyTextArea/SyTextArea.d.ts +2 -0
- package/dist/components/TableToolbar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +652 -0
- package/dist/components/Tables/SyTable/SyTable.d.ts +671 -0
- package/dist/components/Tables/common/SyTableFilter.d.ts +126 -0
- package/dist/components/Tables/common/SyTablePagination.d.ts +1636 -0
- package/dist/components/Tables/common/TableHeader.d.ts +15 -0
- package/dist/components/Tables/common/constants/StateEnum.d.ts +6 -0
- package/dist/components/Tables/common/filters/DateFilter.d.ts +121 -0
- package/dist/components/Tables/common/filters/NumberFilter.d.ts +132 -0
- package/dist/components/Tables/common/filters/PeriodFilter.d.ts +135 -0
- package/dist/components/Tables/common/filters/SelectFilter.d.ts +120 -0
- package/dist/components/Tables/common/filters/TextFilter.d.ts +132 -0
- package/dist/components/Tables/common/filters/getFilterComponent.d.ts +1 -0
- package/dist/components/Tables/common/filters/locales.d.ts +4 -0
- package/dist/components/Tables/common/filters/logics/date.d.ts +1 -0
- package/dist/components/Tables/common/filters/logics/number.d.ts +1 -0
- package/dist/components/Tables/common/filters/logics/period.d.ts +1 -0
- package/dist/components/Tables/common/filters/logics/select.d.ts +1 -0
- package/dist/components/Tables/common/filters/logics/text.d.ts +1 -0
- package/dist/components/Tables/common/formatters.d.ts +17 -0
- package/dist/components/Tables/common/locales.d.ts +28 -0
- package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +267 -0
- package/dist/components/Tables/common/organizeColumns/sortHeaders.d.ts +2 -0
- package/dist/components/Tables/common/tableAccessibilityUtils.d.ts +8 -0
- package/dist/components/Tables/common/tableFilterUtils.d.ts +3 -0
- package/dist/components/Tables/common/tableStorageUtils.d.ts +69 -0
- package/dist/components/Tables/common/tableUtils.d.ts +79 -0
- package/dist/components/Tables/common/types.d.ts +91 -0
- package/dist/components/Tables/common/usePagination.d.ts +22 -0
- package/dist/components/Tables/common/useTableCheckbox.d.ts +20 -0
- package/dist/components/Tables/common/useTableFilter.d.ts +9 -0
- package/dist/components/Tables/common/useTableHeaders.d.ts +76 -0
- package/dist/components/Tables/common/useTableItems.d.ts +24 -0
- package/dist/components/Tables/common/useTableOptions.d.ts +18 -0
- package/dist/components/Tables/index.d.ts +2 -0
- package/dist/components/ToolbarContainer/ToolbarContainer.d.ts +11 -0
- package/dist/components/UploadWorkflow/AccessibiliteItems.d.ts +1 -1
- package/dist/components/UserMenuBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +9 -2
- package/dist/components/index.d.ts +9 -5
- package/dist/design-system-v3.js +102 -11944
- package/dist/design-system-v3.umd.cjs +22 -4
- package/dist/designTokens/index.d.ts +3 -1
- package/dist/designTokens/tokens/cnam/cnamFonts.d.ts +140 -0
- package/dist/designTokens/tokens/pa/paFonts.d.ts +140 -0
- package/dist/designTokens/utils/createFontVariables.d.ts +39 -0
- package/dist/designTokens/utils/index.d.ts +2 -1
- package/dist/main-Cx8qG7YR.js +16344 -0
- package/dist/stories/Accessibilite/Vuetify/VuetifyItems.d.ts +14 -2
- package/dist/stories/DesignTokens/StylesTypographiques.stories.new.d.ts +8 -0
- package/dist/stories/DesignTokens/TypographyDisplay.d.ts +28 -0
- package/dist/stories/DesignTokens/vue-shims.d.ts +6 -0
- package/dist/style.css +1 -1
- package/dist/utils/rules/isRequired/index.d.ts +1 -1
- package/dist/vite-env.d.ts +12 -0
- package/package.json +3 -3
- package/src/assets/_spacers.scss +37 -1
- package/src/assets/_typography.scss +158 -0
- package/src/assets/settings.scss +7 -0
- package/src/common/constants/ExpertiseLevelEnum.ts +7 -0
- package/src/common/imgs/accessibility-svgrepo-com.svg +4 -0
- package/src/components/Accordion/Accessibilite/AccessibilityGuide.mdx +249 -0
- package/src/components/Accordion/Accordion.vue +48 -76
- package/src/components/Accordion/composables/__tests__/useAccordionGroupCommunication.spec.ts +146 -0
- package/src/components/Accordion/composables/__tests__/useAccordionKeyboardNavigation.spec.ts +209 -0
- package/src/components/Accordion/composables/__tests__/useAccordionState.spec.ts +144 -0
- package/src/components/Accordion/composables/useAccordionGroupCommunication.ts +52 -0
- package/src/components/Accordion/composables/useAccordionKeyboardNavigation.ts +111 -0
- package/src/components/Accordion/composables/useAccordionState.ts +59 -0
- package/src/components/Accordion/tests/__snapshots__/accordion.spec.ts.snap +3 -0
- package/src/components/BackBtn/AccessibiliteItems.ts +1 -1
- package/src/components/BackToTopBtn/AccessibiliteItems.ts +1 -1
- package/src/components/ChipList/AccessibiliteItems.ts +1 -1
- package/src/components/CollapsibleList/AccessibiliteItems.ts +1 -1
- package/src/components/ContextualMenu/AccessibiliteItems.ts +1 -1
- package/src/components/CookieBanner/AccessibiliteItems.ts +1 -1
- package/src/components/CopyBtn/AccessibiliteItems.ts +1 -1
- package/src/components/Customs/SyBtnSelect/AccessibiliteItems.ts +1 -1
- package/src/components/Customs/SyCheckbox/Accessibilite.mdx +303 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +50 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +630 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +326 -0
- package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +201 -0
- package/src/components/Customs/SyInputSelect/AccessibiliteItems.ts +1 -1
- package/src/components/Customs/SyInputSelect/SyInputSelect.stories.ts +1 -0
- package/src/components/Customs/SyInputSelect/SyInputSelect.vue +8 -1
- package/src/components/Customs/SySelect/AccessibiliteItems.ts +1 -1
- package/src/components/Customs/SySelect/SySelect.stories.ts +160 -0
- package/src/components/Customs/SySelect/SySelect.vue +292 -39
- package/src/components/Customs/SySelect/tests/SySelect.spec.ts +234 -2
- package/src/components/Customs/SyTextField/AccessibiliteItems.ts +1 -1
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +3 -2
- package/src/components/Customs/SyTextField/SyTextField.vue +19 -8
- package/src/components/DataList/AccessibiliteItems.ts +1 -1
- package/src/components/DataListGroup/AccessibiliteItems.ts +1 -1
- package/src/components/DatePicker/AccessibiliteItems.ts +1 -1
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.mdx +212 -0
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1307 -0
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +769 -204
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.events.spec.ts +161 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +943 -0
- package/src/components/DatePicker/DatePicker/DatePicker.mdx +176 -0
- package/src/components/DatePicker/{DatePicker.stories.ts → DatePicker/DatePicker.stories.ts} +356 -519
- package/src/components/DatePicker/{DatePicker.vue → DatePicker/DatePicker.vue} +435 -89
- package/src/components/DatePicker/DatePicker/tests/DatePicker.events.spec.ts +189 -0
- package/src/components/DatePicker/{tests → DatePicker/tests}/DatePicker.spec.ts +0 -14
- package/src/components/DatePicker/DatePickerOverview.mdx +227 -0
- package/src/components/DatePicker/{DatePickerValidation.mdx → DatePickerValidationExample/DatePickerValidation.mdx} +3 -3
- package/src/components/DatePicker/{DatePickerValidation.stories.ts → DatePickerValidationExample/DatePickerValidation.stories.ts} +2 -2
- package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +320 -0
- package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +148 -0
- package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +278 -0
- package/src/components/DatePicker/{tests → DateTextInput}/DateTextInput.spec.ts +10 -7
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +1111 -0
- package/src/components/DatePicker/DateTextInput/NoCalendar.mdx +64 -0
- package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +782 -0
- package/src/components/DatePicker/composables/index.ts +24 -0
- package/src/components/DatePicker/composables/tests/useDateAutoClamp.spec.ts +190 -0
- package/src/components/DatePicker/composables/tests/useDateFormatValidation.spec.ts +165 -0
- package/src/components/DatePicker/composables/tests/useDateInputEditing.spec.ts +359 -0
- package/src/components/DatePicker/composables/tests/useDatePickerViewMode.spec.ts +160 -0
- package/src/components/DatePicker/composables/tests/useDatePickerVisibility.spec.ts +339 -0
- package/src/components/DatePicker/composables/tests/useDateRangeInput.spec.ts +277 -0
- package/src/components/DatePicker/composables/tests/useDateRangeValidation.spec.ts +107 -0
- package/src/components/DatePicker/composables/tests/useDateSelection.spec.ts +171 -0
- package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +245 -0
- package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +98 -0
- package/src/components/DatePicker/composables/tests/useIconState.spec.ts +130 -0
- package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +456 -0
- package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +233 -0
- package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +125 -0
- package/src/components/DatePicker/composables/tests/useTodayButton.spec.ts +97 -0
- package/src/components/DatePicker/composables/tests/useWeekendDays.spec.ts +28 -0
- package/src/components/DatePicker/composables/useAsteriskDisplay.ts +31 -0
- package/src/components/DatePicker/composables/useDateAutoClamp.ts +136 -0
- package/src/components/DatePicker/composables/useDateFormatValidation.ts +95 -0
- package/src/components/DatePicker/composables/useDateInputEditing.ts +326 -0
- package/src/components/DatePicker/composables/useDatePickerViewMode.ts +61 -0
- package/src/components/DatePicker/composables/useDatePickerVisibility.ts +146 -0
- package/src/components/DatePicker/composables/useDateRangeInput.ts +378 -0
- package/src/components/DatePicker/composables/useDateRangeValidation.ts +48 -0
- package/src/components/DatePicker/composables/useDateSelection.ts +121 -0
- package/src/components/DatePicker/composables/useDateValidation.ts +225 -0
- package/src/components/DatePicker/composables/useDisplayedDateString.ts +70 -0
- package/src/components/DatePicker/composables/useIconState.ts +53 -0
- package/src/components/DatePicker/composables/useInputBlurHandler.ts +165 -0
- package/src/components/DatePicker/composables/useInputHandler.ts +436 -0
- package/src/components/DatePicker/composables/useManualDateValidation.ts +161 -0
- package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +187 -0
- package/src/components/DatePicker/composables/useTodayButton.ts +43 -0
- package/src/components/DatePicker/composables/useWeekendDays.ts +21 -0
- package/src/components/DatePicker/constants/messages.ts +50 -0
- package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +4 -4
- package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +1 -1
- package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +172 -0
- package/src/components/DatePicker/types.ts +15 -0
- package/src/components/DiacriticPicker/DiacriticPicker.stories.ts +10 -0
- package/src/components/DialogBox/AccessibiliteItems.ts +1 -1
- package/src/components/DownloadBtn/AccessibiliteItems.ts +1 -1
- package/src/components/ErrorPage/Accessibilite.stories.ts +8 -0
- package/src/components/ErrorPage/AccessibiliteItems.ts +1 -1
- package/src/components/ErrorPage/ErrorPage.vue +12 -6
- package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +4 -4
- package/src/components/ExternalLinks/AccessibiliteItems.ts +1 -1
- package/src/components/FileList/AccessibiliteItems.ts +1 -1
- package/src/components/FilePreview/AccessibiliteItems.ts +1 -1
- package/src/components/FileUpload/AccessibiliteItems.ts +1 -1
- package/src/components/FilterInline/AccessibiliteItems.ts +1 -1
- package/src/components/FilterSideBar/AccessibiliteItems.ts +1 -1
- package/src/components/FilterSideBar/FilterSideBar.vue +108 -90
- package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +27 -0
- package/src/components/FilterSideBar/tests/__snapshots__/FilterSideBar.spec.ts.snap +114 -109
- package/src/components/FooterBar/AccessibiliteItems.ts +1 -1
- package/src/components/FooterBar/FooterBar.vue +2 -1
- package/src/components/FranceConnectBtn/AccessibiliteItems.ts +1 -1
- package/src/components/HeaderBar/AccessibiliteItems.ts +1 -1
- package/src/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.ts +1 -1
- package/src/components/HeaderLoading/AccessibiliteItems.ts +1 -1
- package/src/components/HeaderToolbar/AccessibiliteItems.ts +1 -1
- package/src/components/LangBtn/AccessibiliteItems.ts +1 -1
- package/src/components/Logo/Accessibilite.stories.ts +4 -0
- package/src/components/Logo/AccessibiliteItems.ts +1 -1
- package/src/components/LogoBrandSection/AccessibiliteItems.ts +1 -1
- package/src/components/MaintenancePage/AccessibiliteItems.ts +1 -1
- package/src/components/NirField/AccessibiliteItems.ts +1 -1
- package/src/components/NirField/NirField.mdx +22 -9
- package/src/components/NirField/NirField.stories.ts +26 -2
- package/src/components/NirField/NirField.vue +209 -22
- package/src/components/NirField/nirValidation.ts +17 -3
- package/src/components/NirField/tests/NirField.spec.ts +2 -2
- package/src/components/NotFoundPage/Accessibilite.stories.ts +8 -0
- package/src/components/NotFoundPage/AccessibiliteItems.ts +1 -1
- package/src/components/NotFoundPage/NotFoundPage.vue +2 -1
- package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +8 -6
- package/src/components/NotificationBar/AccessibiliteItems.ts +1 -1
- package/src/components/PageContainer/AccessibiliteItems.ts +1 -1
- package/src/components/PaginatedTable/AccessibiliteItems.ts +1 -1
- package/src/components/PaginatedTable/PaginatedTable.mdx +2 -0
- package/src/components/PaginatedTable/PaginatedTable.stories.ts +19 -0
- package/src/components/PaginatedTable/PaginatedTable.vue +51 -13
- package/src/components/PaginatedTable/tests/PaginatedTable.spec.ts +0 -2
- package/src/components/PasswordField/AccessibiliteItems.ts +1 -1
- package/src/components/PasswordField/PasswordField.stories.ts +4 -0
- package/src/components/PasswordField/PasswordField.vue +3 -0
- package/src/components/PeriodField/AccessibiliteItems.ts +1 -1
- package/src/components/PeriodField/PeriodField.vue +15 -1
- package/src/components/PhoneField/AccessibiliteItems.ts +1 -1
- package/src/components/PhoneField/PhoneField.stories.ts +15 -15
- package/src/components/PhoneField/PhoneField.vue +1 -1
- package/src/components/RangeField/AccessibiliteItems.ts +1 -1
- package/src/components/RangeField/RangeField.stories.ts +9 -0
- package/src/components/RangeField/RangeField.vue +4 -0
- package/src/components/RangeField/tests/__snapshots__/RangeField.spec.ts.snap +12 -0
- package/src/components/RatingPicker/AccessibiliteItems.ts +1 -1
- package/src/components/SearchListField/AccessibiliteItems.ts +1 -1
- package/src/components/SearchListField/SearchListField.vue +5 -0
- package/src/components/SelectBtnField/AccessibiliteItems.ts +1 -1
- package/src/components/SkipLink/AccessibiliteItems.ts +1 -1
- package/src/components/SocialMediaLinks/AccessibiliteItems.ts +1 -1
- package/src/components/SubHeader/AccessibiliteItems.ts +1 -1
- package/src/components/SyAlert/AccessibiliteItems.ts +1 -1
- package/src/components/SyTextArea/SyTextArea.vue +3 -0
- package/src/components/SyTextArea/tests/SyTextArea.spec.ts +0 -1
- package/src/components/TableToolbar/AccessibiliteItems.ts +1 -1
- package/src/components/TableToolbar/TableToolbar.stories.ts +110 -56
- package/src/components/Tables/SyServerTable/FilterRules.stories.ts +700 -0
- package/src/components/Tables/SyServerTable/SyServerTable.mdx +170 -0
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +4354 -0
- package/src/components/Tables/SyServerTable/SyServerTable.vue +391 -0
- package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +702 -0
- package/src/components/Tables/SyTable/FilterRules.stories.ts +418 -0
- package/src/components/Tables/SyTable/SyTable.mdx +139 -0
- package/src/components/Tables/SyTable/SyTable.stories.ts +2754 -0
- package/src/components/Tables/SyTable/SyTable.vue +397 -0
- package/src/components/Tables/SyTable/tests/SyTable.spec.ts +707 -0
- package/src/components/Tables/common/SyTableFilter.vue +289 -0
- package/src/components/Tables/common/SyTablePagination.vue +375 -0
- package/src/components/Tables/common/TableHeader.vue +205 -0
- package/src/components/Tables/common/constants/StateEnum.ts +6 -0
- package/src/components/Tables/common/filters/DateFilter.vue +140 -0
- package/src/components/Tables/common/filters/NumberFilter.vue +234 -0
- package/src/components/Tables/common/filters/PeriodFilter.vue +147 -0
- package/src/components/Tables/common/filters/SelectFilter.vue +235 -0
- package/src/components/Tables/common/filters/TextFilter.vue +191 -0
- package/src/components/Tables/common/filters/getFilterComponent.ts +54 -0
- package/src/components/Tables/common/filters/locales.ts +4 -0
- package/src/components/Tables/common/filters/logics/date.ts +12 -0
- package/src/components/Tables/common/filters/logics/number.ts +48 -0
- package/src/components/Tables/common/filters/logics/period.ts +25 -0
- package/src/components/Tables/common/filters/logics/select.ts +27 -0
- package/src/components/Tables/common/filters/logics/tests/TextFilterLogic.spec.ts +177 -0
- package/src/components/Tables/common/filters/logics/text.ts +62 -0
- package/src/components/Tables/common/filters/tests/DateFilter.spec.ts +187 -0
- package/src/components/Tables/common/filters/tests/NumberFilter.spec.ts +280 -0
- package/src/components/Tables/common/filters/tests/PeriodFilter.spec.ts +192 -0
- package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +219 -0
- package/src/components/Tables/common/filters/tests/TextFilter.spec.ts +260 -0
- package/src/components/Tables/common/formatters.ts +72 -0
- package/src/components/Tables/common/locales.ts +31 -0
- package/src/components/Tables/common/organizeColumns/OrganizeColumns.vue +269 -0
- package/src/components/Tables/common/organizeColumns/sortHeaders.ts +9 -0
- package/src/components/Tables/common/tableAccessibilityUtils.ts +61 -0
- package/src/components/Tables/common/tableFilterUtils.ts +75 -0
- package/src/components/Tables/common/tableStorageUtils.ts +127 -0
- package/src/components/Tables/common/tableStyles.scss +80 -0
- package/src/components/Tables/common/tableUtils.ts +102 -0
- package/src/components/Tables/common/tests/SyTableFilter.spec.ts +312 -0
- package/src/components/Tables/common/tests/SyTablePagination.spec.ts +170 -0
- package/src/components/Tables/common/tests/filterByRange.spec.ts +215 -0
- package/src/components/Tables/common/tests/resize.spec.ts +161 -0
- package/src/components/Tables/common/tests/tableFilterUtils.spec.ts +92 -0
- package/src/components/Tables/common/tests/tableUtils.spec.ts +228 -0
- package/src/components/Tables/common/types.ts +92 -0
- package/src/components/Tables/common/usePagination.ts +83 -0
- package/src/components/Tables/common/useTableCheckbox.ts +58 -0
- package/src/components/Tables/common/useTableFilter.ts +19 -0
- package/src/components/Tables/common/useTableHeaders.ts +88 -0
- package/src/components/Tables/common/useTableItems.ts +87 -0
- package/src/components/Tables/common/useTableOptions.ts +93 -0
- package/src/components/Tables/index.ts +3 -0
- package/src/components/ToolbarContainer/ToolbarContainer.mdx +16 -0
- package/src/components/ToolbarContainer/ToolbarContainer.stories.ts +675 -0
- package/src/components/ToolbarContainer/ToolbarContainer.vue +128 -0
- package/src/components/ToolbarContainer/tests/ToolbarContainer.spec.ts +156 -0
- package/src/components/UploadWorkflow/AccessibiliteItems.ts +1 -1
- package/src/components/UserMenuBtn/AccessibiliteItems.ts +1 -1
- package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +74 -0
- package/src/components/UserMenuBtn/UserMenuBtn.vue +19 -17
- package/src/components/index.ts +9 -5
- package/src/composables/date/useDateFormatDayjs.ts +8 -3
- package/src/composables/date/useDateInitializationDayjs.ts +28 -36
- package/src/composables/rules/useFieldValidation.ts +1 -2
- package/src/designTokens/index.ts +4 -0
- package/src/designTokens/tokens/cnam/cnamFonts.ts +140 -0
- package/src/designTokens/tokens/pa/paFonts.ts +140 -0
- package/src/designTokens/utils/createFontVariables.ts +143 -0
- package/src/designTokens/utils/index.ts +2 -1
- package/src/stories/Accessibilite/Aculturation/AuditDesignSystem.mdx +293 -20
- package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +448 -54
- package/src/stories/Accessibilite/Audit/RGAA.mdx +231 -23
- package/src/stories/Accessibilite/Avancement/Avancement.mdx +591 -7
- package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +139 -38
- package/src/stories/Accessibilite/Introduction.mdx +258 -18
- package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +221 -31
- package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +204 -22
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +537 -24
- package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +577 -70
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru.mdx +382 -31
- package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +419 -81
- package/src/stories/Accessibilite/Vuetify/Vuetify.mdx +132 -6
- package/src/stories/Accessibilite/Vuetify/Vuetify.stories.ts +370 -146
- package/src/stories/Accessibilite/Vuetify/VuetifyItems.ts +35 -57
- package/src/stories/Demarrer/Accueil.stories.ts +32 -8
- package/src/stories/DesignTokens/StylesTypographiques.mdx +10 -9
- package/src/stories/DesignTokens/StylesTypographiques.stories.new.ts +397 -0
- package/src/stories/DesignTokens/StylesTypographiques.stories.ts +397 -0
- package/src/stories/DesignTokens/TypographyDisplay.vue +155 -0
- package/src/stories/DesignTokens/vue-shims.d.ts +6 -0
- package/src/stories/GuideDuDev/LesBreackingChanges.mdx +0 -2
- package/src/stories/GuideDuDev/MigrationDepuisBridge.mdx +1 -1
- package/src/stories/GuideDuDev/MigrationDepuisVue2.mdx +1 -1
- package/src/stories/GuideDuDev/PortailAgent.mdx +10 -0
- package/src/stories/GuideDuDev/PortailAgent.stories.ts +506 -0
- package/src/stories/GuideDuDev/Theme.mdx +41 -0
- package/src/utils/rules/isHolidayDay/IsHolidayDay.stories.ts +1 -1
- package/src/utils/rules/isRequired/index.ts +2 -1
- package/src/vite-env.d.ts +12 -0
- package/src/vuetifyConfig.ts +10 -3
- package/dist/components/BackToTopBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/ChipList/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/CollapsibleList/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/ContextualMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/CookieBanner/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/CopyBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Customs/SySelect/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Customs/SyTextField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DataList/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DataListGroup/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DatePicker/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DialogBox/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DownloadBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/ErrorPage/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/ExternalLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FileList/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FilePreview/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FileUpload/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FilterInline/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FilterSideBar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FooterBar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FranceConnectBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/HeaderBar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/HeaderLoading/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/HeaderToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/LangBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Logo/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/LogoBrandSection/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/MaintenancePage/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/NirField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/NotFoundPage/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/NotificationBar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PageContainer/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PaginatedTable/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PasswordField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PeriodField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PhoneField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/RangeField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/RatingPicker/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SearchListField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SelectBtnField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SkipLink/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SocialMediaLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SubHeader/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SyAlert/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/TableToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/UploadWorkflow/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/UserMenuBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/src/components/BackBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/BackToTopBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/ChipList/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/CollapsibleList/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/ContextualMenu/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/CookieBanner/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/CopyBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Customs/SySelect/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Customs/SyTextField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DataList/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DataListGroup/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DatePicker/DatePicker.mdx +0 -222
- package/src/components/DatePicker/DateTextInput.vue +0 -504
- package/src/components/DatePicker/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DialogBox/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DownloadBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/ErrorPage/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/ExternalLinks/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FileList/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FilePreview/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FileUpload/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FilterInline/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FilterSideBar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FooterBar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FranceConnectBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/HeaderBar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/HeaderLoading/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/HeaderToolbar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/LangBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Logo/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/LogoBrandSection/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/MaintenancePage/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/NirField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/NotFoundPage/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/NotificationBar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PageContainer/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PaginatedTable/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PaginatedTable/tests/__snapshots__/PaginatedTable.spec.ts.snap +0 -886
- package/src/components/PasswordField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PeriodField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PhoneField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/RangeField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/RatingPicker/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SearchListField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SelectBtnField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SkipLink/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SocialMediaLinks/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SubHeader/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SyAlert/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/TableToolbar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/UserMenuBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/stories/DesignTokens/ThemePA.mdx +0 -35
- /package/src/components/DatePicker/{examples → playground}/DatePickerHolidayRule.vue +0 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
import { ref, computed } from 'vue'
|
|
2
|
+
import dayjs from 'dayjs'
|
|
3
|
+
import customParseFormat from 'dayjs/plugin/customParseFormat'
|
|
4
|
+
|
|
5
|
+
// Initialiser les plugins dayjs
|
|
6
|
+
dayjs.extend(customParseFormat)
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Composable pour gérer la saisie manuelle des plages de dates
|
|
10
|
+
* Permet de saisir et formater correctement une plage de dates au format "date1 - date2"
|
|
11
|
+
*/
|
|
12
|
+
export function useDateRangeInput(
|
|
13
|
+
format: string,
|
|
14
|
+
isRangeMode: boolean,
|
|
15
|
+
parseDate: (dateStr: string, format: string) => Date | null,
|
|
16
|
+
formatDate: (date: Date, format: string) => string,
|
|
17
|
+
) {
|
|
18
|
+
// État pour suivre si nous sommes en train de saisir la première ou la deuxième date
|
|
19
|
+
const isEditingSecondDate = ref(false)
|
|
20
|
+
// Stockage temporaire pour la première date saisie
|
|
21
|
+
const firstDate = ref<Date | null>(null)
|
|
22
|
+
// Stockage temporaire pour la deuxième date saisie
|
|
23
|
+
const secondDate = ref<Date | null>(null)
|
|
24
|
+
// Séparateur de plage
|
|
25
|
+
const rangeSeparator = ' - '
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Vérifie si une chaîne de caractères contient un séparateur de plage
|
|
29
|
+
*/
|
|
30
|
+
const hasRangeSeparator = (value: string): boolean => {
|
|
31
|
+
return value.includes(rangeSeparator)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Extrait les deux parties d'une plage de dates
|
|
36
|
+
*/
|
|
37
|
+
const extractRangeParts = (value: string): [string, string] => {
|
|
38
|
+
const parts = value.split(rangeSeparator)
|
|
39
|
+
return [
|
|
40
|
+
parts[0]?.trim() || '',
|
|
41
|
+
parts[1]?.trim() || '',
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Formate une plage de dates pour l'affichage
|
|
47
|
+
*/
|
|
48
|
+
const formatRangeForDisplay = (startDate: Date | null, endDate: Date | null): string => {
|
|
49
|
+
if (!startDate) return ''
|
|
50
|
+
if (!endDate) return `${formatDate(startDate, format)}${rangeSeparator}`
|
|
51
|
+
return `${formatDate(startDate, format)}${rangeSeparator}${formatDate(endDate, format)}`
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Analyse une chaîne de caractères pour en extraire une plage de dates
|
|
56
|
+
* Retourne un tableau contenant les dates de début et de fin
|
|
57
|
+
*/
|
|
58
|
+
const parseRangeInput = (value: string): [Date | null, Date | null] => {
|
|
59
|
+
if (!value) return [null, null]
|
|
60
|
+
|
|
61
|
+
// Si la valeur contient un séparateur de plage
|
|
62
|
+
if (hasRangeSeparator(value)) {
|
|
63
|
+
const [startStr, endStr] = extractRangeParts(value)
|
|
64
|
+
const startDate = parseDate(startStr, format)
|
|
65
|
+
const endDate = parseDate(endStr, format)
|
|
66
|
+
return [startDate, endDate]
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Si la valeur ne contient pas de séparateur, c'est une seule date
|
|
70
|
+
const singleDate = parseDate(value, format)
|
|
71
|
+
return [singleDate, null]
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Gère la saisie manuelle d'une plage de dates
|
|
76
|
+
* @param inputValue Valeur actuelle du champ de saisie
|
|
77
|
+
* @param newValue Nouvelle valeur saisie
|
|
78
|
+
* @param cursorPosition Position actuelle du curseur (optionnel)
|
|
79
|
+
* @returns Objet contenant les informations sur la plage de dates
|
|
80
|
+
*/
|
|
81
|
+
const handleRangeInput = (inputValue: string | unknown, newValue: string | unknown, cursorPosition?: number): {
|
|
82
|
+
formattedValue: string
|
|
83
|
+
dates: [Date | null, Date | null]
|
|
84
|
+
isComplete: boolean
|
|
85
|
+
justCompletedFirstDate?: boolean
|
|
86
|
+
cursorPosition?: number
|
|
87
|
+
} => {
|
|
88
|
+
// S'assurer que inputValue et newValue sont des chaînes de caractères
|
|
89
|
+
const safeInputValue = typeof inputValue === 'string' ? inputValue : ''
|
|
90
|
+
const safeNewValue = typeof newValue === 'string' ? newValue : ''
|
|
91
|
+
// Si le mode plage n'est pas activé, traiter comme une date unique
|
|
92
|
+
if (!isRangeMode) {
|
|
93
|
+
const date = parseDate(safeNewValue, format)
|
|
94
|
+
return {
|
|
95
|
+
formattedValue: date ? formatDate(date, format) : safeNewValue,
|
|
96
|
+
dates: [date, null],
|
|
97
|
+
isComplete: !!date,
|
|
98
|
+
cursorPosition: cursorPosition,
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Cas spécial : si la valeur précédente se terminait par un séparateur et que la nouvelle valeur
|
|
103
|
+
// contient du texte après le séparateur, c'est qu'on commence à saisir la seconde date
|
|
104
|
+
if (safeInputValue && safeInputValue.endsWith(rangeSeparator)
|
|
105
|
+
&& safeNewValue.startsWith(safeInputValue)
|
|
106
|
+
&& safeNewValue.length > safeInputValue.length) {
|
|
107
|
+
// On est en train de saisir la seconde date pour la première fois
|
|
108
|
+
isEditingSecondDate.value = true
|
|
109
|
+
|
|
110
|
+
// Extraire la première date et le nouveau caractère saisi
|
|
111
|
+
const firstPart = safeInputValue.substring(0, safeInputValue.length - rangeSeparator.length)
|
|
112
|
+
const firstDateObj = parseDate(firstPart, format)
|
|
113
|
+
firstDate.value = firstDateObj
|
|
114
|
+
|
|
115
|
+
// Extraire le caractère nouvellement saisi (après le séparateur)
|
|
116
|
+
const secondPart = safeNewValue.substring(safeInputValue.length)
|
|
117
|
+
secondDate.value = parseDate(secondPart, format)
|
|
118
|
+
|
|
119
|
+
return {
|
|
120
|
+
formattedValue: `${firstPart}${rangeSeparator}${secondPart}`,
|
|
121
|
+
dates: [firstDateObj, secondDate.value],
|
|
122
|
+
isComplete: false,
|
|
123
|
+
cursorPosition: safeNewValue.length,
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Si la valeur contient déjà un séparateur de plage
|
|
128
|
+
if (hasRangeSeparator(safeNewValue)) {
|
|
129
|
+
const [startStr, endStr] = extractRangeParts(safeNewValue)
|
|
130
|
+
const startDate = parseDate(startStr, format)
|
|
131
|
+
const endDate = parseDate(endStr, format)
|
|
132
|
+
|
|
133
|
+
// Mettre à jour les dates temporaires
|
|
134
|
+
firstDate.value = startDate
|
|
135
|
+
secondDate.value = endDate
|
|
136
|
+
|
|
137
|
+
// Déterminer si nous sommes en train d'éditer la deuxième date
|
|
138
|
+
isEditingSecondDate.value = !!startDate && startStr.length >= format.length
|
|
139
|
+
|
|
140
|
+
// Formater correctement la valeur
|
|
141
|
+
const formattedStart = startDate ? formatDate(startDate, format) : startStr
|
|
142
|
+
const formattedValue = `${formattedStart}${rangeSeparator}${endStr}`
|
|
143
|
+
|
|
144
|
+
// Calculer la nouvelle position du curseur en fonction de la position actuelle
|
|
145
|
+
let newCursorPosition = cursorPosition
|
|
146
|
+
|
|
147
|
+
// Si la position du curseur est dans la première partie de la date
|
|
148
|
+
if (cursorPosition !== undefined) {
|
|
149
|
+
const separatorPos = safeInputValue.indexOf(rangeSeparator)
|
|
150
|
+
if (separatorPos !== -1 && cursorPosition <= separatorPos) {
|
|
151
|
+
// Ajuster la position si la première partie a été formatée
|
|
152
|
+
if (startStr !== formattedStart) {
|
|
153
|
+
// Conserver la position relative dans la première partie
|
|
154
|
+
const relativePos = Math.min(cursorPosition, startStr.length)
|
|
155
|
+
newCursorPosition = Math.min(relativePos, formattedStart.length)
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else if (separatorPos !== -1) {
|
|
159
|
+
// Le curseur est dans la seconde partie
|
|
160
|
+
// Conserver la position relative après le séparateur
|
|
161
|
+
const posAfterSeparator = cursorPosition - (separatorPos + rangeSeparator.length)
|
|
162
|
+
newCursorPosition = formattedStart.length + rangeSeparator.length + Math.min(posAfterSeparator, endStr.length)
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return {
|
|
167
|
+
formattedValue,
|
|
168
|
+
dates: [startDate, endDate],
|
|
169
|
+
isComplete: !!startDate && !!endDate,
|
|
170
|
+
cursorPosition: newCursorPosition,
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Si nous sommes déjà en train d'éditer la deuxième date
|
|
175
|
+
// (ce cas ne devrait pas arriver souvent car la valeur devrait contenir un séparateur)
|
|
176
|
+
if (isEditingSecondDate.value && firstDate.value) {
|
|
177
|
+
// Formater la valeur pour afficher la première date + séparateur + nouvelle valeur
|
|
178
|
+
const formattedValue = `${formatDate(firstDate.value, format)}${rangeSeparator}${typeof newValue === 'string' ? newValue : ''}`
|
|
179
|
+
const secondDateParsed = parseDate(typeof newValue === 'string' ? newValue : '', format)
|
|
180
|
+
secondDate.value = secondDateParsed
|
|
181
|
+
|
|
182
|
+
return {
|
|
183
|
+
formattedValue,
|
|
184
|
+
dates: [firstDate.value, secondDateParsed],
|
|
185
|
+
isComplete: !!firstDate.value && !!secondDateParsed,
|
|
186
|
+
cursorPosition: cursorPosition !== undefined ? formatDate(firstDate.value, format).length + rangeSeparator.length + Math.min(cursorPosition, typeof newValue === 'string' ? newValue.length : 0) : undefined,
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Si nous éditons la première date
|
|
191
|
+
const date = parseDate(typeof newValue === 'string' ? newValue : '', format)
|
|
192
|
+
firstDate.value = date
|
|
193
|
+
|
|
194
|
+
// Si la première date est complète, passer à la saisie de la deuxième date
|
|
195
|
+
if (date && typeof newValue === 'string' && newValue.length >= format.length) {
|
|
196
|
+
isEditingSecondDate.value = true
|
|
197
|
+
const formattedDate = formatDate(date, format)
|
|
198
|
+
|
|
199
|
+
return {
|
|
200
|
+
formattedValue: `${formattedDate}${rangeSeparator}`,
|
|
201
|
+
dates: [date, null],
|
|
202
|
+
isComplete: false,
|
|
203
|
+
justCompletedFirstDate: true,
|
|
204
|
+
cursorPosition: formattedDate.length + rangeSeparator.length,
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return {
|
|
209
|
+
formattedValue: safeNewValue,
|
|
210
|
+
dates: [date, null],
|
|
211
|
+
isComplete: false,
|
|
212
|
+
cursorPosition: cursorPosition,
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Initialise l'état du composable avec des valeurs existantes
|
|
218
|
+
*/
|
|
219
|
+
const initializeWithDates = (startDate: Date | null, endDate: Date | null) => {
|
|
220
|
+
firstDate.value = startDate
|
|
221
|
+
secondDate.value = endDate
|
|
222
|
+
isEditingSecondDate.value = !!startDate && !!endDate
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Réinitialise l'état du composable
|
|
227
|
+
*/
|
|
228
|
+
const resetState = () => {
|
|
229
|
+
firstDate.value = null
|
|
230
|
+
secondDate.value = null
|
|
231
|
+
isEditingSecondDate.value = false
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Vérifie si une plage de dates est valide (la date de début est antérieure à la date de fin)
|
|
236
|
+
*/
|
|
237
|
+
const isValidRange = (startDate: Date | null, endDate: Date | null): boolean => {
|
|
238
|
+
if (!startDate || !endDate) return true
|
|
239
|
+
return startDate.getTime() <= endDate.getTime()
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Vérifie si la plage actuelle est valide
|
|
244
|
+
*/
|
|
245
|
+
const currentRangeIsValid = computed(() => {
|
|
246
|
+
return isValidRange(firstDate.value, secondDate.value)
|
|
247
|
+
})
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Gère l'événement keydown pour filtrer les caractères non numériques
|
|
251
|
+
*
|
|
252
|
+
* @param event - Événement keydown
|
|
253
|
+
*/
|
|
254
|
+
const handleKeydown = (event: KeyboardEvent & { target: HTMLInputElement }): void => {
|
|
255
|
+
// Bloquer la saisie de caractères non numériques
|
|
256
|
+
// Autoriser uniquement : chiffres, touches de navigation, touches de modification et touches de contrôle
|
|
257
|
+
if (
|
|
258
|
+
// Si la touche n'est pas un chiffre
|
|
259
|
+
!/^\d$/.test(event.key)
|
|
260
|
+
// Et n'est pas une touche spéciale autorisée
|
|
261
|
+
&& ![
|
|
262
|
+
'Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',
|
|
263
|
+
'Home', 'End', 'Tab', 'Escape', 'Enter',
|
|
264
|
+
'Control', 'Alt', 'Shift', 'Meta',
|
|
265
|
+
].includes(event.key)
|
|
266
|
+
// Et n'est pas une combinaison de touches (Ctrl+A, Ctrl+C, Ctrl+V, etc.)
|
|
267
|
+
&& !(event.ctrlKey || event.metaKey)
|
|
268
|
+
) {
|
|
269
|
+
// Empêcher la saisie de caractères non numériques
|
|
270
|
+
event.preventDefault()
|
|
271
|
+
return
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// Gérer les touches spéciales pour le mode plage
|
|
275
|
+
if (isRangeMode) {
|
|
276
|
+
// Gérer la suppression des séparateurs de plage
|
|
277
|
+
if (event.key === 'Backspace') {
|
|
278
|
+
const input = event.target
|
|
279
|
+
if (!input.selectionStart || input.selectionStart !== input.selectionEnd) {
|
|
280
|
+
return
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
const cursorPos = input.selectionStart
|
|
284
|
+
|
|
285
|
+
// Si on est juste après un séparateur de plage
|
|
286
|
+
if (cursorPos >= rangeSeparator.length
|
|
287
|
+
&& input.value.substring(cursorPos - rangeSeparator.length, cursorPos) === rangeSeparator) {
|
|
288
|
+
// Empêcher le comportement par défaut
|
|
289
|
+
event.preventDefault()
|
|
290
|
+
|
|
291
|
+
// Supprimer le séparateur complet
|
|
292
|
+
const newValue = input.value.substring(0, cursorPos - rangeSeparator.length)
|
|
293
|
+
+ input.value.substring(cursorPos)
|
|
294
|
+
|
|
295
|
+
// Mettre à jour la valeur (via l'événement input)
|
|
296
|
+
const inputEvent = new InputEvent('input', { bubbles: true, cancelable: true, data: newValue })
|
|
297
|
+
Object.defineProperty(inputEvent, 'target', { value: input, enumerable: true })
|
|
298
|
+
input.value = newValue
|
|
299
|
+
input.dispatchEvent(inputEvent)
|
|
300
|
+
|
|
301
|
+
// Positionner le curseur
|
|
302
|
+
setTimeout(() => {
|
|
303
|
+
const newCursorPos = cursorPos - rangeSeparator.length
|
|
304
|
+
input.setSelectionRange(newCursorPos, newCursorPos)
|
|
305
|
+
}, 0)
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Gère l'événement paste pour filtrer les caractères non numériques
|
|
313
|
+
*
|
|
314
|
+
* @param event - Événement paste
|
|
315
|
+
*/
|
|
316
|
+
const handlePaste = (event: ClipboardEvent): void => {
|
|
317
|
+
// Récupérer le contenu du presse-papiers
|
|
318
|
+
const clipboardData = event.clipboardData
|
|
319
|
+
if (!clipboardData) return
|
|
320
|
+
|
|
321
|
+
// Extraire le texte
|
|
322
|
+
const pastedText = clipboardData.getData('text')
|
|
323
|
+
|
|
324
|
+
// Filtrer pour ne garder que les chiffres
|
|
325
|
+
const cleanedText = pastedText.replace(/[^0-9]/g, '')
|
|
326
|
+
|
|
327
|
+
// Si le texte collé ne contient pas de chiffres, annuler l'opération
|
|
328
|
+
if (cleanedText.length === 0) {
|
|
329
|
+
event.preventDefault()
|
|
330
|
+
return
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// Si le texte a été modifié (des caractères non numériques ont été supprimés)
|
|
334
|
+
if (cleanedText !== pastedText) {
|
|
335
|
+
event.preventDefault()
|
|
336
|
+
|
|
337
|
+
// Insérer manuellement le texte nettoyé
|
|
338
|
+
const input = event.target as HTMLInputElement
|
|
339
|
+
if (!input) return
|
|
340
|
+
|
|
341
|
+
const start = input.selectionStart || 0
|
|
342
|
+
const end = input.selectionEnd || 0
|
|
343
|
+
|
|
344
|
+
// Construire la nouvelle valeur
|
|
345
|
+
const newValue = input.value.substring(0, start) + cleanedText + input.value.substring(end)
|
|
346
|
+
|
|
347
|
+
// Mettre à jour la valeur (via l'événement input)
|
|
348
|
+
const inputEvent = new InputEvent('input', { bubbles: true, cancelable: true, data: newValue })
|
|
349
|
+
Object.defineProperty(inputEvent, 'target', { value: input, enumerable: true })
|
|
350
|
+
input.value = newValue
|
|
351
|
+
input.dispatchEvent(inputEvent)
|
|
352
|
+
|
|
353
|
+
// Positionner le curseur après le texte collé
|
|
354
|
+
setTimeout(() => {
|
|
355
|
+
const newCursorPos = start + cleanedText.length
|
|
356
|
+
input.setSelectionRange(newCursorPos, newCursorPos)
|
|
357
|
+
}, 0)
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
return {
|
|
362
|
+
isEditingSecondDate,
|
|
363
|
+
firstDate,
|
|
364
|
+
secondDate,
|
|
365
|
+
rangeSeparator,
|
|
366
|
+
hasRangeSeparator,
|
|
367
|
+
extractRangeParts,
|
|
368
|
+
formatRangeForDisplay,
|
|
369
|
+
parseRangeInput,
|
|
370
|
+
handleRangeInput,
|
|
371
|
+
initializeWithDates,
|
|
372
|
+
resetState,
|
|
373
|
+
isValidRange,
|
|
374
|
+
currentRangeIsValid,
|
|
375
|
+
handleKeydown,
|
|
376
|
+
handlePaste,
|
|
377
|
+
}
|
|
378
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { computed, type Ref } from 'vue'
|
|
2
|
+
import type { DateObjectValue } from '../types'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Composable pour gérer la validation des plages de dates
|
|
6
|
+
* Permet de vérifier si une plage de dates est valide (date de début avant date de fin)
|
|
7
|
+
*/
|
|
8
|
+
export function useDateRangeValidation(
|
|
9
|
+
selectedDates: Ref<DateObjectValue>,
|
|
10
|
+
displayRange: boolean,
|
|
11
|
+
) {
|
|
12
|
+
/**
|
|
13
|
+
* Vérifie si une plage de dates est valide (date de début avant date de fin)
|
|
14
|
+
*/
|
|
15
|
+
const isRangeValid = (startDate: Date | null, endDate: Date | null): boolean => {
|
|
16
|
+
if (!startDate || !endDate) return true // Si une des dates est manquante, considérer comme valide
|
|
17
|
+
return startDate.getTime() <= endDate.getTime()
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Variable réactive pour suivre la validité de la plage de dates actuelle
|
|
22
|
+
*/
|
|
23
|
+
const currentRangeIsValid = computed(() => {
|
|
24
|
+
if (!displayRange || !selectedDates.value) return true
|
|
25
|
+
if (!Array.isArray(selectedDates.value)) return true
|
|
26
|
+
if (selectedDates.value.length < 2) return true
|
|
27
|
+
|
|
28
|
+
const [startDate, endDate] = selectedDates.value.length >= 2
|
|
29
|
+
? [selectedDates.value[0], selectedDates.value[selectedDates.value.length - 1]]
|
|
30
|
+
: [null, null]
|
|
31
|
+
|
|
32
|
+
return isRangeValid(startDate, endDate)
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Fonction pour obtenir un message d'erreur si la plage n'est pas valide
|
|
37
|
+
*/
|
|
38
|
+
const getRangeValidationError = computed((): string => {
|
|
39
|
+
if (currentRangeIsValid.value) return ''
|
|
40
|
+
return 'La date de fin doit être postérieure ou égale à la date de début'
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
isRangeValid,
|
|
45
|
+
currentRangeIsValid,
|
|
46
|
+
getRangeValidationError,
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { ref } from 'vue'
|
|
2
|
+
import type { Ref } from 'vue'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Composable pour gérer la sélection de dates dans les composants DatePicker
|
|
6
|
+
* Gère les plages de dates et la génération des dates intermédiaires
|
|
7
|
+
*/
|
|
8
|
+
export function useDateSelection(
|
|
9
|
+
parseDate: (dateStr: string, format: string) => Date | null,
|
|
10
|
+
selectedDates: Ref<Date | (Date | null)[] | null>,
|
|
11
|
+
format: string,
|
|
12
|
+
displayRange: boolean,
|
|
13
|
+
) {
|
|
14
|
+
// Stockage des dates de début et de fin pour les plages
|
|
15
|
+
const rangeBoundaryDates = ref<[Date | null, Date | null] | null>(null)
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Génère toutes les dates entre deux dates (incluses)
|
|
19
|
+
*/
|
|
20
|
+
const generateDateRange = (start: Date, end: Date): Date[] => {
|
|
21
|
+
const dateArray: Date[] = []
|
|
22
|
+
const currentDate = new Date(start)
|
|
23
|
+
|
|
24
|
+
// Ajouter la date de début
|
|
25
|
+
dateArray.push(new Date(currentDate))
|
|
26
|
+
|
|
27
|
+
// Ajouter toutes les dates intermédiaires jusqu'à la date de fin
|
|
28
|
+
while (currentDate < end) {
|
|
29
|
+
currentDate.setDate(currentDate.getDate() + 1)
|
|
30
|
+
dateArray.push(new Date(currentDate))
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return dateArray
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Met à jour les dates sélectionnées en fonction de l'entrée
|
|
38
|
+
*/
|
|
39
|
+
const updateSelectedDates = (input: Date | Date[] | string | string[] | null | undefined) => {
|
|
40
|
+
// Cas 0: Input est null ou undefined (suppression de la sélection)
|
|
41
|
+
if (input === null || input === undefined) {
|
|
42
|
+
selectedDates.value = null
|
|
43
|
+
rangeBoundaryDates.value = null
|
|
44
|
+
return
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Cas 1: Input est un tableau de dates ou de chaînes (sélection depuis le calendrier)
|
|
48
|
+
if (Array.isArray(input)) {
|
|
49
|
+
const dates = input
|
|
50
|
+
.map((item) => {
|
|
51
|
+
if (item instanceof Date) return item
|
|
52
|
+
return item ? parseDate(item, format) : null
|
|
53
|
+
})
|
|
54
|
+
.filter((date): date is Date => date !== null)
|
|
55
|
+
|
|
56
|
+
if (dates.length === 0) {
|
|
57
|
+
selectedDates.value = null
|
|
58
|
+
rangeBoundaryDates.value = null
|
|
59
|
+
return
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (displayRange && dates.length >= 2) {
|
|
63
|
+
// Trier les dates pour s'assurer que nous avons la première et la dernière
|
|
64
|
+
dates.sort((a, b) => a.getTime() - b.getTime())
|
|
65
|
+
|
|
66
|
+
// Récupérer les dates de début et de fin
|
|
67
|
+
const startDate = dates[0]
|
|
68
|
+
const endDate = dates[dates.length - 1]
|
|
69
|
+
|
|
70
|
+
// Stocker les dates de début et de fin pour la plage, même si la plage est invalide
|
|
71
|
+
rangeBoundaryDates.value = [startDate, endDate]
|
|
72
|
+
|
|
73
|
+
// Pour l'affichage dans le calendrier, générer les dates intermédiaires si la plage est valide
|
|
74
|
+
if (startDate && endDate && startDate.getTime() <= endDate.getTime()) {
|
|
75
|
+
const allDates = generateDateRange(startDate, endDate)
|
|
76
|
+
selectedDates.value = allDates
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Même si la plage est invalide, conserver les deux dates pour l'affichage
|
|
80
|
+
// Cela permettra à l'utilisateur de voir et corriger la plage invalide
|
|
81
|
+
selectedDates.value = [startDate, endDate]
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
selectedDates.value = dates
|
|
86
|
+
rangeBoundaryDates.value = null
|
|
87
|
+
}
|
|
88
|
+
return
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Cas 2: Input est une chaîne de caractères (saisie manuelle)
|
|
92
|
+
if (!displayRange) {
|
|
93
|
+
// Mode date unique
|
|
94
|
+
const date = input && typeof input === 'string' ? parseDate(input, format) : null
|
|
95
|
+
selectedDates.value = date === null ? null : date
|
|
96
|
+
rangeBoundaryDates.value = null
|
|
97
|
+
}
|
|
98
|
+
else if (typeof input === 'string') {
|
|
99
|
+
// Mode plage de dates
|
|
100
|
+
const dates = input.split(' - ')
|
|
101
|
+
if (dates.length === 2) {
|
|
102
|
+
const startDate = parseDate(dates[0], format)
|
|
103
|
+
const endDate = parseDate(dates[1], format)
|
|
104
|
+
if (startDate && endDate) {
|
|
105
|
+
// Stocker les dates de début et de fin pour la plage
|
|
106
|
+
rangeBoundaryDates.value = [startDate, endDate]
|
|
107
|
+
|
|
108
|
+
// Générer toutes les dates intermédiaires pour l'affichage dans le calendrier
|
|
109
|
+
const allDates = generateDateRange(startDate, endDate)
|
|
110
|
+
selectedDates.value = allDates
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
updateSelectedDates,
|
|
118
|
+
rangeBoundaryDates,
|
|
119
|
+
generateDateRange,
|
|
120
|
+
}
|
|
121
|
+
}
|