@dative-gpi/foundation-shared-components 0.0.71 → 0.0.73

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.
@@ -84,6 +84,11 @@ export default defineComponent({
84
84
  required: false,
85
85
  default: "4px"
86
86
  },
87
+ borderStyle: {
88
+ type: String as PropType<"solid" | "dashed" | "dotted" | "double" | "groove" | "ridge" | "inset" | "outset" | "none">,
89
+ required: false,
90
+ default: "solid"
91
+ },
87
92
  elevation: {
88
93
  type: Boolean,
89
94
  required: false,
@@ -108,6 +113,7 @@ export default defineComponent({
108
113
  switch (props.variant) {
109
114
  case "standard": return {
110
115
  "--fs-card-border-size" : props.border ? "1px" : "0",
116
+ "--fs-card-border-style" : props.borderStyle,
111
117
  "--fs-card-border-radius" : sizeToVar(props.borderRadius),
112
118
  "--fs-card-padding" : sizeToVar(props.padding),
113
119
  "--fs-card-height" : sizeToVar(props.height),
@@ -118,6 +124,7 @@ export default defineComponent({
118
124
  }
119
125
  case "background": return {
120
126
  "--fs-card-border-size" : props.border ? "1px" : "0",
127
+ "--fs-card-border-style" : props.borderStyle,
121
128
  "--fs-card-border-radius" : sizeToVar(props.borderRadius),
122
129
  "--fs-card-padding" : sizeToVar(props.padding),
123
130
  "--fs-card-height" : sizeToVar(props.height),
@@ -128,6 +135,7 @@ export default defineComponent({
128
135
  }
129
136
  case "gradient": return {
130
137
  "--fs-card-border-size" : props.border ? "1px" : "0",
138
+ "--fs-card-border-style" : props.borderStyle,
131
139
  "--fs-card-border-radius" : sizeToVar(props.borderRadius),
132
140
  "--fs-card-padding" : sizeToVar(props.padding),
133
141
  "--fs-card-height" : sizeToVar(props.height),
@@ -8,7 +8,7 @@
8
8
  :rules="$props.rules"
9
9
  :validateOn="validateOn"
10
10
  :modelValue="$props.modelValue"
11
- @click.prevent
11
+ @click.prevent.stop="onToggle"
12
12
  @blur="blurred = true"
13
13
  v-bind="$attrs"
14
14
  >
@@ -17,7 +17,6 @@
17
17
  align="center-left"
18
18
  width="hug"
19
19
  :style="style"
20
- @click.stop="onToggle"
21
20
  >
22
21
  <FSIcon
23
22
  class="fs-checkbox"
@@ -3,6 +3,10 @@
3
3
  v-if="$props.href"
4
4
  :href="$props.href"
5
5
  :style="style"
6
+ @mouseover="hover = true"
7
+ @mouseleave="hover = false"
8
+ @mousedown="active = true"
9
+ @mouseup="active = false"
6
10
  >
7
11
  <FSCard
8
12
  :height="$props.height"
@@ -12,7 +16,7 @@
12
16
  v-bind="$attrs"
13
17
  >
14
18
  <template v-for="(_, name) in $slots" v-slot:[name]="slotData">
15
- <slot :name="name" v-bind="slotData" />
19
+ <slot :name="name" v-bind="{ ...slotData, contentVariant }" />
16
20
  </template>
17
21
  </FSCard>
18
22
  <template v-if="$props.load">
@@ -29,6 +33,10 @@
29
33
  v-else-if="$props.to"
30
34
  :style="style"
31
35
  :to="$props.to"
36
+ @mouseover="hover = true"
37
+ @mouseleave="hover = false"
38
+ @mousedown="active = true"
39
+ @mouseup="active = false"
32
40
  >
33
41
  <FSCard
34
42
  :height="$props.height"
@@ -38,7 +46,7 @@
38
46
  v-bind="$attrs"
39
47
  >
40
48
  <template v-for="(_, name) in $slots" v-slot:[name]="slotData">
41
- <slot :name="name" v-bind="slotData" />
49
+ <slot :name="name" v-bind="{ ...slotData, contentVariant }" />
42
50
  </template>
43
51
  </FSCard>
44
52
  <template v-if="$props.load">
@@ -56,6 +64,10 @@
56
64
  :type="$props.type"
57
65
  :style="style"
58
66
  @click.stop="onClick"
67
+ @mouseover="hover = true"
68
+ @mouseleave="hover = false"
69
+ @mousedown="active = true"
70
+ @mouseup="active = false"
59
71
  >
60
72
  <FSCard
61
73
  :height="$props.height"
@@ -65,7 +77,7 @@
65
77
  v-bind="$attrs"
66
78
  >
67
79
  <template v-for="(_, name) in $slots" v-slot:[name]="slotData">
68
- <slot :name="name" v-bind="slotData" />
80
+ <slot :name="name" v-bind="{ ...slotData, contentVariant }" />
69
81
  </template>
70
82
  </FSCard>
71
83
  <template v-if="$props.load">
@@ -81,7 +93,7 @@
81
93
  </template>
82
94
 
83
95
  <script lang="ts">
84
- import { computed, defineComponent, PropType } from "vue";
96
+ import { computed, defineComponent, PropType, ref } from "vue";
85
97
  import { RouteLocation } from "vue-router";
86
98
 
87
99
  import { ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
@@ -141,6 +153,11 @@ export default defineComponent({
141
153
  required: false,
142
154
  default: "4px"
143
155
  },
156
+ borderStyle: {
157
+ type: String as PropType<"solid" | "dashed" | "dotted" | "double" | "groove" | "ridge" | "inset" | "outset" | "none">,
158
+ required: false,
159
+ default: "solid"
160
+ },
144
161
  load: {
145
162
  type: Boolean,
146
163
  required: false,
@@ -161,10 +178,14 @@ export default defineComponent({
161
178
  const lights = getColors(ColorEnum.Light);
162
179
  const darks = getColors(ColorEnum.Dark);
163
180
 
181
+ const hover = ref(false);
182
+ const active = ref(false);
183
+
164
184
  const style = computed((): { [key: string] : string | undefined } => {
165
185
  if (!props.editable) {
166
186
  return {
167
187
  "--fs-clickable-border-size" : props.border ? "1px" : "0",
188
+ "--fs-clickable-border-style" : props.borderStyle,
168
189
  "--fs-clickable-border-radius" : sizeToVar(props.borderRadius),
169
190
  "--fs-clickable-background-color": lights.light,
170
191
  "--fs-clickable-border-color" : lights.dark,
@@ -176,6 +197,7 @@ export default defineComponent({
176
197
  switch (props.variant) {
177
198
  case "standard": return {
178
199
  "--fs-clickable-border-size" : props.border ? "1px" : "0",
200
+ "--fs-clickable-border-style" : props.borderStyle,
179
201
  "--fs-clickable-border-radius" : sizeToVar(props.borderRadius),
180
202
  "--fs-clickable-background-color" : colors.value.light,
181
203
  "--fs-clickable-border-color" : colors.value.lightContrast,
@@ -191,6 +213,7 @@ export default defineComponent({
191
213
  };
192
214
  case "background": return {
193
215
  "--fs-clickable-border-size" : props.border ? "1px" : "0",
216
+ "--fs-clickable-border-style" : props.borderStyle,
194
217
  "--fs-clickable-border-radius" : sizeToVar(props.borderRadius),
195
218
  "--fs-clickable-background-color" : backgrounds.base,
196
219
  "--fs-clickable-border-color" : lights.dark,
@@ -206,6 +229,7 @@ export default defineComponent({
206
229
  };
207
230
  case "full": return {
208
231
  "--fs-clickable-border-size" : props.border ? "1px" : "0",
232
+ "--fs-clickable-border-style" : props.borderStyle,
209
233
  "--fs-clickable-border-radius" : sizeToVar(props.borderRadius),
210
234
  "--fs-clickable-background-color" : colors.value.base,
211
235
  "--fs-clickable-border-color" : colors.value.base,
@@ -222,6 +246,20 @@ export default defineComponent({
222
246
  }
223
247
  });
224
248
 
249
+ const contentVariant = computed((): "base" | "baseContrast" | "light" | "lightContrast" | "dark" | "darkContrast" => {
250
+ if (active.value) {
251
+ return "darkContrast";
252
+ }
253
+ if (hover.value) {
254
+ return "baseContrast";
255
+ }
256
+ switch (props.variant) {
257
+ case "standard" : return "lightContrast";
258
+ case "background": return "base";
259
+ case "full" : return "baseContrast";
260
+ }
261
+ });
262
+
225
263
  const classes = computed((): string[] => {
226
264
  const classNames: string[] = ["fs-clickable"];
227
265
  if (!props.editable) {
@@ -247,8 +285,11 @@ export default defineComponent({
247
285
  };
248
286
 
249
287
  return {
288
+ contentVariant,
250
289
  loadColor,
251
290
  classes,
291
+ active,
292
+ hover,
252
293
  style,
253
294
  onClick
254
295
  };
@@ -1,21 +1,16 @@
1
1
  <template>
2
2
  <FSRow
3
- width="fill"
4
3
  gap="24px"
5
4
  >
6
- <FSCard
5
+ <FSImage
7
6
  class="fs-edit-image"
8
- :borderRadius="$props.borderRadius"
9
- :padding="$props.padding"
10
- >
11
- <FSImage
12
- :borderRadius="$props.borderRadius"
13
- :aspectRatio="$props.aspectRatio"
14
- :height="$props.height"
15
- :imageB64="realSource"
16
- :width="$props.width"
17
- />
18
- </FSCard>
7
+ :aspectRatio="$props.aspectRatio"
8
+ :imageId="$props.imageId"
9
+ :height="$props.height"
10
+ :imageB64="realSource"
11
+ :width="$props.width"
12
+ :style="style"
13
+ />
19
14
  <FSCol
20
15
  height="fill"
21
16
  align="bottom-left"
@@ -43,14 +38,16 @@
43
38
  <script lang="ts">
44
39
  import { computed, defineComponent, PropType, ref } from "vue";
45
40
 
41
+ import { useColors } from "@dative-gpi/foundation-shared-components/composables";
46
42
  import { useFiles } from "@dative-gpi/foundation-shared-services/composables";
47
- import { FileImage } from "@dative-gpi/foundation-shared-components/models";
43
+ import { ColorEnum, FileImage } from "@dative-gpi/foundation-shared-components/models";
48
44
 
49
45
  import FSButtonRemoveIcon from "./buttons/FSButtonRemoveIcon.vue";
50
46
  import FSButtonFileIcon from "./buttons/FSButtonFileIcon.vue";
51
47
  import FSImage from "./FSImage.vue";
52
- import FSCard from "./FSCard.vue";
53
48
  import FSText from "./FSText.vue";
49
+ import FSCol from "./FSCol.vue";
50
+ import FSRow from "./FSRow.vue";
54
51
 
55
52
  export default defineComponent({
56
53
  name: "FSEditImage",
@@ -58,8 +55,9 @@ export default defineComponent({
58
55
  FSButtonRemoveIcon,
59
56
  FSButtonFileIcon,
60
57
  FSImage,
61
- FSCard,
62
- FSText
58
+ FSText,
59
+ FSCol,
60
+ FSRow
63
61
  },
64
62
  props: {
65
63
  height: {
@@ -72,12 +70,7 @@ export default defineComponent({
72
70
  required: false,
73
71
  default: null
74
72
  },
75
- padding: {
76
- type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
77
- required: false,
78
- default: "8px"
79
- },
80
- modelValue: {
73
+ imageId: {
81
74
  type: String as PropType<string | null>,
82
75
  required: false,
83
76
  default: null
@@ -87,18 +80,27 @@ export default defineComponent({
87
80
  required: false,
88
81
  default: null
89
82
  },
90
- borderRadius: {
91
- type: [String, Number],
83
+ modelValue: {
84
+ type: String as PropType<string | null>,
92
85
  required: false,
93
- default: "4px"
86
+ default: null
94
87
  }
95
88
  },
96
89
  emits: ["update:modelValue"],
97
90
  setup(props, { emit }) {
91
+ const { getColors } = useColors();
98
92
  const { readFile } = useFiles();
99
93
 
94
+ const lights = getColors(ColorEnum.Light);
95
+
100
96
  const fileSelected = ref<FileImage>({ fileName: "", fileContent: null });
101
97
 
98
+ const style = computed((): { [key: string] : string | undefined } => {
99
+ return {
100
+ "--fs-edit-image-border-color": lights.dark
101
+ };
102
+ });
103
+
102
104
  const realSource = computed(() => {
103
105
  if (fileSelected.value && fileSelected.value.fileName) {
104
106
  return fileSelected.value.fileContent as string;
@@ -122,6 +124,7 @@ export default defineComponent({
122
124
  return {
123
125
  fileSelected,
124
126
  realSource,
127
+ style,
125
128
  onUpload,
126
129
  onRemove
127
130
  };
@@ -30,7 +30,7 @@ export default defineComponent({
30
30
  default: null
31
31
  },
32
32
  variant: {
33
- type: String as PropType<"base" | "light" | "dark">,
33
+ type: String as PropType<"base" | "baseContrast" | "light" | "lightContrast" | "dark" | "darkContrast">,
34
34
  required: false,
35
35
  default: "base"
36
36
  }
@@ -41,7 +41,7 @@ export default defineComponent({
41
41
 
42
42
  const color = computed((): string | null => {
43
43
  if (props.color) {
44
- return getColors(props.color)[props.variant];
44
+ return getColors(props.color)[props.variant]!;
45
45
  }
46
46
  return null;
47
47
  });
@@ -1,10 +1,10 @@
1
1
  <template>
2
2
  <FSCard
3
- :variant="$props.backgroundColor == null ? 'background' : 'gradient'"
4
- :border="$props.backgroundColor == null"
5
3
  :color="$props.backgroundColor"
6
4
  :height="$props.size"
7
5
  :width="$props.size"
6
+ :variant="variant"
7
+ :border="border"
8
8
  >
9
9
  <FSRow
10
10
  align="center-center"
@@ -21,7 +21,7 @@
21
21
  </template>
22
22
 
23
23
  <script lang="ts">
24
- import { defineComponent, PropType } from "vue";
24
+ import { computed, defineComponent, PropType } from "vue";
25
25
 
26
26
  import { ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
27
27
 
@@ -55,6 +55,26 @@ export default defineComponent({
55
55
  required: false,
56
56
  default: ColorEnum.Dark
57
57
  }
58
+ },
59
+ setup(props) {
60
+ const variant = computed((): "background" | "gradient" => {
61
+ switch (props.backgroundColor) {
62
+ case ColorEnum.Background: return "background";
63
+ default: return "gradient";
64
+ }
65
+ });
66
+
67
+ const border = computed((): boolean => {
68
+ switch (props.backgroundColor) {
69
+ case ColorEnum.Background: return true;
70
+ default: return false;
71
+ }
72
+ });
73
+
74
+ return {
75
+ variant,
76
+ border
77
+ };
58
78
  }
59
79
  });
60
80
  </script>
@@ -145,14 +145,14 @@ export default defineComponent({
145
145
  });
146
146
 
147
147
  const source = computed((): string | undefined => {
148
- if (props.imageId) {
149
- return IMAGE_RAW_URL(props.imageId);
150
- }
151
- else if (props.imageB64) {
148
+ if (props.imageB64) {
152
149
  if (imageType.value && imageData.value) {
153
150
  return `${imageType.value},${imageData.value}`;
154
151
  }
155
152
  }
153
+ else if (props.imageId) {
154
+ return IMAGE_RAW_URL(props.imageId);
155
+ }
156
156
  });
157
157
 
158
158
  const imageData = computed((): string | null => {
@@ -45,7 +45,7 @@ export default defineComponent({
45
45
  default: ColorEnum.Dark
46
46
  },
47
47
  variant: {
48
- type: String as PropType<"base" | "light" | "dark">,
48
+ type: String as PropType<"base" | "baseContrast" | "light" | "lightContrast" | "dark" | "darkContrast">,
49
49
  required: false,
50
50
  default: "base"
51
51
  }
@@ -71,20 +71,10 @@ export default defineComponent({
71
71
  });
72
72
 
73
73
  const style = computed((): { [key: string] : string | undefined } => {
74
- switch (props.variant) {
75
- case "base": return {
76
- "--fs-span-line-clamp": props.lineClamp.toString(),
77
- "--fs-text-color" : colors.value.base
78
- };
79
- case "light": return {
80
- "--fs-span-line-clamp": props.lineClamp.toString(),
81
- "--fs-text-color" : colors.value.light
82
- };
83
- case "dark": return {
84
- "--fs-span-line-clamp": props.lineClamp.toString(),
85
- "--fs-text-color" : colors.value.dark
86
- };
87
- }
74
+ return {
75
+ "--fs-span-line-clamp": props.lineClamp.toString(),
76
+ "--fs-text-color" : colors.value[props.variant]
77
+ };
88
78
  });
89
79
 
90
80
  return {
@@ -3,6 +3,8 @@
3
3
  class="fs-data-iterator-item"
4
4
  padding="12px"
5
5
  width="100%"
6
+ :color="$props.itemColor"
7
+ :variant="variant"
6
8
  >
7
9
  <FSCol>
8
10
  <slot name="item.top" v-bind="{ item: $props.item }" />
@@ -38,6 +40,8 @@
38
40
  <FSCard
39
41
  v-if="$props.showSelect"
40
42
  class="fs-data-iterator-item-checkbox"
43
+ :color="$props.itemColor"
44
+ :variant="variant"
41
45
  :border="false"
42
46
  >
43
47
  <FSCheckbox
@@ -50,7 +54,7 @@
50
54
  </template>
51
55
 
52
56
  <script lang="ts">
53
- import { defineComponent, PropType } from "vue";
57
+ import { computed, defineComponent, PropType } from "vue";
54
58
 
55
59
  import { ColorEnum, FSDataTableColumn } from "@dative-gpi/foundation-shared-components/models";
56
60
 
@@ -86,6 +90,11 @@ export default defineComponent({
86
90
  required: false,
87
91
  default: false
88
92
  },
93
+ itemColor: {
94
+ type: String as PropType<ColorEnum>,
95
+ required: false,
96
+ default: ColorEnum.Background
97
+ },
89
98
  color: {
90
99
  type: String as PropType<ColorEnum>,
91
100
  required: false,
@@ -96,6 +105,19 @@ export default defineComponent({
96
105
  required: false,
97
106
  default: true
98
107
  }
108
+ },
109
+ setup(props) {
110
+ const variant = computed((): "standard" | "background" => {
111
+ switch (props.itemColor) {
112
+ case ColorEnum.Background:
113
+ case null: return "background";
114
+ default: return "standard";
115
+ }
116
+ });
117
+
118
+ return {
119
+ variant
120
+ };
99
121
  }
100
122
  });
101
123
  </script>
@@ -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>
@@ -32,7 +32,7 @@
32
32
  </FSText>
33
33
  </FSCol>
34
34
  <FSIconCard
35
- :backgroundColor="$props.iconBackgroundColor"
35
+ :backgroundColor="iconBackgroundColor"
36
36
  :icon="$props.icon"
37
37
  :size="imageSize"
38
38
  />
@@ -84,9 +84,9 @@ export default defineComponent({
84
84
  default: ColorEnum.Light
85
85
  },
86
86
  iconBackgroundColor: {
87
- type: [Array, String] as PropType<ColorBase | ColorBase[]>,
87
+ type: Boolean,
88
88
  required: false,
89
- default: null
89
+ default: false
90
90
  },
91
91
  icon: {
92
92
  type: String as PropType<string>,
@@ -102,6 +102,10 @@ export default defineComponent({
102
102
  setup(props) {
103
103
  const { isMobileSized } = useBreakpoints();
104
104
 
105
+ const iconBackgroundColor = computed((): ColorBase | ColorBase[] => {
106
+ return props.iconBackgroundColor ? props.bottomColor : ColorEnum.Background;
107
+ });
108
+
105
109
  const imageSize = computed((): number => {
106
110
  return isMobileSized.value ? 90 : 100;
107
111
  });
@@ -115,6 +119,7 @@ export default defineComponent({
115
119
  });
116
120
 
117
121
  return {
122
+ iconBackgroundColor,
118
123
  ColorEnum,
119
124
  imageSize,
120
125
  infoWidth
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSClickable
3
3
  v-if="$props.href || $props.to || $attrs.onClick"
4
+ variant="background"
4
5
  class="fs-tile"
5
6
  padding="12px"
6
7
  :height="height"
@@ -15,9 +16,9 @@
15
16
  v-if="$props.editable"
16
17
  class="fs-tile-checkbox"
17
18
  :border="false"
19
+ v-bind="$attrs"
18
20
  >
19
21
  <FSCheckbox
20
- :color="ColorEnum.Dark"
21
22
  :modelValue="$props.modelValue"
22
23
  @update:modelValue="() => $emit('update:modelValue', !$props.modelValue)"
23
24
  />
@@ -34,15 +35,16 @@
34
35
  :style="style"
35
36
  :width="width"
36
37
  :height="height"
38
+ v-bind="$attrs"
37
39
  >
38
40
  <slot />
39
41
  <FSCard
40
42
  v-if="$props.editable"
41
43
  class="fs-tile-checkbox"
42
44
  :border="false"
45
+ v-bind="$attrs"
43
46
  >
44
47
  <FSCheckbox
45
- :color="ColorEnum.Dark"
46
48
  :modelValue="$props.modelValue"
47
49
  @update:modelValue="() => $emit('update:modelValue', !$props.modelValue)"
48
50
  />
@@ -60,7 +62,7 @@ import { computed, defineComponent, PropType } from "vue";
60
62
  import { RouteLocation } from "vue-router";
61
63
 
62
64
  import { useBreakpoints, useColors } from "@dative-gpi/foundation-shared-components/composables";
63
- import { ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
65
+ import { ColorBase } from "@dative-gpi/foundation-shared-components/models";
64
66
 
65
67
  import FSClickable from "../FSClickable.vue";
66
68
  import FSCheckbox from "../FSCheckbox.vue";
@@ -105,12 +107,14 @@ export default defineComponent({
105
107
  const { isMobileSized } = useBreakpoints();
106
108
  const { getGradients } = useColors();
107
109
 
108
- const bottomColors = computed(() => getGradients(props.bottomColor));
109
-
110
110
  const style = computed((): { [key: string] : string | undefined } => {
111
- return {
112
- "--fs-tile-border-color": bottomColors.value.base
113
- };
111
+ if (props.bottomColor) {
112
+ const bottomColors = getGradients(props.bottomColor);
113
+ return {
114
+ "--fs-tile-border-color": bottomColors.base
115
+ };
116
+ }
117
+ return {};
114
118
  });
115
119
 
116
120
  const width = computed(() => {
@@ -122,10 +126,9 @@ export default defineComponent({
122
126
  });
123
127
 
124
128
  return {
125
- ColorEnum,
126
- style,
129
+ height,
127
130
  width,
128
- height
131
+ style
129
132
  };
130
133
  }
131
134
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dative-gpi/foundation-shared-components",
3
3
  "sideEffects": false,
4
- "version": "0.0.71",
4
+ "version": "0.0.73",
5
5
  "description": "",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -10,8 +10,8 @@
10
10
  "author": "",
11
11
  "license": "ISC",
12
12
  "dependencies": {
13
- "@dative-gpi/foundation-shared-domain": "0.0.71",
14
- "@dative-gpi/foundation-shared-services": "0.0.71",
13
+ "@dative-gpi/foundation-shared-domain": "0.0.73",
14
+ "@dative-gpi/foundation-shared-services": "0.0.73",
15
15
  "@fontsource/montserrat": "^5.0.16",
16
16
  "@lexical/clipboard": "^0.12.5",
17
17
  "@lexical/history": "^0.12.5",
@@ -32,5 +32,5 @@
32
32
  "sass": "^1.69.5",
33
33
  "sass-loader": "^13.3.2"
34
34
  },
35
- "gitHead": "72097470e9163b0da5e7ab5d67496ac5c403f918"
35
+ "gitHead": "6798551a8edc232d59e64569cf432272685a4d15"
36
36
  }
@@ -1,6 +1,7 @@
1
1
  .fs-card {
2
+ border: var(--fs-card-border-size) var(--fs-card-border-style);
3
+ transition: all 0.28s cubic-bezier(0.4, 0, 0.2, 1);
2
4
  border-radius: var(--fs-card-border-radius);
3
- border: var(--fs-card-border-size) solid;
4
5
  padding: var(--fs-card-padding);
5
6
  height: var(--fs-card-height);
6
7
  width: var(--fs-card-width);
@@ -1,6 +1,6 @@
1
1
  .fs-clickable {
2
+ border: var(--fs-clickable-border-size) var(--fs-clickable-border-style) !important;
2
3
  border-radius: var(--fs-clickable-border-radius) !important;
3
- border: var(--fs-clickable-border-size) solid !important;
4
4
  transition: all 0.28s cubic-bezier(0.4, 0, 0.2, 1);
5
5
  cursor: pointer;
6
6
 
@@ -8,6 +8,12 @@
8
8
  border-color: var(--fs-clickable-border-color) !important;
9
9
  color: var(--fs-clickable-color) !important;
10
10
 
11
+ & .fs-card {
12
+ background-color: var(--fs-clickable-background-color) !important;
13
+ border-color: var(--fs-clickable-border-color) !important;
14
+ color: var(--fs-clickable-color) !important;
15
+ }
16
+
11
17
  &.fs-clickable-disabled {
12
18
  cursor: default;
13
19
  }
@@ -16,12 +22,24 @@
16
22
  background-color: var(--fs-clickable-hover-background-color) !important;
17
23
  border-color: var(--fs-clickable-hover-border-color) !important;
18
24
  color: var(--fs-clickable-hover-color) !important;
25
+
26
+ & .fs-card {
27
+ background-color: var(--fs-clickable-hover-background-color) !important;
28
+ border-color: var(--fs-clickable-hover-border-color) !important;
29
+ color: var(--fs-clickable-hover-color) !important;
30
+ }
19
31
  }
20
32
 
21
33
  &:not(.fs-clickable-disabled):active {
22
34
  background-color: var(--fs-clickable-active-background-color) !important;
23
35
  border-color: var(--fs-clickable-active-border-color) !important;
24
36
  color: var(--fs-clickable-active-color) !important;
37
+
38
+ & .fs-card {
39
+ background-color: var(--fs-clickable-active-background-color) !important;
40
+ border-color: var(--fs-clickable-active-border-color) !important;
41
+ color: var(--fs-clickable-active-color) !important;
42
+ }
25
43
  }
26
44
  }
27
45
 
@@ -1,8 +1,34 @@
1
1
  .fs-data-table {
2
- th,
3
- td {
2
+ table {
3
+ margin-top: calc(var(--fs-data-table-row-gap) * -1);
4
+ border-spacing: 0 var(--fs-data-table-row-gap) !important;
5
+ background-color: var(--fs-data-table-background-color) !important;
6
+ }
7
+
8
+ .fs-data-table-custom-row > td {
9
+ border-bottom: var(--fs-data-table-row-border-size) solid var(--fs-data-table-row-border-color) !important;
10
+ border-top: var(--fs-data-table-row-border-size) solid var(--fs-data-table-row-border-color) !important;
11
+ background-color: var(--fs-data-table-row-background-color) !important;
12
+ color: var(--fs-data-table-row-color);
4
13
  position: relative;
14
+ }
15
+
16
+ .fs-data-table-custom-row > td:first-child{
17
+ border-top-left-radius: var(--fs-data-table-row-border-radius) !important;
18
+ border-bottom-left-radius: var(--fs-data-table-row-border-radius) !important;
19
+ border-left: var(--fs-data-table-row-border-size) solid var(--fs-data-table-row-border-color);
20
+ }
21
+
22
+ .fs-data-table-custom-row > td:last-child{
23
+ border-top-right-radius: var(--fs-data-table-row-border-radius) !important;
24
+ border-bottom-right-radius: var(--fs-data-table-row-border-radius) !important;
25
+ border-right: var(--fs-data-table-row-border-size) solid var(--fs-data-table-row-border-color);
26
+ }
27
+
28
+ th,
29
+ :not(.fs-data-table-custom-row) > td {
5
30
  background-color: var(--fs-data-table-background-color) !important;
31
+ position: relative;
6
32
  }
7
33
 
8
34
  th {
@@ -1,3 +1,3 @@
1
1
  .fs-edit-image {
2
- border-style: dashed;
2
+ border: 1px dashed var(--fs-edit-image-border-color);
3
3
  }