@bildvitta/quasar-ui-asteroid 3.0.0-beta.2 → 3.0.0-beta.20

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 (173) hide show
  1. package/dist/api/QasActionsMenu.json +15 -15
  2. package/dist/api/QasAppBar.json +4 -8
  3. package/dist/api/QasAppMenu.json +11 -7
  4. package/dist/api/QasBtn.json +8 -4
  5. package/dist/api/QasCard.json +17 -13
  6. package/dist/api/QasCheckboxGroup.json +8 -8
  7. package/dist/api/QasCopy.json +4 -4
  8. package/dist/api/QasDateTimeInput.json +16 -16
  9. package/dist/api/QasDelete.json +17 -17
  10. package/dist/api/QasDialog.json +24 -20
  11. package/dist/api/QasFilters.json +14 -14
  12. package/dist/api/QasFormGenerator.json +57 -26
  13. package/dist/api/QasFormView.json +115 -87
  14. package/dist/api/QasGallery.json +4 -4
  15. package/dist/api/QasGridGenerator.json +40 -39
  16. package/dist/api/QasInput.json +13 -13
  17. package/dist/api/QasListItems.json +18 -17
  18. package/dist/api/QasListView.json +67 -53
  19. package/dist/api/QasNestedFields.json +45 -35
  20. package/dist/api/QasNumericInput.json +31 -12
  21. package/dist/api/QasPageHeader.json +7 -7
  22. package/dist/api/QasPasswordInput.json +13 -13
  23. package/dist/api/QasPasswordStrengthChecker.json +12 -12
  24. package/dist/api/QasProfile.json +5 -5
  25. package/dist/api/QasResizer.json +11 -11
  26. package/dist/api/QasSearchBox.json +90 -8
  27. package/dist/api/QasSelect.json +92 -25
  28. package/dist/api/QasSelectList.json +16 -14
  29. package/dist/api/QasSignaturePad.json +1 -1
  30. package/dist/api/QasSignatureUploader.json +9 -9
  31. package/dist/api/QasSingleView.json +52 -43
  32. package/dist/api/QasSortable.json +20 -20
  33. package/dist/api/QasTableGenerator.json +5 -5
  34. package/dist/api/QasTabsGenerator.json +5 -2
  35. package/dist/api/QasTransfer.json +9 -9
  36. package/dist/api/QasUploader.json +22 -17
  37. package/dist/asteroid.cjs.css +1 -1
  38. package/dist/asteroid.cjs.js +3904 -3102
  39. package/dist/asteroid.cjs.min.js +2 -2
  40. package/dist/asteroid.esm.css +1 -1
  41. package/dist/asteroid.esm.js +3908 -3106
  42. package/dist/asteroid.esm.min.js +2 -2
  43. package/dist/asteroid.umd.css +1 -1
  44. package/dist/asteroid.umd.js +3907 -3106
  45. package/dist/asteroid.umd.min.js +2 -2
  46. package/dist/vetur/asteroid-attributes.json +387 -303
  47. package/dist/vetur/asteroid-tags.json +129 -108
  48. package/package.json +1 -1
  49. package/src/assets/gear.svg +27 -0
  50. package/src/components/actions/QasActions.vue +1 -5
  51. package/src/components/actions-menu/QasActionsMenu.vue +4 -10
  52. package/src/components/actions-menu/QasActionsMenu.yml +15 -15
  53. package/src/components/app-bar/QasAppBar.vue +18 -14
  54. package/src/components/app-bar/QasAppBar.yml +4 -8
  55. package/src/components/app-menu/QasAppMenu.vue +8 -7
  56. package/src/components/app-menu/QasAppMenu.yml +11 -7
  57. package/src/components/avatar/QasAvatar.vue +0 -4
  58. package/src/components/box/QasBox.vue +1 -1
  59. package/src/components/btn/QasBtn.vue +11 -15
  60. package/src/components/btn/QasBtn.yml +7 -3
  61. package/src/components/card/QasCard.vue +18 -9
  62. package/src/components/card/QasCard.yml +17 -13
  63. package/src/components/checkbox-group/QasCheckboxGroup.yml +9 -8
  64. package/src/components/copy/QasCopy.vue +1 -1
  65. package/src/components/copy/QasCopy.yml +4 -3
  66. package/src/components/date-time-input/QasDateTimeInput.vue +39 -41
  67. package/src/components/date-time-input/QasDateTimeInput.yml +16 -16
  68. package/src/components/delete/QasDelete.vue +15 -1
  69. package/src/components/delete/QasDelete.yml +15 -15
  70. package/src/components/dialog/QasDialog.vue +28 -9
  71. package/src/components/dialog/QasDialog.yml +22 -18
  72. package/src/components/dialog-router/QasDialogRouter.vue +1 -1
  73. package/src/components/field/QasField.vue +15 -14
  74. package/src/components/filters/QasFilters.vue +30 -13
  75. package/src/components/filters/QasFilters.yml +14 -14
  76. package/src/components/form-generator/QasFormGenerator.vue +87 -12
  77. package/src/components/form-generator/QasFormGenerator.yml +32 -18
  78. package/src/components/form-view/QasFormView.vue +142 -60
  79. package/src/components/form-view/QasFormView.yml +91 -67
  80. package/src/components/gallery/QasGallery.vue +4 -8
  81. package/src/components/gallery/QasGallery.yml +4 -4
  82. package/src/components/grid-generator/QasGridGenerator.vue +23 -7
  83. package/src/components/grid-generator/QasGridGenerator.yml +29 -27
  84. package/src/components/input/QasInput.vue +37 -21
  85. package/src/components/input/QasInput.yml +13 -13
  86. package/src/components/layout/QasLayout.vue +4 -0
  87. package/src/components/list-items/QasListItems.vue +16 -24
  88. package/src/components/list-items/QasListItems.yml +14 -15
  89. package/src/components/list-view/QasListView.vue +48 -20
  90. package/src/components/list-view/QasListView.yml +58 -46
  91. package/src/components/map/QasMap.vue +5 -5
  92. package/src/components/nested-fields/QasNestedFields.vue +29 -21
  93. package/src/components/nested-fields/QasNestedFields.yml +35 -28
  94. package/src/components/numeric-input/QasNumericInput.vue +45 -27
  95. package/src/components/numeric-input/QasNumericInput.yml +26 -12
  96. package/src/components/page-header/QasPageHeader.vue +14 -11
  97. package/src/components/page-header/QasPageHeader.yml +4 -4
  98. package/src/components/password-input/QasPasswordInput.vue +17 -16
  99. package/src/components/password-input/QasPasswordInput.yml +11 -11
  100. package/src/components/password-strength-checker/QasPasswordStrengthChecker.yml +10 -10
  101. package/src/components/profile/QasProfile.vue +3 -6
  102. package/src/components/profile/QasProfile.yml +5 -5
  103. package/src/components/resizer/QasResizer.vue +1 -1
  104. package/src/components/resizer/QasResizer.yml +6 -5
  105. package/src/components/search-box/QasSearchBox.vue +138 -42
  106. package/src/components/search-box/QasSearchBox.yml +74 -7
  107. package/src/components/select/QasSelect.vue +63 -53
  108. package/src/components/select/QasSelect.yml +68 -17
  109. package/src/components/select-list/QasSelectList.vue +13 -32
  110. package/src/components/select-list/QasSelectList.yml +13 -14
  111. package/src/components/signature-pad/QasSignaturePad.vue +1 -1
  112. package/src/components/signature-pad/QasSignaturePad.yml +1 -1
  113. package/src/components/signature-uploader/QasSignatureUploader.vue +13 -14
  114. package/src/components/signature-uploader/QasSignatureUploader.yml +9 -9
  115. package/src/components/single-view/QasSingleView.vue +24 -8
  116. package/src/components/single-view/QasSingleView.yml +45 -38
  117. package/src/components/sortable/QasSortable.yml +17 -17
  118. package/src/components/table-generator/QasTableGenerator.vue +14 -6
  119. package/src/components/table-generator/QasTableGenerator.yml +5 -5
  120. package/src/components/tabs-generator/QasTabsGenerator.vue +2 -2
  121. package/src/components/tabs-generator/QasTabsGenerator.yml +2 -2
  122. package/src/components/text-truncate/QasTextTruncate.vue +2 -5
  123. package/src/components/transfer/QasTransfer.vue +5 -7
  124. package/src/components/transfer/QasTransfer.yml +9 -9
  125. package/src/components/uploader/QasUploader.vue +63 -16
  126. package/src/components/uploader/QasUploader.yml +17 -12
  127. package/src/composables/index.js +1 -1
  128. package/src/composables/{useHistory.js → use-history.js} +0 -0
  129. package/src/css/components/base.scss +3 -0
  130. package/src/css/components/field.scss +4 -0
  131. package/src/css/components/index.scss +4 -0
  132. package/src/css/components/radio.scss +3 -0
  133. package/src/css/components/tabs.scss +3 -0
  134. package/src/css/mixins/index.scss +1 -0
  135. package/src/css/{set-brand.scss → mixins/set-brand.scss} +0 -0
  136. package/src/css/{background.scss → utils/background.scss} +0 -0
  137. package/src/css/{border-radius.scss → utils/border-radius.scss} +0 -0
  138. package/src/css/{border.scss → utils/border.scss} +0 -0
  139. package/src/css/{container.scss → utils/container.scss} +0 -0
  140. package/src/css/{fonts.scss → utils/fonts.scss} +0 -0
  141. package/src/css/utils/index.scss +9 -0
  142. package/src/css/{line-height.scss → utils/line-height.scss} +0 -0
  143. package/src/css/{opacity.scss → utils/opacity.scss} +0 -0
  144. package/src/css/{text.scss → utils/text.scss} +0 -0
  145. package/src/css/{unset.scss → utils/unset.scss} +0 -0
  146. package/src/css/variables/button.scss +3 -0
  147. package/src/css/variables/index.scss +3 -0
  148. package/src/css/variables/shadow.scss +33 -0
  149. package/src/css/variables/typography.scss +139 -0
  150. package/src/helpers/camelize-fields-name.js +15 -0
  151. package/src/helpers/filters.js +2 -0
  152. package/src/helpers/get-normalized-options.js +20 -0
  153. package/src/helpers/handle-process.js +13 -0
  154. package/src/helpers/index.js +3 -0
  155. package/src/index.scss +11 -12
  156. package/src/mixins/generator.js +10 -2
  157. package/src/mixins/index.js +3 -3
  158. package/src/mixins/search-filter.js +227 -0
  159. package/src/mixins/view.js +35 -13
  160. package/src/pages/ErrorComponent.vue +56 -0
  161. package/src/pages/Forbidden.vue +21 -5
  162. package/src/pages/NotFound.vue +21 -5
  163. package/src/pages/ServerError.vue +25 -0
  164. package/src/pages/Unauthorized.vue +28 -0
  165. package/src/plugins/index.js +4 -2
  166. package/src/plugins/logger/Logger.js +44 -0
  167. package/src/plugins/logger/Logger.yml +9 -0
  168. package/src/plugins/screen/Screen.js +5 -0
  169. package/src/vue-plugin.js +6 -3
  170. package/src/assets/logo-modular.svg +0 -1
  171. package/src/css/design-system.scss +0 -18
  172. package/src/css/shadow.scss +0 -7
  173. package/src/mixins/screen.js +0 -34
