@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.
- package/components/FSCard.vue +8 -0
- package/components/FSCheckbox.vue +1 -2
- package/components/FSClickable.vue +45 -4
- package/components/FSEditImage.vue +29 -26
- package/components/FSIcon.vue +2 -2
- package/components/FSIconCard.vue +23 -3
- package/components/FSImage.vue +4 -4
- package/components/FSText.vue +5 -15
- package/components/lists/FSDataIteratorItem.vue +23 -1
- package/components/lists/FSDataTableUI.vue +177 -57
- package/components/tiles/FSDashboardOrganisationTileUI.vue +18 -0
- package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +18 -0
- package/components/tiles/FSDashboardShallowTileUI.vue +18 -0
- package/components/tiles/FSFolderTileUI.vue +19 -0
- package/components/tiles/FSSimpleIconTileUI.vue +8 -3
- package/components/tiles/FSTile.vue +14 -11
- package/package.json +4 -4
- package/styles/components/fs_card.scss +2 -1
- package/styles/components/fs_clickable.scss +19 -1
- package/styles/components/fs_data_table.scss +28 -2
- package/styles/components/fs_edit_image.scss +1 -1
package/components/FSCard.vue
CHANGED
|
@@ -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
|
-
<
|
|
5
|
+
<FSImage
|
|
7
6
|
class="fs-edit-image"
|
|
8
|
-
:
|
|
9
|
-
:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
62
|
-
|
|
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
|
-
|
|
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
|
-
|
|
91
|
-
type:
|
|
83
|
+
modelValue: {
|
|
84
|
+
type: String as PropType<string | null>,
|
|
92
85
|
required: false,
|
|
93
|
-
default:
|
|
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
|
};
|
package/components/FSIcon.vue
CHANGED
|
@@ -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>
|
package/components/FSImage.vue
CHANGED
|
@@ -145,14 +145,14 @@ export default defineComponent({
|
|
|
145
145
|
});
|
|
146
146
|
|
|
147
147
|
const source = computed((): string | undefined => {
|
|
148
|
-
if (props.
|
|
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 => {
|
package/components/FSText.vue
CHANGED
|
@@ -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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
156
|
-
|
|
157
|
-
|
|
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
|
|
202
|
-
|
|
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
|
|
240
|
+
<slot
|
|
241
|
+
:name="`${header.slotName}-append`"
|
|
242
|
+
/>
|
|
208
243
|
<v-spacer />
|
|
209
|
-
<slot
|
|
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
|
-
<
|
|
232
|
-
|
|
233
|
-
v-bind="props"
|
|
268
|
+
<div
|
|
269
|
+
class="fs-td-color"
|
|
234
270
|
>
|
|
235
|
-
<
|
|
236
|
-
|
|
237
|
-
|
|
271
|
+
<slot
|
|
272
|
+
:name="item.slotName"
|
|
273
|
+
v-bind="props"
|
|
238
274
|
>
|
|
239
|
-
<
|
|
240
|
-
|
|
275
|
+
<FSRow
|
|
276
|
+
align="center-left"
|
|
277
|
+
:key="index"
|
|
241
278
|
>
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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
|
|
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
|
|
255
|
-
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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
|
-
<
|
|
422
|
+
<FSSpan
|
|
369
423
|
:key="index"
|
|
370
424
|
>
|
|
371
425
|
{{ props.item[item.value] }}
|
|
372
|
-
</
|
|
426
|
+
</FSSpan>
|
|
373
427
|
</slot>
|
|
374
428
|
</template>
|
|
375
|
-
<template
|
|
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
|
|
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
|
|
394
|
-
|
|
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", "
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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]
|
|
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="
|
|
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:
|
|
87
|
+
type: Boolean,
|
|
88
88
|
required: false,
|
|
89
|
-
default:
|
|
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
|
|
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
|
-
|
|
112
|
-
|
|
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
|
-
|
|
126
|
-
style,
|
|
129
|
+
height,
|
|
127
130
|
width,
|
|
128
|
-
|
|
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.
|
|
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.
|
|
14
|
-
"@dative-gpi/foundation-shared-services": "0.0.
|
|
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": "
|
|
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
|
-
|
|
3
|
-
|
|
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 {
|