@usssa/component-library 1.0.0-beta.9 → 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -49,10 +49,13 @@ const props = defineProps({
49
49
  type: String,
50
50
  default: 'center end',
51
51
  },
52
+ showIconBorder: {
53
+ type: Boolean,
54
+ default: false,
55
+ },
52
56
  size: {
53
57
  type: String,
54
58
  default: 'md',
55
- validator: (val) => ['sm', 'md', 'lg'].includes(val),
56
59
  },
57
60
  tooltip: {
58
61
  type: String,
@@ -65,8 +68,8 @@ const props = defineProps({
65
68
  })
66
69
 
67
70
  const btnAriaLabel = computed(() => {
68
- if(props.badge) {
69
- return props.ariaLabel + " " + props.badgeLabel
71
+ if (props.badge) {
72
+ return props.ariaLabel + ' ' + props.badgeLabel
70
73
  }
71
74
  return props.ariaLabel
72
75
  })
@@ -140,6 +143,7 @@ const handleClick = () => {
140
143
  :offset="offset"
141
144
  :self="self"
142
145
  />
146
+
143
147
  <slot name="menu" />
144
148
  </template>
145
149
  </q-btn>
@@ -1,7 +1,7 @@
1
1
  <script setup>
2
2
  import { computed, nextTick, ref, watch } from 'vue'
3
- import UTooltip from './UTooltip.vue'
4
3
  import { isQuasarColor } from '../../utils/data'
4
+ import UTooltip from './UTooltip.vue'
5
5
 
6
6
  const emit = defineEmits(['update:modelValue', 'onClick'])
7
7
  const props = defineProps({
@@ -151,7 +151,7 @@ watch(
151
151
  padding: $xs
152
152
  border-radius: 20px
153
153
  height: $lg
154
- margin-left: 0px !important
154
+ margin: 0px !important
155
155
 
156
156
  &.q-chip--dense
157
157
  .chip-label
@@ -4,6 +4,7 @@ import { useScreenType } from '../../composables/useScreenType'
4
4
  import UBtnStd from './UBtnStd.vue'
5
5
  import UInputTextStd from './UInputTextStd.vue'
6
6
  import USheet from './USheet.vue'
7
+ import { debounce } from 'quasar'
7
8
 
8
9
  const date = defineModel('date', { default: null })
9
10
 
@@ -63,6 +64,10 @@ const props = defineProps({
63
64
  toolTipText: {
64
65
  type: String,
65
66
  },
67
+ useDebounce: {
68
+ type: Boolean,
69
+ default: false,
70
+ },
66
71
  validationRules: { type: Array, default: () => [] },
67
72
  })
68
73
 
@@ -115,7 +120,7 @@ const onUpdateSheet = (value) => {
115
120
  }
116
121
  }
117
122
 
118
- const onUpdateValue = (value) => {
123
+ const updateValue = (value) => {
119
124
  if (value.search('-') > -1) {
120
125
  date.value = { from: value.split('-')[0], to: value.split('-')[1] }
121
126
  } else {
@@ -123,6 +128,16 @@ const onUpdateValue = (value) => {
123
128
  }
124
129
  }
125
130
 
131
+ const debouncedUpdateValue = debounce(updateValue, 1000)
132
+
133
+ const onUpdateValue = (value) => {
134
+ if (props.useDebounce) {
135
+ debouncedUpdateValue(value)
136
+ } else {
137
+ updateValue(value)
138
+ }
139
+ }
140
+
126
141
  const openDatePicker = () => {
127
142
  if ($screen.value.isMobile) {
128
143
  openDialogs()
@@ -183,6 +198,7 @@ watch(
183
198
  <UInputTextStd
184
199
  v-model="selectedDate"
185
200
  :class="inputClass ? inputClass : ''"
201
+ autocomplete="off"
186
202
  :borderless="borderless"
187
203
  :dataTestId="dataTestId"
188
204
  :disable="disable"
@@ -205,7 +221,7 @@ watch(
205
221
  aria-label="open date picker"
206
222
  :flat="true"
207
223
  :size="size"
208
- :tabindex="disable ? -1 : 0"
224
+ :tabindex="-1"
209
225
  @mousedown.prevent
210
226
  @touchstart.prevent="openDatePicker"
211
227
  @on-click="openDatePicker"
@@ -214,7 +230,7 @@ watch(
214
230
  class="cursor-pointer date-picker-icon fa-kit-duotone fa-calendar-event"
215
231
  alt="open date picker"
216
232
  size="1rem"
217
- tabindex="-1"
233
+ tabindex="0"
218
234
  >
219
235
  <q-popup-proxy
220
236
  v-if="!$screen.isMobile"
@@ -260,7 +276,7 @@ watch(
260
276
  :dataTestId="dataTestId"
261
277
  :hint-icon="hintIcon"
262
278
  :mask="`${range ? '##/##/####-##/##/####' : '##/##/####'}`"
263
- tabindex="-1"
279
+ tabindex="0"
264
280
  @update:modelValue="onUpdateSheet"
265
281
  >
266
282
  <template #append>
@@ -269,13 +285,13 @@ watch(
269
285
  aria-label="open date picker"
270
286
  :flat="true"
271
287
  :size="size"
272
- :tabindex="disable ? -1 : 0"
288
+ :tabindex="-1"
273
289
  >
274
290
  <q-icon
275
291
  class="cursor-pointer date-picker-icon fa-kit-duotone fa-calendar-event"
276
292
  alt="open date picker"
277
293
  size="1rem"
278
- tabindex="-1"
294
+ tabindex="0"
279
295
  >
280
296
  </q-icon>
281
297
  </UBtnStd>
@@ -565,18 +581,36 @@ watch(
565
581
  padding: 0px !important
566
582
  min-width: 0px !important
567
583
 
584
+ // remove hover background
585
+ &:hover
586
+ background: transparent !important
587
+ box-shadow: none !important
588
+
589
+ // disable ripple effect
590
+ .q-ripple
591
+ display: none !important
592
+
593
+
568
594
  &.q-hoverable:hover > .q-focus-helper
569
595
  opacity: 0
570
596
 
571
597
  &:focus-visible
572
- outline: auto !important
598
+ background: transparent !important
599
+ box-shadow: none !important
600
+ outline: none !important
601
+
602
+ .q-focus-helper
603
+ display: none !important
604
+ background: transparent !important
573
605
 
574
- .q-focus-helper
575
- display: none
576
606
 
577
607
  .date-picker-icon
578
608
  color: $description
579
609
 
610
+ &:focus-visible
611
+ outline: auto !important
612
+
613
+
580
614
  .selected-month-year
581
615
  color: #12316C
582
616
  background: #234ba926
@@ -340,6 +340,12 @@ watch(
340
340
  .q-focus-helper
341
341
  display: none
342
342
 
343
+ .u-menu-link
344
+ .q-badge
345
+ position: absolute
346
+ right: 0
347
+ margin-right: $xs
348
+
343
349
  .q-list--padding
344
350
  padding: 0 !important
345
351
  .drawer-menu-list
@@ -71,22 +71,13 @@ const handleMenuClick = (menu) => {
71
71
  @on-click="handleMenuClick(menuItem)"
72
72
  >
73
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
74
  <q-icon
84
75
  v-if="menuItem.rightIcon && !multiLevel"
85
76
  :class="`${menuItem.rightIcon} ${
86
77
  currentPath === menuItem.to.replaceAll('/', '')
87
78
  ? ''
88
79
  : 'non-active-right-icon'
89
- }`"
80
+ } q-ml-xs`"
90
81
  :aria-label="menuItem.badgeInfo"
91
82
  size="1rem"
92
83
  tabindex="-1"
@@ -101,6 +92,19 @@ const handleMenuClick = (menu) => {
101
92
  size="1.5rem"
102
93
  tabindex="-1"
103
94
  />
95
+ <UBadgeStd
96
+ v-if="menuItem.badgeInfo"
97
+ :class="{
98
+ 'badge-with-navigation-icon':
99
+ (menuItem.children && menuItem.children.length && multiLevel) ||
100
+ (menuItem.slot && menuItem.slot.hasSlot && multiLevel),
101
+ }"
102
+ class="default-badge-position"
103
+ :color="menuItem.badgeStyle?.color ?? 'primary'"
104
+ :label="menuItem.badgeInfo"
105
+ :size="menuItem.badgeStyle?.size ?? 'lg'"
106
+ tabindex="-1"
107
+ />
104
108
  </template>
105
109
  </UMenuItem>
106
110
  </transition>
@@ -118,7 +122,9 @@ const handleMenuClick = (menu) => {
118
122
  .drawer-menu-list .q-icon.navigation-right-icon
119
123
  margin-left: $xs
120
124
  color: $dark !important
125
+ position: absolute
126
+ right: 0
121
127
 
122
- .nested-badge-margin
123
- margin-right: 0px !important
128
+ .badge-with-navigation-icon
129
+ margin-right: $ms !important
124
130
  </style>
@@ -1,5 +1,5 @@
1
1
  <script setup>
2
- import { computed, ref } from 'vue'
2
+ import { computed, onMounted, ref } from 'vue'
3
3
 
4
4
  import defaultImage from '../../assets/no-result.svg'
5
5
  import { useScreenType } from '../../composables/useScreenType'
@@ -48,13 +48,27 @@ const props = defineProps({
48
48
  eventViewText: {
49
49
  type: String,
50
50
  },
51
+ isRegisterEventActionDisabled: {
52
+ type: Boolean,
53
+ default: false,
54
+ },
55
+ isViewEventActionDisabled: {
56
+ type: Boolean,
57
+ default: false,
58
+ },
59
+ registerEventTooltip: {
60
+ type: String,
61
+ default: '',
62
+ },
51
63
  })
52
64
 
65
+ const VERTICAL_TEXT_LIMIT = 13
66
+
53
67
  const $screen = useScreenType()
68
+
54
69
  const eventChip = ref(true) // this is required to show chip
55
70
  const isCategoryOverflowing = ref(false)
56
71
  const isNameOverflowing = ref(false)
57
- const textECategory = ref(null)
58
72
  const textEName = ref(null)
59
73
 
60
74
  const eventAgeGroup = computed(() => trimmedLabel(props.eventAgeGroup, 30))
@@ -75,10 +89,8 @@ const eventViewText = computed(() =>
75
89
  const isMobile = computed(() => $screen.value.isMobile)
76
90
 
77
91
  const checkOverflow = () => {
78
- if (textECategory.value) {
79
- isCategoryOverflowing.value =
80
- textECategory.value.scrollWidth > textECategory.value.clientWidth ||
81
- textECategory.value.scrollHeight > textECategory.value.clientHeight
92
+ if (props.eventCategory.length > VERTICAL_TEXT_LIMIT) {
93
+ isCategoryOverflowing.value = true
82
94
  }
83
95
 
84
96
  if (textEName.value) {
@@ -95,6 +107,16 @@ const registerClick = () => {
95
107
  const viewClick = () => {
96
108
  emit('onView')
97
109
  }
110
+
111
+ onMounted(() => {
112
+ const verticalTextEle = document.getElementsByClassName('event-vertical-text')
113
+ Array.from(verticalTextEle).forEach((el) => {
114
+ const originalText = el.innerText.trim()
115
+ if (originalText.length > VERTICAL_TEXT_LIMIT) {
116
+ el.innerText = originalText.slice(0, VERTICAL_TEXT_LIMIT) + '...'
117
+ }
118
+ })
119
+ })
98
120
  </script>
99
121
 
100
122
  <template>
@@ -109,9 +131,8 @@ const viewClick = () => {
109
131
  >
110
132
  <!-- Column 1: Rotated Text -->
111
133
  <div
112
- class="flex items-center justify-center q-py-sm q-px-xs rotated-text text-dark text-italic text-display-xxxs text-center cornero-font-family ellipsis"
134
+ class="flex items-center justify-center q-py-sm q-px-xs rotated-text event-vertical-text text-dark text-italic text-display-xxxs text-center cornero-font-family ellipsis"
113
135
  data-testid="eventCategory"
114
- ref="textECategory"
115
136
  @mouseenter="checkOverflow"
116
137
  >
117
138
  {{ props.eventCategory }}
@@ -185,7 +206,7 @@ const viewClick = () => {
185
206
  :description="props.eventAgeGroup"
186
207
  />
187
208
  </span>
188
- |
209
+ <span v-if="props.eventAgeGroup && props.eventLocation">|</span>
189
210
  <span v-if="props.eventLocation" class="q-px-xxs">
190
211
  {{ eventLocation.text }}
191
212
  <UTooltip
@@ -193,7 +214,13 @@ const viewClick = () => {
193
214
  :description="props.eventLocation"
194
215
  />
195
216
  </span>
196
- |
217
+ <span
218
+ v-if="
219
+ (props.eventAgeGroup || props.eventLocation) && props.eventHost
220
+ "
221
+ >
222
+ |
223
+ </span>
197
224
  <span v-if="props.eventHost" class="q-ml-xxs">
198
225
  {{ eventHost.text }}
199
226
  <UTooltip
@@ -213,6 +240,7 @@ const viewClick = () => {
213
240
  :aria-label="props.eventRegisterText || 'Register Event'"
214
241
  color="primary"
215
242
  data-testid="eventRegisterBtn"
243
+ :disable="isRegisterEventActionDisabled"
216
244
  size="md"
217
245
  @click="registerClick"
218
246
  >
@@ -227,6 +255,7 @@ const viewClick = () => {
227
255
  :aria-label="props.eventViewText || 'View Event'"
228
256
  color="primary"
229
257
  data-testid="eventViewBtn"
258
+ :disable="isViewEventActionDisabled"
230
259
  flat
231
260
  size="md"
232
261
  @click="viewClick"
@@ -253,7 +282,6 @@ const viewClick = () => {
253
282
  <div
254
283
  class="text-dark text-display-xxxs text-italic cornero-font-family text-no-wrap ellipsis"
255
284
  data-testid="eventCategory"
256
- ref="textECategory"
257
285
  @mouseenter="checkOverflow"
258
286
  >
259
287
  {{ props.eventCategory }}
@@ -310,14 +338,14 @@ const viewClick = () => {
310
338
  </div>
311
339
 
312
340
  <div class="event-item-mobile text-body-md text-description q-mt-ba">
313
- <span v-if="props.eventAgeGroup" class="q-ml-xxs">
341
+ <span v-if="props.eventAgeGroup" class="q-mx-xxs">
314
342
  {{ eventAgeGroup.text }}
315
343
  <UTooltip
316
344
  v-if="eventAgeGroup.isTrimmed"
317
345
  :description="props.eventAgeGroup"
318
346
  />
319
347
  </span>
320
- |
348
+ <span v-if="props.eventAgeGroup && props.eventLocation">|</span>
321
349
  <span v-if="props.eventLocation" class="q-px-xxs">
322
350
  {{ eventLocation.text }}
323
351
  <UTooltip
@@ -325,7 +353,10 @@ const viewClick = () => {
325
353
  :description="props.eventLocation"
326
354
  />
327
355
  </span>
328
- |
356
+ <span
357
+ v-if="(props.eventAgeGroup || props.eventLocation) && props.eventHost"
358
+ >|</span
359
+ >
329
360
  <span v-if="props.eventHost" class="q-ml-xxs">
330
361
  {{ eventHost.text }}
331
362
  <UTooltip v-if="eventHost.isTrimmed" :description="props.eventHost" />
@@ -342,6 +373,7 @@ const viewClick = () => {
342
373
  :aria-label="props.eventViewText || 'View Event'"
343
374
  color="primary"
344
375
  data-testid="eventViewBtn"
376
+ :disable="isViewEventActionDisabled"
345
377
  flat
346
378
  :label="eventViewText.text"
347
379
  size="md"
@@ -352,6 +384,7 @@ const viewClick = () => {
352
384
  :aria-label="props.eventRegisterText || 'Register Event'"
353
385
  color="primary"
354
386
  data-testid="eventRegisterBtn"
387
+ :disable="isRegisterEventActionDisabled"
355
388
  :label="eventRegisterText.text"
356
389
  size="md"
357
390
  @click="registerClick"
@@ -1,6 +1,8 @@
1
1
  <script setup>
2
- import { ref } from 'vue'
2
+ import { nextTick, ref, watch } from 'vue'
3
+ import UBtnStd from './UBtnStd.vue'
3
4
  import URadioStd from './URadioStd.vue'
5
+ import UTooltip from './UTooltip.vue'
4
6
 
5
7
  const emit = defineEmits(['handleSelectChange'])
6
8
  const isSelected = defineModel('isSelected', {
@@ -36,6 +38,19 @@ const props = defineProps({
36
38
  type: String,
37
39
  default: 'Expand',
38
40
  },
41
+ expansionButtonProps: {
42
+ type: Object,
43
+ default: () => ({
44
+ flat: true,
45
+ outline: false,
46
+ color: 'primary',
47
+ label: '',
48
+ size: '',
49
+ rightIcon: 'fa-kit fa-caret-down',
50
+ leftIcon: '',
51
+ disable: false,
52
+ }),
53
+ },
39
54
  expansionIcon: {
40
55
  type: String,
41
56
  default: 'fa-kit fa-caret-down',
@@ -60,6 +75,10 @@ const props = defineProps({
60
75
  type: Number,
61
76
  default: 20.563,
62
77
  },
78
+ useExpansionButton: {
79
+ type: Boolean,
80
+ default: false,
81
+ },
63
82
  toggleIconLeft: {
64
83
  type: Boolean,
65
84
  default: false,
@@ -71,6 +90,17 @@ const props = defineProps({
71
90
  })
72
91
 
73
92
  const isExpanded = ref(false)
93
+ const isOverflowing = ref(false)
94
+ const labelRef = ref(null)
95
+
96
+ const checkOverflow = () => {
97
+ nextTick(() => {
98
+ if (labelRef.value) {
99
+ const el = labelRef.value
100
+ isOverflowing.value = el.scrollWidth > el.clientWidth
101
+ }
102
+ })
103
+ }
74
104
 
75
105
  const handleChange = (value) => {
76
106
  emit('handleSelectChange', value)
@@ -89,6 +119,16 @@ const toggleExpansion = () => {
89
119
  isExpanded.value = !isExpanded.value
90
120
  }
91
121
  }
122
+
123
+ watch(
124
+ () => props.label,
125
+ () => {
126
+ checkOverflow()
127
+ },
128
+ {
129
+ immediate: true,
130
+ }
131
+ )
92
132
  </script>
93
133
 
94
134
  <template>
@@ -139,26 +179,54 @@ const toggleExpansion = () => {
139
179
  </q-icon>
140
180
  <slot name="avatar" />
141
181
  <div class="column u-expansion-label">
142
- <span class="text-caption-lg">{{ label }}</span>
143
- <span class="text-body-xs">{{ caption }}</span>
182
+ <span
183
+ :class="`text-caption-lg text-truncate ${
184
+ isOverflowing ? `cursor-pointer` : ``
185
+ }`"
186
+ ref="labelRef"
187
+ @mouseenter="checkOverflow"
188
+ >{{ label }}</span
189
+ >
190
+ <UTooltip
191
+ v-if="isOverflowing"
192
+ anchor="bottom middle"
193
+ :description="label"
194
+ :offset="[14, 14]"
195
+ />
196
+ <template v-if="$slots.caption">
197
+ <slot name="caption" />
198
+ </template>
199
+ <template v-else>
200
+ <span class="text-body-xs text-description">{{ caption }}</span>
201
+ </template>
144
202
  </div>
145
- <q-icon
146
- v-if="!toggleIconLeft"
147
- :class="[
148
- 'cursor-pointer',
149
- 'icon-secondary-opacity',
150
- 'transition-all',
151
- expansionIcon,
152
- isExpanded ? toggleIconRotationClass : '',
153
- ]"
154
- :aria-label="isExpanded ? collapsedAriaLabel : expandAriaLabel"
155
- :color="expansionIconColor"
156
- :size="expansionIconSize"
157
- :tabindex="disabled ? -1 : 0"
158
- @click.stop="toggleExpansion"
159
- @keydown.stop="onIconKeydown"
160
- >
161
- </q-icon>
203
+ <template v-if="!toggleIconLeft">
204
+ <UBtnStd
205
+ v-bind="expansionButtonProps"
206
+ v-if="useExpansionButton"
207
+ :class="{ 'u-expansion-btn--expanded': isExpanded }"
208
+ :aria-label="isExpanded ? collapsedAriaLabel : expandAriaLabel"
209
+ :tabindex="disabled ? -1 : 0"
210
+ @click.stop="toggleExpansion"
211
+ @keydown.stop="onIconKeydown"
212
+ />
213
+ <q-icon
214
+ v-else
215
+ :class="[
216
+ 'cursor-pointer',
217
+ 'icon-secondary-opacity',
218
+ 'transition-all',
219
+ expansionIcon,
220
+ isExpanded ? toggleIconRotationClass : '',
221
+ ]"
222
+ :aria-label="isExpanded ? collapsedAriaLabel : expandAriaLabel"
223
+ :color="expansionIconColor"
224
+ :size="expansionIconSize"
225
+ :tabindex="disabled ? -1 : 0"
226
+ @click.stop="toggleExpansion"
227
+ @keydown.stop="onIconKeydown"
228
+ />
229
+ </template>
162
230
  </div>
163
231
  </template>
164
232
  <slot name="body" />
@@ -209,22 +277,49 @@ const toggleExpansion = () => {
209
277
  </q-icon>
210
278
  <slot name="avatar" />
211
279
  <div class="column u-expansion-label">
212
- <span class="text-caption-lg">{{ label }}</span>
213
- <span class="text-body-xs text-description">{{ caption }}</span>
280
+ <span
281
+ :class="`text-caption-lg text-truncate ${
282
+ isOverflowing ? `cursor-pointer` : ``
283
+ }`"
284
+ ref="labelRef"
285
+ @mouseenter="checkOverflow"
286
+ >{{ label }}</span
287
+ >
288
+ <UTooltip
289
+ v-if="isOverflowing"
290
+ anchor="bottom middle"
291
+ :description="label"
292
+ :offset="[14, 14]"
293
+ />
294
+ <template v-if="$slots.caption">
295
+ <slot name="caption" />
296
+ </template>
297
+ <template v-else>
298
+ <span class="text-body-xs text-description">{{ caption }}</span>
299
+ </template>
214
300
  </div>
215
- <q-icon
216
- v-if="!toggleIconLeft"
217
- :class="[
218
- 'cursor-pointer',
219
- 'icon-secondary-opacity',
220
- 'transition-all',
221
- expansionIcon,
222
- isExpanded ? toggleIconRotationClass : '',
223
- ]"
224
- :color="expansionIconColor"
225
- :size="expansionIconSize"
226
- >
227
- </q-icon>
301
+ <template v-if="!toggleIconLeft">
302
+ <UBtnStd
303
+ v-if="useExpansionButton"
304
+ v-bind="expansionButtonProps"
305
+ :aria-label="isExpanded ? collapsedAriaLabel : expandAriaLabel"
306
+ :tabindex="disabled ? -1 : 0"
307
+ @click.stop="toggleExpansion"
308
+ @keydown.stop="onIconKeydown"
309
+ />
310
+ <q-icon
311
+ v-else
312
+ :class="[
313
+ 'cursor-pointer',
314
+ 'icon-secondary-opacity',
315
+ 'transition-all',
316
+ expansionIcon,
317
+ isExpanded ? toggleIconRotationClass : '',
318
+ ]"
319
+ :color="expansionIconColor"
320
+ :size="expansionIconSize"
321
+ />
322
+ </template>
228
323
  </div>
229
324
  </template>
230
325
  <slot name="body" />
@@ -254,6 +349,13 @@ const toggleExpansion = () => {
254
349
  word-break: break-word
255
350
  overflow-wrap: break-word
256
351
 
352
+ .text-truncate
353
+ overflow: hidden
354
+ text-overflow: ellipsis
355
+ white-space: nowrap
356
+ display: block
357
+ max-width: 100%
358
+
257
359
  .q-expansion-item__content > :first-child
258
360
  padding: $xs $ba $ba $ba
259
361
 
@@ -268,6 +370,10 @@ const toggleExpansion = () => {
268
370
  transform: rotate(90deg)
269
371
  transition: 0.3s
270
372
 
373
+ .u-expansion-btn--expanded .q-icon.on-right
374
+ transform: rotate(180deg)
375
+ transition: 0.3s
376
+
271
377
  .expansion-radio-wrapper
272
378
  .q-radio__label
273
379
  padding-left: 0px !important
@@ -151,6 +151,10 @@ const props = defineProps({
151
151
  type: Boolean,
152
152
  default: false,
153
153
  },
154
+ showCustomTable: {
155
+ type: Boolean,
156
+ default: false,
157
+ },
154
158
  tableCustomClass: {
155
159
  type: String,
156
160
  default: '',
@@ -200,7 +204,9 @@ const virtualScroll = ref(false)
200
204
  <UAvatar name="UExpansion" :round="true" size="lg" />
201
205
  </template>
202
206
  <template #body>
207
+ <slot v-if="showCustomTable" name="custom_table" />
203
208
  <UTableStd
209
+ v-else
204
210
  v-model:columns="columns"
205
211
  v-model:grid="grid"
206
212
  v-model:pagination="pagination"
@@ -257,8 +263,6 @@ const virtualScroll = ref(false)
257
263
  .q-expansion-item__content
258
264
  padding: 0px !important
259
265
 
260
-
261
-
262
266
  .q-table__grid-content
263
267
  .expansion-table-card
264
268
  padding: 0px !important