@cnamts/synapse 0.0.5-alpha → 0.0.7-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.
Files changed (229) hide show
  1. package/dist/design-system-v3.d.ts +487 -415
  2. package/dist/design-system-v3.js +2954 -2203
  3. package/dist/design-system-v3.umd.cjs +6 -6
  4. package/dist/style.css +1 -1
  5. package/package.json +17 -17
  6. package/src/assets/settings.scss +3 -0
  7. package/src/assets/tokens.scss +16 -16
  8. package/src/components/BackBtn/AccessibiliteItems.ts +0 -30
  9. package/src/components/BackBtn/BackBtn.mdx +1 -1
  10. package/src/components/BackBtn/BackBtn.stories.ts +12 -9
  11. package/src/components/BackBtn/BackBtn.vue +0 -1
  12. package/src/components/BackToTopBtn/AccessibiliteItems.ts +0 -30
  13. package/src/components/BackToTopBtn/BackToTopBtn.mdx +1 -1
  14. package/src/components/BackToTopBtn/BackToTopBtn.stories.ts +3 -3
  15. package/src/components/CollapsibleList/Accessibilite.stories.ts +4 -0
  16. package/src/components/CollapsibleList/AccessibiliteItems.ts +55 -62
  17. package/src/components/CollapsibleList/CollapsibleList.stories.ts +1 -1
  18. package/src/components/CookieBanner/Accessibilite.stories.ts +219 -0
  19. package/src/components/CookieBanner/AccessibiliteItems.ts +356 -0
  20. package/src/components/CookieBanner/CookieBanner.mdx +219 -0
  21. package/src/components/CookieBanner/CookieBanner.stories.ts +680 -0
  22. package/src/components/CookieBanner/CookieBanner.vue +225 -0
  23. package/src/components/CookieBanner/config.ts +38 -0
  24. package/src/components/CookieBanner/locales.ts +12 -0
  25. package/src/components/CookieBanner/tests/CookieBanner.spec.ts +129 -0
  26. package/src/components/CookieBanner/tests/__snapshots__/CookieBanner.spec.ts.snap +197 -0
  27. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +123 -0
  28. package/src/components/CookiesSelection/CookiesInformation/locales.ts +21 -0
  29. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.spec.ts +121 -0
  30. package/src/components/CookiesSelection/CookiesSelection.vue +127 -0
  31. package/src/components/CookiesSelection/CookiesTable/CookiesTable.vue +47 -0
  32. package/src/components/CookiesSelection/CookiesTable/headers.ts +14 -0
  33. package/src/components/CookiesSelection/CookiesTable/tests/CookiesTable.spec.ts +30 -0
  34. package/src/components/CookiesSelection/CookiesTable/tests/__snapshots__/CookiesTable.spec.ts.snap +3 -0
  35. package/src/components/CookiesSelection/locales.ts +10 -0
  36. package/src/components/CookiesSelection/tests/CookiesSelection.spec.ts +184 -0
  37. package/src/components/CookiesSelection/tests/__snapshots__/CookiesSelection.spec.ts.snap +192 -0
  38. package/src/components/CookiesSelection/types.ts +15 -0
  39. package/src/components/CopyBtn/AccessibiliteItems.ts +0 -30
  40. package/src/components/CopyBtn/CopyBtn.mdx +1 -1
  41. package/src/components/CopyBtn/CopyBtn.stories.ts +9 -6
  42. package/src/components/CopyBtn/CopyBtn.vue +0 -1
  43. package/src/components/Customs/SyBtnSelect/Accessibilite.mdx +14 -0
  44. package/src/components/Customs/SyBtnSelect/Accessibilite.stories.ts +193 -0
  45. package/src/components/Customs/SyBtnSelect/AccessibiliteItems.ts +139 -0
  46. package/src/components/Customs/SyBtnSelect/SyBtnSelect.mdx +3 -2
  47. package/src/components/Customs/SyBtnSelect/SyBtnSelect.stories.ts +30 -14
  48. package/src/components/Customs/SyBtnSelect/SyBtnSelect.vue +21 -13
  49. package/src/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.ts +4 -0
  50. package/src/components/Customs/SyInputSelect/Accessibilite.mdx +14 -0
  51. package/src/components/Customs/SyInputSelect/Accessibilite.stories.ts +166 -0
  52. package/src/components/Customs/SyInputSelect/AccessibiliteItems.ts +96 -0
  53. package/src/components/Customs/SyInputSelect/SyInputSelect.mdx +7 -3
  54. package/src/components/Customs/SyInputSelect/SyInputSelect.stories.ts +24 -65
  55. package/src/components/Customs/SyInputSelect/SyInputSelect.vue +36 -4
  56. package/src/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.ts +4 -0
  57. package/src/components/Customs/SySelect/Accessibilite.mdx +14 -0
  58. package/src/components/Customs/SySelect/Accessibilite.stories.ts +217 -0
  59. package/src/components/Customs/SySelect/AccessibiliteItems.ts +173 -0
  60. package/src/components/Customs/SySelect/SySelect.mdx +4 -4
  61. package/src/components/Customs/SySelect/SySelect.stories.ts +4 -60
  62. package/src/components/Customs/SySelect/SySelect.vue +35 -8
  63. package/src/components/Customs/SySelect/constants/ExpertiseLevelEnum.ts +4 -0
  64. package/src/components/Customs/SyTextField/Accessibilite.mdx +14 -0
  65. package/src/components/Customs/SyTextField/Accessibilite.stories.ts +224 -0
  66. package/src/components/Customs/SyTextField/AccessibiliteItems.ts +198 -0
  67. package/src/components/Customs/SyTextField/SyTextField.mdx +1 -1
  68. package/src/components/Customs/SyTextField/SyTextField.stories.ts +118 -7
  69. package/src/components/Customs/SyTextField/SyTextField.vue +27 -7
  70. package/src/components/Customs/SyTextField/constants/ExpertiseLevelEnum.ts +4 -0
  71. package/src/components/Customs/SyTextField/tests/__snapshots__/SyTextField.spec.ts.snap +2 -1
  72. package/src/components/DataList/Accessibilite.mdx +14 -0
  73. package/src/components/DataList/Accessibilite.stories.ts +166 -0
  74. package/src/components/DataList/AccessibiliteItems.ts +47 -0
  75. package/src/components/DataList/DataList.mdx +1 -1
  76. package/src/components/DataList/DataList.stories.ts +10 -10
  77. package/src/components/DataList/constants/ExpertiseLevelEnum.ts +4 -0
  78. package/src/components/DataListGroup/Accessibilite.mdx +14 -0
  79. package/src/components/DataListGroup/Accessibilite.stories.ts +225 -0
  80. package/src/components/DataListGroup/AccessibiliteItems.ts +79 -0
  81. package/src/components/DataListGroup/DataListGroup.mdx +1 -1
  82. package/src/components/DataListGroup/DataListGroup.stories.ts +7 -7
  83. package/src/components/DataListGroup/constants/ExpertiseLevelEnum.ts +4 -0
  84. package/src/components/DialogBox/Accessibilite.mdx +14 -0
  85. package/src/components/DialogBox/Accessibilite.stories.ts +189 -0
  86. package/src/components/DialogBox/AccessibiliteItems.ts +167 -0
  87. package/src/components/DialogBox/constants/ExpertiseLevelEnum.ts +4 -0
  88. package/src/components/DownloadBtn/AccessibiliteItems.ts +1 -31
  89. package/src/components/DownloadBtn/DownloadBtn.mdx +5 -6
  90. package/src/components/DownloadBtn/DownloadBtn.stories.ts +25 -26
  91. package/src/components/ErrorPage/Accessibilite.mdx +14 -0
  92. package/src/components/ErrorPage/Accessibilite.stories.ts +189 -0
  93. package/src/components/ErrorPage/AccessibiliteItems.ts +205 -0
  94. package/src/components/ErrorPage/ErrorPage.vue +1 -1
  95. package/src/components/ErrorPage/constants/ExpertiseLevelEnum.ts +4 -0
  96. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +4 -4
  97. package/src/components/FooterBar/Accessibilite.mdx +14 -0
  98. package/src/components/FooterBar/Accessibilite.stories.ts +223 -0
  99. package/src/components/FooterBar/AccessibiliteItems.ts +257 -0
  100. package/src/components/FooterBar/FooterBar.mdx +2 -2
  101. package/src/components/FooterBar/FooterBar.stories.ts +14 -14
  102. package/src/components/FooterBar/FooterBar.vue +86 -75
  103. package/src/components/FooterBar/constants/ExpertiseLevelEnum.ts +4 -0
  104. package/src/components/FooterBar/tests/__snapshots__/FooterBar.spec.ts.snap +22 -20
  105. package/src/components/FranceConnectBtn/AccessibiliteItems.ts +0 -30
  106. package/src/components/FranceConnectBtn/FranceConnectBtn.mdx +1 -1
  107. package/src/components/FranceConnectBtn/FranceConnectBtn.stories.ts +5 -4
  108. package/src/components/HeaderBar/Accessibilite.mdx +14 -0
  109. package/src/components/HeaderBar/Accessibilite.stories.ts +223 -0
  110. package/src/components/HeaderBar/AccessibiliteItems.ts +194 -0
  111. package/src/components/HeaderBar/HeaderBar.stories.ts +19 -12
  112. package/src/components/HeaderBar/HeaderBar.vue +9 -12
  113. package/src/components/HeaderBar/HeaderBurgerMenu/Accessibilite.mdx +14 -0
  114. package/src/components/HeaderBar/HeaderBurgerMenu/Accessibilite.stories.ts +223 -0
  115. package/src/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.ts +174 -0
  116. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.vue +1 -0
  117. package/src/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.ts +4 -0
  118. package/src/components/HeaderBar/constants/ExpertiseLevelEnum.ts +4 -0
  119. package/src/components/HeaderBar/tests/__snapshots__/HeaderBar.spec.ts.snap +1 -1
  120. package/src/components/HeaderLoading/Accessibilite.mdx +14 -0
  121. package/src/components/HeaderLoading/Accessibilite.stories.ts +167 -0
  122. package/src/components/HeaderLoading/AccessibiliteItems.ts +29 -0
  123. package/src/components/HeaderLoading/HeaderLoading.mdx +1 -1
  124. package/src/components/HeaderLoading/HeaderLoading.stories.ts +1 -1
  125. package/src/components/HeaderLoading/constants/ExpertiseLevelEnum.ts +4 -0
  126. package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +104 -32
  127. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +35 -33
  128. package/src/components/HeaderToolbar/Accessibilite.mdx +14 -0
  129. package/src/components/HeaderToolbar/Accessibilite.stories.ts +203 -0
  130. package/src/components/HeaderToolbar/AccessibiliteItems.ts +200 -0
  131. package/src/components/HeaderToolbar/HeaderToolbar.mdx +1 -1
  132. package/src/components/HeaderToolbar/HeaderToolbar.stories.ts +2 -2
  133. package/src/components/HeaderToolbar/HeaderToolbar.vue +24 -1
  134. package/src/components/HeaderToolbar/constants/ExpertiseLevelEnum.ts +4 -0
  135. package/src/components/LangBtn/Accessibilite.stories.ts +3 -1
  136. package/src/components/LangBtn/AccessibiliteItems.ts +0 -31
  137. package/src/components/LangBtn/LangBtn.mdx +1 -1
  138. package/src/components/LangBtn/LangBtn.stories.ts +4 -4
  139. package/src/components/LangBtn/LangBtn.vue +3 -2
  140. package/src/components/Logo/Accessibilite.mdx +14 -0
  141. package/src/components/Logo/Accessibilite.stories.ts +223 -0
  142. package/src/components/Logo/AccessibiliteItems.ts +155 -0
  143. package/src/components/Logo/Logo.mdx +1 -1
  144. package/src/components/Logo/Logo.stories.ts +8 -8
  145. package/src/components/Logo/constants/ExpertiseLevelEnum.ts +4 -0
  146. package/src/components/LogoBrandSection/Accessibilite.mdx +14 -0
  147. package/src/components/LogoBrandSection/Accessibilite.stories.ts +223 -0
  148. package/src/components/LogoBrandSection/AccessibiliteItems.ts +194 -0
  149. package/src/components/LogoBrandSection/constants/ExpertiseLevelEnum.ts +4 -0
  150. package/src/components/MaintenancePage/Accessibilite.mdx +14 -0
  151. package/src/components/MaintenancePage/Accessibilite.stories.ts +189 -0
  152. package/src/components/MaintenancePage/AccessibiliteItems.ts +173 -0
  153. package/src/components/MaintenancePage/constants/ExpertiseLevelEnum.ts +4 -0
  154. package/src/components/NirField/Accessibilite.mdx +14 -0
  155. package/src/components/NirField/Accessibilite.stories.ts +214 -0
  156. package/src/components/NirField/AccessibiliteItems.ts +243 -0
  157. package/src/components/NirField/NirField.mdx +213 -0
  158. package/src/components/NirField/NirField.stories.ts +412 -0
  159. package/src/components/NirField/NirField.vue +453 -0
  160. package/src/components/NirField/config.ts +16 -0
  161. package/src/components/NirField/constants/ExpertiseLevelEnum.ts +4 -0
  162. package/src/components/NirField/locales.ts +12 -0
  163. package/src/components/NirField/nirValidation.ts +42 -0
  164. package/src/components/NirField/tests/NirField.spec.ts +120 -0
  165. package/src/components/NotFoundPage/Accessibilite.mdx +14 -0
  166. package/src/components/NotFoundPage/Accessibilite.stories.ts +190 -0
  167. package/src/components/NotFoundPage/AccessibiliteItems.ts +205 -0
  168. package/src/components/NotFoundPage/constants/ExpertiseLevelEnum.ts +4 -0
  169. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +4 -4
  170. package/src/components/NotificationBar/AccessibiliteItems.ts +0 -30
  171. package/src/components/NotificationBar/NotificationBar.mdx +1 -1
  172. package/src/components/PageContainer/PageContainer.mdx +1 -1
  173. package/src/components/PageContainer/PageContainer.stories.ts +9 -9
  174. package/src/components/PageContainer/PageContainer.vue +24 -18
  175. package/src/components/PageContainer/tests/PageContainer.spec.ts +2 -2
  176. package/src/components/PageContainer/tests/__snapshots__/PageContainer.spec.ts.snap +2 -2
  177. package/src/components/PhoneField/Accessibilite.mdx +14 -0
  178. package/src/components/PhoneField/Accessibilite.stories.ts +216 -0
  179. package/src/components/PhoneField/AccessibiliteItems.ts +238 -0
  180. package/src/components/PhoneField/PhoneField.mdx +1 -1
  181. package/src/components/PhoneField/PhoneField.stories.ts +2 -2
  182. package/src/components/PhoneField/PhoneField.vue +0 -1
  183. package/src/components/PhoneField/constants/ExpertiseLevelEnum.ts +4 -0
  184. package/src/components/SkipLink/Accessibilite.stories.ts +1 -1
  185. package/src/components/SkipLink/SkipLink.stories.ts +2 -2
  186. package/src/components/SocialMediaLinks/Accessibilite.mdx +14 -0
  187. package/src/components/SocialMediaLinks/Accessibilite.stories.ts +170 -0
  188. package/src/components/SocialMediaLinks/AccessibiliteItems.ts +160 -0
  189. package/src/components/SocialMediaLinks/SocialMediaLinks.mdx +1 -1
  190. package/src/components/SocialMediaLinks/SocialMediaLinks.stories.ts +1 -1
  191. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +7 -1
  192. package/src/components/SocialMediaLinks/constants/ExpertiseLevelEnum.ts +4 -0
  193. package/src/components/SocialMediaLinks/tests/__snapshots__/SocialMediaLinks.spec.ts.snap +2 -2
  194. package/src/components/SubHeader/Accessibilite.mdx +14 -0
  195. package/src/components/SubHeader/Accessibilite.stories.ts +166 -0
  196. package/src/components/SubHeader/AccessibiliteItems.ts +146 -0
  197. package/src/components/SubHeader/SubHeader.mdx +1 -1
  198. package/src/components/SubHeader/SubHeader.stories.ts +17 -14
  199. package/src/components/SubHeader/constants/ExpertiseLevelEnum.ts +4 -0
  200. package/src/components/SyAlert/Accessibilite.mdx +14 -0
  201. package/src/components/{Alert → SyAlert}/Accessibilite.stories.ts +1 -1
  202. package/src/components/{Alert → SyAlert}/AccessibiliteItems.ts +2 -32
  203. package/src/components/{Alert/Alert.mdx → SyAlert/SyAlert.mdx} +9 -9
  204. package/src/components/{Alert/Alert.stories.ts → SyAlert/SyAlert.stories.ts} +22 -22
  205. package/src/components/{Alert/Alert.vue → SyAlert/SyAlert.vue} +7 -0
  206. package/src/components/SyAlert/constants/ExpertiseLevelEnum.ts +4 -0
  207. package/src/components/{Alert/tests/Alert.spec.ts → SyAlert/tests/SyAlert.spec.ts} +5 -5
  208. package/src/components/{Alert/tests/__snapshots__/Alert.spec.ts.snap → SyAlert/tests/__snapshots__/SyAlert.spec.ts.snap} +2 -2
  209. package/src/components/UserMenuBtn/Accessibilite.mdx +14 -0
  210. package/src/components/UserMenuBtn/Accessibilite.stories.ts +189 -0
  211. package/src/components/UserMenuBtn/AccessibiliteItems.ts +155 -0
  212. package/src/components/UserMenuBtn/UserMenuBtn.mdx +17 -17
  213. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +121 -19
  214. package/src/components/UserMenuBtn/UserMenuBtn.vue +25 -29
  215. package/src/components/UserMenuBtn/config.ts +1 -1
  216. package/src/components/UserMenuBtn/constants/ExpertiseLevelEnum.ts +4 -0
  217. package/src/components/index.ts +11 -4
  218. package/src/composables/rules/tests/useFieldValidation.spec.ts +60 -58
  219. package/src/composables/rules/useFieldValidation.ts +65 -28
  220. package/src/main.ts +1 -0
  221. package/src/stories/GuideDuDev/CommentUtiliserLesRules.mdx +67 -79
  222. package/src/stories/GuideDuDev/components.stories.ts +5 -5
  223. package/src/stories/GuideDuDev/moduleDeNotification.mdx +1 -1
  224. package/src/stories/Guidelines/Vuetify/Vuetify.mdx +11 -0
  225. package/src/stories/Guidelines/Vuetify/Vuetify.stories.ts +138 -0
  226. package/src/stories/Guidelines/Vuetify/VuetifyItems.ts +350 -0
  227. /package/src/components/{Alert → CookieBanner}/Accessibilite.mdx +0 -0
  228. /package/src/components/{Alert → CookieBanner}/constants/ExpertiseLevelEnum.ts +0 -0
  229. /package/src/components/{Alert → SyAlert}/locales.ts +0 -0