@@ -4,25 +4,29 @@ meta:
4
4
  desc: Componente para C.R.U.D. responsável pela parte de listagem (Read).
5
5
 
6
6
  props:
7
+ before-fetch:
8
+ desc: Callback para controlar como funciona o comportamento do fetchList.
9
+ default: null
10
+ type: Function
11
+ examples: ['beforeFetch({ payload, resolve, done })']
12
+
7
13
  entity:
8
14
  desc: Entidade da store, por exemplo se tiver que trabalhar com modulo de usuários, teremos o model "users" na store, que vai ser nossa "entity".
9
15
  required: true
10
16
  type: String
11
17
 
12
- dialog:
13
- desc: Este componente pode ser utilizado dentro de um dialog, neste caso o componente pai não pode ser um "QPage" e sim uma "div", esta prop cuida disto.
14
- type: Boolean
15
-
16
- url:
17
- desc: Envia como parâmetro para a action "fetchList" do modulo correspondente a "entity".
18
- type: String
18
+ errors:
19
+ model: true
20
+ desc: Model de errors, utilizado para recuperar os errors fora do template.
21
+ default: {}
22
+ type: Object
23
+ examples: [v-model:errors="errors"]
19
24
 
20
- results:
25
+ fetching:
21
26
  model: true
22
- desc: Model de results, utilizado para recuperar a lista retornada pelo componente.
23
- default: []
24
- type: Array
25
- examples: [v-model:results="results"]
27
+ desc: Model de fetching, utilizado para saber se o componente está fazendo fetching de dados.
28
+ type: Boolean
29
+ examples: [v-model:fetching="isFetching"]
26
30
 
