@dative-gpi/foundation-shared-components 0.0.11 → 0.0.13
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/aliases/FSButton.ts +8 -6
- package/components/FSBreadcrumbs.vue +3 -1
- package/components/FSButton.vue +13 -10
- package/components/FSCalendar.vue +4 -3
- package/components/FSCalendarTwin.vue +4 -3
- package/components/FSCarousel.vue +3 -1
- package/components/FSCheckbox.vue +8 -6
- package/components/FSChip.vue +5 -3
- package/components/FSClock.vue +50 -34
- package/components/FSColor.vue +3 -1
- package/components/FSColorIcon.vue +3 -1
- package/components/FSContainer.vue +4 -2
- package/components/FSDivider.vue +49 -8
- package/components/FSFadeOut.vue +3 -1
- package/components/FSFileButton.vue +4 -3
- package/components/FSForm.vue +52 -0
- package/components/FSImage.vue +42 -33
- package/components/FSLabel.vue +105 -0
- package/components/FSLink.vue +95 -0
- package/components/FSPagination.vue +96 -0
- package/components/FSPermissions.vue +0 -0
- package/components/FSRadio.vue +8 -6
- package/components/FSRemoveDialog.vue +1 -1
- package/components/FSSlideGroup.vue +2 -1
- package/components/FSSlider.vue +5 -3
- package/components/FSSubmitDialog.vue +2 -2
- package/components/FSSwitch.vue +9 -7
- package/components/FSTabs.vue +4 -3
- package/components/FSTag.vue +4 -2
- package/components/FSText.vue +3 -2
- package/components/FSWrapGroup.vue +2 -1
- package/components/deviceOrganisations/FSConnectivity.vue +2 -1
- package/components/deviceOrganisations/FSWorstAlert.vue +2 -1
- package/components/{FSAutocompleteField.vue → fields/FSAutocompleteField.vue} +25 -22
- package/components/fields/FSColorField.vue +194 -0
- package/components/{FSDateField.vue → fields/FSDateField.vue} +18 -52
- package/components/{FSDateRangeField.vue → fields/FSDateRangeField.vue} +22 -67
- package/components/{FSDateTimeField.vue → fields/FSDateTimeField.vue} +20 -54
- package/components/{FSDateTimeRangeField.vue → fields/FSDateTimeRangeField.vue} +27 -70
- package/components/{FSIconField.vue → fields/FSIconField.vue} +20 -53
- package/components/{FSNumberField.vue → fields/FSNumberField.vue} +0 -24
- package/components/{FSPasswordField.vue → fields/FSPasswordField.vue} +9 -31
- package/components/{FSRichTextField.vue → fields/FSRichTextField.vue} +10 -9
- package/components/{FSSearchField.vue → fields/FSSearchField.vue} +47 -14
- package/components/{FSSelectField.vue → fields/FSSelectField.vue} +22 -24
- package/components/{FSTagField.vue → fields/FSTagField.vue} +19 -53
- package/components/{FSTextArea.vue → fields/FSTextArea.vue} +28 -27
- package/components/{FSTextField.vue → fields/FSTextField.vue} +23 -21
- package/components/fields/FSTimeField.vue +104 -0
- package/components/fields/FSTimeSlotField.vue +263 -0
- package/components/lists/FSDataTableUI.vue +7 -6
- package/components/lists/FSFilterButton.vue +25 -17
- package/components/lists/FSHiddenButton.vue +1 -0
- package/components/lists/FSLoadDataTable.vue +88 -0
- package/components/tiles/FSDeviceOrganisationTileUI.vue +5 -10
- package/components/tiles/FSGroupTileUI.vue +5 -10
- package/components/{FSLoadTile.vue → tiles/FSLoadTile.vue} +9 -7
- package/components/{FSTile.vue → tiles/FSTile.vue} +5 -4
- package/composables/index.ts +2 -0
- package/composables/useBreakpoints.ts +7 -5
- package/composables/useDebounce.ts +22 -0
- package/composables/useRules.ts +72 -0
- package/elements/FSFormElement.ts +17 -0
- package/icons/flags/France.vue +9 -0
- package/icons/flags/Germany.vue +7 -0
- package/icons/flags/GreatBritain.vue +9 -0
- package/icons/flags/Italy.vue +9 -0
- package/icons/flags/Portugal.vue +59 -0
- package/icons/flags/Spain.vue +546 -0
- package/icons/flags/UnitedStates.vue +12 -0
- package/icons/sets.ts +17 -0
- package/models/rules.ts +10 -1
- package/package.json +6 -4
- package/pages/FSExternalIdentityButton.vue +64 -0
- package/pages/FSLanguageSetter.vue +140 -0
- package/pages/FSLoginPage.vue +253 -0
- package/styles/components/fs_clock.scss +4 -0
- package/styles/components/fs_color_field.scss +17 -0
- package/styles/components/fs_divider.scss +5 -0
- package/styles/components/fs_image.scss +12 -1
- package/styles/components/fs_label.scss +86 -0
- package/styles/components/fs_link.scss +6 -0
- package/styles/components/fs_load_data_table.scss +77 -0
- package/styles/components/fs_pagination.scss +11 -0
- package/styles/components/fs_time_field.scss +3 -0
- package/styles/components/fs_timeslot_field.scss +75 -0
- package/styles/components/index.scss +7 -0
- package/styles/globals/text_fonts.scss +18 -0
- package/styles/main.scss +3 -1
- package/styles/pages/fs_language_setter.scss +55 -0
- package/styles/pages/index.scss +1 -0
- package/utils/color.ts +7 -0
- package/utils/css.ts +2 -1
- package/utils/index.ts +3 -1
- package/utils/time.ts +29 -0
- package/components/FSHeaderButton.vue +0 -17
- package/components/lists/FSDataIteratorGroup.vue +0 -7
- package/index.ts +0 -6
|
@@ -6,44 +6,15 @@
|
|
|
6
6
|
:hideHeader="$props.hideHeader"
|
|
7
7
|
:required="$props.required"
|
|
8
8
|
:editable="$props.editable"
|
|
9
|
-
:
|
|
9
|
+
:rules="$props.rules"
|
|
10
|
+
:messages="messages"
|
|
11
|
+
:validateOn="validateOn"
|
|
12
|
+
:validationValue="$props.modelValue"
|
|
10
13
|
@keydown.enter="onAdd"
|
|
14
|
+
@blur="blurred = true"
|
|
11
15
|
v-model="innerValue"
|
|
12
16
|
v-bind="$attrs"
|
|
13
17
|
>
|
|
14
|
-
<template v-if="!$props.hideHeader" #label>
|
|
15
|
-
<slot name="label">
|
|
16
|
-
<FSRow :wrap="false">
|
|
17
|
-
<FSSpan
|
|
18
|
-
v-if="$props.label"
|
|
19
|
-
class="fs-tag-field-label"
|
|
20
|
-
font="text-overline"
|
|
21
|
-
:style="style"
|
|
22
|
-
>
|
|
23
|
-
{{ $props.label }}
|
|
24
|
-
</FSSpan>
|
|
25
|
-
<FSSpan
|
|
26
|
-
v-if="$props.label && $props.required"
|
|
27
|
-
class="fs-tag-field-label"
|
|
28
|
-
style="margin-left: -8px;"
|
|
29
|
-
font="text-overline"
|
|
30
|
-
:ellipsis="false"
|
|
31
|
-
:style="style"
|
|
32
|
-
>
|
|
33
|
-
*
|
|
34
|
-
</FSSpan>
|
|
35
|
-
<v-spacer style="min-width: 40px;" />
|
|
36
|
-
<FSSpan
|
|
37
|
-
v-if="messages.length > 0"
|
|
38
|
-
class="fs-tag-field-messages"
|
|
39
|
-
font="text-overline"
|
|
40
|
-
:style="style"
|
|
41
|
-
>
|
|
42
|
-
{{ messages.join(", ") }}
|
|
43
|
-
</FSSpan>
|
|
44
|
-
</FSRow>
|
|
45
|
-
</slot>
|
|
46
|
-
</template>
|
|
47
18
|
<template #append-inner>
|
|
48
19
|
<slot name="append-inner">
|
|
49
20
|
<FSButton
|
|
@@ -73,14 +44,14 @@
|
|
|
73
44
|
import { computed, defineComponent, PropType, ref } from "vue";
|
|
74
45
|
|
|
75
46
|
import { ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
|
|
76
|
-
import { useColors } from "@dative-gpi/foundation-shared-components/composables";
|
|
47
|
+
import { useColors, useRules } from "@dative-gpi/foundation-shared-components/composables";
|
|
77
48
|
|
|
78
49
|
import FSTextField from "./FSTextField.vue";
|
|
79
|
-
import FSTagGroup from "
|
|
80
|
-
import FSButton from "
|
|
81
|
-
import FSSpan from "
|
|
82
|
-
import FSCol from "
|
|
83
|
-
import FSRow from "
|
|
50
|
+
import FSTagGroup from "../FSTagGroup.vue";
|
|
51
|
+
import FSButton from "../FSButton.vue";
|
|
52
|
+
import FSSpan from "../FSSpan.vue";
|
|
53
|
+
import FSCol from "../FSCol.vue";
|
|
54
|
+
import FSRow from "../FSRow.vue";
|
|
84
55
|
|
|
85
56
|
export default defineComponent({
|
|
86
57
|
name: "FSTagField",
|
|
@@ -141,10 +112,12 @@ export default defineComponent({
|
|
|
141
112
|
},
|
|
142
113
|
emits: ["update:modelValue"],
|
|
143
114
|
setup(props, { emit }) {
|
|
115
|
+
const {validateOn, blurred, getMessages} = useRules();
|
|
116
|
+
const { getColors } = useColors();
|
|
144
117
|
|
|
145
|
-
const errors =
|
|
146
|
-
const lights =
|
|
147
|
-
const darks =
|
|
118
|
+
const errors = getColors(ColorEnum.Error);
|
|
119
|
+
const lights = getColors(ColorEnum.Light);
|
|
120
|
+
const darks = getColors(ColorEnum.Dark);
|
|
148
121
|
|
|
149
122
|
const innerValue = ref("");
|
|
150
123
|
|
|
@@ -160,16 +133,7 @@ export default defineComponent({
|
|
|
160
133
|
};
|
|
161
134
|
});
|
|
162
135
|
|
|
163
|
-
const messages = computed((): string[] =>
|
|
164
|
-
const messages = [];
|
|
165
|
-
for (const rule of props.rules) {
|
|
166
|
-
const message = rule(props.modelValue);
|
|
167
|
-
if (typeof(message) === "string") {
|
|
168
|
-
messages.push(message);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
return messages;
|
|
172
|
-
});
|
|
136
|
+
const messages = computed((): string[] => getMessages(props.modelValue, props.rules));
|
|
173
137
|
|
|
174
138
|
const onAdd = (): void => {
|
|
175
139
|
if (!props.editable) {
|
|
@@ -197,7 +161,9 @@ export default defineComponent({
|
|
|
197
161
|
return {
|
|
198
162
|
ColorEnum,
|
|
199
163
|
innerValue,
|
|
164
|
+
validateOn,
|
|
200
165
|
messages,
|
|
166
|
+
blurred,
|
|
201
167
|
style,
|
|
202
168
|
onAdd,
|
|
203
169
|
onRemove
|
|
@@ -36,17 +36,19 @@
|
|
|
36
36
|
<v-textarea
|
|
37
37
|
clearIcon="mdi-close"
|
|
38
38
|
variant="outlined"
|
|
39
|
-
hide-details
|
|
40
39
|
:style="style"
|
|
41
40
|
:class="classes"
|
|
42
41
|
:rows="$props.rows"
|
|
43
|
-
:
|
|
42
|
+
:hideDetails="true"
|
|
44
43
|
:noResize="!$props.resize"
|
|
45
44
|
:autoGrow="$props.autoGrow"
|
|
46
45
|
:readonly="!$props.editable"
|
|
47
|
-
:clearable="$props.editable"
|
|
46
|
+
:clearable="$props.editable && !!$props.modelValue"
|
|
47
|
+
:rules="$props.rules"
|
|
48
|
+
:validateOn="validateOn"
|
|
48
49
|
:modelValue="$props.modelValue"
|
|
49
50
|
@update:modelValue="(value) => $emit('update:modelValue', value)"
|
|
51
|
+
@blur="blurred = true"
|
|
50
52
|
v-bind="$attrs"
|
|
51
53
|
>
|
|
52
54
|
<template v-for="(_, name) in $slots" v-slot:[name]="slotData">
|
|
@@ -69,12 +71,12 @@
|
|
|
69
71
|
<script lang="ts">
|
|
70
72
|
import { computed, defineComponent, PropType } from "vue";
|
|
71
73
|
|
|
72
|
-
import { useColors, useBreakpoints } from "@dative-gpi/foundation-shared-components/composables";
|
|
74
|
+
import { useColors, useBreakpoints, useRules } from "@dative-gpi/foundation-shared-components/composables";
|
|
73
75
|
import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
|
|
74
76
|
|
|
75
|
-
import FSSpan from "
|
|
76
|
-
import FSCol from "
|
|
77
|
-
import FSRow from "
|
|
77
|
+
import FSSpan from "../FSSpan.vue";
|
|
78
|
+
import FSCol from "../FSCol.vue";
|
|
79
|
+
import FSRow from "../FSRow.vue";
|
|
78
80
|
|
|
79
81
|
export default defineComponent({
|
|
80
82
|
name: "FSTextArea",
|
|
@@ -83,7 +85,6 @@ export default defineComponent({
|
|
|
83
85
|
FSCol,
|
|
84
86
|
FSRow
|
|
85
87
|
},
|
|
86
|
-
inheritAttrs: false,
|
|
87
88
|
props: {
|
|
88
89
|
label: {
|
|
89
90
|
type: String,
|
|
@@ -100,11 +101,6 @@ export default defineComponent({
|
|
|
100
101
|
required: false,
|
|
101
102
|
default: null
|
|
102
103
|
},
|
|
103
|
-
required: {
|
|
104
|
-
type: Boolean,
|
|
105
|
-
required: false,
|
|
106
|
-
default: false
|
|
107
|
-
},
|
|
108
104
|
rows: {
|
|
109
105
|
type: Number,
|
|
110
106
|
required: false,
|
|
@@ -125,11 +121,21 @@ export default defineComponent({
|
|
|
125
121
|
required: false,
|
|
126
122
|
default: false
|
|
127
123
|
},
|
|
124
|
+
required: {
|
|
125
|
+
type: Boolean,
|
|
126
|
+
required: false,
|
|
127
|
+
default: false
|
|
128
|
+
},
|
|
128
129
|
rules: {
|
|
129
130
|
type: Array as PropType<Function[]>,
|
|
130
131
|
required: false,
|
|
131
132
|
default: () => []
|
|
132
133
|
},
|
|
134
|
+
messages: {
|
|
135
|
+
type: Array as PropType<string[]>,
|
|
136
|
+
required: false,
|
|
137
|
+
default: null
|
|
138
|
+
},
|
|
133
139
|
editable: {
|
|
134
140
|
type: Boolean,
|
|
135
141
|
required: false,
|
|
@@ -138,11 +144,13 @@ export default defineComponent({
|
|
|
138
144
|
},
|
|
139
145
|
emits: ["update:modelValue"],
|
|
140
146
|
setup(props) {
|
|
147
|
+
const { validateOn, blurred, getMessages } = useRules();
|
|
141
148
|
const { isMobileSized } = useBreakpoints();
|
|
149
|
+
const { getColors } = useColors();
|
|
142
150
|
|
|
143
|
-
const errors =
|
|
144
|
-
const lights =
|
|
145
|
-
const darks =
|
|
151
|
+
const errors = getColors(ColorEnum.Error);
|
|
152
|
+
const lights = getColors(ColorEnum.Light);
|
|
153
|
+
const darks = getColors(ColorEnum.Dark);
|
|
146
154
|
|
|
147
155
|
const style = computed((): {[code: string]: string} & Partial<CSSStyleDeclaration> => {
|
|
148
156
|
let height: string | undefined = undefined;
|
|
@@ -180,17 +188,6 @@ export default defineComponent({
|
|
|
180
188
|
};
|
|
181
189
|
});
|
|
182
190
|
|
|
183
|
-
const messages = computed(() => {
|
|
184
|
-
const messages = [];
|
|
185
|
-
for (const rule of props.rules) {
|
|
186
|
-
const message = rule(props.modelValue);
|
|
187
|
-
if (typeof(message) === "string") {
|
|
188
|
-
messages.push(message);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
return messages;
|
|
192
|
-
});
|
|
193
|
-
|
|
194
191
|
const classes = computed((): string[] => {
|
|
195
192
|
const classNames = ["fs-text-area"];
|
|
196
193
|
if (props.autoGrow) {
|
|
@@ -199,8 +196,12 @@ export default defineComponent({
|
|
|
199
196
|
return classNames;
|
|
200
197
|
});
|
|
201
198
|
|
|
199
|
+
const messages = computed((): string[] => props.messages ?? getMessages(props.modelValue, props.rules));
|
|
200
|
+
|
|
202
201
|
return {
|
|
202
|
+
validateOn,
|
|
203
203
|
messages,
|
|
204
|
+
blurred,
|
|
204
205
|
style,
|
|
205
206
|
classes
|
|
206
207
|
};
|
|
@@ -35,14 +35,16 @@
|
|
|
35
35
|
class="fs-text-field"
|
|
36
36
|
clearIcon="mdi-close"
|
|
37
37
|
variant="outlined"
|
|
38
|
-
hide-details
|
|
39
38
|
:style="style"
|
|
40
39
|
:type="$props.type"
|
|
41
|
-
:
|
|
40
|
+
:hideDetails="true"
|
|
42
41
|
:readonly="!$props.editable"
|
|
43
|
-
:clearable="$props.editable"
|
|
42
|
+
:clearable="$props.editable && !!$props.modelValue"
|
|
43
|
+
:rules="$props.rules"
|
|
44
|
+
:validateOn="validateOn"
|
|
44
45
|
:modelValue="$props.modelValue"
|
|
45
46
|
@update:modelValue="(value) => $emit('update:modelValue', value)"
|
|
47
|
+
@blur="blurred = true"
|
|
46
48
|
v-bind="$attrs"
|
|
47
49
|
>
|
|
48
50
|
<template v-for="(_, name) in slots" v-slot:[name]="slotData">
|
|
@@ -65,12 +67,12 @@
|
|
|
65
67
|
<script lang="ts">
|
|
66
68
|
import { computed, defineComponent, PropType } from "vue";
|
|
67
69
|
|
|
68
|
-
import { useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
|
|
70
|
+
import { useColors, useRules, useSlots } from "@dative-gpi/foundation-shared-components/composables";
|
|
69
71
|
import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
|
|
70
72
|
|
|
71
|
-
import FSSpan from "
|
|
72
|
-
import FSCol from "
|
|
73
|
-
import FSRow from "
|
|
73
|
+
import FSSpan from "../FSSpan.vue";
|
|
74
|
+
import FSCol from "../FSCol.vue";
|
|
75
|
+
import FSRow from "../FSRow.vue";
|
|
74
76
|
|
|
75
77
|
export default defineComponent({
|
|
76
78
|
name: "FSTextField",
|
|
@@ -79,7 +81,6 @@ export default defineComponent({
|
|
|
79
81
|
FSCol,
|
|
80
82
|
FSRow
|
|
81
83
|
},
|
|
82
|
-
inheritAttrs: false,
|
|
83
84
|
props: {
|
|
84
85
|
label: {
|
|
85
86
|
type: String,
|
|
@@ -116,6 +117,11 @@ export default defineComponent({
|
|
|
116
117
|
required: false,
|
|
117
118
|
default: () => []
|
|
118
119
|
},
|
|
120
|
+
messages: {
|
|
121
|
+
type: Array as PropType<string[]>,
|
|
122
|
+
required: false,
|
|
123
|
+
default: null
|
|
124
|
+
},
|
|
119
125
|
editable: {
|
|
120
126
|
type: Boolean,
|
|
121
127
|
required: false,
|
|
@@ -124,13 +130,16 @@ export default defineComponent({
|
|
|
124
130
|
},
|
|
125
131
|
emits: ["update:modelValue"],
|
|
126
132
|
setup(props) {
|
|
133
|
+
const { validateOn, blurred, getMessages } = useRules();
|
|
134
|
+
const { getColors } = useColors();
|
|
127
135
|
const { slots } = useSlots();
|
|
136
|
+
|
|
128
137
|
delete slots.label;
|
|
129
138
|
delete slots.description;
|
|
130
139
|
|
|
131
|
-
const errors =
|
|
132
|
-
const lights =
|
|
133
|
-
const darks =
|
|
140
|
+
const errors = getColors(ColorEnum.Error);
|
|
141
|
+
const lights = getColors(ColorEnum.Light);
|
|
142
|
+
const darks = getColors(ColorEnum.Dark);
|
|
134
143
|
|
|
135
144
|
const style = computed((): {[code: string]: string} & Partial<CSSStyleDeclaration> => {
|
|
136
145
|
if (!props.editable) {
|
|
@@ -151,19 +160,12 @@ export default defineComponent({
|
|
|
151
160
|
};
|
|
152
161
|
});
|
|
153
162
|
|
|
154
|
-
const messages = computed((): string[] =>
|
|
155
|
-
const messages = [];
|
|
156
|
-
for (const rule of props.rules) {
|
|
157
|
-
const message = rule(props.modelValue ?? "");
|
|
158
|
-
if (typeof(message) === "string") {
|
|
159
|
-
messages.push(message);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
return messages;
|
|
163
|
-
});
|
|
163
|
+
const messages = computed((): string[] => props.messages ?? getMessages(props.modelValue, props.rules));
|
|
164
164
|
|
|
165
165
|
return {
|
|
166
|
+
validateOn,
|
|
166
167
|
messages,
|
|
168
|
+
blurred,
|
|
167
169
|
slots,
|
|
168
170
|
style
|
|
169
171
|
};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<FSNumberField
|
|
3
|
+
class="fs-time-field"
|
|
4
|
+
:editable="$props.editable"
|
|
5
|
+
:modelValue="innerTime"
|
|
6
|
+
@update:modelValue="onSubmitValue"
|
|
7
|
+
v-bind="$attrs"
|
|
8
|
+
>
|
|
9
|
+
<template #append>
|
|
10
|
+
<FSSelectField
|
|
11
|
+
class="fs-time-field-select"
|
|
12
|
+
:editable="$props.editable"
|
|
13
|
+
:hideHeader="true"
|
|
14
|
+
:clearable="false"
|
|
15
|
+
:items="timeScale"
|
|
16
|
+
:modelValue="selectedUnit.id"
|
|
17
|
+
@update:modelValue="onSubmitTimeScale"
|
|
18
|
+
/>
|
|
19
|
+
</template>
|
|
20
|
+
</FSNumberField>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<script lang="ts">
|
|
24
|
+
import { computed, defineComponent, ref } from "vue";
|
|
25
|
+
|
|
26
|
+
import { getTimeScaleIndex, timeScale } from "@dative-gpi/foundation-shared-components/utils";
|
|
27
|
+
import { useColors } from "@dative-gpi/foundation-shared-components/composables";
|
|
28
|
+
import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
|
|
29
|
+
|
|
30
|
+
import FSNumberField from "./FSNumberField.vue";
|
|
31
|
+
import FSSelectField from "./FSSelectField.vue";
|
|
32
|
+
|
|
33
|
+
export default defineComponent({
|
|
34
|
+
name: "FSTimeField",
|
|
35
|
+
components: {
|
|
36
|
+
FSNumberField,
|
|
37
|
+
FSSelectField
|
|
38
|
+
},
|
|
39
|
+
props: {
|
|
40
|
+
modelValue: {
|
|
41
|
+
type: Number,
|
|
42
|
+
required: false,
|
|
43
|
+
default: null
|
|
44
|
+
},
|
|
45
|
+
editable: {
|
|
46
|
+
type: Boolean,
|
|
47
|
+
required: false,
|
|
48
|
+
default: true
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
emits: ["update:modelValue"],
|
|
52
|
+
setup(props, { emit }) {
|
|
53
|
+
const innerTime = ref(props.modelValue);
|
|
54
|
+
const selectedUnit = ref(timeScale[0]);
|
|
55
|
+
|
|
56
|
+
if (getTimeScaleIndex(props.modelValue) !== 0) {
|
|
57
|
+
selectedUnit.value = timeScale[getTimeScaleIndex(props.modelValue)];
|
|
58
|
+
innerTime.value = props.modelValue / selectedUnit.value.id;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const errors = useColors().getColors(ColorEnum.Error);
|
|
62
|
+
const lights = useColors().getColors(ColorEnum.Light);
|
|
63
|
+
const darks = useColors().getColors(ColorEnum.Dark);
|
|
64
|
+
|
|
65
|
+
const style = computed((): {[code: string]: string} & Partial<CSSStyleDeclaration> => {
|
|
66
|
+
if (!props.editable) {
|
|
67
|
+
return {
|
|
68
|
+
"--fs-time-field-cursor" : "default",
|
|
69
|
+
"--fs-time-field-border-color" : lights.base,
|
|
70
|
+
"--fs-time-field-color" : lights.dark,
|
|
71
|
+
"--fs-time-field-active-border-color": lights.base
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
"--fs-time-field-cursor" : "text",
|
|
76
|
+
"--fs-time-field-border-color" : lights.dark,
|
|
77
|
+
"--fs-time-field-color" : darks.base,
|
|
78
|
+
"--fs-time-field-active-border-color": darks.dark,
|
|
79
|
+
"--fs-time-field-error-color" : errors.base,
|
|
80
|
+
"--fs-time-field-error-border-color" : errors.base
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
const onSubmitValue = (value: number): void => {
|
|
85
|
+
innerTime.value = value;
|
|
86
|
+
emit("update:modelValue", innerTime.value * selectedUnit.value.id);
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const onSubmitTimeScale = (value: number): void => {
|
|
90
|
+
selectedUnit.value = timeScale.find((item) => item.id === value);
|
|
91
|
+
emit("update:modelValue", innerTime.value * selectedUnit.value.id);
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
style,
|
|
96
|
+
innerTime,
|
|
97
|
+
selectedUnit,
|
|
98
|
+
timeScale,
|
|
99
|
+
onSubmitValue,
|
|
100
|
+
onSubmitTimeScale,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
</script>
|