@cnamts/synapse 0.0.8-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 (111) hide show
  1. package/dist/design-system-v3.d.ts +584 -128
  2. package/dist/design-system-v3.js +4176 -2694
  3. package/dist/design-system-v3.umd.cjs +1 -1
  4. package/dist/style.css +1 -1
  5. package/package.json +1 -1
  6. package/src/assets/settings.scss +1 -1
  7. package/src/components/ContextualMenu/Accessibilite.mdx +14 -0
  8. package/src/components/ContextualMenu/Accessibilite.stories.ts +191 -0
  9. package/src/components/ContextualMenu/AccessibiliteItems.ts +89 -0
  10. package/src/components/ContextualMenu/constants/ExpertiseLevelEnum.ts +4 -0
  11. package/src/components/Customs/SySelect/SySelect.stories.ts +7 -7
  12. package/src/components/Customs/SySelect/SySelect.vue +9 -4
  13. package/src/components/Customs/SySelect/tests/SySelect.spec.ts +2 -2
  14. package/src/components/Customs/SyTextField/SyTextField.stories.ts +187 -2
  15. package/src/components/Customs/SyTextField/SyTextField.vue +185 -16
  16. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +2 -4
  17. package/src/components/Customs/SyTextField/tests/__snapshots__/SyTextField.spec.ts.snap +18 -16
  18. package/src/components/Customs/SyTextField/types.d.ts +2 -2
  19. package/src/components/DatePicker/DatePicker.mdx +191 -0
  20. package/src/components/DatePicker/DatePicker.stories.ts +787 -0
  21. package/src/components/DatePicker/DatePicker.vue +560 -0
  22. package/src/components/DatePicker/DateTextInput.vue +409 -0
  23. package/src/components/DatePicker/tests/DatePicker.spec.ts +266 -0
  24. package/src/components/DialogBox/DialogBox.stories.ts +1 -1
  25. package/src/components/ExternalLinks/Accessibilite.mdx +14 -0
  26. package/src/components/ExternalLinks/Accessibilite.stories.ts +191 -0
  27. package/src/components/ExternalLinks/AccessibiliteItems.ts +197 -0
  28. package/src/components/ExternalLinks/constants/ExpertiseLevelEnum.ts +4 -0
  29. package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +9 -9
  30. package/src/components/FileUpload/FileUpload.mdx +165 -0
  31. package/src/components/FileUpload/FileUpload.stories.ts +429 -0
  32. package/src/components/FileUpload/FileUpload.vue +195 -0
  33. package/src/components/FileUpload/FileUploadContent.vue +109 -0
  34. package/src/components/FileUpload/locales.ts +10 -0
  35. package/src/components/FileUpload/tests/FileUpload.spec.ts +332 -0
  36. package/src/components/FileUpload/tests/__snapshots__/FileUpload.spec.ts.snap +7 -0
  37. package/src/components/FileUpload/useFileDrop.ts +23 -0
  38. package/src/components/FileUpload/validateFiles.ts +39 -0
  39. package/src/components/NirField/NirField.stories.ts +1 -1
  40. package/src/components/NirField/NirField.vue +2 -1
  41. package/src/components/PasswordField/Accessibilite.mdx +14 -0
  42. package/src/components/PasswordField/Accessibilite.stories.ts +191 -0
  43. package/src/components/PasswordField/AccessibiliteItems.ts +184 -0
  44. package/src/components/PasswordField/PasswordField.vue +3 -3
  45. package/src/components/PasswordField/constants/ExpertiseLevelEnum.ts +4 -0
  46. package/src/components/PhoneField/PhoneField.vue +44 -60
  47. package/src/components/PhoneField/tests/PhoneField.spec.ts +0 -15
  48. package/src/components/RangeField/RangeField.mdx +54 -0
  49. package/src/components/RangeField/RangeField.stories.ts +189 -0
  50. package/src/components/RangeField/RangeField.vue +157 -0
  51. package/src/components/RangeField/RangeSlider/RangeSlider.vue +387 -0
  52. package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +64 -0
  53. package/src/components/RangeField/RangeSlider/tests/__snapshots__/rangeSlider.spec.ts.snap +27 -0
  54. package/src/components/RangeField/RangeSlider/tests/rangeSlider.spec.ts +100 -0
  55. package/src/components/RangeField/RangeSlider/tests/useDoubleSlider.spec.ts +246 -0
  56. package/src/components/RangeField/RangeSlider/tests/useMouseSlide.spec.ts +204 -0
  57. package/src/components/RangeField/RangeSlider/tests/useThumb.spec.ts +22 -0
  58. package/src/components/RangeField/RangeSlider/tests/useThumbKeyboard.spec.ts +233 -0
  59. package/src/components/RangeField/RangeSlider/tests/useTooltipsNudge.spec.ts +150 -0
  60. package/src/components/RangeField/RangeSlider/tests/useTrack.spec.ts +314 -0
  61. package/src/components/RangeField/RangeSlider/tests/vAnimateClick.spec.ts +32 -0
  62. package/src/components/RangeField/RangeSlider/types.ts +15 -0
  63. package/src/components/RangeField/RangeSlider/useMouseSlide.ts +109 -0
  64. package/src/components/RangeField/RangeSlider/useRangeSlider.ts +126 -0
  65. package/src/components/RangeField/RangeSlider/useThumb.ts +18 -0
  66. package/src/components/RangeField/RangeSlider/useThumbKeyboard.ts +84 -0
  67. package/src/components/RangeField/RangeSlider/useTooltipsNudge.ts +92 -0
  68. package/src/components/RangeField/RangeSlider/useTrack.ts +116 -0
  69. package/src/components/RangeField/RangeSlider/vAnimateClick.ts +19 -0
  70. package/src/components/RangeField/config.ts +7 -0
  71. package/src/components/RangeField/locales.ts +4 -0
  72. package/src/components/RangeField/tests/RangeField.spec.ts +224 -0
  73. package/src/components/RangeField/tests/__snapshots__/RangeField.spec.ts.snap +379 -0
  74. package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +205 -0
  75. package/src/components/RatingPicker/EmotionPicker/locales.ts +3 -0
  76. package/src/components/RatingPicker/EmotionPicker/tests/EmotionPicker.spec.ts +104 -0
  77. package/src/components/RatingPicker/EmotionPicker/tests/__snapshots__/EmotionPicker.spec.ts.snap +66 -0
  78. package/src/components/RatingPicker/NumberPicker/NumberPicker.vue +159 -0
  79. package/src/components/RatingPicker/NumberPicker/locales.ts +4 -0
  80. package/src/components/RatingPicker/NumberPicker/tests/NumberPicker.spec.ts +73 -0
  81. package/src/components/RatingPicker/NumberPicker/tests/__snapshots__/NumberPicker.spec.ts.snap +105 -0
  82. package/src/components/RatingPicker/Rating.ts +45 -0
  83. package/src/components/RatingPicker/RatingPicker.mdx +56 -0
  84. package/src/components/RatingPicker/RatingPicker.stories.ts +515 -0
  85. package/src/components/RatingPicker/RatingPicker.vue +122 -0
  86. package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +116 -0
  87. package/src/components/RatingPicker/StarsPicker/tests/StarsPicker.spec.ts +95 -0
  88. package/src/components/RatingPicker/StarsPicker/tests/__snapshots__/StarsPicker.spec.ts.snap +36 -0
  89. package/src/components/RatingPicker/locales.ts +3 -0
  90. package/src/components/RatingPicker/tests/Rating.spec.ts +104 -0
  91. package/src/components/RatingPicker/tests/RatingPicker.spec.ts +187 -0
  92. package/src/components/RatingPicker/tests/__snapshots__/RatingPicker.spec.ts.snap +108 -0
  93. package/src/components/SearchListField/SearchListField.mdx +74 -0
  94. package/src/components/SearchListField/SearchListField.stories.ts +126 -0
  95. package/src/components/SearchListField/SearchListField.vue +194 -0
  96. package/src/components/SearchListField/locales.ts +5 -0
  97. package/src/components/SearchListField/tests/SearchListField.spec.ts +323 -0
  98. package/src/components/SearchListField/types.d.ts +4 -0
  99. package/src/components/SelectBtnField/SelectBtnField.mdx +50 -0
  100. package/src/components/SelectBtnField/SelectBtnField.stories.ts +763 -0
  101. package/src/components/SelectBtnField/SelectBtnField.vue +283 -0
  102. package/src/components/SelectBtnField/config.ts +11 -0
  103. package/src/components/SelectBtnField/tests/SelectBtnField.spec.ts +327 -0
  104. package/src/components/SelectBtnField/tests/__snapshots__/SelectBtnField.spec.ts.snap +125 -0
  105. package/src/components/SelectBtnField/types.d.ts +11 -0
  106. package/src/components/index.ts +8 -1
  107. package/src/composables/rules/useFieldValidation.ts +172 -44
  108. package/src/designTokens/index.ts +3 -3
  109. package/src/stories/Fondamentaux/CustomisationEtThemes.mdx +52 -2
  110. package/src/utils/calcHumanFileSize/index.ts +12 -0
  111. package/src/utils/calcHumanFileSize/tests/calcHumanFileSize.spec.ts +21 -0
