@cnamts/synapse 1.0.25 → 1.0.26

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 (211) hide show
  1. package/dist/{AutocompleteFilter-D7qBuCAP.js → AutocompleteFilter-BPR-a55G.js} +1 -1
  2. package/dist/{DateFilter-BitMWrMU.js → DateFilter-CknrJWs2.js} +2 -2
  3. package/dist/{NumberFilter-BTLUxw0a.js → NumberFilter-DJ-yNlzv.js} +1 -1
  4. package/dist/{PeriodFilter-B5rUIPAC.js → PeriodFilter-CiB5Oa9Z.js} +1 -1
  5. package/dist/{SelectFilter-l4QnRcuk.js → SelectFilter-EiafX97M.js} +1 -1
  6. package/dist/{TextFilter-C9hj6Qrp.js → TextFilter-BzOmpdxj.js} +1 -1
  7. package/dist/{apLightTheme-DnIM24Lv.js → apLightTheme-DS0Uy44H.js} +20 -16
  8. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +4 -2
  9. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +60 -289
  10. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +1 -0
  11. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +1 -0
  12. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +1 -0
  13. package/dist/components/Customs/SyTextField/SyTextField.d.ts +2 -4
  14. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +50 -49
  15. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +29 -28
  16. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +8 -8
  17. package/dist/components/DatePicker/composables/useDatePickerState.d.ts +3 -3
  18. package/dist/components/DatePicker/composables/useDateTextField.d.ts +2 -2
  19. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
  20. package/dist/components/DatePicker/types.d.ts +1 -2
  21. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +1 -0
  22. package/dist/components/MonthPicker/MonthPicker.d.ts +1 -1
  23. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +1 -1
  24. package/dist/components/NirField/NirField.d.ts +8 -4
  25. package/dist/components/NirField/useNirValidation.d.ts +6 -2
  26. package/dist/components/PeriodField/PeriodField.d.ts +102 -102
  27. package/dist/components/PhoneField/PhoneField.d.ts +11 -1
  28. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +0 -3
  29. package/dist/components/RatingPicker/EmotionPicker/EmotionPicker.d.ts +3 -1
  30. package/dist/components/RatingPicker/NumberPicker/NumberPicker.d.ts +4 -3
  31. package/dist/components/RatingPicker/RatingPicker.d.ts +18 -5
  32. package/dist/components/RatingPicker/StarsPicker/StarsPicker.d.ts +3 -1
  33. package/dist/components/RatingPicker/tests/RatingPicker.a11y.spect.d.ts +1 -0
  34. package/dist/components/RatingPicker/useRatingFocus.d.ts +18 -0
  35. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +4 -4
  36. package/dist/components/Tables/SyTable/SyTable.d.ts +4 -4
  37. package/dist/components/Tables/common/SyTablePagination.d.ts +152 -364
  38. package/dist/components/Tables/common/TableHeader.d.ts +1 -1
  39. package/dist/components/Tables/common/filters/DateFilter.d.ts +4 -4
  40. package/dist/composables/date/useDateInitializationDayjs.d.ts +3 -1
  41. package/dist/composables/unifyValidation/useCustomValidation.d.ts +3 -1
  42. package/dist/composables/unifyValidation/useValidation.d.ts +12 -6
  43. package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +1 -1
  44. package/dist/composables/validation/useValidation.d.ts +1 -0
  45. package/dist/design-system-v3.js +2 -2
  46. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +2 -0
  47. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +2 -0
  48. package/dist/{main-Cpx8Co6H.js → main-BsJ9ec3i.js} +9103 -9018
  49. package/dist/synapse.css +1 -1
  50. package/dist/vuetifyConfig.js +1 -1
  51. package/package.json +8 -7
  52. package/src/assets/overrides/_icons.scss +0 -13
  53. package/src/assets/overrides/_otp.scss +0 -1
  54. package/src/components/Accordion/Accordion.vue +2 -0
  55. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +2 -1
  56. package/src/components/CookiesSelection/CookiesSelection.vue +2 -1
  57. package/src/components/CopyBtn/CopyBtn.vue +9 -0
  58. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +1 -1
  59. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +413 -96
  60. package/src/components/Customs/Selects/SySelect/SySelect.vue +270 -225
  61. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +245 -6
  62. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +3 -3
  63. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +23 -2
  64. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +23 -5
  65. package/src/components/Customs/SyTabs/SyTabs.stories.ts +5 -5
  66. package/src/components/Customs/SyTabs/config.ts +3 -3
  67. package/src/components/Customs/SyTextField/SyTextField.vue +31 -4
  68. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +1 -1
  69. package/src/components/DatePicker/CalendarMode/DatePicker.vue +17 -14
  70. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1 -1
  71. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +8 -7
  72. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +1 -1
  73. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +1 -1
  74. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +57 -23
  75. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +1 -1
  76. package/src/components/DatePicker/composables/useDatePickerState.ts +33 -14
  77. package/src/components/DatePicker/composables/useDateRangeInput.ts +2 -1
  78. package/src/components/DatePicker/composables/useDateSelection.ts +2 -1
  79. package/src/components/DatePicker/composables/useDateTextField.ts +2 -2
  80. package/src/components/DatePicker/composables/useInputBlurHandler.ts +2 -2
  81. package/src/components/DatePicker/types.ts +1 -2
  82. package/src/components/DialogBox/DialogBox.stories.ts +8 -8
  83. package/src/components/DialogBox/accessibilite/Accessibility.mdx +86 -22
  84. package/src/components/FilterSideBar/FilterSideBar.vue +2 -1
  85. package/src/components/LangBtn/LangBtn.vue +2 -1
  86. package/src/components/NotificationBar/Notification/Notification.vue +2 -2
  87. package/src/components/PaginatedTable/PaginatedTable.vue +1 -1
  88. package/src/components/PaginatedTable/Pagination.vue +1 -1
  89. package/src/components/PasswordField/PasswordField.vue +7 -3
  90. package/src/components/PhoneField/PhoneField.vue +4 -2
  91. package/src/components/RangeField/RangeSlider/RangeSlider.vue +11 -18
  92. package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +32 -48
  93. package/src/components/RatingPicker/EmotionPicker/tests/__snapshots__/EmotionPicker.spec.ts.snap +5 -0
  94. package/src/components/RatingPicker/NumberPicker/NumberPicker.vue +48 -53
  95. package/src/components/RatingPicker/NumberPicker/tests/NumberPicker.spec.ts +2 -1
  96. package/src/components/RatingPicker/NumberPicker/tests/__snapshots__/NumberPicker.spec.ts.snap +40 -13
  97. package/src/components/RatingPicker/RatingPicker.stories.ts +65 -88
  98. package/src/components/RatingPicker/RatingPicker.vue +71 -15
  99. package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +28 -37
  100. package/src/components/RatingPicker/StarsPicker/tests/StarsPicker.spec.ts +1 -1
  101. package/src/components/RatingPicker/StarsPicker/tests/__snapshots__/StarsPicker.spec.ts.snap +5 -0
  102. package/src/components/RatingPicker/accessibilite/Accessibility.mdx +137 -9
  103. package/src/components/RatingPicker/tests/RatingPicker.a11y.spect.ts +123 -0
  104. package/src/components/RatingPicker/tests/RatingPicker.spec.ts +3 -2
  105. package/src/components/RatingPicker/tests/__snapshots__/RatingPicker.spec.ts.snap +40 -11
  106. package/src/components/RatingPicker/useRatingFocus.ts +97 -0
  107. package/src/components/SyTextArea/SyTextArea.vue +32 -1
  108. package/src/components/Tables/SyServerTable/SyServerTable.vue +1 -1
  109. package/src/components/Tables/SyTable/SyTable.vue +1 -1
  110. package/src/components/Tables/common/SyTableFilter.vue +4 -4
  111. package/src/components/Tables/common/SyTablePagination.vue +1 -0
  112. package/src/components/Tables/common/TableHeader.vue +1 -1
  113. package/src/components/Tables/common/filters/DateFilter.vue +2 -2
  114. package/src/composables/date/tests/useDateFormatDayjs.spec.ts +81 -0
  115. package/src/composables/date/tests/{useDateInitialization.spec.ts → useDateInitializationDayjs.spec.ts} +39 -3
  116. package/src/composables/date/useDateInitializationDayjs.ts +4 -1
  117. package/src/composables/unifyValidation/documentationValidationProps.ts +7 -7
  118. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +2 -1
  119. package/src/composables/unifyValidation/tests/useValidation.spec.ts +22 -0
  120. package/src/composables/unifyValidation/useCustomValidation.ts +16 -4
  121. package/src/composables/unifyValidation/useValidation.ts +46 -15
  122. package/src/composables/unifyValidation/useVuetifyValidation.ts +2 -2
  123. package/src/composables/useFormFieldErrorHandling.ts +4 -1
  124. package/src/composables/validation/tests/useValidation.spec.ts +2 -2
  125. package/src/composables/validation/useValidation.ts +15 -3
  126. package/src/composantsVuetify/VCard/VCard.mdx +59 -0
  127. package/src/composantsVuetify/VCard/v-card.stories.ts +279 -0
  128. package/src/designTokens/tokens/amelipro/apColors2026.ts +1 -1
  129. package/src/designTokens/tokens/amelipro/apLightTheme.ts +3 -0
  130. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +3 -0
  131. package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +61 -91
  132. package/src/stories/Accessibilite/AuditDesignSystem.mdx +5 -8
  133. package/src/stories/Accessibilite/AuditEtContreAudit/Exemptions-derogations.mdx +1 -1
  134. package/src/stories/Accessibilite/AuditEtContreAudit/Introduction.mdx +11 -8
  135. package/src/stories/Accessibilite/AuditEtContreAudit/RGAA.mdx +6 -7
  136. package/src/stories/Accessibilite/Introduction.mdx +30 -30
  137. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +168 -78
  138. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +13 -6
  139. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +66 -45
  140. package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +23 -49
  141. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/FauxPositifs.stories.ts +6 -0
  142. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/Utilisation.mdx +7 -19
  143. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +18 -20
  144. package/src/stories/Components/Components.stories.ts +52 -3
  145. package/dist/AutocompleteFilter-Df9i5mAl.cjs +0 -1
  146. package/dist/DateFilter-BJD6FMev.cjs +0 -1
  147. package/dist/NumberFilter-DGCzCXzI.cjs +0 -1
  148. package/dist/PeriodFilter-DO_ecTZW.cjs +0 -1
  149. package/dist/SelectFilter-CGwcKWLm.cjs +0 -1
  150. package/dist/TextFilter-B8nf7xoK.cjs +0 -1
  151. package/dist/apLightTheme-CEK4iY3f.cjs +0 -1
  152. package/dist/composables/date/useDateFormat.d.ts +0 -26
  153. package/dist/composables/date/useDateInitialization.d.ts +0 -18
  154. package/dist/design-system-v3.umd.cjs +0 -1
  155. package/dist/main-ByDPHpae.cjs +0 -1067
  156. package/dist/tooth-11-D3sLWv2n.cjs +0 -1
  157. package/dist/tooth-12-CXrLuH03.cjs +0 -1
  158. package/dist/tooth-13-BSfo5fpT.cjs +0 -1
  159. package/dist/tooth-14-DMzulx0h.cjs +0 -1
  160. package/dist/tooth-15-BKRFVi-9.cjs +0 -1
  161. package/dist/tooth-16-CpuxAbuM.cjs +0 -1
  162. package/dist/tooth-17-BPoahUdg.cjs +0 -1
  163. package/dist/tooth-18-DhHJz8sy.cjs +0 -1
  164. package/dist/tooth-21-Dgd5hn_X.cjs +0 -1
  165. package/dist/tooth-22-C2Tn19sB.cjs +0 -1
  166. package/dist/tooth-23-C9uaaSGb.cjs +0 -1
  167. package/dist/tooth-24-BrK9UGpf.cjs +0 -1
  168. package/dist/tooth-25-CE_EfGNp.cjs +0 -1
  169. package/dist/tooth-26-Ctv4i9Fy.cjs +0 -1
  170. package/dist/tooth-27-C5J7JkWM.cjs +0 -1
  171. package/dist/tooth-28-Z9oWqjo0.cjs +0 -1
  172. package/dist/tooth-31-BrYqmkTi.cjs +0 -1
  173. package/dist/tooth-32-BNNR0oCZ.cjs +0 -1
  174. package/dist/tooth-33-DuxvqO2J.cjs +0 -1
  175. package/dist/tooth-34-BCSCXMB6.cjs +0 -1
  176. package/dist/tooth-35-BLUXkX88.cjs +0 -1
  177. package/dist/tooth-36-IrKHYqlA.cjs +0 -1
  178. package/dist/tooth-37-BYqpdMwo.cjs +0 -1
  179. package/dist/tooth-38-B_eNXXdu.cjs +0 -1
  180. package/dist/tooth-41-Ddva4Ot8.cjs +0 -1
  181. package/dist/tooth-42-szcDqlM0.cjs +0 -1
  182. package/dist/tooth-43-B3ka6rQm.cjs +0 -1
  183. package/dist/tooth-44-CazyQucj.cjs +0 -1
  184. package/dist/tooth-45-B4HQtc8n.cjs +0 -1
  185. package/dist/tooth-46-BPM40gbG.cjs +0 -1
  186. package/dist/tooth-47-Dvr20dlh.cjs +0 -1
  187. package/dist/tooth-48-Bd8ljGsF.cjs +0 -1
  188. package/dist/tooth-51-OBpwCOF3.cjs +0 -1
  189. package/dist/tooth-52-aKxyHcmq.cjs +0 -1
  190. package/dist/tooth-53-vCwJjTOc.cjs +0 -1
  191. package/dist/tooth-54-DsWu2iFy.cjs +0 -1
  192. package/dist/tooth-55-BxC1X2Dn.cjs +0 -1
  193. package/dist/tooth-61-BbLvxMQi.cjs +0 -1
  194. package/dist/tooth-62-CmTkWczP.cjs +0 -1
  195. package/dist/tooth-63-DI7l_2qI.cjs +0 -1
  196. package/dist/tooth-64-B21sOsJh.cjs +0 -1
  197. package/dist/tooth-65-D2ZC2VEr.cjs +0 -1
  198. package/dist/tooth-71-D473PPO5.cjs +0 -1
  199. package/dist/tooth-72-Drh1wnNu.cjs +0 -1
  200. package/dist/tooth-73-DzlwYI23.cjs +0 -1
  201. package/dist/tooth-74-8aGvcZPg.cjs +0 -1
  202. package/dist/tooth-75-BFK7At_r.cjs +0 -1
  203. package/dist/tooth-81-BZmR-I0M.cjs +0 -1
  204. package/dist/tooth-82-euVfUUZV.cjs +0 -1
  205. package/dist/tooth-83-KV010j64.cjs +0 -1
  206. package/dist/tooth-84-BBg1RjhZ.cjs +0 -1
  207. package/dist/tooth-85-Cr-kc1wM.cjs +0 -1
  208. package/dist/vuetifyConfig.umd.cjs +0 -1
  209. package/src/composables/date/tests/useDateFormat.spec.ts +0 -67
  210. package/src/composables/date/useDateFormat.ts +0 -110
  211. package/src/composables/date/useDateInitialization.ts +0 -92
