@dative-gpi/foundation-shared-components 1.0.42 → 1.0.44

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.
@@ -1,489 +1,478 @@
1
1
  <template>
2
- <template
2
+ <FSCol
3
3
  v-if="$props.loading"
4
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>
17
- <template
18
- v-else
5
+ <FSLoader
6
+ v-if="!$props.hideHeader"
7
+ variant="text-overline"
8
+ />
9
+ <FSLoader
10
+ v-if="$props.loading"
11
+ width="100%"
12
+ :height="['40px', '36px']"
13
+ />
14
+ </FSCol>
15
+ <FSCol
16
+ v-else-if="isExtraSmall"
19
17
  >
20
- <template
21
- v-if="isExtraSmall"
18
+ <FSTextField
19
+ :validationValue="$props.modelValue"
20
+ :description="$props.description"
21
+ :hideHeader="$props.hideHeader"
22
+ :clearable="$props.clearable"
23
+ :editable="$props.editable"
24
+ :required="$props.required"
25
+ :label="$props.label"
26
+ :rules="$props.rules"
27
+ :messages="messages"
28
+ :readonly="true"
29
+ :modelValue="mobileValue"
30
+ @click="openMobileOverlay"
31
+ v-bind="$attrs"
22
32
  >
23
- <FSCol>
24
- <FSTextField
25
- :validationValue="$props.modelValue"
26
- :description="$props.description"
27
- :hideHeader="$props.hideHeader"
28
- :clearable="$props.clearable"
29
- :editable="$props.editable"
30
- :required="$props.required"
31
- :label="$props.label"
32
- :rules="$props.rules"
33
- :messages="messages"
34
- :readonly="true"
35
- :modelValue="mobileValue"
36
- @click="openMobileOverlay"
37
- v-bind="$attrs"
33
+ <template
34
+ v-for="(_, name) in $slots"
35
+ v-slot:[name]="slotData"
36
+ >
37
+ <slot
38
+ :name="name"
39
+ v-bind="slotData"
40
+ />
41
+ </template>
42
+ <template
43
+ #prepend-inner
44
+ >
45
+ <slot
46
+ v-if="selectedItem && showExtra"
47
+ name="item-prepend"
48
+ v-bind="{ item: selectedItem }"
49
+ />
50
+ </template>
51
+ <template
52
+ #clear
53
+ >
54
+ <FSRow
55
+ :wrap="false"
38
56
  >
39
- <template
40
- v-for="(_, name) in $slots"
41
- v-slot:[name]="slotData"
42
- >
43
- <slot
44
- :name="name"
45
- v-bind="slotData"
46
- />
47
- </template>
48
- <template
49
- #prepend-inner
50
- >
51
- <slot
52
- v-if="selectedItem && showExtra"
53
- name="item-prepend"
54
- v-bind="{ item: selectedItem }"
55
- />
56
- </template>
57
- <template
58
- #clear
59
- >
60
- <FSRow
61
- :wrap="false"
62
- >
63
- <slot
64
- v-if="selectedItem && showExtra"
65
- name="item-append"
66
- v-bind="{ item: selectedItem }"
67
- />
68
- <slot
69
- name="clear"
70
- >
71
- <FSButton
72
- v-if="$props.clearable && $props.editable && !!$props.modelValue"
73
- icon="mdi-close"
74
- variant="icon"
75
- :color="ColorEnum.Dark"
76
- @click="onClear"
77
- />
78
- </slot>
79
- </FSRow>
80
- </template>
81
- <template
82
- #append-inner
57
+ <slot
58
+ v-if="selectedItem && showExtra"
59
+ name="item-append"
60
+ v-bind="{ item: selectedItem }"
61
+ />
62
+ <slot
63
+ name="clear"
83
64
  >
84
65
  <FSButton
85
- icon="mdi-chevron-down"
66
+ v-if="$props.clearable && $props.editable && !!$props.modelValue"
67
+ icon="mdi-close"
86
68
  variant="icon"
87
- :editable="$props.editable"
88
69
  :color="ColorEnum.Dark"
