@dative-gpi/foundation-shared-components 0.0.70 → 0.0.72

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.
@@ -5,7 +5,9 @@
5
5
  <FSRow
6
6
  align="bottom-center"
7
7
  >
8
- <template v-if="$props.showSearch">
8
+ <template
9
+ v-if="$props.showSearch"
10
+ >
9
11
  <FSSearchField
10
12
  prependInnerIcon="mdi-magnify"
11
13
  :hideHeader="true"
@@ -17,7 +19,9 @@
17
19
  @click="showFilters = !showFilters"
18
20
  />
19
21
  </template>
20
- <slot name="toolbar" />
22
+ <slot
23
+ name="toolbar"
24
+ />
21
25
  <v-spacer />
22
26
  <FSOptionGroup
23
27
  v-if="!$props.disableTable && !$props.disableIterator"
@@ -29,7 +33,9 @@
29
33
  <FSRow
30
34
  v-if="showFiltersRow"
31
35
  >
32
- <template v-if="showFilters">
36
+ <template
37
+ v-if="showFilters"
38
+ >
33
39
  <FSFilterButton
34
40
  v-for="(header, index) in filterableHeaders"
35
41
  :key="index"
@@ -37,7 +43,9 @@
37
43
  :filters="filters[header.value]"
38
44
  @update:filter="(value) => toggleFilter(header.value, value)"
39
45
  >
40
- <template #default="{ filter }">
46
+ <template
47
+ #default="{ filter }"
48
+ >
41
49
  <slot
42
50
  :name="filterSlot(header)"
43
51
  v-bind="{ filter }"
@@ -60,7 +68,9 @@
60
68
  @update:show="(value) => updateHeader(value, 'hidden', false)"
61
69
  />
62
70
  </FSRow>
63
- <template v-if="innerMode === 'table'">
71
+ <template
72
+ v-if="innerMode === 'table'"
73
+ >
64
74
  <v-data-table
65
75
  v-if="!isExtraSmall"
66
76
  selectStrategy="all"
@@ -75,6 +85,7 @@
75
85
  :multiSort="false"
76
86
  :hover="!$props.sortDraggable"
77
87
  :style="style"
88
+ :row-props="rowProps"
78
89
  :class="classes"
79
90
  :page="innerPage"
80
91
  :itemsPerPage="innerRowsPerPage"
@@ -87,14 +98,18 @@
87
98
  @dragover="onDragOver($event, 'tr.v-data-table__tr', 'tbody')"
88
99
  @dragleave="onDragLeave"
89
100
  >
90
- <template #no-data>
101
+ <template
102
+ #no-data
103
+ >
91
104
  <FSText
92
105
  font="text-overline"
93
106
  >
94
107
  {{ $tr("ui.data-table.empty", "No data") }}
95
108
  </FSText>
96
109
  </template>
97
- <template #[`header.data-table-select`]="props">
110
+ <template
111
+ #header.data-table-select="props"
112
+ >
98
113
  <FSRow
99
114
  v-if="!$props.singleSelect"
100
115
  class="fs-data-table-select"
@@ -102,13 +117,15 @@
102
117
  width="hug"
103
118
  >
104
119
  <FSCheckbox
105
- :modelValue="props.allSelected"
106
120
  :indeterminate="props.someSelected && !props.allSelected"
121
+ :modelValue="props.allSelected"
107
122
  @update:modelValue="toggleSelectAll(props.allSelected)"
108
123
  />
109
124
  </FSRow>
110
125
  </template>
111
- <template #[`item.data-table-select`]="props">
126
+ <template
127
+ #item.data-table-select="props"
128
+ >
112
129
  <FSRow
113
130
  class="fs-data-table-select"
114
131
  align="bottom-center"
@@ -120,7 +137,9 @@
120
137
  />
121
138
  </FSRow>
122
139
  </template>
123
- <template #[`item.data-table-draggable`]="props">
140
+ <template
141
+ #item.data-table-draggable="props"
142
+ >
124
143
  <FSDraggable
125
144
  elementSelector="tr.v-data-table__tr"
126
145
  :disabled="draggableDisabled"
@@ -140,21 +159,31 @@
140
159
  </FSRow>
141
160
  </FSDraggable>
142
161
  </template>
143
- <template #[`header.data-table-group`]="props">
162
+ <template
163
+ #header.data-table-group="props"
164
+ >
144
165
  <slot
