@cnamts/synapse 1.0.0 → 1.0.2

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 (533) hide show
  1. package/README.md +1 -1
  2. package/dist/DateFilter-YWOTbfeL.js +98 -0
  3. package/dist/NumberFilter-DMmMgALM.js +121 -0
  4. package/dist/PeriodFilter-Bok5BHcn.js +112 -0
  5. package/dist/SelectFilter-BKud2WhN.js +136 -0
  6. package/dist/TextFilter-DvMf2thH.js +114 -0
  7. package/dist/{components/BackBtn → common}/constants/ExpertiseLevelEnum.d.ts +3 -0
  8. package/dist/components/Accordion/Accordion.d.ts +2 -1
  9. package/dist/components/Accordion/composables/useAccordionGroupCommunication.d.ts +5 -0
  10. package/dist/components/Accordion/composables/useAccordionKeyboardNavigation.d.ts +12 -0
  11. package/dist/components/Accordion/composables/useAccordionState.d.ts +13 -0
  12. package/dist/components/BackBtn/AccessibiliteItems.d.ts +1 -1
  13. package/dist/components/BackToTopBtn/AccessibiliteItems.d.ts +1 -1
  14. package/dist/components/ChipList/AccessibiliteItems.d.ts +1 -1
  15. package/dist/components/CollapsibleList/AccessibiliteItems.d.ts +1 -1
  16. package/dist/components/ContextualMenu/AccessibiliteItems.d.ts +1 -1
  17. package/dist/components/CookieBanner/AccessibiliteItems.d.ts +1 -1
  18. package/dist/components/CopyBtn/AccessibiliteItems.d.ts +1 -1
  19. package/dist/components/Customs/SyBtnSelect/AccessibiliteItems.d.ts +1 -1
  20. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +85 -0
  21. package/dist/components/Customs/SyInputSelect/AccessibiliteItems.d.ts +1 -1
  22. package/dist/components/Customs/SyInputSelect/SyInputSelect.d.ts +2 -0
  23. package/dist/components/Customs/SySelect/AccessibiliteItems.d.ts +1 -1
  24. package/dist/components/Customs/SySelect/SySelect.d.ts +33 -13
  25. package/dist/components/Customs/SyTextField/AccessibiliteItems.d.ts +1 -1
  26. package/dist/components/Customs/SyTextField/SyTextField.d.ts +2 -2
  27. package/dist/components/DataList/AccessibiliteItems.d.ts +1 -1
  28. package/dist/components/DataListGroup/AccessibiliteItems.d.ts +1 -1
  29. package/dist/components/DatePicker/AccessibiliteItems.d.ts +1 -1
  30. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +4295 -0
  31. package/dist/components/DatePicker/{DatePicker.d.ts → DatePicker/DatePicker.d.ts} +158 -104
  32. package/dist/components/DatePicker/{DateTextInput.d.ts → DateTextInput/DateTextInput.d.ts} +35 -27
  33. package/dist/components/DatePicker/composables/index.d.ts +17 -0
  34. package/dist/components/DatePicker/composables/useAsteriskDisplay.d.ts +14 -0
  35. package/dist/components/DatePicker/composables/useDateAutoClamp.d.ts +16 -0
  36. package/dist/components/DatePicker/composables/useDateFormatValidation.d.ts +25 -0
  37. package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +33 -0
  38. package/dist/components/DatePicker/composables/useDatePickerViewMode.d.ts +16 -0
  39. package/dist/components/DatePicker/composables/useDatePickerVisibility.d.ts +27 -0
  40. package/dist/components/DatePicker/composables/useDateRangeInput.d.ts +29 -0
  41. package/dist/components/DatePicker/composables/useDateRangeValidation.d.ts +11 -0
  42. package/dist/components/DatePicker/composables/useDateSelection.d.ts +10 -0
  43. package/dist/components/DatePicker/composables/useDateValidation.d.ts +35 -0
  44. package/dist/components/DatePicker/composables/useDisplayedDateString.d.ts +19 -0
  45. package/dist/components/DatePicker/composables/useIconState.d.ts +17 -0
  46. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +31 -0
  47. package/dist/components/DatePicker/composables/useInputHandler.d.ts +32 -0
  48. package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +33 -0
  49. package/dist/components/DatePicker/composables/useMonthButtonCustomization.d.ts +12 -0
  50. package/dist/components/DatePicker/composables/useTodayButton.d.ts +16 -0
  51. package/dist/components/DatePicker/composables/useWeekendDays.d.ts +11 -0
  52. package/dist/components/DatePicker/constants/messages.d.ts +29 -0
  53. package/dist/components/DatePicker/types.d.ts +13 -0
  54. package/dist/components/DialogBox/AccessibiliteItems.d.ts +1 -1
  55. package/dist/components/DownloadBtn/AccessibiliteItems.d.ts +1 -1
  56. package/dist/components/ErrorPage/AccessibiliteItems.d.ts +1 -1
  57. package/dist/components/ExternalLinks/AccessibiliteItems.d.ts +1 -1
  58. package/dist/components/FileList/AccessibiliteItems.d.ts +1 -1
  59. package/dist/components/FilePreview/AccessibiliteItems.d.ts +1 -1
  60. package/dist/components/FileUpload/AccessibiliteItems.d.ts +1 -1
  61. package/dist/components/FilterInline/AccessibiliteItems.d.ts +1 -1
  62. package/dist/components/FilterSideBar/AccessibiliteItems.d.ts +1 -1
  63. package/dist/components/FilterSideBar/FilterSideBar.d.ts +395 -1
  64. package/dist/components/FooterBar/AccessibiliteItems.d.ts +1 -1
  65. package/dist/components/FranceConnectBtn/AccessibiliteItems.d.ts +1 -1
  66. package/dist/components/HeaderBar/AccessibiliteItems.d.ts +1 -1
  67. package/dist/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.d.ts +1 -1
  68. package/dist/components/HeaderLoading/AccessibiliteItems.d.ts +1 -1
  69. package/dist/components/HeaderToolbar/AccessibiliteItems.d.ts +1 -1
  70. package/dist/components/LangBtn/AccessibiliteItems.d.ts +1 -1
  71. package/dist/components/Logo/AccessibiliteItems.d.ts +1 -1
  72. package/dist/components/LogoBrandSection/AccessibiliteItems.d.ts +1 -1
  73. package/dist/components/MaintenancePage/AccessibiliteItems.d.ts +1 -1
  74. package/dist/components/NirField/AccessibiliteItems.d.ts +1 -1
  75. package/dist/components/NirField/NirField.d.ts +7 -3
  76. package/dist/components/NirField/nirValidation.d.ts +1 -1
  77. package/dist/components/NotFoundPage/AccessibiliteItems.d.ts +1 -1
  78. package/dist/components/NotificationBar/AccessibiliteItems.d.ts +1 -1
  79. package/dist/components/PageContainer/AccessibiliteItems.d.ts +1 -1
  80. package/dist/components/PaginatedTable/AccessibiliteItems.d.ts +1 -1
  81. package/dist/components/PasswordField/AccessibiliteItems.d.ts +1 -1
  82. package/dist/components/PasswordField/PasswordField.d.ts +2 -0
  83. package/dist/components/PeriodField/AccessibiliteItems.d.ts +1 -1
  84. package/dist/components/PeriodField/PeriodField.d.ts +219 -41
  85. package/dist/components/PhoneField/AccessibiliteItems.d.ts +1 -1
  86. package/dist/components/PhoneField/PhoneField.d.ts +2 -2
  87. package/dist/components/RangeField/AccessibiliteItems.d.ts +1 -1
  88. package/dist/components/RangeField/RangeField.d.ts +2 -0
  89. package/dist/components/RatingPicker/AccessibiliteItems.d.ts +1 -1
  90. package/dist/components/SearchListField/AccessibiliteItems.d.ts +1 -1
  91. package/dist/components/SearchListField/SearchListField.d.ts +9 -0
  92. package/dist/components/SelectBtnField/AccessibiliteItems.d.ts +1 -1
  93. package/dist/components/SkipLink/AccessibiliteItems.d.ts +1 -1
  94. package/dist/components/SocialMediaLinks/AccessibiliteItems.d.ts +1 -1
  95. package/dist/components/SubHeader/AccessibiliteItems.d.ts +1 -1
  96. package/dist/components/SyAlert/AccessibiliteItems.d.ts +1 -1
  97. package/dist/components/SyTextArea/SyTextArea.d.ts +2 -0
  98. package/dist/components/TableToolbar/AccessibiliteItems.d.ts +1 -1
  99. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +652 -0
  100. package/dist/components/Tables/SyTable/SyTable.d.ts +671 -0
  101. package/dist/components/Tables/common/SyTableFilter.d.ts +126 -0
  102. package/dist/components/Tables/common/SyTablePagination.d.ts +1636 -0
  103. package/dist/components/Tables/common/TableHeader.d.ts +15 -0
  104. package/dist/components/Tables/common/constants/StateEnum.d.ts +6 -0
  105. package/dist/components/Tables/common/filters/DateFilter.d.ts +121 -0
  106. package/dist/components/Tables/common/filters/NumberFilter.d.ts +132 -0
  107. package/dist/components/Tables/common/filters/PeriodFilter.d.ts +135 -0
  108. package/dist/components/Tables/common/filters/SelectFilter.d.ts +120 -0
  109. package/dist/components/Tables/common/filters/TextFilter.d.ts +132 -0
  110. package/dist/components/Tables/common/filters/getFilterComponent.d.ts +1 -0
  111. package/dist/components/Tables/common/filters/locales.d.ts +4 -0
  112. package/dist/components/Tables/common/filters/logics/date.d.ts +1 -0
  113. package/dist/components/Tables/common/filters/logics/number.d.ts +1 -0
  114. package/dist/components/Tables/common/filters/logics/period.d.ts +1 -0
  115. package/dist/components/Tables/common/filters/logics/select.d.ts +1 -0
  116. package/dist/components/Tables/common/filters/logics/text.d.ts +1 -0
  117. package/dist/components/Tables/common/formatters.d.ts +17 -0
  118. package/dist/components/Tables/common/locales.d.ts +28 -0
  119. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +267 -0
  120. package/dist/components/Tables/common/organizeColumns/sortHeaders.d.ts +2 -0
  121. package/dist/components/Tables/common/tableAccessibilityUtils.d.ts +8 -0
  122. package/dist/components/Tables/common/tableFilterUtils.d.ts +3 -0
  123. package/dist/components/Tables/common/tableStorageUtils.d.ts +69 -0
  124. package/dist/components/Tables/common/tableUtils.d.ts +79 -0
  125. package/dist/components/Tables/common/types.d.ts +91 -0
  126. package/dist/components/Tables/common/usePagination.d.ts +22 -0
  127. package/dist/components/Tables/common/useTableCheckbox.d.ts +20 -0
  128. package/dist/components/Tables/common/useTableFilter.d.ts +9 -0
  129. package/dist/components/Tables/common/useTableHeaders.d.ts +76 -0
  130. package/dist/components/Tables/common/useTableItems.d.ts +24 -0
  131. package/dist/components/Tables/common/useTableOptions.d.ts +18 -0
  132. package/dist/components/Tables/index.d.ts +2 -0
  133. package/dist/components/ToolbarContainer/ToolbarContainer.d.ts +11 -0
  134. package/dist/components/UploadWorkflow/AccessibiliteItems.d.ts +1 -1
  135. package/dist/components/UserMenuBtn/AccessibiliteItems.d.ts +1 -1
  136. package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +9 -2
  137. package/dist/components/index.d.ts +9 -5
  138. package/dist/design-system-v3.js +102 -11944
  139. package/dist/design-system-v3.umd.cjs +22 -4
  140. package/dist/designTokens/index.d.ts +3 -1
  141. package/dist/designTokens/tokens/cnam/cnamFonts.d.ts +140 -0
  142. package/dist/designTokens/tokens/pa/paFonts.d.ts +140 -0
  143. package/dist/designTokens/utils/createFontVariables.d.ts +39 -0
  144. package/dist/designTokens/utils/index.d.ts +2 -1
  145. package/dist/main-Cx8qG7YR.js +16344 -0
  146. package/dist/stories/Accessibilite/Vuetify/VuetifyItems.d.ts +14 -2
  147. package/dist/stories/DesignTokens/StylesTypographiques.stories.new.d.ts +8 -0
  148. package/dist/stories/DesignTokens/TypographyDisplay.d.ts +28 -0
  149. package/dist/stories/DesignTokens/vue-shims.d.ts +6 -0
  150. package/dist/style.css +1 -1
  151. package/dist/utils/rules/isRequired/index.d.ts +1 -1
  152. package/dist/vite-env.d.ts +12 -0
  153. package/package.json +3 -3
  154. package/src/assets/_spacers.scss +37 -1
  155. package/src/assets/_typography.scss +158 -0
  156. package/src/assets/settings.scss +7 -0
  157. package/src/common/constants/ExpertiseLevelEnum.ts +7 -0
  158. package/src/common/imgs/accessibility-svgrepo-com.svg +4 -0
  159. package/src/components/Accordion/Accessibilite/AccessibilityGuide.mdx +249 -0
  160. package/src/components/Accordion/Accordion.vue +48 -76
  161. package/src/components/Accordion/composables/__tests__/useAccordionGroupCommunication.spec.ts +146 -0
  162. package/src/components/Accordion/composables/__tests__/useAccordionKeyboardNavigation.spec.ts +209 -0
  163. package/src/components/Accordion/composables/__tests__/useAccordionState.spec.ts +144 -0
  164. package/src/components/Accordion/composables/useAccordionGroupCommunication.ts +52 -0
  165. package/src/components/Accordion/composables/useAccordionKeyboardNavigation.ts +111 -0
  166. package/src/components/Accordion/composables/useAccordionState.ts +59 -0
  167. package/src/components/Accordion/tests/__snapshots__/accordion.spec.ts.snap +3 -0
  168. package/src/components/BackBtn/AccessibiliteItems.ts +1 -1
  169. package/src/components/BackToTopBtn/AccessibiliteItems.ts +1 -1
  170. package/src/components/ChipList/AccessibiliteItems.ts +1 -1
  171. package/src/components/CollapsibleList/AccessibiliteItems.ts +1 -1
  172. package/src/components/ContextualMenu/AccessibiliteItems.ts +1 -1
  173. package/src/components/CookieBanner/AccessibiliteItems.ts +1 -1
  174. package/src/components/CopyBtn/AccessibiliteItems.ts +1 -1
  175. package/src/components/Customs/SyBtnSelect/AccessibiliteItems.ts +1 -1
  176. package/src/components/Customs/SyCheckbox/Accessibilite.mdx +303 -0
  177. package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +50 -0
  178. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +630 -0
  179. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +326 -0
  180. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +201 -0
  181. package/src/components/Customs/SyInputSelect/AccessibiliteItems.ts +1 -1
  182. package/src/components/Customs/SyInputSelect/SyInputSelect.stories.ts +1 -0
  183. package/src/components/Customs/SyInputSelect/SyInputSelect.vue +8 -1
  184. package/src/components/Customs/SySelect/AccessibiliteItems.ts +1 -1
  185. package/src/components/Customs/SySelect/SySelect.stories.ts +160 -0
  186. package/src/components/Customs/SySelect/SySelect.vue +292 -39
  187. package/src/components/Customs/SySelect/tests/SySelect.spec.ts +234 -2
  188. package/src/components/Customs/SyTextField/AccessibiliteItems.ts +1 -1
  189. package/src/components/Customs/SyTextField/SyTextField.stories.ts +3 -2
  190. package/src/components/Customs/SyTextField/SyTextField.vue +19 -8
  191. package/src/components/DataList/AccessibiliteItems.ts +1 -1
  192. package/src/components/DataListGroup/AccessibiliteItems.ts +1 -1
  193. package/src/components/DatePicker/AccessibiliteItems.ts +1 -1
  194. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.mdx +212 -0
  195. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1307 -0
  196. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +769 -204
  197. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.events.spec.ts +161 -0
  198. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +943 -0
  199. package/src/components/DatePicker/DatePicker/DatePicker.mdx +176 -0
  200. package/src/components/DatePicker/{DatePicker.stories.ts → DatePicker/DatePicker.stories.ts} +356 -519
  201. package/src/components/DatePicker/{DatePicker.vue → DatePicker/DatePicker.vue} +435 -89
  202. package/src/components/DatePicker/DatePicker/tests/DatePicker.events.spec.ts +189 -0
  203. package/src/components/DatePicker/{tests → DatePicker/tests}/DatePicker.spec.ts +0 -14
  204. package/src/components/DatePicker/DatePickerOverview.mdx +227 -0
  205. package/src/components/DatePicker/{DatePickerValidation.mdx → DatePickerValidationExample/DatePickerValidation.mdx} +3 -3
  206. package/src/components/DatePicker/{DatePickerValidation.stories.ts → DatePickerValidationExample/DatePickerValidation.stories.ts} +2 -2
  207. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +320 -0
  208. package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +148 -0
  209. package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +278 -0
  210. package/src/components/DatePicker/{tests → DateTextInput}/DateTextInput.spec.ts +10 -7
  211. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +1111 -0
  212. package/src/components/DatePicker/DateTextInput/NoCalendar.mdx +64 -0
  213. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +782 -0
  214. package/src/components/DatePicker/composables/index.ts +24 -0
  215. package/src/components/DatePicker/composables/tests/useDateAutoClamp.spec.ts +190 -0
  216. package/src/components/DatePicker/composables/tests/useDateFormatValidation.spec.ts +165 -0
  217. package/src/components/DatePicker/composables/tests/useDateInputEditing.spec.ts +359 -0
  218. package/src/components/DatePicker/composables/tests/useDatePickerViewMode.spec.ts +160 -0
  219. package/src/components/DatePicker/composables/tests/useDatePickerVisibility.spec.ts +339 -0
  220. package/src/components/DatePicker/composables/tests/useDateRangeInput.spec.ts +277 -0
  221. package/src/components/DatePicker/composables/tests/useDateRangeValidation.spec.ts +107 -0
  222. package/src/components/DatePicker/composables/tests/useDateSelection.spec.ts +171 -0
  223. package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +245 -0
  224. package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +98 -0
  225. package/src/components/DatePicker/composables/tests/useIconState.spec.ts +130 -0
  226. package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +456 -0
  227. package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +233 -0
  228. package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +125 -0
  229. package/src/components/DatePicker/composables/tests/useTodayButton.spec.ts +97 -0
  230. package/src/components/DatePicker/composables/tests/useWeekendDays.spec.ts +28 -0
  231. package/src/components/DatePicker/composables/useAsteriskDisplay.ts +31 -0
  232. package/src/components/DatePicker/composables/useDateAutoClamp.ts +136 -0
  233. package/src/components/DatePicker/composables/useDateFormatValidation.ts +95 -0
  234. package/src/components/DatePicker/composables/useDateInputEditing.ts +326 -0
  235. package/src/components/DatePicker/composables/useDatePickerViewMode.ts +61 -0
  236. package/src/components/DatePicker/composables/useDatePickerVisibility.ts +146 -0
  237. package/src/components/DatePicker/composables/useDateRangeInput.ts +378 -0
  238. package/src/components/DatePicker/composables/useDateRangeValidation.ts +48 -0
  239. package/src/components/DatePicker/composables/useDateSelection.ts +121 -0
  240. package/src/components/DatePicker/composables/useDateValidation.ts +225 -0
  241. package/src/components/DatePicker/composables/useDisplayedDateString.ts +70 -0
  242. package/src/components/DatePicker/composables/useIconState.ts +53 -0
  243. package/src/components/DatePicker/composables/useInputBlurHandler.ts +165 -0
  244. package/src/components/DatePicker/composables/useInputHandler.ts +436 -0
  245. package/src/components/DatePicker/composables/useManualDateValidation.ts +161 -0
  246. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +187 -0
  247. package/src/components/DatePicker/composables/useTodayButton.ts +43 -0
  248. package/src/components/DatePicker/composables/useWeekendDays.ts +21 -0
  249. package/src/components/DatePicker/constants/messages.ts +50 -0
  250. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +4 -4
  251. package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +1 -1
  252. package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +172 -0
  253. package/src/components/DatePicker/types.ts +15 -0
  254. package/src/components/DiacriticPicker/DiacriticPicker.stories.ts +10 -0
  255. package/src/components/DialogBox/AccessibiliteItems.ts +1 -1
  256. package/src/components/DownloadBtn/AccessibiliteItems.ts +1 -1
  257. package/src/components/ErrorPage/Accessibilite.stories.ts +8 -0
  258. package/src/components/ErrorPage/AccessibiliteItems.ts +1 -1
  259. package/src/components/ErrorPage/ErrorPage.vue +12 -6
  260. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +4 -4
  261. package/src/components/ExternalLinks/AccessibiliteItems.ts +1 -1
  262. package/src/components/FileList/AccessibiliteItems.ts +1 -1
  263. package/src/components/FilePreview/AccessibiliteItems.ts +1 -1
  264. package/src/components/FileUpload/AccessibiliteItems.ts +1 -1
  265. package/src/components/FilterInline/AccessibiliteItems.ts +1 -1
  266. package/src/components/FilterSideBar/AccessibiliteItems.ts +1 -1
  267. package/src/components/FilterSideBar/FilterSideBar.vue +108 -90
  268. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +27 -0
  269. package/src/components/FilterSideBar/tests/__snapshots__/FilterSideBar.spec.ts.snap +114 -109
  270. package/src/components/FooterBar/AccessibiliteItems.ts +1 -1
  271. package/src/components/FooterBar/FooterBar.vue +2 -1
  272. package/src/components/FranceConnectBtn/AccessibiliteItems.ts +1 -1
  273. package/src/components/HeaderBar/AccessibiliteItems.ts +1 -1
  274. package/src/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.ts +1 -1
  275. package/src/components/HeaderLoading/AccessibiliteItems.ts +1 -1
  276. package/src/components/HeaderToolbar/AccessibiliteItems.ts +1 -1
  277. package/src/components/LangBtn/AccessibiliteItems.ts +1 -1
  278. package/src/components/Logo/Accessibilite.stories.ts +4 -0
  279. package/src/components/Logo/AccessibiliteItems.ts +1 -1
  280. package/src/components/LogoBrandSection/AccessibiliteItems.ts +1 -1
  281. package/src/components/MaintenancePage/AccessibiliteItems.ts +1 -1
  282. package/src/components/NirField/AccessibiliteItems.ts +1 -1
  283. package/src/components/NirField/NirField.mdx +22 -9
  284. package/src/components/NirField/NirField.stories.ts +26 -2
  285. package/src/components/NirField/NirField.vue +209 -22
  286. package/src/components/NirField/nirValidation.ts +17 -3
  287. package/src/components/NirField/tests/NirField.spec.ts +2 -2
  288. package/src/components/NotFoundPage/Accessibilite.stories.ts +8 -0
  289. package/src/components/NotFoundPage/AccessibiliteItems.ts +1 -1
  290. package/src/components/NotFoundPage/NotFoundPage.vue +2 -1
  291. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +8 -6
  292. package/src/components/NotificationBar/AccessibiliteItems.ts +1 -1
  293. package/src/components/PageContainer/AccessibiliteItems.ts +1 -1
  294. package/src/components/PaginatedTable/AccessibiliteItems.ts +1 -1
  295. package/src/components/PaginatedTable/PaginatedTable.mdx +2 -0
  296. package/src/components/PaginatedTable/PaginatedTable.stories.ts +19 -0
  297. package/src/components/PaginatedTable/PaginatedTable.vue +51 -13
  298. package/src/components/PaginatedTable/tests/PaginatedTable.spec.ts +0 -2
  299. package/src/components/PasswordField/AccessibiliteItems.ts +1 -1
  300. package/src/components/PasswordField/PasswordField.stories.ts +4 -0
  301. package/src/components/PasswordField/PasswordField.vue +3 -0
  302. package/src/components/PeriodField/AccessibiliteItems.ts +1 -1
  303. package/src/components/PeriodField/PeriodField.vue +15 -1
  304. package/src/components/PhoneField/AccessibiliteItems.ts +1 -1
  305. package/src/components/PhoneField/PhoneField.stories.ts +15 -15
  306. package/src/components/PhoneField/PhoneField.vue +1 -1
  307. package/src/components/RangeField/AccessibiliteItems.ts +1 -1
  308. package/src/components/RangeField/RangeField.stories.ts +9 -0
  309. package/src/components/RangeField/RangeField.vue +4 -0
  310. package/src/components/RangeField/tests/__snapshots__/RangeField.spec.ts.snap +12 -0
  311. package/src/components/RatingPicker/AccessibiliteItems.ts +1 -1
  312. package/src/components/SearchListField/AccessibiliteItems.ts +1 -1
  313. package/src/components/SearchListField/SearchListField.vue +5 -0
  314. package/src/components/SelectBtnField/AccessibiliteItems.ts +1 -1
  315. package/src/components/SkipLink/AccessibiliteItems.ts +1 -1
  316. package/src/components/SocialMediaLinks/AccessibiliteItems.ts +1 -1
  317. package/src/components/SubHeader/AccessibiliteItems.ts +1 -1
  318. package/src/components/SyAlert/AccessibiliteItems.ts +1 -1
  319. package/src/components/SyTextArea/SyTextArea.vue +3 -0
  320. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +0 -1
  321. package/src/components/TableToolbar/AccessibiliteItems.ts +1 -1
  322. package/src/components/TableToolbar/TableToolbar.stories.ts +110 -56
  323. package/src/components/Tables/SyServerTable/FilterRules.stories.ts +700 -0
  324. package/src/components/Tables/SyServerTable/SyServerTable.mdx +170 -0
  325. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +4354 -0
  326. package/src/components/Tables/SyServerTable/SyServerTable.vue +391 -0
  327. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +702 -0
  328. package/src/components/Tables/SyTable/FilterRules.stories.ts +418 -0
  329. package/src/components/Tables/SyTable/SyTable.mdx +139 -0
  330. package/src/components/Tables/SyTable/SyTable.stories.ts +2754 -0
  331. package/src/components/Tables/SyTable/SyTable.vue +397 -0
  332. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +707 -0
  333. package/src/components/Tables/common/SyTableFilter.vue +289 -0
  334. package/src/components/Tables/common/SyTablePagination.vue +375 -0
  335. package/src/components/Tables/common/TableHeader.vue +205 -0
  336. package/src/components/Tables/common/constants/StateEnum.ts +6 -0
  337. package/src/components/Tables/common/filters/DateFilter.vue +140 -0
  338. package/src/components/Tables/common/filters/NumberFilter.vue +234 -0
  339. package/src/components/Tables/common/filters/PeriodFilter.vue +147 -0
  340. package/src/components/Tables/common/filters/SelectFilter.vue +235 -0
  341. package/src/components/Tables/common/filters/TextFilter.vue +191 -0
  342. package/src/components/Tables/common/filters/getFilterComponent.ts +54 -0
  343. package/src/components/Tables/common/filters/locales.ts +4 -0
  344. package/src/components/Tables/common/filters/logics/date.ts +12 -0
  345. package/src/components/Tables/common/filters/logics/number.ts +48 -0
  346. package/src/components/Tables/common/filters/logics/period.ts +25 -0
  347. package/src/components/Tables/common/filters/logics/select.ts +27 -0
  348. package/src/components/Tables/common/filters/logics/tests/TextFilterLogic.spec.ts +177 -0
  349. package/src/components/Tables/common/filters/logics/text.ts +62 -0
  350. package/src/components/Tables/common/filters/tests/DateFilter.spec.ts +187 -0
  351. package/src/components/Tables/common/filters/tests/NumberFilter.spec.ts +280 -0
  352. package/src/components/Tables/common/filters/tests/PeriodFilter.spec.ts +192 -0
  353. package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +219 -0
  354. package/src/components/Tables/common/filters/tests/TextFilter.spec.ts +260 -0
  355. package/src/components/Tables/common/formatters.ts +72 -0
  356. package/src/components/Tables/common/locales.ts +31 -0
  357. package/src/components/Tables/common/organizeColumns/OrganizeColumns.vue +269 -0
  358. package/src/components/Tables/common/organizeColumns/sortHeaders.ts +9 -0
  359. package/src/components/Tables/common/tableAccessibilityUtils.ts +61 -0
  360. package/src/components/Tables/common/tableFilterUtils.ts +75 -0
  361. package/src/components/Tables/common/tableStorageUtils.ts +127 -0
  362. package/src/components/Tables/common/tableStyles.scss +80 -0
  363. package/src/components/Tables/common/tableUtils.ts +102 -0
  364. package/src/components/Tables/common/tests/SyTableFilter.spec.ts +312 -0
  365. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +170 -0
  366. package/src/components/Tables/common/tests/filterByRange.spec.ts +215 -0
  367. package/src/components/Tables/common/tests/resize.spec.ts +161 -0
  368. package/src/components/Tables/common/tests/tableFilterUtils.spec.ts +92 -0
  369. package/src/components/Tables/common/tests/tableUtils.spec.ts +228 -0
  370. package/src/components/Tables/common/types.ts +92 -0
  371. package/src/components/Tables/common/usePagination.ts +83 -0
  372. package/src/components/Tables/common/useTableCheckbox.ts +58 -0
  373. package/src/components/Tables/common/useTableFilter.ts +19 -0
  374. package/src/components/Tables/common/useTableHeaders.ts +88 -0
  375. package/src/components/Tables/common/useTableItems.ts +87 -0
  376. package/src/components/Tables/common/useTableOptions.ts +93 -0
  377. package/src/components/Tables/index.ts +3 -0
  378. package/src/components/ToolbarContainer/ToolbarContainer.mdx +16 -0
  379. package/src/components/ToolbarContainer/ToolbarContainer.stories.ts +675 -0
  380. package/src/components/ToolbarContainer/ToolbarContainer.vue +128 -0
  381. package/src/components/ToolbarContainer/tests/ToolbarContainer.spec.ts +156 -0
  382. package/src/components/UploadWorkflow/AccessibiliteItems.ts +1 -1
  383. package/src/components/UserMenuBtn/AccessibiliteItems.ts +1 -1
  384. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +74 -0
  385. package/src/components/UserMenuBtn/UserMenuBtn.vue +19 -17
  386. package/src/components/index.ts +9 -5
  387. package/src/composables/date/useDateFormatDayjs.ts +8 -3
  388. package/src/composables/date/useDateInitializationDayjs.ts +28 -36
  389. package/src/composables/rules/useFieldValidation.ts +1 -2
  390. package/src/designTokens/index.ts +4 -0
  391. package/src/designTokens/tokens/cnam/cnamFonts.ts +140 -0
  392. package/src/designTokens/tokens/pa/paFonts.ts +140 -0
  393. package/src/designTokens/utils/createFontVariables.ts +143 -0
  394. package/src/designTokens/utils/index.ts +2 -1
  395. package/src/stories/Accessibilite/Aculturation/AuditDesignSystem.mdx +293 -20
  396. package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +448 -54
  397. package/src/stories/Accessibilite/Audit/RGAA.mdx +231 -23
  398. package/src/stories/Accessibilite/Avancement/Avancement.mdx +591 -7
  399. package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +139 -38
  400. package/src/stories/Accessibilite/Introduction.mdx +258 -18
  401. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +221 -31
  402. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +204 -22
  403. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +537 -24
  404. package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +577 -70
  405. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru.mdx +382 -31
  406. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +419 -81
  407. package/src/stories/Accessibilite/Vuetify/Vuetify.mdx +132 -6
  408. package/src/stories/Accessibilite/Vuetify/Vuetify.stories.ts +370 -146
  409. package/src/stories/Accessibilite/Vuetify/VuetifyItems.ts +35 -57
  410. package/src/stories/Demarrer/Accueil.stories.ts +32 -8
  411. package/src/stories/DesignTokens/StylesTypographiques.mdx +10 -9
  412. package/src/stories/DesignTokens/StylesTypographiques.stories.new.ts +397 -0
  413. package/src/stories/DesignTokens/StylesTypographiques.stories.ts +397 -0
  414. package/src/stories/DesignTokens/TypographyDisplay.vue +155 -0
  415. package/src/stories/DesignTokens/vue-shims.d.ts +6 -0
  416. package/src/stories/GuideDuDev/LesBreackingChanges.mdx +0 -2
  417. package/src/stories/GuideDuDev/MigrationDepuisBridge.mdx +1 -1
  418. package/src/stories/GuideDuDev/MigrationDepuisVue2.mdx +1 -1
  419. package/src/stories/GuideDuDev/PortailAgent.mdx +10 -0
  420. package/src/stories/GuideDuDev/PortailAgent.stories.ts +506 -0
  421. package/src/stories/GuideDuDev/Theme.mdx +41 -0
  422. package/src/utils/rules/isHolidayDay/IsHolidayDay.stories.ts +1 -1
  423. package/src/utils/rules/isRequired/index.ts +2 -1
  424. package/src/vite-env.d.ts +12 -0
  425. package/src/vuetifyConfig.ts +10 -3
  426. package/dist/components/BackToTopBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  427. package/dist/components/ChipList/constants/ExpertiseLevelEnum.d.ts +0 -4
  428. package/dist/components/CollapsibleList/constants/ExpertiseLevelEnum.d.ts +0 -4
  429. package/dist/components/ContextualMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
  430. package/dist/components/CookieBanner/constants/ExpertiseLevelEnum.d.ts +0 -4
  431. package/dist/components/CopyBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  432. package/dist/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  433. package/dist/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  434. package/dist/components/Customs/SySelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  435. package/dist/components/Customs/SyTextField/constants/ExpertiseLevelEnum.d.ts +0 -4
  436. package/dist/components/DataList/constants/ExpertiseLevelEnum.d.ts +0 -4
  437. package/dist/components/DataListGroup/constants/ExpertiseLevelEnum.d.ts +0 -4
  438. package/dist/components/DatePicker/constants/ExpertiseLevelEnum.d.ts +0 -4
  439. package/dist/components/DialogBox/constants/ExpertiseLevelEnum.d.ts +0 -4
  440. package/dist/components/DownloadBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  441. package/dist/components/ErrorPage/constants/ExpertiseLevelEnum.d.ts +0 -4
  442. package/dist/components/ExternalLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
  443. package/dist/components/FileList/constants/ExpertiseLevelEnum.d.ts +0 -4
  444. package/dist/components/FilePreview/constants/ExpertiseLevelEnum.d.ts +0 -4
  445. package/dist/components/FileUpload/constants/ExpertiseLevelEnum.d.ts +0 -4
  446. package/dist/components/FilterInline/constants/ExpertiseLevelEnum.d.ts +0 -4
  447. package/dist/components/FilterSideBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  448. package/dist/components/FooterBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  449. package/dist/components/FranceConnectBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  450. package/dist/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
  451. package/dist/components/HeaderBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  452. package/dist/components/HeaderLoading/constants/ExpertiseLevelEnum.d.ts +0 -4
  453. package/dist/components/HeaderToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
  454. package/dist/components/LangBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  455. package/dist/components/Logo/constants/ExpertiseLevelEnum.d.ts +0 -4
  456. package/dist/components/LogoBrandSection/constants/ExpertiseLevelEnum.d.ts +0 -4
  457. package/dist/components/MaintenancePage/constants/ExpertiseLevelEnum.d.ts +0 -4
  458. package/dist/components/NirField/constants/ExpertiseLevelEnum.d.ts +0 -4
  459. package/dist/components/NotFoundPage/constants/ExpertiseLevelEnum.d.ts +0 -4
  460. package/dist/components/NotificationBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  461. package/dist/components/PageContainer/constants/ExpertiseLevelEnum.d.ts +0 -4
  462. package/dist/components/PaginatedTable/constants/ExpertiseLevelEnum.d.ts +0 -4
  463. package/dist/components/PasswordField/constants/ExpertiseLevelEnum.d.ts +0 -4
  464. package/dist/components/PeriodField/constants/ExpertiseLevelEnum.d.ts +0 -4
  465. package/dist/components/PhoneField/constants/ExpertiseLevelEnum.d.ts +0 -4
  466. package/dist/components/RangeField/constants/ExpertiseLevelEnum.d.ts +0 -4
  467. package/dist/components/RatingPicker/constants/ExpertiseLevelEnum.d.ts +0 -4
  468. package/dist/components/SearchListField/constants/ExpertiseLevelEnum.d.ts +0 -4
  469. package/dist/components/SelectBtnField/constants/ExpertiseLevelEnum.d.ts +0 -4
  470. package/dist/components/SkipLink/constants/ExpertiseLevelEnum.d.ts +0 -4
  471. package/dist/components/SocialMediaLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
  472. package/dist/components/SubHeader/constants/ExpertiseLevelEnum.d.ts +0 -4
  473. package/dist/components/SyAlert/constants/ExpertiseLevelEnum.d.ts +0 -4
  474. package/dist/components/TableToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
  475. package/dist/components/UploadWorkflow/constants/ExpertiseLevelEnum.d.ts +0 -4
  476. package/dist/components/UserMenuBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  477. package/src/components/BackBtn/constants/ExpertiseLevelEnum.ts +0 -4
  478. package/src/components/BackToTopBtn/constants/ExpertiseLevelEnum.ts +0 -4
  479. package/src/components/ChipList/constants/ExpertiseLevelEnum.ts +0 -4
  480. package/src/components/CollapsibleList/constants/ExpertiseLevelEnum.ts +0 -4
  481. package/src/components/ContextualMenu/constants/ExpertiseLevelEnum.ts +0 -4
  482. package/src/components/CookieBanner/constants/ExpertiseLevelEnum.ts +0 -4
  483. package/src/components/CopyBtn/constants/ExpertiseLevelEnum.ts +0 -4
  484. package/src/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.ts +0 -4
  485. package/src/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.ts +0 -4
  486. package/src/components/Customs/SySelect/constants/ExpertiseLevelEnum.ts +0 -4
  487. package/src/components/Customs/SyTextField/constants/ExpertiseLevelEnum.ts +0 -4
  488. package/src/components/DataList/constants/ExpertiseLevelEnum.ts +0 -4
  489. package/src/components/DataListGroup/constants/ExpertiseLevelEnum.ts +0 -4
  490. package/src/components/DatePicker/DatePicker.mdx +0 -222
  491. package/src/components/DatePicker/DateTextInput.vue +0 -504
  492. package/src/components/DatePicker/constants/ExpertiseLevelEnum.ts +0 -4
  493. package/src/components/DialogBox/constants/ExpertiseLevelEnum.ts +0 -4
  494. package/src/components/DownloadBtn/constants/ExpertiseLevelEnum.ts +0 -4
  495. package/src/components/ErrorPage/constants/ExpertiseLevelEnum.ts +0 -4
  496. package/src/components/ExternalLinks/constants/ExpertiseLevelEnum.ts +0 -4
  497. package/src/components/FileList/constants/ExpertiseLevelEnum.ts +0 -4
  498. package/src/components/FilePreview/constants/ExpertiseLevelEnum.ts +0 -4
  499. package/src/components/FileUpload/constants/ExpertiseLevelEnum.ts +0 -4
  500. package/src/components/FilterInline/constants/ExpertiseLevelEnum.ts +0 -4
  501. package/src/components/FilterSideBar/constants/ExpertiseLevelEnum.ts +0 -4
  502. package/src/components/FooterBar/constants/ExpertiseLevelEnum.ts +0 -4
  503. package/src/components/FranceConnectBtn/constants/ExpertiseLevelEnum.ts +0 -4
  504. package/src/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.ts +0 -4
  505. package/src/components/HeaderBar/constants/ExpertiseLevelEnum.ts +0 -4
  506. package/src/components/HeaderLoading/constants/ExpertiseLevelEnum.ts +0 -4
  507. package/src/components/HeaderToolbar/constants/ExpertiseLevelEnum.ts +0 -4
  508. package/src/components/LangBtn/constants/ExpertiseLevelEnum.ts +0 -4
  509. package/src/components/Logo/constants/ExpertiseLevelEnum.ts +0 -4
  510. package/src/components/LogoBrandSection/constants/ExpertiseLevelEnum.ts +0 -4
  511. package/src/components/MaintenancePage/constants/ExpertiseLevelEnum.ts +0 -4
  512. package/src/components/NirField/constants/ExpertiseLevelEnum.ts +0 -4
  513. package/src/components/NotFoundPage/constants/ExpertiseLevelEnum.ts +0 -4
  514. package/src/components/NotificationBar/constants/ExpertiseLevelEnum.ts +0 -4
  515. package/src/components/PageContainer/constants/ExpertiseLevelEnum.ts +0 -4
  516. package/src/components/PaginatedTable/constants/ExpertiseLevelEnum.ts +0 -4
  517. package/src/components/PaginatedTable/tests/__snapshots__/PaginatedTable.spec.ts.snap +0 -886
  518. package/src/components/PasswordField/constants/ExpertiseLevelEnum.ts +0 -4
  519. package/src/components/PeriodField/constants/ExpertiseLevelEnum.ts +0 -4
  520. package/src/components/PhoneField/constants/ExpertiseLevelEnum.ts +0 -4
  521. package/src/components/RangeField/constants/ExpertiseLevelEnum.ts +0 -4
  522. package/src/components/RatingPicker/constants/ExpertiseLevelEnum.ts +0 -4
  523. package/src/components/SearchListField/constants/ExpertiseLevelEnum.ts +0 -4
  524. package/src/components/SelectBtnField/constants/ExpertiseLevelEnum.ts +0 -4
  525. package/src/components/SkipLink/constants/ExpertiseLevelEnum.ts +0 -4
  526. package/src/components/SocialMediaLinks/constants/ExpertiseLevelEnum.ts +0 -4
  527. package/src/components/SubHeader/constants/ExpertiseLevelEnum.ts +0 -4
  528. package/src/components/SyAlert/constants/ExpertiseLevelEnum.ts +0 -4
  529. package/src/components/TableToolbar/constants/ExpertiseLevelEnum.ts +0 -4
  530. package/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.ts +0 -4
  531. package/src/components/UserMenuBtn/constants/ExpertiseLevelEnum.ts +0 -4
  532. package/src/stories/DesignTokens/ThemePA.mdx +0 -35
  533. /package/src/components/DatePicker/{examples → playground}/DatePickerHolidayRule.vue +0 -0
