@dative-gpi/foundation-shared-components 0.1.120 → 1.0.1

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.
Files changed (197) hide show
  1. package/assets/images/map/imagery.png +0 -0
  2. package/assets/images/map/map.png +0 -0
  3. package/components/FSAccordion.vue +2 -1
  4. package/components/FSAccordionPanel.vue +20 -1
  5. package/components/FSBadge.vue +7 -3
  6. package/components/FSBreadcrumbs.vue +4 -2
  7. package/components/FSButton.vue +15 -8
  8. package/components/FSCalendar.vue +5 -2
  9. package/components/FSCalendarTwin.vue +6 -3
  10. package/components/FSCard.vue +4 -2
  11. package/components/FSCardPlaceholder.vue +80 -0
  12. package/components/FSCheckbox.vue +10 -7
  13. package/components/FSChip.vue +4 -2
  14. package/components/FSClickable.vue +5 -3
  15. package/components/FSClock.vue +18 -4
  16. package/components/FSCol.vue +12 -5
  17. package/components/FSColor.vue +4 -2
  18. package/components/FSColorIcon.vue +5 -3
  19. package/components/FSDialog.vue +28 -87
  20. package/components/FSDialogContent.vue +133 -0
  21. package/components/FSDialogForm.vue +25 -236
  22. package/components/FSDialogFormBody.vue +273 -0
  23. package/components/FSDialogMenu.vue +5 -2
  24. package/components/FSDialogMultiForm.vue +21 -197
  25. package/components/FSDialogMultiFormBody.vue +231 -0
  26. package/components/FSDialogSubmit.vue +4 -2
  27. package/components/FSDivider.vue +6 -4
  28. package/components/FSEditImage.vue +16 -9
  29. package/components/FSErrorToast.vue +2 -1
  30. package/components/FSFadeOut.vue +1 -1
  31. package/components/FSForm.vue +7 -7
  32. package/components/FSGrid.vue +4 -2
  33. package/components/FSGridMosaic.vue +3 -2
  34. package/components/FSIcon.vue +3 -2
  35. package/components/FSIconCard.vue +10 -3
  36. package/components/FSIconCheck.vue +2 -1
  37. package/components/FSIconFlag.vue +2 -1
  38. package/components/FSImage.vue +2 -1
  39. package/components/FSImageCard.vue +72 -0
  40. package/components/FSLabel.vue +4 -2
  41. package/components/FSLink.vue +5 -3
  42. package/components/FSLoader.vue +2 -1
  43. package/components/FSOptionGroup.vue +28 -20
  44. package/components/FSOptionItem.vue +8 -18
  45. package/components/FSPagination.vue +4 -2
  46. package/components/FSRadio.vue +23 -11
  47. package/components/FSRadioGroup.vue +23 -10
  48. package/components/FSRow.vue +8 -1
  49. package/components/FSSlideGroup.vue +27 -6
  50. package/components/FSSlider.vue +4 -2
  51. package/components/FSSpan.vue +2 -1
  52. package/components/FSSwitch.vue +13 -10
  53. package/components/FSTab.vue +4 -2
  54. package/components/FSTabs.vue +5 -14
  55. package/components/FSTag.vue +11 -4
  56. package/components/FSTagGroup.vue +4 -2
  57. package/components/FSText.vue +4 -2
  58. package/components/FSToggleSet.vue +30 -17
  59. package/components/FSTooltip.vue +15 -4
  60. package/components/FSWindow.vue +2 -2
  61. package/components/FSWrapGroup.vue +2 -1
  62. package/components/autocompletes/FSAutoCompleteAddress.vue +104 -0
  63. package/components/autocompletes/FSAutocompleteLanguage.vue +18 -26
  64. package/components/autocompletes/FSAutocompleteTag.vue +138 -0
  65. package/components/autocompletes/FSAutocompleteTimeZone.vue +19 -30
  66. package/components/buttons/FSButtonAdd.vue +28 -0
  67. package/components/buttons/FSButtonAddIcon.vue +28 -0
  68. package/components/buttons/FSButtonAddLabel.vue +27 -0
  69. package/components/buttons/FSButtonAddMini.vue +27 -0
  70. package/components/buttons/FSButtonFile.vue +4 -4
  71. package/components/buttons/FSButtonFileIcon.vue +4 -4
  72. package/components/buttons/FSButtonFileLabel.vue +4 -4
  73. package/components/buttons/FSButtonFileMini.vue +4 -4
  74. package/components/deviceOrganisations/FSConnectivity.vue +3 -2
  75. package/components/deviceOrganisations/FSConnectivityCard.vue +3 -2
  76. package/components/deviceOrganisations/FSStatus.vue +3 -2
  77. package/components/deviceOrganisations/FSStatusCard.vue +3 -2
  78. package/components/deviceOrganisations/FSStatusesCarousel.vue +3 -2
  79. package/components/deviceOrganisations/FSStatusesRow.vue +3 -2
  80. package/components/deviceOrganisations/FSWorstAlert.vue +5 -4
  81. package/components/deviceOrganisations/FSWorstAlertCard.vue +4 -2
  82. package/components/fields/FSAutocompleteField.vue +219 -97
  83. package/components/fields/FSBaseField.vue +2 -1
  84. package/components/fields/FSColorField.vue +65 -94
  85. package/components/fields/FSDateField.vue +12 -25
  86. package/components/fields/FSDateRangeField.vue +15 -27
  87. package/components/fields/FSDateTimeField.vue +22 -32
  88. package/components/fields/FSDateTimeRangeField.vue +43 -51
  89. package/components/fields/FSGradientField.vue +143 -0
  90. package/components/fields/FSIconField.vue +9 -6
  91. package/components/fields/FSMagicConfigField.vue +154 -0
  92. package/components/fields/FSMagicField.vue +185 -0
  93. package/components/fields/FSNumberField.vue +3 -1
  94. package/components/fields/FSPasswordField.vue +10 -10
  95. package/components/fields/FSRichTextField.vue +136 -50
  96. package/components/fields/FSSearchField.vue +41 -62
  97. package/components/fields/FSSelectField.vue +148 -53
  98. package/components/fields/FSTagField.vue +19 -16
  99. package/components/fields/FSTermField.vue +192 -186
  100. package/components/fields/FSTextArea.vue +4 -4
  101. package/components/fields/FSTextField.vue +29 -6
  102. package/components/fields/FSTimeField.vue +55 -20
  103. package/components/fields/FSTimeSlotField.vue +6 -5
  104. package/components/fields/FSTranslateField.vue +234 -0
  105. package/components/fields/FSTranslateRichTextField.vue +185 -0
  106. package/components/fields/FSTreeViewField.vue +520 -0
  107. package/components/lists/FSDataIteratorItem.vue +18 -3
  108. package/components/lists/FSDataTableUI.vue +138 -51
  109. package/components/lists/FSFilterButton.vue +4 -2
  110. package/components/lists/FSHiddenButton.vue +4 -2
  111. package/components/map/FSMap.vue +598 -0
  112. package/components/map/FSMapEditPointAddressOverlay.vue +164 -0
  113. package/components/map/FSMapLayerButton.vue +77 -0
  114. package/components/map/FSMapOverlay.vue +150 -0
  115. package/components/selects/FSSelectAutoRefresh.vue +62 -0
  116. package/components/selects/FSSelectDashboardVariableType.vue +47 -0
  117. package/components/selects/FSSelectDateSetting.vue +39 -37
  118. package/components/selects/FSSelectDays.vue +62 -0
  119. package/components/tiles/FSDashboardOrganisationTileUI.vue +8 -8
  120. package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +8 -8
  121. package/components/tiles/FSDashboardShallowTileUI.vue +8 -8
  122. package/components/tiles/FSDeviceOrganisationTileUI.vue +20 -15
  123. package/components/tiles/FSFolderTileUI.vue +7 -7
  124. package/components/tiles/FSGroupTileUI.vue +34 -27
  125. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +142 -0
  126. package/components/tiles/{FSSimpleIconTileUI.vue → FSSimpleTileUI.vue} +48 -25
  127. package/components/tiles/FSTile.vue +51 -13
  128. package/components/tiles/FSUserOrganisationTileUI.vue +25 -34
  129. package/components/toggleSets/FSToggleSetPosition.vue +61 -0
  130. package/composables/index.ts +5 -1
  131. package/composables/useAddress.ts +158 -0
  132. package/composables/useAutocomplete.ts +4 -3
  133. package/composables/useColors.ts +8 -25
  134. package/composables/useDebounce.ts +2 -1
  135. package/composables/useMagicFieldProvider.ts +22 -0
  136. package/composables/useRules.ts +4 -12
  137. package/composables/useSlots.ts +65 -27
  138. package/composables/useTables.ts +29 -0
  139. package/composables/useTreeView.ts +48 -0
  140. package/elements/FSFormElement.ts +2 -1
  141. package/icons/flags/France.vue +21 -5
  142. package/icons/flags/Germany.vue +16 -4
  143. package/icons/flags/GreatBritain.vue +25 -6
  144. package/icons/flags/Italy.vue +21 -5
  145. package/icons/flags/Portugal.vue +225 -51
  146. package/icons/flags/Spain.vue +2781 -543
  147. package/icons/flags/UnitedStates.vue +31 -7
  148. package/icons/widgetTemplates/DevicesWidget.vue +189 -189
  149. package/icons/widgetTemplates/ProfileWidget.vue +9 -9
  150. package/icons/widgetTemplates/TextWidget.vue +6 -6
  151. package/models/breadcrumbs.ts +1 -1
  152. package/models/deviceAlerts.ts +1 -1
  153. package/models/deviceConnectivities.ts +1 -1
  154. package/models/index.ts +2 -0
  155. package/models/magicFields.ts +9 -0
  156. package/models/map.ts +18 -0
  157. package/models/richTextVariable.ts +5 -0
  158. package/models/rules.ts +11 -2
  159. package/models/tables.ts +30 -21
  160. package/models/variableNode.ts +104 -0
  161. package/package.json +21 -18
  162. package/plugins/colorPlugin.ts +2 -2
  163. package/plugins/index.ts +2 -1
  164. package/plugins/mapsPlugin.ts +37 -0
  165. package/shims-plugin.d.ts +2 -2
  166. package/shims-window.d.ts +3 -0
  167. package/styles/components/fs_button.scss +5 -0
  168. package/styles/components/fs_card.scss +0 -1
  169. package/styles/components/fs_col.scss +1 -0
  170. package/styles/components/fs_color_field.scss +12 -2
  171. package/styles/components/fs_data_iterator_item.scss +19 -6
  172. package/styles/components/fs_dialog.scss +12 -22
  173. package/styles/components/fs_gradient_field.scss +16 -0
  174. package/styles/components/fs_image_card.scss +18 -0
  175. package/styles/components/fs_magic_config_field.scss +13 -0
  176. package/styles/components/fs_map.scss +129 -0
  177. package/styles/components/fs_map_overlay.scss +38 -0
  178. package/styles/components/fs_meta_field.scss +6 -0
  179. package/styles/components/fs_option_group.scss +1 -0
  180. package/styles/components/fs_radio.scss +1 -1
  181. package/styles/components/fs_rich_text_field.scss +17 -5
  182. package/styles/components/fs_row.scss +1 -1
  183. package/styles/components/fs_select_field.scss +9 -14
  184. package/styles/components/fs_text.scss +1 -1
  185. package/styles/components/fs_time_field.scss +0 -4
  186. package/styles/components/fs_translate_field.scss +3 -0
  187. package/styles/components/fs_tree_view_field.scss +53 -0
  188. package/styles/components/index.scss +8 -1
  189. package/styles/globals/overrides.scss +54 -8
  190. package/styles/globals/scrollbars.scss +2 -2
  191. package/themes/default.ts +1 -1
  192. package/utils/gradient.ts +1601 -0
  193. package/utils/index.ts +3 -1
  194. package/utils/leafletMarkers.ts +23 -0
  195. package/utils/lexical.ts +3 -1
  196. package/components/selects/FSSelectTimeZone.vue +0 -67
  197. package/styles/components/fs_date_field.scss +0 -8
