@cnamts/synapse 0.0.7-alpha → 0.0.9-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 (198) hide show
  1. package/dist/design-system-v3.d.ts +785 -372
  2. package/dist/design-system-v3.js +4993 -3357
  3. package/dist/design-system-v3.umd.cjs +1 -10
  4. package/dist/style.css +1 -1
  5. package/package.json +10 -2
  6. package/src/assets/settings.scss +2 -2
  7. package/src/assets/tokens.scss +107 -112
  8. package/src/components/BackBtn/BackBtn.vue +4 -4
  9. package/src/components/BackToTopBtn/BackToTopBtn.vue +1 -0
  10. package/src/components/CollapsibleList/CollapsibleList.mdx +1 -1
  11. package/src/components/CollapsibleList/CollapsibleList.vue +43 -44
  12. package/src/components/ContextualMenu/Accessibilite.mdx +14 -0
  13. package/src/components/ContextualMenu/Accessibilite.stories.ts +191 -0
  14. package/src/components/ContextualMenu/AccessibiliteItems.ts +89 -0
  15. package/src/components/ContextualMenu/ContextualMenu.mdx +118 -0
  16. package/src/components/ContextualMenu/ContextualMenu.stories.ts +430 -0
  17. package/src/components/ContextualMenu/ContextualMenu.vue +101 -0
  18. package/src/components/ContextualMenu/constants/ExpertiseLevelEnum.ts +4 -0
  19. package/src/components/ContextualMenu/tests/ContextualMenu.spec.ts +115 -0
  20. package/src/components/ContextualMenu/tests/__snapshots__/ContextualMenu.spec.ts.snap +10 -0
  21. package/src/components/ContextualMenu/types.ts +5 -0
  22. package/src/components/CookieBanner/CookieBanner.stories.ts +1 -2
  23. package/src/components/CookieBanner/CookieBanner.vue +13 -10
  24. package/src/components/CookieBanner/tests/__snapshots__/CookieBanner.spec.ts.snap +17 -15
  25. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +6 -1
  26. package/src/components/CookiesSelection/CookiesInformation/locales.ts +1 -0
  27. package/src/components/CookiesSelection/CookiesTable/CookiesTable.vue +1 -0
  28. package/src/components/CookiesSelection/tests/__snapshots__/CookiesSelection.spec.ts.snap +17 -15
  29. package/src/components/CopyBtn/CopyBtn.vue +7 -7
  30. package/src/components/Customs/SyBtnSelect/SyBtnSelect.vue +26 -26
  31. package/src/components/Customs/SyInputSelect/SyInputSelect.vue +24 -24
  32. package/src/components/Customs/SySelect/SySelect.stories.ts +7 -7
  33. package/src/components/Customs/SySelect/SySelect.vue +36 -30
  34. package/src/components/Customs/SySelect/tests/SySelect.spec.ts +2 -2
  35. package/src/components/Customs/SyTextField/SyTextField.stories.ts +187 -2
  36. package/src/components/Customs/SyTextField/SyTextField.vue +185 -16
  37. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +2 -4
  38. package/src/components/Customs/SyTextField/tests/__snapshots__/SyTextField.spec.ts.snap +18 -16
  39. package/src/components/Customs/SyTextField/types.d.ts +2 -2
  40. package/src/components/DataList/DataList.stories.ts +3 -2
  41. package/src/components/DataList/DataList.vue +1 -1
  42. package/src/components/DataListGroup/DataListGroup.stories.ts +3 -2
  43. package/src/components/DataListItem/DataListItem.vue +12 -12
  44. package/src/components/DatePicker/DatePicker.mdx +191 -0
  45. package/src/components/DatePicker/DatePicker.stories.ts +787 -0
  46. package/src/components/DatePicker/DatePicker.vue +560 -0
  47. package/src/components/DatePicker/DateTextInput.vue +409 -0
  48. package/src/components/DatePicker/tests/DatePicker.spec.ts +266 -0
  49. package/src/components/DialogBox/DialogBox.mdx +28 -2
  50. package/src/components/DialogBox/DialogBox.stories.ts +2 -2
  51. package/src/components/DialogBox/DialogBox.vue +3 -2
  52. package/src/components/DownloadBtn/DownloadBtn.vue +2 -1
  53. package/src/components/ExternalLinks/Accessibilite.mdx +14 -0
  54. package/src/components/ExternalLinks/Accessibilite.stories.ts +191 -0
  55. package/src/components/ExternalLinks/AccessibiliteItems.ts +197 -0
  56. package/src/components/ExternalLinks/ExternalLinks.mdx +86 -0
  57. package/src/components/ExternalLinks/ExternalLinks.stories.ts +553 -0
  58. package/src/components/ExternalLinks/ExternalLinks.vue +200 -0
  59. package/src/components/ExternalLinks/config.ts +34 -0
  60. package/src/components/ExternalLinks/constants/ExpertiseLevelEnum.ts +4 -0
  61. package/src/components/ExternalLinks/locales.ts +4 -0
  62. package/src/components/ExternalLinks/tests/ExternalLinks.spec.ts +154 -0
  63. package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +159 -0
  64. package/src/components/FileUpload/FileUpload.mdx +165 -0
  65. package/src/components/FileUpload/FileUpload.stories.ts +429 -0
  66. package/src/components/FileUpload/FileUpload.vue +195 -0
  67. package/src/components/FileUpload/FileUploadContent.vue +109 -0
  68. package/src/components/FileUpload/locales.ts +10 -0
  69. package/src/components/FileUpload/tests/FileUpload.spec.ts +332 -0
  70. package/src/components/FileUpload/tests/__snapshots__/FileUpload.spec.ts.snap +7 -0
  71. package/src/components/FileUpload/useFileDrop.ts +23 -0
  72. package/src/components/FileUpload/validateFiles.ts +39 -0
  73. package/src/components/FooterBar/FooterBar.vue +105 -80
  74. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +14 -13
  75. package/src/components/HeaderBar/HeaderBar.vue +3 -3
  76. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.vue +11 -7
  77. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +5 -5
  78. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.vue +2 -2
  79. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +10 -8
  80. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +2 -2
  81. package/src/components/HeaderBar/HeaderLogo/logos/Logo-mobile.vue +2 -1
  82. package/src/components/HeaderBar/HeaderLogo/logos/Logo.vue +2 -1
  83. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +10 -10
  84. package/src/components/HeaderBar/consts.scss +1 -1
  85. package/src/components/HeaderLoading/HeaderLoading.vue +12 -11
  86. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +2 -1
  87. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +9 -9
  88. package/src/components/HeaderToolbar/HeaderToolbar.vue +215 -202
  89. package/src/components/LangBtn/LangBtn.vue +8 -6
  90. package/src/components/LogoBrandSection/LogoBrandSection.stories.ts +2 -2
  91. package/src/components/NirField/NirField.stories.ts +8 -8
  92. package/src/components/NirField/NirField.vue +46 -48
  93. package/src/components/NotFoundPage/NotFoundPage.stories.ts +33 -2
  94. package/src/components/NotFoundPage/NotFoundPage.vue +17 -0
  95. package/src/components/NotificationBar/NotificationBar.mdx +5 -5
  96. package/src/components/NotificationBar/NotificationBar.stories.ts +410 -314
  97. package/src/components/NotificationBar/NotificationBar.vue +43 -41
  98. package/src/components/PageContainer/PageContainer.vue +4 -4
  99. package/src/components/PasswordField/Accessibilite.mdx +14 -0
  100. package/src/components/PasswordField/Accessibilite.stories.ts +191 -0
  101. package/src/components/PasswordField/AccessibiliteItems.ts +184 -0
  102. package/src/components/PasswordField/PasswordField.mdx +70 -0
  103. package/src/components/PasswordField/PasswordField.stories.ts +213 -0
  104. package/src/components/PasswordField/PasswordField.vue +189 -0
  105. package/src/components/PasswordField/config.ts +11 -0
  106. package/src/components/PasswordField/constants/ExpertiseLevelEnum.ts +4 -0
  107. package/src/components/PasswordField/locales.ts +4 -0
  108. package/src/components/PasswordField/tests/PasswordField.spec.ts +96 -0
  109. package/src/components/PhoneField/PhoneField.mdx +0 -2
  110. package/src/components/PhoneField/PhoneField.stories.ts +10 -50
  111. package/src/components/PhoneField/PhoneField.vue +77 -93
  112. package/src/components/PhoneField/tests/PhoneField.spec.ts +0 -15
  113. package/src/components/RangeField/RangeField.mdx +54 -0
  114. package/src/components/RangeField/RangeField.stories.ts +189 -0
  115. package/src/components/RangeField/RangeField.vue +157 -0
  116. package/src/components/RangeField/RangeSlider/RangeSlider.vue +387 -0
  117. package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +64 -0
  118. package/src/components/RangeField/RangeSlider/tests/__snapshots__/rangeSlider.spec.ts.snap +27 -0
  119. package/src/components/RangeField/RangeSlider/tests/rangeSlider.spec.ts +100 -0
  120. package/src/components/RangeField/RangeSlider/tests/useDoubleSlider.spec.ts +246 -0
  121. package/src/components/RangeField/RangeSlider/tests/useMouseSlide.spec.ts +204 -0
  122. package/src/components/RangeField/RangeSlider/tests/useThumb.spec.ts +22 -0
  123. package/src/components/RangeField/RangeSlider/tests/useThumbKeyboard.spec.ts +233 -0
  124. package/src/components/RangeField/RangeSlider/tests/useTooltipsNudge.spec.ts +150 -0
  125. package/src/components/RangeField/RangeSlider/tests/useTrack.spec.ts +314 -0
  126. package/src/components/RangeField/RangeSlider/tests/vAnimateClick.spec.ts +32 -0
  127. package/src/components/RangeField/RangeSlider/types.ts +15 -0
  128. package/src/components/RangeField/RangeSlider/useMouseSlide.ts +109 -0
  129. package/src/components/RangeField/RangeSlider/useRangeSlider.ts +126 -0
  130. package/src/components/RangeField/RangeSlider/useThumb.ts +18 -0
  131. package/src/components/RangeField/RangeSlider/useThumbKeyboard.ts +84 -0
  132. package/src/components/RangeField/RangeSlider/useTooltipsNudge.ts +92 -0
  133. package/src/components/RangeField/RangeSlider/useTrack.ts +116 -0
  134. package/src/components/RangeField/RangeSlider/vAnimateClick.ts +19 -0
  135. package/src/components/RangeField/config.ts +7 -0
  136. package/src/components/RangeField/locales.ts +4 -0
  137. package/src/components/RangeField/tests/RangeField.spec.ts +224 -0
  138. package/src/components/RangeField/tests/__snapshots__/RangeField.spec.ts.snap +379 -0
  139. package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +205 -0
  140. package/src/components/RatingPicker/EmotionPicker/locales.ts +3 -0
  141. package/src/components/RatingPicker/EmotionPicker/tests/EmotionPicker.spec.ts +104 -0
  142. package/src/components/RatingPicker/EmotionPicker/tests/__snapshots__/EmotionPicker.spec.ts.snap +66 -0
  143. package/src/components/RatingPicker/NumberPicker/NumberPicker.vue +159 -0
  144. package/src/components/RatingPicker/NumberPicker/locales.ts +4 -0
  145. package/src/components/RatingPicker/NumberPicker/tests/NumberPicker.spec.ts +73 -0
  146. package/src/components/RatingPicker/NumberPicker/tests/__snapshots__/NumberPicker.spec.ts.snap +105 -0
  147. package/src/components/RatingPicker/Rating.ts +45 -0
  148. package/src/components/RatingPicker/RatingPicker.mdx +56 -0
  149. package/src/components/RatingPicker/RatingPicker.stories.ts +515 -0
  150. package/src/components/RatingPicker/RatingPicker.vue +122 -0
  151. package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +116 -0
  152. package/src/components/RatingPicker/StarsPicker/tests/StarsPicker.spec.ts +95 -0
  153. package/src/components/RatingPicker/StarsPicker/tests/__snapshots__/StarsPicker.spec.ts.snap +36 -0
  154. package/src/components/RatingPicker/locales.ts +3 -0
  155. package/src/components/RatingPicker/tests/Rating.spec.ts +104 -0
  156. package/src/components/RatingPicker/tests/RatingPicker.spec.ts +187 -0
  157. package/src/components/RatingPicker/tests/__snapshots__/RatingPicker.spec.ts.snap +108 -0
  158. package/src/components/SearchListField/SearchListField.mdx +74 -0
  159. package/src/components/SearchListField/SearchListField.stories.ts +126 -0
  160. package/src/components/SearchListField/SearchListField.vue +194 -0
  161. package/src/components/SearchListField/locales.ts +5 -0
  162. package/src/components/SearchListField/tests/SearchListField.spec.ts +323 -0
  163. package/src/components/SearchListField/types.d.ts +4 -0
  164. package/src/components/SelectBtnField/SelectBtnField.mdx +50 -0
  165. package/src/components/SelectBtnField/SelectBtnField.stories.ts +763 -0
  166. package/src/components/SelectBtnField/SelectBtnField.vue +283 -0
  167. package/src/components/SelectBtnField/config.ts +11 -0
  168. package/src/components/SelectBtnField/tests/SelectBtnField.spec.ts +327 -0
  169. package/src/components/SelectBtnField/tests/__snapshots__/SelectBtnField.spec.ts.snap +125 -0
  170. package/src/components/SelectBtnField/types.d.ts +11 -0
  171. package/src/components/SkipLink/SkipLink.vue +10 -10
  172. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +28 -26
  173. package/src/components/SubHeader/SubHeader.vue +32 -31
  174. package/src/components/SyAlert/SyAlert.vue +12 -12
  175. package/src/components/UserMenuBtn/UserMenuBtn.vue +1 -1
  176. package/src/components/UserMenuBtn/config.ts +1 -1
  177. package/src/components/index.ts +17 -7
  178. package/src/composables/rules/useFieldValidation.ts +172 -44
  179. package/src/designTokens/index.ts +6 -4
  180. package/src/designTokens/{bootstrapColors.md → paColors.md} +1 -1
  181. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +2 -0
  182. package/src/designTokens/tokens/pa/paColors.ts +171 -0
  183. package/src/designTokens/tokens/pa/paContextual.ts +58 -0
  184. package/src/designTokens/tokens/pa/paDarkTheme.ts +5 -0
  185. package/src/designTokens/tokens/pa/paLightTheme.ts +123 -0
  186. package/src/designTokens/tokens/pa/paSemantic.ts +87 -0
  187. package/src/stories/Fondamentaux/CustomisationEtThemes.mdx +52 -2
  188. package/src/stories/GuideDuDev/CreerUneIssue.mdx +64 -0
  189. package/src/stories/GuideDuDev/{CommentUtiliserLesRules.mdx → UtiliserLesRules.mdx} +2 -2
  190. package/src/stories/GuideDuDev/components.stories.ts +9 -7
  191. package/src/stories/Guidelines/Vuetify/Vuetify.stories.ts +163 -88
  192. package/src/stories/Guidelines/Vuetify/VuetifyItems.ts +250 -23
  193. package/src/temp/TestDTComponent.vue +5 -6
  194. package/src/utils/calcHumanFileSize/index.ts +12 -0
  195. package/src/utils/calcHumanFileSize/tests/calcHumanFileSize.spec.ts +21 -0
  196. package/src/designTokens/tokens/bootstrap/bootstrapColors.ts +0 -158
  197. package/src/designTokens/tokens/bootstrap/bootstrapLightTheme.ts +0 -22
  198. package/src/stories/GuideDuDev/CommentContribuer.mdx +0 -22
