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

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 (196) 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 +210 -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 +7 -5
  120. package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +7 -5
  121. package/components/tiles/FSDashboardShallowTileUI.vue +7 -5
  122. package/components/tiles/FSDeviceOrganisationTileUI.vue +11 -12
  123. package/components/tiles/FSFolderTileUI.vue +8 -6
  124. package/components/tiles/FSGroupTileUI.vue +13 -15
  125. package/components/tiles/{FSSimpleIconTileUI.vue → FSSimpleTileUI.vue} +29 -15
  126. package/components/tiles/FSTile.vue +5 -11
  127. package/components/tiles/FSUserOrganisationTileUI.vue +2 -1
  128. package/components/toggleSets/FSToggleSetPosition.vue +61 -0
  129. package/composables/index.ts +5 -1
  130. package/composables/useAddress.ts +158 -0
  131. package/composables/useAutocomplete.ts +4 -3
  132. package/composables/useColors.ts +8 -25
  133. package/composables/useDebounce.ts +2 -1
  134. package/composables/useMagicFieldProvider.ts +22 -0
  135. package/composables/useRules.ts +4 -12
  136. package/composables/useSlots.ts +46 -26
  137. package/composables/useTables.ts +29 -0
  138. package/composables/useTreeView.ts +48 -0
  139. package/elements/FSFormElement.ts +2 -1
  140. package/icons/flags/France.vue +21 -5
  141. package/icons/flags/Germany.vue +16 -4
  142. package/icons/flags/GreatBritain.vue +25 -6
  143. package/icons/flags/Italy.vue +21 -5
  144. package/icons/flags/Portugal.vue +225 -51
  145. package/icons/flags/Spain.vue +2781 -543
  146. package/icons/flags/UnitedStates.vue +31 -7
  147. package/icons/widgetTemplates/DevicesWidget.vue +189 -189
  148. package/icons/widgetTemplates/ProfileWidget.vue +9 -9
  149. package/icons/widgetTemplates/TextWidget.vue +6 -6
  150. package/models/breadcrumbs.ts +1 -1
  151. package/models/deviceAlerts.ts +1 -1
  152. package/models/deviceConnectivities.ts +1 -1
  153. package/models/index.ts +2 -0
  154. package/models/magicFields.ts +9 -0
  155. package/models/map.ts +18 -0
  156. package/models/richTextVariable.ts +5 -0
  157. package/models/rules.ts +11 -2
  158. package/models/tables.ts +30 -21
  159. package/models/variableNode.ts +104 -0
  160. package/package.json +21 -18
  161. package/plugins/colorPlugin.ts +2 -2
  162. package/plugins/index.ts +2 -1
  163. package/plugins/mapsPlugin.ts +37 -0
  164. package/shims-plugin.d.ts +2 -2
  165. package/shims-window.d.ts +3 -0
  166. package/styles/components/fs_button.scss +5 -0
  167. package/styles/components/fs_card.scss +0 -1
  168. package/styles/components/fs_col.scss +1 -0
  169. package/styles/components/fs_color_field.scss +12 -2
  170. package/styles/components/fs_data_iterator_item.scss +19 -6
  171. package/styles/components/fs_dialog.scss +12 -22
  172. package/styles/components/fs_gradient_field.scss +16 -0
  173. package/styles/components/fs_image_card.scss +18 -0
  174. package/styles/components/fs_magic_config_field.scss +13 -0
  175. package/styles/components/fs_map.scss +129 -0
  176. package/styles/components/fs_map_overlay.scss +38 -0
  177. package/styles/components/fs_meta_field.scss +6 -0
  178. package/styles/components/fs_option_group.scss +1 -0
  179. package/styles/components/fs_radio.scss +1 -1
  180. package/styles/components/fs_rich_text_field.scss +17 -5
  181. package/styles/components/fs_row.scss +1 -1
  182. package/styles/components/fs_select_field.scss +9 -14
  183. package/styles/components/fs_text.scss +1 -1
  184. package/styles/components/fs_time_field.scss +0 -4
  185. package/styles/components/fs_translate_field.scss +3 -0
  186. package/styles/components/fs_tree_view_field.scss +53 -0
  187. package/styles/components/index.scss +8 -1
  188. package/styles/globals/overrides.scss +54 -8
  189. package/styles/globals/scrollbars.scss +2 -2
  190. package/themes/default.ts +1 -1
  191. package/utils/gradient.ts +1601 -0
  192. package/utils/index.ts +3 -1
  193. package/utils/leafletMarkers.ts +23 -0
  194. package/utils/lexical.ts +3 -1
  195. package/components/selects/FSSelectTimeZone.vue +0 -67
  196. 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
  >
