@cnamts/synapse 0.0.15-alpha → 1.0.0

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 (133) hide show
  1. package/dist/components/Accordion/Accordion.d.ts +39 -0
  2. package/dist/components/Accordion/config.d.ts +9 -0
  3. package/dist/components/ChipList/ChipList.d.ts +1 -1
  4. package/dist/components/CookiesSelection/CookiesSelection.d.ts +26 -26
  5. package/dist/components/CopyBtn/CopyBtn.d.ts +2 -0
  6. package/dist/components/Customs/SyInputSelect/SyInputSelect.d.ts +12 -0
  7. package/dist/components/Customs/SySelect/SySelect.d.ts +43 -16
  8. package/dist/components/Customs/SyTextField/SyTextField.d.ts +1391 -1
  9. package/dist/components/DatePicker/DatePicker.d.ts +2810 -16
  10. package/dist/components/DatePicker/DateTextInput.d.ts +1401 -4
  11. package/dist/components/DiacriticPicker/DiacriticPicker.d.ts +27 -0
  12. package/dist/components/DiacriticPicker/config.d.ts +14 -0
  13. package/dist/components/DiacriticPicker/locales.d.ts +6 -0
  14. package/dist/components/DownloadBtn/DownloadBtn.d.ts +1 -1
  15. package/dist/components/FooterBar/FooterBar.d.ts +1 -1
  16. package/dist/components/LangBtn/LangBtn.d.ts +4 -4
  17. package/dist/components/NirField/NirField.d.ts +2796 -4
  18. package/dist/components/NotificationBar/NotificationBar.d.ts +1 -1
  19. package/dist/components/PasswordField/PasswordField.d.ts +1 -1
  20. package/dist/components/PeriodField/PeriodField.d.ts +5636 -48
  21. package/dist/components/PhoneField/PhoneField.d.ts +1 -0
  22. package/dist/components/PhoneField/tests/types.d.ts +18 -0
  23. package/dist/components/SyAlert/SyAlert.d.ts +72 -1
  24. package/dist/components/SyTextArea/SyTextArea.d.ts +900 -0
  25. package/dist/components/SyTextArea/locales.d.ts +3 -0
  26. package/dist/components/SyTextArea/trimStartOnUpdate.d.ts +1 -0
  27. package/dist/components/SyTextArea/useTextActions.d.ts +13 -0
  28. package/dist/components/SyTextArea/wrapText.d.ts +1 -0
  29. package/dist/components/TableToolbar/TableToolbar.d.ts +10 -4
  30. package/dist/components/TableToolbar/config.d.ts +3 -2
  31. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +26 -26
  32. package/dist/components/index.d.ts +4 -0
  33. package/dist/composables/date/useDateFormat.d.ts +2 -2
  34. package/dist/composables/date/useDateFormatDayjs.d.ts +23 -0
  35. package/dist/composables/date/useDateInitializationDayjs.d.ts +18 -0
  36. package/dist/composables/date/useHolidayDay.d.ts +36 -0
  37. package/dist/design-system-v3.js +5106 -4208
  38. package/dist/design-system-v3.umd.cjs +4 -1
  39. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +1 -32
  40. package/dist/style.css +1 -1
  41. package/dist/utils/rules/index.d.ts +1 -0
  42. package/dist/utils/rules/isHolidayDay/index.d.ts +11 -0
  43. package/dist/utils/rules/isHolidayDay/locales.d.ts +2 -0
  44. package/package.json +3 -2
  45. package/src/assets/settings.scss +12 -0
  46. package/src/components/Accordion/Accordion.mdx +69 -0
  47. package/src/components/Accordion/Accordion.stories.ts +262 -0
  48. package/src/components/Accordion/Accordion.vue +319 -0
  49. package/src/components/Accordion/config.ts +9 -0
  50. package/src/components/Accordion/tests/__snapshots__/accordion.spec.ts.snap +155 -0
  51. package/src/components/Accordion/tests/accordion.spec.ts +492 -0
  52. package/src/components/CopyBtn/CopyBtn.stories.ts +189 -0
  53. package/src/components/CopyBtn/CopyBtn.vue +29 -1
  54. package/src/components/CopyBtn/tests/CopyBtn.spec.ts +102 -0
  55. package/src/components/Customs/SyInputSelect/SyInputSelect.stories.ts +155 -1
  56. package/src/components/Customs/SyInputSelect/SyInputSelect.vue +97 -14
  57. package/src/components/Customs/SyInputSelect/tests/SyInputSelect.spec.ts +386 -106
  58. package/src/components/Customs/SySelect/SySelect.stories.ts +121 -2
  59. package/src/components/Customs/SySelect/SySelect.vue +33 -8
  60. package/src/components/Customs/SySelect/tests/SySelect.spec.ts +290 -1
  61. package/src/components/Customs/SyTextField/Accessibilite.stories.ts +7 -0
  62. package/src/components/Customs/SyTextField/SyTextField.stories.ts +13 -0
  63. package/src/components/Customs/SyTextField/SyTextField.vue +87 -20
  64. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +795 -0
  65. package/src/components/DatePicker/DatePicker.stories.ts +432 -1
  66. package/src/components/DatePicker/DatePicker.vue +82 -27
  67. package/src/components/DatePicker/DatePickerValidation.stories.ts +9 -1
  68. package/src/components/DatePicker/DateTextInput.vue +101 -138
  69. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +282 -0
  70. package/src/components/DatePicker/examples/DatePickerHolidayRule.vue +130 -0
  71. package/src/components/DatePicker/tests/DatePicker.spec.ts +33 -32
  72. package/src/components/DatePicker/tests/DateTextInput.spec.ts +81 -33
  73. package/src/components/DiacriticPicker/DiacriticPicker.mdx +104 -0
  74. package/src/components/DiacriticPicker/DiacriticPicker.stories.ts +447 -0
  75. package/src/components/DiacriticPicker/DiacriticPicker.vue +262 -0
  76. package/src/components/DiacriticPicker/config.ts +15 -0
  77. package/src/components/DiacriticPicker/locales.ts +6 -0
  78. package/src/components/DiacriticPicker/tests/DiatriticPicker.spec.ts +132 -0
  79. package/src/components/DialogBox/DialogBox.vue +1 -3
  80. package/src/components/NirField/NirField.stories.ts +172 -0
  81. package/src/components/NirField/NirField.vue +15 -7
  82. package/src/components/NotificationBar/Accessibilite.stories.ts +1 -1
  83. package/src/components/NotificationBar/NotificationBar.stories.ts +14 -0
  84. package/src/components/NotificationBar/NotificationBar.vue +26 -3
  85. package/src/components/NotificationBar/{options.ts → config.ts} +0 -1
  86. package/src/components/PaginatedTable/PaginatedTable.vue +0 -11
  87. package/src/components/PasswordField/PasswordField.stories.ts +4 -3
  88. package/src/components/PasswordField/PasswordField.vue +26 -18
  89. package/src/components/PasswordField/tests/PasswordField.spec.ts +1 -10
  90. package/src/components/PhoneField/PhoneField.stories.ts +143 -0
  91. package/src/components/PhoneField/PhoneField.vue +88 -30
  92. package/src/components/PhoneField/tests/PhoneField.additional.spec.ts +266 -0
  93. package/src/components/PhoneField/tests/PhoneField.spec.ts +248 -28
  94. package/src/components/PhoneField/tests/types.d.ts +19 -0
  95. package/src/components/SyAlert/Accessibilite.stories.ts +4 -0
  96. package/src/components/SyAlert/SyAlert.mdx +3 -7
  97. package/src/components/SyAlert/SyAlert.stories.ts +19 -12
  98. package/src/components/SyAlert/SyAlert.vue +88 -51
  99. package/src/components/SyAlert/tests/SyAlert.spec.ts +20 -2
  100. package/src/components/SyAlert/tests/__snapshots__/SyAlert.spec.ts.snap +83 -75
  101. package/src/components/SyTextArea/SyTextArea.mdx +17 -0
  102. package/src/components/SyTextArea/SyTextArea.stories.ts +322 -0
  103. package/src/components/SyTextArea/SyTextArea.vue +113 -0
  104. package/src/components/SyTextArea/locales.ts +3 -0
  105. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +194 -0
  106. package/src/components/SyTextArea/trimStartOnUpdate.ts +12 -0
  107. package/src/components/SyTextArea/useTextActions.ts +52 -0
  108. package/src/components/SyTextArea/wrapText.ts +42 -0
  109. package/src/components/TableToolbar/TableToolbar.mdx +86 -1
  110. package/src/components/TableToolbar/TableToolbar.stories.ts +422 -74
  111. package/src/components/TableToolbar/TableToolbar.vue +25 -8
  112. package/src/components/TableToolbar/config.ts +3 -2
  113. package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +35 -12
  114. package/src/components/index.ts +4 -0
  115. package/src/composables/date/useDateFormat.ts +17 -1
  116. package/src/composables/date/useDateFormatDayjs.ts +84 -0
  117. package/src/composables/date/useDateInitializationDayjs.ts +133 -0
  118. package/src/composables/date/useHolidayDay.ts +98 -0
  119. package/src/composables/rules/useFieldValidation.ts +16 -3
  120. package/src/composables/validation/useValidation.ts +2 -1
  121. package/src/designTokens/tokens/pa/paLightTheme.ts +10 -41
  122. package/src/stories/Accessibilite/Avancement/Avancement.mdx +12 -0
  123. package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +134 -0
  124. package/src/stories/Accessibilite/Introduction.mdx +5 -2
  125. package/src/stories/DesignTokens/colors.stories.ts +100 -41
  126. package/src/utils/rules/index.ts +1 -0
  127. package/src/utils/rules/isHolidayDay/IsHolidayDay.mdx +52 -0
  128. package/src/utils/rules/isHolidayDay/IsHolidayDay.stories.ts +129 -0
  129. package/src/utils/rules/isHolidayDay/index.ts +36 -0
  130. package/src/utils/rules/isHolidayDay/locales.ts +5 -0
  131. package/src/utils/rules/isHolidayDay/tests/isHolidayDay.spec.ts +35 -0
  132. /package/dist/components/NotificationBar/{options.d.ts → config.d.ts} +0 -0
  133. /package/src/components/DatePicker/{DatePickerValidationExamples.vue → docExamples/DatePickerValidationExamples.vue} +0 -0
