@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
@@ -0,0 +1,471 @@
1
+ <script setup>
2
+ import { computed, onMounted, ref, watch } from 'vue'
3
+ import { useRouter } from 'vue-router'
4
+ import { useScreenType } from '../../../composables/useScreenType.js'
5
+ import UBtnIcon from '../UBtnIcon.vue'
6
+ import UBtnStd from '../UBtnStd.vue'
7
+ import UDrawerMenuItem from './UDrawerMenuItem.vue'
8
+ import UTooltip from '../UTooltip.vue'
9
+
10
+ const emit = defineEmits(['menuItemClicked', 'closeDrawer'])
11
+ const miniState = defineModel('miniState', {
12
+ default: false,
13
+ type: Boolean,
14
+ })
15
+ const open = defineModel('open', {
16
+ default: false,
17
+ type: Boolean,
18
+ })
19
+ const props = defineProps({
20
+ brandLogo: {
21
+ default: '',
22
+ },
23
+ brandMiniLogo: {
24
+ default: '',
25
+ },
26
+ breadCrumb: {
27
+ default: false,
28
+ type: Boolean,
29
+ },
30
+ collapseMenuLabel: {
31
+ default: 'Collapse Menu',
32
+ type: String,
33
+ },
34
+ dataTestId: {
35
+ default: 'drawer-std',
36
+ type: String,
37
+ },
38
+ homeLink: {
39
+ default: '/home',
40
+ type: String,
41
+ },
42
+ menu: {
43
+ default: () => [],
44
+ type: Array,
45
+ },
46
+ multiLevel: {
47
+ default: false,
48
+ type: Boolean,
49
+ },
50
+ showFooter: {
51
+ type: Boolean,
52
+ default: false,
53
+ },
54
+ side: {
55
+ type: String,
56
+ default: 'left',
57
+ },
58
+ sidebarShrinkIcon: {
59
+ type: String,
60
+ default: 'Sidebar shrink icon',
61
+ },
62
+ usssaLogo: {
63
+ type: String,
64
+ default: 'usssa logo',
65
+ },
66
+ })
67
+
68
+ const $router = useRouter()
69
+ const $screen = useScreenType()
70
+
71
+ const currentPath = computed(() => getCurrentPath())
72
+ const currentRoute = computed(() => $router.currentRoute.value.fullPath)
73
+
74
+ const animationType = ref('backward')
75
+ const breadcrumbLabels = ref([])
76
+ const menuList = ref([])
77
+ const navigationStack = ref([])
78
+ const showSlots = ref(false)
79
+
80
+ const checkSlots = (elements) => {
81
+ elements.forEach((element) => {
82
+ if (element.children && element.children.length) {
83
+ checkSlots(element.children) // Recursive call
84
+ }
85
+ if (element.slot && element.slot.hasSlot) {
86
+ showSlots.value = false
87
+ }
88
+ })
89
+ }
90
+
91
+ /**
92
+ * Adding scroll to drawer content
93
+ */
94
+ const drawerContentScroll = () => {
95
+ const footerEle = document.getElementById('drawer-footer')
96
+ const listEle = document.getElementById('drawer-scrollable-list')
97
+ if (footerEle && listEle) {
98
+ listEle.style.marginBottom = `${footerEle.clientHeight + 16}px`
99
+ }
100
+ }
101
+
102
+ const getCurrentPath = (int = 1) => {
103
+ return currentRoute.value.split('/')[int]
104
+ }
105
+
106
+ const handleBackClick = () => {
107
+ if (navigationStack.value.length) {
108
+ const prevList = navigationStack.value.pop()
109
+ menuList.value = prevList.children
110
+ animationType.value = 'backward'
111
+ checkSlots(prevList.children)
112
+ breadcrumbLabels.value.pop()
113
+ }
114
+ }
115
+
116
+ const handleClick = (menu) => {
117
+ if (props.multiLevel) {
118
+ if (menu.slot && menu.slot.hasSlot) {
119
+ showSlots.value = true
120
+ navigationStack.value.push({
121
+ label: menu.label,
122
+ children: menuList.value,
123
+ })
124
+ if (breadcrumbLabels.value.indexOf(menu.label) === -1) {
125
+ breadcrumbLabels.value.push(menu.label)
126
+ }
127
+ } else {
128
+ if (menu.children && menu.children.length) {
129
+ navigationStack.value.push({
130
+ label: menu.label,
131
+ children: menuList.value,
132
+ })
133
+ menuList.value = menu.children
134
+ animationType.value = 'forward'
135
+ if (breadcrumbLabels.value.indexOf(menu.label) === -1) {
136
+ breadcrumbLabels.value.push(menu.label)
137
+ }
138
+ } else {
139
+ emit('menuItemClicked', menu)
140
+ }
141
+ }
142
+ } else {
143
+ emit('menuItemClicked', menu)
144
+ }
145
+ }
146
+
147
+ const handleCloseDrawer = () => {
148
+ emit('closeDrawer')
149
+ }
150
+
151
+ onMounted(() => {
152
+ drawerContentScroll()
153
+ })
154
+
155
+ watch($screen, () => {
156
+ if ($screen.value.isDesktop) {
157
+ open.value = true
158
+ }
159
+ })
160
+
161
+ // rendering fresh menu after closing the drawer
162
+ watch(
163
+ open,
164
+ (newData) => {
165
+ if (!newData) {
166
+ navigationStack.value = []
167
+ showSlots.value = false
168
+ menuList.value = []
169
+ } else {
170
+ menuList.value = props.menu
171
+ }
172
+ drawerContentScroll()
173
+ },
174
+ { immediate: true }
175
+ )
176
+ </script>
177
+ <template>
178
+ <q-drawer
179
+ v-model="open"
180
+ :class="[
181
+ 'u-drawer',
182
+ { 'u-mini-drawer': miniState },
183
+ { 'drawer-desktop': $screen.isDesktop },
184
+ { 'drawer-open': open },
185
+ { 'u-nested-drawer': multiLevel },
186
+ ]"
187
+ :behavior="$screen.isMobile ? 'default' : 'desktop'"
188
+ :dataTestId="dataTestId"
189
+ :mini="miniState"
190
+ :mini-width="64"
191
+ :overlay="$screen.isDesktop ? false : true"
192
+ :show-if-above="$screen.isMobile || $screen.isTablet ? false : true"
193
+ :side="side"
194
+ :width="224"
195
+ >
196
+ <q-scroll-area class="u-drawer-scrollable-area">
197
+ <div
198
+ v-if="$screen.isDesktop"
199
+ :class="`flex items-center justify-${
200
+ miniState ? 'center q-py-ba' : 'between q-py-ba q-pl-xs q-pr-xxs'
201
+ } `"
202
+ >
203
+ <UBtnStd
204
+ class="flex items-center justify-center drawer-logo q-pa-none"
205
+ flat
206
+ :ripple="false"
207
+ size="sm"
208
+ :to="homeLink"
209
+ >
210
+ <q-img
211
+ v-if="!miniState"
212
+ class="full-logo"
213
+ :alt="props.usssaLogo"
214
+ :aria-label="props.usssaLogo"
215
+ :src="`${brandLogo}`"
216
+ />
217
+ <q-img
218
+ v-else
219
+ class="mini-state-logo"
220
+ :alt="props.usssaLogo"
221
+ :aria-label="props.usssaLogo"
222
+ :src="brandMiniLogo"
223
+ />
224
+ </UBtnStd>
225
+ <div
226
+ v-if="!miniState"
227
+ class="drawer-open-close-icon-wrapper flex items-center justify-center"
228
+ >
229
+ <UBtnIcon
230
+ v-if="$screen.isDesktop"
231
+ iconClass="fa-kit-duotone fa-sidebar-shrink"
232
+ :ariaLabel="props.sidebarShrinkIcon"
233
+ color="primary"
234
+ dense
235
+ ref="btn-icon"
236
+ size="sm"
237
+ @click="handleCloseDrawer"
238
+ />
239
+ <UTooltip
240
+ anchor="center right"
241
+ :description="props.collapseMenuLabel"
242
+ :offset="[4, 14]"
243
+ self="center start"
244
+ />
245
+ </div>
246
+ </div>
247
+
248
+ <q-list
249
+ :class="{
250
+ 'drawer-menu-list': true,
251
+ 'drawer-menu-mini-list': miniState,
252
+ 'slots-padding-wrapper': showSlots,
253
+ }"
254
+ id="drawer-scrollable-list"
255
+ padding
256
+ >
257
+ <div
258
+ v-if="multiLevel && navigationStack.length"
259
+ class="flex justify-start items-center no-wrap drawer-back-action-wrapper"
260
+ >
261
+ <UBtnStd
262
+ class="drawer-back-action q-mr-xs"
263
+ aria-label="Back"
264
+ :flat="true"
265
+ tabindex="0"
266
+ @click="handleBackClick()"
267
+ >
268
+ <q-icon
269
+ class="fa-kit-duotone fa-circle-arrow-left nested-drawer-back-icon icon-secondary-opacity"
270
+ aria-label="Back"
271
+ size="1.5rem"
272
+ tabindex="-1"
273
+ />
274
+ </UBtnStd>
275
+ <div class="text-heading-xs">
276
+ {{ !breadCrumb ? 'Back' : breadcrumbLabels.join(' / ') }}
277
+ </div>
278
+ </div>
279
+
280
+ <template v-for="(m, i) in menuList" :key="m.label">
281
+ <UDrawerMenuItem
282
+ v-if="!showSlots"
283
+ :animation-type="animationType"
284
+ :current-path="currentPath"
285
+ :index="i"
286
+ :menu-item="m"
287
+ :mini-state="miniState"
288
+ :multi-level="multiLevel"
289
+ @child-menu-item-click="handleClick"
290
+ />
291
+
292
+ <q-separator
293
+ v-if="multiLevel && i < menuList.length - 1 && !showSlots"
294
+ class="menu-item-separator"
295
+ />
296
+
297
+ <slot
298
+ v-if="m.slot && m.slot.hasSlot && showSlots"
299
+ :name="m.slot.slotName"
300
+ >
301
+ </slot>
302
+ </template>
303
+ </q-list>
304
+ <div
305
+ v-if="showFooter && !$screen.isDesktop"
306
+ :class="{
307
+ 'drawer-footer q-mt-ba q-pb-ba full-width flex justify-center bg-neutral-1': true,
308
+ 'slots-padding-wrapper': showSlots,
309
+ }"
310
+ id="drawer-footer"
311
+ >
312
+ <slot name="footer"></slot>
313
+ </div>
314
+ </q-scroll-area>
315
+ </q-drawer>
316
+ </template>
317
+ <style lang="sass">
318
+ .mini-state-logo
319
+ height: $ms
320
+ width: 2.022rem
321
+
322
+ .q-drawer:has(.u-drawer)
323
+ width: 14rem !important
324
+ padding: 0 $xs
325
+
326
+ .q-drawer:has(.u-mini-drawer)
327
+ width: 4rem !important
328
+
329
+ .u-drawer
330
+ background: $surface-bg-1
331
+ .q-scrollarea__content
332
+ width: 100%
333
+ .drawer-logo
334
+ padding: 0px !important
335
+ min-width: 0px !important
336
+ &.q-hoverable:hover > .q-focus-helper
337
+ opacity: 0
338
+ &:focus-visible
339
+ outline: auto !important
340
+ .q-focus-helper
341
+ display: none
342
+
343
+ .q-list--padding
344
+ padding: 0 !important
345
+ .drawer-menu-list
346
+ &:not(.drawer-menu-mini-list)
347
+ .u-menu-link
348
+ gap: 0 !important
349
+ .q-item__section--side
350
+ margin-right: $xs
351
+ .q-item__section--main
352
+ margin-right: $xs
353
+ .u-drawer-scrollable-area
354
+ height: calc(100% - 0px)
355
+ margin-top: 0px
356
+
357
+ .menu-icon-class
358
+ font-size: 1rem
359
+
360
+ .menu-icon-wrapper
361
+ min-width: auto !important
362
+
363
+ .full-logo
364
+ width: 5.918rem
365
+ height: $ms
366
+
367
+ .drawer-open-close-icon
368
+ font-size: 1rem
369
+ color: $primary
370
+
371
+ .drawer-open-close-icon-wrapper
372
+ height: $md
373
+ width: $md
374
+
375
+ .q-drawer:has(.mobile-menu)
376
+ padding: 0px $ba !important
377
+
378
+ .u-menu-link
379
+ .q-item
380
+ margin-bottom: 0
381
+
382
+ .drawer-menu-mini-list
383
+ display: grid
384
+ place-content: center
385
+ place-items: center
386
+ padding: 0 $xs
387
+
388
+ .u-drawer
389
+ .drawer-menu-list
390
+ .q-icon
391
+ color: $primary !important
392
+
393
+ .mini-menu-box
394
+ width: 3.5rem
395
+ gap: 0 !important
396
+ .u-drawer
397
+ .drawer-menu-list
398
+ .non-active-right-icon
399
+ color: $dark !important
400
+ .drawer-items
401
+ margin-bottom: $xs!important
402
+
403
+ .drawer-footer
404
+ bottom: 0
405
+ position: fixed
406
+
407
+
408
+ .list-icons
409
+ font-size : $ba !important
410
+
411
+ .mobile-menu
412
+ .label
413
+ font-size: 1rem
414
+ line-height: 1.5rem
415
+ letter-spacing: .01786rem
416
+ font-weight: 400
417
+ @media (max-width: 600px)
418
+ .q-drawer__backdrop
419
+ top: 50px
420
+ .q-drawer:has(.drawer-open)
421
+ top: 50px
422
+ width: 100% !important
423
+ .q-drawer:has(.u-drawer)
424
+ top: 50px !important
425
+ .drawer-menu-list
426
+ margin-top: $ba
427
+ @media (min-width: 1024px)
428
+ .q-drawer__backdrop
429
+ top: 0px !important
430
+ .q-drawer--mini:has(.u-drawer)
431
+ top: 0px !important
432
+ .q-drawer:has(.u-drawer)
433
+ top: 0px !important
434
+ @media ( min-width: 601px ) and (max-width: 1023px)
435
+ .q-drawer:has(.drawer-open)
436
+ width: 100% !important
437
+ .drawer-menu-list
438
+ margin-top: $ba
439
+
440
+ .menu-item-separator
441
+ margin: $xs 0
442
+
443
+ .drawer-menu-list
444
+ .drawer-back-action-wrapper
445
+ .q-btn.drawer-back-action
446
+ padding: 0px 0px !important
447
+ min-width: 1.5rem !important
448
+ min-height: 0px !important
449
+ height: fit-content !important
450
+ border-radius: 0px
451
+ .nested-drawer-back-icon
452
+ color: $description !important
453
+
454
+ .drawer-back-action-wrapper
455
+ margin-bottom: $xs
456
+ padding: $xs 0
457
+
458
+ .nested-drawer-inherited-icons
459
+ div .q-icon.list-icons
460
+ color: $dark !important
461
+
462
+ .u-drawer, .u-nested-drawer
463
+ .q-scrollarea__thumb
464
+ width: 3px
465
+
466
+ .u-drawer .q-list--padding.slots-padding-wrapper
467
+ padding: 0 $xs !important
468
+
469
+ .u-drawer .drawer-footer.slots-padding-wrapper
470
+ padding: 0 $xs $ba $xs !important
471
+ </style>
@@ -0,0 +1,124 @@
1
+ <script setup>
2
+ import { useScreenType } from '../../../composables/useScreenType.js'
3
+ import UBadgeStd from '../UBadgeStd.vue'
4
+ import UMenuItem from '../UMenuItem.vue'
5
+ import UTooltip from '../UTooltip.vue'
6
+
7
+ const emit = defineEmits(['childMenuItemClick'])
8
+
9
+ const animationType = defineModel('animationType', {
10
+ default: 'backward',
11
+ type: String,
12
+ })
13
+ const currentPath = defineModel('currentPath', {
14
+ default: '',
15
+ type: String,
16
+ })
17
+ const index = defineModel('index', {
18
+ default: '',
19
+ type: Number,
20
+ })
21
+ const menuItem = defineModel('menuItem', {
22
+ default: null,
23
+ type: Object,
24
+ })
25
+ const miniState = defineModel('miniState', {
26
+ default: false,
27
+ type: Boolean,
28
+ })
29
+ const multiLevel = defineModel('multiLevel', {
30
+ default: false,
31
+ type: Boolean,
32
+ })
33
+
34
+ const $screen = useScreenType()
35
+
36
+ /**
37
+ * returning x offset for tooltip for long text
38
+ * @param {*} label
39
+ */
40
+ const getXOffset = (label) => {
41
+ let labelLength = label.trim().length
42
+ return labelLength <= 4 ? 65 : labelLength < 9 ? 85 : 145
43
+ }
44
+
45
+ const handleMenuClick = (menu) => {
46
+ emit('childMenuItemClick', menu)
47
+ }
48
+ </script>
49
+
50
+ <template>
51
+ <transition
52
+ appear
53
+ :enter-active-class="`animated ${
54
+ animationType === 'backward' ? 'slideInLeft' : 'slideInRight'
55
+ } delay-0.6s`"
56
+ >
57
+ <UMenuItem
58
+ :class="{
59
+ 'drawer-items': true,
60
+ 'mini-menu-box': miniState,
61
+ 'mobile-menu': !$screen.isDesktop,
62
+ 'nested-drawer-inherited-icons': multiLevel,
63
+ }"
64
+ :icon-class="!$screen.isDesktop ? 'list-icons' : ''"
65
+ :id="`u-drawer-menu-${index}`"
66
+ :label="menuItem.label"
67
+ :left-icon="menuItem.leftIcon"
68
+ :selected="
69
+ !multiLevel ? currentPath === menuItem.to.replaceAll('/', '') : false
70
+ "
71
+ @on-click="handleMenuClick(menuItem)"
72
+ >
73
+ <template v-if="!miniState" #trailing_slot>
74
+ <UBadgeStd
75
+ v-if="menuItem.badgeInfo"
76
+ :class="{
77
+ 'nested-badge-margin': multiLevel,
78
+ }"
79
+ :label="menuItem.badgeInfo"
80
+ size="lg"
81
+ tabindex="-1"
82
+ />
83
+ <q-icon
84
+ v-if="menuItem.rightIcon && !multiLevel"
85
+ :class="`${menuItem.rightIcon} ${
86
+ currentPath === menuItem.to.replaceAll('/', '')
87
+ ? ''
88
+ : 'non-active-right-icon'
89
+ }`"
90
+ :aria-label="menuItem.badgeInfo"
91
+ size="1rem"
92
+ tabindex="-1"
93
+ />
94
+ <q-icon
95
+ v-if="
96
+ (menuItem.children && menuItem.children.length && multiLevel) ||
97
+ (menuItem.slot && menuItem.slot.hasSlot && multiLevel)
98
+ "
99
+ class="fa-kit fa-chevron-right navigation-right-icon"
100
+ aria-label="Open menu"
101
+ size="1.5rem"
102
+ tabindex="-1"
103
+ />
104
+ </template>
105
+ </UMenuItem>
106
+ </transition>
107
+ <UTooltip
108
+ v-if="miniState"
109
+ anchor="center right"
110
+ :description="menuItem.label"
111
+ :offset="[getXOffset(menuItem.label), 20]"
112
+ self="center right"
113
+ :target="`#u-drawer-menu-${index}`"
114
+ />
115
+ </template>
116
+
117
+ <style lang="sass">
118
+ .drawer-menu-list .q-icon.navigation-right-icon
119
+ margin-left: $xs
120
+ color: $dark !important
121
+
122
+ .nested-badge-margin
123
+ margin-right: 0px !important
124
+ </style>