@bildvitta/quasar-ui-asteroid 3.0.0-alpha.3 → 3.0.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.
Files changed (73) hide show
  1. package/dist/api/QasBtn.json +5 -2
  2. package/dist/api/QasDelete.json +5 -0
  3. package/dist/api/QasFilters.json +4 -0
  4. package/dist/api/QasFormView.json +6 -4
  5. package/dist/api/QasInput.json +16 -1
  6. package/dist/api/QasPasswordInput.json +2 -1
  7. package/dist/api/QasSignatureUploader.json +7 -0
  8. package/dist/asteroid.cjs.css +1 -1
  9. package/dist/asteroid.cjs.js +792 -653
  10. package/dist/asteroid.cjs.min.js +2 -2
  11. package/dist/asteroid.esm.css +1 -1
  12. package/dist/asteroid.esm.js +794 -654
  13. package/dist/asteroid.esm.min.js +2 -2
  14. package/dist/asteroid.umd.css +1 -1
  15. package/dist/asteroid.umd.js +794 -654
  16. package/dist/asteroid.umd.min.js +2 -2
  17. package/dist/vetur/asteroid-attributes.json +31 -3
  18. package/dist/vetur/asteroid-tags.json +11 -4
  19. package/package.json +1 -1
  20. package/src/asteroid.js +1 -0
  21. package/src/components/actions/QasActions.vue +1 -5
  22. package/src/components/actions-menu/QasActionsMenu.vue +3 -5
  23. package/src/components/app-menu/QasAppMenu.vue +1 -4
  24. package/src/components/btn/QasBtn.vue +12 -11
  25. package/src/components/btn/QasBtn.yml +4 -1
  26. package/src/components/delete/QasDelete.vue +23 -1
  27. package/src/components/delete/QasDelete.yml +4 -0
  28. package/src/components/dialog/QasDialog.vue +4 -8
  29. package/src/components/field/QasField.vue +1 -2
  30. package/src/components/filters/QasFilters.vue +6 -2
  31. package/src/components/filters/QasFilters.yml +4 -0
  32. package/src/components/form-view/QasFormView.vue +14 -14
  33. package/src/components/form-view/QasFormView.yml +8 -3
  34. package/src/components/gallery/QasGallery.vue +4 -8
  35. package/src/components/input/QasInput.vue +43 -2
  36. package/src/components/input/QasInput.yml +13 -1
  37. package/src/components/nested-fields/QasNestedFields.vue +47 -35
  38. package/src/components/page-header/QasPageHeader.vue +4 -2
  39. package/src/components/password-input/QasPasswordInput.vue +17 -26
  40. package/src/components/password-input/QasPasswordInput.yml +1 -1
  41. package/src/components/profile/QasProfile.vue +2 -5
  42. package/src/components/search-box/QasSearchBox.vue +6 -1
  43. package/src/components/select-list/QasSelectList.vue +12 -13
  44. package/src/components/signature-uploader/QasSignatureUploader.vue +35 -2
  45. package/src/components/signature-uploader/QasSignatureUploader.yml +5 -0
  46. package/src/components/table-generator/QasTableGenerator.vue +3 -6
  47. package/src/components/text-truncate/QasTextTruncate.vue +1 -4
  48. package/src/components/transfer/QasTransfer.vue +12 -13
  49. package/src/components/uploader/QasUploader.vue +1 -2
  50. package/src/composables/index.js +1 -0
  51. package/src/composables/useForm.js +3 -0
  52. package/src/composables/useHistory.js +46 -0
  53. package/src/css/design-system/button.scss +6 -0
  54. package/src/css/design-system/index.scss +2 -0
  55. package/src/css/design-system/typography.scss +91 -0
  56. package/src/directives/Test.js +13 -0
  57. package/src/helpers/filter-list-by-handle.js +31 -0
  58. package/src/helpers/filter-object-to-array.js +29 -0
  59. package/src/helpers/filter-object.js +2 -3
  60. package/src/helpers/index.js +2 -0
  61. package/src/index.scss +4 -2
  62. package/src/mixins/index.js +1 -3
  63. package/src/mixins/view.js +2 -0
  64. package/src/pages/Forbidden.vue +12 -0
  65. package/src/pages/NotFound.vue +12 -0
  66. package/src/plugins/index.js +2 -0
  67. package/src/plugins/screen/Screen.js +35 -0
  68. package/src/plugins/screen/Screen.yml +16 -0
  69. package/src/vue-plugin.js +12 -3
  70. package/src/css/transitions.scss +0 -12
  71. package/src/mixins/screen.js +0 -34
  72. package/src/store/history.js +0 -43
  73. package/src/store/index.js +0 -1
@@ -1,357 +1,25 @@
1
1
  /*!
2
- * @bildvitta/quasar-ui-asteroid v3.0.0-alpha.3
2
+ * @bildvitta/quasar-ui-asteroid v3.0.0-beta.3
3
3
  * (c) 2022 Bild & Vitta <systemteam@bild.com.br>
4
4
  * Released under the MIT License.
5
5
  */
6
+ import { openBlock, createElementBlock, normalizeClass, createElementVNode, renderSlot, resolveComponent, createBlock, mergeProps, createSlots, withCtx, createCommentVNode, renderList, normalizeProps, guardReactiveProps, createVNode, Fragment, toDisplayString, resolveDynamicComponent, createTextVNode, resolveDirective, withDirectives, reactive, computed, markRaw, vShow, normalizeStyle, withModifiers, TransitionGroup } from 'vue';
6
7
  import { camelize, camelizeKeys } from 'humps';
7
- import { markRaw, openBlock, createElementBlock, normalizeClass, createElementVNode, renderSlot, resolveComponent, createBlock, mergeProps, createSlots, withCtx, createTextVNode, toDisplayString, createCommentVNode, renderList, normalizeProps, guardReactiveProps, createVNode, Fragment, resolveDynamicComponent, resolveDirective, withDirectives, vShow, withModifiers, reactive, normalizeStyle } from 'vue';
8
8
  import { parseISO, format, isMatch } from 'date-fns';
9
9
  import { ptBR } from 'date-fns/locale';
10
- import { copyToClipboard, date as date$1, Dialog as Dialog$1, Notify, Loading, extend, uid, Quasar } from 'quasar';
10
+ import { copyToClipboard, date as date$1, Dialog as Dialog$1, Notify, Screen as Screen$1, Platform, Loading, extend, uid, Quasar } from 'quasar';
11
+ import { findLastIndex, isEqual, isEqualWith, isObject, castArray, sortBy } from 'lodash-es';
11
12
  import AutoNumeric from 'autonumeric';
12
13
  import Pica from 'pica';
13
- import api from 'axios';
14
- import { isEqual, findLastIndex, isEqualWith, isObject, castArray, sortBy } from 'lodash-es';
15
14
  import SignaturePad from 'signature_pad';
16
15
  import { onBeforeRouteLeave } from 'vue-router';
17
16
  import Fuse from 'fuse.js';
18
17
  import Sortable from 'sortablejs';
19
18
  import VueGoogleMaps from '@fawmi/vue-google-maps';
20
19
 
