@cnamts/synapse 1.0.23 → 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-D7qBuCAP.js +114 -0
- package/dist/AutocompleteFilter-Df9i5mAl.cjs +1 -0
- package/dist/DateFilter-BJD6FMev.cjs +1 -0
- package/dist/{DateFilter-Dc-gSGwk.js → DateFilter-BitMWrMU.js} +1 -1
- package/dist/{NumberFilter-vP38Wp6j.js → NumberFilter-BTLUxw0a.js} +3 -3
- package/dist/NumberFilter-DGCzCXzI.cjs +1 -0
- package/dist/{PeriodFilter-Ba1uYUnT.js → PeriodFilter-B5rUIPAC.js} +1 -1
- package/dist/PeriodFilter-DO_ecTZW.cjs +1 -0
- package/dist/SelectFilter-CGwcKWLm.cjs +1 -0
- package/dist/SelectFilter-l4QnRcuk.js +135 -0
- package/dist/TextFilter-B8nf7xoK.cjs +1 -0
- package/dist/{TextFilter-B84dpnoq.js → TextFilter-C9hj6Qrp.js} +7 -7
- package/dist/apLightTheme-CEK4iY3f.cjs +1 -0
- package/dist/apLightTheme-DnIM24Lv.js +950 -0
- package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7022 -9616
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +2 -2
- package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +2 -2
- package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +40 -40
- package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +60 -60
- package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +7168 -9762
- package/dist/components/Amelipro/AmeliproStepper/AmeliproStepper.d.ts +2 -2
- package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +7501 -10095
- package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +21 -21
- package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +41 -41
- package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +2 -2
- package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +20 -498
- package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +117 -151
- package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +5 -5
- package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +12 -16
- package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +8 -8
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +31 -506
- package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +28 -506
- package/dist/components/Customs/SyTabs/SyTabs.d.ts +13 -11
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +69 -89
- package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +627 -791
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +315 -412
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +112 -160
- package/dist/components/DatePicker/composables/index.d.ts +1 -0
- package/dist/components/DatePicker/composables/useDatePickerFocusTrap.d.ts +11 -0
- package/dist/components/DatePicker/composables/useDatePickerState.d.ts +1 -0
- package/dist/components/DatePicker/composables/useDateTextField.d.ts +4 -4
- package/dist/components/DatePicker/composables/useDateValidation.d.ts +3 -3
- package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
- package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +2 -2
- 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 +17 -17
- package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +3 -3
- package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +20 -28
- package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +3 -3
- package/dist/components/MonthPicker/MonthPicker.d.ts +86 -127
- package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +85 -126
- package/dist/components/NirField/NirField.d.ts +202 -278
- package/dist/components/NirField/locales.d.ts +10 -10
- package/dist/components/NirField/useNirValidation.d.ts +64 -0
- package/dist/components/PasswordField/PasswordField.d.ts +8 -9
- package/dist/components/PeriodField/PeriodField.d.ts +1352 -1680
- package/dist/components/PhoneField/PhoneField.d.ts +88 -129
- package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +12 -12
- package/dist/components/SyTextArea/SyTextArea.d.ts +34 -14
- package/dist/components/SyTextArea/useDefaultValidationRules.d.ts +11 -0
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +10 -6
- package/dist/components/Tables/SyTable/SyTable.d.ts +10 -6
- package/dist/components/Tables/common/SyTableFilter.d.ts +2 -3
- package/dist/components/Tables/common/SyTablePagination.d.ts +19 -19
- package/dist/components/Tables/common/TableHeader.d.ts +5 -0
- package/dist/components/Tables/common/filters/AutocompleteFilter.d.ts +120 -0
- package/dist/components/Tables/common/filters/locales.d.ts +0 -1
- package/dist/components/Tables/common/locales.d.ts +3 -0
- package/dist/components/Tables/common/types.d.ts +21 -3
- package/dist/components/Tables/common/useClickableTableRow.d.ts +17 -0
- package/dist/components/Tables/common/usePagination.d.ts +3 -1
- package/dist/components/Tables/common/usePinnedColumns.d.ts +31 -0
- package/dist/components/Tables/common/useTableHeaders.d.ts +2 -0
- package/dist/components/Tables/common/useTableRowCheckboxAccessibility.d.ts +5 -0
- package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +7 -6
- package/dist/composables/date/useDatePickerAccessibility.d.ts +1 -1
- package/dist/composables/rules/useFieldValidation.d.ts +4 -4
- package/dist/composables/unifyValidation/documentationValidationProps.d.ts +230 -0
- package/dist/composables/unifyValidation/useCustomValidation.d.ts +8 -0
- package/dist/composables/unifyValidation/useValidation.d.ts +102 -0
- package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +18 -0
- package/dist/composables/useFormFieldErrorHandling.d.ts +2 -2
- package/dist/composables/validation/useFormValidation.d.ts +11 -2
- package/dist/composables/validation/useValidation.d.ts +19 -9
- package/dist/design-system-v3.d.ts +2 -0
- package/dist/design-system-v3.js +186 -187
- package/dist/design-system-v3.umd.cjs +1 -1066
- 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/main.d.ts +0 -1
- package/dist/synapse.css +1 -0
- package/dist/tooth-11-D3sLWv2n.cjs +1 -0
- package/dist/tooth-12-CXrLuH03.cjs +1 -0
- package/dist/tooth-13-BSfo5fpT.cjs +1 -0
- package/dist/tooth-14-DMzulx0h.cjs +1 -0
- package/dist/tooth-15-BKRFVi-9.cjs +1 -0
- package/dist/tooth-16-CpuxAbuM.cjs +1 -0
- package/dist/tooth-17-BPoahUdg.cjs +1 -0
- package/dist/tooth-18-DhHJz8sy.cjs +1 -0
- package/dist/tooth-21-Dgd5hn_X.cjs +1 -0
- package/dist/tooth-22-C2Tn19sB.cjs +1 -0
- package/dist/tooth-23-C9uaaSGb.cjs +1 -0
- package/dist/tooth-24-BrK9UGpf.cjs +1 -0
- package/dist/tooth-25-CE_EfGNp.cjs +1 -0
- package/dist/tooth-26-Ctv4i9Fy.cjs +1 -0
- package/dist/tooth-27-C5J7JkWM.cjs +1 -0
- package/dist/tooth-28-Z9oWqjo0.cjs +1 -0
- package/dist/tooth-31-BrYqmkTi.cjs +1 -0
- package/dist/tooth-32-BNNR0oCZ.cjs +1 -0
- package/dist/tooth-33-DuxvqO2J.cjs +1 -0
- package/dist/tooth-34-BCSCXMB6.cjs +1 -0
- package/dist/tooth-35-BLUXkX88.cjs +1 -0
- package/dist/tooth-36-IrKHYqlA.cjs +1 -0
- package/dist/tooth-37-BYqpdMwo.cjs +1 -0
- package/dist/tooth-38-B_eNXXdu.cjs +1 -0
- package/dist/tooth-41-Ddva4Ot8.cjs +1 -0
- package/dist/tooth-42-szcDqlM0.cjs +1 -0
- package/dist/tooth-43-B3ka6rQm.cjs +1 -0
- package/dist/tooth-44-CazyQucj.cjs +1 -0
- package/dist/tooth-45-B4HQtc8n.cjs +1 -0
- package/dist/tooth-46-BPM40gbG.cjs +1 -0
- package/dist/tooth-47-Dvr20dlh.cjs +1 -0
- package/dist/tooth-48-Bd8ljGsF.cjs +1 -0
- package/dist/tooth-51-OBpwCOF3.cjs +1 -0
- package/dist/tooth-52-aKxyHcmq.cjs +1 -0
- package/dist/tooth-53-vCwJjTOc.cjs +1 -0
- package/dist/tooth-54-DsWu2iFy.cjs +1 -0
- package/dist/tooth-55-BxC1X2Dn.cjs +1 -0
- package/dist/tooth-61-BbLvxMQi.cjs +1 -0
- package/dist/tooth-62-CmTkWczP.cjs +1 -0
- package/dist/tooth-63-DI7l_2qI.cjs +1 -0
- package/dist/tooth-64-B21sOsJh.cjs +1 -0
- package/dist/tooth-65-D2ZC2VEr.cjs +1 -0
- package/dist/tooth-71-D473PPO5.cjs +1 -0
- package/dist/tooth-72-Drh1wnNu.cjs +1 -0
- package/dist/tooth-73-DzlwYI23.cjs +1 -0
- package/dist/tooth-74-8aGvcZPg.cjs +1 -0
- package/dist/tooth-75-BFK7At_r.cjs +1 -0
- package/dist/tooth-81-BZmR-I0M.cjs +1 -0
- package/dist/tooth-82-euVfUUZV.cjs +1 -0
- package/dist/tooth-83-KV010j64.cjs +1 -0
- package/dist/tooth-84-BBg1RjhZ.cjs +1 -0
- package/dist/tooth-85-Cr-kc1wM.cjs +1 -0
- package/dist/utils/functions/classToHex.d.ts +1 -1
- package/dist/utils/functions/createHexResolver.d.ts +16 -0
- package/dist/vuetifyConfig.js +522 -0
- package/dist/vuetifyConfig.umd.cjs +1 -0
- package/package.json +37 -20
- package/src/assets/amelipro/apTokens2026.scss +5 -5
- package/src/assets/overrides/_breakpoints.scss +25 -0
- package/src/assets/overrides/_btns.scss +0 -8
- package/src/assets/overrides/_forms.scss +1 -3
- package/src/assets/overrides/_icons.scss +14 -10
- 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 -47
- 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/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +2 -2
- 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 +2 -2
- 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/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +2 -2
- 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/Captcha/accessibilite/Accessibility.mdx +86 -8
- package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +12 -12
- package/src/components/ChipList/ChipList.stories.ts +0 -15
- package/src/components/ChipList/ChipList.vue +19 -17
- package/src/components/ChipList/accessibilite/Accessibility.mdx +83 -10
- package/src/components/ChipList/tests/ChipList.a11y.spec.ts +41 -0
- 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/accessibilite/Accessibility.mdx +0 -9
- 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 +28 -7
- package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +18 -0
- package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +209 -0
- package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +14 -10
- package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -4
- package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +12 -15
- package/src/components/Customs/Selects/SyInputSelect/tests/SyInputSelect.spec.ts +10 -10
- package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +1 -39
- package/src/components/Customs/Selects/SySelect/SySelect.vue +274 -71
- package/src/components/Customs/Selects/SySelect/accessibilite/Accessibility.mdx +199 -269
- package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +89 -0
- package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +6 -9
- package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +5 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +10 -16
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +45 -11
- package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +53 -3
- package/src/components/Customs/SyCheckbox/tests/SyCheckbox.a11y.spec.ts +134 -2
- package/src/components/Customs/SyForm/SyForm.stories.ts +31 -5
- package/src/components/Customs/SyPagination/SyPagination.vue +0 -2
- package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +4 -7
- 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.mdx +1 -1
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +50 -68
- package/src/components/Customs/SyTextField/SyTextField.vue +156 -161
- package/src/components/Customs/SyTextField/tests/SyTextField.a11y.spec.ts +32 -0
- package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +120 -11
- package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +62 -58
- package/src/components/DatePicker/CalendarMode/DatePicker.vue +342 -237
- package/src/components/DatePicker/CalendarMode/accessibilite/Accessibility.mdx +82 -0
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +141 -0
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +2 -56
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +215 -175
- package/src/components/DatePicker/ComplexDatePicker/accessibilite/Accessibility.mdx +76 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +33 -10
- package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +8 -8
- package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +106 -8
- package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +12 -11
- package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +12 -12
- package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +0 -12
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +71 -67
- package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +3 -0
- package/src/components/DatePicker/DateTextInput/accessibilite/Accessibility.mdx +66 -0
- package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +52 -1
- package/src/components/DatePicker/composables/index.ts +1 -0
- package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +109 -65
- package/src/components/DatePicker/composables/tests/useDatePickerFocusTrap.spec.ts +138 -0
- package/src/components/DatePicker/composables/tests/useDatePickerState.spec.ts +53 -0
- package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +74 -18
- package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +39 -0
- package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +91 -0
- package/src/components/DatePicker/composables/useCalendarKeyboardNavigation.ts +442 -36
- package/src/components/DatePicker/composables/useDatePickerFocusTrap.ts +92 -0
- package/src/components/DatePicker/composables/useDatePickerState.ts +24 -0
- package/src/components/DatePicker/composables/useDateTextField.ts +6 -6
- package/src/components/DatePicker/composables/useDateValidation.ts +36 -35
- package/src/components/DatePicker/composables/useInputBlurHandler.ts +3 -3
- package/src/components/DatePicker/composables/useManualDateValidation.ts +6 -2
- package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +9 -8
- package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +1 -1
- package/src/components/DiacriticPicker/accessibilite/Accessibility.mdx +76 -8
- 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.stories.ts +14 -2
- 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/accessibilite/Accessibility.mdx +73 -11
- 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/LogoBrandSection/accessibilite/Accessibility.mdx +85 -9
- package/src/components/LunarCalendar/tests/LunarCalendar.spec.ts +3 -1
- package/src/components/LunarCalendar/useLunarCalendarValidation.ts +4 -5
- package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +1 -1
- package/src/components/MonthPicker/tests/MonthPicker.spec.ts +2 -1
- package/src/components/MonthPicker/tests/__snapshots__/MonthPicker.spec.ts.snap +7 -7
- package/src/components/NirField/NirField.stories.ts +6 -2
- package/src/components/NirField/NirField.vue +67 -265
- package/src/components/NirField/accessibilite/Accessibility.mdx +102 -7
- package/src/components/NirField/locales.ts +1 -1
- package/src/components/NirField/tests/NirField.spec.ts +124 -0
- package/src/components/NirField/tests/useNirValidation.spec.ts +449 -0
- package/src/components/NirField/useNirValidation.ts +277 -0
- 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.stories.ts +4 -4
- package/src/components/PasswordField/PasswordField.vue +26 -34
- package/src/components/PasswordField/tests/PasswordField.spec.ts +6 -3
- package/src/components/PeriodField/PeriodField.stories.ts +4 -4
- package/src/components/PeriodField/PeriodField.vue +57 -57
- package/src/components/PeriodField/__tests__/PeriodField.async.spec.ts +32 -0
- package/src/components/PeriodField/accessibilite/Accessibility.mdx +68 -8
- package/src/components/PeriodField/tests/PeriodField.spec.ts +28 -2
- package/src/components/PhoneField/PhoneField.vue +8 -9
- package/src/components/PhoneField/tests/PhoneField.spec.ts +1 -0
- package/src/components/RangeField/RangeField.vue +6 -0
- 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/SyTextArea/SyTextArea.stories.ts +138 -2
- package/src/components/SyTextArea/SyTextArea.vue +53 -23
- package/src/components/SyTextArea/tests/SyTextArea.spec.ts +126 -3
- package/src/components/SyTextArea/useDefaultValidationRules.ts +74 -0
- package/src/components/TableToolbar/TableToolbar.vue +6 -8
- package/src/components/Tables/SyServerTable/SyServerTable.mdx +25 -0
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +839 -1
- package/src/components/Tables/SyServerTable/SyServerTable.vue +154 -95
- package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +81 -0
- package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +390 -0
- package/src/components/Tables/SyTable/SyTable.mdx +25 -0
- package/src/components/Tables/SyTable/SyTable.stories.ts +556 -1
- package/src/components/Tables/SyTable/SyTable.vue +136 -60
- package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +79 -0
- package/src/components/Tables/SyTable/tests/SyTable.spec.ts +382 -0
- package/src/components/Tables/common/SyTableFilter.vue +49 -4
- package/src/components/Tables/common/SyTablePagination.vue +142 -19
- package/src/components/Tables/common/TableHeader.vue +45 -4
- package/src/components/Tables/common/filters/AutocompleteFilter.vue +160 -0
- package/src/components/Tables/common/filters/NumberFilter.vue +1 -1
- package/src/components/Tables/common/filters/SelectFilter.vue +11 -12
- package/src/components/Tables/common/filters/TextFilter.vue +1 -1
- package/src/components/Tables/common/filters/getFilterComponent.ts +8 -1
- package/src/components/Tables/common/filters/locales.ts +0 -1
- package/src/components/Tables/common/filters/tests/AutocompleteFilter.a11y.spec.ts +110 -0
- package/src/components/Tables/common/filters/tests/AutocompleteFilter.spec.ts +203 -0
- package/src/components/Tables/common/filters/tests/SelectFilter.a11y.spec.ts +104 -0
- package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +152 -16
- package/src/components/Tables/common/locales.ts +3 -0
- package/src/components/Tables/common/tableFilterUtils.ts +3 -0
- package/src/components/Tables/common/tableStyles.scss +60 -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/tests/filterByRange.spec.ts +2 -1
- package/src/components/Tables/common/types.ts +15 -4
- package/src/components/Tables/common/useClickableTableRow.ts +103 -0
- package/src/components/Tables/common/usePagination.ts +13 -0
- package/src/components/Tables/common/usePinnedColumns.ts +237 -0
- package/src/components/Tables/common/useTableHeaders.ts +52 -30
- package/src/components/Tables/common/useTableRowCheckboxAccessibility.ts +41 -0
- 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/date/tests/useDatePickerAccessibility.spec.ts +2 -6
- package/src/composables/date/useDatePickerAccessibility.ts +42 -207
- package/src/composables/rules/tests/useFieldValidation.spec.ts +120 -120
- package/src/composables/rules/useFieldValidation.ts +34 -17
- package/src/composables/unifyValidation/documentationValidationProps.ts +235 -0
- package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +601 -0
- package/src/composables/unifyValidation/tests/useValidation.spec.ts +2048 -0
- package/src/composables/unifyValidation/tests/useVuetifyValidation.spec.ts +184 -0
- package/src/composables/unifyValidation/useCustomValidation.ts +95 -0
- package/src/composables/unifyValidation/useValidation.ts +190 -0
- package/src/composables/unifyValidation/useVuetifyValidation.ts +54 -0
- package/src/composables/useFormFieldErrorHandling.ts +4 -7
- package/src/composables/validation/tests/useFormValidation.spec.ts +14 -0
- package/src/composables/validation/tests/useValidation.spec.ts +116 -21
- package/src/composables/validation/useFormValidation.ts +20 -13
- package/src/composables/validation/useValidatable.ts +8 -1
- package/src/composables/validation/useValidation.ts +151 -99
- package/src/composantsVuetify/Introduction.mdx +48 -0
- package/src/composantsVuetify/VBreadcrumbs/VBreadcrumbs.mdx +28 -0
- package/src/composantsVuetify/VBreadcrumbs/v-breadcrumbs.stories.ts +108 -0
- package/src/composantsVuetify/VBtn/VBtn.mdx +72 -0
- package/src/composantsVuetify/VBtn/v-btn.stories.ts +121 -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/composantsVuetify/VTooltip/VTooltip.mdx +32 -0
- package/src/composantsVuetify/VTooltip/v-tooltip.stories.ts +95 -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 +3 -3
- 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/main.ts +0 -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 +113 -9
- package/src/stories/Demarrer/Accueil.stories.ts +3 -3
- 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/Amelipro.mdx +15 -0
- package/src/stories/GuideDuDev/Amelipro.stories.ts +209 -0
- 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/GuideDuDev/vuetifyOptions.mdx +3 -3
- 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/SelectFilter-BioGT6Nn.js +0 -136
- package/dist/designTokens/utils/convertGaps.d.ts +0 -5
- package/dist/main-aLKwdMi1.js +0 -37886
- package/dist/style.css +0 -1
- package/src/assets/apTokens.scss +0 -343
- package/src/assets/overrides/_container.scss +0 -36
- package/src/assets/tokens.scss +0 -388
- package/src/components/DatePicker/Accessibilite.mdx +0 -14
- 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,11 +1,10 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
2
|
import { ref, watch, computed, nextTick, toRef, onMounted, useId, onBeforeUnmount } from 'vue'
|
|
3
3
|
import { vMaska } from 'maska/vue'
|
|
4
|
-
import { checkNIR, isNIRKeyValid } from './nirValidation'
|
|
5
4
|
import SyTextField from '../Customs/SyTextField/SyTextField.vue'
|
|
6
5
|
import { locales } from './locales'
|
|
7
|
-
import { useValidation
|
|
8
|
-
import {
|
|
6
|
+
import { useValidation } from '@/composables/unifyValidation/useValidation'
|
|
7
|
+
import { useNirValidation, type NirValidationProps } from './useNirValidation'
|
|
9
8
|
|
|
10
9
|
const props = withDefaults(defineProps<{
|
|
11
10
|
modelValue?: string | undefined | null
|
|
@@ -17,22 +16,13 @@
|
|
|
17
16
|
keyTooltip?: string
|
|
18
17
|
nirTooltipPosition?: 'prepend' | 'append'
|
|
19
18
|
keyTooltipPosition?: 'prepend' | 'append'
|
|
20
|
-
required?: boolean
|
|
21
19
|
displayAsterisk?: boolean
|
|
22
|
-
customNumberRules?: ValidationRule[]
|
|
23
|
-
customKeyRules?: ValidationRule[]
|
|
24
|
-
customNumberWarningRules?: ValidationRule[]
|
|
25
|
-
customKeyWarningRules?: ValidationRule[]
|
|
26
|
-
customRulesPrecedence?: boolean
|
|
27
|
-
showSuccessMessages?: boolean
|
|
28
20
|
width?: string
|
|
29
21
|
bgColor?: string
|
|
30
|
-
disabled?: boolean
|
|
31
22
|
density?: 'default' | 'comfortable' | 'compact'
|
|
32
23
|
hideDetails?: boolean | 'auto'
|
|
33
24
|
hideSpinButtons?: boolean
|
|
34
25
|
placeholder?: string
|
|
35
|
-
readonly?: boolean
|
|
36
26
|
variant?: 'filled' | 'outlined' | 'plain' | 'underlined' | 'solo'
|
|
37
27
|
clearable?: boolean
|
|
38
28
|
counter?: boolean | number | string
|
|
@@ -43,14 +33,15 @@
|
|
|
43
33
|
disableErrorHandling?: boolean
|
|
44
34
|
nirType?: 'simple' | 'complexe'
|
|
45
35
|
withoutFieldset?: boolean
|
|
46
|
-
customLocale?:
|
|
47
|
-
}>(), {
|
|
36
|
+
customLocale?: Record<keyof typeof locales, string>
|
|
37
|
+
} & NirValidationProps>(), {
|
|
48
38
|
modelValue: undefined,
|
|
49
39
|
label: 'Identifiant d\'assuré',
|
|
50
40
|
numberLabel: 'Numéro de sécurité sociale',
|
|
51
41
|
keyLabel: 'Clé de validation',
|
|
52
42
|
displayKey: true,
|
|
53
43
|
nirTooltip: undefined,
|
|
44
|
+
keyRules: () => [],
|
|
54
45
|
keyTooltip: undefined,
|
|
55
46
|
nirTooltipPosition: 'append',
|
|
56
47
|
keyTooltipPosition: 'append',
|
|
@@ -68,6 +59,7 @@
|
|
|
68
59
|
density: 'default',
|
|
69
60
|
hideDetails: false,
|
|
70
61
|
hideSpinButtons: false,
|
|
62
|
+
isValidateOnBlur: true,
|
|
71
63
|
placeholder: undefined,
|
|
72
64
|
readonly: false,
|
|
73
65
|
variant: 'outlined',
|
|
@@ -78,16 +70,10 @@
|
|
|
78
70
|
persistentHint: false,
|
|
79
71
|
persistentPlaceholder: false,
|
|
80
72
|
disableErrorHandling: false,
|
|
73
|
+
numberRules: () => [],
|
|
81
74
|
nirType: 'simple',
|
|
82
75
|
withoutFieldset: false,
|
|
83
|
-
customLocale: () =>
|
|
84
|
-
errorRequiredNumber: locales.errorRequiredNumber,
|
|
85
|
-
errorInvalidNumber: locales.errorInvalidNumber,
|
|
86
|
-
errorRequiredKey: locales.errorRequiredKey,
|
|
87
|
-
errorInvalidKey: locales.errorInvalidKey,
|
|
88
|
-
successNumberValid: locales.successNumberValid,
|
|
89
|
-
successKeyValid: locales.successKeyValid,
|
|
90
|
-
} as Partial<Record<keyof typeof locales, string>>),
|
|
76
|
+
customLocale: () => locales,
|
|
91
77
|
})
|
|
92
78
|
|
|
93
79
|
const emit = defineEmits(['update:modelValue'])
|
|
@@ -187,112 +173,6 @@
|
|
|
187
173
|
}
|
|
188
174
|
})
|
|
189
175
|
|
|
190
|
-
// Initialisation des validations
|
|
191
|
-
const numberValidation = useValidation({
|
|
192
|
-
showSuccessMessages: props.showSuccessMessages,
|
|
193
|
-
fieldIdentifier: props.numberLabel,
|
|
194
|
-
disableErrorHandling: props.disableErrorHandling,
|
|
195
|
-
})
|
|
196
|
-
|
|
197
|
-
const keyValidation = useValidation({
|
|
198
|
-
showSuccessMessages: props.showSuccessMessages,
|
|
199
|
-
fieldIdentifier: props.keyLabel,
|
|
200
|
-
disableErrorHandling: props.disableErrorHandling,
|
|
201
|
-
})
|
|
202
|
-
|
|
203
|
-
// Règles de validation
|
|
204
|
-
const defaultNumberRules = computed(() => {
|
|
205
|
-
const rules: ValidationRule[] = []
|
|
206
|
-
if (props.readonly && props.disabled) return
|
|
207
|
-
if (props.required) {
|
|
208
|
-
rules.push({
|
|
209
|
-
type: 'required',
|
|
210
|
-
options: {
|
|
211
|
-
message: props.customLocale.errorRequiredNumber,
|
|
212
|
-
fieldIdentifier: props.numberLabel,
|
|
213
|
-
},
|
|
214
|
-
})
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// Ajout des règles personnalisées avec prévalence si demandé
|
|
218
|
-
if (props.customRulesPrecedence && props.customNumberRules && props.customNumberRules.length > 0) {
|
|
219
|
-
rules.push(...props.customNumberRules.map(rule => ({
|
|
220
|
-
...rule,
|
|
221
|
-
options: rule.options || {},
|
|
222
|
-
})))
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// Règle de validation standard du NIR
|
|
226
|
-
rules.push({
|
|
227
|
-
type: 'custom',
|
|
228
|
-
options: {
|
|
229
|
-
validate: (value: string) => {
|
|
230
|
-
if (!value) return true
|
|
231
|
-
// Ne valider que si tous les caractères sont saisis
|
|
232
|
-
if (value.length < 13) {
|
|
233
|
-
return props.customLocale.errorInvalidNumber || locales.errorInvalidNumber
|
|
234
|
-
}
|
|
235
|
-
const result = checkNIR(value, props.nirType)
|
|
236
|
-
return result ? true : props.customLocale.errorInvalidNumber || locales.errorInvalidNumber
|
|
237
|
-
},
|
|
238
|
-
message: props.customLocale.errorInvalidNumber,
|
|
239
|
-
successMessage: props.customLocale.successNumberValid,
|
|
240
|
-
fieldIdentifier: props.numberLabel,
|
|
241
|
-
},
|
|
242
|
-
})
|
|
243
|
-
|
|
244
|
-
// Ajout des règles personnalisées sans prévalence (comportement par défaut)
|
|
245
|
-
if (!props.customRulesPrecedence && props.customNumberRules && props.customNumberRules.length > 0) {
|
|
246
|
-
rules.push(...props.customNumberRules.map(rule => ({
|
|
247
|
-
...rule,
|
|
248
|
-
options: rule.options || {},
|
|
249
|
-
})))
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
return rules
|
|
253
|
-
})
|
|
254
|
-
|
|
255
|
-
const defaultKeyRules = computed(() => {
|
|
256
|
-
const rules: ValidationRule[] = []
|
|
257
|
-
if (props.readonly && props.disabled) return
|
|
258
|
-
if (props.required) {
|
|
259
|
-
rules.push({
|
|
260
|
-
type: 'required',
|
|
261
|
-
options: {
|
|
262
|
-
message: props.customLocale.errorRequiredKey,
|
|
263
|
-
fieldIdentifier: props.keyLabel,
|
|
264
|
-
},
|
|
265
|
-
})
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
const validateKey = (value: string) => {
|
|
269
|
-
if (!value) return true
|
|
270
|
-
if (!unmaskedNumberValue.value) return true
|
|
271
|
-
const fullNir = unmaskedNumberValue.value + value
|
|
272
|
-
return isNIRKeyValid(fullNir)
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
// Ajout des règles personnalisées
|
|
276
|
-
if (props.customKeyRules) {
|
|
277
|
-
rules.push(...props.customKeyRules)
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
// Ajout de la règle de validation par défaut si pas de règle personnalisée avec validation de clé
|
|
281
|
-
if (!props.customKeyRules?.some(rule => rule.options.validate)) {
|
|
282
|
-
rules.push({
|
|
283
|
-
type: 'custom',
|
|
284
|
-
options: {
|
|
285
|
-
validate: validateKey,
|
|
286
|
-
message: props.customLocale.errorInvalidKey,
|
|
287
|
-
successMessage: props.customLocale.successKeyValid,
|
|
288
|
-
fieldIdentifier: props.keyLabel,
|
|
289
|
-
},
|
|
290
|
-
})
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
return rules
|
|
294
|
-
})
|
|
295
|
-
|
|
296
176
|
// Synchronisation avec modelValue
|
|
297
177
|
watch(modelValueRef, (newValue) => {
|
|
298
178
|
// Ignorer les mises à jour internes pour éviter les boucles infinies
|
|
@@ -343,80 +223,48 @@
|
|
|
343
223
|
})
|
|
344
224
|
}
|
|
345
225
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
)
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
if (props.displayKey) {
|
|
380
|
-
keyResult = keyValidation.validateField(
|
|
381
|
-
keyValue.value,
|
|
382
|
-
defaultKeyRules.value,
|
|
383
|
-
// N'appliquer les warnings que si la clé est complète
|
|
384
|
-
keyValue.value?.length === 2 ? props.customKeyWarningRules : [],
|
|
385
|
-
)
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
// Si on est en mode blur et qu'il y a des erreurs, focus sur le premier champ en erreur
|
|
389
|
-
if (onBlur || shouldValidateOnBlur.value) {
|
|
390
|
-
await nextTick()
|
|
391
|
-
if (numberResult.hasError) {
|
|
392
|
-
numberField.value?.$el?.querySelector?.('input')?.focus()
|
|
393
|
-
}
|
|
394
|
-
else if (keyResult.hasError) {
|
|
395
|
-
keyField.value?.$el?.querySelector?.('input')?.focus()
|
|
396
|
-
}
|
|
397
|
-
shouldValidateOnBlur.value = false
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
isValidating.value = false
|
|
401
|
-
return !numberResult.hasError && !keyResult.hasError
|
|
402
|
-
}
|
|
226
|
+
const {
|
|
227
|
+
numberValidation,
|
|
228
|
+
keyValidation,
|
|
229
|
+
validateFields,
|
|
230
|
+
hasFieldErrors,
|
|
231
|
+
} = useNirValidation(
|
|
232
|
+
numberValue,
|
|
233
|
+
keyValue,
|
|
234
|
+
unmaskedNumberValue,
|
|
235
|
+
unmaskedKeyValue,
|
|
236
|
+
toRef(props, 'readonly'),
|
|
237
|
+
toRef(props, 'disabled'),
|
|
238
|
+
toRef(props, 'required'),
|
|
239
|
+
numberField,
|
|
240
|
+
keyField,
|
|
241
|
+
toRef(props, 'customLocale'),
|
|
242
|
+
toRef(props, 'numberLabel'),
|
|
243
|
+
toRef(props, 'keyLabel'),
|
|
244
|
+
toRef(props, 'customNumberRules'),
|
|
245
|
+
toRef(props, 'customKeyRules'),
|
|
246
|
+
toRef(props, 'customNumberWarningRules'),
|
|
247
|
+
toRef(props, 'customKeyWarningRules'),
|
|
248
|
+
toRef(props, 'displayKey'),
|
|
249
|
+
toRef(props, 'customRulesPrecedence'),
|
|
250
|
+
toRef(props, 'nirType'),
|
|
251
|
+
toRef(props, 'label'),
|
|
252
|
+
toRef(props, 'showSuccessMessages'),
|
|
253
|
+
toRef(props, 'disableErrorHandling'),
|
|
254
|
+
toRef(props, 'isValidateOnBlur'),
|
|
255
|
+
toRef(props, 'useVuetifyValidation'),
|
|
256
|
+
toRef(props, 'numberRules'),
|
|
257
|
+
toRef(props, 'keyRules'),
|
|
258
|
+
)
|
|
403
259
|
|
|
404
260
|
const validateOnSubmit = () => {
|
|
405
261
|
return validateFields(true)
|
|
406
262
|
}
|
|
407
263
|
|
|
408
|
-
const hasNumberErrors = computed(() => numberValidation.hasError.value)
|
|
409
|
-
const hasKeyErrors = computed(() => keyValidation.hasError.value)
|
|
410
|
-
const hasNumberWarnings = computed(() => numberValidation.hasWarning.value)
|
|
411
|
-
const hasKeyWarnings = computed(() => keyValidation.hasWarning.value)
|
|
412
|
-
const hasNumberSuccess = computed(() => numberValidation.hasSuccess.value && props.showSuccessMessages)
|
|
413
|
-
const hasKeySuccess = computed(() => keyValidation.hasSuccess.value && props.showSuccessMessages)
|
|
414
|
-
|
|
415
264
|
// Propriétés calculées pour les attributs ARIA et les états d'erreur
|
|
416
|
-
const hasFieldErrors = computed(() => hasNumberErrors.value || hasKeyErrors.value)
|
|
417
265
|
const ariaRequired = computed(() => props.required ? 'true' : undefined)
|
|
418
266
|
const ariaInvalidNumber = computed(() => hasFieldErrors.value ? 'true' : undefined)
|
|
419
|
-
const ariaInvalidKey = computed(() =>
|
|
267
|
+
const ariaInvalidKey = computed(() => keyValidation.hasError.value ? 'true' : undefined)
|
|
420
268
|
|
|
421
269
|
const numberLabelWithAsterisk = computed(() => {
|
|
422
270
|
return props.required && props.displayAsterisk ? `${props.numberLabel} *` : props.numberLabel
|
|
@@ -426,21 +274,8 @@
|
|
|
426
274
|
return props.required && props.displayAsterisk ? `${props.keyLabel} *` : props.keyLabel
|
|
427
275
|
})
|
|
428
276
|
|
|
429
|
-
// Utilisation de debounce pour limiter les validations pendant la saisie
|
|
430
|
-
const debouncedValidate = createDebouncedFunction(() => {
|
|
431
|
-
validateFields(false)
|
|
432
|
-
}, 300) // 300ms de délai
|
|
433
|
-
|
|
434
|
-
const handleNumberInput = () => {
|
|
435
|
-
emitValue()
|
|
436
|
-
// Utiliser la validation debounced pour la saisie
|
|
437
|
-
debouncedValidate()
|
|
438
|
-
}
|
|
439
|
-
|
|
440
277
|
const handleKeyInput = () => {
|
|
441
278
|
emitValue()
|
|
442
|
-
// Utiliser la validation debounced pour la saisie
|
|
443
|
-
debouncedValidate()
|
|
444
279
|
|
|
445
280
|
// Si on supprime le contenu de la clé, on revient au champ NIR
|
|
446
281
|
if (props.displayKey && unmaskedKeyValue.value.length === 0) {
|
|
@@ -450,18 +285,6 @@
|
|
|
450
285
|
}
|
|
451
286
|
}
|
|
452
287
|
|
|
453
|
-
const handleNumberBlur = () => {
|
|
454
|
-
// Valider sans forcer le focus, pour permettre de quitter le champ
|
|
455
|
-
validateFields(false)
|
|
456
|
-
// On permet à l'utilisateur de quitter le champ même si la saisie est incomplète
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
const handleKeyBlur = () => {
|
|
460
|
-
// Valider sans forcer le focus, pour permettre de quitter le champ
|
|
461
|
-
validateFields(false)
|
|
462
|
-
// On permet à l'utilisateur de quitter le champ même si la saisie est incomplète
|
|
463
|
-
}
|
|
464
|
-
|
|
465
288
|
// Gestion des touches pour le champ NIR
|
|
466
289
|
const handleNumberKeydown = (e: Event) => {
|
|
467
290
|
const keyEvent = e as KeyboardEvent
|
|
@@ -514,25 +337,6 @@
|
|
|
514
337
|
}
|
|
515
338
|
})
|
|
516
339
|
|
|
517
|
-
// Rendre le composant auto-validable dans un SyForm
|
|
518
|
-
useValidatable(
|
|
519
|
-
validateOnSubmit,
|
|
520
|
-
() => {
|
|
521
|
-
try {
|
|
522
|
-
numberValidation.clearValidation()
|
|
523
|
-
}
|
|
524
|
-
catch {
|
|
525
|
-
void 0
|
|
526
|
-
}
|
|
527
|
-
try {
|
|
528
|
-
keyValidation.clearValidation()
|
|
529
|
-
}
|
|
530
|
-
catch {
|
|
531
|
-
void 0
|
|
532
|
-
}
|
|
533
|
-
},
|
|
534
|
-
)
|
|
535
|
-
|
|
536
340
|
defineExpose({
|
|
537
341
|
validateOnSubmit,
|
|
538
342
|
numberMask,
|
|
@@ -572,13 +376,14 @@
|
|
|
572
376
|
:append-icon="nirTooltip && nirTooltipPosition === 'append' ? 'info' : undefined"
|
|
573
377
|
:prepend-tooltip="nirTooltip && nirTooltipPosition === 'prepend' ? nirTooltip : undefined"
|
|
574
378
|
:append-tooltip="nirTooltip && nirTooltipPosition === 'append' ? nirTooltip : undefined"
|
|
575
|
-
:error="
|
|
379
|
+
:error="numberValidation.errors.value.length > 0"
|
|
576
380
|
:aria-required="ariaRequired"
|
|
577
|
-
:has-error="
|
|
578
|
-
:has-warning="
|
|
579
|
-
:has-success="
|
|
381
|
+
:has-error="numberValidation.hasError.value"
|
|
382
|
+
:has-warning="numberValidation.hasWarning.value"
|
|
383
|
+
:has-success="numberValidation.hasSuccess.value"
|
|
580
384
|
:aria-invalid="ariaInvalidNumber"
|
|
581
385
|
:disabled="disabled"
|
|
386
|
+
:disable-error-handling="true"
|
|
582
387
|
:bg-color="bgColor"
|
|
583
388
|
:density="props.density"
|
|
584
389
|
:hide-details="props.hideDetails"
|
|
@@ -597,8 +402,7 @@
|
|
|
597
402
|
:display-asterisk="false"
|
|
598
403
|
:aria-describedby="numberFieldErrorId + ' ' + numberFieldWarningId + ' ' + numberFieldSuccessId"
|
|
599
404
|
:show-success-messages="false"
|
|
600
|
-
@input="
|
|
601
|
-
@blur="handleNumberBlur"
|
|
405
|
+
@input="emitValue"
|
|
602
406
|
/>
|
|
603
407
|
</div>
|
|
604
408
|
<div
|
|
@@ -619,6 +423,7 @@
|
|
|
619
423
|
:disabled="disabled"
|
|
620
424
|
:bg-color="bgColor"
|
|
621
425
|
:density="props.density"
|
|
426
|
+
:disable-error-handling="true"
|
|
622
427
|
:hide-details="props.hideDetails"
|
|
623
428
|
:hide-spin-buttons="props.hideSpinButtons"
|
|
624
429
|
:placeholder="props.placeholder"
|
|
@@ -629,9 +434,9 @@
|
|
|
629
434
|
:persistent-hint="props.persistentHint"
|
|
630
435
|
:persistent-placeholder="props.persistentPlaceholder"
|
|
631
436
|
:aria-required="ariaRequired"
|
|
632
|
-
:has-error="
|
|
633
|
-
:has-warning="
|
|
634
|
-
:has-success="
|
|
437
|
+
:has-error="keyValidation.hasError.value"
|
|
438
|
+
:has-warning="keyValidation.hasWarning.value"
|
|
439
|
+
:has-success="keyValidation.hasSuccess.value"
|
|
635
440
|
:aria-invalid="ariaInvalidKey"
|
|
636
441
|
class="key-field"
|
|
637
442
|
:class="{
|
|
@@ -641,7 +446,6 @@
|
|
|
641
446
|
:aria-describedby="keyFieldErrorId + ' ' + keyFieldWarningId + ' ' + keyFieldSuccessId"
|
|
642
447
|
:show-success-messages="false"
|
|
643
448
|
@input="handleKeyInput"
|
|
644
|
-
@blur="handleKeyBlur"
|
|
645
449
|
/>
|
|
646
450
|
</div>
|
|
647
451
|
<div
|
|
@@ -653,8 +457,8 @@
|
|
|
653
457
|
class="sy-number-errors"
|
|
654
458
|
>
|
|
655
459
|
<VMessages
|
|
656
|
-
v-show="
|
|
657
|
-
:active="
|
|
460
|
+
v-show="numberValidation.hasError.value"
|
|
461
|
+
:active="numberValidation.hasError.value"
|
|
658
462
|
:messages="numberValidation.errors.value"
|
|
659
463
|
/>
|
|
660
464
|
</div>
|
|
@@ -663,8 +467,8 @@
|
|
|
663
467
|
class="sy-key-errors"
|
|
664
468
|
>
|
|
665
469
|
<VMessages
|
|
666
|
-
v-show="
|
|
667
|
-
:active="
|
|
470
|
+
v-show="keyValidation.hasError.value"
|
|
471
|
+
:active="keyValidation.hasError.value"
|
|
668
472
|
:messages="keyValidation.errors.value"
|
|
669
473
|
/>
|
|
670
474
|
</div>
|
|
@@ -673,8 +477,8 @@
|
|
|
673
477
|
class="sy-number-warnings"
|
|
674
478
|
>
|
|
675
479
|
<VMessages
|
|
676
|
-
v-show="
|
|
677
|
-
:active="
|
|
480
|
+
v-show="numberValidation.hasWarning.value"
|
|
481
|
+
:active="numberValidation.hasWarning.value"
|
|
678
482
|
:messages="numberValidation.warnings.value"
|
|
679
483
|
/>
|
|
680
484
|
</div>
|
|
@@ -683,8 +487,8 @@
|
|
|
683
487
|
class="sy-key-warnings"
|
|
684
488
|
>
|
|
685
489
|
<VMessages
|
|
686
|
-
v-show="
|
|
687
|
-
:active="
|
|
490
|
+
v-show="keyValidation.hasWarning.value"
|
|
491
|
+
:active="keyValidation.hasWarning.value"
|
|
688
492
|
:messages="keyValidation.warnings.value"
|
|
689
493
|
/>
|
|
690
494
|
</div>
|
|
@@ -693,8 +497,8 @@
|
|
|
693
497
|
class="sy-number-success"
|
|
694
498
|
>
|
|
695
499
|
<VMessages
|
|
696
|
-
v-show="
|
|
697
|
-
:active="
|
|
500
|
+
v-show="numberValidation.hasSuccess.value && showSuccessMessages"
|
|
501
|
+
:active="numberValidation.hasSuccess.value"
|
|
698
502
|
:messages="numberValidation.successes.value"
|
|
699
503
|
/>
|
|
700
504
|
</div>
|
|
@@ -703,8 +507,8 @@
|
|
|
703
507
|
class="sy-key-success"
|
|
704
508
|
>
|
|
705
509
|
<VMessages
|
|
706
|
-
v-show="
|
|
707
|
-
:active="
|
|
510
|
+
v-show="keyValidation.hasSuccess.value && showSuccessMessages"
|
|
511
|
+
:active="keyValidation.hasSuccess.value"
|
|
708
512
|
:messages="keyValidation.successes.value"
|
|
709
513
|
/>
|
|
710
514
|
</div>
|
|
@@ -713,8 +517,6 @@
|
|
|
713
517
|
</template>
|
|
714
518
|
|
|
715
519
|
<style lang="scss" scoped>
|
|
716
|
-
@use '@/assets/tokens';
|
|
717
|
-
|
|
718
520
|
.nir-field {
|
|
719
521
|
display: flex;
|
|
720
522
|
flex-wrap: wrap;
|
|
@@ -792,16 +594,16 @@
|
|
|
792
594
|
|
|
793
595
|
.sy-number-errors,
|
|
794
596
|
.sy-key-errors {
|
|
795
|
-
color:
|
|
597
|
+
color: rgb(var(--v-theme-textError));
|
|
796
598
|
}
|
|
797
599
|
|
|
798
600
|
.sy-number-warnings,
|
|
799
601
|
.sy-key-warnings {
|
|
800
|
-
color:
|
|
602
|
+
color: rgb(var(--v-theme-textWarning));
|
|
801
603
|
}
|
|
802
604
|
|
|
803
605
|
.sy-number-success,
|
|
804
606
|
.sy-key-success {
|
|
805
|
-
color:
|
|
607
|
+
color: rgb(var(--v-theme-textSuccess));
|
|
806
608
|
}
|
|
807
609
|
</style>
|
|
@@ -1,15 +1,110 @@
|
|
|
1
|
-
import { Meta,
|
|
1
|
+
import { Meta, Primary } from '@storybook/addon-docs';
|
|
2
2
|
import * as Stories from '../NirField.stories.ts';
|
|
3
|
+
import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg';
|
|
3
4
|
import '@/stories/styles/shared.css';
|
|
5
|
+
import {
|
|
6
|
+
AccessibilityGuideLayout,
|
|
7
|
+
CriteriaSection,
|
|
8
|
+
CriteriaCard,
|
|
9
|
+
BestPracticesSection,
|
|
10
|
+
ResourcesSection,
|
|
11
|
+
DemoSection
|
|
12
|
+
} from '@/stories/accessibility/AccessibilityGuideLayout.mdx';
|
|
4
13
|
|
|
5
14
|
<Meta of={Stories} />
|
|
6
15
|
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
16
|
+
<AccessibilityGuideLayout
|
|
17
|
+
componentName="NirField"
|
|
18
|
+
iconSrc={AccessibilityIcon}
|
|
19
|
+
>
|
|
11
20
|
|
|
12
21
|
<div class="mt-2">
|
|
13
22
|
<p>Rapport d’audit manuel : <a href="/audits/NirField.xlsx" style={{ color:'#0C41BD' }}>Voir le rapport</a></p>
|
|
14
|
-
|
|
15
|
-
|
|
23
|
+
<p style={{ color: 'grey', fontSize: '14px', marginTop: '0px' }}>Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/897" target="_blank" style={{color:'#0C41BD'}}>issue #897</a>)</p>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<CriteriaSection>
|
|
27
|
+
<CriteriaCard icon="🧩" title="Regroupement du NIR et de sa clé">
|
|
28
|
+
<ul>
|
|
29
|
+
<li><strong>Donnée logique unique</strong> : le numéro de sécurité sociale et sa clé forment un même ensemble de saisie</li>
|
|
30
|
+
<li><strong>Comportement par défaut</strong> : lorsque la clé est affichée, le composant regroupe automatiquement les deux champs dans un <code>fieldset</code> avec un <code>legend</code></li>
|
|
31
|
+
<li><strong>Pour les lecteurs d’écran</strong> : le contexte (ex : <code>Numéro de sécurité sociale</code>) est annoncé avant chaque champ, comme la <code>Clé</code></li> <li><strong>Point de vigilance</strong> : la légende doit être explicite et décrire la donnée complète, et non un intitulé technique ou ambigu</li>
|
|
32
|
+
<li><strong>Cas particulier</strong> : si <code>withoutFieldset</code> est utilisé, le composant remplace le <code>fieldset</code> par un <code>role="group"</code> avec un <code>aria-label</code></li>
|
|
33
|
+
</ul>
|
|
34
|
+
</CriteriaCard>
|
|
35
|
+
|
|
36
|
+
<CriteriaCard icon="🏷️" title="Étiquettes des champs">
|
|
37
|
+
<ul>
|
|
38
|
+
<li><strong>Libellés distincts</strong> : chaque sous-champ dispose de son propre libellé visible, par exemple <code>Numéro de sécurité sociale</code> et <code>Clé de validation</code></li>
|
|
39
|
+
<li><strong>Compréhension renforcée</strong> : le <code>legend</code> apporte le contexte global, tandis que chaque <code>label</code> permet d’identifier précisément la zone en cours de saisie</li>
|
|
40
|
+
<li><strong>Pertinence attendue</strong> : les libellés doivent éviter toute confusion entre les 13 chiffres du NIR et les 2 chiffres de la clé</li>
|
|
41
|
+
</ul>
|
|
42
|
+
</CriteriaCard>
|
|
43
|
+
|
|
44
|
+
<CriteriaCard icon="🔗" title="Messages liés automatiquement">
|
|
45
|
+
<ul>
|
|
46
|
+
<li><strong>Messages liés aux bons champs</strong> : chaque champ génère ses propres identifiants pour les messages d’erreur, d’avertissement et de succès</li>
|
|
47
|
+
<li><strong>Liaison</strong> : ces messages sont automatiquement reliés au champ concerné via <code>aria-describedby</code></li>
|
|
48
|
+
<li><strong>Comportement natif du composant</strong> : le développeur n’a pas besoin de relier manuellement les messages aux champs</li>
|
|
49
|
+
<li><strong>Pour les lecteurs d’écran</strong> : les messages sont lus au bon moment </li>
|
|
50
|
+
<li><strong>Sans configuration supplémentaire</strong> : la liaison entre les champs et leurs messages est gérée automatiquement</li>
|
|
51
|
+
</ul>
|
|
52
|
+
</CriteriaCard>
|
|
53
|
+
|
|
54
|
+
<CriteriaCard icon="⚠️" title="Champs obligatoires et erreurs">
|
|
55
|
+
<ul>
|
|
56
|
+
<li><strong>Champ requis</strong> : lorsque la saisie est obligatoire, le composant ajoute automatiquement <code>aria-required</code></li>
|
|
57
|
+
<li><strong>Champ en erreur</strong> : lorsqu’une validation échoue, le composant ajoute dynamiquement <code>aria-invalid</code> sur le ou les champs concernés</li>
|
|
58
|
+
<li><strong>Lecture vocale</strong> : ces infos sont annoncées automatiquement par les technologies d’assistance</li>
|
|
59
|
+
<li><strong>Attention</strong> : il faut aussi un indicateur visuel (pas seulement technique)</li>
|
|
60
|
+
|
|
61
|
+
</ul>
|
|
62
|
+
</CriteriaCard>
|
|
63
|
+
|
|
64
|
+
<CriteriaCard icon="✍️" title="Aide à la saisie">
|
|
65
|
+
<ul>
|
|
66
|
+
<li><strong>Format spécifique</strong> : le NIR a une structure précise</li>
|
|
67
|
+
<li><strong>Aide explicite recommandée</strong> : documenter ce qui est attendu pour le numéro et pour la clé, par exemple les 13 premiers chiffres puis les 2 derniers</li>
|
|
68
|
+
<li><strong>Messages clairs</strong> : en cas d’erreur, le message doit indiquer la valeur attendue de façon compréhensible, avec un exemple</li>
|
|
69
|
+
<li><strong>Personnalisation</strong> : le composant permet de fournir des règles et messages personnalisés afin de s'adapter au contexte métier</li>
|
|
70
|
+
</ul>
|
|
71
|
+
</CriteriaCard>
|
|
72
|
+
|
|
73
|
+
<CriteriaCard icon="⌨️" title="Navigation et focus">
|
|
74
|
+
<ul>
|
|
75
|
+
<li><strong>Passage automatique</strong> : quand le NIR est complet, le focus passe automatiquement au champ de la clé</li>
|
|
76
|
+
<li><strong>Retour au NIR</strong> : si la clé est supprimée, le focus revient sur le champ du numéro</li>
|
|
77
|
+
<li><strong>Saisie facilitée</strong> : si l’utilisateur continue à taper, les chiffres sont directement envoyés dans la clé</li>
|
|
78
|
+
<li>
|
|
79
|
+
<strong>En cas d’erreur</strong> : le focus revient sur le premier champ à corriger uniquement lors de la validation
|
|
80
|
+
(<code>onBlur = true</code> ou soumission du formulaire).
|
|
81
|
+
Pendant la saisie (<code>onBlur = false</code> et <code>shouldValidateOnBlur = false</code>), le focus ne bouge pas pour ne pas interrompre l’utilisateur, mais on l’aide à corriger les erreurs lorsqu’il termine un champ ou soumet le formulaire.
|
|
82
|
+
</li>
|
|
83
|
+
</ul>
|
|
84
|
+
</CriteriaCard>
|
|
85
|
+
</CriteriaSection>
|
|
86
|
+
<DemoSection componentName="NirField">
|
|
87
|
+
<Primary />
|
|
88
|
+
</DemoSection>
|
|
89
|
+
|
|
90
|
+
<BestPracticesSection>
|
|
91
|
+
<ul>
|
|
92
|
+
<li>Utiliser le regroupement par <code>fieldset</code> et <code>legend</code> dès lors que le numéro et la clé sont saisis ensemble</li>
|
|
93
|
+
<li>Mettre une légende claire (ex : "Numéro de sécurité sociale")</li>
|
|
94
|
+
<li>Garder deux labels distincts pour le numéro et la clé</li>
|
|
95
|
+
<li>Laisser le composant gérer les attributs ARIA automatiquement</li>
|
|
96
|
+
<li>Prévoir une aide à la saisie claire, visible et compréhensible</li>
|
|
97
|
+
<li>Afficher des messages d’erreur explicites, contextualisés et, si possible, accompagnés d’un exemple</li>
|
|
98
|
+
<li>Ne pas signaler le caractère obligatoire, l’erreur ou la réussite uniquement par la couleur</li>
|
|
99
|
+
</ul>
|
|
100
|
+
</BestPracticesSection>
|
|
101
|
+
|
|
102
|
+
<ResourcesSection>
|
|
103
|
+
<ul>
|
|
104
|
+
<li><a href="https://www.accede-web.com/notices/html-et-css/formulaires/utiliser-la-balise-label-ainsi-que-les-attributs-for-et-id-pour-etiqueter-les-champs-avec-intitule-visible/" target="_blank" style={{ color: '#0C41BD' }}>Accede Web – Utiliser label, for et id</a></li>
|
|
105
|
+
<li><a href="https://www.accede-web.com/notices/html-et-css/formulaires/integrer-required-ou-aria-requiredtrue-dans-les-champs-obligatoires/" target="_blank" style={{ color: '#0C41BD' }}>Accede Web – Intégrer required ou aria-required="true"</a></li>
|
|
106
|
+
<li><a href="https://www.accede-web.com/notices/html-et-css/formulaires/integrer-les-messages-derreur-et-les-suggestions-de-correction-directement-dans-les-balises-label/" target="_blank" style={{ color: '#0C41BD' }}>Accede Web – Messages d’erreur et suggestions de correction</a></li>
|
|
107
|
+
</ul>
|
|
108
|
+
</ResourcesSection>
|
|
109
|
+
|
|
110
|
+
</AccessibilityGuideLayout>
|