@cnamts/synapse 1.0.25 → 1.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AutocompleteFilter-D7qBuCAP.js → AutocompleteFilter-C9eLKyW8.js} +3 -3
- package/dist/{DateFilter-BitMWrMU.js → DateFilter-y-GLkAkn.js} +9 -9
- package/dist/{NumberFilter-BTLUxw0a.js → NumberFilter-DN6hIBS7.js} +1 -1
- package/dist/{PeriodFilter-B5rUIPAC.js → PeriodFilter-MoUUp9qS.js} +1 -1
- package/dist/{SelectFilter-l4QnRcuk.js → SelectFilter-bCbrdLmu.js} +1 -1
- package/dist/{TextFilter-C9hj6Qrp.js → TextFilter-CvjgEaoM.js} +4 -4
- package/dist/apLightTheme2026-ug4Y23ns.js +611 -0
- package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +2369 -351
- package/dist/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.d.ts +18 -0
- package/dist/components/Customs/Selects/SyAutocomplete/utils/ariaManager.d.ts +1 -1
- package/dist/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.d.ts +3 -1
- package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +58 -288
- package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +1 -0
- package/dist/components/Customs/Selects/SySelect/composables/useSySelectValidation.d.ts +15 -0
- package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +4 -3
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +4 -3
- package/dist/components/Customs/SyIconButton/SyIconButton.d.ts +18 -0
- package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +20 -37
- package/dist/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.d.ts +50 -0
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +8 -10
- package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +197 -185
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +91 -82
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +35 -32
- package/dist/components/DatePicker/composables/index.d.ts +1 -0
- package/dist/components/DatePicker/composables/useDatePickerState.d.ts +3 -3
- package/dist/components/DatePicker/composables/useDatePickerValidationBridge.d.ts +51 -0
- package/dist/components/DatePicker/composables/useDateTextField.d.ts +2 -2
- package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
- package/dist/components/DatePicker/types.d.ts +1 -2
- package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +1 -0
- package/dist/components/MonthPicker/MonthPicker.d.ts +24 -24
- package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +24 -24
- package/dist/components/NirField/NirField.d.ts +64 -60
- package/dist/components/NirField/useNirValidation.d.ts +6 -2
- package/dist/components/PasswordField/PasswordField.d.ts +3 -3
- package/dist/components/PeriodField/PeriodField.d.ts +338 -314
- package/dist/components/PhoneField/PhoneField.d.ts +34 -24
- package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +0 -3
- package/dist/components/RatingPicker/EmotionPicker/EmotionPicker.d.ts +3 -1
- package/dist/components/RatingPicker/NumberPicker/NumberPicker.d.ts +4 -3
- package/dist/components/RatingPicker/RatingPicker.d.ts +18 -5
- package/dist/components/RatingPicker/StarsPicker/StarsPicker.d.ts +3 -1
- package/dist/components/RatingPicker/useRatingFocus.d.ts +18 -0
- package/dist/components/SyTextArea/SyTextArea.d.ts +25 -15
- package/dist/components/SyTextArea/composables/useSyTextAreaValidation.d.ts +20 -0
- package/dist/components/SyTextArea/locales.d.ts +1 -0
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -4
- package/dist/components/Tables/SyTable/SyTable.d.ts +5 -4
- package/dist/components/Tables/common/SyTablePagination.d.ts +152 -364
- package/dist/components/Tables/common/TableHeader.d.ts +1 -1
- package/dist/components/Tables/common/filters/DateFilter.d.ts +4 -4
- package/dist/components/Tables/common/types.d.ts +2 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/composables/date/useDateInitializationDayjs.d.ts +3 -1
- package/dist/composables/unifyValidation/documentationValidationProps.d.ts +160 -160
- package/dist/composables/unifyValidation/useCustomValidation.d.ts +3 -1
- package/dist/composables/unifyValidation/useValidation.d.ts +27 -19
- package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +1 -1
- package/dist/composables/validation/useValidation.d.ts +1 -0
- package/dist/design-system-v3.js +81 -80
- package/dist/designTokens/tokens/amelipro/apContextual.d.ts +6 -6
- package/dist/designTokens/tokens/amelipro/apDarkTheme.d.ts +3 -1
- package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +53 -98
- package/dist/designTokens/tokens/baseContextualTokens.d.ts +0 -6
- package/dist/designTokens/tokens/baseTokens.d.ts +232 -0
- package/dist/designTokens/tokens/cnam/cnamContextual.d.ts +6 -6
- package/dist/designTokens/tokens/cnam/cnamDarkTheme.d.ts +1 -1
- package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +57 -99
- package/dist/designTokens/tokens/pa/paContextual.d.ts +0 -6
- package/dist/designTokens/tokens/pa/paDarkTheme.d.ts +1 -1
- package/dist/designTokens/tokens/pa/paLightTheme.d.ts +53 -97
- package/dist/designTokens/tokens/pa/paSemantic.d.ts +1 -0
- package/dist/designTokens/tokens/semanticTokens.d.ts +112 -0
- package/dist/{main-Cpx8Co6H.js → main-CI6Q9nmO.js} +13843 -13478
- package/dist/synapse.css +1 -1
- package/dist/vuetifyConfig.js +208 -72
- package/package.json +10 -7
- package/src/assets/overrides/_icons.scss +5 -17
- package/src/assets/overrides/_otp.scss +4 -5
- package/src/assets/overrides/_typography.scss +2 -1
- package/src/assets/overrides/_utilities.scss +1 -42
- package/src/components/Accordion/Accordion.vue +2 -0
- package/src/components/ChipList/ChipList.vue +30 -18
- package/src/components/ChipList/tests/chipList.spec.ts +4 -4
- package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +2 -1
- package/src/components/CookiesSelection/CookiesSelection.vue +2 -1
- package/src/components/CopyBtn/CopyBtn.vue +9 -0
- package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.stories.ts +4 -0
- package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +7 -6
- package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +223 -0
- package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +283 -351
- package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +183 -219
- package/src/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.ts +101 -0
- package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +761 -1
- package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +3 -1
- package/src/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.ts +79 -5
- package/src/components/Customs/Selects/SyAutocomplete/validation/Validation.stories.ts +1029 -0
- package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +52 -217
- package/src/components/Customs/Selects/SySelect/SySelect.vue +248 -236
- package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +3 -0
- package/src/components/Customs/Selects/SySelect/composables/useSySelectValidation.ts +64 -0
- package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +440 -5
- package/src/components/Customs/Selects/SySelect/validation/Validation.stories.ts +1026 -0
- package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +18 -7
- package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +5 -5
- package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +8 -8
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +27 -6
- package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +1 -1
- package/src/components/Customs/SyIcon/accessibilite/Accessibility.mdx +0 -6
- package/src/components/Customs/SyIcon/utils/tests/iconUtils.spec.ts +107 -0
- package/src/components/Customs/SyRadioGroup/SyRadioGroup.mdx +2 -2
- package/src/components/Customs/SyRadioGroup/SyRadioGroup.stories.ts +395 -200
- package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +100 -127
- package/src/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.ts +127 -0
- package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.a11y.spec.ts +93 -1
- package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.spec.ts +146 -9
- package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.visual.cy.ts +165 -0
- package/src/components/Customs/SyRadioGroup/validation/Validation.stories.ts +773 -0
- package/src/components/Customs/SyTabs/SyTabs.stories.ts +5 -5
- package/src/components/Customs/SyTabs/config.ts +3 -3
- package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +265 -0
- package/src/components/Customs/SyTabs/tests/useTabTransition.spec.ts +188 -0
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +10 -29
- package/src/components/Customs/SyTextField/SyTextField.vue +52 -17
- package/src/components/DataList/DataList.stories.ts +1 -1
- package/src/components/DataListItem/tests/DataListItem.spec.ts +3 -1
- package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +1 -1
- package/src/components/DatePicker/CalendarMode/DatePicker.vue +52 -154
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.coverage.spec.ts +156 -0
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +495 -4
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1 -1
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +55 -73
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +207 -1
- package/src/components/DatePicker/ComplexDatePicker/tests/bridge-integration.regression.spec.ts +210 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/calendar-navigation.regression.spec.ts +214 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/validation-cross.regression.spec.ts +194 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/validation-success-messages.regression.spec.ts +83 -0
- package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +1 -1
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +169 -60
- package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +1 -1
- package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +320 -0
- package/src/components/DatePicker/composables/index.ts +1 -0
- package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +360 -0
- package/src/components/DatePicker/composables/tests/useDatePickerValidationBridge.spec.ts +129 -0
- package/src/components/DatePicker/composables/useDatePickerState.ts +33 -14
- package/src/components/DatePicker/composables/useDatePickerValidationBridge.ts +205 -0
- package/src/components/DatePicker/composables/useDateRangeInput.ts +2 -1
- package/src/components/DatePicker/composables/useDateSelection.ts +2 -1
- package/src/components/DatePicker/composables/useDateTextField.ts +2 -2
- package/src/components/DatePicker/composables/useInputBlurHandler.ts +2 -2
- package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +1 -1
- package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +1 -1
- package/src/components/DatePicker/tests/exposed-methods.coverage.spec.ts +75 -0
- package/src/components/DatePicker/types.ts +1 -2
- package/src/components/DialogBox/DialogBox.stories.ts +8 -8
- package/src/components/DialogBox/DialogBox.vue +1 -1
- package/src/components/DialogBox/accessibilite/Accessibility.mdx +86 -22
- package/src/components/FileList/UploadItem/UploadItem.vue +4 -4
- package/src/components/FileUpload/FileUpload.vue +2 -2
- package/src/components/FileUpload/FileUploadContent.vue +1 -1
- package/src/components/FilterInline/FilterInline.mdx +2 -2
- package/src/components/FilterSideBar/FilterSideBar.stories.ts +1 -1
- package/src/components/FilterSideBar/FilterSideBar.vue +4 -3
- package/src/components/FooterBar/FooterBar.vue +7 -7
- package/src/components/FranceConnectBtn/FranceConnectBtn.vue +1 -1
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +2 -2
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +7 -7
- package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +2 -2
- package/src/components/HeaderLoading/tests/HeaderLoading.spec.ts +87 -8
- package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +3 -3
- package/src/components/HeaderNavigationBar/HorizontalNavbar/tests/HorizontalNavbar.spec.ts +589 -0
- package/src/components/HeaderToolbar/tests/HeaderToolBar.spec.ts +153 -1
- package/src/components/HeaderToolbar/tests/useMobileRightMenu.spec.ts +258 -0
- package/src/components/LangBtn/LangBtn.vue +2 -1
- package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +2 -2
- package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +1 -1
- package/src/components/LunarCalendar/tests/useLunarCalendarRules.spec.ts +184 -0
- package/src/components/MonthPicker/MonthPickerVisual/MonthSelector.vue +3 -3
- package/src/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.vue +1 -1
- package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +2 -2
- package/src/components/MonthPicker/MonthPickerVisual/YearSelector.vue +1 -1
- package/src/components/NirField/NirField.vue +3 -3
- package/src/components/NotificationBar/Notification/Notification.vue +12 -12
- package/src/components/NotificationBar/NotificationBar.stories.ts +8 -8
- package/src/components/PaginatedTable/PaginatedTable.vue +1 -1
- package/src/components/PaginatedTable/Pagination.vue +3 -3
- package/src/components/PasswordField/PasswordField.vue +15 -11
- package/src/components/PasswordField/tests/PasswordField.spec.ts +3 -3
- package/src/components/PhoneField/PhoneField.vue +4 -2
- package/src/components/RangeField/RangeSlider/RangeSlider.vue +11 -18
- package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -1
- package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +32 -48
- package/src/components/RatingPicker/EmotionPicker/tests/__snapshots__/EmotionPicker.spec.ts.snap +5 -0
- package/src/components/RatingPicker/NumberPicker/NumberPicker.vue +48 -53
- package/src/components/RatingPicker/NumberPicker/tests/NumberPicker.spec.ts +2 -1
- package/src/components/RatingPicker/NumberPicker/tests/__snapshots__/NumberPicker.spec.ts.snap +40 -13
- package/src/components/RatingPicker/RatingPicker.stories.ts +65 -88
- package/src/components/RatingPicker/RatingPicker.vue +71 -15
- package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +28 -37
- package/src/components/RatingPicker/StarsPicker/tests/StarsPicker.spec.ts +1 -1
- package/src/components/RatingPicker/StarsPicker/tests/__snapshots__/StarsPicker.spec.ts.snap +5 -0
- package/src/components/RatingPicker/accessibilite/Accessibility.mdx +137 -9
- package/src/components/RatingPicker/tests/RatingPicker.a11y.spec.ts +123 -0
- package/src/components/RatingPicker/tests/RatingPicker.spec.ts +3 -2
- package/src/components/RatingPicker/tests/__snapshots__/RatingPicker.spec.ts.snap +40 -11
- package/src/components/RatingPicker/useRatingFocus.ts +97 -0
- package/src/components/StatusPage/tests/StatusPage.spec.ts +149 -0
- package/src/components/SubHeader/SubHeader.vue +1 -1
- package/src/components/SyAlert/SyAlert.vue +23 -23
- package/src/components/SyTextArea/SyTextArea.stories.ts +177 -131
- package/src/components/SyTextArea/SyTextArea.vue +257 -74
- package/src/components/SyTextArea/composables/useSyTextAreaValidation.ts +81 -0
- package/src/components/SyTextArea/locales.ts +1 -0
- package/src/components/SyTextArea/tests/SyTextArea.spec.ts +449 -1
- package/src/components/SyTextArea/useDefaultValidationRules.ts +2 -7
- package/src/components/SyTextArea/validation/Validation.stories.ts +856 -0
- package/src/components/TableToolbar/TableToolbar.vue +6 -6
- package/src/components/TableToolbar/accessibilite/Accessibility.mdx +81 -7
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +163 -0
- package/src/components/Tables/SyServerTable/SyServerTable.vue +3 -2
- package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +67 -0
- package/src/components/Tables/SyTable/SyTable.stories.ts +94 -0
- package/src/components/Tables/SyTable/SyTable.vue +3 -2
- package/src/components/Tables/SyTable/tests/SyTable.spec.ts +64 -0
- package/src/components/Tables/common/SyTableFilter.vue +4 -4
- package/src/components/Tables/common/SyTablePagination.vue +1 -0
- package/src/components/Tables/common/TableHeader.vue +3 -3
- package/src/components/Tables/common/filters/DateFilter.vue +2 -2
- package/src/components/Tables/common/filters/logics/tests/NumberFilterLogic.spec.ts +176 -0
- package/src/components/Tables/common/filters/logics/tests/SelectFilterLogic.spec.ts +111 -0
- package/src/components/Tables/common/tableStyles.scss +6 -6
- package/src/components/Tables/common/types.ts +2 -0
- package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +2 -0
- package/src/components/index.ts +1 -0
- package/src/composables/date/tests/useDateFormatDayjs.spec.ts +112 -0
- package/src/composables/date/tests/{useDateInitialization.spec.ts → useDateInitializationDayjs.spec.ts} +39 -3
- package/src/composables/date/tests/useHolidayDay.spec.ts +109 -0
- package/src/composables/date/useDateInitializationDayjs.ts +4 -1
- package/src/composables/rules/tests/useFieldValidation.spec.ts +374 -0
- package/src/composables/tests/useError.spec.ts +30 -0
- package/src/composables/tests/useFormFieldErrorHandling.spec.ts +234 -0
- package/src/composables/unifyValidation/documentationValidationProps.ts +12 -12
- package/src/composables/unifyValidation/tests/documentationValidationProps.spec.ts +177 -0
- package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +32 -1
- package/src/composables/unifyValidation/tests/useValidation.spec.ts +28 -2
- package/src/composables/unifyValidation/useCustomValidation.ts +34 -12
- package/src/composables/unifyValidation/useValidation.ts +55 -27
- package/src/composables/unifyValidation/useVuetifyValidation.ts +2 -2
- package/src/composables/useFilterable/useFilterable.spec.ts +42 -0
- package/src/composables/useFilterable/useFilterable.ts +11 -7
- package/src/composables/useFormFieldErrorHandling.ts +6 -3
- package/src/composables/validation/tests/useValidation.spec.ts +2 -2
- package/src/composables/validation/useValidation.ts +15 -3
- package/src/composantsVuetify/VBtn/VBtn.mdx +9 -39
- package/src/composantsVuetify/VBtn/v-btn.stories.ts +26 -86
- package/src/composantsVuetify/VCard/VCard.mdx +59 -0
- package/src/composantsVuetify/VCard/v-card.stories.ts +279 -0
- package/src/designTokens/tokens/amelipro/apColors2026.ts +1 -1
- package/src/designTokens/tokens/amelipro/apContextual.ts +6 -0
- package/src/designTokens/tokens/amelipro/apDarkTheme.ts +2 -2
- package/src/designTokens/tokens/amelipro/apLightTheme.ts +72 -100
- package/src/designTokens/tokens/amelipro/apSemantic.ts +1 -1
- package/src/designTokens/tokens/baseContextualTokens.ts +1 -6
- package/src/designTokens/tokens/baseTokens.ts +232 -0
- package/src/designTokens/tokens/cnam/cnamContextual.ts +6 -0
- package/src/designTokens/tokens/cnam/cnamDarkTheme.ts +2 -2
- package/src/designTokens/tokens/cnam/cnamLightTheme.ts +76 -101
- package/src/designTokens/tokens/pa/paDarkTheme.ts +2 -2
- package/src/designTokens/tokens/pa/paLightTheme.ts +73 -99
- package/src/designTokens/tokens/pa/paSemantic.ts +2 -0
- package/src/designTokens/tokens/semanticTokens.ts +114 -0
- package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +61 -91
- package/src/stories/Accessibilite/AuditDesignSystem.mdx +5 -8
- package/src/stories/Accessibilite/AuditEtContreAudit/Exemptions-derogations.mdx +1 -1
- package/src/stories/Accessibilite/AuditEtContreAudit/Introduction.mdx +11 -8
- package/src/stories/Accessibilite/AuditEtContreAudit/RGAA.mdx +6 -7
- package/src/stories/Accessibilite/Introduction.mdx +30 -30
- package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +168 -78
- package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +13 -6
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +66 -45
- package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +23 -49
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/FauxPositifs.stories.ts +6 -0
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/Utilisation.mdx +7 -19
- package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +18 -20
- package/src/stories/Components/Components.stories.ts +59 -6
- package/src/stories/DesignTokens/ColorIntegrationExample.vue +2 -3
- package/src/stories/DesignTokens/Colors.mdx +6 -8
- package/src/stories/DesignTokens/colors.stories.ts +244 -1081
- package/src/utils/amelipro/toKebabCase/tests/toKebabCase.spec.ts +52 -0
- package/src/utils/formatNir/tests/formatNir.spec.ts +34 -0
- package/src/utils/tests/insertAt.spec.ts +44 -0
- package/dist/AutocompleteFilter-Df9i5mAl.cjs +0 -1
- package/dist/DateFilter-BJD6FMev.cjs +0 -1
- package/dist/NumberFilter-DGCzCXzI.cjs +0 -1
- package/dist/PeriodFilter-DO_ecTZW.cjs +0 -1
- package/dist/SelectFilter-CGwcKWLm.cjs +0 -1
- package/dist/TextFilter-B8nf7xoK.cjs +0 -1
- package/dist/apLightTheme-CEK4iY3f.cjs +0 -1
- package/dist/apLightTheme-DnIM24Lv.js +0 -950
- package/dist/composables/date/useDateFormat.d.ts +0 -26
- package/dist/composables/date/useDateInitialization.d.ts +0 -18
- package/dist/design-system-v3.umd.cjs +0 -1
- package/dist/main-ByDPHpae.cjs +0 -1067
- package/dist/tooth-11-D3sLWv2n.cjs +0 -1
- package/dist/tooth-12-CXrLuH03.cjs +0 -1
- package/dist/tooth-13-BSfo5fpT.cjs +0 -1
- package/dist/tooth-14-DMzulx0h.cjs +0 -1
- package/dist/tooth-15-BKRFVi-9.cjs +0 -1
- package/dist/tooth-16-CpuxAbuM.cjs +0 -1
- package/dist/tooth-17-BPoahUdg.cjs +0 -1
- package/dist/tooth-18-DhHJz8sy.cjs +0 -1
- package/dist/tooth-21-Dgd5hn_X.cjs +0 -1
- package/dist/tooth-22-C2Tn19sB.cjs +0 -1
- package/dist/tooth-23-C9uaaSGb.cjs +0 -1
- package/dist/tooth-24-BrK9UGpf.cjs +0 -1
- package/dist/tooth-25-CE_EfGNp.cjs +0 -1
- package/dist/tooth-26-Ctv4i9Fy.cjs +0 -1
- package/dist/tooth-27-C5J7JkWM.cjs +0 -1
- package/dist/tooth-28-Z9oWqjo0.cjs +0 -1
- package/dist/tooth-31-BrYqmkTi.cjs +0 -1
- package/dist/tooth-32-BNNR0oCZ.cjs +0 -1
- package/dist/tooth-33-DuxvqO2J.cjs +0 -1
- package/dist/tooth-34-BCSCXMB6.cjs +0 -1
- package/dist/tooth-35-BLUXkX88.cjs +0 -1
- package/dist/tooth-36-IrKHYqlA.cjs +0 -1
- package/dist/tooth-37-BYqpdMwo.cjs +0 -1
- package/dist/tooth-38-B_eNXXdu.cjs +0 -1
- package/dist/tooth-41-Ddva4Ot8.cjs +0 -1
- package/dist/tooth-42-szcDqlM0.cjs +0 -1
- package/dist/tooth-43-B3ka6rQm.cjs +0 -1
- package/dist/tooth-44-CazyQucj.cjs +0 -1
- package/dist/tooth-45-B4HQtc8n.cjs +0 -1
- package/dist/tooth-46-BPM40gbG.cjs +0 -1
- package/dist/tooth-47-Dvr20dlh.cjs +0 -1
- package/dist/tooth-48-Bd8ljGsF.cjs +0 -1
- package/dist/tooth-51-OBpwCOF3.cjs +0 -1
- package/dist/tooth-52-aKxyHcmq.cjs +0 -1
- package/dist/tooth-53-vCwJjTOc.cjs +0 -1
- package/dist/tooth-54-DsWu2iFy.cjs +0 -1
- package/dist/tooth-55-BxC1X2Dn.cjs +0 -1
- package/dist/tooth-61-BbLvxMQi.cjs +0 -1
- package/dist/tooth-62-CmTkWczP.cjs +0 -1
- package/dist/tooth-63-DI7l_2qI.cjs +0 -1
- package/dist/tooth-64-B21sOsJh.cjs +0 -1
- package/dist/tooth-65-D2ZC2VEr.cjs +0 -1
- package/dist/tooth-71-D473PPO5.cjs +0 -1
- package/dist/tooth-72-Drh1wnNu.cjs +0 -1
- package/dist/tooth-73-DzlwYI23.cjs +0 -1
- package/dist/tooth-74-8aGvcZPg.cjs +0 -1
- package/dist/tooth-75-BFK7At_r.cjs +0 -1
- package/dist/tooth-81-BZmR-I0M.cjs +0 -1
- package/dist/tooth-82-euVfUUZV.cjs +0 -1
- package/dist/tooth-83-KV010j64.cjs +0 -1
- package/dist/tooth-84-BBg1RjhZ.cjs +0 -1
- package/dist/tooth-85-Cr-kc1wM.cjs +0 -1
- package/dist/vuetifyConfig.umd.cjs +0 -1
- package/src/components/BackBtn/tests/__snapshots__/back-btn-custom-bg.snap.png +0 -0
- package/src/components/BackBtn/tests/__snapshots__/back-btn-dark-mode.snap.png +0 -0
- package/src/components/BackBtn/tests/__snapshots__/back-btn-default.snap.png +0 -0
- package/src/components/BackBtn/tests/__snapshots__/back-btn-no-icon.snap.png +0 -0
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.events.spec.ts +0 -178
- package/src/components/DialogBox/tests/__snapshots__/dialog-box-custom-texts.snap.png +0 -0
- package/src/components/DialogBox/tests/__snapshots__/dialog-box-default.snap.png +0 -0
- package/src/components/DialogBox/tests/__snapshots__/dialog-box-no-actions.snap.png +0 -0
- package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated-submenu-open.snap.png +0 -0
- package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated.snap.png +0 -0
- package/src/components/HeaderBar/tests/__snapshots__/header-bar-custom-width.snap.png +0 -0
- package/src/components/HeaderBar/tests/__snapshots__/header-bar-default.snap.png +0 -0
- package/src/components/HeaderBar/tests/__snapshots__/header-bar-no-sticky.snap.png +0 -0
- package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-prepend.snap.png +0 -0
- package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-side.snap.png +0 -0
- package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-subtitle.snap.png +0 -0
- package/src/components/Logo/tests/__snapshots__/logo-avatar.snap.png +0 -0
- package/src/components/Logo/tests/__snapshots__/logo-dark.snap.png +0 -0
- package/src/components/Logo/tests/__snapshots__/logo-default.snap.png +0 -0
- package/src/components/Logo/tests/__snapshots__/logo-no-organism.snap.png +0 -0
- package/src/components/Logo/tests/__snapshots__/logo-no-signature.snap.png +0 -0
- package/src/components/Logo/tests/__snapshots__/logo-risque-pro.snap.png +0 -0
- package/src/components/RangeField/tests/__snapshots__/range-field-custom-bg.snap.png +0 -0
- package/src/components/RangeField/tests/__snapshots__/range-field-custom-range.snap.png +0 -0
- package/src/components/RangeField/tests/__snapshots__/range-field-default.snap.png +0 -0
- package/src/components/RangeField/tests/__snapshots__/range-field-step.snap.png +0 -0
- package/src/components/RangeField/tests/__snapshots__/range-field-with-label.snap.png +0 -0
- package/src/components/SyAlert/tests/__snapshots__/sy-alert-closable.snap.png +0 -0
- package/src/components/SyAlert/tests/__snapshots__/sy-alert-error.snap.png +0 -0
- package/src/components/SyAlert/tests/__snapshots__/sy-alert-info.snap.png +0 -0
- package/src/components/SyAlert/tests/__snapshots__/sy-alert-success.snap.png +0 -0
- package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-outlined.snap.png +0 -0
- package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-tonal.snap.png +0 -0
- package/src/components/SyAlert/tests/__snapshots__/sy-alert-warning.snap.png +0 -0
- package/src/composables/date/tests/useDateFormat.spec.ts +0 -67
- package/src/composables/date/useDateFormat.ts +0 -110
- package/src/composables/date/useDateInitialization.ts +0 -92
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { computed, watch, type Ref } from 'vue'
|
|
2
|
+
import { useValidation, type ValidationResult, type ValidationRule } from '@/composables/validation/useValidation'
|
|
3
|
+
import { DATE_PICKER_MESSAGES } from '../constants/messages'
|
|
4
|
+
import { useDateValidation } from './useDateValidation'
|
|
5
|
+
import type { DateObjectValue } from '../types'
|
|
6
|
+
|
|
7
|
+
export type DatePickerValidationRule = {
|
|
8
|
+
type: string
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- DatePicker rules are still legacy-shaped during migration.
|
|
10
|
+
options: any
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type DatePickerValidationBridgeOptions = {
|
|
14
|
+
showSuccessMessages: boolean
|
|
15
|
+
disableErrorHandling: boolean
|
|
16
|
+
noCalendar: boolean
|
|
17
|
+
required: boolean
|
|
18
|
+
displayRange: boolean
|
|
19
|
+
customRules: Ref<DatePickerValidationRule[]>
|
|
20
|
+
customWarningRules: Ref<DatePickerValidationRule[]>
|
|
21
|
+
selectedDates: Ref<DateObjectValue>
|
|
22
|
+
isUpdatingFromInternal: Ref<boolean>
|
|
23
|
+
currentRangeIsValid: Ref<boolean>
|
|
24
|
+
getRangeValidationError: Ref<string>
|
|
25
|
+
readonly?: Ref<boolean>
|
|
26
|
+
skipValidationWhenReadonly?: boolean
|
|
27
|
+
useCalendarModeRequiredFlow?: boolean
|
|
28
|
+
isInitialValidation?: Ref<boolean>
|
|
29
|
+
isValidateOnBlur?: Ref<boolean>
|
|
30
|
+
onblur?: Ref<boolean>
|
|
31
|
+
fieldIdentifier?: string
|
|
32
|
+
revalidateOnCustomRulesChange?: boolean
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const emptyValidationResult = (): ValidationResult => ({
|
|
36
|
+
hasError: false,
|
|
37
|
+
hasWarning: false,
|
|
38
|
+
hasSuccess: false,
|
|
39
|
+
state: {
|
|
40
|
+
errors: [],
|
|
41
|
+
warnings: [],
|
|
42
|
+
successes: [],
|
|
43
|
+
},
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
export function useDatePickerValidationBridge(options: DatePickerValidationBridgeOptions) {
|
|
47
|
+
const validation = useValidation({
|
|
48
|
+
showSuccessMessages: options.showSuccessMessages,
|
|
49
|
+
fieldIdentifier: options.fieldIdentifier ?? 'Date',
|
|
50
|
+
disableErrorHandling: options.disableErrorHandling,
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
const {
|
|
54
|
+
errors,
|
|
55
|
+
warnings,
|
|
56
|
+
successes,
|
|
57
|
+
validateField: baseValidateField,
|
|
58
|
+
clearValidation: baseClearValidation,
|
|
59
|
+
} = validation
|
|
60
|
+
|
|
61
|
+
const clearValidation = () => baseClearValidation()
|
|
62
|
+
|
|
63
|
+
if (options.skipValidationWhenReadonly && options.readonly) {
|
|
64
|
+
watch(options.readonly, () => {
|
|
65
|
+
errors.value = []
|
|
66
|
+
warnings.value = []
|
|
67
|
+
successes.value = []
|
|
68
|
+
})
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const validateField = (
|
|
72
|
+
value: unknown,
|
|
73
|
+
rules: ValidationRule[] = [],
|
|
74
|
+
warningRules: ValidationRule[] = [],
|
|
75
|
+
successRules: ValidationRule[] = [],
|
|
76
|
+
): Promise<ValidationResult> | ValidationResult => {
|
|
77
|
+
if (options.skipValidationWhenReadonly && options.readonly?.value) {
|
|
78
|
+
return emptyValidationResult()
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return baseValidateField(value, rules, warningRules, successRules)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const validateFieldForDateValidation = (
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Compatibility signature for legacy useDateValidation.
|
|
86
|
+
value: any,
|
|
87
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Compatibility signature for legacy useDateValidation.
|
|
88
|
+
rules: any[] = [],
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Compatibility signature for legacy useDateValidation.
|
|
90
|
+
warningRules: any[] = [],
|
|
91
|
+
): ValidationResult | Promise<ValidationResult> => {
|
|
92
|
+
return validateField(value, rules, warningRules, [])
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const { validateDates: coreValidateDates } = useDateValidation({
|
|
96
|
+
noCalendar: options.noCalendar,
|
|
97
|
+
required: options.useCalendarModeRequiredFlow ? false : options.required,
|
|
98
|
+
displayRange: options.displayRange,
|
|
99
|
+
disableErrorHandling: options.disableErrorHandling,
|
|
100
|
+
customRules: computed(() => options.customRules.value),
|
|
101
|
+
customWarningRules: computed(() => options.customWarningRules.value),
|
|
102
|
+
selectedDates: options.selectedDates,
|
|
103
|
+
isUpdatingFromInternal: options.isUpdatingFromInternal,
|
|
104
|
+
currentRangeIsValid: options.currentRangeIsValid,
|
|
105
|
+
getRangeValidationError: options.getRangeValidationError,
|
|
106
|
+
clearValidation,
|
|
107
|
+
validateField: validateFieldForDateValidation,
|
|
108
|
+
errors,
|
|
109
|
+
warnings,
|
|
110
|
+
successes,
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
if (options.revalidateOnCustomRulesChange) {
|
|
114
|
+
watch(options.customRules, () => {
|
|
115
|
+
if (options.selectedDates.value === null) {
|
|
116
|
+
return
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
queueMicrotask(async () => {
|
|
120
|
+
clearValidation()
|
|
121
|
+
|
|
122
|
+
const datesToValidate = Array.isArray(options.selectedDates.value)
|
|
123
|
+
? options.selectedDates.value
|
|
124
|
+
: [options.selectedDates.value]
|
|
125
|
+
|
|
126
|
+
for (const date of datesToValidate) {
|
|
127
|
+
await Promise.resolve(validateField(
|
|
128
|
+
date,
|
|
129
|
+
options.customRules.value,
|
|
130
|
+
options.customWarningRules.value,
|
|
131
|
+
))
|
|
132
|
+
}
|
|
133
|
+
})
|
|
134
|
+
}, { deep: true })
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const validateCalendarModeDates = async (forceValidation = false) => {
|
|
138
|
+
if (!options.useCalendarModeRequiredFlow) {
|
|
139
|
+
return await Promise.resolve(coreValidateDates(forceValidation))
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (options.noCalendar) {
|
|
143
|
+
return
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
clearValidation()
|
|
147
|
+
|
|
148
|
+
const shouldDisplayErrors = !options.disableErrorHandling
|
|
149
|
+
const hasNoSelection = !options.selectedDates.value || (Array.isArray(options.selectedDates.value) && options.selectedDates.value.length === 0)
|
|
150
|
+
|
|
151
|
+
if ((forceValidation || !options.isUpdatingFromInternal.value) && options.required && hasNoSelection) {
|
|
152
|
+
if (options.readonly?.value) {
|
|
153
|
+
return
|
|
154
|
+
}
|
|
155
|
+
if (options.onblur?.value && !options.isValidateOnBlur?.value) {
|
|
156
|
+
return
|
|
157
|
+
}
|
|
158
|
+
if (shouldDisplayErrors && (!options.isInitialValidation?.value || forceValidation)) {
|
|
159
|
+
errors.value.push(DATE_PICKER_MESSAGES.ERROR_REQUIRED)
|
|
160
|
+
}
|
|
161
|
+
return
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (!options.selectedDates.value) {
|
|
165
|
+
if (!options.customRules.value || options.customRules.value.length === 0) return
|
|
166
|
+
|
|
167
|
+
if (shouldDisplayErrors && (!options.isInitialValidation?.value || forceValidation)) {
|
|
168
|
+
await validateField(
|
|
169
|
+
options.selectedDates.value,
|
|
170
|
+
options.customRules.value,
|
|
171
|
+
options.customWarningRules.value,
|
|
172
|
+
)
|
|
173
|
+
errors.value = [...new Set(errors.value)]
|
|
174
|
+
warnings.value = [...new Set(warnings.value)]
|
|
175
|
+
successes.value = [...new Set(successes.value)]
|
|
176
|
+
}
|
|
177
|
+
return
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (shouldDisplayErrors && (!options.isInitialValidation?.value || forceValidation)) {
|
|
181
|
+
return await Promise.resolve(coreValidateDates(forceValidation))
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const validateDates = (forceValidation = false) => {
|
|
186
|
+
if (!options.useCalendarModeRequiredFlow) {
|
|
187
|
+
return coreValidateDates(forceValidation)
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return validateCalendarModeDates(forceValidation)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return {
|
|
194
|
+
validation,
|
|
195
|
+
errors,
|
|
196
|
+
warnings,
|
|
197
|
+
successes,
|
|
198
|
+
errorMessages: errors,
|
|
199
|
+
warningMessages: warnings,
|
|
200
|
+
successMessages: validation.displaySuccesses,
|
|
201
|
+
clearValidation,
|
|
202
|
+
validateField,
|
|
203
|
+
validateDates,
|
|
204
|
+
}
|
|
205
|
+
}
|
|
@@ -2,6 +2,7 @@ import { ref, computed } from 'vue'
|
|
|
2
2
|
import dayjs from 'dayjs'
|
|
3
3
|
import customParseFormat from 'dayjs/plugin/customParseFormat'
|
|
4
4
|
import { extractRangeParts as extractRangePartsUtil, hasRangeSeparator as hasRangeSeparatorUtil, isValidDateRange } from '../utils/dateFormattingUtils'
|
|
5
|
+
import { DATE_PICKER_MESSAGES } from '../constants/messages'
|
|
5
6
|
|
|
6
7
|
// Initialiser les plugins dayjs
|
|
7
8
|
dayjs.extend(customParseFormat)
|
|
@@ -23,7 +24,7 @@ export function useDateRangeInput(
|
|
|
23
24
|
// Stockage temporaire pour la deuxième date saisie
|
|
24
25
|
const secondDate = ref<Date | null>(null)
|
|
25
26
|
// Séparateur de plage
|
|
26
|
-
const rangeSeparator =
|
|
27
|
+
const rangeSeparator = DATE_PICKER_MESSAGES.RANGE_SEPARATOR
|
|
27
28
|
|
|
28
29
|
/**
|
|
29
30
|
* Vérifie si une chaîne de caractères contient un séparateur de plage
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ref } from 'vue'
|
|
2
2
|
import type { Ref } from 'vue'
|
|
3
|
+
import { DATE_PICKER_MESSAGES } from '../constants/messages'
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Composable pour gérer la sélection de dates dans les composants CalendarMode
|
|
@@ -101,7 +102,7 @@ export function useDateSelection(
|
|
|
101
102
|
}
|
|
102
103
|
else if (typeof input === 'string') {
|
|
103
104
|
// Mode plage de dates
|
|
104
|
-
const dates = input.split(
|
|
105
|
+
const dates = input.split(DATE_PICKER_MESSAGES.RANGE_SEPARATOR)
|
|
105
106
|
if (dates.length === 2) {
|
|
106
107
|
const startDate = parseDate(dates[0]!, format)
|
|
107
108
|
const endDate = parseDate(dates[1]!, format)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Ref } from 'vue'
|
|
2
2
|
import type { ValidationResult } from '@/composables/validation/useValidation'
|
|
3
|
-
import type {
|
|
3
|
+
import type { DateModelValue } from '@/composables/date/useDateInitializationDayjs'
|
|
4
4
|
import { useManualDateValidation } from './useManualDateValidation'
|
|
5
5
|
|
|
6
6
|
export interface UseDateTextFieldManualValidationOptions {
|
|
@@ -37,7 +37,7 @@ export interface UseDateTextFieldResetOptions {
|
|
|
37
37
|
inputValue: Ref<string>
|
|
38
38
|
selectedDates: Ref<unknown>
|
|
39
39
|
resetState: () => void
|
|
40
|
-
emitModel: (value:
|
|
40
|
+
emitModel: (value: DateModelValue) => void
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
export interface UseDateTextFieldOptions {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Ref, ref } from 'vue'
|
|
2
|
-
import { type
|
|
2
|
+
import { type DateModelValue } from '@/composables/date/useDateInitializationDayjs'
|
|
3
3
|
import { type DateObjectValue } from '../types'
|
|
4
4
|
import { DATE_PICKER_MESSAGES } from '../constants/messages'
|
|
5
5
|
|
|
@@ -27,7 +27,7 @@ export const useInputBlurHandler = (options: {
|
|
|
27
27
|
validateDateFormat: (dateStr: string) => { isValid: boolean, message: string }
|
|
28
28
|
parseDate: (dateStr: string, format: string) => Date | null
|
|
29
29
|
formatDate: (date: Date, format: string) => string
|
|
30
|
-
updateModel: (value:
|
|
30
|
+
updateModel: (value: DateModelValue) => void
|
|
31
31
|
validateManualInput: (value: string) => boolean | Promise<boolean>
|
|
32
32
|
|
|
33
33
|
// Émetteurs d'événements
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { mount } from '@vue/test-utils'
|
|
2
|
+
import { describe, it, expect } from 'vitest'
|
|
3
|
+
import DateTextInput from '../DateTextInput/DateTextInput.vue'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Tests pour couvrir les méthodes exposées (focus, blur)
|
|
7
|
+
* Zones non couvertes : DateTextInput.vue lignes 1138-1144
|
|
8
|
+
*/
|
|
9
|
+
describe('Exposed Methods Coverage Tests', () => {
|
|
10
|
+
/**
|
|
11
|
+
* Test 1 : Méthode focus() exposée
|
|
12
|
+
* Couvre ligne 1138-1140
|
|
13
|
+
*/
|
|
14
|
+
it('expose la méthode focus() pour le focus programmatique', async () => {
|
|
15
|
+
const wrapper = mount(DateTextInput, {
|
|
16
|
+
props: {
|
|
17
|
+
modelValue: '',
|
|
18
|
+
label: 'Date',
|
|
19
|
+
format: 'DD/MM/YYYY',
|
|
20
|
+
},
|
|
21
|
+
attachTo: document.body,
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
|
+
expect(typeof (wrapper.vm as any).focus).toBe('function')
|
|
26
|
+
// Appel réel pour couvrir le corps de la méthode (ligne 1139)
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
+
expect(() => (wrapper.vm as any).focus()).not.toThrow()
|
|
29
|
+
|
|
30
|
+
wrapper.unmount()
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Test 2 : Méthode blur() exposée
|
|
35
|
+
* Couvre ligne 1142-1144
|
|
36
|
+
*/
|
|
37
|
+
it('expose la méthode blur() pour le blur programmatique', async () => {
|
|
38
|
+
const wrapper = mount(DateTextInput, {
|
|
39
|
+
props: {
|
|
40
|
+
modelValue: '',
|
|
41
|
+
label: 'Date',
|
|
42
|
+
format: 'DD/MM/YYYY',
|
|
43
|
+
},
|
|
44
|
+
attachTo: document.body,
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
48
|
+
expect(typeof (wrapper.vm as any).blur).toBe('function')
|
|
49
|
+
// Appel réel pour couvrir le corps de la méthode (ligne 1142-1143)
|
|
50
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
51
|
+
expect(() => (wrapper.vm as any).blur()).not.toThrow()
|
|
52
|
+
|
|
53
|
+
wrapper.unmount()
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Test 3 : validateOnSubmit exposé
|
|
58
|
+
*/
|
|
59
|
+
it('expose validateOnSubmit pour validation externe', async () => {
|
|
60
|
+
const wrapper = mount(DateTextInput, {
|
|
61
|
+
props: {
|
|
62
|
+
modelValue: '',
|
|
63
|
+
label: 'Date',
|
|
64
|
+
format: 'DD/MM/YYYY',
|
|
65
|
+
required: true,
|
|
66
|
+
},
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
// La méthode doit exister
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
71
|
+
expect((wrapper.vm as any).validateOnSubmit).toBeDefined()
|
|
72
|
+
|
|
73
|
+
wrapper.unmount()
|
|
74
|
+
})
|
|
75
|
+
})
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
export type DateObjectValue = Date | (Date | null)[] | null
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
* @deprecated Utilisez DateObjectValue pour les objets Date ou importez DateValue depuis useDateInitializationDayjs pour les chaînes
|
|
12
|
+
* @deprecated Utilisez DateObjectValue pour les objets Date ou importez DateModelValue depuis useDateInitializationDayjs pour les chaînes
|
|
14
13
|
*/
|
|
15
14
|
export type DateValue = DateObjectValue
|
|
@@ -730,7 +730,7 @@ export const VuetifyOptions: Story = {
|
|
|
730
730
|
rounded: 'xl',
|
|
731
731
|
},
|
|
732
732
|
cardTitle: {
|
|
733
|
-
class: 'pa-5 mb-4
|
|
733
|
+
class: 'pa-5 mb-4 secondary--text',
|
|
734
734
|
},
|
|
735
735
|
closeBtn: {
|
|
736
736
|
class: {
|
|
@@ -738,14 +738,14 @@ export const VuetifyOptions: Story = {
|
|
|
738
738
|
},
|
|
739
739
|
},
|
|
740
740
|
icon: {
|
|
741
|
-
color: '
|
|
741
|
+
color: 'secondary',
|
|
742
742
|
},
|
|
743
743
|
cancelBtn: {
|
|
744
|
-
color: '
|
|
744
|
+
color: 'secondary',
|
|
745
745
|
text: false,
|
|
746
746
|
},
|
|
747
747
|
confirmBtn: {
|
|
748
|
-
color: '
|
|
748
|
+
color: 'secondary',
|
|
749
749
|
text: true,
|
|
750
750
|
},
|
|
751
751
|
},
|
|
@@ -813,7 +813,7 @@ export const VuetifyOptions: Story = {
|
|
|
813
813
|
rounded: 'xl',
|
|
814
814
|
},
|
|
815
815
|
cardTitle: {
|
|
816
|
-
class: 'pa-5 mb-4
|
|
816
|
+
class: 'pa-5 mb-4 secondary--text',
|
|
817
817
|
},
|
|
818
818
|
closeBtn: {
|
|
819
819
|
class: {
|
|
@@ -821,14 +821,14 @@ export const VuetifyOptions: Story = {
|
|
|
821
821
|
},
|
|
822
822
|
},
|
|
823
823
|
icon: {
|
|
824
|
-
color: '
|
|
824
|
+
color: 'secondary',
|
|
825
825
|
},
|
|
826
826
|
cancelBtn: {
|
|
827
|
-
color: '
|
|
827
|
+
color: 'secondary',
|
|
828
828
|
text: false,
|
|
829
829
|
},
|
|
830
830
|
confirmBtn: {
|
|
831
|
-
color: '
|
|
831
|
+
color: 'secondary',
|
|
832
832
|
text: true,
|
|
833
833
|
},
|
|
834
834
|
}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { Meta
|
|
1
|
+
import { Meta } from '@storybook/addon-docs';
|
|
2
2
|
import * as DialogBoxStories from '../DialogBox.stories.ts';
|
|
3
3
|
import '@/stories/styles/shared.css';
|
|
4
4
|
import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg';
|
|
5
|
+
|
|
5
6
|
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
BestPracticesSection,
|
|
11
|
-
ResourcesSection,
|
|
7
|
+
AccessibilityGuideLayout,
|
|
8
|
+
CriteriaSection,
|
|
9
|
+
CriteriaCard,
|
|
10
|
+
AuditSection
|
|
12
11
|
} from '@/stories/accessibility/AccessibilityGuideLayout.mdx';
|
|
13
12
|
|
|
14
13
|
<Meta of={DialogBoxStories} />
|
|
@@ -16,20 +15,85 @@ import {
|
|
|
16
15
|
componentName="DialogBox"
|
|
17
16
|
iconSrc={AccessibilityIcon}
|
|
18
17
|
>
|
|
19
|
-
<
|
|
20
|
-
<
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
</
|
|
33
|
-
|
|
18
|
+
<AuditSection>
|
|
19
|
+
<div>Rapport d’audit manuel : <a href="/audits/DialogBox.xlsx" style={{color: '#0C41BD'}}>Voir le rapport</a></div>
|
|
20
|
+
<div style={{color: 'grey', fontSize: '14px', marginTop: '0px'}}>
|
|
21
|
+
Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/798" target="_blank" style={{color: '#0C41BD'}}>issue #798</a>)
|
|
22
|
+
</div>
|
|
23
|
+
</AuditSection>
|
|
24
|
+
<CriteriaSection>
|
|
25
|
+
<CriteriaCard icon="🧩" title="Niveau de titre configurable via la prop headingLevel">
|
|
26
|
+
<ul>
|
|
27
|
+
<li>Le niveau du titre (h1 à h6) est défini grâce à la propriété <strong>headingLevel</strong> déclarée dans le composant. Si aucune valeur n’est fournie, le composant applique par défaut un titre de niveau h2, défini dans l’implémentation du composant.</li>
|
|
28
|
+
<code><DialogBox
|
|
29
|
+
:heading-level="2" /> </code>
|
|
30
|
+
|
|
31
|
+
<li><strong>Accessibilité</strong> : Permet que la hiérarchie entre les titres soit pertinente (critère 9.1.1 RGAA) </li>
|
|
32
|
+
|
|
33
|
+
<li>Si aucune valeur n’est fournie, le composant applique par défaut un titre de niveau<strong> h2</strong>.</li>
|
|
34
|
+
|
|
35
|
+
<li>Ce titre est rendu via le composant<strong> SyHeading</strong>, ce qui garantit une structure sémantique correcte dans le DOM.</li>
|
|
36
|
+
|
|
37
|
+
<li><strong>Accessibilité :</strong> permet de respecter une hiérarchie de titres cohérente et pertinente pour les technologies d’assistance (critère 9.1.1 RGAA).</li>
|
|
38
|
+
</ul>
|
|
39
|
+
</CriteriaCard>
|
|
40
|
+
|
|
41
|
+
<CriteriaCard icon="🎯" title="Gestion automatique du focus à l’ouverture et à la fermeture">
|
|
42
|
+
<ul>
|
|
43
|
+
<li>À l’ouverture de la modale, le focus est déplacé soit sur le bouton de validation (<strong>autofocusValidateBtn</strong>), soit sur la zone de titre si la modale est draggable.</li>
|
|
44
|
+
|
|
45
|
+
<li>À la fermeture, le focus est automatiquement restauré sur l’élément qui avait le focus avant l’ouverture.</li>
|
|
46
|
+
|
|
47
|
+
<li><strong>Accessibilité :</strong> évite la perte de contexte pour les utilisateurs clavier et lecteurs d’écran (critère 7.3 RGAA).</li>
|
|
48
|
+
</ul>
|
|
49
|
+
</CriteriaCard>
|
|
50
|
+
|
|
51
|
+
<CriteriaCard icon="⌨️" title="Piégeage du focus dans la boîte de dialogue">
|
|
52
|
+
<ul>
|
|
53
|
+
<li>La navigation clavier avec la touche<strong> Tab </strong>est maintenue à l’intérieur de la modale.</li>
|
|
54
|
+
|
|
55
|
+
<li>Le focus boucle automatiquement entre le premier et le dernier élément interactif.</li>
|
|
56
|
+
|
|
57
|
+
<li>La combinaison<strong> Shift + Tab </strong>est également gérée.</li>
|
|
58
|
+
|
|
59
|
+
<li><strong>Accessibilité :</strong> empêche la sortie involontaire du focus hors de la fenêtre modale (critère 7.1 RGAA).</li>
|
|
60
|
+
</ul>
|
|
61
|
+
</CriteriaCard>
|
|
62
|
+
|
|
63
|
+
<CriteriaCard icon="🏷️" title="Association correcte du titre avec aria-labelledby">
|
|
64
|
+
<ul>
|
|
65
|
+
<li>Le composant utilise un identifiant unique généré avec <strong>useId() </strong>.</li>
|
|
66
|
+
|
|
67
|
+
<li>Cet identifiant est appliqué au titre et référencé via <strong> aria-labelledby </strong>sur le composant dialog.</li>
|
|
68
|
+
|
|
69
|
+
<li>Le composant déclare également<strong> aria-modal="true" </strong>.</li>
|
|
70
|
+
|
|
71
|
+
<li><strong>Accessibilité :</strong> permet aux lecteurs d’écran d’annoncer correctement le contexte de la fenêtre modale (critère 7.1 RGAA).</li>
|
|
72
|
+
</ul>
|
|
73
|
+
</CriteriaCard>
|
|
74
|
+
|
|
75
|
+
<CriteriaCard icon="✋" title="Support clavier du mode draggable">
|
|
76
|
+
<ul>
|
|
77
|
+
<li>Lorsque la prop<strong> draggable </strong>est activée, le titre devient focusable avec <strong>tabindex="0"</strong>.</li>
|
|
78
|
+
|
|
79
|
+
<li>Le déplacement peut être réalisé avec les flèches clavier (gauche, droite, haut, bas).</li>
|
|
80
|
+
|
|
81
|
+
<li>Des attributs<strong> title </strong>et <strong> aria-label </strong>expliquent l’usage aux utilisateurs.</li>
|
|
82
|
+
|
|
83
|
+
<li><strong>Accessibilité :</strong> rend le déplacement utilisable sans souris et améliore l’accessibilité fonctionnelle.</li>
|
|
84
|
+
</ul>
|
|
85
|
+
</CriteriaCard>
|
|
86
|
+
|
|
87
|
+
<CriteriaCard icon="❌" title="Bouton de fermeture explicite et accessible">
|
|
88
|
+
<ul>
|
|
89
|
+
<li>Le bouton de fermeture possède un<strong> aria-label </strong>explicite.</li>
|
|
90
|
+
|
|
91
|
+
<li>L’icône est décorative (<strong>decorative=true</strong>) pour éviter une lecture redondante.</li>
|
|
92
|
+
|
|
93
|
+
<li>Le style de focus visible est renforcé pour garantir une navigation clavier claire.</li>
|
|
34
94
|
|
|
95
|
+
<li><strong>Accessibilité :</strong> assure une identification immédiate de l’action de fermeture (critère 11.10 RGAA).</li>
|
|
96
|
+
</ul>
|
|
97
|
+
</CriteriaCard>
|
|
98
|
+
</CriteriaSection>
|
|
35
99
|
</AccessibilityGuideLayout>
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
v-else-if="state === 'success'"
|
|
98
98
|
:icon="mdiCheckCircle"
|
|
99
99
|
:size="cnamContextualTokens.iconSize.default"
|
|
100
|
-
color="
|
|
100
|
+
color="onSuccessVariant"
|
|
101
101
|
decorative
|
|
102
102
|
/>
|
|
103
103
|
|
|
@@ -211,7 +211,7 @@
|
|
|
211
211
|
flex-direction: column;
|
|
212
212
|
gap: var(--v-gap-3);
|
|
213
213
|
padding-block: var(--v-padding-4);
|
|
214
|
-
border-bottom: 1px solid rgb(var(--v-theme-
|
|
214
|
+
border-bottom: 1px solid rgb(var(--v-theme-disabled));
|
|
215
215
|
|
|
216
216
|
&:first-child:last-child {
|
|
217
217
|
border-bottom: none;
|
|
@@ -224,7 +224,7 @@
|
|
|
224
224
|
|
|
225
225
|
.file-item__name {
|
|
226
226
|
font-size: 0.875rem;
|
|
227
|
-
color: rgb(var(--v-theme-
|
|
227
|
+
color: rgb(var(--v-theme-onSurface));
|
|
228
228
|
}
|
|
229
229
|
|
|
230
230
|
.file-item__description {
|
|
@@ -278,7 +278,7 @@
|
|
|
278
278
|
|
|
279
279
|
.file-item__message {
|
|
280
280
|
font-size: 0.875rem;
|
|
281
|
-
color: rgb(var(--v-theme-
|
|
281
|
+
color: rgb(var(--v-theme-onSurfaceVariant));
|
|
282
282
|
}
|
|
283
283
|
|
|
284
284
|
.file-item__message-success,
|
|
@@ -174,14 +174,14 @@
|
|
|
174
174
|
.sy-file-upload {
|
|
175
175
|
cursor: pointer;
|
|
176
176
|
position: relative;
|
|
177
|
-
border: 1px dashed rgb(var(--v-theme-
|
|
177
|
+
border: 1px dashed rgb(var(--v-theme-primary));
|
|
178
178
|
border-radius: var(--v-radius-roundedLg);
|
|
179
179
|
transition: background 0.25s;
|
|
180
180
|
|
|
181
181
|
&:hover,
|
|
182
182
|
&:focus-within,
|
|
183
183
|
&.dragover {
|
|
184
|
-
background: rgb(var(--v-theme-
|
|
184
|
+
background: rgb(var(--v-theme-surfaceDim));
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
&.dark-mode {
|
|
@@ -6,7 +6,7 @@ import * as FilterSideBarStories from '@/components/FilterSideBar/FilterSideBar.
|
|
|
6
6
|
|
|
7
7
|
<div className="header">
|
|
8
8
|
<h1>FilterInline</h1>
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
</div><Canvas of={FilterInlineStories.Default} />
|
|
11
11
|
|
|
12
12
|
# API
|
|
@@ -135,7 +135,7 @@ const professionList = [
|
|
|
135
135
|
value: 'pharmacien',
|
|
136
136
|
},
|
|
137
137
|
]
|
|
138
|
-
|
|
138
|
+
|
|
139
139
|
</script>
|
|
140
140
|
|
|
141
141
|
<template>
|
|
@@ -486,7 +486,7 @@ export const FilterCombination: Story = {
|
|
|
486
486
|
decorators: [
|
|
487
487
|
() => ({
|
|
488
488
|
template: `
|
|
489
|
-
<VApp style="height: 500px; overflow-y: hidden;">
|
|
489
|
+
<VApp style="height: 500px; overflow-y: hidden; background: none">
|
|
490
490
|
<div class="pa-4">
|
|
491
491
|
<story />
|
|
492
492
|
</div>
|