@@ -0,0 +1,52 @@
1
+ import { onMounted, onBeforeUnmount } from 'vue'
2
+
3
+ export interface AccordionGroupCommunication {
4
+ emitFocusChange: (itemId: string | null) => void
5
+ handleFocusChange: (event: CustomEvent) => void
6
+ }
7
+
8
+ export default function useAccordionGroupCommunication(
9
+ instanceId: string,
10
+ groupId: string,
11
+ onFocusChange: (itemId: string | null) => void,
12
+ ): AccordionGroupCommunication {
13
+ const ACCORDION_FOCUS_EVENT = 'accordion-focus-changed'
14
+
15
+ const handleFocusChange = (event: CustomEvent) => {
16
+ const { sourceInstanceId, groupId: eventGroupId } = event.detail
17
+
18
+ // Ignore les événements provenant de cette instance
19
+ if (sourceInstanceId === instanceId) return
20
+
21
+ // Ignore les événements d'autres groupes
22
+ if (eventGroupId !== groupId) return
23
+
24
+ // Réinitialise le focus dans cette instance
25
+ onFocusChange(null)
26
+ }
27
+
28
+ const emitFocusChange = (itemId: string | null) => {
29
+ const event = new CustomEvent(ACCORDION_FOCUS_EVENT, {
30
+ bubbles: true,
31
+ detail: {
32
+ sourceInstanceId: instanceId,
33
+ groupId,
34
+ itemId,
35
+ },
36
+ })
37
+ window.dispatchEvent(event)
38
+ }
39
+
40
+ onMounted(() => {
41
+ window.addEventListener(ACCORDION_FOCUS_EVENT, handleFocusChange as unknown as EventListener)
42
+ })
43
+
44
+ onBeforeUnmount(() => {
45
+ window.removeEventListener(ACCORDION_FOCUS_EVENT, handleFocusChange as unknown as EventListener)
46
+ })
47
+
48
+ return {
49
+ emitFocusChange,
50
+ handleFocusChange,
51
+ }
52
+ }
@@ -0,0 +1,111 @@
1
+ import { type Ref } from 'vue'
2
+
3
+ export interface AccordionItem {
4
+ id: string
5
+ title: string
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- mock Axios headers
7
+ content: any
8
+ headingLevel?: number
9
+ disabled?: boolean
10
+ }
11
+
12
+ export interface AccordionKeyboardNavigation {
13
+ handleKeyNavigation: (event: KeyboardEvent, itemId: string, index: number) => void
14
+ }
15
+
16
+ export default function useAccordionKeyboardNavigation(
17
+ items: Ref<AccordionItem[]> | AccordionItem[],
18
+ setFocus: (itemId: string | null) => void,
19
+ ): AccordionKeyboardNavigation {
20
+ // Gestion de la navigation clavier entre les éléments d'accordéon
21
+ const handleKeyNavigation = (event: KeyboardEvent, itemId: string, index: number) => {
22
+ if (event.key === 'ArrowDown') {
23
+ event.preventDefault()
24
+ focusNextHeader(index)
25
+ }
26
+ else if (event.key === 'ArrowUp') {
27
+ event.preventDefault()
28
+ focusPreviousHeader(index)
29
+ }
30
+ else if (event.key === 'Home') {
31
+ event.preventDefault()
32
+ focusFirstHeader()
33
+ }
34
+ else if (event.key === 'End') {
35
+ event.preventDefault()
36
+ focusLastHeader()
37
+ }
38
+ }
39
+
40
+ const getItemsArray = (): AccordionItem[] => {
41
+ return 'value' in items ? items.value : items
42
+ }
43
+
44
+ const focusNextHeader = (currentIndex: number) => {
45
+ const itemsArray = getItemsArray()
46
+ let nextIndex = (currentIndex + 1) % itemsArray.length
47
+
48
+ // Si le prochain élément est désactivé, on continue à chercher
49
+ let attempts = 0
50
+ while (itemsArray[nextIndex].disabled && attempts < itemsArray.length) {
51
+ nextIndex = (nextIndex + 1) % itemsArray.length
52
+ attempts++
53
+ }
54
+
55
+ focusHeaderByIndex(nextIndex)
56
+ }
57
+
58
+ const focusPreviousHeader = (currentIndex: number) => {
59
+ const itemsArray = getItemsArray()
60
+ let prevIndex = (currentIndex - 1 + itemsArray.length) % itemsArray.length
61
+
62
+ // Si l'élément précédent est désactivé, on continue à chercher
63
+ let attempts = 0
64
+ while (itemsArray[prevIndex].disabled && attempts < itemsArray.length) {
65
+ prevIndex = (prevIndex - 1 + itemsArray.length) % itemsArray.length
66
+ attempts++
67
+ }
68
+
69
+ focusHeaderByIndex(prevIndex)
70
+ }
71
+
72
+ const focusFirstHeader = () => {
73
+ const itemsArray = getItemsArray()
74
+ let index = 0
75
+
76
+ // Si le premier élément est désactivé, on cherche le prochain disponible
77
+ while (index < itemsArray.length && itemsArray[index].disabled) {
78
+ index++
79
+ }
80
+
81
+ if (index < itemsArray.length) {
82
+ focusHeaderByIndex(index)
83
+ }
84
+ }
85
+
86
+ const focusLastHeader = () => {
87
+ const itemsArray = getItemsArray()
88
+ let index = itemsArray.length - 1
89
+
90
+ // Si le dernier élément est désactivé, on cherche le précédent disponible
91
+ while (index >= 0 && itemsArray[index].disabled) {
92
+ index--
93
+ }
94
+
95
+ if (index >= 0) {
96
+ focusHeaderByIndex(index)
97
+ }
98
+ }
99
+
100
+ const focusHeaderByIndex = (index: number) => {
101
+ const itemsArray = getItemsArray()
102
+ const itemId = itemsArray[index].id
103
+ const headerElement = document.getElementById(`accordion-button-${itemId}`)
104
+ headerElement?.focus()
105
+ setFocus(itemId)
106
+ }
107
+
108
+ return {
109
+ handleKeyNavigation,
110
+ }
111
+ }
@@ -0,0 +1,59 @@
1
+ import { ref } from 'vue'
2
+
3
+ export interface AccordionState {
4
+ openItems: { value: string[] }
5
+ focusedItemId: { value: string | null }
6
+ toggleItem: (itemId: string) => void
7
+ isItemOpen: (itemId: string) => boolean
8
+ isItemFocused: (itemId: string) => boolean
9
+ setFocus: (itemId: string | null) => void
10
+ }
11
+
12
+ export default function useAccordionState(): AccordionState {
13
+ const openItems = ref<string[]>([])
14
+ const focusedItemId = ref<string | null>(null)
15
+
16
+ const toggleItem = (itemId: string) => {
17
+ // Si cet élément est déjà focalisé, on le garde en mémoire
18
+ const wasFocused = focusedItemId.value === itemId
19
+
20
+ const index = openItems.value.indexOf(itemId)
21
+ if (index === -1) {
22
+ openItems.value.push(itemId)
23
+ setFocus(itemId)
24
+ }
25
+ else {
26
+ openItems.value.splice(index, 1)
27
+ if (!wasFocused) {
28
+ setFocus(itemId)
29
+ }
30
+ else {
31
+ setFocus(null)
32
+ }
33
+ }
34
+ }
35
+
36
+ const isItemOpen = (itemId: string) => {
37
+ return openItems.value.includes(itemId)
38
+ }
39
+
40
+ const isItemFocused = (itemId: string) => {
41
+ return focusedItemId.value === itemId
42
+ }
43
+
44
+ // Méthode pour définir explicitement le focus sur un élément
45
+ const setFocus = (itemId: string | null) => {
46
+ if (focusedItemId.value === itemId) return
47
+
48
+ focusedItemId.value = itemId
49
+ }
50
+
51
+ return {
52
+ openItems,
53
+ focusedItemId,
54
+ toggleItem,
55
+ isItemOpen,
56
+ isItemFocused,
57
+ setFocus,
58
+ }
59
+ }
@@ -11,6 +11,7 @@ exports[`Accordion > renders correctly 1`] = `
11
11
  ">
12
12
  <div
13
13
  aria-controls="accordion-content-item1"
14
+ aria-disabled="false"
14
15
  aria-expanded="false"
15
16
  class="sy-accordion-button"
16
17
  id="accordion-button-item1"
@@ -58,6 +59,7 @@ exports[`Accordion > renders correctly 1`] = `
58
59
  ">
