@cnamts/synapse 0.0.7-alpha → 0.0.9-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/dist/design-system-v3.d.ts +785 -372
  2. package/dist/design-system-v3.js +4993 -3357
  3. package/dist/design-system-v3.umd.cjs +1 -10
  4. package/dist/style.css +1 -1
  5. package/package.json +10 -2
  6. package/src/assets/settings.scss +2 -2
  7. package/src/assets/tokens.scss +107 -112
  8. package/src/components/BackBtn/BackBtn.vue +4 -4
  9. package/src/components/BackToTopBtn/BackToTopBtn.vue +1 -0
  10. package/src/components/CollapsibleList/CollapsibleList.mdx +1 -1
  11. package/src/components/CollapsibleList/CollapsibleList.vue +43 -44
  12. package/src/components/ContextualMenu/Accessibilite.mdx +14 -0
  13. package/src/components/ContextualMenu/Accessibilite.stories.ts +191 -0
  14. package/src/components/ContextualMenu/AccessibiliteItems.ts +89 -0
  15. package/src/components/ContextualMenu/ContextualMenu.mdx +118 -0
  16. package/src/components/ContextualMenu/ContextualMenu.stories.ts +430 -0
  17. package/src/components/ContextualMenu/ContextualMenu.vue +101 -0
  18. package/src/components/ContextualMenu/constants/ExpertiseLevelEnum.ts +4 -0
  19. package/src/components/ContextualMenu/tests/ContextualMenu.spec.ts +115 -0
  20. package/src/components/ContextualMenu/tests/__snapshots__/ContextualMenu.spec.ts.snap +10 -0
  21. package/src/components/ContextualMenu/types.ts +5 -0
  22. package/src/components/CookieBanner/CookieBanner.stories.ts +1 -2
  23. package/src/components/CookieBanner/CookieBanner.vue +13 -10
  24. package/src/components/CookieBanner/tests/__snapshots__/CookieBanner.spec.ts.snap +17 -15
  25. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +6 -1
  26. package/src/components/CookiesSelection/CookiesInformation/locales.ts +1 -0
  27. package/src/components/CookiesSelection/CookiesTable/CookiesTable.vue +1 -0
  28. package/src/components/CookiesSelection/tests/__snapshots__/CookiesSelection.spec.ts.snap +17 -15
  29. package/src/components/CopyBtn/CopyBtn.vue +7 -7
  30. package/src/components/Customs/SyBtnSelect/SyBtnSelect.vue +26 -26
  31. package/src/components/Customs/SyInputSelect/SyInputSelect.vue +24 -24
  32. package/src/components/Customs/SySelect/SySelect.stories.ts +7 -7
  33. package/src/components/Customs/SySelect/SySelect.vue +36 -30
  34. package/src/components/Customs/SySelect/tests/SySelect.spec.ts +2 -2
  35. package/src/components/Customs/SyTextField/SyTextField.stories.ts +187 -2
  36. package/src/components/Customs/SyTextField/SyTextField.vue +185 -16
  37. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +2 -4
  38. package/src/components/Customs/SyTextField/tests/__snapshots__/SyTextField.spec.ts.snap +18 -16
  39. package/src/components/Customs/SyTextField/types.d.ts +2 -2
  40. package/src/components/DataList/DataList.stories.ts +3 -2
  41. package/src/components/DataList/DataList.vue +1 -1
  42. package/src/components/DataListGroup/DataListGroup.stories.ts +3 -2
  43. package/src/components/DataListItem/DataListItem.vue +12 -12
  44. package/src/components/DatePicker/DatePicker.mdx +191 -0
  45. package/src/components/DatePicker/DatePicker.stories.ts +787 -0
  46. package/src/components/DatePicker/DatePicker.vue +560 -0
  47. package/src/components/DatePicker/DateTextInput.vue +409 -0
  48. package/src/components/DatePicker/tests/DatePicker.spec.ts +266 -0
  49. package/src/components/DialogBox/DialogBox.mdx +28 -2
  50. package/src/components/DialogBox/DialogBox.stories.ts +2 -2
  51. package/src/components/DialogBox/DialogBox.vue +3 -2
  52. package/src/components/DownloadBtn/DownloadBtn.vue +2 -1
  53. package/src/components/ExternalLinks/Accessibilite.mdx +14 -0
  54. package/src/components/ExternalLinks/Accessibilite.stories.ts +191 -0
  55. package/src/components/ExternalLinks/AccessibiliteItems.ts +197 -0
  56. package/src/components/ExternalLinks/ExternalLinks.mdx +86 -0
  57. package/src/components/ExternalLinks/ExternalLinks.stories.ts +553 -0
  58. package/src/components/ExternalLinks/ExternalLinks.vue +200 -0
  59. package/src/components/ExternalLinks/config.ts +34 -0
  60. package/src/components/ExternalLinks/constants/ExpertiseLevelEnum.ts +4 -0
  61. package/src/components/ExternalLinks/locales.ts +4 -0
  62. package/src/components/ExternalLinks/tests/ExternalLinks.spec.ts +154 -0
  63. package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +159 -0
  64. package/src/components/FileUpload/FileUpload.mdx +165 -0
  65. package/src/components/FileUpload/FileUpload.stories.ts +429 -0
  66. package/src/components/FileUpload/FileUpload.vue +195 -0
  67. package/src/components/FileUpload/FileUploadContent.vue +109 -0
  68. package/src/components/FileUpload/locales.ts +10 -0
  69. package/src/components/FileUpload/tests/FileUpload.spec.ts +332 -0
  70. package/src/components/FileUpload/tests/__snapshots__/FileUpload.spec.ts.snap +7 -0
  71. package/src/components/FileUpload/useFileDrop.ts +23 -0
  72. package/src/components/FileUpload/validateFiles.ts +39 -0
  73. package/src/components/FooterBar/FooterBar.vue +105 -80
  74. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +14 -13
  75. package/src/components/HeaderBar/HeaderBar.vue +3 -3
  76. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.vue +11 -7
  77. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +5 -5
  78. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.vue +2 -2
  79. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +10 -8
  80. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +2 -2
  81. package/src/components/HeaderBar/HeaderLogo/logos/Logo-mobile.vue +2 -1
  82. package/src/components/HeaderBar/HeaderLogo/logos/Logo.vue +2 -1
  83. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +10 -10
  84. package/src/components/HeaderBar/consts.scss +1 -1
  85. package/src/components/HeaderLoading/HeaderLoading.vue +12 -11
  86. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +2 -1
  87. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +9 -9
  88. package/src/components/HeaderToolbar/HeaderToolbar.vue +215 -202
  89. package/src/components/LangBtn/LangBtn.vue +8 -6
  90. package/src/components/LogoBrandSection/LogoBrandSection.stories.ts +2 -2
  91. package/src/components/NirField/NirField.stories.ts +8 -8
  92. package/src/components/NirField/NirField.vue +46 -48
  93. package/src/components/NotFoundPage/NotFoundPage.stories.ts +33 -2
  94. package/src/components/NotFoundPage/NotFoundPage.vue +17 -0
  95. package/src/components/NotificationBar/NotificationBar.mdx +5 -5
  96. package/src/components/NotificationBar/NotificationBar.stories.ts +410 -314
  97. package/src/components/NotificationBar/NotificationBar.vue +43 -41
  98. package/src/components/PageContainer/PageContainer.vue +4 -4
  99. package/src/components/PasswordField/Accessibilite.mdx +14 -0
  100. package/src/components/PasswordField/Accessibilite.stories.ts +191 -0
  101. package/src/components/PasswordField/AccessibiliteItems.ts +184 -0
  102. package/src/components/PasswordField/PasswordField.mdx +70 -0
  103. package/src/components/PasswordField/PasswordField.stories.ts +213 -0
  104. package/src/components/PasswordField/PasswordField.vue +189 -0
  105. package/src/components/PasswordField/config.ts +11 -0
  106. package/src/components/PasswordField/constants/ExpertiseLevelEnum.ts +4 -0
  107. package/src/components/PasswordField/locales.ts +4 -0
  108. package/src/components/PasswordField/tests/PasswordField.spec.ts +96 -0
  109. package/src/components/PhoneField/PhoneField.mdx +0 -2
  110. package/src/components/PhoneField/PhoneField.stories.ts +10 -50
  111. package/src/components/PhoneField/PhoneField.vue +77 -93
  112. package/src/components/PhoneField/tests/PhoneField.spec.ts +0 -15
  113. package/src/components/RangeField/RangeField.mdx +54 -0
  114. package/src/components/RangeField/RangeField.stories.ts +189 -0
  115. package/src/components/RangeField/RangeField.vue +157 -0
  116. package/src/components/RangeField/RangeSlider/RangeSlider.vue +387 -0
  117. package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +64 -0
  118. package/src/components/RangeField/RangeSlider/tests/__snapshots__/rangeSlider.spec.ts.snap +27 -0
  119. package/src/components/RangeField/RangeSlider/tests/rangeSlider.spec.ts +100 -0
  120. package/src/components/RangeField/RangeSlider/tests/useDoubleSlider.spec.ts +246 -0
  121. package/src/components/RangeField/RangeSlider/tests/useMouseSlide.spec.ts +204 -0
  122. package/src/components/RangeField/RangeSlider/tests/useThumb.spec.ts +22 -0
  123. package/src/components/RangeField/RangeSlider/tests/useThumbKeyboard.spec.ts +233 -0
  124. package/src/components/RangeField/RangeSlider/tests/useTooltipsNudge.spec.ts +150 -0
  125. package/src/components/RangeField/RangeSlider/tests/useTrack.spec.ts +314 -0
  126. package/src/components/RangeField/RangeSlider/tests/vAnimateClick.spec.ts +32 -0
  127. package/src/components/RangeField/RangeSlider/types.ts +15 -0
  128. package/src/components/RangeField/RangeSlider/useMouseSlide.ts +109 -0
  129. package/src/components/RangeField/RangeSlider/useRangeSlider.ts +126 -0
  130. package/src/components/RangeField/RangeSlider/useThumb.ts +18 -0
  131. package/src/components/RangeField/RangeSlider/useThumbKeyboard.ts +84 -0
  132. package/src/components/RangeField/RangeSlider/useTooltipsNudge.ts +92 -0
  133. package/src/components/RangeField/RangeSlider/useTrack.ts +116 -0
  134. package/src/components/RangeField/RangeSlider/vAnimateClick.ts +19 -0
  135. package/src/components/RangeField/config.ts +7 -0
  136. package/src/components/RangeField/locales.ts +4 -0
  137. package/src/components/RangeField/tests/RangeField.spec.ts +224 -0
  138. package/src/components/RangeField/tests/__snapshots__/RangeField.spec.ts.snap +379 -0
  139. package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +205 -0
  140. package/src/components/RatingPicker/EmotionPicker/locales.ts +3 -0
  141. package/src/components/RatingPicker/EmotionPicker/tests/EmotionPicker.spec.ts +104 -0
  142. package/src/components/RatingPicker/EmotionPicker/tests/__snapshots__/EmotionPicker.spec.ts.snap +66 -0
  143. package/src/components/RatingPicker/NumberPicker/NumberPicker.vue +159 -0
  144. package/src/components/RatingPicker/NumberPicker/locales.ts +4 -0
  145. package/src/components/RatingPicker/NumberPicker/tests/NumberPicker.spec.ts +73 -0
  146. package/src/components/RatingPicker/NumberPicker/tests/__snapshots__/NumberPicker.spec.ts.snap +105 -0
  147. package/src/components/RatingPicker/Rating.ts +45 -0
  148. package/src/components/RatingPicker/RatingPicker.mdx +56 -0
  149. package/src/components/RatingPicker/RatingPicker.stories.ts +515 -0
  150. package/src/components/RatingPicker/RatingPicker.vue +122 -0
  151. package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +116 -0
  152. package/src/components/RatingPicker/StarsPicker/tests/StarsPicker.spec.ts +95 -0
  153. package/src/components/RatingPicker/StarsPicker/tests/__snapshots__/StarsPicker.spec.ts.snap +36 -0
  154. package/src/components/RatingPicker/locales.ts +3 -0
  155. package/src/components/RatingPicker/tests/Rating.spec.ts +104 -0
  156. package/src/components/RatingPicker/tests/RatingPicker.spec.ts +187 -0
  157. package/src/components/RatingPicker/tests/__snapshots__/RatingPicker.spec.ts.snap +108 -0
  158. package/src/components/SearchListField/SearchListField.mdx +74 -0
  159. package/src/components/SearchListField/SearchListField.stories.ts +126 -0
  160. package/src/components/SearchListField/SearchListField.vue +194 -0
  161. package/src/components/SearchListField/locales.ts +5 -0
  162. package/src/components/SearchListField/tests/SearchListField.spec.ts +323 -0
  163. package/src/components/SearchListField/types.d.ts +4 -0
  164. package/src/components/SelectBtnField/SelectBtnField.mdx +50 -0
  165. package/src/components/SelectBtnField/SelectBtnField.stories.ts +763 -0
  166. package/src/components/SelectBtnField/SelectBtnField.vue +283 -0
  167. package/src/components/SelectBtnField/config.ts +11 -0
  168. package/src/components/SelectBtnField/tests/SelectBtnField.spec.ts +327 -0
  169. package/src/components/SelectBtnField/tests/__snapshots__/SelectBtnField.spec.ts.snap +125 -0
  170. package/src/components/SelectBtnField/types.d.ts +11 -0
  171. package/src/components/SkipLink/SkipLink.vue +10 -10
  172. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +28 -26
  173. package/src/components/SubHeader/SubHeader.vue +32 -31
  174. package/src/components/SyAlert/SyAlert.vue +12 -12
  175. package/src/components/UserMenuBtn/UserMenuBtn.vue +1 -1
  176. package/src/components/UserMenuBtn/config.ts +1 -1
  177. package/src/components/index.ts +17 -7
  178. package/src/composables/rules/useFieldValidation.ts +172 -44
  179. package/src/designTokens/index.ts +6 -4
  180. package/src/designTokens/{bootstrapColors.md → paColors.md} +1 -1
  181. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +2 -0
  182. package/src/designTokens/tokens/pa/paColors.ts +171 -0
  183. package/src/designTokens/tokens/pa/paContextual.ts +58 -0
  184. package/src/designTokens/tokens/pa/paDarkTheme.ts +5 -0
  185. package/src/designTokens/tokens/pa/paLightTheme.ts +123 -0
  186. package/src/designTokens/tokens/pa/paSemantic.ts +87 -0
  187. package/src/stories/Fondamentaux/CustomisationEtThemes.mdx +52 -2
  188. package/src/stories/GuideDuDev/CreerUneIssue.mdx +64 -0
  189. package/src/stories/GuideDuDev/{CommentUtiliserLesRules.mdx → UtiliserLesRules.mdx} +2 -2
  190. package/src/stories/GuideDuDev/components.stories.ts +9 -7
  191. package/src/stories/Guidelines/Vuetify/Vuetify.stories.ts +163 -88
  192. package/src/stories/Guidelines/Vuetify/VuetifyItems.ts +250 -23
  193. package/src/temp/TestDTComponent.vue +5 -6
  194. package/src/utils/calcHumanFileSize/index.ts +12 -0
  195. package/src/utils/calcHumanFileSize/tests/calcHumanFileSize.spec.ts +21 -0
  196. package/src/designTokens/tokens/bootstrap/bootstrapColors.ts +0 -158
  197. package/src/designTokens/tokens/bootstrap/bootstrapLightTheme.ts +0 -22
  198. package/src/stories/GuideDuDev/CommentContribuer.mdx +0 -22