@@ -1,5 +1,6 @@
1
1
  import type { Meta, StoryObj } from '@storybook/vue3'
2
2
  import TableToolbar from './TableToolbar.vue'
3
+ import SySelect from '../Customs/SySelect/SySelect.vue'
3
4
  import { VDataTable } from 'vuetify/components'
4
5
  import { ref } from 'vue'
5
6
  import { fn } from '@storybook/test'
@@ -118,11 +119,15 @@ const meta = {
118
119
  },
119
120
  },
120
121
  },
121
- 'search-left': {
122
+ 'filters': {
123
+ control: 'text',
124
+ description: 'Slot pour ajouter des filtres',
125
+ },
126
+ 'searchLeft': {
122
127
  control: 'text',
123
128
  description: 'Slot pour le contenu à gauche du champ de recherche',
124
129
  },
125
- 'search-right': {
130
+ 'searchRight': {
126
131
  control: 'text',
127
132
  description: 'Slot pour le contenu à droite du champ de recherche',
128
133
  },
@@ -152,22 +157,85 @@ type Story = StoryObj<typeof meta>
152
157
 
153
158
  export const Default: Story = {
154
159
  args: {
155
- 'nbFiltered': 5,
156
- 'nbTotal': 10,
160
+ 'nbTotal': 2,
157
161
  'onAdd': fn(),
158
162
  'onUpdate:search': fn(),
159
163
  },
164
+
165
+ render: (args) => {
166
+ return {
167
+ components: { TableToolbar, VDataTable },
168
+ setup() {
169
+ const headers = [
170
+ {
171
+ title: 'Nom',
172
+ value: 'lastname',
173
+ },
174
+ {
175
+ title: 'Prénom',
176
+ value: 'firstname',
177
+ },
178
+ {
179
+ title: 'Email',
180
+ value: 'email',
181
+ },
182
+ ]
183
+
184
+ const items = [
185
+ {
186
+ firstname: 'Virginie',
187
+ lastname: 'Beauchesne',
188
+ email: 'virginie.beauchesne@example.com',
189
+ },
190
+ {
191
+ firstname: 'Étienne',
192
+ lastname: 'Salois',
193
+ email: 'etienne.salois@example.com',
194
+ },
195
+ ]
196
+
197
+ const search = ref('')
198
+
199
+ return { args, headers, items, search }
200
+ },
201
+ template: `
202
+ <VDataTable
203
+ :headers="headers"
204
+ :items="items"
205
+ :items-per-page="args.nbFiltered"
206
+ :search="search"
207
+ hide-default-footer
208
+ >
209
+ <template #top>
210
+ <TableToolbar
211
+ v-bind="args"
212
+ v-model:search="search"
213
+ />
214
+ </template>
215
+ </VDataTable>
216
+ `,
217
+ }
218
+ },
160
219
  parameters: {
161
220
  sourceCode: [
162
221
  {
163
222
  name: 'Template',
164
223
  code: `
165
224
  <template>
166
- <TableToolbar
167
- v-model="search"
168
- :nb-total="10"
169
- :nb-filtered="5"
170
- />
225
+ <VDataTable
226
+ :headers="headers"
227
+ :items="items"
228
+ :search="search"
229
+ hide-default-footer
230
+ >
231
+ <template #top>
232
+ <TableToolbar
233
+ v-model:search="search"
234
+ :nb-total="items.length"
235
+ show-add-button
236
+ />
237
+ </template>
238
+ </VDataTable>
171
239
  </template>
172
240
  `,
173
241
  },
@@ -176,8 +244,37 @@ export const Default: Story = {
176
244
  code: `
177
245
  <script setup lang="ts">
178
246
  import { TableToolbar } from '@cnamts/synapse'
247
+ import { VDataTable } from 'vuetify/components'
179
248
  import { ref } from 'vue'
180
249
 
250
+ const headers = [
251
+ {
252
+ title: 'Nom',
253
+ value: 'lastname',
254
+ },
255
+ {
256
+ title: 'Prénom',
257
+ value: 'firstname',
258
+ },
259
+ {
260
+ title: 'Email',
261
+ value: 'email',
262
+ },
263
+ ]
264
+
265
+ const items = [
266
+ {
267
+ firstname: 'Virginie',
268
+ lastname: 'Beauchesne',
269
+ email: 'virginie.beauchesne@example.com',
270
+ },
271
+ {
272
+ firstname: 'Étienne',
273
+ lastname: 'Salois',
274
+ email: 'etienne.salois@example.com',
275
+ },
276
+ ]
277
+
181
278
  const search = ref('')
182
279
  </script>
183
280
  `,
@@ -232,13 +329,14 @@ export const AddButton: Story = {
232
329
  <VDataTable
233
330
  :headers="headers"
234
331
  :items="items"
332
+ :items-per-page="args.nbFiltered"
333
+ :search="search"
235
334
  hide-default-footer
236
335
  >
237
336
  <template #top>
238
337
  <TableToolbar
239
338
  v-bind="args"
240
- v-model="search"
241
- :nb-total="items.length"
339
+ v-model:search="search"
242
340
  show-add-button
243
341
  />
244
342
  </template>
@@ -255,11 +353,12 @@ export const AddButton: Story = {
255
353
  <VDataTable
256
354
  :headers="headers"
257
355
  :items="items"
356
+ :search="search"
258
357
  hide-default-footer
259
358
  >
260
359
  <template #top>
261
360
  <TableToolbar
262
- v-model="search"
361
+ v-model:search="search"
263
362
  :nb-total="items.length"
264
363
  show-add-button
265
364
  />
@@ -361,12 +460,14 @@ export const Labels: Story = {
361
460
  <VDataTable
362
461
  :headers="headers"
363
462
  :items="items"
463
+ :items-per-page="args.nbFiltered"
464
+ :search="search"
364
465
  hide-default-footer
365
466
  >
366
467
  <template #top>
367
468
  <TableToolbar
368
469
  v-bind="args"
369
- v-model="search"
470
+ v-model:search="search"
370
471
  />
371
472
  </template>
372
473
  </VDataTable>
@@ -382,16 +483,16 @@ export const Labels: Story = {
382
483
  <VDataTable
383
484
  :headers="headers"
384
485
  :items="items"
486
+ :search="search"
385
487
  hide-default-footer
386
488
  >
387
489
  <template #top>
388
490
  <TableToolbar
389
- v-model="search"
491
+ v-model:search="search"
390
492
  :nb-total="items.length"
391
493
  show-add-button
392
- showAddButton
393
- addButtonLabel="Ajouter un patient"
394
- searchLabel="Rechercher un patient"
494
+ add-button-label="Ajouter un patient"
495
+ search-label="Rechercher un patient"
395
496
  />
396
497
  </template>
397
498
  </VDataTable>
@@ -489,25 +590,92 @@ export const Loading: Story = {
489
590
  <VDataTable
490
591
  :headers="headers"
491
592
  :items="items"
593
+ :items-per-page="args.nbFiltered"
594
+ :search="search"
492
595
  loading
493
596
  hide-default-footer
494
597
  >
495
598
  <template #top>
496
599
  <TableToolbar
497
600
  v-bind="args"
498
- v-model="search"
601
+ v-model:search="search"
499
602
  />
500
603
  </template>
501
604
  </VDataTable>
502
605
  `,
503
606
  }
504
607
  },
608
+ parameters: {
609
+ sourceCode: [
610
+ {
611
+ name: 'Template',
612
+ code: `
613
+ <template>
614
+ <VDataTable
615
+ :headers="headers"
616
+ :items="items"
617
+ :search="search"
618
+ loading
619
+ hide-default-footer
620
+ >
621
+ <template #top>
622
+ <TableToolbar
623
+ v-model:search="search"
624
+ :nb-total="items.length"
625
+ />
626
+ </template>
627
+ </VDataTable>
628
+ </template>
629
+ `,
630
+ },
631
+ {
632
+ name: 'Script',
633
+ code: `
634
+ <script setup lang="ts">
635
+ import { TableToolbar } from '@cnamts/synapse'
636
+ import { VDataTable } from 'vuetify/components'
637
+ import { ref } from 'vue'
638
+
639
+ const headers = [
640
+ {
641
+ title: 'Nom',
642
+ value: 'lastname',
643
+ },
644
+ {
645
+ title: 'Prénom',
646
+ value: 'firstname',
647
+ },
648
+ {
649
+ title: 'Email',
650
+ value: 'email',
651
+ },
652
+ ]
653
+
654
+ const items = [
655
+ {
656
+ firstname: 'Virginie',
657
+ lastname: 'Beauchesne',
658
+ email: 'virginie.beauchesne@example.com',
659
+ },
660
+ {
661
+ firstname: 'Étienne',
662
+ lastname: 'Salois',
663
+ email: 'etienne.salois@example.com',
664
+ },
665
+ ]
666
+
667
+ const search = ref('')
668
+ </script>
669
+ `,
670
+ },
671
+ ],
672
+ },
505
673
  }
506
674
 
507
675
  export const NbFiltered: Story = {
508
676
  args: {
509
- 'nbTotal': 10,
510
- 'nbFiltered': 5,
677
+ 'nbTotal': 2,
678
+ 'nbFiltered': 1,
511
679
  'onAdd': fn(),
512
680
  'onUpdate:search': fn(),
513
681
  },
@@ -551,12 +719,14 @@ export const NbFiltered: Story = {
551
719
  <VDataTable
552
720
  :headers="headers"
553
721
  :items="items"
722
+ :items-per-page="args.nbFiltered"
723
+ :search="search"
554
724
  hide-default-footer
555
725
  >
556
726
  <template #top>
557
727
  <TableToolbar
558
728
  v-bind="args"
559
- v-model="search"
729
+ v-model:search="search"
560
730
  />
561
731
  </template>
562
732
  </VDataTable>
@@ -572,13 +742,15 @@ export const NbFiltered: Story = {
572
742
  <VDataTable
573
743
  :headers="headers"
574
744
  :items="items"
745
+ :items-per-page="1"
746
+ :search="search"
575
747
  hide-default-footer
576
748
  >
577
749
  <template #top>
578
750
  <TableToolbar
579
- v-model="search"
580
- :nbTotal="10"
581
- :nbFiltered="5"
751
+ v-model:search="search"
752
+ :nb-filtered="1"
753
+ :nb-total="items.length"
582
754
  />
583
755
  </template>
584
756
  </VDataTable>
@@ -629,32 +801,15 @@ export const NbFiltered: Story = {
629
801
  },
630
802
  }
631
803
 
632
- export const Customization: Story = {
804
+ export const SlotFilters: Story = {
633
805
  args: {
634
- 'nbTotal': 10,
806
+ 'nbTotal': 2,
635
807
  'onAdd': fn(),
636
808
  'onUpdate:search': fn(),
637
- 'showAddButton': true,
638
- 'vuetifyOptions': {
639
- toolbar: {
640
- class: 'py-2',
641
- },
642
- textField: {
643
- variant: 'outlined',
644
- density: 'compact',
645
- },
646
- addBtn: {
647
- height: '40px',
648
- color: '#663399',
649
- },
650
- addIcon: {
651
- class: 'd-none',
652
- },
653
- },
654
809
  },
655
810
  render: (args) => {
656
811
  return {
657
- components: { TableToolbar, VDataTable },
812
+ components: { TableToolbar, SySelect, VDataTable },
658
813
  setup() {
659
814
  const headers = [
660
815
  {
@@ -686,19 +841,44 @@ export const Customization: Story = {
686
841
 
687
842
  const search = ref('')
688
843
 
689
- return { args, headers, items, search }
844
+ const filterItems = ref<{ text: string, value: string }[]>([])
845
+
846
+ items.forEach((item) => {
847
+ filterItems.value.push({
848
+ text: item.lastname,
849
+ value: item.lastname,
850
+ })
851
+ })
852
+
853
+ return { args, headers, items, filterItems, search }
690
854
  },
691
855
  template: `
692
856
  <VDataTable
693
857
  :headers="headers"
694
858
  :items="items"
859
+ :items-per-page="args.nbFiltered"
860
+ :search="search"
695
861
  hide-default-footer
696
862
  >
697
863
  <template #top>
698
864
  <TableToolbar
699
865
  v-bind="args"
700
- v-model="search"
701
- />
866
+ v-model:search="args.search"
867
+ >
868
+ <template #filters>
869
+ <div class="py-1">
870
+ <SySelect
871
+ v-model="search"
872
+ :items="filterItems"
873
+ label="Nom"
874
+ density="compact"
875
+ width="100"
876
+ hide-messages
877
+ clearable
878
+ />
879
+ </div>
880
+ </template>
881
+ </TableToolbar>
702
882
  </template>
703
883
  </VDataTable>
704
884
  `,
@@ -713,15 +893,28 @@ export const Customization: Story = {
713
893
  <VDataTable
714
894
  :headers="headers"
715
895
  :items="items"
896
+ :search="search"
716
897
  hide-default-footer
717
898
  >
718
899
  <template #top>
719
900
  <TableToolbar
720
- v-model="search"
721
- :nb-total="10"
722
- show-add-button
723
- :vuetifyOptions
724
- />
901
+ v-model:search="search"
902
+ :nb-total="items.length"
903
+ >
904
+ <template #filters>
905
+ <div class="py-4">
906
+ <SySelect
907
+ v-model="search"
908
+ :items="filterItems"
909
+ label="Nom"
910
+ density="compact"
911
+ width="100"
912
+ hide-messages
913
+ clearable
914
+ />
915
+ </div>
916
+ </template>
917
+ </TableToolbar>
725
918
  </template>
726
919
  </VDataTable>
727
920
  </template>
@@ -731,7 +924,7 @@ export const Customization: Story = {
731
924
  name: 'Script',
732
925
  code: `
733
926
  <script setup lang="ts">
734
- import { TableToolbar } from '@cnamts/synapse'
927
+ import { TableToolbar, SySelect } from '@cnamts/synapse'
735
928
  import { VDataTable } from 'vuetify/components'
736
929
  import { ref } from 'vue'
737
930
 
@@ -763,24 +956,16 @@ export const Customization: Story = {
763
956
  },
764
957
  ]
765
958
 
766
- const vuetifyOptions = {
767
- toolbar: {
768
- class: 'py-2',
769
- },
770
- textField: {
771
- variant: 'outlined',
772
- density: 'compact',
773
- },
774
- addBtn: {
775
- height: '40px',
776
- color: '#663399',
777
- },
778
- addIcon: {
779
- class: 'd-none',
780
- },
781
- }
782
-
783
959
  const search = ref('')
960
+
961
+ const filterItems = ref<{ text: string, value: string }[]>([])
962
+
963
+ items.forEach((item) => {
964
+ filterItems.value.push({
965
+ text: item.lastname,
966
+ value: item.lastname,
967
+ })
968
+ })
784
969
  </script>
785
970
  `,
786
971
  },
@@ -788,7 +973,7 @@ export const Customization: Story = {
788
973
  },
789
974
  }
790
975
 
791
- export const Slots: Story = {
976
+ export const OtherSlots: Story = {
792
977
  args: {
793
978
  'nbTotal': 2,
794
979
  'onAdd': fn(),
@@ -834,12 +1019,14 @@ export const Slots: Story = {
834
1019
  <VDataTable
835
1020
  :headers="headers"
836
1021
  :items="items"
1022
+ :items-per-page="args.nbFiltered"
1023
+ :search="search"
837
1024
  hide-default-footer
838
1025
  >
839
1026
  <template #top>
840
1027
  <TableToolbar
841
1028
  v-bind="args"
842
- v-model="search"
1029
+ v-model:search="search"
843
1030
  >
844
1031
  <template #search-left>
845
1032
  <VBtn
@@ -866,12 +1053,13 @@ export const Slots: Story = {
866
1053
  <VDataTable
867
1054
  :headers="headers"
868
1055
  :items="items"
1056
+ :search="search"
869
1057
  hide-default-footer
870
1058
  >
871
1059
  <template #top>
872
1060
  <TableToolbar
873
- v-model="search"
874
- :nb-total="2"
1061
+ v-model:search="search"
1062
+ :nb-total="items.length"
875
1063
  show-add-button
876
1064
  >
877
1065
  <template #search-left>
@@ -933,3 +1121,163 @@ export const Slots: Story = {
933
1121
  ],
934
1122
  },
935
1123
  }
1124
+
1125
+ export const Customization: Story = {
1126
+ args: {
1127
+ 'nbTotal': 2,
1128
+ 'onAdd': fn(),
1129
+ 'onUpdate:search': fn(),
1130
+ 'showAddButton': true,
1131
+ 'vuetifyOptions': {
1132
+ toolbar: {
1133
+ class: 'py-2',
1134
+ },
1135
+ textField: {
1136
+ density: 'compact',
1137
+ },
1138
+ addBtn: {
1139
+ color: 'secondary',
1140
+ },
1141
+ addIcon: {
1142
+ class: 'd-none',
1143
+ },
1144
+ },
1145
+ },
1146
+ render: (args) => {
1147
+ return {
1148
+ components: { TableToolbar, VDataTable },
1149
+ setup() {
1150
+ const headers = [
1151
+ {
1152
+ title: 'Nom',
1153
+ value: 'lastname',
1154
+ },
1155
+ {
1156
+ title: 'Prénom',
1157
+ value: 'firstname',
1158
+ },
1159
+ {
1160
+ title: 'Email',
1161
+ value: 'email',
1162
+ },
1163
+ ]
1164
+
1165
+ const items = [
1166
+ {
1167
+ firstname: 'Virginie',
1168
+ lastname: 'Beauchesne',
1169
+ email: 'virginie.beauchesne@example.com',
1170
+ },
1171
+ {
1172
+ firstname: 'Étienne',
1173
+ lastname: 'Salois',
1174
+ email: 'etienne.salois@example.com',
1175
+ },
1176
+ ]
1177
+
1178
+ const search = ref('')
1179
+
1180
+ return { args, headers, items, search }
1181
+ },
1182
+ template: `
1183
+ <VDataTable
1184
+ :headers="headers"
1185
+ :items="items"
1186
+ :items-per-page="args.nbFiltered"
1187
+ :search="search"
1188
+ hide-default-footer
1189
+ >
1190
+ <template #top>
1191
+ <TableToolbar
1192
+ v-bind="args"
1193
+ v-model:search="search"
1194
+ />
1195
+ </template>
1196
+ </VDataTable>
1197
+ `,
1198
+ }
1199
+ },
1200
+ parameters: {
1201
+ sourceCode: [
1202
+ {
1203
+ name: 'Template',
1204
+ code: `
1205
+ <template>
1206
+ <VDataTable
1207
+ :headers="headers"
1208
+ :items="items"
1209
+ :search="search"
1210
+ hide-default-footer
1211
+ >
1212
+ <template #top>
1213
+ <TableToolbar
1214
+ v-model:search="search"
1215
+ show-add-button
1216
+ :nb-total="items.length"
1217
+ :vuetifyOptions
1218
+ />
1219
+ </template>
1220
+ </VDataTable>
1221
+ </template>
1222
+ `,
1223
+ },
1224
+ {
1225
+ name: 'Script',
1226
+ code: `
1227
+ <script setup lang="ts">
1228
+ import { TableToolbar } from '@cnamts/synapse'
1229
+ import { VDataTable } from 'vuetify/components'
1230
+ import { ref } from 'vue'
1231
+
1232
+ const headers = [
1233
+ {
1234
+ title: 'Nom',
1235
+ value: 'lastname',
1236
+ },
1237
+ {
1238
+ title: 'Prénom',
1239
+ value: 'firstname',
1240
+ },
1241
+ {
1242
+ title: 'Email',
1243
+ value: 'email',
1244
+ },
1245
+ ]
1246
+
1247
+ const items = [
1248
+ {
1249
+ firstname: 'Virginie',
1250
+ lastname: 'Beauchesne',
1251
+ email: 'virginie.beauchesne@example.com',
1252
+ },
1253
+ {
1254
+ firstname: 'Étienne',
1255
+ lastname: 'Salois',
1256
+ email: 'etienne.salois@example.com',
1257
+ },
1258
+ ]
1259
+
1260
+ const vuetifyOptions = {
1261
+ toolbar: {
1262
+ class: 'py-2',
1263
+ },
1264
+ textField: {
1265
+ variant: 'outlined',
1266
+ density: 'compact',
1267
+ },
1268
+ addBtn: {
1269
+ height: '40px',
1270
+ color: '#663399',
1271
+ },
1272
+ addIcon: {
1273
+ class: 'd-none',
1274
+ },
1275
+ }
1276
+
1277
+ const search = ref('')
1278
+ </script>
1279
+ `,
1280
+ },
1281
+ ],
1282
+ },
1283
+ }