@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.
Files changed (59) hide show
  1. package/package.json +3 -2
  2. package/src/assets/sounds/nave-notification.mp3 +0 -0
  3. package/src/components/app-menu/QasAppMenu.vue +73 -15
  4. package/src/components/app-menu/QasAppMenu.yml +5 -5
  5. package/src/components/app-user/QasAppUser.vue +49 -40
  6. package/src/components/avatar/QasAvatar.vue +7 -8
  7. package/src/components/badge/QasBadge.vue +3 -29
  8. package/src/components/board-generator/QasBoardGenerator.vue +442 -40
  9. package/src/components/board-generator/QasBoardGenerator.yml +107 -12
  10. package/src/components/card/QasCard.vue +13 -4
  11. package/src/components/chart-view/QasChartView.vue +56 -3
  12. package/src/components/chart-view/QasChartView.yml +6 -0
  13. package/src/components/checkbox/QasCheckbox.vue +67 -11
  14. package/src/components/checkbox/QasCheckbox.yml +18 -0
  15. package/src/components/copy/QasCopy.vue +12 -2
  16. package/src/components/copy/QasCopy.yml +8 -0
  17. package/src/components/expansion-item/QasExpansionItem.vue +108 -76
  18. package/src/components/expansion-item/QasExpansionItem.yml +38 -10
  19. package/src/components/field/QasField.vue +1 -1
  20. package/src/components/form-generator/QasFormGenerator.vue +23 -10
  21. package/src/components/form-generator/QasFormGenerator.yml +2 -2
  22. package/src/components/grabbable/QasGrabbable.vue +14 -6
  23. package/src/components/grabbable/QasGrabbable.yml +4 -0
  24. package/src/components/grid-generator/QasGridGenerator.vue +3 -3
  25. package/src/components/grid-generator/QasGridGenerator.yml +2 -2
  26. package/src/components/grid-item/QasGridItem.vue +1 -1
  27. package/src/components/header/QasHeader.vue +11 -9
  28. package/src/components/infinite-scroll/QasInfiniteScroll.vue +16 -17
  29. package/src/components/infinite-scroll/QasInfiniteScroll.yml +7 -0
  30. package/src/components/list-view/QasListView.vue +16 -2
  31. package/src/components/list-view/QasListView.yml +9 -0
  32. package/src/components/radio/QasRadio.vue +24 -5
  33. package/src/components/radio/QasRadio.yml +6 -0
  34. package/src/components/select/QasSelect.vue +54 -7
  35. package/src/components/select/QasSelect.yml +6 -1
  36. package/src/components/select-filter/QasSelectFilter.vue +65 -0
  37. package/src/components/select-filter/QasSelectFilter.yml +36 -0
  38. package/src/components/stepper/QasStepper.vue +50 -3
  39. package/src/components/stepper-form-view/QasStepperFormView.vue +6 -4
  40. package/src/components/stepper-form-view/QasStepperFormView.yml +1 -1
  41. package/src/components/table-generator/QasTableGenerator.vue +3 -0
  42. package/src/components/text-truncate/QasTextTruncate.vue +77 -14
  43. package/src/components/text-truncate/QasTextTruncate.yml +14 -3
  44. package/src/components/uploader/QasUploader.vue +70 -24
  45. package/src/components/uploader/QasUploader.yml +15 -1
  46. package/src/components/welcome/QasWelcome.vue +8 -0
  47. package/src/components/welcome/QasWelcome.yml +3 -0
  48. package/src/composables/index.js +3 -1
  49. package/src/composables/private/index.js +1 -0
  50. package/src/composables/private/use-auth-user.js +20 -0
  51. package/src/composables/private/use-generator.js +20 -5
  52. package/src/composables/use-default-filters.js +106 -0
  53. package/src/composables/use-notifications.js +14 -0
  54. package/src/composables/use-query-cache.js +1 -1
  55. package/src/css/components/field.scss +13 -6
  56. package/src/helpers/set-scroll-on-grab.js +9 -1
  57. package/src/shared/badge-config.js +29 -0
  58. package/src/vue-plugin.js +3 -0
  59. 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="errorClasses" v-bind="expansionProps.parent">
3
- <component :is="component.is" class="qas-expansion-item__box" v-bind="boxProps">
4
- <q-expansion-item header-class="text-bold q-mt-sm q-pa-none qas-expansion-item__header" :label="props.label" v-bind="expansionProps.item">
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
- <slot name="header">
6
+ <div class="full-width justify-between no-wrap row">
7
7
  <div class="full-width">