@@ -0,0 +1,787 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import DatePicker from './DatePicker.vue'
3
+ import { ref } from 'vue'
4
+
5
+ const meta = {
6
+ title: 'Composants/Formulaires/DatePicker',
7
+ component: DatePicker,
8
+ decorators: [
9
+ () => ({
10
+ template: '<div style="padding: 20px;"><story/></div>',
11
+ }),
12
+ ],
13
+ parameters: {
14
+ layout: 'fullscreen',
15
+ controls: { exclude: ['modelValue'] },
16
+ },
17
+ argTypes: {
18
+ modelValue: {
19
+ control: 'text',
20
+ description: 'Valeur du champ',
21
+ },
22
+ placeholder: {
23
+ control: 'text',
24
+ description: 'Texte indicatif',
25
+ },
26
+ format: {
27
+ control: 'select',
28
+ options: ['DD/MM/YYYY', 'MM/DD/YYYY', 'YYYY-MM-DD'],
29
+ description: 'Format d\'affichage de la date',
30
+ },
31
+ dateFormatReturn: {
32
+ control: 'select',
33
+ options: ['', 'DD/MM/YYYY', 'MM/DD/YYYY', 'YYYY-MM-DD'],
34
+ description: 'Format de la date pour la valeur de retour',
35
+ },
36
+ isBirthDate: {
37
+ control: 'boolean',
38
+ description: 'Mode date de naissance',
39
+ },
40
+ isOutlined: {
41
+ control: 'boolean',
42
+ description: 'Affiche le champ en contour',
43
+ },
44
+ showWeekNumber: {
45
+ control: 'boolean',
46
+ description: 'Affiche les numéros de semaine',
47
+ },
48
+ required: {
49
+ control: 'boolean',
50
+ description: 'Champ obligatoire',
51
+ },
52
+ displayRange: {
53
+ control: 'boolean',
54
+ description: 'Sélection de plage de dates',
55
+ },
56
+ displayIcon: {
57
+ control: 'boolean',
58
+ description: 'Affiche l\'icône calendrier',
59
+ },
60
+ displayAppendIcon: {
61
+ control: 'boolean',
62
+ description: 'Icône à la fin du champ',
63
+ },
64
+ isDisabled: {
65
+ control: 'boolean',
66
+ description: 'Désactive le champ',
67
+ },
68
+ noIcon: {
69
+ control: 'boolean',
70
+ description: 'Masque toutes les icônes',
71
+ },
72
+ noCalendar: {
73
+ control: 'boolean',
74
+ description: 'Désactive le calendrier',
75
+ },
76
+ customRules: {
77
+ control: 'object',
78
+ description: 'Règles de validation',
79
+ },
80
+ customWarningRules: {
81
+ control: 'object',
82
+ description: 'Règles d\'avertissement',
83
+ },
84
+ },
85
+ } as Meta<typeof DatePicker>
86
+
87
+ export default meta
88
+
89
+ type Story = StoryObj<typeof meta>
90
+
91
+ export const Default: Story = {
92
+ parameters: {
93
+ sourceCode: [
94
+ {
95
+ name: 'Template',
96
+ code: `
97
+ <template>
98
+ <DatePicker
99
+ v-model="date"
100
+ placeholder="Sélectionner une date"
101
+ format="DD/MM/YYYY"
102
+ />
103
+ </template>
104
+ `,
105
+ },
106
+ {
107
+ name: 'Script',
108
+ code: `
109
+ <script setup lang="ts">
110
+ import { DatePicker } from '@cnamts/synapse'
111
+ </script>
112
+ `,
113
+ },
114
+ ],
115
+ },
116
+ args: {
117
+ placeholder: 'Sélectionner une date',
118
+ format: 'DD/MM/YYYY',
119
+ isBirthDate: false,
120
+ showWeekNumber: false,
121
+ required: false,
122
+ displayRange: false,
123
+ displayIcon: true,
124
+ displayAppendIcon: false,
125
+ isDisabled: false,
126
+ noIcon: false,
127
+ noCalendar: false,
128
+ modelValue: '',
129
+ },
130
+ render: (args) => {
131
+ return {
132
+ components: { DatePicker: DatePicker },
133
+ setup() {
134
+ const value = ref('')
135
+ return { args, value }
136
+ },
137
+ template: `
138
+ <div class="d-flex flex-wrap align-center pa-4">
139
+ <DatePicker v-bind="args" v-model="value"/>
140
+ </div>
141
+ `,
142
+ }
143
+ },
144
+ }
145
+
146
+ export const DateRange: Story = {
147
+ parameters: {
148
+ sourceCode: [
149
+ {
150
+ name: 'Template',
151
+ code: `
152
+ <template>
153
+ <DatePicker
154
+ v-model="dateRange"
155
+ placeholder="Sélectionner une période"
156
+ format="DD/MM/YYYY"
157
+ displayRange
158
+ />
159
+ </template>
160
+ `,
161
+ },
162
+ {
163
+ name: 'Script',
164
+ code: `
165
+ <script setup lang="ts">
166
+ import { ref } from 'vue'
167
+ import { DatePicker } from '@cnamts/synapse'
168
+
169
+ const dateRange = ref(['', ''])
170
+ </script>
171
+ `,
172
+ },
173
+ ],
174
+ },
175
+ args: {
176
+ placeholder: 'Sélectionner une période',
177
+ format: 'DD/MM/YYYY',
178
+ dateFormatReturn: '',
179
+ isBirthDate: false,
180
+ showWeekNumber: false,
181
+ required: false,
182
+ displayRange: true,
183
+ displayIcon: true,
184
+ displayAppendIcon: false,
185
+ isDisabled: false,
186
+ noIcon: false,
187
+ noCalendar: false,
188
+ modelValue: ['', ''],
189
+ },
190
+ render: (args) => {
191
+ return {
192
+ components: { DatePicker: DatePicker },
193
+ setup() {
194
+ const value = ref(['', ''])
195
+ return { args, value }
196
+ },
197
+ template: `
198
+ <div class="d-flex flex-wrap align-center pa-4">
199
+ <DatePicker v-bind="args" v-model="value"/>
200
+ </div>
201
+ `,
202
+ }
203
+ },
204
+ }
205
+
206
+ export const WithAppendIcon: Story = {
207
+ parameters: {
208
+ sourceCode: [
209
+ {
210
+ name: 'Template',
211
+ code: `
212
+ <template>
213
+ <DatePicker
214
+ v-model="date"
215
+ placeholder="Sélectionner une date"
216
+ format="DD/MM/YYYY"
217
+ displayAppendIcon
218
+ />
219
+ </template>
220
+ `,
221
+ },
222
+ {
223
+ name: 'Script',
224
+ code: `
225
+ <script setup lang="ts">
226
+ import { ref } from 'vue'
227
+ import { DatePicker } from '@cnamts/synapse'
228
+
229
+ const date = ref('')
230
+ </script>
231
+ `,
232
+ },
233
+ ],
234
+ },
235
+ args: {
236
+ placeholder: 'Sélectionner une date',
237
+ format: 'DD/MM/YYYY',
238
+ dateFormatReturn: '',
239
+ isBirthDate: false,
240
+ showWeekNumber: false,
241
+ required: false,
242
+ displayRange: false,
243
+ displayIcon: true,
244
+ displayAppendIcon: true,
245
+ isDisabled: false,
246
+ noIcon: false,
247
+ noCalendar: false,
248
+ modelValue: '',
249
+ },
250
+ render: (args) => {
251
+ return {
252
+ components: { DatePicker: DatePicker },
253
+ setup() {
254
+ const value = ref('')
255
+ return { args, value }
256
+ },
257
+ template: `
258
+ <div class="d-flex flex-wrap align-center pa-4">
259
+ <DatePicker v-bind="args" v-model="value"/>
260
+ </div>
261
+ `,
262
+ }
263
+ },
264
+ }
265
+
266
+ export const WithoutIcon: Story = {
267
+ parameters: {
268
+ sourceCode: [
269
+ {
270
+ name: 'Template',
271
+ code: `
272
+ <template>
273
+ <DatePicker
274
+ v-model="date"
275
+ placeholder="Sélectionner une date"
276
+ format="DD/MM/YYYY"
277
+ :displayIcon="false"
278
+ />
279
+ </template>
280
+ `,
281
+ },
282
+ {
283
+ name: 'Script',
284
+ code: `
285
+ <script setup lang="ts">
286
+ import { ref } from 'vue'
287
+ import { DatePicker } from '@cnamts/synapse'
288
+
289
+ const date = ref('')
290
+ </script>
291
+ `,
292
+ },
293
+ ],
294
+ },
295
+ args: {
296
+ placeholder: 'Sélectionner une date',
297
+ format: 'DD/MM/YYYY',
298
+ dateFormatReturn: '',
299
+ isBirthDate: false,
300
+ showWeekNumber: false,
301
+ required: false,
302
+ displayRange: false,
303
+ displayIcon: false,
304
+ displayAppendIcon: false,
305
+ isDisabled: false,
306
+ noIcon: false,
307
+ modelValue: '',
308
+ },
309
+ render: (args) => {
310
+ return {
311
+ components: { DatePicker: DatePicker },
312
+ setup() {
313
+ const value = ref('')
314
+ return { args, value }
315
+ },
316
+ template: `
317
+ <div class="d-flex flex-wrap align-center pa-4">
318
+ <DatePicker v-bind="args" v-model="value"/>
319
+ </div>
320
+ `,
321
+ }
322
+ },
323
+ }
324
+ export const BirthDate: Story = {
325
+ parameters: {
326
+ sourceCode: [
327
+ {
328
+ name: 'Template',
329
+ code: `
330
+ <template>
331
+ <DatePicker
332
+ v-model="birthDate"
333
+ placeholder="Date de naissance"
334
+ format="DD/MM/YYYY"
335
+ isBirthDate
336
+ />
337
+ </template>
338
+ `,
339
+ },
340
+ {
341
+ name: 'Script',
342
+ code: `
343
+ <script setup lang="ts">
344
+ import { ref } from 'vue'
345
+ import { DatePicker } from '@cnamts/synapse'
346
+
347
+ const birthDate = ref('')
348
+ </script>
349
+ `,
350
+ },
351
+ ],
352
+ },
353
+ args: {
354
+ placeholder: 'Date de naissance',
355
+ format: 'DD/MM/YYYY',
356
+ dateFormatReturn: '',
357
+ isBirthDate: true,
358
+ showWeekNumber: false,
359
+ required: false,
360
+ displayRange: false,
361
+ displayIcon: true,
362
+ displayAppendIcon: false,
363
+ isDisabled: false,
364
+ noIcon: false,
365
+ noCalendar: false,
366
+ modelValue: '',
367
+ },
368
+ render: (args) => {
369
+ return {
370
+ components: { DatePicker: DatePicker },
371
+ setup() {
372
+ const value = ref('')
373
+ return { args, value }
374
+ },
375
+ template: `
376
+ <div class="d-flex flex-wrap align-center pa-4">
377
+ <DatePicker v-bind="args" v-model="value"/>
378
+ </div>
379
+ `,
380
+ }
381
+ },
382
+ }
383
+
384
+ export const WithError: Story = {
385
+ parameters: {
386
+ sourceCode: [
387
+ {
388
+ name: 'Template',
389
+ code: `
390
+ <template>
391
+ <DatePicker
392
+ v-model="date"
393
+ placeholder="notAfterToday"
394
+ :custom-rules="[
395
+ { type: 'notAfterToday', options: { message: 'La date ne peut pas être après aujourd'hui' } }
396
+ ]"
397
+ />
398
+ </template>
399
+ `,
400
+ },
401
+ {
402
+ name: 'Script',
403
+ code: `
404
+ <script setup lang="ts">
405
+ import { ref } from 'vue'
406
+ import { DatePicker } from '@cnamts/synapse'
407
+
408
+ const date = ref('01/01/2100')
409
+ </script>
410
+ `,
411
+ },
412
+ ],
413
+ },
414
+ args: {
415
+ placeholder: 'Sélectionner une date',
416
+ format: 'DD/MM/YYYY',
417
+ dateFormatReturn: '',
418
+ isBirthDate: false,
419
+ showWeekNumber: false,
420
+ required: false,
421
+ displayRange: false,
422
+ displayIcon: true,
423
+ displayAppendIcon: false,
424
+ isDisabled: false,
425
+ noIcon: false,
426
+ noCalendar: false,
427
+ modelValue: '01/01/2100',
428
+ customRules: [
429
+ { type: 'notAfterToday', options: { message: 'La date ne peut pas être après aujourd\'hui' } },
430
+ ],
431
+ },
432
+ render: (args) => {
433
+ return {
434
+ components: { DatePicker: DatePicker },
435
+ setup() {
436
+ const value = ref('01/01/2100')
437
+ return { args, value }
438
+ },
439
+ template: `
440
+ <div class="d-flex flex-wrap align-center pa-4">
441
+ <DatePicker v-bind="args" v-model="value"/>
442
+ </div>
443
+ `,
444
+ }
445
+ },
446
+ }
447
+
448
+ export const WithWarning: Story = {
449
+ parameters: {
450
+ sourceCode: [
451
+ {
452
+ name: 'Template',
453
+ code: `
454
+ <template>
455
+ <DatePicker
456
+ v-model="date"
457
+ placeholder="Date avec avertissement"
458
+ :custom-warning-rules="[
459
+ { type: 'notBeforeDate', options: {
460
+ warningMessage: 'Attention : la date est antérieure à la date de référence',
461
+ date: '01/01/2031',
462
+ isWarning: true,
463
+ } }
464
+ ]"
465
+ />
466
+ </template>
467
+ `,
468
+ },
469
+ {
470
+ name: 'Script',
471
+ code: `
472
+ <script setup lang="ts">
473
+ import { ref } from 'vue'
474
+ import { DatePicker } from '@cnamts/synapse'
475
+
476
+ const date = ref('20/12/2023')
477
+ </script>
478
+ `,
479
+ },
480
+ ],
481
+ },
482
+ args: {
483
+ placeholder: 'Date avec avertissement',
484
+ format: 'DD/MM/YYYY',
485
+ dateFormatReturn: '',
486
+ isBirthDate: false,
487
+ showWeekNumber: false,
488
+ required: false,
489
+ displayRange: false,
490
+ displayIcon: true,
491
+ displayAppendIcon: false,
492
+ isDisabled: false,
493
+ noIcon: false,
494
+ noCalendar: false,
495
+ modelValue: '20/12/2023',
496
+ customWarningRules: [
497
+ {
498
+ type: 'notBeforeDate', options: {
499
+ warningMessage: 'Attention : la date est antérieure à la date de référence',
500
+ date: '01/01/2024',
501
+ isWarning: true,
502
+ },
503
+ },
504
+ ],
505
+ },
506
+ render: (args) => {
507
+ return {
508
+ components: { DatePicker: DatePicker },
509
+ setup() {
510
+ const value = ref('20/12/2023')
511
+ return { args, value }
512
+ },
513
+ template: `
514
+ <div class="d-flex flex-wrap align-center pa-4">
515
+ <DatePicker v-bind="args" v-model="value"/>
516
+ </div>
517
+ `,
518
+ }
519
+ },
520
+ }
521
+
522
+ export const WithSuccess: Story = {
523
+ parameters: {
524
+ sourceCode: [
525
+ {
526
+ name: 'Template',
527
+ code: `
528
+ <template>
529
+ <DatePicker
530
+ v-model="date"
531
+ placeholder="Date valide"
532
+ required
533
+ :custom-rules="[
534
+ { type: 'notWeekend', options: { message: 'La date ne peut pas être un weekend' } }
535
+ ]"
536
+ />
537
+ </template>
538
+ `,
539
+ },
540
+ {
541
+ name: 'Script',
542
+ code: `
543
+ <script setup lang="ts">
544
+ import { ref } from 'vue'
545
+ import { DatePicker } from '@cnamts/synapse'
546
+
547
+ const date = ref('22/01/2024')
548
+ </script>
549
+ `,
550
+ },
551
+ ],
552
+ },
553
+ args: {
554
+ placeholder: 'Date valide',
555
+ format: 'DD/MM/YYYY',
556
+ dateFormatReturn: '',
557
+ isBirthDate: false,
558
+ showWeekNumber: false,
559
+ required: true,
560
+ displayRange: false,
561
+ displayIcon: true,
562
+ displayAppendIcon: false,
563
+ isDisabled: false,
564
+ noIcon: false,
565
+ noCalendar: false,
566
+ modelValue: '22/01/2024',
567
+ customRules: [
568
+ { type: 'notWeekend', options: { message: 'La date ne peut pas être un weekend' } },
569
+ ],
570
+ },
571
+ render: (args) => {
572
+ return {
573
+ components: { DatePicker: DatePicker },
574
+ setup() {
575
+ const value = ref('22/01/2024')
576
+ return { args, value }
577
+ },
578
+ template: `
579
+ <div class="d-flex flex-wrap align-center pa-4">
580
+ <DatePicker v-bind="args" v-model="value"/>
581
+ </div>
582
+ `,
583
+ }
584
+ },
585
+ }
586
+
587
+ export const DifferentFormats: Story = {
588
+ parameters: {
589
+ sourceCode: [
590
+ {
591
+ name: 'Template',
592
+ code: `
593
+ <template>
594
+ <div class="d-flex flex-column gap-4">
595
+ <DatePicker
596
+ v-model="date1"
597
+ placeholder="Format DD/MM/YYYY"
598
+ format="DD/MM/YYYY"
599
+ />
600
+ <DatePicker
601
+ v-model="date2"
602
+ placeholder="Format MM/DD/YYYY"
603
+ format="MM/DD/YYYY"
604
+ />
605
+ <DatePicker
606
+ v-model="date3"
607
+ placeholder="Format YYYY-MM-DD"
608
+ format="YYYY-MM-DD"
609
+ />
610
+ <DatePicker
611
+ v-model="date4"
612
+ placeholder="Format DD-MM-YY"
613
+ format="DD-MM-YY"
614
+ />
615
+ <DatePicker
616
+ v-model="date5"
617
+ placeholder="Format DD.MM.YYYY"
618
+ format="DD.MM.YYYY"
619
+ />
620
+ </div>
621
+ </template>
622
+ `,
623
+ },
624
+ {
625
+ name: 'Script',
626
+ code: `
627
+ <script setup lang="ts">
628
+ import { ref } from 'vue'
629
+ import { DatePicker } from '@cnamts/synapse'
630
+
631
+ const value1 = ref('24/12/2025')
632
+ const value2 = ref('12/24/2025')
633
+ const value3 = ref('2025-12-24')
634
+ const value4 = ref('24-12-25')
635
+ const value5 = ref('24.12.2025')
636
+ </script>
637
+ `,
638
+ },
639
+ ],
640
+ },
641
+ render: () => {
642
+ return {
643
+ components: { DatePicker: DatePicker },
644
+ setup() {
645
+ const value1 = ref('24/12/2025')
646
+ const value2 = ref('12/24/2025')
647
+ const value3 = ref('2025-12-24')
648
+ const value4 = ref('24-12-25')
649
+ const value5 = ref('25.12.2025')
650
+ return { value1, value2, value3, value4, value5 }
651
+ },
652
+ template: `
653
+ <div class="d-flex flex-column gap-4 pa-4">
654
+ <DatePicker
655
+ v-model="value1"
656
+ placeholder="Format DD/MM/YYYY"
657
+ format="DD/MM/YYYY"
658
+ />
659
+ <DatePicker
660
+ v-model="value2"
661
+ placeholder="Format MM/DD/YYYY"
662
+ format="MM/DD/YYYY"
663
+ />
664
+ <DatePicker
665
+ v-model="value3"
666
+ placeholder="Format YYYY-MM-DD"
667
+ format="YYYY-MM-DD"
668
+ />
669
+ <DatePicker
670
+ v-model="value4"
671
+ placeholder="Format DD-MM-YY"
672
+ format="DD-MM-YY"
673
+ />
674
+ <DatePicker
675
+ v-model="value5"
676
+ placeholder="Format DD.MM.YYYY"
677
+ format="DD.MM.YYYY"
678
+ />
679
+ </div>
680
+ `,
681
+ }
682
+ },
683
+ }
684
+
685
+ export const WithDateFormatReturn: Story = {
686
+ parameters: {
687
+ sourceCode: [
688
+ {
689
+ name: 'Template',
690
+ code: `
691
+ <template>
692
+ <div class="d-flex flex-column gap-4 pa-4">
693
+ <span class="mb-4">Date de retour : {{ value1 }}</span>
694
+ <DatePicker
695
+ v-model="value1"
696
+ placeholder="Format DD/MM/YYYY, retour par défaut"
697
+ format="DD/MM/YYYY"
698
+ />
699
+
700
+ <span class="mb-4">Date de retour : {{ value2 }}</span>
701
+ <DatePicker
702
+ v-model="value2"
703
+ placeholder="Format DD/MM/YYYY, retour MM/DD/YYYY"
704
+ format="DD/MM/YYYY"
705
+ dateFormatReturn="MM/DD/YYYY"
706
+ />
707
+
708
+
709
+ <span class="mb-4">Date de retour : {{ value3 }}</span>
710
+ <DatePicker
711
+ v-model="value3"
712
+ placeholder="Format DD/MM/YYYY, retour YYYY-MM-DD"
713
+ format="DD/MM/YYYY"
714
+ dateFormatReturn="YYYY-MM-DD"
715
+ />
716
+ </template>
717
+ `,
718
+ },
719
+ {
720
+ name: 'Script',
721
+ code: `
722
+ <script setup lang="ts">
723
+ import { ref } from 'vue'
724
+ import { DatePicker } from '@cnamts/synapse'
725
+
726
+ const date1 = ref('24/12/2025')
727
+ const date2 = ref('24/12/2025')
728
+ const date3 = ref('24/12/2025')
729
+ </script>
730
+ `,
731
+ },
732
+ ],
733
+ },
734
+ args: {
735
+ placeholder: 'Sélectionner une date',
736
+ format: 'DD/MM/YYYY',
737
+ dateFormatReturn: '',
738
+ isBirthDate: false,
739
+ showWeekNumber: false,
740
+ required: false,
741
+ displayRange: false,
742
+ displayIcon: true,
743
+ displayAppendIcon: false,
744
+ isDisabled: false,
745
+ noIcon: false,
746
+ noCalendar: false,
747
+ modelValue: '24/12/2025',
748
+ },
749
+ render: () => {
750
+ return {
751
+ components: { DatePicker: DatePicker },
752
+ setup() {
753
+ const value1 = ref('24/12/2025')
754
+ const value2 = ref('24/12/2025')
755
+ const value3 = ref('24/12/2025')
756
+ return { value1, value2, value3 }
757
+ },
758
+ template: `
759
+ <div class="d-flex flex-column gap-4 pa-4">
760
+ <span class="mb-4">Date de retour : {{ value1 }}</span>
761
+ <DatePicker
762
+ v-model="value1"
763
+ placeholder="Format DD/MM/YYYY, retour par défaut"
764
+ format="DD/MM/YYYY"
765
+ />
766
+
767
+ <span class="mb-4">Date de retour : {{ value2 }}</span>
768
+ <DatePicker
769
+ v-model="value2"
770
+ placeholder="Format DD/MM/YYYY, retour MM/DD/YYYY"
771
+ format="DD/MM/YYYY"
772
+ dateFormatReturn="MM/DD/YYYY"
773
+ />
774
+
775
+
776
+ <span class="mb-4">Date de retour : {{ value3 }}</span>
777
+ <DatePicker
778
+ v-model="value3"
779
+ placeholder="Format DD/MM/YYYY, retour YYYY-MM-DD"
780
+ format="DD/MM/YYYY"
781
+ dateFormatReturn="YYYY-MM-DD"
782
+ />
783
+ </div>
784
+ `,
785
+ }
786
+ },
787
+ }