@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
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
import axios from 'axios'
|
|
2
|
-
import { onMounted,
|
|
2
|
+
import { onMounted, shallowRef } from 'vue'
|
|
3
3
|
import * as marked from 'marked'
|
|
4
4
|
import SyAlert from '../../components/SyAlert/SyAlert.vue'
|
|
5
5
|
|
|
6
|
+
type GitHubRelease = {
|
|
7
|
+
id: number
|
|
8
|
+
name?: string | null
|
|
9
|
+
tag_name?: string | null
|
|
10
|
+
published_at: string
|
|
11
|
+
body?: string | null
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
type ReleaseAlert = {
|
|
15
|
+
id: string
|
|
16
|
+
releaseVersion: string
|
|
17
|
+
message: string
|
|
18
|
+
type: 'success' | 'info' | 'warning' | 'error'
|
|
19
|
+
variant: 'tonal' | 'outlined'
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const releaseAlerts: ReleaseAlert[] = [
|
|
23
|
+
{
|
|
24
|
+
id: 'starter-kit-2-0-32',
|
|
25
|
+
releaseVersion: 'v1.0.24',
|
|
26
|
+
message: 'Il est conseillé de faire une montée de version du Starter Kit en 2.0.32',
|
|
27
|
+
type: 'warning',
|
|
28
|
+
variant: 'tonal',
|
|
29
|
+
},
|
|
30
|
+
]
|
|
31
|
+
|
|
6
32
|
export default {
|
|
7
33
|
title: 'Démarrer/Releases',
|
|
8
34
|
component: SyAlert,
|
|
@@ -12,8 +38,8 @@ export const List = {
|
|
|
12
38
|
return {
|
|
13
39
|
components: { SyAlert },
|
|
14
40
|
setup() {
|
|
15
|
-
const releases =
|
|
16
|
-
const errorMessage =
|
|
41
|
+
const releases = shallowRef<GitHubRelease[]>([])
|
|
42
|
+
const errorMessage = shallowRef('')
|
|
17
43
|
|
|
18
44
|
const fetchReleases = async () => {
|
|
19
45
|
try {
|
|
@@ -30,8 +56,14 @@ export const List = {
|
|
|
30
56
|
return new Date(date).toLocaleDateString()
|
|
31
57
|
}
|
|
32
58
|
|
|
33
|
-
const formatMarkdown = (markdown
|
|
34
|
-
return marked.parse(markdown)
|
|
59
|
+
const formatMarkdown = (markdown?: string | null) => {
|
|
60
|
+
return marked.parse(markdown ?? '')
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const getReleaseAlerts = (release: GitHubRelease) => {
|
|
64
|
+
return releaseAlerts.filter(alert =>
|
|
65
|
+
[release.name, release.tag_name].some(value => value?.includes(alert.releaseVersion)),
|
|
66
|
+
)
|
|
35
67
|
}
|
|
36
68
|
|
|
37
69
|
onMounted(() => {
|
|
@@ -43,6 +75,7 @@ export const List = {
|
|
|
43
75
|
errorMessage,
|
|
44
76
|
formatDate,
|
|
45
77
|
formatMarkdown,
|
|
78
|
+
getReleaseAlerts,
|
|
46
79
|
}
|
|
47
80
|
},
|
|
48
81
|
template: `
|
|
@@ -60,6 +93,16 @@ export const List = {
|
|
|
60
93
|
<div v-else>
|
|
61
94
|
<div v-for="release in releases" :key="release.id">
|
|
62
95
|
<h2>{{ release.name }} ({{ formatDate(release.published_at) }})</h2>
|
|
96
|
+
<SyAlert
|
|
97
|
+
v-for="alert in getReleaseAlerts(release)"
|
|
98
|
+
:key="alert.id"
|
|
99
|
+
:type="alert.type"
|
|
100
|
+
:variant="alert.variant"
|
|
101
|
+
:closable="false"
|
|
102
|
+
class="mt-2 mb-4"
|
|
103
|
+
>
|
|
104
|
+
<template #default>{{ alert.message }}</template>
|
|
105
|
+
</SyAlert>
|
|
63
106
|
<div v-html="formatMarkdown(release.body)"></div>
|
|
64
107
|
<hr>
|
|
65
108
|
</div>
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
/* eslint-disabled vuejs-accessibility/anchor-has-content */
|
|
3
3
|
import SyHeading from '@/components/SyHeading/SyHeading.vue'
|
|
4
4
|
import { computed } from 'vue'
|
|
5
|
+
import { useTheme } from 'vuetify'
|
|
5
6
|
import { VContainer, VRow, VCol, VCard, VCardTitle, VCardSubtitle } from 'vuetify/components'
|
|
6
7
|
|
|
7
8
|
interface Props {
|
|
@@ -17,16 +18,16 @@
|
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
const props = defineProps<Props>()
|
|
21
|
+
const theme = useTheme()
|
|
20
22
|
|
|
21
|
-
const theme = computed(() => typeof window !== 'undefined' ? localStorage.getItem('storybook-theme') : 'cnam')
|
|
22
23
|
const displayColors = computed(() => {
|
|
23
|
-
if (theme.value === 'pa') {
|
|
24
|
+
if (theme.global.name.value === 'pa') {
|
|
24
25
|
return props.paColors
|
|
25
26
|
}
|
|
26
|
-
if (theme.value === 'ap') {
|
|
27
|
+
if (theme.global.name.value === 'ap') {
|
|
27
28
|
return props.apColors
|
|
28
29
|
}
|
|
29
|
-
if (theme.value === 'ap2026') {
|
|
30
|
+
if (theme.global.name.value === 'ap2026') {
|
|
30
31
|
return props.apColors2026
|
|
31
32
|
}
|
|
32
33
|
return props.cnamColors
|
|
@@ -42,7 +43,7 @@
|
|
|
42
43
|
<div
|
|
43
44
|
v-if="!isEmptyObject(displayColors) ||
|
|
44
45
|
(isEmptyObject(displayColors) && displayEmptyColors &&
|
|
45
|
-
!['ap2026', 'ap', 'cnam', 'pa'].includes(theme
|
|
46
|
+
!['ap2026', 'ap', 'cnam', 'pa'].includes(theme.global.name.value))"
|
|
46
47
|
class="mb-5"
|
|
47
48
|
>
|
|
48
49
|
<SyHeading
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
<pre style="margin: 0; font-size: 12px; color: #333;"><code>@use '@cnamts/synapse/assets/tokens' as tokens;
|
|
27
27
|
|
|
28
28
|
.my-color {
|
|
29
|
-
color:
|
|
29
|
+
color: rgb(var(--v-theme-yellow-lighten40)) !important;
|
|
30
30
|
}</code></pre>
|
|
31
31
|
</div>
|
|
32
32
|
</div>
|
|
@@ -35,9 +35,7 @@
|
|
|
35
35
|
</template>
|
|
36
36
|
|
|
37
37
|
<style lang="scss" scoped>
|
|
38
|
-
@use '@/assets/tokens' as tokens;
|
|
39
|
-
|
|
40
38
|
.my-color {
|
|
41
|
-
color:
|
|
39
|
+
color: rgb(var(--v-theme-yellow-lighten40)) !important;
|
|
42
40
|
}
|
|
43
41
|
</style>
|
|
@@ -61,11 +61,7 @@ export const Theme: StoryObj = {
|
|
|
61
61
|
render: () => {
|
|
62
62
|
return {
|
|
63
63
|
setup() {
|
|
64
|
-
const theme =
|
|
65
|
-
const value
|
|
66
|
-
= typeof window !== 'undefined' ? localStorage.getItem('storybook-theme') : 'cnam'
|
|
67
|
-
return (value as ThemeKey) ?? 'cnam'
|
|
68
|
-
})
|
|
64
|
+
const theme = useTheme()
|
|
69
65
|
|
|
70
66
|
const themeLabels: Record<ThemeKey, string> = {
|
|
71
67
|
cnam: 'Assurance Maladie',
|
|
@@ -74,7 +70,10 @@ export const Theme: StoryObj = {
|
|
|
74
70
|
ap2026: 'AmeliPro',
|
|
75
71
|
}
|
|
76
72
|
|
|
77
|
-
const themeLabel = computed(() =>
|
|
73
|
+
const themeLabel = computed(() => {
|
|
74
|
+
const currentTheme = theme.global.name.value as ThemeKey
|
|
75
|
+
return themeLabels[currentTheme] ?? themeLabels.cnam
|
|
76
|
+
})
|
|
78
77
|
|
|
79
78
|
return {
|
|
80
79
|
themeLabel,
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import '../styles/shared.css';
|
|
3
|
+
|
|
4
|
+
<Meta title="Guide Du Dev/createVuetifyInstance" />
|
|
5
|
+
|
|
6
|
+
<div className="header">
|
|
7
|
+
<h1>createVuetifyInstance</h1>
|
|
8
|
+
</div>
|
|
9
|
+
|
|
10
|
+
`createVuetifyInstance` est une fonction exportée par le design system qui retourne une instance Vuetify pré-configurée avec l'ensemble des thèmes, icônes et options propres à l'écosystème CNAM/PA/Amelipro.
|
|
11
|
+
|
|
12
|
+
Elle remplace l'appel manuel à `createVuetify` et garantit une configuration cohérente entre tous les projets.
|
|
13
|
+
|
|
14
|
+
## Importation
|
|
15
|
+
|
|
16
|
+
<Source dark code={`import { createVuetifyInstance } from '@cnamts/synapse/vuetifyConfig'`} />
|
|
17
|
+
|
|
18
|
+
> **Note** : il s'agit d'un point d'entrée dédié (`/vuetifyConfig`), distinct de l'import principal `@cnamts/synapse`.
|
|
19
|
+
|
|
20
|
+
## Utilisation dans `main.ts`
|
|
21
|
+
|
|
22
|
+
<Source dark code={`
|
|
23
|
+
import 'vuetify/styles'
|
|
24
|
+
import { createApp } from 'vue'
|
|
25
|
+
import App from './App.vue'
|
|
26
|
+
import { createVuetifyInstance } from '@cnamts/synapse/vuetifyConfig'
|
|
27
|
+
|
|
28
|
+
const vuetify = createVuetifyInstance()
|
|
29
|
+
|
|
30
|
+
createApp(App)
|
|
31
|
+
.use(vuetify)
|
|
32
|
+
.mount('#app')
|
|
33
|
+
`} />
|
|
34
|
+
|
|
35
|
+
## Thèmes disponibles
|
|
36
|
+
|
|
37
|
+
L'instance inclut les thèmes suivants, utilisables via la prop `theme` sur un composant ou via `defaultTheme` :
|
|
38
|
+
|
|
39
|
+
<table>
|
|
40
|
+
<thead>
|
|
41
|
+
<tr>
|
|
42
|
+
<th>Identifiant</th>
|
|
43
|
+
<th>Application</th>
|
|
44
|
+
</tr>
|
|
45
|
+
</thead>
|
|
46
|
+
<tbody>
|
|
47
|
+
<tr>
|
|
48
|
+
<td><code>cnam</code></td>
|
|
49
|
+
<td>CNAM (défaut)</td>
|
|
50
|
+
</tr>
|
|
51
|
+
<tr>
|
|
52
|
+
<td><code>pa</code></td>
|
|
53
|
+
<td>Portail Agent</td>
|
|
54
|
+
</tr>
|
|
55
|
+
<tr>
|
|
56
|
+
<td><code>ap</code></td>
|
|
57
|
+
<td>Amelipro</td>
|
|
58
|
+
</tr>
|
|
59
|
+
</tbody>
|
|
60
|
+
</table>
|
|
61
|
+
|
|
62
|
+
## Changer le thème par défaut
|
|
63
|
+
|
|
64
|
+
Pour appliquer un thème différent de `cnam`, passez l'identifiant souhaité à la prop `theme` du composant racine ou via la configuration Vuetify.
|
|
65
|
+
|
|
66
|
+
### Via le composant racine (recommandé)
|
|
67
|
+
|
|
68
|
+
<Source dark code={`
|
|
69
|
+
<template>
|
|
70
|
+
<VApp theme="pa">
|
|
71
|
+
<!-- votre application -->
|
|
72
|
+
</VApp>
|
|
73
|
+
</template>
|
|
74
|
+
`} />
|
|
75
|
+
|
|
76
|
+
### Via la configuration Vuetify (alternative)
|
|
77
|
+
|
|
78
|
+
Si vous devez forcer le thème globalement sans modifier le composant racine, vous pouvez accéder à l'instance Vuetify après création :
|
|
79
|
+
|
|
80
|
+
<Source dark code={`
|
|
81
|
+
import { createVuetifyInstance } from '@cnamts/synapse/vuetifyConfig'
|
|
82
|
+
|
|
83
|
+
const vuetify = createVuetifyInstance()
|
|
84
|
+
vuetify.theme.global.name.value = 'pa'
|
|
85
|
+
`} />
|
|
86
|
+
|
|
87
|
+
## Ce que la fonction configure
|
|
88
|
+
|
|
89
|
+
`createVuetifyInstance` encapsule les éléments suivants :
|
|
90
|
+
|
|
91
|
+
- **Tous les composants et directives Vuetify** (`vuetify/components`, `vuetify/directives`)
|
|
92
|
+
- **Icônes MDI** via `mdi-svg`
|
|
93
|
+
- **Locale française** (`fr`)
|
|
94
|
+
- **Tokens de design** : couleurs, typographie et variables CSS injectées pour chaque thème
|
|
95
|
+
- **Trois thèmes complets** : `cnam`, `pa`, `ap`
|
|
@@ -10,39 +10,49 @@ import '../styles/shared.css';
|
|
|
10
10
|
</div>
|
|
11
11
|
|
|
12
12
|
Le thème par défaut du Starter kit est celui de la Cnam par défaut.
|
|
13
|
-
Si votre projet dépend du Portail Agent
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
13
|
+
Si votre projet dépend du Portail Agent ou d'Amelipro, appliquez le thème correspondant à votre ligne de fabrication.
|
|
14
|
+
|
|
15
|
+
Pour configurer Vuetify et changer le thème, utilisez `createVuetifyInstance` — consultez la page [createVuetifyInstance](/docs/guide-du-dev-createvuetifyinstance--docs) pour le détail complet.
|
|
16
|
+
|
|
17
|
+
## Résumé des thèmes disponibles
|
|
18
|
+
|
|
19
|
+
<table>
|
|
20
|
+
<thead>
|
|
21
|
+
<tr>
|
|
22
|
+
<th>Identifiant</th>
|
|
23
|
+
<th>Application</th>
|
|
24
|
+
</tr>
|
|
25
|
+
</thead>
|
|
26
|
+
<tbody>
|
|
27
|
+
<tr>
|
|
28
|
+
<td><code>cnam</code></td>
|
|
29
|
+
<td>CNAM (défaut)</td>
|
|
30
|
+
</tr>
|
|
31
|
+
<tr>
|
|
32
|
+
<td><code>pa</code></td>
|
|
33
|
+
<td>Portail Agent</td>
|
|
34
|
+
</tr>
|
|
35
|
+
<tr>
|
|
36
|
+
<td><code>ap</code></td>
|
|
37
|
+
<td>Amelipro</td>
|
|
38
|
+
</tr>
|
|
39
|
+
</tbody>
|
|
40
|
+
</table>
|
|
41
|
+
|
|
42
|
+
## Appliquer le thème dans le composant racine
|
|
24
43
|
|
|
25
44
|
<Source dark code={`
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
theme: {
|
|
32
|
-
defaultTheme: 'pa',
|
|
33
|
-
...
|
|
34
|
-
|
|
45
|
+
<template>
|
|
46
|
+
<VApp theme="pa">
|
|
47
|
+
<!-- votre application -->
|
|
48
|
+
</VApp>
|
|
49
|
+
</template>
|
|
35
50
|
`}
|
|
36
51
|
/>
|
|
37
52
|
|
|
38
|
-
|
|
53
|
+
Après avoir modifié le thème, relancez le serveur de développement :
|
|
39
54
|
|
|
40
|
-
Après avoir effectué les modifications dans le fichier de configuration, relancez le serveur de développement pour appliquer les changements :
|
|
41
55
|
<Source dark code={`
|
|
42
56
|
pnpm dev
|
|
43
57
|
`}
|
|
44
58
|
/>
|
|
45
|
-
|
|
46
|
-
### 3. Vérification
|
|
47
|
-
|
|
48
|
-
Une fois le projet redémarré, vérifiez que la charte PA est bien appliquée.
|
|
@@ -13,12 +13,13 @@ import '../styles/shared.css';
|
|
|
13
13
|
## Importation et utilisation
|
|
14
14
|
|
|
15
15
|
<Source dark code={`
|
|
16
|
-
import { useNotificationService } from '
|
|
17
|
-
import '../styles/shared.css';@cnamts/synapse'
|
|
16
|
+
import { useNotificationService } from '@cnamts/synapse/modules/notification'
|
|
18
17
|
|
|
19
18
|
const { notificationQueue, addNotification, removeNotification, clearQueue } = useNotificationService()
|
|
20
19
|
`} />
|
|
21
20
|
|
|
21
|
+
> L'entrée `@cnamts/synapse/modules/notification` est déclarée explicitement dans les exports du package.
|
|
22
|
+
|
|
22
23
|
## Propriétés et méthodes :
|
|
23
24
|
|
|
24
25
|
<Source dark code={`
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
.criteria-header h3 {
|
|
77
77
|
margin: 0;
|
|
78
78
|
font-size: 1.4rem;
|
|
79
|
-
color:
|
|
79
|
+
color: rgb(var(--v-theme-primary));
|
|
80
80
|
margin-top: 0.5rem !important;
|
|
81
81
|
margin-bottom: 0.5rem !important;
|
|
82
82
|
}
|
|
@@ -131,14 +131,14 @@
|
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
.resources-section a {
|
|
134
|
-
color:
|
|
134
|
+
color: rgb(var(--v-theme-primary));
|
|
135
135
|
text-decoration: none;
|
|
136
136
|
border-bottom: 1px dotted;
|
|
137
137
|
transition: color 0.2s ease;
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
.resources-section a:hover {
|
|
141
|
-
color:
|
|
141
|
+
color: rgb(var(--v-theme-secondary));
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
@media (width <= 768px) {
|
|
@@ -1,38 +1,10 @@
|
|
|
1
1
|
import { apLightTheme2026 } from '@/designTokens/tokens/amelipro/apLightTheme2026'
|
|
2
2
|
import { apColorsTokens2026 } from '@/designTokens/tokens/amelipro/apColors2026'
|
|
3
3
|
import { AmeliproColors } from './ameliproColors/ameliproColors'
|
|
4
|
+
import { createHexResolver } from './createHexResolver'
|
|
4
5
|
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
color = color.replace(/-./, x => x[1]!.toUpperCase())
|
|
11
|
-
color = color.replace('-', ' ')
|
|
12
|
-
// eslint-disable-next-line prefer-const
|
|
13
|
-
let [colorName, colorModifier] = color.split(' ', 2) as (string | undefined)[]
|
|
14
|
-
colorModifier = colorModifier?.replace('-', '')
|
|
15
|
-
let fullColorName = ''
|
|
16
|
-
let hexColor: string | undefined = undefined
|
|
17
|
-
if (colorName && colorName in colors) {
|
|
18
|
-
if (colorModifier && colorModifier in colors[colorName]!) {
|
|
19
|
-
hexColor = colors[colorName]![colorModifier]!
|
|
20
|
-
}
|
|
21
|
-
else if ('base' in colors[colorName]!) {
|
|
22
|
-
hexColor = colors[colorName].base
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
else if (colorName && colorName in currentTheme) {
|
|
26
|
-
hexColor = currentTheme[colorName]
|
|
27
|
-
}
|
|
28
|
-
else if (color && colorName) {
|
|
29
|
-
if (colorModifier === undefined) {
|
|
30
|
-
fullColorName = colorName
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
fullColorName = colorName + colorModifier
|
|
34
|
-
}
|
|
35
|
-
hexColor = ameliproColors[fullColorName]?.hexColor
|
|
36
|
-
}
|
|
37
|
-
return hexColor
|
|
38
|
-
}
|
|
6
|
+
export const classToHex = createHexResolver(
|
|
7
|
+
apLightTheme2026,
|
|
8
|
+
apColorsTokens2026 as unknown as Record<string, Record<string, string>>,
|
|
9
|
+
AmeliproColors,
|
|
10
|
+
)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
type Theme = Record<string, string>
|
|
2
|
+
type ColorsMap = Record<string, Record<string, string>>
|
|
3
|
+
type LegacyColors = Record<string, { hexColor: string }>
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Creates a resolver that converts a color class name (e.g. "ap-blue-lighten-1")
|
|
7
|
+
* into a hex value for the given theme and color palette.
|
|
8
|
+
*
|
|
9
|
+
* Lookup order:
|
|
10
|
+
* 1. colors map: colorName + optional modifier (e.g. apBlue.lighten1)
|
|
11
|
+
* 2. theme map: direct key lookup (e.g. primary, secondary)
|
|
12
|
+
* 3. legacyColors map: flat key lookup (e.g. apBluelighten1.hexColor)
|
|
13
|
+
*/
|
|
14
|
+
export function createHexResolver(
|
|
15
|
+
theme: Theme,
|
|
16
|
+
colors: ColorsMap,
|
|
17
|
+
legacyColors?: LegacyColors,
|
|
18
|
+
): (color: string) => string | undefined {
|
|
19
|
+
return function resolveHex(color: string): string | undefined {
|
|
20
|
+
color = color.trim()
|
|
21
|
+
color = color.replace(/-./, x => x[1]!.toUpperCase())
|
|
22
|
+
color = color.replace('-', ' ')
|
|
23
|
+
|
|
24
|
+
// eslint-disable-next-line prefer-const
|
|
25
|
+
let [colorName, colorModifier] = color.split(' ', 2) as (string | undefined)[]
|
|
26
|
+
colorModifier = colorModifier?.replace('-', '')
|
|
27
|
+
|
|
28
|
+
if (colorName && colorName in colors) {
|
|
29
|
+
if (colorModifier && colorModifier in colors[colorName]!)
|
|
30
|
+
return colors[colorName]![colorModifier]!
|
|
31
|
+
if ('base' in colors[colorName]!)
|
|
32
|
+
return colors[colorName].base
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (colorName && colorName in theme)
|
|
36
|
+
return theme[colorName]
|
|
37
|
+
|
|
38
|
+
if (legacyColors && colorName) {
|
|
39
|
+
const fullColorName = colorModifier === undefined ? colorName : colorName + colorModifier
|
|
40
|
+
return legacyColors[fullColorName]?.hexColor
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return undefined
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import { classToHex } from '../classToHex'
|
|
3
|
+
|
|
4
|
+
describe('classToHex', () => {
|
|
5
|
+
it('resolves a camelCase color name to its base hex value', () => {
|
|
6
|
+
expect(classToHex('apBlue')).toBe('#0C419A')
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
it('resolves a kebab-case color name', () => {
|
|
10
|
+
expect(classToHex('ap-blue')).toBe('#0C419A')
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
it('resolves a color name with a modifier', () => {
|
|
14
|
+
expect(classToHex('ap-blue-darken-1')).toBe('#00749C')
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
it('falls back to base when modifier is not found', () => {
|
|
18
|
+
expect(classToHex('ap-blue-unknown')).toBe('#0C419A')
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
it('resolves theme keys like "primary"', () => {
|
|
22
|
+
expect(classToHex('primary')).toBe('#00749C')
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
it('resolves legacy color names via AmeliproColors', () => {
|
|
26
|
+
expect(classToHex('apBluelighten1')).toBe('#99DBF2')
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
it('returns undefined for completely unknown color', () => {
|
|
30
|
+
expect(classToHex('not-a-color')).toBeUndefined()
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
it('trims whitespace from input', () => {
|
|
34
|
+
expect(classToHex(' apBlue ')).toBe('#0C419A')
|
|
35
|
+
})
|
|
36
|
+
})
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import { convertToHex } from '../convertToHex'
|
|
3
|
+
|
|
4
|
+
describe('convertToHex', () => {
|
|
5
|
+
it('returns the color as-is when it is a valid CSS color', () => {
|
|
6
|
+
expect(convertToHex('#fff')).toBe('#fff')
|
|
7
|
+
expect(convertToHex('#0c419a')).toBe('#0c419a')
|
|
8
|
+
expect(convertToHex('rgb(0, 0, 0)')).toBe('rgb(0, 0, 0)')
|
|
9
|
+
expect(convertToHex('var(--color-primary)')).toBe('var(--color-primary)')
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
it('converts "white" to #FFF', () => {
|
|
13
|
+
expect(convertToHex('white')).toBe('#FFF')
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it('converts "black" to #000', () => {
|
|
17
|
+
expect(convertToHex('black')).toBe('#000')
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
it('converts "transparent" to transparent', () => {
|
|
21
|
+
expect(convertToHex('transparent')).toBe('transparent')
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
it('returns #000 for undefined', () => {
|
|
25
|
+
expect(convertToHex(undefined)).toBe('#000')
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
it('returns #000 for unknown class names', () => {
|
|
29
|
+
expect(convertToHex('not-a-real-color-class')).toBe('#000')
|
|
30
|
+
})
|
|
31
|
+
})
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import { createHexResolver } from '../createHexResolver'
|
|
3
|
+
|
|
4
|
+
const colors = {
|
|
5
|
+
apBlue: { base: '#0c419a', darken1: '#00749c', lighten1: '#99dbf2' },
|
|
6
|
+
apRed: { base: '#b33f2e' },
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const theme = {
|
|
10
|
+
primary: '#00749c',
|
|
11
|
+
secondary: '#00516d',
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const legacy = {
|
|
15
|
+
apBluelighten1: { hexColor: '#99dbf2' },
|
|
16
|
+
apBlue: { hexColor: '#0c419a' },
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
describe('createHexResolver', () => {
|
|
20
|
+
it('resolves a color name to its base value', () => {
|
|
21
|
+
const resolve = createHexResolver(theme, colors)
|
|
22
|
+
expect(resolve('apBlue')).toBe('#0c419a')
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
it('resolves a color name with a modifier', () => {
|
|
26
|
+
const resolve = createHexResolver(theme, colors)
|
|
27
|
+
// "ap-blue-darken-1" → apBlue.darken1
|
|
28
|
+
expect(resolve('ap-blue-darken-1')).toBe('#00749c')
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
it('falls back to base when modifier is not found', () => {
|
|
32
|
+
const resolve = createHexResolver(theme, colors)
|
|
33
|
+
// "ap-blue-unknownmod": first -b→B gives "apBlue-unknownmod",
|
|
34
|
+
// then first -→space gives "apBlue unknownmod" → modifier not found → falls back to base
|
|
35
|
+
expect(resolve('ap-blue-unknownmod')).toBe('#0c419a')
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
it('falls back to theme map', () => {
|
|
39
|
+
const resolve = createHexResolver(theme, colors)
|
|
40
|
+
expect(resolve('primary')).toBe('#00749c')
|
|
41
|
+
expect(resolve('secondary')).toBe('#00516d')
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('falls back to legacyColors map', () => {
|
|
45
|
+
const resolve = createHexResolver(theme, colors, legacy)
|
|
46
|
+
expect(resolve('ap-blue-lighten-1')).toBe('#99dbf2')
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
it('returns undefined for unknown color', () => {
|
|
50
|
+
const resolve = createHexResolver(theme, colors)
|
|
51
|
+
expect(resolve('nonexistent-color')).toBeUndefined()
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
it('trims whitespace from input', () => {
|
|
55
|
+
const resolve = createHexResolver(theme, colors)
|
|
56
|
+
expect(resolve(' apBlue ')).toBe('#0c419a')
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
it('is independent — two resolvers with different themes return different values', () => {
|
|
60
|
+
const theme2 = { primary: '#ff0000' }
|
|
61
|
+
const resolveA = createHexResolver(theme, colors)
|
|
62
|
+
const resolveB = createHexResolver(theme2, colors)
|
|
63
|
+
expect(resolveA('primary')).toBe('#00749c')
|
|
64
|
+
expect(resolveB('primary')).toBe('#ff0000')
|
|
65
|
+
})
|
|
66
|
+
})
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import { isCssColor } from '../isCssColor'
|
|
3
|
+
|
|
4
|
+
describe('isCssColor', () => {
|
|
5
|
+
it('returns true for hex colors', () => {
|
|
6
|
+
expect(isCssColor('#fff')).toBe(true)
|
|
7
|
+
expect(isCssColor('#ffffff')).toBe(true)
|
|
8
|
+
expect(isCssColor('#FF0000')).toBe(true)
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
it('returns true for rgb/rgba colors', () => {
|
|
12
|
+
expect(isCssColor('rgb(0, 0, 0)')).toBe(true)
|
|
13
|
+
expect(isCssColor('rgba(0, 0, 0, 0.5)')).toBe(true)
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it('returns true for hsl/hsla colors', () => {
|
|
17
|
+
expect(isCssColor('hsl(0, 0%, 0%)')).toBe(true)
|
|
18
|
+
expect(isCssColor('hsla(0, 0%, 0%, 0.5)')).toBe(true)
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
it('returns true for CSS custom properties', () => {
|
|
22
|
+
expect(isCssColor('var(--color-primary)')).toBe(true)
|
|
23
|
+
expect(isCssColor('var(--my-color)')).toBe(true)
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
it('returns false for named colors', () => {
|
|
27
|
+
expect(isCssColor('red')).toBe(false)
|
|
28
|
+
expect(isCssColor('white')).toBe(false)
|
|
29
|
+
expect(isCssColor('transparent')).toBe(false)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
it('returns false for class-like strings', () => {
|
|
33
|
+
expect(isCssColor('primary')).toBe(false)
|
|
34
|
+
expect(isCssColor('ap-blue-base')).toBe(false)
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
it('returns false for undefined', () => {
|
|
38
|
+
expect(isCssColor(undefined)).toBe(false)
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('returns false for false', () => {
|
|
42
|
+
expect(isCssColor(false)).toBe(false)
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
it('returns false for empty string', () => {
|
|
46
|
+
expect(isCssColor('')).toBe(false)
|
|
47
|
+
})
|
|
48
|
+
})
|