@@ -158,7 +158,6 @@
158
158
  </template>
159
159
 
160
160
  <style lang="scss" scoped>
161
-
162
161
  .vd-cookie-banner {
163
162
  position: fixed;
164
163
  left: 50%;
@@ -176,16 +175,17 @@
176
175
  display: flex;
177
176
  flex-direction: column;
178
177
  width: 100%;
179
- background: transparent;
178
+ background: transparent;
180
179
  }
181
180
 
182
181
  .vd-cookie-banner-content {
183
182
  overflow-y: auto;
184
183
  padding-right: 8px;
185
- background: transparent;
186
- div {
187
- background: transparent;
188
- }
184
+ background: transparent;
185
+
186
+ div {
187
+ background: transparent;
188
+ }
189
189
  }
190
190
 
191
191
  .vd-cookie-banner-action-ctn .v-btn {
@@ -193,12 +193,13 @@
193
193
  }
194
194
 
195
195
  .v-btn--icon {
196
- color: rgba(0, 0, 0, 0.54);
196
+ color: rgb(0 0 0 / 54%);
197
197
  position: absolute;
198
198
  right: 24px;
199
199
  }
200
200
 
201
- .height-enter-active, .height-leave-active {
201
+ .height-enter-active,
202
+ .height-leave-active {
202
203
  box-sizing: border-box;
203
204
  transition: height 2s ease;
204
205
  interpolate-size: allow-keywords;
@@ -214,11 +215,13 @@
214
215
  transition: height 0.1s ease;
215
216
  }
216
217
 
217
- .height-enter-from, .height-leave-to {
218
+ .height-enter-from,
219
+ .height-leave-to {
218
220
  height: 0;
219
221
  }
220
222
 
221
- .height-enter-to, .height-leave-from {
223
+ .height-enter-to,
224
+ .height-leave-from {
222
225
  height: auto;
223
226
  }
224
227
 
@@ -42,9 +42,9 @@ exports[`CookieBanner > does not close the dialog when the customize button is c
42
42
  <table>
43
43
  <thead data-v-d0e8c396="">
44
44
  <tr data-v-d0e8c396="">
45
- <th data-v-d0e8c396="" style="width: 180px;" class="text-left">Dénomination du cookie</th>
46
- <th data-v-d0e8c396="" style="width: 328px;" class="text-left">Finalité</th>
47
- <th data-v-d0e8c396="" style="width: 180px;" class="text-left">Durée de conservation</th>
45
+ <th data-v-d0e8c396="" style="width: 180px;" class="text-left" scope="col">Dénomination du cookie</th>
46
+ <th data-v-d0e8c396="" style="width: 328px;" class="text-left" scope="col">Finalité</th>
47
+ <th data-v-d0e8c396="" style="width: 180px;" class="text-left" scope="col">Durée de conservation</th>
48
48
  </tr>
49
49
  </thead>
50
50
  <tbody data-v-d0e8c396="">
@@ -77,9 +77,9 @@ exports[`CookieBanner > does not close the dialog when the customize button is c
77
77
  <table>
78
78
  <thead data-v-d0e8c396="">
79
79
  <tr data-v-d0e8c396="">
80
- <th data-v-d0e8c396="" style="width: 180px;" class="text-left">Dénomination du cookie</th>
81
- <th data-v-d0e8c396="" style="width: 328px;" class="text-left">Finalité</th>
82
- <th data-v-d0e8c396="" style="width: 180px;" class="text-left">Durée de conservation</th>
80
+ <th data-v-d0e8c396="" style="width: 180px;" class="text-left" scope="col">Dénomination du cookie</th>
81
+ <th data-v-d0e8c396="" style="width: 328px;" class="text-left" scope="col">Finalité</th>
82
+ <th data-v-d0e8c396="" style="width: 180px;" class="text-left" scope="col">Durée de conservation</th>
83
83
  </tr>
84
84
  </thead>
85
85
  <tbody data-v-d0e8c396="">
@@ -96,9 +96,10 @@ exports[`CookieBanner > does not close the dialog when the customize button is c
96
96
  </details>
97
97
  <div data-v-2ca04413="" class="v-input v-input--horizontal v-input--center-affix v-input--density-default v-theme--light v-locale--is-ltr v-radio-group vd-cookies-information__radio-group" data-test-id="radio-group">
98
98
  <!---->
99
- <div class="v-input__control">
100
- <!---->
101
- <div class="v-selection-control-group v-selection-control-group--inline" role="radiogroup" aria-describedby="radio-group-7-messages">
99
+ <div class="v-input__control"><label class="v-label" id="radio-group-7">
100
+ <!---->Accepter les cookies de type Cookies fonctionnels, ce champ est requis.
101
+ </label>
102
+ <div class="v-selection-control-group v-selection-control-group--inline" role="radiogroup" label="Accepter les cookies de type Cookies fonctionnels, ce champ est requis." aria-describedby="radio-group-7-messages" aria-labelledby="radio-group-7">
102
103
  <div data-v-2ca04413="" class="v-spacer"></div>
103
104
  <div data-v-2ca04413="" class="v-selection-control v-selection-control--inline v-selection-control--density-default v-radio">
104
105
  <div class="v-selection-control__wrapper">
@@ -133,9 +134,9 @@ exports[`CookieBanner > does not close the dialog when the customize button is c
133
134
  <table>
134
135
  <thead data-v-d0e8c396="">
135
136
  <tr data-v-d0e8c396="">
136
- <th data-v-d0e8c396="" style="width: 180px;" class="text-left">Dénomination du cookie</th>
137
- <th data-v-d0e8c396="" style="width: 328px;" class="text-left">Finalité</th>
138
- <th data-v-d0e8c396="" style="width: 180px;" class="text-left">Durée de conservation</th>
137
+ <th data-v-d0e8c396="" style="width: 180px;" class="text-left" scope="col">Dénomination du cookie</th>
138
+ <th data-v-d0e8c396="" style="width: 328px;" class="text-left" scope="col">Finalité</th>
139
+ <th data-v-d0e8c396="" style="width: 180px;" class="text-left" scope="col">Durée de conservation</th>
139
140
  </tr>
140
141
  </thead>
141
142
  <tbody data-v-d0e8c396="">
@@ -152,9 +153,10 @@ exports[`CookieBanner > does not close the dialog when the customize button is c
152
153
  </details>
153
154
  <div data-v-2ca04413="" class="v-input v-input--horizontal v-input--center-affix v-input--density-default v-theme--light v-locale--is-ltr v-radio-group vd-cookies-information__radio-group" data-test-id="radio-group">
154
155
  <!---->
155
- <div class="v-input__control">
156
- <!---->
157
- <div class="v-selection-control-group v-selection-control-group--inline" role="radiogroup" aria-describedby="radio-group-12-messages">
156
+ <div class="v-input__control"><label class="v-label" id="radio-group-12">
157
+ <!---->Accepter les cookies de type Cookies d’analyse, ce champ est requis.
158
+ </label>
159
+ <div class="v-selection-control-group v-selection-control-group--inline" role="radiogroup" label="Accepter les cookies de type Cookies d’analyse, ce champ est requis." aria-describedby="radio-group-12-messages" aria-labelledby="radio-group-12">
158
160
  <div data-v-2ca04413="" class="v-spacer"></div>
159
161
  <div data-v-2ca04413="" class="v-selection-control v-selection-control--inline v-selection-control--density-default v-radio">
160
162
  <div class="v-selection-control__wrapper">
@@ -73,6 +73,7 @@
73
73
  :rules="[required]"
74
74
  data-test-id="radio-group"
75
75
  inline
76
+ :label="locales.fieldLabel(locales[type].title)"
76
77
  hide-details="auto"
77
78
  class="vd-cookies-information__radio-group"
78
79
  @update:model-value="status = $event === 'accept'"
@@ -96,7 +97,7 @@
96
97
  </template>
97
98
 
98
99
  <style lang="scss" scoped>
99
- @use '@/assets/tokens.scss';
100
+ @use '@/assets/tokens';
100
101
 
101
102
  details > summary {
102
103
  cursor: pointer;
@@ -119,5 +120,9 @@ details > summary {
119
120
  :deep(.v-messages) {
120
121
  text-align: end;
121
122
  }
123
+
124
+ :deep(.v-label) {
125
+ justify-content: end;
126
+ }
122
127
  }
123
128
  </style>
@@ -18,4 +18,5 @@ export const locales = {
18
18
  hideInformation: 'Masquer les cookies',
19
19
  reject: 'Refuser',
20
20
  accept: 'Accepter',
21
+ fieldLabel: (cookieCategory: string) => `Accepter les cookies de type ${cookieCategory}, ce champ est requis.`,
21
22
  } as const
@@ -14,6 +14,7 @@
14
14
  :key="index"
15
15
  :style="{ width: item.width }"
16
16
  class="text-left"
17
+ scope="col"
17
18
  >
18
19
  {{ item.label }}
19
20
  </th>
@@ -42,9 +42,9 @@ exports[`CookiesSelection > renders correctly 1`] = `
42
42
  <table>
43
43
  <thead data-v-d0e8c396="">
44
44
  <tr data-v-d0e8c396="">
45
- <th data-v-d0e8c396="" style="width: 180px;" class="text-left">Dénomination du cookie</th>
46
- <th data-v-d0e8c396="" style="width: 328px;" class="text-left">Finalité</th>
47
- <th data-v-d0e8c396="" style="width: 180px;" class="text-left">Durée de conservation</th>
45
+ <th data-v-d0e8c396="" style="width: 180px;" class="text-left" scope="col">Dénomination du cookie</th>
46
+ <th data-v-d0e8c396="" style="width: 328px;" class="text-left" scope="col">Finalité</th>
47
+ <th data-v-d0e8c396="" style="width: 180px;" class="text-left" scope="col">Durée de conservation</th>
48
48
  </tr>
49
49
  </thead>
50
50
  <tbody data-v-d0e8c396="">
@@ -77,9 +77,9 @@ exports[`CookiesSelection > renders correctly 1`] = `
77
77
  <table>
78
78
  <thead data-v-d0e8c396="">
79
79
  <tr data-v-d0e8c396="">
80
- <th data-v-d0e8c396="" style="width: 180px;" class="text-left">Dénomination du cookie</th>
81
- <th data-v-d0e8c396="" style="width: 328px;" class="text-left">Finalité</th>
82
- <th data-v-d0e8c396="" style="width: 180px;" class="text-left">Durée de conservation</th>
80
+ <th data-v-d0e8c396="" style="width: 180px;" class="text-left" scope="col">Dénomination du cookie</th>
81
+ <th data-v-d0e8c396="" style="width: 328px;" class="text-left" scope="col">Finalité</th>
82
+ <th data-v-d0e8c396="" style="width: 180px;" class="text-left" scope="col">Durée de conservation</th>
83
83
  </tr>
84
84
  </thead>
85
85
  <tbody data-v-d0e8c396="">
@@ -96,9 +96,10 @@ exports[`CookiesSelection > renders correctly 1`] = `
96
96
  </details>
97
97
  <div data-v-2ca04413="" class="v-input v-input--horizontal v-input--center-affix v-input--density-default v-theme--light v-locale--is-ltr v-radio-group vd-cookies-information__radio-group" data-test-id="radio-group">
98
98
  <!---->
99
- <div class="v-input__control">
100
- <!---->
101
- <div class="v-selection-control-group v-selection-control-group--inline" role="radiogroup" aria-describedby="radio-group-2-messages">
99
+ <div class="v-input__control"><label class="v-label" id="radio-group-2">
100
+ <!---->Accepter les cookies de type Cookies fonctionnels, ce champ est requis.
101
+ </label>
102
+ <div class="v-selection-control-group v-selection-control-group--inline" role="radiogroup" label="Accepter les cookies de type Cookies fonctionnels, ce champ est requis." aria-describedby="radio-group-2-messages" aria-labelledby="radio-group-2">
102
103
  <div data-v-2ca04413="" class="v-spacer"></div>
103
104
  <div data-v-2ca04413="" class="v-selection-control v-selection-control--inline v-selection-control--density-default v-radio">
104
105
  <div class="v-selection-control__wrapper">
@@ -133,9 +134,9 @@ exports[`CookiesSelection > renders correctly 1`] = `
133
134
  <table>
134
135
  <thead data-v-d0e8c396="">
135
136
  <tr data-v-d0e8c396="">
136
- <th data-v-d0e8c396="" style="width: 180px;" class="text-left">Dénomination du cookie</th>
137
- <th data-v-d0e8c396="" style="width: 328px;" class="text-left">Finalité</th>
138
- <th data-v-d0e8c396="" style="width: 180px;" class="text-left">Durée de conservation</th>
137
+ <th data-v-d0e8c396="" style="width: 180px;" class="text-left" scope="col">Dénomination du cookie</th>
138
+ <th data-v-d0e8c396="" style="width: 328px;" class="text-left" scope="col">Finalité</th>
139
+ <th data-v-d0e8c396="" style="width: 180px;" class="text-left" scope="col">Durée de conservation</th>
139
140
  </tr>
140
141
  </thead>
141
142
  <tbody data-v-d0e8c396="">
@@ -152,9 +153,10 @@ exports[`CookiesSelection > renders correctly 1`] = `
152
153
  </details>
153
154
  <div data-v-2ca04413="" class="v-input v-input--horizontal v-input--center-affix v-input--density-default v-theme--light v-locale--is-ltr v-radio-group vd-cookies-information__radio-group" data-test-id="radio-group">
154
155
  <!---->
155
- <div class="v-input__control">
156
- <!---->
157
- <div class="v-selection-control-group v-selection-control-group--inline" role="radiogroup" aria-describedby="radio-group-7-messages">
156
+ <div class="v-input__control"><label class="v-label" id="radio-group-7">
157
+ <!---->Accepter les cookies de type Cookies d’analyse, ce champ est requis.
158
+ </label>
159
+ <div class="v-selection-control-group v-selection-control-group--inline" role="radiogroup" label="Accepter les cookies de type Cookies d’analyse, ce champ est requis." aria-describedby="radio-group-7-messages" aria-labelledby="radio-group-7">
158
160
  <div data-v-2ca04413="" class="v-spacer"></div>
159
161
  <div data-v-2ca04413="" class="v-selection-control v-selection-control--inline v-selection-control--density-default v-radio">
160
162
  <div class="v-selection-control__wrapper">
@@ -86,17 +86,17 @@
86
86
  </template>
87
87
 
88
88
  <style lang="scss">
89
- @use '@/assets/tokens.scss';
89
+ @use '@/assets/tokens';
90
90
 
91
91
  .vd-copy-tooltip-menu {
92
- padding: 6px 16px;
93
- box-shadow: none;
94
- margin-top: 2px;
95
- background: rgba(84, 88, 89, 0.95);
96
- color: white;
92
+ padding: 6px 16px;
93
+ box-shadow: none;
94
+ margin-top: 2px;
95
+ background: rgb(84 88 89 / 95%);
96
+ color: white;
97
97
  }
98
98
 
99
99
  .v-btn--icon .v-icon {
100
- color: tokens.$grey-lighten-20;
100
+ color: tokens.$grey-lighten-20;
101
101
  }
102
102
  </style>
@@ -213,42 +213,42 @@
213
213
  </template>
214
214
 
215
215
  <style lang="scss" scoped>
216
- @use '@/assets/tokens.scss';
216
+ @use '@/assets/tokens';
217
217
  @use '@/assets/tokens' as *;
218
218
 
219
219
  .vd-user-menu-btn-ctn {
220
- position: relative;
221
- z-index: 1;
220
+ position: relative;
221
+ z-index: 1;
222
222
 
223
- .v-btn.v-btn--density-default {
224
- height: auto !important;
225
- }
223
+ .v-btn.v-btn--density-default {
224
+ height: auto !important;
225
+ }
226
226
 
227
- .v-btn {
228
- text-transform: none !important;
229
- }
227
+ .v-btn {
228
+ text-transform: none !important;
229
+ }
230
230
  }
231
231
 
232
232
  .vd-user-menu-btn {
233
- outline: none;
234
- padding: 12px !important;
235
-
236
- &:hover:before {
237
- background: #000;
238
- opacity: 0.05;
239
- }
240
-
241
- &:focus:before {
242
- background: tokens.$blue-base;
243
- opacity: 0.08;
244
- }
245
-
246
- &:focus {
247
- background: rgba(tokens.$blue-base, 0.08) !important;
248
- }
233
+ outline: none;
234
+ padding: 12px !important;
235
+
236
+ &:hover::before {
237
+ background: #000;
238
+ opacity: 0.05;
239
+ }
240
+
241
+ &:focus::before {
242
+ background: tokens.$blue-base;
243
+ opacity: 0.08;
244
+ }
245
+
246
+ &:focus {
247
+ background: rgba(tokens.$blue-base, 0.08) !important;
248
+ }
249
249
  }
250
250
 
251
251
  :deep(.vd-user-menu-btn:focus > .v-btn__overlay) {
252
- opacity: 0 !important;
252
+ opacity: 0 !important;
253
253
  }
254
254
  </style>
@@ -200,53 +200,53 @@
200
200
  </template>
201
201
 
202
202
  <style lang="scss" scoped>
203
- @use '@/assets/tokens.scss';
203
+ @use '@/assets/tokens';
204
204
 
205
205
  .sy-input-select {
206
- text-transform: none !important;
207
- font-size: 16px;
206
+ text-transform: none !important;
207
+ font-size: 16px;
208
208
  }
209
209
 
210
210
  .v-input {
211
- cursor: pointer;
212
- position: relative;
211
+ cursor: pointer;
212
+ position: relative;
213
213
  }
214
214
 
215
215
  .v-list {
216
- position: absolute;
217
- width: 100%;
218
- z-index: 1;
219
- background-color: white;
220
- min-width: fit-content;
221
- max-width: 100px;
222
- padding: 0;
223
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.12), 0 2px 10px rgba(0, 0, 0, 0.08);
224
- border-radius: 4px;
225
- overflow-y: auto;
226
- max-height: 300px;
216
+ position: absolute;
217
+ width: 100%;
218
+ z-index: 1;
219
+ background-color: white;
220
+ min-width: fit-content;
221
+ max-width: 100px;
222
+ padding: 0;
223
+ box-shadow: 0 2px 5px rgb(0 0 0 / 12%), 0 2px 10px rgb(0 0 0 / 8%);
224
+ border-radius: 4px;
225
+ overflow-y: auto;
226
+ max-height: 300px;
227
227
  }
228
228
 
229
229
  .v-list-item:hover {
230
- background-color: rgba(0, 0, 0, 0.04);
230
+ background-color: rgb(0 0 0 / 4%);
231
231
  }
232
232
 
233
233
  :deep(.v-list-item[aria-selected='true']) {
234
- background-color: rgba(0, 0, 0, 0.08);
234
+ background-color: rgb(0 0 0 / 8%);
235
235
 
236
- .v-list-item-title {
237
- font-weight: bold;
238
- }
236
+ .v-list-item-title {
237
+ font-weight: bold;
238
+ }
239
239
  }
240
240
 
241
241
  .error {
242
- border-color: tokens.$danger-default;
242
+ border-color: tokens.$danger-default;
243
243
  }
244
244
 
245
245
  .v-btn {
246
- color: tokens.$blue-base;
246
+ color: tokens.$blue-base;
247
247
  }
248
248
 
249
249
  .text-color {
250
- color: tokens.$blue-base;
250
+ color: tokens.$blue-base;
251
251
  }
252
252
  </style>
@@ -1,10 +1,10 @@
1
1
  import type { Meta, StoryObj } from '@storybook/vue3'
2
2
  import SySelect from '@/components/Customs/SySelect/SySelect.vue'
3
+ import SyAlert from '@/components/SyAlert/SyAlert.vue'
3
4
  import { VBtn, VMenu, VList, VListItem, VListItemTitle } from 'vuetify/components'
4
5
  import { ref } from 'vue'
5
- import SyAlert from '@/components/SyAlert/SyAlert.vue'
6
6
 
7
- const meta = {
7
+ const meta: Meta<typeof SySelect> = {
8
8
  title: 'Composants/Formulaires/SySelect',
9
9
  component: SySelect,
10
10
  parameters: {
@@ -64,7 +64,7 @@ export const Default: Story = {
64
64
  return { args }
65
65
  },
66
66
  template: `
67
- <div class="d-flex flex-wrap align-center pa-4">
67
+ <div class="pa-4">
68
68
  <SySelect
69
69
  v-bind="args"
70
70
  />
@@ -119,7 +119,7 @@ export const Required: Story = {
119
119
  return { args }
120
120
  },
121
121
  template: `
122
- <div class="d-flex flex-wrap align-center pa-4">
122
+ <div class="pa-4">
123
123
  <SySelect
124
124
  v-bind="args"
125
125
  :required="args.required"
@@ -188,13 +188,13 @@ export const withCustomError: Story = {
188
188
  return { args, errorMessages, triggerError }
189
189
  },
190
190
  template: `
191
- <div class="d-flex flex-wrap align-center pa-4">
191
+ <div class="pa-4">
192
192
  <SySelect
193
193
  v-bind="args"
194
194
  :error-messages="errorMessages"
195
195
  />
196
196
  </div>
197
- <div class="d-flex flex-wrap align-center px-4">
197
+ <div class="px-4">
198
198
  <VBtn @click="triggerError">
199
199
  Trigger Error
200
200
  </VBtn>
@@ -247,7 +247,7 @@ export const withCustomKey: Story = {
247
247
  return { args }
248
248
  },
249
249
  template: `
250
- <div class="d-flex flex-wrap align-center pa-4">
250
+ <div class="pa-4">
251
251
  <SySelect
252
252
  v-bind="args"
253
253
  text-key="customKey"
@@ -4,7 +4,7 @@
4
4
 
5
5
  const props = defineProps({
6
6
  modelValue: {
7
- type: [Object, String],
7
+ type: [Object, String, Number],
8
8
  default: null,
9
9
  },
10
10
  items: {
@@ -13,7 +13,7 @@
13
13
  },
14
14
  label: {
15
15
  type: String,
16
- default: 'Sélectionnez une option',
16
+ default: '',
17
17
  },
18
18
  errorMessages: {
19
19
  type: [String, Array] as PropType<string | readonly string[]>,
@@ -23,6 +23,10 @@
23
23
  type: Boolean,
24
24
  default: false,
25
25
  },
26
+ disabled: {
27
+ type: Boolean,
28
+ default: false,
29
+ },
26
30
  menuId: {
27
31
  type: String,
28
32
  default: 'sy-select-menu',
@@ -44,7 +48,7 @@
44
48
  const emit = defineEmits(['update:modelValue'])
45
49
 
46
50
  const isOpen = ref(false)
47
- const selectedItem = ref<Record<string, unknown > | string | null | undefined>(props.modelValue)
51
+ const selectedItem = ref<Record<string, unknown > | string | number | null | undefined>(props.modelValue)
48
52
  const hasError = ref(false)
49
53
 
50
54
  const labelWidth = ref(0)
@@ -131,7 +135,8 @@
131
135
  color="primary"
132
136
  tabindex="0"
133
137
  readonly
134
- :label="selectedItem ? label : ''"
138
+ :disabled="disabled"
139
+ :label="selectedItem ? label : 'Sélectionnez une option'"
135
140
  :aria-label="selectedItem ? label : 'Sélectionnez une option'"
136
141
  :error-messages="errorMessages"
137
142
  :variant="outlined ? 'outlined' : 'underlined'"
@@ -183,56 +188,57 @@
183
188
  </template>
184
189
 
185
190
  <style scoped lang="scss">
186
- @use '@/assets/tokens.scss';
191
+ @use '@/assets/tokens';
187
192
 
188
193
  .sy-select {
189
- display: flex;
190
- flex-direction: column;
194
+ display: flex;
195
+ flex-direction: column;
191
196
  }
192
197
 
193
198
  .v-field {
194
- position: relative;
199
+ position: relative;
195
200
  }
201
+
196
202
  .v-field--focused {
197
- .v-icon.arrow {
198
- transform: rotateX(180deg);
199
- }
203
+ .v-icon.arrow {
204
+ transform: rotateX(180deg);
205
+ }
200
206
  }
201
207
 
202
208
  .v-list {
203
- position: absolute;
204
- left: inherit !important;
205
- margin-top: -22px;
206
- background-color: white;
207
- max-height: 300px;
208
- padding: 0;
209
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.12), 0 2px 10px rgba(0, 0, 0, 0.08);
210
- border-radius: 4px;
211
- overflow-y: auto;
212
- z-index: 2;
209
+ position: absolute;
210
+ left: inherit !important;
211
+ margin-top: -22px;
212
+ background-color: white;
213
+ max-height: 300px;
214
+ padding: 0;
215
+ box-shadow: 0 2px 5px rgb(0 0 0 / 12%), 0 2px 10px rgb(0 0 0 / 8%);
216
+ border-radius: 4px;
217
+ overflow-y: auto;
218
+ z-index: 2;
213
219
  }
214
220
 
215
221
  .v-list-item:hover {
216
- background-color: rgba(0, 0, 0, 0.04);
222
+ background-color: rgb(0 0 0 / 4%);
217
223
  }
218
224
 
219
225
  .v-list-item[aria-selected='true'] {
220
- background-color: rgba(0, 0, 0, 0.08);
226
+ background-color: rgb(0 0 0 / 8%);
221
227
  }
222
228
 
223
229
  .v-icon {
224
- position: absolute;
225
- right: 10px;
226
- color: tokens.$grey-darken-20;
230
+ position: absolute;
231
+ right: 10px;
232
+ color: tokens.$grey-darken-20;
227
233
  }
228
234
 
229
235
  :deep(.v-field__input) {
230
- color: tokens.$grey-darken-20
236
+ color: tokens.$grey-darken-20;
231
237
  }
232
238
 
233
239
  .hidden-label {
234
- visibility: hidden;
235
- position: absolute;
236
- white-space: nowrap;
240
+ visibility: hidden;
241
+ position: absolute;
242
+ white-space: nowrap;
237
243
  }
238
244
  </style>
@@ -11,7 +11,7 @@ describe('SySelect.vue', () => {
11
11
  },
12
12
  })
13
13
  expect(wrapper.exists()).toBe(true)
14
- expect(wrapper.find('.sy-select').text()).toBe('')
14
+ expect(wrapper.find('.sy-select').exists()).toBe(true)
15
15
  })
16
16
 
17
17
  it('displays the selected item text', async () => {
@@ -84,7 +84,7 @@ describe('SySelect.vue', () => {
84
84
  })
85
85
  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
86
86
  const instance = wrapper.vm as any
87
- expect(instance.selectedItemText).toBe('Sélectionnez une option')
87
+ expect(instance.selectedItemText).toBe('')
88
88
  })
89
89
 
90
90
  it('returns the correct text when selectedItem is an object', async () => {