@dative-gpi/foundation-shared-components 1.0.33 → 1.0.35

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 (39) hide show
  1. package/components/FSClickable.vue +9 -0
  2. package/components/FSDialogFormBody.vue +4 -4
  3. package/components/FSDialogMultiFormBody.vue +3 -3
  4. package/components/FSDialogSubmit.vue +3 -3
  5. package/components/FSFadeOut.vue +10 -3
  6. package/components/autocompletes/FSAutocompleteLanguage.vue +18 -39
  7. package/components/autocompletes/FSAutocompleteTimeZone.vue +19 -37
  8. package/components/fields/FSAutocompleteField.vue +422 -254
  9. package/components/fields/FSAutocompleteTag.vue +100 -0
  10. package/components/fields/FSSelectField.vue +3 -3
  11. package/components/fields/FSTextField.vue +11 -7
  12. package/components/fields/FSTreeViewField.vue +3 -3
  13. package/components/fields/periodicField/FSPeriodicDailyField.vue +17 -10
  14. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +29 -15
  15. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +13 -7
  16. package/components/fields/periodicField/FSPeriodicYearlyField.vue +19 -10
  17. package/components/lists/FSFilterButton.vue +19 -20
  18. package/components/lists/FSHiddenButton.vue +10 -12
  19. package/components/map/FSMap.vue +240 -399
  20. package/components/map/FSMapFeatureGroup.vue +51 -0
  21. package/components/map/FSMapLayerButton.vue +2 -2
  22. package/components/map/FSMapMarker.vue +116 -0
  23. package/components/map/FSMapMarkerClusterGroup.vue +67 -0
  24. package/components/map/FSMapOverlay.vue +69 -83
  25. package/components/map/FSMapPolygon.vue +81 -0
  26. package/components/map/FSMapTileLayer.vue +50 -0
  27. package/components/map/keys.ts +4 -0
  28. package/composables/useAddress.ts +2 -2
  29. package/package.json +4 -4
  30. package/styles/components/fs_card.scss +0 -1
  31. package/styles/components/fs_clickable.scss +1 -1
  32. package/styles/components/fs_fade_out.scss +2 -1
  33. package/styles/components/fs_map.scss +36 -30
  34. package/styles/components/fs_tabs.scss +4 -0
  35. package/styles/components/index.scss +0 -1
  36. package/utils/leafletMarkers.ts +8 -2
  37. package/components/autocompletes/FSAutocompleteTag.vue +0 -138
  38. package/components/map/FSMapEditPointAddressOverlay.vue +0 -164
  39. package/styles/components/fs_map_overlay.scss +0 -38