@@ -1,9 +1,19 @@
1
1
  <template>
2
- <FSLoader
2
+ <template
3
3
  v-if="$props.loading"
4
- width="100%"
5
- :height="['40px', '36px']"
6
- />
4
+ >
5
+ <FSCol>
6
+ <FSLoader
7
+ v-if="!$props.hideHeader"
8
+ variant="text-overline"
9
+ />
10
+ <FSLoader
11
+ v-if="$props.loading"
12
+ width="100%"
13
+ :height="['40px', '36px']"
14
+ />
15
+ </FSCol>
16
+ </template>
7
17
  <template
8
18
  v-else
9
19
  >
@@ -11,21 +21,19 @@
11
21
  v-if="isExtraSmall"
12
22
  >
13
23
  <FSTextField
14
- :label="$props.label"
24
+ :validationValue="$props.modelValue"
15
25
  :description="$props.description"
16
26
  :hideHeader="$props.hideHeader"
17
- :required="$props.required"
18
27
  :clearable="$props.clearable"
19
28
  :editable="$props.editable"
20
- :readonly="true"
29
+ :required="$props.required"
30
+ :label="$props.label"
21
31
  :rules="$props.rules"
22
32
  :messages="messages"
23
- :validateOn="validateOn"
24
- :validationValue="$props.modelValue"
33
+ :readonly="true"
25
34
  :modelValue="mobileValue"