@@ -0,0 +1,96 @@
1
+ import { ExpertiseLevelEnum } from './constants/ExpertiseLevelEnum'
2
+
3
+ export const AccessibiliteItemsIndeterminate = [
4
+ {
5
+ title: 'Catégorie 10 : Présentation de l’information',
6
+ subtitle: '10.1 Dans le site web, des feuilles de styles sont-elles utilisées pour contrôler la présentation de l’information ? ?',
7
+ items: [
8
+
9
+ {
10
+ precision: '10.1.1 Dans chaque page web, les balises servant à la présentation de l’information ne doivent pas être présentes dans le code source généré des pages. Cette règle est-elle respectée ? ',
11
+ link: 'https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#10.1.1',
12
+ solution: [{
13
+ info1: '1. Vérifier l’absence des éléments de présentation <basefont>, <big>, <blink>, <center>, <font>, <marquee>, <s>, <strike>, <tt> ; ',
14
+ info2: '2. Vérifier l’absence de l’élément <u> uniquement si le DOCTYPE du document ne correspond pas à HTML 5 ; ',
15
+ info3: '3. Si c’est le cas, le test est validé',
16
+ }],
17
+ expertise: ExpertiseLevelEnum.DEV,
18
+
19
+ },
20
+
21
+ ],
22
+ },
23
+
24
+ ]
25
+
26
+ export const AccessibiliteItemsValidated = [
27
+ {
28
+ title: 'Catégorie 1 : Images',
29
+ subtitle: '1.2 Chaque image de décoration est-elle correctement ignorée par les technologies d’assistance ?',
30
+ items: [
31
+
32
+ {
33
+ precision: '1.2.4 Chaque image vectorielle (balise <svg>) de décoration, sans légende, vérifie-t-elle ces conditions ?'
34
+ + ' La balise <svg> possède un attribut WAI-ARIA aria-hidden="true" ;'
35
+ + ' La balise <svg> et ses enfants sont dépourvus d’alternative textuelle ;'
36
+ + ' Les balises <title> et <desc> sont absentes ou vides ;'
37
+ + ' La balise <svg> et ses enfants sont dépourvus d’attribut title.',
38
+ link: 'https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#1.2.4',
39
+ solution: [{
40
+ info1: '1. Retrouver dans le document les images décoratives dépourvues de légende structurées au moyen d’un élément <svg> ;',
41
+ info2: '2. Pour chaque image, vérifier que l’élément <svg> ne possède pas d’attributs aria-labelledby ou aria-label et qu’il :'
42
+ + ' Possède un attribut WAI-ARIA aria-hidden="true" ;'
43
+ + ' Et est dépourvu d’alternative textuelle (ainsi que ses éléments enfants) ;'
44
+ + ' Et ne contient pas d’éléments <title> et <desc> à moins que vides de contenu ;'
45
+ + ' Et est dépourvu d’attribut title (ainsi que ses éléments enfants).',
46
+ info3: '3. Si c’est le cas pour chaque image, le test est validé',
47
+ }],
48
+ expertise: ExpertiseLevelEnum.DESIGN,
49
+
50
+ },
51
+
52
+ ],
53
+ },
54
+ {
55
+ title: 'Catégorie 3 : Couleurs',
56
+ subtitle: '3.2 Dans chaque page web, le contraste entre la couleur du texte et la couleur de son arrière-plan est-il suffisamment élevé?',
57
+ items: [
58
+ {
59
+
60
+ precision: '3.2.1 Dans chaque page web, le texte et le texte en image sans effet de graisse d’une taille restituée inférieure à 24px vérifient-ils une de ces conditions? Le rapport de contraste entre le texte et son arrière-plan est de 4.5:1, au moins; Un mécanisme permet à l’utilisateur d’afficher le texte avec un rapport de contraste de 4.5:1, au moins.',
61
+ link: 'https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#3.2.1',
62
+ solution: [{
63
+ info1: '1. Retrouver dans le document les textes et les textes en image sans effet de graisse d’une taille restituée inférieure à 24px qui pourraient poser des problèmes de contraste ;',
64
+ info2: '2. Pour chacun de ces textes, vérifier que : Soit le rapport de contraste entre le texte et son arrière-plan est de 4.5:1, au moins; Soit un mécanisme permet à l’utilisateur d’afficher le texte avec un rapport de contraste de 4.5:1, au moins.',
65
+ info3: '3. Si c’est le cas pour chaque texte, le test est validé',
66
+ }],
67
+ expertise: ExpertiseLevelEnum.DESIGN,
68
+
69
+ },
70
+
71
+ ],
72
+ },
73
+
74
+ {
75
+ title: 'Catégorie 8 : Eléments Obligatoires',
76
+ subtitle: '8.9 Dans chaque page web, les balises ne doivent pas être utilisées uniquement à des fins de présentation',
77
+ items: [
78
+
79
+ {
80
+ precision: ' 8.9.1 Dans chaque page web les balises (à l’exception de <div>, <span> et <table>) ne doivent pas être utilisées uniquement à des fins de présentation. Cette règle est-elle respectée',
81
+ link: 'https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#8.9.1',
82
+ solution: [{
83
+ info1: '1. Retrouver dans le document l’ensemble des éléments sémantiques utilisés à des fins de présentation ;',
84
+ info2: '2. Pour chacun de ces éléments, vérifier que :'
85
+ + 'L’élément est pourvu d’un attribut role=“presentation” ;'
86
+ + 'L’utilisation de cet élément à des fins de présentation reste justifée',
87
+ info3: '3. Si c’est le cas, le test est validé',
88
+ }],
89
+ expertise: ExpertiseLevelEnum.DESIGN,
90
+
91
+ },
92
+
93
+ ],
94
+ },
95
+
96
+ ]
@@ -5,7 +5,8 @@ import * as SyInputSelectStories from "./SyInputSelect.stories";
5
5
 