89
- @click="openMobileOverlay"
70
+ @click="onClear"
90
71
  />
91
- </template>
92
- </FSTextField>
93
- <FSSlideGroup
94
- v-if="$props.multiple && Array.isArray($props.modelValue)"
95
- >
96
- <FSCard
97
- v-for="(item, index) in $props.items.filter((item: any) => $props.modelValue.includes(item[$props.itemValue!]))"
98
- variant="standard"
99
- :height="['40px', '36px']"
100
- :color="ColorEnum.Light"
101
- :border="false"
102
- :key="index"
103
- >
104
- <FSRow
105
- align="center-left"
106
- padding="0 8px"
107
- :wrap="false"
108
- >
109
- <slot
110
- name="item-prepend"
111
- v-bind="{ item }"
112
- />
113
- <FSSpan>
114
- {{ item[$props.itemTitle!] }}
115
- </FSSpan>
116
- <slot
117
- name="item-append"
118
- v-bind="{ item }"
119
- />
120
- <FSButton
121
- icon="mdi-close"
122
- variant="icon"
123
- :color="ColorEnum.Dark"
124
- @click="() => onCheckboxChange(item[$props.itemValue!])"
125
- />
126
- </FSRow>
127
- </FSCard>
128
- </FSSlideGroup>
129
- </FSCol>
130
- <FSDialogMenu
131
- v-model="dialog"
72
+ </slot>
73
+ </FSRow>
74
+ </template>
75
+ <template
76
+ #append-inner
132
77
  >
133
- <template
134
- #body
78
+ <FSButton
79
+ icon="mdi-chevron-down"
80
+ variant="icon"
81
+ :editable="$props.editable"
82
+ :color="ColorEnum.Dark"
83
+ @click="openMobileOverlay"
84
+ />
85
+ </template>
86
+ </FSTextField>
87
+ <FSSlideGroup
88
+ v-if="$props.multiple && Array.isArray($props.modelValue)"
89
+ >
90
+ <FSCard
91
+ v-for="(item, index) in $props.items.filter((item: any) => $props.modelValue.includes(item[$props.itemValue!]))"
92
+ variant="standard"
93
+ :height="['40px', '36px']"
94
+ :color="ColorEnum.Light"
95
+ :border="false"
96
+ :key="index"
97
+ >
98
+ <FSRow
99
+ align="center-left"
100
+ padding="0 8px"
101
+ :wrap="false"
135
102
  >
136
- <FSSearchField
137
- :hideHeader="true"
138
- v-model="search"
103
+ <slot
104
+ name="item-prepend"
105
+ v-bind="{ item }"
139
106
  />
