@bildvitta/quasar-ui-asteroid 3.17.0-beta.8 → 3.17.0
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.
- package/package.json +3 -2
- package/src/assets/sounds/nave-notification.mp3 +0 -0
- package/src/components/app-menu/QasAppMenu.vue +73 -15
- package/src/components/app-menu/QasAppMenu.yml +5 -5
- package/src/components/app-user/QasAppUser.vue +49 -40
- package/src/components/avatar/QasAvatar.vue +7 -8
- package/src/components/badge/QasBadge.vue +3 -29
- package/src/components/board-generator/QasBoardGenerator.vue +442 -40
- package/src/components/board-generator/QasBoardGenerator.yml +107 -12
- package/src/components/card/QasCard.vue +13 -4
- package/src/components/chart-view/QasChartView.vue +56 -3
- package/src/components/chart-view/QasChartView.yml +6 -0
- package/src/components/checkbox/QasCheckbox.vue +67 -11
- package/src/components/checkbox/QasCheckbox.yml +18 -0
- package/src/components/copy/QasCopy.vue +12 -2
- package/src/components/copy/QasCopy.yml +8 -0
- package/src/components/expansion-item/QasExpansionItem.vue +108 -76
- package/src/components/expansion-item/QasExpansionItem.yml +38 -10
- package/src/components/field/QasField.vue +1 -1
- package/src/components/form-generator/QasFormGenerator.vue +23 -10
- package/src/components/form-generator/QasFormGenerator.yml +2 -2
- package/src/components/grabbable/QasGrabbable.vue +14 -6
- package/src/components/grabbable/QasGrabbable.yml +4 -0
- package/src/components/grid-generator/QasGridGenerator.vue +3 -3
- package/src/components/grid-generator/QasGridGenerator.yml +2 -2
- package/src/components/grid-item/QasGridItem.vue +1 -1
- package/src/components/header/QasHeader.vue +11 -9
- package/src/components/infinite-scroll/QasInfiniteScroll.vue +16 -17
- package/src/components/infinite-scroll/QasInfiniteScroll.yml +7 -0
- package/src/components/list-view/QasListView.vue +16 -2
- package/src/components/list-view/QasListView.yml +9 -0
- package/src/components/radio/QasRadio.vue +24 -5
- package/src/components/radio/QasRadio.yml +6 -0
- package/src/components/select/QasSelect.vue +54 -7
- package/src/components/select/QasSelect.yml +6 -1
- package/src/components/select-filter/QasSelectFilter.vue +65 -0
- package/src/components/select-filter/QasSelectFilter.yml +36 -0
- package/src/components/stepper/QasStepper.vue +50 -3
- package/src/components/stepper-form-view/QasStepperFormView.vue +6 -4
- package/src/components/stepper-form-view/QasStepperFormView.yml +1 -1
- package/src/components/table-generator/QasTableGenerator.vue +3 -0
- package/src/components/text-truncate/QasTextTruncate.vue +77 -14
- package/src/components/text-truncate/QasTextTruncate.yml +14 -3
- package/src/components/uploader/QasUploader.vue +70 -24
- package/src/components/uploader/QasUploader.yml +15 -1
- package/src/components/welcome/QasWelcome.vue +8 -0
- package/src/components/welcome/QasWelcome.yml +3 -0
- package/src/composables/index.js +3 -1
- package/src/composables/private/index.js +1 -0
- package/src/composables/private/use-auth-user.js +20 -0
- package/src/composables/private/use-generator.js +20 -5
- package/src/composables/use-default-filters.js +106 -0
- package/src/composables/use-notifications.js +14 -0
- package/src/composables/use-query-cache.js +1 -1
- package/src/css/components/field.scss +13 -6
- package/src/helpers/set-scroll-on-grab.js +9 -1
- package/src/shared/badge-config.js +29 -0
- package/src/vue-plugin.js +3 -0
- package/src/components/app-menu/private/PvAppMenuHelpChat.vue +0 -222
|
@@ -1,42 +1,40 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div ref="expansionItem" class="full-width qas-expansion-item" :class="
|
|
3
|
-
<
|
|
4
|
-
<q-expansion-item header-class="text-bold q-mt-sm q-pa-none qas-expansion-item__header"
|
|
2
|
+
<div ref="expansionItem" class="full-width qas-expansion-item" :class="classes" v-bind="expansionProps.parent">
|
|
3
|
+
<qas-box class="qas-expansion-item__box" v-bind="boxProps">
|
|
4
|
+
<q-expansion-item v-model="modelValue" v-bind="expansionProps.item" header-class="text-bold q-mt-sm q-pa-none qas-expansion-item__header" @show="setShowContent">
|
|
5
5
|
<template #header>
|
|
6
|
-
<
|
|
6
|
+
<div class="full-width justify-between no-wrap row">
|
|
7
7
|
<div class="full-width">
|
|
8
|
-
<
|
|
9
|
-
<
|
|
10
|
-
<
|
|
11
|
-
|
|
12
|
-
</
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
8
|
+
<slot name="header">
|
|
9
|
+
<div class="items-center q-col-gutter-sm row">
|
|
10
|
+
<slot name="header-label">
|
|
11
|
+
<qas-label class="col-auto qas-expansion-item__label" :label="props.label" margin="none" typography="h5" />
|
|
12
|
+
</slot>
|
|
13
|
+
|
|
14
|
+
<div v-if="hasBadges" class="col-auto items-center q-col-gutter-sm row">
|
|
15
|
+
<div v-for="(badge, badgeIndex) in props.badges" :key="badgeIndex" class="col-auto">
|
|
16
|
+
<qas-badge v-bind="badge" />
|
|
17
|
+
</div>
|
|
18
18
|
</div>
|
|
19
19
|
</div>
|
|
20
|
-
</div>
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
<div v-if="hasHeaderBottom" class="q-mt-sm">
|
|
22
|
+
<slot name="header-bottom" />
|
|
23
|
+
</div>
|
|
24
|
+
</slot>
|
|
25
25
|
</div>
|
|
26
|
-
</slot>
|
|
27
|
-
</template>
|
|
28
26
|
|
|
29
|
-
|
|
27
|
+
<qas-btn class="qas-expansion-item__dropdown" color="grey-10" :disable="isDisabled" icon="sym_r_keyboard_arrow_down" />
|
|
28
|
+
</div>
|
|
29
|
+
</template>
|
|
30
30
|
|
|
31
31
|
<div :class="contentClasses">
|
|
32
|
-
<slot name="content">
|
|
32
|
+
<slot v-if="showContent" name="content">
|
|
33
33
|
<qas-grid-generator v-if="hasGridGenerator" use-inline v-bind="gridGeneratorProps" />
|
|
34
34
|
</slot>
|
|
35
35
|
</div>
|
|
36
|
-
|
|
37
|
-
<q-separator v-if="hasBottomSeparator" class="q-mt-md" />
|
|
38
36
|
</q-expansion-item>
|
|
39
|
-
</
|
|
37
|
+
</qas-box>
|
|
40
38
|
|
|
41
39
|
<div v-if="hasError" class="q-pt-sm qas-expansion-item__error-message text-caption text-negative">
|
|
42
40
|
{{ props.errorMessage }}
|
|
@@ -47,7 +45,7 @@
|
|
|
47
45
|
<script setup>
|
|
48
46
|
import QasBox from '../box/QasBox.vue'
|
|
49
47
|
|
|
50
|
-
import { computed, provide, inject,
|
|
48
|
+
import { computed, provide, inject, ref, useAttrs } from 'vue'
|
|
51
49
|
|
|
52
50
|
defineOptions({
|
|
53
51
|
name: 'QasExpansionItem',
|
|
@@ -60,16 +58,19 @@ const props = defineProps({
|
|
|
60
58
|
default: () => []
|
|
61
59
|
},
|
|
62
60
|
|
|
63
|
-
|
|
61
|
+
disable: {
|
|
64
62
|
type: Boolean
|
|
65
63
|
},
|
|
66
64
|
|
|
67
|
-
|
|
68
|
-
type:
|
|
69
|
-
default: ''
|
|
65
|
+
disableButton: {
|
|
66
|
+
type: Boolean
|
|
70
67
|
},
|
|
71
68
|
|
|
72
|
-
|
|
69
|
+
error: {
|
|
70
|
+
type: Boolean
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
errorMessage: {
|
|
73
74
|
type: String,
|
|
74
75
|
default: ''
|
|
75
76
|
},
|
|
@@ -79,12 +80,24 @@ const props = defineProps({
|
|
|
79
80
|
default: () => ({})
|
|
80
81
|
},
|
|
81
82
|
|
|
82
|
-
|
|
83
|
-
type:
|
|
83
|
+
group: {
|
|
84
|
+
type: String,
|
|
84
85
|
default: undefined
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
label: {
|
|
89
|
+
type: String,
|
|
90
|
+
default: ''
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
maxContentHeight: {
|
|
94
|
+
type: String,
|
|
95
|
+
default: ''
|
|
85
96
|
}
|
|
86
97
|
})
|
|
87
98
|
|
|
99
|
+
const modelValue = defineModel({ type: Boolean })
|
|
100
|
+
|
|
88
101
|
const attrs = useAttrs()
|
|
89
102
|
|
|
90
103
|
provide('isExpansionItem', true)
|
|
@@ -94,41 +107,30 @@ const slots = defineSlots()
|
|
|
94
107
|
|
|
95
108
|
// refs
|
|
96
109
|
const expansionItem = ref(null)
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
onMounted(setHasNextSibling)
|
|
110
|
+
const showContent = ref(false)
|
|
100
111
|
|
|
101
112
|
// constants
|
|
102
113
|
const isNestedExpansionItem = inject('isExpansionItem', false)
|
|
103
114
|
const isNestedBox = inject('isBox', false)
|
|
104
115
|
|
|
105
|
-
const component = {
|
|
106
|
-
is: isNestedExpansionItem ? 'div' : QasBox
|
|
107
|
-
}
|
|
108
|
-
|
|
109
116
|
// computed
|
|
117
|
+
const hasBadges = computed(() => !!props.badges.length)
|
|
110
118
|
const hasError = computed(() => props.error || !!props.errorMessage)
|
|
111
119
|
const hasGridGenerator = computed(() => !!Object.keys(props.gridGeneratorProps).length)
|
|
112
|
-
const hasBottomSeparator = computed(() => isNestedExpansionItem && hasNextSibling.value)
|
|
113
120
|
const hasHeaderBottom = computed(() => !!slots['header-bottom'])
|
|
114
121
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
*/
|
|
122
|
-
const hasHeaderSeparator = computed(() => {
|
|
123
|
-
return typeof props.useHeaderSeparator === 'undefined' ? !isNestedExpansionItem : props.useHeaderSeparator
|
|
122
|
+
const classes = computed(() => {
|
|
123
|
+
return {
|
|
124
|
+
'qas-expansion-item--error': hasError.value,
|
|
125
|
+
'qas-expansion-item--disabled': props.disable || props.disableButton,
|
|
126
|
+
'qas-expansion-item--disabled-full': props.disable
|
|
127
|
+
}
|
|
124
128
|
})
|
|
125
129
|
|
|
126
|
-
const errorClasses = computed(() => ({ 'qas-expansion-item--error': hasError.value }))
|
|
127
|
-
|
|
128
130
|
const contentClasses = computed(() => {
|
|
129
131
|
return {
|
|
130
|
-
'q-mt-
|
|
131
|
-
'
|
|
132
|
+
'q-mt-md': true,
|
|
133
|
+
'qas-expansion-item__content overflow-auto': !!props.maxContentHeight
|
|
132
134
|
}
|
|
133
135
|
})
|
|
134
136
|
|
|
@@ -144,11 +146,15 @@ const expansionProps = computed(() => {
|
|
|
144
146
|
} = attrs
|
|
145
147
|
|
|
146
148
|
return {
|
|
147
|
-
parent:
|
|
148
|
-
...propsPayload
|
|
149
|
-
},
|
|
149
|
+
parent: propsPayload,
|
|
150
150
|
|
|
151
151
|
item: {
|
|
152
|
+
disable: isDisabled.value,
|
|
153
|
+
hideExpandIcon: true,
|
|
154
|
+
label: props.label,
|
|
155
|
+
group: props.group,
|
|
156
|
+
|
|
157
|
+
// events
|
|
152
158
|
onUpdateModelValue,
|
|
153
159
|
onShow,
|
|
154
160
|
onBeforeShow,
|
|
@@ -161,10 +167,10 @@ const expansionProps = computed(() => {
|
|
|
161
167
|
|
|
162
168
|
const boxProps = computed(() => {
|
|
163
169
|
/**
|
|
164
|
-
* Caso o QasExpansionItem estiver dentro de um QasBox
|
|
170
|
+
* Caso o QasExpansionItem estiver dentro de um QasBox ou for um QasExpansionItem
|
|
165
171
|
* dentro de outro QasExpansionItem, o componente terá uma borda.
|
|
166
172
|
*/
|
|
167
|
-
const isBoxed = isNestedBox
|
|
173
|
+
const isBoxed = isNestedBox || isNestedExpansionItem
|
|
168
174
|
|
|
169
175
|
if (!isBoxed) return {}
|
|
170
176
|
|
|
@@ -174,19 +180,11 @@ const boxProps = computed(() => {
|
|
|
174
180
|
}
|
|
175
181
|
})
|
|
176
182
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Caso o componente esteja dentro de um QasExpansionItem, verifica se existe um próximo irmão
|
|
181
|
-
* para adicionar um separador.
|
|
182
|
-
*/
|
|
183
|
-
function setHasNextSibling (value) {
|
|
184
|
-
if (!isNestedExpansionItem) return
|
|
185
|
-
|
|
186
|
-
const hasTextContentSibling = !!expansionItem.value.nextSibling?.textContent?.trim?.()
|
|
187
|
-
const hasElementSibling = !!expansionItem.value.nextElementSibling
|
|
183
|
+
const isDisabled = computed(() => props.disable || props.disableButton)
|
|
188
184
|
|
|
189
|
-
|
|
185
|
+
// functions
|
|
186
|
+
function setShowContent () {
|
|
187
|
+
showContent.value = true
|
|
190
188
|
}
|
|
191
189
|
</script>
|
|
192
190
|
|
|
@@ -194,15 +192,21 @@ function setHasNextSibling (value) {
|
|
|
194
192
|
.qas-expansion-item {
|
|
195
193
|
$root: &;
|
|
196
194
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
195
|
+
&--disabled {
|
|
196
|
+
.q-item.disabled {
|
|
197
|
+
opacity: 1 !important;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
&--disabled-full {
|
|
202
|
+
#{$root}__label {
|
|
203
|
+
color: $grey-6 !important;
|
|
204
|
+
}
|
|
201
205
|
}
|
|
202
206
|
|
|
203
207
|
&--error {
|
|
204
208
|
#{$root}__box {
|
|
205
|
-
border: 2px solid $negative;
|
|
209
|
+
border: 2px solid $negative !important;
|
|
206
210
|
}
|
|
207
211
|
|
|
208
212
|
#{$root}__error-message {
|
|
@@ -210,6 +214,34 @@ function setHasNextSibling (value) {
|
|
|
210
214
|
}
|
|
211
215
|
}
|
|
212
216
|
|
|
217
|
+
&__content {
|
|
218
|
+
max-height: v-bind("props.maxContentHeight");
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// em alguns casos quando usado com grid, o espaçamento afetava o header, com z-index o problema é resolvido
|
|
222
|
+
&__header {
|
|
223
|
+
position: relative;
|
|
224
|
+
z-index: 1;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.q-expansion-item {
|
|
228
|
+
#{$root}__dropdown {
|
|
229
|
+
transition: transform var(--qas-generic-transition);;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
&--expanded {
|
|
233
|
+
#{$root}__dropdown {
|
|
234
|
+
transform: rotate(180deg);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
&--collapsed {
|
|
239
|
+
#{$root}__dropdown {
|
|
240
|
+
transform: none;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
213
245
|
.q-item {
|
|
214
246
|
margin-top: 0;
|
|
215
247
|
min-height: auto;
|
|
@@ -8,6 +8,16 @@ props:
|
|
|
8
8
|
desc: Lista de badges que serão exibidas na parte superior do card.
|
|
9
9
|
type: Array
|
|
10
10
|
|
|
11
|
+
disable:
|
|
12
|
+
desc: Desabilita o componente e aplica estilo de desabilitado no label e no button.
|
|
13
|
+
default: false
|
|
14
|
+
type: Boolean
|
|
15
|
+
|
|
16
|
+
disable-button:
|
|
17
|
+
desc: Desabilita o componente sem aplicar o estilo de desabilitado no label (usar em casos onde não tem conteúdo no slot content).
|
|
18
|
+
default: false
|
|
19
|
+
type: Boolean
|
|
20
|
+
|
|
11
21
|
error:
|
|
12
22
|
desc: Booleano que caso seja true o card passa a ter uma borda vermelha.
|
|
13
23
|
type: Boolean
|
|
@@ -16,28 +26,46 @@ props:
|
|
|
16
26
|
desc: Mensagem de erro onde será exibida na parte inferior do card.
|
|
17
27
|
type: String
|
|
18
28
|
|
|
29
|
+
group:
|
|
30
|
+
desc: Agrupamento para estado aberto|fechado.
|
|
31
|
+
default: ''
|
|
32
|
+
type: String
|
|
33
|
+
|
|
19
34
|
label:
|
|
20
35
|
desc: Titulo exibido na parte superior do card.
|
|
21
36
|
type: String
|
|
22
37
|
|
|
38
|
+
model-value:
|
|
39
|
+
desc: Model que controla o estado aberto|fechado.
|
|
40
|
+
default: false
|
|
41
|
+
type: Boolean
|
|
42
|
+
|
|
43
|
+
max-content-height:
|
|
44
|
+
desc: Define um tamanho máximo de altura do conteúdo.
|
|
45
|
+
default: ''
|
|
46
|
+
type: String
|
|
47
|
+
|
|
23
48
|
grid-generator-props:
|
|
24
49
|
desc: Propriedades que serão repassadas para o QasGridGenerator.
|
|
25
50
|
type: Object
|
|
26
51
|
|
|
27
|
-
use-header-separator:
|
|
28
|
-
desc: Propriedade para forçar o QSeparator no header.
|
|
29
|
-
type: Boolean
|
|
30
|
-
default: undefined
|
|
31
|
-
|
|
32
52
|
slots:
|
|
33
53
|
header:
|
|
34
|
-
desc:
|
|
54
|
+
desc: Slot para substituir o conteúdo do header (não inclui o botão dropdown).
|
|
35
55
|
|
|
36
56
|
header-bottom:
|
|
37
|
-
desc:
|
|
57
|
+
desc: Slot para acessar o conteúdo que fica abaixo do header.
|
|
38
58
|
|
|
39
|
-
label:
|
|
40
|
-
desc:
|
|
59
|
+
header-label:
|
|
60
|
+
desc: Slot para substituir o conteúdo da label do header.
|
|
41
61
|
|
|
42
62
|
content:
|
|
43
|
-
desc:
|
|
63
|
+
desc: Slot para substituir o conteúdo principal do card.
|
|
64
|
+
|
|
65
|
+
events:
|
|
66
|
+
'@update:model-value -> function(value)':
|
|
67
|
+
desc: Dispara quando o model-value altera, também usado para v-model.
|
|
68
|
+
params:
|
|
69
|
+
value:
|
|
70
|
+
desc: Novo valor do model.
|
|
71
|
+
type: Boolean
|
|
@@ -146,7 +146,7 @@ export default {
|
|
|
146
146
|
time: { ...datetimeInput, useTimeOnly: true },
|
|
147
147
|
|
|
148
148
|
boolean: { is: 'qas-toggle', label, ...error },
|
|
149
|
-
checkbox: { is: 'qas-checkbox', label, options, ...error },
|
|
149
|
+
checkbox: { is: 'qas-checkbox', label, options, ...error, required },
|
|
150
150
|
radio: { is: 'qas-radio', label, options },
|
|
151
151
|
|
|
152
152
|
upload: { is: 'qas-uploader', accept, autoUpload: true, entity, label, multiple, readonly, maxFiles, ...error },
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
<div :class="fieldsetClasses">
|
|
3
3
|
<div v-for="(fieldsetItem, fieldsetItemKey) in normalizedFields" :key="fieldsetItemKey" :class="getFieldSetColumnClass(fieldsetItem.column)">
|
|
4
4
|
<component :is="containerComponent.is" v-bind="containerComponent.props">
|
|
5
|
-
<slot v-if="fieldsetItem.
|
|
6
|
-
<qas-header v-bind="getHeaderProps(fieldsetItem)" />
|
|
5
|
+
<slot v-if="fieldsetItem.__hasFieldset" :name="`legend-${fieldsetItemKey}`">
|
|
6
|
+
<qas-header v-if="fieldsetItem.__hasHeader" v-bind="getHeaderProps(fieldsetItem)" />
|
|
7
7
|
</slot>
|
|
8
8
|
|
|
9
9
|
<div>
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
</slot>
|
|
33
33
|
</div>
|
|
34
34
|
|
|
35
|
-
<slot v-if="fieldsetItem.
|
|
35
|
+
<slot v-if="fieldsetItem.__hasFieldset" :name="`legend-bottom-${fieldsetItemKey}`" />
|
|
36
36
|
</component>
|
|
37
37
|
</div>
|
|
38
38
|
</div>
|
|
@@ -169,16 +169,29 @@ const normalizedFields = computed(() => {
|
|
|
169
169
|
for (const fieldsetKey in props.fieldset) {
|
|
170
170
|
const fieldsetItem = props.fieldset[fieldsetKey]
|
|
171
171
|
|
|
172
|
+
const {
|
|
173
|
+
label,
|
|
174
|
+
description,
|
|
175
|
+
column,
|
|
176
|
+
buttonProps,
|
|
177
|
+
headerProps
|
|
178
|
+
} = fieldsetItem
|
|
179
|
+
|
|
180
|
+
const hasHeader = !!(label || description || Object.keys(headerProps || {}).length)
|
|
181
|
+
|
|
172
182
|
fields[fieldsetKey] = {
|
|
173
|
-
label
|
|
174
|
-
description
|
|
175
|
-
column
|
|
176
|
-
buttonProps
|
|
183
|
+
label,
|
|
184
|
+
description,
|
|
185
|
+
column,
|
|
186
|
+
buttonProps,
|
|
177
187
|
fields: { hidden: {}, visible: {} },
|
|
178
|
-
headerProps
|
|
188
|
+
headerProps,
|
|
189
|
+
|
|
190
|
+
// Indica que existe um fieldset para que o legend-bottom possa ser renderizado.
|
|
191
|
+
__hasFieldset: true,
|
|
179
192
|
|
|
180
|
-
// Indica que existe
|
|
181
|
-
|
|
193
|
+
// Indica que existe props para que o header seja renderizado.
|
|
194
|
+
__hasHeader: hasHeader
|
|
182
195
|
}
|
|
183
196
|
|
|
184
197
|
fieldsetItem.fields.forEach(fieldName => {
|
|
@@ -24,7 +24,7 @@ props:
|
|
|
24
24
|
default: {}
|
|
25
25
|
type: Object
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
errors:
|
|
28
28
|
desc: Objeto contendo propriedades contendo a mensagem de erro.
|
|
29
29
|
default: {}
|
|
30
30
|
type: Object
|
|
@@ -55,7 +55,7 @@ props:
|
|
|
55
55
|
|
|
56
56
|
gutter:
|
|
57
57
|
desc: Espaçamento entre colunas.
|
|
58
|
-
default:
|
|
58
|
+
default: md
|
|
59
59
|
type: [String, Boolean]
|
|
60
60
|
examples: [xs, sm, md, lg, xl, '2xl', '3xl', '4xl', '5xl', false]
|
|
61
61
|
|
|
@@ -19,6 +19,11 @@ defineOptions({ name: 'QasGrabbable' })
|
|
|
19
19
|
const props = defineProps({
|
|
20
20
|
useScrollBar: {
|
|
21
21
|
type: Boolean
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
cancelMouseDownTarget: {
|
|
25
|
+
type: String,
|
|
26
|
+
default: ''
|
|
22
27
|
}
|
|
23
28
|
})
|
|
24
29
|
|
|
@@ -61,17 +66,20 @@ function handleEnableScrollOnGrab () {
|
|
|
61
66
|
function initScrollOnGrab () {
|
|
62
67
|
if (hasScrollOnGrab.value) return
|
|
63
68
|
|
|
64
|
-
scrollOnGrab.value = setScrollOnGrab(
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
+
scrollOnGrab.value = setScrollOnGrab(
|
|
70
|
+
grabContainer.value,
|
|
71
|
+
{
|
|
72
|
+
onGrabFn: onGrab,
|
|
73
|
+
onMoveFn: setGrabPosition,
|
|
74
|
+
onScrollFn: setGrabPosition
|
|
75
|
+
},
|
|
76
|
+
props.cancelMouseDownTarget
|
|
77
|
+
)
|
|
69
78
|
}
|
|
70
79
|
|
|
71
80
|
function destroyScrollOnGrab () {
|
|
72
81
|
if (!hasScrollOnGrab.value) return
|
|
73
82
|
|
|
74
|
-
scrollOnGrab.value.destroyEvents()
|
|
75
83
|
scrollOnGrab.value.element.style.cursor = 'auto'
|
|
76
84
|
scrollOnGrab.value = {}
|
|
77
85
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<qas-header v-if="hasHeader" v-bind="props.headerProps" />
|
|
4
4
|
|
|
5
5
|
<div :class="classes">
|
|
6
|
-
<div v-for="(field, key) in fieldsByResult" :key="key" :class="
|
|
6
|
+
<div v-for="(field, key) in fieldsByResult" :key="key" :class="getContainerClasses({ key })">
|
|
7
7
|
<slot :field="field" :name="`field-${field.name}`">
|
|
8
8
|
<qas-grid-item :use-ellipsis="hasEllipsis(field)" :use-inline="props.useInline">
|
|
9
9
|
<template #header>
|
|
@@ -98,7 +98,7 @@ const props = defineProps({
|
|
|
98
98
|
})
|
|
99
99
|
|
|
100
100
|
// composables
|
|
101
|
-
const { classes, getFieldClass } = useGenerator({ props })
|
|
101
|
+
const { classes, getFieldClass } = useGenerator({ props, isGrid: true })
|
|
102
102
|
|
|
103
103
|
// computed
|
|
104
104
|
const hasResult = computed(() => Object.keys(props.result).length)
|
|
@@ -181,7 +181,7 @@ function setFieldsByResult () {
|
|
|
181
181
|
fieldsByResult.value = getFieldsByResult()
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
-
function
|
|
184
|
+
function getContainerClasses ({ key }) {
|
|
185
185
|
if (props.useInline) return 'row justify-between col-12'
|
|
186
186
|
|
|
187
187
|
return getFieldClass({ index: key, isGridGenerator: true })
|
|
@@ -36,8 +36,8 @@ props:
|
|
|
36
36
|
examples: ["{ email: { name: 'email', type: 'email', label: 'E-mail' } }"]
|
|
37
37
|
|
|
38
38
|
gutter:
|
|
39
|
-
desc:
|
|
40
|
-
default:
|
|
39
|
+
desc: Em caso de uso inline o default é "sm" senão é "md".
|
|
40
|
+
default: ''
|
|
41
41
|
type: String
|
|
42
42
|
examples: [xs, sm, md, lg, xl, 2xl, 3xl, 4xl, 5xl]
|
|
43
43
|
|
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
</div>
|
|
14
14
|
</div>
|
|
15
15
|
|
|
16
|
-
<
|
|
17
|
-
<
|
|
18
|
-
<component :is="actionsComponent.is" v-if="
|
|
19
|
-
</
|
|
20
|
-
</
|
|
16
|
+
<div v-if="hasActionsSection" class="text-right">
|
|
17
|
+
<slot name="actions">
|
|
18
|
+
<component :is="actionsComponent.is" v-if="hasActionsComponent" v-bind="actionsComponent.props" />
|
|
19
|
+
</slot>
|
|
20
|
+
</div>
|
|
21
21
|
</div>
|
|
22
22
|
|
|
23
23
|
<div class="items-start no-wrap q-col-gutter-sm row" :class="descriptionSectionClasses">
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
</slot>
|
|
28
28
|
</div>
|
|
29
29
|
|
|
30
|
-
<div v-if="!hasLabelSection" class="justify-end row">
|
|
30
|
+
<div v-if="!hasLabelSection" class="justify-end row text-right">
|
|
31
31
|
<slot name="actions">
|
|
32
|
-
<component :is="actionsComponent.is" v-if="
|
|
32
|
+
<component :is="actionsComponent.is" v-if="hasActionsComponent" v-bind="actionsComponent.props" />
|
|
33
33
|
</slot>
|
|
34
34
|
</div>
|
|
35
35
|
</div>
|
|
@@ -136,10 +136,12 @@ const actionsComponent = computed(() => {
|
|
|
136
136
|
return component.true
|
|
137
137
|
})
|
|
138
138
|
|
|
139
|
-
const
|
|
140
|
-
return
|
|
139
|
+
const hasActionsComponent = computed(() => {
|
|
140
|
+
return hasDefaultButton.value || hasDefaultActionsMenu.value || hasDefaultFilters.value
|
|
141
141
|
})
|
|
142
142
|
|
|
143
|
+
const hasActionsSection = computed(() => !!slots.actions || hasActionsComponent.value)
|
|
144
|
+
|
|
143
145
|
const hasBadges = computed(() => !!props.badges.length)
|
|
144
146
|
const hasLabel = computed(() => !!Object.keys(props.labelProps).length)
|
|
145
147
|
const hasDefaultButton = computed(() => !!Object.keys(props.buttonProps).length)
|