145
166
  name="header.data-table-group"
146
167
  v-bind="props"
147
168
  />
148
169
  </template>
149
- <template #[`item.data-table-group`]="props">
170
+ <template
171
+ #item.data-table-group="props"
172
+ >
150
173
  <slot
151
174
  name="item.data-table-group"
152
175
  v-bind="props"
153
176
  />
154
177
  </template>
155
- <template #group-header="props">
156
- <template :ref="() => { if (!props.isGroupOpen(props.item)) { props.toggleGroup(props.item) } }" />
157
- <tr class="fs-data-table-group-header">
178
+ <template
179
+ #group-header="props"
180
+ >
181
+ <template
182
+ :ref="() => { if (!props.isGroupOpen(props.item)) { props.toggleGroup(props.item) } }"
183
+ />
184
+ <tr
185
+ class="fs-data-table-group-header"
186
+ >
158
187
  <td />
159
188
  <td
160
189
  class="fs-data-table-group-header"
@@ -198,15 +227,23 @@
198
227
  :wrap="false"
199
228
  :key="index"
200
229
  >
201
- <slot :name="`${header.slotName}-prepend`" />
202
- <slot :name="`${header.slotName}-title`">
230
+ <slot
231
+ :name="`${header.slotName}-prepend`"
232
+ />
233
+ <slot
234
+ :name="`${header.slotName}-title`"
235
+ >
203
236
  <FSText>
204
237
  {{ header.text }}
205
238
  </FSText>
206
239
  </slot>
207
- <slot :name="`${header.slotName}-append`" />
240
+ <slot
241
+ :name="`${header.slotName}-append`"
242
+ />
208
243
  <v-spacer />
209
- <slot :name="`${header.slotName}-configuration`">
244
+ <slot
245
+ :name="`${header.slotName}-configuration`"
246
+ >
210
247
  <FSHeaderButton
211
248
  :first="index === 0"
212
249
  :last="index === headersSlots.length - 1"
@@ -228,31 +265,41 @@
228
265
  v-for="(item, index) in itemsSlots"
229
266
  #[item.slotName]="props"
230
267
  >
231
- <slot
232
- :name="item.slotName"
233
- v-bind="props"
268
+ <div
269
+ class="fs-td-color"
234
270
  >
235
- <FSRow
236
- align="center-left"
237
- :key="index"
271
+ <slot
272
+ :name="item.slotName"
273
+ v-bind="props"
238
274
  >
239
- <FSText
240
- font="text-overline"
275
+ <FSRow
276
+ align="center-left"
277
+ :key="index"
241
278
  >
242
- {{ props.item[item.value] }}
243
- </FSText>
244
- </FSRow>
245
- </slot>
279
+ <FSSpan
280
+ font="text-overline"
281
+ >
282
+ {{ props.item[item.value] }}
283
+ </FSSpan>
284
+ </FSRow>
285
+ </slot>
286
+ </div>
246
287
  </template>
247
- <template #bottom>
288
+ <template
289
+ #bottom
290
+ >
248
291
  <FSRow
249
292
  class="fs-data-table-footer"
250
293
  align="center-right"
251
294
  padding="16px"
252
295
  gap="24px"
253
296
  >
254
- <template v-if="$props.modelValue.length">
255
- <template v-if="$props.modelValue.length >= innerItems.length">
297
+ <template
298
+ v-if="$props.modelValue.length"
299
+ >
300
+ <template
301
+ v-if="$props.modelValue.length >= innerItems.length"
302
+ >
256
303
  <FSRow
257
304
  gap="2px"
258
305
  >
@@ -266,7 +313,9 @@
266
313
  </FSText>
267
314
  </FSRow>
268
315
  </template>
269
- <template v-else>
316
+ <template
317
+ v-else
318
+ >
270
319
  <FSText>
271
320
  {{ $tr("ui.data-table.some-selected", "{0} element(s) selected", $props.modelValue.length.toString()) }}
272
321
  </FSText>
@@ -319,7 +368,9 @@
319
368
  :page="innerPage"
320
369
  :itemsPerPage="innerRowsPerPage"
321
370
  >
322
- <template #default="{ items }">
371
+ <template
372
+ #default="{ items }"
373
+ >
323
374
  <FSCol
324
375
  class="fs-data-iterator-container"
325
376
  width="fill"