140
- <FSFadeOut
141
- :maxHeight="maxHeight"
142
- >
143
- <FSCol
144
- gap="12px"
145
- >
146
- <FSRow
147
- v-for="(item, index) in searchItems"
148
- :key="index"
149
- >
150
- <FSCheckbox
151
- v-if="$props.multiple"
152
- :label="item[$props.itemTitle!]"
153
- :editable="$props.editable"
154
- :modelValue="$props.modelValue?.includes(item[$props.itemValue!])"
155
- @update:modelValue="() => onCheckboxChange(item[$props.itemValue!])"
156
- >
157
- <template
158
- #label="{ font }"
159
- >
160
- <FSRow
161
- align="center-left"
162
- :wrap="false"
163
- >
164
- <slot
165
- name="item-prepend"
166
- v-bind="{ item }"
167
- />
168
- <FSSpan
169
- :font="font"
170
- >
171
- {{ item[$props.itemTitle!] }}
172
- </FSSpan>
173
- </FSRow>
174
- </template>
175
- </FSCheckbox>
176
- <FSRadio
177
- v-else
178
- :selected="$props.modelValue === item[$props.itemValue!]"
179
- :label="item[$props.itemTitle!]"
180
- :editable="$props.editable"
181
- :item="item"
182
- :modelValue="item[$props.itemValue!]"
183
- @update:modelValue="() => onRadioChange(item[$props.itemValue!])"
184
- >
185
- <template
186
- #label="{ font }"
187
- >
188
- <FSRow
189
- align="center-left"
190
- :wrap="false"
191
- >
192
- <slot
193
- name="item-prepend"
194
- v-bind="{ item }"
195
- />
196
- <FSSpan
197
- :font="font"
198
- >
199
- {{ item[$props.itemTitle!] }}
200
- </FSSpan>
201
- </FSRow>
202
- </template>
203
- </FSRadio>
204
- <FSRow
205
- align="center-right"
206
- >
207
- <slot
208
- name="item-append"
209
- v-bind="{ item }"
210
- />
211
- </FSRow>
212
- </FSRow>
213
- </FSCol>
214
- </FSFadeOut>
215
- <FSRow
216
- v-if="allowAddItem"
217
- padding="4px 3px"
218
- >
219
- <FSButton
220
- variant="icon"
221
- :label="$tr('ui.autocomplete-field.add-item', 'Add new item')"
222
- :color="ColorEnum.Primary"
223
- @click="$emit('add:item', search)"
224
- />
225
- </FSRow>
226
- <FSRow
227
- v-if="!allowAddItem && searchItems.length === 0"
228
- padding="4px 3px"
229
- >
230
- <FSSpan>
231
- {{ $tr("ui.autocomplete-field.no-data", "No data") }}
232
- </FSSpan>
233
- </FSRow>
234
- </template>
235
- </FSDialogMenu>
236
- </template>
237
- <template
238
- v-else
107
+ <FSSpan>
108
+ {{ item[$props.itemTitle!] }}
109
+ </FSSpan>
110
+ <slot
111
+ name="item-append"
112
+ v-bind="{ item }"
113
+ />
114
+ <FSButton
115
+ icon="mdi-close"
116
+ variant="icon"
117
+ :color="ColorEnum.Dark"
118
+ @click="() => onCheckboxChange(item[$props.itemValue!])"
119
+ />
120
+ </FSRow>
121
+ </FSCard>
122
+ </FSSlideGroup>
123
+ <FSDialogMenu
124
+ v-model="dialog"
239
125
  >
240
- <FSBaseField
241
- :description="$props.description"
242
- :hideHeader="$props.hideHeader"
243
- :required="$props.required"
244
- :editable="$props.editable"
245
- :label="$props.label"
246
- :messages="messages"
126
+ <template
127
+ #body
247
128
  >
248
- <FSToggleSet
249
- v-if="$props.toggleSet"
250
- :editable="$props.editable"
251
- :multiple="$props.multiple"
252
- :required="$props.required"
253
- :values="$props.items"
254
- :rules="$props.rules"
255
- :modelValue="$props.modelValue"
256
- @update:modelValue="$emit('update:modelValue', $event)"
257
- v-bind="$attrs"
129
+ <FSSearchField
130
+ :hideHeader="true"
131
+ v-model="search"
132
+ />
133
+ <FSFadeOut
134
+ :maxHeight="maxHeight"
258
135
  >
259
- <template
260
- v-for="(_, name) in toggleSetSlots"
261
- v-slot:[name]="slotData"
136
+ <FSCol
137
+ gap="12px"
262
138
  >
263
- <slot
264
- :name="`toggle-set-${name}`"
265
- v-bind="slotData"
266
- />
267
- </template>
268
- </FSToggleSet>
269
- <FSCol
270
- v-else
271
- >
272
- <v-autocomplete
273
- class="fs-autocomplete-field"
274
- variant="outlined"
275
- :clearable="$props.clearable && $props.editable && !!$props.modelValue"
276
- :itemTitle="$props.itemTitle"
277
- :itemValue="$props.itemValue"
278
- :readonly="!$props.editable"
279
- :multiple="$props.multiple"
280
- :validateOn="validateOn"
281
- :autoSelectFirst="true"
282
- :persistentClear="true"
283
- :listProps="listStyle"
284
- :returnObject="false"
285
- :items="$props.items"
286
- :rules="$props.rules"
287
- :hideDetails="true"
288
- :menuIcon="null"
289
- :style="style"
290
- :modelValue="$props.modelValue"
291
- @update:modelValue="onSingleChange"
292
- @click="onClick"
293
- @blur="onBlur"
294
- v-model:search="search"
295
- v-bind="$attrs"
296
- >
297
- <template
298
- v-for="(_, name) in autocompleteSlots"
299
- v-slot:[name]="slotData"
300
- >
301
- <slot
302
- :name="`autocomplete-${name}`"
303
- v-bind="slotData"
304
- />
305
- </template>
306
- <template
307
- #item="{ props, item }"
139
+ <FSRow
140
+ v-for="(item, index) in searchItems"
141
+ :key="index"
308
142
  >
