@cnamts/synapse 1.0.11 → 1.0.13

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 (200) hide show
  1. package/dist/{DateFilter-QEfKOz0P.js → DateFilter-_EFzsvvM.js} +1 -1
  2. package/dist/{NumberFilter-C0h7gVzp.js → NumberFilter-CUxEbKJh.js} +1 -1
  3. package/dist/{PeriodFilter-8dVrKjju.js → PeriodFilter-D5ueqtKy.js} +1 -1
  4. package/dist/{SelectFilter-BI3QGbqb.js → SelectFilter-BciBNydy.js} +1 -1
  5. package/dist/{TextFilter-UOp1hcPp.js → TextFilter-DMN_WAQB.js} +1 -1
  6. package/dist/components/Amelipro/AmeliproAccordion/AmeliproAccordion.d.ts +7 -3
  7. package/dist/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.d.ts +1 -1
  8. package/dist/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.d.ts +2 -0
  9. package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.d.ts +7 -3
  10. package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.d.ts +1 -1
  11. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +50 -68
  12. package/dist/components/Amelipro/AmeliproCard/AmeliproCard.d.ts +1 -1
  13. package/dist/components/Amelipro/AmeliproIcon/AmeliproIcon.d.ts +1 -1
  14. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +5 -5
  15. package/dist/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.d.ts +1 -1
  16. package/dist/components/Amelipro/AmeliproNumberedCard/AmeliproNumberedCard.d.ts +1 -1
  17. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +24 -32
  18. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +36 -48
  19. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +50 -68
  20. package/dist/components/Amelipro/AmeliproTable/AmeliproTable.d.ts +4 -0
  21. package/dist/components/Amelipro/AmeliproTable/types.d.ts +11 -0
  22. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +50 -68
  23. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +0 -4
  24. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +12 -16
  25. package/dist/components/Captcha/Captcha.d.ts +68 -0
  26. package/dist/components/Captcha/CaptchaAlert.d.ts +13 -0
  27. package/dist/components/Captcha/CaptchaBase.d.ts +55 -0
  28. package/dist/components/Captcha/CaptchaBtn.d.ts +12 -0
  29. package/dist/components/Captcha/CaptchaForm.d.ts +16 -0
  30. package/dist/components/Captcha/CaptchaImg.d.ts +12 -0
  31. package/dist/components/Captcha/CaptchaInformation.d.ts +20 -0
  32. package/dist/components/Captcha/captchaApi.d.ts +41 -0
  33. package/dist/components/Captcha/icons/volumeUp.d.ts +2 -0
  34. package/dist/components/Captcha/locales.d.ts +35 -0
  35. package/dist/components/Captcha/types.d.ts +2 -0
  36. package/dist/components/ChipList/ChipList.d.ts +2 -2
  37. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +14 -14
  38. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +5 -5
  39. package/dist/components/Customs/SyForm/SyForm.d.ts +6 -3
  40. package/dist/components/Customs/SyTextField/SyTextField.d.ts +12 -16
  41. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +96 -68
  42. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +63 -38
  43. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +23 -27
  44. package/dist/components/DatePicker/composables/useDatePickerViewMode.d.ts +2 -1
  45. package/dist/components/DatePicker/tests/setup.d.ts +816 -520
  46. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +10 -10
  47. package/dist/components/NirField/NirField.d.ts +31 -34
  48. package/dist/components/NirField/locales.d.ts +1 -3
  49. package/dist/components/PasswordField/PasswordField.d.ts +2 -0
  50. package/dist/components/PeriodField/PeriodField.d.ts +192 -128
  51. package/dist/components/PhoneField/PhoneField.d.ts +13 -17
  52. package/dist/components/SearchListField/SearchListField.d.ts +5 -5
  53. package/dist/components/SyTextArea/SyTextArea.d.ts +0 -4
  54. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -8
  55. package/dist/components/Tables/SyTable/SyTable.d.ts +5 -8
  56. package/dist/components/Tables/common/SyTablePagination.d.ts +5 -5
  57. package/dist/components/Tables/common/types.d.ts +4 -0
  58. package/dist/components/Tables/common/usePagination.d.ts +3 -4
  59. package/dist/components/Tables/common/useTableCheckbox.d.ts +10 -6
  60. package/dist/components/index.d.ts +1 -0
  61. package/dist/composables/validation/useFormValidation.d.ts +10 -0
  62. package/dist/composables/validation/useValidatable.d.ts +10 -2
  63. package/dist/design-system-v3.js +126 -125
  64. package/dist/design-system-v3.umd.cjs +265 -265
  65. package/dist/main-DISHlqcd.js +34217 -0
  66. package/dist/style.css +1 -1
  67. package/package.json +1 -1
  68. package/src/assets/overrides/_forms.scss +2 -0
  69. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordion.stories.ts +7 -4
  70. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordion.vue +2 -0
  71. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +1 -0
  72. package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/__snapshots__/AmeliproAccordionFrieze.spec.ts.snap +574 -112
  73. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.stories.ts +5 -2
  74. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +2 -1
  75. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.stories.ts +6 -3
  76. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.vue +2 -0
  77. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.stories.ts +5 -2
  78. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +2 -1
  79. package/src/components/Amelipro/AmeliproCheckbox/__tests__/AmeliproCheckbox.spec.ts +175 -0
  80. package/src/components/Amelipro/AmeliproCheckbox/__tests__/__snapshots__/AmeliproCheckbox.spec.ts.snap +88 -0
  81. package/src/components/Amelipro/AmeliproCheckboxGroup/__tests__/AmeliproCheckboxGroup.spec.ts +423 -0
  82. package/src/components/Amelipro/AmeliproCheckboxGroup/{tests → __tests__}/__snapshots__/AmeliproCheckboxGroup.spec.ts.snap +112 -78
  83. package/src/components/Amelipro/AmeliproChips/__tests__/AmeliproChips.spec.ts +92 -0
  84. package/src/components/Amelipro/AmeliproChips/__tests__/__snapshots__/AmeliproChips.spec.ts.snap +81 -0
  85. package/src/components/Amelipro/AmeliproDialog/__tests__/AmeliproDialog.spec.ts +257 -0
  86. package/src/components/Amelipro/AmeliproDialog/__tests__/__snapshots__/AmeliproDialog.spec.ts.snap +61 -0
  87. package/src/components/Amelipro/AmeliproDisclosure/__tests__/AmeliproDisclosure.spec.ts +79 -0
  88. package/src/components/Amelipro/AmeliproDisclosure/__tests__/__snapshots__/AmeliproDisclosure.spec.ts.snap +89 -0
  89. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.vue +6 -7
  90. package/src/components/Amelipro/AmeliproFooter/__tests__/AmeliproFooter.spec.ts +787 -0
  91. package/src/components/Amelipro/AmeliproFooter/__tests__/__snapshots__/AmeliproFooter.spec.ts.snap +318 -0
  92. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/AmeliproHeaderBrandSection.spec.ts +167 -0
  93. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +100 -0
  94. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/__tests__/AmeliproHeaderBar.spec.ts +312 -0
  95. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/__tests__/__snapshots__/AmeliproHeaderBar.spec.ts.snap +98 -0
  96. package/src/components/Amelipro/AmeliproHeader/__tests__/AmeliproHeader.spec.ts +361 -0
  97. package/src/components/Amelipro/AmeliproHeader/__tests__/__snapshots__/AmeliproHeader.spec.ts.snap +22 -0
  98. package/src/components/Amelipro/AmeliproMenu/__tests__/AmeliproMenu.spec.ts +168 -0
  99. package/src/components/Amelipro/AmeliproMenu/__tests__/__snapshots__/AmeliproMenu.spec.ts.snap +295 -0
  100. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenuBtn/__tests__/AmeliproDropdownMenuBtn.spec.ts +128 -0
  101. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenuBtn/__tests__/__snapshots__/AmeliproDropdownMenuBtn.spec.ts.snap +67 -0
  102. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/__tests__/AmeliproDropdownMenu.spec.ts +266 -0
  103. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/__tests__/__snapshots__/AmeliproDropdownMenu.spec.ts.snap +134 -0
  104. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingMenuBtn/__tests__/AmeliproMessagingMenuBtn.spec.ts +72 -0
  105. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingMenuBtn/__tests__/__snapshots__/AmeliproMessagingMenuBtn.spec.ts.snap +71 -0
  106. package/src/components/Amelipro/AmeliproPageLayout/tests/__snapshots__/AmeliproPageLayout.spec.ts.snap +12 -0
  107. package/src/components/Amelipro/AmeliproTable/AmeliproTable.stories.ts +81 -9
  108. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +139 -61
  109. package/src/components/Amelipro/AmeliproTable/__tests__/AmeliproTable.spec.ts +10 -0
  110. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +361 -187
  111. package/src/components/Amelipro/AmeliproTable/types.d.ts +11 -0
  112. package/src/components/Captcha/Captcha.mdx +72 -0
  113. package/src/components/Captcha/Captcha.stories.ts +276 -0
  114. package/src/components/Captcha/Captcha.vue +325 -0
  115. package/src/components/Captcha/CaptchaAlert.vue +60 -0
  116. package/src/components/Captcha/CaptchaBase.vue +219 -0
  117. package/src/components/Captcha/CaptchaBtn.vue +35 -0
  118. package/src/components/Captcha/CaptchaForm.vue +58 -0
  119. package/src/components/Captcha/CaptchaImg.vue +41 -0
  120. package/src/components/Captcha/CaptchaInformation.vue +64 -0
  121. package/src/components/Captcha/captchaApi.ts +111 -0
  122. package/src/components/Captcha/icons/volumeUp.vue +11 -0
  123. package/src/components/Captcha/locales.ts +35 -0
  124. package/src/components/Captcha/readme.md +5 -0
  125. package/src/components/Captcha/tests/Captcha.spec.ts +298 -0
  126. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +716 -0
  127. package/src/components/Captcha/types.ts +2 -0
  128. package/src/components/Customs/Selects/SySelect/SySelect.vue +2 -2
  129. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +4 -0
  130. package/src/components/Customs/SyForm/SyForm.stories.ts +133 -23
  131. package/src/components/Customs/SyForm/SyForm.vue +17 -1
  132. package/src/components/Customs/SyTextField/SyTextField.vue +29 -7
  133. package/src/components/DatePicker/CalendarMode/DatePicker.vue +32 -9
  134. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +154 -18
  135. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +2 -2
  136. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +35 -4
  137. package/src/components/DatePicker/composables/tests/useDatePickerViewMode.spec.ts +107 -72
  138. package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +6 -6
  139. package/src/components/DatePicker/composables/useDatePickerViewMode.ts +57 -7
  140. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +14 -14
  141. package/src/components/DatePicker/tests/navigation.regression.spec.ts +74 -0
  142. package/src/components/DatePicker/tests/navigation.simple.spec.ts +137 -0
  143. package/src/components/NirField/NirField.stories.ts +85 -2
  144. package/src/components/NirField/NirField.vue +55 -18
  145. package/src/components/NirField/locales.ts +1 -3
  146. package/src/components/PasswordField/PasswordField.vue +39 -7
  147. package/src/components/PhoneField/PhoneField.vue +43 -10
  148. package/src/components/RangeField/tests/RangeField.spec.ts +0 -3
  149. package/src/components/Tables/SyServerTable/SyServerTable.mdx +15 -0
  150. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +309 -0
  151. package/src/components/Tables/SyServerTable/SyServerTable.vue +18 -3
  152. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +67 -0
  153. package/src/components/Tables/SyTable/SyTable.mdx +15 -0
  154. package/src/components/Tables/SyTable/SyTable.stories.ts +228 -0
  155. package/src/components/Tables/SyTable/SyTable.vue +18 -3
  156. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +63 -0
  157. package/src/components/Tables/common/SyTablePagination.vue +10 -8
  158. package/src/components/Tables/common/types.ts +4 -0
  159. package/src/components/Tables/common/usePagination.ts +11 -20
  160. package/src/components/Tables/common/useTableCheckbox.ts +23 -11
  161. package/src/components/index.ts +1 -0
  162. package/src/composables/validation/AvecVosComposants.mdx.old +1 -1
  163. package/src/composables/validation/FormValidation.stories.ts.old +5 -5
  164. package/src/composables/validation/useFormValidation.ts +46 -8
  165. package/src/composables/validation/useValidatable.ts +19 -8
  166. package/src/stories/Accessibilite/Introduction.mdx +1 -1
  167. package/src/stories/Demarrer/EnrichirLeDesignSystem.mdx +43 -0
  168. package/src/stories/Demarrer/EnrichirLeDesignSystem.stories.ts +239 -0
  169. package/src/stories/Demarrer/SignalerUneAnomalie.mdx +39 -0
  170. package/src/stories/Demarrer/SignalerUneAnomalie.stories.ts +261 -0
  171. package/dist/main-DyEOPqqn.js +0 -33329
  172. package/src/components/Amelipro/AmeliproCheckbox/tests/AmeliproCheckbox.spec.ts +0 -19
  173. package/src/components/Amelipro/AmeliproCheckbox/tests/__snapshots__/AmeliproCheckbox.spec.ts.snap +0 -40
  174. package/src/components/Amelipro/AmeliproCheckboxGroup/tests/AmeliproCheckboxGroup.spec.ts +0 -46
  175. package/src/components/Amelipro/AmeliproChips/tests/AmeliproChips.spec.ts +0 -16
  176. package/src/components/Amelipro/AmeliproChips/tests/__snapshots__/AmeliproChips.spec.ts.snap +0 -97
  177. package/src/components/Amelipro/AmeliproDialog/tests/AmeliproDialog.spec.ts +0 -24
  178. package/src/components/Amelipro/AmeliproDialog/tests/__snapshots__/AmeliproDialog.spec.ts.snap +0 -134
  179. package/src/components/Amelipro/AmeliproDisclosure/tests/AmeliproDisclosure.spec.ts +0 -19
  180. package/src/components/Amelipro/AmeliproDisclosure/tests/__snapshots__/AmeliproDisclosure.spec.ts.snap +0 -104
  181. package/src/components/Amelipro/AmeliproFooter/tests/AmeliproFooter.spec.ts +0 -15
  182. package/src/components/Amelipro/AmeliproFooter/tests/__snapshots__/AmeliproFooter.spec.ts.snap +0 -432
  183. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/tests/AmeliproHeaderBrandSection.spec.ts +0 -15
  184. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/tests/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +0 -131
  185. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/tests/AmeliproHeaderBar.spec.ts +0 -15
  186. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/tests/__snapshots__/AmeliproHeaderBar.spec.ts.snap +0 -172
  187. package/src/components/Amelipro/AmeliproHeader/tests/AmeliproHeader.spec.ts +0 -159
  188. package/src/components/Amelipro/AmeliproHeader/tests/__snapshots__/AmeliproHeader.spec.ts.snap +0 -841
  189. package/src/components/Amelipro/AmeliproMenu/tests/AmeliproMenu.spec.ts +0 -85
  190. package/src/components/Amelipro/AmeliproMenu/tests/__snapshots__/AmeliproMenu.spec.ts.snap +0 -537
  191. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenuBtn/tests/AmeliproDropdownMenuBtn.spec.ts +0 -16
  192. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenuBtn/tests/__snapshots__/AmeliproDropdownMenuBtn.spec.ts.snap +0 -56
  193. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/tests/AmeliproDropdownMenu.spec.ts +0 -28
  194. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/tests/__snapshots__/AmeliproDropdownMenu.spec.ts.snap +0 -300
  195. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingMenuBtn/tests/AmeliproMessagingMenuBtn.spec.ts +0 -16
  196. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingMenuBtn/tests/__snapshots__/AmeliproMessagingMenuBtn.spec.ts.snap +0 -89
  197. package/src/components/BackBtn/tests/__snapshots__/BackBtn.spec.ts.snap +0 -45
  198. package/src/components/RangeField/tests/__snapshots__/RangeField.spec.ts.snap +0 -1270
  199. package/src/stories/Demarrer/CreerUneIssue.mdx +0 -67
  200. package/src/stories/Demarrer/components.stories.ts +0 -25