@@ -331,7 +382,7 @@
331
382
  :item="item"
332
383
  :key="index"
333
384
  @update:dragend="(event, dragged) => onDragEnd(event, dragged, '.fs-data-iterator-container')"
334
- @dragover="onDragOver($event, '.fs-draggable-item', '.fs-data-iterator-container')"
385
+ @dragover="(event) => onDragOver(event, '.fs-draggable-item', '.fs-data-iterator-container')"
335
386
  @drop="(event) => onDrop(event, item, '.fs-draggable-item')"
336
387
  @dragleave="onDragLeave"
337
388
  @dragover.prevent
@@ -342,16 +393,19 @@
342
393
  >
343
394
  <FSDataIteratorItem
344
395
  v-if="item.type === 'item'"
396
+ :itemColor="$props.rowColor ? $props.rowColor(item.raw) : ColorEnum.Background"
345
397
  :headers="innerHeaders.filter(h => !$props.sneakyHeaders.includes(h.value))"
346
- :modelValue="innerValue.includes(item.raw[$props.itemValue])"
347
398
  :showSelect="$props.showSelect"
348
399
  :itemTo="$props.itemTo"
349
400
  :color="$props.color"
350
401
  :item="item.raw"
351
402
  :key="index"
403
+ :modelValue="innerValue.includes(item.raw[$props.itemValue])"
352
404
  @update:modelValue="toggleSelect"
353
405
  >
354
- <template #[`item.top`]="props">
406
+ <template
407
+ #item.top="props"
408
+ >
355
409
  <slot
356
410
  name="item.top"
357
411
  v-bind="props"
@@ -365,14 +419,16 @@
365
419
  :name="item.slotName"
366
420
  v-bind="props"
367
421
  >
368
- <FSText
422
+ <FSSpan
369
423
  :key="index"
370
424
  >
371
425
  {{ props.item[item.value] }}
372
- </FSText>
426
+ </FSSpan>
373
427
  </slot>
374
428
  </template>
375
- <template #[`item.bottom`]="props">
429
+ <template
430
+ #item.bottom="props"
431
+ >
376
432
  <slot
377
433
  name="item.bottom"
378
434
  v-bind="props"
@@ -383,29 +439,37 @@
383
439
  </FSDraggable>
384
440
  </FSCol>
385
441
  </template>
386
- <template #footer>
442
+ <template
443
+ #footer
444
+ >
387
445
  <FSRow
388
446
  class="fs-data-table-footer"
389
447
  align="center-right"
390
448
  padding="16px"
391
449
  gap="24px"
392
450
  >
393
- <template v-if="$props.modelValue.length">
394
- <template v-if="$props.modelValue.length >= innerItems.length">
451
+ <template
452
+ v-if="$props.modelValue.length"
453
+ >
454
+ <template
455
+ v-if="$props.modelValue.length >= innerItems.length"
456
+ >
395
457
  <FSRow
396
458
  gap="2px"
397
459
  >
398
460
  <FSText
399
461
  font="text-button"
400
462
  >
401
- {{ $tr("ui.data-table.all-selected-bold", "Attention:") }}
463
+ {{ $tr("ui.data-table.all-selected-bold", "Warning:") }}
402
464
  </FSText>
403
465
  <FSText>
404
466
  {{ $tr("ui.data-table.all-selected-regular", "All elements selected") }}
405
467
  </FSText>
406
468
  </FSRow>
407
469
  </template>
408
- <template v-else>
470
+ <template
471
+ v-else
472
+ >
409
473
  <FSText>
410
474
  {{ $tr("ui.data-table.some-selected", "{0} element(s) selected", $props.modelValue.length.toString()) }}
411
475
  </FSText>
@@ -446,16 +510,21 @@
446
510
  </template>
447
511
  </v-data-iterator>
448
512
  </template>
449
- <template v-else>
513
+ <template
514
+ v-else
515
+ >
450
516
  <v-data-iterator
451
517
  class="fs-data-table-iterator"
452
518
  :items="innerItems"
453
519
  :itemsPerPage="size"
454
520
  >
455
- <template #default="{ items }">
521
+ <template
522
+ #default="{ items }"
523
+ >
456
524
  <FSRow
457
525
  width="hug"
458
526
  class="fs-data-iterator-container"
527
+ :gap="$props.tileGap"
459
528
  >
460
529
  <FSDraggable
