@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,773 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/vue3'
|
|
2
|
+
import { ref } from 'vue'
|
|
3
|
+
import SyRadioGroup from '../SyRadioGroup.vue'
|
|
4
|
+
import SyForm from '../../SyForm/SyForm.vue'
|
|
5
|
+
import { VBtn, VForm } from 'vuetify/components'
|
|
6
|
+
|
|
7
|
+
const meta: Meta<typeof SyRadioGroup> = {
|
|
8
|
+
title: 'Composants/Formulaires/SyRadioGroup/Validation',
|
|
9
|
+
component: SyRadioGroup,
|
|
10
|
+
parameters: {
|
|
11
|
+
docs: {
|
|
12
|
+
description: {
|
|
13
|
+
component: 'Stories démontrant les différents cas de validation avec SyRadioGroup.',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
argTypes: {
|
|
18
|
+
label: { control: 'text', description: 'Label du groupe' },
|
|
19
|
+
options: { control: 'object', description: 'Liste des options' },
|
|
20
|
+
required: { control: 'boolean', description: 'Champ requis' },
|
|
21
|
+
disabled: { control: 'boolean', description: 'Désactivé' },
|
|
22
|
+
readonly: { control: 'boolean', description: 'Lecture seule' },
|
|
23
|
+
useVuetifyValidation: { control: 'boolean', description: 'Validation Vuetify native' },
|
|
24
|
+
showSuccessMessages: { control: 'boolean', description: 'Afficher les messages de succès' },
|
|
25
|
+
},
|
|
26
|
+
args: {
|
|
27
|
+
label: 'Choisissez une option',
|
|
28
|
+
options: [
|
|
29
|
+
{ label: 'Option A', value: 'a' },
|
|
30
|
+
{ label: 'Option B', value: 'b' },
|
|
31
|
+
],
|
|
32
|
+
required: true,
|
|
33
|
+
},
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export default meta
|
|
37
|
+
type Story = StoryObj<typeof SyRadioGroup>
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Validation avec customRules (règles personnalisées Synapse)
|
|
41
|
+
* Utilise le système de validation personnalisé du design system
|
|
42
|
+
*/
|
|
43
|
+
export const WithError: Story = {
|
|
44
|
+
parameters: {
|
|
45
|
+
docs: {
|
|
46
|
+
description: {
|
|
47
|
+
story: `
|
|
48
|
+
### Validation avec customRules
|
|
49
|
+
Utilise les **customRules** pour définir des règles de validation personnalisées.
|
|
50
|
+
|
|
51
|
+
**Caractéristiques :**
|
|
52
|
+
- Règles de type ValidationRule (Synapse)
|
|
53
|
+
- Support des messages d'erreur, warning, success
|
|
54
|
+
- Validation programmatique via validateOnSubmit
|
|
55
|
+
`,
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
sourceCode: [
|
|
59
|
+
{
|
|
60
|
+
name: 'Template',
|
|
61
|
+
code: `
|
|
62
|
+
<template>
|
|
63
|
+
<SyForm ref="form" @submit="onSubmit">
|
|
64
|
+
<SyRadioGroup
|
|
65
|
+
v-model="selected"
|
|
66
|
+
label="Sélectionnez l'option A"
|
|
67
|
+
:options="options"
|
|
68
|
+
:custom-rules="customRules"
|
|
69
|
+
required
|
|
70
|
+
/>
|
|
71
|
+
<VBtn type="submit" color="primary">Valider</VBtn>
|
|
72
|
+
</SyForm>
|
|
73
|
+
</template>`,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'Script',
|
|
77
|
+
code: `<script setup lang="ts">
|
|
78
|
+
import { ref } from 'vue'
|
|
79
|
+
import { SyRadioGroup, SyForm } from '@cnamts/synapse'
|
|
80
|
+
import { VBtn } from 'vuetify/components'
|
|
81
|
+
import type { ValidationRule } from '@/composables/unifyValidation/useValidation'
|
|
82
|
+
|
|
83
|
+
const selected = ref<string | null>(null)
|
|
84
|
+
|
|
85
|
+
const options = [
|
|
86
|
+
{ label: 'Option A', value: 'a' },
|
|
87
|
+
{ label: 'Option B', value: 'b' },
|
|
88
|
+
]
|
|
89
|
+
|
|
90
|
+
const customRules: ValidationRule[] = [
|
|
91
|
+
{
|
|
92
|
+
type: 'custom',
|
|
93
|
+
options: {
|
|
94
|
+
validate: (value: unknown) => value === 'a',
|
|
95
|
+
message: 'Vous devez sélectionner l'option A',
|
|
96
|
+
fieldIdentifier: 'Option',
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
]
|
|
100
|
+
|
|
101
|
+
const onSubmit = (event: { isValid: boolean }) => {
|
|
102
|
+
if (event.isValid) {
|
|
103
|
+
alert('Formulaire valide !')
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
</script>`,
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
render: args => ({
|
|
112
|
+
components: { SyRadioGroup, SyForm, VBtn },
|
|
113
|
+
setup() {
|
|
114
|
+
const selected = ref<string | null>('a')
|
|
115
|
+
|
|
116
|
+
const customRules = [
|
|
117
|
+
{
|
|
118
|
+
type: 'custom',
|
|
119
|
+
options: {
|
|
120
|
+
validate: (value: unknown) => value === 'a',
|
|
121
|
+
message: 'Vous devez sélectionner l\'option A',
|
|
122
|
+
fieldIdentifier: 'Option',
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
]
|
|
126
|
+
|
|
127
|
+
const onSubmit = (event: { isValid: boolean }) => {
|
|
128
|
+
if (event.isValid) {
|
|
129
|
+
alert('Formulaire valide !')
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return { args, selected, customRules, onSubmit }
|
|
134
|
+
},
|
|
135
|
+
template: `
|
|
136
|
+
<SyForm ref="form" @submit="onSubmit">
|
|
137
|
+
<SyRadioGroup
|
|
138
|
+
v-model="selected"
|
|
139
|
+
v-bind="args"
|
|
140
|
+
:custom-rules="customRules"
|
|
141
|
+
/>
|
|
142
|
+
<VBtn type="submit" class="mt-2" color="primary">Valider</VBtn>
|
|
143
|
+
</SyForm>
|
|
144
|
+
`,
|
|
145
|
+
}),
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Validation avec customWarningRules (règles d'avertissement Synapse)
|
|
150
|
+
* La soumission est autorisée malgré le warning
|
|
151
|
+
*/
|
|
152
|
+
export const WithWarning: Story = {
|
|
153
|
+
parameters: {
|
|
154
|
+
docs: {
|
|
155
|
+
description: {
|
|
156
|
+
story: `
|
|
157
|
+
### Validation avec customWarningRules
|
|
158
|
+
Utilise les **customWarningRules** pour afficher un avertissement non bloquant.
|
|
159
|
+
|
|
160
|
+
**Caractéristiques :**
|
|
161
|
+
- Le warning n'empêche pas la soumission du formulaire
|
|
162
|
+
- Affiché avec la couleur warning (orange)
|
|
163
|
+
- Utile pour des conseils ou recommandations
|
|
164
|
+
`,
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
sourceCode: [
|
|
168
|
+
{
|
|
169
|
+
name: 'Template',
|
|
170
|
+
code: `
|
|
171
|
+
<template>
|
|
172
|
+
<SyForm ref="form" @submit="onSubmit">
|
|
173
|
+
<SyRadioGroup
|
|
174
|
+
v-model="selected"
|
|
175
|
+
label="Choisissez une option"
|
|
176
|
+
:options="options"
|
|
177
|
+
:custom-warning-rules="customWarningRules"
|
|
178
|
+
/>
|
|
179
|
+
<VBtn type="submit" color="primary">Valider</VBtn>
|
|
180
|
+
</SyForm>
|
|
181
|
+
</template>`,
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
name: 'Script',
|
|
185
|
+
code: `<script setup lang="ts">
|
|
186
|
+
import { ref } from 'vue'
|
|
187
|
+
import { SyRadioGroup, SyForm } from '@cnamts/synapse'
|
|
188
|
+
import { VBtn } from 'vuetify/components'
|
|
189
|
+
import type { ValidationRule } from '@/composables/unifyValidation/useValidation'
|
|
190
|
+
|
|
191
|
+
const selected = ref<string | null>('b')
|
|
192
|
+
|
|
193
|
+
const options = [
|
|
194
|
+
{ label: 'Option A (recommandée)', value: 'a' },
|
|
195
|
+
{ label: 'Option B', value: 'b' },
|
|
196
|
+
]
|
|
197
|
+
|
|
198
|
+
const customWarningRules: ValidationRule[] = [
|
|
199
|
+
{
|
|
200
|
+
type: 'custom',
|
|
201
|
+
options: {
|
|
202
|
+
validate: (value: unknown) => value === 'a',
|
|
203
|
+
message: 'L'option A est recommandée',
|
|
204
|
+
fieldIdentifier: 'Option',
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
]
|
|
208
|
+
|
|
209
|
+
const onSubmit = (event: { isValid: boolean }) => {
|
|
210
|
+
alert('Formulaire soumis (les warnings ne bloquent pas la soumission)')
|
|
211
|
+
}
|
|
212
|
+
</script>`,
|
|
213
|
+
},
|
|
214
|
+
],
|
|
215
|
+
},
|
|
216
|
+
|
|
217
|
+
render: args => ({
|
|
218
|
+
components: { SyRadioGroup, SyForm, VBtn },
|
|
219
|
+
setup() {
|
|
220
|
+
const selected = ref<string | null>('b')
|
|
221
|
+
|
|
222
|
+
const customWarningRules = [
|
|
223
|
+
{
|
|
224
|
+
type: 'custom',
|
|
225
|
+
options: {
|
|
226
|
+
validate: (value: unknown) => value === 'a',
|
|
227
|
+
message: 'L\'option A est recommandée',
|
|
228
|
+
fieldIdentifier: 'Option',
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
]
|
|
232
|
+
|
|
233
|
+
const onSubmit = () => {
|
|
234
|
+
alert('Formulaire soumis (les warnings ne bloquent pas la soumission)')
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return { args, selected, customWarningRules, onSubmit }
|
|
238
|
+
},
|
|
239
|
+
template: `
|
|
240
|
+
<SyForm ref="form" @submit="onSubmit">
|
|
241
|
+
<SyRadioGroup
|
|
242
|
+
v-model="selected"
|
|
243
|
+
v-bind="args"
|
|
244
|
+
:custom-warning-rules="customWarningRules"
|
|
245
|
+
/>
|
|
246
|
+
<VBtn type="submit" class="mt-2" color="primary">Valider</VBtn>
|
|
247
|
+
</SyForm>
|
|
248
|
+
`,
|
|
249
|
+
}),
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* showSuccessMessages: false — les messages de succès sont masqués
|
|
254
|
+
* Le champ est validé mais aucun message positif n'est affiché
|
|
255
|
+
*/
|
|
256
|
+
export const NoSuccessMessage: Story = {
|
|
257
|
+
parameters: {
|
|
258
|
+
docs: {
|
|
259
|
+
description: {
|
|
260
|
+
story: `
|
|
261
|
+
### showSuccessMessages à false
|
|
262
|
+
Avec **showSuccessMessages: false**, la validation se produit normalement mais les messages de succès ne s'affichent pas.
|
|
263
|
+
|
|
264
|
+
**Caractéristiques :**
|
|
265
|
+
- Sélectionner une option valide le champ silencieusement
|
|
266
|
+
- Aucun message vert n'est affiché
|
|
267
|
+
- Utile quand le feedback positif est jugé superflu
|
|
268
|
+
`,
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
sourceCode: [
|
|
272
|
+
{
|
|
273
|
+
name: 'Template',
|
|
274
|
+
code: `
|
|
275
|
+
<template>
|
|
276
|
+
<SyRadioGroup
|
|
277
|
+
v-model="selected"
|
|
278
|
+
label="Choisissez une option"
|
|
279
|
+
:options="options"
|
|
280
|
+
:show-success-messages="false"
|
|
281
|
+
required
|
|
282
|
+
/>
|
|
283
|
+
</template>`,
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
name: 'Script',
|
|
287
|
+
code: `<script setup lang="ts">
|
|
288
|
+
import { ref } from 'vue'
|
|
289
|
+
import { SyRadioGroup } from '@cnamts/synapse'
|
|
290
|
+
|
|
291
|
+
const selected = ref<string | null>('a')
|
|
292
|
+
|
|
293
|
+
const options = [
|
|
294
|
+
{ label: 'Option A', value: 'a' },
|
|
295
|
+
{ label: 'Option B', value: 'b' },
|
|
296
|
+
]
|
|
297
|
+
</script>`,
|
|
298
|
+
},
|
|
299
|
+
],
|
|
300
|
+
},
|
|
301
|
+
|
|
302
|
+
render: args => ({
|
|
303
|
+
components: { SyRadioGroup },
|
|
304
|
+
setup() {
|
|
305
|
+
const selected = ref<string | null>('a')
|
|
306
|
+
return { args, selected }
|
|
307
|
+
},
|
|
308
|
+
template: `
|
|
309
|
+
<SyRadioGroup
|
|
310
|
+
v-model="selected"
|
|
311
|
+
v-bind="args"
|
|
312
|
+
:show-success-messages="false"
|
|
313
|
+
/>
|
|
314
|
+
`,
|
|
315
|
+
}),
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* disableErrorHandling: true — la validation est complètement désactivée
|
|
320
|
+
*/
|
|
321
|
+
export const DisableErrorHandling: Story = {
|
|
322
|
+
parameters: {
|
|
323
|
+
docs: {
|
|
324
|
+
description: {
|
|
325
|
+
story: `
|
|
326
|
+
### disableErrorHandling à true
|
|
327
|
+
Avec **disableErrorHandling: true**, toute la validation est désactivée : aucun message d'erreur, warning ou succès ne s'affiche, quelle que soit la valeur.
|
|
328
|
+
|
|
329
|
+
**Caractéristiques :**
|
|
330
|
+
- Aucune règle n'est évaluée
|
|
331
|
+
- Le champ ne passe jamais dans un état d'erreur visuel
|
|
332
|
+
- Utile pour des champs en lecture contrôlée par le parent
|
|
333
|
+
`,
|
|
334
|
+
},
|
|
335
|
+
},
|
|
336
|
+
sourceCode: [
|
|
337
|
+
{
|
|
338
|
+
name: 'Template',
|
|
339
|
+
code: `
|
|
340
|
+
<template>
|
|
341
|
+
<SyForm>
|
|
342
|
+
<SyRadioGroup
|
|
343
|
+
v-model="selected"
|
|
344
|
+
label="Choisissez une option"
|
|
345
|
+
:options="options"
|
|
346
|
+
disable-error-handling
|
|
347
|
+
required
|
|
348
|
+
/>
|
|
349
|
+
<VBtn type="submit" color="primary">Valider (aucune erreur)</VBtn>
|
|
350
|
+
</SyForm>
|
|
351
|
+
</template>`,
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
name: 'Script',
|
|
355
|
+
code: `<script setup lang="ts">
|
|
356
|
+
import { ref } from 'vue'
|
|
357
|
+
import { SyRadioGroup, SyForm } from '@cnamts/synapse'
|
|
358
|
+
import { VBtn } from 'vuetify/components'
|
|
359
|
+
|
|
360
|
+
const selected = ref<string | null>(null)
|
|
361
|
+
|
|
362
|
+
const options = [
|
|
363
|
+
{ label: 'Option A', value: 'a' },
|
|
364
|
+
{ label: 'Option B', value: 'b' },
|
|
365
|
+
]
|
|
366
|
+
</script>`,
|
|
367
|
+
},
|
|
368
|
+
],
|
|
369
|
+
},
|
|
370
|
+
|
|
371
|
+
render: args => ({
|
|
372
|
+
components: { SyRadioGroup, SyForm, VBtn },
|
|
373
|
+
setup() {
|
|
374
|
+
const selected = ref<string | null>(null)
|
|
375
|
+
return { args, selected }
|
|
376
|
+
},
|
|
377
|
+
template: `
|
|
378
|
+
<SyForm>
|
|
379
|
+
<SyRadioGroup
|
|
380
|
+
v-model="selected"
|
|
381
|
+
v-bind="args"
|
|
382
|
+
disable-error-handling
|
|
383
|
+
/>
|
|
384
|
+
<VBtn type="submit" class="mt-2" color="primary">Valider (aucune erreur)</VBtn>
|
|
385
|
+
</SyForm>
|
|
386
|
+
`,
|
|
387
|
+
}),
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Validation avec SyForm (composant formulaire du design system)
|
|
392
|
+
* Utilise le système de validation unifié avec useValidation et useValidatable
|
|
393
|
+
*/
|
|
394
|
+
export const SyFormValidation: Story = {
|
|
395
|
+
parameters: {
|
|
396
|
+
docs: {
|
|
397
|
+
description: {
|
|
398
|
+
story: `
|
|
399
|
+
### Validation avec SyForm
|
|
400
|
+
Utilise le composant **SyForm** du design system qui intègre le système de validation unifié.
|
|
401
|
+
|
|
402
|
+
**Caractéristiques :**
|
|
403
|
+
- Validation automatique à la soumission
|
|
404
|
+
- Gestion des erreurs via le composable useValidation
|
|
405
|
+
- Support des customRules, warningRules, successRules
|
|
406
|
+
- Messages de validation traduits
|
|
407
|
+
`,
|
|
408
|
+
},
|
|
409
|
+
},
|
|
410
|
+
sourceCode: [
|
|
411
|
+
{
|
|
412
|
+
name: 'Template',
|
|
413
|
+
code: `
|
|
414
|
+
<template>
|
|
415
|
+
<SyForm ref="form" @submit="onSubmit">
|
|
416
|
+
<SyRadioGroup
|
|
417
|
+
v-model="selected"
|
|
418
|
+
label="Choisissez une option"
|
|
419
|
+
:options="options"
|
|
420
|
+
required
|
|
421
|
+
/>
|
|
422
|
+
<VBtn type="submit" color="primary">Valider</VBtn>
|
|
423
|
+
</SyForm>
|
|
424
|
+
</template>`,
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
name: 'Script',
|
|
428
|
+
code: `<script setup lang="ts">
|
|
429
|
+
import { ref } from 'vue'
|
|
430
|
+
import { SyRadioGroup, SyForm } from '@cnamts/synapse'
|
|
431
|
+
import { VBtn } from 'vuetify/components'
|
|
432
|
+
|
|
433
|
+
const selected = ref<string | null>(null)
|
|
434
|
+
|
|
435
|
+
const options = [
|
|
436
|
+
{ label: 'Option A', value: 'a' },
|
|
437
|
+
{ label: 'Option B', value: 'b' },
|
|
438
|
+
]
|
|
439
|
+
|
|
440
|
+
const onSubmit = (event: { isValid: boolean }) => {
|
|
441
|
+
if (event.isValid) {
|
|
442
|
+
alert('Formulaire valide !')
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
</script>`,
|
|
446
|
+
},
|
|
447
|
+
],
|
|
448
|
+
},
|
|
449
|
+
|
|
450
|
+
render: args => ({
|
|
451
|
+
components: { SyRadioGroup, SyForm, VBtn },
|
|
452
|
+
setup() {
|
|
453
|
+
const selected = ref<string | null>(null)
|
|
454
|
+
|
|
455
|
+
const onSubmit = (event: { isValid: boolean }) => {
|
|
456
|
+
if (event.isValid) {
|
|
457
|
+
alert('Formulaire valide !')
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
return { args, selected, onSubmit }
|
|
462
|
+
},
|
|
463
|
+
template: `
|
|
464
|
+
<SyForm ref="form" @submit="onSubmit">
|
|
465
|
+
<SyRadioGroup
|
|
466
|
+
v-model="selected"
|
|
467
|
+
v-bind="args"
|
|
468
|
+
/>
|
|
469
|
+
<VBtn type="submit" class="mt-2" color="primary">Valider</VBtn>
|
|
470
|
+
</SyForm>
|
|
471
|
+
`,
|
|
472
|
+
}),
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/**
|
|
476
|
+
* Validation avec VForm natif (sans useVuetifyValidation)
|
|
477
|
+
* Utilise VForm de Vuetify avec la validation Synapse
|
|
478
|
+
*/
|
|
479
|
+
export const VFormValidation: Story = {
|
|
480
|
+
parameters: {
|
|
481
|
+
docs: {
|
|
482
|
+
description: {
|
|
483
|
+
story: `
|
|
484
|
+
### Validation avec VForm natif
|
|
485
|
+
Intégration avec **VForm** natif Vuetify en conservant la validation Synapse. La soumission appelle **validateOnSubmit()** manuellement sur le composant pour déclencher la validation.
|
|
486
|
+
|
|
487
|
+
**Caractéristiques :**
|
|
488
|
+
- Validation Synapse (customRules, required, etc.)
|
|
489
|
+
- Pas de useVuetifyValidation
|
|
490
|
+
- Appel manuel de validateOnSubmit() sur le ref du composant
|
|
491
|
+
`,
|
|
492
|
+
},
|
|
493
|
+
},
|
|
494
|
+
sourceCode: [
|
|
495
|
+
{
|
|
496
|
+
name: 'Template',
|
|
497
|
+
code: `
|
|
498
|
+
<template>
|
|
499
|
+
<VForm @submit.prevent="onSubmit">
|
|
500
|
+
<SyRadioGroup
|
|
501
|
+
ref="radioRef"
|
|
502
|
+
v-model="selected"
|
|
503
|
+
label="Choisissez une option"
|
|
504
|
+
:options="options"
|
|
505
|
+
required
|
|
506
|
+
class="mb-4"
|
|
507
|
+
/>
|
|
508
|
+
<VBtn type="submit" color="primary">Valider</VBtn>
|
|
509
|
+
</VForm>
|
|
510
|
+
</template>`,
|
|
511
|
+
},
|
|
512
|
+
{
|
|
513
|
+
name: 'Script',
|
|
514
|
+
code: `<script setup lang="ts">
|
|
515
|
+
import { ref } from 'vue'
|
|
516
|
+
import { SyRadioGroup } from '@cnamts/synapse'
|
|
517
|
+
import { VBtn, VForm } from 'vuetify/components'
|
|
518
|
+
|
|
519
|
+
const selected = ref<string | null>(null)
|
|
520
|
+
const radioRef = ref(null)
|
|
521
|
+
|
|
522
|
+
const options = [
|
|
523
|
+
{ label: 'Option A', value: 'a' },
|
|
524
|
+
{ label: 'Option B', value: 'b' },
|
|
525
|
+
]
|
|
526
|
+
|
|
527
|
+
async function onSubmit() {
|
|
528
|
+
const isValid = await radioRef.value?.validateOnSubmit()
|
|
529
|
+
if (isValid) {
|
|
530
|
+
alert('Formulaire valide : ' + JSON.stringify(selected.value))
|
|
531
|
+
} else {
|
|
532
|
+
alert('Formulaire invalide : veuillez choisir une option.')
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
</script>`,
|
|
536
|
+
},
|
|
537
|
+
],
|
|
538
|
+
},
|
|
539
|
+
|
|
540
|
+
render: args => ({
|
|
541
|
+
components: { SyRadioGroup, VForm, VBtn },
|
|
542
|
+
setup() {
|
|
543
|
+
const selected = ref<string | null>(null)
|
|
544
|
+
const radioRef = ref<{ validateOnSubmit: () => Promise<boolean> } | null>(null)
|
|
545
|
+
|
|
546
|
+
async function onSubmit() {
|
|
547
|
+
const isValid = await radioRef.value?.validateOnSubmit()
|
|
548
|
+
if (isValid) {
|
|
549
|
+
alert(`Formulaire valide : ${JSON.stringify(selected.value)}`)
|
|
550
|
+
}
|
|
551
|
+
else {
|
|
552
|
+
alert('Formulaire invalide : veuillez choisir une option.')
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
return { args, selected, radioRef, onSubmit }
|
|
557
|
+
},
|
|
558
|
+
template: `
|
|
559
|
+
<div class="pa-4">
|
|
560
|
+
<VForm @submit.prevent="onSubmit">
|
|
561
|
+
<SyRadioGroup
|
|
562
|
+
ref="radioRef"
|
|
563
|
+
v-model="selected"
|
|
564
|
+
v-bind="args"
|
|
565
|
+
class="mb-4"
|
|
566
|
+
/>
|
|
567
|
+
<VBtn type="submit" color="primary">Valider</VBtn>
|
|
568
|
+
</VForm>
|
|
569
|
+
</div>
|
|
570
|
+
`,
|
|
571
|
+
}),
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
/**
|
|
575
|
+
* Validation avec VForm (composant natif Vuetify) + useVuetifyValidation
|
|
576
|
+
* Utilise la validation native de Vuetify
|
|
577
|
+
*/
|
|
578
|
+
export const VFormVuetifyValidation: Story = {
|
|
579
|
+
parameters: {
|
|
580
|
+
docs: {
|
|
581
|
+
description: {
|
|
582
|
+
story: `
|
|
583
|
+
### Validation avec VForm et useVuetifyValidation
|
|
584
|
+
Utilise le composant natif **VForm** de Vuetify avec la prop **useVuetifyValidation**.
|
|
585
|
+
|
|
586
|
+
**Caractéristiques :**
|
|
587
|
+
- Validation native Vuetify via les props :rules
|
|
588
|
+
- Compatible avec VForm de Vuetify
|
|
589
|
+
- Pas de messages de succès (Vuetify ne les gère pas)
|
|
590
|
+
- Validation côté template avec fonctions
|
|
591
|
+
`,
|
|
592
|
+
},
|
|
593
|
+
},
|
|
594
|
+
sourceCode: [
|
|
595
|
+
{
|
|
596
|
+
name: 'Template',
|
|
597
|
+
code: `
|
|
598
|
+
<template>
|
|
599
|
+
<VForm ref="form" @submit.prevent="submit">
|
|
600
|
+
<SyRadioGroup
|
|
601
|
+
v-model="selected"
|
|
602
|
+
label="Choisissez une option"
|
|
603
|
+
:options="options"
|
|
604
|
+
:rules="rules"
|
|
605
|
+
use-vuetify-validation
|
|
606
|
+
required
|
|
607
|
+
/>
|
|
608
|
+
<VBtn type="submit" color="primary">Valider</VBtn>
|
|
609
|
+
</VForm>
|
|
610
|
+
</template>`,
|
|
611
|
+
},
|
|
612
|
+
{
|
|
613
|
+
name: 'Script',
|
|
614
|
+
code: `<script setup lang="ts">
|
|
615
|
+
import { ref } from 'vue'
|
|
616
|
+
import { SyRadioGroup } from '@cnamts/synapse'
|
|
617
|
+
import { VBtn, VForm } from 'vuetify/components'
|
|
618
|
+
import type { VuetifyValidationRule } from '@/composables/unifyValidation/useValidation'
|
|
619
|
+
|
|
620
|
+
const selected = ref<string | null>(null)
|
|
621
|
+
const form = ref<InstanceType<typeof VForm> | null>(null)
|
|
622
|
+
|
|
623
|
+
const options = [
|
|
624
|
+
{ label: 'Option A', value: 'a' },
|
|
625
|
+
{ label: 'Option B', value: 'b' },
|
|
626
|
+
]
|
|
627
|
+
|
|
628
|
+
const rules: VuetifyValidationRule[] = [
|
|
629
|
+
(v: string | null) => !!v || 'Une sélection est requise',
|
|
630
|
+
(v: string | null) => v === 'a' || 'Vous devez sélectionner l'option A',
|
|
631
|
+
]
|
|
632
|
+
|
|
633
|
+
const submit = async () => {
|
|
634
|
+
const { valid } = await form.value?.validate() || { valid: false }
|
|
635
|
+
if (valid) {
|
|
636
|
+
alert('Formulaire valide !')
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
</script>`,
|
|
640
|
+
},
|
|
641
|
+
],
|
|
642
|
+
},
|
|
643
|
+
|
|
644
|
+
render: args => ({
|
|
645
|
+
components: { SyRadioGroup, VForm, VBtn },
|
|
646
|
+
setup() {
|
|
647
|
+
const selected = ref<string | null>(null)
|
|
648
|
+
const form = ref<InstanceType<typeof VForm> | null>(null)
|
|
649
|
+
|
|
650
|
+
const rules = [
|
|
651
|
+
(v: string | null) => !!v || 'Une sélection est requise',
|
|
652
|
+
(v: string | null) => v === 'a' || 'Vous devez sélectionner l\'option A',
|
|
653
|
+
]
|
|
654
|
+
|
|
655
|
+
const submit = async () => {
|
|
656
|
+
const { valid } = await form.value?.validate() || { valid: false }
|
|
657
|
+
if (valid) {
|
|
658
|
+
alert('Formulaire valide !')
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
return { args, selected, form, rules, submit }
|
|
663
|
+
},
|
|
664
|
+
template: `
|
|
665
|
+
<VForm ref="form" @submit.prevent="submit">
|
|
666
|
+
<SyRadioGroup
|
|
667
|
+
v-model="selected"
|
|
668
|
+
v-bind="args"
|
|
669
|
+
:rules="rules"
|
|
670
|
+
use-vuetify-validation
|
|
671
|
+
/>
|
|
672
|
+
<VBtn type="submit" class="mt-2" color="primary">Valider</VBtn>
|
|
673
|
+
</VForm>
|
|
674
|
+
`,
|
|
675
|
+
}),
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
/**
|
|
679
|
+
* Validation avec SyForm et useVuetifyValidation
|
|
680
|
+
* Combine le SyForm avec la validation Vuetify native
|
|
681
|
+
*/
|
|
682
|
+
export const SyFormVuetifyValidation: Story = {
|
|
683
|
+
parameters: {
|
|
684
|
+
docs: {
|
|
685
|
+
description: {
|
|
686
|
+
story: `
|
|
687
|
+
### Validation avec SyForm et useVuetifyValidation
|
|
688
|
+
Combine **SyForm** avec la prop **useVuetifyValidation** pour utiliser les règles Vuetify.
|
|
689
|
+
|
|
690
|
+
**Caractéristiques :**
|
|
691
|
+
- SyForm gère la soumission
|
|
692
|
+
- useVuetifyValidation active la validation native Vuetify
|
|
693
|
+
- Les règles sont passées via la prop :rules
|
|
694
|
+
`,
|
|
695
|
+
},
|
|
696
|
+
},
|
|
697
|
+
sourceCode: [
|
|
698
|
+
{
|
|
699
|
+
name: 'Template',
|
|
700
|
+
code: `
|
|
701
|
+
<template>
|
|
702
|
+
<SyForm ref="form" @submit="onSubmit">
|
|
703
|
+
<SyRadioGroup
|
|
704
|
+
v-model="selected"
|
|
705
|
+
label="Choisissez une option"
|
|
706
|
+
:options="options"
|
|
707
|
+
:rules="rules"
|
|
708
|
+
use-vuetify-validation
|
|
709
|
+
required
|
|
710
|
+
/>
|
|
711
|
+
<VBtn type="submit" color="primary">Valider</VBtn>
|
|
712
|
+
</SyForm>
|
|
713
|
+
</template>`,
|
|
714
|
+
},
|
|
715
|
+
{
|
|
716
|
+
name: 'Script',
|
|
717
|
+
code: `<script setup lang="ts">
|
|
718
|
+
import { ref } from 'vue'
|
|
719
|
+
import { SyRadioGroup, SyForm } from '@cnamts/synapse'
|
|
720
|
+
import { VBtn } from 'vuetify/components'
|
|
721
|
+
import type { VuetifyValidationRule } from '@/composables/unifyValidation/useValidation'
|
|
722
|
+
|
|
723
|
+
const selected = ref<string | null>(null)
|
|
724
|
+
|
|
725
|
+
const options = [
|
|
726
|
+
{ label: 'Option A', value: 'a' },
|
|
727
|
+
{ label: 'Option B', value: 'b' },
|
|
728
|
+
]
|
|
729
|
+
|
|
730
|
+
const rules: VuetifyValidationRule[] = [
|
|
731
|
+
(v: string | null) => !!v || 'Une sélection est requise',
|
|
732
|
+
]
|
|
733
|
+
|
|
734
|
+
const onSubmit = (event: { isValid: boolean }) => {
|
|
735
|
+
if (event.isValid) {
|
|
736
|
+
alert('Formulaire valide !')
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
</script>`,
|
|
740
|
+
},
|
|
741
|
+
],
|
|
742
|
+
},
|
|
743
|
+
|
|
744
|
+
render: args => ({
|
|
745
|
+
components: { SyRadioGroup, SyForm, VBtn },
|
|
746
|
+
setup() {
|
|
747
|
+
const selected = ref<string | null>(null)
|
|
748
|
+
|
|
749
|
+
const rules = [
|
|
750
|
+
(v: string | null) => !!v || 'Une sélection est requise',
|
|
751
|
+
]
|
|
752
|
+
|
|
753
|
+
const onSubmit = (event: { isValid: boolean }) => {
|
|
754
|
+
if (event.isValid) {
|
|
755
|
+
alert('Formulaire valide !')
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
return { args, selected, rules, onSubmit }
|
|
760
|
+
},
|
|
761
|
+
template: `
|
|
762
|
+
<SyForm ref="form" @submit="onSubmit">
|
|
763
|
+
<SyRadioGroup
|
|
764
|
+
v-model="selected"
|
|
765
|
+
v-bind="args"
|
|
766
|
+
:rules="rules"
|
|
767
|
+
use-vuetify-validation
|
|
768
|
+
/>
|
|
769
|
+
<VBtn type="submit" class="mt-2" color="primary">Valider</VBtn>
|
|
770
|
+
</SyForm>
|
|
771
|
+
`,
|
|
772
|
+
}),
|
|
773
|
+
}
|