@cnamts/synapse 0.0.5-alpha → 0.0.6-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 (222) hide show
  1. package/dist/design-system-v3.d.ts +481 -411
  2. package/dist/design-system-v3.js +2950 -2202
  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 +8 -8
  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/CollapsibleList/Accessibilite.stories.ts +4 -0
  15. package/src/components/CollapsibleList/AccessibiliteItems.ts +55 -62
  16. package/src/components/CollapsibleList/CollapsibleList.stories.ts +1 -1
  17. package/src/components/CookieBanner/Accessibilite.stories.ts +219 -0
  18. package/src/components/CookieBanner/AccessibiliteItems.ts +356 -0
  19. package/src/components/CookieBanner/CookieBanner.mdx +219 -0
  20. package/src/components/CookieBanner/CookieBanner.stories.ts +678 -0
  21. package/src/components/CookieBanner/CookieBanner.vue +225 -0
  22. package/src/components/CookieBanner/config.ts +38 -0
  23. package/src/components/CookieBanner/locales.ts +12 -0
  24. package/src/components/CookieBanner/tests/CookieBanner.spec.ts +129 -0
  25. package/src/components/CookieBanner/tests/__snapshots__/CookieBanner.spec.ts.snap +197 -0
  26. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +123 -0
  27. package/src/components/CookiesSelection/CookiesInformation/locales.ts +21 -0
  28. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.spec.ts +121 -0
  29. package/src/components/CookiesSelection/CookiesSelection.vue +127 -0
  30. package/src/components/CookiesSelection/CookiesTable/CookiesTable.vue +47 -0
  31. package/src/components/CookiesSelection/CookiesTable/headers.ts +14 -0
  32. package/src/components/CookiesSelection/CookiesTable/tests/CookiesTable.spec.ts +30 -0
  33. package/src/components/CookiesSelection/CookiesTable/tests/__snapshots__/CookiesTable.spec.ts.snap +3 -0
  34. package/src/components/CookiesSelection/locales.ts +10 -0
  35. package/src/components/CookiesSelection/tests/CookiesSelection.spec.ts +184 -0
  36. package/src/components/CookiesSelection/tests/__snapshots__/CookiesSelection.spec.ts.snap +192 -0
  37. package/src/components/CookiesSelection/types.ts +15 -0
  38. package/src/components/CopyBtn/AccessibiliteItems.ts +0 -30
  39. package/src/components/CopyBtn/CopyBtn.mdx +1 -1
  40. package/src/components/CopyBtn/CopyBtn.stories.ts +4 -4
  41. package/src/components/CopyBtn/CopyBtn.vue +0 -1
  42. package/src/components/Customs/SyBtnSelect/Accessibilite.mdx +14 -0
  43. package/src/components/Customs/SyBtnSelect/Accessibilite.stories.ts +193 -0
  44. package/src/components/Customs/SyBtnSelect/AccessibiliteItems.ts +139 -0
  45. package/src/components/Customs/SyBtnSelect/SyBtnSelect.mdx +3 -2
  46. package/src/components/Customs/SyBtnSelect/SyBtnSelect.stories.ts +63 -7
  47. package/src/components/Customs/SyBtnSelect/SyBtnSelect.vue +21 -13
  48. package/src/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.ts +4 -0
  49. package/src/components/Customs/SyInputSelect/Accessibilite.mdx +14 -0
  50. package/src/components/Customs/SyInputSelect/Accessibilite.stories.ts +166 -0
  51. package/src/components/Customs/SyInputSelect/AccessibiliteItems.ts +96 -0
  52. package/src/components/Customs/SyInputSelect/SyInputSelect.mdx +3 -2
  53. package/src/components/Customs/SyInputSelect/SyInputSelect.stories.ts +5 -58
  54. package/src/components/Customs/SyInputSelect/SyInputSelect.vue +36 -4
  55. package/src/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.ts +4 -0
  56. package/src/components/Customs/SySelect/Accessibilite.mdx +14 -0
  57. package/src/components/Customs/SySelect/Accessibilite.stories.ts +217 -0
  58. package/src/components/Customs/SySelect/AccessibiliteItems.ts +173 -0
  59. package/src/components/Customs/SySelect/SySelect.mdx +3 -2
  60. package/src/components/Customs/SySelect/SySelect.stories.ts +4 -58
  61. package/src/components/Customs/SySelect/SySelect.vue +35 -8
  62. package/src/components/Customs/SySelect/constants/ExpertiseLevelEnum.ts +4 -0
  63. package/src/components/Customs/SyTextField/Accessibilite.mdx +14 -0
  64. package/src/components/Customs/SyTextField/Accessibilite.stories.ts +224 -0
  65. package/src/components/Customs/SyTextField/AccessibiliteItems.ts +198 -0
  66. package/src/components/Customs/SyTextField/SyTextField.mdx +1 -1
  67. package/src/components/Customs/SyTextField/SyTextField.stories.ts +118 -7
  68. package/src/components/Customs/SyTextField/SyTextField.vue +27 -7
  69. package/src/components/Customs/SyTextField/constants/ExpertiseLevelEnum.ts +4 -0
  70. package/src/components/Customs/SyTextField/tests/__snapshots__/SyTextField.spec.ts.snap +2 -1
  71. package/src/components/DataList/Accessibilite.mdx +14 -0
  72. package/src/components/DataList/Accessibilite.stories.ts +166 -0
  73. package/src/components/DataList/AccessibiliteItems.ts +47 -0
  74. package/src/components/DataList/DataList.mdx +1 -1
  75. package/src/components/DataList/DataList.stories.ts +10 -10
  76. package/src/components/DataList/constants/ExpertiseLevelEnum.ts +4 -0
  77. package/src/components/DataListGroup/Accessibilite.mdx +14 -0
  78. package/src/components/DataListGroup/Accessibilite.stories.ts +225 -0
  79. package/src/components/DataListGroup/AccessibiliteItems.ts +79 -0
  80. package/src/components/DataListGroup/DataListGroup.mdx +1 -1
  81. package/src/components/DataListGroup/DataListGroup.stories.ts +7 -7
  82. package/src/components/DataListGroup/constants/ExpertiseLevelEnum.ts +4 -0
  83. package/src/components/DialogBox/Accessibilite.mdx +14 -0
  84. package/src/components/DialogBox/Accessibilite.stories.ts +189 -0
  85. package/src/components/DialogBox/AccessibiliteItems.ts +167 -0
  86. package/src/components/DialogBox/constants/ExpertiseLevelEnum.ts +4 -0
  87. package/src/components/DownloadBtn/AccessibiliteItems.ts +1 -31
  88. package/src/components/DownloadBtn/DownloadBtn.mdx +3 -3
  89. package/src/components/DownloadBtn/DownloadBtn.stories.ts +6 -6
  90. package/src/components/ErrorPage/Accessibilite.mdx +14 -0
  91. package/src/components/ErrorPage/Accessibilite.stories.ts +189 -0
  92. package/src/components/ErrorPage/AccessibiliteItems.ts +205 -0
  93. package/src/components/ErrorPage/constants/ExpertiseLevelEnum.ts +4 -0
  94. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +4 -4
  95. package/src/components/FooterBar/Accessibilite.mdx +14 -0
  96. package/src/components/FooterBar/Accessibilite.stories.ts +223 -0
  97. package/src/components/FooterBar/AccessibiliteItems.ts +257 -0
  98. package/src/components/FooterBar/FooterBar.mdx +2 -2
  99. package/src/components/FooterBar/FooterBar.stories.ts +14 -14
  100. package/src/components/FooterBar/FooterBar.vue +80 -73
  101. package/src/components/FooterBar/constants/ExpertiseLevelEnum.ts +4 -0
  102. package/src/components/FooterBar/tests/__snapshots__/FooterBar.spec.ts.snap +22 -20
  103. package/src/components/FranceConnectBtn/AccessibiliteItems.ts +0 -30
  104. package/src/components/FranceConnectBtn/FranceConnectBtn.mdx +1 -1
  105. package/src/components/FranceConnectBtn/FranceConnectBtn.stories.ts +3 -3
  106. package/src/components/HeaderBar/Accessibilite.mdx +14 -0
  107. package/src/components/HeaderBar/Accessibilite.stories.ts +223 -0
  108. package/src/components/HeaderBar/AccessibiliteItems.ts +194 -0
  109. package/src/components/HeaderBar/HeaderBar.vue +1 -9
  110. package/src/components/HeaderBar/HeaderBurgerMenu/Accessibilite.mdx +14 -0
  111. package/src/components/HeaderBar/HeaderBurgerMenu/Accessibilite.stories.ts +223 -0
  112. package/src/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.ts +174 -0
  113. package/src/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.ts +4 -0
  114. package/src/components/HeaderBar/constants/ExpertiseLevelEnum.ts +4 -0
  115. package/src/components/HeaderBar/tests/__snapshots__/HeaderBar.spec.ts.snap +1 -1
  116. package/src/components/HeaderLoading/Accessibilite.mdx +14 -0
  117. package/src/components/HeaderLoading/Accessibilite.stories.ts +167 -0
  118. package/src/components/HeaderLoading/AccessibiliteItems.ts +29 -0
  119. package/src/components/HeaderLoading/HeaderLoading.mdx +1 -1
  120. package/src/components/HeaderLoading/HeaderLoading.stories.ts +1 -1
  121. package/src/components/HeaderLoading/constants/ExpertiseLevelEnum.ts +4 -0
  122. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +35 -33
  123. package/src/components/HeaderToolbar/Accessibilite.mdx +14 -0
  124. package/src/components/HeaderToolbar/Accessibilite.stories.ts +203 -0
  125. package/src/components/HeaderToolbar/AccessibiliteItems.ts +200 -0
  126. package/src/components/HeaderToolbar/HeaderToolbar.mdx +1 -1
  127. package/src/components/HeaderToolbar/HeaderToolbar.stories.ts +2 -2
  128. package/src/components/HeaderToolbar/HeaderToolbar.vue +1 -0
  129. package/src/components/HeaderToolbar/constants/ExpertiseLevelEnum.ts +4 -0
  130. package/src/components/LangBtn/Accessibilite.stories.ts +3 -1
  131. package/src/components/LangBtn/AccessibiliteItems.ts +0 -31
  132. package/src/components/LangBtn/LangBtn.mdx +1 -1
  133. package/src/components/LangBtn/LangBtn.stories.ts +4 -4
  134. package/src/components/LangBtn/LangBtn.vue +3 -2
  135. package/src/components/Logo/Accessibilite.mdx +14 -0
  136. package/src/components/Logo/Accessibilite.stories.ts +223 -0
  137. package/src/components/Logo/AccessibiliteItems.ts +155 -0
  138. package/src/components/Logo/Logo.mdx +1 -1
  139. package/src/components/Logo/Logo.stories.ts +8 -8
  140. package/src/components/Logo/constants/ExpertiseLevelEnum.ts +4 -0
  141. package/src/components/LogoBrandSection/Accessibilite.mdx +14 -0
  142. package/src/components/LogoBrandSection/Accessibilite.stories.ts +223 -0
  143. package/src/components/LogoBrandSection/AccessibiliteItems.ts +194 -0
  144. package/src/components/LogoBrandSection/constants/ExpertiseLevelEnum.ts +4 -0
  145. package/src/components/MaintenancePage/Accessibilite.mdx +14 -0
  146. package/src/components/MaintenancePage/Accessibilite.stories.ts +189 -0
  147. package/src/components/MaintenancePage/AccessibiliteItems.ts +173 -0
  148. package/src/components/MaintenancePage/constants/ExpertiseLevelEnum.ts +4 -0
  149. package/src/components/NirField/Accessibilite.mdx +14 -0
  150. package/src/components/NirField/Accessibilite.stories.ts +214 -0
  151. package/src/components/NirField/AccessibiliteItems.ts +243 -0
  152. package/src/components/NirField/NirField.mdx +216 -0
  153. package/src/components/NirField/NirField.stories.ts +359 -0
  154. package/src/components/NirField/NirField.vue +450 -0
  155. package/src/components/NirField/config.ts +16 -0
  156. package/src/components/NirField/constants/ExpertiseLevelEnum.ts +4 -0
  157. package/src/components/NirField/locales.ts +12 -0
  158. package/src/components/NirField/nirValidation.ts +42 -0
  159. package/src/components/NirField/tests/NirField.spec.ts +119 -0
  160. package/src/components/NotFoundPage/Accessibilite.mdx +14 -0
  161. package/src/components/NotFoundPage/Accessibilite.stories.ts +190 -0
  162. package/src/components/NotFoundPage/AccessibiliteItems.ts +205 -0
  163. package/src/components/NotFoundPage/constants/ExpertiseLevelEnum.ts +4 -0
  164. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +4 -4
  165. package/src/components/NotificationBar/AccessibiliteItems.ts +0 -30
  166. package/src/components/NotificationBar/NotificationBar.mdx +1 -1
  167. package/src/components/PageContainer/PageContainer.mdx +1 -1
  168. package/src/components/PageContainer/PageContainer.stories.ts +4 -4
  169. package/src/components/PageContainer/PageContainer.vue +16 -15
  170. package/src/components/PageContainer/tests/PageContainer.spec.ts +1 -1
  171. package/src/components/PageContainer/tests/__snapshots__/PageContainer.spec.ts.snap +2 -2
  172. package/src/components/PhoneField/Accessibilite.mdx +14 -0
  173. package/src/components/PhoneField/Accessibilite.stories.ts +216 -0
  174. package/src/components/PhoneField/AccessibiliteItems.ts +238 -0
  175. package/src/components/PhoneField/PhoneField.mdx +1 -1
  176. package/src/components/PhoneField/PhoneField.stories.ts +2 -2
  177. package/src/components/PhoneField/PhoneField.vue +0 -1
  178. package/src/components/PhoneField/constants/ExpertiseLevelEnum.ts +4 -0
  179. package/src/components/SkipLink/Accessibilite.stories.ts +1 -1
  180. package/src/components/SkipLink/SkipLink.stories.ts +2 -2
  181. package/src/components/SocialMediaLinks/Accessibilite.mdx +14 -0
  182. package/src/components/SocialMediaLinks/Accessibilite.stories.ts +170 -0
  183. package/src/components/SocialMediaLinks/AccessibiliteItems.ts +160 -0
  184. package/src/components/SocialMediaLinks/SocialMediaLinks.mdx +1 -1
  185. package/src/components/SocialMediaLinks/SocialMediaLinks.stories.ts +1 -1
  186. package/src/components/SocialMediaLinks/constants/ExpertiseLevelEnum.ts +4 -0
  187. package/src/components/SubHeader/Accessibilite.mdx +14 -0
  188. package/src/components/SubHeader/Accessibilite.stories.ts +166 -0
  189. package/src/components/SubHeader/AccessibiliteItems.ts +146 -0
  190. package/src/components/SubHeader/SubHeader.mdx +1 -1
  191. package/src/components/SubHeader/SubHeader.stories.ts +11 -11
  192. package/src/components/SubHeader/constants/ExpertiseLevelEnum.ts +4 -0
  193. package/src/components/SyAlert/Accessibilite.mdx +14 -0
  194. package/src/components/{Alert → SyAlert}/Accessibilite.stories.ts +1 -1
  195. package/src/components/{Alert → SyAlert}/AccessibiliteItems.ts +2 -32
  196. package/src/components/{Alert/Alert.mdx → SyAlert/SyAlert.mdx} +9 -9
  197. package/src/components/{Alert/Alert.stories.ts → SyAlert/SyAlert.stories.ts} +22 -22
  198. package/src/components/SyAlert/constants/ExpertiseLevelEnum.ts +4 -0
  199. package/src/components/{Alert/tests/Alert.spec.ts → SyAlert/tests/SyAlert.spec.ts} +5 -5
  200. package/src/components/{Alert/tests/__snapshots__/Alert.spec.ts.snap → SyAlert/tests/__snapshots__/SyAlert.spec.ts.snap} +2 -2
  201. package/src/components/UserMenuBtn/Accessibilite.mdx +14 -0
  202. package/src/components/UserMenuBtn/Accessibilite.stories.ts +189 -0
  203. package/src/components/UserMenuBtn/AccessibiliteItems.ts +155 -0
  204. package/src/components/UserMenuBtn/UserMenuBtn.mdx +17 -17
  205. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +121 -19
  206. package/src/components/UserMenuBtn/UserMenuBtn.vue +25 -29
  207. package/src/components/UserMenuBtn/config.ts +1 -1
  208. package/src/components/UserMenuBtn/constants/ExpertiseLevelEnum.ts +4 -0
  209. package/src/components/index.ts +10 -4
  210. package/src/composables/rules/tests/useFieldValidation.spec.ts +60 -58
  211. package/src/composables/rules/useFieldValidation.ts +65 -28
  212. package/src/main.ts +1 -0
  213. package/src/stories/GuideDuDev/CommentUtiliserLesRules.mdx +67 -79
  214. package/src/stories/GuideDuDev/components.stories.ts +5 -5
  215. package/src/stories/GuideDuDev/moduleDeNotification.mdx +1 -1
  216. package/src/stories/Guidelines/Vuetify/Vuetify.mdx +11 -0
  217. package/src/stories/Guidelines/Vuetify/Vuetify.stories.ts +138 -0
  218. package/src/stories/Guidelines/Vuetify/VuetifyItems.ts +350 -0
  219. /package/src/components/{Alert → CookieBanner}/Accessibilite.mdx +0 -0
  220. /package/src/components/{Alert → CookieBanner}/constants/ExpertiseLevelEnum.ts +0 -0
  221. /package/src/components/{Alert/Alert.vue → SyAlert/SyAlert.vue} +0 -0
  222. /package/src/components/{Alert → SyAlert}/locales.ts +0 -0