309
- <v-list-item
310
- v-bind="{ ...props, title: '' }"
143
+ <FSCheckbox
144
+ v-if="$props.multiple"
145
+ :label="item[$props.itemTitle!]"
146
+ :editable="$props.editable"
147
+ :modelValue="$props.modelValue?.includes(item[$props.itemValue!])"
148
+ @update:modelValue="() => onCheckboxChange(item[$props.itemValue!])"
311
149
  >
312
- <FSRow
313
- align="center-left"
314
- :wrap="false"
150
+ <template
151
+ #label="{ font }"
315
152
  >
316
- <FSCheckbox
317
- v-if="$props.multiple"
318
- :modelValue="$props.modelValue?.includes(item.raw[$props.itemValue!])"
319
- @click="props.onClick"
320
- >
321
- <template
322
- #label="{ font }"
323
- >
324
- <slot
325
- name="item-prepend"
326
- v-bind="{ item: item.raw }"
327
- />
328
- <FSSpan
329
- :font="font"
330
- >
331
- {{ item.raw[$props.itemTitle!] }}
332
- </FSSpan>
333
- </template>
334
- </FSCheckbox>
335
- <template
336
- v-else
153
+ <FSRow
154
+ align="center-left"
155
+ :wrap="false"
337
156
  >
338
157
  <slot
339
158
  name="item-prepend"
340
- v-bind="{ item: item.raw }"
159
+ v-bind="{ item }"
341
160
  />
342
161
  <FSSpan
343
- :font="$props.modelValue === item.raw[$props.itemTitle!] ? 'text-button' : 'text-body'"
162
+ :font="font"
344
163
  >
345
- {{ item.raw[$props.itemTitle!] }}
164
+ {{ item[$props.itemTitle!] }}
346
165
  </FSSpan>
347
- </template>
166
+ </FSRow>
167
+ </template>
168
+ </FSCheckbox>
169
+ <FSRadio
170
+ v-else
171
+ :selected="$props.modelValue === item[$props.itemValue!]"
172
+ :label="item[$props.itemTitle!]"
173
+ :editable="$props.editable"
174
+ :item="item"
175
+ :modelValue="item[$props.itemValue!]"
176
+ @update:modelValue="() => onRadioChange(item[$props.itemValue!])"
177
+ >
178
+ <template
179
+ #label="{ font }"
180
+ >
348
181
  <FSRow
349
- align="center-right"
182
+ align="center-left"
183
+ :wrap="false"
350
184
  >
351
185
  <slot
352
- name="item-append"
353
- v-bind="{ item: item.raw }"
186
+ name="item-prepend"
187
+ v-bind="{ item }"
354
188
  />
189
+ <FSSpan
190
+ :font="font"
191
+ >
192
+ {{ item[$props.itemTitle!] }}
193
+ </FSSpan>
355
194
  </FSRow>
356
- </FSRow>
357
- </v-list-item>
358
- </template>
359
- <template
360
- #prepend-inner
361
- >
362
- <slot
363
- v-if="selectedItem && showExtra"
364
- name="item-prepend"
365
- v-bind="{ item: selectedItem }"
366
- />
367
- </template>
368
- <template
369
- v-if="$props.multiple"
370
- #selection="{ index }"
371
- >
372
- <FSSpan
373
- v-if="index === $props.modelValue.length - 1 && showExtra"
374
- >
375
- {{ $props.placeholder }}
376
- </FSSpan>
377
- </template>
378
- <template
379
- #clear
380
- >
195
+ </template>
196
+ </FSRadio>
381
197
  <FSRow
