@bildvitta/quasar-ui-asteroid 3.17.0-beta.2 → 3.17.0-beta.21

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 (51) hide show
  1. package/package.json +2 -2
  2. package/src/assets/sounds/nave-notification.mp3 +0 -0
  3. package/src/components/actions/QasActions.vue +1 -1
  4. package/src/components/app-menu/QasAppMenu.vue +6 -1
  5. package/src/components/avatar/QasAvatar.vue +7 -8
  6. package/src/components/board-generator/QasBoardGenerator.vue +407 -40
  7. package/src/components/board-generator/QasBoardGenerator.yml +53 -12
  8. package/src/components/btn-dropdown/QasBtnDropdown.vue +14 -1
  9. package/src/components/card/QasCard.vue +13 -4
  10. package/src/components/chart-view/QasChartView.vue +44 -20
  11. package/src/components/chart-view/QasChartView.yml +10 -0
  12. package/src/components/checkbox/QasCheckbox.vue +30 -9
  13. package/src/components/checkbox/QasCheckbox.yml +5 -0
  14. package/src/components/copy/QasCopy.vue +12 -2
  15. package/src/components/copy/QasCopy.yml +8 -0
  16. package/src/components/date-time-input/QasDateTimeInput.vue +1 -1
  17. package/src/components/dialog/QasDialog.vue +3 -3
  18. package/src/components/expansion-item/QasExpansionItem.vue +120 -34
  19. package/src/components/expansion-item/QasExpansionItem.yml +38 -5
  20. package/src/components/filters/QasFilters.vue +1 -1
  21. package/src/components/filters/private/PvFiltersButton.vue +1 -1
  22. package/src/components/form-generator/QasFormGenerator.vue +39 -27
  23. package/src/components/form-generator/QasFormGenerator.yml +3 -0
  24. package/src/components/grabbable/QasGrabbable.vue +14 -6
  25. package/src/components/grabbable/QasGrabbable.yml +4 -0
  26. package/src/components/grid-generator/QasGridGenerator.vue +67 -34
  27. package/src/components/grid-generator/QasGridGenerator.yml +15 -0
  28. package/src/components/header/QasHeader.vue +58 -12
  29. package/src/components/header/QasHeader.yml +5 -0
  30. package/src/components/infinite-scroll/QasInfiniteScroll.vue +16 -17
  31. package/src/components/infinite-scroll/QasInfiniteScroll.yml +7 -0
  32. package/src/components/list-items/QasListItems.vue +28 -4
  33. package/src/components/list-items/QasListItems.yml +10 -0
  34. package/src/components/list-view/QasListView.vue +17 -5
  35. package/src/components/list-view/QasListView.yml +9 -0
  36. package/src/components/nested-fields/QasNestedFields.vue +91 -36
  37. package/src/components/nested-fields/QasNestedFields.yml +23 -0
  38. package/src/components/radio/QasRadio.vue +24 -5
  39. package/src/components/radio/QasRadio.yml +6 -0
  40. package/src/components/select/QasSelect.vue +129 -5
  41. package/src/components/select/QasSelect.yml +11 -0
  42. package/src/components/stepper-form-view/QasStepperFormView.yml +1 -1
  43. package/src/components/table-generator/QasTableGenerator.vue +10 -1
  44. package/src/components/text-truncate/QasTextTruncate.vue +11 -4
  45. package/src/components/text-truncate/QasTextTruncate.yml +4 -0
  46. package/src/composables/private/use-generator.js +3 -9
  47. package/src/composables/use-notifications.js +14 -0
  48. package/src/css/components/field.scss +13 -6
  49. package/src/css/components/item.scss +5 -1
  50. package/src/enums/Spacing.js +33 -0
  51. package/src/helpers/set-scroll-on-grab.js +9 -1
@@ -20,19 +20,33 @@ props:
20
20
  required: true
21
21
 
22
22
  column-width:
23
- desc: Largura da coluna
23
+ desc: Largura da coluna.
24
24
  type: String
25
25
  default: 288
26
26
 