@@ -1,13 +1,12 @@
1
1
  <script lang="ts" setup>
2
- import { computed, onMounted, ref } from 'vue'
3
- import { RatingEnum, useRating } from '../Rating'
2
+ import { computed, onMounted, toRef } from 'vue'
4
3
  import { locales } from './locales'
5
4
  import type { PropType } from 'vue'
6
5
  import type { ItemType } from '@/components/Customs/Selects/SySelect/SySelect.vue'
7
-
6
+ import { useRatingFocus } from '../useRatingFocus'
8
7
  import SySelect from '@/components/Customs/Selects/SySelect/SySelect.vue'
9
-
10
8
  import { useDisplay } from 'vuetify'
9
+ import { RatingEnum, useRating } from '../Rating'
11
10
 
12
11
  interface SelectItem extends ItemType {
13
12
  text: string
@@ -44,52 +43,48 @@
44
43
  const { hasAnswered, emitInputEvent } = useRating(props, emit)
45
44
 
46
45
  const selectItems = computed<SelectItem[]>(() => {
47
- return [...Array(props.length)].map((_, index) => ({
46
+ const length = props.length ?? 10
47
+
48
+ return [...Array(length)].map((_, index) => ({
48
49
  text: `${index + 1}`,
49
50
  value: index + 1,
50
51
  }))
51
52
  })
52
53
 
54
+ onMounted(() => {
55
+ if (!isMobile.value) {
56
+ initFocus()
57
+ }
58
+ })
59
+
53
60
  const shouldDisplayLabels = computed(() => props.itemLabels.length === 2)
54
61
 
55
- const ratingElement = ref<HTMLDivElement[]>([])
56
- function focusNextElement(index: number) {
57
- const currentIndex = ratingElement.value?.findIndex(el => el === ratingElement.value[index]) ?? -1
58
- const nextIndex = currentIndex < (props.length - 1) ? currentIndex + 1 : 0
59
- const nextElem = ratingElement.value?.[nextIndex]
60
- nextElem?.focus()
61
- }
62
+ const {
63
+ ratingElement,
64
+ initFocus,
65
+ selectAndFocus,
66
+ focusNextElement,
67
+ focusPrevElement,
68
+ focus,
69
+ } = useRatingFocus({
70
+ length: toRef(props, 'length'),
71
+ modelValue: toRef(props, 'modelValue'),
72
+ selectValue: emitInputEvent,
73
+ wrap: true,
74
+ })
62
75
 
63
- function focusPrevElement(index: number) {
64
- const currentIndex = ratingElement.value?.findIndex(el => el === ratingElement.value[index]) ?? -1
65
- const prevIndex = currentIndex > 0 ? currentIndex - 1 : (props.length - 1)
66
- const prevElem = ratingElement.value?.[prevIndex]
67
- prevElem?.focus()
68
- }
76
+ defineExpose({
77
+ focus,
78
+ })
69
79
 
70
- function setFocus(index: number) {
71
- ratingElement.value.forEach((el, i) => {
72
- if (i === index) {
73
- el.setAttribute('tabindex', '0')
74
- el.focus()
75
- }
76
- else {
77
- el.setAttribute('tabindex', '-1')
78
- }
79
- })
80
+ if (!isMobile.value) {
81
+ initFocus()
80
82
  }
81
-
82
- onMounted(() => {
83
- ratingElement.value[0]?.setAttribute('tabindex', '0')
84
- for (let i = 1; i < ratingElement.value.length; i++) {
85
- ratingElement.value[i]?.setAttribute('tabindex', '-1')
86
- }
87
- })
88
83
  </script>
89
84
 
90
85
  <template>
91
86
  <fieldset class="sy-number-picker">
92
- <legend class="d-sr-only">
87
+ <legend :class="isMobile ? 'd-sr-only' : 'text-h6 mb-6'">
93
88
  <slot name="label">
94
89
  {{ props.label }}
95
90
  </slot>
@@ -103,11 +98,6 @@
103
98
  @update:model-value="(value) => emit('update:modelValue', value)"
104
99
  />
105
100
  <template v-else>
106
- <legend class="text-h6 mb-6">
107
- <slot name="label">
108
- {{ props.label }}
109
- </slot>
110
- </legend>
111
101
  <div
112
102
  v-if="!hasAnswered"
113
103
  class="d-inline-block"
@@ -122,19 +112,22 @@
122
112
  ref="ratingElement"
123
113
  v-ripple="!(props.readonly || hasAnswered)"
124
114
  role="radio"
125
- :aria-checked="props.modelValue === index ? 'true' : undefined"
126
- :aria-label="locales.ariaLabel(index, props.length)"
115
+ :tabindex="-1"
116
+ :aria-checked="props.modelValue === index ? 'true' : 'false'"
127
117
  class="sy-number-picker__item text-body-2 pa-0"
128
118
  :aria-disabled="(props.readonly || hasAnswered) ? 'true' : undefined"
129
- @click="emitInputEvent(index); setFocus(index - 1)"
130
- @keyup.enter="emitInputEvent(index); setFocus(index - 1)"
131
- @keyup.space="emitInputEvent(index); setFocus(index - 1)"
132
- @keyup.right="focusNextElement(index - 1)"
133
- @keyup.left="focusPrevElement(index - 1)"
134
- @keyup.up="focusPrevElement(index - 1)"
135
- @keyup.down="focusNextElement(index - 1)"
119
+ @click="selectAndFocus(index - 1)"
120
+ @keydown.enter.prevent="selectAndFocus(index - 1)"
121
+ @keydown.space.prevent="selectAndFocus(index - 1)"
122
+ @keydown.right.prevent="focusNextElement(index - 1)"
123
+ @keydown.left.prevent="focusPrevElement(index - 1)"
124
+ @keydown.up.prevent="focusPrevElement(index - 1)"
125
+ @keydown.down.prevent="focusNextElement(index - 1)"
136
126
  >
137
127
  {{ index }}
128
+ <span class="d-sr-only">
129
+ {{ locales.ariaLabel(index, props.length) }}
130
+ </span>
138
131
  </div>
139
132
  </div>
140
133
  <div
@@ -159,15 +152,17 @@
159
152
  </div>
160
153
  <div
161
154
  v-else
162
- :aria-label="locales.ariaLabel(props.modelValue, props.length)"
163
155
  class="mb-0 d-flex align-center"
164
156
  >
157
+ <span class="d-sr-only">
158
+ {{ locales.ariaLabel(props.modelValue, props.length) }}
159
+ </span>
165
160
  <div
166
161
  class="sy-btn-answer text-body-2 mr-1 pa-0"
167
162
  >
168
163
  {{ props.modelValue }}
169
164
  </div>
170
- <span>
165
+ <span aria-hidden="true">
171
166
  / {{ props.length }}
172
167
  </span>
173
168
  </div>
@@ -206,7 +201,7 @@
206
201
  user-select: none;
207
202
  }
208
203
 
209
- .sy-number-picker__item[disabled] {
204
+ .sy-number-picker__item[aria-disabled='true'] {
210
205
  pointer-events: none;
211
206
  opacity: 0.26;
212
207
 
@@ -15,7 +15,8 @@ describe('NumberPicker', () => {
15
15
 
16
16
  expect(btns).toHaveLength(10)
17
17
  btns.forEach((btn, i) => {
18
- expect(btn.text()).toBe((i + 1).toString())
18
+ expect(btn.text()).toContain((i + 1).toString())
19
+ expect(btn.attributes('aria-checked')).toBe('false')
19
20
  })
20
21
  expect(wrapper.html()).toMatchSnapshot()
21
22
  })
@@ -2,9 +2,6 @@
2
2
 
3
3
  exports[`NumberPicker > renders correctly 1`] = `
4
4
  <fieldset class="sy-number-picker">
5
- <legend class="d-sr-only">
6
- Pourriez-vous donner une note ?
7
- </legend>
8
5
  <legend class="
9
6
  mb-6
10
7
  text-h6
@@ -22,7 +19,7 @@ exports[`NumberPicker > renders correctly 1`] = `
22
19
  role="radiogroup"
23
20
  >
24
21
  <div
25
- aria-label="Note de 1 sur 10."
22
+ aria-checked="false"
26
23
  class="
27
24
  pa-0
28
25
  sy-number-picker__item
@@ -32,9 +29,12 @@ exports[`NumberPicker > renders correctly 1`] = `
32
29
  tabindex="0"
33
30
  >
34
31
  1
32
+ <span class="d-sr-only">
33
+ Note de 1 sur 10.
34
+ </span>
35
35
  </div>
36
36
  <div
37
- aria-label="Note de 2 sur 10."
37
+ aria-checked="false"
38
38
  class="
39
39
  pa-0
40
40
  sy-number-picker__item
@@ -44,9 +44,12 @@ exports[`NumberPicker > renders correctly 1`] = `
44
44
  tabindex="-1"
45
45
  >
46
46
  2
47
+ <span class="d-sr-only">
48
+ Note de 2 sur 10.
49
+ </span>
47
50
  </div>
48
51
  <div
49
- aria-label="Note de 3 sur 10."
52
+ aria-checked="false"
50
53
  class="
51
54
  pa-0
52
55
  sy-number-picker__item
@@ -56,9 +59,12 @@ exports[`NumberPicker > renders correctly 1`] = `
56
59
  tabindex="-1"
57
60
  >
58
61
  3
62
+ <span class="d-sr-only">
63
+ Note de 3 sur 10.
64
+ </span>
59
65
  </div>
60
66
  <div
61
- aria-label="Note de 4 sur 10."
67
+ aria-checked="false"
62
68
  class="
63
69
  pa-0
64
70
  sy-number-picker__item
@@ -68,9 +74,12 @@ exports[`NumberPicker > renders correctly 1`] = `
68
74
  tabindex="-1"
69
75
  >
70
76
  4
77
+ <span class="d-sr-only">
78
+ Note de 4 sur 10.
79
+ </span>
71
80
  </div>
72
81
  <div
73
- aria-label="Note de 5 sur 10."
82
+ aria-checked="false"
74
83
  class="
75
84
  pa-0
76
85
  sy-number-picker__item
@@ -80,9 +89,12 @@ exports[`NumberPicker > renders correctly 1`] = `
80
89
  tabindex="-1"
81
90
  >
82
91
  5
92
+ <span class="d-sr-only">
93
+ Note de 5 sur 10.
94
+ </span>
83
95
  </div>
84
96
  <div
85
- aria-label="Note de 6 sur 10."
97
+ aria-checked="false"
86
98
  class="
87
99
  pa-0
88
100
  sy-number-picker__item
@@ -92,9 +104,12 @@ exports[`NumberPicker > renders correctly 1`] = `
92
104
  tabindex="-1"
93
105
  >
94
106
  6
107
+ <span class="d-sr-only">
108
+ Note de 6 sur 10.
109
+ </span>
95
110
  </div>
96
111
  <div
97
- aria-label="Note de 7 sur 10."
112
+ aria-checked="false"
98
113
  class="
99
114
  pa-0
100
115
  sy-number-picker__item
@@ -104,9 +119,12 @@ exports[`NumberPicker > renders correctly 1`] = `
104
119
  tabindex="-1"
105
120
  >
106
121
  7
122
+ <span class="d-sr-only">
123
+ Note de 7 sur 10.
124
+ </span>
107
125
  </div>
108
126
  <div
109
- aria-label="Note de 8 sur 10."
127
+ aria-checked="false"
110
128
  class="
111
129
  pa-0
112
130
  sy-number-picker__item
@@ -116,9 +134,12 @@ exports[`NumberPicker > renders correctly 1`] = `
116
134
  tabindex="-1"
117
135
  >
118
136
  8
137
+ <span class="d-sr-only">
138
+ Note de 8 sur 10.
139
+ </span>
119
140
  </div>
120
141
  <div
121
- aria-label="Note de 9 sur 10."
142
+ aria-checked="false"
122
143
  class="
123
144
  pa-0
124
145
  sy-number-picker__item
@@ -128,9 +149,12 @@ exports[`NumberPicker > renders correctly 1`] = `
128
149
  tabindex="-1"
129
150
  >
130
151
  9
152
+ <span class="d-sr-only">
153
+ Note de 9 sur 10.
154
+ </span>
131
155
  </div>
132
156
  <div
133
- aria-label="Note de 10 sur 10."
157
+ aria-checked="false"
134
158
  class="
135
159
  pa-0
136
160
  sy-number-picker__item
@@ -140,6 +164,9 @@ exports[`NumberPicker > renders correctly 1`] = `
140
164
  tabindex="-1"
141
165
  >
142
166
  10
167
+ <span class="d-sr-only">
168
+ Note de 10 sur 10.
169
+ </span>
143
170
  </div>
144
171
  </div>
145
172
  <!-- v-if -->
@@ -1,8 +1,8 @@
1
1
  import type { StoryObj, Meta } from '@storybook/vue3'
2
2
  import RatingPicker from './RatingPicker.vue'
3
- import SySelect from '@/components/Customs/Selects/SySelect/SySelect.vue'
4
3
  import { VBtn, VSpacer } from 'vuetify/components'
5
4
  import { fn } from '@storybook/test'
5
+ import SyTextArea from '../SyTextArea/SyTextArea.vue'
6
6
 
7
7
  const meta = {
8
8
  title: 'Composants/Feedback/RatingPicker',
@@ -100,6 +100,16 @@ const meta = {
100
100
  },
101
101
  },
102
102
  },
103
+ freeTextLabel: {
104
+ description: 'Le libellé du champ de texte libre. Ajouter aria-label ou aria-labelledby au <textarea> : <textarea :aria-label="props.freeTextLabel" …> . Ce champ doit être utilisé en slot pour être pris en compte. Voir l’exemple de la story "DefaultSlot".',
105
+ control: 'text',
106
+ default: null,
107
+ table: {
108
+ type: {
109
+ summary: 'string | null',
110
+ },
111
+ },
112
+ },
103
113
  },
104
114
  } satisfies Meta<typeof RatingPicker>
105
115
 
@@ -132,9 +142,6 @@ export const Default: Story = {
132
142
  }
133
143
  },
134
144
  parameters: {
135
- a11y: {
136
- disable: true,
137
- },
138
145
  sourceCode: [
139
146
  {
140
147
  name: 'Template',
@@ -185,9 +192,6 @@ export const TwoEmotions: Story = {
185
192
  }
186
193
  },
187
194
  parameters: {
188
- a11y: {
189
- disable: true,
190
- },
191
195
  sourceCode: [
192
196
  {
193
197
  name: 'Template',
@@ -238,9 +242,6 @@ export const Numbers: Story = {
238
242
  }
239
243
  },
240
244
  parameters: {
241
- a11y: {
242
- disable: true,
243
- },
244
245
  sourceCode: [
245
246
  {
246
247
  name: 'Template',
@@ -290,9 +291,6 @@ export const Stars: Story = {
290
291
  }
291
292
  },
292
293
  parameters: {
293
- a11y: {
294
- disable: true,
295
- },
296
294
  sourceCode: [
297
295
  {
298
296
  name: 'Template',
@@ -343,9 +341,6 @@ export const ReadOnly: Story = {
343
341
  }
344
342
  },
345
343
  parameters: {
346
- a11y: {
347
- disable: true,
348
- },
349
344
  sourceCode: [
350
345
  {
351
346
  name: 'Template',
@@ -397,9 +392,6 @@ export const HideAlert: Story = {
397
392
  }
398
393
  },
399
394
  parameters: {
400
- a11y: {
401
- disable: true,
402
- },
403
395
  sourceCode: [
404
396
  {
405
397
  name: 'Template',
@@ -436,54 +428,42 @@ export const DefaultSlot: Story = {
436
428
  'readonly': false,
437
429
  'twoEmotions': false,
438
430
  'hideAlert': false,
439
- 'modelValue': -1,
440
- 'onUpdate:modelValue': fn(),
441
- },
431
+ 'modelValue': 2,
432
+ 'freeTextLabel': 'Pouvez-vous nous en dire plus ?',
433
+ 'onUpdate:modelValue': fn() },
442
434
  render: (args) => {
443
435
  return {
444
- components: { RatingPicker, SySelect, VBtn, VSpacer },
436
+ components: { RatingPicker, VBtn, VSpacer, SyTextArea },
445
437
  setup() {
446
- const items = [
447
- {
448
- text: 'Via une recherche internet',
449
- value: 'internet',
450
- },
451
- {
452
- text: 'Via un professionnel de santé',
453
- value: 'professional',
454
- },
455
- {
456
- text: 'Via un ami',
457
- value: 'friend',
458
- },
459
- ]
460
- return { args, items }
438
+ return { args }
461
439
  },
462
440
  template: `
463
- <RatingPicker v-bind="args" v-model="args.modelValue">
464
- <SySelect
465
- :items="items"
466
- label="Comment avez-vous connu ce service ?"
467
- class="mt-8"
468
- />
469
- <div class="d-flex">
470
- <VSpacer/>
441
+ <RatingPicker v-bind="args" v-model="args.modelValue">
442
+ <div class="mt-8">
443
+
444
+ <SyTextArea
445
+ id="rating-picker-comment"
446
+ class="w-100 pa-3"
447
+ :label="args.freeTextLabel"
448
+ rows="4"
449
+ />
471
450
 
472
- <VBtn
473
- right
474
- color="primary"
475
- >
476
- Terminé
477
- </VBtn>
451
+ <div class="d-flex mt-4">
452
+ <VSpacer />
453
+
454
+ <VBtn
455
+ right
456
+ color="primary"
457
+ >
458
+ Terminé
459
+ </VBtn>
460
+ </div>
478
461
  </div>
479
462
  </RatingPicker>
480
- `,
463
+ `,
481
464
  }
482
465
  },
483
466
  parameters: {
484
- a11y: {
485
- disable: true,
486
- },
487
467
  sourceCode: [
488
468
  {
489
469
  name: 'Template',
@@ -493,52 +473,49 @@ export const DefaultSlot: Story = {
493
473
  v-model="ratingEmotion"
494
474
  label="Êtes-vous satisfait de ce service ?"
495
475
  type="emotion"
476
+ :free-text-label="'Pouvez-vous nous en dire plus ?'"
496
477
  >
497
- <SySelect
498
- :items="items"
499
- label="Comment avez-vous connu ce service ?"
500
- class="mt-8"
501
- />
502
- <div class="d-flex">
503
- <VSpacer/>
504
-
505
- <VBtn
506
- right
507
- color="primary"
478
+ <div class="mt-8">
479
+ <label
480
+ for="rating-picker-comment"
481
+ class="d-block mb-2"
508
482
  >
509
- Terminé
510
- </VBtn>
483
+ {{ freeTextLabel }}
484
+ </label>
485
+
486
+ <textarea
487
+ id="rating-picker-comment"
488
+ class="w-100 pa-3"
489
+ rows="4"
490
+ />
491
+
492
+ <div class="d-flex mt-4">
493
+ <VSpacer />
494
+
495
+ <VBtn
496
+ right
497
+ color="primary"
498
+ >
499
+ Terminé
500
+ </VBtn>
501
+ </div>
511
502
  </div>
512
503
  </RatingPicker>
513
504
  </template>
514
- `,
505
+ `,
515
506
  },
516
507
  {
517
508
  name: 'Script',
518
509
  code: `
519
510
  <script setup lang="ts">
520
511
  import { ref } from 'vue'
521
- import { RatingPicker, SySelect } from '@cnamts/synapse'
512
+ import { RatingPicker } from '@cnamts/synapse'
522
513
  import { VBtn, VSpacer } from 'vuetify/components'
523
514
 
524
- const ratingEmotion = ref(-1)
525
-
526
- const items = [
527
- {
528
- text: 'Via une recherche internet',
529
- value: 'internet'
530
- },
531
- {
532
- text: 'Via un professionnel de santé',
533
- value: 'professional'
534
- },
535
- {
536
- text: 'Via un ami',
537
- value: 'friend'
538
- }
539
- ]
515
+ const ratingEmotion = ref(2)
516
+ const freeTextLabel = 'Pouvez-vous nous en dire plus ?'
540
517
  </script>
541
- `,
518
+ `,
542
519
  },
543
520
  ],
544
521
  },