@bildvitta/quasar-ui-asteroid 3.17.0-beta.1 → 3.17.0-beta.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bildvitta/quasar-ui-asteroid",
3
3
  "description": "Asteroid",
4
- "version": "3.17.0-beta.1",
4
+ "version": "3.17.0-beta.3",
5
5
  "author": "Bild & Vitta <systemteam@bild.com.br>",
6
6
  "license": "MIT",
7
7
  "main": "dist/asteroid.cjs.min.js",
@@ -2,10 +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.label" :name="`legend-${fieldsetItemKey}`">
6
- <qas-label :label="fieldsetItem.label" :margin="getLabelMargin(fieldsetItem)" />
7
-
8
- <div v-if="fieldsetItem.description" class="q-mb-md text-body1 text-grey-8">{{ fieldsetItem.description }}</div>
5
+ <slot v-if="hasFieldsetItem(fieldsetItem)" :name="`legend-${fieldsetItemKey}`">
6
+ <qas-header v-bind="getHeaderProps(fieldsetItem)" />
9
7
  </slot>
10
8
 
11
9
  <div>
@@ -99,7 +97,7 @@ provide('isFormGenerator', true)
99
97
  // composables
100
98
  const { classes, getFieldClass, getFieldSetColumnClass } = useGenerator({ props })
101
99
 
102
- const { fieldsetClasses, hasFieldset } = useFieldset({ props })
100
+ const { fieldsetClasses, hasFieldset, hasFieldsetItem } = useFieldset({ props })
103
101
 
104
102
  const screen = useScreen()
105
103
 
