@cnamts/synapse 1.0.6 → 1.0.8

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 (235) hide show
  1. package/dist/{DateFilter-BlOpwEVq.js → DateFilter-DkqG0pmr.js} +1 -1
  2. package/dist/{NumberFilter-BPUXE4wY.js → NumberFilter-Ck7AwD39.js} +1 -1
  3. package/dist/{PeriodFilter-B2yx329_.js → PeriodFilter-LRI6YpgU.js} +1 -1
  4. package/dist/{SelectFilter-CedKn1oV.js → SelectFilter-DPc70Jk7.js} +1 -1
  5. package/dist/{TextFilter-DkhJjRtR.js → TextFilter-DRQL7uD8.js} +1 -1
  6. package/dist/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.d.ts +116 -0
  7. package/dist/components/Amelipro/AmeliproAccordionGroup/types.d.ts +4 -0
  8. package/dist/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.d.ts +220 -0
  9. package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.d.ts +68 -0
  10. package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.d.ts +70 -0
  11. package/dist/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.d.ts +204 -0
  12. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +26 -26
  13. package/dist/components/Amelipro/AmeliproBadge/AmeliproBadge.d.ts +59 -0
  14. package/dist/components/Amelipro/AmeliproBtn/AmeliproBtn.d.ts +3 -3
  15. package/dist/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.d.ts +1 -1
  16. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +214 -0
  17. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +70 -0
  18. package/dist/components/Amelipro/AmeliproCarousel/types.d.ts +7 -0
  19. package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +125 -0
  20. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +1 -1
  21. package/dist/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.d.ts +2 -2
  22. package/dist/components/Amelipro/AmeliproResultList/AmeliproResultList.d.ts +164 -0
  23. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +27 -27
  24. package/dist/components/Amelipro/AmeliproStateTile/AmeliproStateTile.d.ts +1 -1
  25. package/dist/components/Amelipro/AmeliproTable/AmeliproTable.d.ts +1 -1
  26. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +32 -32
  27. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +6 -6
  28. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +7 -7
  29. package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +1 -1
  30. package/dist/components/Amelipro/AmeliproTooltips/AmeliproTooltips.d.ts +2 -2
  31. package/dist/components/ChipList/ChipList.d.ts +4 -0
  32. package/dist/components/ChipList/locales.d.ts +4 -2
  33. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +8 -8
  34. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +329 -1296
  35. package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +0 -1
  36. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +2 -0
  37. package/dist/components/Customs/SyTabs/SyTabs.d.ts +71 -0
  38. package/dist/components/Customs/SyTabs/config.d.ts +17 -0
  39. package/dist/components/Customs/SyTabs/types.d.ts +11 -0
  40. package/dist/components/Customs/SyTextField/SyTextField.d.ts +9 -9
  41. package/dist/components/DataList/DataList.d.ts +1 -1
  42. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +4811 -240
  43. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +52 -33
  44. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +23 -10
  45. package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +1 -0
  46. package/dist/components/DatePicker/composables/useTodayButton.d.ts +1 -0
  47. package/dist/components/DialogBox/DialogBox.d.ts +219 -0
  48. package/dist/components/HeaderLoading/HeaderLoading.d.ts +27 -0
  49. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +110 -3
  50. package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +19 -1
  51. package/dist/components/LangBtn/LangBtn.d.ts +2 -2
  52. package/dist/components/NirField/NirField.d.ts +18 -18
  53. package/dist/components/PeriodField/PeriodField.d.ts +10766 -1620
  54. package/dist/components/PhoneField/PhoneField.d.ts +1866 -2
  55. package/dist/components/PhoneField/indicatifs.d.ts +1 -0
  56. package/dist/components/PhoneField/locales.d.ts +1 -0
  57. package/dist/components/RangeField/RangeField.d.ts +1 -1
  58. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +1 -1
  59. package/dist/components/SubHeader/SubHeader.d.ts +8 -0
  60. package/dist/components/SubHeader/locales.d.ts +1 -0
  61. package/dist/components/SyTextArea/SyTextArea.d.ts +6 -6
  62. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -4
  63. package/dist/components/Tables/SyTable/SyTable.d.ts +5 -4
  64. package/dist/components/Tables/common/SyTablePagination.d.ts +333 -1296
  65. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +2 -2
  66. package/dist/components/Tables/common/types.d.ts +2 -0
  67. package/dist/components/index.d.ts +9 -0
  68. package/dist/design-system-v3.js +173 -164
  69. package/dist/design-system-v3.umd.cjs +286 -263
  70. package/dist/{main-BXPFSAB4.js → main-DXMoMtj5.js} +13176 -11457
  71. package/dist/services/NotificationService.d.ts +1 -0
  72. package/dist/style.css +1 -1
  73. package/package.json +1 -1
  74. package/src/assets/amelipro/icons.ts +38 -11
  75. package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.mdx +20 -0
  76. package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.stories.ts +135 -0
  77. package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.vue +107 -0
  78. package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/AmeliproAccordionGroup.spec.ts +37 -0
  79. package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/__snapshots__/AmeliproAccordionGroup.spec.ts.snap +513 -0
  80. package/src/components/Amelipro/AmeliproAccordionGroup/types.d.ts +4 -0
  81. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.mdx +16 -0
  82. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.stories.ts +300 -0
  83. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +288 -0
  84. package/src/components/Amelipro/AmeliproAccordionList/__tests__/AmeliproAccordionList.spec.ts +38 -0
  85. package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +1712 -0
  86. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.mdx +19 -0
  87. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.stories.ts +68 -0
  88. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.vue +66 -0
  89. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.vue +145 -0
  90. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/AmeliproAccordionResultTemplate.spec.ts +24 -0
  91. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/__snapshots__/AmeliproAccordionResultTemplate.spec.ts.snap +127 -0
  92. package/src/components/Amelipro/AmeliproAccordionResult/__tests__/AmeliproAccordionResult.spec.ts +24 -0
  93. package/src/components/Amelipro/AmeliproAccordionResult/__tests__/__snapshots__/AmeliproAccordionResult.spec.ts.snap +123 -0
  94. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.mdx +20 -0
  95. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.stories.ts +273 -0
  96. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +275 -0
  97. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/AmeliproAccordionResultList.spec.ts +38 -0
  98. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +1593 -0
  99. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.mdx +15 -0
  100. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.stories.ts +54 -0
  101. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.vue +76 -0
  102. package/src/components/Amelipro/AmeliproBadge/__tests__/AmeliproBadge.spec.ts +20 -0
  103. package/src/components/Amelipro/AmeliproBadge/__tests__/__snapshots__/AmeliproBadge.spec.ts.snap +19 -0
  104. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.mdx +15 -0
  105. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.stories.ts +191 -0
  106. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.vue +263 -0
  107. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.vue +93 -0
  108. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/__tests__/AmeliproCarouselItem.spec.ts +24 -0
  109. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/__tests__/__snapshots__/AmeliproCarouselItem.spec.ts.snap +43 -0
  110. package/src/components/Amelipro/AmeliproCarousel/__tests__/AmeliproCarousel.spec.ts +40 -0
  111. package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +342 -0
  112. package/src/components/Amelipro/AmeliproCarousel/types.d.ts +8 -0
  113. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.mdx +18 -0
  114. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.stories.ts +67 -0
  115. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +233 -0
  116. package/src/components/Amelipro/AmeliproClickableTile/tests/AmeliproClickableTile.spec.ts +21 -0
  117. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +140 -0
  118. package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +7 -1
  119. package/src/components/Amelipro/AmeliproHeader/tests/__snapshots__/AmeliproHeader.spec.ts.snap +5 -4
  120. package/src/components/Amelipro/AmeliproIcon/iconList.ts +6 -0
  121. package/src/components/Amelipro/AmeliproPageLayout/tests/__snapshots__/AmeliproPageLayout.spec.ts.snap +5 -4
  122. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.mdx +15 -0
  123. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.stories.ts +264 -0
  124. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +231 -0
  125. package/src/components/Amelipro/AmeliproResultList/__tests__/AmeliproResultList.spec.ts +37 -0
  126. package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +434 -0
  127. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +6 -5
  128. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +23 -26
  129. package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.stories.ts +2 -2
  130. package/src/components/ChipList/Accessibilite.stories.ts +4 -0
  131. package/src/components/ChipList/ChipList.vue +185 -42
  132. package/src/components/ChipList/locales.ts +4 -2
  133. package/src/components/ChipList/tests/chipList.spec.ts +7 -4
  134. package/src/components/Customs/Selects/SelectOverview.mdx +34 -66
  135. package/src/components/Customs/Selects/SyBtnSelect/SyBtnSelect.stories.ts +10 -10
  136. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.mdx +3 -0
  137. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +14 -0
  138. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +14 -6
  139. package/src/components/Customs/Selects/SySelect/SySelect.vue +268 -205
  140. package/src/components/Customs/Selects/SySelect/composables/tests/useSySelectKeyboard.spec.ts +0 -10
  141. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +0 -5
  142. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +184 -25
  143. package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +3 -1
  144. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +165 -0
  145. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +28 -9
  146. package/src/components/Customs/SyTabs/Accessibilite.mdx +309 -0
  147. package/src/components/Customs/SyTabs/SyTabs.mdx +117 -0
  148. package/src/components/Customs/SyTabs/SyTabs.stories.ts +354 -0
  149. package/src/components/Customs/SyTabs/SyTabs.vue +413 -0
  150. package/src/components/Customs/SyTabs/config.ts +17 -0
  151. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +425 -0
  152. package/src/components/Customs/SyTabs/types.ts +12 -0
  153. package/src/components/Customs/SyTextField/SyTextField.mdx +3 -0
  154. package/src/components/Customs/SyTextField/SyTextField.stories.ts +142 -1
  155. package/src/components/Customs/SyTextField/SyTextField.vue +19 -16
  156. package/src/components/DataList/DataList.vue +47 -49
  157. package/src/components/DataListGroup/DataListGroup.vue +1 -1
  158. package/src/components/DataListItem/DataListItem.vue +67 -63
  159. package/src/components/DataListItem/tests/DataListItem.spec.ts +2 -2
  160. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +3 -3
  161. package/src/components/DatePicker/CalendarMode/DatePicker.vue +49 -13
  162. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +412 -649
  163. package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +215 -0
  164. package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +218 -0
  165. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.mdx +2 -0
  166. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +1 -1
  167. package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +218 -0
  168. package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +281 -0
  169. package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +17 -4
  170. package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +111 -18
  171. package/src/components/DatePicker/DateTextInput/DateTextInput.spec.ts +238 -6
  172. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +716 -757
  173. package/src/components/DatePicker/composables/tests/useDateInputEditing.spec.ts +4 -4
  174. package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +17 -10
  175. package/src/components/DatePicker/composables/useDateInputEditing.ts +52 -22
  176. package/src/components/DatePicker/composables/useDisplayedDateString.ts +18 -4
  177. package/src/components/DatePicker/composables/useTodayButton.ts +13 -1
  178. package/src/components/DatePicker/utils/dateFormattingUtils.ts +79 -14
  179. package/src/components/DialogBox/DialogBox.stories.ts +12 -0
  180. package/src/components/DialogBox/DialogBox.vue +16 -11
  181. package/src/components/DialogBox/tests/DialogBox.spec.ts +22 -0
  182. package/src/components/HeaderLoading/Accessibilite.mdx +429 -8
  183. package/src/components/HeaderLoading/Accessibilite.stories.ts +4 -0
  184. package/src/components/HeaderLoading/HeaderLoading.vue +59 -0
  185. package/src/components/HeaderNavigationBar/HeaderNavigationBar.mdx +17 -2
  186. package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +91 -2
  187. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +37 -1
  188. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +284 -21
  189. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +2 -2
  190. package/src/components/NirField/NirField.mdx +3 -0
  191. package/src/components/NirField/NirField.vue +10 -1
  192. package/src/components/NirField/tests/NirField.spec.ts +81 -0
  193. package/src/components/NotificationBar/NotificationBar.stories.ts +128 -2
  194. package/src/components/NotificationBar/NotificationBar.vue +16 -1
  195. package/src/components/NotificationBar/tests/NotificationBar.spec.ts +65 -0
  196. package/src/components/PasswordField/PasswordField.mdx +3 -0
  197. package/src/components/PeriodField/PeriodField.mdx +2 -0
  198. package/src/components/PeriodField/PeriodField.stories.ts +195 -0
  199. package/src/components/PhoneField/Accessibilite.stories.ts +4 -0
  200. package/src/components/PhoneField/PhoneField.mdx +3 -1
  201. package/src/components/PhoneField/PhoneField.stories.ts +285 -1
  202. package/src/components/PhoneField/PhoneField.vue +228 -95
  203. package/src/components/PhoneField/indicatifs.ts +102 -102
  204. package/src/components/PhoneField/locales.ts +1 -0
  205. package/src/components/PhoneField/tests/PhoneField.spec.ts +419 -2
  206. package/src/components/SkipLink/SkipLink.vue +3 -31
  207. package/src/components/SkipLink/tests/skipLink.spec.ts +0 -21
  208. package/src/components/SubHeader/Accessibilite.stories.ts +8 -0
  209. package/src/components/SubHeader/SubHeader.mdx +1 -0
  210. package/src/components/SubHeader/SubHeader.stories.ts +179 -60
  211. package/src/components/SubHeader/SubHeader.vue +45 -15
  212. package/src/components/SubHeader/locales.ts +1 -0
  213. package/src/components/SyAlert/SyAlert.vue +6 -0
  214. package/src/components/Tables/SyServerTable/SyServerTable.mdx +3 -10
  215. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +242 -0
  216. package/src/components/Tables/SyServerTable/SyServerTable.vue +29 -10
  217. package/src/components/Tables/SyTable/SyTable.mdx +3 -10
  218. package/src/components/Tables/SyTable/SyTable.stories.ts +242 -0
  219. package/src/components/Tables/SyTable/SyTable.vue +2 -0
  220. package/src/components/Tables/common/SyTablePagination.vue +13 -6
  221. package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +6 -1
  222. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +157 -0
  223. package/src/components/Tables/common/types.ts +2 -0
  224. package/src/components/index.ts +9 -0
  225. package/src/composables/useFilterable/useFilterable.ts +10 -0
  226. package/src/designTokens/tokens/amelipro/apColors.ts +1 -1
  227. package/src/designTokens/tokens/cnam/cnamSemantic.ts +3 -3
  228. package/src/services/NotificationService.ts +9 -0
  229. package/src/stories/Components/Components.stories.ts +1 -1
  230. package/src/stories/GuideDuDev/FormValidationGuide.mdx +342 -0
  231. package/src/stories/Templates/Templates.stories.ts +1 -1
  232. package/src/utils/functions/ameliproColors/ameliproColors.ts +1 -1
  233. package/dist/components/DataList/locales.d.ts +0 -3
  234. package/src/components/DataList/locales.ts +0 -3
  235. package/src/components/PhoneField/tests/PhoneField.additional.spec.ts +0 -266