382
- :wrap="false"
198
+ align="center-right"
383
199
  >
384
200
  <slot
385
- v-if="selectedItem && showExtra"
386
201
  name="item-append"
387
- v-bind="{ item: selectedItem }"
388
- />
389
- <slot
390
- name="clear"
391
- >
392
- <FSButton
393
- v-if="$props.clearable && $props.editable && !!$props.modelValue"
394
- icon="mdi-close"
395
- variant="icon"
396
- :color="ColorEnum.Dark"
397
- @click="onClear"
398
- />
399
- </slot>
400
- </FSRow>
401
- </template>
402
- <template
403
- #append-inner
404
- >
405
- <slot
406
- name="append-inner"
407
- >
408
- <FSButton
409
- icon="mdi-chevron-down"
410
- variant="icon"
411
- :editable="$props.editable"
412
- :color="ColorEnum.Dark"
413
- />
414
- </slot>
415
- </template>
416
- <template
417
- #append-item
418
- >
419
- <FSRow
420
- v-if="allowAddItem"
421
- padding="15px"
422
- >
423
- <FSButton
424
- variant="icon"
425
- :label="$tr('ui.autocomplete.add-item', 'Add new item')"
426
- :color="ColorEnum.Primary"
427
- @click="$emit('add:item', search)"
202
+ v-bind="{ item }"
428
203
  />
429
204
  </FSRow>
430
- </template>
431
- <template
432
- #no-data
433
- >
434
- <FSRow
435
- v-if="!allowAddItem"
436
- padding="15px"
437
- >
438
- <FSSpan>
439
- {{ $tr("ui.common.no-data", "No data") }}
440
- </FSSpan>
441
- </FSRow>
442
- </template>
443
- </v-autocomplete>
444
- <FSSlideGroup
445
- v-if="$props.multiple && Array.isArray($props.modelValue)"
205
+ </FSRow>
206
+ </FSCol>
207
+ </FSFadeOut>
208
+ <FSRow
209
+ v-if="allowAddItem"
210
+ padding="4px 3px"
211
+ >
212
+ <FSButton
213
+ variant="icon"
214
+ :label="$tr('ui.autocomplete-field.add-item', 'Add new item')"
215
+ :color="ColorEnum.Primary"
216
+ @click="$emit('add:item', search)"
217
+ />
218
+ </FSRow>
219
+ <FSRow
220
+ v-if="!allowAddItem && searchItems.length === 0"
221
+ padding="4px 3px"
222
+ >
223
+ <FSSpan>
224
+ {{ $tr("ui.autocomplete-field.no-data", "No data") }}
225
+ </FSSpan>
226
+ </FSRow>
227
+ </template>
228
+ </FSDialogMenu>
229
+ </FSCol>
230
+ <FSBaseField
231
+ v-else
232
+ :description="$props.description"
233
+ :hideHeader="$props.hideHeader"
234
+ :required="$props.required"
235
+ :editable="$props.editable"
236
+ :label="$props.label"
237
+ :messages="messages"
238
+ >
239
+ <FSToggleSet
240
+ v-if="$props.toggleSet"
241
+ :editable="$props.editable"
242
+ :multiple="$props.multiple"
243
+ :required="$props.required"
244
+ :values="$props.items"
245
+ :rules="$props.rules"
246
+ :modelValue="$props.modelValue"
247
+ @update:modelValue="$emit('update:modelValue', $event)"
248
+ v-bind="$attrs"
249
+ >
250
+ <template
251
+ v-for="(_, name) in toggleSetSlots"
252
+ v-slot:[name]="slotData"
253
+ >
254
+ <slot
255
+ :name="`toggle-set-${name}`"
256
+ v-bind="slotData"
257
+ />
258
+ </template>
259
+ </FSToggleSet>
260
+ <FSCol
261
+ v-else
262
+ >
263
+ <v-autocomplete
264
+ class="fs-autocomplete-field"
265
+ variant="outlined"
266
+ :clearable="$props.clearable && $props.editable && !!$props.modelValue"
267
+ :itemTitle="$props.itemTitle"
268
+ :itemValue="$props.itemValue"
269
+ :readonly="!$props.editable"
270
+ :multiple="$props.multiple"
271
+ :validateOn="validateOn"
272
+ :autoSelectFirst="true"
273
+ :persistentClear="true"
274
+ :listProps="listStyle"
275
+ :returnObject="false"
276
+ :items="$props.items"
277
+ :rules="$props.rules"
278
+ :hideDetails="true"
279
+ :menuIcon="null"
280
+ :style="style"
281
+ :modelValue="$props.modelValue"
282
+ @update:modelValue="onSingleChange"
283
+ @click="onClick"
284
+ @blur="onBlur"
285
+ v-model:search="search"
286
+ v-bind="$attrs"
287
+ >
288
+ <template
289
+ v-for="(_, name) in autocompleteSlots"
290
+ v-slot:[name]="slotData"
291
+ >
292
+ <slot
293
+ :name="`autocomplete-${name}`"
294
+ v-bind="slotData"
295
+ />
296
+ </template>
297
+ <template
298
+ #item="{ props, item }"
299
+ >
300
+ <v-list-item
301
+ v-bind="{ ...props, title: '' }"
446
302
  >