@@ -216,6 +278,18 @@
216
278
  #no-data
217
279
  >
218
280
  <FSRow
281
+ v-if="showSearch"
282
+ padding="17px"
283
+ >
284
+ <FSButton
285
+ variant="icon"
286
+ :label="$tr('ui.common.add', 'Add this item')"
287
+ :color="ColorEnum.Primary"
288
+ @click="$emit('add:item', search)"
289
+ />
290
+ </FSRow>
291
+ <FSRow
292
+ v-else
219
293
  padding="17px"
220
294
  >
221
295
  <FSSpan>
@@ -230,7 +304,8 @@
230
304
  </template>
231
305
 
232
306
  <script lang="ts">
233
- import { computed, defineComponent, PropType, ref, watch } from "vue";
307
+ import type { PropType} from "vue";
308
+ import { computed, defineComponent, ref } from "vue";
234
309
 
235
310
  import { useBreakpoints, useColors, useRules, useSlots } from "@dative-gpi/foundation-shared-components/composables";
236
311
  import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
@@ -251,13 +326,14 @@ import FSRow from "../FSRow.vue";
251
326
 
252
327
  export default defineComponent({
253
328
  name: "FSAutocompleteField",
329
+ inheritAttrs: false,
254
330
  components: {
255
331
  FSSearchField,
256
332
  FSDialogMenu,
257
333
  FSRadioGroup,
258
- FSToggleSet,
259
334
  FSBaseField,
260
335
  FSTextField,
336
+ FSToggleSet,
261
337
  FSCheckbox,
262
338
  FSFadeOut,
263
339
  FSButton,
@@ -292,7 +368,7 @@ export default defineComponent({
292
368
  default: "label"
293
369
  },
294
370
  modelValue: {
295
- type: [Array, String] as PropType<string[] | string | null>,
371
+ type: [Array, String, Object] as PropType<string[] | string | null | any>,
296
372
  required: false,
297
373
  default: null
298
374
  },
@@ -306,11 +382,6 @@ export default defineComponent({
306
382
  required: false,
307
383
  default: false
308
384
  },
309
- returnObject: {
310
- type: Boolean,
311
- required: false,
312
- default: false
313
- },
314
385
  required: {
315
386
  type: Boolean,
316
387
  required: false,
@@ -345,12 +416,17 @@ export default defineComponent({
345
416
  type: Boolean,
346
417
  required: false,
347
418
  default: false
419
+ },
420
+ showSearch: {
421
+ type: Boolean,
422
+ required: false,
423
+ default: false
348
424
  }
349
425
  },
350
- emits: ["update:modelValue", "update:search"],
426
+ emits: ["update:modelValue", "update:search", "add:item"],
351
427
  setup: (props, { emit }) => {
352
428
  const { isExtraSmall, isMobileSized } = useBreakpoints();
353
- const { validateOn, blurred, getMessages } = useRules();
429
+ const { validateOn, getMessages } = useRules();
354
430
  const { getColors } = useColors();
355
431
  const { slots } = useSlots();
356
432
 
@@ -375,13 +451,14 @@ export default defineComponent({
375
451
  };
376
452
  }
377
453
  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
454
+ "--fs-autocomplete-field-cursor": "text",
455
+ "--fs-autocomplete-field-background-color": backgrounds.base,
456
+ "--fs-autocomplete-field-no-data-background-color": lights.light,
457
+ "--fs-autocomplete-field-border-color": lights.dark,
458
+ "--fs-autocomplete-field-color": darks.base,
459
+ "--fs-autocomplete-field-active-border-color": darks.dark,
460
+ "--fs-autocomplete-field-error-color": errors.base,
461
+ "--fs-autocomplete-field-error-border-color": errors.base
385
462
  };
386
463
  });
387
464
 
@@ -431,7 +508,7 @@ export default defineComponent({
431
508
  if (props.multiple) {
432
509
  if (Array.isArray(props.modelValue)) {
433
510
  return props.modelValue.map((value: any) => {
434
- const item = props.items.find((item: Object) => item[props.itemValue] === value);
511
+ const item = props.items.find((item: object) => item[props.itemValue] === value);
435
512
  if (item) {
436
513
  return item[props.itemTitle];
437
514
  }
@@ -439,7 +516,7 @@ export default defineComponent({
439
516
  }
440
517
  }
441
518
  if (props.modelValue) {
442
- const item = props.items.find((item: Object) => item[props.itemValue] === props.modelValue);
519
+ const item = props.items.find((item: object) => item[props.itemValue] === props.modelValue);
443
520
  if (item) {
444
521
  return item[props.itemTitle];
445
522
  }
@@ -447,6 +524,40 @@ export default defineComponent({
447
524
  return null;
448
525
  });
449
526
 
527
+ const mobileSelectionProps = computed((): any | null => {
528
+ const item = props.items.find((item: any) => item[props.itemValue] === props.modelValue);
529
+ if (item) {
530
+ return {
531
+ item: {
532
+ title: "",
533
+ value: item[props.itemValue],
534
+ props: {
535
+ title: item[props.itemTitle],
536
+ value: item[props.itemValue]
537
+ },
538
+ raw: { ...item }
539
+ },
540
+ font: "text-body"
541
+ };
542
+ }
543
+ return null;
544
+ });
545
+
546
+ const mobileItemProps = (item: any, font: "text-body" | "text-button" | null): any => {
547
+ return {
548
+ item: {
549
+ title: "",
550
+ value: item[props.itemValue],
551
+ props: {
552
+ title: item[props.itemTitle],
553
+ value: item[props.itemValue]
554
+ },
555
+ raw: { ...item }
556
+ },
557
+ font
558
+ }
559
+ };
560
+
450
561
  const openMobileOverlay = () => {
451
562
  if (!props.editable) {
452
563
  return;
@@ -454,39 +565,41 @@ export default defineComponent({
454
565
  dialog.value = true;
455
566
  };
456
567
 
457
- const onRadioChange = (value: any) => {
458
- emit('update:modelValue', value);
568
+ const onRadioChange = (value: string | null) => {
569
+ emit("update:modelValue", value);
459
570
  dialog.value = false;
460
571
  };
461
572
 
462
- const onCheckboxChange = (value: any) => {
573
+ const onCheckboxChange = (value: string) => {
463
574
  if (Array.isArray(props.modelValue)) {
464
575
  if (props.modelValue.includes(value)) {
465
- emit('update:modelValue', props.modelValue.filter((item: any) => item !== value));
576
+ emit("update:modelValue", props.modelValue.filter((item: any) => item !== value));
466
577
  }
467
578
  else {
468
- emit('update:modelValue', [...props.modelValue, value]);
579
+ emit("update:modelValue", [...props.modelValue, value]);
469
580
  }
470
581
  }
471
- else {
582
+ else if (props.modelValue != null) {
472
583
  if (props.modelValue === value) {
473
- emit('update:modelValue', []);
584
+ emit("update:modelValue", []);
474
585
  }
475
586
  else {
476
- emit('update:modelValue', [props.modelValue, value]);
587
+ emit("update:modelValue", [props.modelValue, value]);
477
588
  }
478
589
  }
590
+ else {
591
+ emit("update:modelValue", [value]);
592
+ }
479
593
  };
480
594
 
481
- const onUpdate = (value: string[] | string) => {
482
- emit('update:modelValue', value);
595
+ const onClick = () => {
596
+ if (props.modelValue && !props.multiple) {
597
+ search.value="";
598
+ }
483
599
  };
484
600
 
485
- watch(search, () => {
486
- emit("update:search", search.value);
487
- });
488
-
489
601
  return {
602
+ mobileSelectionProps,
490
603
  autocompleteSlots,
491
604
  toggleSetSlots,
492
605
  isExtraSmall,
@@ -496,7 +609,6 @@ export default defineComponent({
496
609
  ColorEnum,
497
610
  listStyle,
498
611
  messages,
499
- blurred,
500
612
  classes,
501
613
  dialog,
502
614
  height,
@@ -505,8 +617,9 @@ export default defineComponent({
505
617
  style,
506
618
  openMobileOverlay,
507
619
  onCheckboxChange,
620
+ mobileItemProps,
508
621
  onRadioChange,
509
- onUpdate
622
+ onClick
510
623
  };
511
624
  }
512
625
  });
@@ -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";