@@ -0,0 +1,763 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import SelectBtnField from './SelectBtnField.vue'
3
+ import SyAlert from '../SyAlert/SyAlert.vue'
4
+ import { VBtn } from 'vuetify/components'
5
+ import { ref } from 'vue'
6
+
7
+ const meta = {
8
+ title: 'Composants/Formulaires/SelectBtnField',
9
+ component: SelectBtnField,
10
+ decorators: [
11
+ () => ({
12
+ template: '<div style="padding: 20px;"><story/></div>',
13
+ }),
14
+ ],
15
+ parameters: {
16
+ layout: 'fullscreen',
17
+ controls: { exclude: ['copy'] },
18
+ },
19
+ argTypes: {
20
+ modelValue: {
21
+ control: { SelectBtnField },
22
+ default: null,
23
+ },
24
+ items: {
25
+ control: { Array },
26
+ default: [],
27
+ },
28
+ label: {
29
+ control: { type: 'text' },
30
+ default: null,
31
+ },
32
+ multiple: {
33
+ control: { type: 'boolean' },
34
+ default: false,
35
+ },
36
+ inline: {
37
+ control: { type: 'boolean' },
38
+ default: false,
39
+ },
40
+ hint: {
41
+ control: { type: 'text' },
42
+ default: undefined,
43
+ },
44
+ error: {
45
+ control: { type: 'boolean' },
46
+ default: false,
47
+ },
48
+ errorMessages: {
49
+ control: { type: 'text' },
50
+ default: undefined,
51
+ },
52
+ readonly: {
53
+ control: { type: 'boolean' },
54
+ default: false,
55
+ },
56
+ vuetifyOptions: {
57
+ control: { type: 'object' },
58
+ description: 'Options pour personnaliser les composants Vuetify utilisés en interne.',
59
+ table: {
60
+ type: {
61
+ summary: 'object',
62
+ detail: `{
63
+ btnToggle: 'VBtnToggle',
64
+ btn: 'VBtn',
65
+ spacer: 'VSpacer',
66
+ icon: 'VIcon'
67
+ }`,
68
+ },
69
+ defaultValue: {
70
+ summary: 'config',
71
+ detail: ` {
72
+ btn: {
73
+ height: 'auto',
74
+ minHeight: '40px',
75
+ activeClass: 'text-white',
76
+ class: 'py-2 d-flex align-items-center',
77
+ },
78
+ icon: {
79
+ class: 'text-white flex-shrink-0 ml-1',
80
+ },
81
+ }`,
82
+ },
83
+ category: 'props',
84
+ },
85
+ },
86
+ },
87
+ } satisfies Meta<typeof SelectBtnField>
88
+
89
+ export default meta
90
+
91
+ type Story = StoryObj<typeof meta>
92
+
93
+ export const Default: Story = {
94
+ parameters: {
95
+ sourceCode: [
96
+ {
97
+ name: 'Template',
98
+ code: `<template>
99
+ <div style="max-width: 400px">
100
+ <SelectBtnField
101
+ v-model="args.modelValue"
102
+ :items="args.items"
103
+ label="Moyen de contact"
104
+ />
105
+ </div>
106
+ </template>
107
+ `,
108
+ },
109
+ {
110
+ name: 'Script',
111
+ code: `<script setup lang="ts">
112
+ import { SelectBtnField } from '@cnamts/synapse'
113
+ import { ref } from 'vue'
114
+
115
+ const value = ref([])
116
+ const items = [
117
+ {
118
+ text: 'Email',
119
+ value: 'email',
120
+ },
121
+ {
122
+ text: 'Courrier',
123
+ value: 'courrier',
124
+ },
125
+ {
126
+ text: 'SMS',
127
+ value: 'sms',
128
+ },
129
+ ]
130
+
131
+ </script>
132
+ `,
133
+ },
134
+ ],
135
+ },
136
+ args: {
137
+ modelValue: null,
138
+ items: [
139
+ {
140
+ text: 'Email',
141
+ value: 'email',
142
+ },
143
+ {
144
+ text: 'Courrier',
145
+ value: 'courrier',
146
+ },
147
+ {
148
+ text: 'SMS',
149
+ value: 'sms',
150
+ },
151
+ ],
152
+ label: 'Moyen de contact',
153
+ multiple: false,
154
+ inline: false,
155
+ hint: undefined,
156
+ error: false,
157
+ errorMessages: undefined,
158
+ readonly: false,
159
+ },
160
+ render: (args) => {
161
+ return {
162
+ components: { SelectBtnField },
163
+ setup() {
164
+ return { args }
165
+ },
166
+ template: `
167
+ <div style="max-width: 400px">
168
+ <SelectBtnField
169
+ v-model="args.modelValue"
170
+ :items="args.items"
171
+ :label="args.label"
172
+ :multiple="args.multiple"
173
+ :inline="args.inline"
174
+ :hint="args.hint"
175
+ :error="args.error"
176
+ :error-messages="args.errorMessages"
177
+ :readonly="args.readonly"
178
+ />
179
+ </div>
180
+ `,
181
+ }
182
+ },
183
+ }
184
+
185
+ export const Multiple: Story = {
186
+ parameters: {
187
+ sourceCode: [
188
+ {
189
+ name: 'Template',
190
+ code: `<template>
191
+ <div style="max-width: 400px">
192
+ <SelectBtnField
193
+ v-model="args.modelValue"
194
+ :items="args.items"
195
+ label="Moyen de contact"
196
+ multiple
197
+ />
198
+ </div>
199
+ </template>
200
+ `,
201
+ },
202
+ {
203
+ name: 'Script',
204
+ code: `<script setup lang="ts">
205
+ import { SelectBtnField } from '@cnamts/synapse'
206
+ import { ref } from 'vue'
207
+
208
+ const value = ref([])
209
+ const items = [
210
+ {
211
+ text: 'Email',
212
+ value: 'email',
213
+ },
214
+ {
215
+ text: 'Courrier',
216
+ value: 'courrier',
217
+ },
218
+ {
219
+ text: 'SMS',
220
+ value: 'sms',
221
+ },
222
+ ]
223
+ </script>
224
+ `,
225
+ },
226
+ ],
227
+ },
228
+ args: {
229
+ modelValue: null,
230
+ items: [
231
+ {
232
+ text: 'Email',
233
+ value: 'email',
234
+ },
235
+ {
236
+ text: 'Courrier',
237
+ value: 'courrier',
238
+ },
239
+ {
240
+ text: 'SMS',
241
+ value: 'sms',
242
+ },
243
+ ],
244
+ label: 'Moyen de contact',
245
+ multiple: true,
246
+ },
247
+ render: (args) => {
248
+ return {
249
+ components: { SelectBtnField },
250
+ setup() {
251
+ return { args }
252
+ },
253
+ template: `
254
+ <div style="max-width: 400px">
255
+ <SelectBtnField
256
+ v-model="args.modelValue"
257
+ :items="args.items"
258
+ label="Moyen de contact"
259
+ :multiple="args.multiple"
260
+ />
261
+ </div>
262
+ `,
263
+ }
264
+ },
265
+ }
266
+
267
+ export const inline: Story = {
268
+ parameters: {
269
+ sourceCode: [
270
+ {
271
+ name: 'Template',
272
+ code: `<template>
273
+ <div style="max-width: 400px">
274
+ <SelectBtnField
275
+ v-model="args.modelValue"
276
+ :items="args.items"
277
+ label="Moyen de contact"
278
+ inline
279
+ />
280
+ </div>
281
+ </template>
282
+ `,
283
+ },
284
+ {
285
+ name: 'Script',
286
+ code: `<script setup lang="ts">
287
+ import { SelectBtnField } from '@cnamts/synapse'
288
+ import { ref } from 'vue'
289
+
290
+ const value = ref([])
291
+ const items = [
292
+ {
293
+ text: 'Email',
294
+ value: 'email',
295
+ },
296
+ {
297
+ text: 'Courrier',
298
+ value: 'courrier',
299
+ },
300
+ {
301
+ text: 'SMS',
302
+ value: 'sms',
303
+ },
304
+ ]
305
+ </script>
306
+ `,
307
+ },
308
+ ],
309
+ },
310
+ args: {
311
+ modelValue: null,
312
+ items: [
313
+ {
314
+ text: 'Email',
315
+ value: 'email',
316
+ },
317
+ {
318
+ text: 'Courrier',
319
+ value: 'courrier',
320
+ },
321
+ {
322
+ text: 'SMS',
323
+ value: 'sms',
324
+ },
325
+ ],
326
+ label: 'Moyen de contact',
327
+ inline: true,
328
+ },
329
+ render: (args) => {
330
+ return {
331
+ components: { SelectBtnField },
332
+ setup() {
333
+ return { args }
334
+ },
335
+ template: `
336
+ <div style="max-width: 400px">
337
+ <SelectBtnField
338
+ v-model="args.modelValue"
339
+ :items="args.items"
340
+ label="Moyen de contact"
341
+ :inline="args.inline"
342
+ />
343
+ </div>
344
+ `,
345
+ }
346
+ },
347
+ }
348
+
349
+ export const itemUnique: Story = {
350
+ parameters: {
351
+ sourceCode: [
352
+ {
353
+ name: 'Template',
354
+ code: `<template>
355
+ <div style="max-width: 400px">
356
+ <SelectBtnField
357
+ v-model="args.modelValue"
358
+ :items="args.items"
359
+ label="Moyen de contact"
360
+ multiple
361
+ />
362
+ </div>
363
+ </template>
364
+ `,
365
+ },
366
+ {
367
+ name: 'Script',
368
+ code: `<script setup lang="ts">
369
+ import { SelectBtnField } from '@cnamts/synapse'
370
+ import { ref } from 'vue'
371
+
372
+ const value = ref([])
373
+ const items = [
374
+ {
375
+ text: 'Email',
376
+ value: 'email',
377
+ },
378
+ {
379
+ text: 'Courrier',
380
+ value: 'courrier',
381
+ },
382
+ {
383
+ text: 'SMS',
384
+ value: 'sms',
385
+ },
386
+ {
387
+ text: 'Autre',
388
+ value: 'other',
389
+ unique: true
390
+ }
391
+ ]
392
+ </script>
393
+ `,
394
+ },
395
+ ],
396
+ },
397
+ args: {
398
+ modelValue: null,
399
+ items: [
400
+ {
401
+ text: 'Email',
402
+ value: 'email',
403
+ },
404
+ {
405
+ text: 'Courrier',
406
+ value: 'courrier',
407
+ },
408
+ {
409
+ text: 'SMS',
410
+ value: 'sms',
411
+ },
412
+ {
413
+ text: 'Autre',
414
+ value: 'other',
415
+ unique: true,
416
+ },
417
+ ],
418
+ label: 'Moyen de contact',
419
+ multiple: true,
420
+ },
421
+ render: (args) => {
422
+ return {
423
+ components: { SelectBtnField },
424
+ setup() {
425
+ return { args }
426
+ },
427
+ template: `
428
+ <div style="max-width: 400px">
429
+ <SelectBtnField
430
+ v-model="args.modelValue"
431
+ :items="args.items"
432
+ label="Moyen de contact"
433
+ :multiple="args.multiple"
434
+ />
435
+ </div>
436
+ `,
437
+ }
438
+ },
439
+ }
440
+
441
+ export const messageAide: Story = {
442
+ parameters: {
443
+ sourceCode: [
444
+ {
445
+ name: 'Template',
446
+ code: `<template>
447
+ <div style="max-width: 400px">
448
+ <SelectBtnField
449
+ v-model="args.modelValue"
450
+ :items="args.items"
451
+ label="Moyen de contact"
452
+ hint="Par défaut, le moyen de contact est l’email."
453
+ />
454
+ </div>
455
+ </template>
456
+ `,
457
+ },
458
+ {
459
+ name: 'Script',
460
+ code: `<script setup lang="ts">
461
+ import { SelectBtnField } from '@cnamts/synapse'
462
+ import { ref } from 'vue'
463
+
464
+ const value = ref([])
465
+ const items = [
466
+ {
467
+ text: 'Email',
468
+ value: 'email',
469
+ },
470
+ {
471
+ text: 'Courrier',
472
+ value: 'courrier',
473
+ },
474
+ {
475
+ text: 'SMS',
476
+ value: 'sms',
477
+ },
478
+ ]
479
+ </script>
480
+ `,
481
+ },
482
+ ],
483
+ },
484
+ args: {
485
+ modelValue: null,
486
+ items: [
487
+ {
488
+ text: 'Email',
489
+ value: 'email',
490
+ },
491
+ {
492
+ text: 'Courrier',
493
+ value: 'courrier',
494
+ },
495
+ {
496
+ text: 'SMS',
497
+ value: 'sms',
498
+ },
499
+ ],
500
+ label: 'Moyen de contact',
501
+ hint: 'Par défaut, le moyen de contact est l’email.',
502
+ },
503
+ render: (args) => {
504
+ return {
505
+ components: { SelectBtnField },
506
+ setup() {
507
+ return { args }
508
+ },
509
+ template: `
510
+ <div style="max-width: 400px">
511
+ <SelectBtnField
512
+ v-model="args.modelValue"
513
+ :items="args.items"
514
+ label="Moyen de contact"
515
+ :hint="args.hint"
516
+ />
517
+ </div>
518
+ `,
519
+ }
520
+ },
521
+ }
522
+
523
+ export const erreur: Story = {
524
+ parameters: {
525
+ sourceCode: [
526
+ {
527
+ name: 'Template',
528
+ code: `<template>
529
+ <div style="max-width: 400px">
530
+ <SelectBtnField
531
+ v-model="args.modelValue"
532
+ :items="args.items"
533
+ label="Moyen de contact"
534
+ v-model:error="true"
535
+ />
536
+ <VBtn
537
+ color="primary"
538
+ class="mt-3"
539
+ @click="resetExample"
540
+ >
541
+ Réinitialiser
542
+ </VBtn>
543
+ </div>
544
+ </template>
545
+ `,
546
+ },
547
+ {
548
+ name: 'Script',
549
+ code: `<script setup lang="ts">
550
+ import { SelectBtnField } from '@cnamts/synapse'
551
+ import { ref } from 'vue'
552
+ const value = ref([])
553
+ const error = ref(true)
554
+ const items = [
555
+ {
556
+ text: 'Email',
557
+ value: 'email',
558
+ },
559
+ {
560
+ text: 'Courrier',
561
+ value: 'courrier',
562
+ },
563
+ {
564
+ text: 'SMS',
565
+ value: 'sms',
566
+ },
567
+ ]
568
+ function resetExample() {
569
+ value.value = null
570
+ error.value = true
571
+ }
572
+ </script>
573
+ `,
574
+ },
575
+ ],
576
+ },
577
+ args: {
578
+ modelValue: null,
579
+ items: [
580
+ {
581
+ text: 'Email',
582
+ value: 'email',
583
+ },
584
+ {
585
+ text: 'Courrier',
586
+ value: 'courrier',
587
+ },
588
+ {
589
+ text: 'SMS',
590
+ value: 'sms',
591
+ },
592
+ ],
593
+ label: 'Moyen de contact',
594
+ error: true,
595
+ },
596
+ render: (args) => {
597
+ return {
598
+ components: { SelectBtnField, VBtn },
599
+ setup() {
600
+ const error = ref(args.error)
601
+ const value = ref(args.modelValue)
602
+
603
+ function resetExample() {
604
+ error.value = true
605
+ value.value = null
606
+ }
607
+ return { args, resetExample, error, value }
608
+ },
609
+ template: `
610
+ <div style="max-width: 400px">
611
+ <SelectBtnField
612
+ v-model="value"
613
+ :items="args.items"
614
+ label="Moyen de contact"
615
+ v-model:error="error"
616
+ />
617
+ <VBtn
618
+ color="primary"
619
+ class="mt-3"
620
+ @click="resetExample"
621
+ >
622
+ Réinitialiser
623
+ </VBtn>
624
+ </div>
625
+ `,
626
+ }
627
+ },
628
+ }
629
+
630
+ export const messageErreur: Story = {
631
+ parameters: {
632
+ sourceCode: [
633
+ {
634
+ name: 'Template',
635
+ code: `<template>
636
+ <div style="max-width: 400px">
637
+ <SelectBtnField
638
+ v-model="args.modelValue"
639
+ :items="args.items"
640
+ label="Moyen de contact"
641
+ v-model:error="true"
642
+ v-model:error-messages="Le champ est requis."
643
+ />
644
+ <VBtn
645
+ color="primary"
646
+ class="mt-3"
647
+ @click="resetExample"
648
+ >
649
+ Réinitialiser
650
+ </VBtn>
651
+ </div>
652
+ </template>
653
+ `,
654
+ },
655
+ {
656
+ name: 'Script',
657
+ code: `<script setup lang="ts">
658
+ import { SelectBtnField } from '@cnamts/synapse'
659
+ import { ref } from 'vue'
660
+ const value = ref([])
661
+ const error = ref(true)
662
+ const errorMessages = ref(['Le champ est requis.'])
663
+ const items = [
664
+ {
665
+ text: 'Email',
666
+ value: 'email',
667
+ },
668
+ {
669
+ text: 'Courrier',
670
+ value: 'courrier',
671
+ },
672
+ {
673
+ text: 'SMS',
674
+ value: 'sms',
675
+ },
676
+ ]
677
+ function resetExample() {
678
+ value.value = null
679
+ error.value = true
680
+ errorMessages.value = [
681
+ 'Le champ est requis.',
682
+ ]
683
+ }
684
+ </script>
685
+ `,
686
+ },
687
+ ],
688
+ },
689
+ args: {
690
+ modelValue: null,
691
+ items: [
692
+ {
693
+ text: 'Email',
694
+ value: 'email',
695
+ },
696
+ {
697
+ text: 'Courrier',
698
+ value: 'courrier',
699
+ },
700
+ {
701
+ text: 'SMS',
702
+ value: 'sms',
703
+ },
704
+ ],
705
+ label: 'Moyen de contact',
706
+ error: true,
707
+ errorMessages: [
708
+ 'Le champ est requis.',
709
+ ],
710
+ },
711
+ render: (args) => {
712
+ return {
713
+ components: { SelectBtnField, VBtn },
714
+ setup() {
715
+ const error = ref(args.error)
716
+ const value = ref(args.modelValue)
717
+ const errorMessages = ref(args.errorMessages)
718
+
719
+ function resetExample() {
720
+ error.value = true
721
+ value.value = null
722
+ errorMessages.value = ['Le champ est requis.']
723
+ }
724
+ return { args, resetExample, error, value, errorMessages }
725
+ },
726
+ template: `
727
+ <div style="max-width: 400px">
728
+ <SelectBtnField
729
+ v-model="value"
730
+ :items="args.items"
731
+ label="Moyen de contact"
732
+ v-model:error="error"
733
+ v-model:error-messages="errorMessages"
734
+ />
735
+ <VBtn
736
+ color="primary"
737
+ class="mt-3"
738
+ @click="resetExample"
739
+ >
740
+ Réinitialiser
741
+ </VBtn>
742
+ </div>
743
+ `,
744
+ }
745
+ },
746
+ }
747
+ export const Info: Story = {
748
+ render: (args) => {
749
+ return {
750
+ components: { SyAlert },
751
+ setup() {
752
+ return { args }
753
+ },
754
+ template: `
755
+ <SyAlert v-model="args.modelValue" :type="args.type" :variant="tonal" :closable="false">
756
+ <template #default>Vous pouvez utiliser le modificateur v-model:error pour réinitialiser l’erreur lorsque l’utilisateur modifie la valeur du champ.
757
+ </template>
758
+ </SyAlert>
759
+ `,
760
+ }
761
+ },
762
+ tags: ['!dev'],
763
+ }