26
35
  @update:modelValue="$emit('update:modelValue', $event)"
27
36
  @click="openMobileOverlay"
28
- @blur="blurred = true"
29
37
  v-bind="$attrs"
30
38
  >
31
39
  <template
@@ -37,6 +45,15 @@
37
45
  v-bind="slotData"
38
46
  />
39
47
  </template>
48
+ <template
49
+ v-if="mobileSelectionProps"
50
+ #prepend-inner
51
+ >
52
+ <slot
53
+ name="selection-mobile"
54
+ v-bind="mobileSelectionProps"
55
+ />
56
+ </template>
40
57
  <template
41
58
  #append-inner
42
59
  >
@@ -60,38 +77,54 @@
60
77
  #body
61
78
  >
62
79
  <FSSearchField
80
+ :hideHeader="true"
63
81
  v-model="search"
64
82
  />
65
83
  <FSFadeOut
66
84
  :height="height"
67
85
  >
68
86
  <FSCol
87
+ v-if="$props.multiple"
69
88
  gap="12px"
70
89
  >
71
- <template
72
- v-if="$props.multiple"
90
+ <FSRow
91
+ v-for="(item, index) in searchItems"
92
+ :key="index"
73
93
  >
74
- <FSRow
75
- v-for="(item, index) in searchItems"
76
- :key="index"
94
+ <FSCheckbox
95
+ :label="item[$props.itemTitle]"
96
+ :editable="$props.editable"
97
+ :modelValue="$props.modelValue?.includes(item[$props.itemValue])"
98
+ @update:modelValue="() => onCheckboxChange(item[$props.itemValue])"
77
99
  >
