@usssa/component-library 1.0.0-alpha.27 → 1.0.0-alpha.271

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 (105) hide show
  1. package/README.md +8 -5
  2. package/package.json +30 -8
  3. package/src/assets/VS.svg +5 -0
  4. package/src/assets/fonts/CorneroRegular.woff +0 -0
  5. package/src/assets/fonts/CorneroRegular.woff2 +0 -0
  6. package/src/assets/logo.svg +19 -0
  7. package/src/assets/no-result.svg +25 -0
  8. package/src/assets/upload-illustration.svg +48 -0
  9. package/src/components/core/UAccordionSelect.vue +237 -0
  10. package/src/components/core/UAvatar.vue +90 -26
  11. package/src/components/core/UAvatarGroup.vue +62 -52
  12. package/src/components/core/UBadgeStd.vue +6 -1
  13. package/src/components/core/UBannerStd.vue +100 -31
  14. package/src/components/core/UBracket.vue +2181 -0
  15. package/src/components/core/UBreadCrumbs.vue +171 -0
  16. package/src/components/core/UBtnIcon.vue +106 -53
  17. package/src/components/core/UBtnStd.vue +38 -31
  18. package/src/components/core/UBtnToggle.vue +11 -6
  19. package/src/components/core/UCheckboxStd.vue +26 -20
  20. package/src/components/core/UChip.vue +107 -58
  21. package/src/components/core/UDate.vue +627 -0
  22. package/src/components/core/UDialogStd.vue +456 -58
  23. package/src/components/core/UDrawer/UDrawer.vue +479 -0
  24. package/src/components/core/UDrawer/UDrawerMenuItem.vue +130 -0
  25. package/src/components/core/UEventCard.vue +463 -0
  26. package/src/components/core/UExpansionStd.vue +380 -0
  27. package/src/components/core/UExpansionTableStd.vue +311 -0
  28. package/src/components/core/UFilter.vue +99 -0
  29. package/src/components/core/UGameObject.vue +478 -0
  30. package/src/components/core/UInnerLoader.vue +69 -0
  31. package/src/components/core/UInputAddressLookup.vue +535 -0
  32. package/src/components/core/UInputPhoneStd.vue +74 -67
  33. package/src/components/core/UInputTextStd.vue +99 -64
  34. package/src/components/core/UInputTypeahead.vue +44 -0
  35. package/src/components/core/UInputTypeaheadAdvanceSearch.vue +134 -0
  36. package/src/components/core/UMatchup.vue +404 -0
  37. package/src/components/core/UMenuButtonStd.vue +280 -0
  38. package/src/components/core/UMenuDropdown.vue +38 -33
  39. package/src/components/core/UMenuDropdownAdvancedSearch.vue +306 -0
  40. package/src/components/core/UMenuItem.vue +226 -0
  41. package/src/components/core/UMenuSearch.vue +73 -0
  42. package/src/components/core/UModal.vue +660 -0
  43. package/src/components/core/UMultiSelectStd.vue +521 -63
  44. package/src/components/core/UPagination.vue +76 -24
  45. package/src/components/core/URadioBtn.vue +66 -43
  46. package/src/components/core/URadioStd.vue +23 -14
  47. package/src/components/core/USelectStd.vue +441 -84
  48. package/src/components/core/USheet.vue +349 -0
  49. package/src/components/core/UStepper/UProgress.vue +157 -0
  50. package/src/components/core/UStepper/UStepper.vue +214 -0
  51. package/src/components/core/UTabBtnStd.vue +36 -22
  52. package/src/components/core/UTable/UTable.vue +2269 -57
  53. package/src/components/core/UTableStd.vue +1436 -286
  54. package/src/components/core/UTabsStd.vue +53 -23
  55. package/src/components/core/UToggleStd.vue +18 -13
  56. package/src/components/core/UToolbar/UCustomMenuIcon.vue +58 -0
  57. package/src/components/core/UToolbar/UToolbar.vue +226 -0
  58. package/src/components/core/UTooltip.vue +32 -10
  59. package/src/components/core/UTypeahead.vue +890 -0
  60. package/src/components/core/UUploader.vue +757 -0
  61. package/src/components/core/UVenueCard.vue +221 -0
  62. package/src/components/index.js +83 -30
  63. package/src/composables/useNotify.js +16 -16
  64. package/src/composables/useOverlayLoader.js +23 -0
  65. package/src/composables/useScreenType.js +30 -0
  66. package/src/css/app.sass +69 -36
  67. package/src/css/colors.sass +2 -0
  68. package/src/css/quasar.variables.sass +102 -70
  69. package/src/css/vars/colors.variables.sass +28 -41
  70. package/src/utils/bracket.json +1538 -0
  71. package/src/utils/data.ts +179 -0
  72. package/src/App.vue +0 -9
  73. package/src/boot/.gitkeep +0 -0
  74. package/src/components/core/UMenutem.vue +0 -130
  75. package/src/layouts/MainLayout.vue +0 -145
  76. package/src/pages/Avatar.vue +0 -77
  77. package/src/pages/AvatarGroup.vue +0 -139
  78. package/src/pages/BadgeStd.vue +0 -83
  79. package/src/pages/BannerPage.vue +0 -76
  80. package/src/pages/BtnIcon.vue +0 -120
  81. package/src/pages/BtnStd.vue +0 -126
  82. package/src/pages/BtnToggle.vue +0 -131
  83. package/src/pages/CheckBox.vue +0 -62
  84. package/src/pages/Chip.vue +0 -108
  85. package/src/pages/ComponentBase.vue +0 -54
  86. package/src/pages/Dialog.vue +0 -206
  87. package/src/pages/ErrorNotFound.vue +0 -11
  88. package/src/pages/IndexPage.vue +0 -11
  89. package/src/pages/InputPhone.vue +0 -152
  90. package/src/pages/InputText.vue +0 -140
  91. package/src/pages/MenuDropdown.vue +0 -79
  92. package/src/pages/MenuItem.vue +0 -68
  93. package/src/pages/MultiSelectStd.vue +0 -174
  94. package/src/pages/NotifyPage.vue +0 -109
  95. package/src/pages/Pagination.vue +0 -71
  96. package/src/pages/Radio.vue +0 -80
  97. package/src/pages/RadioBtn.vue +0 -104
  98. package/src/pages/SelectStd.vue +0 -160
  99. package/src/pages/TabButtonPage.vue +0 -126
  100. package/src/pages/TablePage.vue +0 -375
  101. package/src/pages/TabsPage.vue +0 -261
  102. package/src/pages/TogglePage.vue +0 -58
  103. package/src/pages/TooltipPage.vue +0 -125
  104. package/src/router/index.js +0 -34
  105. package/src/router/routes.js +0 -121