@@ -170,7 +168,8 @@ const normalizedFields = computed(() => {
170
168
  description: fieldsetItem.description,
171
169
  column: fieldsetItem.column,
172
170
  buttonProps: fieldsetItem.buttonProps,
173
- fields: { hidden: {}, visible: {} }
171
+ fields: { hidden: {}, visible: {} },
172
+ headerProps: fieldsetItem.headerProps
174
173
  }
175
174
 
176
175
  fieldsetItem.fields.forEach(fieldName => {
@@ -203,8 +202,17 @@ function getFieldType ({ type }) {
203
202
  return type === 'hidden' ? 'hidden' : 'visible'
204
203
  }
205
204
 
206
- function getLabelMargin (fieldsetItem) {
207
- return fieldsetItem.description ? 'sm' : 'md'
205
+ function getHeaderProps (fieldsetItem) {
206
+ return {
207
+ description: fieldsetItem.description,
208
+
209
+ labelProps: {
210
+ ...fieldsetItem.headerProps?.labelProps,
211
+ ...(fieldsetItem.label && { label: fieldsetItem.label })
212
+ },
213
+
214
+ ...fieldsetItem.headerProps
215
+ }
208
216
  }
209
217
 
210
218
  function isFieldDisabled ({ disable }) {
@@ -240,9 +248,15 @@ function useFieldset ({ props }) {
240
248
 
241
249
  const hasFieldset = computed(() => !!Object.keys(props.fieldset).length)
242
250
 
251
+ function hasFieldsetItem (fieldset = {}) {
252
+ return !!Object.keys(fieldset).length
253
+ }
254
+
243
255
  return {
244
256
  fieldsetClasses,
245
- hasFieldset
257
+ hasFieldset,
258
+
259
+ hasFieldsetItem
246
260
  }
247
261
  }
248
262
  </script>
@@ -1,31 +1,35 @@
1
1
  <template>
2
- <div :class="classes">
3
- <div v-for="(field, key) in fieldsByResult" :key="key" :class="getContainerClass({ key })">
4
- <slot :field="field" :name="`field-${field.name}`">
5
- <qas-grid-item :use-ellipsis="props.useEllipsis" :use-inline="props.useInline">
6
- <template #header>
7
- <slot :field="field" :name="`header-field-${field.name}`">
8
- <slot :field="field" name="header">
9
- <div :class="headerClass" :data-cy="`grid-generator-${field.name}-field`" :title="getTitle(field, 'label')">
10
- {{ field.label }}
11
- </div>
2
+ <component :is="component.is" v-bind="component.props">
3
+ <qas-header v-if="hasHeader" v-bind="props.headerProps" />
4
+
5
+ <div :class="classes">
6
+ <div v-for="(field, key) in fieldsByResult" :key="key" :class="getContainerClass({ key })">
7
+ <slot :field="field" :name="`field-${field.name}`">
8
+ <qas-grid-item :use-ellipsis="props.useEllipsis" :use-inline="props.useInline">
9
+ <template #header>
10
+ <slot :field="field" :name="`header-field-${field.name}`">
11
+ <slot :field="field" name="header">
12
+ <div :class="headerClass" :data-cy="`grid-generator-${field.name}-field`" :title="getTitle(field, 'label')">
13
+ {{ field.label }}
14
+ </div>
15
+ </slot>
12
16
  </slot>
13
- </slot>
14
- </template>
15
-
16
- <template #content>
17
- <slot :field="field" :name="`content-field-${field.name}`">
18
- <slot :field="field" name="content">
19
- <div :class="contentClass" :data-cy="`grid-generator-${field.name}-result`" :title="getTitle(field, 'formattedResult')">
20
- {{ field.formattedResult }}
21
- </div>
17
+ </template>
18
+
19
+ <template #content>
20
+ <slot :field="field" :name="`content-field-${field.name}`">
21
+ <slot :field="field" name="content">
22
+ <div :class="contentClass" :data-cy="`grid-generator-${field.name}-result`" :title="getTitle(field, 'formattedResult')">
23
+ {{ field.formattedResult }}
24
+ </div>
25
+ </slot>
22
26
  </slot>
23
- </slot>
24
- </template>
25
- </qas-grid-item>
26
- </slot>
27
+ </template>
28
+ </qas-grid-item>
29
+ </slot>
30
+ </div>
27
31
  </div>
28
- </div>
32
+ </component>
29
33
  </template>
30
34
 
31
35
  <script setup>
@@ -44,6 +48,11 @@ const screen = useScreen()
44
48
  const props = defineProps({
45
49
  ...baseProps,
46
50
 
51
+ boxProps: {
52
+ type: Object,
53
+ default: () => ({})
54
+ },
55
+
47
56
  contentClass: {
48
57
  default: '',
49
58
  type: [Array, Object, String]
@@ -54,6 +63,11 @@ const props = defineProps({
54
63
  type: [Array, Object, String]
55
64
  },
56
65
 
66
+ headerProps: {
67
+ type: Object,
68
+ default: () => ({})
69
+ },
70
+
57
71
  emptyResultText: {
58
72
  default: '-',
59
73
  type: String
@@ -64,6 +78,10 @@ const props = defineProps({
64
78
  type: Object
65
79
  },
66
80
 
81
+ useBox: {
82
+ type: Boolean
83
+ },
84
+
67
85
  useEmptyResult: {
68
86
  default: true,
69
87
  type: Boolean
@@ -85,6 +103,7 @@ const { classes, getFieldClass } = useGenerator({ props })
85
103
  // computed
86
104
  const hasResult = computed(() => Object.keys(props.result).length)
87
105
  const hasFields = computed(() => Object.keys(props.fields).length)
106
+ const hasHeader = computed(() => Object.keys(props.headerProps).length)
88
107
 
89
108
  const contentClass = computed(() => {
90
109
  return [
@@ -96,6 +115,13 @@ const contentClass = computed(() => {
96
115
  ]
97
116
  })
98
117
 
118
+ const component = computed(() => {
119
+ return {
120
+ is: props.useBox ? 'qas-box' : 'div',
121
+ props: props.useBox ? props.boxProps : {}
122
+ }
123
+ })
124
+
99
125
  const headerClass = computed(() => {
100
126
  return [
101
127
  props.headerClass,
@@ -4,6 +4,11 @@ meta:
4
4
  desc: Componente para criação de textos dinâmicos.
5
5
 
6
6
  props:
7
+ box-props:
8
+ desc: Propriedades do "QasBox" que envolve o conteúdo.
9
+ default: {}
10
+ type: Object
11
+
7
12
  columns:
8
13
  desc: Colunas do grid de cada campo.
9
14
  default: col-6
@@ -41,6 +46,11 @@ props:
41
46
  default: 'text-bold'
42
47
  type: [Array, Object, String]
43
48
 
49
+ header-props:
50
+ desc: Propriedades do "QasHeader".
51
+ default: {}
52
+ type: Object
53
+
44
54
  result:
45
55
  desc: Resultado contendo todas informações para serem exibidas na tela.
46
56
  default: {}
@@ -52,6 +62,11 @@ props:
52
62
  default: true
53
63
  type: Boolean
54
64
 
65
+ use-box:
66
+ desc: Controla se o componente vai ter o QasBox englobando ou não.
67
+ default: false
68
+ type: Boolean
69
+
55
70
  use-ellipsis:
56
71
  desc: Adiciona a classe "ellipsis" para o elemento do conteúdo.
57
72
  default: true
@@ -3,7 +3,7 @@
3
3
  <div v-if="hasLabelSection" class="items-center justify-between no-wrap row" :class="labelSectionClasses">
4
4
  <div class="items-center q-col-gutter-sm row">
5
5
  <slot name="label">
6
- <qas-label v-bind="defaultLabelProps" />
6
+ <qas-label v-if="hasLabel" v-bind="defaultLabelProps" />
7
7
  </slot>
8
8
 
9
9
  <div v-if="hasBadges" class="col-auto items-center q-col-gutter-sm row">
@@ -73,7 +73,7 @@ const props = defineProps({
73
73
  },
74
74
 
75
75
  spacing: {
76
- default: Spacing.Xl,
76
+ default: Spacing.Md,
77
77
  type: String,
78
78
  validator: gutterValidator
79
79
  }
@@ -102,5 +102,5 @@ const hasLabel = computed(() => !!Object.keys(props.labelProps).length)
102
102
  const hasDefaultButton = computed(() => !!Object.keys(props.buttonProps).length)
103
103
  const hasDefaultActionsMenu = computed(() => !!Object.keys(props.actionsMenuProps).length)
104
104
  const hasDescriptionSection = computed(() => props.description || slots.description)
105
- const hasLabelSection = computed(() => hasLabel.value || slots.label)
105
+ const hasLabelSection = computed(() => hasLabel.value || slots.label || hasBadges.value)
106
106
  </script>
@@ -79,6 +79,10 @@ export default {
79
79
  type: Boolean
80
80
  },
81
81
 
82
+ useAutoSelect: {
83
+ type: Boolean
84
+ },
85
+
82
86
  useFetchOptionsOnCreate: {
83
87
  default: true,
84
88
  type: Boolean
@@ -187,6 +191,10 @@ export default {
187
191
  return getRequiredLabel({ label: this.label, required: this.required })
188
192
  },
189
193
 
194
+ canSetDefaultOption () {
195
+ return (this.required || this.useAutoSelect) && this.options.length === 1 && !this.modelValue
196
+ },
197
+
190
198
  // redesign
191
199
  componentClasses () {
192
200
  return {
@@ -220,15 +228,24 @@ export default {
220
228
  this.togglePopupContentClass(value)
221
229
  },
222
230
 
231
+ required () {
232
+ if (!this.canSetDefaultOption) return
233
+
234
+ this.setDefaultOption()
235
+ },
236
+
223
237
  options: {
224
238
  handler () {
225
239
  if (this.useLazyLoading && this.mx_hasFilteredOptions) return
226
240
 
227
241
  if (this.fuse || this.hasFuse) this.setFuse()
228
242
 
243
+ if (this.canSetDefaultOption) this.setDefaultOption()
244
+
229
245
  this.mx_filteredOptions = [...this.options]
230
246
  },
231
247
 
248
+ deep: true,
232
249
  immediate: true
233
250
  }
234
251
  },
@@ -303,6 +320,14 @@ export default {
303
320
  if (popupContentElement) {
304
321
  popupContentElement.classList.toggle('qas-select__is-fetching', force)
305
322
  }
323
+ },
324
+
325
+ setDefaultOption () {
326
+ const modelValue = this.attributes.emitValue
327
+ ? this.options[0].value
328
+ : this.options[0]
329
+
330
+ this.$emit('update:modelValue', modelValue)
306
331
  }
307
332
  }
308
333
  }
@@ -81,6 +81,10 @@ props:
81
81
  type: String
82
82
  examples: [value-key="uuid"]
83
83
 
84
+ use-auto-select:
85
+ desc: Controla se o select vai auto preencher em casos de ter uma única opção e não for required.
86
+ type: Boolean
87
+
84
88
  use-fetch-options-on-create:
85
89
  desc: Controla se o componente vai fazer um fetch das opções assim que o mesmo é criado (caso tenha lazy loading ativado).
86
90
  default: true