461
530
  v-for="(item, index) in items.filter((item) => item.type === 'item')"
@@ -464,7 +533,7 @@
464
533
  :item="item"
465
534
  :key="index"
466
535
  @update:dragend="(event, dragged) => onDragEnd(event, dragged, '.fs-data-iterator-container')"
467
- @dragover="onDragOver($event, '.fs-draggable-item', '.fs-data-iterator-container')"
536
+ @dragover="(event) => onDragOver(event, '.fs-draggable-item', '.fs-data-iterator-container')"
468
537
  @drop="(event) => onDrop(event, item, '.fs-draggable-item')"
469
538
  @dragleave="onDragLeave"
470
539
  @dragover.prevent
@@ -474,16 +543,19 @@
474
543
  v-bind="{ index, item: item.raw, toggleSelect }"
475
544
  >
476
545
  <FSDataIteratorItem
546
+ :itemColor="$props.rowColor ? $props.rowColor(item.raw) : ColorEnum.Background"
477
547
  :headers="innerHeaders.filter(h => !$props.sneakyHeaders.includes(h.value))"
478
- :modelValue="innerValue.includes(item.raw[$props.itemValue])"
479
548
  :showSelect="$props.showSelect"
480
549
  :itemTo="$props.itemTo"
481
550
  :color="$props.color"
482
551
  :item="item.raw"
483
552
  :key="index"
553
+ :modelValue="innerValue.includes(item.raw[$props.itemValue])"
484
554
  @update:modelValue="toggleSelect"
485
555
  >
486
- <template #[`item.top`]="props">
556
+ <template
557
+ #item.top="props"
558
+ >
487
559
  <slot
488
560
  name="item.top"
489
561
  v-bind="props"
@@ -504,7 +576,9 @@
504
576
  </FSText>
505
577
  </slot>
506
578
  </template>
507
- <template #[`item.bottom`]="props">
579
+ <template
580
+ #item.bottom="props"
581
+ >
508
582
  <slot
509
583
  name="item.bottom"
510
584
  v-bind="props"
@@ -517,7 +591,9 @@
517
591
  </template>
518
592
  </v-data-iterator>
519
593
  </template>
520
- <div class="fs-data-table-intersection" />
594
+ <div
595
+ class="fs-data-table-intersection"
596
+ />
521
597
  </FSCol>
522
598
  </template>
523
599
 
@@ -528,6 +604,7 @@ import { useRouter } from "vue-router";
528
604
  import { ColorEnum, FSDataTableColumn, FSDataTableFilter, FSDataTableOrder, FSToggle } from "@dative-gpi/foundation-shared-components/models";
