@cnamts/synapse 1.0.23 → 1.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AutocompleteFilter-BWLR3U7W.js +114 -0
- package/dist/AutocompleteFilter-D9jzRzAL.cjs +1 -0
- package/dist/{DateFilter-Dc-gSGwk.js → DateFilter-BpwFexzi.js} +1 -1
- package/dist/DateFilter-DTUl8hb1.cjs +1 -0
- package/dist/{NumberFilter-vP38Wp6j.js → NumberFilter-Bz_NTdX9.js} +3 -3
- package/dist/NumberFilter-MAEojdk0.cjs +1 -0
- package/dist/PeriodFilter-CC4WgIhl.cjs +1 -0
- package/dist/{PeriodFilter-Ba1uYUnT.js → PeriodFilter-DX_wy9g-.js} +1 -1
- package/dist/SelectFilter-BR3fvl-a.cjs +1 -0
- package/dist/SelectFilter-xqiPtPgX.js +135 -0
- package/dist/{TextFilter-B84dpnoq.js → TextFilter-BBl3JFqK.js} +7 -7
- package/dist/TextFilter-CCfYFl5F.cjs +1 -0
- package/dist/apLightTheme-CFSRrjv2.cjs +1 -0
- package/dist/apLightTheme-D1P4jcD0.js +1231 -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 +108 -146
- 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 +28 -506
- package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +28 -506
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +65 -85
- package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +627 -771
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +315 -402
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +112 -155
- 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/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/HeaderNavigationBar/HeaderNavigationBar.d.ts +4 -4
- 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 -122
- package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +85 -121
- package/dist/components/NirField/NirField.d.ts +206 -270
- 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 -1640
- package/dist/components/PhoneField/PhoneField.d.ts +88 -124
- 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 +9 -6
- package/dist/components/Tables/SyTable/SyTable.d.ts +9 -6
- package/dist/components/Tables/common/SyTableFilter.d.ts +2 -3
- package/dist/components/Tables/common/SyTablePagination.d.ts +17 -19
- 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/types.d.ts +19 -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 +6 -6
- package/dist/composables/date/useDatePickerAccessibility.d.ts +1 -1
- package/dist/composables/rules/useFieldValidation.d.ts +4 -4
- 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 +15 -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/{main-aLKwdMi1.js → main-BtTqyn4z.js} +16434 -15672
- package/dist/main-C1e3eoxd.cjs +1067 -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/vuetifyConfig.js +561 -0
- package/dist/vuetifyConfig.umd.cjs +1 -0
- package/package.json +10 -4
- package/src/assets/overrides/_btns.scss +0 -6
- package/src/assets/overrides/_icons.scss +9 -1
- package/src/assets/overrides/_typography.scss +0 -10
- package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +2 -2
- package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +1 -1
- package/src/components/Amelipro/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +2 -2
- 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 +5 -1
- package/src/components/ChipList/accessibilite/Accessibility.mdx +83 -10
- package/src/components/ChipList/tests/ChipList.a11y.spec.ts +41 -0
- package/src/components/Customs/Selects/SelectBtnField/accessibilite/Accessibility.mdx +0 -9
- package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +22 -5
- package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +143 -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 +8 -9
- package/src/components/Customs/Selects/SyInputSelect/tests/SyInputSelect.spec.ts +10 -10
- package/src/components/Customs/Selects/SySelect/SySelect.vue +14 -11
- package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +54 -0
- package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +6 -9
- package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +10 -16
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +16 -11
- package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +35 -0
- 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/SyRadioGroup/SyRadioGroup.vue +4 -7
- package/src/components/Customs/SyTextField/SyTextField.mdx +1 -1
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +29 -27
- package/src/components/Customs/SyTextField/SyTextField.vue +154 -157
- 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 +330 -223
- 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 +195 -159
- package/src/components/DatePicker/ComplexDatePicker/accessibilite/Accessibility.mdx +76 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +10 -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 +63 -57
- 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/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/useDateTextField.ts +7 -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/DiacriticPicker/accessibilite/Accessibility.mdx +76 -8
- package/src/components/HeaderBar/HeaderBar.stories.ts +14 -2
- package/src/components/Logo/accessibilite/Accessibility.mdx +73 -11
- 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/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 +4 -0
- package/src/components/NirField/NirField.vue +64 -260
- package/src/components/NirField/accessibilite/Accessibility.mdx +2 -2
- package/src/components/NirField/locales.ts +1 -1
- package/src/components/NirField/tests/NirField.spec.ts +6 -0
- package/src/components/NirField/useNirValidation.ts +271 -0
- package/src/components/PasswordField/PasswordField.stories.ts +4 -4
- package/src/components/PasswordField/PasswordField.vue +18 -24
- 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 +5 -6
- package/src/components/PhoneField/tests/PhoneField.spec.ts +1 -0
- package/src/components/RangeField/RangeField.vue +6 -0
- 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/Tables/SyServerTable/SyServerTable.mdx +25 -0
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +673 -1
- package/src/components/Tables/SyServerTable/SyServerTable.vue +148 -91
- package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +58 -0
- package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +122 -0
- package/src/components/Tables/SyTable/SyTable.mdx +25 -0
- package/src/components/Tables/SyTable/SyTable.stories.ts +452 -1
- package/src/components/Tables/SyTable/SyTable.vue +130 -56
- package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +57 -0
- package/src/components/Tables/SyTable/tests/SyTable.spec.ts +108 -0
- package/src/components/Tables/common/SyTableFilter.vue +22 -2
- package/src/components/Tables/common/TableHeader.vue +5 -1
- 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 +10 -11
- 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/tableFilterUtils.ts +3 -0
- package/src/components/Tables/common/tableStyles.scss +48 -4
- package/src/components/Tables/common/tests/filterByRange.spec.ts +2 -1
- package/src/components/Tables/common/types.ts +13 -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 +3 -3
- package/src/components/Tables/common/useTableRowCheckboxAccessibility.ts +41 -0
- 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/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 +135 -99
- package/src/composantsVuetify/Introduction.mdx +48 -0
- package/src/composantsVuetify/VBtn/VBtn.mdx +72 -0
- package/src/composantsVuetify/VBtn/v-btn.stories.ts +121 -0
- package/src/composantsVuetify/VTooltip/VTooltip.mdx +32 -0
- package/src/composantsVuetify/VTooltip/v-tooltip.stories.ts +95 -0
- package/src/designTokens/tokens/cnam/cnamSemantic.ts +2 -2
- package/src/main.ts +0 -2
- package/src/stories/Components/Components.stories.ts +74 -9
- package/src/stories/Demarrer/Accueil.stories.ts +3 -3
- package/src/stories/GuideDuDev/Amelipro.mdx +15 -0
- package/src/stories/GuideDuDev/Amelipro.stories.ts +209 -0
- package/src/stories/GuideDuDev/vuetifyOptions.mdx +3 -3
- package/dist/SelectFilter-BioGT6Nn.js +0 -136
- package/dist/style.css +0 -1
- package/src/components/DatePicker/Accessibilite.mdx +0 -14
|
@@ -93,7 +93,7 @@ exports[`AmeliproHeaderBrandSection > Snapshots > renders the component with onl
|
|
|
93
93
|
<img
|
|
94
94
|
alt="AmeliPro"
|
|
95
95
|
class="logo-amelipro"
|
|
96
|
-
src="/
|
|
96
|
+
src="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='99'%20height='64'%20viewBox='0%200%2099%2064'%20fill='none'%3e%3cpath%20fill='%2300a5df'%20d='M68.38%2038.78c.54.32%201.45.63%202.31.63%202.76%200%205.38-1.87%205.38-5.72v-2.86c0-3.59-2.62-5.7-5.7-5.7-3.09%200-5.71%202.11-5.71%205.7v13.73h3.72v-5.78Zm0-2.99v-4.83c0-1.8.85-2.68%202-2.68%201.12%200%201.97.88%201.97%202.68v2.6c0%201.97-.88%202.7-2%202.7-.67%200-1.32-.2-1.97-.47ZM77.97%2039.07h3.7v-8.68c0-1.23.67-2.11%201.84-2.11.63%200%201.28.13%201.85.29l.7-3.02a8.47%208.47%200%200%200-2.57-.42c-3.1%200-5.52%202.11-5.52%205.26v8.68ZM86.43%2033.45c0%203.72%202.44%205.96%205.8%205.96%203.35%200%205.8-2.24%205.8-5.96V31.1c0-3.72-2.45-5.96-5.8-5.96-3.36%200-5.8%202.24-5.8%205.96v2.36Zm3.69-.13v-2.1c0-1.8.52-2.94%202.1-2.94%201.56%200%202.11%201.14%202.11%202.94v2.1c0%201.8-.55%202.94-2.1%202.94-1.57%200-2.11-1.14-2.11-2.94Z'/%3e%3cpath%20fill='%230c419a'%20d='M.47%2035.64c0-2.82%202.38-4.42%207.64-4.97-.08-1.2-.82-1.9-2.27-1.9-1.12%200-2.24.48-3.5%201.23L.94%2027.36a10.75%2010.75%200%200%201%205.67-1.78c3.39%200%205.25%201.97%205.25%206.09v7.72H8.15v-1.3s-1.53%201.64-3.7%201.64C2%2039.69.48%2037.9.48%2035.64Zm7.64-.22v-2.34c-2.8.37-3.88%201.26-3.88%202.27%200%20.85.6%201.3%201.53%201.3.86-.04%201.64-.52%202.35-1.23ZM57.84%2021.75c0-1.22.97-2.08%202.28-2.08%201.3%200%202.27.86%202.27%202.08%200%201.23-.97%202.08-2.27%202.08-1.35%200-2.28-.89-2.28-2.08Zm.3%204.05h3.91v13.48h-3.9V25.8ZM36.24%2032.7c0-4.37%202.76-7.05%206.07-7.05%203.77%200%205.85%202.79%205.85%206.46%200%20.7-.07%201.45-.14%201.79h-7.94c.33%201.97%201.67%202.86%203.43%202.86%201%200%201.86-.41%202.83-.97l1.34%202.49a8.4%208.4%200%200%201-4.7%201.52c-3.87-.04-6.74-2.64-6.74-7.1Zm8.6-1.48c0-1.48-.85-2.56-2.41-2.56-1.23%200-2.1.85-2.35%202.56h4.77ZM18.18%2027.66c1.08-1.08%202.28-2%204.03-2%201.86%200%203.02.77%203.69%202.18%201.15-1.19%202.38-2.19%204.17-2.19%202.9%200%204.21%202.08%204.21%205.39v8.28h-4.14v-7.73c0-1.85-.52-2.41-1.56-2.41-.63%200-1.34.4-2.16%201.23v8.95h-4.18v-7.77c0-1.85-.48-2.41-1.56-2.41-.63%200-1.34.4-2.16%201.23v8.95h-4.14V26.02h3.8v1.64ZM50.52%2035.2V20.34h3.92v15c0%20.86.37%201.12.7%201.12.15%200%20.26%200%20.49-.04l.48%202.94c-.44.18-1.08.33-1.97.33-2.72.04-3.62-1.75-3.62-4.5Z'/%3e%3c/svg%3e"
|
|
97
97
|
/>
|
|
98
98
|
</button>
|
|
99
99
|
</div>
|
|
@@ -67,8 +67,8 @@ exports[`AmeliproTextArea > Snapshots > renders the component with all propertie
|
|
|
67
67
|
valid = value.trim() !== "";
|
|
68
68
|
} else {
|
|
69
69
|
valid = value !== null && value !== void 0;
|
|
70
|
-
}
|
|
71
|
-
return valid || __vite_ssr_import_0__.ruleMessage(errorMessages, "default");
|
|
70
|
+
};
|
|
71
|
+
return valid || (0,__vite_ssr_import_0__.ruleMessage)(errorMessages, "default");
|
|
72
72
|
}"
|
|
73
73
|
style="
|
|
74
74
|
max-width: 150px;
|
|
@@ -1,10 +1,88 @@
|
|
|
1
|
-
import { Meta, Story } from '@storybook/
|
|
2
|
-
import * as
|
|
3
|
-
import '@/
|
|
1
|
+
import { Meta, Story } from '@storybook/blocks';
|
|
2
|
+
import * as CaptchaStories from '../Captcha.stories';
|
|
3
|
+
import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg';
|
|
4
|
+
import {
|
|
5
|
+
AccessibilityGuideLayout,
|
|
6
|
+
CriteriaSection,
|
|
7
|
+
CriteriaCard,
|
|
8
|
+
DemoSection,
|
|
9
|
+
BestPracticesSection,
|
|
10
|
+
ResourcesSection,
|
|
11
|
+
AuditSection,
|
|
12
|
+
} from '@/stories/accessibility/AccessibilityGuideLayout.mdx';
|
|
4
13
|
|
|
5
|
-
<Meta of={
|
|
14
|
+
<Meta of={CaptchaStories} />
|
|
6
15
|
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
16
|
+
<AccessibilityGuideLayout
|
|
17
|
+
componentName="Captcha"
|
|
18
|
+
iconSrc={AccessibilityIcon}
|
|
19
|
+
>
|
|
20
|
+
|
|
21
|
+
<CriteriaSection>
|
|
22
|
+
<CriteriaCard icon="🖼️" title="Images et alternatives textuelles">
|
|
23
|
+
<ul>
|
|
24
|
+
<li><strong>Image captcha</strong> : Attribut <code>alt</code> avec <code>locales.captchaImgAlt</code> ("Le captcha à saisir").</li>
|
|
25
|
+
<li><strong>Skeleton loader</strong> : <code>aria-label</code> avec <code>locales.captchaImgLoading</code> pendant le chargement.</li>
|
|
26
|
+
<li><strong>Gestion des erreurs</strong> : Émission de l'événement <code>imageError</code> en cas d'échec de chargement.</li>
|
|
27
|
+
</ul>
|
|
28
|
+
</CriteriaCard>
|
|
29
|
+
|
|
30
|
+
<CriteriaCard icon="🎵" title="Captcha audio et contrôles">
|
|
31
|
+
<ul>
|
|
32
|
+
<li><strong>Bouton audio</strong> : <code>aria-label</code> dynamique avec <code>locales.audio.loading</code> pendant le chargement.</li>
|
|
33
|
+
<li><strong>Icônes décoratives</strong> : <code>aria-hidden="true"</code> sur les icônes volume-up et SyIcon décoratives.</li>
|
|
34
|
+
<li><strong>États lecture/pause</strong> : Texte alternatif avec <code>locales.pause</code> et <code>locales.play</code>.</li>
|
|
35
|
+
</ul>
|
|
36
|
+
</CriteriaCard>
|
|
37
|
+
|
|
38
|
+
<CriteriaCard icon="📝" title="Formulaires et champs de saisie">
|
|
39
|
+
<ul>
|
|
40
|
+
<li><strong>Champ de saisie</strong> : Utilise <code>SyTextField</code> avec label descriptif selon le type (image/audio).</li>
|
|
41
|
+
<li><strong>Validation</strong> : Règle personnalisée avec message <code>locales.required</code>.</li>
|
|
42
|
+
<li><strong>États du champ</strong> : Désactivé si rejeté, readonly si succès, messages d'erreur.</li>
|
|
43
|
+
<li><strong>Labellisation</strong> : Labels spécifiques avec <code>locales.image.textfieldLabel</code> et <code>locales.audio.textfieldLabel</code>.</li>
|
|
44
|
+
</ul>
|
|
45
|
+
</CriteriaCard>
|
|
46
|
+
|
|
47
|
+
<CriteriaCard icon="🔄" title="Boutons d'action et navigation">
|
|
48
|
+
<ul>
|
|
49
|
+
<li><strong>Texte masqué</strong> : <code><p class="d-sr-only"></code> avec <code>locales.renew</code> pour le bouton de renouvellement.</li>
|
|
50
|
+
<li><strong>Icônes décoratives</strong> : Attribut <code>decorative</code> sur les SyIcon pour ne pas polluer les lecteurs d'écran.</li>
|
|
51
|
+
<li><strong>Boutons configurables</strong> : Utilisation de <code>CaptchaBtn</code> avec icônes et textes appropriés.</li>
|
|
52
|
+
</ul>
|
|
53
|
+
</CriteriaCard>
|
|
54
|
+
|
|
55
|
+
<CriteriaCard icon="⚠️" title="Alertes et messages d'erreur">
|
|
56
|
+
<ul>
|
|
57
|
+
<li><strong>Composant d'alerte</strong> : Utilise <code>VAlert</code> avec couleur "error" et variant "text".</li>
|
|
58
|
+
<li><strong>Icône d'erreur</strong> : SyIcon décoratif avec <code>mdiAlertCircleOutline</code>.</li>
|
|
59
|
+
<li><strong>Cliquabilité</strong> : L'alerte est cliquable pour renouveler le captcha.</li>
|
|
60
|
+
</ul>
|
|
61
|
+
</CriteriaCard>
|
|
62
|
+
</CriteriaSection>
|
|
63
|
+
|
|
64
|
+
<DemoSection componentName="Captcha">
|
|
65
|
+
<Story of={CaptchaStories.Default} />
|
|
66
|
+
</DemoSection>
|
|
67
|
+
|
|
68
|
+
<BestPracticesSection>
|
|
69
|
+
<ul>
|
|
70
|
+
<li>Fournissez toujours les URLs requises (<code>urlCreate</code>, <code>urlGetImage</code>, <code>urlGetAudio</code>).</li>
|
|
71
|
+
<li>Personnalisez les <code>locales</code> pour adapter les messages à votre langue.</li>
|
|
72
|
+
<li>Configurez un <code>helpDesk</code> approprié pour les utilisateurs en difficulté.</li>
|
|
73
|
+
<li>Utilisez <code>tagTitle</code> pour un niveau de titre cohérent avec votre page.</li>
|
|
74
|
+
<li>Gérez les erreurs avec <code>errorMessage</code> pour un feedback clair.</li>
|
|
75
|
+
<li>Testez les deux modes (image et audio) pour une accessibilité complète.</li>
|
|
76
|
+
</ul>
|
|
77
|
+
</BestPracticesSection>
|
|
78
|
+
|
|
79
|
+
<ResourcesSection>
|
|
80
|
+
<ul>
|
|
81
|
+
<li><a href="https://www.w3.org/WAI/WCAG21/Understanding/non-text-content.html" target="_blank" rel="noopener noreferrer">WCAG : Contenu non textuel</a></li>
|
|
82
|
+
<li><a href="https://www.w3.org/WAI/WCAG21/Understanding/error-identification.html" target="_blank" rel="noopener noreferrer">WCAG : Identification des erreurs</a></li>
|
|
83
|
+
<li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/alert/" target="_blank" rel="noopener noreferrer">Guide des pratiques WAI-ARIA : Alertes</a></li>
|
|
84
|
+
<li><a href="https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#1.4" target="_blank" rel="noopener noreferrer">RGAA : Captchas</a></li>
|
|
85
|
+
<li><a href="https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#1.5" target="_blank" rel="noopener noreferrer">RGAA : Solution d’accès alternatif</a></li>
|
|
86
|
+
</ul>
|
|
87
|
+
</ResourcesSection>
|
|
88
|
+
</AccessibilityGuideLayout>
|
|
@@ -117,21 +117,21 @@ exports[`Captcha > renders correctly in audio mode 1`] = `
|
|
|
117
117
|
v-field-label
|
|
118
118
|
v-label
|
|
119
119
|
"
|
|
120
|
-
for="input-v-
|
|
121
|
-
id="input-v-
|
|
120
|
+
for="input-v-3"
|
|
121
|
+
id="input-v-3-label"
|
|
122
122
|
>
|
|
123
123
|
<!---->
|
|
124
124
|
Caractères de l’audio
|
|
125
125
|
</label>
|
|
126
126
|
<!---->
|
|
127
127
|
<input
|
|
128
|
-
aria-describedby="input-v-
|
|
128
|
+
aria-describedby="input-v-3-messages"
|
|
129
129
|
aria-label="Caractères de l’audio"
|
|
130
|
-
aria-labelledby="input-v-
|
|
130
|
+
aria-labelledby="input-v-3-label"
|
|
131
131
|
autocomplete="off"
|
|
132
132
|
class="v-field__input"
|
|
133
133
|
direction="horizontal"
|
|
134
|
-
id="input-v-
|
|
134
|
+
id="input-v-3"
|
|
135
135
|
title="Caractères de l’audio"
|
|
136
136
|
type="text"
|
|
137
137
|
/>
|
|
@@ -170,7 +170,7 @@ exports[`Captcha > renders correctly in audio mode 1`] = `
|
|
|
170
170
|
appear="false"
|
|
171
171
|
class="v-messages"
|
|
172
172
|
css="true"
|
|
173
|
-
id="input-v-
|
|
173
|
+
id="input-v-3-messages"
|
|
174
174
|
name="slide-y-transition"
|
|
175
175
|
persisted="false"
|
|
176
176
|
tag="div"
|
|
@@ -459,21 +459,21 @@ exports[`Captcha > renders correctly in image mode 1`] = `
|
|
|
459
459
|
v-field-label
|
|
460
460
|
v-label
|
|
461
461
|
"
|
|
462
|
-
for="input-v-
|
|
463
|
-
id="input-v-
|
|
462
|
+
for="input-v-2"
|
|
463
|
+
id="input-v-2-label"
|
|
464
464
|
>
|
|
465
465
|
<!---->
|
|
466
466
|
Caractères de l’image
|
|
467
467
|
</label>
|
|
468
468
|
<!---->
|
|
469
469
|
<input
|
|
470
|
-
aria-describedby="input-v-
|
|
470
|
+
aria-describedby="input-v-2-messages"
|
|
471
471
|
aria-label="Caractères de l’image"
|
|
472
|
-
aria-labelledby="input-v-
|
|
472
|
+
aria-labelledby="input-v-2-label"
|
|
473
473
|
autocomplete="off"
|
|
474
474
|
class="v-field__input"
|
|
475
475
|
direction="horizontal"
|
|
476
|
-
id="input-v-
|
|
476
|
+
id="input-v-2"
|
|
477
477
|
title="Caractères de l’image"
|
|
478
478
|
type="text"
|
|
479
479
|
/>
|
|
@@ -512,7 +512,7 @@ exports[`Captcha > renders correctly in image mode 1`] = `
|
|
|
512
512
|
appear="false"
|
|
513
513
|
class="v-messages"
|
|
514
514
|
css="true"
|
|
515
|
-
id="input-v-
|
|
515
|
+
id="input-v-2-messages"
|
|
516
516
|
name="slide-y-transition"
|
|
517
517
|
persisted="false"
|
|
518
518
|
tag="div"
|
|
@@ -713,9 +713,6 @@ export const CustomResetText: Story = {
|
|
|
713
713
|
|
|
714
714
|
export const WithOverflow: Story = {
|
|
715
715
|
parameters: {
|
|
716
|
-
a11y: {
|
|
717
|
-
disable: true,
|
|
718
|
-
},
|
|
719
716
|
sourceCode: [
|
|
720
717
|
{
|
|
721
718
|
name: 'Template',
|
|
@@ -809,9 +806,6 @@ export const WithOverflow: Story = {
|
|
|
809
806
|
|
|
810
807
|
export const WithEvents: Story = {
|
|
811
808
|
parameters: {
|
|
812
|
-
a11y: {
|
|
813
|
-
disable: true,
|
|
814
|
-
},
|
|
815
809
|
sourceCode: [
|
|
816
810
|
{
|
|
817
811
|
name: 'Template',
|
|
@@ -923,9 +917,6 @@ const handleReset = () => {
|
|
|
923
917
|
|
|
924
918
|
export const WithPrependStateIcon: Story = {
|
|
925
919
|
parameters: {
|
|
926
|
-
a11y: {
|
|
927
|
-
disable: true,
|
|
928
|
-
},
|
|
929
920
|
sourceCode: [
|
|
930
921
|
{
|
|
931
922
|
name: 'Template',
|
|
@@ -1004,9 +995,6 @@ const items: ChipItem[] = [
|
|
|
1004
995
|
|
|
1005
996
|
export const WithAppendStateIcon: Story = {
|
|
1006
997
|
parameters: {
|
|
1007
|
-
a11y: {
|
|
1008
|
-
disable: true,
|
|
1009
|
-
},
|
|
1010
998
|
sourceCode: [
|
|
1011
999
|
{
|
|
1012
1000
|
name: 'Template',
|
|
@@ -1085,9 +1073,6 @@ const items: ChipItem[] = [
|
|
|
1085
1073
|
|
|
1086
1074
|
export const WithCustomIcon: Story = {
|
|
1087
1075
|
parameters: {
|
|
1088
|
-
a11y: {
|
|
1089
|
-
disable: true,
|
|
1090
|
-
},
|
|
1091
1076
|
sourceCode: [
|
|
1092
1077
|
{
|
|
1093
1078
|
name: 'Template',
|
|
@@ -245,7 +245,7 @@
|
|
|
245
245
|
<SyIcon
|
|
246
246
|
v-bind="options.icon"
|
|
247
247
|
:icon="deleteIcon"
|
|
248
|
-
:color="item.state"
|
|
248
|
+
:color="item.state || 'white'"
|
|
249
249
|
decorative
|
|
250
250
|
/>
|
|
251
251
|
</VBtn>
|
|
@@ -260,7 +260,11 @@
|
|
|
260
260
|
v-bind="options.chip"
|
|
261
261
|
class="overflow-chip text-cyan-darken-40 ma-1"
|
|
262
262
|
:aria-label="overflowAriaLabel"
|
|
263
|
+
role="button"
|
|
264
|
+
tabindex="0"
|
|
263
265
|
@click="toggleShowAllItems"
|
|
266
|
+
@keydown.enter.prevent="toggleShowAllItems"
|
|
267
|
+
@keydown.space.prevent="toggleShowAllItems"
|
|
264
268
|
>
|
|
265
269
|
{{ overflowText }}
|
|
266
270
|
</VChip>
|
|
@@ -1,15 +1,88 @@
|
|
|
1
1
|
import { Meta, Story } from '@storybook/addon-docs';
|
|
2
|
-
import * as
|
|
3
|
-
import '@/
|
|
2
|
+
import * as ChipListStories from '../ChipList.stories.ts';
|
|
3
|
+
import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg';
|
|
4
|
+
import {
|
|
5
|
+
AccessibilityGuideLayout,
|
|
6
|
+
CriteriaSection,
|
|
7
|
+
CriteriaCard,
|
|
8
|
+
DemoSection,
|
|
9
|
+
BestPracticesSection,
|
|
10
|
+
ResourcesSection,
|
|
11
|
+
AuditSection,
|
|
12
|
+
} from '@/stories/accessibility/AccessibilityGuideLayout.mdx';
|
|
4
13
|
|
|
5
|
-
<Meta of={
|
|
14
|
+
<Meta of={ChipListStories} />
|
|
6
15
|
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
16
|
+
<AccessibilityGuideLayout
|
|
17
|
+
componentName="ChipList"
|
|
18
|
+
iconSrc={AccessibilityIcon}
|
|
19
|
+
apgHref="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/"
|
|
20
|
+
>
|
|
21
|
+
<AuditSection>
|
|
22
|
+
<div class="mt-2">
|
|
23
|
+
<p>Rapport d'audit manuel : <a href="/audits/ChipList.xlsx" style={{ color:'#0C41BD' }}>Voir le rapport</a></p>
|
|
24
|
+
<p style={{ color: 'grey', fontSize: '14px', marginTop: '0px' }}>Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/814" target="_blank" style={{color:'#0C41BD'}}>issue #814</a>)</p>
|
|
25
|
+
</div>
|
|
26
|
+
</AuditSection>
|
|
27
|
+
<CriteriaSection>
|
|
28
|
+
<CriteriaCard icon="🏷️" title="Structure sémantique de liste">
|
|
29
|
+
<ul>
|
|
30
|
+
<li><strong>Liste native</strong> : Utilisation de <code><ul></code> et <code><li></code> pour la structure principale</li>
|
|
31
|
+
<li><strong>Étiquetage</strong> : <code>aria-label</code> ou <code>aria-labelledby</code> pour la liste via les props <strong>listAriaLabel</strong> et <strong>listAriaLabelledby</strong></li>
|
|
32
|
+
<li><strong>Contenu des chips</strong> : <code><span></code> avec <code>role="status"</code> et <code>aria-live="polite"</code> pour le texte des chips</li>
|
|
33
|
+
<li><strong>Accessibilité</strong> : Permet une navigation sémantique correcte (critères 9.1.1, 9.2.1 RGAA)</li>
|
|
34
|
+
</ul>
|
|
35
|
+
</CriteriaCard>
|
|
10
36
|
|
|
37
|
+
<CriteriaCard icon="🎯" title="Chips interactifs et débordement">
|
|
38
|
+
<ul>
|
|
39
|
+
<li><strong>Chips supprimables</strong> : Boutons avec <code>aria-label</code> descriptif pour chaque action de suppression</li>
|
|
40
|
+
<li><strong>Chip de débordement</strong> : <code>role="button"</code>, <code>tabindex="0"</code>, et <code>aria-label</code> décrivant les éléments masqués</li>
|
|
41
|
+
<li><strong>Navigation clavier</strong> : Support des touches Entrée et Espace pour le chip de débordement</li>
|
|
42
|
+
<li><strong>Focus visible</strong> : Indicateurs de focus sur tous les éléments interactifs</li>
|
|
43
|
+
</ul>
|
|
44
|
+
</CriteriaCard>
|
|
11
45
|
|
|
12
|
-
<
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
</
|
|
46
|
+
<CriteriaCard icon="⌨️" title="Navigation et interaction clavier">
|
|
47
|
+
<ul>
|
|
48
|
+
<li><strong>Navigation Tab</strong> : Parcours logique des éléments interactifs (chips → bouton débordement → boutons reset)</li>
|
|
49
|
+
<li><strong>Suppression de chips</strong> : Touches Entrée/Espace sur les boutons de suppression</li>
|
|
50
|
+
<li><strong>Débordement</strong> : Touches Entrée/Espace pour afficher/masquer les éléments supplémentaires</li>
|
|
51
|
+
<li><strong>Réinitialisation</strong> : Bouton reset accessible avec navigation standard</li>
|
|
52
|
+
</ul>
|
|
53
|
+
</CriteriaCard>
|
|
54
|
+
|
|
55
|
+
<CriteriaCard icon="🎨" title="États et feedback visuel">
|
|
56
|
+
<ul>
|
|
57
|
+
<li><strong>États des chips</strong> : Couleurs et icônes différentes pour success, info, warning, error</li>
|
|
58
|
+
<li><strong>Icônes d'état</strong> : Option <strong>displayPrependStateIcon</strong> et <strong>displayAppendStateIcon</strong> avec icônes décoratives</li>
|
|
59
|
+
<li><strong>Contraste</strong> : Styles CSS spécifiques pour garantir le contraste des bordures de focus selon l'état</li>
|
|
60
|
+
<li><strong>Feedback</strong> : <code>aria-live="polite"</code> pour les changements de contenu</li>
|
|
61
|
+
</ul>
|
|
62
|
+
</CriteriaCard>
|
|
63
|
+
</CriteriaSection>
|
|
64
|
+
|
|
65
|
+
<DemoSection componentName="ChipList">
|
|
66
|
+
<Story of={ChipListStories.WithOverflow} />
|
|
67
|
+
</DemoSection>
|
|
68
|
+
|
|
69
|
+
<BestPracticesSection>
|
|
70
|
+
<ul>
|
|
71
|
+
<li>Utilisez des libellés descriptifs pour la liste via <code>listAriaLabel</code></li>
|
|
72
|
+
<li>Limitez le nombre de chips visibles avec <code>overflowLimit</code> pour éviter la surcharge visuelle</li>
|
|
73
|
+
<li>Assurez-vous que les textes des chips sont concis mais explicites</li>
|
|
74
|
+
<li>Utilisez les états visuels (success, info, warning, error) de manière cohérente</li>
|
|
75
|
+
<li>Fournissez une alternative de réinitialisation lorsque les chips sont nombreux</li>
|
|
76
|
+
<li>Testez la navigation au clavier sans la souris</li>
|
|
77
|
+
</ul>
|
|
78
|
+
</BestPracticesSection>
|
|
79
|
+
|
|
80
|
+
<ResourcesSection>
|
|
81
|
+
<ul>
|
|
82
|
+
<li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/" target="_blank" rel="noopener noreferrer">Guide des pratiques d'auteur WAI-ARIA pour les listes</a></li>
|
|
83
|
+
<li><a href="https://www.w3.org/WAI/WCAG21/quickref/" target="_blank" rel="noopener noreferrer">Référence rapide WCAG 2.1</a></li>
|
|
84
|
+
<li><a href="https://inclusive-components.design/tag-buttons/" target="_blank" rel="noopener noreferrer">Inclusive Components: Tag Buttons</a></li>
|
|
85
|
+
<li><a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/814" target="_blank" rel="noopener noreferrer">Issue #814 - Corrections d'accessibilité ChipList</a></li>
|
|
86
|
+
</ul>
|
|
87
|
+
</ResourcesSection>
|
|
88
|
+
</AccessibilityGuideLayout>
|
|
@@ -25,6 +25,47 @@ describe('ChipList – accessibility (axe)', () => {
|
|
|
25
25
|
},
|
|
26
26
|
]
|
|
27
27
|
|
|
28
|
+
it('has no obvious axe violations with overflow chip', async () => {
|
|
29
|
+
const overflowItems: ChipItem[] = [
|
|
30
|
+
{
|
|
31
|
+
text: 'Email',
|
|
32
|
+
value: 'email',
|
|
33
|
+
state: 'success' as ChipState,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
text: 'SMS',
|
|
37
|
+
value: 'sms',
|
|
38
|
+
state: 'info' as ChipState,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
text: 'Téléphone',
|
|
42
|
+
value: 'telephone',
|
|
43
|
+
state: 'warning' as ChipState,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
text: 'Courrier',
|
|
47
|
+
value: 'courrier',
|
|
48
|
+
state: 'error' as ChipState,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
text: 'Notification',
|
|
52
|
+
value: 'notification',
|
|
53
|
+
},
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
const wrapper = mount(ChipList, {
|
|
57
|
+
props: {
|
|
58
|
+
items: overflowItems,
|
|
59
|
+
overflowLimit: 3,
|
|
60
|
+
},
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
64
|
+
assertNoA11yViolations(results, 'ChipList – overflow chip', {
|
|
65
|
+
ignoreRules: ['region'],
|
|
66
|
+
})
|
|
67
|
+
})
|
|
68
|
+
|
|
28
69
|
it('has no obvious axe violations with default items', async () => {
|
|
29
70
|
const wrapper = mount(ChipList, {
|
|
30
71
|
props: {
|
|
@@ -18,8 +18,6 @@ import {
|
|
|
18
18
|
apgHref="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/"
|
|
19
19
|
>
|
|
20
20
|
|
|
21
|
-
## Critères d'accessibilité
|
|
22
|
-
|
|
23
21
|
<CriteriaSection>
|
|
24
22
|
|
|
25
23
|
<CriteriaCard title="Structure sémantique">
|
|
@@ -49,10 +47,6 @@ import {
|
|
|
49
47
|
|
|
50
48
|
<DemoSection>
|
|
51
49
|
|
|
52
|
-
## Démo
|
|
53
|
-
|
|
54
|
-
Exemples d'utilisation du composant `SelectBtnField` :
|
|
55
|
-
|
|
56
50
|
```vue
|
|
57
51
|
<template>
|
|
58
52
|
<!-- Sélection simple avec label -->
|
|
@@ -92,7 +86,6 @@ Exemples d'utilisation du composant `SelectBtnField` :
|
|
|
92
86
|
|
|
93
87
|
</DemoSection>
|
|
94
88
|
|
|
95
|
-
## Bonnes pratiques
|
|
96
89
|
|
|
97
90
|
<BestPracticesSection>
|
|
98
91
|
|
|
@@ -122,8 +115,6 @@ Exemples d'utilisation du composant `SelectBtnField` :
|
|
|
122
115
|
|
|
123
116
|
</BestPracticesSection>
|
|
124
117
|
|
|
125
|
-
## Ressources
|
|
126
|
-
|
|
127
118
|
<ResourcesSection>
|
|
128
119
|
|
|
129
120
|
- [WAI-ARIA Authoring Practices - Listbox](https://www.w3.org/WAI/ARIA/apg/patterns/listbox/)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import { computed, onMounted, ref, watch, type PropType } from 'vue'
|
|
2
|
+
import { computed, nextTick, onMounted, ref, watch, type PropType } from 'vue'
|
|
3
3
|
import { VMenu, VList, VListItem, VListItemTitle, VChip } from 'vuetify/components'
|
|
4
4
|
import { mdiChevronDown, mdiCloseCircle } from '@mdi/js'
|
|
5
5
|
import SyTextField from '@/components/Customs/SyTextField/SyTextField.vue'
|
|
@@ -168,6 +168,7 @@
|
|
|
168
168
|
const selected = ref<SelectValue | SelectArray>(props.modelValue as SelectValue | SelectArray)
|
|
169
169
|
const hasInteracted = ref(false)
|
|
170
170
|
const suppressNextInput = ref(false)
|
|
171
|
+
const suppressMenuOpen = ref(false)
|
|
171
172
|
type SyTextFieldInstance = InstanceType<typeof SyTextField> & { $refs?: { input?: HTMLInputElement } }
|
|
172
173
|
const textFieldRef = ref<SyTextFieldInstance | null>(null)
|
|
173
174
|
const randomId = Math.random().toString(36).slice(2)
|
|
@@ -199,6 +200,7 @@
|
|
|
199
200
|
|
|
200
201
|
const syncSearchFromValue = () => {
|
|
201
202
|
if (props.multiple) return
|
|
203
|
+
suppressMenuOpen.value = true
|
|
202
204
|
if (!selected.value) {
|
|
203
205
|
search.value = ''
|
|
204
206
|
return
|
|
@@ -241,6 +243,11 @@
|
|
|
241
243
|
let debounceHandle: ReturnType<typeof setTimeout> | null = null
|
|
242
244
|
|
|
243
245
|
watch(search, () => {
|
|
246
|
+
if (suppressMenuOpen.value) {
|
|
247
|
+
suppressMenuOpen.value = false
|
|
248
|
+
return
|
|
249
|
+
}
|
|
250
|
+
|
|
244
251
|
if (!isOpen.value) {
|
|
245
252
|
isOpen.value = true
|
|
246
253
|
}
|
|
@@ -368,7 +375,15 @@
|
|
|
368
375
|
return errorHandling.validateOnSubmit()
|
|
369
376
|
}
|
|
370
377
|
|
|
371
|
-
const checkErrorOnBlur = () => {
|
|
378
|
+
const checkErrorOnBlur = (event?: FocusEvent) => {
|
|
379
|
+
const relatedTarget = event?.relatedTarget as HTMLElement | null | undefined
|
|
380
|
+
if (relatedTarget?.closest('.sy-autocomplete__chip') || relatedTarget?.closest('.sy-autocomplete__clear-button')) {
|
|
381
|
+
isOpen.value = true
|
|
382
|
+
nextTick(() => {
|
|
383
|
+
focusInput(textFieldRef)
|
|
384
|
+
})
|
|
385
|
+
return
|
|
386
|
+
}
|
|
372
387
|
markInteracted()
|
|
373
388
|
return errorHandling.checkErrorOnBlur()
|
|
374
389
|
}
|
|
@@ -522,7 +537,9 @@
|
|
|
522
537
|
class="sy-autocomplete__chip"
|
|
523
538
|
closable
|
|
524
539
|
:close-label="locales.removeChip(getChipLabel(item as ItemType))"
|
|
525
|
-
@click:close="() => selectItem(item as ItemType)"
|
|
540
|
+
@click:close.stop.prevent="() => selectItem(item as ItemType)"
|
|
541
|
+
@keydown.enter.capture.stop.prevent="(event) => (event.target as HTMLElement | null)?.closest('.v-chip__close') && selectItem(item as ItemType)"
|
|
542
|
+
@keydown.space.capture.stop.prevent="(event) => (event.target as HTMLElement | null)?.closest('.v-chip__close') && selectItem(item as ItemType)"
|
|
526
543
|
>
|
|
527
544
|
{{ getChipLabel(item as ItemType) }}
|
|
528
545
|
</VChip>
|
|
@@ -639,7 +656,7 @@
|
|
|
639
656
|
}
|
|
640
657
|
|
|
641
658
|
.sy-autocomplete__clear-icon {
|
|
642
|
-
color: rgb(
|
|
659
|
+
color: rgb(var(--v-theme-iconBase));
|
|
643
660
|
}
|
|
644
661
|
|
|
645
662
|
.sy-autocomplete__chip {
|
|
@@ -707,7 +724,7 @@ li:hover {
|
|
|
707
724
|
.v-list-item.keyboard-focused,
|
|
708
725
|
li:focus-visible,
|
|
709
726
|
li.keyboard-focused {
|
|
710
|
-
outline: 2px solid
|
|
727
|
+
outline: 2px solid rgb(var(--v-theme-accentPrimary));
|
|
711
728
|
outline-offset: -2px;
|
|
712
729
|
background-color: rgb(0 0 0 / 8%);
|
|
713
730
|
}
|