447
- <FSCard
448
- v-for="(item, index) in $props.items.filter((item: any) => $props.modelValue.includes(item[$props.itemValue!]))"
449
- variant="standard"
450
- :height="['40px', '36px']"
451
- :color="ColorEnum.Light"
452
- :border="false"
453
- :key="index"
303
+ <FSRow
304
+ align="center-left"
305
+ :wrap="false"
454
306
  >
455
- <FSRow
456
- align="center-left"
457
- padding="0 8px"
307
+ <FSCheckbox
308
+ v-if="$props.multiple"
309
+ :modelValue="$props.modelValue?.includes(item.raw[$props.itemValue!])"
310
+ @click="props.onClick"
311
+ >
312
+ <template
313
+ #label="{ font }"
314
+ >
315
+ <slot
316
+ name="item-prepend"
317
+ v-bind="{ item: item.raw }"
318
+ />
319
+ <FSSpan
320
+ :font="font"
321
+ >
322
+ {{ item.raw[$props.itemTitle!] }}
323
+ </FSSpan>
324
+ </template>
325
+ </FSCheckbox>
326
+ <template
327
+ v-else
458
328
  >
459
329
  <slot
460
330
  name="item-prepend"
461
- v-bind="{ item }"
331
+ v-bind="{ item: item.raw }"
462
332
  />
463
- <FSSpan>
464
- {{ item[$props.itemTitle!] }}
333
+ <FSSpan
334
+ :font="$props.modelValue === item.raw[$props.itemTitle!] ? 'text-button' : 'text-body'"
335
+ >
336
+ {{ item.raw[$props.itemTitle!] }}
465
337
  </FSSpan>
338
+ </template>
339
+ <FSRow
340
+ align="center-right"
341
+ >
466
342
  <slot
467
343
  name="item-append"
468
- v-bind="{ item }"
469
- />
470
- <FSButton
471
- icon="mdi-close"
472
- variant="icon"
473
- :color="ColorEnum.Dark"
474
- @click="() => onCheckboxChange(item[$props.itemValue!])"
344
+ v-bind="{ item: item.raw }"
475
345
  />
476
346
  </FSRow>
