@dative-gpi/foundation-shared-components 0.0.230 → 0.1.68
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/FSAccordionPanel.vue +8 -10
- package/components/FSBadge.vue +2 -4
- package/components/FSBreadcrumbs.vue +9 -10
- package/components/FSButton.vue +81 -31
- package/components/FSCalendar.vue +35 -33
- package/components/FSCalendarTwin.vue +77 -84
- package/components/FSCard.vue +29 -16
- package/components/FSCardPlaceholder.vue +1 -2
- package/components/FSCheckbox.vue +5 -7
- package/components/FSChip.vue +9 -11
- package/components/FSClickable.vue +67 -57
- package/components/FSClock.vue +4 -4
- package/components/FSCol.vue +2 -3
- package/components/FSColor.vue +13 -31
- package/components/FSColorIcon.vue +25 -9
- package/components/FSDialog.vue +1 -2
- package/components/FSDialogFormBody.vue +4 -4
- package/components/FSDialogMenu.vue +2 -4
- package/components/FSDialogMultiFormBody.vue +63 -50
- package/components/FSDialogRemove.vue +1 -0
- package/components/FSDialogSubmit.vue +5 -7
- package/components/FSDivider.vue +7 -9
- package/components/FSEditImage.vue +27 -274
- package/components/FSEditImageUI.vue +303 -0
- package/components/FSErrorToast.vue +3 -4
- package/components/FSFadeOut.vue +18 -13
- package/components/FSGrid.vue +6 -9
- package/components/FSGridMosaic.vue +1 -2
- package/components/FSIcon.vue +7 -8
- package/components/FSIconCard.vue +23 -30
- package/components/FSIconCheck.vue +1 -2
- package/components/FSImage.vue +21 -193
- package/components/FSImageCard.vue +2 -2
- package/components/FSImageUI.vue +212 -0
- package/components/FSLabel.vue +18 -20
- package/components/FSLink.vue +19 -21
- package/components/FSLoader.vue +10 -14
- package/components/FSOptionGroup.vue +58 -12
- package/components/FSPagination.vue +3 -5
- package/components/FSRadio.vue +5 -7
- package/components/FSRadioGroup.vue +2 -4
- package/components/FSRow.vue +3 -4
- package/components/FSSlideGroup.vue +15 -4
- package/components/FSSlider.vue +9 -11
- package/components/FSSpan.vue +11 -9
- package/components/FSSwitch.vue +65 -37
- package/components/FSTab.vue +2 -4
- package/components/FSTabs.vue +35 -13
- package/components/FSTag.vue +23 -14
- package/components/FSTagGroup.vue +3 -5
- package/components/FSText.vue +8 -12
- package/components/FSWindow.vue +10 -3
- package/components/FSWrapGroup.vue +15 -4
- package/components/agenda/FSAgenda.vue +204 -0
- package/components/agenda/FSAgendaDialogCalendar.vue +76 -0
- package/components/agenda/FSAgendaHeader.vue +190 -0
- package/components/agenda/FSAgendaHorizontalEvent.vue +162 -0
- package/components/agenda/FSAgendaHorizontalTimeLineMarker.vue +46 -0
- package/components/agenda/FSAgendaHoursCol.vue +103 -0
- package/components/agenda/FSAgendaHoursRow.vue +124 -0
- package/components/agenda/FSAgendaVerticalEvent.vue +160 -0
- package/components/agenda/FSAgendaVerticalTimeLineMarker.vue +46 -0
- package/components/agenda/FSDayAgenda.vue +200 -0
- package/components/agenda/FSMonthAgenda.vue +257 -0
- package/components/agenda/FSSelectAgendaMode.vue +54 -0
- package/components/agenda/FSWeekAgenda.vue +328 -0
- package/components/autocompletes/FSAutocompleteLanguage.vue +18 -39
- package/components/autocompletes/FSAutocompleteTimeZone.vue +20 -38
- package/components/buttons/FSButtonCancelMini.vue +1 -0
- package/components/buttons/FSButtonCopy.vue +28 -0
- package/components/buttons/FSButtonCopyIcon.vue +28 -0
- package/components/buttons/FSButtonCopyLabel.vue +27 -0
- package/components/buttons/FSButtonCopyMini.vue +28 -0
- package/components/buttons/FSButtonDragIcon.vue +27 -0
- package/components/buttons/FSButtonDuplicateMini.vue +1 -0
- package/components/buttons/FSButtonEditMini.vue +1 -0
- package/components/buttons/FSButtonFileMini.vue +1 -0
- package/components/buttons/FSButtonNextMini.vue +1 -0
- package/components/buttons/FSButtonPreviousMini.vue +1 -0
- package/components/buttons/FSButtonRedoMini.vue +1 -0
- package/components/buttons/FSButtonRemoveMini.vue +1 -0
- package/components/buttons/FSButtonSaveMini.vue +1 -0
- package/components/buttons/FSButtonSearchMini.vue +1 -0
- package/components/buttons/FSButtonUndoMini.vue +1 -0
- package/components/buttons/FSButtonUpdateMini.vue +1 -0
- package/components/buttons/FSButtonValidateMini.vue +1 -0
- package/components/deviceOrganisations/FSConnectivity.vue +11 -1
- package/components/deviceOrganisations/FSConnectivityCard.vue +20 -49
- package/components/deviceOrganisations/FSStatus.vue +11 -1
- package/components/deviceOrganisations/FSStatusCard.vue +40 -60
- package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
- package/components/deviceOrganisations/FSStatusesRow.vue +10 -5
- package/components/deviceOrganisations/FSWorstAlert.vue +19 -13
- package/components/deviceOrganisations/FSWorstAlertCard.vue +36 -47
- package/components/fields/FSAutocompleteField.vue +501 -323
- package/components/fields/FSAutocompleteTag.vue +100 -0
- package/components/fields/FSBaseField.vue +26 -16
- package/components/fields/FSColorField.vue +63 -55
- package/components/fields/FSCommentField.vue +93 -0
- package/components/fields/FSDateField.vue +2 -2
- package/components/fields/FSDateRangeField.vue +2 -2
- package/components/fields/FSDateTimeField.vue +4 -3
- package/components/fields/FSDateTimeRangeField.vue +7 -6
- package/components/fields/FSEntityFieldUI.vue +271 -0
- package/components/fields/FSGradientField.vue +27 -33
- package/components/fields/FSIconField.vue +2 -3
- package/components/fields/FSMagicConfigField.vue +28 -19
- package/components/fields/FSMagicField.vue +25 -17
- package/components/fields/FSNumberField.vue +9 -7
- package/components/fields/FSPasswordField.vue +2 -3
- package/components/fields/FSRichTextField.vue +32 -5
- package/components/fields/FSSearchField.vue +2 -2
- package/components/fields/FSSelectField.vue +483 -251
- package/components/fields/FSTagField.vue +4 -6
- package/components/fields/FSTermField.vue +25 -13
- package/components/fields/FSTextArea.vue +18 -6
- package/components/fields/FSTextField.vue +13 -10
- package/components/fields/FSTimeField.vue +1 -1
- package/components/fields/FSTimeSlotField.vue +3 -4
- package/components/fields/FSTimeStepField.vue +157 -0
- package/components/fields/FSTranslateField.vue +3 -2
- package/components/fields/FSTranslateRichTextField.vue +4 -3
- package/components/fields/FSTranslateTextArea.vue +233 -0
- package/components/fields/FSTreeViewField.vue +7 -9
- package/components/fields/periodicField/FSPeriodicDailyField.vue +120 -0
- package/components/fields/periodicField/FSPeriodicField.vue +131 -0
- package/components/fields/periodicField/FSPeriodicMonthlyField.vue +222 -0
- package/components/fields/periodicField/FSPeriodicWeeklyField.vue +120 -0
- package/components/fields/periodicField/FSPeriodicYearlyField.vue +144 -0
- package/components/lists/FSDataIteratorItem.vue +8 -10
- package/components/lists/FSDataTableUI.vue +47 -39
- package/components/lists/FSFilterButton.vue +20 -22
- package/components/lists/FSHiddenButton.vue +10 -12
- package/components/lists/FSLoadDataTable.vue +4 -6
- package/components/lists/FSSimpleList.vue +229 -0
- package/components/map/FSMap.vue +256 -405
- package/components/map/FSMapFeatureGroup.vue +51 -0
- package/components/map/FSMapLayerButton.vue +6 -3
- package/components/map/FSMapMarker.vue +116 -0
- package/components/map/FSMapMarkerClusterGroup.vue +72 -0
- package/components/map/FSMapOverlay.vue +69 -83
- package/components/map/FSMapPolygon.vue +81 -0
- package/components/map/FSMapTileLayer.vue +50 -0
- package/components/map/keys.ts +4 -0
- package/components/selects/FSSelectAutoRefresh.vue +1 -1
- package/components/selects/FSSelectDashboardVariableType.vue +1 -1
- package/components/selects/FSSelectDateSetting.vue +3 -3
- package/components/selects/FSSelectDays.vue +1 -1
- package/components/selects/FSSelectListMode.vue +51 -0
- package/components/selects/FSSelectMonths.vue +67 -0
- package/components/tiles/FSChartTileUI.vue +116 -0
- package/components/tiles/FSCommentTileUI.vue +149 -0
- package/components/tiles/FSDashboardOrganisationTileUI.vue +6 -8
- package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +6 -8
- package/components/tiles/FSDashboardShallowTileUI.vue +6 -8
- package/components/tiles/FSDeviceOrganisationTileUI.vue +30 -18
- package/components/tiles/FSFolderTileUI.vue +6 -6
- package/components/tiles/FSGroupTileUI.vue +31 -22
- package/components/tiles/FSLoadTile.vue +5 -7
- package/components/tiles/FSLocationTileUI.vue +157 -0
- package/components/tiles/FSModelTileUI.vue +18 -0
- package/components/tiles/FSServiceAccountOrganisationTileUI.vue +142 -0
- package/components/tiles/FSSimpleTileUI.vue +57 -36
- package/components/tiles/FSTile.vue +115 -55
- package/components/tiles/FSUserOrganisationTileUI.vue +25 -35
- package/components/toggleSets/FSToggleSetPosition.vue +1 -1
- package/components/views/FSEntityHeader.vue +343 -0
- package/components/views/FSEntityView.vue +163 -0
- package/components/views/FSListHeader.vue +83 -0
- package/components/views/FSListView.vue +83 -0
- package/components/views/FSSkeletonView.vue +100 -0
- package/composables/useAddress.ts +2 -2
- package/composables/useColors.ts +15 -5
- package/composables/useMagicFieldProvider.ts +7 -6
- package/composables/useSlots.ts +34 -30
- package/models/agenda.ts +9 -0
- package/models/deviceAlerts.ts +1 -1
- package/models/deviceConnectivities.ts +1 -1
- package/models/index.ts +1 -0
- package/models/magicFields.ts +1 -0
- package/models/map.ts +2 -2
- package/models/rules.ts +10 -5
- package/models/tables.ts +3 -1
- package/package.json +4 -4
- package/styles/components/fs_agenda.scss +32 -0
- package/styles/components/fs_agenda_event.scss +41 -0
- package/styles/components/fs_agenda_hours_col.scss +4 -0
- package/styles/components/fs_agenda_hours_row.scss +13 -0
- package/styles/components/fs_agenda_time_line_marker.scss +19 -0
- package/styles/components/fs_card.scss +0 -1
- package/styles/components/fs_clickable.scss +5 -3
- package/styles/components/fs_color_field.scss +1 -0
- package/styles/components/fs_data_table.scss +2 -0
- package/styles/components/fs_dialog.scss +11 -15
- package/styles/components/fs_edit_image.scss +8 -0
- package/styles/components/fs_fade_out.scss +2 -1
- package/styles/components/fs_filter_button.scss +1 -6
- package/styles/components/fs_gradient_field.scss +11 -11
- package/styles/components/fs_magic_config_field.scss +2 -2
- package/styles/components/fs_map.scss +36 -30
- package/styles/components/fs_option_group.scss +15 -5
- package/styles/components/fs_radio.scss +11 -0
- package/styles/components/fs_rich_text_field.scss +2 -1
- package/styles/components/fs_search_field.scss +3 -0
- package/styles/components/fs_select_date_settings.scss +3 -0
- package/styles/components/fs_slide_group.scss +5 -0
- package/styles/components/fs_span.scss +2 -1
- package/styles/components/fs_switch.scss +1 -0
- package/styles/components/fs_tabs.scss +9 -0
- package/styles/components/fs_text_area.scss +15 -1
- package/styles/components/fs_tile.scss +22 -6
- package/styles/components/fs_window.scss +5 -0
- package/styles/components/fs_wrap_group.scss +4 -0
- package/styles/components/index.scss +6 -1
- package/styles/globals/overrides.scss +22 -19
- package/styles/globals/text_fonts.scss +17 -55
- package/tools/alertsTools.ts +54 -0
- package/tools/chartsTools.ts +300 -0
- package/tools/index.ts +2 -0
- package/utils/badge.ts +9 -0
- package/utils/filter.ts +18 -0
- package/utils/index.ts +2 -0
- package/utils/leafletMarkers.ts +8 -2
- package/utils/statuses.ts +1 -1
- package/utils/time.ts +27 -1
- package/components/autocompletes/FSAutocompleteTag.vue +0 -138
- package/components/map/FSMapEditPointAddressOverlay.vue +0 -164
- package/styles/components/fs_map_overlay.scss +0 -38
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<FSBaseField
|
|
3
|
+
:description="$props.description"
|
|
4
|
+
:hideHeader="$props.hideHeader"
|
|
5
|
+
:required="$props.required"
|
|
6
|
+
:editable="$props.editable"
|
|
7
|
+
:label="$props.label"
|
|
8
|
+
:messages="messages"
|
|
9
|
+
>
|
|
10
|
+
<FSCol
|
|
11
|
+
gap="12px"
|
|
12
|
+
>
|
|
13
|
+
<FSRow
|
|
14
|
+
:wrap="false"
|
|
15
|
+
>
|
|
16
|
+
<FSSelectField
|
|
17
|
+
:hideHeader="true"
|
|
18
|
+
:modelValue="$props.entityType"
|
|
19
|
+
@update:modelValue="$emit('update:entityType', $event)"
|
|
20
|
+
:items="actualEntityTypes"
|
|
21
|
+
:clearable="false"
|
|
22
|
+
/>
|
|
23
|
+
<template
|
|
24
|
+
v-if="itemsCount > 0"
|
|
25
|
+
>
|
|
26
|
+
<FSButton
|
|
27
|
+
:label="$tr('ui.entity-field.edit', 'Edit')"
|
|
28
|
+
icon="mdi-pencil"
|
|
29
|
+
@click="$emit('click:select')"
|
|
30
|
+
/>
|
|
31
|
+
</template>
|
|
32
|
+
<template
|
|
33
|
+
v-else
|
|
34
|
+
>
|
|
35
|
+
<FSButton
|
|
36
|
+
:label="$tr('ui.entity-field.select', 'Select')"
|
|
37
|
+
icon="mdi-plus-circle-multiple-outline"
|
|
38
|
+
@click="$emit('click:select')"
|
|
39
|
+
/>
|
|
40
|
+
</template>
|
|
41
|
+
</FSRow>
|
|
42
|
+
<FSRow
|
|
43
|
+
v-if="$props.showCount"
|
|
44
|
+
>
|
|
45
|
+
<template
|
|
46
|
+
v-if="itemsCount > 0"
|
|
47
|
+
>
|
|
48
|
+
<FSColor
|
|
49
|
+
:color="ColorEnum.Primary"
|
|
50
|
+
:border="false"
|
|
51
|
+
width="100%"
|
|
52
|
+
>
|
|
53
|
+
<FSRow
|
|
54
|
+
padding="4px"
|
|
55
|
+
align="center-center"
|
|
56
|
+
>
|
|
57
|
+
<FSIcon
|
|
58
|
+
:icon="entityIcon"
|
|
59
|
+
/>
|
|
60
|
+
<FSSpan
|
|
61
|
+
font="text-overline"
|
|
62
|
+
>
|
|
63
|
+
{{ $tr('ui.entity-field.selected', '{0} selected(s)', itemsCount) }}
|
|
64
|
+
</FSSpan>
|
|
65
|
+
</FSRow>
|
|
66
|
+
</FSColor>
|
|
67
|
+
</template>
|
|
68
|
+
|
|
69
|
+
<template
|
|
70
|
+
v-else
|
|
71
|
+
>
|
|
72
|
+
<FSColor
|
|
73
|
+
:color="ColorEnum.Light"
|
|
74
|
+
:border="false"
|
|
75
|
+
width="100%"
|
|
76
|
+
>
|
|
77
|
+
<FSRow
|
|
78
|
+
padding="4px"
|
|
79
|
+
align="center-center"
|
|
80
|
+
>
|
|
81
|
+
<FSIcon
|
|
82
|
+
:icon="entityIcon"
|
|
83
|
+
/>
|
|
84
|
+
<FSSpan
|
|
85
|
+
font="text-overline"
|
|
86
|
+
>
|
|
87
|
+
{{ $tr('ui.entity-field.no-entity-selected', 'No entity selected') }}
|
|
88
|
+
</FSSpan>
|
|
89
|
+
</FSRow>
|
|
90
|
+
</FSColor>
|
|
91
|
+
</template>
|
|
92
|
+
</FSRow>
|
|
93
|
+
|
|
94
|
+
<FSFadeOut
|
|
95
|
+
v-if="$props.showEntities && itemsCount > 0"
|
|
96
|
+
:maxHeight="$props.listMaxHeight"
|
|
97
|
+
width="100%"
|
|
98
|
+
>
|
|
99
|
+
<slot
|
|
100
|
+
name="items"
|
|
101
|
+
/>
|
|
102
|
+
</FSFadeOut>
|
|
103
|
+
</FSCol>
|
|
104
|
+
</FSBaseField>
|
|
105
|
+
</template>
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
<script lang="ts">
|
|
109
|
+
import { computed, defineComponent, type PropType } from "vue";
|
|
110
|
+
|
|
111
|
+
import { EntityType } from "@dative-gpi/foundation-shared-domain/enums";
|
|
112
|
+
import { ColorEnum } from "../../models";
|
|
113
|
+
import { useTranslations } from "@dative-gpi/bones-ui";
|
|
114
|
+
|
|
115
|
+
import FSRow from "../FSRow.vue";
|
|
116
|
+
import FSCol from "../FSCol.vue";
|
|
117
|
+
import FSBaseField from "./FSBaseField.vue";
|
|
118
|
+
import FSSelectField from "./FSSelectField.vue";
|
|
119
|
+
import FSButton from "../FSButton.vue";
|
|
120
|
+
import FSIcon from "../FSIcon.vue";
|
|
121
|
+
import FSColor from "../FSColor.vue";
|
|
122
|
+
|
|
123
|
+
export default defineComponent({
|
|
124
|
+
name: "FSEntityFieldUI",
|
|
125
|
+
components: {
|
|
126
|
+
FSBaseField,
|
|
127
|
+
FSSelectField,
|
|
128
|
+
FSButton,
|
|
129
|
+
FSIcon,
|
|
130
|
+
FSColor,
|
|
131
|
+
FSRow,
|
|
132
|
+
FSCol
|
|
133
|
+
},
|
|
134
|
+
props: {
|
|
135
|
+
label: {
|
|
136
|
+
type: String as PropType<string | null>,
|
|
137
|
+
required: false,
|
|
138
|
+
default: null
|
|
139
|
+
},
|
|
140
|
+
description: {
|
|
141
|
+
type: String as PropType<string | null>,
|
|
142
|
+
required: false,
|
|
143
|
+
default: null
|
|
144
|
+
},
|
|
145
|
+
itemsCount: {
|
|
146
|
+
type: Number,
|
|
147
|
+
required: false,
|
|
148
|
+
default: 0
|
|
149
|
+
},
|
|
150
|
+
hideHeader: {
|
|
151
|
+
type: Boolean,
|
|
152
|
+
required: false,
|
|
153
|
+
default: false
|
|
154
|
+
},
|
|
155
|
+
required: {
|
|
156
|
+
type: Boolean,
|
|
157
|
+
required: false,
|
|
158
|
+
default: false
|
|
159
|
+
},
|
|
160
|
+
rules: {
|
|
161
|
+
type: Array as PropType<any[]>,
|
|
162
|
+
required: false,
|
|
163
|
+
default: () => []
|
|
164
|
+
},
|
|
165
|
+
messages: {
|
|
166
|
+
type: Array as PropType<string[]>,
|
|
167
|
+
required: false,
|
|
168
|
+
default: null
|
|
169
|
+
},
|
|
170
|
+
editable: {
|
|
171
|
+
type: Boolean,
|
|
172
|
+
required: false,
|
|
173
|
+
default: true
|
|
174
|
+
},
|
|
175
|
+
entityType: {
|
|
176
|
+
type: Number as PropType<EntityType>,
|
|
177
|
+
required: true
|
|
178
|
+
},
|
|
179
|
+
allowedEntityTypes: {
|
|
180
|
+
type: Array as PropType<EntityType[]>,
|
|
181
|
+
required: false,
|
|
182
|
+
default: () => []
|
|
183
|
+
},
|
|
184
|
+
showEntities: {
|
|
185
|
+
type: Boolean,
|
|
186
|
+
required: false,
|
|
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"
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
emits: ["update:entityType", "click:select"],
|
|
201
|
+
setup(props) {
|
|
202
|
+
const { $tr } = useTranslations();
|
|
203
|
+
|
|
204
|
+
const actualEntityTypes = computed(() => {
|
|
205
|
+
const items = [
|
|
206
|
+
{
|
|
207
|
+
id: EntityType.Model,
|
|
208
|
+
label: $tr("ui.entity-type.models", "Models")
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
id: EntityType.Group,
|
|
212
|
+
label: $tr("ui.entity-type.groups", "Groups")
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
id: EntityType.Location,
|
|
216
|
+
label: $tr("ui.entity-type.locations", "Locations")
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
id: EntityType.Device,
|
|
220
|
+
label: $tr("ui.entity-type.devices", "Devices")
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
id: EntityType.User,
|
|
224
|
+
label: $tr("ui.entity-type.users", "Users")
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
id: EntityType.Dashboard,
|
|
228
|
+
label: $tr("ui.entity-type.dashboards", "Dashboards")
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
id: EntityType.Folder,
|
|
232
|
+
label: $tr("ui.entity-type.folders", "Folders")
|
|
233
|
+
}
|
|
234
|
+
];
|
|
235
|
+
|
|
236
|
+
if(props.allowedEntityTypes.length) {
|
|
237
|
+
return items.filter(item => props.allowedEntityTypes.includes(item.id));
|
|
238
|
+
} else {
|
|
239
|
+
return items;
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
const entityIcon = computed(() => {
|
|
244
|
+
switch(props.entityType) {
|
|
245
|
+
case EntityType.Model:
|
|
246
|
+
return "mdi-cube";
|
|
247
|
+
case EntityType.Group:
|
|
248
|
+
return "mdi-account-group";
|
|
249
|
+
case EntityType.Location:
|
|
250
|
+
return "mdi-map-marker";
|
|
251
|
+
case EntityType.Device:
|
|
252
|
+
return "mdi-cellphone";
|
|
253
|
+
case EntityType.User:
|
|
254
|
+
return "mdi-account";
|
|
255
|
+
case EntityType.Dashboard:
|
|
256
|
+
return "mdi-view-dashboard";
|
|
257
|
+
case EntityType.Folder:
|
|
258
|
+
return "mdi-folder";
|
|
259
|
+
default:
|
|
260
|
+
return "mdi-cube";
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
return {
|
|
265
|
+
ColorEnum,
|
|
266
|
+
entityIcon,
|
|
267
|
+
actualEntityTypes
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
</script>
|
|
@@ -21,44 +21,25 @@
|
|
|
21
21
|
/>
|
|
22
22
|
</FSRow>
|
|
23
23
|
<FSSelectField
|
|
24
|
-
class="fs-gradient-select
|
|
25
|
-
:clearable="false"
|
|
24
|
+
class="fs-gradient-field-select"
|
|
26
25
|
:editable="$props.editable"
|
|
26
|
+
:clearable="false"
|
|
27
27
|
:items="items"
|
|
28
|
-
|
|
29
|
-
@update:modelValue="$emit('update:modelValue',
|
|
28
|
+
modelValue="custom"
|
|
29
|
+
@update:modelValue="$emit('update:modelValue', allGradients[$event])"
|
|
30
30
|
>
|
|
31
31
|
<template
|
|
32
|
-
|
|
32
|
+
#item-prepend="{ item }"
|
|
33
33
|
>
|
|
34
34
|
<FSRow
|
|
35
35
|
class="fs-gradient-field-preview"
|
|
36
|
-
|
|
36
|
+
align="center-center"
|
|
37
|
+
height="12px"
|
|
37
38
|
width="100%"
|
|
38
|
-
:style="{
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
</template>
|
|
43
|
-
<template
|
|
44
|
-
v-slot:item="{ item, props }"
|
|
45
|
-
>
|
|
46
|
-
<v-list-item
|
|
47
|
-
v-bind="props"
|
|
48
|
-
>
|
|
49
|
-
<template
|
|
50
|
-
#title
|
|
51
|
-
>
|
|
52
|
-
<FSRow
|
|
53
|
-
class="fs-gradient-field-preview"
|
|
54
|
-
height="fill"
|
|
55
|
-
width="100%"
|
|
56
|
-
:style="{ '--fs-gradient-field-background': `linear-gradient(to right, ${encodeGradientCssColors(presetGradients[item.value])})` }"
|
|
57
|
-
>
|
|
58
|
-
<span />
|
|
59
|
-
</FSRow>
|
|
60
|
-
</template>
|
|
61
|
-
</v-list-item>
|
|
39
|
+
:style="{
|
|
40
|
+
'--fs-gradient-field-background': `linear-gradient(to right, ${encodeGradientCssColors(allGradients[item.id])})`
|
|
41
|
+
}"
|
|
42
|
+
/>
|
|
62
43
|
</template>
|
|
63
44
|
</FSSelectField>
|
|
64
45
|
</FSBaseField>
|
|
@@ -66,7 +47,7 @@
|
|
|
66
47
|
</template>
|
|
67
48
|
|
|
68
49
|
<script lang="ts">
|
|
69
|
-
import { type PropType, defineComponent } from "vue";
|
|
50
|
+
import { type PropType, defineComponent, computed } from "vue";
|
|
70
51
|
|
|
71
52
|
import { groupedGradients } from "../../utils";
|
|
72
53
|
import { useColors } from "../../composables";
|
|
@@ -127,14 +108,27 @@ export default defineComponent({
|
|
|
127
108
|
const { getColors } = useColors();
|
|
128
109
|
|
|
129
110
|
const presetGradients = groupedGradients[props.colorCount];
|
|
130
|
-
|
|
111
|
+
|
|
112
|
+
const allGradients = computed<Record<string, string[]>>(() => {
|
|
113
|
+
return {
|
|
114
|
+
'custom': [
|
|
115
|
+
...props.modelValue
|
|
116
|
+
],
|
|
117
|
+
...presetGradients
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
const items = Object.keys(allGradients.value).map((key) => ({
|
|
122
|
+
id: key,
|
|
123
|
+
label: null
|
|
124
|
+
}));
|
|
131
125
|
|
|
132
126
|
const encodeGradientCssColors = (colors: string[]) => {
|
|
133
127
|
return colors.map((color) => getColors(color).base).join(", ");
|
|
134
128
|
};
|
|
135
129
|
|
|
136
130
|
return {
|
|
137
|
-
|
|
131
|
+
allGradients,
|
|
138
132
|
items,
|
|
139
133
|
encodeGradientCssColors
|
|
140
134
|
};
|
|
@@ -48,8 +48,7 @@ import { computed, defineComponent, ref, watch } from "vue";
|
|
|
48
48
|
|
|
49
49
|
import { Icons, sortByLevenshteinDistance } from "@dative-gpi/foundation-shared-components/utils";
|
|
50
50
|
import { useColors, useRules } from "@dative-gpi/foundation-shared-components/composables";
|
|
51
|
-
import type
|
|
52
|
-
import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
|
|
51
|
+
import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
|
|
53
52
|
import type { FSToggle } from "@dative-gpi/foundation-shared-components/models";
|
|
54
53
|
|
|
55
54
|
import FSToggleSet from "../FSToggleSet.vue";
|
|
@@ -139,7 +138,7 @@ export default defineComponent({
|
|
|
139
138
|
const toggleSetRef = ref<HTMLElement | null>(null);
|
|
140
139
|
const innerValue = ref<string | null>(null);
|
|
141
140
|
|
|
142
|
-
const style = computed(():
|
|
141
|
+
const style = computed((): StyleValue => {
|
|
143
142
|
if (!props.editable) {
|
|
144
143
|
return {
|
|
145
144
|
"--fs-icon-field-color": lights.dark
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<FSRow
|
|
2
|
+
<FSRow
|
|
3
|
+
class="fs-magic-config-field"
|
|
4
|
+
>
|
|
3
5
|
<component
|
|
4
6
|
class="fs-magic-config-field-value"
|
|
5
7
|
:is="get($props.type)"
|
|
@@ -38,10 +40,9 @@
|
|
|
38
40
|
</template>
|
|
39
41
|
|
|
40
42
|
<script lang="ts">
|
|
41
|
-
import type
|
|
42
|
-
import { computed, defineComponent } from "vue";
|
|
43
|
+
import { computed, defineComponent, type PropType } from "vue";
|
|
43
44
|
|
|
44
|
-
import { DateRules, IconRules, NumberRules, TextRules, TimeRules } from "../../models";
|
|
45
|
+
import { DateRules, IconRules, NumberRules, TextRules, TimeRules, TimeStepRules } from "../../models";
|
|
45
46
|
import { useMagicFieldProvider } from "../../composables";
|
|
46
47
|
import { MagicFieldType } from "../../models/magicFields";
|
|
47
48
|
|
|
@@ -69,7 +70,7 @@ export default defineComponent({
|
|
|
69
70
|
required: false,
|
|
70
71
|
default: null
|
|
71
72
|
},
|
|
72
|
-
|
|
73
|
+
modelValue: {
|
|
73
74
|
type: String as PropType<string | null>,
|
|
74
75
|
required: false,
|
|
75
76
|
default: null
|
|
@@ -85,7 +86,7 @@ export default defineComponent({
|
|
|
85
86
|
default: true
|
|
86
87
|
}
|
|
87
88
|
},
|
|
88
|
-
emits: ["click:remove", "click:add", "update:
|
|
89
|
+
emits: ["click:remove", "click:add", "update:modelValue", "update:labelDefault", "update:translations"],
|
|
89
90
|
setup(props, { emit }) {
|
|
90
91
|
const { get } = useMagicFieldProvider();
|
|
91
92
|
|
|
@@ -101,43 +102,51 @@ export default defineComponent({
|
|
|
101
102
|
return [IconRules.required()];
|
|
102
103
|
case MagicFieldType.TimeField:
|
|
103
104
|
return [TimeRules.required()];
|
|
105
|
+
case MagicFieldType.TimeStepField:
|
|
106
|
+
return [TimeStepRules.required()];
|
|
104
107
|
}
|
|
105
108
|
return [];
|
|
106
109
|
});
|
|
107
110
|
|
|
108
111
|
const valueToInput = computed((): any => {
|
|
112
|
+
if (!props.modelValue) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
|
|
109
116
|
switch (props.type) {
|
|
110
117
|
case MagicFieldType.NumberField:
|
|
111
118
|
case MagicFieldType.DateTimeField:
|
|
112
119
|
case MagicFieldType.TimeField:
|
|
113
|
-
if (
|
|
120
|
+
if (isNaN(parseFloat(props.modelValue))) {
|
|
114
121
|
return null;
|
|
115
122
|
}
|
|
116
|
-
return parseFloat(props.
|
|
123
|
+
return parseFloat(props.modelValue);
|
|
117
124
|
case MagicFieldType.Switch:
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
return props.value === "true";
|
|
125
|
+
return props.modelValue === "true";
|
|
126
|
+
case MagicFieldType.TimeStepField:
|
|
127
|
+
return JSON.parse(props.modelValue);
|
|
122
128
|
default:
|
|
123
|
-
return props.
|
|
129
|
+
return props.modelValue;
|
|
124
130
|
}
|
|
125
131
|
});
|
|
126
132
|
|
|
127
133
|
const inputToValue = (value: any) => {
|
|
134
|
+
if (!value) {
|
|
135
|
+
emit("update:modelValue", null);
|
|
136
|
+
}
|
|
137
|
+
|
|
128
138
|
switch (props.type) {
|
|
129
139
|
case MagicFieldType.NumberField:
|
|
130
140
|
case MagicFieldType.Switch:
|
|
131
141
|
case MagicFieldType.DateTimeField:
|
|
132
142
|
case MagicFieldType.TimeField:
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
emit("update:value", value.toString());
|
|
143
|
+
emit("update:modelValue", value.toString());
|
|
144
|
+
break;
|
|
145
|
+
case MagicFieldType.TimeStepField:
|
|
146
|
+
emit("update:modelValue", JSON.stringify(value));
|
|
138
147
|
break;
|
|
139
148
|
default:
|
|
140
|
-
emit("update:
|
|
149
|
+
emit("update:modelValue", value);
|
|
141
150
|
break;
|
|
142
151
|
}
|
|
143
152
|
};
|
|
@@ -58,16 +58,15 @@
|
|
|
58
58
|
</template>
|
|
59
59
|
|
|
60
60
|
<script lang="ts">
|
|
61
|
-
import type
|
|
62
|
-
import { computed, defineComponent } from "vue";
|
|
61
|
+
import { computed, defineComponent, type PropType } from "vue";
|
|
63
62
|
|
|
64
63
|
import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
|
|
65
64
|
|
|
66
|
-
import {
|
|
65
|
+
import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
|
|
67
66
|
|
|
68
67
|
import { useMagicFieldProvider } from "../../composables";
|
|
69
68
|
import { MagicFieldType } from "../../models/magicFields";
|
|
70
|
-
import { getTimeBestString } from "../../utils";
|
|
69
|
+
import { getTimeBestString, timeStepToString } from "../../utils";
|
|
71
70
|
|
|
72
71
|
import FSSelectField from "./FSSelectField.vue";
|
|
73
72
|
import FSIcon from "../FSIcon.vue";
|
|
@@ -106,7 +105,7 @@ export default defineComponent({
|
|
|
106
105
|
},
|
|
107
106
|
emits: ["update:modelValue"],
|
|
108
107
|
setup(props, { emit }) {
|
|
109
|
-
const { epochToShortTimeFormat } =
|
|
108
|
+
const { epochToShortTimeFormat } = useDateFormat();
|
|
110
109
|
const { $tr } = useTranslationsProvider();
|
|
111
110
|
const { get } = useMagicFieldProvider();
|
|
112
111
|
|
|
@@ -116,28 +115,32 @@ export default defineComponent({
|
|
|
116
115
|
})));
|
|
117
116
|
|
|
118
117
|
const valueToInput = computed((): any => {
|
|
118
|
+
if (props.modelValue == null) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
|
|
119
122
|
switch (props.type) {
|
|
120
123
|
case MagicFieldType.NumberField:
|
|
121
124
|
case MagicFieldType.DateTimeField:
|
|
122
125
|
case MagicFieldType.TimeField:
|
|
123
|
-
if (
|
|
126
|
+
if (isNaN(parseFloat(props.modelValue))) {
|
|
124
127
|
return null;
|
|
125
128
|
}
|
|
126
129
|
return parseFloat(props.modelValue);
|
|
127
130
|
case MagicFieldType.Switch:
|
|
128
|
-
if (props.modelValue == null) {
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
131
|
return props.modelValue === "true";
|
|
132
|
+
case MagicFieldType.TimeStepField:
|
|
133
|
+
return JSON.parse(props.modelValue);
|
|
132
134
|
default:
|
|
133
135
|
return props.modelValue;
|
|
134
136
|
}
|
|
135
137
|
});
|
|
136
138
|
|
|
137
|
-
const asString = (value:
|
|
139
|
+
const asString = (value: string): string | null => {
|
|
138
140
|
if (value == null) {
|
|
139
|
-
return
|
|
141
|
+
return "";
|
|
140
142
|
}
|
|
143
|
+
|
|
141
144
|
switch (props.type) {
|
|
142
145
|
case MagicFieldType.NumberField:
|
|
143
146
|
return value.toString();
|
|
@@ -147,26 +150,31 @@ export default defineComponent({
|
|
|
147
150
|
}
|
|
148
151
|
return $tr("ui.magic-field.false", "False");
|
|
149
152
|
case MagicFieldType.DateTimeField:
|
|
150
|
-
return epochToShortTimeFormat(value);
|
|
153
|
+
return epochToShortTimeFormat(parseFloat(value));
|
|
151
154
|
case MagicFieldType.TimeField:
|
|
152
|
-
return getTimeBestString(value);
|
|
155
|
+
return getTimeBestString(parseFloat(value));
|
|
156
|
+
case MagicFieldType.TimeStepField:
|
|
157
|
+
return timeStepToString(JSON.parse(value));
|
|
153
158
|
default:
|
|
154
159
|
return value;
|
|
155
160
|
}
|
|
156
161
|
}
|
|
157
162
|
|
|
158
163
|
const inputToValue = (value: any) => {
|
|
164
|
+
if (value == null) {
|
|
165
|
+
emit("update:modelValue", null);
|
|
166
|
+
}
|
|
167
|
+
|
|
159
168
|
switch (props.type) {
|
|
160
169
|
case MagicFieldType.NumberField:
|
|
161
170
|
case MagicFieldType.Switch:
|
|
162
171
|
case MagicFieldType.DateTimeField:
|
|
163
172
|
case MagicFieldType.TimeField:
|
|
164
|
-
if (value == null) {
|
|
165
|
-
emit("update:modelValue", null);
|
|
166
|
-
break;
|
|
167
|
-
}
|
|
168
173
|
emit("update:modelValue", value.toString());
|
|
169
174
|
break;
|
|
175
|
+
case MagicFieldType.TimeStepField:
|
|
176
|
+
emit("update:modelValue", JSON.stringify(value));
|
|
177
|
+
break;
|
|
170
178
|
default:
|
|
171
179
|
emit("update:modelValue", value);
|
|
172
180
|
break;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<FSTextField
|
|
3
3
|
class="fs-number-field"
|
|
4
|
+
minWidth="80px"
|
|
4
5
|
:editable="$props.editable"
|
|
5
6
|
:modelValue="$props.modelValue?.toString()"
|
|
6
7
|
@update:modelValue="onUpdate"
|
|
@@ -19,8 +20,7 @@
|
|
|
19
20
|
</template>
|
|
20
21
|
|
|
21
22
|
<script lang="ts">
|
|
22
|
-
import type
|
|
23
|
-
import { defineComponent } from "vue";
|
|
23
|
+
import { defineComponent, type PropType } from "vue";
|
|
24
24
|
|
|
25
25
|
import FSTextField from "./FSTextField.vue";
|
|
26
26
|
|
|
@@ -44,13 +44,15 @@ export default defineComponent({
|
|
|
44
44
|
emits: ["update:modelValue"],
|
|
45
45
|
setup(_, { emit }) {
|
|
46
46
|
const onUpdate = (value: string) => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
emit("update:modelValue", parseFloat(match[0].replace(",", ".").replace(" ", "")));
|
|
47
|
+
if (value === "-") {
|
|
48
|
+
return;
|
|
50
49
|
}
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
const match = /[-]?([0-9 ]*[,.]?)?[0-9]*/.exec(value);
|
|
51
|
+
if (match != null && !isNaN(parseFloat(match[0].replace(",", ".").replace(" ", "")))) {
|
|
52
|
+
emit("update:modelValue", parseFloat(match[0].replace(",", ".").replace(" ", "")));
|
|
53
|
+
return;
|
|
53
54
|
}
|
|
55
|
+
emit("update:modelValue", 0);
|
|
54
56
|
};
|
|
55
57
|
|
|
56
58
|
return {
|
|
@@ -33,8 +33,7 @@
|
|
|
33
33
|
</template>
|
|
34
34
|
|
|
35
35
|
<script lang="ts">
|
|
36
|
-
import type
|
|
37
|
-
import { computed, defineComponent, ref } from "vue";
|
|
36
|
+
import { computed, defineComponent, type PropType, ref } from "vue";
|
|
38
37
|
|
|
39
38
|
import { useColors } from "@dative-gpi/foundation-shared-components/composables";
|
|
40
39
|
import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
|
|
@@ -69,7 +68,7 @@ export default defineComponent({
|
|
|
69
68
|
|
|
70
69
|
const stars = ref(true);
|
|
71
70
|
|
|
72
|
-
const style = computed(():
|
|
71
|
+
const style = computed((): StyleValue => {
|
|
73
72
|
if (!props.editable) {
|
|
74
73
|
return {
|
|
75
74
|
"--fs-password-field-cursor" : "default",
|