6
6
  # SyInputSelect
7
7
 
8
- Le composant `SyInputSelect` est utilisé pour proposer une alternative au `v-select` de Vuetify qui ne respecte pas les règles RGAA.
8
+ Le composant `SyInputSelect` est utilisé pour proposer une alternative au `v-select` de Vuetify qui ne respecte pas les règles RGAA.<br/>
9
+ Il est basé sur un `v-input`.
9
10
 
10
11
  <Canvas of={SyInputSelectStories.Default} />
11
12
 
@@ -19,12 +20,15 @@ Le composant `SyInputSelect` est utilisé pour proposer une alternative au `v-se
19
20
 
20
21
  <Source dark code={`
21
22
  <script setup lang="ts">
22
- import SyInputSelect from '@cnamts/synapse'
23
+ import { SyInputSelect } from '@cnamts/synapse'
24
+ import { ref } from 'vue'
23
25
 
24
26
  const items = [
25
27
  { text: 'Option 1', value: '1' },
26
28
  { text: 'Option 2', value: '2' },
27
- ],
29
+ ]
30
+
31
+ const value = ref(undefined)
28
32
  </script>
29
33
 
30
34
  <template>
@@ -2,7 +2,7 @@ import type { Meta, StoryObj } from '@storybook/vue3'
2
2
  import SyInputSelect from './SyInputSelect.vue'