59
60
  <div
60
61
  aria-controls="accordion-content-item2"
62
+ aria-disabled="false"
61
63
  aria-expanded="false"
62
64
  class="sy-accordion-button"
63
65
  id="accordion-button-item2"
@@ -105,6 +107,7 @@ exports[`Accordion > renders correctly 1`] = `
105
107
  ">
106
108
  <div
107
109
  aria-controls="accordion-content-item3"
110
+ aria-disabled="false"
108
111
  aria-expanded="false"
109
112
  class="sy-accordion-button"
110
113
  id="accordion-button-item3"
@@ -1,4 +1,4 @@
1
- import { ExpertiseLevelEnum } from './constants/ExpertiseLevelEnum'
1
+ import { ExpertiseLevelEnum } from '@/common/constants/ExpertiseLevelEnum'
2
2
 
3
3
  export const AccessibiliteItemsIndeterminate = [
4
4
 
@@ -1,4 +1,4 @@
1
- import { ExpertiseLevelEnum } from './constants/ExpertiseLevelEnum'
1
+ import { ExpertiseLevelEnum } from '@/common/constants/ExpertiseLevelEnum'
2
2
 
3
3
  export const AccessibiliteItemsIndeterminate = [
4
4
 
@@ -1,4 +1,4 @@
1
- import { ExpertiseLevelEnum } from './constants/ExpertiseLevelEnum'
1
+ import { ExpertiseLevelEnum } from '@/common/constants/ExpertiseLevelEnum'
2
2
 
3
3
  export const AccessibiliteItemsIndeterminate = [
4
4
 
@@ -1,4 +1,4 @@
1
- import { ExpertiseLevelEnum } from './constants/ExpertiseLevelEnum'
1
+ import { ExpertiseLevelEnum } from '@/common/constants/ExpertiseLevelEnum'
2
2
 
3
3
  export const AccessibiliteItemsIndeterminate = [
4
4
  {
@@ -1,4 +1,4 @@
1
- import { ExpertiseLevelEnum } from './constants/ExpertiseLevelEnum'
1
+ import { ExpertiseLevelEnum } from '@/common/constants/ExpertiseLevelEnum'
2
2
 
3
3
  export const AccessibiliteItemsIndeterminate = [
4
4
  {
@@ -1,4 +1,4 @@
1
- import { ExpertiseLevelEnum } from './constants/ExpertiseLevelEnum'
1
+ import { ExpertiseLevelEnum } from '@/common/constants/ExpertiseLevelEnum'
2
2
 
3
3
  export const AccessibiliteItemsIndeterminate = [
4
4
 
@@ -1,4 +1,4 @@
1
- import { ExpertiseLevelEnum } from './constants/ExpertiseLevelEnum'
1
+ import { ExpertiseLevelEnum } from '@/common/constants/ExpertiseLevelEnum'
2
2
 
3
3
  export const AccessibiliteItemsIndeterminate = [
4
4
 
@@ -1,4 +1,4 @@
1
- import { ExpertiseLevelEnum } from './constants/ExpertiseLevelEnum'
1
+ import { ExpertiseLevelEnum } from '@/common/constants/ExpertiseLevelEnum'
2
2
 
3
3
  export const AccessibiliteItemsIndeterminate = [
4
4
 
@@ -0,0 +1,303 @@
1
+ import { Meta, Title, Subtitle, Description, Primary, Controls, Stories } from '@storybook/blocks';
2
+ import * as SyCheckboxStories from './SyCheckbox.stories';
3
+ import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg';
4
+
5
+ <Meta of={SyCheckboxStories} />
6
+
7
+ <div className="accessibility-guide">
8
+ <Title>Guide d'Accessibilité du Composant SyCheckbox</Title>
9
+
10
+ <div className="intro-section">
11
+ <img
12
+ src={AccessibilityIcon}
13
+ alt="Icône d'accessibilité"
14
+ className="accessibility-icon"
15
+ />
16
+ <p className="intro-text">
17
+ Le composant SyCheckbox a été conçu en suivant rigoureusement les recommandations d'accessibilité du W3C,
18
+ notamment le modèle <a href="https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/examples/checkbox-mixed/" target="_blank" rel="noopener noreferrer">WAI-ARIA pour les cases à cocher tri-état</a>.
19
+ Ce guide détaille comment notre implémentation respecte ces standards et garantit une expérience utilisateur inclusive.
20
+ </p>
21
+ </div>
22
+
23
+ <div className="criteria-section">
24
+ <h2>Critères d'accessibilité respectés</h2>
25
+
26
+ <div className="criteria-card">
27
+ <div className="criteria-header">
28
+ <span className="criteria-icon">🔍</span>
29
+ <h3>Structure sémantique</h3>
30
+ </div>
31
+ <ul>
32
+ <li><strong>Rôles ARIA appropriés</strong> : <code>role="checkbox"</code> pour la case à cocher</li>
33
+ <li><strong>État de la case à cocher</strong> : <code>aria-checked</code> avec les valeurs <code>true</code>, <code>false</code> ou <code>mixed</code> pour l'état indéterminé</li>
34
+ <li><strong>Relations entre éléments</strong> : <code>aria-controls</code> pour indiquer les éléments contrôlés par la case à cocher parent</li>
35
+ <li><strong>Étiquetage explicite</strong> : Association claire entre la case à cocher et son label</li>
36
+ </ul>
37
+ </div>
38
+
39
+ <div className="criteria-card">
40
+ <div className="criteria-header">
41
+ <span className="criteria-icon">⌨️</span>
42
+ <h3>Navigation clavier complète</h3>
43
+ </div>
44
+ <ul>
45
+ <li><strong>Touche Espace</strong> : Pour activer/désactiver la case à cocher</li>
46
+ <li><strong>Touche Tab</strong> : Navigation séquentielle entre les cases à cocher</li>
47
+ <li><strong>Focus visible</strong> : Indication claire de l'élément actuellement focalisé</li>
48
+ <li><strong>Gestion des états multiples</strong> : Cycle entre les états non coché, coché et indéterminé</li>
49
+ </ul>
50
+ </div>
51
+
52
+ <div className="criteria-card">
53
+ <div className="criteria-header">
54
+ <span className="criteria-icon">📱</span>
55
+ <h3>États et retours d'information</h3>
56
+ </div>
57
+ <ul>
58
+ <li><strong>État de sélection</strong> : <code>aria-checked</code> indique si la case est cochée, non cochée ou indéterminée</li>
59
+ <li><strong>État de désactivation</strong> : <code>aria-disabled</code> signale les éléments non disponibles</li>
60
+ <li><strong>Indication visuelle</strong> : Symboles distincts pour chaque état (coché, non coché, indéterminé)</li>
61
+ <li><strong>Validation visuelle</strong> : Couleurs et icônes spécifiques pour les états d'erreur, d'avertissement et de succès</li>
62
+ </ul>
63
+ </div>
64
+
65
+ <div className="criteria-card">
66
+ <div className="criteria-header">
67
+ <span className="criteria-icon">🎨</span>
68
+ <h3>Personnalisation accessible</h3>
69
+ </div>
70
+ <ul>
71
+ <li><strong>Contraste configurable</strong> : Options de couleurs pour garantir un contraste suffisant</li>
72
+ <li><strong>Taille et espacement</strong> : Dimensions adaptées pour faciliter l'interaction tactile</li>
73
+ <li><strong>Compatibilité avec le mode contraste élevé</strong> : Utilisation de <code>currentColor</code> pour s'adapter aux paramètres système</li>
74
+ <li><strong>Densité ajustable</strong> : Options de densité pour s'adapter aux besoins des utilisateurs</li>
75
+ </ul>
76
+ </div>
77
+ </div>
78
+
79
+ <div className="tri-state-section">
80
+ <h2>Fonctionnalité tri-état (indéterminé)</h2>
81
+ <p>
82
+ Le composant SyCheckbox prend en charge l'état indéterminé, particulièrement utile pour représenter :
83
+ </p>
84
+ <ul>
85
+ <li>Une sélection partielle d'éléments dans un groupe</li>
86
+ <li>Un état intermédiaire avant que l'utilisateur ne fasse un choix définitif</li>
87
+ <li>Une relation parent-enfant où certains éléments enfants sont sélectionnés</li>
88
+ </ul>
89
+ <p>
90
+ Conformément aux recommandations WAI-ARIA, notre implémentation de l'état indéterminé :
91
+ </p>
92
+ <ul>
93
+ <li>Utilise l'attribut <code>aria-checked="mixed"</code> pour les lecteurs d'écran</li>
94
+ <li>Fournit un indicateur visuel distinct pour l'état indéterminé</li>
95
+ <li>Gère correctement le cycle des états lors de l'interaction utilisateur</li>
96
+ <li>Maintient la cohérence entre l'état parent et les états des enfants</li>
97
+ </ul>
98
+ </div>
99
+
100
+ <div className="demo-section">
101
+ <h2>Démonstration interactive</h2>
102
+ <p>
103
+ Explorez ci-dessous un exemple de SyCheckbox entièrement accessible avec état indéterminé.
104
+ Essayez de naviguer en utilisant uniquement votre clavier (Tab pour naviguer, Espace pour activer) pour tester l'accessibilité.
105
+ </p>
106
+ <Primary />
107
+ </div>
108
+
109
+ <div className="parent-child-section">
110
+ <h2>Relation parent-enfant</h2>
111
+ <p>
112
+ Le composant SyCheckbox permet de créer des relations parent-enfant entre les cases à cocher, où :
113
+ </p>
114
+ <ul>
115
+ <li>La case à cocher parent contrôle l'état de toutes les cases à cocher enfants</li>
116
+ <li>L'état de la case à cocher parent reflète l'état collectif des enfants :</li>
117
+ <ul>
118
+ <li>Cochée : tous les enfants sont cochés</li>
119
+ <li>Non cochée : aucun enfant n'est coché</li>
120
+ <li>Indéterminée : certains enfants sont cochés, d'autres non</li>
121
+ </ul>
122
+ </ul>
123
+ <p>
124
+ Cette relation est établie via la propriété <code>controlsIds</code> qui liste les identifiants des cases à cocher enfants.
125
+ </p>
126
+ </div>
127
+
128
+ <div className="best-practices">
129
+ <h2>Bonnes pratiques d'utilisation</h2>
130
+ <ul>
131
+ <li>Utilisez des libellés clairs et concis pour décrire l'action associée à la case à cocher</li>
132
+ <li>Regroupez les cases à cocher liées dans un fieldset avec une légende explicative</li>
133
+ <li>Évitez de modifier l'état d'une case à cocher automatiquement sans action utilisateur explicite</li>
134
+ <li>Assurez-vous que la taille de la zone cliquable est suffisante (au moins 44×44 pixels pour les interfaces tactiles)</li>
135
+ <li>Utilisez l'état indéterminé uniquement pour indiquer une sélection partielle, pas un troisième état fonctionnel</li>
136
+ <li>Fournissez un retour visuel et textuel clair pour les erreurs de validation</li>
137
+ </ul>
138
+ </div>
139
+
140
+ <div className="resources-section">
141
+ <h2>Ressources supplémentaires</h2>
142
+ <ul>
143
+ <li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/" target="_blank" rel="noopener noreferrer">Guide des pratiques d'auteur WAI-ARIA pour les cases à cocher</a></li>
144
+ <li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/examples/checkbox-mixed/" target="_blank" rel="noopener noreferrer">Exemple de case à cocher tri-état WAI-ARIA</a></li>
145
+ <li><a href="https://www.w3.org/WAI/WCAG21/quickref/" target="_blank" rel="noopener noreferrer">Référence rapide WCAG 2.1</a></li>
146
+ <li><a href="https://www.w3.org/TR/wai-aria-1.2/#checkbox" target="_blank" rel="noopener noreferrer">Spécification WAI-ARIA 1.2 pour le rôle checkbox</a></li>
147
+ </ul>
148
+ </div>
149
+ </div>
150
+
151
+ <style>
152
+ {`
153
+ .accessibility-guide {
154
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
155
+ max-width: 1200px;
156
+ margin: 0 auto;
157
+ padding: 20px;
158
+ color: #333;
159
+ }
160
+
161
+ .intro-section {
162
+ display: flex;
163
+ align-items: center;
164
+ margin-bottom: 30px;
165
+ background-color: #f8f9fa;
166
+ padding: 20px;
167
+ border-radius: 8px;
168
+ border-left: 5px solid #0077cc;
169
+ }
170
+
171
+ .accessibility-icon {
172
+ width: 60px;
173
+ height: 60px;
174
+ margin-right: 20px;
175
+ flex-shrink: 0;
176
+ }
177
+
178
+ .intro-text {
179
+ font-size: 1.1em;
180
+ line-height: 1.6;
181
+ margin: 0;
182
+ }
183
+
184
+ .criteria-section {
185
+ margin-bottom: 40px;
186
+ }
187
+
188
+ .criteria-section h2,
189
+ .demo-section h2,
190
+ .tri-state-section h2,
191
+ .parent-child-section h2,
192
+ .best-practices h2,
193
+ .resources-section h2 {
194
+ border-bottom: 2px solid #eaecef;
195
+ padding-bottom: 10px;
196
+ margin-top: 30px;
197
+ margin-bottom: 20px;
198
+ color: #0077cc;
199
+ }
200
+
201
+ .criteria-card {
202
+ background-color: #fff;
203
+ border-radius: 8px;
204
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
205
+ padding: 20px;
206
+ margin-bottom: 20px;
207
+ }
208
+
209
+ .criteria-header {
210
+ display: flex;
211
+ align-items: center;
212
+ margin-bottom: 15px;
213
+ }
214
+
215
+ .criteria-icon {
216
+ font-size: 1.8em;
217
+ margin-right: 15px;
218
+ }
219
+
220
+ .criteria-header h3 {
221
+ margin: 0;
222
+ font-size: 1.3em;
223
+ color: #0077cc;
224
+ }
225
+
226
+ .criteria-card ul {
227
+ margin: 0;
228
+ padding-left: 20px;
229
+ }
230
+
231
+ .criteria-card li {
232
+ margin-bottom: 8px;
233
+ line-height: 1.5;
234
+ }
235
+
236
+ .demo-section {
237
+ background-color: #f8f9fa;
238
+ padding: 20px;
239
+ border-radius: 8px;
240
+ margin-bottom: 40px;
241
+ }
242
+
243
+ .tri-state-section,
244
+ .parent-child-section {
245
+ background-color: #f0f7ff;
246
+ padding: 20px;
247
+ border-radius: 8px;
248
+ margin-bottom: 30px;
249
+ }
250
+
251
+ .tri-state-section p,
252
+ .parent-child-section p {
253
+ line-height: 1.6;
254
+ }
255
+
256
+ .best-practices {
257
+ background-color: #f5f5f5;
258
+ padding: 20px;
259
+ border-radius: 8px;
260
+ margin-bottom: 30px;
261
+ }
262
+
263
+ .best-practices ul {
264
+ padding-left: 20px;
265
+ }
266
+
267
+ .best-practices li {
268
+ margin-bottom: 10px;
269
+ line-height: 1.5;
270
+ }
271
+
272
+ .resources-section {
273
+ background-color: #f8f9fa;
274
+ padding: 20px;
275
+ border-radius: 8px;
276
+ }
277
+
278
+ .resources-section ul {
279
+ padding-left: 20px;
280
+ }
281
+
282
+ .resources-section li {
283
+ margin-bottom: 10px;
284
+ }
285
+
286
+ .resources-section a {
287
+ color: #0077cc;
288
+ text-decoration: none;
289
+ }
290
+
291
+ .resources-section a:hover {
292
+ text-decoration: underline;
293
+ }
294
+
295
+ code {
296
+ background-color: #f0f0f0;
297
+ padding: 2px 5px;
298
+ border-radius: 3px;
299
+ font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
300
+ font-size: 0.9em;
301
+ }
302
+ `}
303
+ </style>
@@ -0,0 +1,50 @@
1
+ import { Meta, Canvas, Controls, Source } from '@storybook/blocks';
2
+ import * as SyCheckboxStories from "./SyCheckbox.stories";
3
+
4
+ <Meta of={SyCheckboxStories} />
5
+
6
+ # SyCheckbox
7
+
8
+ Le composant `SyCheckbox` est une case à cocher tri-état qui étend le composant `VCheckbox` de Vuetify, conforme au style du Design System et qui respecte les règles d'accessibilité <abbr title="Référentiel Général d'Amélioration de l'Accessibilité">RGAA</abbr>.
9
+
10
+ Il étend les fonctionnalités de base de Vuetify avec :
11
+
12
+ - Un état indéterminé pour les sélections partielles
13
+ - Un système de validation avancé
14
+ - Des états visuels (erreur, avertissement, succès)
15
+ - Une gestion de la relation parent-enfant via la propriété `controlsIds`
16
+
17
+ <Canvas of={SyCheckboxStories.Default} />
18
+
19
+ # API
20
+
21
+ <Controls of={SyCheckboxStories.Default} />
22
+
23
+ ## États
24
+
25
+ Le composant `SyCheckbox` peut avoir trois états :
26
+ - **Coché** : La case est cochée (modelValue = true)
27
+ - **Non coché** : La case est vide (modelValue = false)
28
+ - **Indéterminé** : La case est partiellement cochée (indeterminate = true)
29
+
30
+ L'état indéterminé est généralement utilisé pour représenter une sélection partielle dans un groupe d'éléments.
31
+
32
+ ## Validation
33
+
34
+ Le composant supporte trois types de validation :
35
+ - Règles d'erreur standard (`customRules`)
36
+ - Règles d'avertissement (`customWarningRules`)
37
+ - Règles de succès (`customSuccessRules`)
38
+
39
+ ### États visuels :
40
+
41
+ La case à cocher adapte automatiquement son apparence selon son état :
42
+ - Rouge pour les erreurs
43
+ - Orange pour les avertissements
44
+ - Vert pour les succès
45
+
46
+ ## Relation parent-enfant
47
+
48
+ La propriété `controlsIds` permet d'établir une relation entre une case à cocher parent et plusieurs cases à cocher enfants. Lorsque certains enfants sont cochés mais pas tous, le parent passe automatiquement en état indéterminé.
49
+
50
+ <Canvas of={SyCheckboxStories.WithControlsIds} />