27
31
  fields:
28
32
  model: true
@@ -31,12 +35,10 @@ props:
31
35
  type: Object
32
36
  examples: [v-model:fields="fields"]
33
37
 
34
- errors:
35
- model: true
36
- desc: Model de errors, utilizado para recuperar os errors fora do template.
38
+ filters-props:
39
+ desc: Repassa as props para o componente "QasFilters".
37
40
  default: {}
38
41
  type: Object
39
- examples: [v-model:errors="errors"]
40
42
 
41
43
  metadata:
42
44
  model: true
@@ -45,14 +47,20 @@ props:
45
47
  type: Object
46
48
  examples: [v-model:metadata="metadata"]
47
49
 
48
- fetching:
50
+ results:
49
51
  model: true
50
- desc: Model de fetching, utilizado para saber se o componente está fazendo fetching de dados.
51
- type: Boolean
52
- examples: [v-model:fetching="isFetching"]
52
+ desc: Model de results, utilizado para recuperar a lista retornada pelo componente.
53
+ default: []
54
+ type: Array
55
+ examples: [v-model:results="results"]
56
+
57
+ url:
58
+ desc: Envia como parâmetro para a action "fetchList" do modulo correspondente a "entity".
59
+ type: String
53
60
 
54
- disable-refresh:
55
- desc: Desabilita o [pull-to-refresh](https://quasar.dev/vue-components/pull-to-refresh#basic).
61
+ use-boundary:
62
+ desc: Controla o limite que o FormView terá, quando é "false", a tag pai deixa de ser um "QPage" para ser uma "div" e é removido as classes "container" e "spaced", comumente utilizando quando precisa usar o QasFormView dentro de um dialog.
63
+ default: true
56
64
  type: Boolean
57
65
 
58
66
  use-filter:
@@ -60,28 +68,46 @@ props:
60
68
  default: true
61
69
  type: Boolean
62
70
 
63
- filters-props:
64
- desc: Repassa as props para o componente "QasFilters".
65
- default: {}
66
- type: Object
67
-
68
- slots:
69
- header:
70
- desc: 'Slot para acessar o header.'
71
+ use-refresh:
72
+ desc: Controla o [pull-to-refresh](https://quasar.dev/vue-components/pull-to-refresh#basic).
73
+ default: true
74
+ type: Boolean
71
75
 
72
- filter:
73
- desc: 'Slot para acessar o filtro.'
76
+ use-results-area-only:
77
+ desc: Controla se irá sempre ser exibido os resultados independente se não há nenhum resultado a ser exibido.
78
+ type: Boolean
74
79
 
80
+ slots:
75
81
  default:
76
82
  desc: 'Slot para ter o conteúdo principal (dentro do main).'
77
83
 
78
84
  empty-results:
79
85
  desc: 'Slot acessar quando a listagem está vazia.'
80
86
 
87
+ filter:
88
+ desc: 'Slot para acessar o filtro.'
89
+
81
90
  footer:
82
91
  desc: 'Slot para acessar o footer.'
83
92
 
93
+ header:
94
+ desc: 'Slot para acessar o header.'
95
+
84
96
  events:
97
+ '@fetch-success -> function(value)':
98
+ desc: Dispara quando a action "fetchList" é executada com sucesso.
99
+ params:
100
+ value:
101
+ desc: Retorna todos os dados "cru" respondido pelo fetch.
102
+ type: Object
103
+
104
+ '@fetch-error -> function(value)':
105
+ desc: Dispara quando a action "fetchList" cai em uma exceção.
106
+ params:
107
+ value:
108
+ desc: Retorna todos os dados "cru" respondido na exceção do fetch.
109
+ type: Object
110
+
85
111
  '@update:results -> function(value)':
86
112
  desc: Dispara quando a action "fetchList" é executada com sucesso, é chamado antes do evento "fetch-success".
87
113
  params:
@@ -116,17 +142,3 @@ events:
116
142
  value:
117
143
  desc: Retorna se está ou não fazendo fetching de dados.
118
144
  type: Boolean
119
-
120
- '@fetch-success -> function(value)':
121
- desc: Dispara quando a action "fetchList" é executada com sucesso.
122
- params:
123
- value:
124
- desc: Retorna todos os dados "cru" respondido pelo fetch.
125
- type: Object
126
-
127
- '@fetch-error -> function(value)':
128
- desc: Dispara quando a action "fetchList" cai em uma exceção.
129
- params:
130
- value:
131
- desc: Retorna todos os dados "cru" respondido na exceção do fetch.
132
- type: Object
@@ -26,13 +26,13 @@ export default {
26
26
  default: () => []
27
27
  },
28
28
 
29
- usePopup: {
30
- type: Boolean
31
- },
32
-
33
29
  zoom: {
34
30
  type: Number,
35
31
  default: 17
32
+ },
33
+
34
+ usePopup: {
35
+ type: Boolean
36
36
  }
37
37
  },
38
38
 
@@ -70,7 +70,7 @@ export default {
70
70
  <style lang="scss">
71
71
  .qas-map {
72
72
  &__draw {
73
- height: 300px;
73
+ height: 300px !important;
74
74
  width: 100%;
75
75
  }
76
76
  }
@@ -10,11 +10,11 @@
10
10
  <div v-if="!row[destroyKey]" :key="index" class="col-12 q-mt-md">
11
11
  <div>
12
12
  <div class="flex items-center justify-between q-py-xs">
13
- <qas-label v-if="!useSingleLabel" :label="setRowLabel(index)" />
13
+ <qas-label v-if="!useSingleLabel" :label="getRowLabel(index)" />
14
14
 
15
15
  <div v-if="!useInlineActions" class="q-gutter-x-sm">
16
- <qas-btn v-if="useDuplicate" v-bind="btnDuplicateProps" @click="add(row)" />
17
- <qas-btn v-if="showDestroyBtn" v-bind="btnDestroyProps" @click="destroy(index, row)" />
16
+ <qas-btn v-if="useDuplicate" v-bind="buttonDuplicateProps" @click="add(row)" />
17
+ <qas-btn v-if="showDestroyBtn" v-bind="buttonDestroyProps" @click="destroy(index, row)" />
18
18
  </div>
19
19
  </div>
20
20
 
@@ -75,7 +75,6 @@ import { TransitionGroup } from 'vue'
75
75
 
76
76
  import { constructObject } from '../../helpers'
77
77
  import { extend } from 'quasar'
78
- import { camelize } from 'humps'
79
78
 
80
79
  export default {
81
80
  name: 'QasNestedFields',
@@ -96,7 +95,7 @@ export default {
96
95
  default: 'Inserir novo campo'
97
96
  },
98
97
 
99
- btnDestroyProps: {
98
+ buttonDestroyProps: {
100
99
  type: Object,
101
100
  default: () => {
102
101
  return {
@@ -108,14 +107,14 @@ export default {
108
107
  }
109
108
  },
110
109
 
111
- btnDuplicateProps: {
110
+ buttonDuplicateProps: {
112
111
  type: Object,
113
112
  default: () => {
114
113
  return {
115
114
  label: 'Duplicar',
116
115
  icon: 'o_content_copy',
117
116
  flat: true,
118
- hideMobileLabel: true,
117
+ useLabelOnSmallScreen: false,
119
118
  dense: true
120
119
  }
121
120
  }
@@ -160,6 +159,11 @@ export default {
160
159
  }
161
160
  },
162
161
 
162
+ identifierItemKey: {
163
+ type: String,
164
+ default: 'uuid'
165
+ },
166
+
163
167
  rowLabel: {
164
168
  type: String,
165
169
  default: ''
@@ -225,13 +229,7 @@ export default {
225
229
  },
226
230
 
227
231
  children () {
228
- const field = extend(true, {}, this.field)
229
-
230
- for (const key in field?.children) {
231
- field.children[key].name = camelize(field?.children[key].name)
232
- }
233
-
234
- return field?.children
232
+ return this.field?.children
235
233
  },
236
234
 
237
235
  showDestroyBtn () {
@@ -258,8 +256,7 @@ export default {
258
256
 
259
257
  return {
260
258
  tag: 'div',
261
- enterActiveClass: 'animated slideInDown',
262
- leaveActiveClass: 'animated slideOutUp'
259
+ enterActiveClass: 'animated slideInDown'
263
260
  }
264
261
  }
265
262
  },
@@ -272,9 +269,9 @@ export default {
272
269
  immediate: true
273
270
  },
274
271
 
275
- field: {
272
+ rowObject: {
276
273
  handler () {
277
- !this.modelValue.length && this.setDefaultNestedValue()
274
+ if (!this.nested.length) return this.setDefaultNestedValue()
278
275
  },
279
276
  immediate: true
280
277
  }
@@ -282,13 +279,22 @@ export default {
282
279
 
283
280
  methods: {
284
281
  add (row = {}) {
285
- this.nested.push({ ...this.rowObject, ...row })
282
+ const payload = { ...this.rowObject, ...row }
283
+ const hasIdentifierKey = payload[this.identifierItemKey]
284
+
285
+ if (hasIdentifierKey) {
286
+ delete payload[this.identifierItemKey]
287
+ }
288
+
289
+ this.nested.push(payload)
286
290
 
287
291
  this.$nextTick(() => {
288
292
  this.useAnimation && this.setScroll()
289
293
  this.setFocus()
290
294
  })
291
295
 
296
+ this.$qas.logger.group('QasNestedFields - add', [payload])
297
+
292
298
  return this.updateModelValue()
293
299
  },
294
300
 
@@ -304,10 +310,12 @@ export default {
304
310
  },
305
311
 
306
312
  destroy (index, row) {
307
- this.useRemoveOnDestroy
313
+ !row[this.identifierItemKey] && this.useRemoveOnDestroy
308
314
  ? this.nested.splice(index, 1)
309
315
  : this.nested.splice(index, 1, { [this.destroyKey]: true, ...row })
310
316
 
317
+ this.$qas.logger.group('QasNestedFields - destroy', [{ index, row }])
318
+
311
319
  return this.updateModelValue()
312
320
  },
313
321
 
@@ -333,7 +341,7 @@ export default {
333
341
  })
334
342
  },
335
343
 
336
- setRowLabel (rowKey) {
344
+ getRowLabel (rowKey) {
337
345
  if (this.rowLabel) {
338
346
  return this.useIndexLabel ? `${this.rowLabel} ${rowKey + 1}` : this.rowLabel
339
347
  }
@@ -9,15 +9,15 @@ props:
9
9
  default: Inserir novo campo
10
10
  type: Boolean
11
11
 
12
- btn-destroy-props:
12
+ button-destroy-props:
13
13
  desc: Props do botão de excluir linha contendo os campos.
14
14
  default: "{ label: 'Remover', o_cancel, flat: true, dense: true }"
15
15
  debugger: true
16
16
  type: Object
17
17
 
18
- btn-duplicate-props:
18
+ button-duplicate-props:
19
19
  desc: Props do botão de duplicar linha contendo os campos.
20
- default: "{ label: 'Duplicar', o_content_copy, flat: true, dense: true, hideMobileLabel: true }"
20
+ default: "{ label: 'Duplicar', o_content_copy, flat: true, dense: true, useLabelOnSmallScreen: false }"
21
21
  debugger: true
22
22
  type: Object
23
23
 
@@ -26,13 +26,6 @@ props:
26
26
  default: destroyed
27
27
  type: String
28
28
 
29
- model-value:
30
- desc: Model do componente
31
- default: []
32
- type: Array
33
- examples: [v-model="value"]
34
- model: true
35
-
36
29
  errors:
37
30
  desc: Propriedade de erros para mostrar nos campos gerados.
38
31
  default: {}
@@ -63,6 +56,19 @@ props:
63
56
  type: String
64
57
  examples: [xs, sm, md, lg, xl]
65
58
 
59
+ identifier-item-key:
60
+ desc: Define um identificador para o item. O identificador será utilizado para validar exclusão do item, por exemplo.
61
+ default: uuid
62
+ type: String
63
+ examples: [id, uuid, slug]
64
+
65
+ model-value:
66
+ desc: Model do componente
67
+ default: []
68
+ type: Array
69
+ examples: [v-model="value"]
70
+ model: true
71
+
66
72
  row-label:
67
73
  desc: Rótulo entre cada linha (row).
68
74
  type: String
@@ -105,8 +111,16 @@ props:
105
111
  type: Boolean
106
112
 
107
113
  slots:
108
- fields:
109
- desc: Substitui o "QasFormGenerator".
114
+ add-input:
115
+ desc: Slot para acessar campo de adicionar.
116
+ scope:
117
+ 'add -> function(row)':
118
+ desc: Função para adicionar novos campos no model.
119
+ type: Function
120
+ examples: ["add({ name: 'novo valor' })"]
121
+
122
+ custom-fields:
123
+ desc: Slot para adicionar um campo customizado.
110
124
  scope:
111
125
  fields:
112
126
  desc: Campos atuais.
@@ -126,9 +140,14 @@ slots:
126
140
  type: Function
127
141
  examples: ["updateValue({ name: 'novo valor' }, 2)"]
128
142
 
129
- 'field-[nome-da-chave]':
130
- desc: Repassa todos os slots e escopos do "QasFormGenerator".
143
+ fields:
144
+ desc: Substitui o "QasFormGenerator".
131
145
  scope:
146
+ fields:
147
+ desc: Campos atuais.
148
+ default: {}
149
+ type: Object
150
+
132
151
  index:
133
152
  desc: Index atual dos campos
134
153
  type: Number
@@ -142,14 +161,9 @@ slots:
142
161
  type: Function
143
162
  examples: ["updateValue({ name: 'novo valor' }, 2)"]
144
163
 
145
- custom-fields:
146
- desc: Slot para adicionar um campo customizado.
164
+ 'field-[nome-da-chave]':
165
+ desc: Repassa todos os slots e escopos do "QasFormGenerator".
147
166
  scope:
148
- fields:
149
- desc: Campos atuais.
150
- default: {}
151
- type: Object
152
-
153
167
  index:
154
168
  desc: Index atual dos campos
155
169
  type: Number
@@ -163,13 +177,6 @@ slots:
163
177
  type: Function
164
178
  examples: ["updateValue({ name: 'novo valor' }, 2)"]
165
179
 
166
- add-input:
167
- desc: Slot para acessar campo de adicionar.
168
- scope:
169
- 'add -> function(row)':
170
- desc: Função para adicionar novos campos no model.
171
- type: Function
172
- examples: ["add({ name: 'novo valor' })"]
173
180
 
174
181
  events:
175
182
  '@update:model-value -> function (value)':
@@ -1,7 +1,7 @@
1
1
  <template>
2
- <q-field v-model="model" outlined>
3
- <template #control="{ emitValue, floatingLabel, id, value }">
4
- <input v-show="floatingLabel" :id="id" ref="input" class="q-field__input" :model-value="value" @input="emitValue($event.target.value)">
2
+ <q-field :model-value="modelValue" outlined>
3
+ <template #control="{ floatingLabel, id }">
4
+ <input v-show="floatingLabel" :id="id" ref="input" class="q-field__input" @blur="emitValue" @click="setSelect" @input="emitUpdateModel($event.target.value)">
5
5
  </template>
6
6
  </q-field>
7
7
  </template>
@@ -20,17 +20,7 @@ export default {
20
20
  name: 'QasNumericInput',
21
21
 
22
22
  props: {
23
- allowNegative: {
24
- default: true,
25
- type: Boolean
26
- },
27
-
28
- allowPositive: {
29
- default: true,
30
- type: Boolean
31
- },
32
-
33
- autonumericProps: {
23
+ autonumericOptions: {
34
24
  default: () => ({}),
35
25
  type: Object
36
26
  },
@@ -62,10 +52,23 @@ export default {
62
52
  preset: {
63
53
  default: false,
64
54
  type: [Boolean, String]
55
+ },
56
+
57
+ useNegative: {
58
+ default: true,
59
+ type: Boolean
60
+ },
61
+
62
+ usePositive: {
63
+ default: true,
64
+ type: Boolean
65
65
  }
66
66
  },
67
67
 
68
- emits: ['update:modelValue'],
68
+ emits: [
69
+ 'update:modelValue',
70
+ 'update-model'
71
+ ],
69
72
 
70
73
  data () {
71
74
  return {
@@ -76,15 +79,13 @@ export default {
76
79
  computed: {
77
80
  defaultMode () {
78
81
  return defaultModes[this.mode]
79
- },
80
-
81
- model: {
82
- get () {
83
- return this.modelValue
84
- },
82
+ }
83
+ },
85
84
 
86
- set () {
87
- this.$emit('update:modelValue', this.autoNumeric.getNumber())
85
+ watch: {
86
+ modelValue (value) {
87
+ if (this.autoNumeric) {
88
+ this.autoNumeric.set(value)
88
89
  }
89
90
  }
90
91
  },
@@ -104,11 +105,11 @@ export default {
104
105
  Object.assign(options, autoNumericPredefinedOptions[value])
105
106
  }
106
107
 
107
- if (!this.allowNegative) {
108
+ if (!this.useNegative) {
108
109
  options.minimumValue = 0
109
110
  }
110
111
 
111
- if (!this.allowPositive) {
112
+ if (!this.usePositive) {
112
113
  options.maximumValue = 0
113
114
  }
114
115
 
@@ -116,16 +117,33 @@ export default {
116
117
  options.decimalPlaces = this.decimalPlaces
117
118
  }
118
119
 
119
- Object.assign(options, this.autonumericProps)
120
+ Object.assign(options, this.autonumericOptions)
120
121
 
121
122
  this.$nextTick(() => {
122
- this.$refs.input.value = this.modelValue
123
123
  this.autoNumeric = new AutoNumeric(this.$refs.input, options)
124
+ this.autoNumeric.set(this.modelValue)
124
125
  })
125
126
  },
126
127
 
127
128
  beforeUnmount () {
128
129
  this.autoNumeric.remove()
130
+ },
131
+
132
+ methods: {
133
+ setSelect () {
134
+ this.$refs?.input?.select()
135
+ },
136
+
137
+ emitValue () {
138
+ this.$emit('update:modelValue', this.autoNumeric.getNumber())
139
+ },
140
+
141
+ emitUpdateModel (value) {
142
+ this.$emit('update-model', {
143
+ value,
144
+ raw: this.autoNumeric.getNumber()
145
+ })
146
+ }
129
147
  }
130
148
  }
131
149
  </script>
@@ -7,16 +7,6 @@ meta:
7
7
  desc: Componente de input para decimal, inteiro, dinheiro e porcentagem.
8
8
 
9
9
  props:
10
- allow-negative:
11
- desc: Controla se pode ou não números negativos.
12
- default: true
13
- type: Boolean
14
-
15
- allow-positive:
16
- desc: Controla se pode ou não números positivos.
17
- default: true
18
- type: Boolean
19
-
20
10
  autonumeric-props:
21
11
  desc: Opções do autonumeric (http://autonumeric.org/guide).
22
12
  default: {}
@@ -43,9 +33,33 @@ props:
43
33
  desc: Propriedade preset serve para usar configuração de predefinição/nacionalidade da moeda pré setada pelo autonumeric (Brasil é o padrão).
44
34
  type: [Boolean, String]
45
35
 
36
+ use-negative:
37
+ desc: Controla se pode ou não números negativos.
38
+ default: true
39
+ type: Boolean
40
+
41
+ use-positive:
42
+ desc: Controla se pode ou não números positivos.
43
+ default: true
44
+ type: Boolean
45
+
46
46
  events:
47
47
  '@update:model-value -> function (value)':
48
- desc: Dispara toda vez que o model é atualizado, também utilizado para v-model.
48
+ desc: Dispara toda vez que o model é atualizado (após o blur do input), também utilizado para v-model.
49
49
  params:
50
50
  value:
51
- desc: Novo valor do v-model
51
+ desc: Novo valor do v-model.
52
+
53
+ '@update-model -> function (payload)':
54
+ desc: Dispara toda vez que o model é atualizado, diferente do "update:model-value", é disparado sempre que acontece um novo input. Também utilizado para v-model.
55
+ params:
56
+ payload:
57
+ type: Object
58
+ desc: Objeto contendo informações atualizadas.
59
+ params:
60
+ value:
61
+ type: String,
62
+ desc: Valor formato.
63
+ raw:
64
+ type: Number
65
+ desc: Valor sem formatação.
@@ -17,23 +17,27 @@
17
17
  <script>
18
18
  import { castArray } from 'lodash-es'
19
19
  import { useHistory } from '../../composables'
20
+ import { createMetaMixin } from 'quasar'
20
21
 
21
22
  const { hasPreviousRoute, history, getPreviousRoute } = useHistory()
22
23
 
23
24
  export default {
24
25
  name: 'QasPageHeader',
25
26
 
27
+ mixins: [
28
+ createMetaMixin(function () {
29
+ return {
30
+ title: this.title
31
+ }
32
+ })
33
+ ],
34
+
26
35
  props: {
27
36
  breadcrumbs: {
28
37
  default: '',
29
38
  type: [Array, String]
30
39
  },
31
40
 
32
- useBreadcrumbs: {
33
- default: true,
34
- type: Boolean
35
- },
36
-
37
41
  root: {
38
42
  default: '',
39
43
  type: [Object, String]
@@ -42,6 +46,11 @@ export default {
42
46
  title: {
43
47
  default: '',
44
48
  type: String
49
+ },
50
+
51
+ useBreadcrumbs: {
52
+ default: true,
53
+ type: Boolean
45
54
  }
46
55
  },
47
56
 
@@ -85,12 +94,6 @@ export default {
85
94
 
86
95
  return lastIndex === index ? 'text-grey-7' : 'text-primary'
87
96
  }
88
- },
89
-
90
- meta () {
91
- return {
92
- title: this.title
93
- }
94
97
  }
95
98
  }
96
99
  </script>
@@ -11,10 +11,6 @@ props:
11
11
  desc: Configurações do QBreadcrumbs (https://quasar.dev/vue-components/breadcrumbs#introduction).
12
12
  type: [Array, String]
13
13
 
14
- use-breadcrumbs:
15
- desc: Habilita ou não o breadcrumbs.
16
- type: [Array, String]
17
-
18
14
  title:
19
15
  desc: Título do cabeçalho.
20
16
  type: String
@@ -22,3 +18,7 @@ props:
22
18
  root:
23
19
  desc: Rota raiz do breadcrumbs.
24
20
  type: [Object, String]
21
+
22
+ use-breadcrumbs:
23
+ desc: Habilita ou não o breadcrumbs.
24
+ type: [Array, String]