21
- var contextMixin = {
22
- computed: {
23
- mx_context () {
24
- const { limit, ordering, page, search, ...filters } = this.$route.query;
25
- return { filters, limit, ordering, page: page ? parseInt(page) : 1, search }
26
- }
27
- }
28
- };
29
-
30
- const irregularClasses = ['col', 'col-auto', 'fit'];
31
-
32
- var generatorMixin = {
33
- props: {
34
- columns: {
35
- default: () => [],
36
- type: [Array, String, Object]
37
- },
38
-
39
- fields: {
40
- default: () => ({}),
41
- type: Object
42
- },
43
-
44
- gutter: {
45
- default: 'md',
46
- type: [String, Boolean],
47
- validator: value => ['xs', 'sm', 'md', 'lg', 'xl'].includes(value)
48
- }
49
- },
50
-
51
- computed: {
52
- mx_classes () {
53
- const classes = ['row'];
54
-
55
- if (this.gutter) {
56
- classes.push(`q-col-gutter-${this.gutter}`);
57
- }
58
-
59
- return classes
60
- }
61
- },
62
-
63
- methods: {
64
- mx_getBreakpoint (columns) {
65
- const classes = [];
66
- const profiles = { col: 'col', xs: 'col-xs', sm: 'col-sm', md: 'col-md', lg: 'col-lg', xl: 'col-xl' };
67
- const { fieldProps, classes: renamedClasses, ...formattedColumns } = columns || {};
68
-
69
- for (const key in formattedColumns) {
70
- const value = formattedColumns[key];
71
- classes.push(irregularClasses.includes(value) ? value : `${profiles[key]}-${value}`);
72
- }
73
-
74
- return [...classes, renamedClasses]
75
- },
76
-
77
- mx_getFieldClass (index, isGridGenerator) {
78
- if (typeof this.columns === 'string') {
79
- return irregularClasses.includes(this.columns) ? this.columns : `col-${this.columns}`
80
- }
81
-
82
- return Array.isArray(this.columns)
83
- ? this.mx_handleColumnsByIndex(index, isGridGenerator)
84
- : this.mx_handleColumnsByField(index, isGridGenerator)
85
- },
86
-
87
- mx_handleColumnsByField (index, isGridGenerator) {
88
- if (!this.columns[index]) {
89
- return this.mx_setDefaultColumnClass(isGridGenerator)
90
- }
91
-
92
- return this.mx_getBreakpoint(this.columns[index])
93
- },
94
-
95
- mx_handleColumnsByIndex (index, isGridGenerator) {
96
- const fields = isGridGenerator ? this.fields : this.groupedFields.visible;
97
-
98
- if (!Array.isArray(fields)) {
99
- index = Object.keys(fields).findIndex(field => field === index);
100
- }
101
-
102
- const length = this.columns.length;
103
-
104
- if (!length) {
105
- return this.mx_setDefaultColumnClass(isGridGenerator)
106
- }
107
-
108
- return this.mx_getBreakpoint(this.columns[index])
109
- },
110
-
111
- mx_setDefaultColumnClass (isGridGenerator) {
112
- return isGridGenerator ? 'col-6 col-xs-12 col-sm-4' : 'col-6'
113
- }
114
- }
115
- };
116
-
117
- const levels = {
118
- 0: {
119
- color: 'negative',
120
- label: 'Muito fraco',
121
- progress: 0.05,
122
- textClass: 'text-negative'
123
- },
124
-
125
- 1: {
126
- color: 'warning',
127
- label: 'Fraco',
128
- progress: 0.25,
129
- textClass: 'text-warning'
130
- },
131
-
132
- 2: {
133
- color: 'warning',
134
- label: 'Bom',
135
- progress: 0.5,
136
- textClass: 'text-warning'
137
- },
138
-
139
- 3: {
140
- color: 'positive',
141
- label: 'Forte',
142
- progress: 0.75,
143
- textClass: 'text-positive'
144
- },
145
-
146
- 4: {
147
- color: 'positive',
148
- label: 'Muito forte',
149
- progress: 1,
150
- textClass: 'text-positive'
151
- }
152
- };
153
-
154
- var passwordMixin = {
155
- props: {
156
- levels: {
157
- default: () => levels,
158
- type: Object
159
- },
160
-
161
- // https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/minlength
162
- minlength: {
163
- default: 8,
164
- type: [Number, String]
165
- },
166
-
167
- specials: {
168
- default: /[!@#$%^&*()_+\-=[\]{}|;:'",<.>/?`~]/g,
169
- type: RegExp
170
- },
171
-
172
- trackColor: {
173
- default: 'blue-grey-1',
174
- type: String
175
- },
176
-
177
- useLowercase: {
178
- default: true,
179
- type: Boolean
180
- },
181
-
182
- useNumbers: {
183
- default: true,
184
- type: Boolean
185
- },
186
-
187
- useSpecial: {
188
- default: true,
189
- type: Boolean
190
- },
191
-
192
- useUppercase: {
193
- default: true,
194
- type: Boolean
195
- }
196
- }
197
- };
198
-
199
- var screenMixin = {
200
- // TODO: Esses nomes precisam ser alterados para algo mais inteligente.
201
-
202
- computed: {
203
- mx_isSmall () {
204
- // until 599
205
- return this.$q.screen.xs
206
- },
207
-
208
- mx_isMedium () {
209
- // from 600 until 1023
210
- return this.$q.screen.sm
211
- },
212
-
213
- mx_isLarge () {
214
- // from 1024 until the limit
215
- return this.$q.screen.gt.sm
216
- },
217
-
218
- mx_untilMedium () {
219
- // from 0 until 599
220
- return this.$q.screen.lt.sm
221
- },
222
-
223
- mx_untilLarge () {
224
- // from 0 until 1023
225
- return this.$q.screen.lt.md
226
- },
227
-
228
- mx_isMobile () {
229
- return this.$q.platform.is.mobile
230
- }
231
- }
232
- };
233
-
234
- var viewMixin = {
235
- props: {
236
- dialog: {
237
- type: Boolean
238
- },
239
-
240
- entity: {
241
- required: true,
242
- type: String
243
- },
244
-
245
- url: {
246
- default: '',
247
- type: String
248
- },
249
-
250
- fields: {
251
- default: () => ({}),
252
- type: Object
253
- },
254
-
255
- errors: {
256
- default: () => ({}),
257
- type: Object
258
- },
259
-
260
- metadata: {
261
- default: () => ({}),
262
- type: Object
263
- },
264
-
265
- fetching: {
266
- type: Boolean
267
- }
268
- },
269
-
270
- emits: [
271
- 'update:fields',
272
- 'update:errors',
273
- 'update:metadata',
274
- 'update:fetching'
275
- ],
276
-
277
- data () {
278
- return {
279
- mx_errors: {},
280
- mx_fields: {},
281
- mx_metadata: {},
282
-
283
- mx_isFetching: false
284
- }
285
- },
286
-
287
- watch: {
288
- mx_isFetching (value) {
289
- this.$emit('update:fetching', value);
290
- }
291
- },
292
-
293
- computed: {
294
- mx_componentTag () {
295
- return this.dialog ? 'div' : 'q-page'
296
- },
297
-
298
- mx_componentClass () {
299
- return !this.dialog && 'container spaced'
300
- },
301
-
302
- mx_hasFooterSlot () {
303
- return !!(this.$slots.footer)
304
- },
305
-
306
- mx_hasHeaderSlot () {
307
- return !!(this.$slots.header)
308
- }
309
- },
310
-
311
- methods: {
312
- mx_fetchError (error) {
313
- const { response } = error;
314
- const exception = response?.data?.exception || error.message;
315
-
316
- this.$qas.error('Ops! Erro ao obter os dados.', exception);
317
-
318
- const status = response?.status;
319
- const redirect = ({ 403: 'Forbidden', 404: 'NotFound' })[status];
320
-
321
- if (redirect) {
322
- this.$router.replace({ name: redirect });
323
- }
324
- },
325
-
326
- mx_setErrors (errors = {}) {
327
- this.mx_errors = markRaw(errors);
328
- },
329
-
330
- mx_setFields (fields = {}) {
331
- for (const field in fields) {
332
- fields[field].name = camelize(fields[field].name);
333
- }
334
-
335
- this.mx_fields = markRaw(fields);
336
- },
337
-
338
- mx_setMetadata (metadata = {}) {
339
- this.mx_metadata = markRaw(metadata);
340
- },
341
-
342
- mx_updateModels (models) {
343
- for (const key in models) {
344
- this.$emit(`update:${key}`, models[key]);
345
- }
346
- }
347
- }
348
- };
349
-
350
20
  var script$L = {
351
21
  name: 'QasActions',
352
22
 
353
- mixins: [screenMixin],
354
-
355
23
  props: {
356
24
  align: {
357
25
  default: 'end',
@@ -371,7 +39,7 @@ var script$L = {
371
39
  return [
372
40
  `justify-${this.align}`,
373
41
  `q-col-gutter-${this.gutter}`,
374
- this.mx_isSmall ? 'column reverse' : 'row'
42
+ this.$qas.screen.isSmall ? 'column reverse' : 'row'
375
43
  ]
376
44
  }
377
45
  }
@@ -399,28 +67,31 @@ script$L.__file = "src/components/actions/QasActions.vue";
399
67
  var script$K = {
400
68
  name: 'QasBtn',
401
69
 
402
- mixins: [screenMixin],
403
-
404
- inheritAttrs: false,
405
-
406
70
  props: {
407
71
  hideLabelOnSmallScreen: {
408
72
  type: Boolean
73
+ },
74
+
75
+ label: {
76
+ type: String,
77
+ default: ''
409
78
  }
410
79
  },
411
80
 
412
81
  computed: {
413
82
  attributes () {
414
- const { label, ...attributes } = this.$attrs;
415
- return attributes
83
+ return {
84
+ ...(this.showLabel && { label: this.label }),
85
+ ...this.$attrs
86
+ }
416
87
  },
417
88
 
418
89
  hasLabel () {
419
- return !!(this.$attrs.label || this.$slots.default)
90
+ return !!(this.label || this.$slots.default)
420
91
  },
421
92
 
422
93
  showLabel () {
423
- return this.hasLabel && !(this.hideLabelOnSmallScreen && this.mx_isSmall)
94
+ return this.hasLabel && !(this.hideLabelOnSmallScreen && this.$qas.screen.isSmall)
424
95
  },
425
96
 
426
97
  slots () {
@@ -440,9 +111,7 @@ function render$K(_ctx, _cache, $props, $setup, $data, $options) {
440
111
  }, $options.attributes), createSlots({
441
112
  default: withCtx(() => [
442
113
  ($options.showLabel)
443
- ? renderSlot(_ctx.$slots, "default", { key: 0 }, () => [
444
- createTextVNode(toDisplayString(_ctx.$attrs.label), 1 /* TEXT */)
445
- ])
114
+ ? renderSlot(_ctx.$slots, "default", { key: 0 })
446
115
  : createCommentVNode("v-if", true)
447
116
  ]),
448
117
  _: 2 /* DYNAMIC */
@@ -540,10 +209,10 @@ function render$J(_ctx, _cache, $props, $setup, $data, $options) {
540
209
  "hide-label-on-small-screen": "",
541
210
  icon: $props.icon,
542
211
  label: $props.label,
543
- outline: ""
212
+ outline: "",
213
+ padding: "md"
544
214
  }, {
545
215
  default: withCtx(() => [
546
- createElementVNode("span", null, toDisplayString($props.label), 1 /* TEXT */),
547
216
  createVNode(_component_q_menu, { class: "qas-actions-menu__menu" }, {
548
217
  default: withCtx(() => [
549
218
  createVNode(_component_q_list, {
@@ -566,8 +235,8 @@ function render$J(_ctx, _cache, $props, $setup, $data, $options) {
566
235
  createElementVNode("div", _hoisted_1$r, [
567
236
  createVNode(_component_q_icon, {
568
237
  name: item.icon,
569
- size: item.iconSize
570
- }, null, 8 /* PROPS */, ["name", "size"]),
238
+ size: "sm"
239
+ }, null, 8 /* PROPS */, ["name"]),
571
240
  createElementVNode("div", null, toDisplayString(item.label), 1 /* TEXT */)
572
241
  ])
573
242
  ]),
@@ -589,7 +258,10 @@ function render$J(_ctx, _cache, $props, $setup, $data, $options) {
589
258
  createVNode(_component_q_item_section, null, {
590
259
  default: withCtx(() => [
591
260
  createElementVNode("div", _hoisted_2$k, [
592
- createVNode(_component_q_icon, { name: $props.deleteIcon }, null, 8 /* PROPS */, ["name"]),
261
+ createVNode(_component_q_icon, {
262
+ name: $props.deleteIcon,
263
+ size: "sm"
264
+ }, null, 8 /* PROPS */, ["name"]),
593
265
  createElementVNode("div", null, toDisplayString($props.deleteLabel), 1 /* TEXT */)
594
266
  ])
595
267
  ]),
@@ -750,11 +422,10 @@ function constructObject (name, object) {
750
422
  }
751
423
 
752
424
  /**
753
- * Function to filter specific field inside a fields
754
- * Função para filtrar propriedades espessificas dentro de um objeto
425
+ * Função para filtrar propriedades especificas dentro de um objeto
755
426
  *
756
427
  * @param {object} fields objeto com propriedades
757
- * @param {array} models array de string com nomes das proproiedades que serão filtradas
428
+ * @param {array} models array de string com nomes das propriedades que serão filtradas
758
429
  * @returns {object} objeto com propriedades filtradas
759
430
  *
760
431
  * @example
@@ -1334,7 +1005,7 @@ const _hoisted_10$1 = { class: "q-pa-lg text-center" };
1334
1005
  const _hoisted_11$1 = { class: "ellipsis q-mt-lg qs-lh-sm text-bold text-subtitle1" };
1335
1006
  const _hoisted_12$1 = { class: "ellipsis q-mt-xs text-caption" };
1336
1007
  const _hoisted_13$1 = { class: "q-mt-sm" };
1337
- const _hoisted_14 = { class: "q-mt-sm" };
1008
+ const _hoisted_14$1 = { class: "q-mt-sm" };
1338
1009
 
1339
1010
  function render$F(_ctx, _cache, $props, $setup, $data, $options) {
1340
1011
  const _component_q_ajax_bar = resolveComponent("q-ajax-bar");
@@ -1480,7 +1151,7 @@ function render$F(_ctx, _cache, $props, $setup, $data, $options) {
1480
1151
  to: $props.user.to
1481
1152
  }, null, 8 /* PROPS */, ["to"])
1482
1153
  ]),
1483
- createElementVNode("div", _hoisted_14, [
1154
+ createElementVNode("div", _hoisted_14$1, [
1484
1155
  withDirectives(createVNode(_component_qas_btn, {
1485
1156
  class: "q-px-lg q-py-xs",
1486
1157
  dense: "",
@@ -1515,8 +1186,6 @@ script$F.__file = "src/components/app-bar/QasAppBar.vue";
1515
1186
  var script$E = {
1516
1187
  name: 'QasAppMenu',
1517
1188
 
1518
- mixins: [screenMixin],
1519
-
1520
1189
  props: {
1521
1190
  items: {
1522
1191
  default: () => [],
@@ -1618,7 +1287,7 @@ var script$E = {
1618
1287
  },
1619
1288
 
1620
1289
  beforeHide () {
1621
- if (this.mx_isLarge) {
1290
+ if (this.$qas.screen.isLarge) {
1622
1291
  this.model = true;
1623
1292
  this.miniMode = !this.miniMode;
1624
1293
  }
@@ -2517,8 +2186,6 @@ var script$x = {
2517
2186
  QasActions: script$L
2518
2187
  },
2519
2188
 
2520
- mixins: [screenMixin],
2521
-
2522
2189
  props: {
2523
2190
  actionsProps: {
2524
2191
  default: () => ({}),
@@ -2601,8 +2268,8 @@ var script$x = {
2601
2268
 
2602
2269
  style () {
2603
2270
  return {
2604
- maxWidth: this.maxWidth || (this.mx_isSmall ? '' : '600px'),
2605
- minWidth: this.minWidth || (this.mx_isSmall ? '' : '400px')
2271
+ maxWidth: this.maxWidth || (this.$qas.screen.isSmall ? '' : '600px'),
2272
+ minWidth: this.minWidth || (this.$qas.screen.isSmall ? '' : '400px')
2606
2273
  }
2607
2274
  },
2608
2275
 
@@ -2623,12 +2290,12 @@ var script$x = {
2623
2290
  this.useForm && this.$emit('validate', await this.$refs.form.validate());
2624
2291
  },
2625
2292
 
2626
- // metodo para funcionar como plugin
2293
+ // método para funcionar como plugin
2627
2294
  show () {
2628
2295
  this.$refs.dialog.show();
2629
2296
  },
2630
2297
 
2631
- // metodo para funcionar como plugin
2298
+ // método para funcionar como plugin
2632
2299
  hide () {
2633
2300
  this.$refs.dialog.hide();
2634
2301
  },
@@ -2764,9 +2431,87 @@ Notify.registerType('success', {
2764
2431
  progress: true
2765
2432
  });
2766
2433
 
2767
- var NotifySuccess = (message, caption) => {
2768
- Notify?.create({ caption, message, type: 'success' });
2769
- };
2434
+ var NotifySuccess = (message, caption) => {
2435
+ Notify?.create({ caption, message, type: 'success' });
2436
+ };
2437
+
2438
+ var Screen = () => {
2439
+ const screensModel = {
2440
+ // até 599px
2441
+ isSmall: () => Screen$1.xs,
2442
+ // de 600 até 1023px
2443
+ isMedium: () => Screen$1.sm,
2444
+ // de 600 até 1023px
2445
+ isLarge: () => Screen$1.gt.sm,
2446
+ // de 0 até 599px
2447
+ untilMedium: () => Screen$1.lt.sm,
2448
+ // de 0 ate 1023px
2449
+ untilLarge: () => Screen$1.lt.md,
2450
+
2451
+ // Plataforma
2452
+ isMobile: () => Platform.is.mobile || false
2453
+ };
2454
+
2455
+ const screens = {};
2456
+
2457
+ for (const key in screensModel) {
2458
+ // infelizmente esta é a única forma que conseguimos para que nossa função se tornasse reativa na view
2459
+ // é como o próprio quasar implementa
2460
+ Object.defineProperty(screens, key, {
2461
+ get () {
2462
+ return screensModel[key]()
2463
+ },
2464
+
2465
+ enumerable: true
2466
+ });
2467
+ }
2468
+
2469
+ return screens
2470
+ };
2471
+
2472
+ const history$2 = reactive({ list: [] });
2473
+
2474
+ function useHistory () {
2475
+ const hasPreviousRoute = computed(() => history$2.list.length > 1);
2476
+
2477
+ function getPreviousRoute (currentRoute) {
2478
+ const index = findLastIndex(history$2.list, item => item.name === currentRoute.name);
2479
+
2480
+ if (~index) {
2481
+ history$2.list.splice(index, 1);
2482
+ }
2483
+
2484
+ return history$2.list[history$2.list.length - 1]
2485
+ }
2486
+
2487
+ function addRoute (route) {
2488
+ const routeExistsInList = history$2.list?.[history$2.list?.length - 1]?.name === route.name;
2489
+
2490
+ if (routeExistsInList) return
2491
+
2492
+ history$2.list.push(route);
2493
+ }
2494
+
2495
+ function destroyRoutes (routes) {
2496
+ if (!history$2.list.length) return null
2497
+
2498
+ routes.forEach(route => {
2499
+ const index = history$2.list.findIndex(item => item.name === route.name);
2500
+
2501
+ if (~index) {
2502
+ history$2.list.splice(index, 1);
2503
+ }
2504
+ });
2505
+ }
2506
+
2507
+ return {
2508
+ history: history$2,
2509
+ hasPreviousRoute,
2510
+ getPreviousRoute,
2511
+ addRoute,
2512
+ destroyRoutes
2513
+ }
2514
+ }
2770
2515
 
2771
2516
  var script$w = {
2772
2517
  name: 'QasDelete',
@@ -2804,6 +2549,11 @@ var script$w = {
2804
2549
 
2805
2550
  deleting: {
2806
2551
  type: Boolean
2552
+ },
2553
+
2554
+ useAutoDeleteRoute: {
2555
+ default: true,
2556
+ type: Boolean
2807
2557
  }
2808
2558
  },
2809
2559
 
@@ -2851,9 +2601,21 @@ var script$w = {
2851
2601
  this.$emit('update:deleting', true);
2852
2602
 
2853
2603
  try {
2604
+ const { destroyRoutes, history } = useHistory();
2605
+
2854
2606
  await this.$store.dispatch(`${this.entity}/destroy`, { id: this.id, url: this.url });
2607
+
2855
2608
  NotifySuccess('Item deletado com sucesso!');
2609
+
2610
+ if (this.useAutoDeleteRoute) {
2611
+ // remove todas rotas que possuem o id do item excluído.
2612
+ const routesToBeDeleted = this.getRoutesToBeDeletedById(history.list);
2613
+ destroyRoutes(routesToBeDeleted);
2614
+ }
2615
+
2616
+ // cria um evento para notificar que o item foi excluído no "window".
2856
2617
  this.createDeleteSuccessEvent();
2618
+
2857
2619
  this.$emit('success');
2858
2620
  } catch (error) {
2859
2621
  NotifyError('Ops! Não foi possível deletar o item.');
@@ -2864,6 +2626,10 @@ var script$w = {
2864
2626
  }
2865
2627
  },
2866
2628
 
2629
+ getRoutesToBeDeletedById (routes = []) {
2630
+ return routes.filter(({ params }) => params.id === this.id)
2631
+ },
2632
+
2867
2633
  createDeleteSuccessEvent () {
2868
2634
  const event = new CustomEvent('delete-success', {
2869
2635
  bubbles: false,
@@ -3022,7 +2788,7 @@ var script$u = {
3022
2788
  props: {
3023
2789
  modelValue: {
3024
2790
  default: '',
3025
- type: String
2791
+ type: [String, Number]
3026
2792
  },
3027
2793
 
3028
2794
  unmaskedValue: {
@@ -3033,11 +2799,31 @@ var script$u = {
3033
2799
  outlined: {
3034
2800
  default: true,
3035
2801
  type: Boolean
2802
+ },
2803
+
2804
+ removeErrorOnType: {
2805
+ type: Boolean
2806
+ },
2807
+
2808
+ error: {
2809
+ type: Boolean
2810
+ },
2811
+
2812
+ errorMessage: {
2813
+ type: String,
2814
+ default: ''
3036
2815
  }
3037
2816
  },
3038
2817
 
3039
2818
  emits: ['update:modelValue'],
3040
2819
 
2820
+ data () {
2821
+ return {
2822
+ errorData: false,
2823
+ messageErrorData: ''
2824
+ }
2825
+ },
2826
+
3041
2827
  computed: {
3042
2828
  hasError () {
3043
2829
  return this.inputReference.hasError
@@ -3070,6 +2856,11 @@ var script$u = {
3070
2856
  },
3071
2857
 
3072
2858
  set (value) {
2859
+ if (this.removeErrorOnType && this.error) {
2860
+ this.errorData = false;
2861
+ this.errorMessageData = '';
2862
+ }
2863
+
3073
2864
  return this.$emit('update:modelValue', value)
3074
2865
  }
3075
2866
  }
@@ -3082,6 +2873,22 @@ var script$u = {
3082
2873
  requestAnimationFrame(() => {
3083
2874
  input.selectionStart = input.value ? input.value.length : '';
3084
2875
  });
2876
+ },
2877
+
2878
+ error: {
2879
+ handler (value) {
2880
+ this.errorData = value;
2881
+ },
2882
+
2883
+ immediate: true
2884
+ },
2885
+
2886
+ errorMessage: {
2887
+ handler (value) {
2888
+ this.errorMessageData = value;
2889
+ },
2890
+
2891
+ immediate: true
3085
2892
  }
3086
2893
  },
3087
2894
 
@@ -3113,8 +2920,10 @@ function render$u(_ctx, _cache, $props, $setup, $data, $options) {
3113
2920
  ref: "input",
3114
2921
  modelValue: $options.model,
3115
2922
  "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.model) = $event)),
3116
- "bottom-slots": ""
2923
+ "bottom-slots": "",
2924
+ error: $data.errorData
3117
2925
  }, _ctx.$attrs, {
2926
+ "error-message": _ctx.errorMessageData,
3118
2927
  mask: $options.mask,
3119
2928
  outlined: $props.outlined,
3120
2929
  "unmasked-value": $props.unmaskedValue
@@ -3127,7 +2936,7 @@ function render$u(_ctx, _cache, $props, $setup, $data, $options) {
3127
2936
  ])
3128
2937
  }
3129
2938
  })
3130
- ]), 1040 /* FULL_PROPS, DYNAMIC_SLOTS */, ["modelValue", "mask", "outlined", "unmasked-value"])
2939
+ ]), 1040 /* FULL_PROPS, DYNAMIC_SLOTS */, ["modelValue", "error", "error-message", "mask", "outlined", "unmasked-value"])
3131
2940
  ]))
3132
2941
  }
3133
2942
 
@@ -3282,6 +3091,88 @@ function render$t(_ctx, _cache, $props, $setup, $data, $options) {
3282
3091
  script$t.render = render$t;
3283
3092
  script$t.__file = "src/components/numeric-input/QasNumericInput.vue";
3284
3093
 
3094
+ const levels = {
3095
+ 0: {
3096
+ color: 'negative',
3097
+ label: 'Muito fraco',
3098
+ progress: 0.05,
3099
+ textClass: 'text-negative'
3100
+ },
3101
+
3102
+ 1: {
3103
+ color: 'warning',
3104
+ label: 'Fraco',
3105
+ progress: 0.25,
3106
+ textClass: 'text-warning'
3107
+ },
3108
+
3109
+ 2: {
3110
+ color: 'warning',
3111
+ label: 'Bom',
3112
+ progress: 0.5,
3113
+ textClass: 'text-warning'
3114
+ },
3115
+
3116
+ 3: {
3117
+ color: 'positive',
3118
+ label: 'Forte',
3119
+ progress: 0.75,
3120
+ textClass: 'text-positive'
3121
+ },
3122
+
3123
+ 4: {
3124
+ color: 'positive',
3125
+ label: 'Muito forte',
3126
+ progress: 1,
3127
+ textClass: 'text-positive'
3128
+ }
3129
+ };
3130
+
3131
+ var passwordMixin = {
3132
+ props: {
3133
+ levels: {
3134
+ default: () => levels,
3135
+ type: Object
3136
+ },
3137
+
3138
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/minlength
3139
+ minlength: {
3140
+ default: 8,
3141
+ type: [Number, String]
3142
+ },
3143
+
3144
+ specials: {
3145
+ default: /[!@#$%^&*()_+\-=[\]{}|;:'",<.>/?`~]/g,
3146
+ type: RegExp
3147
+ },
3148
+
3149
+ trackColor: {
3150
+ default: 'blue-grey-1',
3151
+ type: String
3152
+ },
3153
+
3154
+ useLowercase: {
3155
+ default: true,
3156
+ type: Boolean
3157
+ },
3158
+
3159
+ useNumbers: {
3160
+ default: true,
3161
+ type: Boolean
3162
+ },
3163
+
3164
+ useSpecial: {
3165
+ default: true,
3166
+ type: Boolean
3167
+ },
3168
+
3169
+ useUppercase: {
3170
+ default: true,
3171
+ type: Boolean
3172
+ }
3173
+ }
3174
+ };
3175
+
3285
3176
  var script$s = {
3286
3177
  name: 'QasPasswordStrengthChecker',
3287
3178
 
@@ -3386,9 +3277,8 @@ var script$r = {
3386
3277
  mixins: [passwordMixin],
3387
3278
 
3388
3279
  props: {
3389
- useStrengthChecker: {
3390
- type: Boolean,
3391
- default: true
3280
+ hideStrengthChecker: {
3281
+ type: Boolean
3392
3282
  },
3393
3283
 
3394
3284
  iconColor: {
@@ -3406,7 +3296,6 @@ var script$r = {
3406
3296
 
3407
3297
  data () {
3408
3298
  return {
3409
- key: 'error',
3410
3299
  toggleType: true
3411
3300
  }
3412
3301
  },
@@ -3436,15 +3325,6 @@ var script$r = {
3436
3325
  }
3437
3326
  },
3438
3327
 
3439
- watch: {
3440
- modelValue () {
3441
- if (this.$attrs.error) {
3442
- this.$attrs.error = false;
3443
- this.$attrs.errorMessage = '';
3444
- }
3445
- }
3446
- },
3447
-
3448
3328
  methods: {
3449
3329
  toggle () {
3450
3330
  this.toggleType = !this.toggleType;
@@ -3457,39 +3337,43 @@ function render$r(_ctx, _cache, $props, $setup, $data, $options) {
3457
3337
  const _component_qas_password_strength_checker = resolveComponent("qas-password-strength-checker");
3458
3338
  const _component_qas_input = resolveComponent("qas-input");
3459
3339
 
3460
- return (openBlock(), createBlock(_component_qas_input, {
3461
- modelValue: $options.model,
3462
- "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.model) = $event)),
3463
- "bottom-slots": "",
3464
- type: $options.type
3465
- }, createSlots({
3466
- append: withCtx(() => [
3467
- createVNode(_component_q_icon, {
3468
- class: "cursor-pointer",
3469
- color: $props.iconColor,
3470
- name: $options.icon,
3471
- onClick: $options.toggle
3472
- }, null, 8 /* PROPS */, ["color", "name", "onClick"])
3473
- ]),
3474
- _: 2 /* DYNAMIC */
3475
- }, [
3476
- renderList(_ctx.$slots, (_, name) => {
3477
- return {
3478
- name: name,
3479
- fn: withCtx((context) => [
3480
- renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(context || {})))
3481
- ])
3482
- }
3483
- }),
3484
- ($props.useStrengthChecker)
3485
- ? {
3486
- name: "hint",
3487
- fn: withCtx(() => [
3488
- createVNode(_component_qas_password_strength_checker, mergeProps($options.strengthCheckerProps, { password: $options.model }), null, 16 /* FULL_PROPS */, ["password"])
3340
+ return (openBlock(), createElementBlock("div", null, [
3341
+ createVNode(_component_qas_input, mergeProps({
3342
+ modelValue: $options.model,
3343
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.model) = $event)),
3344
+ "bottom-slots": ""
3345
+ }, _ctx.$attrs, {
3346
+ "remove-error-on-type": "",
3347
+ type: $options.type
3348
+ }), createSlots({
3349
+ append: withCtx(() => [
3350
+ createVNode(_component_q_icon, {
3351
+ class: "cursor-pointer",
3352
+ color: $props.iconColor,
3353
+ name: $options.icon,
3354
+ onClick: $options.toggle
3355
+ }, null, 8 /* PROPS */, ["color", "name", "onClick"])
3356
+ ]),
3357
+ _: 2 /* DYNAMIC */
3358
+ }, [
3359
+ renderList(_ctx.$slots, (_, name) => {
3360
+ return {
3361
+ name: name,
3362
+ fn: withCtx((context) => [
3363
+ renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(context || {})))
3489
3364
  ])
3490
3365
  }
3491
- : undefined
3492
- ]), 1032 /* PROPS, DYNAMIC_SLOTS */, ["modelValue", "type"]))
3366
+ }),
3367
+ (!$props.hideStrengthChecker)
3368
+ ? {
3369
+ name: "hint",
3370
+ fn: withCtx(() => [
3371
+ createVNode(_component_qas_password_strength_checker, mergeProps($options.strengthCheckerProps, { password: $options.model }), null, 16 /* FULL_PROPS */, ["password"])
3372
+ ])
3373
+ }
3374
+ : undefined
3375
+ ]), 1040 /* FULL_PROPS, DYNAMIC_SLOTS */, ["modelValue", "type"])
3376
+ ]))
3493
3377
  }
3494
3378
 
3495
3379
  script$r.render = render$r;
@@ -3688,7 +3572,7 @@ var script$q = {
3688
3572
  this.isFetching = true;
3689
3573
 
3690
3574
  try {
3691
- const { data } = await api.post('/upload-credentials/', {
3575
+ const { data } = await this.$axios.post('/upload-credentials/', {
3692
3576
  entity: this.entity,
3693
3577
  filename
3694
3578
  });
@@ -4166,6 +4050,11 @@ var script$o = {
4166
4050
  },
4167
4051
 
4168
4052
  props: {
4053
+ dialogProps: {
4054
+ type: Object,
4055
+ default: () => ({})
4056
+ },
4057
+
4169
4058
  uploadLabel: {
4170
4059
  default: '',
4171
4060
  type: String
@@ -4214,6 +4103,32 @@ var script$o = {
4214
4103
 
4215
4104
  headerClass () {
4216
4105
  return `q-pa-${this.readonly ? 'md' : 'sm'}`
4106
+ },
4107
+
4108
+ defaultDialogProps () {
4109
+ return {
4110
+ maxWidth: '620px',
4111
+ ...this.dialogProps
4112
+ }
4113
+ },
4114
+
4115
+ signaturePadWidth () {
4116
+ const sizes = {
4117
+ [this.$qas.screen.isSmall]: { width: '100%' },
4118
+ [this.$qas.screen.isMedium]: { width: '570px' },
4119
+ [this.$qas.screen.isLarge]: { width: '350px' }
4120
+ };
4121
+ return sizes.true
4122
+ },
4123
+
4124
+ signaturePadHeight () {
4125
+ const sizes = {
4126
+ [this.$qas.screen.isSmall]: '250',
4127
+ [this.$qas.screen.isMedium]: '400',
4128
+ [this.$qas.screen.isLarge]: '250'
4129
+ };
4130
+
4131
+ return sizes.true
4217
4132
  }
4218
4133
  },
4219
4134
 
@@ -4313,20 +4228,24 @@ function render$o(_ctx, _cache, $props, $setup, $data, $options) {
4313
4228
  ]),
4314
4229
  _: 1 /* STABLE */
4315
4230
  }, 16 /* FULL_PROPS */, ["modelValue", "label", "readonly"]),
4316
- createVNode(_component_qas_dialog, {
4231
+ createVNode(_component_qas_dialog, mergeProps({
4317
4232
  modelValue: $data.isOpenedDialog,
4318
4233
  "onUpdate:modelValue": _cache[3] || (_cache[3] = $event => (($data.isOpenedDialog) = $event))
4319
- }, {
4234
+ }, $options.defaultDialogProps), {
4320
4235
  header: withCtx(() => [
4321
4236
  _hoisted_3$8
4322
4237
  ]),
4323
4238
  description: withCtx(() => [
4324
- createVNode(_component_qas_signature_pad, {
4325
- ref: "signaturePadModal",
4326
- empty: $data.isEmpty,
4327
- "onUpdate:empty": _cache[2] || (_cache[2] = $event => (($data.isEmpty) = $event)),
4328
- height: "250"
4329
- }, null, 8 /* PROPS */, ["empty"])
4239
+ createElementVNode("div", {
4240
+ style: normalizeStyle($options.signaturePadWidth)
4241
+ }, [
4242
+ createVNode(_component_qas_signature_pad, {
4243
+ ref: "signaturePadModal",
4244
+ empty: $data.isEmpty,
4245
+ "onUpdate:empty": _cache[2] || (_cache[2] = $event => (($data.isEmpty) = $event)),
4246
+ height: $options.signaturePadHeight
4247
+ }, null, 8 /* PROPS */, ["empty", "height"])
4248
+ ], 4 /* STYLE */)
4330
4249
  ]),
4331
4250
  actions: withCtx(() => [
4332
4251
  createVNode(_component_q_btn, {
@@ -4347,7 +4266,7 @@ function render$o(_ctx, _cache, $props, $setup, $data, $options) {
4347
4266
  }, null, 8 /* PROPS */, ["onClick"])
4348
4267
  ]),
4349
4268
  _: 1 /* STABLE */
4350
- }, 8 /* PROPS */, ["modelValue"])
4269
+ }, 16 /* FULL_PROPS */, ["modelValue"])
4351
4270
  ]))
4352
4271
  }
4353
4272
 
@@ -4411,7 +4330,6 @@ var script$n = {
4411
4330
  prefix,
4412
4331
  type,
4413
4332
  mask,
4414
- pattern,
4415
4333
  maxFiles,
4416
4334
  searchable,
4417
4335
  gmt
@@ -4462,7 +4380,7 @@ var script$n = {
4462
4380
  number: { is: 'qas-input', type: 'number', ...input },
4463
4381
  hidden: { is: 'input', name, type },
4464
4382
  email: { is: 'qas-input', type, ...input },
4465
- password: { is: 'qas-password-input', type, pattern, hideStrengthChecker: !pattern, ...input },
4383
+ password: { is: 'qas-password-input', ...input },
4466
4384
 
4467
4385
  decimal: { ...numericInput, mode: 'decimal' },
4468
4386
  money: { ...numericInput, mode: 'money' },
@@ -4564,6 +4482,15 @@ function render$n(_ctx, _cache, $props, $setup, $data, $options) {
4564
4482
  script$n.render = render$n;
4565
4483
  script$n.__file = "src/components/field/QasField.vue";
4566
4484
 
4485
+ var contextMixin = {
4486
+ computed: {
4487
+ mx_context () {
4488
+ const { limit, ordering, page, search, ...filters } = this.$route.query;
4489
+ return { filters, limit, ordering, page: page ? parseInt(page) : 1, search }
4490
+ }
4491
+ }
4492
+ };
4493
+
4567
4494
  var script$m = {
4568
4495
  name: 'QasFilters',
4569
4496
 
@@ -4607,6 +4534,10 @@ var script$m = {
4607
4534
  url: {
4608
4535
  default: '',
4609
4536
  type: String
4537
+ },
4538
+
4539
+ forceRefetch: {
4540
+ type: Boolean
4610
4541
  }
4611
4542
  },
4612
4543
 
@@ -4736,7 +4667,7 @@ var script$m = {
4736
4667
  },
4737
4668
 
4738
4669
  async fetchFilters () {
4739
- if (this.hasFields || !this.useFilterButton) {
4670
+ if (!this.forceRefetch && (this.hasFields || !this.useFilterButton)) {
4740
4671
  return null
4741
4672
  }
4742
4673
 
@@ -4902,7 +4833,7 @@ function render$m(_ctx, _cache, $props, $setup, $data, $options) {
4902
4833
  label: $options.filterButtonLabel
4903
4834
  }, {
4904
4835
  default: withCtx(() => [
4905
- createVNode(_component_q_menu, { onBeforeShow: $options.fetchFilters }, {
4836
+ createVNode(_component_q_menu, null, {
4906
4837
  default: withCtx(() => [
4907
4838
  ($data.isFetching)
4908
4839
  ? (openBlock(), createElementBlock("div", _hoisted_4$6, [
@@ -4956,7 +4887,7 @@ function render$m(_ctx, _cache, $props, $setup, $data, $options) {
4956
4887
  }))
4957
4888
  ]),
4958
4889
  _: 1 /* STABLE */
4959
- }, 8 /* PROPS */, ["onBeforeShow"])
4890
+ })
4960
4891
  ]),
4961
4892
  _: 1 /* STABLE */
4962
4893
  }, 8 /* PROPS */, ["color", "label"]))
@@ -4994,8 +4925,95 @@ function render$m(_ctx, _cache, $props, $setup, $data, $options) {
4994
4925
  ]))
4995
4926
  }
4996
4927
 
4997
- script$m.render = render$m;
4998
- script$m.__file = "src/components/filters/QasFilters.vue";
4928
+ script$m.render = render$m;
4929
+ script$m.__file = "src/components/filters/QasFilters.vue";
4930
+
4931
+ const irregularClasses = ['col', 'col-auto', 'fit'];
4932
+
4933
+ var generatorMixin = {
4934
+ props: {
4935
+ columns: {
4936
+ default: () => [],
4937
+ type: [Array, String, Object]
4938
+ },
4939
+
4940
+ fields: {
4941
+ default: () => ({}),
4942
+ type: Object
4943
+ },
4944
+
4945
+ gutter: {
4946
+ default: 'md',
4947
+ type: [String, Boolean],
4948
+ validator: value => ['xs', 'sm', 'md', 'lg', 'xl'].includes(value)
4949
+ }
4950
+ },
4951
+
4952
+ computed: {
4953
+ mx_classes () {
4954
+ const classes = ['row'];
4955
+
4956
+ if (this.gutter) {
4957
+ classes.push(`q-col-gutter-${this.gutter}`);
4958
+ }
4959
+
4960
+ return classes
4961
+ }
4962
+ },
4963
+
4964
+ methods: {
4965
+ mx_getBreakpoint (columns) {
4966
+ const classes = [];
4967
+ const profiles = { col: 'col', xs: 'col-xs', sm: 'col-sm', md: 'col-md', lg: 'col-lg', xl: 'col-xl' };
4968
+ const { fieldProps, classes: renamedClasses, ...formattedColumns } = columns || {};
4969
+
4970
+ for (const key in formattedColumns) {
4971
+ const value = formattedColumns[key];
4972
+ classes.push(irregularClasses.includes(value) ? value : `${profiles[key]}-${value}`);
4973
+ }
4974
+
4975
+ return [...classes, renamedClasses]
4976
+ },
4977
+
4978
+ mx_getFieldClass (index, isGridGenerator) {
4979
+ if (typeof this.columns === 'string') {
4980
+ return irregularClasses.includes(this.columns) ? this.columns : `col-${this.columns}`
4981
+ }
4982
+
4983
+ return Array.isArray(this.columns)
4984
+ ? this.mx_handleColumnsByIndex(index, isGridGenerator)
4985
+ : this.mx_handleColumnsByField(index, isGridGenerator)
4986
+ },
4987
+
4988
+ mx_handleColumnsByField (index, isGridGenerator) {
4989
+ if (!this.columns[index]) {
4990
+ return this.mx_setDefaultColumnClass(isGridGenerator)
4991
+ }
4992
+
4993
+ return this.mx_getBreakpoint(this.columns[index])
4994
+ },
4995
+
4996
+ mx_handleColumnsByIndex (index, isGridGenerator) {
4997
+ const fields = isGridGenerator ? this.fields : this.groupedFields.visible;
4998
+
4999
+ if (!Array.isArray(fields)) {
5000
+ index = Object.keys(fields).findIndex(field => field === index);
5001
+ }
5002
+
5003
+ const length = this.columns.length;
5004
+
5005
+ if (!length) {
5006
+ return this.mx_setDefaultColumnClass(isGridGenerator)
5007
+ }
5008
+
5009
+ return this.mx_getBreakpoint(this.columns[index])
5010
+ },
5011
+
5012
+ mx_setDefaultColumnClass (isGridGenerator) {
5013
+ return isGridGenerator ? 'col-6 col-xs-12 col-sm-4' : 'col-6'
5014
+ }
5015
+ }
5016
+ };
4999
5017
 
5000
5018
  var script$l = {
5001
5019
  name: 'QasFormGenerator',
@@ -5104,27 +5122,123 @@ function render$l(_ctx, _cache, $props, $setup, $data, $options) {
5104
5122
  script$l.render = render$l;
5105
5123
  script$l.__file = "src/components/form-generator/QasFormGenerator.vue";
5106
5124
 
5107
- const history$1 = reactive({ hasPreviousRoute: false, list: [] });
5125
+ var viewMixin = {
5126
+ props: {
5127
+ dialog: {
5128
+ type: Boolean
5129
+ },
5108
5130
 
5109
- function getPreviousRoute (currentRoute) {
5110
- const index = findLastIndex(history$1.list, item => item.name === currentRoute.name);
5131
+ entity: {
5132
+ required: true,
5133
+ type: String
5134
+ },
5111
5135
 
5112
- if (~index) {
5113
- history$1.list.splice(index, 1);
5114
- }
5136
+ url: {
5137
+ default: '',
5138
+ type: String
5139
+ },
5115
5140
 
5116
- history$1.hasPreviousRoute = history$1.list.length > 1;
5117
- return history$1.list[history$1.list.length - 1]
5118
- }
5141
+ fields: {
5142
+ default: () => ({}),
5143
+ type: Object
5144
+ },
5119
5145
 
5120
- function addRoute (route) {
5121
- const routeExistsInList = history$1.list?.[history$1.list?.length - 1]?.name === route.name;
5146
+ errors: {
5147
+ default: () => ({}),
5148
+ type: Object
5149
+ },
5122
5150
 
5123
- if (routeExistsInList) return
5151
+ metadata: {
5152
+ default: () => ({}),
5153
+ type: Object
5154
+ },
5124
5155
 
5125
- history$1.list.push(route);
5126
- history$1.hasPreviousRoute = history$1.list.length > 1;
5127
- }
5156
+ fetching: {
5157
+ type: Boolean
5158
+ }
5159
+ },
5160
+
5161
+ emits: [
5162
+ 'update:fields',
5163
+ 'update:errors',
5164
+ 'update:metadata',
5165
+ 'update:fetching'
5166
+ ],
5167
+
5168
+ data () {
5169
+ return {
5170
+ mx_errors: {},
5171
+ mx_fields: {},
5172
+ mx_metadata: {},
5173
+
5174
+ mx_isFetching: false
5175
+ }
5176
+ },
5177
+
5178
+ watch: {
5179
+ mx_isFetching (value) {
5180
+ this.$emit('update:fetching', value);
5181
+ }
5182
+ },
5183
+
5184
+ computed: {
5185
+ mx_componentTag () {
5186
+ return this.dialog ? 'div' : 'q-page'
5187
+ },
5188
+
5189
+ mx_componentClass () {
5190
+ return !this.dialog && 'container spaced'
5191
+ },
5192
+
5193
+ mx_hasFooterSlot () {
5194
+ return !!(this.$slots.footer)
5195
+ },
5196
+
5197
+ mx_hasHeaderSlot () {
5198
+ return !!(this.$slots.header)
5199
+ }
5200
+ },
5201
+
5202
+ methods: {
5203
+ mx_fetchError (error) {
5204
+ const { response } = error;
5205
+ const exception = response?.data?.exception || error.message;
5206
+
5207
+ this.$qas.error('Ops! Erro ao obter os dados.', exception);
5208
+
5209
+ const status = response?.status;
5210
+ const redirect = ({ 403: 'Forbidden', 404: 'NotFound' })[status];
5211
+
5212
+ if (redirect) {
5213
+ this.$router.replace({ name: redirect });
5214
+ }
5215
+ },
5216
+
5217
+ mx_setErrors (errors = {}) {
5218
+ this.mx_errors = markRaw(errors);
5219
+ },
5220
+
5221
+ mx_setFields (fields = {}) {
5222
+ for (const field in fields) {
5223
+ fields[field].name = camelize(fields[field].name);
5224
+ }
5225
+
5226
+ this.mx_fields = markRaw(fields);
5227
+ },
5228
+
5229
+ mx_setMetadata (metadata = {}) {
5230
+ this.mx_metadata = markRaw(metadata);
5231
+ },
5232
+
5233
+ mx_updateModels (models) {
5234
+ for (const key in models) {
5235
+ if (!models[key]) continue
5236
+
5237
+ this.$emit(`update:${key}`, models[key]);
5238
+ }
5239
+ }
5240
+ }
5241
+ };
5128
5242
 
5129
5243
  var script$k = {
5130
5244
  name: 'QasFormView',
@@ -5134,7 +5248,7 @@ var script$k = {
5134
5248
  QasDialog: script$x
5135
5249
  },
5136
5250
 
5137
- mixins: [viewMixin, screenMixin],
5251
+ mixins: [viewMixin],
5138
5252
 
5139
5253
  props: {
5140
5254
  cancelButton: {
@@ -5144,7 +5258,7 @@ var script$k = {
5144
5258
 
5145
5259
  cancelRoute: {
5146
5260
  default: '',
5147
- type: [Boolean, Object, String]
5261
+ type: [Boolean, Object, String, Function]
5148
5262
  },
5149
5263
 
5150
5264
  customId: {
@@ -5228,7 +5342,7 @@ var script$k = {
5228
5342
 
5229
5343
  computed: {
5230
5344
  cancelButtonClass () {
5231
- return this.mx_isSmall && 'order-last'
5345
+ return this.$qas.screen.isSmall && 'order-last'
5232
5346
  },
5233
5347
 
5234
5348
  fetchURL () {
@@ -5256,17 +5370,13 @@ var script$k = {
5256
5370
  },
5257
5371
 
5258
5372
  saveButtonClass () {
5259
- return this.mx_isSmall && 'order-first'
5373
+ return this.$qas.screen.isSmall && 'order-first'
5260
5374
  },
5261
5375
 
5262
5376
  isCancelButtonDisabled () {
5263
5377
  return this.disable || this.isSubmitting
5264
5378
  },
5265
5379
 
5266
- history () {
5267
- return history$1.list
5268
- },
5269
-
5270
5380
  fieldsNameWithDefaultValue () {
5271
5381
  return Object.keys(this.fields).filter(field => 'default' in this.fields[field])
5272
5382
  }
@@ -5335,7 +5445,7 @@ var script$k = {
5335
5445
  this.mx_updateModels({
5336
5446
  errors: errors,
5337
5447
  fields: this.mx_fields,
5338
- metadata: metadata
5448
+ metadata
5339
5449
  });
5340
5450
 
5341
5451
  if (result) {
@@ -5364,9 +5474,11 @@ var script$k = {
5364
5474
  },
5365
5475
 
5366
5476
  handleCancelRoute () {
5367
- const acceptTypes = ['string', 'object'];
5477
+ if (typeof this.cancelRoute === 'function') {
5478
+ return this.cancelRoute()
5479
+ }
5368
5480
 
5369
- if (this.cancelRoute && acceptTypes.includes(typeof this.cancelRoute)) {
5481
+ if (this.cancelRoute && ['string', 'object'].includes(typeof this.cancelRoute)) {
5370
5482
  return this.$router.push(this.cancelRoute)
5371
5483
  }
5372
5484
 
@@ -5379,6 +5491,8 @@ var script$k = {
5379
5491
  handleDialog (next) {
5380
5492
  this.openDialog();
5381
5493
 
5494
+ const { addRoute } = useHistory();
5495
+
5382
5496
  this.defaultDialogProps.ok.onClick = () => addRoute(this.$route);
5383
5497
  this.defaultDialogProps.cancel.onClick = next;
5384
5498
  },
@@ -5461,7 +5575,9 @@ function render$k(_ctx, _cache, $props, $setup, $data, $options) {
5461
5575
  const _component_q_inner_loading = resolveComponent("q-inner-loading");
5462
5576
  const _directive_close_popup = resolveDirective("close-popup");
5463
5577
 
5464
- return (openBlock(), createBlock(resolveDynamicComponent(_ctx.mx_componentTag), null, {
5578
+ return (openBlock(), createBlock(resolveDynamicComponent(_ctx.mx_componentTag), {
5579
+ class: normalizeClass(_ctx.mx_componentClass)
5580
+ }, {
5465
5581
  default: withCtx(() => [
5466
5582
  (_ctx.mx_hasHeaderSlot)
5467
5583
  ? (openBlock(), createElementBlock("header", _hoisted_1$d, [
@@ -5533,7 +5649,7 @@ function render$k(_ctx, _cache, $props, $setup, $data, $options) {
5533
5649
  }, 8 /* PROPS */, ["showing"])
5534
5650
  ]),
5535
5651
  _: 3 /* FORWARDED */
5536
- }))
5652
+ }, 8 /* PROPS */, ["class"]))
5537
5653
  }
5538
5654
 
5539
5655
  script$k.render = render$k;
@@ -5542,8 +5658,6 @@ script$k.__file = "src/components/form-view/QasFormView.vue";
5542
5658
  var script$j = {
5543
5659
  name: 'QasGallery',
5544
5660
 
5545
- mixins: [screenMixin],
5546
-
5547
5661
  props: {
5548
5662
  carouselNextIcon: {
5549
5663
  type: String,
@@ -5600,13 +5714,13 @@ var script$j = {
5600
5714
  return this.height || 'auto'
5601
5715
  }
5602
5716
 
5603
- return this.mx_isSmall ? '90px' : '120px'
5717
+ return this.$qas.screen.isSmall ? '90px' : '120px'
5604
5718
  },
5605
5719
 
5606
5720
  galleryColumnsClasses () {
5607
5721
  if (this.isSingleImage) return 'col-12'
5608
5722
 
5609
- return this.mx_isSmall ? 'col-6' : 'col-2'
5723
+ return this.$qas.screen.isSmall ? 'col-6' : 'col-2'
5610
5724
  },
5611
5725
 
5612
5726
  hideShowMore () {
@@ -5741,9 +5855,9 @@ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
5741
5855
  modelValue: $data.imageIndex,
5742
5856
  "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($data.imageIndex) = $event)),
5743
5857
  animated: "",
5744
- arrows: !_ctx.mx_isSmall,
5858
+ arrows: !_ctx.$qas.screen.isSmall,
5745
5859
  "control-text-color": "primary",
5746
- fullscreen: _ctx.mx_isSmall,
5860
+ fullscreen: _ctx.$qas.screen.isSmall,
5747
5861
  height: $options.carouselImageHeight,
5748
5862
  "next-icon": $props.carouselNextIcon,
5749
5863
  "prev-icon": $props.carouselPreviousIcon,
@@ -5759,7 +5873,7 @@ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
5759
5873
  name: index
5760
5874
  }, {
5761
5875
  default: withCtx(() => [
5762
- (_ctx.mx_isSmall)
5876
+ (_ctx.$qas.screen.isSmall)
5763
5877
  ? (openBlock(), createElementBlock("div", _hoisted_4$5, [
5764
5878
  createVNode(_component_qas_btn, {
5765
5879
  dense: "",
@@ -6523,7 +6637,10 @@ var script$c = {
6523
6637
  QasBtn: script$K,
6524
6638
  QasFormGenerator: script$l,
6525
6639
  QasInput: script$u,
6526
- QasLabel: script$h
6640
+ QasLabel: script$h,
6641
+
6642
+ // vue
6643
+ TransitionGroup
6527
6644
  },
6528
6645
 
6529
6646
  props: {
@@ -6687,6 +6804,16 @@ var script$c = {
6687
6804
 
6688
6805
  componentTag () {
6689
6806
  return this.useAnimation ? 'transition-group' : 'div'
6807
+ },
6808
+
6809
+ componentProps () {
6810
+ if (!this.useAnimation) return {}
6811
+
6812
+ return {
6813
+ tag: 'div',
6814
+ enterActiveClass: 'animated slideInDown',
6815
+ leaveActiveClass: 'animated slideOutUp'
6816
+ }
6690
6817
  }
6691
6818
  },
6692
6819
 
@@ -6771,23 +6898,24 @@ var script$c = {
6771
6898
 
6772
6899
  const _hoisted_1$8 = ["id"];
6773
6900
  const _hoisted_2$5 = { class: "text-left" };
6774
- const _hoisted_3$3 = ["id"];
6775
- const _hoisted_4$3 = { class: "flex items-center justify-between q-py-xs" };
6776
- const _hoisted_5$2 = {
6901
+ const _hoisted_3$3 = { ref: "inputContent" };
6902
+ const _hoisted_4$3 = ["id"];
6903
+ const _hoisted_5$2 = { class: "flex items-center justify-between q-py-xs" };
6904
+ const _hoisted_6 = {
6777
6905
  key: 1,
6778
6906
  class: "q-gutter-x-sm"
6779
6907
  };
6780
- const _hoisted_6 = {
6908
+ const _hoisted_7 = {
6781
6909
  key: 0,
6782
6910
  class: "flex items-center qas-nested-fields__actions"
6783
6911
  };
6784
- const _hoisted_7 = { class: "col-auto" };
6785
6912
  const _hoisted_8 = { class: "col-auto" };
6786
- const _hoisted_9 = { class: "col-12" };
6787
- const _hoisted_10 = { class: "q-mt-md" };
6788
- const _hoisted_11 = { class: "col" };
6789
- const _hoisted_12 = { class: "col-auto" };
6790
- const _hoisted_13 = {
6913
+ const _hoisted_9 = { class: "col-auto" };
6914
+ const _hoisted_10 = { class: "col-12" };
6915
+ const _hoisted_11 = { class: "q-mt-md" };
6916
+ const _hoisted_12 = { class: "col" };
6917
+ const _hoisted_13 = { class: "col-auto" };
6918
+ const _hoisted_14 = {
6791
6919
  key: 1,
6792
6920
  class: "q-mt-lg"
6793
6921
  };
@@ -6810,134 +6938,122 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
6810
6938
  }, null, 8 /* PROPS */, ["label"]))
6811
6939
  : createCommentVNode("v-if", true)
6812
6940
  ]),
6813
- createElementVNode("div", null, [
6814
- (openBlock(), createBlock(resolveDynamicComponent($options.componentTag), {
6815
- ref: "inputContent",
6816
- name: "fade",
6817
- tag: "div"
6818
- }, {
6941
+ createElementVNode("div", _hoisted_3$3, [
6942
+ (openBlock(), createBlock(resolveDynamicComponent($options.componentTag), normalizeProps(guardReactiveProps($options.componentProps)), {
6819
6943
  default: withCtx(() => [
6820
6944
  (openBlock(true), createElementBlock(Fragment, null, renderList($data.nested, (row, index) => {
6821
6945
  return (openBlock(), createElementBlock("div", {
6822
6946
  id: `row-${index}`,
6823
- key: index,
6947
+ key: `row-${index}`,
6824
6948
  class: "full-width"
6825
6949
  }, [
6826
- (openBlock(), createBlock(resolveDynamicComponent($options.componentTag), {
6827
- name: "fade",
6828
- tag: "div"
6829
- }, {
6830
- default: withCtx(() => [
6831
- (!row[$props.destroyKey])
6832
- ? (openBlock(), createElementBlock("div", {
6833
- key: index,
6834
- class: "col-12 q-mt-md"
6950
+ (!row[$props.destroyKey])
6951
+ ? (openBlock(), createElementBlock("div", {
6952
+ key: index,
6953
+ class: "col-12 q-mt-md"
6954
+ }, [
6955
+ createElementVNode("div", null, [
6956
+ createElementVNode("div", _hoisted_5$2, [
6957
+ (!$props.useSingleLabel)
6958
+ ? (openBlock(), createBlock(_component_qas_label, {
6959
+ key: 0,
6960
+ label: $options.setRowLabel(index)
6961
+ }, null, 8 /* PROPS */, ["label"]))
6962
+ : createCommentVNode("v-if", true),
6963
+ (!$props.useInlineActions)
6964
+ ? (openBlock(), createElementBlock("div", _hoisted_6, [
6965
+ ($props.useDuplicate)
6966
+ ? (openBlock(), createBlock(_component_qas_btn, mergeProps({ key: 0 }, $props.btnDuplicateProps, {
6967
+ onClick: $event => ($options.add(row))
6968
+ }), null, 16 /* FULL_PROPS */, ["onClick"]))
6969
+ : createCommentVNode("v-if", true),
6970
+ ($options.showDestroyBtn)
6971
+ ? (openBlock(), createBlock(_component_qas_btn, mergeProps({ key: 1 }, $props.btnDestroyProps, {
6972
+ onClick: $event => ($options.destroy(index, row))
6973
+ }), null, 16 /* FULL_PROPS */, ["onClick"]))
6974
+ : createCommentVNode("v-if", true)
6975
+ ]))
6976
+ : createCommentVNode("v-if", true)
6977
+ ]),
6978
+ createElementVNode("div", {
6979
+ ref_for: true,
6980
+ ref: "formGenerator",
6981
+ class: "col-12 justify-between q-col-gutter-x-md row"
6835
6982
  }, [
6836
- createElementVNode("div", null, [
6837
- createElementVNode("div", _hoisted_4$3, [
6838
- (!$props.useSingleLabel)
6839
- ? (openBlock(), createBlock(_component_qas_label, {
6840
- key: 0,
6841
- label: $options.setRowLabel(index)
6842
- }, null, 8 /* PROPS */, ["label"]))
6843
- : createCommentVNode("v-if", true),
6844
- (!$props.useInlineActions)
6845
- ? (openBlock(), createElementBlock("div", _hoisted_5$2, [
6846
- ($props.useDuplicate)
6847
- ? (openBlock(), createBlock(_component_qas_btn, mergeProps({ key: 0 }, $props.btnDuplicateProps, {
6848
- onClick: $event => ($options.add(row))
6849
- }), null, 16 /* FULL_PROPS */, ["onClick"]))
6850
- : createCommentVNode("v-if", true),
6851
- ($options.showDestroyBtn)
6852
- ? (openBlock(), createBlock(_component_qas_btn, mergeProps({ key: 1 }, $props.btnDestroyProps, {
6853
- onClick: $event => ($options.destroy(index, row))
6854
- }), null, 16 /* FULL_PROPS */, ["onClick"]))
6855
- : createCommentVNode("v-if", true)
6856
- ]))
6857
- : createCommentVNode("v-if", true)
6858
- ]),
6859
- createElementVNode("div", {
6860
- ref_for: true,
6861
- ref: "formGenerator",
6862
- class: "col-12 justify-between q-col-gutter-x-md row"
6863
- }, [
6864
- renderSlot(_ctx.$slots, "fields", {
6865
- errors: $options.transformedErrors,
6866
- fields: $options.children,
6867
- index: index,
6868
- updateValue: $options.updateValuesFromInput
6869
- }, () => [
6870
- createVNode(_component_qas_form_generator, {
6871
- modelValue: $data.nested[index],
6872
- "onUpdate:modelValue": [$event => (($data.nested[index]) = $event), $event => ($options.updateValuesFromInput($event, index))],
6873
- class: normalizeClass($options.formClasses),
6874
- columns: $props.formColumns,
6875
- errors: $options.transformedErrors[index],
6876
- fields: $options.children,
6877
- "fields-props": $props.fieldsProps
6878
- }, createSlots({ _: 2 /* DYNAMIC */ }, [
6879
- renderList(_ctx.$slots, (slot, key) => {
6880
- return {
6881
- name: key,
6882
- fn: withCtx((scope) => [
6883
- renderSlot(_ctx.$slots, key, mergeProps(scope, {
6884
- errors: $options.transformedErrors,
6885
- index: index
6886
- }))
6887
- ])
6888
- }
6889
- })
6890
- ]), 1032 /* PROPS, DYNAMIC_SLOTS */, ["modelValue", "onUpdate:modelValue", "class", "columns", "errors", "fields", "fields-props"])
6891
- ]),
6892
- ($props.useInlineActions)
6893
- ? (openBlock(), createElementBlock("div", _hoisted_6, [
6894
- createElementVNode("div", _hoisted_7, [
6895
- ($props.useDuplicate)
6896
- ? (openBlock(), createBlock(_component_qas_btn, {
6897
- key: 0,
6898
- color: "primary",
6899
- flat: "",
6900
- icon: "o_content_copy",
6901
- round: "",
6902
- onClick: $event => ($options.add(row))
6903
- }, null, 8 /* PROPS */, ["onClick"]))
6904
- : createCommentVNode("v-if", true)
6905
- ]),
6906
- createElementVNode("div", _hoisted_8, [
6907
- ($options.showDestroyBtn)
6908
- ? (openBlock(), createBlock(_component_qas_btn, {
6909
- key: 0,
6910
- color: "negative",
6911
- flat: "",
6912
- icon: "o_cancel",
6913
- round: "",
6914
- onClick: $event => ($options.destroy(index, row))
6915
- }, null, 8 /* PROPS */, ["onClick"]))
6916
- : createCommentVNode("v-if", true)
6917
- ])
6918
- ]))
6919
- : createCommentVNode("v-if", true)
6920
- ], 512 /* NEED_PATCH */),
6921
- createElementVNode("div", _hoisted_9, [
6922
- renderSlot(_ctx.$slots, "custom-fields", {
6923
- fields: $options.children,
6924
- index: index,
6925
- model: $data.nested[index],
6926
- updateValue: $options.updateValuesFromInput
6983
+ renderSlot(_ctx.$slots, "fields", {
6984
+ errors: $options.transformedErrors,
6985
+ fields: $options.children,
6986
+ index: index,
6987
+ updateValue: $options.updateValuesFromInput
6988
+ }, () => [
6989
+ createVNode(_component_qas_form_generator, {
6990
+ modelValue: $data.nested[index],
6991
+ "onUpdate:modelValue": [$event => (($data.nested[index]) = $event), $event => ($options.updateValuesFromInput($event, index))],
6992
+ class: normalizeClass($options.formClasses),
6993
+ columns: $props.formColumns,
6994
+ errors: $options.transformedErrors[index],
6995
+ fields: $options.children,
6996
+ "fields-props": $props.fieldsProps
6997
+ }, createSlots({ _: 2 /* DYNAMIC */ }, [
6998
+ renderList(_ctx.$slots, (slot, key) => {
6999
+ return {
7000
+ name: key,
7001
+ fn: withCtx((scope) => [
7002
+ renderSlot(_ctx.$slots, key, mergeProps(scope, {
7003
+ errors: $options.transformedErrors,
7004
+ index: index
7005
+ }))
7006
+ ])
7007
+ }
6927
7008
  })
6928
- ])
6929
- ])
6930
- ]))
6931
- : createCommentVNode("v-if", true)
6932
- ]),
6933
- _: 2 /* DYNAMIC */
6934
- }, 1024 /* DYNAMIC_SLOTS */))
6935
- ], 8 /* PROPS */, _hoisted_3$3))
7009
+ ]), 1032 /* PROPS, DYNAMIC_SLOTS */, ["modelValue", "onUpdate:modelValue", "class", "columns", "errors", "fields", "fields-props"])
7010
+ ]),
7011
+ ($props.useInlineActions)
7012
+ ? (openBlock(), createElementBlock("div", _hoisted_7, [
7013
+ createElementVNode("div", _hoisted_8, [
7014
+ ($props.useDuplicate)
7015
+ ? (openBlock(), createBlock(_component_qas_btn, {
7016
+ key: 0,
7017
+ color: "primary",
7018
+ flat: "",
7019
+ icon: "o_content_copy",
7020
+ round: "",
7021
+ onClick: $event => ($options.add(row))
7022
+ }, null, 8 /* PROPS */, ["onClick"]))
7023
+ : createCommentVNode("v-if", true)
7024
+ ]),
7025
+ createElementVNode("div", _hoisted_9, [
7026
+ ($options.showDestroyBtn)
7027
+ ? (openBlock(), createBlock(_component_qas_btn, {
7028
+ key: 0,
7029
+ color: "negative",
7030
+ flat: "",
7031
+ icon: "o_cancel",
7032
+ round: "",
7033
+ onClick: $event => ($options.destroy(index, row))
7034
+ }, null, 8 /* PROPS */, ["onClick"]))
7035
+ : createCommentVNode("v-if", true)
7036
+ ])
7037
+ ]))
7038
+ : createCommentVNode("v-if", true)
7039
+ ], 512 /* NEED_PATCH */),
7040
+ createElementVNode("div", _hoisted_10, [
7041
+ renderSlot(_ctx.$slots, "custom-fields", {
7042
+ fields: $options.children,
7043
+ index: index,
7044
+ model: $data.nested[index],
7045
+ updateValue: $options.updateValuesFromInput
7046
+ })
7047
+ ])
7048
+ ])
7049
+ ]))
7050
+ : createCommentVNode("v-if", true)
7051
+ ], 8 /* PROPS */, _hoisted_4$3))
6936
7052
  }), 128 /* KEYED_FRAGMENT */))
6937
7053
  ]),
6938
7054
  _: 3 /* FORWARDED */
6939
- }, 512 /* NEED_PATCH */)),
6940
- createElementVNode("div", _hoisted_10, [
7055
+ }, 16 /* FULL_PROPS */)),
7056
+ createElementVNode("div", _hoisted_11, [
6941
7057
  renderSlot(_ctx.$slots, "add-input", { add: $options.add }, () => [
6942
7058
  ($props.useInlineActions)
6943
7059
  ? (openBlock(), createElementBlock("div", {
@@ -6945,7 +7061,7 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
6945
7061
  class: "cursor-pointer items-center q-col-gutter-x-md q-mt-md row",
6946
7062
  onClick: _cache[1] || (_cache[1] = $event => ($options.add()))
6947
7063
  }, [
6948
- createElementVNode("div", _hoisted_11, [
7064
+ createElementVNode("div", _hoisted_12, [
6949
7065
  createVNode(_component_qas_input, {
6950
7066
  class: "disabled no-pointer-events",
6951
7067
  "hide-bottom-space": "",
@@ -6954,7 +7070,7 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
6954
7070
  onFocus: _cache[0] || (_cache[0] = $event => ($options.add()))
6955
7071
  }, null, 8 /* PROPS */, ["label"])
6956
7072
  ]),
6957
- createElementVNode("div", _hoisted_12, [
7073
+ createElementVNode("div", _hoisted_13, [
6958
7074
  createVNode(_component_qas_btn, {
6959
7075
  color: "green",
6960
7076
  flat: "",
@@ -6963,9 +7079,9 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
6963
7079
  })
6964
7080
  ])
6965
7081
  ]))
6966
- : (openBlock(), createElementBlock("div", _hoisted_13, [
7082
+ : (openBlock(), createElementBlock("div", _hoisted_14, [
6967
7083
  createVNode(_component_qas_btn, {
6968
- class: "full-width q-py-sm",
7084
+ class: "full-width q-py-md",
6969
7085
  icon: "o_add",
6970
7086
  outline: "",
6971
7087
  onClick: _cache[2] || (_cache[2] = $event => ($options.add()))
@@ -6978,13 +7094,15 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
6978
7094
  ]))
6979
7095
  ])
6980
7096
  ])
6981
- ])
7097
+ ], 512 /* NEED_PATCH */)
6982
7098
  ], 8 /* PROPS */, _hoisted_1$8))
6983
7099
  }
6984
7100
 
6985
7101
  script$c.render = render$c;
6986
7102
  script$c.__file = "src/components/nested-fields/QasNestedFields.vue";
6987
7103
 
7104
+ const { hasPreviousRoute, history: history$1, getPreviousRoute } = useHistory();
7105
+
6988
7106
  var script$b = {
6989
7107
  name: 'QasPageHeader',
6990
7108
 
@@ -7012,7 +7130,7 @@ var script$b = {
7012
7130
 
7013
7131
  computed: {
7014
7132
  hasPreviousRoute () {
7015
- return history$1.hasPreviousRoute
7133
+ return hasPreviousRoute.value
7016
7134
  },
7017
7135
 
7018
7136
  transformedBreadcrumbs () {
@@ -7129,8 +7247,6 @@ var script$a = {
7129
7247
  QasGridGenerator: script$i
7130
7248
  },
7131
7249
 
7132
- mixins: [screenMixin],
7133
-
7134
7250
  props: {
7135
7251
  columns: {
7136
7252
  type: Object,
@@ -7171,7 +7287,7 @@ var script$a = {
7171
7287
 
7172
7288
  computed: {
7173
7289
  directionClasses () {
7174
- return this.mx_untilMedium ? 'col' : 'row items-center'
7290
+ return this.$qas.screen.untilMedium ? 'col' : 'row items-center'
7175
7291
  },
7176
7292
 
7177
7293
  userAvatarImage () {
@@ -7179,7 +7295,7 @@ var script$a = {
7179
7295
  },
7180
7296
 
7181
7297
  avatarSize () {
7182
- return this.mx_isSmall ? '145px' : '188px'
7298
+ return this.$qas.screen.isSmall ? '145px' : '188px'
7183
7299
  }
7184
7300
  },
7185
7301
 
@@ -7447,6 +7563,7 @@ var script$8 = {
7447
7563
  this.fuse = new Fuse(value, this.defaultFuseOptions);
7448
7564
 
7449
7565
  this.setResults(this.search);
7566
+ this.updateResultsModel(value);
7450
7567
  },
7451
7568
 
7452
7569
  deep: true
@@ -7463,7 +7580,7 @@ var script$8 = {
7463
7580
 
7464
7581
  searchResults: {
7465
7582
  handler (value) {
7466
- this.$emit('update:results', value.map(result => result.item || result));
7583
+ this.updateResultsModel(value);
7467
7584
  },
7468
7585
  immediate: true
7469
7586
  }
@@ -7480,6 +7597,10 @@ var script$8 = {
7480
7597
  this.searchResults = value
7481
7598
  ? this.fuse.search(value)
7482
7599
  : this.list;
7600
+ },
7601
+
7602
+ updateResultsModel (value) {
7603
+ this.$emit('update:results', value.map(result => result.item || result));
7483
7604
  }
7484
7605
  }
7485
7606
  };
@@ -7755,8 +7876,6 @@ var script$6 = {
7755
7876
  QasSearchBox: script$8
7756
7877
  },
7757
7878
 
7758
- mixins: [screenMixin],
7759
-
7760
7879
  props: {
7761
7880
  deleteOnly: {
7762
7881
  type: Boolean
@@ -7837,15 +7956,17 @@ var script$6 = {
7837
7956
  immediate: true
7838
7957
  },
7839
7958
 
7840
- modelValue (value) {
7841
- this.values = [...value];
7959
+ modelValue: {
7960
+ handler (value) {
7961
+ this.values = [...value];
7962
+ },
7963
+
7964
+ immediate: true
7842
7965
  }
7843
7966
  },
7844
7967
 
7845
7968
  created () {
7846
- this.values = [...this.modelValue];
7847
-
7848
- this.handleOptions();
7969
+ this.handleList();
7849
7970
  },
7850
7971
 
7851
7972
  methods: {
@@ -7860,9 +7981,9 @@ var script$6 = {
7860
7981
  const isSelected = this.values.includes(value);
7861
7982
 
7862
7983
  return {
7863
- dense: this.mx_isSmall,
7984
+ dense: this.$qas.screen.isSmall,
7864
7985
  hideLabelOnSmallScreen: true,
7865
- icon: !this.mx_isSmall ? undefined : isSelected ? 'o_close' : 'o_add',
7986
+ icon: !this.$qas.screen.isSmall ? undefined : isSelected ? 'o_close' : 'o_add',
7866
7987
  label: isSelected ? 'Remover' : 'Adicionar',
7867
7988
  outline: isSelected,
7868
7989
  size: 'sm'
@@ -7873,7 +7994,7 @@ var script$6 = {
7873
7994
  return this.values.includes(item.value) ? this.remove(item) : this.add(item)
7874
7995
  },
7875
7996
 
7876
- handleOptions () {
7997
+ handleList () {
7877
7998
  if (this.modelValue.length) {
7878
7999
  return this.sortList()
7879
8000
  }
@@ -7904,8 +8025,8 @@ var script$6 = {
7904
8025
 
7905
8026
  sortList () {
7906
8027
  this.sortedList = this.deleteOnly
7907
- ? this.list.filter(option => this.modelValue.includes(option.value))
7908
- : sortBy(this.list, option => !this.modelValue.includes(option.value));
8028
+ ? this.list.filter(item => this.modelValue.includes(item.value))
8029
+ : sortBy(this.list, item => !this.modelValue.includes(item.value));
7909
8030
  },
7910
8031
 
7911
8032
  updateModel (model) {
@@ -8263,8 +8384,6 @@ script$4.__file = "src/components/sortable/QasSortable.vue";
8263
8384
  var script$3 = {
8264
8385
  name: 'QasTableGenerator',
8265
8386
 
8266
- mixins: [screenMixin],
8267
-
8268
8387
  props: {
8269
8388
  columns: {
8270
8389
  default: () => [],
@@ -8391,7 +8510,7 @@ var script$3 = {
8391
8510
  },
8392
8511
 
8393
8512
  tableClass () {
8394
- return this.mx_isSmall && 'qas-table-generator--mobile'
8513
+ return this.$qas.screen.isSmall && 'qas-table-generator--mobile'
8395
8514
  },
8396
8515
 
8397
8516
  hasScrollOnGrab () {
@@ -8432,8 +8551,8 @@ var script$3 = {
8432
8551
  },
8433
8552
 
8434
8553
  getFullTableWidth () {
8435
- const tableElemet = this.getTableElement();
8436
- return tableElemet?.getBoundingClientRect?.()?.width
8554
+ const tableElement = this.getTableElement();
8555
+ return tableElement?.getBoundingClientRect?.()?.width
8437
8556
  },
8438
8557
 
8439
8558
  getContainerTableWidth () {
@@ -8632,8 +8751,6 @@ var script$1 = {
8632
8751
  QasDialog: script$x
8633
8752
  },
8634
8753
 
8635
- mixins: [screenMixin],
8636
-
8637
8754
  props: {
8638
8755
  dialogProps: {
8639
8756
  type: Object,
@@ -8673,7 +8790,7 @@ var script$1 = {
8673
8790
 
8674
8791
  computed: {
8675
8792
  truncateTextClass () {
8676
- return (this.isTruncated || this.mx_isSmall) && 'ellipsis q-pr-sm'
8793
+ return (this.isTruncated || this.$qas.screen.isSmall) && 'ellipsis q-pr-sm'
8677
8794
  },
8678
8795
 
8679
8796
  isTruncated () {
@@ -8775,8 +8892,6 @@ var script = {
8775
8892
  QasSearchBox: script$8
8776
8893
  },
8777
8894
 
8778
- mixins: [screenMixin],
8779
-
8780
8895
  props: {
8781
8896
  emitValue: {
8782
8897
  type: Boolean
@@ -8826,21 +8941,23 @@ var script = {
8826
8941
  firstQueue: [],
8827
8942
  optionsList: [],
8828
8943
  secondQueue: [],
8829
- selectedList: []
8944
+ selectedList: [],
8945
+ firstResults: [],
8946
+ secondResults: []
8830
8947
  }
8831
8948
  },
8832
8949
 
8833
8950
  computed: {
8834
8951
  actionsClass () {
8835
- return !this.mx_isSmall && 'column'
8952
+ return !this.$qas.screen.isSmall && 'column'
8836
8953
  },
8837
8954
 
8838
8955
  gutterClass () {
8839
- return `q-col-gutter-${this.mx_untilLarge ? 'md' : 'xl'}`
8956
+ return `q-col-gutter-${this.$qas.screen.untilLarge ? 'md' : 'xl'}`
8840
8957
  },
8841
8958
 
8842
8959
  iconClass () {
8843
- return !this.mx_isSmall && 'qas-transfer__icon'
8960
+ return !this.$qas.screen.isSmall && 'qas-transfer__icon'
8844
8961
  },
8845
8962
 
8846
8963
  searchBoxProps () {
@@ -8964,13 +9081,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
8964
9081
  quantity: $data.optionsList.length
8965
9082
  }, null, 8 /* PROPS */, ["label", "quantity"]),
8966
9083
  createVNode(_component_qas_search_box, mergeProps({
8967
- "form-mode": "",
8968
- list: $data.optionsList
9084
+ results: $data.firstResults,
9085
+ "onUpdate:results": _cache[0] || (_cache[0] = $event => (($data.firstResults) = $event)),
9086
+ list: $data.optionsList,
9087
+ outlined: ""
8969
9088
  }, $options.searchBoxProps), {
8970
- default: withCtx(({ results }) => [
9089
+ default: withCtx(() => [
8971
9090
  createVNode(_component_q_list, { separator: "" }, {
8972
9091
  default: withCtx(() => [
8973
- (openBlock(true), createElementBlock(Fragment, null, renderList(results, (item, index) => {
9092
+ (openBlock(true), createElementBlock(Fragment, null, renderList($data.firstResults, (item, index) => {
8974
9093
  return (openBlock(), createBlock(_component_q_item, {
8975
9094
  key: index,
8976
9095
  class: normalizeClass($options.getItemClass(item, true)),
@@ -8991,11 +9110,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
8991
9110
  }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["class", "onClick"]))
8992
9111
  }), 128 /* KEYED_FRAGMENT */))
8993
9112
  ]),
8994
- _: 2 /* DYNAMIC */
8995
- }, 1024 /* DYNAMIC_SLOTS */)
9113
+ _: 3 /* FORWARDED */
9114
+ })
8996
9115
  ]),
8997
9116
  _: 3 /* FORWARDED */
8998
- }, 16 /* FULL_PROPS */, ["list"])
9117
+ }, 16 /* FULL_PROPS */, ["results", "list"])
8999
9118
  ]),
9000
9119
  createElementVNode("div", {
9001
9120
  class: normalizeClass(["col-12 col-sm-auto items-center justify-center q-col-gutter-md row", $options.actionsClass])
@@ -9008,7 +9127,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
9008
9127
  flat: "",
9009
9128
  icon: "o_arrow_circle_down",
9010
9129
  rounded: "",
9011
- onClick: _cache[0] || (_cache[0] = $event => ($options.setSelectedFromClick(true)))
9130
+ onClick: _cache[1] || (_cache[1] = $event => ($options.setSelectedFromClick(true)))
9012
9131
  }, null, 8 /* PROPS */, ["class", "disabled"]),
9013
9132
  createVNode(_component_q_tooltip, {
9014
9133
  anchor: "top middle",
@@ -9029,7 +9148,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
9029
9148
  flat: "",
9030
9149
  icon: "o_arrow_circle_up",
9031
9150
  rounded: "",
9032
- onClick: _cache[1] || (_cache[1] = $event => ($options.setSelectedFromClick()))
9151
+ onClick: _cache[2] || (_cache[2] = $event => ($options.setSelectedFromClick()))
9033
9152
  }, null, 8 /* PROPS */, ["class", "disabled"]),
9034
9153
  createVNode(_component_q_tooltip, {
9035
9154
  anchor: "bottom middle",
@@ -9048,16 +9167,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
9048
9167
  label: "Selecionadas",
9049
9168
  quantity: $data.selectedList.length
9050
9169
  }, null, 8 /* PROPS */, ["quantity"]),
9051
- createVNode(_component_qas_search_box, mergeProps($options.searchBoxProps, {
9170
+ createVNode(_component_qas_search_box, mergeProps({
9171
+ results: $data.secondResults,
9172
+ "onUpdate:results": _cache[3] || (_cache[3] = $event => (($data.secondResults) = $event))
9173
+ }, $options.searchBoxProps, {
9052
9174
  "empty-list-height": "300px",
9053
- "form-mode": "",
9054
9175
  label: "Selecionadas",
9055
- list: $data.selectedList
9176
+ list: $data.selectedList,
9177
+ outlined: ""
9056
9178
  }), {
9057
- default: withCtx(({ results }) => [
9179
+ default: withCtx(() => [
9058
9180
  createVNode(_component_q_list, { separator: "" }, {
9059
9181
  default: withCtx(() => [
9060
- (openBlock(true), createElementBlock(Fragment, null, renderList(results, (item, index) => {
9182
+ (openBlock(true), createElementBlock(Fragment, null, renderList($data.secondResults, (item, index) => {
9061
9183
  return (openBlock(), createBlock(_component_q_item, {
9062
9184
  key: index,
9063
9185
  class: normalizeClass($options.getItemClass(item)),
@@ -9078,11 +9200,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
9078
9200
  }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["class", "onClick"]))
9079
9201
  }), 128 /* KEYED_FRAGMENT */))
9080
9202
  ]),
9081
- _: 2 /* DYNAMIC */
9082
- }, 1024 /* DYNAMIC_SLOTS */)
9203
+ _: 3 /* FORWARDED */
9204
+ })
9083
9205
  ]),
9084
9206
  _: 3 /* FORWARDED */
9085
- }, 16 /* FULL_PROPS */, ["list"])
9207
+ }, 16 /* FULL_PROPS */, ["results", "list"])
9086
9208
  ])
9087
9209
  ], 2 /* CLASS */))
9088
9210
  }
@@ -9092,7 +9214,7 @@ script.__file = "src/components/transfer/QasTransfer.vue";
9092
9214
 
9093
9215
  var name = "@bildvitta/quasar-ui-asteroid";
9094
9216
  var description = "Asteroid";
9095
- var version$1 = "3.0.0-alpha.3";
9217
+ var version$1 = "3.0.0-beta.3";
9096
9218
  var author = "Bild & Vitta <systemteam@bild.com.br>";
9097
9219
  var license = "MIT";
9098
9220
  var main = "dist/asteroid.cjs.min.js";
@@ -9173,6 +9295,20 @@ var packageInfo = {
9173
9295
  vetur: vetur
9174
9296
  };
9175
9297
 
9298
+ var Test = {
9299
+ name: 'test',
9300
+
9301
+ bind (element, { arg: argument, value }) {
9302
+ if (element && argument) {
9303
+ element.dataset.test = argument;
9304
+ }
9305
+
9306
+ if (element && value) {
9307
+ element.dataset.testKey = value;
9308
+ }
9309
+ }
9310
+ };
9311
+
9176
9312
  const version = packageInfo.version;
9177
9313
 
9178
9314
  function install (app) {
@@ -9234,8 +9370,11 @@ function install (app) {
9234
9370
  app.config.globalProperties.$qas = {
9235
9371
  dialog: Dialog,
9236
9372
  error: NotifyError,
9237
- success: NotifySuccess
9373
+ success: NotifySuccess,
9374
+ screen: Screen()
9238
9375
  };
9376
+
9377
+ app.directive(Test.name, Test);
9239
9378
  }
9240
9379
 
9241
9380
  var VuePlugin = /*#__PURE__*/Object.freeze({
@@ -9292,7 +9431,8 @@ var VuePlugin = /*#__PURE__*/Object.freeze({
9292
9431
  Dialog: Dialog,
9293
9432
  NotifyError: NotifyError,
9294
9433
  NotifySuccess: NotifySuccess,
9434
+ Screen: Screen,
9295
9435
  install: install
9296
9436
  });
9297
9437
 
9298
- export { Dialog, NotifyError, NotifySuccess, script$L as QasActions, script$J as QasActionsMenu, script$H as QasAlert, script$F as QasAppBar, script$E as QasAppMenu, script$G as QasAvatar, script$D as QasBox, script$I as QasBreakline, script$K as QasBtn, script$C as QasCard, script$B as QasCheckboxGroup, script$A as QasCopy, script$z as QasDateTimeInput, script$y as QasDebugger, script$w as QasDelete, script$x as QasDialog, script$v as QasDialogRouter, script$n as QasField, script$m as QasFilters, script$l as QasFormGenerator, script$k as QasFormView, script$j as QasGallery, script$i as QasGridGenerator, script$u as QasInput, script$h as QasLabel, script$g as QasLayout, script$f as QasListItems, script$e as QasListView, script$d as QasMap, script$c as QasNestedFields, script$t as QasNumericInput, script$b as QasPageHeader, script$r as QasPasswordInput, script$s as QasPasswordStrengthChecker, script$a as QasProfile, script$9 as QasResizer, script$8 as QasSearchBox, script$7 as QasSelect, script$6 as QasSelectList, script$p as QasSignaturePad, script$o as QasSignatureUploader, script$5 as QasSingleView, script$4 as QasSortable, script$3 as QasTableGenerator, script$2 as QasTabsGenerator, script$1 as QasTextTruncate, script as QasTransfer, script$q as QasUploader, VuePlugin as default, install, version };
9438
+ export { Dialog, NotifyError, NotifySuccess, script$L as QasActions, script$J as QasActionsMenu, script$H as QasAlert, script$F as QasAppBar, script$E as QasAppMenu, script$G as QasAvatar, script$D as QasBox, script$I as QasBreakline, script$K as QasBtn, script$C as QasCard, script$B as QasCheckboxGroup, script$A as QasCopy, script$z as QasDateTimeInput, script$y as QasDebugger, script$w as QasDelete, script$x as QasDialog, script$v as QasDialogRouter, script$n as QasField, script$m as QasFilters, script$l as QasFormGenerator, script$k as QasFormView, script$j as QasGallery, script$i as QasGridGenerator, script$u as QasInput, script$h as QasLabel, script$g as QasLayout, script$f as QasListItems, script$e as QasListView, script$d as QasMap, script$c as QasNestedFields, script$t as QasNumericInput, script$b as QasPageHeader, script$r as QasPasswordInput, script$s as QasPasswordStrengthChecker, script$a as QasProfile, script$9 as QasResizer, script$8 as QasSearchBox, script$7 as QasSelect, script$6 as QasSelectList, script$p as QasSignaturePad, script$o as QasSignatureUploader, script$5 as QasSingleView, script$4 as QasSortable, script$3 as QasTableGenerator, script$2 as QasTabsGenerator, script$1 as QasTextTruncate, script as QasTransfer, script$q as QasUploader, Screen, VuePlugin as default, install, version };