3
3
  import { VBtn, VMenu, VList, VListItem, VListItemTitle } from 'vuetify/components'
4
4
  import { ref } from 'vue'
5
- import Alert from '../../Alert/Alert.vue'
5
+ import SyAlert from '@/components/SyAlert/SyAlert.vue'
6
6
 
7
7
  const meta = {
8
8
  title: 'Composants/Formulaires/SyInputSelect',
@@ -16,6 +16,7 @@ const meta = {
16
16
  items: { control: 'object' },
17
17
  errorMessages: { control: 'object' },
18
18
  required: { control: 'boolean' },
19
+ outlined: { control: 'boolean' },
19
20
  textKey: { control: 'text' },
20
21
  valueKey: { control: 'text' },
21
22
  vuetifyOptions: { control: 'object' },
@@ -43,12 +44,15 @@ export const Default: Story = {
43
44
  name: 'Script',
44
45
  code: `
45
46
  <script setup lang="ts">
46
- import SyInputSelect from '@cnamts/SyInputSelect'
47
+ import SyInputSelect from '@cnamts/synapse'
48
+ import { ref } from 'vue'
47
49
 
48
50
  const items = [
49
51
  { text: 'Option 1', value: '1' },
50
52
  { text: 'Option 2', value: '2' },
51
53
  ],
54
+
55
+ const value = ref(undefined)
52
56
  </script>
53
57
  `,
54
58
  },
@@ -87,60 +91,6 @@ export const Default: Story = {
87
91
  },
88
92
  }
89
93
 
90
- export const Outlined: Story = {
91
- parameters: {
92
- sourceCode: [
93
- {
94
- name: 'Template',
95
- code: `
96
- <template>
97
- <SyInputSelect
98
- v-model="value"
99
- :items="items"
100
- outlined
101
- />
102
- </template>
103
- `,
104
- },
105
- {
106
- name: 'Script',
107
- code: `
108
- <script setup lang="ts">
109
- import SyInputSelect from '@cnamts/SyInputSelect'
110
-
111
- const items = [
112
- { text: 'Option 1', value: '1' },
113
- { text: 'Option 2', value: '2' },
114
- ],
115
- </script>
116
- `,
117
- },
118
- ],
119
- },
120
- args: {
121
- items: [
122
- { text: 'Option 1', value: '1' },
123
- { text: 'Option 2', value: '2' },
124
- ],
125
- },
126
- render: (args) => {
127
- return {
128
- components: { SyInputSelect, VBtn, VMenu, VList, VListItem, VListItemTitle },
129
- setup() {
130
- return { args }
131
- },
132
- template: `
133
- <div class="d-flex flex-wrap align-center pa-4">
134
- <SyInputSelect
135
- v-bind="args"
136
- outlined
137
- />
138
- </div>
139
- `,
140
- }
141
- },
142
- }
143
-
144
94
  export const Required: Story = {
145
95
  parameters: {
146
96
  sourceCode: [
@@ -160,12 +110,15 @@ export const Required: Story = {
160
110
  name: 'Script',
161
111
  code: `
162
112
  <script setup lang="ts">
163
- import SyInputSelect from '@cnamts/SyInputSelect'
113
+ import SyInputSelect from '@cnamts/synapse'
114
+ import { ref } from 'vue'
164
115
 
165
116
  const items = [
166
117
  { text: 'Option 1', value: '1' },
167
118
  { text: 'Option 2', value: '2' },
168
119
  ],
120
+
121
+ const value = ref(undefined)
169
122
  </script>
170
123
  `,
171
124
  },
@@ -218,7 +171,7 @@ export const withCustomError: Story = {
218
171
  name: 'Script',
219
172
  code: `
220
173
  <script setup lang="ts">
221
- import SyInputSelect from '@cnamts/SyInputSelect'
174
+ import SyInputSelect from '@cnamts/synapse'
222
175
  import { ref } from 'vue'
223
176
 
224
177
  const items = [
@@ -231,6 +184,8 @@ export const withCustomError: Story = {
231
184
  const triggerError = () => {
232
185
  errorMessages.value = ['This is a test error message']
233
186
  }
187
+
188
+ const value = ref(undefined)
234
189
  </script>
235
190
  `,
236
191
  },
@@ -279,7 +234,6 @@ export const withCustomKey: Story = {
279
234
  v-model="value"
280
235
  :items="items"
281
236
  text-key="customKey"
282
- outlined
283
237
  />
284
238
  </template>
285
239
  `,
@@ -288,12 +242,15 @@ export const withCustomKey: Story = {
288
242
  name: 'Script',
289
243
  code: `
290
244
  <script setup lang="ts">
291
- import SyInputSelect from '@cnamts/SyInputSelect'
245
+ import SyInputSelect from '@cnamts/synapse'
246
+ import { ref } from 'vue'
292
247
 
293
248
  const items = [
294
249
  { customKey: 'Choix 1', value: '1' },
295
250
  { customKey: 'Choix 2', value: '2' }
296
251
  ]
252
+
253
+ const value = ref(undefined)
297
254
  </script>
298
255
  `,
299
256
  },
@@ -315,7 +272,6 @@ export const withCustomKey: Story = {
315
272
  <div class="d-flex flex-wrap align-center pa-4">
316
273
  <SyInputSelect
317
274
  v-bind="args"
318
- outlined
319
275
  text-key="customKey"
320
276
  />
321
277
  </div>
@@ -343,7 +299,8 @@ export const withCustomStyles: Story = {
343
299
  name: 'Script',
344
300
  code: `
345
301
  <script setup lang="ts">
346
- import SyInputSelect from '@cnamts/SyInputSelect'
302
+ import SyInputSelect from '@cnamts/synapse'
303
+ import { ref } from 'vue'
347
304
 
348
305
  const items = [
349
306
  { text: 'Option 1', value: '1' },
@@ -358,6 +315,8 @@ export const withCustomStyles: Story = {
358
315
  color: 'secondary',
359
316
  },
360
317
  }
318
+
319
+ const value = ref(undefined)
361
320
  </script>
362
321
  `,
363
322
  },
@@ -399,12 +358,12 @@ export const withCustomStyles: Story = {
399
358
  export const Info: Story = {
400
359
  render: (args) => {
401
360
  return {
402
- components: { Alert },
361
+ components: { SyAlert },
403
362
  setup() {
404
363
  return { args }
405
364
  },
406
365
  template: `
407
- <Alert v-model="args.modelValue" :type="args.type" :variant="tonal" :closable="false">
366
+ <SyAlert v-model="args.modelValue" :type="args.type" :variant="tonal" :closable="false">
408
367
  <template #default>
409
368
  <b>Format des items :</b>
410
369
  <ul>
@@ -412,7 +371,7 @@ export const Info: Story = {
412
371
  <li>- Si les items sont un tableau de string, le composant les utilisera directement.</li>
413
372
  </ul>
414
373
  </template>
415
- </Alert>
374
+ </SyAlert>
416
375
  `,
417
376
  }
418
377
  },
@@ -1,8 +1,6 @@
1
1
  <script lang="ts" setup>
2
- import { mdiChevronDown } from '@mdi/js'
2
+ import { mdiChevronDown, mdiInformation } from '@mdi/js'
3
3
  import { computed, onMounted, ref, watch } from 'vue'
4
- import { VIcon, VList, VListItem, VListItemTitle } from 'vuetify/components'
5
-
6
4
  import useCustomizableOptions, { type CustomizableOptions } from '@/composables/useCustomizableOptions'
7
5
  import defaultOptions from './config'
8
6
 
@@ -22,7 +20,7 @@
22
20
  textKey: 'text',
23
21
  valueKey: 'value',
24
22
  label: 'Sélectionnez une option',
25
- outlined: false,
23
+ outlined: true,
26
24
  required: false,
27
25
  errorMessages: () => [],
28
26
  isHeaderToolbar: false,
@@ -34,6 +32,7 @@
34
32
 
35
33
  const isOpen = ref(false)
36
34
  const selectedItem = ref<Record<string, unknown> | string | null>(props.modelValue)
35
+ const hasError = ref(false)
37
36
 
38
37
  const toggleMenu = () => {
39
38
  isOpen.value = !isOpen.value
@@ -43,6 +42,10 @@
43
42
  isOpen.value = false
44
43
  }
45
44
 
45
+ const isRequired = computed(() => {
46
+ return (props.required || props.errorMessages.length > 0) && !selectedItem.value
47
+ })
48
+
46
49
  const inputId = ref(`sy-input-select-${Math.random().toString(36).substring(7)}`)
47
50
 
48
51
  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
@@ -69,8 +72,18 @@
69
72
  selectedItem.value = newValue
70
73
  })
71
74
 
75
+ watch([isOpen, hasError], ([newIsOpen, newHasError]) => {
76
+ if (!newIsOpen) {
77
+ hasError.value = (!selectedItem.value && isRequired.value) || props.errorMessages.length > 0
78
+ }
79
+ else {
80
+ hasError.value = newHasError
81
+ }
82
+ })
83
+
72
84
  watch(() => props.errorMessages, (newValue) => {
73
85
  localErrorMessages.value = newValue
86
+ hasError.value = newValue.length > 0
74
87
  })
75
88
 
76
89
  const menu = ref<HTMLElement | null>(null)
@@ -88,6 +101,9 @@
88
101
  })
89
102
 
90
103
  const buttonClass = computed(() => {
104
+ if (props.outlined && hasError.value) {
105
+ return 'v-btn v-btn--density-default v-btn--size-default v-btn--variant-outlined error text-error'
106
+ }
91
107
  return props.outlined ? 'v-btn v-btn--density-default v-btn--size-default v-btn--variant-outlined' : 'text-color'
92
108
  })
93
109
 
@@ -144,6 +160,13 @@
144
160
  @keydown.space.prevent="toggleMenu"
145
161
  >
146
162
  <span>{{ selectedItemText }}</span>
163
+ <VIcon
164
+ v-if="hasError"
165
+ class="ml-2"
166
+ color="error"
167
+ >
168
+ {{ mdiInformation }}
169
+ </VIcon>
147
170
  <VIcon> {{ mdiChevronDown }}</VIcon>
148
171
  </div>
149
172
  <VList
@@ -179,6 +202,11 @@
179
202
  <style lang="scss" scoped>
180
203
  @use '@/assets/tokens.scss';
181
204
 
205
+ .sy-input-select {
206
+ text-transform: none !important;
207
+ font-size: 16px;
208
+ }
209
+
182
210
  .v-input {
183
211
  cursor: pointer;
184
212
  position: relative;
@@ -210,6 +238,10 @@
210
238
  }
211
239
  }
212
240
 
241
+ .error {
242
+ border-color: tokens.$danger-default;
243
+ }
244
+
213
245
  .v-btn {
214
246
  color: tokens.$blue-base;
215
247
  }
@@ -0,0 +1,4 @@
1
+ export enum ExpertiseLevelEnum {
2
+ DEV = 'dev',
3
+ DESIGN = 'design',
4
+ }
@@ -0,0 +1,14 @@
1
+ import { Meta, Story } from '@storybook/addon-docs';
2
+ import * as AccessStories from './Accessibilite.stories.ts';
3
+
4
+ <Meta of={AccessStories} />
5
+
6
+ Accessibilité
7
+ =============
8
+ <Story of={AccessStories.Legende} />
9
+ <br />
10
+
11
+ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
12
+
13
+ <Story of={AccessStories.AccessibilitePanel} />
14
+ <br />
@@ -0,0 +1,217 @@
1
+ import { VExpansionPanels, VExpansionPanel, VExpansionPanelTitle, VExpansionPanelText, VDataTable, VIcon } from 'vuetify/components'
2
+ import type { StoryObj } from '@storybook/vue3'
3
+ import { AccessibiliteItemsIndeterminate, AccessibiliteItemsValidated } from './AccessibiliteItems'
4
+ import { mdiCheckboxMarkedCircle, mdiLink, mdiEye } from '@mdi/js'
5
+
6
+ const checkIcon = mdiCheckboxMarkedCircle
7
+ const iconEye = mdiEye
8
+ const linkICon = mdiLink
9
+
10
+ export default {
11
+ title: 'Composants/Formulaires/SySelect/Accessibilité',
12
+ }
13
+ export const AccessibilitePanel: StoryObj = {
14
+
15
+ render: () => {
16
+ return {
17
+ components: { VExpansionPanels, VExpansionPanel, VExpansionPanelTitle, VExpansionPanelText, VDataTable, VIcon },
18
+
19
+ setup() {
20
+ const icon = checkIcon
21
+
22
+ return { AccessibiliteItemsIndeterminate, AccessibiliteItemsValidated, icon, linkICon, iconEye }
23
+ },
24
+ template: `
25
+ <div class="accessibiliteItems" style="display:flex; max-width: none !important;">
26
+ <v-col cols="6">
27
+ <div style="display:flex; margin-bottom: 10px; justify-content: space-between; align-items: center;">
28
+ <h5>{{ AccessibiliteItemsIndeterminate.length }} critères à prendre en charge par le projet</h5>
29
+ <div style="display: flex; align-items: center;">
30
+ <v-btn variant="tonal" color="red" size="x-small" style="margin: 4px;font-size: 8px;"
31
+ rounded>Tanaguru
32
+ </v-btn>
33
+ </div>
34
+ </div>
35
+
36
+ <v-expansion-panels value="opened" multiple>
37
+ <v-expansion-panel v-for="(item, index) in AccessibiliteItemsIndeterminate" :key="index"
38
+ style="background-color: rgba(42, 96, 158, 0.1); margin-bottom: 10px;">
39
+ <v-expansion-panel-title>
40
+ <VIcon :icon="iconEye" style="margin-right: 5px; color:#5778b7;"/>
41
+ {{ item.title }}
42
+ </v-expansion-panel-title>
43
+ <v-expansion-panel-text>
44
+ <v-expansion-panels>
45
+
46
+ <v-expansion-panel v-for="(i, index) in item.items2" :key="i" style="margin-bottom: 10px;">
47
+ <v-expansion-panel-title
48
+ style="font-weight: bold; font-size: 13px; line-height: 16px;">
49
+ {{ i.subtitle }}
50
+ </v-expansion-panel-title>
51
+ <v-expansion-panel-text>
52
+ <div>
53
+ <p style="font-size: 13px;line-height: 16px;">
54
+ {{ i.precision }}
55
+ </p>
56
+ <div v-for="(value, index) in i.solution"
57
+ style="margin-top:15px; font-size: 13px;line-height: 16px;">
58
+ <p style="font-weight: bold;">Méthodologie du test : <a
59
+ href="{{i.link}}" target="blank">
60
+ <VIcon :icon="linkICon"/>
61
+ </a></p>
62
+
63
+ <p>{{ value.info1 }}</p>
64
+ <p>{{ value.info2 }}</p>
65
+ <p>{{ value.info3 }}</p>
66
+ </div>
67
+ <span style="display:flex; justify-content:center; margin-bottom:5px;">______</span>
68
+ </div>
69
+ </v-expansion-panel-text>
70
+ </v-expansion-panel>
71
+ <v-expansion-panel>
72
+ <v-expansion-panel-title
73
+ style="font-weight: bold; font-size: 13px; line-height: 16px;">
74
+ {{ item.subtitle }}
75
+ </v-expansion-panel-title>
76
+ <v-expansion-panel-text>
77
+ <div v-for="(value, i) in item.items" :key="i">
78
+ <p style="font-size: 13px;line-height: 16px;">
79
+ {{ value.precision }}
80
+ </p>
81
+ <div v-for="element in value.solution"
82
+ style="margin-top:15px; font-size: 13px;line-height: 16px;">
83
+ <p style="font-weight: bold;">Méthodologie du test : <a
84
+ href="value.link" target="blank">
85
+ <VIcon :icon="linkICon"/>
86
+ </a></p>
87
+ <p>{{ element.info1 }}</p>
88
+ <p>{{ element.info2 }}</p>
89
+ <p>{{ element.info3 }}</p>
90
+ </div>
91
+ <span style="display:flex; justify-content:center; margin-bottom:5px;">______</span>
92
+ </div>
93
+ </v-expansion-panel-text>
94
+ </v-expansion-panel>
95
+ </v-expansion-panels>
96
+ </v-expansion-panel-text>
97
+ </v-expansion-panel>
98
+ </v-expansion-panels>
99
+ </v-col>
100
+ <v-col cols="6">
101
+ <div style="display:flex; margin-bottom: 10px; justify-content: space-between; align-items: center;">
102
+ <h5>{{ AccessibiliteItemsValidated.length }} critères pris en charge par l'équipe Design System</h5>
103
+ <div style="display: flex; align-items: center;">
104
+ <v-btn variant="tonal" color="red" size="x-small" style="margin: 4px;font-size: 8px;"
105
+ rounded>Tanaguru
106
+ </v-btn>
107
+ </div>
108
+ </div>
109
+ <v-expansion-panels value="opened" multiple>
110
+ <v-expansion-panel
111
+ v-for="(item, index) in AccessibiliteItemsValidated"
112
+ :key="index" style="background-color: rgba(53,135,0,0.1); margin-bottom: 10px;">
113
+ <v-expansion-panel-title>
114
+ <VIcon color="green" :icon="icon" style="margin-right: 5px;"/>
115
+ {{ item.title }}
116
+ </v-expansion-panel-title>
117
+ <v-expansion-panel-text>
118
+ <v-expansion-panels>
119
+
120
+ <v-expansion-panel v-for="(i, index) in item.items2" :key="i" style="margin-bottom: 10px;">
121
+ <v-expansion-panel-title
122
+ style="font-weight: bold; font-size: 13px; line-height: 16px;">
123
+ {{ i.subtitle }}
124
+ </v-expansion-panel-title>
125
+ <v-expansion-panel-text>
126
+ <div>
127
+ <p style="font-size: 13px;line-height: 16px;">
128
+ {{ i.precision }}
129
+ </p>
130
+ <div v-for="(value, index) in i.solution"
131
+ style="margin-top:15px; font-size: 13px;line-height: 16px;">
132
+ <p style="font-weight: bold;">Méthodologie du test : <a
133
+ href="{{i.link}}" target="blank">
134
+ <VIcon :icon="linkICon"/>
135
+ </a></p>
136
+ <p>{{ value.info1 }}</p>
137
+ <p>{{ value.info2 }}</p>
138
+ <p>{{ value.info3 }}</p>
139
+ </div>
140
+ <span style="display:flex; justify-content:center; margin-bottom:5px;">______</span>
141
+ </div>
142
+ </v-expansion-panel-text>
143
+ </v-expansion-panel>
144
+
145
+ <v-expansion-panel>
146
+ <v-expansion-panel-title
147
+ style="font-weight: bold; font-size: 13px; line-height: 16px;">
148
+ {{ item.subtitle }}
149
+ </v-expansion-panel-title>
150
+ <v-expansion-panel-text>
151
+ <div v-for="(value, i) in item.items" :key="i">
152
+ <p style="font-size: 13px;line-height: 16px;">
153
+ {{ value.precision }}
154
+ </p>
155
+ <div v-for="element in value.solution"
156
+ style="margin-top:15px; font-size: 13px;line-height: 16px;">
157
+ <p style="font-weight: bold;">Méthodologie du test : <a
158
+ href="value.link" target="blank">
159
+ <VIcon :icon="linkICon"/>
160
+ </a></p>
161
+ <p>{{ element.info1 }}</p>
162
+ <p>{{ element.info2 }}</p>
163
+ <p>{{ element.info3 }}</p>
164
+ </div>
165
+ <span style="display:flex; justify-content:center; margin-bottom:5px;">______</span>
166
+ </div>
167
+ </v-expansion-panel-text>
168
+ </v-expansion-panel>
169
+ </v-expansion-panels>
170
+ </v-expansion-panel-text>
171
+ </v-expansion-panel>
172
+ </v-expansion-panels>
173
+ </v-col>
174
+ </div>
175
+ `,
176
+ }
177
+ },
178
+ tags: ['!dev'],
179
+ }
180
+
181
+ export const Legende: StoryObj = {
182
+ args: {
183
+ icon: checkIcon,
184
+ },
185
+ render: (args) => {
186
+ return {
187
+ components: { VIcon },
188
+ setup() {
189
+ return { args }
190
+ },
191
+ template: `
192
+ <p style="color: grey;font-size: 11px; margin-bottom: 12px;">Date de conception: 20/11/2024</p>
193
+ <div>
194
+ <p>Le tableau ci-dessous liste nos recommandations suivant les <a target="blank" style="color:#0C41BD;" href="https://www.numerique.gouv.fr/publications/rgaa-accessibilite/#contenu">catégories du RGAA</a>.</p>
195
+ <p style="margin-bottom: 12px;font-weight:bold;">Pour rappel le composant seul ne garantie pas
196
+ l'accessibilité du site.</p>
197
+ <div style="font-size: 14px">
198
+ <p>Nous avons deux façons de relever les problèmes d'accessibilité des composants :</p>
199
+ <div>
200
+ <v-btn variant="tonal" color="grey" size="x-small" style="margin: 2px;font-size: 8px;" rounded>
201
+ Audit
202
+ </v-btn>
203
+ Problèmes relevés par le projet
204
+ </div>
205
+ <div>
206
+ <v-btn variant="tonal" color="red" size="x-small" style="margin: 2px;font-size: 8px;" rounded>
207
+ Tanaguru
208
+ </v-btn>
209
+ Problèmes relevés par Tanaguru
210
+ </div>
211
+ </div>
212
+ </div>
213
+ `,
214
+ }
215
+ },
216
+ tags: ['!dev'],
217
+ }