@cnamts/synapse 0.0.12-alpha → 0.0.13-alpha
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/design-system-v3.js +4913 -4021
- package/dist/design-system-v3.umd.cjs +1 -1
- package/dist/src/components/Amelipro/types/types.d.ts +30 -57
- package/dist/src/components/Customs/SyTextField/SyTextField.d.ts +2 -0
- package/dist/src/components/DatePicker/DatePicker.d.ts +36 -44
- package/dist/src/components/DatePicker/DateTextInput.d.ts +33 -36
- package/dist/src/components/FilterInline/AccessibiliteItems.d.ts +30 -0
- package/dist/src/components/FilterInline/constants/ExpertiseLevelEnum.d.ts +4 -0
- package/dist/src/components/FilterSideBar/AccessibiliteItems.d.ts +29 -0
- package/dist/src/components/FilterSideBar/constants/ExpertiseLevelEnum.d.ts +4 -0
- package/dist/src/components/NirField/NirField.d.ts +14 -2
- package/dist/src/components/NotificationBar/NotificationBar.d.ts +5 -5
- package/dist/src/components/PasswordField/PasswordField.d.ts +2 -0
- package/dist/src/components/PeriodField/PeriodField.d.ts +159 -157
- package/dist/src/components/PhoneField/PhoneField.d.ts +22 -1
- package/dist/src/components/UploadWorkflow/AccessibiliteItems.d.ts +29 -0
- package/dist/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.d.ts +4 -0
- package/dist/src/components/Usages/Usages.d.ts +10 -0
- package/dist/src/components/index.d.ts +3 -0
- package/dist/src/composables/date/tests/useDatePickerAccessibility.spec.d.ts +1 -0
- package/dist/src/composables/date/useDateFormat.d.ts +26 -0
- package/dist/src/composables/date/useDateInitialization.d.ts +18 -0
- package/dist/src/composables/date/useDatePickerAccessibility.d.ts +8 -0
- package/dist/src/composables/useFilterable/useFilterable.d.ts +1 -1
- package/dist/src/composables/validation/useValidation.d.ts +1 -0
- package/dist/src/main.d.ts +1 -0
- package/dist/src/utils/formatDate/index.d.ts +3 -0
- package/dist/src/utils/formatDate/tests/formatDate.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isDateAfter/index.d.ts +2 -0
- package/dist/src/utils/functions/validation/isDateAfter/tests/isDateAfter.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isDateBefore/index.d.ts +2 -0
- package/dist/src/utils/functions/validation/isDateBefore/tests/isDateBefore.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isDateInRange/index.d.ts +3 -0
- package/dist/src/utils/functions/validation/isDateInRange/tests/isDateInRange.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isDateValid/index.d.ts +9 -0
- package/dist/src/utils/functions/validation/isDateValid/tests/isDateValid.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isEmailValid/tests/isEmailValid.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isWeekend/index.d.ts +3 -0
- package/dist/src/utils/functions/validation/isWeekend/tests/isWeekend.spec.d.ts +1 -0
- package/dist/src/utils/parseDate/index.d.ts +3 -0
- package/dist/src/utils/parseDate/tests/parseDate.spec.d.ts +1 -0
- package/dist/src/utils/rules/doMatchPattern/index.d.ts +3 -0
- package/dist/src/utils/rules/doMatchPattern/tests/matchPattern.spec.d.ts +1 -0
- package/dist/src/utils/rules/index.d.ts +11 -0
- package/dist/src/utils/rules/isDateValid/index.d.ts +4 -0
- package/dist/src/utils/rules/isDateValid/tests/isDateValid.spec.d.ts +1 -0
- package/dist/src/utils/rules/isExactLength/index.d.ts +3 -0
- package/dist/src/utils/rules/isExactLength/locales.d.ts +2 -0
- package/dist/src/utils/rules/isExactLength/tests/exactLength.spec.d.ts +1 -0
- package/dist/src/utils/rules/isMaxLength/index.d.ts +3 -0
- package/dist/src/utils/rules/isMaxLength/locales.d.ts +2 -0
- package/dist/src/utils/rules/isMaxLength/tests/isMaxLength.spec.d.ts +1 -0
- package/dist/src/utils/rules/isMinLength/index.d.ts +3 -0
- package/dist/src/utils/rules/isMinLength/locales.d.ts +2 -0
- package/dist/src/utils/rules/isMinLength/tests/isMinLength.spec.d.ts +1 -0
- package/dist/src/utils/rules/isNotAfterDate/index.d.ts +3 -0
- package/dist/src/utils/rules/isNotAfterDate/tests/isNotAfterDate.spec.d.ts +1 -0
- package/dist/src/utils/rules/isNotAfterToday/index.d.ts +4 -0
- package/dist/src/utils/rules/isNotAfterToday/locales.d.ts +2 -0
- package/dist/src/utils/rules/isNotAfterToday/tests/isNotAfterToday.spec.d.ts +1 -0
- package/dist/src/utils/rules/isNotBeforeDate/index.d.ts +3 -0
- package/dist/src/utils/rules/isNotBeforeDate/locales.d.ts +2 -0
- package/dist/src/utils/rules/isNotBeforeDate/tests/IsNotBeforeDate.spec.d.ts +1 -0
- package/dist/src/utils/rules/isNotBeforeToday/index.d.ts +4 -0
- package/dist/src/utils/rules/isNotBeforeToday/locales.d.ts +2 -0
- package/dist/src/utils/rules/isNotBeforeToday/tests/notBeforeToday.spec.d.ts +1 -0
- package/dist/src/utils/rules/isRequired/index.d.ts +4 -0
- package/dist/src/utils/rules/isRequired/locales.d.ts +2 -0
- package/dist/src/utils/rules/isRequired/tests/isRequred.spec.d.ts +1 -0
- package/dist/src/utils/rules/isValidEmail/index.d.ts +4 -0
- package/dist/src/utils/rules/isValidEmail/locales.d.ts +2 -0
- package/dist/src/utils/rules/isValidEmail/tests/isValidEmail.spec.d.ts +1 -0
- package/dist/style.css +1 -1
- package/package.json +3 -1
- package/src/assets/_radius.scss +12 -6
- package/src/assets/settings.scss +8 -0
- package/src/components/Amelipro/types/types.ts +40 -0
- package/src/components/ChipList/ChipList.stories.ts +26 -27
- package/src/components/ChipList/ChipList.vue +5 -1
- package/src/components/ChipList/config.ts +1 -0
- package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +2 -2
- package/src/components/Customs/SyBtnSelect/SyBtnSelect.mdx +1 -1
- package/src/components/Customs/SyInputSelect/SyInputSelect.mdx +1 -1
- package/src/components/Customs/SySelect/SySelect.mdx +1 -1
- package/src/components/Customs/SySelect/SySelect.vue +19 -4
- package/src/components/Customs/SyTextField/SyTextField.mdx +2 -2
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +239 -0
- package/src/components/Customs/SyTextField/SyTextField.vue +3 -0
- package/src/components/DatePicker/DatePicker.stories.ts +177 -5
- package/src/components/DatePicker/DatePicker.vue +148 -347
- package/src/components/DatePicker/DateTextInput.vue +91 -251
- package/src/components/DatePicker/tests/DatePicker.spec.ts +118 -48
- package/src/components/DatePicker/tests/DateTextInput.spec.ts +202 -6
- package/src/components/FileList/Accessibilite.stories.ts +1 -1
- package/src/components/FileList/AccessibiliteItems.ts +22 -0
- package/src/components/FileUpload/FileUpload.stories.ts +9 -7
- package/src/components/FilterInline/Accessibilite.mdx +14 -0
- package/src/components/FilterInline/Accessibilite.stories.ts +216 -0
- package/src/components/FilterInline/AccessibiliteItems.ts +132 -0
- package/src/components/FilterInline/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/FilterSideBar/Accessibilite.mdx +14 -0
- package/src/components/FilterSideBar/Accessibilite.stories.ts +216 -0
- package/src/components/FilterSideBar/AccessibiliteItems.ts +153 -0
- package/src/components/FilterSideBar/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/NirField/NirField.stories.ts +165 -0
- package/src/components/NirField/NirField.vue +6 -2
- package/src/components/NirField/tests/config.spec.ts +65 -0
- package/src/components/NotificationBar/NotificationBar.mdx +2 -2
- package/src/components/NotificationBar/NotificationBar.stories.ts +59 -11
- package/src/components/NotificationBar/NotificationBar.vue +42 -114
- package/src/components/NotificationBar/tests/NotificationBar.spec.ts +28 -33
- package/src/components/NotificationBar/tests/__snapshots__/NotificationBar.spec.ts.snap +1 -1
- package/src/components/PaginatedTable/PaginatedTable.vue +6 -10
- package/src/components/PaginatedTable/tests/__snapshots__/PaginatedTable.spec.ts.snap +4 -4
- package/src/components/PasswordField/PasswordField.stories.ts +191 -4
- package/src/components/PasswordField/PasswordField.vue +3 -0
- package/src/components/PeriodField/PeriodField.stories.ts +214 -118
- package/src/components/PeriodField/PeriodField.vue +195 -148
- package/src/components/PeriodField/tests/PeriodField.spec.ts +146 -0
- package/src/components/PhoneField/PhoneField.stories.ts +101 -0
- package/src/components/PhoneField/PhoneField.vue +73 -17
- package/src/components/PhoneField/tests/PhoneField.spec.ts +40 -0
- package/src/components/RatingPicker/RatingPicker.stories.ts +7 -7
- package/src/components/SearchListField/SearchListField.stories.ts +1 -1
- package/src/components/UploadWorkflow/Accessibilite.mdx +14 -0
- package/src/components/UploadWorkflow/Accessibilite.stories.ts +216 -0
- package/src/components/UploadWorkflow/AccessibiliteItems.ts +192 -0
- package/src/components/UploadWorkflow/UploadWorkflow.vue +2 -2
- package/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/Usages/tests/Usages.spec.ts +183 -0
- package/src/components/index.ts +3 -0
- package/src/composables/date/tests/useDateFormat.spec.ts +67 -0
- package/src/composables/date/tests/useDateInitialization.spec.ts +89 -0
- package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +102 -0
- package/src/composables/date/useDateFormat.ts +94 -0
- package/src/composables/date/useDateInitialization.ts +92 -0
- package/src/composables/date/useDatePickerAccessibility.ts +78 -0
- package/src/composables/rules/tests/useFieldValidation.spec.ts +385 -4
- package/src/composables/useFilterable/useFilterable.ts +5 -4
- package/src/composables/validation/useValidation.ts +15 -0
- package/src/main.ts +1 -0
- package/src/stories/Accessibilite/Aculturation/AuditDesignSystem.mdx +28 -0
- package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +2 -2
- package/src/stories/Accessibilite/Audit/RGAA.mdx +6 -6
- package/src/stories/Accessibilite/Introduction.mdx +2 -1
- package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +1 -1
- package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +1 -1
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +8 -11
- package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +77 -0
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru.mdx +9 -3
- package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +2 -2
- package/src/stories/Demarrer/Introduction.stories.ts +3 -3
- package/src/stories/Demarrer/Releases.mdx +8 -0
- package/src/stories/Demarrer/Releases.stories.ts +66 -0
- package/src/stories/DesignTokens/Conteneurs.stories.ts +3 -3
- package/src/stories/GuideDuDev/LesBreackingChanges.mdx +36 -0
- package/src/stories/GuideDuDev/UtiliserLesRules.mdx +2 -2
- package/src/utils/formatDate/index.ts +6 -0
- package/src/utils/formatDate/tests/formatDate.spec.ts +18 -0
- package/src/utils/functions/validation/isDateAfter/index.ts +9 -0
- package/src/utils/functions/validation/isDateAfter/tests/isDateAfter.spec.ts +18 -0
- package/src/utils/functions/validation/isDateBefore/index.ts +9 -0
- package/src/utils/functions/validation/isDateBefore/tests/isDateBefore.spec.ts +23 -0
- package/src/utils/functions/validation/isDateInRange/index.ts +22 -0
- package/src/utils/functions/validation/isDateInRange/tests/isDateInRange.spec.ts +28 -0
- package/src/utils/functions/validation/isDateValid/index.ts +67 -0
- package/src/utils/functions/validation/isDateValid/tests/isDateValid.spec.ts +46 -0
- package/src/utils/functions/validation/isEmailValid/index.ts +9 -0
- package/src/utils/functions/validation/isWeekend/index.ts +10 -0
- package/src/utils/functions/validation/isWeekend/tests/isWeekend.spec.ts +16 -0
- package/src/utils/parseDate/index.ts +29 -0
- package/src/utils/parseDate/tests/parseDate.spec.ts +52 -0
- package/src/utils/rules/Rules.mdx +16 -0
- package/src/utils/rules/doMatchPattern/DoMachPattern.mdx +66 -0
- package/src/utils/rules/doMatchPattern/DoMatchPattern.stories.ts +106 -0
- package/src/utils/rules/doMatchPattern/index.ts +28 -0
- package/src/utils/rules/doMatchPattern/locales.ts +5 -0
- package/src/utils/rules/doMatchPattern/tests/matchPattern.spec.ts +38 -0
- package/src/utils/rules/index.ts +11 -0
- package/src/utils/rules/isDateValid/IsDateValid.mdx +87 -0
- package/src/utils/rules/isDateValid/IsDateValid.stories.ts +113 -0
- package/src/utils/rules/isDateValid/index.ts +32 -0
- package/src/utils/rules/isDateValid/locales.ts +10 -0
- package/src/utils/rules/isDateValid/tests/isDateValid.spec.ts +27 -0
- package/src/utils/rules/isExactLength/IsExactLenght.mdx +68 -0
- package/src/utils/rules/isExactLength/IsExactLength.stories.ts +151 -0
- package/src/utils/rules/{exactLength → isExactLength}/index.ts +2 -4
- package/src/utils/rules/isExactLength/tests/exactLength.spec.ts +48 -0
- package/src/utils/rules/isMaxLength/IsMaxLength.mdx +68 -0
- package/src/utils/rules/isMaxLength/IsMaxLength.stories.ts +152 -0
- package/src/utils/rules/isMaxLength/index.ts +30 -0
- package/src/utils/rules/isMaxLength/locales.ts +6 -0
- package/src/utils/rules/isMaxLength/tests/isMaxLength.spec.ts +42 -0
- package/src/utils/rules/isMinLength/IsMinLength.mdx +68 -0
- package/src/utils/rules/isMinLength/IsMinLength.stories.ts +152 -0
- package/src/utils/rules/isMinLength/index.ts +30 -0
- package/src/utils/rules/isMinLength/locales.ts +6 -0
- package/src/utils/rules/isMinLength/tests/isMinLength.spec.ts +42 -0
- package/src/utils/rules/isNotAfterDate/IsNotAfterDate.mdx +68 -0
- package/src/utils/rules/isNotAfterDate/IsNotAfterDate.stories.ts +109 -0
- package/src/utils/rules/isNotAfterDate/index.ts +25 -0
- package/src/utils/rules/isNotAfterDate/locales.ts +6 -0
- package/src/utils/rules/isNotAfterDate/tests/isNotAfterDate.spec.ts +25 -0
- package/src/utils/rules/isNotAfterToday/IsNotAfterToday.mdx +83 -0
- package/src/utils/rules/isNotAfterToday/IsNotAfterToday.stories.ts +110 -0
- package/src/utils/rules/isNotAfterToday/index.ts +28 -0
- package/src/utils/rules/isNotAfterToday/locales.ts +5 -0
- package/src/utils/rules/isNotAfterToday/tests/isNotAfterToday.spec.ts +30 -0
- package/src/utils/rules/isNotBeforeDate/IsNotBeforeDate.mdx +68 -0
- package/src/utils/rules/isNotBeforeDate/IsNotBeforeDate.stories.ts +114 -0
- package/src/utils/rules/isNotBeforeDate/index.ts +25 -0
- package/src/utils/rules/isNotBeforeDate/locales.ts +6 -0
- package/src/utils/rules/isNotBeforeDate/tests/IsNotBeforeDate.spec.ts +25 -0
- package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.mdx +83 -0
- package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.stories.ts +110 -0
- package/src/utils/rules/isNotBeforeToday/index.ts +28 -0
- package/src/utils/rules/isNotBeforeToday/locales.ts +5 -0
- package/src/utils/rules/isNotBeforeToday/tests/notBeforeToday.spec.ts +36 -0
- package/src/utils/rules/isRequired/IsRequired.mdx +81 -0
- package/src/utils/rules/isRequired/IsRequired.stories.ts +101 -0
- package/src/utils/rules/{required → isRequired}/index.ts +3 -3
- package/src/utils/rules/{required/tests/index.spec.ts → isRequired/tests/isRequred.spec.ts} +9 -9
- package/src/utils/rules/isValidEmail/IsValidEmail.mdx +81 -0
- package/src/utils/rules/isValidEmail/IsValidEmail.stories.ts +101 -0
- package/src/utils/rules/{email → isValidEmail}/index.ts +3 -5
- package/src/utils/rules/{email/tests/email.spec.ts → isValidEmail/tests/isValidEmail.spec.ts} +5 -5
- package/dist/src/components/Amelipro/types/languages.d.ts +0 -6
- package/dist/src/utils/rules/email/index.d.ts +0 -4
- package/dist/src/utils/rules/exactLength/index.d.ts +0 -4
- package/dist/src/utils/rules/required/index.d.ts +0 -4
- package/dist/src/utils/rules/required/ruleMessageHelper.d.ts +0 -3
- package/src/components/Amelipro/types/languages.d.ts +0 -6
- package/src/components/Amelipro/types/types.d.ts +0 -65
- package/src/components/Customs/SyTextField/tests/__snapshots__/SyTextField.spec.ts.snap +0 -58
- package/src/utils/functions/isEmailValid/index.ts +0 -8
- package/src/utils/rules/required/ruleMessageHelper.ts +0 -14
- package/src/utils/rules/required/tests/rulesMessageHelper.spec.ts +0 -22
- /package/dist/src/{utils/functions/isEmailValid/tests/isEmailValid.spec.d.ts → components/NirField/tests/config.spec.d.ts} +0 -0
- /package/dist/src/{utils/rules/email/tests/email.spec.d.ts → components/Usages/tests/Usages.spec.d.ts} +0 -0
- /package/dist/src/{utils/rules/required/tests/index.spec.d.ts → composables/date/tests/useDateFormat.spec.d.ts} +0 -0
- /package/dist/src/{utils/rules/required/tests/rulesMessageHelper.spec.d.ts → composables/date/tests/useDateInitialization.spec.d.ts} +0 -0
- /package/dist/src/utils/functions/{isEmailValid → validation/isEmailValid}/index.d.ts +0 -0
- /package/dist/src/utils/rules/{exactLength → doMatchPattern}/locales.d.ts +0 -0
- /package/dist/src/utils/rules/{email → isDateValid}/locales.d.ts +0 -0
- /package/dist/src/utils/rules/{required → isNotAfterDate}/locales.d.ts +0 -0
- /package/src/components/NirField/{tests → examples}//342/200/257dataset/342/200/257.md" +0 -0
- /package/src/utils/functions/{isEmailValid → validation/isEmailValid}/tests/isEmailValid.spec.ts +0 -0
- /package/src/utils/rules/{exactLength → isExactLength}/locales.ts +0 -0
- /package/src/utils/rules/{required → isRequired}/locales.ts +0 -0
- /package/src/utils/rules/{email → isValidEmail}/locales.ts +0 -0
|
@@ -6,19 +6,16 @@ import {Meta} from '@storybook/addon-docs/blocks';
|
|
|
6
6
|
|
|
7
7
|
Dans le cadre du pré-audit et de l’audit, il existe des outils automatisés pour vérifier certains critères de conformité en matière d'accessibilité.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
L'outil principal requis pour le pré-audit est [**Tanaguru webext RGAA (Extension Firefox)**](https://addons.mozilla.org/fr/firefox/addon/tanaguru-webext/). Il s'agit d'une extension de navigateur conçue pour faciliter l'audit d'accessibilité des sites web selon le **Référentiel Général d'Amélioration de l'Accessibilité (RGAA)**. Elle permet aux utilisateurs de vérifier, directement depuis leur navigateur, la conformité de pages web aux critères d'accessibilité du RGAA, en offrant une évaluation rapide des problèmes d'accessibilité tels que les contrastes, les alternatives textuelles manquantes, la structure des balises HTML, etc. Cette extension fonctionne comme un outil d'audit instantané pour les développeurs et les testeurs d'accessibilité, en affichant directement les erreurs et en proposant des suggestions pour améliorer l'accessibilité du site. **Attention, ce service ne permet pas d’évaluer l’ensemble des 106 critères du RGAA, uniquement ceux qui sont automatisable**. Un audit d'accessibilité ne peut pas se reposer uniquement sur des outils automatisés car ces derniers ne détectent qu'un nombre limité de problèmes techniques. De nombreux critères d'accessibilité nécessitent une évaluation manuelle, tenant compte de la perception humaine et du contexte d’utilisation. Sur les 258 tests du RGAA, Tanaguru estime qu’environ 100 tests ne sont pas automatisés. Nous avons mis en place [un guide d'utilisation de Tanaguru webext RGAA](/docs/accessibilité-kit-de-pré-audit-outils-tanaguru--docs) afin de vous aider à le prendre en main.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
Tanaguru Webext RGAA est une extension de navigateur conçue pour faciliter l'audit d'accessibilité des sites web selon le **Référentiel Général d'Amélioration de l'Accessibilité (RGAA)**. Elle permet aux utilisateurs de vérifier, directement depuis leur navigateur, la conformité de pages web aux critères d'accessibilité du RGAA, en offrant une évaluation rapide des problèmes d'accessibilité tels que les contrastes, les alternatives textuelles manquantes, la structure des balises HTML, etc. Cette extension fonctionne comme un outil d'audit instantané pour les développeurs et les testeurs d'accessibilité, en affichant directement les erreurs et en proposant des suggestions pour améliorer l'accessibilité du site. Attention, ce service ne permet pas d’évaluer l’ensemble des 106 critères du RGAA, uniquement ceux qui sont automatisable. Sur les 258 tests du RGAA, Tanaguru estime qu’environ 100 tests ne sont pas automatisés.
|
|
13
|
-
2. [**PDF Accessibility Checker (PAC)**](https://pac.pdf-accessibility.org/en) :
|
|
14
|
-
PDF Accessibility Checker (PAC) est un logiciel Windows dédié à l'audit de l'accessibilité des documents PDF. Il permet de vérifier la conformité d'un fichier PDF aux normes d'accessibilité, telles que les WCAG et les directives PDF/UA (PDF Universal Accessibility). PAC analyse la structure du document, y compris les titres, les balises, les liens, les tables et les éléments multimédia, pour s'assurer que le contenu est correctement organisé et peut être interprété par des technologies d'assistance comme les lecteurs d'écran.
|
|
15
|
-
3. [**NVDA (NonVisual Desktop Access)**](https://www.nvda.fr/c2) :
|
|
16
|
-
Lecteur d’écran bureau - NVDA est un lecteur d'écran open-source conçu pour les personnes malvoyantes ou aveugles. Il permet de rendre accessibles les interfaces graphiques des ordinateurs Windows en lisant à haute voix les éléments affichés à l'écran. NVDA prend en charge plusieurs applications et navigateurs web, et il est utilisé pour tester la compatibilité des sites web et des applications avec les technologies d'assistance. Cet outil est particulièrement apprécié pour son accessibilité gratuite et sa capacité à détecter des erreurs de conception qui peuvent nuire à l'expérience des utilisateurs ayant des déficiences visuelles.
|
|
17
|
-
4. (Si pré-audit sur mobile) [**TalkBack**](https://www.notion.so/Pr-audit-web-conformit-l-accessibilit-18c4ee4a529d80e2ab27cadba4829e37?pvs=21) :
|
|
18
|
-
Lecteur d’écran mobile - TalkBack est une fonctionnalité d'accessibilité déjà intégrée aux appareils Android qui fournit des retours vocaux sur les éléments affichés à l'écran. Ce lecteur d'écran permet à l'utilisateur d'interagir avec son appareil sans avoir besoin de visionner l'écran. En utilisant des gestes tactiles spécifiques, l'utilisateur peut naviguer à travers les applications, lire des messages, envoyer des e-mails ou encore interagir avec des contenus multimédia. TalkBack offre également des options de personnalisation pour ajuster la vitesse de la voix, le volume et d'autres paramètres en fonction des besoins de l'utilisateur. Il prend en charge une large gamme de contenus accessibles et est régulièrement mis à jour pour améliorer son efficacité et sa compatibilité avec les dernières versions d'Android. Cet outil est essentiel pour garantir que les utilisateurs en situation de handicap visuel peuvent utiliser pleinement leurs appareils Android.
|
|
19
|
-
|
|
20
|
-
En complément, voici d’autres outils optionnels qui pourraient vous être utiles :
|
|
11
|
+
Si vous souhaitez aller plus loin dans le pré-audit ou dans vos développements au quotidien, voici d'autres outils qui pourraient vous être utiles :
|
|
21
12
|
|
|
13
|
+
- [**PDF Accessibility Checker (PAC)**](https://pac.pdf-accessibility.org/en) :
|
|
14
|
+
PDF Accessibility Checker (PAC) est un logiciel Windows dédié à l'audit de l'accessibilité des documents PDF. Il permet de vérifier la conformité d'un fichier PDF aux normes d'accessibilité, telles que les WCAG et les directives PDF/UA (PDF Universal Accessibility). PAC analyse la structure du document, y compris les titres, les balises, les liens, les tables et les éléments multimédia, pour s'assurer que le contenu est correctement organisé et peut être interprété par des technologies d'assistance comme les lecteurs d'écran.
|
|
15
|
+
- [**NVDA (NonVisual Desktop Access)**](https://www.nvda.fr/c2) :
|
|
16
|
+
Lecteur d’écran bureau - NVDA est un lecteur d'écran open-source conçu pour les personnes malvoyantes ou aveugles. Il permet de rendre accessibles les interfaces graphiques des ordinateurs Windows en lisant à haute voix les éléments affichés à l'écran. NVDA prend en charge plusieurs applications et navigateurs web, et il est utilisé pour tester la compatibilité des sites web et des applications avec les technologies d'assistance. Cet outil est particulièrement apprécié pour son accessibilité gratuite et sa capacité à détecter des erreurs de conception qui peuvent nuire à l'expérience des utilisateurs ayant des déficiences visuelles. Afin d'en savoir plus, nous avons mis en place [un guide rapide de NVDA](/docs/accessibilité-kit-de-pré-audit-outils-lecteurs-d-écran--docs#nvda-windows).
|
|
17
|
+
- [**TalkBack**](https://www.notion.so/Pr-audit-web-conformit-l-accessibilit-18c4ee4a529d80e2ab27cadba4829e37?pvs=21) (Si pré-audit sur mobile) :
|
|
18
|
+
Lecteur d’écran mobile - TalkBack est un outil d'accessibilité déjà intégré aux appareils Android qui fournit des retours vocaux sur les éléments affichés à l'écran. Ce lecteur d'écran permet à l'utilisateur d'interagir avec son appareil sans avoir besoin de visionner l'écran. En utilisant des gestes tactiles spécifiques, l'utilisateur peut naviguer à travers les applications, lire des messages, envoyer des e-mails ou encore interagir avec des contenus multimédia. TalkBack offre également des options de personnalisation pour ajuster la vitesse de la voix, le volume et d'autres paramètres en fonction des besoins de l'utilisateur. Il prend en charge une large gamme de contenus accessibles et est régulièrement mis à jour pour améliorer son efficacité et sa compatibilité avec les dernières versions d'Android. Cet outil est essentiel pour garantir que les utilisateurs en situation de handicap visuel peuvent utiliser pleinement leurs appareils Android. Afin d'en savoir plus, nous avons mis en place [un guide rapide de Talkback](/docs/accessibilité-kit-de-pré-audit-outils-lecteurs-d-écran--docs#talkback-android).
|
|
22
19
|
- [**Assistant RGAA (extension Firefox)**](https://addons.mozilla.org/fr/firefox/addon/assistant-rgaa/) :
|
|
23
20
|
L'Assistant RGAA est un outil français destiné à vérifier la conformité des sites web aux critères d’accessibilité définis par le Référentiel Général d'Amélioration de l'Accessibilité (RGAA). Il permet d’effectuer des audits sur des sites en ligne pour identifier et corriger les problèmes d'accessibilité.
|
|
24
21
|
- [**WAVE (extension Firefox)**](https://addons.mozilla.org/fr/firefox/addon/wave-accessibility-tool/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search) :
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks';
|
|
2
|
+
|
|
3
|
+
<Meta title="Accessibilité/Kit de pré-audit/Outils/Lecteurs d'écran"/>
|
|
4
|
+
|
|
5
|
+
# Guide lecteurs d'écran
|
|
6
|
+
|
|
7
|
+
Ce guide ne vise pas à vous former à l'utilisation quotidienne d'un lecteur d'écran, mais à vous fournir les informations nécessaires pour évaluer l'accessibilité des composants intégrés dans votre service.
|
|
8
|
+
|
|
9
|
+
## Qu’est-ce qu’un lecteur d’écran ?
|
|
10
|
+
|
|
11
|
+
Un lecteur d'écran est un logiciel d’assistance technique destiné aux personnes « empêchées de lire » (aveugles, malvoyantes, dyslexiques, dyspraxiques…) en transformant le contenu affiché à l'écran en synthèse vocale ou braille. Il permet de naviguer dans le système d'exploitation et les applications en restituant le contenu textuel et sa structure, à condition que cette information soit correctement fournie par le logiciel (par exemple, le navigateur web). Il ne peut pas interpréter des éléments non textuels comme des images ou des graphiques. C’est pourquoi le respect des normes d’accessibilité est important afin que la restitution puisse se faire correctement (ex : ajout d’un texte alternatif à une image).
|
|
12
|
+
|
|
13
|
+
Le lecteur d'écran bureau se pilote principalement au clavier tandis que c’est essentiellement avec des gestes pour la version mobile.
|
|
14
|
+
|
|
15
|
+
Il n'existe pas de lecteur d'écran unique et ils different en fonction du système d’exploitation. Ce guide se concentrera sur NVDA pour Windows et TalkBack pour Android.
|
|
16
|
+
|
|
17
|
+
## Utilité d’un lecteur d’écran
|
|
18
|
+
|
|
19
|
+
Un lecteur d'écran est essentiel pour un audit d'accessibilité car il permet de simuler l'expérience d'un utilisateur aveugle ou malvoyant. Il aide à :
|
|
20
|
+
|
|
21
|
+
1. **Vérifier la structure** : Tester la logique de navigation (titres, sections, éléments interactifs).
|
|
22
|
+
2. **Tester l'interactivité** : S'assurer que les éléments sont accessibles via le clavier et correctement annoncés.
|
|
23
|
+
3. **Vérifier les mises à jour dynamiques** : S'assurer que les changements de contenu sont bien signalés.
|
|
24
|
+
4. **Contrôler le balisage** : Vérifier l'utilisation correcte des balises HTML et ARIA pour une navigation fluide.
|
|
25
|
+
5. **Accessibilité multimédia** : Vérifier que les images et vidéos sont correctement décrites.
|
|
26
|
+
|
|
27
|
+
Cela garantit que l'interface est réellement accessible, permettant une navigation autonome pour les utilisateurs en situation de handicap visuel. N'oubliez pas de consulter les manuels officiels pour des informations détaillées sur l'utilisation de chaque outil.
|
|
28
|
+
|
|
29
|
+
## NVDA (Windows)
|
|
30
|
+
|
|
31
|
+
NVDA est un lecteur d'écran pour Windows, principalement utilisé pour l'audit d'accessibilité de sites web et d'applications bureautiques.
|
|
32
|
+
|
|
33
|
+
Il restitue l’information sous 2 modes : le mode navigation et le mode formulaire.
|
|
34
|
+
|
|
35
|
+
### Mode navigation
|
|
36
|
+
|
|
37
|
+
Le mode de navigation permet de se déplacer dans le contenu d'une page (titres, liens, paragraphes, etc.)
|
|
38
|
+
|
|
39
|
+
Il fournit des informations supplémentaires lors de la vocalisation. Par exemple, il annoncera "liste de x éléments" pour une liste à puces ou encore le niveau des titres, comme "titre de niveau 2", suivi de leur intitulé.
|
|
40
|
+
|
|
41
|
+
### Mode formulaire
|
|
42
|
+
|
|
43
|
+
Le mode formulaire est utilisé pour interagir avec des éléments de formulaire (champs de texte, cases à cocher, boutons, etc.) et y entrer des données. Le lecteur d’écran passe sur ce mode automatiquement lorsqu’il se trouve être sur un composant interactif. Les “raccourcis lettre” ne fonctionnent alors plus puisqu’ils servent à insérer du texte.
|
|
44
|
+
|
|
45
|
+
Principaux raccourcis :
|
|
46
|
+
|
|
47
|
+
- CTRL + ALT + n : Activer NVDA
|
|
48
|
+
- NVDA + q : Quitter NVDA
|
|
49
|
+
- CTRL : Arrêt de la parole
|
|
50
|
+
- Flèche bas : Élément suivant
|
|
51
|
+
- Flèche haut : Élément précédent
|
|
52
|
+
- Tab : Élément focusable suivant
|
|
53
|
+
- Maj + Tab : Élément focusable précédent
|
|
54
|
+
- h : Titre suivant
|
|
55
|
+
- f : Champ de formulaire suivant
|
|
56
|
+
- k : Lien suivant
|
|
57
|
+
- d : Région suivante
|
|
58
|
+
- MAJ + lettre : Revenir en arrière
|
|
59
|
+
|
|
60
|
+
Pour plus de détails, consultez [le manuel officiel NVDA](https://www.nvda.fr/doc.php) ainsi que [le guide de Tanaguru](https://www.tanaguru.com/guide-et-raccourcis-nvda-pour-les-tests-daccessibilite/).
|
|
61
|
+
|
|
62
|
+
## TalkBack (Android)
|
|
63
|
+
|
|
64
|
+
TalkBack est un lecteur d'écran pour Android, directement embarqué.
|
|
65
|
+
|
|
66
|
+
Pour l’activer ou le désactiver, il suffit de se rendre dans les paramètres de votre appareil puis dans le menu “Accessibilité”. Un tutoriel d’utilisation vous sera alors proposé au démarrage. C’est à cet endroit que vous pouvez personnaliser l’outil tel que la vitesse de la parole, la tonalité, les gestes, etc.
|
|
67
|
+
|
|
68
|
+
Ce lecteur d’écran utilise des gestes spécifiques pour naviguer dans l’interface. Voici les principaux gestes :
|
|
69
|
+
|
|
70
|
+
- **Déplacer le focus** : Faites glisser un doigt vers la gauche ou vers la droite pour déplacer le focus entre les éléments à l'écran.
|
|
71
|
+
- **Sélectionner un élément** : Touchez un élément à l'écran avec un seul doigt pour entendre sa description, puis double-tapez pour l'activer.
|
|
72
|
+
- **Faire défiler** : Balayez deux doigts vers le haut ou vers le bas pour faire défiler l'écran.
|
|
73
|
+
- **Retour** : Faites glisser trois doigts vers la gauche pour revenir en arrière.
|
|
74
|
+
- **Accéder au menu d'options** : Touchez deux fois et maintenez pour ouvrir le menu contextuel des options (comme le copier, coller, etc.).
|
|
75
|
+
- **Suspendre ou reprendre la lecture :** Appuyez avec deux doigts
|
|
76
|
+
|
|
77
|
+
Pour plus de détails, consultez [le manuel officiel TalkBack](https://support.google.com/accessibility/android/answer/6283677?hl=fr).
|
|
@@ -2,7 +2,13 @@ import {Meta} from '@storybook/addon-docs/blocks';
|
|
|
2
2
|
|
|
3
3
|
<Meta title="Accessibilité/Kit de pré-audit/Outils/Tanaguru"/>
|
|
4
4
|
|
|
5
|
-
#
|
|
5
|
+
# Tanaguru
|
|
6
|
+
|
|
7
|
+
## Qu'est-ce que Tanaguru ?
|
|
8
|
+
|
|
9
|
+
Appelée [**Tanaguru webext RGAA (Extension Firefox)**](https://addons.mozilla.org/fr/firefox/addon/tanaguru-webext/), il s'agit d'une extension de navigateur conçue pour faciliter l'audit d'accessibilité des sites web selon le **Référentiel Général d'Amélioration de l'Accessibilité (RGAA)**. Elle permet aux utilisateurs de vérifier, directement depuis leur navigateur, la conformité de pages web aux critères d'accessibilité du RGAA, en offrant une évaluation rapide des problèmes d'accessibilité tels que les contrastes, les alternatives textuelles manquantes, la structure des balises HTML, etc. Cette extension fonctionne comme un outil d'audit instantané pour les développeurs et les testeurs d'accessibilité, en affichant directement les erreurs et en proposant des suggestions pour améliorer l'accessibilité du site. **Attention, ce service ne permet pas d’évaluer l’ensemble des 106 critères du RGAA, uniquement ceux qui sont automatisable**. Un audit d'accessibilité ne peut pas se reposer uniquement sur des outils automatisés car ces derniers ne détectent qu'un nombre limité de problèmes techniques. De nombreux critères d'accessibilité nécessitent une évaluation manuelle, tenant compte de la perception humaine et du contexte d’utilisation. Sur les 258 tests du RGAA, Tanaguru estime qu’environ 100 tests ne sont pas automatisés.
|
|
10
|
+
|
|
11
|
+
## Utilisation de Tanaguru
|
|
6
12
|
|
|
7
13
|
**1. Analyse d’une page d’ameli.fr , [https://www.ameli.fr/assure/adresses-et-contacts/l-obtention-d-un-document/obtenir-une-attestation](https://www.ameli.fr/assure/adresses-et-contacts/l-obtention-d-un-document/obtenir-une-attestation)**
|
|
8
14
|
|
|
@@ -20,13 +26,13 @@ Cliquez ensuite sur **Analyser cette page**
|
|
|
20
26
|
|
|
21
27
|
<img alt="UtilisationTanaguruEtape3" src={'/tanaguruetape3.png'} style={{ padding: '10px', border: '1px solid rgba(0, 0, 0, 0.05)', boxShadow: 'rgba(0, 0, 0, 0.10) 0 1px 3px 0'}} />
|
|
22
28
|
|
|
23
|
-
**5. Les éléments sur la gauche, correspondent aux thématiques du RGAA
|
|
29
|
+
**5. Les éléments sur la gauche, correspondent aux thématiques du <abbr title="Référentiel Général d’Amélioration de l’Accessibilité">RGAA</abbr>**
|
|
24
30
|
|
|
25
31
|
<img alt="UtilisationTanaguruEtape4" src={'/tanaguruetape4.png'} style={{ padding: '10px', border: '1px solid rgba(0, 0, 0, 0.05)', boxShadow: 'rgba(0, 0, 0, 0.10) 0 1px 3px 0'}} />
|
|
26
32
|
|
|
27
33
|
**6. Exemple: **Eléments obligatoires** 3 erreurs qui correspondent a plusieurs éléments dans notre page. Dont l’erreur est “**propriété ARIA non autorisées sur leur élément**”.**
|
|
28
34
|
|
|
29
|
-
On va chercher dans la thématique **Eléments obligatoires** du RGAA
|
|
35
|
+
On va chercher dans la thématique **Eléments obligatoires** du <abbr title="Référentiel Général d’Amélioration de l’Accessibilité">RGAA</abbr>, les critères qui pourraient correspondre à l’erreur de Tanaguru.
|
|
30
36
|
|
|
31
37
|
<img alt="UtilisationTanaguruEtape5" src={'/tanaguruetape5.png'} style={{ padding: '10px', border: '1px solid rgba(0, 0, 0, 0.05)', boxShadow: 'rgba(0, 0, 0, 0.10) 0 1px 3px 0'}} />
|
|
32
38
|
1. La loupe permet de localiser le problème dans le code ( /!\ cet élément n’est pas toujours accessible).
|
|
@@ -4,7 +4,7 @@ import {Meta} from '@storybook/addon-docs/blocks';
|
|
|
4
4
|
|
|
5
5
|
# Pré-audit
|
|
6
6
|
|
|
7
|
-
L’objectif du pré-audit est d'atteindre en semi-autonomie un premier palier de conformité de votre service web avant de convenir d’un réel audit RGAA
|
|
7
|
+
L’objectif du pré-audit est d'atteindre en semi-autonomie un premier palier de conformité de votre service web avant de convenir d’un réel audit <abbr title="Référentiel Général d’Amélioration de l’Accessibilité">RGAA</abbr>. Pour prouver ce palier et être éligible à la demande d'audit complet vous devez compléter <a href="/documents/Checklist_pre-audit_CNAM_NOM_DU_PRODUIT.xlsx" target="_blank">ce fichier</a> qui mentionne les exigences requises par la vérification assistée des outils automatisés et la vérification manuelle. Dans le cas où vous rencontrez une difficulté avec un test, un critère ou un outil n'hésitez pas à nous contacter via l'adresse [valentin.becquet@assurance-maladie.fr](mailto:valentin.becquet@assurance-maladie.fr) (cette adresse évoluera prochainement).
|
|
8
8
|
|
|
9
9
|
Pour demander un audit merci de contacter [valentin.becquet@assurance-maladie.fr](mailto:valentin.becquet@assurance-maladie.fr). L'acceptance de la demande est soumise à la démonstration de l'effort engagé par l'équipe-produit. Cette appréciation fera l'objet d'une discussion.
|
|
10
10
|
|
|
@@ -14,7 +14,7 @@ Pour rappel, avant de lancer votre pré-audit vous devez définir l'échantillon
|
|
|
14
14
|
|
|
15
15
|
Lancer Tanaguru sur chaque page de l’échantillon de test. Vous pouvez retrouver une documentation d’utilisation de Tanaguru [ici](/docs/accessibilit%C3%A9-kit-de-pr%C3%A9-audit-outils-tanaguru--docs).
|
|
16
16
|
|
|
17
|
-
L'outil Tanaguru a la capacité de contrôler 158 tests sur les 258 du RGAA
|
|
17
|
+
L'outil Tanaguru a la capacité de contrôler 158 tests sur les 258 du <abbr title="Référentiel Général d’Amélioration de l’Accessibilité">RGAA</abbr>. Les exigences du pré-audit sont respectées dès lors que vous atteignez un minimum d’erreur en lançant les tests automatisés avec Tanaguru. Ce seuil est volontairement sujet à discussion pour ne pas bloquer les produits en cas de grande complexité. Dans le cas où un test est présenté en résultat "non conforme" pour la demande d'audit, une justification devra être apportée pour motiver l'éligibilité du produit. Vous pouvez nous solliciter pour un accompagnement si vous rencontrez des difficultés techniques à résoudre les non-conformités relevées par Tanaguru.
|
|
18
18
|
|
|
19
19
|
## Vérification manuelle
|
|
20
20
|
|
|
@@ -104,7 +104,7 @@ export const Panels: StoryObj = {
|
|
|
104
104
|
template: `
|
|
105
105
|
<div>
|
|
106
106
|
<v-expansion-panels>
|
|
107
|
-
<v-expansion-panel>
|
|
107
|
+
<v-expansion-panel>
|
|
108
108
|
<v-expansion-panel-title style="display: inline-grid;">
|
|
109
109
|
<p style="font-weight:bold;"><VIcon :icon="arrowIcon"/>Le design system CNAM</p>
|
|
110
110
|
<p>Un référentiel centralisé de nos styles et composants pour garantir une expérience utilisateur cohérente et harmonieuse sur toutes nos plateformes.</p>
|
|
@@ -120,12 +120,12 @@ export const Panels: StoryObj = {
|
|
|
120
120
|
<p style="margin-bottom:10px;">Lorsqu'une nouvelle fonctionnalité ou un nouveau produit est ajouté, l'équipe produit peut facilement l'intégrer au système existant, en utilisant les composants et règles déjà en place. Cela garantit une croissance rapide sans sacrifier la qualité ou la cohérence.</p>
|
|
121
121
|
<p style="margin-bottom:5px;font-weight:bold;">→ Profiter de standards de qualité et d’accessibilité.</p>
|
|
122
122
|
<p style="margin-bottom:10px;">Standards de qualité : Avec ses composants validés et testés, le design system vous assure que la qualité soit maintenue à travers toutes les interfaces, qu'il s'agisse d'éléments visuels, d'interactions ou de fonctionnalités.</p>
|
|
123
|
-
<p style="margin-bottom:20px;">Standards d’accessibilité :
|
|
123
|
+
<p style="margin-bottom:20px;">Standards d’accessibilité : Grâce à des audits et à des bonnes pratiques intégrées, le design system garantit que chaque composant respecte les critères d'accessibilité, offrant ainsi une expérience inclusive pour tous les utilisateurs, y compris ceux en situation de handicap.</p>
|
|
124
124
|
</v-expansion-panel-text>
|
|
125
125
|
</v-expansion-panel>
|
|
126
126
|
</v-expansion-panels>
|
|
127
127
|
<v-expansion-panels style="margin-top:20px;">
|
|
128
|
-
<v-expansion-panel>
|
|
128
|
+
<v-expansion-panel>
|
|
129
129
|
<v-expansion-panel-title>
|
|
130
130
|
<p style="font-weight:bold;"><VIcon :icon="arrowIcon"/>Pour aller plus loin sur le fonctionnement et l’utilisation du design system</p>
|
|
131
131
|
</v-expansion-panel-title>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import axios from 'axios'
|
|
2
|
+
import { onMounted, ref } from 'vue'
|
|
3
|
+
import * as marked from 'marked'
|
|
4
|
+
import SyAlert from '../../components/SyAlert/SyAlert.vue'
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
title: 'Démarrer/Releases',
|
|
8
|
+
component: SyAlert,
|
|
9
|
+
}
|
|
10
|
+
export const List = {
|
|
11
|
+
render: () => {
|
|
12
|
+
return {
|
|
13
|
+
components: { SyAlert },
|
|
14
|
+
setup() {
|
|
15
|
+
const releases = ref([])
|
|
16
|
+
const errorMessage = ref('')
|
|
17
|
+
|
|
18
|
+
const fetchReleases = async () => {
|
|
19
|
+
try {
|
|
20
|
+
const { data } = await axios.get('https://api.github.com/repos/assurance-maladie-digital/design-system-v3/releases')
|
|
21
|
+
releases.value = data
|
|
22
|
+
}
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
24
|
+
catch (error) {
|
|
25
|
+
errorMessage.value = 'Une erreur est survenue lors de la récupération des releases.'
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const formatDate = (date: string | number | Date) => {
|
|
30
|
+
return new Date(date).toLocaleDateString()
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const formatMarkdown = (markdown: string) => {
|
|
34
|
+
return marked.parse(markdown)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
onMounted(() => {
|
|
38
|
+
fetchReleases().then(r => r)
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
releases,
|
|
43
|
+
errorMessage,
|
|
44
|
+
formatDate,
|
|
45
|
+
formatMarkdown,
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
template: `
|
|
49
|
+
<div class="releases">
|
|
50
|
+
<SyAlert type="info" variant="tonal" :closable="false">
|
|
51
|
+
<template #default>Nous faisons des nouvelles release (correction de bugs ou nouvelles fonctionnalités) régulièrement. Vous pouvez retrouver la liste des dernières releases ci-dessous.</template>
|
|
52
|
+
</SyAlert>
|
|
53
|
+
<div v-if="errorMessage" class="error">{{ errorMessage }}</div>
|
|
54
|
+
<div v-else>
|
|
55
|
+
<div v-for="release in releases" :key="release.id">
|
|
56
|
+
<h2>{{ release.name }} ({{ formatDate(release.published_at) }})</h2>
|
|
57
|
+
<div v-html="formatMarkdown(release.body)"></div>
|
|
58
|
+
<hr>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
`,
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
tags: ['!dev'],
|
|
66
|
+
}
|
|
@@ -34,7 +34,7 @@ export const Desktop: StoryObj = {
|
|
|
34
34
|
max width = 1600 px
|
|
35
35
|
</VCol>
|
|
36
36
|
</VRow>
|
|
37
|
-
<img src="
|
|
37
|
+
<img src="/conteneur-desktop.svg" alt="Tablet" class="w-100 mt-4" />
|
|
38
38
|
</div>
|
|
39
39
|
`,
|
|
40
40
|
}
|
|
@@ -62,7 +62,7 @@ export const Tablet: StoryObj = {
|
|
|
62
62
|
Gutter : 24px
|
|
63
63
|
</VCol>
|
|
64
64
|
<VCol md="6" sm="12">
|
|
65
|
-
<img src="
|
|
65
|
+
<img src="/conteneur-tablet.svg" alt="Tablet" class="w-100" />
|
|
66
66
|
</VCol>
|
|
67
67
|
</VRow>
|
|
68
68
|
</div>
|
|
@@ -92,7 +92,7 @@ export const Mobile: StoryObj = {
|
|
|
92
92
|
Gutter : 24px
|
|
93
93
|
</VCol>
|
|
94
94
|
<VCol md="6" sm="12">
|
|
95
|
-
<img src="
|
|
95
|
+
<img src="/conteneur-mobile.svg" alt="Mobile" class="w-50" />
|
|
96
96
|
</VCol>
|
|
97
97
|
</VRow>
|
|
98
98
|
</div>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks';
|
|
2
|
+
|
|
3
|
+
<Meta title="Guide Du Dev/Breaking changes"/>
|
|
4
|
+
|
|
5
|
+
# Les breaking changes
|
|
6
|
+
|
|
7
|
+
## Stores
|
|
8
|
+
|
|
9
|
+
Les librairies `vue-dot` et `synapse-bridge` utilisaient en interne la librairie `vuex`. Cette dépendance a été supprimée dans `synapse`. Plus aucune librairie de gestion d'état n'est donc imposée par le design system.
|
|
10
|
+
|
|
11
|
+
## Form builder
|
|
12
|
+
|
|
13
|
+
Le form builder n'est plus maintenu par le design system dans sa version synapse. Vous pouvez trouvez le code source dans sa version vue2 [ici](https://github.com/assurance-maladie-digital/design-system/tree/v2/packages/form-builder) et sa version vue3 [ici](https://github.com/assurance-maladie-digital/design-system/tree/v2/packages/form-builder).
|
|
14
|
+
|
|
15
|
+
## Les composants
|
|
16
|
+
|
|
17
|
+
### CustomIcon
|
|
18
|
+
|
|
19
|
+
Le composant `CustomIcon` a été retiré du design system.
|
|
20
|
+
|
|
21
|
+
Vous devez désormais utiliser le composant [VIcon](https://vuetifyjs.com/en/components/icons/) de Vuetify avec les icônes material du package[ @mdi/js](https://www.npmjs.com/package/@mdi/js). Pour des icônes personnalisés, importez les sous forme de composant.
|
|
22
|
+
|
|
23
|
+
<Source dark code={`
|
|
24
|
+
<script setup>
|
|
25
|
+
import { VIcon } from 'vuetify/components'
|
|
26
|
+
import { mdiAccount } from '@mdi/js'
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<template>
|
|
30
|
+
<VIcon> {{ mdiAccount }} </VIcon>
|
|
31
|
+
</template>
|
|
32
|
+
`} />
|
|
33
|
+
|
|
34
|
+
### FilterModule
|
|
35
|
+
|
|
36
|
+
Le composant `FilterModule` n'était pas optimisé du point de vue expérience utilisateur, le nombre de clics pour accéder à un filtre était trop important. Il a été remplacé par le composant [FilterInline](/docs/composants-filtres-filterssidebar--docs) et [FilterSideBar](/docs/composants-filtres-filterinline--docs).
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Meta, Source } from '@storybook/addon-docs/blocks';
|
|
2
2
|
|
|
3
|
-
<Meta title="Guide Du Dev/Utiliser
|
|
3
|
+
<Meta title="Guide Du Dev/Utiliser le système de validation"/>
|
|
4
4
|
|
|
5
|
-
# Utiliser
|
|
5
|
+
# Utiliser le système de validation
|
|
6
6
|
|
|
7
7
|
Ce guide décrit comment utiliser le système de validation de formulaires du Design System pour créer des validations flexibles et intuitives.
|
|
8
8
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import dayjs from 'dayjs'
|
|
2
|
+
import { describe, it, expect } from 'vitest'
|
|
3
|
+
|
|
4
|
+
import { formatDate } from '../'
|
|
5
|
+
|
|
6
|
+
describe('formatDate', () => {
|
|
7
|
+
it('formats a valid date', () => {
|
|
8
|
+
const date = dayjs('2022-01-01')
|
|
9
|
+
|
|
10
|
+
expect(formatDate(date)).toEqual('01/01/2022')
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
it('does not format an invalid date', () => {
|
|
14
|
+
const date = dayjs(null)
|
|
15
|
+
|
|
16
|
+
expect(formatDate(date)).toEqual('Invalid Date')
|
|
17
|
+
})
|
|
18
|
+
})
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { parseDate } from '@/utils/parseDate'
|
|
2
|
+
|
|
3
|
+
/** Check if a date is after another date (DD/MM/YYYY format) */
|
|
4
|
+
export function isDateAfter(maxDate: string, value: string): boolean {
|
|
5
|
+
const parsedValue = parseDate(value)
|
|
6
|
+
const parsedMaxDate = parseDate(maxDate)
|
|
7
|
+
|
|
8
|
+
return parsedValue.isAfter(parsedMaxDate)
|
|
9
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import dayjs from 'dayjs'
|
|
3
|
+
import { formatDate } from '@/utils/formatDate'
|
|
4
|
+
import { isDateAfter } from '..'
|
|
5
|
+
|
|
6
|
+
describe('isDateAfter', () => {
|
|
7
|
+
const today = formatDate(dayjs())
|
|
8
|
+
const pasteDate = formatDate(dayjs().subtract(1, 'year'))
|
|
9
|
+
const futureDate = formatDate(dayjs().add(1, 'year'))
|
|
10
|
+
|
|
11
|
+
it('returns true with a future date', () => {
|
|
12
|
+
expect(isDateAfter(today, futureDate)).toBeTruthy()
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
it('returns false with a past date', () => {
|
|
16
|
+
expect(isDateAfter(today, pasteDate)).toBeFalsy()
|
|
17
|
+
})
|
|
18
|
+
})
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { parseDate } from '@/utils/parseDate'
|
|
2
|
+
|
|
3
|
+
/** Check if a date is before another date (DD/MM/YYYY format) */
|
|
4
|
+
export function isDateBefore(minDate: string, value: string): boolean {
|
|
5
|
+
const parsedValue = parseDate(value)
|
|
6
|
+
const parsedMinDate = parseDate(minDate)
|
|
7
|
+
|
|
8
|
+
return parsedValue.isBefore(parsedMinDate)
|
|
9
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { isDateBefore } from '../'
|
|
2
|
+
import { describe, it, expect } from 'vitest'
|
|
3
|
+
|
|
4
|
+
import dayjs from 'dayjs'
|
|
5
|
+
import { formatDate } from '@/utils/formatDate'
|
|
6
|
+
|
|
7
|
+
describe('isDateBefore', () => {
|
|
8
|
+
const today = formatDate(dayjs())
|
|
9
|
+
const pasteDate = formatDate(dayjs().subtract(1, 'year'))
|
|
10
|
+
const futureDate = formatDate(dayjs().add(1, 'year'))
|
|
11
|
+
|
|
12
|
+
it('returns true with a past date', () => {
|
|
13
|
+
expect(isDateBefore(today, pasteDate)).toBeTruthy()
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it('returns false with a future date', () => {
|
|
17
|
+
expect(isDateBefore(today, futureDate)).toBeFalsy()
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
it('returns false with the current date', () => {
|
|
21
|
+
expect(isDateBefore(today, today)).toBeFalsy()
|
|
22
|
+
})
|
|
23
|
+
})
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import dayjs from 'dayjs'
|
|
2
|
+
|
|
3
|
+
import isBetween from 'dayjs/plugin/isBetween'
|
|
4
|
+
dayjs.extend(isBetween)
|
|
5
|
+
|
|
6
|
+
export type Interval = '()' | '[]' | '[)' | '(]'
|
|
7
|
+
|
|
8
|
+
/** Check if a date is in a range */
|
|
9
|
+
export function isDateInRange(
|
|
10
|
+
date: string,
|
|
11
|
+
startDate: string,
|
|
12
|
+
endDate: string,
|
|
13
|
+
interval: Interval = '[)', // '[' indicates inclusion, '(' indicates exclusion
|
|
14
|
+
): boolean {
|
|
15
|
+
const rangePositive = dayjs(startDate).isBefore(dayjs(endDate))
|
|
16
|
+
|
|
17
|
+
if (rangePositive) {
|
|
18
|
+
return dayjs(date).isBetween(startDate, endDate, null, interval)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return false
|
|
22
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { isDateInRange } from '../'
|
|
2
|
+
import { describe, it, expect } from 'vitest'
|
|
3
|
+
|
|
4
|
+
const start = '2019-10-21'
|
|
5
|
+
const end = '2019-10-27'
|
|
6
|
+
|
|
7
|
+
const date = '2019-10-23'
|
|
8
|
+
|
|
9
|
+
describe('isDateInRange', () => {
|
|
10
|
+
it('returns true if the date is in the range', () => {
|
|
11
|
+
expect(isDateInRange(date, start, end)).toBe(true)
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
it('returns false if the range is negative', () => {
|
|
15
|
+
// Invert start & end date to create a negative range
|
|
16
|
+
expect(isDateInRange(date, end, start)).toBe(false)
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
it('works with a custom interval', () => {
|
|
20
|
+
const start = '2019-10-21'
|
|
21
|
+
const end = '2019-10-27'
|
|
22
|
+
|
|
23
|
+
const date = '2019-10-27'
|
|
24
|
+
|
|
25
|
+
// We change the interval to allow the last day in the range
|
|
26
|
+
expect(isDateInRange(date, start, end, '[]')).toBe(true)
|
|
27
|
+
})
|
|
28
|
+
})
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { parseDate } from '@/utils/parseDate'
|
|
2
|
+
import dayjs from 'dayjs'
|
|
3
|
+
|
|
4
|
+
import isLeapYear from 'dayjs/plugin/isLeapYear'
|
|
5
|
+
|
|
6
|
+
dayjs.extend(isLeapYear)
|
|
7
|
+
|
|
8
|
+
const DATE_SEPARATORS = /[- /.]/
|
|
9
|
+
/** Matches DD/MM/YYYY with one of the DATE_SEPARATORS */
|
|
10
|
+
export const DATE_FORMAT_REGEX
|
|
11
|
+
= /(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.]\d{4}/
|
|
12
|
+
|
|
13
|
+
export enum DateErrorCodes {
|
|
14
|
+
WRONG_FORMAT = 'wrongFormat',
|
|
15
|
+
MONTH_NOT_MATCH = 'monthNotMatch',
|
|
16
|
+
NOT_LEAP_YEAR = 'notALeapYear',
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Check if a date is valid */
|
|
20
|
+
export function isDateValid(date: string): string | true {
|
|
21
|
+
if (!date.match(DATE_FORMAT_REGEX)) {
|
|
22
|
+
return DateErrorCodes.WRONG_FORMAT
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const DAYS_IN_MONTH = [
|
|
26
|
+
31,
|
|
27
|
+
28, // Check leap year later
|
|
28
|
+
31,
|
|
29
|
+
30,
|
|
30
|
+
31,
|
|
31
|
+
30,
|
|
32
|
+
31,
|
|
33
|
+
31,
|
|
34
|
+
30,
|
|
35
|
+
31,
|
|
36
|
+
30,
|
|
37
|
+
31,
|
|
38
|
+
]
|
|
39
|
+
|
|
40
|
+
const parsedDate = date.split(DATE_SEPARATORS)
|
|
41
|
+
|
|
42
|
+
const day = parseInt(parsedDate[0], 10)
|
|
43
|
+
const month = parseInt(parsedDate[1], 10)
|
|
44
|
+
|
|
45
|
+
if (month !== 2) {
|
|
46
|
+
if (day > DAYS_IN_MONTH[month - 1]) {
|
|
47
|
+
return DateErrorCodes.MONTH_NOT_MATCH
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return true
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const parsed = parseDate(date)
|
|
55
|
+
const isLeap = parsed.isLeapYear()
|
|
56
|
+
|
|
57
|
+
if (isLeap && day > 29) {
|
|
58
|
+
return DateErrorCodes.MONTH_NOT_MATCH
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (!isLeap && day >= 29) {
|
|
62
|
+
return DateErrorCodes.NOT_LEAP_YEAR
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return true
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { isDateValid } from '../index'
|
|
2
|
+
import { describe, it, expect } from 'vitest'
|
|
3
|
+
|
|
4
|
+
describe('isDateValid', () => {
|
|
5
|
+
it('returns an error when the date is not valid', () => {
|
|
6
|
+
const date = '99/99/9999'
|
|
7
|
+
|
|
8
|
+
expect(typeof isDateValid(date)).toBe('string')
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
it('returns an error when the format is invalid', () => {
|
|
12
|
+
const date = '2020-04-16'
|
|
13
|
+
|
|
14
|
+
expect(typeof isDateValid(date)).toBe('string')
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
it('returns an error when the day does not match the month', () => {
|
|
18
|
+
const date = '31/11/2019' // Only 30 days in November
|
|
19
|
+
|
|
20
|
+
expect(typeof isDateValid(date)).toBe('string')
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('returns an error when it is february (not leap year) and the day does not match the month', () => {
|
|
24
|
+
const date = '29/02/2019' // Not a leap year, only 28 days
|
|
25
|
+
|
|
26
|
+
expect(typeof isDateValid(date)).toBe('string')
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
it('returns an error when it is february (leap year) and the day does not match the month', () => {
|
|
30
|
+
const date = '30/02/2020' // Leap year, 29 days
|
|
31
|
+
|
|
32
|
+
expect(typeof isDateValid(date)).toBe('string')
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('returns true when it is february and the date is valid', () => {
|
|
36
|
+
const date = '15/02/2019'
|
|
37
|
+
|
|
38
|
+
expect(isDateValid(date)).toBe(true)
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('returns true when the date is valid', () => {
|
|
42
|
+
const date = '14/09/2019'
|
|
43
|
+
|
|
44
|
+
expect(isDateValid(date)).toBe(true)
|
|
45
|
+
})
|
|
46
|
+
})
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** From https://emailregex.com/ */
|
|
2
|
+
export const EMAIL_REGEXP
|
|
3
|
+
// eslint-disable-next-line no-control-regex
|
|
4
|
+
= /^(?:[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/
|
|
5
|
+
|
|
6
|
+
/** Check if an email is valid */
|
|
7
|
+
export function isEmailValid(email: string): boolean {
|
|
8
|
+
return Boolean(EMAIL_REGEXP.exec(email))
|
|
9
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import dayjs from 'dayjs'
|
|
2
|
+
|
|
3
|
+
export const WEEKEND_DAYS = ['Saturday', 'Sunday']
|
|
4
|
+
|
|
5
|
+
/** Check if a date is Saturday or Sunday */
|
|
6
|
+
export function isWeekend(date: string): boolean {
|
|
7
|
+
const day = dayjs(date).format('dddd')
|
|
8
|
+
|
|
9
|
+
return WEEKEND_DAYS.includes(day)
|
|
10
|
+
}
|