@@ -3,12 +3,16 @@ import { provide, inject, ref, type InjectionKey, type Ref } from 'vue'
3
3
  // Type pour les composants pouvant être validés
4
4
  export interface ValidatableComponent {
5
5
  validateOnSubmit: () => Promise<boolean> | boolean
6
+ clearValidation?: () => void
7
+ reset?: () => void
6
8
  }
7
9
 
8
10
  // Clé d'injection pour le registre des composants validables
9
11
  const ValidatableComponentsKey: InjectionKey<{
10
12
  register: (component: ValidatableComponent) => void
11
13
  unregister: (component: ValidatableComponent) => void
14
+ clearAll: () => void
15
+ resetAll: () => void
12
16
  components: Ref<ValidatableComponent[]>
13
17
  }> = Symbol('ValidatableComponents')
14
18
 
@@ -29,23 +33,55 @@ export function useFormValidation() {
29
33
 
30
34
  // Fonction pour supprimer un composant validable du registre
31
35
  const unregister = (component: ValidatableComponent) => {
32
- const index = validatableComponents.value.indexOf(component)
36
+ // Prefer direct reference removal
37
+ let index = validatableComponents.value.indexOf(component)
38
+ // Fallback: locate by matching validateOnSubmit reference
39
+ if (index === -1) {
40
+ index = validatableComponents.value.findIndex(c => c.validateOnSubmit === component.validateOnSubmit)
41
+ }
33
42
  if (index !== -1) {
34
43
  validatableComponents.value.splice(index, 1)
35
44
  }
36
45
  }
37
46
 
47
+ // Fonction pour nettoyer les validations de tous les composants enregistrés
48
+ const clearAll = () => {
49
+ if (validatableComponents.value.length === 0) return
50
+ validatableComponents.value.forEach((component) => {
51
+ try {
52
+ component.clearValidation?.()
53
+ }
54
+ catch {
55
+ // no-op: un composant peut ne pas implémenter clearValidation
56
+ }
57
+ })
58
+ }
59
+
60
+ const resetAll = () => {
61
+ if (validatableComponents.value.length === 0) return
62
+ validatableComponents.value.forEach((component) => {
63
+ try {
64
+ component.reset?.()
65
+ }
66
+ catch {
67
+ // no-op: un composant peut ne pas implémenter reset
68
+ }
69
+ })
70
+ }
71
+
38
72
  // Fournir le registre aux composants enfants
39
73
  provide(ValidatableComponentsKey, {
40
74
  register,
41
75
  unregister,
76
+ clearAll,
77
+ resetAll,
42
78
  components: validatableComponents,
43
79
  })
44
80
 
45
81
  /**
46
- * Valide tous les composants enfants enregistrés
47
- * @returns Promise<boolean> - true si tous les composants sont valides
48
- */
82
+ * Valide tous les composants enfants enregistrés
83
+ * @returns Promise<boolean> - true si tous les composants sont valides
84
+ */
49
85
  const validateAll = async (): Promise<boolean> => {
50
86
  if (validatableComponents.value.length === 0) {
51
87
  return true
@@ -65,6 +101,8 @@ export function useFormValidation() {
65
101
  return {
66
102
  validateAll,
67
103
  validatableComponents,
104
+ clearAll,
105
+ resetAll,
68
106
  }
69
107
  }
70
108
 
@@ -73,19 +111,19 @@ export function useFormValidation() {
73
111
  * @returns Fonction pour s'enregistrer et se désinscrire du formulaire parent
74
112
  */
75
113
  export function useValidatableComponent() {
76
- // Récupérer le registre du formulaire parent
77
114
  const formRegistry = inject(ValidatableComponentsKey, null)
78
-
79
- // Si le composant n'est pas dans un formulaire avec useFormValidation, ne rien faire
80
115
  if (!formRegistry) {
81
116
  return {
82
117
  register: () => {},
83
118
  unregister: () => {},
119
+ clearAll: () => {},
120
+ resetAll: () => {},
84
121
  }
85
122
  }
86
-
87
123
  return {
88
124
  register: formRegistry.register,
89
125
  unregister: formRegistry.unregister,
126
+ clearAll: formRegistry.clearAll,
127
+ resetAll: formRegistry.resetAll,
90
128
  }
91
129
  }
@@ -14,26 +14,37 @@ import { useValidatableComponent } from './useFormValidation'
14
14
  * return isValid
15
15
  * }
16
16
  *
17
+ * const clearValidation = () => {
18
+ * // Logique de nettoyage de la validation
19
+ * }
20
+ *
21
+ * const reset = () => {
22
+ * // Logique de réinitialisation
23
+ * }
24
+ *
17
25
  * // Enregistrer le composant auprès du formulaire parent
18
- * useValidatable(validateOnSubmit)
26
+ * useValidatable(validateOnSubmit, clearValidation, reset)
19
27
  */
20
- export function useValidatable(validateMethod: () => Promise<boolean> | boolean) {
28
+ export function useValidatable(
29
+ validateMethod: () => Promise<boolean> | boolean,
30
+ clearValidation?: () => void,
31
+ reset?: () => void,
32
+ ) {
21
33
  const { register, unregister } = useValidatableComponent()
22
34
  const instance = getCurrentInstance()
23
35
 
36
+ // Keep a stable object reference for register/unregister symmetry
37
+ const componentRef = { validateOnSubmit: validateMethod, clearValidation, reset }
38
+
24
39
  onMounted(() => {
25
40
  if (instance) {
26
- register({
27
- validateOnSubmit: validateMethod,
28
- })
41
+ register(componentRef)
29
42
  }
30
43
  })
31
44
 
32
45
  onBeforeUnmount(() => {
33
46
  if (instance) {
34
- unregister({
35
- validateOnSubmit: validateMethod,
36
- })
47
+ unregister(componentRef)
37
48
  }
38
49
  })
39
50
 
@@ -220,7 +220,7 @@ Pour répondre aux objectifs de mise en conformité des interfaces utilisateurs
220
220
  <div>
221
221
  <h3>Besoin d'accompagnement ?</h3>
222
222
  <p>Si vous avez besoin d'un accompagnement sur le sujet, merci de prendre contact avec <a href="mailto:valentin.becquet@assurance-maladie.fr">valentin.becquet@assurance-maladie.fr</a>.</p>
223
- <p>Pour toute remontée de problème liée à l'accessibilité, veuillez <a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/new?template=accessibility.md">signaler un problème d'accessibilité</a>.</p>
223
+ <p>Pour toute remontée de problème liée à l'accessibilité, veuillez <a href="/?path=/docs/démarrer-signaler-une-anomalie--docs">signaler un problème d'accessibilité</a>.</p>
224
224
  </div>
225
225
  </div>
226
226
 
@@ -0,0 +1,43 @@
1
+ import {Meta, Story} from '@storybook/addon-docs/blocks';
2
+ import * as ComponentStories from './EnrichirLeDesignSystem.stories.ts';
3
+ import '../styles/shared.css';
4
+
5
+ <Meta title="Démarrer/Enrichir le Design System"/>
6
+
7
+ <div className="header">
8
+ <h1>Enrichir le Design System</h1>
9
+ </div>
10
+
11
+ ## Introduction
12
+
13
+ Le Design System de l'Assurance Maladie est un projet vivant qui évolue constamment pour répondre aux besoins des utilisateurs et aux avancées technologiques.<br/>
14
+ Votre contribution est essentielle pour garantir que le Design System reste pertinent, accessible et efficace.<br/>
15
+ Toute demande ne sera pas nécessairement intégrée, mais chaque suggestion est examinée avec attention par l'équipe du Studio Design.
16
+
17
+ <Story of={ComponentStories.InfoIntro}/>
18
+
19
+ <a id="exigences" />
20
+ ## Exigences requises pour acceptation d'un nouveau composant ou d'une nouvelle fonctionnalité
21
+
22
+ 1. Être **conforme aux exigences de la charte graphique** de la CNAM (tokens associés).
23
+ 2. Avoir un **intérêt d'usage pour plusieurs produits** de l'Assurance Maladie (une justification métier peut être demandée).
24
+ 3. Avoir un **intérêt d'usage ou de pertinence** par rapport aux **composants de la bibliothèque Vuetify**.
25
+ 4. Avoir un **intérêt d'usage ou de pertinence** par rapport aux **composants existant du Design System**.
26
+ 5. Doit permettre la **responsivité**.
27
+ 6. Doit permettre le **respect du Référentiel général d'amélioration de l'accessibilité** (RGAA).
28
+ 7. Doit permettre aux produits utilisateurs du composant de respecter des **bonnes pratiques d’éco-conception**.
29
+ 8. Doit permettre la **maintenabilité du composant**.
30
+ 9. Ne doit pas engendrer de **conflit** ou **régression** avec l'existant.
31
+ 10. Doit se conformer aux **exigences techniques** du Design System et à son bon fonctionnement sur le Starter Kit (VueJS 3, version des plugins...).
32
+
33
+ ## Créer une nouvelle demande
34
+
35
+ <Story of={ComponentStories.Optimisation}/>
36
+
37
+ <Story of={ComponentStories.AjoutFonctionnalite}/>
38
+
39
+ <Story of={ComponentStories.DeclinaisonFonctionnalite}/>
40
+
41
+ <Story of={ComponentStories.CreationComposant}/>
42
+
43
+ <Story of={ComponentStories.IntegrationComposant}/>
@@ -0,0 +1,239 @@
1
+ import { VExpansionPanels, VExpansionPanel, VExpansionPanelTitle, VExpansionPanelText } from 'vuetify/components'
2
+ import SyAlert from '../../components/SyAlert/SyAlert.vue'
3
+ import '../styles/shared.css'
4
+
5
+ export default {
6
+ title: 'Démarrer/Enrichir le Design System',
7
+ component: SyAlert,
8
+ }
9
+
10
+ export const InfoIntro = {
11
+ render: () => {
12
+ return {
13
+ components: { SyAlert },
14
+ setup() {
15
+ return {}
16
+ },
17
+ template: `
18
+ <SyAlert type="info" variant="tonal" :closable="false">
19
+ <template #default>
20
+ Toutes les demandes d'enrichissement sont traitées au fil de l'eau en fonction de la disponibilité de l'activité.<br/>Une première estimation sur le délai de livraison de la solution sera annoncée au moment de sa qualification.
21
+ </template>
22
+ </SyAlert>
23
+ `,
24
+ }
25
+ },
26
+ tags: ['!dev'],
27
+ }
28
+
29
+ export const Optimisation = {
30
+ render: () => {
31
+ return {
32
+ components: { VExpansionPanels, VExpansionPanel, VExpansionPanelTitle, VExpansionPanelText },
33
+ setup() {
34
+ return {}
35
+ },
36
+ template: `
37
+ <v-expansion-panels class="mt-6">
38
+ <v-expansion-panel>
39
+ <v-expansion-panel-title>
40
+ <p class="text-h5 text-primary">Ajout d'une optimisation</p>
41
+ </v-expansion-panel-title>
42
+ <v-expansion-panel-text>
43
+ <table>
44
+ <thead>
45
+ <tr style="background-color: rgb(12 65 154 / 10%)">
46
+ <th style="width: 60%">Description</th>
47
+ <th>Action</th>
48
+ </tr>
49
+ </thead>
50
+ <tbody>
51
+ <tr>
52
+ <td style="padding: 10px">L'optimisation est proposée en vue d'améliorer la qualité générale du design system.<br/>
53
+ Elle concerne soit un composant, une fonctionnalité spécifique associée, une page de documentation, une bonne pratique.<br/>
54
+ L'optimisation n'est pas indispensable au bon fonctionnement du projet. Si c'est le cas, merci de compléter l'anomalie fonctionnelle de niveau majeure.</td>
55
+ <td style="text-align: center;">
56
+ <v-btn style="text-decoration: none; color: rgb(2, 156, 253);" href="https://github.com/assurance-maladie-digital/design-system-v3/issues/new?template=optimisation.md" target="_blank">
57
+ Créer un ticket
58
+ </v-btn>
59
+ </td>
60
+ </tr>
61
+ </tbody>
62
+ </table>
63
+ </v-expansion-panel-text>
64
+ </v-expansion-panel>
65
+ </v-expansion-panels>
66
+ `,
67
+ }
68
+ },
69
+ tags: ['!dev'],
70
+ }
71
+
72
+ export const AjoutFonctionnalite = {
73
+ render: () => {
74
+ return {
75
+ components: { VExpansionPanels, VExpansionPanel, VExpansionPanelTitle, VExpansionPanelText },
76
+ setup() {
77
+ return {}
78
+ },
79
+ template: `
80
+ <v-expansion-panels class="mt-2">
81
+ <v-expansion-panel>
82
+ <v-expansion-panel-title>
83
+ <p class="text-h5 text-primary">Ajout d'une fonctionnalité</p>
84
+ </v-expansion-panel-title>
85
+ <v-expansion-panel-text>
86
+ <table>
87
+ <thead>
88
+ <tr style="background-color: rgb(12 65 154 / 10%)">
89
+ <th style="width: 60%">Description</th>
90
+ <th>Action</th>
91
+ </tr>
92
+ </thead>
93
+ <tbody>
94
+ <tr>
95
+ <td style="padding: 10px">Le Studio Design conçoit et fabrique entièrement une nouvelle fonctionnalité dans l'API du composant. Si le besoin concerne l'enrichissement d'une fonctionnalité déjà existante, merci d'utiliser le parcours "déclinaison d'une fonctionnalité".
96
+ Cette demande doit être justifiée par un besoin du métier et soumise à l'accord du chef de projet du projet associée.<br/>
97
+ Pour être recevable, les <a style="text-decoration: none; color: rgb(2, 156, 253);" href="#exigences" target="_self">critères d'acceptabilité</a> de la nouvelle fonctionnalité sont respectés.</td>
98
+ <td style="text-align: center;">
99
+ <v-btn style="text-decoration: none; color: rgb(2, 156, 253);" href="https://github.com/assurance-maladie-digital/design-system-v3/issues/new?template=feature_new.md" target="_blank">
100
+ Créer un ticket
101
+ </v-btn>
102
+ </td>
103
+ </tr>
104
+ </tbody>
105
+ </table>
106
+ </v-expansion-panel-text>
107
+ </v-expansion-panel>
108
+ </v-expansion-panels>
109
+ `,
110
+ }
111
+ },
112
+ tags: ['!dev'],
113
+ }
114
+
115
+ export const DeclinaisonFonctionnalite = {
116
+ render: () => {
117
+ return {
118
+ components: { VExpansionPanels, VExpansionPanel, VExpansionPanelTitle, VExpansionPanelText },
119
+ setup() {
120
+ return {}
121
+ },
122
+ template: `
123
+ <v-expansion-panels class="mt-2">
124
+ <v-expansion-panel>
125
+ <v-expansion-panel-title>
126
+ <p class="text-h5 text-primary">Déclinaison d'une fonctionnalité</p>
127
+ </v-expansion-panel-title>
128
+ <v-expansion-panel-text>
129
+ <table>
130
+ <thead>
131
+ <tr style="background-color: rgb(12 65 154 / 10%)">
132
+ <th style="width: 60%">Description</th>
133
+ <th>Action</th>
134
+ </tr>
135
+ </thead>
136
+ <tbody>
137
+ <tr>
138
+ <td style="padding: 10px">Le Studio Design améliore une fonctionnalité existante d'un composant.<br/>
139
+ Pour être recevable, les <a style="text-decoration: none; color: rgb(2, 156, 253);" href="#exigences" target="_self">critères d'acceptabilité</a> de la nouvelle fonctionnalité sont respectés.</td>
140
+ <td style="text-align: center;">
141
+ <v-btn style="text-decoration: none; color: rgb(2, 156, 253);" href="https://github.com/assurance-maladie-digital/design-system-v3/issues/new?template=feature_declinaison.md" target="_blank">
142
+ Créer un ticket
143
+ </v-btn>
144
+ </td>
145
+ </tr>
146
+ </tbody>
147
+ </table>
148
+ </v-expansion-panel-text>
149
+ </v-expansion-panel>
150
+ </v-expansion-panels>
151
+ `,
152
+ }
153
+ },
154
+ tags: ['!dev'],
155
+ }
156
+
157
+ export const CreationComposant = {
158
+ render: () => {
159
+ return {
160
+ components: { VExpansionPanels, VExpansionPanel, VExpansionPanelTitle, VExpansionPanelText },
161
+ setup() {
162
+ return {}
163
+ },
164
+ template: `
165
+ <v-expansion-panels class="mt-2">
166
+ <v-expansion-panel>
167
+ <v-expansion-panel-title>
168
+ <p class="text-h5 text-primary">Création d'un composant</p>
169
+ </v-expansion-panel-title>
170
+ <v-expansion-panel-text>
171
+ <table>
172
+ <thead>
173
+ <tr style="background-color: rgb(12 65 154 / 10%)">
174
+ <th style="width: 60%">Description</th>
175
+ <th>Action</th>
176
+ </tr>
177
+ </thead>
178
+ <tbody>
179
+ <tr>
180
+ <td style="padding: 10px">Le Studio Design conçoit et fabrique entièrement le composant et la documentation associée. Il met à disposition sa maquette à destination des designers sur l'outil de maquettage Figma.<br/>
181
+ Pour être recevable, les <a style="text-decoration: none; color: rgb(2, 156, 253);" href="#exigences" target="_self">critères d'acceptabilité</a> du nouveau composant sont respectés.</td>
182
+ <td style="text-align: center;">
183
+ <v-btn style="text-decoration: none; color: rgb(2, 156, 253);" href="https://github.com/assurance-maladie-digital/design-system-v3/issues/new?template=component_new.md" target="_blank">
184
+ Créer un ticket
185
+ </v-btn>
186
+ </td>
187
+ </tr>
188
+ </tbody>
189
+ </table>
190
+ </v-expansion-panel-text>
191
+ </v-expansion-panel>
192
+ </v-expansion-panels>
193
+ `,
194
+ }
195
+ },
196
+ tags: ['!dev'],
197
+ }
198
+
199
+ export const IntegrationComposant = {
200
+ render: () => {
201
+ return {
202
+ components: { VExpansionPanels, VExpansionPanel, VExpansionPanelTitle, VExpansionPanelText },
203
+ setup() {
204
+ return {}
205
+ },
206
+ template: `
207
+ <v-expansion-panels class="mt-2">
208
+ <v-expansion-panel>
209
+ <v-expansion-panel-title>
210
+ <p class="text-h5 text-primary">Intégration d'un composant</p>
211
+ </v-expansion-panel-title>
212
+ <v-expansion-panel-text>
213
+ <table>
214
+ <thead>
215
+ <tr style="background-color: rgb(12 65 154 / 10%)">
216
+ <th style="width: 60%">Description</th>
217
+ <th>Action</th>
218
+ </tr>
219
+ </thead>
220
+ <tbody>
221
+ <tr>
222
+ <td style="padding: 10px">Le composant est fabriqué en VueJS 3 et sur Figma par un projet puis intégré par le Studio Design dans le design system.<br/>Le Studio Design se charge de fabriquer la documentation associée.<br/>
223
+ Pour être recevable, les <a style="text-decoration: none; color: rgb(2, 156, 253);" href="#exigences" target="_self">critères d'acceptabilité</a> du nouveau composant sont respectés.</td>
224
+ <td style="text-align: center;">
225
+ <v-btn style="text-decoration: none; color: rgb(2, 156, 253);" href="https://github.com/assurance-maladie-digital/design-system-v3/issues/new?template=component_integration.md" target="_blank">
226
+ Créer un ticket
227
+ </v-btn>
228
+ </td>
229
+ </tr>
230
+ </tbody>
231
+ </table>
232
+ </v-expansion-panel-text>
233
+ </v-expansion-panel>
234
+ </v-expansion-panels>
235
+ `,
236
+ }
237
+ },
238
+ tags: ['!dev'],
239
+ }
@@ -0,0 +1,39 @@
1
+ import {Meta, Story} from '@storybook/addon-docs/blocks';
2
+ import * as ComponentStories from './SignalerUneAnomalie.stories.ts';
3
+ import '../styles/shared.css';
4
+
5
+ <Meta of={ComponentStories}/>
6
+
7
+ <div className="header">
8
+ <h1>Signaler une anomalie</h1>
9
+ </div>
10
+
11
+ ## Introduction
12
+
13
+ Les anomalies sont un moyen essentiel d'améliorer le Design System de la CNAM.
14
+ Lorsque vous constatez une anomalie, vous pouvez la signaler ici, l'équipe du Studio Design l'examinera et prendra les mesures appropriées.
15
+ Ce guide vous explique comment rédiger correctement une anomalie.
16
+
17
+ <Story of={ComponentStories.InfoIntro}/>
18
+
19
+ ## Créer une anomalie
20
+
21
+ <Story of={ComponentStories.AnomalieGraphique}/>
22
+
23
+ <Story of={ComponentStories.AnomalieFonctionnelle}/>
24
+
25
+ <Story of={ComponentStories.AnomalieAccessibilite}/>
26
+
27
+ <Story of={ComponentStories.AnomalieDocumentaire}/>
28
+
29
+ ## Bonnes pratiques
30
+
31
+ <Story of={ComponentStories.InfoPratiques}/>
32
+
33
+ 1. **Soyez précis** : Donnez autant de détails pertinents que possible
34
+ 2. **Un problème par issue** : Ne mélangez pas plusieurs problèmes dans une seule issue
35
+ 3. **Utilisez les labels** : Ajoutez les labels appropriés pour faciliter le tri et la priorisation
36
+ 4. **Vérifiez les doublons** : Avant de créer une nouvelle issue, vérifiez si elle n'existe pas déjà en cherchant dans
37
+ les [rapports existants](https://github.com/assurance-maladie-digital/design-system-v3/issues)
38
+ 5. **Soyez constructif** : Restez professionnel et focalisé sur la résolution du problème
39
+ 6. **Vérifiez la version du package utilisé** : Le bug est-il toujours présent dans la dernière version du package concerné ?