@@ -0,0 +1,100 @@
1
+ <template>
2
+ <FSAutocompleteField
3
+ :placeholder="innerPlaceholder"
4
+ :items="innerItems"
5
+ :showSearch="true"
6
+ :multiple="true"
7
+ :modelValue="modelValue?.map(m => m.id)"
8
+ @update:modelValue="onUpdateModelValue"
9
+ @add:item="onAddItem"
10
+ @keydown="onKeydown"
11
+ v-bind="$attrs"
12
+ >
13
+ <template
14
+ v-for="(_, name) in $slots"
15
+ v-slot:[name]="slotData"
16
+ >
17
+ <slot
18
+ :name="name"
19
+ v-bind="slotData"
20
+ />
21
+ </template>
22
+ </FSAutocompleteField>
23
+ </template>
24
+
25
+ <script lang="ts">
26
+ import { computed, defineComponent, type PropType, ref, watch } from "vue";
27
+
28
+ import { useTranslations as useTranslationsProvider, uuidv4 } from "@dative-gpi/bones-ui";
29
+
30
+ import FSAutocompleteField from "../fields/FSAutocompleteField.vue";
31
+
32
+ export default defineComponent({
33
+ components: {
34
+ FSAutocompleteField
35
+ },
36
+ props:{
37
+ placeholder: {
38
+ type: String as PropType<string | null>,
39
+ required: false,
40
+ default: null
41
+ },
42
+ items: {
43
+ type: Array as PropType<{id: string, label: string, isCustom: boolean}[]>,
44
+ required: false,
45
+ default: () => []
46
+ },
47
+ modelValue: {
48
+ type: Array as PropType<{id: string, label: string, isCustom: boolean}[] | null>,
49
+ required: false,
50
+ default: () => []
51
+ }
52
+ },
53
+ emits: ["update:modelValue"],
54
+ setup(props, {emit}) {
55
+ const { $tr } = useTranslationsProvider();
56
+
57
+ const tagValues = ref<{id : string, label : string, isCustom : boolean}[]>([]);
58
+
59
+ const innerItems = computed(() => props.items.concat(tagValues.value));
60
+
61
+ const innerPlaceholder = computed((): string | null => {
62
+ if (!props.modelValue || props.modelValue.length === 0) {
63
+ return null;
64
+ }
65
+ return props.placeholder ?? $tr("ui.autocomplete-tag.items-selected", "{0} item(s) selected", props.modelValue?.length ?? 0);
66
+ });
67
+
68
+ const onUpdateModelValue = (value: string[] | null): void => {
69
+ emit("update:modelValue", value?.map((v) => innerItems.value.find((i) => i.id === v)));
70
+ };
71
+
72
+ const onAddItem = (value: string): void => {
73
+ emit("update:modelValue", [
74
+ ...props.modelValue ?? [],
75
+ { id: uuidv4(), label: value, isCustom: true }
76
+ ]);
77
+ };
78
+
79
+ const onKeydown = (event: KeyboardEvent): void => {
80
+ if (event.key === "Backspace") {
81
+ emit("update:modelValue", [...props.modelValue ?? []]);
82
+ }
83
+ };
84
+
85
+ watch(() => props.modelValue, (newValue) => {
86
+ if (newValue) {
87
+ tagValues.value = props.modelValue?.filter(m=>m.isCustom) ?? [];
88
+ }
89
+ }, {immediate: true});
90
+
91
+ return {
92
+ innerPlaceholder,
93
+ innerItems,
94
+ onUpdateModelValue,
95
+ onAddItem,
96
+ onKeydown
97
+ };
98
+ }
99
+ });
100
+ </script>
@@ -61,7 +61,7 @@
61
61
  #body
62
62
  >
63
63
  <FSFadeOut
64
- :height="height"
64
+ :maxHeight="maxHeight"
65
65
  >
66
66
  <FSCol
67
67
  v-if="$props.multiple"
