@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
|
@@ -4,9 +4,8 @@
|
|
|
4
4
|
inheritAttrs: false,
|
|
5
5
|
})
|
|
6
6
|
import { mdiAlertCircle, mdiAlertOutline, mdiCheck, mdiChevronDown, mdiClose, mdiCloseCircle, mdiInformationOutline } from '@mdi/js'
|
|
7
|
-
import { ref, watch, watchEffect, onMounted, onBeforeUnmount, computed, nextTick, useAttrs
|
|
7
|
+
import { ref, watch, watchEffect, onMounted, onBeforeUnmount, computed, nextTick, useAttrs } from 'vue'
|
|
8
8
|
import { useSySelectKeyboard } from './composables/useSySelectKeyboard'
|
|
9
|
-
import { useValidatable } from '@/composables/validation/useValidatable'
|
|
10
9
|
import type { ColorType, IconType, VariantStyle } from '@/types/vuetifyTypes'
|
|
11
10
|
import type { VList, VTextField } from 'vuetify/components'
|
|
12
11
|
import { VChip } from 'vuetify/components'
|
|
@@ -14,6 +13,8 @@
|
|
|
14
13
|
import IconSlot from '@/components/Common/IconSlot/IconSlot.vue'
|
|
15
14
|
import SyIcon from '@/components/Customs/SyIcon/SyIcon.vue'
|
|
16
15
|
import { locales } from './locales'
|
|
16
|
+
import { validationPropsDefaults, type FieldValidationProps } from '@/composables/unifyValidation/useValidation'
|
|
17
|
+
import { useSySelectValidation } from './composables/useSySelectValidation'
|
|
17
18
|
|
|
18
19
|
export type ItemType = {
|
|
19
20
|
[key: string]: unknown
|
|
@@ -22,147 +23,71 @@
|
|
|
22
23
|
export type SelectItemValueType = Record<string, unknown> | string | number | null | undefined
|
|
23
24
|
export type SelectItemArrayType = Array<Record<string, unknown> | string | number>
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
const props = withDefaults(
|
|
27
|
+
defineProps<{
|
|
28
|
+
modelValue?: Record<string, unknown> | string | number | null | SelectItemArrayType
|
|
29
|
+
items?: ItemType[]
|
|
30
|
+
label?: string
|
|
31
|
+
menuId?: string
|
|
32
|
+
outlined?: boolean
|
|
33
|
+
variantStyle?: VariantStyle
|
|
34
|
+
color?: ColorType
|
|
35
|
+
textKey?: string
|
|
36
|
+
plainTextKey?: string
|
|
37
|
+
valueKey?: string
|
|
38
|
+
displayAsterisk?: boolean
|
|
39
|
+
returnObject?: boolean
|
|
40
|
+
density?: 'default' | 'comfortable' | 'compact'
|
|
41
|
+
bgColor?: string
|
|
42
|
+
clearable?: boolean
|
|
43
|
+
hideDetails?: boolean
|
|
44
|
+
width?: string
|
|
45
|
+
multiple?: boolean
|
|
46
|
+
chips?: boolean
|
|
47
|
+
helpText?: string
|
|
48
|
+
allowHtml?: boolean
|
|
49
|
+
autocomplete?: 'on' | 'off' | string
|
|
50
|
+
prependIcon?: IconType
|
|
51
|
+
appendIcon?: IconType
|
|
52
|
+
prependTooltip?: string
|
|
53
|
+
appendTooltip?: string
|
|
54
|
+
tooltipLocation?: 'top' | 'bottom' | 'start' | 'end'
|
|
55
|
+
noIcon?: boolean
|
|
56
|
+
disableClickButton?: boolean
|
|
57
|
+
} & FieldValidationProps>(),
|
|
58
|
+
{
|
|
59
|
+
modelValue: null,
|
|
60
|
+
items: () => [],
|
|
61
|
+
label: 'Sélectionnez une option',
|
|
62
|
+
menuId: 'sy-select-menu',
|
|
63
|
+
outlined: true,
|
|
64
|
+
variantStyle: undefined,
|
|
65
|
+
color: 'primary',
|
|
66
|
+
textKey: 'text',
|
|
67
|
+
plainTextKey: '',
|
|
68
|
+
valueKey: 'value',
|
|
69
|
+
displayAsterisk: false,
|
|
70
|
+
returnObject: false,
|
|
71
|
+
density: 'default',
|
|
72
|
+
bgColor: 'white',
|
|
73
|
+
clearable: false,
|
|
74
|
+
hideDetails: false,
|
|
75
|
+
width: 'undefined',
|
|
76
|
+
multiple: false,
|
|
77
|
+
chips: false,
|
|
78
|
+
helpText: '',
|
|
79
|
+
allowHtml: false,
|
|
80
|
+
autocomplete: 'on',
|
|
81
|
+
prependIcon: undefined,
|
|
82
|
+
appendIcon: undefined,
|
|
83
|
+
prependTooltip: undefined,
|
|
84
|
+
appendTooltip: undefined,
|
|
85
|
+
tooltipLocation: 'top',
|
|
86
|
+
noIcon: false,
|
|
87
|
+
disableClickButton: true,
|
|
88
|
+
...validationPropsDefaults,
|
|
32
89
|
},
|
|
33
|
-
|
|
34
|
-
type: Array as PropType<ItemType[]>,
|
|
35
|
-
default: () => [],
|
|
36
|
-
},
|
|
37
|
-
label: {
|
|
38
|
-
type: String,
|
|
39
|
-
default: 'Sélectionnez une option',
|
|
40
|
-
},
|
|
41
|
-
errorMessages: {
|
|
42
|
-
type: [String, Array] as PropType<string | readonly string[]>,
|
|
43
|
-
default: () => [],
|
|
44
|
-
},
|
|
45
|
-
required: {
|
|
46
|
-
type: Boolean,
|
|
47
|
-
default: false,
|
|
48
|
-
},
|
|
49
|
-
disabled: {
|
|
50
|
-
type: Boolean,
|
|
51
|
-
default: false,
|
|
52
|
-
},
|
|
53
|
-
menuId: {
|
|
54
|
-
type: String,
|
|
55
|
-
default: 'sy-select-menu',
|
|
56
|
-
},
|
|
57
|
-
outlined: {
|
|
58
|
-
type: Boolean,
|
|
59
|
-
default: true,
|
|
60
|
-
},
|
|
61
|
-
variantStyle: {
|
|
62
|
-
type: String as PropType<VariantStyle | undefined>,
|
|
63
|
-
default: undefined,
|
|
64
|
-
},
|
|
65
|
-
color: {
|
|
66
|
-
type: String as PropType<ColorType>,
|
|
67
|
-
default: 'primary',
|
|
68
|
-
},
|
|
69
|
-
textKey: {
|
|
70
|
-
type: String,
|
|
71
|
-
default: 'text',
|
|
72
|
-
},
|
|
73
|
-
plainTextKey: {
|
|
74
|
-
type: String,
|
|
75
|
-
default: '',
|
|
76
|
-
},
|
|
77
|
-
valueKey: {
|
|
78
|
-
type: String,
|
|
79
|
-
default: 'value',
|
|
80
|
-
},
|
|
81
|
-
displayAsterisk: {
|
|
82
|
-
type: Boolean,
|
|
83
|
-
default: false,
|
|
84
|
-
},
|
|
85
|
-
returnObject: {
|
|
86
|
-
type: Boolean,
|
|
87
|
-
default: false,
|
|
88
|
-
},
|
|
89
|
-
disableErrorHandling: {
|
|
90
|
-
type: Boolean,
|
|
91
|
-
default: false,
|
|
92
|
-
},
|
|
93
|
-
density: {
|
|
94
|
-
type: String as PropType<'default' | 'comfortable' | 'compact' | undefined>,
|
|
95
|
-
default: 'default',
|
|
96
|
-
},
|
|
97
|
-
bgColor: {
|
|
98
|
-
type: String,
|
|
99
|
-
default: 'white',
|
|
100
|
-
},
|
|
101
|
-
readonly: {
|
|
102
|
-
type: Boolean,
|
|
103
|
-
default: false,
|
|
104
|
-
},
|
|
105
|
-
clearable: {
|
|
106
|
-
type: Boolean,
|
|
107
|
-
default: false,
|
|
108
|
-
},
|
|
109
|
-
hideMessages: {
|
|
110
|
-
type: Boolean,
|
|
111
|
-
default: false,
|
|
112
|
-
},
|
|
113
|
-
width: {
|
|
114
|
-
type: String,
|
|
115
|
-
default: 'undefined',
|
|
116
|
-
},
|
|
117
|
-
multiple: {
|
|
118
|
-
type: Boolean,
|
|
119
|
-
default: false,
|
|
120
|
-
},
|
|
121
|
-
chips: {
|
|
122
|
-
type: Boolean,
|
|
123
|
-
default: false,
|
|
124
|
-
},
|
|
125
|
-
helpText: {
|
|
126
|
-
type: String,
|
|
127
|
-
default: '',
|
|
128
|
-
},
|
|
129
|
-
allowHtml: {
|
|
130
|
-
type: Boolean,
|
|
131
|
-
default: false,
|
|
132
|
-
},
|
|
133
|
-
autocomplete: {
|
|
134
|
-
type: String as PropType<'on' | 'off' | undefined | string>,
|
|
135
|
-
default: 'on',
|
|
136
|
-
},
|
|
137
|
-
prependIcon: {
|
|
138
|
-
type: String as PropType<IconType>,
|
|
139
|
-
default: undefined,
|
|
140
|
-
},
|
|
141
|
-
appendIcon: {
|
|
142
|
-
type: String as PropType<IconType>,
|
|
143
|
-
default: undefined,
|
|
144
|
-
},
|
|
145
|
-
prependTooltip: {
|
|
146
|
-
type: String,
|
|
147
|
-
default: undefined,
|
|
148
|
-
},
|
|
149
|
-
appendTooltip: {
|
|
150
|
-
type: String,
|
|
151
|
-
default: undefined,
|
|
152
|
-
},
|
|
153
|
-
tooltipLocation: {
|
|
154
|
-
type: String as PropType<'top' | 'bottom' | 'start' | 'end'>,
|
|
155
|
-
default: 'top',
|
|
156
|
-
},
|
|
157
|
-
noIcon: {
|
|
158
|
-
type: Boolean,
|
|
159
|
-
default: false,
|
|
160
|
-
},
|
|
161
|
-
disableClickButton: {
|
|
162
|
-
type: Boolean,
|
|
163
|
-
default: true,
|
|
164
|
-
},
|
|
165
|
-
})
|
|
90
|
+
)
|
|
166
91
|
|
|
167
92
|
// pr récupérer proprement aria-label
|
|
168
93
|
const attrs = useAttrs()
|
|
@@ -195,8 +120,10 @@
|
|
|
195
120
|
const disableClickButton = computed(() => props.disableClickButton)
|
|
196
121
|
|
|
197
122
|
const iconColor = computed(() => {
|
|
198
|
-
if (hasError.value
|
|
199
|
-
|
|
123
|
+
if (hasError.value) return 'error'
|
|
124
|
+
if (hasWarning.value) return 'onWarningVariant'
|
|
125
|
+
if (hasSuccess.value) return 'onSuccessVariant'
|
|
126
|
+
return 'rgb(var(--v-theme-onSurface))'
|
|
200
127
|
})
|
|
201
128
|
|
|
202
129
|
const variant = computed(() => {
|
|
@@ -207,9 +134,10 @@
|
|
|
207
134
|
const isOpen = ref(false)
|
|
208
135
|
// Initialize selectedItem with props.modelValue or empty array for multiple mode
|
|
209
136
|
const selectedItem = ref<SelectItemValueType | SelectItemArrayType>(props.modelValue)
|
|
210
|
-
const hasError = ref(false)
|
|
211
137
|
const menuMinWidth = ref<number | null>(null)
|
|
212
138
|
|
|
139
|
+
const { focused, validate, clearValidation, errors, warnings, successes, hasError, hasWarning, hasSuccess, validationIcon } = useSySelectValidation(props)
|
|
140
|
+
|
|
213
141
|
const labelWidth = ref(0)
|
|
214
142
|
const labelRef = ref<HTMLElement | null>(null)
|
|
215
143
|
const list = ref<VList | null>(null)
|
|
@@ -262,7 +190,7 @@
|
|
|
262
190
|
// text d'aide
|
|
263
191
|
const helpTextId = computed(() => `${inputId.value}-help`)
|
|
264
192
|
// messages d'erreur, success avertissement
|
|
265
|
-
const messagesId = computed(() => `${inputId.value}-messages`)
|
|
193
|
+
const messagesId = computed(() => `${inputId.value}-sr-messages`)
|
|
266
194
|
// live region pour le lecteur ecran
|
|
267
195
|
const liveRegionId = computed(() => `${inputId.value}-live`)
|
|
268
196
|
// un libellé caché pour la popup/grid
|
|
@@ -315,6 +243,7 @@
|
|
|
315
243
|
if (item === null || item === undefined) {
|
|
316
244
|
selectedItem.value = props.multiple ? [] : null
|
|
317
245
|
emit('update:modelValue', props.multiple ? [] : null)
|
|
246
|
+
clearValidation()
|
|
318
247
|
|
|
319
248
|
// Garder la liste ouverte après une suppression et réinitialiser la navigation au clavier
|
|
320
249
|
const target = event?.target as HTMLElement | undefined
|
|
@@ -500,12 +429,25 @@
|
|
|
500
429
|
return !props.chips && props.multiple && Array.isArray(selectedItem.value) && (selectedItem.value as unknown[]).length > 0
|
|
501
430
|
})
|
|
502
431
|
|
|
432
|
+
const hasSingleSelection = computed(() => {
|
|
433
|
+
return !props.multiple && selectedItem.value !== null && selectedItem.value !== undefined && selectedItemText.value !== ''
|
|
434
|
+
})
|
|
435
|
+
|
|
503
436
|
const hasSelectionToClear = computed(() => {
|
|
504
437
|
return props.multiple
|
|
505
438
|
? (((selectedItem.value as unknown[] | null | undefined)?.length) ?? 0) > 0
|
|
506
439
|
: selectedItem.value != null
|
|
507
440
|
})
|
|
508
441
|
|
|
442
|
+
const isFieldActive = computed(() => {
|
|
443
|
+
return hasChips.value
|
|
444
|
+
|| hasMultipleSelections.value
|
|
445
|
+
|| hasSingleSelection.value
|
|
446
|
+
|| isOpen.value
|
|
447
|
+
|| focused.value
|
|
448
|
+
|| hasMessages.value
|
|
449
|
+
})
|
|
450
|
+
|
|
509
451
|
const labelWithAsterisk = computed(() => {
|
|
510
452
|
return isShouldDisplayAsterisk.value ? `${props.label} *` : props.label
|
|
511
453
|
})
|
|
@@ -520,15 +462,14 @@
|
|
|
520
462
|
})
|
|
521
463
|
|
|
522
464
|
const isRequired = computed(() => {
|
|
523
|
-
if (props.
|
|
524
|
-
|
|
525
|
-
return (props.required || props.errorMessages.length > 0) && !selectedItem.value
|
|
465
|
+
if (props.readonly) return false
|
|
466
|
+
return props.required === true
|
|
526
467
|
})
|
|
527
468
|
|
|
528
469
|
// Détecte s'il y a des messages d'erreur, de succès ou d'avertissement
|
|
529
470
|
const hasMessages = computed(() => {
|
|
530
471
|
if (props.disableErrorHandling) return false
|
|
531
|
-
return
|
|
472
|
+
return hasError.value || hasWarning.value || hasSuccess.value
|
|
532
473
|
})
|
|
533
474
|
|
|
534
475
|
// Détermine si le helpText doit être affiché à la position du message ou en dessous
|
|
@@ -538,8 +479,8 @@
|
|
|
538
479
|
})
|
|
539
480
|
|
|
540
481
|
const showHelpTextBelow = computed(() => {
|
|
541
|
-
// Afficher en dessous si il y a des messages d'erreur ET
|
|
542
|
-
return props.helpText && hasMessages.value && !props.
|
|
482
|
+
// Afficher en dessous si il y a des messages d'erreur ET hideDetails n'est pas activé
|
|
483
|
+
return props.helpText && hasMessages.value && !props.hideDetails
|
|
543
484
|
})
|
|
544
485
|
|
|
545
486
|
// Ici on calcule dynamiquement la liste des ids à rattacher à l'input :
|
|
@@ -551,11 +492,11 @@
|
|
|
551
492
|
ids.push(helpTextId.value)
|
|
552
493
|
}
|
|
553
494
|
// messages affichés
|
|
554
|
-
if (!props.
|
|
495
|
+
if (!props.hideDetails && hasMessages.value) {
|
|
555
496
|
ids.push(messagesId.value)
|
|
556
497
|
}
|
|
557
498
|
// live region si erreur
|
|
558
|
-
if (hasError.value ||
|
|
499
|
+
if (hasError.value || errors.value.length > 0) {
|
|
559
500
|
ids.push(liveRegionId.value)
|
|
560
501
|
}
|
|
561
502
|
|
|
@@ -578,21 +519,13 @@
|
|
|
578
519
|
return undefined
|
|
579
520
|
})
|
|
580
521
|
|
|
581
|
-
const validationRules = computed(() => {
|
|
582
|
-
return hasError.value && !props.disableErrorHandling ? ['Le champ est requis.'] : []
|
|
583
|
-
})
|
|
584
|
-
|
|
585
522
|
const menuTarget = computed<HTMLElement | undefined>(() => {
|
|
586
523
|
const rootEl = textInput.value?.$el as HTMLElement | undefined
|
|
587
524
|
if (!rootEl) return undefined
|
|
588
525
|
return (rootEl.querySelector('.v-field') as HTMLElement | null) ?? rootEl
|
|
589
526
|
})
|
|
590
527
|
|
|
591
|
-
const formattedErrorMessages = computed(() =>
|
|
592
|
-
return Array.isArray(props.errorMessages)
|
|
593
|
-
? props.errorMessages.join(' ')
|
|
594
|
-
: props.errorMessages
|
|
595
|
-
})
|
|
528
|
+
const formattedErrorMessages = computed(() => errors.value.join(' '))
|
|
596
529
|
|
|
597
530
|
const liveRegionMessage = computed(() => {
|
|
598
531
|
if (!hasError.value) return ''
|
|
@@ -720,35 +653,6 @@
|
|
|
720
653
|
}
|
|
721
654
|
}
|
|
722
655
|
|
|
723
|
-
watch(isOpen, (newIsOpen) => {
|
|
724
|
-
if (!newIsOpen) {
|
|
725
|
-
// Valider uniquement à la fermeture du menu
|
|
726
|
-
if (props.disableErrorHandling || props.readonly) {
|
|
727
|
-
hasError.value = false
|
|
728
|
-
}
|
|
729
|
-
else {
|
|
730
|
-
const shouldHaveError = (!selectedItem.value && isRequired.value) || props.errorMessages.length > 0
|
|
731
|
-
hasError.value = shouldHaveError
|
|
732
|
-
|
|
733
|
-
// Forcer la validation du VTextField avec nextTick pour que le DOM soit à jour
|
|
734
|
-
nextTick(() => {
|
|
735
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
736
|
-
if (textInput.value && (textInput.value as any).validate) {
|
|
737
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
738
|
-
;(textInput.value as any).validate()
|
|
739
|
-
}
|
|
740
|
-
})
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
// Ne rien faire à l'ouverture pour préserver l'état actuel
|
|
744
|
-
})
|
|
745
|
-
|
|
746
|
-
watch(() => props.errorMessages, (newValue) => {
|
|
747
|
-
if (!props.disableErrorHandling) {
|
|
748
|
-
hasError.value = newValue.length > 0
|
|
749
|
-
}
|
|
750
|
-
})
|
|
751
|
-
|
|
752
656
|
const ariaManager = {
|
|
753
657
|
cleanInputAttributes(inputElement: HTMLElement): void {
|
|
754
658
|
if (!inputElement) return
|
|
@@ -886,6 +790,8 @@
|
|
|
886
790
|
watch(isOpen, async (newValue) => {
|
|
887
791
|
await nextTick()
|
|
888
792
|
|
|
793
|
+
focused.value = newValue
|
|
794
|
+
|
|
889
795
|
if (!textInput.value || !textInput.value.$el) return
|
|
890
796
|
|
|
891
797
|
setupAriaAttributes()
|
|
@@ -937,25 +843,6 @@
|
|
|
937
843
|
})
|
|
938
844
|
}, { deep: true })
|
|
939
845
|
|
|
940
|
-
// Méthode de validation pour l'enregistrement avec le système de validation du formulaire
|
|
941
|
-
const validateOnSubmit = (): boolean => {
|
|
942
|
-
// Si en mode readonly ou si la gestion d'erreur est désactivée, toujours valide
|
|
943
|
-
if (props.readonly || props.disableErrorHandling) {
|
|
944
|
-
return true
|
|
945
|
-
}
|
|
946
|
-
|
|
947
|
-
// Vérifier si une valeur est sélectionnée quand le champ est requis
|
|
948
|
-
const isValid = !isRequired.value
|
|
949
|
-
|
|
950
|
-
// Mettre à jour l'état d'erreur
|
|
951
|
-
hasError.value = !isValid || props.errorMessages.length > 0
|
|
952
|
-
|
|
953
|
-
return isValid
|
|
954
|
-
}
|
|
955
|
-
|
|
956
|
-
// Intégration avec le système de validation du formulaire
|
|
957
|
-
useValidatable(validateOnSubmit)
|
|
958
|
-
|
|
959
846
|
watch(isOpen, () => {
|
|
960
847
|
nextTick(() => {
|
|
961
848
|
updateMenuMinWidth()
|
|
@@ -970,7 +857,7 @@
|
|
|
970
857
|
defineExpose({
|
|
971
858
|
isOpen,
|
|
972
859
|
closeList,
|
|
973
|
-
validateOnSubmit,
|
|
860
|
+
validateOnSubmit: validate,
|
|
974
861
|
})
|
|
975
862
|
|
|
976
863
|
// on reprend la mm methode que pour le datepicker : useDatePickerAccesssibity (updateAccessibility)
|
|
@@ -1015,6 +902,14 @@
|
|
|
1015
902
|
}
|
|
1016
903
|
}
|
|
1017
904
|
|
|
905
|
+
const onBlur = () => {
|
|
906
|
+
// Trigger blur validation only when focus truly leaves the component.
|
|
907
|
+
// Skip if the menu is open — focus is moving to the dropdown list, not exiting.
|
|
908
|
+
if (!isOpen.value) {
|
|
909
|
+
validate()
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
|
|
1018
913
|
return {
|
|
1019
914
|
...activatorProps,
|
|
1020
915
|
onKeydown: undefined,
|
|
@@ -1024,7 +919,8 @@
|
|
|
1024
919
|
textInput.value = el
|
|
1025
920
|
activatorProps.ref?.(el)
|
|
1026
921
|
},
|
|
1027
|
-
onFocus
|
|
922
|
+
onFocus,
|
|
923
|
+
onBlur,
|
|
1028
924
|
}
|
|
1029
925
|
}
|
|
1030
926
|
</script>
|
|
@@ -1058,19 +954,26 @@
|
|
|
1058
954
|
:disabled="disabled"
|
|
1059
955
|
:label="labelWithAsterisk"
|
|
1060
956
|
:aria-label="accessibleLabel"
|
|
1061
|
-
:error
|
|
957
|
+
:error="hasError"
|
|
958
|
+
:error-messages="errors"
|
|
959
|
+
:messages="hasError ? errors : (hasWarning ? warnings : (hasSuccess && props.showSuccessMessages ? successes : undefined))"
|
|
1062
960
|
:variant="variant"
|
|
1063
|
-
:rules="validationRules"
|
|
1064
961
|
:bg-color="props.bgColor"
|
|
1065
962
|
:density="props.density"
|
|
1066
|
-
:active="
|
|
963
|
+
:active="isFieldActive"
|
|
1067
964
|
readonly
|
|
1068
|
-
:hide-details="props.
|
|
965
|
+
:hide-details="props.hideDetails && !showHelpTextAsMessage"
|
|
1069
966
|
:hint="showHelpTextAsMessage ? props.helpText : ''"
|
|
1070
967
|
:persistent-hint="!!showHelpTextAsMessage"
|
|
1071
968
|
:autocomplete="props.autocomplete"
|
|
1072
969
|
:width="calculatedWidth"
|
|
1073
970
|
:style="hasError ? { minWidth: `${labelWidth + 18}px`} : { minWidth: `${labelWidth}px` }"
|
|
971
|
+
:class="{
|
|
972
|
+
'error-field': hasError,
|
|
973
|
+
'warning-field': hasWarning,
|
|
974
|
+
'success-field': hasSuccess,
|
|
975
|
+
'basic-field': !hasError && !hasWarning && !hasSuccess,
|
|
976
|
+
}"
|
|
1074
977
|
v-bind="{
|
|
1075
978
|
...Object.fromEntries(Object.entries($attrs).filter(([key]) => key !== 'display-asterisk')),
|
|
1076
979
|
...initializeActivatorProps(activatorProps),
|
|
@@ -1165,19 +1068,18 @@
|
|
|
1165
1068
|
|
|
1166
1069
|
<template #append-inner>
|
|
1167
1070
|
<SyIcon
|
|
1168
|
-
v-if="
|
|
1071
|
+
v-if="validationIcon"
|
|
1169
1072
|
class="mr-6"
|
|
1170
|
-
color="error"
|
|
1171
|
-
:icon="
|
|
1172
|
-
:decorative="
|
|
1173
|
-
|
|
1174
|
-
role="img"
|
|
1073
|
+
:color="hasError ? 'error' : (hasWarning ? 'warning' : 'success')"
|
|
1074
|
+
:icon="validationIcon"
|
|
1075
|
+
:decorative="true"
|
|
1076
|
+
role="presentation"
|
|
1175
1077
|
/>
|
|
1176
1078
|
<button
|
|
1177
1079
|
v-if="props.clearable && hasSelectionToClear"
|
|
1178
1080
|
type="button"
|
|
1179
1081
|
class="sy-select__clear-button"
|
|
1180
|
-
:style="{ right: hasError ? '62px' : '42px' }"
|
|
1082
|
+
:style="{ right: (hasError || hasWarning || hasSuccess) ? '62px' : '42px' }"
|
|
1181
1083
|
:aria-label="locales.clear"
|
|
1182
1084
|
@keydown.enter.prevent="$event => selectItem(null, $event)"
|
|
1183
1085
|
@keydown.space.prevent="$event => selectItem(null, $event)"
|
|
@@ -1297,11 +1199,11 @@
|
|
|
1297
1199
|
</div>
|
|
1298
1200
|
|
|
1299
1201
|
<div
|
|
1300
|
-
v-if="!props.
|
|
1202
|
+
v-if="!props.hideDetails && hasMessages"
|
|
1301
1203
|
:id="messagesId"
|
|
1302
1204
|
class="d-sr-only"
|
|
1303
1205
|
>
|
|
1304
|
-
{{
|
|
1206
|
+
{{ hasError ? errors.join(' ') : (hasWarning ? warnings.join(' ') : successes.join(' ')) }}
|
|
1305
1207
|
</div>
|
|
1306
1208
|
|
|
1307
1209
|
<div
|
|
@@ -1335,17 +1237,128 @@
|
|
|
1335
1237
|
|
|
1336
1238
|
:deep(.v-input__prepend > .v-icon__svg),
|
|
1337
1239
|
:deep(.v-input__append > .v-icon__svg) {
|
|
1338
|
-
fill: rgb(var(--v-theme-
|
|
1240
|
+
fill: rgb(var(--v-theme-onSurface));
|
|
1339
1241
|
}
|
|
1340
1242
|
|
|
1341
1243
|
:deep(.v-input__prepend .v-icon:focus-visible),
|
|
1342
1244
|
:deep(.v-input__append .v-icon:focus-visible) {
|
|
1343
|
-
outline: 2px solid rgb(var(--v-theme-
|
|
1245
|
+
outline: 2px solid rgb(var(--v-theme-primary));
|
|
1344
1246
|
outline-offset: 2px;
|
|
1345
1247
|
opacity: 1;
|
|
1346
1248
|
}
|
|
1347
1249
|
}
|
|
1348
1250
|
|
|
1251
|
+
.warning-field {
|
|
1252
|
+
:deep(.v-icon__svg) {
|
|
1253
|
+
fill: rgb(var(--v-theme-onWarningVariant)) !important;
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1256
|
+
:deep(.v-icon.arrow) {
|
|
1257
|
+
color: rgb(var(--v-theme-primary)) !important;
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
:deep(.v-icon.arrow .v-icon__svg) {
|
|
1261
|
+
fill: rgb(var(--v-theme-primary)) !important;
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
:deep(.sy-select__clear-icon .v-icon__svg) {
|
|
1265
|
+
fill: rgb(var(--v-theme-primary)) !important;
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1268
|
+
:deep(.v-field) {
|
|
1269
|
+
color: rgb(var(--v-theme-onWarningVariant)) !important;
|
|
1270
|
+
|
|
1271
|
+
--v-medium-emphasis-opacity: 1;
|
|
1272
|
+
|
|
1273
|
+
.v-field__outline {
|
|
1274
|
+
--v-field-border-opacity: 1;
|
|
1275
|
+
|
|
1276
|
+
color: rgb(var(--v-theme-onWarningVariant)) !important;
|
|
1277
|
+
}
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
:deep(.v-messages) {
|
|
1281
|
+
opacity: 1 !important;
|
|
1282
|
+
|
|
1283
|
+
.v-messages__message {
|
|
1284
|
+
color: rgb(var(--v-theme-onWarningVariant)) !important;
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
}
|
|
1288
|
+
|
|
1289
|
+
.error-field {
|
|
1290
|
+
:deep(.v-field) {
|
|
1291
|
+
color: rgb(var(--v-theme-error)) !important;
|
|
1292
|
+
|
|
1293
|
+
.v-field__outline {
|
|
1294
|
+
--v-field-border-opacity: 1;
|
|
1295
|
+
|
|
1296
|
+
color: rgb(var(--v-theme-error)) !important;
|
|
1297
|
+
}
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
:deep(.v-messages) {
|
|
1301
|
+
opacity: 1 !important;
|
|
1302
|
+
|
|
1303
|
+
.v-messages__message {
|
|
1304
|
+
color: rgb(var(--v-theme-error)) !important;
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
:deep(.v-icon.arrow) {
|
|
1309
|
+
color: rgb(var(--v-theme-onSurfaceVariant)) !important;
|
|
1310
|
+
}
|
|
1311
|
+
|
|
1312
|
+
:deep(.v-icon.arrow .v-icon__svg) {
|
|
1313
|
+
fill: rgb(var(--v-theme-onSurfaceVariant)) !important;
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
.success-field {
|
|
1318
|
+
:deep(.v-icon__svg) {
|
|
1319
|
+
fill: rgb(var(--v-theme-onSuccessVariant)) !important;
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
:deep(.v-icon.arrow) {
|
|
1323
|
+
color: rgb(var(--v-theme-onSurface)) !important;
|
|
1324
|
+
}
|
|
1325
|
+
|
|
1326
|
+
:deep(.v-icon.arrow .v-icon__svg) {
|
|
1327
|
+
fill: rgb(var(--v-theme-onSurface)) !important;
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
:deep(.sy-select__clear-icon .v-icon__svg) {
|
|
1331
|
+
fill: rgb(var(--v-theme-onSurface)) !important;
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1334
|
+
:deep(.v-field) {
|
|
1335
|
+
color: rgb(var(--v-theme-onSuccessVariant)) !important;
|
|
1336
|
+
|
|
1337
|
+
--v-medium-emphasis-opacity: 1;
|
|
1338
|
+
|
|
1339
|
+
.v-field__outline {
|
|
1340
|
+
--v-field-border-opacity: 1;
|
|
1341
|
+
|
|
1342
|
+
color: rgb(var(--v-theme-onSuccessVariant)) !important;
|
|
1343
|
+
}
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
:deep(.v-messages) {
|
|
1347
|
+
opacity: 1 !important;
|
|
1348
|
+
|
|
1349
|
+
.v-messages__message {
|
|
1350
|
+
color: rgb(var(--v-theme-onSuccessVariant)) !important;
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
.basic-field {
|
|
1356
|
+
:deep(.v-field--focused .v-field__outline) {
|
|
1357
|
+
color: rgb(var(--v-theme-primary)) !important;
|
|
1358
|
+
opacity: 1 !important;
|
|
1359
|
+
}
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1349
1362
|
.v-field {
|
|
1350
1363
|
position: relative;
|
|
1351
1364
|
}
|
|
@@ -1369,29 +1382,29 @@
|
|
|
1369
1382
|
}
|
|
1370
1383
|
|
|
1371
1384
|
.help-text {
|
|
1372
|
-
color: rgba(var(--v-theme-
|
|
1385
|
+
color: rgba(var(--v-theme-onSurface), var(--v-medium-emphasis-opacity));
|
|
1373
1386
|
font-size: var(--v-fontSize-liensEtLibelles);
|
|
1374
1387
|
line-height: 1.2;
|
|
1375
1388
|
}
|
|
1376
1389
|
|
|
1377
1390
|
.help-text.text-disabled {
|
|
1378
|
-
color: rgba(var(--v-theme-
|
|
1391
|
+
color: rgba(var(--v-theme-onSurface), var(--v-disabled-opacity));
|
|
1379
1392
|
}
|
|
1380
1393
|
|
|
1381
1394
|
.help-text-below {
|
|
1382
|
-
color: rgba(var(--v-theme-
|
|
1395
|
+
color: rgba(var(--v-theme-onSurface), var(--v-medium-emphasis-opacity));
|
|
1383
1396
|
font-size: var(--v-fontSize-liensEtLibelles);
|
|
1384
1397
|
line-height: 1.2;
|
|
1385
1398
|
}
|
|
1386
1399
|
|
|
1387
1400
|
.help-text-below.text-disabled {
|
|
1388
|
-
color: rgba(var(--v-theme-
|
|
1401
|
+
color: rgba(var(--v-theme-onSurface), var(--v-disabled-opacity));
|
|
1389
1402
|
}
|
|
1390
1403
|
|
|
1391
1404
|
/* Ensure focus styles match selection styles for keyboard navigation */
|
|
1392
1405
|
.v-list-item:focus-visible,
|
|
1393
1406
|
.v-list-item.keyboard-focused {
|
|
1394
|
-
outline: 2px solid rgb(var(--v-theme-
|
|
1407
|
+
outline: 2px solid rgb(var(--v-theme-primary));
|
|
1395
1408
|
outline-offset: -2px;
|
|
1396
1409
|
background-color: rgb(0 0 0 / 8%);
|
|
1397
1410
|
}
|
|
@@ -1418,11 +1431,10 @@
|
|
|
1418
1431
|
.v-icon.arrow {
|
|
1419
1432
|
position: absolute;
|
|
1420
1433
|
right: 10px;
|
|
1421
|
-
color: rgb(var(--v-theme-iconBase));
|
|
1422
1434
|
}
|
|
1423
1435
|
|
|
1424
1436
|
.sy-select__clear-icon {
|
|
1425
|
-
color: rgb(var(--v-theme-
|
|
1437
|
+
color: rgb(var(--v-theme-onSurface)) !important;
|
|
1426
1438
|
opacity: var(--v-medium-emphasis-opacity) !important;
|
|
1427
1439
|
}
|
|
1428
1440
|
|
|
@@ -1467,7 +1479,7 @@
|
|
|
1467
1479
|
|
|
1468
1480
|
.sy-select :deep(.v-field__input) {
|
|
1469
1481
|
opacity: 1;
|
|
1470
|
-
color: rgb(var(--v-theme-
|
|
1482
|
+
color: rgb(var(--v-theme-onSurface)) !important;
|
|
1471
1483
|
cursor: pointer;
|
|
1472
1484
|
caret-color: transparent;
|
|
1473
1485
|
padding-right: 25px;
|