@cnamts/synapse 1.0.24 → 1.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -5
- package/dist/{AutocompleteFilter-BWLR3U7W.js → AutocompleteFilter-D7qBuCAP.js} +1 -1
- package/dist/{AutocompleteFilter-D9jzRzAL.cjs → AutocompleteFilter-Df9i5mAl.cjs} +1 -1
- package/dist/{DateFilter-DTUl8hb1.cjs → DateFilter-BJD6FMev.cjs} +1 -1
- package/dist/{DateFilter-BpwFexzi.js → DateFilter-BitMWrMU.js} +1 -1
- package/dist/{NumberFilter-Bz_NTdX9.js → NumberFilter-BTLUxw0a.js} +1 -1
- package/dist/{NumberFilter-MAEojdk0.cjs → NumberFilter-DGCzCXzI.cjs} +1 -1
- package/dist/{PeriodFilter-DX_wy9g-.js → PeriodFilter-B5rUIPAC.js} +1 -1
- package/dist/{PeriodFilter-CC4WgIhl.cjs → PeriodFilter-DO_ecTZW.cjs} +1 -1
- package/dist/{SelectFilter-BR3fvl-a.cjs → SelectFilter-CGwcKWLm.cjs} +1 -1
- package/dist/{SelectFilter-xqiPtPgX.js → SelectFilter-l4QnRcuk.js} +2 -2
- package/dist/{TextFilter-CCfYFl5F.cjs → TextFilter-B8nf7xoK.cjs} +1 -1
- package/dist/{TextFilter-BBl3JFqK.js → TextFilter-C9hj6Qrp.js} +1 -1
- package/dist/apLightTheme-CEK4iY3f.cjs +1 -0
- package/dist/{apLightTheme-D1P4jcD0.js → apLightTheme-DnIM24Lv.js} +441 -722
- package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +10 -6
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +3 -0
- package/dist/components/Customs/SyTabs/SyTabs.d.ts +13 -11
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +4 -4
- package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +4 -24
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +2 -12
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +1 -6
- package/dist/components/DatePicker/composables/useDatePickerState.d.ts +1 -0
- package/dist/components/FileList/FileList.d.ts +6 -0
- package/dist/components/FilterSideBar/FilterSideBar.d.ts +2 -0
- package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +13 -13
- package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +3 -3
- package/dist/components/MonthPicker/MonthPicker.d.ts +1 -6
- package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +1 -6
- package/dist/components/NirField/NirField.d.ts +4 -16
- package/dist/components/PeriodField/PeriodField.d.ts +8 -48
- package/dist/components/PhoneField/PhoneField.d.ts +1 -6
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +1 -0
- package/dist/components/Tables/SyTable/SyTable.d.ts +1 -0
- package/dist/components/Tables/common/SyTablePagination.d.ts +2 -0
- package/dist/components/Tables/common/TableHeader.d.ts +5 -0
- package/dist/components/Tables/common/locales.d.ts +3 -0
- package/dist/components/Tables/common/types.d.ts +2 -0
- package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +1 -0
- package/dist/composables/unifyValidation/documentationValidationProps.d.ts +230 -0
- package/dist/composables/validation/useValidation.d.ts +5 -1
- package/dist/design-system-v3.js +2 -2
- package/dist/design-system-v3.umd.cjs +1 -1
- package/dist/designTokens/tokens/amelipro/apColors.d.ts +10 -10
- package/dist/designTokens/tokens/amelipro/apColors2026.d.ts +1 -2
- package/dist/designTokens/tokens/amelipro/apContextual.d.ts +44 -0
- package/dist/designTokens/tokens/amelipro/apSemantic.d.ts +1 -1
- package/dist/designTokens/tokens/baseColors.d.ts +127 -0
- package/dist/designTokens/tokens/baseContextualTokens.d.ts +50 -0
- package/dist/designTokens/tokens/cnam/cnamColors.d.ts +10 -10
- package/dist/designTokens/tokens/cnam/cnamSemantic.d.ts +1 -1
- package/dist/designTokens/tokens/pa/paColors.d.ts +1 -166
- package/dist/designTokens/tokens/pa/paSemantic.d.ts +1 -1
- package/dist/designTokens/utils/buildColorClassMap.d.ts +12 -0
- package/dist/designTokens/utils/createFlattenTheme.d.ts +1 -3
- package/dist/designTokens/utils/index.d.ts +2 -2
- package/dist/main-ByDPHpae.cjs +1067 -0
- package/dist/main-Cpx8Co6H.js +38869 -0
- package/dist/synapse.css +1 -1
- package/dist/utils/functions/classToHex.d.ts +1 -1
- package/dist/utils/functions/createHexResolver.d.ts +16 -0
- package/dist/vuetifyConfig.js +113 -152
- package/dist/vuetifyConfig.umd.cjs +1 -1
- package/package.json +29 -18
- package/src/assets/amelipro/apTokens2026.scss +5 -5
- package/src/assets/overrides/_breakpoints.scss +25 -0
- package/src/assets/overrides/_btns.scss +0 -2
- package/src/assets/overrides/_forms.scss +1 -3
- package/src/assets/overrides/_icons.scss +7 -11
- package/src/assets/overrides/_otp.scss +41 -0
- package/src/assets/overrides/_tables.scss +11 -20
- package/src/assets/overrides/_tooltips.scss +17 -7
- package/src/assets/overrides/_typography.scss +35 -37
- package/src/assets/overrides/_utilities.scss +43 -47
- package/src/assets/themes.scss +1 -0
- package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +20 -20
- package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +12 -14
- package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +4 -6
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.vue +5 -5
- package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +4 -6
- package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.vue +4 -6
- package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.vue +4 -6
- package/src/components/Amelipro/AmeliproBreadcrumb/AmeliproBreadcrumb.vue +1 -3
- package/src/components/Amelipro/AmeliproBtn/AmeliproBtn.vue +4 -6
- package/src/components/Amelipro/AmeliproCallback/AmeliproCallback.vue +2 -2
- package/src/components/Amelipro/AmeliproCard/AmeliproCard.vue +31 -31
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.vue +5 -7
- package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.vue +13 -15
- package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.vue +23 -23
- package/src/components/Amelipro/AmeliproChips/AmeliproChips.vue +1 -3
- package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +17 -12
- package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +2 -2
- package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.vue +4 -6
- package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +13 -13
- package/src/components/Amelipro/AmeliproDentalChart/AmeliproDentalChart.vue +4 -2
- package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +4 -4
- package/src/components/Amelipro/AmeliproDialog/AmeliproDialog.vue +5 -7
- package/src/components/Amelipro/AmeliproDisclosure/AmeliproDisclosure.vue +1 -3
- package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +2 -4
- package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.vue +4 -6
- package/src/components/Amelipro/AmeliproFilters/AmeliproFilters.vue +13 -13
- package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +3 -5
- package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.vue +1 -3
- package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +2 -4
- package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.vue +1 -3
- package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.vue +20 -16
- package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +1 -1
- package/src/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.vue +2 -4
- package/src/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.vue +5 -7
- package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.vue +6 -8
- package/src/components/Amelipro/AmeliproMailTile/AmeliproMailTile.vue +14 -14
- package/src/components/Amelipro/AmeliproMenu/AmeliproMenu.vue +11 -13
- package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenu.vue +2 -4
- package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingLayout.vue +8 -8
- package/src/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.vue +40 -40
- package/src/components/Amelipro/AmeliproNumberedCard/AmeliproNumberedCard.vue +27 -27
- package/src/components/Amelipro/AmeliproOnboarding/AmeliproOnboarding.vue +3 -5
- package/src/components/Amelipro/AmeliproPageLayout/AmeliproPageLayout.vue +2 -4
- package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.vue +2 -4
- package/src/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.vue +3 -5
- package/src/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.vue +1 -3
- package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.vue +2 -4
- package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLogin.vue +4 -4
- package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/AmeliproPatientLoginForm.vue +1 -3
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.vue +3 -5
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.vue +3 -5
- package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.vue +23 -23
- package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +4 -6
- package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.vue +12 -22
- package/src/components/Amelipro/AmeliproStateTile/AmeliproStateTile.vue +10 -12
- package/src/components/Amelipro/AmeliproStepper/AmeliproStepper.vue +17 -17
- package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +8 -10
- package/src/components/Amelipro/AmeliproTabs/AmeliproTabBtn/AmeliproTabBtn.vue +6 -8
- package/src/components/Amelipro/AmeliproTabs/AmeliproTabs.vue +4 -4
- package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.vue +4 -6
- package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.vue +7 -9
- package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.vue +3 -5
- package/src/components/Amelipro/AmeliproTooltips/AmeliproTooltips.vue +0 -2
- package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.vue +6 -6
- package/src/components/Amelipro/ServiceMenu/ServiceMenu.vue +2 -2
- package/src/components/Amelipro/StructureMenu/StructureBtn/StructureBtn.vue +4 -4
- package/src/components/Amelipro/StructureMenu/StructureItem/StructureItem.vue +4 -6
- package/src/components/Amelipro/StructureMenu/StructureMenu.vue +2 -2
- package/src/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.vue +2 -2
- package/src/components/Amelipro/UserMenu/UserMenu.vue +1 -3
- package/src/components/BackBtn/tests/BackBtn.visual.cy.ts +43 -0
- 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/Captcha/Captcha.vue +1 -3
- package/src/components/ChipList/ChipList.vue +14 -16
- package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +0 -2
- package/src/components/CopyBtn/CopyBtn.vue +1 -3
- package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +17 -17
- package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +31 -0
- package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +66 -0
- package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +7 -3
- package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +18 -0
- package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +66 -0
- package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +4 -6
- package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +1 -39
- package/src/components/Customs/Selects/SySelect/SySelect.vue +263 -63
- package/src/components/Customs/Selects/SySelect/accessibilite/Accessibility.mdx +199 -269
- package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +35 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +5 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +29 -0
- package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +18 -3
- package/src/components/Customs/SyPagination/SyPagination.vue +0 -2
- package/src/components/Customs/SyTabs/SyTabs.mdx +0 -58
- package/src/components/Customs/SyTabs/SyTabs.stories.ts +32 -33
- package/src/components/Customs/SyTabs/SyTabs.vue +87 -67
- package/src/components/Customs/SyTabs/accessibilite/Accessibility.mdx +83 -23
- package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +88 -0
- package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +46 -1
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +21 -41
- package/src/components/Customs/SyTextField/SyTextField.vue +4 -6
- package/src/components/DatePicker/CalendarMode/DatePicker.vue +12 -14
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +20 -16
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +23 -0
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +8 -10
- package/src/components/DatePicker/composables/tests/useDatePickerState.spec.ts +53 -0
- package/src/components/DatePicker/composables/useDatePickerState.ts +24 -0
- package/src/components/DatePicker/composables/useDateTextField.ts +0 -1
- package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +9 -8
- package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +1 -1
- package/src/components/DialogBox/DialogBox.vue +3 -5
- package/src/components/DialogBox/tests/DialogBox.visual.cy.ts +76 -0
- 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/FileList/FileList.vue +9 -2
- package/src/components/FileList/UploadItem/UploadItem.vue +11 -13
- package/src/components/FileList/tests/FileList.spec.ts +47 -0
- package/src/components/FileUpload/FileUpload.vue +3 -5
- package/src/components/FileUpload/FileUploadContent.vue +3 -5
- package/src/components/FilterInline/FilterInline.vue +1 -3
- package/src/components/FilterSideBar/FilterSideBar.mdx +44 -1
- package/src/components/FilterSideBar/FilterSideBar.stories.ts +105 -1
- package/src/components/FilterSideBar/FilterSideBar.vue +7 -0
- package/src/components/FilterSideBar/tests/FilterSideBar.a11y.spec.ts +54 -1
- package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +42 -0
- package/src/components/FooterBar/FooterBar.vue +9 -13
- package/src/components/FranceConnectBtn/FranceConnectBtn.vue +1 -1
- package/src/components/HeaderBar/HeaderBar.vue +2 -3
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.vue +2 -3
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +2 -3
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.vue +0 -1
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +8 -9
- package/src/components/HeaderBar/HeaderBurgerMenu/menu.scss +0 -8
- package/src/components/HeaderBar/HeaderBurgerMenu/tests/HeaderBurgerMenu.visual.cy.ts +196 -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/HeaderLogo/HeaderLogo.vue +0 -1
- package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +6 -7
- package/src/components/HeaderBar/tests/HeaderBar.visual.cy.ts +81 -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/HeaderNavigationBar/HeaderNavigationBar.vue +12 -3
- package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +15 -8
- package/src/components/HeaderToolbar/HeaderToolbar.vue +6 -7
- package/src/components/LangBtn/LangBtn.vue +2 -4
- package/src/components/Logo/tests/Logo.visual.cy.ts +57 -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/LogoBrandSection/LogoBrandSection.vue +2 -2
- package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +1 -1
- package/src/components/NirField/NirField.stories.ts +2 -2
- package/src/components/NirField/NirField.vue +3 -5
- package/src/components/NirField/accessibilite/Accessibility.mdx +100 -5
- package/src/components/NirField/tests/NirField.spec.ts +118 -0
- package/src/components/NirField/tests/useNirValidation.spec.ts +449 -0
- package/src/components/NirField/useNirValidation.ts +38 -32
- package/src/components/NotificationBar/Notification/Notification.vue +5 -7
- package/src/components/NotificationBar/NotificationBar.vue +1 -3
- package/src/components/PaginatedTable/PaginatedTable.vue +2 -3
- package/src/components/PaginatedTable/Pagination.vue +3 -5
- package/src/components/PasswordField/PasswordField.vue +8 -10
- package/src/components/PhoneField/PhoneField.vue +3 -3
- package/src/components/RangeField/RangeSlider/RangeSlider.vue +0 -2
- package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -1
- package/src/components/RangeField/tests/RangeField.visual.cy.ts +65 -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/RatingPicker/EmotionPicker/EmotionPicker.vue +6 -8
- package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +3 -5
- package/src/components/SearchListField/SearchListField.vue +0 -2
- package/src/components/SkipLink/SkipLink.vue +2 -4
- package/src/components/SocialMediaLinks/SocialMediaLinks.vue +6 -6
- package/src/components/SubHeader/SubHeader.vue +1 -1
- package/src/components/SyAlert/SyAlert.vue +7 -9
- package/src/components/SyAlert/tests/SyAlert.visual.cy.ts +46 -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/components/SyBtnMenu/SyBtnMenu.vue +2 -4
- package/src/components/TableToolbar/TableToolbar.vue +6 -8
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +166 -0
- package/src/components/Tables/SyServerTable/SyServerTable.vue +9 -7
- package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +23 -0
- package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +268 -0
- package/src/components/Tables/SyTable/SyTable.stories.ts +104 -0
- package/src/components/Tables/SyTable/SyTable.vue +9 -7
- package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +22 -0
- package/src/components/Tables/SyTable/tests/SyTable.spec.ts +274 -0
- package/src/components/Tables/common/SyTableFilter.vue +27 -2
- package/src/components/Tables/common/SyTablePagination.vue +142 -19
- package/src/components/Tables/common/TableHeader.vue +40 -3
- package/src/components/Tables/common/filters/SelectFilter.vue +1 -1
- package/src/components/Tables/common/locales.ts +3 -0
- package/src/components/Tables/common/tableStyles.scss +16 -19
- package/src/components/Tables/common/tests/SyTablePagination.spec.ts +18 -0
- package/src/components/Tables/common/tests/TableHeader.spec.ts +39 -0
- package/src/components/Tables/common/types.ts +2 -0
- package/src/components/Tables/common/useTableHeaders.ts +49 -27
- package/src/components/UploadWorkflow/UploadWorkflow.vue +1 -0
- package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +23 -0
- package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +66 -0
- package/src/components/UploadWorkflow/useFileList.ts +3 -0
- package/src/components/UserMenuBtn/UserMenuBtn.vue +1 -3
- package/src/composables/unifyValidation/documentationValidationProps.ts +235 -0
- package/src/composables/validation/useValidation.ts +17 -1
- package/src/composantsVuetify/VBreadcrumbs/VBreadcrumbs.mdx +28 -0
- package/src/composantsVuetify/VBreadcrumbs/v-breadcrumbs.stories.ts +108 -0
- package/src/composantsVuetify/VOtpInput/VOtpInput.mdx +39 -0
- package/src/composantsVuetify/VOtpInput/v-otp-input.stories.ts +56 -0
- package/src/composantsVuetify/VSkeletonLoader/VSkeletonLoader.mdx +42 -0
- package/src/composantsVuetify/VSkeletonLoader/v-skeleton-loader.stories.ts +77 -0
- package/src/composantsVuetify/VSwitch/VSwitch.mdx +47 -0
- package/src/composantsVuetify/VSwitch/v-switch.stories.ts +166 -0
- package/src/designTokens/tests/buildColorClassMap.spec.ts +31 -0
- package/src/designTokens/tests/generateScssTokens.spec.ts +12 -0
- package/src/designTokens/tests/themeUtils.spec.ts +53 -0
- package/src/designTokens/tokens/amelipro/apColors.ts +8 -130
- package/src/designTokens/tokens/amelipro/apColors2026.ts +3 -15
- package/src/designTokens/tokens/amelipro/apContextual.ts +55 -47
- package/src/designTokens/tokens/amelipro/apLightTheme.ts +1 -1
- package/src/designTokens/tokens/amelipro/apSemantic.ts +1 -1
- package/src/designTokens/tokens/baseColors.ts +129 -0
- package/src/designTokens/tokens/baseContextualTokens.ts +52 -0
- package/src/designTokens/tokens/cnam/cnamColors.ts +3 -125
- package/src/designTokens/tokens/cnam/cnamContextual.ts +4 -48
- package/src/designTokens/tokens/cnam/cnamLightTheme.ts +1 -1
- package/src/designTokens/tokens/cnam/cnamSemantic.ts +1 -1
- package/src/designTokens/tokens/pa/paColors.ts +2 -166
- package/src/designTokens/tokens/pa/paContextual.ts +3 -48
- package/src/designTokens/tokens/pa/paLightTheme.ts +1 -1
- package/src/designTokens/tokens/pa/paSemantic.ts +2 -2
- package/src/designTokens/utils/buildColorClassMap.ts +34 -0
- package/src/designTokens/utils/convertSemanticsToken.ts +8 -11
- package/src/designTokens/utils/createFlattenTheme.ts +15 -7
- package/src/designTokens/utils/index.ts +2 -2
- package/src/stories/Accessibilite/AuditDesignSystem.mdx +0 -11
- package/src/stories/Accessibilite/DesignSystem/Avancement.mdx +433 -0
- package/src/stories/Accessibilite/DesignSystem/a11y-status.json +692 -0
- package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +8 -1
- package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +51 -10
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +16 -9
- package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +48 -58
- package/src/stories/Components/Components.stories.ts +40 -1
- package/src/stories/Demarrer/EnrichirLeDesignSystem.mdx +4 -9
- package/src/stories/Demarrer/EnrichirLeDesignSystem.stories.ts +28 -0
- package/src/stories/Demarrer/Releases.stories.ts +48 -5
- package/src/stories/DesignTokens/ColorDisplay.vue +6 -5
- package/src/stories/DesignTokens/ColorIntegrationExample.vue +2 -4
- package/src/stories/DesignTokens/colors.stories.ts +5 -6
- package/src/stories/GuideDuDev/CreateVuetifyInstance.mdx +95 -0
- package/src/stories/GuideDuDev/Theme.mdx +36 -26
- package/src/stories/GuideDuDev/moduleDeNotification.mdx +3 -2
- package/src/stories/styles/accessibility-guide.css +3 -3
- package/src/utils/functions/classToHex.ts +6 -34
- package/src/utils/functions/createHexResolver.ts +45 -0
- package/src/utils/functions/tests/classToHex.spec.ts +36 -0
- package/src/utils/functions/tests/convertToHex.spec.ts +31 -0
- package/src/utils/functions/tests/createHexResolver.spec.ts +66 -0
- package/src/utils/functions/tests/isCssColor.spec.ts +48 -0
- package/dist/apLightTheme-CFSRrjv2.cjs +0 -1
- package/dist/designTokens/utils/convertGaps.d.ts +0 -5
- package/dist/main-BtTqyn4z.js +0 -38648
- package/dist/main-C1e3eoxd.cjs +0 -1067
- package/src/assets/apTokens.scss +0 -343
- package/src/assets/overrides/_container.scss +0 -36
- package/src/assets/tokens.scss +0 -388
- package/src/designTokens/apColors.md +0 -66
- package/src/designTokens/cnamColors.md +0 -193
- package/src/designTokens/paColors.md +0 -66
- package/src/designTokens/tokens/json/contextual-tokens.json +0 -156
- package/src/designTokens/tokens/json/primitives.json +0 -209
- package/src/designTokens/tokens/json/semantic.json +0 -120
- package/src/designTokens/utils/convertGaps.ts +0 -11
- package/src/stories/Accessibilite/Avancement/Avancement.mdx +0 -533
- package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +0 -306
|
@@ -370,14 +370,12 @@
|
|
|
370
370
|
</template>
|
|
371
371
|
|
|
372
372
|
<style lang="scss" scoped>
|
|
373
|
-
@use '@/assets/amelipro/apTokens2026' as apTokens;
|
|
374
|
-
|
|
375
373
|
.amelipro-tile-btn {
|
|
376
374
|
position: relative;
|
|
377
375
|
display: flex;
|
|
378
376
|
flex-direction: column;
|
|
379
|
-
background-color:
|
|
380
|
-
border-radius:
|
|
377
|
+
background-color: rgb(var(--v-theme-surface));
|
|
378
|
+
border-radius: var(--v-ap-inputRadius);
|
|
381
379
|
white-space: normal;
|
|
382
380
|
}
|
|
383
381
|
|
|
@@ -398,7 +396,7 @@
|
|
|
398
396
|
}
|
|
399
397
|
|
|
400
398
|
&:focus {
|
|
401
|
-
outline: 1px dotted
|
|
399
|
+
outline: 1px dotted rgb(var(--v-theme-ap-grey-darken-1));
|
|
402
400
|
}
|
|
403
401
|
|
|
404
402
|
& :deep(.v-btn__content) {
|
|
@@ -643,14 +643,14 @@
|
|
|
643
643
|
</template>
|
|
644
644
|
|
|
645
645
|
<style lang="scss" scoped>
|
|
646
|
-
@use '@/assets/
|
|
646
|
+
@use '@/assets/overrides/breakpoints' as bp;
|
|
647
647
|
|
|
648
648
|
.amelipro-upload {
|
|
649
|
-
padding:
|
|
650
|
-
border-radius:
|
|
649
|
+
padding: var(--v-ap-cardPaddingDesktop);
|
|
650
|
+
border-radius: var(--v-ap-btnRadius);
|
|
651
651
|
|
|
652
|
-
@media #{
|
|
653
|
-
padding:
|
|
652
|
+
@media #{bp.$down-xs} {
|
|
653
|
+
padding: var(--v-ap-cardPaddingMobile);
|
|
654
654
|
}
|
|
655
655
|
}
|
|
656
656
|
|
|
@@ -687,7 +687,7 @@
|
|
|
687
687
|
}
|
|
688
688
|
|
|
689
689
|
& :deep(.label-outline) {
|
|
690
|
-
outline: 1px dotted
|
|
690
|
+
outline: 1px dotted rgb(var(--v-theme-ap-grey-darken-1));
|
|
691
691
|
}
|
|
692
692
|
|
|
693
693
|
& :deep(.v-input__control) {
|
|
@@ -174,7 +174,7 @@
|
|
|
174
174
|
</template>
|
|
175
175
|
|
|
176
176
|
<style lang="scss" scoped>
|
|
177
|
-
@use '@/assets/
|
|
177
|
+
@use '@/assets/overrides/breakpoints' as bp;
|
|
178
178
|
|
|
179
179
|
:deep(.v-overlay__content) {
|
|
180
180
|
top: 40px;
|
|
@@ -183,7 +183,7 @@
|
|
|
183
183
|
z-index: 8;
|
|
184
184
|
border-radius: 4px;
|
|
185
185
|
|
|
186
|
-
@media #{
|
|
186
|
+
@media #{bp.$up-md} {
|
|
187
187
|
left: -800px;
|
|
188
188
|
}
|
|
189
189
|
}
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
</template>
|
|
53
53
|
|
|
54
54
|
<style lang="scss" scoped>
|
|
55
|
-
@use '@/assets/
|
|
55
|
+
@use '@/assets/overrides/breakpoints' as bp;
|
|
56
56
|
|
|
57
57
|
.v-btn {
|
|
58
58
|
letter-spacing: unset;
|
|
@@ -74,10 +74,10 @@
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
&:focus {
|
|
77
|
-
outline: 1px dotted
|
|
77
|
+
outline: 1px dotted rgb(var(--v-theme-ap-grey-darken-1));
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
@media #{
|
|
80
|
+
@media #{bp.$down-xs} {
|
|
81
81
|
margin-bottom: 8px;
|
|
82
82
|
width: 100% !important;
|
|
83
83
|
}
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
opacity: 1 !important;
|
|
88
88
|
|
|
89
89
|
:deep(.v-btn__content) {
|
|
90
|
-
color:
|
|
90
|
+
color: rgb(var(--v-theme-ap-grey)) !important;
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
</style>
|
|
@@ -107,8 +107,6 @@
|
|
|
107
107
|
</template>
|
|
108
108
|
|
|
109
109
|
<style lang="scss" scoped>
|
|
110
|
-
@use '@/assets/amelipro/apTokens2026' as apTokens;
|
|
111
|
-
|
|
112
110
|
input {
|
|
113
111
|
position: absolute;
|
|
114
112
|
width: 0;
|
|
@@ -122,17 +120,17 @@ input {
|
|
|
122
120
|
|
|
123
121
|
.hover-style {
|
|
124
122
|
&:hover {
|
|
125
|
-
background-color:
|
|
123
|
+
background-color: rgb(var(--v-theme-ap-blue-lighten-3)) !important;
|
|
126
124
|
}
|
|
127
125
|
}
|
|
128
126
|
|
|
129
127
|
.selected-border {
|
|
130
|
-
border: 1px solid
|
|
128
|
+
border: 1px solid rgb(var(--v-theme-ap-blue));
|
|
131
129
|
}
|
|
132
130
|
|
|
133
131
|
.structure {
|
|
134
|
-
font-size:
|
|
135
|
-
color:
|
|
132
|
+
font-size: var(--v-ap-fontSizeXs);
|
|
133
|
+
color: rgb(var(--v-theme-ap-grey-darken-1));
|
|
136
134
|
|
|
137
135
|
.name {
|
|
138
136
|
font-weight: 600;
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
</template>
|
|
228
228
|
|
|
229
229
|
<style lang="scss" scoped>
|
|
230
|
-
@use '@/assets/
|
|
230
|
+
@use '@/assets/overrides/breakpoints' as bp;
|
|
231
231
|
|
|
232
232
|
.v-input.amelipro-switch {
|
|
233
233
|
margin-top: 0;
|
|
@@ -237,7 +237,7 @@
|
|
|
237
237
|
width: 50% !important;
|
|
238
238
|
max-width: 50% !important;
|
|
239
239
|
|
|
240
|
-
@media #{
|
|
240
|
+
@media #{bp.$down-sm} {
|
|
241
241
|
width: 100% !important;
|
|
242
242
|
max-width: 100% !important;
|
|
243
243
|
}
|
|
@@ -177,10 +177,10 @@
|
|
|
177
177
|
</template>
|
|
178
178
|
|
|
179
179
|
<style lang="scss" scoped>
|
|
180
|
-
@use '@/assets/
|
|
180
|
+
@use '@/assets/overrides/breakpoints' as bp;
|
|
181
181
|
|
|
182
182
|
.tabs-btn-wrapper {
|
|
183
|
-
@media #{
|
|
183
|
+
@media #{bp.$down-xs} {
|
|
184
184
|
width: 100% !important;
|
|
185
185
|
}
|
|
186
186
|
}
|
|
@@ -130,8 +130,6 @@
|
|
|
130
130
|
</template>
|
|
131
131
|
|
|
132
132
|
<style lang="scss" scoped>
|
|
133
|
-
@use '@/assets/amelipro/apTokens2026' as apTokens;
|
|
134
|
-
|
|
135
133
|
.v-btn :deep(.v-btn__content) {
|
|
136
134
|
opacity: 1 !important;
|
|
137
135
|
}
|
|
@@ -154,7 +152,7 @@
|
|
|
154
152
|
}
|
|
155
153
|
|
|
156
154
|
.user-menu-last-connexion {
|
|
157
|
-
font-size:
|
|
155
|
+
font-size: var(--v-ap-fontSizeXs);
|
|
158
156
|
}
|
|
159
157
|
|
|
160
158
|
.user-menu__btn--account,
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import BackBtn from '../BackBtn.vue'
|
|
2
|
+
|
|
3
|
+
describe('BackBtn - Visual regression tests', () => {
|
|
4
|
+
it('displays the btn by default', () => {
|
|
5
|
+
cy.mountWithVuetify(BackBtn)
|
|
6
|
+
|
|
7
|
+
cy.get('.v-btn').should('be.visible')
|
|
8
|
+
cy.matchImageSnapshot('back-btn-default', cy.get('.v-btn'))
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
it('displays the btn without icon', () => {
|
|
12
|
+
cy.mountWithVuetify(BackBtn, {
|
|
13
|
+
props: { hideBackIcon: true },
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
cy.get('.v-btn').should('be.visible')
|
|
17
|
+
cy.matchImageSnapshot('back-btn-no-icon', cy.get('.v-btn'))
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
it('displays the btn in dark mode', () => {
|
|
21
|
+
cy.mountWithVuetify(BackBtn, {
|
|
22
|
+
props: {
|
|
23
|
+
dark: true,
|
|
24
|
+
},
|
|
25
|
+
})
|
|
26
|
+
cy.get('.v-application').invoke('css', 'background-color', '#121212')
|
|
27
|
+
|
|
28
|
+
cy.get('.v-btn').should('be.visible')
|
|
29
|
+
cy.get('.v-btn').matchImageSnapshot('back-btn-dark-mode', cy.get('.v-btn'))
|
|
30
|
+
cy.get('.v-application').invoke('css', 'background-color', '')
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
it('displays the btn with custom background', () => {
|
|
34
|
+
cy.mountWithVuetify(BackBtn, {
|
|
35
|
+
props: { backgroundColor: '#f5f5f5' },
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
cy.get('.v-btn').should('be.visible')
|
|
39
|
+
// cy.get('.v-btn').matchImageSnapshot('back-btn-custom-bg')
|
|
40
|
+
// take a snapshot of the button and not the whole page to avoid snapshotting the background color of the page
|
|
41
|
+
cy.matchImageSnapshot('back-btn-custom-bg', cy.get('.v-btn'))
|
|
42
|
+
})
|
|
43
|
+
})
|
|
@@ -300,8 +300,6 @@
|
|
|
300
300
|
</template>
|
|
301
301
|
|
|
302
302
|
<style scoped lang="scss">
|
|
303
|
-
@use '@/assets/tokens';
|
|
304
|
-
|
|
305
303
|
.label-options {
|
|
306
304
|
font-size: 0.875rem;
|
|
307
305
|
font-weight: 400;
|
|
@@ -310,7 +308,7 @@
|
|
|
310
308
|
.captcha-audio :deep(.v-btn__content) span {
|
|
311
309
|
display: flex;
|
|
312
310
|
align-items: center;
|
|
313
|
-
gap:
|
|
311
|
+
gap: var(--v-gap-2);
|
|
314
312
|
letter-spacing: 0%;
|
|
315
313
|
}
|
|
316
314
|
|
|
@@ -302,8 +302,6 @@
|
|
|
302
302
|
</template>
|
|
303
303
|
|
|
304
304
|
<style lang="scss" scoped>
|
|
305
|
-
@use '@/assets/tokens';
|
|
306
|
-
|
|
307
305
|
// Styles pour la liste HTML native
|
|
308
306
|
.sy-chip-list ul {
|
|
309
307
|
list-style: none;
|
|
@@ -342,30 +340,30 @@
|
|
|
342
340
|
}
|
|
343
341
|
|
|
344
342
|
.sy-chip-success {
|
|
345
|
-
color:
|
|
346
|
-
border: 1px solid
|
|
343
|
+
color: rgb(var(--v-theme-textSuccess)) !important;
|
|
344
|
+
border: 1px solid rgb(var(--v-theme-borderSuccess)) !important;
|
|
347
345
|
}
|
|
348
346
|
|
|
349
347
|
.sy-chip-error {
|
|
350
|
-
color:
|
|
351
|
-
border: 1px solid
|
|
348
|
+
color: rgb(var(--v-theme-textError)) !important;
|
|
349
|
+
border: 1px solid rgb(var(--v-theme-borderError)) !important;
|
|
352
350
|
}
|
|
353
351
|
|
|
354
352
|
.sy-chip-info {
|
|
355
|
-
color:
|
|
356
|
-
border: 1px solid
|
|
353
|
+
color: rgb(var(--v-theme-textInfo)) !important;
|
|
354
|
+
border: 1px solid rgb(var(--v-theme-borderInfo)) !important;
|
|
357
355
|
}
|
|
358
356
|
|
|
359
357
|
.sy-chip-warning {
|
|
360
|
-
color:
|
|
361
|
-
border: 1px solid
|
|
358
|
+
color: rgb(var(--v-theme-textWarning)) !important;
|
|
359
|
+
border: 1px solid rgb(var(--v-theme-borderWarning)) !important;
|
|
362
360
|
}
|
|
363
361
|
|
|
364
362
|
.overflow-chip {
|
|
365
363
|
cursor: pointer;
|
|
366
364
|
|
|
367
365
|
&:focus-visible {
|
|
368
|
-
outline: 2px solid
|
|
366
|
+
outline: 2px solid rgb(var(--v-theme-primary)) !important;
|
|
369
367
|
outline-offset: 2px !important;
|
|
370
368
|
}
|
|
371
369
|
}
|
|
@@ -377,27 +375,27 @@
|
|
|
377
375
|
|
|
378
376
|
// Bouton "Réinitialiser le filtre" - améliorer le contraste de la bordure de focus
|
|
379
377
|
.overflow-btn:focus-visible {
|
|
380
|
-
outline: 2px solid
|
|
378
|
+
outline: 2px solid rgb(var(--v-theme-primary)) !important;
|
|
381
379
|
}
|
|
382
380
|
|
|
383
381
|
// Styles spécifiques pour améliorer le contraste de focus selon le thème du chip
|
|
384
382
|
.sy-chip-success .remove-chip:focus-visible {
|
|
385
|
-
outline: 2px solid
|
|
383
|
+
outline: 2px solid rgb(var(--v-theme-borderSuccess)) !important;
|
|
386
384
|
outline-offset: -2px !important;
|
|
387
385
|
}
|
|
388
386
|
|
|
389
387
|
.sy-chip-info .remove-chip:focus-visible {
|
|
390
|
-
outline: 2px solid
|
|
388
|
+
outline: 2px solid rgb(var(--v-theme-borderInfo)) !important;
|
|
391
389
|
outline-offset: -2px !important;
|
|
392
390
|
}
|
|
393
391
|
|
|
394
392
|
.sy-chip-warning .remove-chip:focus-visible {
|
|
395
|
-
outline: 2px solid
|
|
393
|
+
outline: 2px solid rgb(var(--v-theme-borderWarning)) !important;
|
|
396
394
|
outline-offset: -2px !important;
|
|
397
395
|
}
|
|
398
396
|
|
|
399
397
|
.sy-chip-error .remove-chip:focus-visible {
|
|
400
|
-
outline: 2px solid
|
|
398
|
+
outline: 2px solid rgb(var(--v-theme-borderError)) !important;
|
|
401
399
|
outline-offset: -2px !important;
|
|
402
400
|
}
|
|
403
401
|
</style>
|
|
@@ -125,8 +125,6 @@
|
|
|
125
125
|
</template>
|
|
126
126
|
|
|
127
127
|
<style lang="scss" scoped>
|
|
128
|
-
@use '@/assets/tokens';
|
|
129
|
-
|
|
130
128
|
.v-btn:deep() {
|
|
131
129
|
.v-btn__underlay,
|
|
132
130
|
.v-btn__overlay {
|
|
@@ -143,6 +141,6 @@
|
|
|
143
141
|
}
|
|
144
142
|
|
|
145
143
|
.v-btn--icon .v-icon {
|
|
146
|
-
color:
|
|
144
|
+
color: rgb(var(--v-theme-grey-lighten20));
|
|
147
145
|
}
|
|
148
146
|
</style>
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
(e: 'update:error-messages', value: string[] | undefined): void
|
|
36
36
|
}>()
|
|
37
37
|
|
|
38
|
-
const internalValue = ref<SelectBtnValue>(null)
|
|
38
|
+
const internalValue = ref<SelectBtnValue>(props.multiple ? [] : null)
|
|
39
39
|
const darktheme = ref<boolean>(false)
|
|
40
40
|
const listRef = ref<HTMLElement | null>(null)
|
|
41
41
|
const optionsRef = ref<Array<HTMLElement>>([])
|
|
@@ -48,11 +48,12 @@
|
|
|
48
48
|
})
|
|
49
49
|
|
|
50
50
|
watch(() => props.modelValue, (value) => {
|
|
51
|
-
if (
|
|
52
|
-
internalValue.value = []
|
|
53
|
-
|
|
51
|
+
if (props.multiple) {
|
|
52
|
+
internalValue.value = Array.isArray(value) ? value : []
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
internalValue.value = value ?? null
|
|
54
56
|
}
|
|
55
|
-
internalValue.value = value
|
|
56
57
|
}, {
|
|
57
58
|
immediate: true,
|
|
58
59
|
deep: true,
|
|
@@ -79,10 +80,12 @@
|
|
|
79
80
|
|
|
80
81
|
function getNewValue(item: SelectBtnItem): SelectBtnValue {
|
|
81
82
|
if (props.multiple) {
|
|
82
|
-
const typedValue = internalValue.value
|
|
83
|
+
const typedValue = Array.isArray(internalValue.value)
|
|
84
|
+
? internalValue.value
|
|
85
|
+
: []
|
|
83
86
|
|
|
84
87
|
// if the item is unique, select only it
|
|
85
|
-
if (item.unique && typedValue.includes(item.value)
|
|
88
|
+
if (item.unique && !typedValue.includes(item.value)) {
|
|
86
89
|
return [item.value]
|
|
87
90
|
}
|
|
88
91
|
|
|
@@ -199,8 +202,7 @@
|
|
|
199
202
|
// Don't auto-select if focus was caused by mouse interaction
|
|
200
203
|
if (isMouseInteraction.value) {
|
|
201
204
|
const element = e.target as HTMLElement
|
|
202
|
-
|
|
203
|
-
focusedIndex.value = index
|
|
205
|
+
focusedIndex.value = optionsRef.value.findIndex(item => item === element)
|
|
204
206
|
return
|
|
205
207
|
}
|
|
206
208
|
|
|
@@ -265,7 +267,7 @@
|
|
|
265
267
|
}"
|
|
266
268
|
role="option"
|
|
267
269
|
:tabindex="index === focusedIndex ? '0' : '-1'"
|
|
268
|
-
:aria-selected="
|
|
270
|
+
:aria-selected="props.multiple ? undefined : (isSelected(item.value) ? 'true' : 'false')"
|
|
269
271
|
:aria-checked="props.multiple ? (isSelected(item.value) ? 'true' : 'false') : undefined"
|
|
270
272
|
@keydown.space.prevent="toggleItem(item)"
|
|
271
273
|
@mousedown="handleMouseDown"
|
|
@@ -308,14 +310,12 @@
|
|
|
308
310
|
</template>
|
|
309
311
|
|
|
310
312
|
<style lang="scss" scoped>
|
|
311
|
-
@use '@/assets/tokens';
|
|
312
|
-
|
|
313
313
|
.select-btn-field__options {
|
|
314
314
|
display: flex;
|
|
315
315
|
list-style-type: none;
|
|
316
316
|
padding: 0;
|
|
317
317
|
margin: 0;
|
|
318
|
-
gap:
|
|
318
|
+
gap: var(--v-gap-2);
|
|
319
319
|
}
|
|
320
320
|
|
|
321
321
|
.select-btn-field__options--inline {
|
|
@@ -335,10 +335,10 @@
|
|
|
335
335
|
cursor: pointer;
|
|
336
336
|
position: relative;
|
|
337
337
|
transition: background-color 0.2s, color 0.2s;
|
|
338
|
-
background-color:
|
|
338
|
+
background-color: rgb(var(--v-theme-surface));
|
|
339
339
|
|
|
340
340
|
&--selected {
|
|
341
|
-
color:
|
|
341
|
+
color: rgb(var(--v-theme-textOnDark));
|
|
342
342
|
background-color: rgb(var(--v-theme-primary));
|
|
343
343
|
}
|
|
344
344
|
|
|
@@ -377,7 +377,7 @@
|
|
|
377
377
|
}
|
|
378
378
|
|
|
379
379
|
.select-btn-field__options--error .select-btn-field__item {
|
|
380
|
-
color:
|
|
381
|
-
border-color:
|
|
380
|
+
color: rgb(var(--v-theme-textError));
|
|
381
|
+
border-color: rgb(var(--v-theme-borderError));
|
|
382
382
|
}
|
|
383
383
|
</style>
|
|
@@ -118,6 +118,37 @@ describe('SelectBtnField', () => {
|
|
|
118
118
|
])
|
|
119
119
|
})
|
|
120
120
|
|
|
121
|
+
it('handles multiple mode safely when modelValue is null', async () => {
|
|
122
|
+
const wrapper = mount(SelectBtnField, {
|
|
123
|
+
props: {
|
|
124
|
+
label: 'Test',
|
|
125
|
+
hint: 'Test',
|
|
126
|
+
items: [
|
|
127
|
+
{
|
|
128
|
+
text: 'Test',
|
|
129
|
+
value: 'test',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
text: 'Test 2',
|
|
133
|
+
value: 'test2',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
text: 'Test 3',
|
|
137
|
+
value: 'test3',
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
multiple: true,
|
|
141
|
+
modelValue: null,
|
|
142
|
+
},
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
await wrapper.find('[role="option"]').trigger('click')
|
|
146
|
+
|
|
147
|
+
expect(wrapper.emitted('update:modelValue')).toEqual([
|
|
148
|
+
[['test']],
|
|
149
|
+
])
|
|
150
|
+
})
|
|
151
|
+
|
|
121
152
|
it(`display correctly with an error`, () => {
|
|
122
153
|
const wrapper = mount(SelectBtnField, {
|
|
123
154
|
props: {
|
|
@@ -125,6 +125,10 @@ const meta: Meta<typeof SyAutocomplete> = {
|
|
|
125
125
|
action: 'update:modelValue',
|
|
126
126
|
description: 'Émis lors de la sélection d\'une option. Reçoit la valeur sélectionnée.',
|
|
127
127
|
},
|
|
128
|
+
'disabled': {
|
|
129
|
+
control: 'boolean',
|
|
130
|
+
description: 'Désactive le champ',
|
|
131
|
+
},
|
|
128
132
|
'readonly': {
|
|
129
133
|
control: 'boolean',
|
|
130
134
|
description: 'Rend le champ en lecture seule',
|
|
@@ -1199,6 +1203,68 @@ const items = [
|
|
|
1199
1203
|
},
|
|
1200
1204
|
}
|
|
1201
1205
|
|
|
1206
|
+
export const DisabledField: Story = {
|
|
1207
|
+
parameters: {
|
|
1208
|
+
sourceCode: [
|
|
1209
|
+
{
|
|
1210
|
+
name: 'Template',
|
|
1211
|
+
code: `
|
|
1212
|
+
<template>
|
|
1213
|
+
<SyAutocomplete
|
|
1214
|
+
v-model="selectedValue"
|
|
1215
|
+
:items="items"
|
|
1216
|
+
label="Champ désactivé"
|
|
1217
|
+
disabled
|
|
1218
|
+
/>
|
|
1219
|
+
</template>
|
|
1220
|
+
`,
|
|
1221
|
+
},
|
|
1222
|
+
{
|
|
1223
|
+
name: 'Script',
|
|
1224
|
+
code: `
|
|
1225
|
+
<script setup lang="ts">
|
|
1226
|
+
import { ref } from 'vue'
|
|
1227
|
+
import { SyAutocomplete } from '@cnamts/synapse'
|
|
1228
|
+
|
|
1229
|
+
const selectedValue = ref('Axel')
|
|
1230
|
+
const items = [
|
|
1231
|
+
{ text: 'Adrien', value: 'Adrien' },
|
|
1232
|
+
{ text: 'Axel', value: 'Axel' },
|
|
1233
|
+
{ text: 'Baptiste', value: 'Baptiste' },
|
|
1234
|
+
]
|
|
1235
|
+
</script>
|
|
1236
|
+
`,
|
|
1237
|
+
},
|
|
1238
|
+
],
|
|
1239
|
+
},
|
|
1240
|
+
args: {
|
|
1241
|
+
items: [
|
|
1242
|
+
{ text: 'Adrien', value: 'Adrien' },
|
|
1243
|
+
{ text: 'Axel', value: 'Axel' },
|
|
1244
|
+
{ text: 'Baptiste', value: 'Baptiste' },
|
|
1245
|
+
],
|
|
1246
|
+
label: 'Champ désactivé',
|
|
1247
|
+
disabled: true,
|
|
1248
|
+
},
|
|
1249
|
+
render: (args) => {
|
|
1250
|
+
return {
|
|
1251
|
+
components: { SyAutocomplete },
|
|
1252
|
+
setup() {
|
|
1253
|
+
const selectedValue = ref('Axel')
|
|
1254
|
+
return { args, selectedValue }
|
|
1255
|
+
},
|
|
1256
|
+
template: `
|
|
1257
|
+
<div class="pa-4">
|
|
1258
|
+
<SyAutocomplete
|
|
1259
|
+
v-model="selectedValue"
|
|
1260
|
+
v-bind="args"
|
|
1261
|
+
/>
|
|
1262
|
+
</div>
|
|
1263
|
+
`,
|
|
1264
|
+
}
|
|
1265
|
+
},
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1202
1268
|
export const WithCustomKeys: Story = {
|
|
1203
1269
|
parameters: {
|
|
1204
1270
|
|
|
@@ -123,6 +123,10 @@
|
|
|
123
123
|
type: String,
|
|
124
124
|
default: '',
|
|
125
125
|
},
|
|
126
|
+
disabled: {
|
|
127
|
+
type: Boolean,
|
|
128
|
+
default: false,
|
|
129
|
+
},
|
|
126
130
|
readonly: {
|
|
127
131
|
type: Boolean,
|
|
128
132
|
default: false,
|
|
@@ -420,6 +424,7 @@
|
|
|
420
424
|
}
|
|
421
425
|
|
|
422
426
|
const openAndFocus = () => {
|
|
427
|
+
if (props.disabled || props.readonly) return
|
|
423
428
|
markInteracted()
|
|
424
429
|
isOpen.value = true
|
|
425
430
|
focusInput(textFieldRef)
|
|
@@ -488,6 +493,7 @@
|
|
|
488
493
|
:placeholder="hasInlineSelections || hasSelectionTextDisplay ? '' : placeholder"
|
|
489
494
|
:is-active="hasInlineSelections || hasSelectionTextDisplay"
|
|
490
495
|
:readonly="readonly"
|
|
496
|
+
:disabled="disabled"
|
|
491
497
|
:bg-color="bgColor"
|
|
492
498
|
:density="density"
|
|
493
499
|
:autocomplete="'off'"
|
|
@@ -627,8 +633,6 @@
|
|
|
627
633
|
</template>
|
|
628
634
|
|
|
629
635
|
<style scoped lang="scss">
|
|
630
|
-
@use '@/assets/tokens';
|
|
631
|
-
|
|
632
636
|
.sy-autocomplete {
|
|
633
637
|
width: 100%;
|
|
634
638
|
position: relative;
|
|
@@ -724,7 +728,7 @@ li:hover {
|
|
|
724
728
|
.v-list-item.keyboard-focused,
|
|
725
729
|
li:focus-visible,
|
|
726
730
|
li.keyboard-focused {
|
|
727
|
-
outline: 2px solid rgb(var(--v-theme-
|
|
731
|
+
outline: 2px solid rgb(var(--v-theme-borderAccentPrimary));
|
|
728
732
|
outline-offset: -2px;
|
|
729
733
|
background-color: rgb(0 0 0 / 8%);
|
|
730
734
|
}
|
|
@@ -146,6 +146,24 @@ describe('SyAutocomplete – accessibility (axe)', () => {
|
|
|
146
146
|
})
|
|
147
147
|
})
|
|
148
148
|
|
|
149
|
+
it('has no obvious axe violations for disabled field', async () => {
|
|
150
|
+
const wrapper = mount(SyAutocomplete, {
|
|
151
|
+
props: {
|
|
152
|
+
modelValue: 'Option 1',
|
|
153
|
+
items,
|
|
154
|
+
label: 'Champ désactivé',
|
|
155
|
+
textKey: 'text',
|
|
156
|
+
valueKey: 'value',
|
|
157
|
+
disabled: true,
|
|
158
|
+
},
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
162
|
+
assertNoA11yViolations(results, 'SyAutocomplete – disabled field', {
|
|
163
|
+
ignoreRules: ['region'],
|
|
164
|
+
})
|
|
165
|
+
})
|
|
166
|
+
|
|
149
167
|
it('has no obvious axe violations when hideDetails is true', async () => {
|
|
150
168
|
const wrapper = mount(SyAutocomplete, {
|
|
151
169
|
props: {
|