@@ -377,7 +377,7 @@ export default defineComponent({
377
377
 
378
378
  const messages = computed((): string[] => props.messages ?? getMessages(props.modelValue, props.rules));
379
379
 
380
- const height = computed(() => {
380
+ const maxHeight = computed(() => {
381
381
  const other = 8 + 8; // Paddings
382
382
  return `calc(100vh - 40px - ${other}px)`;
383
383
  });
@@ -477,9 +477,9 @@ export default defineComponent({
477
477
  validateOn,
478
478
  ColorEnum,
479
479
  listStyle,
480
+ maxHeight,
480
481
  messages,
481
482
  dialog,
482
- height,
483
483
  style,
484
484
  openMobileOverlay,
485
485
  onCheckboxChange,
@@ -52,13 +52,17 @@
52
52
  <template
53
53
  #clear
54
54
  >
55
- <FSButton
56
- v-if="$props.clearable && $props.editable && !!$props.modelValue"
57
- icon="mdi-close"
58
- variant="icon"
59
- :color="ColorEnum.Dark"
60
- @click="$emit('update:modelValue', null)"
61
- />
55
+ <slot
56
+ name="clear"
57
+ >
58
+ <FSButton
59
+ v-if="$props.clearable && $props.editable && !!$props.modelValue"
60
+ icon="mdi-close"
61
+ variant="icon"
62
+ :color="ColorEnum.Dark"
63
+ @click="$emit('update:modelValue', null)"
64
+ />
65
+ </slot>
62
66
  </template>
63
67
  </v-text-field>
64
68
  </FSBaseField>
@@ -57,7 +57,7 @@
57
57
  #body
58
58
  >
59
59
  <FSFadeOut
60
- :height="height"
60
+ :maxHeight="maxHeight"
61
61
  >
62
62
  <v-treeview
63
63
  :itemTitle="$props.itemTitle"
@@ -381,7 +381,7 @@ export default defineComponent({
381
381
 
382
382
  const messages = computed((): string[] => props.messages ?? getMessages(props.modelValue, props.rules));
383
383
 
384
- const height = computed(() => {
384
+ const maxHeight = computed(() => {
385
385
  const other = 8 + 8; // Paddings
386
386
  return `calc(100vh - 40px - ${other}px)`;
387
387
  });
@@ -501,11 +501,11 @@ export default defineComponent({
501
501
  innerValue,
502
502
  fieldSlots,
503
503
  validateOn,
504
+ maxHeight,
504
505
  menuSlots,
505
506
  treeItems,
506
507
  messages,
507
508
  dialog,
508
- height,
509
509
  style,
510
510
  menu,
511
511
  openMobileOverlay,
@@ -80,24 +80,31 @@ export default defineComponent({
80
80
 
81
81
  const selectedConfiguration = ref("custom");
82
82
 
83
- const days = computed(() => {
84
- return +props.modelValue[2].replace("*/", "");
83
+ const days = computed((): number => {
84
+ if (isNaN(parseInt(props.modelValue[2].replace("*/", "")))) {
85
+ return 0
86
+ }
87
+ return parseInt(props.modelValue[2].replace("*/", ""));
85
88
  });
86
- const time = computed(() => {
87
- return (+props.modelValue[1] * 60 + +props.modelValue[0]) * 1000 * 60;
89
+
90
+ const time = computed((): number => {
91
+ if (isNaN(parseInt(props.modelValue[0])) || isNaN(parseInt(props.modelValue[1]))) {
92
+ return 0;
93
+ }
94
+ return ((parseInt(props.modelValue[0])) + (parseInt(props.modelValue[1]) * 60)) * 60 * 1000;
88
95
  });
89
96
 
90
- const onUpdateDays = (value: number) => {
97
+ const onUpdateDays = (value: number): void => {
91
98
  const hours = Math.floor(value / (60 * 60 * 1000));
92
99
  const minutes = Math.floor(value / (60 * 1000) % 60);
93
100
  emit("update:modelValue", [`${minutes}`, `${hours}`, `*/${value}`, "*", "*"]);
94
- }
101
+ };
95
102
 
96
- const onUpdateHours = (value: number) => {
103
+ const onUpdateHours = (value: number): void => {
97
104
  const hours = Math.floor(value / (60 * 60 * 1000));
98
105
  const minutes = Math.floor(value / (60 * 1000) % 60);
99
106
  emit("update:modelValue", [`${minutes}`, `${hours}`, `*/${days.value}`, "*", "*"]);
100
- }
107
+ };
101
108
 
102
109
  return {
103
110
  availableConfigurations,
@@ -107,7 +114,7 @@ export default defineComponent({
107
114
  time,
108
115
  onUpdateHours,
109
116
  onUpdateDays
110
- }
117
+ };
111
118
  }
112
- })
119
+ });
113
120
  </script>
@@ -134,39 +134,53 @@ export default defineComponent({
134
134
 
135
135
  const selectedConfiguration = ref(props.modelValue[4] !== "*" ? "customDayWeek" : "customDayNumber");
136
136
 
137
- const dayNumber = computed(() =>
138
- props.modelValue[4] !== "*" ? 1 : +props.modelValue[2]
139
- );
137
+ const dayNumber = computed((): number => {
138
+ if (props.modelValue[4] !== "*" || isNaN(parseInt(props.modelValue[2]))) {
139
+ return 1;
140
+ }
141
+ return parseInt(props.modelValue[2]);
142
+ });
140
143
 
141
- const dayWeek = computed(() =>
142
- props.modelValue[4] === "*" ? 0 : +props.modelValue[4] - 1
143
- );
144
+ const dayWeek = computed((): number => {
145
+ if (props.modelValue[4] !== "*" || isNaN(parseInt(props.modelValue[4]))) {
146
+ return 0;
147
+ }
148
+ return parseInt(props.modelValue[4]) - 1;
149
+ });
144
150
 
145
- const dayWeekNumber = computed(() =>
146
- props.modelValue[2].includes("-") ? Math.floor(+props.modelValue[2].split("-")[1] / 7) : 1
147
- );
151
+ const dayWeekNumber = computed((): number => {
152
+ if (!props.modelValue[2].includes("-") || isNaN(parseInt(props.modelValue[2].split("-")[1]))) {
153
+ return 1;
154
+ }
155
+ return Math.floor(parseInt(props.modelValue[2].split("-")[1]) / 7);
156
+ });
148
157
 
149
- const time = computed(() => (+props.modelValue[1] * 60 + +props.modelValue[0]) * 1000 * 60);
158
+ const time = computed((): number => {
159
+ if (isNaN(parseInt(props.modelValue[0])) || isNaN(parseInt(props.modelValue[1]))) {
160
+ return 0;
161
+ }
162
+ return ((parseInt(props.modelValue[0])) + (parseInt(props.modelValue[1]) * 60)) * 60 * 1000;
163
+ });
150
164
 
151
- const onUpdateDayNumber = (value: number) => {
165
+ const onUpdateDayNumber = (value: number): void => {
152
166
  const hours = Math.floor(value / (60 * 60 * 1000));
153
167
  const minutes = Math.floor(value / (60 * 1000) % 60);
154
168
  emit("update:modelValue", [`${minutes}`, `${hours}`, `${value}`, `*`, `*`]);
155
169
  };
156
170
 
157
- const onUpdateDayWeekNumber = (value: number) => {
171
+ const onUpdateDayWeekNumber = (value: number): void => {
158
172
  const hours = Math.floor(value / (60 * 60 * 1000));
159
173
  const minutes = Math.floor(value / (60 * 1000) % 60);
160
174
  emit("update:modelValue", [`${minutes}`, `${hours}`, `${(value - 1) * 7 + 1}-${value * 7}`, `*`, `${dayWeek.value + 1}`]);
161
175
  };
162
176
 
163
- const onUpdateDayWeek = (value: number) => {
177
+ const onUpdateDayWeek = (value: number): void => {
164
178
  const hours = Math.floor(value / (60 * 60 * 1000));
165
179
  const minutes = Math.floor(value / (60 * 1000) % 60);
166
180
  emit("update:modelValue", [`${minutes}`, `${hours}`, `${(dayWeekNumber.value - 1) * 7 + 1}-${dayWeekNumber.value * 7}`, `*`, `${value + 1}`]);
167
181
  };
168
182
 
169
- const onUpdateHours = (value: number) => {
183
+ const onUpdateHours = (value: number): void => {
170
184
  const hours = Math.floor(value / (60 * 60 * 1000));
171
185
  const minutes = Math.floor(value / (60 * 1000) % 60);
172
186
  if (selectedConfiguration.value === "customDayNumber") {
@@ -177,7 +191,7 @@ export default defineComponent({
177
191
  }
178
192
  };
179
193
 
180
- watch(() => selectedConfiguration.value, (value: string) => {
194
+ watch(() => selectedConfiguration.value, (value: string): void => {
181
195
  const hours = Math.floor(time.value / (60 * 60 * 1000));
182
196
  const minutes = Math.floor(time.value / (60 * 1000) % 60);
183
197
  if(value === "customDayNumber") {
@@ -79,22 +79,28 @@ export default defineComponent({
79
79
  ];
80
80
 
81
81
  const selectedConfiguration = ref("custom");
82
-
83
- const day = computed(() => {
84
- return +props.modelValue[4] - 1;
82
+
83
+ const day = computed((): number => {
84
+ if (isNaN(parseInt(props.modelValue[4]))) {
85
+ return 0;
86
+ }
87
+ return parseInt(props.modelValue[4]) - 1;
85
88
  });
86
89
 
87
- const time = computed(() => {
88
- return (+props.modelValue[1] * 60 + +props.modelValue[0]) * 1000 * 60;
90
+ const time = computed((): number => {
91
+ if (isNaN(parseInt(props.modelValue[0])) || isNaN(parseInt(props.modelValue[1]))) {
92
+ return 0;
93
+ }
94
+ return ((parseInt(props.modelValue[0])) + (parseInt(props.modelValue[1]) * 60)) * 60 * 1000;
89
95
  });
90
96
 
91
- const onUpdateDay = (value: number) => {
97
+ const onUpdateDay = (value: number): void => {
92
98
  const hours = Math.floor(value / (60 * 60 * 1000));
93
99
  const minutes = Math.floor(value / (60 * 1000) % 60);
94
100
  emit("update:modelValue", [`${minutes}`, `${hours}`, `*`, `*`, `${value + 1}`]);
95
101
  };
96
102
 
97
- const onUpdateHours = (value: number) => {
103
+ const onUpdateHours = (value: number): void => {
98
104
  const hours = Math.floor(value / (60 * 60 * 1000));
99
105
  const minutes = Math.floor(value / (60 * 1000) % 60);
100
106
  emit("update:modelValue", [`${minutes}`, `${hours}`, `*`, `*`, `${day.value + 1}`]);
@@ -88,32 +88,41 @@ export default defineComponent({
88
88
  ];
89
89
 
90
90
  const selectedConfiguration = ref("custom");
91
-
92
- const day = computed(() => {
93
- return +props.modelValue[2];
91
+
92
+ const day = computed((): number => {
93
+ if (isNaN(parseInt(props.modelValue[2]))) {
94
+ return 0;
95
+ }
96
+ return parseInt(props.modelValue[2]);
94
97
  });
95
98
 
96
- const month = computed(() => {
97
- return +props.modelValue[3] - 1;
99
+ const month = computed((): number => {
100
+ if (isNaN(parseInt(props.modelValue[3]))) {
101
+ return 0;
102
+ }
103
+ return parseInt(props.modelValue[3]) - 1;
98
104
  });
99
105
 
100
- const time = computed(() => {
101
- return (+props.modelValue[1] * 60 + +props.modelValue[0]) * 1000 * 60;
106
+ const time = computed((): number => {
107
+ if (isNaN(parseInt(props.modelValue[0])) || isNaN(parseInt(props.modelValue[1]))) {
108
+ return 0;
109
+ }
110
+ return ((parseInt(props.modelValue[0])) + (parseInt(props.modelValue[1]) * 60)) * 60 * 1000;
102
111
  });
103
112
 
104
- const onUpdateDay = (value: number) => {
113
+ const onUpdateDay = (value: number): void => {
105
114
  const hours = Math.floor(value / (60 * 60 * 1000));
106
115
  const minutes = Math.floor(value / (60 * 1000) % 60);
107
116
  emit("update:modelValue", [`${minutes}`, `${hours}`, `${value}`, `${month.value + 1}`, "*"]);
108
117
  };
109
118
 
110
- const onUpdateHours = (value: number) => {
119
+ const onUpdateHours = (value: number): void => {
111
120
  const hours = Math.floor(value / (60 * 60 * 1000));
112
121
  const minutes = Math.floor(value / (60 * 1000) % 60);
113
122
  emit("update:modelValue", [`${minutes}`, `${hours}`, `${day.value}`, `${month.value + 1}`, "*"]);
114
123
  };
115
124
 
116
- const onUpdateMonth = (value: number) => {
125
+ const onUpdateMonth = (value: number): void => {
117
126
  const hours = Math.floor(value / (60 * 60 * 1000));
118
127
  const minutes = Math.floor(value / (60 * 1000) % 60);
119
128
  emit("update:modelValue", [`${minutes}`, `${hours}`, `${day.value}`, `${value + 1}`, "*"]);
@@ -7,10 +7,10 @@
7
7
  #activator="{ props }"
8
8
  >
9
9
  <FSChip
10
+ prependIcon="mdi-filter-variant"
10
11
  class="fs-filter-button"
11
12
  variant="standard"
12
- prependIcon="mdi-filter-variant"
13
- :height="[30, 24]"
13
+ :height="['30px', '24px']"
14
14
  :color="ColorEnum.Dark"
15
15
  :editable="true"
16
16
  :label="label"
@@ -23,12 +23,12 @@
23
23
  :border="false"
24
24
  >
25
25
  <FSCol
26
- gap="12px"
27
26
  padding="16px 0 24px 16px"
27
+ gap="12px"
28
28
  >
29
29
  <FSCol
30
- gap="12px"
31
30
  padding="0 16px 0 0"
31
+ gap="12px"
32
32
  >
33
33
  <FSSpan
34
34
  font="text-overline"
@@ -37,11 +37,11 @@
37
37
  </FSSpan>
38
38
  <FSChip
39
39
  class="fs-filter-button-chip"
40
- :height="[30, 24]"
41
- :editable="true"
42
- :color="$props.color"
43
- :variant="getAllVariant()"
44
40
  :label="$tr('ui.data-table.all-values', 'All values')"
41
+ :height="['30px', '24px']"
42
+ :variant="getAllVariant()"
43
+ :color="$props.color"
44
+ :editable="true"
45
45
  @click="onToggleAll"
46
46
  />
47
47
  <FSDivider
@@ -55,7 +55,7 @@
55
55
  </FSCol>
56
56
  <FSFadeOut
57
57
  padding="0 8px 0 0"
58
- height="360px"
58
+ maxHeight="360px"
59
59
  >
60
60
  <FSCol
61
61
  gap="6px"
@@ -63,12 +63,12 @@
63
63
  <FSChip
64
64
  v-for="(filter, index) in searchedFilters"
65
65
  class="fs-filter-button-chip"
66
- :height="[30, 24]"
67
- :key="index"
68
- :editable="true"
69
- :label="filter.text"
70
- :color="$props.color"
71
66
  :variant="getVariant(filter)"
67
+ :height="['30px', '24px']"
68
+ :color="$props.color"
69
+ :label="filter.text"
70
+ :editable="true"
71
+ :key="index"
72
72
  @click="() => onToggle(filter)"
73
73
  >
74
74
  <template
@@ -89,8 +89,7 @@
89
89
  <script lang="ts">
90
90
  import { computed, defineComponent, type PropType, ref } from "vue";
91
91
 
92
- import type { ColorBase, FSDataTableColumn, FSDataTableFilter } from "@dative-gpi/foundation-shared-components/models";
93
- import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
92
+ import { type ColorBase, ColorEnum, type FSDataTableColumn, type FSDataTableFilter } from "@dative-gpi/foundation-shared-components/models";
94
93
  import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
95
94
 
96
95
  import FSSearchField from "../fields/FSSearchField.vue";
@@ -195,15 +194,15 @@ export default defineComponent({
195
194
 
196
195
  return {
197
196
  searchedFilters,
197
+ singlePick,
198
198
  ColorEnum,
199
199
  expanded,
200
200
  search,
201
201
  label,
202
- singlePick,
203
- getVariant,
204
202
  getAllVariant,
205
- onToggle,
206
- onToggleAll
203
+ onToggleAll,
204
+ getVariant,
205
+ onToggle
207
206
  };
208
207
  }
209
208
  });
@@ -21,12 +21,12 @@
21
21
  :border="false"
22
22
  >
23
23
  <FSCol
24
- gap="12px"
25
24
  padding="16px 0px 24px 16px"
25
+ gap="12px"
26
26
  >
27
27
  <FSCol
28
- gap="12px"
29
28
  padding="0 16px 0 0"
29
+ gap="12px"
30
30
  >
31
31
  <FSSpan
32
32
  font="text-overline"
@@ -36,7 +36,7 @@
36
36
  </FSCol>
37
37
  <FSFadeOut
38
38
  padding="0 8px 0 0"
39
- height="360px"
39
+ maxHeight="360px"
40
40
  >
41
41
  <FSCol
42
42
  gap="6px"
@@ -44,12 +44,12 @@
44
44
  <FSChip
45
45
  v-for="(header, index) in $props.headers"
46
46
  class="fs-hidden-button-chip"
47
- :height="[30, 24]"
48
- :key="index"
49
- :editable="true"
50
- :label="header.text"
51
- :color="$props.color"
52
47
  variant="full"
48
+ :height="['30px', '24px']"
49
+ :color="$props.color"
50
+ :label="header.text"
51
+ :editable="true"
52
+ :key="index"
53
53
  @click="$emit('update:show', header)"
54
54
  >
55
55
  </FSChip>
@@ -61,11 +61,9 @@
61
61
  </template>
62
62
 
63
63
  <script lang="ts">
64
- import type { PropType} from "vue";
65
- import { defineComponent, ref } from "vue";
64
+ import { defineComponent, type PropType, ref } from "vue";
66
65
 
67
- import type { ColorBase, FSDataTableColumn } from "@dative-gpi/foundation-shared-components/models";
68
- import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
66
+ import { type ColorBase, ColorEnum, type FSDataTableColumn } from "@dative-gpi/foundation-shared-components/models";
69
67
 
70
68
  import FSCard from "../FSCard.vue";
71
69
  import FSChip from "../FSChip.vue";