78
- <FSCheckbox
79
- :label="item[$props.itemTitle]"
80
- :editable="$props.editable"
81
- :modelValue="$props.modelValue?.includes(item[$props.itemValue])"
82
- @update:modelValue="() => onCheckboxChange(item[$props.itemValue])"
83
- />
84
- </FSRow>
85
- </template>
86
- <FSRadioGroup
87
- v-else
88
- gap="12px"
89
- :values="searchItems.map((item: any) => ({ value: item[$props.itemValue], label: item[$props.itemTitle] }))"
90
- :modelValue="$props.modelValue"
91
- :editable="$props.editable"
92
- @update:modelValue="onRadioChange"
93
- />
100
+ <template
101
+ #label="{ font }"
102
+ >
103
+ <slot
104
+ name="item-label"
105
+ v-bind="mobileItemProps(item, font)"
106
+ />
107
+ </template>
108
+ </FSCheckbox>
109
+ </FSRow>
94
110
  </FSCol>
111
+ <FSRadioGroup
112
+ v-else
113
+ gap="12px"
114
+ :values="searchItems.map((item: any) => ({ value: item[$props.itemValue], label: item[$props.itemTitle], item: item }))"
115
+ :editable="$props.editable"
116
+ :modelValue="$props.modelValue"
117
+ @update:modelValue="onRadioChange"
118
+ >
119
+ <template
120
+ #label="{ item, font }"
121
+ >
122
+ <slot
123
+ name="item-label"
124
+ v-bind="mobileItemProps(item, font)"
125
+ />
126
+ </template>
127
+ </FSRadioGroup>
95
128
  </FSFadeOut>
