@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,95 @@
|
|
|
1
|
+
import { computed, type Ref } from 'vue'
|
|
2
|
+
import dayjs from 'dayjs'
|
|
3
|
+
import customParseFormat from 'dayjs/plugin/customParseFormat'
|
|
4
|
+
import { DATE_PICKER_MESSAGES } from '../constants/messages'
|
|
5
|
+
|
|
6
|
+
// Initialiser le plugin dayjs nécessaire pour la validation des formats de date
|
|
7
|
+
dayjs.extend(customParseFormat)
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Composable pour la validation du format des dates
|
|
11
|
+
*
|
|
12
|
+
* @param options - Options de configuration
|
|
13
|
+
* @param options.format - Format d'affichage de la date (ex: 'DD/MM/YYYY')
|
|
14
|
+
* @param options.dateFormatReturn - Format de retour de la date (optionnel)
|
|
15
|
+
* @param options.required - Indique si le champ est requis
|
|
16
|
+
* @param options.hasInteracted - Ref indiquant si l'utilisateur a interagi avec le champ
|
|
17
|
+
* @param options.disableErrorHandling - Désactive la gestion des erreurs
|
|
18
|
+
* @returns Fonctions et propriétés pour la validation du format des dates
|
|
19
|
+
*/
|
|
20
|
+
export const useDateFormatValidation = (options: {
|
|
21
|
+
format: string
|
|
22
|
+
dateFormatReturn?: string
|
|
23
|
+
required?: boolean
|
|
24
|
+
hasInteracted: Ref<boolean>
|
|
25
|
+
disableErrorHandling?: boolean
|
|
26
|
+
}) => {
|
|
27
|
+
const { format, dateFormatReturn, required = false, hasInteracted, disableErrorHandling = false } = options
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Valide le format d'une chaîne de date
|
|
31
|
+
*
|
|
32
|
+
* @param dateStr - Chaîne de date à valider
|
|
33
|
+
* @returns Objet contenant l'état de validité et un message d'erreur éventuel
|
|
34
|
+
*/
|
|
35
|
+
const validateDateFormat = (dateStr: string): { isValid: boolean, message: string } => {
|
|
36
|
+
if (!dateStr) {
|
|
37
|
+
return {
|
|
38
|
+
isValid: !required || !hasInteracted.value || disableErrorHandling,
|
|
39
|
+
message: (required && hasInteracted.value && !disableErrorHandling) ? DATE_PICKER_MESSAGES.ERROR_REQUIRED : '',
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (!/^[\d/.-]*$/.test(dateStr)) {
|
|
44
|
+
return {
|
|
45
|
+
isValid: disableErrorHandling,
|
|
46
|
+
message: disableErrorHandling ? '' : `Format de date invalide (${format})`,
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const isValid = dayjs(dateStr, format, true).isValid()
|
|
51
|
+
|| (dateFormatReturn ? dayjs(dateStr, dateFormatReturn, true).isValid() : false)
|
|
52
|
+
|
|
53
|
+
if (!isValid) {
|
|
54
|
+
return {
|
|
55
|
+
isValid: disableErrorHandling,
|
|
56
|
+
message: disableErrorHandling ? '' : `Format de date invalide (${format})`,
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return { isValid: true, message: '' }
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Vérifie si une chaîne de date est complète selon le format spécifié
|
|
65
|
+
* en comptant le nombre de chiffres attendus et saisis, et en vérifiant la validité de la date
|
|
66
|
+
*
|
|
67
|
+
* @param dateStr - Chaîne de date à vérifier
|
|
68
|
+
* @returns Booléen indiquant si la date est complète
|
|
69
|
+
*/
|
|
70
|
+
const isDateCompleteFunc = (dateStr: string): boolean => {
|
|
71
|
+
if (!dateStr) return false
|
|
72
|
+
|
|
73
|
+
// Compter le nombre de chiffres attendus en fonction du format
|
|
74
|
+
const expectedDigits = format.replace(/[^DMY]/g, '').length
|
|
75
|
+
|
|
76
|
+
// Compter le nombre de chiffres saisis
|
|
77
|
+
const actualDigits = dateStr.replace(/[^\d]/g, '').length
|
|
78
|
+
|
|
79
|
+
// Vérifier si la date est complète en termes de nombre de chiffres
|
|
80
|
+
const hasAllDigits = actualDigits === expectedDigits
|
|
81
|
+
|
|
82
|
+
// Vérifier si la date est valide selon le format spécifié
|
|
83
|
+
const isValid = hasAllDigits
|
|
84
|
+
|
|
85
|
+
return isValid
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Créer une version réactive de la fonction isDateComplete
|
|
89
|
+
const isDateComplete = computed(() => (dateStr: string) => isDateCompleteFunc(dateStr))
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
validateDateFormat,
|
|
93
|
+
isDateComplete,
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
// Pas besoin d'importer Ref car il n'est pas utilisé
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Options pour le composable useDateInputEditing
|
|
5
|
+
*/
|
|
6
|
+
export interface DateInputEditingOptions {
|
|
7
|
+
// Format de date (ex: 'DD/MM/YYYY')
|
|
8
|
+
format: string
|
|
9
|
+
// Fonction pour mettre à jour la valeur d'affichage
|
|
10
|
+
updateDisplayValue: (value: string) => void
|
|
11
|
+
// Fonction pour mettre à jour l'attribut aria-label (pour l'accessibilité)
|
|
12
|
+
updateAriaLabel?: (value: string) => void
|
|
13
|
+
// Caractère à utiliser pour les positions non remplies (défaut: '_')
|
|
14
|
+
placeholderChar?: string
|
|
15
|
+
// Si true, utilise des caractères invisibles pour les lecteurs d'écran
|
|
16
|
+
accessiblePlaceholders?: boolean
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Résultat du formatage d'une date
|
|
21
|
+
*/
|
|
22
|
+
export interface FormatDateInputResult {
|
|
23
|
+
// Valeur formatée
|
|
24
|
+
formatted: string
|
|
25
|
+
// Position du curseur après formatage
|
|
26
|
+
cursorPos: number
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Composable pour gérer l'édition manuelle des dates
|
|
31
|
+
* Ce composable fournit des fonctions pour formater les dates pendant la saisie
|
|
32
|
+
* et gérer les touches spéciales comme Backspace et les flèches
|
|
33
|
+
*
|
|
34
|
+
* @param options - Options de configuration
|
|
35
|
+
* @returns Fonctions pour gérer l'édition manuelle des dates
|
|
36
|
+
*/
|
|
37
|
+
export const useDateInputEditing = (options: DateInputEditingOptions) => {
|
|
38
|
+
const {
|
|
39
|
+
format,
|
|
40
|
+
updateDisplayValue,
|
|
41
|
+
updateAriaLabel,
|
|
42
|
+
placeholderChar = '_',
|
|
43
|
+
accessiblePlaceholders = true,
|
|
44
|
+
} = options
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Formate une entrée de date en ajoutant les séparateurs appropriés
|
|
48
|
+
*
|
|
49
|
+
* @param input - Chaîne de caractères saisie
|
|
50
|
+
* @param cursorPosition - Position actuelle du curseur
|
|
51
|
+
* @returns Objet contenant la chaîne formatée et la nouvelle position du curseur
|
|
52
|
+
*/
|
|
53
|
+
const formatDateInput = (input: string, cursorPosition?: number): FormatDateInputResult => {
|
|
54
|
+
// Nettoyer l'entrée pour ne garder que les chiffres
|
|
55
|
+
let cleanedInput = input.replace(/[^\d]/g, '')
|
|
56
|
+
|
|
57
|
+
// Déterminer le séparateur utilisé dans le format
|
|
58
|
+
const separator = format.match(/[^DMY]/)?.[0] || '/'
|
|
59
|
+
|
|
60
|
+
// Calculer la position du curseur dans l'entrée nettoyée (sans séparateurs)
|
|
61
|
+
const inputBeforeCursor = input.substring(0, cursorPosition || 0)
|
|
62
|
+
const digitsBeforeCursor = inputBeforeCursor.replace(/[^\d]/g, '').length
|
|
63
|
+
|
|
64
|
+
// Extraire les groupes de chiffres du format (DD, MM, YYYY)
|
|
65
|
+
const digitGroups: string[] = []
|
|
66
|
+
let currentGroup = ''
|
|
67
|
+
|
|
68
|
+
for (const char of format) {
|
|
69
|
+
if (['D', 'M', 'Y'].includes(char.toUpperCase())) {
|
|
70
|
+
currentGroup += char
|
|
71
|
+
}
|
|
72
|
+
else if (currentGroup) {
|
|
73
|
+
digitGroups.push(currentGroup)
|
|
74
|
+
currentGroup = ''
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Ajouter le dernier groupe s'il existe
|
|
79
|
+
if (currentGroup) {
|
|
80
|
+
digitGroups.push(currentGroup)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Calculer le nombre total de chiffres attendus dans le format
|
|
84
|
+
const expectedDigits = format.replace(/[^DMY]/g, '').length
|
|
85
|
+
|
|
86
|
+
// Limiter le nombre de chiffres saisis au nombre attendu
|
|
87
|
+
if (cleanedInput.length > expectedDigits) {
|
|
88
|
+
cleanedInput = cleanedInput.substring(0, expectedDigits)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Construire la chaîne formatée
|
|
92
|
+
let result = ''
|
|
93
|
+
let digitIndex = 0
|
|
94
|
+
|
|
95
|
+
// Parcourir les groupes de chiffres pour construire la date formatée
|
|
96
|
+
for (let groupIndex = 0; groupIndex < digitGroups.length; groupIndex++) {
|
|
97
|
+
const group = digitGroups[groupIndex]
|
|
98
|
+
const groupLength = group.length
|
|
99
|
+
|
|
100
|
+
// Ajouter les chiffres pour ce groupe
|
|
101
|
+
for (let j = 0; j < groupLength; j++) {
|
|
102
|
+
if (digitIndex < cleanedInput.length) {
|
|
103
|
+
result += cleanedInput[digitIndex]
|
|
104
|
+
digitIndex++
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// Utiliser le caractère de placeholder configuré pour les positions non remplies
|
|
108
|
+
result += placeholderChar
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Ajouter le séparateur après chaque groupe sauf le dernier
|
|
113
|
+
if (groupIndex < digitGroups.length - 1) {
|
|
114
|
+
result += separator
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Calculer la nouvelle position du curseur
|
|
119
|
+
let newCursorPos = 0
|
|
120
|
+
let digitCount = 0
|
|
121
|
+
|
|
122
|
+
// Parcourir le résultat formaté pour trouver la position du curseur
|
|
123
|
+
for (let i = 0; i < result.length && digitCount < digitsBeforeCursor; i++) {
|
|
124
|
+
newCursorPos++
|
|
125
|
+
if (/\d/.test(result[i])) {
|
|
126
|
+
digitCount++
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return {
|
|
131
|
+
formatted: result,
|
|
132
|
+
cursorPos: Math.min(newCursorPos, result.length),
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Gère l'événement keydown pour les touches spéciales
|
|
138
|
+
*
|
|
139
|
+
* @param event - Événement keydown
|
|
140
|
+
*/
|
|
141
|
+
const handleKeydown = (event: KeyboardEvent & { target: HTMLInputElement }): void => {
|
|
142
|
+
// Bloquer la saisie de caractères non numériques
|
|
143
|
+
// Autoriser uniquement : chiffres, touches de navigation, touches de modification et touches de contrôle
|
|
144
|
+
if (
|
|
145
|
+
// Si la touche n'est pas un chiffre
|
|
146
|
+
!/^\d$/.test(event.key)
|
|
147
|
+
// Et n'est pas une touche spéciale autorisée
|
|
148
|
+
&& ![
|
|
149
|
+
'Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',
|
|
150
|
+
'Home', 'End', 'Tab', 'Escape', 'Enter',
|
|
151
|
+
'Control', 'Alt', 'Shift', 'Meta',
|
|
152
|
+
].includes(event.key)
|
|
153
|
+
// Et n'est pas une combinaison de touches (Ctrl+A, Ctrl+C, Ctrl+V, etc.)
|
|
154
|
+
&& !(event.ctrlKey || event.metaKey)
|
|
155
|
+
) {
|
|
156
|
+
// Empêcher la saisie de caractères non numériques
|
|
157
|
+
event.preventDefault()
|
|
158
|
+
return
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Gérer la suppression des séparateurs
|
|
162
|
+
if (event.key === 'Backspace') {
|
|
163
|
+
const input = event.target
|
|
164
|
+
if (!input.selectionStart || input.selectionStart !== input.selectionEnd) {
|
|
165
|
+
return
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const cursorPos = input.selectionStart
|
|
169
|
+
const charBeforeCursor = input.value[cursorPos - 1]
|
|
170
|
+
|
|
171
|
+
if (!/\d/.test(charBeforeCursor)) {
|
|
172
|
+
// Si le caractère avant le curseur n'est pas un chiffre, on le supprime aussi
|
|
173
|
+
// et on supprime le chiffre avant le séparateur
|
|
174
|
+
event.preventDefault() // Empêcher le comportement par défaut
|
|
175
|
+
|
|
176
|
+
const newValue = input.value.substring(0, cursorPos - 2)
|
|
177
|
+
+ input.value.substring(cursorPos)
|
|
178
|
+
|
|
179
|
+
// Mettre à jour la valeur
|
|
180
|
+
updateDisplayValue(newValue)
|
|
181
|
+
|
|
182
|
+
// Positionner le curseur après un court délai
|
|
183
|
+
setTimeout(() => {
|
|
184
|
+
const newCursorPos = cursorPos - 2
|
|
185
|
+
input.setSelectionRange(newCursorPos, newCursorPos)
|
|
186
|
+
}, 0)
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Gérer les touches de direction pour éviter de se retrouver entre un séparateur et un chiffre
|
|
191
|
+
if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
|
|
192
|
+
const input = event.target
|
|
193
|
+
const cursorPos = input.selectionStart || 0
|
|
194
|
+
|
|
195
|
+
// Déterminer le séparateur utilisé dans le format
|
|
196
|
+
const separator = format.match(/[^DMY]/)?.[0] || '/'
|
|
197
|
+
|
|
198
|
+
if (event.key === 'ArrowLeft' && cursorPos > 0) {
|
|
199
|
+
const charBeforeCursor = input.value[cursorPos - 1]
|
|
200
|
+
|
|
201
|
+
if (charBeforeCursor === separator) {
|
|
202
|
+
// Si on se déplace à gauche et qu'on rencontre un séparateur, sauter par-dessus
|
|
203
|
+
event.preventDefault()
|
|
204
|
+
input.setSelectionRange(cursorPos - 2, cursorPos - 2)
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
else if (event.key === 'ArrowRight' && cursorPos < input.value.length) {
|
|
208
|
+
const charAtCursor = input.value[cursorPos]
|
|
209
|
+
|
|
210
|
+
if (charAtCursor === separator) {
|
|
211
|
+
// Si on se déplace à droite et qu'on rencontre un séparateur, sauter par-dessus
|
|
212
|
+
event.preventDefault()
|
|
213
|
+
input.setSelectionRange(cursorPos + 2, cursorPos + 2)
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Gère l'événement paste pour formater correctement les dates collées
|
|
221
|
+
*
|
|
222
|
+
* @param event - Événement paste
|
|
223
|
+
*/
|
|
224
|
+
const handlePaste = (event: ClipboardEvent): void => {
|
|
225
|
+
if (!event.clipboardData) return
|
|
226
|
+
|
|
227
|
+
const pastedText = event.clipboardData.getData('text')
|
|
228
|
+
if (!pastedText) return
|
|
229
|
+
|
|
230
|
+
// Empêcher le comportement par défaut
|
|
231
|
+
event.preventDefault()
|
|
232
|
+
|
|
233
|
+
// Récupérer l'élément input
|
|
234
|
+
const input = event.target as HTMLInputElement
|
|
235
|
+
const cursorPos = input.selectionStart || 0
|
|
236
|
+
|
|
237
|
+
// Récupérer la valeur actuelle
|
|
238
|
+
const currentValue = input.value
|
|
239
|
+
|
|
240
|
+
// Insérer le texte collé à la position du curseur
|
|
241
|
+
const newValue = currentValue.substring(0, cursorPos)
|
|
242
|
+
+ pastedText
|
|
243
|
+
+ currentValue.substring(input.selectionEnd || cursorPos)
|
|
244
|
+
|
|
245
|
+
// Formater la nouvelle valeur
|
|
246
|
+
const { formatted, cursorPos: newCursorPos } = formatDateInput(newValue, cursorPos + pastedText.length)
|
|
247
|
+
|
|
248
|
+
// Mettre à jour la valeur
|
|
249
|
+
updateDisplayValue(formatted)
|
|
250
|
+
|
|
251
|
+
// Mettre à jour l'aria-label si la fonction est fournie
|
|
252
|
+
if (updateAriaLabel && accessiblePlaceholders) {
|
|
253
|
+
// Créer une version accessible pour les lecteurs d'écran (sans les caractères de placeholder)
|
|
254
|
+
const accessibleValue = formatted.replace(new RegExp(placeholderChar, 'g'), ' ')
|
|
255
|
+
|
|
256
|
+
// Créer un message descriptif pour le lecteur d'écran
|
|
257
|
+
const dateDescription = getDateDescription(accessibleValue, format)
|
|
258
|
+
updateAriaLabel(dateDescription)
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// Positionner le curseur après un court délai
|
|
262
|
+
setTimeout(() => {
|
|
263
|
+
input.setSelectionRange(newCursorPos, newCursorPos)
|
|
264
|
+
}, 0)
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Crée une description accessible de la date pour les lecteurs d'écran
|
|
269
|
+
*
|
|
270
|
+
* @param dateStr - La chaîne de date à décrire
|
|
271
|
+
* @param format - Le format de la date
|
|
272
|
+
* @returns Une description de la date adaptée aux lecteurs d'écran
|
|
273
|
+
*/
|
|
274
|
+
const getDateDescription = (dateStr: string, format: string): string => {
|
|
275
|
+
// Si la chaîne est vide, retourner un message simple
|
|
276
|
+
if (!dateStr.trim()) {
|
|
277
|
+
return 'Aucune date saisie'
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Déterminer le séparateur utilisé dans le format
|
|
281
|
+
const separator = format.match(/[^DMY]/)?.[0] || '/'
|
|
282
|
+
|
|
283
|
+
// Extraire les parties de la date
|
|
284
|
+
const dateParts = dateStr.split(separator)
|
|
285
|
+
const formatParts = format.split(separator)
|
|
286
|
+
|
|
287
|
+
// Créer une description en fonction du format
|
|
288
|
+
let description = 'Date en cours de saisie: '
|
|
289
|
+
|
|
290
|
+
for (let i = 0; i < formatParts.length; i++) {
|
|
291
|
+
if (i >= dateParts.length) break
|
|
292
|
+
|
|
293
|
+
const part = dateParts[i].trim()
|
|
294
|
+
const formatPart = formatParts[i].charAt(0).toUpperCase()
|
|
295
|
+
|
|
296
|
+
// Ignorer les parties vides ou contenant uniquement des placeholders
|
|
297
|
+
if (!part || part.replace(new RegExp(placeholderChar, 'g'), '').length === 0) {
|
|
298
|
+
continue
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
switch (formatPart) {
|
|
302
|
+
case 'D':
|
|
303
|
+
description += `jour ${part}, `
|
|
304
|
+
break
|
|
305
|
+
case 'M':
|
|
306
|
+
description += `mois ${part}, `
|
|
307
|
+
break
|
|
308
|
+
case 'Y':
|
|
309
|
+
description += `année ${part}, `
|
|
310
|
+
break
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// Supprimer la virgule finale si elle existe
|
|
315
|
+
return description.endsWith(', ')
|
|
316
|
+
? description.slice(0, -2)
|
|
317
|
+
: description
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
return {
|
|
321
|
+
formatDateInput,
|
|
322
|
+
handleKeydown,
|
|
323
|
+
handlePaste,
|
|
324
|
+
getDateDescription,
|
|
325
|
+
}
|
|
326
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { ref, watch, type Ref } from 'vue'
|
|
2
|
+
|
|
3
|
+
export type ViewMode = 'month' | 'year' | 'months' | undefined
|
|
4
|
+
|
|
5
|
+
export interface ViewModeReturn {
|
|
6
|
+
currentViewMode: Ref<ViewMode>
|
|
7
|
+
handleViewModeUpdate: (newMode: ViewMode) => void
|
|
8
|
+
handleYearUpdate: () => void
|
|
9
|
+
handleMonthUpdate: () => void
|
|
10
|
+
resetViewMode: () => void
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Composable pour gérer le mode d'affichage du DatePicker (année, mois, jour)
|
|
15
|
+
* Utilisé pour contrôler le comportement du DatePicker, notamment pour les dates de naissance
|
|
16
|
+
*
|
|
17
|
+
* @param isBirthDateGetter - Une fonction qui retourne la valeur actuelle de isBirthDate
|
|
18
|
+
*/
|
|
19
|
+
export function useDatePickerViewMode(isBirthDateGetter: () => boolean): ViewModeReturn {
|
|
20
|
+
// Variable pour suivre le mode d'affichage actuel du DatePicker
|
|
21
|
+
const currentViewMode = ref<ViewMode>(isBirthDateGetter() ? 'year' : 'month')
|
|
22
|
+
|
|
23
|
+
// Mettre à jour le mode d'affichage quand isBirthDate change
|
|
24
|
+
watch(isBirthDateGetter, (newValue) => {
|
|
25
|
+
currentViewMode.value = newValue ? 'year' : 'month'
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
// Fonction pour gérer le changement de mode d'affichage
|
|
29
|
+
const handleViewModeUpdate = (newMode: ViewMode) => {
|
|
30
|
+
currentViewMode.value = newMode
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Fonction pour gérer la sélection de l'année quand isBirthDate est true
|
|
34
|
+
const handleYearUpdate = () => {
|
|
35
|
+
if (isBirthDateGetter()) {
|
|
36
|
+
// Après la sélection de l'année, passer automatiquement à la sélection du mois
|
|
37
|
+
currentViewMode.value = 'months'
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Fonction pour gérer la sélection du mois quand isBirthDate est true
|
|
42
|
+
const handleMonthUpdate = () => {
|
|
43
|
+
if (isBirthDateGetter()) {
|
|
44
|
+
// Après la sélection du mois, passer automatiquement à la sélection du jour
|
|
45
|
+
currentViewMode.value = undefined
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Fonction pour réinitialiser le mode d'affichage (utile lors de la fermeture du DatePicker)
|
|
50
|
+
const resetViewMode = () => {
|
|
51
|
+
currentViewMode.value = isBirthDateGetter() ? 'year' : 'month'
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
currentViewMode,
|
|
56
|
+
handleViewModeUpdate,
|
|
57
|
+
handleYearUpdate,
|
|
58
|
+
handleMonthUpdate,
|
|
59
|
+
resetViewMode,
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { type Ref, nextTick, onMounted, onBeforeUnmount } from 'vue'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Composable pour gérer la visibilité et les interactions avec le DatePicker
|
|
5
|
+
*
|
|
6
|
+
* @param options - Options de configuration
|
|
7
|
+
* @returns Fonctions pour gérer la visibilité du DatePicker
|
|
8
|
+
*/
|
|
9
|
+
export const useDatePickerVisibility = (options: {
|
|
10
|
+
// Propriétés de configuration
|
|
11
|
+
disabled?: boolean
|
|
12
|
+
readonly?: boolean
|
|
13
|
+
textFieldActivator?: boolean
|
|
14
|
+
|
|
15
|
+
// Références réactives
|
|
16
|
+
isDatePickerVisible: Ref<boolean>
|
|
17
|
+
isManualInputActive: Ref<boolean>
|
|
18
|
+
hasInteracted: Ref<boolean>
|
|
19
|
+
|
|
20
|
+
// Fonctions
|
|
21
|
+
updateAccessibility: () => void
|
|
22
|
+
validateDates: () => void
|
|
23
|
+
|
|
24
|
+
// Émetteurs d'événements
|
|
25
|
+
emitClosed: () => void
|
|
26
|
+
emitFocus: () => void
|
|
27
|
+
}) => {
|
|
28
|
+
const {
|
|
29
|
+
disabled = false,
|
|
30
|
+
readonly = false,
|
|
31
|
+
textFieldActivator = false,
|
|
32
|
+
isDatePickerVisible,
|
|
33
|
+
isManualInputActive,
|
|
34
|
+
hasInteracted,
|
|
35
|
+
updateAccessibility,
|
|
36
|
+
validateDates,
|
|
37
|
+
emitClosed,
|
|
38
|
+
emitFocus,
|
|
39
|
+
} = options
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Bascule l'affichage du DatePicker
|
|
43
|
+
*/
|
|
44
|
+
const toggleDatePicker = () => {
|
|
45
|
+
if (disabled || readonly) return
|
|
46
|
+
|
|
47
|
+
isDatePickerVisible.value = !isDatePickerVisible.value
|
|
48
|
+
|
|
49
|
+
if (isDatePickerVisible.value) {
|
|
50
|
+
// Mettre à jour l'accessibilité après l'ouverture du DatePicker
|
|
51
|
+
nextTick(() => {
|
|
52
|
+
updateAccessibility()
|
|
53
|
+
})
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
emitClosed()
|
|
57
|
+
validateDates()
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Ouvre le DatePicker s'il n'est pas déjà visible
|
|
63
|
+
*/
|
|
64
|
+
const openDatePicker = () => {
|
|
65
|
+
if (!isDatePickerVisible.value) {
|
|
66
|
+
toggleDatePicker()
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Ouvre le DatePicker lors d'un clic sur le champ de texte
|
|
72
|
+
*/
|
|
73
|
+
const openDatePickerOnClick = () => {
|
|
74
|
+
if (textFieldActivator) {
|
|
75
|
+
openDatePicker()
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Gère le focus sur le champ de texte
|
|
81
|
+
*/
|
|
82
|
+
const openDatePickerOnFocus = () => {
|
|
83
|
+
// Only open the DatePicker if textFieldActivator is true
|
|
84
|
+
if (textFieldActivator) {
|
|
85
|
+
openDatePicker()
|
|
86
|
+
}
|
|
87
|
+
// Always emit the focus event
|
|
88
|
+
emitFocus()
|
|
89
|
+
isManualInputActive.value = true
|
|
90
|
+
hasInteracted.value = true
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Gère le clic sur l'icône du DatePicker
|
|
95
|
+
*/
|
|
96
|
+
const openDatePickerOnIconClick = () => {
|
|
97
|
+
toggleDatePicker()
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Gère les clics en dehors du DatePicker pour le fermer
|
|
102
|
+
*/
|
|
103
|
+
const handleClickOutside = (event: MouseEvent) => {
|
|
104
|
+
if (!isDatePickerVisible.value) return
|
|
105
|
+
|
|
106
|
+
const target = event.target as HTMLElement
|
|
107
|
+
const container = target.closest('.date-picker-container')
|
|
108
|
+
|
|
109
|
+
// Si on clique dans le conteneur du DatePicker, on ne fait rien
|
|
110
|
+
if (container) return
|
|
111
|
+
emitClosed()
|
|
112
|
+
// Déclencher la validation à la fermeture
|
|
113
|
+
validateDates()
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Gestion des événements de clic en dehors du DatePicker
|
|
117
|
+
onMounted(() => {
|
|
118
|
+
document.addEventListener('click', handleClickOutside)
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
onBeforeUnmount(() => {
|
|
122
|
+
document.removeEventListener('click', handleClickOutside)
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Gère l'ouverture du DatePicker lors de l'appui sur Entrée ou Espace
|
|
127
|
+
*/
|
|
128
|
+
const handleKeyboardNavigation = (event: KeyboardEvent) => {
|
|
129
|
+
if ((event.key === 'Enter' || event.key === ' ') && !disabled && !readonly) {
|
|
130
|
+
event.preventDefault() // Empêcher le comportement par défaut
|
|
131
|
+
openDatePicker()
|
|
132
|
+
return true
|
|
133
|
+
}
|
|
134
|
+
return false
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return {
|
|
138
|
+
toggleDatePicker,
|
|
139
|
+
openDatePicker,
|
|
140
|
+
openDatePickerOnClick,
|
|
141
|
+
openDatePickerOnFocus,
|
|
142
|
+
openDatePickerOnIconClick,
|
|
143
|
+
handleClickOutside,
|
|
144
|
+
handleKeyboardNavigation,
|
|
145
|
+
}
|
|
146
|
+
}
|