8
- <div class="items-center q-col-gutter-sm row">
9
- <slot name="label">
10
- <h5 class="col-auto text-h5">
11
- {{ props.label }}
12
- </h5>
13
- </slot>
14
-
15
- <div class="col-auto items-center q-col-gutter-sm row">
16
- <div v-for="(badge, badgeIndex) in props.badges" :key="badgeIndex" class="col-auto">
17
- <qas-badge v-bind="badge" />
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
- <div v-if="hasHeaderBottom" class="q-mt-sm">
23
- <slot name="header-bottom" />
24
- </div>
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
- <q-separator v-if="hasHeaderSeparator" class="q-my-md" />
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
- </component>
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, onMounted, ref, useAttrs } from 'vue'
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
- error: {
61
+ disable: {
64
62
  type: Boolean
65
63
  },
66
64
 
67
- errorMessage: {
68
- type: String,
69
- default: ''
65
+ disableButton: {
66
+ type: Boolean
70
67
  },
71
68
 
72
- label: {
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
- useHeaderSeparator: {
83
- type: Boolean,
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 hasNextSibling = ref(false)
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
- * Verifica se o componente deve adicionar um separador no header.
117
- *
118
- * - Se a propriedade useHeaderSeparator for true, retorna separador.
119
- * - Se a propriedade useHeaderSeparator for undefined, retorna separador apenas se não for um componente aninhado.
120
- * - Se a propriedade useHeaderSeparator for false, não retorna separador.
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-sm': isNestedExpansionItem,
131
- 'q-mt-md': !isNestedExpansionItem && !props.useHeaderSeparator
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 e não for um QasExpansionItem
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 && !isNestedExpansionItem
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
- // functions
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
- hasNextSibling.value = hasElementSibling || hasTextContentSibling
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
- // em alguns casos quando usado com grid, o espaçamento afetava o header, com z-index o problema é resolvido
198
- &__header {
199
- position: relative;
200
- z-index: 1;
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: 'Slot para substituir o conteúdo do header'
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: 'Slot para acessar o conteúdo que fica abaixo do header.'
57
+ desc: Slot para acessar o conteúdo que fica abaixo do header.
38
58
 
39
- label:
40
- desc: 'Slot para substituir o conteúdo da label do header.'
59
+ header-label:
60
+ desc: Slot para substituir o conteúdo da label do header.
41
61
 
42
62
  content:
43
- desc: 'Slot para substituir o conteúdo principal do card.'
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.__isFieldset" :name="`legend-${fieldsetItemKey}`">
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.__isFieldset" :name="`legend-bottom-${fieldsetItemKey}`" />
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: fieldsetItem.label,
174
- description: fieldsetItem.description,
175
- column: fieldsetItem.column,
176
- buttonProps: fieldsetItem.buttonProps,
183
+ label,
184
+ description,
185
+ column,
186
+ buttonProps,
177
187
  fields: { hidden: {}, visible: {} },
178
- headerProps: fieldsetItem.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 um fieldset para que o QasHeader possa ser renderizado
181
- __isFieldset: true
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
- error:
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: lg
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(grabContainer.value, {
65
- onGrabFn: onGrab,
66
- onMoveFn: setGrabPosition,
67
- onScrollFn: setGrabPosition
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
 
@@ -9,6 +9,10 @@ props:
9
9
  default: false
10
10
  type: Boolean
11
11
 
12
+ cancel-mouse-down-target:
13
+ desc: Classe do elemento no qual será ignorado para não realizar o grab.
14
+ type: String
15
+
12
16
  slots:
13
17
  default:
14
18
  desc: Slot para ter o conteúdo que terá o scroll na horizontal.
@@ -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="getContainerClassses({ key })">
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 getContainerClassses ({ key }) {
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: Espaçamento entre colunas.
40
- default: lg
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
 
@@ -65,8 +65,8 @@ const classes = computed(() => {
65
65
  },
66
66
 
67
67
  content: {
68
+ 'text-grey-10': true,
68
69
  'text-body1': !isInline,
69
- 'text-grey-10': !isInline,
70
70
  'text-subtitle1': isInline,
71
71
  ellipsis: hasEllipsis.value
72
72
  }
@@ -13,11 +13,11 @@
13
13
  </div>
14
14
  </div>
15
15
 
16
- <slot name="actions">
17
- <div class="q-mt-xs text-right">
18
- <component :is="actionsComponent.is" v-if="hasActionsSection" v-bind="actionsComponent.props" />
19
- </div>
20
- </slot>
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="hasActionsSection" v-bind="actionsComponent.props" />
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 hasActionsSection = computed(() => {
140
- return !!slots.actions || hasDefaultButton.value || hasDefaultActionsMenu.value || hasDefaultFilters.value
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)