477
- </FSCard>
478
- </FSSlideGroup>
479
- </FSCol>
480
- </FSBaseField>
481
- </template>
482
- </template>
347
+ </FSRow>
348
+ </v-list-item>
349
+ </template>
350
+ <template
351
+ #prepend-inner
352
+ >
353
+ <slot
354
+ v-if="selectedItem && showExtra"
355
+ name="item-prepend"
356
+ v-bind="{ item: selectedItem }"
357
+ />
358
+ </template>
359
+ <template
360
+ v-if="$props.multiple"
361
+ #selection="{ index }"
362
+ >
363
+ <FSSpan
364
+ v-if="index === $props.modelValue.length - 1 && showExtra"
365
+ >
366
+ {{ $props.placeholder }}
367
+ </FSSpan>
368
+ </template>
369
+ <template
370
+ #clear
371
+ >
372
+ <FSRow
373
+ :wrap="false"
374
+ >
375
+ <slot
376
+ v-if="selectedItem && showExtra"
377
+ name="item-append"
378
+ v-bind="{ item: selectedItem }"
379
+ />
380
+ <slot
381
+ name="clear"
382
+ >
383
+ <FSButton
384
+ v-if="$props.clearable && $props.editable && !!$props.modelValue"
385
+ icon="mdi-close"
386
+ variant="icon"
387
+ :color="ColorEnum.Dark"
388
+ @click="onClear"
389
+ />
390
+ </slot>
391
+ </FSRow>
392
+ </template>
393
+ <template
394
+ #append-inner
395
+ >
396
+ <slot
397
+ name="append-inner"
398
+ >
399
+ <FSButton
400
+ icon="mdi-chevron-down"
401
+ variant="icon"
402
+ :editable="$props.editable"
403
+ :color="ColorEnum.Dark"
404
+ />
405
+ </slot>
406
+ </template>
407
+ <template
408
+ #append-item
409
+ >
410
+ <FSRow
411
+ v-if="allowAddItem"
412
+ padding="15px"
413
+ >
414
+ <FSButton
415
+ variant="icon"
416
+ :label="$tr('ui.autocomplete.add-item', 'Add new item')"
417
+ :color="ColorEnum.Primary"
418
+ @click="$emit('add:item', search)"
419
+ />
420
+ </FSRow>
421
+ </template>
422
+ <template
423
+ #no-data
424
+ >
425
+ <FSRow
426
+ v-if="!allowAddItem"
427
+ padding="15px"
428
+ >
429
+ <FSSpan>
430
+ {{ $tr("ui.common.no-data", "No data") }}
431
+ </FSSpan>
432
+ </FSRow>
433
+ </template>
434
+ </v-autocomplete>
435
+ <FSSlideGroup
436
+ v-if="$props.multiple && Array.isArray($props.modelValue)"
437
+ >
438
+ <FSCard
439
+ v-for="(item, index) in $props.items.filter((item: any) => $props.modelValue.includes(item[$props.itemValue!]))"
440
+ variant="standard"
441
+ :height="['40px', '36px']"
442
+ :color="ColorEnum.Light"
443
+ :border="false"
444
+ :key="index"
445
+ >
446
+ <FSRow
447
+ align="center-left"
448
+ padding="0 8px"
449
+ >
450
+ <slot
451
+ name="item-prepend"
452
+ v-bind="{ item }"
453
+ />
454
+ <FSSpan>
455
+ {{ item[$props.itemTitle!] }}
456
+ </FSSpan>
457
+ <slot
458
+ name="item-append"
459
+ v-bind="{ item }"
460
+ />
461
+ <FSButton
462
+ icon="mdi-close"
463
+ variant="icon"
464
+ :color="ColorEnum.Dark"
465
+ @click="() => onCheckboxChange(item[$props.itemValue!])"
466
+ />
467
+ </FSRow>
468
+ </FSCard>
469
+ </FSSlideGroup>
470
+ </FSCol>
471
+ </FSBaseField>
483
472
  </template>
484
473
 
485
474
  <script lang="ts">
486
- import { computed, defineComponent, type PropType, ref, type Slot, type StyleValue } from "vue";
475
+ import { computed, defineComponent, type PropType, ref, type Slot, type StyleValue, watch } from "vue";
487
476
 
488
477
  import { useBreakpoints, useColors, useRules, useSlots } from "@dative-gpi/foundation-shared-components/composables";
489
478
  import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
@@ -779,6 +768,10 @@ export default defineComponent({
779
768
  showExtra.value = true;
780
769
  };
781
770
 
771
+ watch(search, () => {
772
+ emit("update:search", search.value);
773
+ });
774
+
782
775
  return {
783
776
  autocompleteSlots,
784
777
  toggleSetSlots,