529
605
  import { useBreakpoints, useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
530
606
  import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
607
+ import { sizeToVar } from "../../utils";
531
608
 
532
609
  import FSDataIteratorItem from "./FSDataIteratorItem.vue";
533
610
  import FSSearchField from "../fields/FSSearchField.vue";
@@ -542,6 +619,7 @@ import FSCheckbox from "../FSCheckbox.vue";
542
619
  import FSCard from "../FSCard.vue";
543
620
  import FSChip from "../FSChip.vue";
544
621
  import FSIcon from "../FSIcon.vue";
622
+ import FSSpan from "../FSSpan.vue";
545
623
  import FSText from "../FSText.vue";
546
624
  import FSRow from "../FSRow.vue";
547
625
  import FSCol from "../FSCol.vue";
@@ -562,6 +640,7 @@ export default defineComponent({
562
640
  FSCard,
563
641
  FSChip,
564
642
  FSIcon,
643
+ FSSpan,
565
644
  FSText,
566
645
  FSRow,
567
646
  FSCol
@@ -674,7 +753,27 @@ export default defineComponent({
674
753
  type: Boolean,
675
754
  required: false,
676
755
  default: false
677
- }
756
+ },
757
+ rowColor: {
758
+ type: Function,
759
+ required: false,
760
+ default: null
761
+ },
762
+ rowGap: {
763
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
764
+ required: false,
765
+ default: "0"
766
+ },
767
+ rowBorderRadius: {
768
+ type: [String, Number],
769
+ required: false,
770
+ default: "4px"
771
+ },
772
+ tileGap: {
773
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
774
+ required: false,
775
+ default: "8px"
776
+ },
678
777
  },
679
778
  emits: ["update:modelValue", "update:headers", "update:filters", "update:mode", "update:sortBy", "update:rowsPerPage", "update:page", "update:include", "update:items", "click:row"],
680
779
  setup(props, { emit }) {
@@ -744,10 +843,11 @@ export default defineComponent({
744
843
  return slots;
745
844
  });
746
845
 
747
- const style = computed((): { [key: string] : string | undefined } => {
846
+ const style = computed((): { [key: string]: string | undefined } => {
748
847
  return {
749
848
  "--fs-data-table-background-color": backgrounds.base,
750
- "--fs-data-table-border-color": lights.base
849
+ "--fs-data-table-border-color": lights.base,
850
+ "--fs-data-table-row-gap": sizeToVar(props.rowGap)
751
851
  };
752
852
  });
753
853
 
@@ -1061,6 +1161,25 @@ export default defineComponent({
1061
1161
  }
1062
1162
  }
1063
1163
 
1164
+ const rowProps = (row: any): Record<string, any> => {
1165
+ if (props.rowColor && row.item) {
1166
+ const rowColors = getColors(props.rowColor(row.item));
1167
+ return {
1168
+ class: "fs-data-table-custom-row",
1169
+ style: {
1170
+ "--fs-data-table-row-border-size" : "1px",
1171
+ "--fs-data-table-row-border-radius" : sizeToVar(props.rowBorderRadius),
1172
+ "--fs-data-table-row-background-color": rowColors.light,
1173
+ "--fs-data-table-row-border-color" : rowColors.lightContrast,
1174
+ "--fs-data-table-row-color" : rowColors.lightContrast
1175
+ }
1176
+ };
1177
+ }
1178
+ else {
1179
+ return {};
1180
+ }
1181
+ };
1182
+
1064
1183
  const changeIndex = (oldIndex: number, newIndex: number) => {
1065
1184
  if (oldIndex === newIndex) {
1066
1185
  return;
@@ -1251,6 +1370,7 @@ export default defineComponent({
1251
1370
  filterSlot,
1252
1371
  sortColor,
1253
1372
  sortIcon,
1373
+ rowProps,
1254
1374
  onDrop,
1255
1375
  onDragOver,
1256
1376
  onDragLeave,
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <FSSimpleIconTileUI
3
+ v-bind="$attrs"
4
+ />
5
+ </template>
6
+
7
+ <script lang="ts">
8
+ import { defineComponent } from "vue";
9
+
10
+ import FSSimpleIconTileUI from "./FSSimpleIconTileUI.vue";
11
+
12
+ export default defineComponent({
13
+ name: "FSDashboardOrganisationTileUI",
14
+ components: {
15
+ FSSimpleIconTileUI
16
+ }
17
+ });
18
+ </script>
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <FSSimpleIconTileUI
3
+ v-bind="$attrs"
4
+ />
5
+ </template>
6
+
7
+ <script lang="ts">
8
+ import { defineComponent } from "vue";
9
+
10
+ import FSSimpleIconTileUI from "./FSSimpleIconTileUI.vue";
11
+
12
+ export default defineComponent({
13
+ name: "FSDashboardOrganisationTypeTileUI",
14
+ components: {
15
+ FSSimpleIconTileUI
16
+ }
17
+ });
18
+ </script>
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <FSSimpleIconTileUI
3
+ v-bind="$attrs"
4
+ />
5
+ </template>
6
+
7
+ <script lang="ts">
8
+ import { defineComponent } from "vue";
9
+
10
+ import FSSimpleIconTileUI from "./FSSimpleIconTileUI.vue";
11
+
12
+ export default defineComponent({
13
+ name: "FSDashboardShallowTileUI",
14
+ components: {
15
+ FSSimpleIconTileUI
16
+ }
17
+ });
18
+ </script>
@@ -0,0 +1,19 @@
1
+ <template>
2
+ <FSSimpleIconTileUI
3
+ :iconBackgroundColor="true"
4
+ v-bind="$attrs"
5
+ />
6
+ </template>
7
+
8
+ <script lang="ts">
9
+ import { defineComponent } from "vue";
10
+
11
+ import FSSimpleIconTileUI from "./FSSimpleIconTileUI.vue";
12
+
13
+ export default defineComponent({
14
+ name: "FSFolderTileUI",
15
+ components: {
16
+ FSSimpleIconTileUI
17
+ }
18
+ });
19
+ </script>