@@ -59,7 +59,7 @@ export const Default: Story = {
59
59
  name: 'Script',
60
60
  code: `
61
61
  <script setup lang="ts">
62
- import SyTextField from '@cnamts/synapse'
62
+ import { SyTextField } from '@cnamts/synapse'
63
63
  </script>
64
64
  `,
65
65
  },
@@ -87,6 +87,117 @@ export const Default: Story = {
87
87
  },
88
88
  }
89
89
 
90
+ export const Required: Story = {
91
+ parameters: {
92
+ sourceCode: [
93
+ {
94
+ name: 'Template',
95
+ code: `
96
+ <template>
97
+ <SyTextField
98
+ v-model="value"
99
+ required
100
+ />
101
+ </template>
102
+ `,
103
+ },
104
+ {
105
+ name: 'Script',
106
+ code: `
107
+ <script setup lang="ts">
108
+ import { SyTextField } from '@cnamts/synapse'
109
+ </script>
110
+ `,
111
+ },
112
+ ],
113
+ },
114
+ args: {
115
+ showDivider: false,
116
+ variantStyle: 'outlined',
117
+ color: 'primary',
118
+ isClearable: true,
119
+ label: 'Label',
120
+ required: true,
121
+ },
122
+ render: (args) => {
123
+ return {
124
+ components: { SyTextField, VIcon },
125
+ setup() {
126
+ return { args }
127
+ },
128
+ template: `
129
+ <div class="d-flex flex-wrap align-center pa-4">
130
+ <SyTextField v-bind="args" />
131
+ </div>
132
+ `,
133
+ }
134
+ },
135
+ }
136
+
137
+ export const WithCustomError: Story = {
138
+ parameters: {
139
+ sourceCode: [
140
+ {
141
+ name: 'Template',
142
+ code: `
143
+ <template>
144
+ <SyTextField
145
+ v-model="value"
146
+ :error-messages="errorMessages"
147
+ />
148
+ <VBtn @click="triggerError">
149
+ Trigger Error
150
+ </VBtn>
151
+ </template>
152
+ `,
153
+ },
154
+ {
155
+ name: 'Script',
156
+ code: `
157
+ <script setup lang="ts">
158
+ import { SyTextField } from '@cnamts/synapse'
159
+
160
+ const errorMessages = ref([])
161
+
162
+ const triggerError = () => {
163
+ errorMessages.value = ['This is a test error message']
164
+ }
165
+ </script>
166
+ `,
167
+ },
168
+ ],
169
+ },
170
+ args: {
171
+ showDivider: false,
172
+ variantStyle: 'outlined',
173
+ color: 'primary',
174
+ isClearable: true,
175
+ label: 'Label',
176
+ required: false,
177
+ },
178
+ render: (args) => {
179
+ return {
180
+ components: { SyTextField, VIcon },
181
+ setup() {
182
+ const errorMessages = ref([])
183
+ const triggerError = () => {
184
+ // @ts-expect-error test error message
185
+ errorMessages.value = ['This is a test error message']
186
+ }
187
+ return { args, errorMessages, triggerError }
188
+ },
189
+ template: `
190
+ <div class="d-flex flex-wrap align-center pa-4">
191
+ <SyTextField v-bind="args" :error-messages="errorMessages" />
192
+ </div>
193
+ <VBtn class="ml-8" @click="triggerError">
194
+ Trigger Error
195
+ </VBtn>
196
+ `,
197
+ }
198
+ },
199
+ }
200
+
90
201
  export const SlotPrepend: Story = {
91
202
  parameters: {
92
203
  sourceCode: [
@@ -105,7 +216,7 @@ export const SlotPrepend: Story = {
105
216
  name: 'Script',
106
217
  code: `
107
218
  <script setup lang="ts">
108
- import SyTextField from '@cnamts/synapse'
219
+ import { SyTextField } from '@cnamts/synapse'
109
220
  </script>
110
221
  `,
111
222
  },
@@ -156,7 +267,7 @@ export const SlotAppend: Story = {
156
267
  name: 'Script',
157
268
  code: `
158
269
  <script setup lang="ts">
159
- import SyTextField from '@cnamts/synapse'
270
+ import { SyTextField } from '@cnamts/synapse'
160
271
  </script>
161
272
  `,
162
273
  },
@@ -206,7 +317,7 @@ export const SlotPrependInner: Story = {
206
317
  name: 'Script',
207
318
  code: `
208
319
  <script setup lang="ts">
209
- import SyTextField from '@cnamts/synapse'
320
+ import { SyTextField } from '@cnamts/synapse'
210
321
  </script>
211
322
  `,
212
323
  },
@@ -257,7 +368,7 @@ export const SlotPrependInnerDivider: Story = {
257
368
  name: 'Script',
258
369
  code: `
259
370
  <script setup lang="ts">
260
- import SyTextField from '@cnamts/synapse'
371
+ import { SyTextField } from '@cnamts/synapse'
261
372
  </script>
262
373
  `,
263
374
  },
@@ -308,7 +419,7 @@ export const SlotAppendInner: Story = {
308
419
  name: 'Script',
309
420
  code: `
310
421
  <script setup lang="ts">
311
- import SyTextField from '@cnamts/synapse'
422
+ import { SyTextField } from '@cnamts/synapse'
312
423
  </script>
313
424
  `,
314
425
  },
@@ -361,7 +472,7 @@ export const SlotCustomIcon: Story = {
361
472
  name: 'Script',
362
473
  code: `
363
474
  <script setup lang="ts">
364
- import SyTextField from '@cnamts/synapse'
475
+ import { SyTextField } from '@cnamts/synapse'
365
476
  import { mdiAccountBox } from '@mdi/js'
366
477
 
367
478
  const iconName = mdiAccountBox
@@ -1,4 +1,4 @@
1
- <script setup lang="ts">
1
+ <script lang="ts" setup>
2
2
  import { computed, ref } from 'vue'
3
3
  import type { IconType, VariantStyle, ColorType } from './types'
4
4
  import {
@@ -22,6 +22,8 @@
22
22
  isClearable?: boolean
23
23
  showDivider?: boolean
24
24
  label?: string
25
+ required?: boolean
26
+ errorMessages?: string[]
25
27
  }>(),
26
28
  {
27
29
  variantStyle: 'outlined', // Remplacez par la valeur par défaut souhaitée
@@ -37,6 +39,15 @@
37
39
  }
38
40
 
39
41
  const model = ref('')
42
+ const isBlurred = ref(false)
43
+
44
+ const hasError = computed(() => {
45
+ return (props.required && isBlurred.value && !model.value) || (props.errorMessages && props.errorMessages.length > 0)
46
+ })
47
+
48
+ const checkErrorOnBlur = () => {
49
+ isBlurred.value = true
50
+ }
40
51
 
41
52
  const appendInnerIconColor = computed(() => {
42
53
  return props.appendInnerIcon === 'error' || props.appendInnerIcon === 'success'
@@ -59,12 +70,15 @@
59
70
  <template>
60
71
  <VTextField
61
72
  v-model="model"
62
- :variant="props.variantStyle"
63
- :color="props.color"
64
- :clearable="props.isClearable"
65
- :clear-icon="ICONS.close"
66
73
  :aria-label="props.label"
74
+ :clear-icon="ICONS.close"
75
+ :clearable="props.isClearable"
76
+ :color="props.color"
77
+ :error-messages="props.errorMessages"
67
78
  :label="props.label"
79
+ :rules="props.required ? ['Le champ est requis.'] : []"
80
+ :variant="props.variantStyle"
81
+ @blur="checkErrorOnBlur"
68
82
  >
69
83
  <template #prepend>
70
84
  <slot name="prepend">
@@ -91,20 +105,26 @@
91
105
  </slot>
92
106
  <VDivider
93
107
  v-if="props.showDivider"
94
- v-bind="dividerProps"
95
108
  class="mt-4 pa-1"
109
+ v-bind="dividerProps"
96
110
  vertical
97
111
  />
98
112
  </template>
99
113
  <template #append-inner>
100
114
  <slot name="append-inner">
115
+ <VIcon v-if="hasError">
116
+ {{ mdiInformation }}
117
+ </VIcon>
101
118
  <VIcon
102
119
  v-if="props.appendInnerIcon"
103
- :icon="ICONS[props.appendInnerIcon]"
104
120
  :class="{ 'error-icon': props.appendInnerIcon === 'error' }"
105
121
  :color="appendInnerIconColor"
122
+ :icon="ICONS[props.appendInnerIcon]"
106
123
  />
107
124
  </slot>
108
125
  </template>
126
+ <template #details>
127
+ <slot name="details" />
128
+ </template>
109
129
  </VTextField>
110
130
  </template>
@@ -0,0 +1,4 @@
1
+ export enum ExpertiseLevelEnum {
2
+ DEV = 'dev',
3
+ DESIGN = 'design',
4
+ }
@@ -35,7 +35,8 @@ exports[`SyTextField > matches snapshot 1`] = `
35
35
  <transition-stub name="expand-x-transition" appear="false" persisted="false" css="true">
36
36
  <div class="v-field__clearable" style="display: none;"><i class="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z mdi v-icon notranslate v-theme--light v-icon--size-default v-icon--clickable" role="button" aria-hidden="false" tabindex="0" aria-label="Clear "></i></div>
37
37
  </transition-stub>
38
- <div class="v-field__append-inner"><i class="M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z mdi v-icon notranslate v-theme--light v-icon--size-default text-error error-icon" aria-hidden="true"></i>
38
+ <div class="v-field__append-inner">
39
+ <!--v-if--><i class="M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z mdi v-icon notranslate v-theme--light v-icon--size-default text-error error-icon" aria-hidden="true"></i>
39
40
  <!---->
40
41
  </div>
41
42
  <div class="v-field__outline">
@@ -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,166 @@
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/Données/DataList/Accessibilité',
12
+ }
13
+
14
+ export const AccessibilitePanel: StoryObj = {
15
+
16
+ render: () => {
17
+ return {
18
+ components: { VExpansionPanels, VExpansionPanel, VExpansionPanelTitle, VExpansionPanelText, VDataTable, VIcon },
19
+
20
+ setup() {
21
+ const icon = checkIcon
22
+
23
+ return { AccessibiliteItemsIndeterminate, AccessibiliteItemsValidated, icon, linkICon, iconEye }
24
+ },
25
+ template: `
26
+ <div class="accessibiliteItems" style="display:flex; max-width: none !important;">
27
+ <v-col cols="6">
28
+ <div style="display:flex; margin-bottom: 10px; justify-content: space-between; align-items: center;">
29
+ <h5>{{ AccessibiliteItemsIndeterminate.length }} critères à prendre en charge par le projet</h5>
30
+ <div style="display: flex; align-items: center;">
31
+ <v-btn variant="tonal" color="red" size="x-small" style="margin: 4px;font-size: 8px;"
32
+ rounded>Tanaguru
33
+ </v-btn>
34
+ </div>
35
+ </div>
36
+
37
+ <v-expansion-panels value="opened" multiple>
38
+ <v-expansion-panel v-for="(item, index) in AccessibiliteItemsIndeterminate" :key="index" 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
+ <v-expansion-panel>
46
+ <v-expansion-panel-title
47
+ style="font-weight: bold; font-size: 13px; line-height: 16px;">
48
+ {{ item.subtitle }}
49
+ </v-expansion-panel-title>
50
+ <v-expansion-panel-text>
51
+ <div v-for="(value, i) in item.items" :key="i">
52
+ <p style="font-size: 13px;line-height: 16px;">
53
+ {{ value.precision }}
54
+ </p>
55
+ <div v-for="element in value.solution"
56
+ style="margin-top:15px; font-size: 13px;line-height: 16px;">
57
+ <p style="font-weight: bold;">Méthodologie du test : <a
58
+ href="value.link" target="blank">
59
+ <VIcon :icon="linkICon"/>
60
+ </a></p>
61
+
62
+ <p>{{ element.info1 }}</p>
63
+ <p>{{ element.info2 }}</p>
64
+ <p>{{ element.info3 }}</p>
65
+
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-panels>
72
+ </v-expansion-panel-text>
73
+ </v-expansion-panel>
74
+ </v-expansion-panels>
75
+ </v-col>
76
+ <v-col cols="6">
77
+ <div style="display:flex; margin-bottom: 10px; justify-content: space-between; align-items: center;">
78
+ <h5>{{ AccessibiliteItemsValidated.length }} critères pris en charge par l'équipe Design System</h5>
79
+ <div style="display: flex; align-items: center;">
80
+ <v-btn variant="tonal" color="red" size="x-small" style="margin: 4px;font-size: 8px;"
81
+ rounded>Tanaguru
82
+ </v-btn>
83
+ </div>
84
+ </div>
85
+ <v-expansion-panels value="opened" multiple>
86
+ <v-expansion-panel
87
+ v-for="(item, index) in AccessibiliteItemsValidated"
88
+ :key="index" style="background-color: rgba(53,135,0,0.1); margin-bottom: 10px;">
89
+ <v-expansion-panel-title>
90
+ <VIcon color="green" :icon="icon" style="margin-right: 5px;"/>
91
+ {{ item.title }}
92
+ </v-expansion-panel-title>
93
+ <v-expansion-panel-text>
94
+ <v-expansion-panels>
95
+ <v-expansion-panel>
96
+ <v-expansion-panel-title style="font-weight: bold;font-size: 13px; line-height: 16px;">
97
+ {{ item.subtitle }}
98
+ </v-expansion-panel-title>
99
+ <v-expansion-panel-text>
100
+ <div v-for="(value, i) in item.items" :key="i">
101
+ <p style="font-size: 13px;line-height: 16px;">
102
+ {{ value.precision }}
103
+ </p>
104
+ <div v-for="element in value.solution"
105
+ style="margin-top:15px; font-size: 13px;line-height: 16px;">
106
+ <p style="font-weight: bold;">Méthodologie du test : <a
107
+ href="value.link" target="blank">
108
+ <VIcon :icon="linkICon"/>
109
+ </a></p>
110
+ <p>{{ element.info1 }}</p>
111
+ <p>{{ element.info2 }}</p>
112
+ <p>{{ element.info3 }}</p>
113
+ </div>
114
+ <span style="display:flex; justify-content:center; margin-bottom:5px;">______</span>
115
+ </div>
116
+ </v-expansion-panel-text>
117
+ </v-expansion-panel>
118
+ </v-expansion-panels>
119
+ </v-expansion-panel-text>
120
+ </v-expansion-panel>
121
+ </v-expansion-panels>
122
+ </v-col>
123
+ </div>
124
+ `,
125
+ }
126
+ },
127
+ tags: ['!dev'],
128
+ }
129
+
130
+ export const Legende: StoryObj = {
131
+ args: {
132
+ icon: checkIcon,
133
+ },
134
+ render: (args) => {
135
+ return {
136
+ components: { VIcon },
137
+ setup() {
138
+ return { args }
139
+ },
140
+ template: `
141
+ <p style="color: grey;font-size: 11px; margin-bottom: 12px;">Date de conception: 20/11/2024</p>
142
+ <div>
143
+ <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>
144
+ <p style="margin-bottom: 12px;font-weight:bold;">Pour rappel le composant seul ne garantie pas
145
+ l'accessibilité du site.</p>
146
+ <div style="font-size: 14px">
147
+ <p>Nous avons deux façons de relever les problèmes d'accessibilité des composants :</p>
148
+ <div>
149
+ <v-btn variant="tonal" color="grey" size="x-small" style="margin: 2px;font-size: 8px;" rounded>
150
+ Audit
151
+ </v-btn>
152
+ Problèmes relevés par le projet
153
+ </div>
154
+ <div>
155
+ <v-btn variant="tonal" color="red" size="x-small" style="margin: 2px;font-size: 8px;" rounded>
156
+ Tanaguru
157
+ </v-btn>
158
+ Problèmes relevés par Tanaguru
159
+ </div>
160
+ </div>
161
+ </div>
162
+ `,
163
+ }
164
+ },
165
+ tags: ['!dev'],
166
+ }
@@ -0,0 +1,47 @@
1
+ import { ExpertiseLevelEnum } from './constants/ExpertiseLevelEnum'
2
+
3
+ export const AccessibiliteItemsIndeterminate = [
4
+ {
5
+ title: 'Catégorie 3 : Couleurs',
6
+ subtitle: '3.1 Dans chaque page web, l’information ne doit pas être donnée uniquement par la couleur. Cette règle est-elle respectée ?',
7
+ items: [
8
+ {
9
+ precision: '3.1.2 Pour chaque indication de couleur donnée par un texte, l’information ne doit pas être donnée uniquement par la couleur. Cette règle est-elle respectée ?',
10
+ link: 'https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#3.1.2',
11
+ solution: [{
12
+ 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 ;',
13
+ 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.',
14
+ info3: '3. Si c’est le cas pour chaque texte, le test est validé',
15
+ }],
16
+ expertise: ExpertiseLevelEnum.DEV,
17
+
18
+ },
19
+
20
+ ],
21
+ },
22
+
23
+ ]
24
+
25
+ export const AccessibiliteItemsValidated = [
26
+
27
+ {
28
+ title: 'Catégorie 3 : Couleurs',
29
+ 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é?',
30
+ items: [
31
+ {
32
+
33
+ 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.',
34
+ link: 'https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#3.2.1',
35
+ solution: [{
36
+ 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 ;',
37
+ 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.',
38
+ info3: '3. Si c’est le cas pour chaque texte, le test est validé',
39
+ }],
40
+ expertise: ExpertiseLevelEnum.DESIGN,
41
+
42
+ },
43
+
44
+ ],
45
+ },
46
+
47
+ ]
@@ -17,7 +17,7 @@ L’élément `DataList` est utilisé pour afficher une liste d’informations.
17
17
 
18
18
  <Source dark code={`
19
19
  <script setup lang="ts">
20
- import DataList from '@cnamts/synapse'
20
+ import { DataList } from '@cnamts/synapse'
21
21
 
22
22
  const items = [
23
23
  {
@@ -42,7 +42,7 @@ export const Default: Story = {
42
42
  name: 'Script',
43
43
  code: `
44
44
  <script setup lang="ts">
45
- import DataList from '@cnamts/synapse'
45
+ import { DataList } from '@cnamts/synapse'
46
46
 
47
47
  const items = [
48
48
  {
@@ -145,7 +145,7 @@ export const Row: Story = {
145
145
  name: 'Script',
146
146
  code: `
147
147
  <script setup lang="ts">
148
- import DataList from '@cnamts/synapse'
148
+ import { DataList } from '@cnamts/synapse'
149
149
 
150
150
  const items = [
151
151
  {
@@ -236,7 +236,7 @@ export const Title: Story = {
236
236
  name: 'Script',
237
237
  code: `
238
238
  <script setup lang="ts">
239
- import DataList from '@cnamts/synapse'
239
+ import { DataList } from '@cnamts/synapse'
240
240
 
241
241
  const items = [
242
242
  {
@@ -327,7 +327,7 @@ export const Icons: Story = {
327
327
  name: 'Script',
328
328
  code: `
329
329
  <script setup lang="ts">
330
- import DataList from '@cnamts/synapse'
330
+ import { DataList } from '@cnamts/synapse'
331
331
  import { mdiCalendar, mdiAccount, mdiInformationOutline } from '@mdi/js'
332
332
 
333
333
  const icons = {
@@ -420,7 +420,7 @@ export const ActionBtn: Story = {
420
420
  name: 'Script',
421
421
  code: `
422
422
  <script setup lang="ts">
423
- import DataList from '@cnamts/synapse'
423
+ import { DataList } from '@cnamts/synapse'
424
424
 
425
425
  const items = [
426
426
  {
@@ -501,7 +501,7 @@ export const Chips: Story = {
501
501
  name: 'Script',
502
502
  code: `
503
503
  <script setup lang="ts">
504
- import DataList from '@cnamts/synapse'
504
+ import { DataList } from '@cnamts/synapse'
505
505
 
506
506
  const items = [
507
507
  {
@@ -602,7 +602,7 @@ export const HtmlValue: Story = {
602
602
  name: 'Script',
603
603
  code: `
604
604
  <script setup lang="ts">
605
- import DataList from '@cnamts/synapse'
605
+ import { DataList } from '@cnamts/synapse'
606
606
 
607
607
  const items = [
608
608
  {
@@ -681,7 +681,7 @@ export const Loading: Story = {
681
681
  name: 'Script',
682
682
  code: `
683
683
  <script setup lang="ts">
684
- import DataList from '@cnamts/synapse'
684
+ import { DataList } from '@cnamts/synapse'
685
685
 
686
686
  const items = [
687
687
  {
@@ -770,7 +770,7 @@ export const SlotTitle: Story = {
770
770
  name: 'Script',
771
771
  code: `
772
772
  <script setup lang="ts">
773
- import DataList from '@cnamts/synapse'
773
+ import { DataList } from '@cnamts/synapse'
774
774
 
775
775
  const items = [
776
776
  {
@@ -858,7 +858,7 @@ export const Customisation: Story = {
858
858
  name: 'Script',
859
859
  code: `
860
860
  <script setup lang="ts">
861
- import DataList from '@cnamts/synapse'
861
+ import { DataList } from '@cnamts/synapse'
862
862
  import { mdiAccount, mdiCalendar, mdiInformationOutline } from '@mdi/js'
863
863
 
864
864
  const items = [
@@ -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 />