@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,5 +1,5 @@
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
  */
@@ -7,15 +7,14 @@
7
7
 
8
8
  Object.defineProperty(exports, '__esModule', { value: true });
9
9
 
10
- var humps = require('humps');
11
10
  var vue = require('vue');
11
+ var humps = require('humps');
12
12
  var dateFns = require('date-fns');
13
13
  var locale = require('date-fns/locale');
14
14
  var quasar = require('quasar');
15
+ var lodashEs = require('lodash-es');
15
16
  var AutoNumeric = require('autonumeric');
16
17
  var Pica = require('pica');
17
- var api = require('axios');
18
- var lodashEs = require('lodash-es');
19
18
  var SignaturePad = require('signature_pad');
20
19
  var vueRouter = require('vue-router');
21
20
  var Fuse = require('fuse.js');
@@ -26,346 +25,14 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
26
25
 
27
26
  var AutoNumeric__default = /*#__PURE__*/_interopDefaultLegacy(AutoNumeric);
28
27
  var Pica__default = /*#__PURE__*/_interopDefaultLegacy(Pica);
29
- var api__default = /*#__PURE__*/_interopDefaultLegacy(api);
30
28
  var SignaturePad__default = /*#__PURE__*/_interopDefaultLegacy(SignaturePad);
31
29
  var Fuse__default = /*#__PURE__*/_interopDefaultLegacy(Fuse);
32
30
  var Sortable__default = /*#__PURE__*/_interopDefaultLegacy(Sortable);
33
31
  var VueGoogleMaps__default = /*#__PURE__*/_interopDefaultLegacy(VueGoogleMaps);
34
32
 