96
129
  </template>
97
130
  </FSDialogMenu>
@@ -100,21 +133,22 @@
100
133
  v-else
101
134
  >
102
135
  <FSBaseField
103
- :label="$props.label"
104
136
  :description="$props.description"
105
137
  :hideHeader="$props.hideHeader"
106
138
  :required="$props.required"
107
139
  :editable="$props.editable"
140
+ :label="$props.label"
108
141
  :messages="messages"
109
142
  >
110
143
  <FSToggleSet
111
144
  v-if="$props.toggleSet"
112
- variant="slide"
113
- :values="$props.items"
145
+ :editable="$props.editable"
114
146
  :multiple="$props.multiple"
147
+ :required="$props.required"
148
+ :values="$props.items"
115
149
  :rules="$props.rules"
116
150
  :modelValue="$props.modelValue"
117
- @update:modelValue="onUpdate"
151
+ @update:modelValue="$emit('update:modelValue', $event)"
118
152
  v-bind="$attrs"
119
153
  >
120
154
  <template
@@ -131,28 +165,37 @@
131
165
  v-else
132
166
  class="fs-autocomplete-field"
133
167
  variant="outlined"
134
- :menuIcon="null"
135
- :style="style"
136
- :listProps="listStyle"
137
- :class="classes"
138
- :hideDetails="true"
139
- :items="$props.items"
140
- :autoSelectFirst="true"
141
- :multiple="$props.multiple"
168
+ :clearable="$props.clearable && $props.editable && !!$props.modelValue"
142
169
  :itemTitle="$props.itemTitle"
143
170
  :itemValue="$props.itemValue"
144
171
  :readonly="!$props.editable"
145
- :loading="$props.loading"
146
- :clearable="$props.clearable && $props.editable && !!$props.modelValue"
147
- :returnObject="$props.returnObject"
148
- :rules="$props.rules"
172
+ :multiple="$props.multiple"
149
173
  :validateOn="validateOn"
174
+ :autoSelectFirst="true"
175
+ :persistentClear="true"
176
+ :listProps="listStyle"
177
+ :returnObject="false"
178
+ :items="$props.items"
179
+ :rules="$props.rules"
180
+ :hideDetails="true"
181
+ :menuIcon="null"
182
+ :class="classes"
183
+ :style="style"
150
184
  :modelValue="$props.modelValue"
151
- @update:modelValue="onUpdate"
152
- @blur="blurred = true"
185
+ @update:modelValue="$emit('update:modelValue', $event)"
186
+ @click="onClick"
153
187
  v-model:search="search"
154
188
  v-bind="$attrs"
155
189
  >