27
+ confirm-dialog-props:
28
+ desc: Propriedade repassada ao `QasDialog` para confirmar um drag and drop. Caso não seja passado, não é usado dialog de confirmação. As ações de confirmar e cancelar são feitas por padrão no componente.
29
+ type: Object
30
+ default: {}
31
+
32
+ header-box-props:
33
+ desc: Propriedades repassadas ao `QasBox` do header.
34
+ type: Object
35
+ default: {}
36
+
27
37
  headers:
28
38
  desc: Lista de itens sendo cada um o header de cada coluna.
29
39
  default: []
30
40
  type: Array
31
-
41
+
32
42
  height:
33
- desc: Altura do container do board. Caso não seja passado um height, o calculo é feito para ocupar a maior altura possível da página.
43
+ desc: Altura do container do board. Caso não seja passado um height, o cálculo é feito para ocupar a maior altura possível da página.
44
+ type: String
45
+
46
+ item-id-key:
47
+ desc: Identificador único do item a ser movido, sendo que será usado nas requisições realizadas pelo drop.
34
48
  type: String
35
-
49
+
36
50
  lazy-loading-fields-keys:
37
51
  desc: Chaves dos campos que são lazy loading para o tratamento de merge das options.
38
52
  type: Array
@@ -44,7 +58,7 @@ props:
44
58
  default: 12
45
59
 
46
60
  use-mark-raw:
47
- desc: Define se os valores dos itens das colunas irá ser atribuido utilizando o "markRaw", onde somente a primeira camada do model será reativa.(https://vuejs.org/api/reactivity-advanced.html#markraw)
61
+ desc: Define se os valores dos itens das colunas irão ser atribuídos utilizando o "markRaw", onde somente a primeira camada do model será reativa. (https://vuejs.org/api/reactivity-advanced.html#markraw)
48
62
  type: Boolean
49
63
  default: true
50
64
 
@@ -55,6 +69,30 @@ props:
55
69
  examples: [v-model:results="resultsColumns"]
56
70
  model: true
57
71
 
72
+ sortable-config:
73
+ desc: Configuração passada para a instância do SortableJS.
74
+ type: Object
75
+ default: "{ animation: 500, swapThreshold: 1, delay: 50, delayOnTouchOnly: true, emptyInsertThreshold: 0 }"
76
+ debugger: true
77
+
78
+ use-drag-and-drop-x:
79
+ desc: Controla se irá ter drag and drop no eixo X (entre colunas).
80
+ type: Boolean
81
+
82
+ use-drag-and-drop-y:
83
+ desc: Controla se irá ter drag and drop no eixo Y (mesma coluna, utilizado para ordenação de itens).
84
+ type: Boolean
85
+
86
+ update-position-url:
87
+ desc: URL usada para realizar o PATCH do drag and drop.
88
+ type: String
89
+ default: ''
90
+
91
+ update-position-params:
92
+ desc: Parâmetros customizados caso precise passar para a API de PATCH.
93
+ type: Object
94
+ default: {}
95
+
58
96
  slots:
59
97
  header-column:
60
98
  desc: Slot para acessar o card do header de cada coluna.
@@ -63,9 +101,9 @@ slots:
63
101
  desc: Fields referente à coluna atual do template.
64
102
  type: Object
65
103
  default: {}
66
-
104
+
67
105
  header:
68
- desc: Informações de cada item do header que foi fornecido através da prop "headers"
106
+ desc: Informações de cada item do header que foi fornecido através da prop "headers".
69
107
  type: Object
70
108
  default: {}
71
109
 
@@ -76,7 +114,7 @@ slots:
76
114
  desc: Fields referente à coluna atual do template.
77
115
  type: Object
78
116
  default: {}
79
-
117
+
80
118
  item:
81
119
  desc: Informações de cada item da coluna que foi buscado através da API.
82
120
  type: Object
@@ -98,14 +136,14 @@ events:
98
136
  type: Object
99
137
 
100
138
  header:
101
- desc: header da coluna atual.
139
+ desc: Header da coluna atual.
102
140
  type: Object
103
141
 
104
142
  '@update:fetch-column-error -> function(error)':
105
143
  desc: Dispara quando o "fetchColumn" cai em uma exceção.
106
144
  params:
107
145
  error:
108
- desc: Retorna todos os dados "cru" respondido na exceção do fetch.
146
+ desc: Retorna todos os dados "crus" respondidos na exceção do fetch.
109
147
  type: Object
110
148
 
111
149
  '@update:fetch-columns-success -> function()':
@@ -115,12 +153,15 @@ events:
115
153
  desc: Dispara quando algum "fetchColumn" cai em uma exceção.
116
154
  params:
117
155
  error:
118
- desc: Retorna todos os dados "cru" respondido na exceção do fetch.
156
+ desc: Retorna todos os dados "crus" respondidos na exceção do fetch.
119
157
  type: Object
120
158
 
159
+ '@update-success -> function()':
160
+ desc: Dispara quando o PATCH do drag and drop é com sucesso.
161
+
121
162
  methods:
122
163
  'fetchColumns: () => void':
123
164
  desc: Busca todas colunas com base nos headers fornecidos.
124
165
 
125
166
  'fetchColumn: (header) => void':
126
- desc: Busca uma coluna especifica com base no header fornecido.
167
+ desc: Busca uma coluna específica com base no header fornecido.
@@ -19,7 +19,7 @@
19
19
  </div>
20
20
 
21
21
  <div v-if="props.useSplit">
22
- <qas-btn color="grey-10" :disable="disable" :icon="props.dropdownIcon" variant="tertiary">
22
+ <qas-btn v-bind="splittedButtonProps">
23
23
  <q-menu v-if="hasDefaultSlot" anchor="bottom right" auto-close self="top right">
24
24
  <div :class="classes.menuContent">
25
25
  <slot />
@@ -103,6 +103,19 @@ const hasButtons = computed(() => !screen.isSmall || !props.useSplit)
103
103
  const hasDefaultSlot = computed(() => !!slots.default)
104
104
  const hasMenuOnLeftSide = computed(() => hasDefaultSlot.value && !props.useSplit && isSingleButton.value)
105
105
 
106
+ const splittedButtonProps = computed(() => {
107
+ const iconKey = screen.isSmall ? 'icon' : 'iconRight'
108
+
109
+ return {
110
+ color: 'grey-10',
111
+ disable: props.disable,
112
+ [iconKey]: props.dropdownIcon,
113
+ variant: 'tertiary',
114
+ label: 'Opções',
115
+ useLabelOnSmallScreen: false
116
+ }
117
+ })
118
+
106
119
  watch(() => props.menu, value => {
107
120
  isMenuOpened.value = value
108
121
  }, { immediate: true })
@@ -2,14 +2,14 @@
2
2
  <div class="qas-card">
3
3
  <qas-box class="rounded-borders-right" v-bind="boxProps">
4
4
  <q-card class="column full-height overflow-hidden shadow-0">
5
- <div class="items-center justify-between row">
6
- <component :is="titleComponent" class="text-h4 text-no-decoration" :class="titleClasses" :to="route">
5
+ <div class="full-width items-center justify-between no-wrap row">
6
+ <component :is="titleComponent" class="ellipsis text-h5 text-no-decoration" :class="titleClasses" :to="route">
7
7
  <slot name="title">
8
8
  {{ props.title }}
9
9
  </slot>
10
10
  </component>
11
11
 
12
- <qas-actions-menu v-if="hasActions" :list="props.actionsMenuProps" :use-label="false" />
12
+ <qas-actions-menu v-if="hasActions" v-bind="formattedActionsMenuProps" />
13
13
  </div>
14
14
 
15
15
  <div class="q-my-sm qas-card__content">
@@ -66,8 +66,10 @@ const props = defineProps({
66
66
  }
67
67
  })
68
68
 
69
+ // consts
69
70
  const isInsideBox = inject('isBox', false)
70
71
 
72
+ // computeds
71
73
  const boxProps = computed(() => {
72
74
  return {
73
75
  outlined: isInsideBox,
@@ -89,7 +91,7 @@ const titleClasses = computed(() => {
89
91
  }
90
92
  })
91
93
 
92
- const titleComponent = computed(() => hasRoute.value ? 'router-link' : 'div')
94
+ const titleComponent = computed(() => hasRoute.value ? 'router-link' : 'h5')
93
95
 
94
96
  const style = computed(() => {
95
97
  if (!props.statusColor) return
@@ -106,6 +108,13 @@ const slots = useSlots()
106
108
  const hasFooterSlot = computed(() => !!slots.footer)
107
109
 
108
110
  const hasFooter = computed(() => hasFooterSlot.value || hasExpansion.value)
111
+
112
+ const formattedActionsMenuProps = computed(() => {
113
+ return {
114
+ ...props.actionsMenuProps,
115
+ useLabel: false
116
+ }
117
+ })
109
118
  </script>
110
119
 
111
120
  <style lang="scss">
@@ -1,23 +1,25 @@
1
1
  <template>
2
- <qas-header v-if="hasHeader" v-bind="headerProps">
3
- <template #right>
4
- <qas-filters v-bind="chartFiltersProps" />
5
- </template>
6
- </qas-header>
7
-
8
- <div v-bind="parentComponentProps">
9
- <component :is="chartComponent.is" v-if="showChart" v-bind="chartComponent.props" />
10
-
11
- <div v-else-if="!isFetching">
12
- <slot name="empty-results">
13
- <qas-empty-result-text />
14
- </slot>
2
+ <component :is="parentComponent.is" v-bind="parentComponent.props">
3
+ <qas-header v-if="hasHeader" v-bind="headerProps">
4
+ <template #right>
5
+ <qas-filters v-bind="chartFiltersProps" />
6
+ </template>
7
+ </qas-header>
8
+
9
+ <div v-bind="parentComponentProps">
10
+ <component :is="chartComponent.is" v-if="showChart" v-bind="chartComponent.props" />
11
+
12
+ <div v-else-if="!isFetching">
13
+ <slot name="empty-results">
14
+ <qas-empty-result-text />
15
+ </slot>
16
+ </div>
17
+
18
+ <q-inner-loading :showing="isFetching">
19
+ <q-spinner color="grey" size="3em" />
20
+ </q-inner-loading>
15
21
  </div>
16
-
17
- <q-inner-loading :showing="isFetching">
18
- <q-spinner color="grey" size="3em" />
19
- </q-inner-loading>
20
- </div>
22
+ </component>
21
23
  </template>
22
24
 
23
25
  <script>
@@ -69,6 +71,11 @@ export default {
69
71
  type: Function
70
72
  },
71
73
 
74
+ boxProps: {
75
+ default: () => ({}),
76
+ type: Object
77
+ },
78
+
72
79
  colorsList: {
73
80
  type: Array,
74
81
  default: () => []
@@ -124,6 +131,11 @@ export default {
124
131
  type: String
125
132
  },
126
133
 
134
+ useBox: {
135
+ type: Boolean,
136
+ default: true
137
+ },
138
+
127
139
  useFilterButton: {
128
140
  type: Boolean
129
141
  }
@@ -251,9 +263,11 @@ export default {
251
263
  },
252
264
 
253
265
  parentComponentProps () {
266
+ const hasMinHeight = this.isFetching || this.hasDataSets
267
+
254
268
  return {
255
269
  class: 'relative-position',
256
- style: `min-height: ${this.height}`
270
+ style: `min-height: ${hasMinHeight ? this.height : 'auto'}`
257
271
  }
258
272
  },
259
273
 
@@ -308,6 +322,16 @@ export default {
308
322
  label: this.title
309
323
  }
310
324
  }
325
+ },
326
+
327
+ parentComponent () {
328
+ return {
329
+ is: this.useBox ? 'qas-box' : 'div',
330
+
331
+ props: {
332
+ ...(this.useBox && { ...this.boxProps })
333
+ }
334
+ }
311
335
  }
312
336
  },
313
337
 
@@ -326,7 +350,7 @@ export default {
326
350
  this.handleFetchData()
327
351
  },
328
352
 
329
- unmounted () {
353
+ beforeUnmount () {
330
354
  this.unregisterChartJS()
331
355
  },
332
356
 
@@ -10,6 +10,11 @@ props:
10
10
  type: Function
11
11
  examples: ['beforeFetch({ payload, resolve, done })']
12
12
 
13
+ box-props:
14
+ desc: Propriedades do "QasBox" que envolve o conteúdo.
15
+ default: {}
16
+ type: Object
17
+
13
18
  colors-list:
14
19
  desc: Lista de cores personalizadas para utilizar nos gráficos
15
20
  default: []
@@ -65,6 +70,11 @@ props:
65
70
  desc: Envia como parâmetro para a action "fetchList" do modulo correspondente a "entity".
66
71
  type: String
67
72
 
73
+ use-box:
74
+ desc: Controla se o componente vai ter o QasBox englobando ou não.
75
+ default: true
76
+ type: Boolean
77
+
68
78
  use-filter-button:
69
79
  desc: Controla se o componente vai usar ou não o componente "QasFilters".
70
80
  type: Boolean
@@ -1,21 +1,27 @@
1
1
  <template>
2
2
  <div>
3
3
  <!-- Single -->
4
- <q-checkbox v-if="isSingle" v-model="model" v-bind="attrs" dense>
4
+ <q-checkbox v-if="isSingle" v-model="model" v-bind="singleAttributes" dense>
5
5
  <slot />
6
6
  </q-checkbox>
7
7
 
8
8
  <!-- Group -->
9
- <div v-else :class="classes">
10
- <div v-for="(option, index) in props.options" :key="index">
11
- <!-- Com children -->
12
- <q-checkbox v-if="hasChildren(option)" :class="getCheckboxClass(option)" dense :label="option.label" :model-value="getModelValue(index)" @update:model-value="updateCheckbox($event, option, index)" />
9
+ <div v-else>
10
+ <div v-if="hasCheckboxLabel" class="q-mb-sm text-body1">
11
+ {{ props.label }}
12
+ </div>
13
+
14
+ <div :class="classes">
15
+ <div v-for="(option, index) in props.options" :key="index">
16
+ <!-- Com children -->
17
+ <q-checkbox v-if="hasChildren(option)" :class="getCheckboxClass(option)" dense :label="option.label" :model-value="getModelValue(index)" @update:model-value="updateCheckbox($event, option, index)" />
13
18
 
14
- <!-- Com children -->
15
- <q-option-group v-if="hasChildren(option)" class="q-ml-xs q-mt-xs" dense :inline="props.inline" :model-value="props.modelValue" :options="option.children" type="checkbox" @update:model-value="updateChildren($event, option, index)" />
19
+ <!-- Com children -->
20
+ <q-option-group v-if="hasChildren(option)" class="q-ml-xs q-mt-xs" dense :inline="props.inline" :model-value="props.modelValue" :options="option.children" type="checkbox" @update:model-value="updateChildren($event, option, index)" />
16
21
 
17
- <!-- Sem children -->
18
- <q-option-group v-else v-model="model" v-bind="attrs" dense :options="[option]" type="checkbox" />
22
+ <!-- Sem children -->
23
+ <q-option-group v-else v-model="model" v-bind="attrs" dense :options="[option]" type="checkbox" />
24
+ </div>
19
25
  </div>
20
26
  </div>
21
27
  </div>
@@ -30,6 +36,11 @@ defineOptions({
30
36
  })
31
37
 
32
38
  const props = defineProps({
39
+ label: {
40
+ default: '',
41
+ type: String
42
+ },
43
+
33
44
  options: {
34
45
  default: () => [],
35
46
  type: Array
@@ -59,6 +70,8 @@ onMounted(handleParent)
59
70
  // computed
60
71
  const classes = computed(() => props.inline && 'flex q-gutter-x-sm')
61
72
 
73
+ const hasCheckboxLabel = computed(() => !!props.label)
74
+
62
75
  const model = computed({
63
76
  get () {
64
77
  return props.modelValue
@@ -71,6 +84,14 @@ const model = computed({
71
84
 
72
85
  const isSingle = computed(() => !props.options.length)
73
86
 
87
+ const singleAttributes = computed(() => {
88
+ return {
89
+ ...attrs,
90
+
91
+ label: props.label
92
+ }
93
+ })
94
+
74
95
  // watch
75
96
  watch(() => props.options, handleParent)
76
97
 
@@ -9,6 +9,11 @@ props:
9
9
  default: true
10
10
  type: Boolean
11
11
 
12
+ label:
13
+ desc: Label utilizada em casos de ser checkbox-group.
14
+ default: ''
15
+ type: String
16
+
12
17
  model-value:
13
18
  desc: Model do componente, usado para v-model.
14
19
  default: []
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <span>
3
- <slot>{{ props.text }}</slot>
3
+ <slot v-if="props.useText">{{ props.text }}</slot>
4
4
 
5
5
  <qas-btn class="q-ml-xs" color="primary" :icon="props.icon" :loading="isLoading" variant="tertiary" @click.stop.prevent="copy">
6
6
  <q-tooltip>Copiar</q-tooltip>
@@ -23,13 +23,23 @@ const props = defineProps({
23
23
  text: {
24
24
  required: true,
25
25
  type: String
26
+ },
27
+
28
+ useText: {
29
+ type: Boolean,
30
+ default: true
31
+ },
32
+
33
+ rawText: {
34
+ default: '',
35
+ type: String
26
36
  }
27
37
  })
28
38
 
29
39
  const isLoading = ref(false)
30
40
 
31
41
  function copy () {
32
- copyToClipboard(props.text, value => {
42
+ copyToClipboard(props.rawText || props.text, value => {
33
43
  isLoading.value = value
34
44
  })
35
45
  }
@@ -13,3 +13,11 @@ props:
13
13
  desc: Texto a ser copiado.
14
14
  type: String
15
15
 
16
+ use-text:
17
+ desc: Controla se o texto será exibo ao lado do botão ou não.
18
+ type: Boolean
19
+ default: true
20
+
21
+ raw-text:
22
+ desc: Caso o texto a ser copiado precise ser diferente do texto a ser exibido, utilize esta propriedade.
23
+ type: String
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <qas-input ref="input" v-bind="attributes" v-model="currentValue" inputmode="numeric" :unmasked-value="false" @blur="validateDateTimeOnBlur" @focus="resetError" @update:model-value="updateModelValue">
3
3
  <template #append>
4
- <qas-btn v-if="!props.useTimeOnly" color="grey-10" :disable="attrs.readonly" icon="sym_r_event" variant="tertiary">
4
+ <qas-btn v-if="!props.useTimeOnly" color="grey-10" :disable="attrs.readonly" icon="sym_r_calendar_today" variant="tertiary">
5
5
  <q-popup-proxy ref="dateProxy" transition-hide="scale" transition-show="scale" v-bind="props.datePopupProxyProps">
6
6
  <qas-date v-model="currentValue" v-bind="defaultDateProps" :mask="maskDate" width="290px" @update:model-value="updateModelValue" />
7
7
  </q-popup-proxy>
@@ -1,10 +1,10 @@
1
1
  <template>
2
2
  <q-dialog ref="dialogRef" class="qas-dialog" :class="classes" data-cy="dialog" v-bind="dialogProps" :persistent="props.persistent" @update:model-value="updateModelValue">
3
- <div class="bg-white q-pa-lg" :style="style">
4
- <header v-if="hasHeader" class="q-mb-lg">
3
+ <div class="bg-white q-pa-md" :style="style">
4
+ <header v-if="hasHeader" class="q-mb-md">
5
5
  <slot name="header">
6
6
  <div class="items-center justify-between row">
7
- <h5 class="text-h5" data-cy="dialog-title">{{ props.card.title }}</h5>
7
+ <qas-label data-cy="dialog-title" :label="props.card.title" margin="none" />
8
8
 
9
9
  <qas-btn v-if="isInfoDialog" v-close-popup color="grey-10" data-cy="dialog-close-btn" icon="sym_r_close" variant="tertiary" />
10
10
  </div>