@usssa/component-library 1.0.0-alpha.21 → 1.0.0-alpha.211

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 (97) hide show
  1. package/README.md +8 -5
  2. package/package.json +25 -6
  3. package/src/assets/fonts/CorneroRegular.woff +0 -0
  4. package/src/assets/fonts/CorneroRegular.woff2 +0 -0
  5. package/src/assets/logo.svg +19 -0
  6. package/src/assets/no-result.svg +25 -0
  7. package/src/assets/upload-illustration.svg +48 -0
  8. package/src/components/core/UAccordionSelect.vue +237 -0
  9. package/src/components/core/UAvatar.vue +90 -26
  10. package/src/components/core/UAvatarGroup.vue +62 -52
  11. package/src/components/core/UBadgeStd.vue +6 -1
  12. package/src/components/core/UBannerStd.vue +100 -31
  13. package/src/components/core/UBreadCrumbs.vue +171 -0
  14. package/src/components/core/UBtnIcon.vue +57 -52
  15. package/src/components/core/UBtnStd.vue +38 -31
  16. package/src/components/core/UBtnToggle.vue +11 -6
  17. package/src/components/core/UCheckboxStd.vue +26 -20
  18. package/src/components/core/UChip.vue +91 -43
  19. package/src/components/core/UDate.vue +581 -0
  20. package/src/components/core/UDialogStd.vue +452 -58
  21. package/src/components/core/UDrawer/UDrawer.vue +471 -0
  22. package/src/components/core/UDrawer/UDrawerMenuItem.vue +124 -0
  23. package/src/components/core/UEventCard.vue +419 -0
  24. package/src/components/core/UExpansionStd.vue +274 -0
  25. package/src/components/core/UExpansionTableStd.vue +297 -0
  26. package/src/components/core/UFilter.vue +89 -0
  27. package/src/components/core/UGameObject.vue +441 -0
  28. package/src/components/core/UInnerLoader.vue +69 -0
  29. package/src/components/core/UInputAddressLookup.vue +484 -0
  30. package/src/components/core/UInputPhoneStd.vue +74 -68
  31. package/src/components/core/UInputTextStd.vue +137 -116
  32. package/src/components/core/UInputTypeahead.vue +44 -0
  33. package/src/components/core/UInputTypeaheadAdvanceSearch.vue +134 -0
  34. package/src/components/core/UMenuButtonStd.vue +280 -0
  35. package/src/components/core/UMenuDropdown.vue +82 -0
  36. package/src/components/core/UMenuDropdownAdvancedSearch.vue +306 -0
  37. package/src/components/core/UMenuItem.vue +221 -0
  38. package/src/components/core/UMenuSearch.vue +73 -0
  39. package/src/components/core/UModal.vue +660 -0
  40. package/src/components/core/UMultiSelectStd.vue +501 -61
  41. package/src/components/core/UPagination.vue +84 -25
  42. package/src/components/core/URadioBtn.vue +66 -43
  43. package/src/components/core/URadioStd.vue +23 -14
  44. package/src/components/core/USelectStd.vue +415 -84
  45. package/src/components/core/USheet.vue +349 -0
  46. package/src/components/core/UStepper/UProgress.vue +157 -0
  47. package/src/components/core/UStepper/UStepper.vue +211 -0
  48. package/src/components/core/UTabBtnStd.vue +36 -22
  49. package/src/components/core/UTable/UTable.vue +2061 -57
  50. package/src/components/core/UTableStd.vue +1311 -273
  51. package/src/components/core/UTabsStd.vue +52 -23
  52. package/src/components/core/UToggleStd.vue +18 -13
  53. package/src/components/core/UToolbar/UCustomMenuIcon.vue +58 -0
  54. package/src/components/core/UToolbar/UToolbar.vue +226 -0
  55. package/src/components/core/UTooltip.vue +31 -10
  56. package/src/components/core/UTypeahead.vue +890 -0
  57. package/src/components/core/UUploader.vue +644 -0
  58. package/src/components/index.js +77 -26
  59. package/src/composables/useNotify.js +16 -16
  60. package/src/composables/useOverlayLoader.js +23 -0
  61. package/src/composables/useScreenType.js +30 -0
  62. package/src/css/app.sass +42 -25
  63. package/src/css/colors.sass +2 -0
  64. package/src/css/quasar.variables.sass +99 -68
  65. package/src/css/vars/colors.variables.sass +28 -41
  66. package/src/utils/data.ts +177 -0
  67. package/src/App.vue +0 -9
  68. package/src/boot/.gitkeep +0 -0
  69. package/src/layouts/MainLayout.vue +0 -137
  70. package/src/pages/Avatar.vue +0 -77
  71. package/src/pages/AvatarGroup.vue +0 -139
  72. package/src/pages/BadgeStd.vue +0 -83
  73. package/src/pages/BannerPage.vue +0 -76
  74. package/src/pages/BtnIcon.vue +0 -120
  75. package/src/pages/BtnStd.vue +0 -126
  76. package/src/pages/BtnToggle.vue +0 -131
  77. package/src/pages/CheckBox.vue +0 -62
  78. package/src/pages/Chip.vue +0 -92
  79. package/src/pages/ComponentBase.vue +0 -54
  80. package/src/pages/Dialog.vue +0 -206
  81. package/src/pages/ErrorNotFound.vue +0 -11
  82. package/src/pages/IndexPage.vue +0 -11
  83. package/src/pages/InputPhone.vue +0 -152
  84. package/src/pages/InputText.vue +0 -139
  85. package/src/pages/MultiSelectStd.vue +0 -174
  86. package/src/pages/NotifyPage.vue +0 -109
  87. package/src/pages/Pagination.vue +0 -71
  88. package/src/pages/Radio.vue +0 -80
  89. package/src/pages/RadioBtn.vue +0 -104
  90. package/src/pages/SelectStd.vue +0 -160
  91. package/src/pages/TabButtonPage.vue +0 -126
  92. package/src/pages/TablePage.vue +0 -371
  93. package/src/pages/TabsPage.vue +0 -261
  94. package/src/pages/TogglePage.vue +0 -58
  95. package/src/pages/TooltipPage.vue +0 -125
  96. package/src/router/index.js +0 -34
  97. package/src/router/routes.js +0 -113