190
+ <template
191
+ v-for="(_, name) in autocompleteSlots"
192
+ v-slot:[name]="slotData"
193
+ >
194
+ <slot
195
+ :name="`autocomplete-${name}`"
196
+ v-bind="slotData"
197
+ />
198
+ </template>
156
199
  <template
157
200
  #item="{ props, item }"
158
201
  >
@@ -161,28 +204,47 @@
161
204
  >
162
205
  <FSRow
163
206
  align="center-left"
164
- :wrap="false"
165
207
  >
166
208
  <FSCheckbox
167
209
  v-if="$props.multiple"
168
210
  :modelValue="$props.modelValue?.includes(item.raw[$props.itemValue])"
169
211
  @click="props.onClick"
170
- />
171
- <FSSpan>
172
- {{ item.raw[$props.itemTitle] }}
212
+ >
213
+ <template
214
+ #label="{ font }"
215
+ >
216
+ <slot
217
+ name="item-label"
218
+ v-bind="{ item, font }"
219
+ >
220
+ <FSSpan
221
+ :font="font"
222
+ >
223
+ {{ item.raw[$props.itemTitle] }}
224
+ </FSSpan>
225
+ </slot>
226
+ </template>
227
+ </FSCheckbox>
228
+ <FSSpan
229
+ v-else
230
+ >
231
+ <slot
232
+ name="item-label"
233
+ v-bind="{
234
+ item,
235
+ font: $props.modelValue === item.raw[$props.itemTitle] ? 'text-button' : 'text-body'
236
+ }"
237
+ >
238
+ <FSSpan
239
+ :font="$props.modelValue === item.raw[$props.itemTitle] ? 'text-button' : 'text-body'"
240
+ >
241
+ {{ item.raw[$props.itemTitle] }}
242
+ </FSSpan>
243
+ </slot>
173
244
  </FSSpan>
174
245
  </FSRow>
175
246
  </v-list-item>
176
247
  </template>
177
- <template
178
- v-for="(_, name) in autocompleteSlots"
179
- v-slot:[name]="slotData"
180
- >
181
- <slot
182
- :name="`autocomplete-${name}`"
183
- v-bind="slotData"
184
- />
185
- </template>
186
248
  <template
187
249
  #clear
188
250
  >
@@ -212,10 +274,31 @@
212
274
  />
213
275
  </slot>
214
276
  </template>
277
+ <template
278
+ #append-item
279
+ >
280
+ <FSRow
281
+ v-if="showSearch && !searchItems.map((item: any) => item[$props.itemTitle]).some(s=>s.toLowerCase() == search.toLowerCase())"
282
+ padding="17px"
283
+ >
284
+ <FSButton
285
+ v-if="search && search.trim().length > 0"
286
+ variant="icon"
287
+ :label="$tr('ui.common.add', 'Add this item')"
288
+ :color="ColorEnum.Primary"
289
+ @click="$emit('add:item', search)"
290
+ />
291
+ </FSRow>
292
+ </template>
215
293
  <template
216
294
  #no-data
217
295
  >
296
+ <template
297
+ v-if="showSearch"
298
+ >
299
+ </template>
218
300
  <FSRow
301
+ v-else
219
302
  padding="17px"
220
303
  >
221
304
  <FSSpan>
@@ -230,7 +313,8 @@
230
313
  </template>
231
314
 
232
315
  <script lang="ts">
233
- import { computed, defineComponent, PropType, ref, watch } from "vue";
316
+ import type { PropType} from "vue";
317
+ import { computed, defineComponent, ref } from "vue";
234
318
 
235
319
  import { useBreakpoints, useColors, useRules, useSlots } from "@dative-gpi/foundation-shared-components/composables";
236
320
  import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
@@ -251,13 +335,14 @@ import FSRow from "../FSRow.vue";
251
335
 