@@ -0,0 +1,15 @@
1
+ import { Controls, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import * as AmeliproBadgeStories from './AmeliproBadge.stories';
4
+
5
+ <Meta of={AmeliproBadgeStories} />
6
+
7
+ # AmeliproBadge
8
+
9
+ L’élément `AmeliproBadge` est utilisé pour afficher des indicateurs numériques associés à des liens ou boutons.
10
+
11
+ <Canvas of={AmeliproBadgeStories.Default} />
12
+
13
+ ## API
14
+
15
+ <Controls of={AmeliproBadgeStories.Default} />
@@ -0,0 +1,54 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import AmeliproBadge from './AmeliproBadge.vue'
3
+
4
+ const meta = {
5
+ argTypes: {
6
+ badgeColor: { description: 'Défini la couleur du badge' },
7
+ badgeContent: { description: 'Texte à l’intérieur du badge' },
8
+ badgeTextColor: { description: 'Défini la couleur du text du badge' },
9
+ isSpan: { description: 'Gère le type de balise HTML du composant, `p` ou `span`' },
10
+ roundedRight: { description: 'Active l’apparence label avec un border radius a droite' },
11
+ uniqueId: { description: 'Identifiant unique du badge' },
12
+ },
13
+ component: AmeliproBadge,
14
+ title: 'Composants/Amelipro/AmeliproBadge',
15
+ } as Meta<typeof AmeliproBadge>
16
+ export default meta
17
+
18
+ type Story = StoryObj<typeof AmeliproBadge>
19
+
20
+ export const Default: Story = {
21
+ args: { badgeContent: 'Contenu du badge' },
22
+ parameters: {
23
+ sourceCode: [
24
+ {
25
+ name: 'Template',
26
+ code: `<template>
27
+ <AmeliproBadge
28
+ badge-content="Contenu du badge"
29
+ />
30
+ </template>
31
+ `,
32
+ },
33
+ {
34
+ name: 'Scripts',
35
+ code: `<script setup lang="ts">
36
+ import { AmeliproBadge } from '@cnamts/synapse'
37
+ </script>
38
+ `,
39
+ },
40
+ ],
41
+ },
42
+ render: args => ({
43
+ components: { AmeliproBadge },
44
+ setup() {
45
+ return { args }
46
+ },
47
+ template: `
48
+ <AmeliproBadge
49
+ v-bind="args"
50
+ />
51
+ `,
52
+ }),
53
+
54
+ }
@@ -0,0 +1,76 @@
1
+ <script setup lang="ts">
2
+ import type { IndexedObject } from '../types'
3
+ import { computed } from 'vue'
4
+ import { convertToHex } from '@/utils/functions/convertToHex'
5
+
6
+ const props = defineProps({
7
+ badgeColor: {
8
+ type: String,
9
+ default: 'ap-blue-darken-1',
10
+ },
11
+ badgeContent: {
12
+ type: String,
13
+ default: undefined,
14
+ },
15
+ badgeTextColor: {
16
+ type: String,
17
+ default: 'ap-white',
18
+ },
19
+ isSpan: {
20
+ type: Boolean,
21
+ default: false,
22
+ },
23
+ roundedRight: {
24
+ type: Boolean,
25
+ default: false,
26
+ },
27
+ uniqueId: {
28
+ type: String,
29
+ default: undefined,
30
+ },
31
+ })
32
+
33
+ const style = computed <IndexedObject>(() => ({ backgroundColor: convertToHex(props.badgeColor) }))
34
+ const styleText = computed <IndexedObject>(() => ({ color: convertToHex(props.badgeTextColor) }))
35
+ </script>
36
+
37
+ <template>
38
+ <Component
39
+ :is="isSpan ? 'span' : 'p'"
40
+ :id="uniqueId"
41
+ class="amelipro-badge"
42
+ :class="roundedRight ? 'round-custom' : 'round-classic'"
43
+ :style="style"
44
+ >
45
+ <span
46
+ class="amelipro-badge__content"
47
+ :style="styleText"
48
+ >
49
+ {{ badgeContent }}
50
+ </span>
51
+ </Component>
52
+ </template>
53
+
54
+ <style lang="scss" scoped>
55
+ @use '@/assets/amelipro/apTokens';
56
+
57
+ .amelipro-badge {
58
+ display: inline-block;
59
+ margin-left: 0.5rem;
60
+ padding: 0.5rem 1rem !important;
61
+
62
+ &.round-custom {
63
+ border-radius: 0.5rem 1rem 1rem 0.5rem;
64
+ }
65
+
66
+ &.round-classic {
67
+ border-radius: 1rem;
68
+ }
69
+ }
70
+
71
+ .amelipro-badge__content {
72
+ display: inline-block;
73
+ font-size: apTokens.$font-size-sm !important;
74
+ font-weight: apTokens.$ap-font-weight-bold !important;
75
+ }
76
+ </style>
@@ -0,0 +1,20 @@
1
+ import { mount } from '@vue/test-utils'
2
+ import { expect, describe, it } from 'vitest'
3
+ import AmeliproBadge from '../AmeliproBadge.vue'
4
+ import { vuetify } from '@tests/unit/setup'
5
+
6
+ describe('AmeliproBadge', () => {
7
+ it('render correctly', async () => {
8
+ const wrapper = mount(AmeliproBadge, {
9
+ global: {
10
+ plugins: [vuetify],
11
+ },
12
+ props: {
13
+ badgeContent: 'contenu du badge',
14
+ uniqueId: 'my-badge-id',
15
+ },
16
+ })
17
+
18
+ expect(wrapper.html()).toMatchSnapshot()
19
+ })
20
+ })
@@ -0,0 +1,19 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`AmeliproBadge > render correctly 1`] = `
4
+ <p
5
+ class="
6
+ amelipro-badge
7
+ round-classic
8
+ "
9
+ id="my-badge-id"
10
+ style="background-color: #00749C;"
11
+ >
12
+ <span
13
+ class="amelipro-badge__content"
14
+ style="color: #FFFFFF;"
15
+ >
16
+ contenu du badge
17
+ </span>
18
+ </p>
19
+ `;
@@ -0,0 +1,15 @@
1
+ import { Controls, Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import * as AmeliproCarouselStories from './AmeliproCarousel.stories';
4
+
5
+ <Meta of={AmeliproCarouselStories} />
6
+
7
+ # AmeliproCarousel
8
+
9
+ L’élément `AmeliproCarousel` est utilisé pour afficher tous les éléments de type Carrousel dans la charte Amelipro
10
+
11
+ <Canvas of={AmeliproCarouselStories.Default} />
12
+
13
+ ## API
14
+
15
+ <Controls of={AmeliproCarouselStories.Default} />
@@ -0,0 +1,191 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import AmeliproBtn from '../AmeliproBtn/AmeliproBtn.vue'
3
+ import AmeliproCard from '../AmeliproCard/AmeliproCard.vue'
4
+ import AmeliproCarousel from './AmeliproCarousel.vue'
5
+
6
+ const meta = {
7
+ argTypes: {
8
+ '`${uniqueId}-slot-item-${index}`': { description: 'Slots générés automatiquement pour chaque slide, l’id est celui du carrousel et index est la position de la slide' },
9
+ 'duration': { description: 'Durée de transition entre les slides du carrousel en secondes' },
10
+ 'infiniteRotation': { description: 'Booléen permettant de faire boucler les slides du carrousel' },
11
+ 'item': { description: 'Slots générés automatiquement pour chaque slide, afin de donner le même aspect à tous les items' },
12
+ 'items': {
13
+ description: 'Tableau comprenant la liste des slides (si vous voulez utiliser les slots, créez un objet vide `{}` dans ce tableau pour chaque slide)',
14
+ table: {
15
+ type: {
16
+ detail: `Array <{
17
+ href?: string;
18
+ imgSrc?: string;
19
+ imgAlt?: string;
20
+ to?: RouteLocationRaw;
21
+ }>`,
22
+ summary: 'AmeliproCarouselListItem[]',
23
+ },
24
+ },
25
+ },
26
+ 'labelNextBtn': { description: 'Libellé du bouton suivant, il est affiché au survol du bouton' },
27
+ 'labelPreviousBtn': { description: 'Libellé du bouton précédent, il est affiché au survol du bouton' },
28
+ 'title': { description: 'Titre du carrousel doit être pertinent par rapport au contenu' },
29
+ 'uniqueId': { description: 'Identifiant unique du carrousel' },
30
+ },
31
+ component: AmeliproCarousel,
32
+ title: 'Composants/Amelipro/Mise en page/AmeliproCarousel',
33
+ } as Meta<typeof AmeliproCarousel>
34
+ export default meta
35
+
36
+ type Story = StoryObj<typeof AmeliproCarousel>
37
+
38
+ export const Default: Story = {
39
+ args: {
40
+ items: [{}, {}, {}],
41
+ title: 'Titre du carrousel',
42
+ uniqueId: 'amelipro-carousel-id',
43
+ },
44
+ parameters: {
45
+ sourceCode: [
46
+ {
47
+ name: 'Template',
48
+ code: `<template>
49
+ <AmeliproCarousel
50
+ :items="items"
51
+ title="Titre du carrousel"
52
+ unique-id="amelipro-carousel-id"
53
+ >
54
+ <template #amelipro-carousel-id-slot-item-0>
55
+ <div class="d-flex">
56
+ <AmeliproCard card-title="Slide 1">
57
+ <template #default>
58
+ <p class="mb-0">
59
+ Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée
60
+ à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le
61
+ faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise
62
+ un texte en faux latin, le Lorem ipsum ou Lipsum.
63
+ </p>
64
+ <AmeliproBtn class="mt-2">
65
+ bouton slide 1
66
+ </AmeliproBtn>
67
+ </template>
68
+ </AmeliproCard>
69
+ </div>
70
+ </template>
71
+
72
+ <template #amelipro-carousel-id-slot-item-1>
73
+ <div class="d-flex">
74
+ <AmeliproCard card-title="Slide 2">
75
+ <template #default>
76
+ <p class="mb-0">
77
+ Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée
78
+ à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le
79
+ faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise
80
+ un texte en faux latin, le Lorem ipsum ou Lipsum.
81
+ </p>
82
+ <AmeliproBtn class="mt-2">
83
+ bouton slide 2
84
+ </AmeliproBtn>
85
+ </template>
86
+ </AmeliproCard>
87
+ </div>
88
+ </template>
89
+
90
+ <template #amelipro-carousel-id-slot-item-2>
91
+ <div class="d-flex">
92
+ <AmeliproCard card-title="Slide 3">
93
+ <template #default>
94
+ <p class="mb-0">
95
+ Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée
96
+ à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le
97
+ faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise
98
+ un texte en faux latin, le Lorem ipsum ou Lipsum.
99
+ </p>
100
+ <AmeliproBtn class="mt-2">
101
+ bouton slide 3
102
+ </AmeliproBtn>
103
+ </template>
104
+ </AmeliproCard>
105
+ </div>
106
+ </template>
107
+ </AmeliproCarousel>
108
+ </template>
109
+ `,
110
+ },
111
+ {
112
+ name: 'Script',
113
+ code: `<script setup lang="ts">
114
+ import { AmeliproBtn, AmeliproCard, AmeliproCarousel } from '@cnamts/synapse'
115
+
116
+ const items = [
117
+ {},
118
+ {},
119
+ {},
120
+ ]
121
+ </script>
122
+ `,
123
+ },
124
+ ],
125
+ },
126
+ render: args => ({
127
+ components: { AmeliproBtn, AmeliproCard, AmeliproCarousel },
128
+ setup() {
129
+ return { args }
130
+ },
131
+ template: `
132
+ <AmeliproCarousel
133
+ v-bind="args"
134
+ >
135
+ <template #amelipro-carousel-id-slot-item-0>
136
+ <div class="d-flex">
137
+ <AmeliproCard card-title="Slide 1">
138
+ <template #default>
139
+ <p class="mb-0">
140
+ Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée
141
+ à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le
142
+ faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise
143
+ un texte en faux latin, le Lorem ipsum ou Lipsum.
144
+ </p>
145
+ <AmeliproBtn class="mt-2">
146
+ bouton slide 1
147
+ </AmeliproBtn>
148
+ </template>
149
+ </AmeliproCard>
150
+ </div>
151
+ </template>
152
+
153
+ <template #amelipro-carousel-id-slot-item-1>
154
+ <div class="d-flex">
155
+ <AmeliproCard card-title="Slide 2">
156
+ <template #default>
157
+ <p class="mb-0">
158
+ Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée
159
+ à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le
160
+ faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise
161
+ un texte en faux latin, le Lorem ipsum ou Lipsum.
162
+ </p>
163
+ <AmeliproBtn class="mt-2">
164
+ bouton slide 2
165
+ </AmeliproBtn>
166
+ </template>
167
+ </AmeliproCard>
168
+ </div>
169
+ </template>
170
+
171
+ <template #amelipro-carousel-id-slot-item-2>
172
+ <div class="d-flex">
173
+ <AmeliproCard card-title="Slide 3">
174
+ <template #default>
175
+ <p class="mb-0">
176
+ Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée
177
+ à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le
178
+ faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise
179
+ un texte en faux latin, le Lorem ipsum ou Lipsum.
180
+ </p>
181
+ <AmeliproBtn class="mt-2">
182
+ bouton slide 3
183
+ </AmeliproBtn>
184
+ </template>
185
+ </AmeliproCard>
186
+ </div>
187
+ </template>
188
+ </AmeliproCarousel>
189
+ `,
190
+ }),
191
+ }
@@ -0,0 +1,263 @@
1
+ <script setup lang="ts">
2
+ import { type PropType, computed, onMounted, onUpdated, ref } from 'vue'
3
+ import AmeliproCarouselItem from './AmeliproCarouselItem/AmeliproCarouselItem.vue'
4
+ import type { AmeliproCarouselListItem } from './types'
5
+ import AmeliproIconBtn from '../AmeliproIconBtn/AmeliproIconBtn.vue'
6
+ import type { IndexedObject } from '../types'
7
+
8
+ const props = defineProps({
9
+ duration: {
10
+ type: Number,
11
+ default: 0.3,
12
+ },
13
+ infiniteRotation: {
14
+ type: Boolean,
15
+ default: false,
16
+ },
17
+ items: {
18
+ type: Array as PropType<AmeliproCarouselListItem[]>,
19
+ default: () => [],
20
+ },
21
+ labelNextBtn: {
22
+ type: String,
23
+ default: 'Slide suivante',
24
+ },
25
+ labelPreviousBtn: {
26
+ type: String,
27
+ default: 'Slide précédente',
28
+ },
29
+ title: {
30
+ type: String,
31
+ required: true,
32
+ },
33
+ uniqueId: {
34
+ type: String,
35
+ required: true,
36
+ },
37
+ })
38
+
39
+ const ameliproCarouselItems = ref<AmeliproCarouselListItem[]>()
40
+ const currentElement = ref(0)
41
+
42
+ const carouselTrackStyles = computed<IndexedObject>(() => {
43
+ const styles: IndexedObject = {
44
+ maxWidth: `calc(100% * ${props.items.length})`,
45
+ transform: `translateX(calc((-${currentElement.value} / ${props.items.length}) * 100%))`,
46
+ transition: `all ${props.duration}s ease-out`,
47
+ width: `calc(100% * ${props.items.length})`,
48
+ }
49
+
50
+ return styles
51
+ })
52
+
53
+ const emit = defineEmits(['click-event', 'click-next', 'click-previous'])
54
+
55
+ const emitClickEvent = (id: string): void => {
56
+ emit('click-event', id)
57
+ }
58
+
59
+ const nextSlide = (): void => {
60
+ if (currentElement.value < props.items.length - 1) {
61
+ currentElement.value += 1
62
+ }
63
+ else if (currentElement.value === props.items.length - 1 && props.infiniteRotation) {
64
+ currentElement.value = 0
65
+ }
66
+ emit('click-next')
67
+ }
68
+
69
+ const previousSlide = (): void => {
70
+ if (currentElement.value > 0) {
71
+ currentElement.value -= 1
72
+ }
73
+ else if (currentElement.value === 0 && props.infiniteRotation) {
74
+ currentElement.value = props.items.length - 1
75
+ }
76
+ emit('click-previous')
77
+ }
78
+
79
+ const setFocusableElement = (): void => {
80
+ const carousel = document.querySelector(`#${props.uniqueId}`)
81
+ if (carousel !== null) {
82
+ const selection = carousel.querySelectorAll('.hide')
83
+ if (selection !== null) {
84
+ selection.forEach((element) => {
85
+ const elementSelections = element.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"]):not([disabled]), details:not([disabled]), summary:not(:disabled)')
86
+ if (elementSelections !== null) {
87
+ elementSelections.forEach((elementSelection) => {
88
+ elementSelection.setAttribute('tabindex', '-1')
89
+ })
90
+ }
91
+ })
92
+ }
93
+ const current = carousel.querySelector(`#${props.uniqueId}-item-${currentElement.value}`)
94
+ if (current !== null) {
95
+ const elementSelection = current.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"]):not([disabled]), details:not([disabled]), summary:not(:disabled)')
96
+
97
+ if (elementSelection !== null) {
98
+ elementSelection.forEach((element) => {
99
+ element.setAttribute('tabindex', '0')
100
+ })
101
+ }
102
+ }
103
+ }
104
+ }
105
+
106
+ onMounted(() => {
107
+ setFocusableElement()
108
+ })
109
+
110
+ onUpdated(() => {
111
+ setFocusableElement()
112
+ })
113
+ </script>
114
+
115
+ <template>
116
+ <section
117
+ :id="uniqueId"
118
+ :aria-label="title"
119
+ aria-roledescription="carousel"
120
+ class="carousel"
121
+ >
122
+ <AmeliproIconBtn
123
+ :aria-controls="`${uniqueId}-items`"
124
+ :btn-title="labelPreviousBtn"
125
+ class="btn-previous"
126
+ :disabled="currentElement === 0 && !infiniteRotation ? true : undefined"
127
+ icon="chevronLeft"
128
+ icon-bg-color="transparent"
129
+ icon-color="ap-blue-darken-1"
130
+ icon-hover-bg-color="transparent"
131
+ icon-hover-color="ap-blue-darken-2"
132
+ large
133
+ type="button"
134
+ :unique-id="`${uniqueId}-previous`"
135
+ @click="previousSlide()"
136
+ />
137
+
138
+ <AmeliproIconBtn
139
+ :aria-controls="`${uniqueId}-items`"
140
+ :btn-title="labelNextBtn"
141
+ class="btn-next"
142
+ :disabled="currentElement === items.length - 1 && !infiniteRotation ? true : undefined"
143
+ icon="chevronRight"
144
+ icon-bg-color="transparent"
145
+ icon-color="ap-blue-darken-1"
146
+ icon-hover-bg-color="transparent"
147
+ icon-hover-color="ap-blue-darken-2"
148
+ large
149
+ type="button"
150
+ :unique-id="`${uniqueId}-next`"
151
+ @click="nextSlide()"
152
+ />
153
+
154
+ <div
155
+ :id="`${uniqueId}-items`"
156
+ aria-live="polite"
157
+ class="carousel-items"
158
+ >
159
+ <div
160
+ class="d-flex align-center carousel__track"
161
+ :style="carouselTrackStyles"
162
+ >
163
+ <AmeliproCarouselItem
164
+ v-for="(item, index) in items"
165
+ :key="index"
166
+ ref="ameliproCarouselItems"
167
+ :aria-label="`${index + 1} sur ${items.length}`"
168
+ :href="item.href"
169
+ :img-alt="item.imgAlt"
170
+ :img-src="item.imgSrc"
171
+ :is-active="currentElement === index"
172
+ :style="`width: calc((1 / ${items.length}) * 100%);`"
173
+ :to="item.to"
174
+ :unique-id="`${uniqueId}-item-${index}`"
175
+ @click-event="emitClickEvent(`${uniqueId}-item-${index}`)"
176
+ >
177
+ <!-- :style="currentElement === index ? undefined : 'visibility: hidden;'" -->
178
+ <slot :name="`${uniqueId}-slot-item-${index}`">
179
+ <slot
180
+ name="item"
181
+ v-bind="item"
182
+ />
183
+ </slot>
184
+ </AmeliproCarouselItem>
185
+ </div>
186
+ </div>
187
+
188
+ <div
189
+ :id="`${uniqueId}-dots`"
190
+ class="d-flex justify-center align-center carousel-dots"
191
+ >
192
+ <span
193
+ v-for="(item, index) in items"
194
+ :key="index"
195
+ :aria-hidden="true"
196
+ class="mx-2 carousel-dot"
197
+ :class="index === currentElement ? 'active-dot' : undefined"
198
+ />
199
+ </div>
200
+ </section>
201
+ </template>
202
+
203
+ <style lang="scss" scoped>
204
+ @use '@/assets/amelipro/apTokens';
205
+
206
+ .v-btn {
207
+ &.btn-previous,
208
+ &.btn-next {
209
+ &:disabled {
210
+ color: apTokens.$ap-blue-darken1 !important;
211
+ background-color: transparent !important;
212
+ opacity: 0.7;
213
+ cursor: default;
214
+
215
+ & .v-icon {
216
+ color: apTokens.$ap-blue-darken1 !important;
217
+ }
218
+ }
219
+ }
220
+ }
221
+
222
+ .carousel {
223
+ position: relative;
224
+ width: 100%;
225
+ }
226
+
227
+ .carousel-items {
228
+ position: relative;
229
+ width: calc(100% - 80px);
230
+ margin: 0 40px;
231
+ overflow: hidden;
232
+ }
233
+
234
+ .btn-previous,
235
+ .btn-next {
236
+ position: absolute;
237
+ top: calc(50% - 20px);
238
+ }
239
+
240
+ .btn-previous {
241
+ left: 0;
242
+ }
243
+
244
+ .btn-next {
245
+ right: 0;
246
+ }
247
+
248
+ .carousel-dots {
249
+ margin-top: 1.5rem;
250
+ }
251
+
252
+ .carousel-dot {
253
+ width: 1rem;
254
+ height: 1rem;
255
+ border-radius: 50%;
256
+ border: 1px solid apTokens.$ap-blue-darken1;
257
+ background-color: apTokens.$ap-white;
258
+
259
+ &.active-dot {
260
+ background-color: apTokens.$ap-blue-darken1;
261
+ }
262
+ }
263
+ </style>