@@ -1,42 +1,111 @@
1
1
  <script setup>
2
- import { ref } from 'vue'
3
- import UTooltip from './UTooltip.vue'
2
+ import { computed, nextTick, ref, watch } from 'vue'
3
+ import UBtnStd from './UBtnStd.vue'
4
+ import UBtnToggle from './UBtnToggle.vue'
4
5
  import UChip from './UChip.vue'
6
+ import UMenuItem from './UMenuItem.vue'
7
+ import USheet from './USheet.vue'
8
+ import UTabBtnStd from './UTabBtnStd.vue'
9
+ import UTooltip from './UTooltip.vue'
10
+ import { useScreenType } from '../../composables/useScreenType'
11
+
12
+ const emit = defineEmits([
13
+ 'update:modelValue',
14
+ 'onClick',
15
+ 'handleTabChange',
16
+ 'updateButtonToggle',
17
+ ])
18
+
19
+ const options = defineModel('options', {
20
+ type: Array,
21
+ default: [],
22
+ })
23
+
24
+ const selectedTab = defineModel('selectedTab', {
25
+ type: [String, Number],
26
+ default: null,
27
+ })
5
28
 
6
29
  const props = defineProps({
7
- modelValue: {
8
- type: [Array, String, null],
9
- required: true,
30
+ applyLabel: {
31
+ type: String,
32
+ default: 'Apply',
33
+ },
34
+ beforeOptions: {
35
+ type: Array,
36
+ },
37
+ cancelLabel: {
38
+ type: String,
39
+ default: 'Cancel',
40
+ },
41
+ caption: {
42
+ type: String,
43
+ default: '',
10
44
  },
11
45
  color: {
12
46
  type: String,
13
47
  default: 'neutral-7',
14
48
  },
15
- hintText: {
49
+ dataTestId: {
16
50
  type: String,
51
+ default: 'multi-select',
52
+ },
53
+ filterFn: {
54
+ type: Function,
55
+ required: false,
17
56
  },
18
57
  hintIcon: {
19
58
  type: String,
20
59
  default: 'fa-kit-duotone fa-triangle-exclamation',
21
60
  },
61
+ hintText: {
62
+ type: String,
63
+ },
64
+ isBeforeOptions: {
65
+ type: Boolean,
66
+ default: false,
67
+ },
22
68
  isRequired: {
23
69
  type: Boolean,
24
70
  default: false,
25
71
  },
72
+ isTabBeforeOptions: {
73
+ type: Boolean,
74
+ default: true,
75
+ },
26
76
  label: {
27
77
  type: String,
28
- default: 'Label',
29
78
  },
30
79
  leftIcon: {
31
80
  type: String,
32
81
  },
33
- options: {
34
- type: Array,
82
+ modelValue: {
83
+ type: [Array, String, null],
35
84
  required: true,
36
85
  },
86
+ multiSelect: {
87
+ type: Boolean,
88
+ default: true,
89
+ },
90
+ noSearchText: {
91
+ type: String,
92
+ required: false,
93
+ },
94
+ optionLabel: {
95
+ type: String,
96
+ default: 'label',
97
+ },
98
+ optionValue: {
99
+ type: String,
100
+ default: 'value',
101
+ },
37
102
  placeholder: {
38
103
  type: String,
39
- default: 'Select',
104
+ default: '',
105
+ },
106
+ showSheetInput: {
107
+ type: Boolean,
108
+ default: true,
40
109
  },
41
110
  size: {
42
111
  type: String,
@@ -50,77 +119,256 @@ const props = defineProps({
50
119
  type: Function,
51
120
  required: true,
52
121
  },
53
- filterFn: {
54
- type: Function,
55
- required: false,
56
- },
57
- useInput: {
122
+ useCustomComponent: {
58
123
  type: Boolean,
59
- required: false,
124
+ default: false,
60
125
  },
61
- multiSelect: {
126
+ useInput: {
62
127
  type: Boolean,
63
- default: true,
64
- },
65
- noSearchText: {
66
- type: String,
67
128
  required: false,
68
129
  },
69
- optionValue: {
70
- type: String,
71
- default: 'value',
72
- },
73
- optionLabel: {
74
- type: String,
75
- default: 'label',
76
- },
77
130
  })
78
131
 
132
+ const $screen = useScreenType()
133
+ let cloneOptions = JSON.parse(JSON.stringify(options.value))
134
+
79
135
  const chipModelVal = ref(true)
136
+ const dialogs = ref([])
137
+ const placeholderText = ref(props.placeholder)
138
+ const selectedItems = ref([...props.modelValue])
139
+ const selectRef = ref(null)
140
+
141
+ const sheetHeading = computed(() => props.label)
142
+
143
+ const filterSheetOptions = (val, update) => {
144
+ if (val === '') {
145
+ update(() => {
146
+ options.value = cloneOptions
147
+ })
148
+ return
149
+ }
150
+
151
+ const typeValue = val.toLowerCase()
152
+ update(() => {
153
+ options.value = cloneOptions.filter((option) =>
154
+ option.label.toLowerCase().includes(typeValue)
155
+ )
156
+ })
157
+ }
158
+
159
+ const handleApply = () => {
160
+ dialogs.value[0].open = false
161
+ emit('update:modelValue', selectedItems.value)
162
+ }
163
+
164
+ const handleClick = (event) => {
165
+ if (!$screen.value.isMobile) return
166
+
167
+ // Prevent default behavior in mobile screen
168
+ event.preventDefault()
169
+ event.stopPropagation()
170
+ nextTick(() => {
171
+ selectRef.value.hidePopup()
172
+ })
173
+
174
+ const isSelectElement = event.target.closest('.q-field__control')
175
+
176
+ if (props.useCustomComponent && isSelectElement) {
177
+ // Emit click event for handling in parent component
178
+ emit('onClick')
179
+ return
180
+ }
181
+ if (isSelectElement) {
182
+ dialogs.value = [
183
+ {
184
+ open: true,
185
+ height: 350,
186
+ persistent: true,
187
+ transitionDuration: 500,
188
+ position: 'bottom',
189
+ },
190
+ ]
191
+ selectedItems.value = props.modelValue
192
+ }
193
+ }
194
+
195
+ const handleClose = () => {
196
+ dialogs.value[0].open = false
197
+ selectedItems.value = props.modelValue.length ? props.modelValue : []
198
+ options.value = cloneOptions
199
+ }
200
+
201
+ // adding scroll if highlighted menu is not visible to user
202
+ const handleKeydown = (event) => {
203
+ if (event.key === 'Enter') {
204
+ handleClick(event)
205
+ return
206
+ }
207
+
208
+ // Only handle arrow keys for scrolling
209
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
210
+ nextTick(() => {
211
+ scrollToFocusedOption()
212
+ })
213
+ }
214
+ }
215
+
216
+ const handleSheetItemClick = (val) => {
217
+ const exists = selectedItems.value.find((item) => item.value === val.value)
218
+
219
+ if (!exists) {
220
+ selectedItems.value = [...selectedItems.value, val]
221
+ } else {
222
+ selectedItems.value = selectedItems.value.filter(
223
+ (item) => item.value !== val.value
224
+ )
225
+ }
226
+ }
227
+
228
+ const handleSheetItemRemove = (item) => {
229
+ selectedItems.value = selectedItems.value.filter(
230
+ (option) => option.value !== item.value
231
+ )
232
+ }
233
+
234
+ const handleSheetSelectionUpdate = (val) => {
235
+ selectedItems.value = val
236
+ }
237
+
238
+ const handleTabChange = (val) => {
239
+ nextTick(() => {
240
+ selectRef.value?.focus()
241
+ })
242
+ emit('handleTabChange', val)
243
+ }
244
+
245
+ const isSelected = (value) => {
246
+ let getItems = selectedItems.value.filter((e) => e.value === value)
247
+ return getItems.length ? true : false
248
+ }
249
+
250
+ const removeItems = (item) => {
251
+ selectedItems.value = selectedItems.value.filter(
252
+ (option) => option.value !== item.value
253
+ )
254
+ }
255
+
256
+ const scrollToFocusedOption = () => {
257
+ requestAnimationFrame(() => {
258
+ if (!selectRef.value) return
259
+
260
+ const selectElement = selectRef.value.$el
261
+ const dropdownContainer =
262
+ selectElement?.querySelector('.u-option-menu') ||
263
+ document.querySelector('.u-option-menu')
264
+
265
+ if (!dropdownContainer) return
266
+
267
+ const focusedElement = dropdownContainer.querySelector(
268
+ '.q-manual-focusable--focused'
269
+ )
270
+
271
+ if (focusedElement) {
272
+ const itemRect = focusedElement.getBoundingClientRect()
273
+ const containerRect = dropdownContainer.getBoundingClientRect()
274
+
275
+ const isVisible =
276
+ itemRect.top >= containerRect.top &&
277
+ itemRect.bottom <= containerRect.bottom
278
+
279
+ if (!isVisible) {
280
+ focusedElement.scrollIntoView({
281
+ behavior: 'smooth',
282
+ block: 'nearest',
283
+ inline: 'nearest',
284
+ })
285
+ }
286
+ }
287
+ })
288
+ }
289
+
290
+ const updateButtonToggle = () => {
291
+ emit('updateButtonToggle')
292
+ }
293
+
294
+ const updateVal = (val) => {
295
+ props.updateFn(val)
296
+ placeholderText.value = val.length ? '' : props.placeholder
297
+ }
298
+
299
+ watch(
300
+ () => dialogs.value[0]?.open,
301
+ () => {
302
+ options.value = cloneOptions
303
+ }
304
+ )
305
+
306
+ watch(
307
+ () => props.placeholder,
308
+ (value) => {
309
+ placeholderText.value = value
310
+ }
311
+ )
312
+
313
+ watch(
314
+ () => $screen.value,
315
+ (newValue) => {
316
+ dialogs.value = []
317
+ if (newValue) {
318
+ selectedItems.value = [...props.modelValue]
319
+ }
320
+ }
321
+ )
322
+
323
+ watch(selectedTab, () => {
324
+ cloneOptions = JSON.parse(JSON.stringify(options.value))
325
+ })
80
326
  </script>
81
327
 
82
328
  <template>
83
- <div class="q-gutter-xs">
84
- <label for="select" class="row items-center">
329
+ <div class="q-gutter-xs" :dataTestId="dataTestId" @click="handleClick">
330
+ <label class="row items-center" for="select">
85
331
  <div class="u-select-label text-body-sm">
86
- {{ label }}
87
- <span class="text-red-5 q-ml-xs" v-if="isRequired">*</span>
332
+ <span>{{ label }}</span>
333
+ <span v-if="isRequired" class="text-red-5 q-ml-xs">*</span>
88
334
  </div>
89
335
 
90
336
  <q-icon
91
- class="q-ml-xs fa-kit-duotone fa-circle-info cursor-pointer"
92
337
  v-if="toolTipText"
93
- size="1rem"
94
- color="neutral-9"
338
+ class="q-ml-xs fa-kit-duotone fa-circle-info cursor-pointer"
95
339
  aria-hidden="true"
340
+ color="neutral-9"
341
+ size="1rem"
96
342
  >
97
343
  <UTooltip
98
- :description="toolTipText"
99
344
  anchor="top middle"
345
+ :description="toolTipText"
100
346
  self="bottom middle"
101
347
  />
102
348
  </q-icon>
103
349
  </label>
104
350
  <q-select
105
- class="u-multi-select"
351
+ v-bind="$attrs"
352
+ :class="`u-multi-select field-${size}`"
353
+ behavior="menu"
354
+ bottom-slots
355
+ :color="color"
356
+ hide-bottom-space
357
+ :hide-dropdown-icon="$screen.isMobile ? true : false"
106
358
  id="multi-select"
107
- :class="`field-${size}`"
359
+ :menu-offset="[0, 5]"
108
360
  :modelValue="modelValue"
109
- :color="color"
110
361
  multiple
111
- :options="options"
112
- :use-input="useInput"
113
362
  :option-label="optionLabel"
114
363
  :option-value="optionValue"
115
- :placeholder="placeholder"
116
- bottom-slots
117
- outlined
118
- hide-bottom-space
119
- use-chips
120
- :menu-offset="[0, 5]"
364
+ :options="options"
121
365
  options-selected-class="primary bg-blue-1"
366
+ outlined
367
+ :placeholder="modelValue.length ? '' : placeholderText"
122
368
  popup-content-class="u-option-menu"
123
- v-bind="$attrs"
369
+ ref="selectRef"
370
+ use-chips
371
+ :use-input="useInput"
124
372
  @add="
125
373
  (details) =>
126
374
  updateFn({
@@ -128,6 +376,9 @@ const chipModelVal = ref(true)
128
376
  multiSelect,
129
377
  })
130
378
  "
379
+ @click.prevent="handleClick"
380
+ @filter="filterFn"
381
+ @keydown="handleKeydown"
131
382
  @remove="
132
383
  (details) =>
133
384
  updateFn({
@@ -135,12 +386,30 @@ const chipModelVal = ref(true)
135
386
  ...details,
136
387
  })
137
388
  "
138
- @update:model-value="(val) => updateFn(val)"
139
- @filter="filterFn"
389
+ @update:model-value="(val) => updateVal(val)"
140
390
  >
141
391
  <template v-slot:no-option>
142
- <q-item>
143
- <q-item-section class="text-grey">
392
+ <q-item :class="[{ 'no-result-container': isBeforeOptions }]">
393
+ <div v-if="isBeforeOptions">
394
+ <div
395
+ v-if="isTabBeforeOptions"
396
+ class="tab-container q-mt-sm q-mx-xs"
397
+ >
398
+ <UTabBtnStd
399
+ v-model:selectedTab="selectedTab"
400
+ :buttonTabsOptions="beforeOptions"
401
+ size="sm"
402
+ @on-tab-click="(val) => handleTabChange(val)"
403
+ />
404
+ </div>
405
+ <slot v-else name="before-options" />
406
+ </div>
407
+ <q-item-section
408
+ :class="[
409
+ 'text-grey',
410
+ { 'q-mt-xs q-mx-sm q-mb-xs': isBeforeOptions },
411
+ ]"
412
+ >
144
413
  {{ noSearchText }}
145
414
  </q-item-section>
146
415
  </q-item>
@@ -150,9 +419,17 @@ const chipModelVal = ref(true)
150
419
  <q-icon :class="leftIcon" size="1rem" />
151
420
  </template>
152
421
 
422
+ <template v-if="$screen.isMobile" v-slot:append>
423
+ <q-icon
424
+ class="cursor-pointer"
425
+ name="arrow_drop_down"
426
+ @click.stop="handleClick"
427
+ />
428
+ </template>
429
+
153
430
  <template v-if="hintText" v-slot:hint>
154
431
  <div class="row no-wrap items-center">
155
- <q-icon :class="hintIcon" size="1rem" v-if="hintIcon" />
432
+ <q-icon v-if="hintIcon" :class="hintIcon" size="1rem" />
156
433
 
157
434
  <div class="q-mx-xxs text-body-xs">
158
435
  {{ hintText }}
@@ -160,9 +437,31 @@ const chipModelVal = ref(true)
160
437
  </div>
161
438
  </template>
162
439
 
440
+ <template v-slot:before-options>
441
+ <div v-if="isBeforeOptions">
442
+ <div
443
+ v-if="isTabBeforeOptions"
444
+ class="tab-container q-mx-xs q-mt-sm q-mb-xs"
445
+ >
446
+ <UTabBtnStd
447
+ v-model:selectedTab="selectedTab"
448
+ :buttonTabsOptions="beforeOptions"
449
+ size="sm"
450
+ @on-tab-click="(val) => handleTabChange(val)"
451
+ />
452
+ </div>
453
+ <slot v-else name="before-options" />
454
+ </div>
455
+ </template>
456
+
163
457
  <template v-slot:option="scope">
164
- <q-item class="items-center u-custom-options" v-bind="scope.itemProps">
165
- <div class="q-pr-xs" v-if="scope.opt.icon">
458
+ <q-item
459
+ v-bind="scope.itemProps"
460
+ v-if="!$screen.isMobile && !useCustomComponent"
461
+ class="items-center u-custom-options"
462
+ :key="scope.opt.value"
463
+ >
464
+ <div v-if="scope.opt.icon" class="q-pr-xs">
166
465
  <q-icon :class="scope.opt.icon" color="neutral-13" size="1rem" />
167
466
  </div>
168
467
 
@@ -170,7 +469,7 @@ const chipModelVal = ref(true)
170
469
  <q-item-label class="text-body-sm">
171
470
  {{ scope.opt.label }}
172
471
  </q-item-label>
173
- <q-item-label caption v-if="scope.opt.description">
472
+ <q-item-label v-if="scope.opt.description" caption>
174
473
  {{ scope.opt.description }}
175
474
  </q-item-label>
176
475
  </q-item-section>
@@ -188,14 +487,121 @@ const chipModelVal = ref(true)
188
487
  <UChip
189
488
  v-model="chipModelVal"
190
489
  :chipLabel="scope.opt.label"
490
+ dense
191
491
  :removable="true"
192
- @remove="scope.removeAtIndex(scope.index)"
193
492
  :tabindex="scope.tabindex"
194
- dense
493
+ @remove="scope.removeAtIndex(scope.index)"
195
494
  />
196
495
  </template>
197
496
  </q-select>
198
497
  </div>
498
+ <USheet
499
+ v-if="$screen.isMobile && !useCustomComponent"
500
+ v-model:dialogs="dialogs"
501
+ dialog-class="options-dialog"
502
+ :heading="sheetHeading"
503
+ :heading-caption="caption"
504
+ :show-action-buttons="true"
505
+ >
506
+ <template #header>
507
+ <div v-if="isBeforeOptions" class="q-mt-xs">
508
+ <UBtnToggle
509
+ v-if="isTabBeforeOptions"
510
+ v-model="selectedTab"
511
+ :options="beforeOptions"
512
+ size="md"
513
+ @update:model-value="updateButtonToggle"
514
+ />
515
+ <slot v-else name="before-options" />
516
+ </div>
517
+ <q-select
518
+ v-if="showSheetInput"
519
+ :model-value="selectedItems"
520
+ :class="`u-multi-select field-md q-mt-ba`"
521
+ behavior="menu"
522
+ multiple
523
+ outlined
524
+ :placeholder="selectedItems.length ? '' : placeholderText"
525
+ use-chips
526
+ :use-input="useInput"
527
+ @click="() => null"
528
+ @filter="filterSheetOptions"
529
+ @remove="handleSheetItemRemove"
530
+ @update:model-value="handleSheetSelectionUpdate"
531
+ >
532
+ <template v-if="leftIcon" v-slot:prepend>
533
+ <q-icon :class="leftIcon" size="1rem" />
534
+ </template>
535
+ <template v-slot:selected-item="scope">
536
+ <UChip
537
+ v-model="chipModelVal"
538
+ :avatar="scope.opt.img"
539
+ :chipLabel="scope.opt.label"
540
+ dense
541
+ :removable="true"
542
+ :tabindex="scope.tabindex"
543
+ @remove="removeItems(scope.opt)"
544
+ />
545
+ </template>
546
+ </q-select>
547
+ </template>
548
+
549
+ <template #content>
550
+ <template v-if="options.length > 0">
551
+ <template v-for="(item, index) in options" :key="index">
552
+ <UMenuItem
553
+ :destructive="item.destructive"
554
+ :disable="item.disable"
555
+ :hide="item.hide"
556
+ :index="index"
557
+ :inSheet="true"
558
+ :label="item.label"
559
+ labelStyle="text-caption-lg"
560
+ :leftIcon="item.icon"
561
+ :positive="item.positive"
562
+ :rightIcon="item.rightIcon"
563
+ :selected="isSelected(item.value)"
564
+ @onClick="handleSheetItemClick(item, index)"
565
+ >
566
+ <template #trailing_slot>
567
+ <slot name="trailing_slot">
568
+ <q-icon
569
+ v-if="isSelected(item.value)"
570
+ class="fa-kit-duotone fa-circle-check"
571
+ color="primary"
572
+ size="1rem"
573
+ />
574
+ </slot>
575
+ </template>
576
+ </UMenuItem>
577
+ </template>
578
+ </template>
579
+ <template v-else>
580
+ <q-item>
581
+ <q-item-section class="text-grey">
582
+ {{ noSearchText }}
583
+ </q-item-section>
584
+ </q-item>
585
+ </template>
586
+ </template>
587
+ <template #action_primary_one>
588
+ <UBtnStd
589
+ color="primary"
590
+ :label="cancelLabel"
591
+ outline
592
+ size="md"
593
+ @onClick="handleClose"
594
+ />
595
+ </template>
596
+ <template #action_primary_two>
597
+ <UBtnStd
598
+ color="primary"
599
+ :label="applyLabel"
600
+ size="md"
601
+ @onClick="handleApply"
602
+ />
603
+ </template>
604
+ </USheet>
199
605
  </template>
200
606
 
201
607
  <style lang="sass">
@@ -204,6 +610,7 @@ const chipModelVal = ref(true)
204
610
  &.q-field--auto-height .q-field__native
205
611
  min-height: $md
206
612
  align-items: center
613
+ padding: 0px
207
614
 
208
615
  &.q-field--outlined .q-field__control
209
616
  border-radius: $xs
@@ -235,7 +642,7 @@ const chipModelVal = ref(true)
235
642
  box-shadow : 0 0 0 2px $primary-transparent
236
643
 
237
644
  .q-field__bottom
238
- padding: 4px 0 0 0
645
+ padding: $xxs 0 0 0
239
646
 
240
647
  .q-chip__content
241
648
  color: $neutral-9
@@ -243,10 +650,13 @@ const chipModelVal = ref(true)
243
650
  .q-field__prepend
244
651
  padding-right: $xs
245
652
 
653
+ .q-chip
654
+ padding-left: $xs !important
655
+
246
656
  .u-option-menu
247
657
  border-radius: $xs
248
658
  box-shadow: $shadow-2
249
- max-height: 11.25rem !important
659
+ max-height: 12.25rem !important
250
660
  width: 18rem
251
661
  overflow-y: auto
252
662
  scrollbar-width: none
@@ -256,4 +666,34 @@ const chipModelVal = ref(true)
256
666
  border-radius: $xxs
257
667
  padding: $xs
258
668
  min-height: $lg
669
+
670
+ .sheet-card-wrapper .q-select__dropdown-icon
671
+ display: none !important
672
+
673
+ .options-dialog
674
+ .heading-row
675
+ margin-bottom: $xs
676
+ .main-content-dialog
677
+ padding-top: $xs
678
+
679
+ .tab-container
680
+ .q-tabs__content--align-center
681
+ justify-content: flex-start
682
+
683
+ .no-result-container
684
+ display: block
685
+ padding: 0px
686
+
687
+ .options-dialog
688
+ .sheet-card-wrapper .q-card__section .q-item
689
+ padding:$ba $ba !important
690
+ margin-bottom: $xs !important
691
+ border-radius: $sm !important
692
+ align-items: flex-start !important
693
+ .label
694
+ line-height: $ms !important
695
+ .q-icon
696
+ font-size: $ms !important
697
+ .q-focus-helper
698
+ display: none
259
699
  </style>