252
336
  export default defineComponent({
253
337
  name: "FSAutocompleteField",
338
+ inheritAttrs: false,
254
339
  components: {
255
340
  FSSearchField,
256
341
  FSDialogMenu,
257
342
  FSRadioGroup,
258
- FSToggleSet,
259
343
  FSBaseField,
260
344
  FSTextField,
345
+ FSToggleSet,
261
346
  FSCheckbox,
262
347
  FSFadeOut,
263
348
  FSButton,
@@ -292,7 +377,7 @@ export default defineComponent({
292
377
  default: "label"
293
378
  },
294
379
  modelValue: {
295
- type: [Array, String] as PropType<string[] | string | null>,
380
+ type: [Array, String, Object] as PropType<string[] | string | null | any>,
296
381
  required: false,
297
382
  default: null
298
383
  },
@@ -306,11 +391,6 @@ export default defineComponent({
306
391
  required: false,
307
392
  default: false
308
393
  },
309
- returnObject: {
310
- type: Boolean,
311
- required: false,
312
- default: false
313
- },
314
394
  required: {
315
395
  type: Boolean,
316
396
  required: false,
@@ -345,12 +425,17 @@ export default defineComponent({
345
425
  type: Boolean,
346
426
  required: false,
347
427
  default: false
428
+ },
429
+ showSearch: {
430
+ type: Boolean,
431
+ required: false,
432
+ default: false
348
433
  }
349
434
  },
350
- emits: ["update:modelValue", "update:search"],
435
+ emits: ["update:modelValue", "update:search", "add:item"],
351
436
  setup: (props, { emit }) => {
352
437
  const { isExtraSmall, isMobileSized } = useBreakpoints();
353
- const { validateOn, blurred, getMessages } = useRules();
438
+ const { validateOn, getMessages } = useRules();
354
439
  const { getColors } = useColors();
355
440
  const { slots } = useSlots();
356
441
 
@@ -375,13 +460,14 @@ export default defineComponent({
375
460
  };
376
461
  }
377
462
  return {
378
- "--fs-autocomplete-field-cursor": "text",
379
- "--fs-autocomplete-field-background-color": backgrounds.base,
380
- "--fs-autocomplete-field-border-color": lights.dark,
381
- "--fs-autocomplete-field-color": darks.base,
382
- "--fs-autocomplete-field-active-border-color": darks.dark,
383
- "--fs-autocomplete-field-error-color": errors.base,
384
- "--fs-autocomplete-field-error-border-color": errors.base
463
+ "--fs-autocomplete-field-cursor": "text",
464
+ "--fs-autocomplete-field-background-color": backgrounds.base,
465
+ "--fs-autocomplete-field-no-data-background-color": lights.light,
466
+ "--fs-autocomplete-field-border-color": lights.dark,
467
+ "--fs-autocomplete-field-color": darks.base,
468
+ "--fs-autocomplete-field-active-border-color": darks.dark,
469
+ "--fs-autocomplete-field-error-color": errors.base,
470
+ "--fs-autocomplete-field-error-border-color": errors.base
385
471
  };
386
472
  });
387
473
 
@@ -431,7 +517,7 @@ export default defineComponent({
431
517
  if (props.multiple) {
432
518
  if (Array.isArray(props.modelValue)) {
433
519
  return props.modelValue.map((value: any) => {
434
- const item = props.items.find((item: Object) => item[props.itemValue] === value);
520
+ const item = props.items.find((item: object) => item[props.itemValue] === value);
435
521
  if (item) {
436
522
  return item[props.itemTitle];
437
523
  }
@@ -439,7 +525,7 @@ export default defineComponent({
439
525
  }
440
526
  }
441
527
  if (props.modelValue) {
442
- const item = props.items.find((item: Object) => item[props.itemValue] === props.modelValue);
528
+ const item = props.items.find((item: object) => item[props.itemValue] === props.modelValue);
443
529
  if (item) {
444
530
  return item[props.itemTitle];
445
531
  }
@@ -447,6 +533,40 @@ export default defineComponent({
447
533
  return null;
448
534
  });
449
535
 
536
+ const mobileSelectionProps = computed((): any | null => {
537
+ const item = props.items.find((item: any) => item[props.itemValue] === props.modelValue);
538
+ if (item) {
539
+ return {
540
+ item: {
541
+ title: "",
542
+ value: item[props.itemValue],
543
+ props: {
544
+ title: item[props.itemTitle],
545
+ value: item[props.itemValue]
546
+ },
547
+ raw: { ...item }
548
+ },
549
+ font: "text-body"
550
+ };
551
+ }
552
+ return null;
553
+ });
554
+
555
+ const mobileItemProps = (item: any, font: "text-body" | "text-button" | null): any => {
556
+ return {
557
+ item: {
558
+ title: "",
559
+ value: item[props.itemValue],
560
+ props: {
561
+ title: item[props.itemTitle],
562
+ value: item[props.itemValue]
563
+ },
564
+ raw: { ...item }
565
+ },
566
+ font
567
+ }
568
+ };
569
+
450
570
  const openMobileOverlay = () => {
451
571
  if (!props.editable) {
452
572
  return;
@@ -454,39 +574,41 @@ export default defineComponent({
454
574
  dialog.value = true;
455
575
  };
456
576
 
457
- const onRadioChange = (value: any) => {
458
- emit('update:modelValue', value);
577
+ const onRadioChange = (value: string | null) => {
578
+ emit("update:modelValue", value);
459
579
  dialog.value = false;
460
580
  };
461
581
 
462
- const onCheckboxChange = (value: any) => {
582
+ const onCheckboxChange = (value: string) => {
463
583
  if (Array.isArray(props.modelValue)) {
464
584
  if (props.modelValue.includes(value)) {
465
- emit('update:modelValue', props.modelValue.filter((item: any) => item !== value));
585
+ emit("update:modelValue", props.modelValue.filter((item: any) => item !== value));
466
586
  }
467
587
  else {
468
- emit('update:modelValue', [...props.modelValue, value]);
588
+ emit("update:modelValue", [...props.modelValue, value]);
469
589
  }
470
590
  }
471
- else {
591
+ else if (props.modelValue != null) {
472
592
  if (props.modelValue === value) {
473
- emit('update:modelValue', []);
593
+ emit("update:modelValue", []);
474
594
  }
475
595
  else {
476
- emit('update:modelValue', [props.modelValue, value]);
596
+ emit("update:modelValue", [props.modelValue, value]);
477
597
  }
478
598
  }
599
+ else {
600
+ emit("update:modelValue", [value]);
601
+ }
479
602
  };
480
603
 
481
- const onUpdate = (value: string[] | string) => {
482
- emit('update:modelValue', value);
604
+ const onClick = () => {
605
+ if (props.modelValue && !props.multiple) {
606
+ search.value="";
607
+ }
483
608
  };
484
609
 
485
- watch(search, () => {
486
- emit("update:search", search.value);
487
- });
488
-
489
610
  return {
611
+ mobileSelectionProps,
490
612
  autocompleteSlots,
491
613
  toggleSetSlots,
492
614
  isExtraSmall,
@@ -496,7 +618,6 @@ export default defineComponent({
496
618
  ColorEnum,
497
619
  listStyle,
498
620
  messages,
499
- blurred,
500
621
  classes,
501
622
  dialog,
502
623
  height,
@@ -505,8 +626,9 @@ export default defineComponent({
505
626
  style,
506
627
  openMobileOverlay,
507
628
  onCheckboxChange,
629
+ mobileItemProps,
508
630
  onRadioChange,
509
- onUpdate
631
+ onClick
510
632
  };
511
633
  }
512
634
  });
@@ -54,7 +54,8 @@
54
54
  </template>
55
55
 
56
56
  <script lang="ts">
57
- import { computed, defineComponent, PropType } from "vue";
57
+ import type { PropType } from "vue";
58
+ import { computed, defineComponent } from "vue";
58
59
 
59
60
  import { useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
60
61
  import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";