35
- var contextMixin = {
36
- computed: {
37
- mx_context () {
38
- const { limit, ordering, page, search, ...filters } = this.$route.query;
39
- return { filters, limit, ordering, page: page ? parseInt(page) : 1, search }
40
- }
41
- }
42
- };
43
-
44
- const irregularClasses = ['col', 'col-auto', 'fit'];
45
-
46
- var generatorMixin = {
47
- props: {
48
- columns: {
49
- default: () => [],
50
- type: [Array, String, Object]
51
- },
52
-
53
- fields: {
54
- default: () => ({}),
55
- type: Object
56
- },
57
-
58
- gutter: {
59
- default: 'md',
60
- type: [String, Boolean],
61
- validator: value => ['xs', 'sm', 'md', 'lg', 'xl'].includes(value)
62
- }
63
- },
64
-
65
- computed: {
66
- mx_classes () {
67
- const classes = ['row'];
68
-
69
- if (this.gutter) {
70
- classes.push(`q-col-gutter-${this.gutter}`);
71
- }
72
-
73
- return classes
74
- }
75
- },
76
-
77
- methods: {
78
- mx_getBreakpoint (columns) {
79
- const classes = [];
80
- const profiles = { col: 'col', xs: 'col-xs', sm: 'col-sm', md: 'col-md', lg: 'col-lg', xl: 'col-xl' };
81
- const { fieldProps, classes: renamedClasses, ...formattedColumns } = columns || {};
82
-
83
- for (const key in formattedColumns) {
84
- const value = formattedColumns[key];
85
- classes.push(irregularClasses.includes(value) ? value : `${profiles[key]}-${value}`);
86
- }
87
-
88
- return [...classes, renamedClasses]
89
- },
90
-
91
- mx_getFieldClass (index, isGridGenerator) {
92
- if (typeof this.columns === 'string') {
93
- return irregularClasses.includes(this.columns) ? this.columns : `col-${this.columns}`
94
- }
95
-
96
- return Array.isArray(this.columns)
97
- ? this.mx_handleColumnsByIndex(index, isGridGenerator)
98
- : this.mx_handleColumnsByField(index, isGridGenerator)
99
- },
100
-
101
- mx_handleColumnsByField (index, isGridGenerator) {
102
- if (!this.columns[index]) {
103
- return this.mx_setDefaultColumnClass(isGridGenerator)
104
- }
105
-
106
- return this.mx_getBreakpoint(this.columns[index])
107
- },
108
-
109
- mx_handleColumnsByIndex (index, isGridGenerator) {
110
- const fields = isGridGenerator ? this.fields : this.groupedFields.visible;
111
-
112
- if (!Array.isArray(fields)) {
113
- index = Object.keys(fields).findIndex(field => field === index);
114
- }
115
-
116
- const length = this.columns.length;
117
-
118
- if (!length) {
119
- return this.mx_setDefaultColumnClass(isGridGenerator)
120
- }
121
-
122
- return this.mx_getBreakpoint(this.columns[index])
123
- },
124
-
125
- mx_setDefaultColumnClass (isGridGenerator) {
126
- return isGridGenerator ? 'col-6 col-xs-12 col-sm-4' : 'col-6'
127
- }
128
- }
129
- };
130
-
131
- const levels = {
132
- 0: {
133
- color: 'negative',
134
- label: 'Muito fraco',
135
- progress: 0.05,
136
- textClass: 'text-negative'
137
- },
138
-
139
- 1: {
140
- color: 'warning',
141
- label: 'Fraco',
142
- progress: 0.25,
143
- textClass: 'text-warning'
144
- },
145
-
146
- 2: {
147
- color: 'warning',
148
- label: 'Bom',
149
- progress: 0.5,
150
- textClass: 'text-warning'
151
- },
152
-
153
- 3: {
154
- color: 'positive',
155
- label: 'Forte',
156
- progress: 0.75,
157
- textClass: 'text-positive'
158
- },
159
-
160
- 4: {
161
- color: 'positive',
162
- label: 'Muito forte',
163
- progress: 1,
164
- textClass: 'text-positive'
165
- }
166
- };
167
-
168
- var passwordMixin = {
169
- props: {
170
- levels: {
171
- default: () => levels,
172
- type: Object
173
- },
174
-
175
- // https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/minlength
176
- minlength: {
177
- default: 8,
178
- type: [Number, String]
179
- },
180
-
181
- specials: {
182
- default: /[!@#$%^&*()_+\-=[\]{}|;:'",<.>/?`~]/g,
183
- type: RegExp
184
- },
185
-
186
- trackColor: {
187
- default: 'blue-grey-1',
188
- type: String
189
- },
190
-
191
- useLowercase: {
192
- default: true,
193
- type: Boolean
194
- },
195
-
196
- useNumbers: {
197
- default: true,
198
- type: Boolean
199
- },
200
-
201
- useSpecial: {
202
- default: true,
203
- type: Boolean
204
- },
205
-
206
- useUppercase: {
207
- default: true,
208
- type: Boolean
209
- }
210
- }
211
- };
212
-
213
- var screenMixin = {
214
- // TODO: Esses nomes precisam ser alterados para algo mais inteligente.
215
-
216
- computed: {
217
- mx_isSmall () {
218
- // until 599
219
- return this.$q.screen.xs
220
- },
221
-
222
- mx_isMedium () {
223
- // from 600 until 1023
224
- return this.$q.screen.sm
225
- },
226
-
227
- mx_isLarge () {
228
- // from 1024 until the limit
229
- return this.$q.screen.gt.sm
230
- },
231
-
232
- mx_untilMedium () {
233
- // from 0 until 599
234
- return this.$q.screen.lt.sm
235
- },
236
-
237
- mx_untilLarge () {
238
- // from 0 until 1023
239
- return this.$q.screen.lt.md
240
- },
241
-
242
- mx_isMobile () {
243
- return this.$q.platform.is.mobile
244
- }
245
- }
246
- };
247
-
248
- var viewMixin = {
249
- props: {
250
- dialog: {
251
- type: Boolean
252
- },
253
-
254
- entity: {
255
- required: true,
256
- type: String
257
- },
258
-
259
- url: {
260
- default: '',
261
- type: String
262
- },
263
-
264
- fields: {
265
- default: () => ({}),
266
- type: Object
267
- },
268
-
269
- errors: {
270
- default: () => ({}),
271
- type: Object
272
- },
273
-
274
- metadata: {
275
- default: () => ({}),
276
- type: Object
277
- },
278
-
279
- fetching: {
280
- type: Boolean
281
- }
282
- },
283
-
284
- emits: [
285
- 'update:fields',
286
- 'update:errors',
287
- 'update:metadata',
288
- 'update:fetching'
289
- ],
290
-
291
- data () {
292
- return {
293
- mx_errors: {},
294
- mx_fields: {},
295
- mx_metadata: {},
296
-
297
- mx_isFetching: false
298
- }
299
- },
300
-
301
- watch: {
302
- mx_isFetching (value) {
303
- this.$emit('update:fetching', value);
304
- }
305
- },
306
-
307
- computed: {
308
- mx_componentTag () {
309
- return this.dialog ? 'div' : 'q-page'
310
- },
311
-
312
- mx_componentClass () {
313
- return !this.dialog && 'container spaced'
314
- },
315
-
316
- mx_hasFooterSlot () {
317
- return !!(this.$slots.footer)
318
- },
319
-
320
- mx_hasHeaderSlot () {
321
- return !!(this.$slots.header)
322
- }
323
- },
324
-
325
- methods: {
326
- mx_fetchError (error) {
327
- const { response } = error;
328
- const exception = response?.data?.exception || error.message;
329
-
330
- this.$qas.error('Ops! Erro ao obter os dados.', exception);
331
-
332
- const status = response?.status;
333
- const redirect = ({ 403: 'Forbidden', 404: 'NotFound' })[status];
334
-
335
- if (redirect) {
336
- this.$router.replace({ name: redirect });
337
- }
338
- },
339
-
340
- mx_setErrors (errors = {}) {
341
- this.mx_errors = vue.markRaw(errors);
342
- },
343
-
344
- mx_setFields (fields = {}) {
345
- for (const field in fields) {
346
- fields[field].name = humps.camelize(fields[field].name);
347
- }
348
-
349
- this.mx_fields = vue.markRaw(fields);
350
- },
351
-
352
- mx_setMetadata (metadata = {}) {
353
- this.mx_metadata = vue.markRaw(metadata);
354
- },
355
-
356
- mx_updateModels (models) {
357
- for (const key in models) {
358
- this.$emit(`update:${key}`, models[key]);
359
- }
360
- }
361
- }
362
- };
363
-
364
33
  var script$L = {
365
34
  name: 'QasActions',
366
35
 
367
- mixins: [screenMixin],
368
-
369
36
  props: {
370
37
  align: {
371
38
  default: 'end',
@@ -385,7 +52,7 @@ var script$L = {
385
52
  return [
386
53
  `justify-${this.align}`,
387
54
  `q-col-gutter-${this.gutter}`,
388
- this.mx_isSmall ? 'column reverse' : 'row'
55
+ this.$qas.screen.isSmall ? 'column reverse' : 'row'
389
56
  ]
390
57
  }
391
58
  }
@@ -413,28 +80,31 @@ script$L.__file = "src/components/actions/QasActions.vue";
413
80
  var script$K = {
414
81
  name: 'QasBtn',
415
82
 
416
- mixins: [screenMixin],
417
-
418
- inheritAttrs: false,
419
-
420
83
  props: {
421
84
  hideLabelOnSmallScreen: {
422
85
  type: Boolean
86
+ },
87
+
88
+ label: {
89
+ type: String,
90
+ default: ''
423
91
  }
424
92
  },
425
93
 
426
94
  computed: {
427
95
  attributes () {
428
- const { label, ...attributes } = this.$attrs;
429
- return attributes
96
+ return {
97
+ ...(this.showLabel && { label: this.label }),
98
+ ...this.$attrs
99
+ }
430
100
  },
431
101
 
432
102
  hasLabel () {
433
- return !!(this.$attrs.label || this.$slots.default)
103
+ return !!(this.label || this.$slots.default)
434
104
  },
435
105
 
436
106
  showLabel () {
437
- return this.hasLabel && !(this.hideLabelOnSmallScreen && this.mx_isSmall)
107
+ return this.hasLabel && !(this.hideLabelOnSmallScreen && this.$qas.screen.isSmall)
438
108
  },
439
109
 
440
110
  slots () {
@@ -454,9 +124,7 @@ function render$K(_ctx, _cache, $props, $setup, $data, $options) {
454
124
  }, $options.attributes), vue.createSlots({
455
125
  default: vue.withCtx(() => [
456
126
  ($options.showLabel)
457
- ? vue.renderSlot(_ctx.$slots, "default", { key: 0 }, () => [
458
- vue.createTextVNode(vue.toDisplayString(_ctx.$attrs.label), 1 /* TEXT */)
459
- ])
127
+ ? vue.renderSlot(_ctx.$slots, "default", { key: 0 })
460
128
  : vue.createCommentVNode("v-if", true)
461
129
  ]),
462
130
  _: 2 /* DYNAMIC */
@@ -554,10 +222,10 @@ function render$J(_ctx, _cache, $props, $setup, $data, $options) {
554
222
  "hide-label-on-small-screen": "",
555
223
  icon: $props.icon,
556
224
  label: $props.label,
557
- outline: ""
225
+ outline: "",
226
+ padding: "md"
558
227
  }, {
559
228
  default: vue.withCtx(() => [
560
- vue.createElementVNode("span", null, vue.toDisplayString($props.label), 1 /* TEXT */),
561
229
  vue.createVNode(_component_q_menu, { class: "qas-actions-menu__menu" }, {
562
230
  default: vue.withCtx(() => [
563
231
  vue.createVNode(_component_q_list, {
@@ -580,8 +248,8 @@ function render$J(_ctx, _cache, $props, $setup, $data, $options) {
580
248
  vue.createElementVNode("div", _hoisted_1$r, [
581
249
  vue.createVNode(_component_q_icon, {
582
250
  name: item.icon,
583
- size: item.iconSize
584
- }, null, 8 /* PROPS */, ["name", "size"]),
251
+ size: "sm"
252
+ }, null, 8 /* PROPS */, ["name"]),
585
253
  vue.createElementVNode("div", null, vue.toDisplayString(item.label), 1 /* TEXT */)
586
254
  ])
587
255
  ]),
@@ -603,7 +271,10 @@ function render$J(_ctx, _cache, $props, $setup, $data, $options) {
603
271
  vue.createVNode(_component_q_item_section, null, {
604
272
  default: vue.withCtx(() => [
605
273
  vue.createElementVNode("div", _hoisted_2$k, [
606
- vue.createVNode(_component_q_icon, { name: $props.deleteIcon }, null, 8 /* PROPS */, ["name"]),
274
+ vue.createVNode(_component_q_icon, {
275
+ name: $props.deleteIcon,
276
+ size: "sm"
277
+ }, null, 8 /* PROPS */, ["name"]),
607
278
  vue.createElementVNode("div", null, vue.toDisplayString($props.deleteLabel), 1 /* TEXT */)
608
279
  ])
609
280
  ]),
@@ -764,11 +435,10 @@ function constructObject (name, object) {
764
435
  }
765
436
 
766
437
  /**
767
- * Function to filter specific field inside a fields
768
- * Função para filtrar propriedades espessificas dentro de um objeto
438
+ * Função para filtrar propriedades especificas dentro de um objeto
769
439
  *
770
440
  * @param {object} fields objeto com propriedades
771
- * @param {array} models array de string com nomes das proproiedades que serão filtradas
441
+ * @param {array} models array de string com nomes das propriedades que serão filtradas
772
442
  * @returns {object} objeto com propriedades filtradas
773
443
  *
774
444
  * @example
@@ -1348,7 +1018,7 @@ const _hoisted_10$1 = { class: "q-pa-lg text-center" };
1348
1018
  const _hoisted_11$1 = { class: "ellipsis q-mt-lg qs-lh-sm text-bold text-subtitle1" };
1349
1019
  const _hoisted_12$1 = { class: "ellipsis q-mt-xs text-caption" };
1350
1020
  const _hoisted_13$1 = { class: "q-mt-sm" };
1351
- const _hoisted_14 = { class: "q-mt-sm" };
1021
+ const _hoisted_14$1 = { class: "q-mt-sm" };
1352
1022
 
1353
1023
  function render$F(_ctx, _cache, $props, $setup, $data, $options) {
1354
1024
  const _component_q_ajax_bar = vue.resolveComponent("q-ajax-bar");
@@ -1494,7 +1164,7 @@ function render$F(_ctx, _cache, $props, $setup, $data, $options) {
1494
1164
  to: $props.user.to
1495
1165
  }, null, 8 /* PROPS */, ["to"])
1496
1166
  ]),
1497
- vue.createElementVNode("div", _hoisted_14, [
1167
+ vue.createElementVNode("div", _hoisted_14$1, [
1498
1168
  vue.withDirectives(vue.createVNode(_component_qas_btn, {
1499
1169
  class: "q-px-lg q-py-xs",
1500
1170
  dense: "",
@@ -1529,8 +1199,6 @@ script$F.__file = "src/components/app-bar/QasAppBar.vue";
1529
1199
  var script$E = {
1530
1200
  name: 'QasAppMenu',
1531
1201
 
1532
- mixins: [screenMixin],
1533
-
1534
1202
  props: {
1535
1203
  items: {
1536
1204
  default: () => [],
@@ -1632,7 +1300,7 @@ var script$E = {
1632
1300
  },
1633
1301
 
1634
1302
  beforeHide () {
1635
- if (this.mx_isLarge) {
1303
+ if (this.$qas.screen.isLarge) {
1636
1304
  this.model = true;
1637
1305
  this.miniMode = !this.miniMode;
1638
1306
  }
@@ -2531,8 +2199,6 @@ var script$x = {
2531
2199
  QasActions: script$L
2532
2200
  },
2533
2201
 
2534
- mixins: [screenMixin],
2535
-
2536
2202
  props: {
2537
2203
  actionsProps: {
2538
2204
  default: () => ({}),
@@ -2615,8 +2281,8 @@ var script$x = {
2615
2281
 
2616
2282
  style () {
2617
2283
  return {
2618
- maxWidth: this.maxWidth || (this.mx_isSmall ? '' : '600px'),
2619
- minWidth: this.minWidth || (this.mx_isSmall ? '' : '400px')
2284
+ maxWidth: this.maxWidth || (this.$qas.screen.isSmall ? '' : '600px'),
2285
+ minWidth: this.minWidth || (this.$qas.screen.isSmall ? '' : '400px')
2620
2286
  }
2621
2287
  },
2622
2288
 
@@ -2637,12 +2303,12 @@ var script$x = {
2637
2303
  this.useForm && this.$emit('validate', await this.$refs.form.validate());
2638
2304
  },
2639
2305
 
2640
- // metodo para funcionar como plugin
2306
+ // método para funcionar como plugin
2641
2307
  show () {
2642
2308
  this.$refs.dialog.show();
2643
2309
  },
2644
2310
 
2645
- // metodo para funcionar como plugin
2311
+ // método para funcionar como plugin
2646
2312
  hide () {
2647
2313
  this.$refs.dialog.hide();
2648
2314
  },
@@ -2778,9 +2444,87 @@ quasar.Notify.registerType('success', {
2778
2444
  progress: true
2779
2445
  });
2780
2446
 
2781
- var NotifySuccess = (message, caption) => {
2782
- quasar.Notify?.create({ caption, message, type: 'success' });
2783
- };
2447
+ var NotifySuccess = (message, caption) => {
2448
+ quasar.Notify?.create({ caption, message, type: 'success' });
2449
+ };
2450
+
2451
+ var Screen = () => {
2452
+ const screensModel = {
2453
+ // até 599px
2454
+ isSmall: () => quasar.Screen.xs,
2455
+ // de 600 até 1023px
2456
+ isMedium: () => quasar.Screen.sm,
2457
+ // de 600 até 1023px
2458
+ isLarge: () => quasar.Screen.gt.sm,
2459
+ // de 0 até 599px
2460
+ untilMedium: () => quasar.Screen.lt.sm,
2461
+ // de 0 ate 1023px
2462
+ untilLarge: () => quasar.Screen.lt.md,
2463
+
2464
+ // Plataforma
2465
+ isMobile: () => quasar.Platform.is.mobile || false
2466
+ };
2467
+
2468
+ const screens = {};
2469
+
2470
+ for (const key in screensModel) {
2471
+ // infelizmente esta é a única forma que conseguimos para que nossa função se tornasse reativa na view
2472
+ // é como o próprio quasar implementa
2473
+ Object.defineProperty(screens, key, {
2474
+ get () {
2475
+ return screensModel[key]()
2476
+ },
2477
+
2478
+ enumerable: true
2479
+ });
2480
+ }
2481
+
2482
+ return screens
2483
+ };
2484
+
2485
+ const history$2 = vue.reactive({ list: [] });
2486
+
2487
+ function useHistory () {
2488
+ const hasPreviousRoute = vue.computed(() => history$2.list.length > 1);
2489
+
2490
+ function getPreviousRoute (currentRoute) {
2491
+ const index = lodashEs.findLastIndex(history$2.list, item => item.name === currentRoute.name);
2492
+
2493
+ if (~index) {
2494
+ history$2.list.splice(index, 1);
2495
+ }
2496
+
2497
+ return history$2.list[history$2.list.length - 1]
2498
+ }
2499
+
2500
+ function addRoute (route) {
2501
+ const routeExistsInList = history$2.list?.[history$2.list?.length - 1]?.name === route.name;
2502
+
2503
+ if (routeExistsInList) return
2504
+
2505
+ history$2.list.push(route);
2506
+ }
2507
+
2508
+ function destroyRoutes (routes) {
2509
+ if (!history$2.list.length) return null
2510
+
2511
+ routes.forEach(route => {
2512
+ const index = history$2.list.findIndex(item => item.name === route.name);
2513
+
2514
+ if (~index) {
2515
+ history$2.list.splice(index, 1);
2516
+ }
2517
+ });
2518
+ }
2519
+
2520
+ return {
2521
+ history: history$2,
2522
+ hasPreviousRoute,
2523
+ getPreviousRoute,
2524
+ addRoute,
2525
+ destroyRoutes
2526
+ }
2527
+ }
2784
2528
 
2785
2529
  var script$w = {
2786
2530
  name: 'QasDelete',
@@ -2818,6 +2562,11 @@ var script$w = {
2818
2562
 
2819
2563
  deleting: {
2820
2564
  type: Boolean
2565
+ },
2566
+
2567
+ useAutoDeleteRoute: {
2568
+ default: true,
2569
+ type: Boolean
2821
2570
  }
2822
2571
  },
2823
2572
 
@@ -2865,9 +2614,21 @@ var script$w = {
2865
2614
  this.$emit('update:deleting', true);
2866
2615
 
2867
2616
  try {
2617
+ const { destroyRoutes, history } = useHistory();
2618
+
2868
2619
  await this.$store.dispatch(`${this.entity}/destroy`, { id: this.id, url: this.url });
2620
+
2869
2621
  NotifySuccess('Item deletado com sucesso!');
2622
+
2623
+ if (this.useAutoDeleteRoute) {
2624
+ // remove todas rotas que possuem o id do item excluído.
2625
+ const routesToBeDeleted = this.getRoutesToBeDeletedById(history.list);
2626
+ destroyRoutes(routesToBeDeleted);
2627
+ }
2628
+
2629
+ // cria um evento para notificar que o item foi excluído no "window".
2870
2630
  this.createDeleteSuccessEvent();
2631
+
2871
2632
  this.$emit('success');
2872
2633
  } catch (error) {
2873
2634
  NotifyError('Ops! Não foi possível deletar o item.');
@@ -2878,6 +2639,10 @@ var script$w = {
2878
2639
  }
2879
2640
  },
2880
2641
 
2642
+ getRoutesToBeDeletedById (routes = []) {
2643
+ return routes.filter(({ params }) => params.id === this.id)
2644
+ },
2645
+
2881
2646
  createDeleteSuccessEvent () {
2882
2647
  const event = new CustomEvent('delete-success', {
2883
2648
  bubbles: false,
@@ -3036,7 +2801,7 @@ var script$u = {
3036
2801
  props: {
3037
2802
  modelValue: {
3038
2803
  default: '',
3039
- type: String
2804
+ type: [String, Number]
3040
2805
  },
3041
2806
 
3042
2807
  unmaskedValue: {
@@ -3047,11 +2812,31 @@ var script$u = {
3047
2812
  outlined: {
3048
2813
  default: true,
3049
2814
  type: Boolean
2815
+ },
2816
+
2817
+ removeErrorOnType: {
2818
+ type: Boolean
2819
+ },
2820
+
2821
+ error: {
2822
+ type: Boolean
2823
+ },
2824
+
2825
+ errorMessage: {
2826
+ type: String,
2827
+ default: ''
3050
2828
  }
3051
2829
  },
3052
2830
 
3053
2831
  emits: ['update:modelValue'],
3054
2832
 
2833
+ data () {
2834
+ return {
2835
+ errorData: false,
2836
+ messageErrorData: ''
2837
+ }
2838
+ },
2839
+
3055
2840
  computed: {
3056
2841
  hasError () {
3057
2842
  return this.inputReference.hasError
@@ -3084,6 +2869,11 @@ var script$u = {
3084
2869
  },
3085
2870
 
3086
2871
  set (value) {
2872
+ if (this.removeErrorOnType && this.error) {
2873
+ this.errorData = false;
2874
+ this.errorMessageData = '';
2875
+ }
2876
+
3087
2877
  return this.$emit('update:modelValue', value)
3088
2878
  }
3089
2879
  }
@@ -3096,6 +2886,22 @@ var script$u = {
3096
2886
  requestAnimationFrame(() => {
3097
2887
  input.selectionStart = input.value ? input.value.length : '';
3098
2888
  });
2889
+ },
2890
+
2891
+ error: {
2892
+ handler (value) {
2893
+ this.errorData = value;
2894
+ },
2895
+
2896
+ immediate: true
2897
+ },
2898
+
2899
+ errorMessage: {
2900
+ handler (value) {
2901
+ this.errorMessageData = value;
2902
+ },
2903
+
2904
+ immediate: true
3099
2905
  }
3100
2906
  },
3101
2907
 
@@ -3127,8 +2933,10 @@ function render$u(_ctx, _cache, $props, $setup, $data, $options) {
3127
2933
  ref: "input",
3128
2934
  modelValue: $options.model,
3129
2935
  "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.model) = $event)),
3130
- "bottom-slots": ""
2936
+ "bottom-slots": "",
2937
+ error: $data.errorData
3131
2938
  }, _ctx.$attrs, {
2939
+ "error-message": _ctx.errorMessageData,
3132
2940
  mask: $options.mask,
3133
2941
  outlined: $props.outlined,
3134
2942
  "unmasked-value": $props.unmaskedValue
@@ -3141,7 +2949,7 @@ function render$u(_ctx, _cache, $props, $setup, $data, $options) {
3141
2949
  ])
3142
2950
  }
3143
2951
  })
3144
- ]), 1040 /* FULL_PROPS, DYNAMIC_SLOTS */, ["modelValue", "mask", "outlined", "unmasked-value"])
2952
+ ]), 1040 /* FULL_PROPS, DYNAMIC_SLOTS */, ["modelValue", "error", "error-message", "mask", "outlined", "unmasked-value"])
3145
2953
  ]))
3146
2954
  }
3147
2955
 
@@ -3296,6 +3104,88 @@ function render$t(_ctx, _cache, $props, $setup, $data, $options) {
3296
3104
  script$t.render = render$t;
3297
3105
  script$t.__file = "src/components/numeric-input/QasNumericInput.vue";
3298
3106
 
3107
+ const levels = {
3108
+ 0: {
3109
+ color: 'negative',
3110
+ label: 'Muito fraco',
3111
+ progress: 0.05,
3112
+ textClass: 'text-negative'
3113
+ },
3114
+
3115
+ 1: {
3116
+ color: 'warning',
3117
+ label: 'Fraco',
3118
+ progress: 0.25,
3119
+ textClass: 'text-warning'
3120
+ },
3121
+
3122
+ 2: {
3123
+ color: 'warning',
3124
+ label: 'Bom',
3125
+ progress: 0.5,
3126
+ textClass: 'text-warning'
3127
+ },
3128
+
3129
+ 3: {
3130
+ color: 'positive',
3131
+ label: 'Forte',
3132
+ progress: 0.75,
3133
+ textClass: 'text-positive'
3134
+ },
3135
+
3136
+ 4: {
3137
+ color: 'positive',
3138
+ label: 'Muito forte',
3139
+ progress: 1,
3140
+ textClass: 'text-positive'
3141
+ }
3142
+ };
3143
+
3144
+ var passwordMixin = {
3145
+ props: {
3146
+ levels: {
3147
+ default: () => levels,
3148
+ type: Object
3149
+ },
3150
+
3151
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/minlength
3152
+ minlength: {
3153
+ default: 8,
3154
+ type: [Number, String]
3155
+ },
3156
+
3157
+ specials: {
3158
+ default: /[!@#$%^&*()_+\-=[\]{}|;:'",<.>/?`~]/g,
3159
+ type: RegExp
3160
+ },
3161
+
3162
+ trackColor: {
3163
+ default: 'blue-grey-1',
3164
+ type: String
3165
+ },
3166
+
3167
+ useLowercase: {
3168
+ default: true,
3169
+ type: Boolean
3170
+ },
3171
+
3172
+ useNumbers: {
3173
+ default: true,
3174
+ type: Boolean
3175
+ },
3176
+
3177
+ useSpecial: {
3178
+ default: true,
3179
+ type: Boolean
3180
+ },
3181
+
3182
+ useUppercase: {
3183
+ default: true,
3184
+ type: Boolean
3185
+ }
3186
+ }
3187
+ };
3188
+
3299
3189
  var script$s = {
3300
3190
  name: 'QasPasswordStrengthChecker',
3301
3191
 
@@ -3400,9 +3290,8 @@ var script$r = {
3400
3290
  mixins: [passwordMixin],
3401
3291
 
3402
3292
  props: {
3403
- useStrengthChecker: {
3404
- type: Boolean,
3405
- default: true
3293
+ hideStrengthChecker: {
3294
+ type: Boolean
3406
3295
  },
3407
3296
 
3408
3297
  iconColor: {
@@ -3420,7 +3309,6 @@ var script$r = {
3420
3309
 
3421
3310
  data () {
3422
3311
  return {
3423
- key: 'error',
3424
3312
  toggleType: true
3425
3313
  }
3426
3314
  },
@@ -3450,15 +3338,6 @@ var script$r = {
3450
3338
  }
3451
3339
  },
3452
3340
 
3453
- watch: {
3454
- modelValue () {
3455
- if (this.$attrs.error) {
3456
- this.$attrs.error = false;
3457
- this.$attrs.errorMessage = '';
3458
- }
3459
- }
3460
- },
3461
-
3462
3341
  methods: {
3463
3342
  toggle () {
3464
3343
  this.toggleType = !this.toggleType;
@@ -3471,39 +3350,43 @@ function render$r(_ctx, _cache, $props, $setup, $data, $options) {
3471
3350
  const _component_qas_password_strength_checker = vue.resolveComponent("qas-password-strength-checker");
3472
3351
  const _component_qas_input = vue.resolveComponent("qas-input");
3473
3352
 
3474
- return (vue.openBlock(), vue.createBlock(_component_qas_input, {
3475
- modelValue: $options.model,
3476
- "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.model) = $event)),
3477
- "bottom-slots": "",
3478
- type: $options.type
3479
- }, vue.createSlots({
3480
- append: vue.withCtx(() => [
3481
- vue.createVNode(_component_q_icon, {
3482
- class: "cursor-pointer",
3483
- color: $props.iconColor,
3484
- name: $options.icon,
3485
- onClick: $options.toggle
3486
- }, null, 8 /* PROPS */, ["color", "name", "onClick"])
3487
- ]),
3488
- _: 2 /* DYNAMIC */
3489
- }, [
3490
- vue.renderList(_ctx.$slots, (_, name) => {
3491
- return {
3492
- name: name,
3493
- fn: vue.withCtx((context) => [
3494
- vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(context || {})))
3495
- ])
3496
- }
3497
- }),
3498
- ($props.useStrengthChecker)
3499
- ? {
3500
- name: "hint",
3501
- fn: vue.withCtx(() => [
3502
- vue.createVNode(_component_qas_password_strength_checker, vue.mergeProps($options.strengthCheckerProps, { password: $options.model }), null, 16 /* FULL_PROPS */, ["password"])
3353
+ return (vue.openBlock(), vue.createElementBlock("div", null, [
3354
+ vue.createVNode(_component_qas_input, vue.mergeProps({
3355
+ modelValue: $options.model,
3356
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.model) = $event)),
3357
+ "bottom-slots": ""
3358
+ }, _ctx.$attrs, {
3359
+ "remove-error-on-type": "",
3360
+ type: $options.type
3361
+ }), vue.createSlots({
3362
+ append: vue.withCtx(() => [
3363
+ vue.createVNode(_component_q_icon, {
3364
+ class: "cursor-pointer",
3365
+ color: $props.iconColor,
3366
+ name: $options.icon,
3367
+ onClick: $options.toggle
3368
+ }, null, 8 /* PROPS */, ["color", "name", "onClick"])
3369
+ ]),
3370
+ _: 2 /* DYNAMIC */
3371
+ }, [
3372
+ vue.renderList(_ctx.$slots, (_, name) => {
3373
+ return {
3374
+ name: name,
3375
+ fn: vue.withCtx((context) => [
3376
+ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(context || {})))
3503
3377
  ])
3504
3378
  }
3505
- : undefined
3506
- ]), 1032 /* PROPS, DYNAMIC_SLOTS */, ["modelValue", "type"]))
3379
+ }),
3380
+ (!$props.hideStrengthChecker)
3381
+ ? {
3382
+ name: "hint",
3383
+ fn: vue.withCtx(() => [
3384
+ vue.createVNode(_component_qas_password_strength_checker, vue.mergeProps($options.strengthCheckerProps, { password: $options.model }), null, 16 /* FULL_PROPS */, ["password"])
3385
+ ])
3386
+ }
3387
+ : undefined
3388
+ ]), 1040 /* FULL_PROPS, DYNAMIC_SLOTS */, ["modelValue", "type"])
3389
+ ]))
3507
3390
  }
3508
3391
 
3509
3392
  script$r.render = render$r;
@@ -3702,7 +3585,7 @@ var script$q = {
3702
3585
  this.isFetching = true;
3703
3586
 
3704
3587
  try {
3705
- const { data } = await api__default["default"].post('/upload-credentials/', {
3588
+ const { data } = await this.$axios.post('/upload-credentials/', {
3706
3589
  entity: this.entity,
3707
3590
  filename
3708
3591
  });
@@ -4180,6 +4063,11 @@ var script$o = {
4180
4063
  },
4181
4064
 
4182
4065
  props: {
4066
+ dialogProps: {
4067
+ type: Object,
4068
+ default: () => ({})
4069
+ },
4070
+
4183
4071
  uploadLabel: {
4184
4072
  default: '',
4185
4073
  type: String
@@ -4228,6 +4116,32 @@ var script$o = {
4228
4116
 
4229
4117
  headerClass () {
4230
4118
  return `q-pa-${this.readonly ? 'md' : 'sm'}`
4119
+ },
4120
+
4121
+ defaultDialogProps () {
4122
+ return {
4123
+ maxWidth: '620px',
4124
+ ...this.dialogProps
4125
+ }
4126
+ },
4127
+
4128
+ signaturePadWidth () {
4129
+ const sizes = {
4130
+ [this.$qas.screen.isSmall]: { width: '100%' },
4131
+ [this.$qas.screen.isMedium]: { width: '570px' },
4132
+ [this.$qas.screen.isLarge]: { width: '350px' }
4133
+ };
4134
+ return sizes.true
4135
+ },
4136
+
4137
+ signaturePadHeight () {
4138
+ const sizes = {
4139
+ [this.$qas.screen.isSmall]: '250',
4140
+ [this.$qas.screen.isMedium]: '400',
4141
+ [this.$qas.screen.isLarge]: '250'
4142
+ };
4143
+
4144
+ return sizes.true
4231
4145
  }
4232
4146
  },
4233
4147
 
@@ -4327,20 +4241,24 @@ function render$o(_ctx, _cache, $props, $setup, $data, $options) {
4327
4241
  ]),
4328
4242
  _: 1 /* STABLE */
4329
4243
  }, 16 /* FULL_PROPS */, ["modelValue", "label", "readonly"]),
4330
- vue.createVNode(_component_qas_dialog, {
4244
+ vue.createVNode(_component_qas_dialog, vue.mergeProps({
4331
4245
  modelValue: $data.isOpenedDialog,
4332
4246
  "onUpdate:modelValue": _cache[3] || (_cache[3] = $event => (($data.isOpenedDialog) = $event))
4333
- }, {
4247
+ }, $options.defaultDialogProps), {
4334
4248
  header: vue.withCtx(() => [
4335
4249
  _hoisted_3$8
4336
4250
  ]),
4337
4251
  description: vue.withCtx(() => [
4338
- vue.createVNode(_component_qas_signature_pad, {
4339
- ref: "signaturePadModal",
4340
- empty: $data.isEmpty,
4341
- "onUpdate:empty": _cache[2] || (_cache[2] = $event => (($data.isEmpty) = $event)),
4342
- height: "250"
4343
- }, null, 8 /* PROPS */, ["empty"])
4252
+ vue.createElementVNode("div", {
4253
+ style: vue.normalizeStyle($options.signaturePadWidth)
4254
+ }, [
4255
+ vue.createVNode(_component_qas_signature_pad, {
4256
+ ref: "signaturePadModal",
4257
+ empty: $data.isEmpty,
4258
+ "onUpdate:empty": _cache[2] || (_cache[2] = $event => (($data.isEmpty) = $event)),
4259
+ height: $options.signaturePadHeight
4260
+ }, null, 8 /* PROPS */, ["empty", "height"])
4261
+ ], 4 /* STYLE */)
4344
4262
  ]),
4345
4263
  actions: vue.withCtx(() => [
4346
4264
  vue.createVNode(_component_q_btn, {
@@ -4361,7 +4279,7 @@ function render$o(_ctx, _cache, $props, $setup, $data, $options) {
4361
4279
  }, null, 8 /* PROPS */, ["onClick"])
4362
4280
  ]),
4363
4281
  _: 1 /* STABLE */
4364
- }, 8 /* PROPS */, ["modelValue"])
4282
+ }, 16 /* FULL_PROPS */, ["modelValue"])
4365
4283
  ]))
4366
4284
  }
4367
4285
 
@@ -4425,7 +4343,6 @@ var script$n = {
4425
4343
  prefix,
4426
4344
  type,
4427
4345
  mask,
4428
- pattern,
4429
4346
  maxFiles,
4430
4347
  searchable,
4431
4348
  gmt
@@ -4476,7 +4393,7 @@ var script$n = {
4476
4393
  number: { is: 'qas-input', type: 'number', ...input },
4477
4394
  hidden: { is: 'input', name, type },
4478
4395
  email: { is: 'qas-input', type, ...input },
4479
- password: { is: 'qas-password-input', type, pattern, hideStrengthChecker: !pattern, ...input },
4396
+ password: { is: 'qas-password-input', ...input },
4480
4397
 
4481
4398
  decimal: { ...numericInput, mode: 'decimal' },
4482
4399
  money: { ...numericInput, mode: 'money' },
@@ -4578,6 +4495,15 @@ function render$n(_ctx, _cache, $props, $setup, $data, $options) {
4578
4495
  script$n.render = render$n;
4579
4496
  script$n.__file = "src/components/field/QasField.vue";
4580
4497
 
4498
+ var contextMixin = {
4499
+ computed: {
4500
+ mx_context () {
4501
+ const { limit, ordering, page, search, ...filters } = this.$route.query;
4502
+ return { filters, limit, ordering, page: page ? parseInt(page) : 1, search }
4503
+ }
4504
+ }
4505
+ };
4506
+
4581
4507
  var script$m = {
4582
4508
  name: 'QasFilters',
4583
4509
 
@@ -4621,6 +4547,10 @@ var script$m = {
4621
4547
  url: {
4622
4548
  default: '',
4623
4549
  type: String
4550
+ },
4551
+
4552
+ forceRefetch: {
4553
+ type: Boolean
4624
4554
  }
4625
4555
  },
4626
4556
 
@@ -4750,7 +4680,7 @@ var script$m = {
4750
4680
  },
4751
4681
 
4752
4682
  async fetchFilters () {
4753
- if (this.hasFields || !this.useFilterButton) {
4683
+ if (!this.forceRefetch && (this.hasFields || !this.useFilterButton)) {
4754
4684
  return null
4755
4685
  }
4756
4686
 
@@ -4916,7 +4846,7 @@ function render$m(_ctx, _cache, $props, $setup, $data, $options) {
4916
4846
  label: $options.filterButtonLabel
4917
4847
  }, {
4918
4848
  default: vue.withCtx(() => [
4919
- vue.createVNode(_component_q_menu, { onBeforeShow: $options.fetchFilters }, {
4849
+ vue.createVNode(_component_q_menu, null, {
4920
4850
  default: vue.withCtx(() => [
4921
4851
  ($data.isFetching)
4922
4852
  ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$6, [
@@ -4970,7 +4900,7 @@ function render$m(_ctx, _cache, $props, $setup, $data, $options) {
4970
4900
  }))
4971
4901
  ]),
4972
4902
  _: 1 /* STABLE */
4973
- }, 8 /* PROPS */, ["onBeforeShow"])
4903
+ })
4974
4904
  ]),
4975
4905
  _: 1 /* STABLE */
4976
4906
  }, 8 /* PROPS */, ["color", "label"]))
@@ -5008,8 +4938,95 @@ function render$m(_ctx, _cache, $props, $setup, $data, $options) {
5008
4938
  ]))
5009
4939
  }
5010
4940
 
5011
- script$m.render = render$m;
5012
- script$m.__file = "src/components/filters/QasFilters.vue";
4941
+ script$m.render = render$m;
4942
+ script$m.__file = "src/components/filters/QasFilters.vue";
4943
+
4944
+ const irregularClasses = ['col', 'col-auto', 'fit'];
4945
+
4946
+ var generatorMixin = {
4947
+ props: {
4948
+ columns: {
4949
+ default: () => [],
4950
+ type: [Array, String, Object]
4951
+ },
4952
+
4953
+ fields: {
4954
+ default: () => ({}),
4955
+ type: Object
4956
+ },
4957
+
4958
+ gutter: {
4959
+ default: 'md',
4960
+ type: [String, Boolean],
4961
+ validator: value => ['xs', 'sm', 'md', 'lg', 'xl'].includes(value)
4962
+ }
4963
+ },
4964
+
4965
+ computed: {
4966
+ mx_classes () {
4967
+ const classes = ['row'];
4968
+
4969
+ if (this.gutter) {
4970
+ classes.push(`q-col-gutter-${this.gutter}`);
4971
+ }
4972
+
4973
+ return classes
4974
+ }
4975
+ },
4976
+
4977
+ methods: {
4978
+ mx_getBreakpoint (columns) {
4979
+ const classes = [];
4980
+ const profiles = { col: 'col', xs: 'col-xs', sm: 'col-sm', md: 'col-md', lg: 'col-lg', xl: 'col-xl' };
4981
+ const { fieldProps, classes: renamedClasses, ...formattedColumns } = columns || {};
4982
+
4983
+ for (const key in formattedColumns) {
4984
+ const value = formattedColumns[key];
4985
+ classes.push(irregularClasses.includes(value) ? value : `${profiles[key]}-${value}`);
4986
+ }
4987
+
4988
+ return [...classes, renamedClasses]
4989
+ },
4990
+
4991
+ mx_getFieldClass (index, isGridGenerator) {
4992
+ if (typeof this.columns === 'string') {
4993
+ return irregularClasses.includes(this.columns) ? this.columns : `col-${this.columns}`
4994
+ }
4995
+
4996
+ return Array.isArray(this.columns)
4997
+ ? this.mx_handleColumnsByIndex(index, isGridGenerator)
4998
+ : this.mx_handleColumnsByField(index, isGridGenerator)
4999
+ },
5000
+
5001
+ mx_handleColumnsByField (index, isGridGenerator) {
5002
+ if (!this.columns[index]) {
5003
+ return this.mx_setDefaultColumnClass(isGridGenerator)
5004
+ }
5005
+
5006
+ return this.mx_getBreakpoint(this.columns[index])
5007
+ },
5008
+
5009
+ mx_handleColumnsByIndex (index, isGridGenerator) {
5010
+ const fields = isGridGenerator ? this.fields : this.groupedFields.visible;
5011
+
5012
+ if (!Array.isArray(fields)) {
5013
+ index = Object.keys(fields).findIndex(field => field === index);
5014
+ }
5015
+
5016
+ const length = this.columns.length;
5017
+
5018
+ if (!length) {
5019
+ return this.mx_setDefaultColumnClass(isGridGenerator)
5020
+ }
5021
+
5022
+ return this.mx_getBreakpoint(this.columns[index])
5023
+ },
5024
+
5025
+ mx_setDefaultColumnClass (isGridGenerator) {
5026
+ return isGridGenerator ? 'col-6 col-xs-12 col-sm-4' : 'col-6'
5027
+ }
5028
+ }
5029
+ };
5013
5030
 
5014
5031
  var script$l = {
5015
5032
  name: 'QasFormGenerator',
@@ -5118,27 +5135,123 @@ function render$l(_ctx, _cache, $props, $setup, $data, $options) {
5118
5135
  script$l.render = render$l;
5119
5136
  script$l.__file = "src/components/form-generator/QasFormGenerator.vue";
5120
5137
 
5121
- const history$1 = vue.reactive({ hasPreviousRoute: false, list: [] });
5138
+ var viewMixin = {
5139
+ props: {
5140
+ dialog: {
5141
+ type: Boolean
5142
+ },
5122
5143
 
5123
- function getPreviousRoute (currentRoute) {
5124
- const index = lodashEs.findLastIndex(history$1.list, item => item.name === currentRoute.name);
5144
+ entity: {
5145
+ required: true,
5146
+ type: String
5147
+ },
5125
5148
 
5126
- if (~index) {
5127
- history$1.list.splice(index, 1);
5128
- }
5149
+ url: {
5150
+ default: '',
5151
+ type: String
5152
+ },
5129
5153
 
5130
- history$1.hasPreviousRoute = history$1.list.length > 1;
5131
- return history$1.list[history$1.list.length - 1]
5132
- }
5154
+ fields: {
5155
+ default: () => ({}),
5156
+ type: Object
5157
+ },
5133
5158
 
5134
- function addRoute (route) {
5135
- const routeExistsInList = history$1.list?.[history$1.list?.length - 1]?.name === route.name;
5159
+ errors: {
5160
+ default: () => ({}),
5161
+ type: Object
5162
+ },
5136
5163
 
5137
- if (routeExistsInList) return
5164
+ metadata: {
5165
+ default: () => ({}),
5166
+ type: Object
5167
+ },
5138
5168
 
5139
- history$1.list.push(route);
5140
- history$1.hasPreviousRoute = history$1.list.length > 1;
5141
- }
5169
+ fetching: {
5170
+ type: Boolean
5171
+ }
5172
+ },
5173
+
5174
+ emits: [
5175
+ 'update:fields',
5176
+ 'update:errors',
5177
+ 'update:metadata',
5178
+ 'update:fetching'
5179
+ ],
5180
+
5181
+ data () {
5182
+ return {
5183
+ mx_errors: {},
5184
+ mx_fields: {},
5185
+ mx_metadata: {},
5186
+
5187
+ mx_isFetching: false
5188
+ }
5189
+ },
5190
+
5191
+ watch: {
5192
+ mx_isFetching (value) {
5193
+ this.$emit('update:fetching', value);
5194
+ }
5195
+ },
5196
+
5197
+ computed: {
5198
+ mx_componentTag () {
5199
+ return this.dialog ? 'div' : 'q-page'
5200
+ },
5201
+
5202
+ mx_componentClass () {
5203
+ return !this.dialog && 'container spaced'
5204
+ },
5205
+
5206
+ mx_hasFooterSlot () {
5207
+ return !!(this.$slots.footer)
5208
+ },
5209
+
5210
+ mx_hasHeaderSlot () {
5211
+ return !!(this.$slots.header)
5212
+ }
5213
+ },
5214
+
5215
+ methods: {
5216
+ mx_fetchError (error) {
5217
+ const { response } = error;
5218
+ const exception = response?.data?.exception || error.message;
5219
+
5220
+ this.$qas.error('Ops! Erro ao obter os dados.', exception);
5221
+
5222
+ const status = response?.status;
5223
+ const redirect = ({ 403: 'Forbidden', 404: 'NotFound' })[status];
5224
+
5225
+ if (redirect) {
5226
+ this.$router.replace({ name: redirect });
5227
+ }
5228
+ },
5229
+
5230
+ mx_setErrors (errors = {}) {
5231
+ this.mx_errors = vue.markRaw(errors);
5232
+ },
5233
+
5234
+ mx_setFields (fields = {}) {
5235
+ for (const field in fields) {
5236
+ fields[field].name = humps.camelize(fields[field].name);
5237
+ }
5238
+
5239
+ this.mx_fields = vue.markRaw(fields);
5240
+ },
5241
+
5242
+ mx_setMetadata (metadata = {}) {
5243
+ this.mx_metadata = vue.markRaw(metadata);
5244
+ },
5245
+
5246
+ mx_updateModels (models) {
5247
+ for (const key in models) {
5248
+ if (!models[key]) continue
5249
+
5250
+ this.$emit(`update:${key}`, models[key]);
5251
+ }
5252
+ }
5253
+ }
5254
+ };
5142
5255
 
5143
5256
  var script$k = {
5144
5257
  name: 'QasFormView',
@@ -5148,7 +5261,7 @@ var script$k = {
5148
5261
  QasDialog: script$x
5149
5262
  },
5150
5263
 
5151
- mixins: [viewMixin, screenMixin],
5264
+ mixins: [viewMixin],
5152
5265
 
5153
5266
  props: {
5154
5267
  cancelButton: {
@@ -5158,7 +5271,7 @@ var script$k = {
5158
5271
 
5159
5272
  cancelRoute: {
5160
5273
  default: '',
5161
- type: [Boolean, Object, String]
5274
+ type: [Boolean, Object, String, Function]
5162
5275
  },
5163
5276
 
5164
5277
  customId: {
@@ -5242,7 +5355,7 @@ var script$k = {
5242
5355
 
5243
5356
  computed: {
5244
5357
  cancelButtonClass () {
5245
- return this.mx_isSmall && 'order-last'
5358
+ return this.$qas.screen.isSmall && 'order-last'
5246
5359
  },
5247
5360
 
5248
5361
  fetchURL () {
@@ -5270,17 +5383,13 @@ var script$k = {
5270
5383
  },
5271
5384
 
5272
5385
  saveButtonClass () {
5273
- return this.mx_isSmall && 'order-first'
5386
+ return this.$qas.screen.isSmall && 'order-first'
5274
5387
  },
5275
5388
 
5276
5389
  isCancelButtonDisabled () {
5277
5390
  return this.disable || this.isSubmitting
5278
5391
  },
5279
5392
 
5280
- history () {
5281
- return history$1.list
5282
- },
5283
-
5284
5393
  fieldsNameWithDefaultValue () {
5285
5394
  return Object.keys(this.fields).filter(field => 'default' in this.fields[field])
5286
5395
  }
@@ -5349,7 +5458,7 @@ var script$k = {
5349
5458
  this.mx_updateModels({
5350
5459
  errors: errors,
5351
5460
  fields: this.mx_fields,
5352
- metadata: metadata
5461
+ metadata
5353
5462
  });
5354
5463
 
5355
5464
  if (result) {
@@ -5378,9 +5487,11 @@ var script$k = {
5378
5487
  },
5379
5488
 
5380
5489
  handleCancelRoute () {
5381
- const acceptTypes = ['string', 'object'];
5490
+ if (typeof this.cancelRoute === 'function') {
5491
+ return this.cancelRoute()
5492
+ }
5382
5493
 
5383
- if (this.cancelRoute && acceptTypes.includes(typeof this.cancelRoute)) {
5494
+ if (this.cancelRoute && ['string', 'object'].includes(typeof this.cancelRoute)) {
5384
5495
  return this.$router.push(this.cancelRoute)
5385
5496
  }
5386
5497
 
@@ -5393,6 +5504,8 @@ var script$k = {
5393
5504
  handleDialog (next) {
5394
5505
  this.openDialog();
5395
5506
 
5507
+ const { addRoute } = useHistory();
5508
+
5396
5509
  this.defaultDialogProps.ok.onClick = () => addRoute(this.$route);
5397
5510
  this.defaultDialogProps.cancel.onClick = next;
5398
5511
  },
@@ -5475,7 +5588,9 @@ function render$k(_ctx, _cache, $props, $setup, $data, $options) {
5475
5588
  const _component_q_inner_loading = vue.resolveComponent("q-inner-loading");
5476
5589
  const _directive_close_popup = vue.resolveDirective("close-popup");
5477
5590
 
5478
- return (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.mx_componentTag), null, {
5591
+ return (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.mx_componentTag), {
5592
+ class: vue.normalizeClass(_ctx.mx_componentClass)
5593
+ }, {
5479
5594
  default: vue.withCtx(() => [
5480
5595
  (_ctx.mx_hasHeaderSlot)
5481
5596
  ? (vue.openBlock(), vue.createElementBlock("header", _hoisted_1$d, [
@@ -5547,7 +5662,7 @@ function render$k(_ctx, _cache, $props, $setup, $data, $options) {
5547
5662
  }, 8 /* PROPS */, ["showing"])
5548
5663
  ]),
5549
5664
  _: 3 /* FORWARDED */
5550
- }))
5665
+ }, 8 /* PROPS */, ["class"]))
5551
5666
  }
5552
5667
 
5553
5668
  script$k.render = render$k;
@@ -5556,8 +5671,6 @@ script$k.__file = "src/components/form-view/QasFormView.vue";
5556
5671
  var script$j = {
5557
5672
  name: 'QasGallery',
5558
5673
 
5559
- mixins: [screenMixin],
5560
-
5561
5674
  props: {
5562
5675
  carouselNextIcon: {
5563
5676
  type: String,
@@ -5614,13 +5727,13 @@ var script$j = {
5614
5727
  return this.height || 'auto'
5615
5728
  }
5616
5729
 
5617
- return this.mx_isSmall ? '90px' : '120px'
5730
+ return this.$qas.screen.isSmall ? '90px' : '120px'
5618
5731
  },
5619
5732
 
5620
5733
  galleryColumnsClasses () {
5621
5734
  if (this.isSingleImage) return 'col-12'
5622
5735
 
5623
- return this.mx_isSmall ? 'col-6' : 'col-2'
5736
+ return this.$qas.screen.isSmall ? 'col-6' : 'col-2'
5624
5737
  },
5625
5738
 
5626
5739
  hideShowMore () {
@@ -5755,9 +5868,9 @@ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
5755
5868
  modelValue: $data.imageIndex,
5756
5869
  "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($data.imageIndex) = $event)),
5757
5870
  animated: "",
5758
- arrows: !_ctx.mx_isSmall,
5871
+ arrows: !_ctx.$qas.screen.isSmall,
5759
5872
  "control-text-color": "primary",
5760
- fullscreen: _ctx.mx_isSmall,
5873
+ fullscreen: _ctx.$qas.screen.isSmall,
5761
5874
  height: $options.carouselImageHeight,
5762
5875
  "next-icon": $props.carouselNextIcon,
5763
5876
  "prev-icon": $props.carouselPreviousIcon,
@@ -5773,7 +5886,7 @@ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
5773
5886
  name: index
5774
5887
  }, {
5775
5888
  default: vue.withCtx(() => [
5776
- (_ctx.mx_isSmall)
5889
+ (_ctx.$qas.screen.isSmall)
5777
5890
  ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$5, [
5778
5891
  vue.createVNode(_component_qas_btn, {
5779
5892
  dense: "",
@@ -6537,7 +6650,10 @@ var script$c = {
6537
6650
  QasBtn: script$K,
6538
6651
  QasFormGenerator: script$l,
6539
6652
  QasInput: script$u,
6540
- QasLabel: script$h
6653
+ QasLabel: script$h,
6654
+
6655
+ // vue
6656
+ TransitionGroup: vue.TransitionGroup
6541
6657
  },
6542
6658
 
6543
6659
  props: {
@@ -6701,6 +6817,16 @@ var script$c = {
6701
6817
 
6702
6818
  componentTag () {
6703
6819
  return this.useAnimation ? 'transition-group' : 'div'
6820
+ },
6821
+
6822
+ componentProps () {
6823
+ if (!this.useAnimation) return {}
6824
+
6825
+ return {
6826
+ tag: 'div',
6827
+ enterActiveClass: 'animated slideInDown',
6828
+ leaveActiveClass: 'animated slideOutUp'
6829
+ }
6704
6830
  }
6705
6831
  },
6706
6832
 
@@ -6785,23 +6911,24 @@ var script$c = {
6785
6911
 
6786
6912
  const _hoisted_1$8 = ["id"];
6787
6913
  const _hoisted_2$5 = { class: "text-left" };
6788
- const _hoisted_3$3 = ["id"];
6789
- const _hoisted_4$3 = { class: "flex items-center justify-between q-py-xs" };
6790
- const _hoisted_5$2 = {
6914
+ const _hoisted_3$3 = { ref: "inputContent" };
6915
+ const _hoisted_4$3 = ["id"];
6916
+ const _hoisted_5$2 = { class: "flex items-center justify-between q-py-xs" };
6917
+ const _hoisted_6 = {
6791
6918
  key: 1,
6792
6919
  class: "q-gutter-x-sm"
6793
6920
  };
6794
- const _hoisted_6 = {
6921
+ const _hoisted_7 = {
6795
6922
  key: 0,
6796
6923
  class: "flex items-center qas-nested-fields__actions"
6797
6924
  };
6798
- const _hoisted_7 = { class: "col-auto" };
6799
6925
  const _hoisted_8 = { class: "col-auto" };
6800
- const _hoisted_9 = { class: "col-12" };
6801
- const _hoisted_10 = { class: "q-mt-md" };
6802
- const _hoisted_11 = { class: "col" };
6803
- const _hoisted_12 = { class: "col-auto" };
6804
- const _hoisted_13 = {
6926
+ const _hoisted_9 = { class: "col-auto" };
6927
+ const _hoisted_10 = { class: "col-12" };
6928
+ const _hoisted_11 = { class: "q-mt-md" };
6929
+ const _hoisted_12 = { class: "col" };
6930
+ const _hoisted_13 = { class: "col-auto" };
6931
+ const _hoisted_14 = {
6805
6932
  key: 1,
6806
6933
  class: "q-mt-lg"
6807
6934
  };
@@ -6824,134 +6951,122 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
6824
6951
  }, null, 8 /* PROPS */, ["label"]))
6825
6952
  : vue.createCommentVNode("v-if", true)
6826
6953
  ]),
6827
- vue.createElementVNode("div", null, [
6828
- (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent($options.componentTag), {
6829
- ref: "inputContent",
6830
- name: "fade",
6831
- tag: "div"
6832
- }, {
6954
+ vue.createElementVNode("div", _hoisted_3$3, [
6955
+ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent($options.componentTag), vue.normalizeProps(vue.guardReactiveProps($options.componentProps)), {
6833
6956
  default: vue.withCtx(() => [
6834
6957
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.nested, (row, index) => {
6835
6958
  return (vue.openBlock(), vue.createElementBlock("div", {
6836
6959
  id: `row-${index}`,
6837
- key: index,
6960
+ key: `row-${index}`,
6838
6961
  class: "full-width"
6839
6962
  }, [
6840
- (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent($options.componentTag), {
6841
- name: "fade",
6842
- tag: "div"
6843
- }, {
6844
- default: vue.withCtx(() => [
6845
- (!row[$props.destroyKey])
6846
- ? (vue.openBlock(), vue.createElementBlock("div", {
6847
- key: index,
6848
- class: "col-12 q-mt-md"
6963
+ (!row[$props.destroyKey])
6964
+ ? (vue.openBlock(), vue.createElementBlock("div", {
6965
+ key: index,
6966
+ class: "col-12 q-mt-md"
6967
+ }, [
6968
+ vue.createElementVNode("div", null, [
6969
+ vue.createElementVNode("div", _hoisted_5$2, [
6970
+ (!$props.useSingleLabel)
6971
+ ? (vue.openBlock(), vue.createBlock(_component_qas_label, {
6972
+ key: 0,
6973
+ label: $options.setRowLabel(index)
6974
+ }, null, 8 /* PROPS */, ["label"]))
6975
+ : vue.createCommentVNode("v-if", true),
6976
+ (!$props.useInlineActions)
6977
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6, [
6978
+ ($props.useDuplicate)
6979
+ ? (vue.openBlock(), vue.createBlock(_component_qas_btn, vue.mergeProps({ key: 0 }, $props.btnDuplicateProps, {
6980
+ onClick: $event => ($options.add(row))
6981
+ }), null, 16 /* FULL_PROPS */, ["onClick"]))
6982
+ : vue.createCommentVNode("v-if", true),
6983
+ ($options.showDestroyBtn)
6984
+ ? (vue.openBlock(), vue.createBlock(_component_qas_btn, vue.mergeProps({ key: 1 }, $props.btnDestroyProps, {
6985
+ onClick: $event => ($options.destroy(index, row))
6986
+ }), null, 16 /* FULL_PROPS */, ["onClick"]))
6987
+ : vue.createCommentVNode("v-if", true)
6988
+ ]))
6989
+ : vue.createCommentVNode("v-if", true)
6990
+ ]),
6991
+ vue.createElementVNode("div", {
6992
+ ref_for: true,
6993
+ ref: "formGenerator",
6994
+ class: "col-12 justify-between q-col-gutter-x-md row"
6849
6995
  }, [
6850
- vue.createElementVNode("div", null, [
6851
- vue.createElementVNode("div", _hoisted_4$3, [
6852
- (!$props.useSingleLabel)
6853
- ? (vue.openBlock(), vue.createBlock(_component_qas_label, {
6854
- key: 0,
6855
- label: $options.setRowLabel(index)
6856
- }, null, 8 /* PROPS */, ["label"]))
6857
- : vue.createCommentVNode("v-if", true),
6858
- (!$props.useInlineActions)
6859
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$2, [
6860
- ($props.useDuplicate)
6861
- ? (vue.openBlock(), vue.createBlock(_component_qas_btn, vue.mergeProps({ key: 0 }, $props.btnDuplicateProps, {
6862
- onClick: $event => ($options.add(row))
6863
- }), null, 16 /* FULL_PROPS */, ["onClick"]))
6864
- : vue.createCommentVNode("v-if", true),
6865
- ($options.showDestroyBtn)
6866
- ? (vue.openBlock(), vue.createBlock(_component_qas_btn, vue.mergeProps({ key: 1 }, $props.btnDestroyProps, {
6867
- onClick: $event => ($options.destroy(index, row))
6868
- }), null, 16 /* FULL_PROPS */, ["onClick"]))
6869
- : vue.createCommentVNode("v-if", true)
6870
- ]))
6871
- : vue.createCommentVNode("v-if", true)
6872
- ]),
6873
- vue.createElementVNode("div", {
6874
- ref_for: true,
6875
- ref: "formGenerator",
6876
- class: "col-12 justify-between q-col-gutter-x-md row"
6877
- }, [
6878
- vue.renderSlot(_ctx.$slots, "fields", {
6879
- errors: $options.transformedErrors,
6880
- fields: $options.children,
6881
- index: index,
6882
- updateValue: $options.updateValuesFromInput
6883
- }, () => [
6884
- vue.createVNode(_component_qas_form_generator, {
6885
- modelValue: $data.nested[index],
6886
- "onUpdate:modelValue": [$event => (($data.nested[index]) = $event), $event => ($options.updateValuesFromInput($event, index))],
6887
- class: vue.normalizeClass($options.formClasses),
6888
- columns: $props.formColumns,
6889
- errors: $options.transformedErrors[index],
6890
- fields: $options.children,
6891
- "fields-props": $props.fieldsProps
6892
- }, vue.createSlots({ _: 2 /* DYNAMIC */ }, [
6893
- vue.renderList(_ctx.$slots, (slot, key) => {
6894
- return {
6895
- name: key,
6896
- fn: vue.withCtx((scope) => [
6897
- vue.renderSlot(_ctx.$slots, key, vue.mergeProps(scope, {
6898
- errors: $options.transformedErrors,
6899
- index: index
6900
- }))
6901
- ])
6902
- }
6903
- })
6904
- ]), 1032 /* PROPS, DYNAMIC_SLOTS */, ["modelValue", "onUpdate:modelValue", "class", "columns", "errors", "fields", "fields-props"])
6905
- ]),
6906
- ($props.useInlineActions)
6907
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6, [
6908
- vue.createElementVNode("div", _hoisted_7, [
6909
- ($props.useDuplicate)
6910
- ? (vue.openBlock(), vue.createBlock(_component_qas_btn, {
6911
- key: 0,
6912
- color: "primary",
6913
- flat: "",
6914
- icon: "o_content_copy",
6915
- round: "",
6916
- onClick: $event => ($options.add(row))
6917
- }, null, 8 /* PROPS */, ["onClick"]))
6918
- : vue.createCommentVNode("v-if", true)
6919
- ]),
6920
- vue.createElementVNode("div", _hoisted_8, [
6921
- ($options.showDestroyBtn)
6922
- ? (vue.openBlock(), vue.createBlock(_component_qas_btn, {
6923
- key: 0,
6924
- color: "negative",
6925
- flat: "",
6926
- icon: "o_cancel",
6927
- round: "",
6928
- onClick: $event => ($options.destroy(index, row))
6929
- }, null, 8 /* PROPS */, ["onClick"]))
6930
- : vue.createCommentVNode("v-if", true)
6931
- ])
6932
- ]))
6933
- : vue.createCommentVNode("v-if", true)
6934
- ], 512 /* NEED_PATCH */),
6935
- vue.createElementVNode("div", _hoisted_9, [
6936
- vue.renderSlot(_ctx.$slots, "custom-fields", {
6937
- fields: $options.children,
6938
- index: index,
6939
- model: $data.nested[index],
6940
- updateValue: $options.updateValuesFromInput
6996
+ vue.renderSlot(_ctx.$slots, "fields", {
6997
+ errors: $options.transformedErrors,
6998
+ fields: $options.children,
6999
+ index: index,
7000
+ updateValue: $options.updateValuesFromInput
7001
+ }, () => [
7002
+ vue.createVNode(_component_qas_form_generator, {
7003
+ modelValue: $data.nested[index],
7004
+ "onUpdate:modelValue": [$event => (($data.nested[index]) = $event), $event => ($options.updateValuesFromInput($event, index))],
7005
+ class: vue.normalizeClass($options.formClasses),
7006
+ columns: $props.formColumns,
7007
+ errors: $options.transformedErrors[index],
7008
+ fields: $options.children,
7009
+ "fields-props": $props.fieldsProps
7010
+ }, vue.createSlots({ _: 2 /* DYNAMIC */ }, [
7011
+ vue.renderList(_ctx.$slots, (slot, key) => {
7012
+ return {
7013
+ name: key,
7014
+ fn: vue.withCtx((scope) => [
7015
+ vue.renderSlot(_ctx.$slots, key, vue.mergeProps(scope, {
7016
+ errors: $options.transformedErrors,
7017
+ index: index
7018
+ }))
7019
+ ])
7020
+ }
6941
7021
  })
6942
- ])
6943
- ])
6944
- ]))
6945
- : vue.createCommentVNode("v-if", true)
6946
- ]),
6947
- _: 2 /* DYNAMIC */
6948
- }, 1024 /* DYNAMIC_SLOTS */))
6949
- ], 8 /* PROPS */, _hoisted_3$3))
7022
+ ]), 1032 /* PROPS, DYNAMIC_SLOTS */, ["modelValue", "onUpdate:modelValue", "class", "columns", "errors", "fields", "fields-props"])
7023
+ ]),
7024
+ ($props.useInlineActions)
7025
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7, [
7026
+ vue.createElementVNode("div", _hoisted_8, [
7027
+ ($props.useDuplicate)
7028
+ ? (vue.openBlock(), vue.createBlock(_component_qas_btn, {
7029
+ key: 0,
7030
+ color: "primary",
7031
+ flat: "",
7032
+ icon: "o_content_copy",
7033
+ round: "",
7034
+ onClick: $event => ($options.add(row))
7035
+ }, null, 8 /* PROPS */, ["onClick"]))
7036
+ : vue.createCommentVNode("v-if", true)
7037
+ ]),
7038
+ vue.createElementVNode("div", _hoisted_9, [
7039
+ ($options.showDestroyBtn)
7040
+ ? (vue.openBlock(), vue.createBlock(_component_qas_btn, {
7041
+ key: 0,
7042
+ color: "negative",
7043
+ flat: "",
7044
+ icon: "o_cancel",
7045
+ round: "",
7046
+ onClick: $event => ($options.destroy(index, row))
7047
+ }, null, 8 /* PROPS */, ["onClick"]))
7048
+ : vue.createCommentVNode("v-if", true)
7049
+ ])
7050
+ ]))
7051
+ : vue.createCommentVNode("v-if", true)
7052
+ ], 512 /* NEED_PATCH */),
7053
+ vue.createElementVNode("div", _hoisted_10, [
7054
+ vue.renderSlot(_ctx.$slots, "custom-fields", {
7055
+ fields: $options.children,
7056
+ index: index,
7057
+ model: $data.nested[index],
7058
+ updateValue: $options.updateValuesFromInput
7059
+ })
7060
+ ])
7061
+ ])
7062
+ ]))
7063
+ : vue.createCommentVNode("v-if", true)
7064
+ ], 8 /* PROPS */, _hoisted_4$3))
6950
7065
  }), 128 /* KEYED_FRAGMENT */))
6951
7066
  ]),
6952
7067
  _: 3 /* FORWARDED */
6953
- }, 512 /* NEED_PATCH */)),
6954
- vue.createElementVNode("div", _hoisted_10, [
7068
+ }, 16 /* FULL_PROPS */)),
7069
+ vue.createElementVNode("div", _hoisted_11, [
6955
7070
  vue.renderSlot(_ctx.$slots, "add-input", { add: $options.add }, () => [
6956
7071
  ($props.useInlineActions)
6957
7072
  ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -6959,7 +7074,7 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
6959
7074
  class: "cursor-pointer items-center q-col-gutter-x-md q-mt-md row",
6960
7075
  onClick: _cache[1] || (_cache[1] = $event => ($options.add()))
6961
7076
  }, [
6962
- vue.createElementVNode("div", _hoisted_11, [
7077
+ vue.createElementVNode("div", _hoisted_12, [
6963
7078
  vue.createVNode(_component_qas_input, {
6964
7079
  class: "disabled no-pointer-events",
6965
7080
  "hide-bottom-space": "",
@@ -6968,7 +7083,7 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
6968
7083
  onFocus: _cache[0] || (_cache[0] = $event => ($options.add()))
6969
7084
  }, null, 8 /* PROPS */, ["label"])
6970
7085
  ]),
6971
- vue.createElementVNode("div", _hoisted_12, [
7086
+ vue.createElementVNode("div", _hoisted_13, [
6972
7087
  vue.createVNode(_component_qas_btn, {
6973
7088
  color: "green",
6974
7089
  flat: "",
@@ -6977,9 +7092,9 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
6977
7092
  })
6978
7093
  ])
6979
7094
  ]))
6980
- : (vue.openBlock(), vue.createElementBlock("div", _hoisted_13, [
7095
+ : (vue.openBlock(), vue.createElementBlock("div", _hoisted_14, [
6981
7096
  vue.createVNode(_component_qas_btn, {
6982
- class: "full-width q-py-sm",
7097
+ class: "full-width q-py-md",
6983
7098
  icon: "o_add",
6984
7099
  outline: "",
6985
7100
  onClick: _cache[2] || (_cache[2] = $event => ($options.add()))
@@ -6992,13 +7107,15 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
6992
7107
  ]))
6993
7108
  ])
6994
7109
  ])
6995
- ])
7110
+ ], 512 /* NEED_PATCH */)
6996
7111
  ], 8 /* PROPS */, _hoisted_1$8))
6997
7112
  }
6998
7113
 
6999
7114
  script$c.render = render$c;
7000
7115
  script$c.__file = "src/components/nested-fields/QasNestedFields.vue";
7001
7116
 
7117
+ const { hasPreviousRoute, history: history$1, getPreviousRoute } = useHistory();
7118
+
7002
7119
  var script$b = {
7003
7120
  name: 'QasPageHeader',
7004
7121
 
@@ -7026,7 +7143,7 @@ var script$b = {
7026
7143
 
7027
7144
  computed: {
7028
7145
  hasPreviousRoute () {
7029
- return history$1.hasPreviousRoute
7146
+ return hasPreviousRoute.value
7030
7147
  },
7031
7148
 
7032
7149
  transformedBreadcrumbs () {
@@ -7143,8 +7260,6 @@ var script$a = {
7143
7260
  QasGridGenerator: script$i
7144
7261
  },
7145
7262
 
7146
- mixins: [screenMixin],
7147
-
7148
7263
  props: {
7149
7264
  columns: {
7150
7265
  type: Object,
@@ -7185,7 +7300,7 @@ var script$a = {
7185
7300
 
7186
7301
  computed: {
7187
7302
  directionClasses () {
7188
- return this.mx_untilMedium ? 'col' : 'row items-center'
7303
+ return this.$qas.screen.untilMedium ? 'col' : 'row items-center'
7189
7304
  },
7190
7305
 
7191
7306
  userAvatarImage () {
@@ -7193,7 +7308,7 @@ var script$a = {
7193
7308
  },
7194
7309
 
7195
7310
  avatarSize () {
7196
- return this.mx_isSmall ? '145px' : '188px'
7311
+ return this.$qas.screen.isSmall ? '145px' : '188px'
7197
7312
  }
7198
7313
  },
7199
7314
 
@@ -7461,6 +7576,7 @@ var script$8 = {
7461
7576
  this.fuse = new Fuse__default["default"](value, this.defaultFuseOptions);
7462
7577
 
7463
7578
  this.setResults(this.search);
7579
+ this.updateResultsModel(value);
7464
7580
  },
7465
7581
 
7466
7582
  deep: true
@@ -7477,7 +7593,7 @@ var script$8 = {
7477
7593
 
7478
7594
  searchResults: {
7479
7595
  handler (value) {
7480
- this.$emit('update:results', value.map(result => result.item || result));
7596
+ this.updateResultsModel(value);
7481
7597
  },
7482
7598
  immediate: true
7483
7599
  }
@@ -7494,6 +7610,10 @@ var script$8 = {
7494
7610
  this.searchResults = value
7495
7611
  ? this.fuse.search(value)
7496
7612
  : this.list;
7613
+ },
7614
+
7615
+ updateResultsModel (value) {
7616
+ this.$emit('update:results', value.map(result => result.item || result));
7497
7617
  }
7498
7618
  }
7499
7619
  };
@@ -7769,8 +7889,6 @@ var script$6 = {
7769
7889
  QasSearchBox: script$8
7770
7890
  },
7771
7891
 
7772
- mixins: [screenMixin],
7773
-
7774
7892
  props: {
7775
7893
  deleteOnly: {
7776
7894
  type: Boolean
@@ -7851,15 +7969,17 @@ var script$6 = {
7851
7969
  immediate: true
7852
7970
  },
7853
7971
 
7854
- modelValue (value) {
7855
- this.values = [...value];
7972
+ modelValue: {
7973
+ handler (value) {
7974
+ this.values = [...value];
7975
+ },
7976
+
7977
+ immediate: true
7856
7978
  }
7857
7979
  },
7858
7980
 
7859
7981
  created () {
7860
- this.values = [...this.modelValue];
7861
-
7862
- this.handleOptions();
7982
+ this.handleList();
7863
7983
  },
7864
7984
 
7865
7985
  methods: {
@@ -7874,9 +7994,9 @@ var script$6 = {
7874
7994
  const isSelected = this.values.includes(value);
7875
7995
 
7876
7996
  return {
7877
- dense: this.mx_isSmall,
7997
+ dense: this.$qas.screen.isSmall,
7878
7998
  hideLabelOnSmallScreen: true,
7879
- icon: !this.mx_isSmall ? undefined : isSelected ? 'o_close' : 'o_add',
7999
+ icon: !this.$qas.screen.isSmall ? undefined : isSelected ? 'o_close' : 'o_add',
7880
8000
  label: isSelected ? 'Remover' : 'Adicionar',
7881
8001
  outline: isSelected,
7882
8002
  size: 'sm'
@@ -7887,7 +8007,7 @@ var script$6 = {
7887
8007
  return this.values.includes(item.value) ? this.remove(item) : this.add(item)
7888
8008
  },
7889
8009
 
7890
- handleOptions () {
8010
+ handleList () {
7891
8011
  if (this.modelValue.length) {
7892
8012
  return this.sortList()
7893
8013
  }
@@ -7918,8 +8038,8 @@ var script$6 = {
7918
8038
 
7919
8039
  sortList () {
7920
8040
  this.sortedList = this.deleteOnly
7921
- ? this.list.filter(option => this.modelValue.includes(option.value))
7922
- : lodashEs.sortBy(this.list, option => !this.modelValue.includes(option.value));
8041
+ ? this.list.filter(item => this.modelValue.includes(item.value))
8042
+ : lodashEs.sortBy(this.list, item => !this.modelValue.includes(item.value));
7923
8043
  },
7924
8044
 
7925
8045
  updateModel (model) {
@@ -8277,8 +8397,6 @@ script$4.__file = "src/components/sortable/QasSortable.vue";
8277
8397
  var script$3 = {
8278
8398
  name: 'QasTableGenerator',
8279
8399
 
8280
- mixins: [screenMixin],
8281
-
8282
8400
  props: {
8283
8401
  columns: {
8284
8402
  default: () => [],
@@ -8405,7 +8523,7 @@ var script$3 = {
8405
8523
  },
8406
8524
 
8407
8525
  tableClass () {
8408
- return this.mx_isSmall && 'qas-table-generator--mobile'
8526
+ return this.$qas.screen.isSmall && 'qas-table-generator--mobile'
8409
8527
  },
8410
8528
 
8411
8529
  hasScrollOnGrab () {
@@ -8446,8 +8564,8 @@ var script$3 = {
8446
8564
  },
8447
8565
 
8448
8566
  getFullTableWidth () {
8449
- const tableElemet = this.getTableElement();
8450
- return tableElemet?.getBoundingClientRect?.()?.width
8567
+ const tableElement = this.getTableElement();
8568
+ return tableElement?.getBoundingClientRect?.()?.width
8451
8569
  },
8452
8570
 
8453
8571
  getContainerTableWidth () {
@@ -8646,8 +8764,6 @@ var script$1 = {
8646
8764
  QasDialog: script$x
8647
8765
  },
8648
8766
 
8649
- mixins: [screenMixin],
8650
-
8651
8767
  props: {
8652
8768
  dialogProps: {
8653
8769
  type: Object,
@@ -8687,7 +8803,7 @@ var script$1 = {
8687
8803
 
8688
8804
  computed: {
8689
8805
  truncateTextClass () {
8690
- return (this.isTruncated || this.mx_isSmall) && 'ellipsis q-pr-sm'
8806
+ return (this.isTruncated || this.$qas.screen.isSmall) && 'ellipsis q-pr-sm'
8691
8807
  },
8692
8808
 
8693
8809
  isTruncated () {
@@ -8789,8 +8905,6 @@ var script = {
8789
8905
  QasSearchBox: script$8
8790
8906
  },
8791
8907
 
8792
- mixins: [screenMixin],
8793
-
8794
8908
  props: {
8795
8909
  emitValue: {
8796
8910
  type: Boolean
@@ -8840,21 +8954,23 @@ var script = {
8840
8954
  firstQueue: [],
8841
8955
  optionsList: [],
8842
8956
  secondQueue: [],
8843
- selectedList: []
8957
+ selectedList: [],
8958
+ firstResults: [],
8959
+ secondResults: []
8844
8960
  }
8845
8961
  },
8846
8962
 
8847
8963
  computed: {
8848
8964
  actionsClass () {
8849
- return !this.mx_isSmall && 'column'
8965
+ return !this.$qas.screen.isSmall && 'column'
8850
8966
  },
8851
8967
 
8852
8968
  gutterClass () {
8853
- return `q-col-gutter-${this.mx_untilLarge ? 'md' : 'xl'}`
8969
+ return `q-col-gutter-${this.$qas.screen.untilLarge ? 'md' : 'xl'}`
8854
8970
  },
8855
8971
 
8856
8972
  iconClass () {
8857
- return !this.mx_isSmall && 'qas-transfer__icon'
8973
+ return !this.$qas.screen.isSmall && 'qas-transfer__icon'
8858
8974
  },
8859
8975
 
8860
8976
  searchBoxProps () {
@@ -8978,13 +9094,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
8978
9094
  quantity: $data.optionsList.length
8979
9095
  }, null, 8 /* PROPS */, ["label", "quantity"]),
8980
9096
  vue.createVNode(_component_qas_search_box, vue.mergeProps({
8981
- "form-mode": "",
8982
- list: $data.optionsList
9097
+ results: $data.firstResults,
9098
+ "onUpdate:results": _cache[0] || (_cache[0] = $event => (($data.firstResults) = $event)),
9099
+ list: $data.optionsList,
9100
+ outlined: ""
8983
9101
  }, $options.searchBoxProps), {
8984
- default: vue.withCtx(({ results }) => [
9102
+ default: vue.withCtx(() => [
8985
9103
  vue.createVNode(_component_q_list, { separator: "" }, {
8986
9104
  default: vue.withCtx(() => [
8987
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(results, (item, index) => {
9105
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.firstResults, (item, index) => {
8988
9106
  return (vue.openBlock(), vue.createBlock(_component_q_item, {
8989
9107
  key: index,
8990
9108
  class: vue.normalizeClass($options.getItemClass(item, true)),
@@ -9005,11 +9123,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
9005
9123
  }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["class", "onClick"]))
9006
9124
  }), 128 /* KEYED_FRAGMENT */))
9007
9125
  ]),
9008
- _: 2 /* DYNAMIC */
9009
- }, 1024 /* DYNAMIC_SLOTS */)
9126
+ _: 3 /* FORWARDED */
9127
+ })
9010
9128
  ]),
9011
9129
  _: 3 /* FORWARDED */
9012
- }, 16 /* FULL_PROPS */, ["list"])
9130
+ }, 16 /* FULL_PROPS */, ["results", "list"])
9013
9131
  ]),
9014
9132
  vue.createElementVNode("div", {
9015
9133
  class: vue.normalizeClass(["col-12 col-sm-auto items-center justify-center q-col-gutter-md row", $options.actionsClass])
@@ -9022,7 +9140,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
9022
9140
  flat: "",
9023
9141
  icon: "o_arrow_circle_down",
9024
9142
  rounded: "",
9025
- onClick: _cache[0] || (_cache[0] = $event => ($options.setSelectedFromClick(true)))
9143
+ onClick: _cache[1] || (_cache[1] = $event => ($options.setSelectedFromClick(true)))
9026
9144
  }, null, 8 /* PROPS */, ["class", "disabled"]),
9027
9145
  vue.createVNode(_component_q_tooltip, {
9028
9146
  anchor: "top middle",
@@ -9043,7 +9161,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
9043
9161
  flat: "",
9044
9162
  icon: "o_arrow_circle_up",
9045
9163
  rounded: "",
9046
- onClick: _cache[1] || (_cache[1] = $event => ($options.setSelectedFromClick()))
9164
+ onClick: _cache[2] || (_cache[2] = $event => ($options.setSelectedFromClick()))
9047
9165
  }, null, 8 /* PROPS */, ["class", "disabled"]),
9048
9166
  vue.createVNode(_component_q_tooltip, {
9049
9167
  anchor: "bottom middle",
@@ -9062,16 +9180,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
9062
9180
  label: "Selecionadas",
9063
9181
  quantity: $data.selectedList.length
9064
9182
  }, null, 8 /* PROPS */, ["quantity"]),
9065
- vue.createVNode(_component_qas_search_box, vue.mergeProps($options.searchBoxProps, {
9183
+ vue.createVNode(_component_qas_search_box, vue.mergeProps({
9184
+ results: $data.secondResults,
9185
+ "onUpdate:results": _cache[3] || (_cache[3] = $event => (($data.secondResults) = $event))
9186
+ }, $options.searchBoxProps, {
9066
9187
  "empty-list-height": "300px",
9067
- "form-mode": "",
9068
9188
  label: "Selecionadas",
9069
- list: $data.selectedList
9189
+ list: $data.selectedList,
9190
+ outlined: ""
9070
9191
  }), {
9071
- default: vue.withCtx(({ results }) => [
9192
+ default: vue.withCtx(() => [
9072
9193
  vue.createVNode(_component_q_list, { separator: "" }, {
9073
9194
  default: vue.withCtx(() => [
9074
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(results, (item, index) => {
9195
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.secondResults, (item, index) => {
9075
9196
  return (vue.openBlock(), vue.createBlock(_component_q_item, {
9076
9197
  key: index,
9077
9198
  class: vue.normalizeClass($options.getItemClass(item)),
@@ -9092,11 +9213,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
9092
9213
  }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["class", "onClick"]))
9093
9214
  }), 128 /* KEYED_FRAGMENT */))
9094
9215
  ]),
9095
- _: 2 /* DYNAMIC */
9096
- }, 1024 /* DYNAMIC_SLOTS */)
9216
+ _: 3 /* FORWARDED */
9217
+ })
9097
9218
  ]),
9098
9219
  _: 3 /* FORWARDED */
9099
- }, 16 /* FULL_PROPS */, ["list"])
9220
+ }, 16 /* FULL_PROPS */, ["results", "list"])
9100
9221
  ])
9101
9222
  ], 2 /* CLASS */))
9102
9223
  }
@@ -9106,7 +9227,7 @@ script.__file = "src/components/transfer/QasTransfer.vue";
9106
9227
 
9107
9228
  var name = "@bildvitta/quasar-ui-asteroid";
9108
9229
  var description = "Asteroid";
9109
- var version$1 = "3.0.0-alpha.3";
9230
+ var version$1 = "3.0.0-beta.3";
9110
9231
  var author = "Bild & Vitta <systemteam@bild.com.br>";
9111
9232
  var license = "MIT";
9112
9233
  var main = "dist/asteroid.cjs.min.js";
@@ -9187,6 +9308,20 @@ var packageInfo = {
9187
9308
  vetur: vetur
9188
9309
  };
9189
9310
 
9311
+ var Test = {
9312
+ name: 'test',
9313
+
9314
+ bind (element, { arg: argument, value }) {
9315
+ if (element && argument) {
9316
+ element.dataset.test = argument;
9317
+ }
9318
+
9319
+ if (element && value) {
9320
+ element.dataset.testKey = value;
9321
+ }
9322
+ }
9323
+ };
9324
+
9190
9325
  const version = packageInfo.version;
9191
9326
 
9192
9327
  function install (app) {
@@ -9248,8 +9383,11 @@ function install (app) {
9248
9383
  app.config.globalProperties.$qas = {
9249
9384
  dialog: Dialog,
9250
9385
  error: NotifyError,
9251
- success: NotifySuccess
9386
+ success: NotifySuccess,
9387
+ screen: Screen()
9252
9388
  };
9389
+
9390
+ app.directive(Test.name, Test);
9253
9391
  }
9254
9392
 
9255
9393
  exports.Dialog = Dialog;
@@ -9303,5 +9441,6 @@ exports.QasTabsGenerator = script$2;
9303
9441
  exports.QasTextTruncate = script$1;
9304
9442
  exports.QasTransfer = script;
9305
9443
  exports.QasUploader = script$q;
9444
+ exports.Screen = Screen;
9306
9445
  exports.install = install;
9307
9446
  exports.version = version;