@@ -0,0 +1,380 @@
1
+ <script setup>
2
+ import { nextTick, ref, watch } from 'vue'
3
+ import UBtnStd from './UBtnStd.vue'
4
+ import URadioStd from './URadioStd.vue'
5
+ import UTooltip from './UTooltip.vue'
6
+
7
+ const emit = defineEmits(['handleSelectChange'])
8
+ const isSelected = defineModel('isSelected', {
9
+ default: '',
10
+ type: [String, Number, Object, Array],
11
+ })
12
+ const props = defineProps({
13
+ caption: {
14
+ type: String,
15
+ default: '',
16
+ },
17
+ collapsedAriaLabel: {
18
+ type: String,
19
+ default: 'Collapsed',
20
+ },
21
+ dataTestId: {
22
+ type: String,
23
+ default: 'expansion-std',
24
+ },
25
+ disabled: {
26
+ type: Boolean,
27
+ default: false,
28
+ },
29
+ enableIconToggle: {
30
+ type: Boolean,
31
+ default: false,
32
+ },
33
+ enableSelection: {
34
+ type: Boolean,
35
+ default: false,
36
+ },
37
+ expandAriaLabel: {
38
+ type: String,
39
+ default: 'Expand',
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
+ },
54
+ expansionIcon: {
55
+ type: String,
56
+ default: 'fa-kit fa-caret-down',
57
+ },
58
+ expansionIconColor: {
59
+ type: String,
60
+ default: 'description',
61
+ },
62
+ expansionIconSize: {
63
+ type: String,
64
+ default: '1rem', // accept px , rem and (xs|sm|md|lg|xl)
65
+ },
66
+ label: {
67
+ type: String,
68
+ default: '',
69
+ },
70
+ option: {
71
+ default: null,
72
+ type: Object,
73
+ },
74
+ rowCardHeight: {
75
+ type: Number,
76
+ default: 20.563,
77
+ },
78
+ useExpansionButton: {
79
+ type: Boolean,
80
+ default: false,
81
+ },
82
+ toggleIconLeft: {
83
+ type: Boolean,
84
+ default: false,
85
+ },
86
+ toggleIconRotationClass: {
87
+ type: String,
88
+ default: 'rotate-180',
89
+ },
90
+ })
91
+
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
+ }
104
+
105
+ const handleChange = (value) => {
106
+ emit('handleSelectChange', value)
107
+ }
108
+
109
+ const onIconKeydown = (event) => {
110
+ if (props.disabled) return
111
+ if (event.key === 'Enter' || event.key === ' ') {
112
+ event.preventDefault()
113
+ toggleExpansion()
114
+ }
115
+ }
116
+
117
+ const toggleExpansion = () => {
118
+ if (!props.disabled) {
119
+ isExpanded.value = !isExpanded.value
120
+ }
121
+ }
122
+
123
+ watch(
124
+ () => props.label,
125
+ () => {
126
+ checkOverflow()
127
+ },
128
+ {
129
+ immediate: true,
130
+ }
131
+ )
132
+ </script>
133
+
134
+ <template>
135
+ <!-- For expand on expansion icon -->
136
+ <q-expansion-item
137
+ v-bind="$attrs"
138
+ v-if="enableIconToggle"
139
+ v-model="isExpanded"
140
+ class="u-expansion"
141
+ :dataTestId="dataTestId"
142
+ :disable="disabled"
143
+ expand-icon-class="hidden"
144
+ expand-icon-toggle
145
+ :style="{
146
+ 'min-height': `${isExpanded ? rowCardHeight + 'rem' : 'auto'}`,
147
+ overflowX: 'hidden',
148
+ }"
149
+ >
150
+ <template v-slot:header>
151
+ <div class="u-expansion-header">
152
+ <URadioStd
153
+ v-if="enableSelection"
154
+ v-model="isSelected"
155
+ class="expansion-radio-wrapper"
156
+ :aria-label="option.ariaLabel"
157
+ :dataTestId="`expansion-radio-std-${option.id}`"
158
+ :disable="option.disable || disabled"
159
+ :id="option.id"
160
+ :value="option.id"
161
+ @update:model-value="handleChange"
162
+ />
163
+ <q-icon
164
+ v-if="toggleIconLeft"
165
+ :class="[
166
+ 'cursor-pointer',
167
+ 'icon-secondary-opacity',
168
+ 'transition-all',
169
+ expansionIcon,
170
+ isExpanded ? toggleIconRotationClass : '',
171
+ ]"
172
+ :aria-label="isExpanded ? collapsedAriaLabel : expandAriaLabel"
173
+ :color="expansionIconColor"
174
+ :size="expansionIconSize"
175
+ :tabindex="disabled ? -1 : 0"
176
+ @click.stop="toggleExpansion"
177
+ @keydown.stop="onIconKeydown"
178
+ >
179
+ </q-icon>
180
+ <slot name="avatar" />
181
+ <div class="column u-expansion-label">
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>
202
+ </div>
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>
230
+ </div>
231
+ </template>
232
+ <slot name="body" />
233
+ <slot name="footer" />
234
+ </q-expansion-item>
235
+
236
+ <!-- For default expansion behavior -->
237
+ <q-expansion-item
238
+ v-bind="$attrs"
239
+ v-else
240
+ v-model="isExpanded"
241
+ class="u-expansion"
242
+ :dataTestId="dataTestId"
243
+ :disable="disabled"
244
+ expand-icon-class="hidden"
245
+ :style="{
246
+ 'min-height': `${isExpanded ? rowCardHeight + 'rem' : 'auto'}`,
247
+ overflowX: 'hidden',
248
+ }"
249
+ :toggle-aria-label="isExpanded ? collapsedAriaLabel : expandAriaLabel"
250
+ @keydown.space.prevent
251
+ >
252
+ <template v-slot:header>
253
+ <div class="u-expansion-header">
254
+ <URadioStd
255
+ v-if="enableSelection"
256
+ v-model="isSelected"
257
+ class="expansion-radio-wrapper"
258
+ :aria-label="option.ariaLabel"
259
+ :dataTestId="`expansion-radio-std-${option.id}`"
260
+ :disable="option.disable || disabled"
261
+ :id="option.id"
262
+ :value="option.id"
263
+ @update:model-value="handleChange"
264
+ />
265
+ <q-icon
266
+ v-if="toggleIconLeft"
267
+ :class="[
268
+ 'cursor-pointer',
269
+ 'icon-secondary-opacity',
270
+ 'transition-all',
271
+ expansionIcon,
272
+ isExpanded ? toggleIconRotationClass : '',
273
+ ]"
274
+ :color="expansionIconColor"
275
+ :size="expansionIconSize"
276
+ >
277
+ </q-icon>
278
+ <slot name="avatar" />
279
+ <div class="column u-expansion-label">
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>
300
+ </div>
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>
323
+ </div>
324
+ </template>
325
+ <slot name="body" />
326
+ <slot name="footer" />
327
+ </q-expansion-item>
328
+ </template>
329
+
330
+ <style lang="sass">
331
+ .u-expansion
332
+ border-radius: $border-radius-sm
333
+ border: 1px solid $neutral-4
334
+ overflow: hidden
335
+ width: 100%
336
+
337
+ .q-item
338
+ padding: $ba !important
339
+
340
+ .u-expansion-header
341
+ width: 100%
342
+ display: flex
343
+ align-items: center
344
+ gap: $xs
345
+
346
+ .u-expansion-label
347
+ flex: 1 1 0
348
+ min-width: 0
349
+ word-break: break-word
350
+ overflow-wrap: break-word
351
+
352
+ .text-truncate
353
+ overflow: hidden
354
+ text-overflow: ellipsis
355
+ white-space: nowrap
356
+ display: block
357
+ max-width: 100%
358
+
359
+ .q-expansion-item__content > :first-child
360
+ padding: $xs $ba $ba $ba
361
+
362
+ .q-expansion-item__content > :nth-child(2)
363
+ padding: $ba
364
+
365
+ .rotate-180
366
+ transform: rotate(180deg)
367
+ transition: 0.3s
368
+
369
+ .rotate-90
370
+ transform: rotate(90deg)
371
+ transition: 0.3s
372
+
373
+ .u-expansion-btn--expanded .q-icon.on-right
374
+ transform: rotate(180deg)
375
+ transition: 0.3s
376
+
377
+ .expansion-radio-wrapper
378
+ .q-radio__label
379
+ padding-left: 0px !important
380
+ </style>
@@ -0,0 +1,311 @@
1
+ <script setup>
2
+ import { ref } from 'vue'
3
+ import UAvatar from './UAvatar.vue'
4
+ import UExpansionStd from './UExpansionStd.vue'
5
+ import UTableStd from './UTableStd.vue'
6
+ import { useScreenType } from '../../composables/useScreenType'
7
+
8
+ const emit = defineEmits(['onCustomSort', 'onLoadMore'])
9
+
10
+ const columns = defineModel('columns', {
11
+ default: () => [],
12
+ type: Array,
13
+ })
14
+ const expansionMinHeight = defineModel('expansionMinHeight', {
15
+ default: 14,
16
+ type: Number,
17
+ })
18
+ const filteredRows = defineModel('filteredRows', { default: [], type: Array })
19
+ const grid = defineModel('grid', {
20
+ default: false,
21
+ type: Boolean,
22
+ })
23
+ const infiniteScroll = defineModel('infiniteScroll', {
24
+ default: false,
25
+ type: Boolean,
26
+ })
27
+ const infiniteScrollProperty = defineModel('infiniteScrollProperty', {
28
+ default: () => {
29
+ return {
30
+ color: 'primary',
31
+ height: '55rem',
32
+ image: '',
33
+ loading: false,
34
+ loadingMessage: 'Loading data',
35
+ noMoreData: false,
36
+ noMoreDataText: 'No more data',
37
+ padding: true,
38
+ size: '1rem',
39
+ type: 'default',
40
+ }
41
+ },
42
+ type: Object,
43
+ })
44
+ const loading = defineModel('table-loading', {
45
+ default: () => {},
46
+ type: Boolean,
47
+ })
48
+ const moreActionDialogData = defineModel('moreActionDialogData', {
49
+ type: Object,
50
+ default: null,
51
+ })
52
+ const pagination = defineModel('pagination', {
53
+ default: { page: 1, rowsPerPage: 5 },
54
+ type: Object,
55
+ })
56
+ const rows = defineModel('rows', {
57
+ default: () => [],
58
+ type: Array,
59
+ })
60
+ const rowCardHeight = defineModel('gridCardHeight', {
61
+ default: 25,
62
+ type: Number,
63
+ })
64
+ const selectedRows = defineModel('selectedRows', {
65
+ default: () => [],
66
+ type: Array,
67
+ })
68
+ const separator = defineModel('separator', {
69
+ default: 'horizontal',
70
+ type: String,
71
+ })
72
+ const showPagination = defineModel('showPagination', {
73
+ default: false,
74
+ type: Boolean,
75
+ })
76
+ const stickyHeader = defineModel('stickyHeader', {
77
+ default: false,
78
+ type: Boolean,
79
+ })
80
+ const tableRowHover = defineModel('tableRowHover', {
81
+ default: false,
82
+ type: Boolean,
83
+ })
84
+ const tableTitle = defineModel('tableTitle', {
85
+ default: '',
86
+ type: String,
87
+ })
88
+
89
+ const props = defineProps({
90
+ caption: {
91
+ type: String,
92
+ default: '',
93
+ },
94
+ closeIconLabel: {
95
+ default: '',
96
+ type: String,
97
+ },
98
+ collapsedAriaLabel: {
99
+ type: String,
100
+ default: 'Collapsed',
101
+ },
102
+ dataTestId: {
103
+ type: String,
104
+ default: 'expansion-table-std',
105
+ },
106
+ disabled: {
107
+ type: Boolean,
108
+ default: false,
109
+ },
110
+ enableGridOn: {
111
+ type: Array,
112
+ default: () => ['tablet', 'mobile'],
113
+ },
114
+ enableIconToggle: {
115
+ type: Boolean,
116
+ default: false,
117
+ },
118
+ enableSelection: {
119
+ type: Boolean,
120
+ default: false,
121
+ },
122
+ expandAriaLabel: {
123
+ type: String,
124
+ default: 'Expand',
125
+ },
126
+ expansionIconClass: {
127
+ type: String,
128
+ default: 'fa-kit fa-caret-down',
129
+ },
130
+ expansionIconColor: {
131
+ type: String,
132
+ default: 'description',
133
+ },
134
+ expansionIconSize: {
135
+ type: String,
136
+ default: '1rem', // accept px , rem and (xs|sm|md|lg|xl)
137
+ },
138
+ label: {
139
+ type: String,
140
+ default: '',
141
+ },
142
+ option: {
143
+ default: null,
144
+ type: Object,
145
+ },
146
+ selectMoreOptions: {
147
+ default: '',
148
+ type: String,
149
+ },
150
+ showAvatar: {
151
+ type: Boolean,
152
+ default: false,
153
+ },
154
+ showCustomTable: {
155
+ type: Boolean,
156
+ default: false,
157
+ },
158
+ tableCustomClass: {
159
+ type: String,
160
+ default: '',
161
+ },
162
+ toggleIconLeft: {
163
+ type: Boolean,
164
+ default: false,
165
+ },
166
+ viewMoreLabel: {
167
+ type: String,
168
+ default: 'View Options',
169
+ },
170
+ })
171
+
172
+ const $screen = useScreenType()
173
+
174
+ const bordered = ref(false)
175
+ const expansion = ref(false)
176
+ const flat = ref(true)
177
+ const isCustomSort = ref(false)
178
+ const multiSelection = ref(false)
179
+ const verticalMoreActions = ref(true)
180
+ const virtualScroll = ref(false)
181
+ </script>
182
+
183
+ <template>
184
+ <UExpansionStd
185
+ :class="`u-grid-expansion-table ${
186
+ !$screen.isMobile
187
+ ? 'desktop-tablet-mode desktop-expansion-grid-table'
188
+ : ''
189
+ }`"
190
+ :caption="caption"
191
+ :collapsed-aria-label="collapsedAriaLabel"
192
+ :dataTestId="dataTestId"
193
+ :disabled="disabled"
194
+ :enable-icon-toggle="enableIconToggle"
195
+ :enable-selection="enableSelection"
196
+ :expand-aria-label="expandAriaLabel"
197
+ :expansion-icon="expansionIconClass"
198
+ :expansion-icon-color="expansionIconColor"
199
+ :label="label"
200
+ :row-card-height="expansionMinHeight"
201
+ :toggle-icon-left="toggleIconLeft"
202
+ >
203
+ <template v-if="showAvatar" #avatar>
204
+ <UAvatar name="UExpansion" :round="true" size="lg" />
205
+ </template>
206
+ <template #body>
207
+ <slot v-if="showCustomTable" name="custom_table" />
208
+ <UTableStd
209
+ v-else
210
+ v-model:columns="columns"
211
+ v-model:grid="grid"
212
+ v-model:pagination="pagination"
213
+ v-model:loading="loading"
214
+ v-model:selected-rows="selectedRows"
215
+ v-model:rows="rows"
216
+ :customClass="tableCustomClass"
217
+ :bordered="bordered"
218
+ :close-icon-label="closeIconLabel"
219
+ :enable-grid-on="enableGridOn"
220
+ :expansion="expansion"
221
+ :flat="flat"
222
+ :infiniteScroll="infiniteScroll"
223
+ :infiniteScrollProperty="infiniteScrollProperty"
224
+ :isCustomSort="isCustomSort"
225
+ :more-action-dialog-data="moreActionDialogData"
226
+ :multiSelection="multiSelection"
227
+ :row-card-height="rowCardHeight"
228
+ :select-more-options="selectMoreOptions"
229
+ :separator="separator"
230
+ :showPagination="showPagination"
231
+ :stickyHeader="stickyHeader"
232
+ :tableRowHover="tableRowHover"
233
+ :title="tableTitle"
234
+ :vertical-more-actions="verticalMoreActions"
235
+ :viewMoreLabel="viewMoreLabel"
236
+ :virtualScroll="virtualScroll"
237
+ @onCustomSort="
238
+ (key, sortOrder, type) => $emit('onCustomSort', key, sortOrder, type)
239
+ "
240
+ @onLoadMore="(payload) => $emit('onLoadMore', payload)"
241
+ />
242
+ </template>
243
+ </UExpansionStd>
244
+ </template>
245
+
246
+ <style lang="sass">
247
+ .u-grid-expansion-table.desktop-tablet-mode.desktop-expansion-grid-table
248
+ .q-expansion-item__content
249
+ padding: $xxs !important
250
+
251
+ .u-grid-expansion-table
252
+ background: $neutral-2 !important
253
+ .u-expansion-label > :first-child
254
+ margin-bottom: $xxs !important
255
+
256
+ table tbody tr:last-child
257
+ .u-td-std
258
+ border-bottom: none !important
259
+
260
+ .q-expansion-item__content > :first-child
261
+ padding: 0px !important
262
+
263
+ .q-expansion-item__content
264
+ padding: 0px !important
265
+
266
+ .q-table__grid-content
267
+ .expansion-table-card
268
+ padding: 0px !important
269
+ .q-card
270
+ border-radius: inherit !important
271
+ border: none !important
272
+ box-shadow: none
273
+ .q-list
274
+ padding: $ba $ba 0px $ba !important
275
+ column-gap: $xs !important
276
+ row-gap: $ba !important
277
+ .q-item
278
+ .long-text-content
279
+ width: 8.2rem !important
280
+ .q-item.q-item-type:first-child
281
+ grid-column: auto !important
282
+ padding-top: 0 !important
283
+ padding-bottom: 0 !important
284
+ .q-item__section--main
285
+ display: inline !important
286
+ .q-item__label.q-item__label--caption span
287
+ font-weight: normal !important
288
+ line-height: normal !important
289
+ width: 100%
290
+ .q-item.q-item-type:last-child
291
+ padding-top: 0 !important
292
+ margin-bottom: 0 !important
293
+ .u-expansion-body
294
+ display: flex
295
+ .expansion-table-card-action
296
+ display: flex
297
+ justify-content: space-between
298
+ align-items: center
299
+ gap: $xs
300
+ width: 100%
301
+ padding: $xs 0px
302
+
303
+ .expansion-table-card-separator
304
+ width: 100%
305
+ padding: $xs $ba
306
+ background-color: white
307
+
308
+ .expansion-table-card:last-of-type
309
+ .q-card .q-list
310
+ padding-bottom: $xs !important
311
+ </style>