@dative-gpi/foundation-shared-components 1.0.58 → 1.0.61
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/FSEditImage.vue +1 -1
- package/components/FSEditImageUI.vue +7 -5
- package/components/FSGrid.vue +1 -0
- package/components/FSImage.vue +9 -2
- package/components/FSImageUI.vue +8 -15
- package/components/FSTag.vue +14 -3
- package/components/FSTagGroup.vue +1 -1
- package/components/agenda/FSDayAgenda.vue +1 -1
- package/components/agenda/FSMonthAgenda.vue +2 -3
- package/components/agenda/FSWeekAgenda.vue +2 -3
- package/components/deviceOrganisations/FSStatus.vue +5 -1
- package/components/deviceOrganisations/FSStatusCard.vue +10 -2
- package/components/deviceOrganisations/FSStatusesRow.vue +8 -2
- package/components/deviceOrganisations/FSWorstAlert.vue +16 -10
- package/components/deviceOrganisations/FSWorstAlertCard.vue +13 -2
- package/components/fields/FSBaseField.vue +12 -5
- package/components/fields/FSEntityFieldUI.vue +17 -3
- package/components/fields/FSNumberField.vue +1 -0
- package/components/fields/FSTagField.vue +1 -1
- package/components/fields/FSTermField.vue +3 -0
- package/components/lists/FSDataTableUI.vue +2 -2
- package/components/lists/FSSimpleList.vue +1 -0
- package/components/tiles/FSDeviceOrganisationTileUI.vue +6 -0
- package/components/tiles/FSLocationTileUI.vue +9 -2
- package/components/tiles/FSModelTileUI.vue +5 -46
- package/components/tiles/FSSimpleTileUI.vue +2 -3
- package/components/views/FSEntityHeader.vue +20 -27
- package/components/views/FSEntityView.vue +6 -0
- package/package.json +4 -4
- package/styles/components/fs_color_field.scss +1 -0
- package/styles/components/fs_edit_image.scss +8 -0
- package/styles/components/fs_tabs.scss +1 -0
- package/styles/globals/overrides.scss +2 -7
- package/utils/time.ts +3 -3
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
:wrap="false"
|
|
40
40
|
>
|
|
41
41
|
<FSRow
|
|
42
|
+
class="fs-edit-image-standard-row"
|
|
42
43
|
gap="24px"
|
|
43
44
|
:wrap="false"
|
|
44
45
|
>
|
|
@@ -59,6 +60,7 @@
|
|
|
59
60
|
:width="$props.width"
|
|
60
61
|
/>
|
|
61
62
|
<FSCol
|
|
63
|
+
class="fs-edit-image-standard-label-wrapper"
|
|
62
64
|
align="center-left"
|
|
63
65
|
height="fill"
|
|
64
66
|
width="hug"
|
|
@@ -91,12 +93,12 @@
|
|
|
91
93
|
</FSCol>
|
|
92
94
|
</FSCol>
|
|
93
95
|
</FSRow>
|
|
94
|
-
<v-spacer />
|
|
95
96
|
<FSRow
|
|
96
|
-
|
|
97
|
+
align="center-right"
|
|
98
|
+
:width="isExtraSmall ? '40px' : 'hug'"
|
|
97
99
|
>
|
|
98
100
|
<FSButtonFileMini
|
|
99
|
-
accept="
|
|
101
|
+
accept=".jpg,.jpeg,.png"
|
|
100
102
|
:readFile="false"
|
|
101
103
|
@update:metadata="onUpload"
|
|
102
104
|
/>
|
|
@@ -124,7 +126,7 @@
|
|
|
124
126
|
padding="4px"
|
|
125
127
|
>
|
|
126
128
|
<FSButtonFileMini
|
|
127
|
-
accept="
|
|
129
|
+
accept=".jpg,.jpeg,.png"
|
|
128
130
|
:readFile="false"
|
|
129
131
|
@update:metadata="onUpload"
|
|
130
132
|
/>
|
|
@@ -157,7 +159,7 @@
|
|
|
157
159
|
<FSButtonFileMini
|
|
158
160
|
class="fs-edit-image-hidden-button"
|
|
159
161
|
ref="invisibleButtonRef"
|
|
160
|
-
accept="
|
|
162
|
+
accept=".jpg,.jpeg,.png"
|
|
161
163
|
:readFile="false"
|
|
162
164
|
@update:metadata="onUpload"
|
|
163
165
|
/>
|
package/components/FSGrid.vue
CHANGED
package/components/FSImage.vue
CHANGED
|
@@ -10,8 +10,7 @@
|
|
|
10
10
|
<script lang="ts">
|
|
11
11
|
import { computed, defineComponent, type PropType } from "vue";
|
|
12
12
|
|
|
13
|
-
import { IMAGE_RAW_URL } from "@dative-gpi/foundation-shared-services/config/urls";
|
|
14
|
-
|
|
13
|
+
import { IMAGE_THUMBNAIL_URL, IMAGE_RAW_URL } from "@dative-gpi/foundation-shared-services/config/urls";
|
|
15
14
|
import { useAppAuthToken, useImage } from "@dative-gpi/foundation-shared-services/composables";
|
|
16
15
|
|
|
17
16
|
import FSImageUI from "./FSImageUI.vue";
|
|
@@ -26,6 +25,11 @@ export default defineComponent({
|
|
|
26
25
|
type: String as PropType<string | null>,
|
|
27
26
|
required: false,
|
|
28
27
|
default: null
|
|
28
|
+
},
|
|
29
|
+
thumbnail: {
|
|
30
|
+
type: Boolean as PropType<boolean>,
|
|
31
|
+
required: false,
|
|
32
|
+
default: false
|
|
29
33
|
}
|
|
30
34
|
},
|
|
31
35
|
setup(props) {
|
|
@@ -33,6 +37,9 @@ export default defineComponent({
|
|
|
33
37
|
const { authToken } = useAppAuthToken();
|
|
34
38
|
|
|
35
39
|
const source = computed(() => {
|
|
40
|
+
if (props.thumbnail) {
|
|
41
|
+
return props.imageId ? IMAGE_THUMBNAIL_URL(props.imageId, authToken.value) : null;
|
|
42
|
+
}
|
|
36
43
|
return props.imageId ? IMAGE_RAW_URL(props.imageId, authToken.value) : null;
|
|
37
44
|
});
|
|
38
45
|
|
package/components/FSImageUI.vue
CHANGED
|
@@ -42,9 +42,8 @@
|
|
|
42
42
|
import { computed, defineComponent, type PropType, ref, type StyleValue, watch } from "vue";
|
|
43
43
|
import { decode, isBlurhashValid } from "blurhash";
|
|
44
44
|
|
|
45
|
-
import type { ImageDetails } from "@dative-gpi/foundation-shared-domain/models";
|
|
46
|
-
|
|
47
45
|
import { sizeToVar, varToSize } from "@dative-gpi/foundation-shared-components/utils";
|
|
46
|
+
import { type ImageDetails } from "@dative-gpi/foundation-shared-domain/models";
|
|
48
47
|
|
|
49
48
|
import FSLoader from "./FSLoader.vue";
|
|
50
49
|
|
|
@@ -64,6 +63,11 @@ export default defineComponent({
|
|
|
64
63
|
required: false,
|
|
65
64
|
default: null
|
|
66
65
|
},
|
|
66
|
+
aspectRatio: {
|
|
67
|
+
type: Number as PropType<number | null>,
|
|
68
|
+
required: false,
|
|
69
|
+
default: 1
|
|
70
|
+
},
|
|
67
71
|
imageB64: {
|
|
68
72
|
type: String as PropType<string | null>,
|
|
69
73
|
required: false,
|
|
@@ -79,11 +83,6 @@ export default defineComponent({
|
|
|
79
83
|
required: false,
|
|
80
84
|
default: null
|
|
81
85
|
},
|
|
82
|
-
aspectRatio: {
|
|
83
|
-
type: String as PropType<string | null>,
|
|
84
|
-
required: false,
|
|
85
|
-
default: null
|
|
86
|
-
},
|
|
87
86
|
borderRadius: {
|
|
88
87
|
type: [String, Number],
|
|
89
88
|
required: false,
|
|
@@ -127,10 +126,7 @@ export default defineComponent({
|
|
|
127
126
|
return undefined;
|
|
128
127
|
}
|
|
129
128
|
if (props.aspectRatio) {
|
|
130
|
-
|
|
131
|
-
if (split.length === 2 && !isNaN(parseFloat(split[0])) && !isNaN(parseFloat(split[1]))) {
|
|
132
|
-
return sizeToVar(varToSize(props.width) * (parseFloat(split[1]) / parseFloat(split[0])));
|
|
133
|
-
}
|
|
129
|
+
return sizeToVar(varToSize(props.width) / props.aspectRatio);
|
|
134
130
|
}
|
|
135
131
|
return sizeToVar(props.width);
|
|
136
132
|
}
|
|
@@ -146,10 +142,7 @@ export default defineComponent({
|
|
|
146
142
|
return undefined;
|
|
147
143
|
}
|
|
148
144
|
if (props.aspectRatio) {
|
|
149
|
-
|
|
150
|
-
if (split.length === 2 && !isNaN(parseFloat(split[0])) && !isNaN(parseFloat(split[1]))) {
|
|
151
|
-
return sizeToVar(varToSize(props.height) * (parseFloat(split[0]) / parseFloat(split[1])));
|
|
152
|
-
}
|
|
145
|
+
return sizeToVar(varToSize(props.height) * props.aspectRatio);
|
|
153
146
|
}
|
|
154
147
|
return sizeToVar(props.height);
|
|
155
148
|
}
|
package/components/FSTag.vue
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<FSRow
|
|
3
|
+
align="center-center"
|
|
3
4
|
class="fs-tag"
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
:height="$props.height"
|
|
6
|
+
:width="$props.width"
|
|
6
7
|
:style="style"
|
|
7
8
|
:wrap="false"
|
|
8
9
|
v-bind="$attrs"
|
|
@@ -55,6 +56,16 @@ export default defineComponent({
|
|
|
55
56
|
FSRow
|
|
56
57
|
},
|
|
57
58
|
props: {
|
|
59
|
+
height: {
|
|
60
|
+
type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
|
|
61
|
+
required: false,
|
|
62
|
+
default: "hug"
|
|
63
|
+
},
|
|
64
|
+
width: {
|
|
65
|
+
type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
|
|
66
|
+
required: false,
|
|
67
|
+
default: "hug"
|
|
68
|
+
},
|
|
58
69
|
label: {
|
|
59
70
|
type: String as PropType<string | null>,
|
|
60
71
|
required: false,
|
|
@@ -68,7 +79,7 @@ export default defineComponent({
|
|
|
68
79
|
color: {
|
|
69
80
|
type: String as PropType<ColorBase>,
|
|
70
81
|
required: false,
|
|
71
|
-
default: ColorEnum.
|
|
82
|
+
default: ColorEnum.Light
|
|
72
83
|
},
|
|
73
84
|
editable: {
|
|
74
85
|
type: Boolean,
|
|
@@ -180,7 +180,7 @@ export default defineComponent({
|
|
|
180
180
|
|
|
181
181
|
const dayEvents = computed(() => {
|
|
182
182
|
return props.events.filter((event) => {
|
|
183
|
-
return
|
|
183
|
+
return event.start < props.end && event.end > props.start;
|
|
184
184
|
});
|
|
185
185
|
});
|
|
186
186
|
|
|
@@ -240,9 +240,8 @@ export default defineComponent({
|
|
|
240
240
|
|
|
241
241
|
const getDayEvents = (dayStartEpoch: number) => {
|
|
242
242
|
return props.events.filter((event) => {
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
return isStartingInDay || isEndingInDay;
|
|
243
|
+
const dayEndEpoch = dayStartEpoch + 1000 * 60 * 60 * 24;
|
|
244
|
+
return event.start < dayEndEpoch && event.end > dayStartEpoch;
|
|
246
245
|
});
|
|
247
246
|
};
|
|
248
247
|
|
|
@@ -309,9 +309,8 @@ export default defineComponent({
|
|
|
309
309
|
|
|
310
310
|
const getDayEvents = (dayStartEpoch: number) => {
|
|
311
311
|
return props.events.filter((event) => {
|
|
312
|
-
const
|
|
313
|
-
|
|
314
|
-
return isStartingInDay || isEndingInDay;
|
|
312
|
+
const dayEndEpoch = dayStartEpoch + 1000 * 60 * 60 * 24;
|
|
313
|
+
return event.start < dayEndEpoch && event.end > dayStartEpoch;
|
|
315
314
|
});
|
|
316
315
|
};
|
|
317
316
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
>
|
|
9
9
|
<FSColorIcon
|
|
10
10
|
class="fs-stopclick"
|
|
11
|
-
size="
|
|
11
|
+
:size="$props.size"
|
|
12
12
|
:color="$props.statusGroup.color"
|
|
13
13
|
@click.prevent.stop
|
|
14
14
|
v-bind="props"
|
|
@@ -47,6 +47,10 @@ export default defineComponent({
|
|
|
47
47
|
statusGroup: {
|
|
48
48
|
type: Object as PropType<FSDeviceStatusGroup>,
|
|
49
49
|
required: true
|
|
50
|
+
},
|
|
51
|
+
size: {
|
|
52
|
+
type: [Array, String, Number] as PropType<"s" | "m" | "l" | string[] | number[] | string | number | null>,
|
|
53
|
+
default: "m"
|
|
50
54
|
}
|
|
51
55
|
},
|
|
52
56
|
setup() {
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
font="text-button"
|
|
40
40
|
:color="$props.statusGroup.color"
|
|
41
41
|
>
|
|
42
|
-
{{
|
|
42
|
+
{{ statusValue }} {{ $props.statusGroup.unit }}
|
|
43
43
|
</FSText>
|
|
44
44
|
</FSRow>
|
|
45
45
|
<FSRow
|
|
@@ -114,6 +114,13 @@ export default defineComponent({
|
|
|
114
114
|
return props.statusGroup.label || props.modelStatus.label;
|
|
115
115
|
});
|
|
116
116
|
|
|
117
|
+
const statusValue = computed((): string => {
|
|
118
|
+
if (props.statusGroup.value && !isNaN(parseFloat(props.statusGroup.value))) {
|
|
119
|
+
return parseFloat(props.statusGroup.value).toLocaleString("fullwide", { maximumFractionDigits: 2 });
|
|
120
|
+
}
|
|
121
|
+
return props.statusGroup.value || "";
|
|
122
|
+
});
|
|
123
|
+
|
|
117
124
|
const deviceTimestamp = computed((): string => {
|
|
118
125
|
if (props.statusGroup.sourceTimestamp) {
|
|
119
126
|
return epochToLongTimeFormat(props.statusGroup.sourceTimestamp);
|
|
@@ -123,7 +130,8 @@ export default defineComponent({
|
|
|
123
130
|
|
|
124
131
|
return {
|
|
125
132
|
deviceTimestamp,
|
|
126
|
-
statusLabel
|
|
133
|
+
statusLabel,
|
|
134
|
+
statusValue
|
|
127
135
|
};
|
|
128
136
|
}
|
|
129
137
|
});
|
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
/>
|
|
11
11
|
<FSWorstAlert
|
|
12
12
|
v-if="$props.deviceWorstAlert"
|
|
13
|
-
:
|
|
14
|
-
:
|
|
13
|
+
:deviceWorstAlert="$props.deviceWorstAlert"
|
|
14
|
+
:deviceAlerts="$props.deviceAlerts"
|
|
15
|
+
:alertTo="$props.alertTo"
|
|
15
16
|
/>
|
|
16
17
|
<template
|
|
17
18
|
v-for="(modelStatus, index) in $props.modelStatuses"
|
|
@@ -68,6 +69,11 @@ export default defineComponent({
|
|
|
68
69
|
deviceStatuses: {
|
|
69
70
|
type: Array as PropType<FSDeviceStatus[]>,
|
|
70
71
|
required: true
|
|
72
|
+
},
|
|
73
|
+
alertTo: {
|
|
74
|
+
type: Function,
|
|
75
|
+
required: false,
|
|
76
|
+
default: null
|
|
71
77
|
}
|
|
72
78
|
},
|
|
73
79
|
setup(props) {
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
</FSBadge>
|
|
23
23
|
</template>
|
|
24
24
|
<FSWorstAlertCard
|
|
25
|
-
:deviceAlert="
|
|
25
|
+
:deviceAlert="deviceWorstAlert"
|
|
26
|
+
:alertTo="$props.alertTo"
|
|
26
27
|
@close="menu = false"
|
|
27
28
|
/>
|
|
28
29
|
</v-menu>
|
|
@@ -31,8 +32,8 @@
|
|
|
31
32
|
<script lang="ts">
|
|
32
33
|
import { computed, defineComponent, type PropType, ref } from "vue";
|
|
33
34
|
|
|
35
|
+
import { type FSDeviceAlert } from "@dative-gpi/foundation-shared-components/models";
|
|
34
36
|
import { AlertStatus, Criticity } from "@dative-gpi/foundation-shared-domain/enums";
|
|
35
|
-
import type { FSDeviceAlert } from "@dative-gpi/foundation-shared-components/models";
|
|
36
37
|
import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
|
|
37
38
|
|
|
38
39
|
import FSWorstAlertCard from "./FSWorstAlertCard.vue";
|
|
@@ -47,21 +48,26 @@ export default defineComponent({
|
|
|
47
48
|
FSBadge
|
|
48
49
|
},
|
|
49
50
|
props: {
|
|
50
|
-
|
|
51
|
+
deviceWorstAlert: {
|
|
51
52
|
type: Object as PropType<FSDeviceAlert>,
|
|
52
53
|
required: true
|
|
53
54
|
},
|
|
54
55
|
deviceAlerts: {
|
|
55
|
-
type:
|
|
56
|
+
type: Array as PropType<FSDeviceAlert[]>,
|
|
56
57
|
required: false,
|
|
57
|
-
default:
|
|
58
|
+
default: () => []
|
|
59
|
+
},
|
|
60
|
+
alertTo: {
|
|
61
|
+
type: Function,
|
|
62
|
+
required: false,
|
|
63
|
+
default: null
|
|
58
64
|
}
|
|
59
65
|
},
|
|
60
66
|
setup(props) {
|
|
61
67
|
const menu = ref(false);
|
|
62
68
|
|
|
63
69
|
const criticityColor = computed(() => {
|
|
64
|
-
switch (props.
|
|
70
|
+
switch (props.deviceWorstAlert?.criticity) {
|
|
65
71
|
case Criticity.Error: return ColorEnum.Error;
|
|
66
72
|
case Criticity.Warning: return ColorEnum.Warning;
|
|
67
73
|
default: return ColorEnum.Primary;
|
|
@@ -69,7 +75,7 @@ export default defineComponent({
|
|
|
69
75
|
});
|
|
70
76
|
|
|
71
77
|
const statusIcon = computed(() => {
|
|
72
|
-
switch (props.
|
|
78
|
+
switch (props.deviceWorstAlert?.status) {
|
|
73
79
|
case AlertStatus.Pending: return "mdi-timer-outline";
|
|
74
80
|
case AlertStatus.Untriggered: return "mdi-timer-off-outline";
|
|
75
81
|
case AlertStatus.Unresolved: return "mdi-alert-circle-outline";
|
|
@@ -82,13 +88,13 @@ export default defineComponent({
|
|
|
82
88
|
});
|
|
83
89
|
|
|
84
90
|
const badgeLabel = computed((): string | null => {
|
|
85
|
-
if (props.deviceAlerts < 1) {
|
|
91
|
+
if (!props.deviceAlerts || props.deviceAlerts.length < 1) {
|
|
86
92
|
return null;
|
|
87
93
|
}
|
|
88
|
-
if (props.deviceAlerts > 9) {
|
|
94
|
+
if (props.deviceAlerts.length > 9) {
|
|
89
95
|
return "9+";
|
|
90
96
|
}
|
|
91
|
-
return
|
|
97
|
+
return props.deviceAlerts.length.toString();
|
|
92
98
|
});
|
|
93
99
|
|
|
94
100
|
return {
|
|
@@ -50,6 +50,12 @@
|
|
|
50
50
|
{{ deviceTimestamp }}
|
|
51
51
|
</FSSpan>
|
|
52
52
|
</FSRow>
|
|
53
|
+
<FSButton
|
|
54
|
+
v-if="$props.alertTo"
|
|
55
|
+
icon="mdi-information-outline"
|
|
56
|
+
:label="$tr('ui.shared.device-alert.view-alert', 'View alert')"
|
|
57
|
+
:to="$props.alertTo($props.deviceAlert.id)"
|
|
58
|
+
/>
|
|
53
59
|
</FSCol>
|
|
54
60
|
</FSCard>
|
|
55
61
|
</template>
|
|
@@ -58,10 +64,10 @@
|
|
|
58
64
|
import { computed, defineComponent, type PropType } from "vue";
|
|
59
65
|
|
|
60
66
|
import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
|
|
61
|
-
import type
|
|
62
|
-
import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
|
|
67
|
+
import { type FSDeviceAlert} from "@dative-gpi/foundation-shared-components/models";
|
|
63
68
|
import { AlertStatus, Criticity } from "@dative-gpi/foundation-shared-domain/enums";
|
|
64
69
|
import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
|
|
70
|
+
import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
|
|
65
71
|
|
|
66
72
|
import FSButton from "../FSButton.vue";
|
|
67
73
|
import FSCard from "../FSCard.vue";
|
|
@@ -86,6 +92,11 @@ export default defineComponent({
|
|
|
86
92
|
deviceAlert: {
|
|
87
93
|
type: Object as PropType<FSDeviceAlert>,
|
|
88
94
|
required: true
|
|
95
|
+
},
|
|
96
|
+
alertTo: {
|
|
97
|
+
type: Function,
|
|
98
|
+
required: false,
|
|
99
|
+
default: null
|
|
89
100
|
}
|
|
90
101
|
},
|
|
91
102
|
emits: ["close"],
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<FSCol
|
|
2
|
+
<FSCol
|
|
3
|
+
:style="style"
|
|
4
|
+
>
|
|
3
5
|
<slot
|
|
4
6
|
v-if="!$props.hideHeader"
|
|
5
7
|
name="label"
|
|
@@ -10,7 +12,6 @@
|
|
|
10
12
|
<FSSpan
|
|
11
13
|
class="fs-base-field-label"
|
|
12
14
|
font="text-overline"
|
|
13
|
-
:style="style"
|
|
14
15
|
>
|
|
15
16
|
{{ $props.label }}
|
|
16
17
|
</FSSpan>
|
|
@@ -49,7 +50,6 @@
|
|
|
49
50
|
v-if="$props.description"
|
|
50
51
|
class="fs-base-field-description"
|
|
51
52
|
font="text-overline"
|
|
52
|
-
:style="style"
|
|
53
53
|
>
|
|
54
54
|
{{ $props.description }}
|
|
55
55
|
</FSSpan>
|
|
@@ -104,6 +104,11 @@ export default defineComponent({
|
|
|
104
104
|
type: Boolean,
|
|
105
105
|
required: false,
|
|
106
106
|
default: true
|
|
107
|
+
},
|
|
108
|
+
minWidth: {
|
|
109
|
+
type: String,
|
|
110
|
+
required: false,
|
|
111
|
+
default: "120px"
|
|
107
112
|
}
|
|
108
113
|
},
|
|
109
114
|
setup(props) {
|
|
@@ -120,12 +125,14 @@ export default defineComponent({
|
|
|
120
125
|
const style = computed((): StyleValue => {
|
|
121
126
|
if (!props.editable) {
|
|
122
127
|
return {
|
|
123
|
-
"--fs-base-field-color": lights.dark
|
|
128
|
+
"--fs-base-field-color" : lights.dark,
|
|
129
|
+
"--fs-base-field-min-width": props.minWidth
|
|
124
130
|
};
|
|
125
131
|
}
|
|
126
132
|
return {
|
|
127
133
|
"--fs-base-field-color" : darks.base,
|
|
128
|
-
"--fs-base-field-error-color": errors.base
|
|
134
|
+
"--fs-base-field-error-color": errors.base,
|
|
135
|
+
"--fs-base-field-min-width" : props.minWidth
|
|
129
136
|
};
|
|
130
137
|
});
|
|
131
138
|
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
<FSCol
|
|
11
11
|
gap="12px"
|
|
12
12
|
>
|
|
13
|
-
<FSRow
|
|
13
|
+
<FSRow
|
|
14
|
+
:wrap="false"
|
|
15
|
+
>
|
|
14
16
|
<FSSelectField
|
|
15
17
|
:hideHeader="true"
|
|
16
18
|
:modelValue="$props.entityType"
|
|
@@ -37,7 +39,9 @@
|
|
|
37
39
|
/>
|
|
38
40
|
</template>
|
|
39
41
|
</FSRow>
|
|
40
|
-
<FSRow
|
|
42
|
+
<FSRow
|
|
43
|
+
v-if="$props.showCount"
|
|
44
|
+
>
|
|
41
45
|
<template
|
|
42
46
|
v-if="itemsCount > 0"
|
|
43
47
|
>
|
|
@@ -89,7 +93,7 @@
|
|
|
89
93
|
|
|
90
94
|
<FSFadeOut
|
|
91
95
|
v-if="$props.showEntities && itemsCount > 0"
|
|
92
|
-
maxHeight="
|
|
96
|
+
:maxHeight="$props.listMaxHeight"
|
|
93
97
|
width="100%"
|
|
94
98
|
>
|
|
95
99
|
<slot
|
|
@@ -181,6 +185,16 @@ export default defineComponent({
|
|
|
181
185
|
type: Boolean,
|
|
182
186
|
required: false,
|
|
183
187
|
default: true
|
|
188
|
+
},
|
|
189
|
+
showCount: {
|
|
190
|
+
type: Boolean,
|
|
191
|
+
required: false,
|
|
192
|
+
default: true
|
|
193
|
+
},
|
|
194
|
+
listMaxHeight: {
|
|
195
|
+
type: String as PropType<string | null>,
|
|
196
|
+
required: false,
|
|
197
|
+
default: "220px"
|
|
184
198
|
}
|
|
185
199
|
},
|
|
186
200
|
emits: ["update:entityType", "click:select"],
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
:wrap="false"
|
|
15
15
|
>
|
|
16
16
|
<FSSelectDateSetting
|
|
17
|
+
minWidth="180px"
|
|
17
18
|
:lastPeriod="$props.lastPeriod"
|
|
18
19
|
:editable="$props.editable"
|
|
19
20
|
:variant="$props.variant"
|
|
@@ -22,10 +23,12 @@
|
|
|
22
23
|
@update:modelValue="innerDateSettingChange"
|
|
23
24
|
/>
|
|
24
25
|
<FSNumberField
|
|
26
|
+
minWidth="60px"
|
|
25
27
|
v-if="pastSettings.includes(innerDateSetting)"
|
|
26
28
|
:rules="[NumberRules.required(), NumberRules.min(0)]"
|
|
27
29
|
:editable="$props.editable"
|
|
28
30
|
:hideHeader="true"
|
|
31
|
+
:clearable="false"
|
|
29
32
|
:modelValue="innerDateValue"
|
|
30
33
|
@update:modelValue="innerDateValueChange"
|
|
31
34
|
/>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
gap="16px"
|
|
4
4
|
>
|
|
5
5
|
<FSRow
|
|
6
|
-
align="bottom-
|
|
6
|
+
align="bottom-left"
|
|
7
7
|
:wrap="isExtraSmall ? false : true"
|
|
8
8
|
width="fill"
|
|
9
9
|
>
|
|
@@ -896,7 +896,7 @@ export default defineComponent({
|
|
|
896
896
|
const innerSortBy = ref(props.sortBy);
|
|
897
897
|
const innerMode = ref(props.mode);
|
|
898
898
|
const innerPage = ref(props.page);
|
|
899
|
-
const showFilters = ref(
|
|
899
|
+
const showFilters = ref(false);
|
|
900
900
|
const resetable = ref(false);
|
|
901
901
|
|
|
902
902
|
const intersectionObserver = ref<IntersectionObserver | null>(null);
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
:deviceStatuses="singleDeviceStatuses"
|
|
44
44
|
:modelStatuses="singleModelStatuses"
|
|
45
45
|
:deviceAlerts="$props.deviceAlerts"
|
|
46
|
+
:alertTo="$props.alertTo"
|
|
46
47
|
/>
|
|
47
48
|
</FSCol>
|
|
48
49
|
<FSImage
|
|
@@ -132,6 +133,11 @@ export default defineComponent({
|
|
|
132
133
|
required: true,
|
|
133
134
|
default: () => []
|
|
134
135
|
},
|
|
136
|
+
alertTo: {
|
|
137
|
+
type: Function,
|
|
138
|
+
required: false,
|
|
139
|
+
default: null
|
|
140
|
+
},
|
|
135
141
|
width: {
|
|
136
142
|
type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
|
|
137
143
|
required: false,
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
:activeColor="$props.color"
|
|
4
4
|
:bottomColor="$props.color"
|
|
5
5
|
:modelValue="$props.modelValue"
|
|
6
|
+
:width="$props.width"
|
|
6
7
|
v-bind="$attrs"
|
|
7
8
|
>
|
|
8
9
|
<FSRow
|
|
@@ -26,6 +27,7 @@
|
|
|
26
27
|
{{ $props.label }}
|
|
27
28
|
</FSSpan>
|
|
28
29
|
<FSSpan
|
|
30
|
+
v-if="$props.code"
|
|
29
31
|
font="text-overline"
|
|
30
32
|
variant="soft"
|
|
31
33
|
>
|
|
@@ -55,7 +57,7 @@
|
|
|
55
57
|
<FSSpan
|
|
56
58
|
font="text-overline"
|
|
57
59
|
>
|
|
58
|
-
{{ $tr("ui.
|
|
60
|
+
{{ $tr("ui.common.devices", "Devices") }}
|
|
59
61
|
</FSSpan>
|
|
60
62
|
</FSRow>
|
|
61
63
|
</FSCol>
|
|
@@ -88,7 +90,7 @@ import FSCol from "../FSCol.vue";
|
|
|
88
90
|
import FSRow from "../FSRow.vue";
|
|
89
91
|
|
|
90
92
|
export default defineComponent({
|
|
91
|
-
name: "
|
|
93
|
+
name: "FSLocationTileUI",
|
|
92
94
|
components: {
|
|
93
95
|
FSIconCard,
|
|
94
96
|
FSColor,
|
|
@@ -128,6 +130,11 @@ export default defineComponent({
|
|
|
128
130
|
required: false,
|
|
129
131
|
default: false
|
|
130
132
|
},
|
|
133
|
+
width: {
|
|
134
|
+
type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
|
|
135
|
+
required: false,
|
|
136
|
+
default: () => [352, 336]
|
|
137
|
+
},
|
|
131
138
|
},
|
|
132
139
|
setup() {
|
|
133
140
|
return {
|
|
@@ -1,59 +1,18 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
padding="16px"
|
|
4
|
-
height="196px"
|
|
5
|
-
width="148px"
|
|
6
|
-
:border="false"
|
|
2
|
+
<FSSimpleTileUI
|
|
7
3
|
v-bind="$attrs"
|
|
8
|
-
|
|
9
|
-
<template
|
|
10
|
-
#default
|
|
11
|
-
>
|
|
12
|
-
<FSCol
|
|
13
|
-
align="center-center"
|
|
14
|
-
>
|
|
15
|
-
<FSImage
|
|
16
|
-
:imageId="imageId"
|
|
17
|
-
width="116px"
|
|
18
|
-
height="116px"
|
|
19
|
-
/>
|
|
20
|
-
<FSSpan
|
|
21
|
-
:lineClamp="2"
|
|
22
|
-
>
|
|
23
|
-
{{ label }}
|
|
24
|
-
</FSSpan>
|
|
25
|
-
</FSCol>
|
|
26
|
-
</template>
|
|
27
|
-
</FSClickable>
|
|
4
|
+
/>
|
|
28
5
|
</template>
|
|
29
6
|
|
|
30
7
|
<script lang="ts">
|
|
31
|
-
import { defineComponent
|
|
8
|
+
import { defineComponent } from "vue";
|
|
32
9
|
|
|
33
|
-
import
|
|
34
|
-
import FSSpan from "../FSSpan.vue";
|
|
35
|
-
import FSImage from "../FSImage.vue";
|
|
36
|
-
import FSClickable from "../FSClickable.vue";
|
|
10
|
+
import FSSimpleTileUI from "./FSSimpleTileUI.vue";
|
|
37
11
|
|
|
38
12
|
export default defineComponent({
|
|
39
13
|
name: "FSModelTileUI",
|
|
40
14
|
components: {
|
|
41
|
-
|
|
42
|
-
FSSpan,
|
|
43
|
-
FSImage,
|
|
44
|
-
FSClickable,
|
|
45
|
-
},
|
|
46
|
-
props:{
|
|
47
|
-
label: {
|
|
48
|
-
type: String,
|
|
49
|
-
required: false,
|
|
50
|
-
default: null,
|
|
51
|
-
},
|
|
52
|
-
imageId: {
|
|
53
|
-
type: String as PropType<string | null>,
|
|
54
|
-
required: false,
|
|
55
|
-
default: null,
|
|
56
|
-
}
|
|
15
|
+
FSSimpleTileUI,
|
|
57
16
|
}
|
|
58
17
|
});
|
|
59
18
|
</script>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
width="fill"
|
|
13
13
|
>
|
|
14
14
|
<FSRow
|
|
15
|
-
align="center-
|
|
15
|
+
align="center-left"
|
|
16
16
|
gap="24px"
|
|
17
17
|
:height="imageSize"
|
|
18
18
|
:wrap="false"
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
:width="imageSize"
|
|
42
42
|
/>
|
|
43
43
|
<FSIconCard
|
|
44
|
-
v-else
|
|
44
|
+
v-else-if="$props.icon"
|
|
45
45
|
:backgroundVariant="$props.iconBackgroundVariant"
|
|
46
46
|
:backgroundColor="$props.iconBackgroundColor"
|
|
47
47
|
:border="$props.iconBorder"
|
|
@@ -95,7 +95,6 @@ export default defineComponent({
|
|
|
95
95
|
icon: {
|
|
96
96
|
type: String as PropType<string>,
|
|
97
97
|
required: false,
|
|
98
|
-
default: "mdi-ab-testing"
|
|
99
98
|
},
|
|
100
99
|
iconBackgroundVariant: {
|
|
101
100
|
type: String as PropType<"background" | "standard" | "full" | "gradient">,
|
|
@@ -29,18 +29,13 @@
|
|
|
29
29
|
/>
|
|
30
30
|
</slot>
|
|
31
31
|
</template>
|
|
32
|
-
<FSIcon
|
|
33
|
-
v-else-if="$props.icon && $props.color"
|
|
34
|
-
:color="$props.color"
|
|
35
|
-
:icon="$props.icon"
|
|
36
|
-
:size="imageSize"
|
|
37
|
-
/>
|
|
38
32
|
<FSIconCard
|
|
39
|
-
v-else-if="$props.icon
|
|
33
|
+
v-else-if="$props.icon"
|
|
40
34
|
:backgroundVariant="$props.iconBackgroundVariant"
|
|
41
|
-
:backgroundColor="$props.
|
|
35
|
+
:backgroundColor="$props.iconBackgroundColors"
|
|
42
36
|
:border="$props.iconBorder"
|
|
43
37
|
:icon="$props.icon"
|
|
38
|
+
:iconColor="$props.color"
|
|
44
39
|
:size="imageSize"
|
|
45
40
|
/>
|
|
46
41
|
<FSCol
|
|
@@ -59,11 +54,13 @@
|
|
|
59
54
|
align="center-left"
|
|
60
55
|
gap="4px"
|
|
61
56
|
>
|
|
62
|
-
<FSText
|
|
57
|
+
<FSText
|
|
58
|
+
font="text-button"
|
|
59
|
+
>
|
|
63
60
|
{{ $props.subtitle }}
|
|
64
61
|
</FSText>
|
|
65
62
|
<FSText
|
|
66
|
-
font="text-
|
|
63
|
+
font="text-body"
|
|
67
64
|
>
|
|
68
65
|
{{ $props.description }}
|
|
69
66
|
</FSText>
|
|
@@ -78,7 +75,9 @@
|
|
|
78
75
|
>
|
|
79
76
|
{{ $props.title }}
|
|
80
77
|
</FSText>
|
|
81
|
-
<FSText
|
|
78
|
+
<FSText
|
|
79
|
+
font="text-button"
|
|
80
|
+
>
|
|
82
81
|
{{ $props.subtitle }}
|
|
83
82
|
</FSText>
|
|
84
83
|
</template>
|
|
@@ -92,7 +91,7 @@
|
|
|
92
91
|
{{ $props.title }}
|
|
93
92
|
</FSText>
|
|
94
93
|
<FSText
|
|
95
|
-
font="text-
|
|
94
|
+
font="text-body"
|
|
96
95
|
:lineClamp="2"
|
|
97
96
|
>
|
|
98
97
|
{{ $props.description }}
|
|
@@ -161,17 +160,12 @@
|
|
|
161
160
|
</slot>
|
|
162
161
|
</template>
|
|
163
162
|
<FSIconCard
|
|
164
|
-
v-else-if="$props.icon
|
|
163
|
+
v-else-if="$props.icon"
|
|
165
164
|
iconSize="70px"
|
|
166
165
|
:backgroundVariant="$props.iconBackgroundVariant"
|
|
167
|
-
:backgroundColor="$props.
|
|
166
|
+
:backgroundColor="$props.iconBackgroundColors"
|
|
168
167
|
:border="$props.iconBorder"
|
|
169
|
-
:
|
|
170
|
-
:size="imageSize"
|
|
171
|
-
/>
|
|
172
|
-
<FSIcon
|
|
173
|
-
v-else-if="$props.icon"
|
|
174
|
-
:color="$props.color"
|
|
168
|
+
:iconColor="$props.color"
|
|
175
169
|
:icon="$props.icon"
|
|
176
170
|
:size="imageSize"
|
|
177
171
|
/>
|
|
@@ -189,12 +183,13 @@
|
|
|
189
183
|
>
|
|
190
184
|
<FSText
|
|
191
185
|
v-if="$props.subtitle"
|
|
186
|
+
font="text-button"
|
|
192
187
|
>
|
|
193
188
|
{{ $props.subtitle }}
|
|
194
189
|
</FSText>
|
|
195
190
|
<FSText
|
|
196
191
|
v-if="$props.description"
|
|
197
|
-
font="text-
|
|
192
|
+
font="text-body"
|
|
198
193
|
:lineClamp="2"
|
|
199
194
|
>
|
|
200
195
|
{{ $props.description }}
|
|
@@ -231,14 +226,13 @@
|
|
|
231
226
|
<script lang="ts">
|
|
232
227
|
import { computed, defineComponent, type PropType } from "vue";
|
|
233
228
|
|
|
234
|
-
import {
|
|
229
|
+
import { type ColorBase, type FSBreadcrumbItem } from "@dative-gpi/foundation-shared-components/models";
|
|
235
230
|
import { useBreakpoints, useSlots } from "@dative-gpi/foundation-shared-components/composables";
|
|
236
231
|
|
|
237
232
|
import FSBreadcrumbs from "../FSBreadcrumbs.vue";
|
|
238
233
|
import FSSlideGroup from "../FSSlideGroup.vue";
|
|
239
234
|
import FSIconCard from "../FSIconCard.vue";
|
|
240
235
|
import FSImage from "../FSImage.vue";
|
|
241
|
-
import FSIcon from "../FSIcon.vue";
|
|
242
236
|
import FSText from "../FSText.vue";
|
|
243
237
|
import FSCol from "../FSCol.vue";
|
|
244
238
|
import FSRow from "../FSRow.vue";
|
|
@@ -250,7 +244,6 @@ export default defineComponent({
|
|
|
250
244
|
FSSlideGroup,
|
|
251
245
|
FSIconCard,
|
|
252
246
|
FSImage,
|
|
253
|
-
FSIcon,
|
|
254
247
|
FSText,
|
|
255
248
|
FSCol,
|
|
256
249
|
FSRow
|
|
@@ -276,10 +269,10 @@ export default defineComponent({
|
|
|
276
269
|
required: false,
|
|
277
270
|
default: "background"
|
|
278
271
|
},
|
|
279
|
-
|
|
280
|
-
type:
|
|
272
|
+
iconBackgroundColors: {
|
|
273
|
+
type: Array as PropType<string[]>,
|
|
281
274
|
required: false,
|
|
282
|
-
default:
|
|
275
|
+
default: () => []
|
|
283
276
|
},
|
|
284
277
|
iconBorder: {
|
|
285
278
|
type: Boolean as PropType<boolean>,
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
:title="$props.title"
|
|
12
12
|
:light="lightHeader"
|
|
13
13
|
:imageId="imageId"
|
|
14
|
+
:iconBackgroundVariant="$props.iconBackgroundVariant"
|
|
14
15
|
:icon="$props.icon"
|
|
15
16
|
:color="$props.color"
|
|
16
17
|
:iconBackgroundColors="$props.iconBackgroundColors"
|
|
@@ -120,6 +121,11 @@ export default defineComponent({
|
|
|
120
121
|
type: Array as PropType<FSBreadcrumbItem[]>,
|
|
121
122
|
required: false,
|
|
122
123
|
default: () => []
|
|
124
|
+
},
|
|
125
|
+
iconBackgroundVariant: {
|
|
126
|
+
type: String as PropType<"background" | "standard" | "full" | "gradient">,
|
|
127
|
+
required: false,
|
|
128
|
+
default: "background"
|
|
123
129
|
}
|
|
124
130
|
},
|
|
125
131
|
setup() {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dative-gpi/foundation-shared-components",
|
|
3
3
|
"sideEffects": false,
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.61",
|
|
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": "1.0.
|
|
14
|
-
"@dative-gpi/foundation-shared-services": "1.0.
|
|
13
|
+
"@dative-gpi/foundation-shared-domain": "1.0.61",
|
|
14
|
+
"@dative-gpi/foundation-shared-services": "1.0.61"
|
|
15
15
|
},
|
|
16
16
|
"peerDependencies": {
|
|
17
17
|
"@dative-gpi/bones-ui": "^0.0.75",
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"sass": "1.71.1",
|
|
36
36
|
"sass-loader": "13.3.2"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "764e769b8eeb942d5028c00c479333be5907f4de"
|
|
39
39
|
}
|
|
@@ -40,13 +40,8 @@
|
|
|
40
40
|
flex: 0 0 auto;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
&:not(.v-checkbox):not(.v-slider):not(.fs-small-input)
|
|
44
|
-
min-width:
|
|
45
|
-
width: 100%;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
&.fs-number-field {
|
|
49
|
-
min-width: 80px;
|
|
43
|
+
&:not(.v-checkbox):not(.v-slider):not(.fs-small-input) {
|
|
44
|
+
min-width: var(--fs-base-field-min-width);
|
|
50
45
|
width: 100%;
|
|
51
46
|
}
|
|
52
47
|
|
package/utils/time.ts
CHANGED
|
@@ -12,7 +12,7 @@ export const timeSteps = [
|
|
|
12
12
|
{ id: TimeUnit.Week, label: $tr("ui.time-step.week.singular", "Week"), plural: $tr("ui.time-step.week.plural", "Weeks") },
|
|
13
13
|
{ id: TimeUnit.Month, label: $tr("ui.time-step.month.singular", "Month"), plural: $tr("ui.time-step.month.plural", "Months") },
|
|
14
14
|
{ id: TimeUnit.Year, label: $tr("ui.time-step.year.singular", "Year"), plural: $tr("ui.time-step.year.plural", "Years") },
|
|
15
|
-
]
|
|
15
|
+
];
|
|
16
16
|
|
|
17
17
|
export const timeStepToString = (value: { value: number, unit: TimeUnit } | null): string => {
|
|
18
18
|
if (!value) {
|
|
@@ -25,7 +25,7 @@ export const timeStepToString = (value: { value: number, unit: TimeUnit } | null
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
return `${value.value} ${value.value === 1 ? unit.label.toLowerCase() : unit.plural.toLowerCase()}`;
|
|
28
|
-
}
|
|
28
|
+
};
|
|
29
29
|
|
|
30
30
|
// TODO : remove everything below this line
|
|
31
31
|
export const timeScale: any[] = [
|
|
@@ -52,4 +52,4 @@ export const getTimeBestString = (value: number): string => {
|
|
|
52
52
|
const unit = getTimeScaleIndex(value);
|
|
53
53
|
const figure = value / timeScale[unit].id;
|
|
54
54
|
return `${figure} ${figure === 1 ? timeScale[unit].label.toLowerCase() : timeScale[unit].plural.toLowerCase()}`;
|
|
55
|
-
}
|
|
55
|
+
};
|