@bildvitta/quasar-ui-asteroid 3.0.0-beta.2 → 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 (33) hide show
  1. package/dist/api/QasBtn.json +5 -2
  2. package/dist/asteroid.cjs.js +370 -419
  3. package/dist/asteroid.cjs.min.js +2 -2
  4. package/dist/asteroid.esm.css +1 -1
  5. package/dist/asteroid.esm.js +370 -419
  6. package/dist/asteroid.esm.min.js +2 -2
  7. package/dist/asteroid.umd.css +1 -1
  8. package/dist/asteroid.umd.js +373 -422
  9. package/dist/asteroid.umd.min.js +2 -2
  10. package/dist/vetur/asteroid-attributes.json +4 -0
  11. package/dist/vetur/asteroid-tags.json +2 -1
  12. package/package.json +1 -1
  13. package/src/components/actions/QasActions.vue +1 -5
  14. package/src/components/app-menu/QasAppMenu.vue +1 -4
  15. package/src/components/btn/QasBtn.vue +9 -10
  16. package/src/components/btn/QasBtn.yml +4 -1
  17. package/src/components/dialog/QasDialog.vue +2 -6
  18. package/src/components/form-view/QasFormView.vue +4 -4
  19. package/src/components/gallery/QasGallery.vue +4 -8
  20. package/src/components/profile/QasProfile.vue +2 -5
  21. package/src/components/select-list/QasSelectList.vue +2 -5
  22. package/src/components/signature-uploader/QasSignatureUploader.vue +6 -9
  23. package/src/components/table-generator/QasTableGenerator.vue +1 -4
  24. package/src/components/text-truncate/QasTextTruncate.vue +1 -4
  25. package/src/components/transfer/QasTransfer.vue +3 -6
  26. package/src/composables/useForm.js +3 -0
  27. package/src/css/design-system/button.scss +6 -0
  28. package/src/css/design-system/index.scss +2 -0
  29. package/src/css/design-system/typography.scss +91 -0
  30. package/src/index.scss +1 -0
  31. package/src/mixins/index.js +1 -3
  32. package/src/plugins/screen/Screen.js +5 -0
  33. package/src/mixins/screen.js +0 -34
@@ -1,13 +1,13 @@
1
1
  /*!
2
- * @bildvitta/quasar-ui-asteroid v3.0.0-beta.2
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
6
  (function (global, factory) {
7
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('humps'), require('vue'), require('date-fns'), require('date-fns/locale'), require('quasar'), require('lodash-es'), require('autonumeric'), require('pica'), require('signature_pad'), require('vue-router'), require('fuse.js'), require('sortablejs'), require('@fawmi/vue-google-maps')) :
8
- typeof define === 'function' && define.amd ? define(['humps', 'vue', 'date-fns', 'date-fns/locale', 'quasar', 'lodash-es', 'autonumeric', 'pica', 'signature_pad', 'vue-router', 'fuse.js', 'sortablejs', '@fawmi/vue-google-maps'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global["{{ umdExportName }}"] = factory(global.humps, global.Vue, global.dateFns, global.dateFnsLocale, global.Quasar, global._, global.AutoNumeric, global.Pica, global.SignaturePad, global.VueRouter, global.Fuse, global.Sortable, global.VueGoogleMaps));
10
- })(this, (function (humps, vue, dateFns, locale, quasar, lodashEs, AutoNumeric, Pica, SignaturePad, vueRouter, Fuse, Sortable, VueGoogleMaps) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('vue'), require('humps'), require('date-fns'), require('date-fns/locale'), require('quasar'), require('lodash-es'), require('autonumeric'), require('pica'), require('signature_pad'), require('vue-router'), require('fuse.js'), require('sortablejs'), require('@fawmi/vue-google-maps')) :
8
+ typeof define === 'function' && define.amd ? define(['vue', 'humps', 'date-fns', 'date-fns/locale', 'quasar', 'lodash-es', 'autonumeric', 'pica', 'signature_pad', 'vue-router', 'fuse.js', 'sortablejs', '@fawmi/vue-google-maps'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global["{{ umdExportName }}"] = factory(global.Vue, global.humps, global.dateFns, global.dateFnsLocale, global.Quasar, global._, global.AutoNumeric, global.Pica, global.SignaturePad, global.VueRouter, global.Fuse, global.Sortable, global.VueGoogleMaps));
10
+ })(this, (function (vue, humps, dateFns, locale, quasar, lodashEs, AutoNumeric, Pica, SignaturePad, vueRouter, Fuse, Sortable, VueGoogleMaps) { 'use strict';
11
11
 
12
12
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
13
 
@@ -18,342 +18,9 @@
18
18
  var Sortable__default = /*#__PURE__*/_interopDefaultLegacy(Sortable);
19
19
  var VueGoogleMaps__default = /*#__PURE__*/_interopDefaultLegacy(VueGoogleMaps);
20
20
 
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 = vue.markRaw(errors);
328
- },
329
-
330
- mx_setFields (fields = {}) {
331
- for (const field in fields) {
332
- fields[field].name = humps.camelize(fields[field].name);
333
- }
334
-
335
- this.mx_fields = vue.markRaw(fields);
336
- },
337
-
338
- mx_setMetadata (metadata = {}) {
339
- this.mx_metadata = vue.markRaw(metadata);
340
- },
341
-
342
- mx_updateModels (models) {
343
- for (const key in models) {
344
- if (!models[key]) continue
345
-
346
- this.$emit(`update:${key}`, models[key]);
347
- }
348
- }
349
- }
350
- };
351
-
352
21
  var script$L = {
353
22
  name: 'QasActions',
354
23
 
355
- mixins: [screenMixin],
356
-
357
24
  props: {
358
25
  align: {
359
26
  default: 'end',
@@ -373,7 +40,7 @@
373
40
  return [
374
41
  `justify-${this.align}`,
375
42
  `q-col-gutter-${this.gutter}`,
376
- this.mx_isSmall ? 'column reverse' : 'row'
43
+ this.$qas.screen.isSmall ? 'column reverse' : 'row'
377
44
  ]
378
45
  }
379
46
  }
@@ -401,30 +68,31 @@
401
68
  var script$K = {
402
69
  name: 'QasBtn',
403
70
 
404
- mixins: [screenMixin],
405
-
406
71
  props: {
407
72
  hideLabelOnSmallScreen: {
408
73
  type: Boolean
74
+ },
75
+
76
+ label: {
77
+ type: String,
78
+ default: ''
409
79
  }
410
80
  },
411
81
 
412
82
  computed: {
413
83
  attributes () {
414
- const { label, ...attributes } = this.$attrs;
415
-
416
84
  return {
417
- ...(this.showLabel && { label }),
418
- ...attributes
85
+ ...(this.showLabel && { label: this.label }),
86
+ ...this.$attrs
419
87
  }
420
88
  },
421
89
 
422
90
  hasLabel () {
423
- return !!(this.$attrs.label || this.$slots.default)
91
+ return !!(this.label || this.$slots.default)
424
92
  },
425
93
 
426
94
  showLabel () {
427
- return this.hasLabel && !(this.hideLabelOnSmallScreen && this.mx_isSmall)
95
+ return this.hasLabel && !(this.hideLabelOnSmallScreen && this.$qas.screen.isSmall)
428
96
  },
429
97
 
430
98
  slots () {
@@ -1519,8 +1187,6 @@
1519
1187
  var script$E = {
1520
1188
  name: 'QasAppMenu',
1521
1189
 
1522
- mixins: [screenMixin],
1523
-
1524
1190
  props: {
1525
1191
  items: {
1526
1192
  default: () => [],
@@ -1622,7 +1288,7 @@
1622
1288
  },
1623
1289
 
1624
1290
  beforeHide () {
1625
- if (this.mx_isLarge) {
1291
+ if (this.$qas.screen.isLarge) {
1626
1292
  this.model = true;
1627
1293
  this.miniMode = !this.miniMode;
1628
1294
  }
@@ -2521,8 +2187,6 @@
2521
2187
  QasActions: script$L
2522
2188
  },
2523
2189
 
2524
- mixins: [screenMixin],
2525
-
2526
2190
  props: {
2527
2191
  actionsProps: {
2528
2192
  default: () => ({}),
@@ -2605,8 +2269,8 @@
2605
2269
 
2606
2270
  style () {
2607
2271
  return {
2608
- maxWidth: this.maxWidth || (this.mx_isSmall ? '' : '600px'),
2609
- minWidth: this.minWidth || (this.mx_isSmall ? '' : '400px')
2272
+ maxWidth: this.maxWidth || (this.$qas.screen.isSmall ? '' : '600px'),
2273
+ minWidth: this.minWidth || (this.$qas.screen.isSmall ? '' : '400px')
2610
2274
  }
2611
2275
  },
2612
2276
 
@@ -2774,10 +2438,15 @@
2774
2438
 
2775
2439
  var Screen = () => {
2776
2440
  const screensModel = {
2441
+ // até 599px
2777
2442
  isSmall: () => quasar.Screen.xs,
2443
+ // de 600 até 1023px
2778
2444
  isMedium: () => quasar.Screen.sm,
2445
+ // de 600 até 1023px
2779
2446
  isLarge: () => quasar.Screen.gt.sm,
2447
+ // de 0 até 599px
2780
2448
  untilMedium: () => quasar.Screen.lt.sm,
2449
+ // de 0 ate 1023px
2781
2450
  untilLarge: () => quasar.Screen.lt.md,
2782
2451
 
2783
2452
  // Plataforma
@@ -3390,39 +3059,121 @@
3390
3059
  });
3391
3060
  },
3392
3061
 
3393
- beforeUnmount () {
3394
- this.autoNumeric.remove();
3062
+ beforeUnmount () {
3063
+ this.autoNumeric.remove();
3064
+ }
3065
+ };
3066
+
3067
+ const _hoisted_1$j = ["id", "model-value", "onInput"];
3068
+
3069
+ function render$t(_ctx, _cache, $props, $setup, $data, $options) {
3070
+ const _component_q_field = vue.resolveComponent("q-field");
3071
+
3072
+ return (vue.openBlock(), vue.createBlock(_component_q_field, {
3073
+ modelValue: $options.model,
3074
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.model) = $event)),
3075
+ outlined: ""
3076
+ }, {
3077
+ control: vue.withCtx(({ emitValue, floatingLabel, id, value }) => [
3078
+ vue.withDirectives(vue.createElementVNode("input", {
3079
+ id: id,
3080
+ ref: "input",
3081
+ class: "q-field__input",
3082
+ "model-value": value,
3083
+ onInput: $event => (emitValue($event.target.value))
3084
+ }, null, 40 /* PROPS, HYDRATE_EVENTS */, _hoisted_1$j), [
3085
+ [vue.vShow, floatingLabel]
3086
+ ])
3087
+ ]),
3088
+ _: 1 /* STABLE */
3089
+ }, 8 /* PROPS */, ["modelValue"]))
3090
+ }
3091
+
3092
+ script$t.render = render$t;
3093
+ script$t.__file = "src/components/numeric-input/QasNumericInput.vue";
3094
+
3095
+ const levels = {
3096
+ 0: {
3097
+ color: 'negative',
3098
+ label: 'Muito fraco',
3099
+ progress: 0.05,
3100
+ textClass: 'text-negative'
3101
+ },
3102
+
3103
+ 1: {
3104
+ color: 'warning',
3105
+ label: 'Fraco',
3106
+ progress: 0.25,
3107
+ textClass: 'text-warning'
3108
+ },
3109
+
3110
+ 2: {
3111
+ color: 'warning',
3112
+ label: 'Bom',
3113
+ progress: 0.5,
3114
+ textClass: 'text-warning'
3115
+ },
3116
+
3117
+ 3: {
3118
+ color: 'positive',
3119
+ label: 'Forte',
3120
+ progress: 0.75,
3121
+ textClass: 'text-positive'
3122
+ },
3123
+
3124
+ 4: {
3125
+ color: 'positive',
3126
+ label: 'Muito forte',
3127
+ progress: 1,
3128
+ textClass: 'text-positive'
3129
+ }
3130
+ };
3131
+
3132
+ var passwordMixin = {
3133
+ props: {
3134
+ levels: {
3135
+ default: () => levels,
3136
+ type: Object
3137
+ },
3138
+
3139
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/minlength
3140
+ minlength: {
3141
+ default: 8,
3142
+ type: [Number, String]
3143
+ },
3144
+
3145
+ specials: {
3146
+ default: /[!@#$%^&*()_+\-=[\]{}|;:'",<.>/?`~]/g,
3147
+ type: RegExp
3148
+ },
3149
+
3150
+ trackColor: {
3151
+ default: 'blue-grey-1',
3152
+ type: String
3153
+ },
3154
+
3155
+ useLowercase: {
3156
+ default: true,
3157
+ type: Boolean
3158
+ },
3159
+
3160
+ useNumbers: {
3161
+ default: true,
3162
+ type: Boolean
3163
+ },
3164
+
3165
+ useSpecial: {
3166
+ default: true,
3167
+ type: Boolean
3168
+ },
3169
+
3170
+ useUppercase: {
3171
+ default: true,
3172
+ type: Boolean
3173
+ }
3395
3174
  }
3396
3175
  };
3397
3176
 
3398
- const _hoisted_1$j = ["id", "model-value", "onInput"];
3399
-
3400
- function render$t(_ctx, _cache, $props, $setup, $data, $options) {
3401
- const _component_q_field = vue.resolveComponent("q-field");
3402
-
3403
- return (vue.openBlock(), vue.createBlock(_component_q_field, {
3404
- modelValue: $options.model,
3405
- "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.model) = $event)),
3406
- outlined: ""
3407
- }, {
3408
- control: vue.withCtx(({ emitValue, floatingLabel, id, value }) => [
3409
- vue.withDirectives(vue.createElementVNode("input", {
3410
- id: id,
3411
- ref: "input",
3412
- class: "q-field__input",
3413
- "model-value": value,
3414
- onInput: $event => (emitValue($event.target.value))
3415
- }, null, 40 /* PROPS, HYDRATE_EVENTS */, _hoisted_1$j), [
3416
- [vue.vShow, floatingLabel]
3417
- ])
3418
- ]),
3419
- _: 1 /* STABLE */
3420
- }, 8 /* PROPS */, ["modelValue"]))
3421
- }
3422
-
3423
- script$t.render = render$t;
3424
- script$t.__file = "src/components/numeric-input/QasNumericInput.vue";
3425
-
3426
3177
  var script$s = {
3427
3178
  name: 'QasPasswordStrengthChecker',
3428
3179
 
@@ -4299,8 +4050,6 @@
4299
4050
  QasSignaturePad: script$p
4300
4051
  },
4301
4052
 
4302
- mixins: [screenMixin],
4303
-
4304
4053
  props: {
4305
4054
  dialogProps: {
4306
4055
  type: Object,
@@ -4366,18 +4115,18 @@
4366
4115
 
4367
4116
  signaturePadWidth () {
4368
4117
  const sizes = {
4369
- [this.mx_isSmall]: { width: '100%' },
4370
- [this.mx_isMedium]: { width: '570px' },
4371
- [this.mx_isLarge]: { width: '350px' }
4118
+ [this.$qas.screen.isSmall]: { width: '100%' },
4119
+ [this.$qas.screen.isMedium]: { width: '570px' },
4120
+ [this.$qas.screen.isLarge]: { width: '350px' }
4372
4121
  };
4373
4122
  return sizes.true
4374
4123
  },
4375
4124
 
4376
4125
  signaturePadHeight () {
4377
4126
  const sizes = {
4378
- [this.mx_isSmall]: '250',
4379
- [this.mx_isMedium]: '400',
4380
- [this.mx_isLarge]: '250'
4127
+ [this.$qas.screen.isSmall]: '250',
4128
+ [this.$qas.screen.isMedium]: '400',
4129
+ [this.$qas.screen.isLarge]: '250'
4381
4130
  };
4382
4131
 
4383
4132
  return sizes.true
@@ -4734,6 +4483,15 @@
4734
4483
  script$n.render = render$n;
4735
4484
  script$n.__file = "src/components/field/QasField.vue";
4736
4485
 
4486
+ var contextMixin = {
4487
+ computed: {
4488
+ mx_context () {
4489
+ const { limit, ordering, page, search, ...filters } = this.$route.query;
4490
+ return { filters, limit, ordering, page: page ? parseInt(page) : 1, search }
4491
+ }
4492
+ }
4493
+ };
4494
+
4737
4495
  var script$m = {
4738
4496
  name: 'QasFilters',
4739
4497
 
@@ -5171,6 +4929,93 @@
5171
4929
  script$m.render = render$m;
5172
4930
  script$m.__file = "src/components/filters/QasFilters.vue";
5173
4931
 
4932
+ const irregularClasses = ['col', 'col-auto', 'fit'];
4933
+
4934
+ var generatorMixin = {
4935
+ props: {
4936
+ columns: {
4937
+ default: () => [],
4938
+ type: [Array, String, Object]
4939
+ },
4940
+
4941
+ fields: {
4942
+ default: () => ({}),
4943
+ type: Object
4944
+ },
4945
+
4946
+ gutter: {
4947
+ default: 'md',
4948
+ type: [String, Boolean],
4949
+ validator: value => ['xs', 'sm', 'md', 'lg', 'xl'].includes(value)
4950
+ }
4951
+ },
4952
+
4953
+ computed: {
4954
+ mx_classes () {
4955
+ const classes = ['row'];
4956
+
4957
+ if (this.gutter) {
4958
+ classes.push(`q-col-gutter-${this.gutter}`);
4959
+ }
4960
+
4961
+ return classes
4962
+ }
4963
+ },
4964
+
4965
+ methods: {
4966
+ mx_getBreakpoint (columns) {
4967
+ const classes = [];
4968
+ const profiles = { col: 'col', xs: 'col-xs', sm: 'col-sm', md: 'col-md', lg: 'col-lg', xl: 'col-xl' };
4969
+ const { fieldProps, classes: renamedClasses, ...formattedColumns } = columns || {};
4970
+
4971
+ for (const key in formattedColumns) {
4972
+ const value = formattedColumns[key];
4973
+ classes.push(irregularClasses.includes(value) ? value : `${profiles[key]}-${value}`);
4974
+ }
4975
+
4976
+ return [...classes, renamedClasses]
4977
+ },
4978
+
4979
+ mx_getFieldClass (index, isGridGenerator) {
4980
+ if (typeof this.columns === 'string') {
4981
+ return irregularClasses.includes(this.columns) ? this.columns : `col-${this.columns}`
4982
+ }
4983
+
4984
+ return Array.isArray(this.columns)
4985
+ ? this.mx_handleColumnsByIndex(index, isGridGenerator)
4986
+ : this.mx_handleColumnsByField(index, isGridGenerator)
4987
+ },
4988
+
4989
+ mx_handleColumnsByField (index, isGridGenerator) {
4990
+ if (!this.columns[index]) {
4991
+ return this.mx_setDefaultColumnClass(isGridGenerator)
4992
+ }
4993
+
4994
+ return this.mx_getBreakpoint(this.columns[index])
4995
+ },
4996
+
4997
+ mx_handleColumnsByIndex (index, isGridGenerator) {
4998
+ const fields = isGridGenerator ? this.fields : this.groupedFields.visible;
4999
+
5000
+ if (!Array.isArray(fields)) {
5001
+ index = Object.keys(fields).findIndex(field => field === index);
5002
+ }
5003
+
5004
+ const length = this.columns.length;
5005
+
5006
+ if (!length) {
5007
+ return this.mx_setDefaultColumnClass(isGridGenerator)
5008
+ }
5009
+
5010
+ return this.mx_getBreakpoint(this.columns[index])
5011
+ },
5012
+
5013
+ mx_setDefaultColumnClass (isGridGenerator) {
5014
+ return isGridGenerator ? 'col-6 col-xs-12 col-sm-4' : 'col-6'
5015
+ }
5016
+ }
5017
+ };
5018
+
5174
5019
  var script$l = {
5175
5020
  name: 'QasFormGenerator',
5176
5021
 
@@ -5278,6 +5123,124 @@
5278
5123
  script$l.render = render$l;
5279
5124
  script$l.__file = "src/components/form-generator/QasFormGenerator.vue";
5280
5125
 
5126
+ var viewMixin = {
5127
+ props: {
5128
+ dialog: {
5129
+ type: Boolean
5130
+ },
5131
+
5132
+ entity: {
5133
+ required: true,
5134
+ type: String
5135
+ },
5136
+
5137
+ url: {
5138
+ default: '',
5139
+ type: String
5140
+ },
5141
+
5142
+ fields: {
5143
+ default: () => ({}),
5144
+ type: Object
5145
+ },
5146
+
5147
+ errors: {
5148
+ default: () => ({}),
5149
+ type: Object
5150
+ },
5151
+
5152
+ metadata: {
5153
+ default: () => ({}),
5154
+ type: Object
5155
+ },
5156
+
5157
+ fetching: {
5158
+ type: Boolean
5159
+ }
5160
+ },
5161
+
5162
+ emits: [
5163
+ 'update:fields',
5164
+ 'update:errors',
5165
+ 'update:metadata',
5166
+ 'update:fetching'
5167
+ ],
5168
+
5169
+ data () {
5170
+ return {
5171
+ mx_errors: {},
5172
+ mx_fields: {},
5173
+ mx_metadata: {},
5174
+
5175
+ mx_isFetching: false
5176
+ }
5177
+ },
5178
+
5179
+ watch: {
5180
+ mx_isFetching (value) {
5181
+ this.$emit('update:fetching', value);
5182
+ }
5183
+ },
5184
+
5185
+ computed: {
5186
+ mx_componentTag () {
5187
+ return this.dialog ? 'div' : 'q-page'
5188
+ },
5189
+
5190
+ mx_componentClass () {
5191
+ return !this.dialog && 'container spaced'
5192
+ },
5193
+
5194
+ mx_hasFooterSlot () {
5195
+ return !!(this.$slots.footer)
5196
+ },
5197
+
5198
+ mx_hasHeaderSlot () {
5199
+ return !!(this.$slots.header)
5200
+ }
5201
+ },
5202
+
5203
+ methods: {
5204
+ mx_fetchError (error) {
5205
+ const { response } = error;
5206
+ const exception = response?.data?.exception || error.message;
5207
+
5208
+ this.$qas.error('Ops! Erro ao obter os dados.', exception);
5209
+
5210
+ const status = response?.status;
5211
+ const redirect = ({ 403: 'Forbidden', 404: 'NotFound' })[status];
5212
+
5213
+ if (redirect) {
5214
+ this.$router.replace({ name: redirect });
5215
+ }
5216
+ },
5217
+
5218
+ mx_setErrors (errors = {}) {
5219
+ this.mx_errors = vue.markRaw(errors);
5220
+ },
5221
+
5222
+ mx_setFields (fields = {}) {
5223
+ for (const field in fields) {
5224
+ fields[field].name = humps.camelize(fields[field].name);
5225
+ }
5226
+
5227
+ this.mx_fields = vue.markRaw(fields);
5228
+ },
5229
+
5230
+ mx_setMetadata (metadata = {}) {
5231
+ this.mx_metadata = vue.markRaw(metadata);
5232
+ },
5233
+
5234
+ mx_updateModels (models) {
5235
+ for (const key in models) {
5236
+ if (!models[key]) continue
5237
+
5238
+ this.$emit(`update:${key}`, models[key]);
5239
+ }
5240
+ }
5241
+ }
5242
+ };
5243
+
5281
5244
  var script$k = {
5282
5245
  name: 'QasFormView',
5283
5246
 
@@ -5286,7 +5249,7 @@
5286
5249
  QasDialog: script$x
5287
5250
  },
5288
5251
 
5289
- mixins: [viewMixin, screenMixin],
5252
+ mixins: [viewMixin],
5290
5253
 
5291
5254
  props: {
5292
5255
  cancelButton: {
@@ -5380,7 +5343,7 @@
5380
5343
 
5381
5344
  computed: {
5382
5345
  cancelButtonClass () {
5383
- return this.mx_isSmall && 'order-last'
5346
+ return this.$qas.screen.isSmall && 'order-last'
5384
5347
  },
5385
5348
 
5386
5349
  fetchURL () {
@@ -5408,7 +5371,7 @@
5408
5371
  },
5409
5372
 
5410
5373
  saveButtonClass () {
5411
- return this.mx_isSmall && 'order-first'
5374
+ return this.$qas.screen.isSmall && 'order-first'
5412
5375
  },
5413
5376
 
5414
5377
  isCancelButtonDisabled () {
@@ -5696,8 +5659,6 @@
5696
5659
  var script$j = {
5697
5660
  name: 'QasGallery',
5698
5661
 
5699
- mixins: [screenMixin],
5700
-
5701
5662
  props: {
5702
5663
  carouselNextIcon: {
5703
5664
  type: String,
@@ -5754,13 +5715,13 @@
5754
5715
  return this.height || 'auto'
5755
5716
  }
5756
5717
 
5757
- return this.mx_isSmall ? '90px' : '120px'
5718
+ return this.$qas.screen.isSmall ? '90px' : '120px'
5758
5719
  },
5759
5720
 
5760
5721
  galleryColumnsClasses () {
5761
5722
  if (this.isSingleImage) return 'col-12'
5762
5723
 
5763
- return this.mx_isSmall ? 'col-6' : 'col-2'
5724
+ return this.$qas.screen.isSmall ? 'col-6' : 'col-2'
5764
5725
  },
5765
5726
 
5766
5727
  hideShowMore () {
@@ -5895,9 +5856,9 @@
5895
5856
  modelValue: $data.imageIndex,
5896
5857
  "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($data.imageIndex) = $event)),
5897
5858
  animated: "",
5898
- arrows: !_ctx.mx_isSmall,
5859
+ arrows: !_ctx.$qas.screen.isSmall,
5899
5860
  "control-text-color": "primary",
5900
- fullscreen: _ctx.mx_isSmall,
5861
+ fullscreen: _ctx.$qas.screen.isSmall,
5901
5862
  height: $options.carouselImageHeight,
5902
5863
  "next-icon": $props.carouselNextIcon,
5903
5864
  "prev-icon": $props.carouselPreviousIcon,
@@ -5913,7 +5874,7 @@
5913
5874
  name: index
5914
5875
  }, {
5915
5876
  default: vue.withCtx(() => [
5916
- (_ctx.mx_isSmall)
5877
+ (_ctx.$qas.screen.isSmall)
5917
5878
  ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$5, [
5918
5879
  vue.createVNode(_component_qas_btn, {
5919
5880
  dense: "",
@@ -7287,8 +7248,6 @@
7287
7248
  QasGridGenerator: script$i
7288
7249
  },
7289
7250
 
7290
- mixins: [screenMixin],
7291
-
7292
7251
  props: {
7293
7252
  columns: {
7294
7253
  type: Object,
@@ -7329,7 +7288,7 @@
7329
7288
 
7330
7289
  computed: {
7331
7290
  directionClasses () {
7332
- return this.mx_untilMedium ? 'col' : 'row items-center'
7291
+ return this.$qas.screen.untilMedium ? 'col' : 'row items-center'
7333
7292
  },
7334
7293
 
7335
7294
  userAvatarImage () {
@@ -7337,7 +7296,7 @@
7337
7296
  },
7338
7297
 
7339
7298
  avatarSize () {
7340
- return this.mx_isSmall ? '145px' : '188px'
7299
+ return this.$qas.screen.isSmall ? '145px' : '188px'
7341
7300
  }
7342
7301
  },
7343
7302
 
@@ -7918,8 +7877,6 @@
7918
7877
  QasSearchBox: script$8
7919
7878
  },
7920
7879
 
7921
- mixins: [screenMixin],
7922
-
7923
7880
  props: {
7924
7881
  deleteOnly: {
7925
7882
  type: Boolean
@@ -8025,9 +7982,9 @@
8025
7982
  const isSelected = this.values.includes(value);
8026
7983
 
8027
7984
  return {
8028
- dense: this.mx_isSmall,
7985
+ dense: this.$qas.screen.isSmall,
8029
7986
  hideLabelOnSmallScreen: true,
8030
- icon: !this.mx_isSmall ? undefined : isSelected ? 'o_close' : 'o_add',
7987
+ icon: !this.$qas.screen.isSmall ? undefined : isSelected ? 'o_close' : 'o_add',
8031
7988
  label: isSelected ? 'Remover' : 'Adicionar',
8032
7989
  outline: isSelected,
8033
7990
  size: 'sm'
@@ -8428,8 +8385,6 @@
8428
8385
  var script$3 = {
8429
8386
  name: 'QasTableGenerator',
8430
8387
 
8431
- mixins: [screenMixin],
8432
-
8433
8388
  props: {
8434
8389
  columns: {
8435
8390
  default: () => [],
@@ -8556,7 +8511,7 @@
8556
8511
  },
8557
8512
 
8558
8513
  tableClass () {
8559
- return this.mx_isSmall && 'qas-table-generator--mobile'
8514
+ return this.$qas.screen.isSmall && 'qas-table-generator--mobile'
8560
8515
  },
8561
8516
 
8562
8517
  hasScrollOnGrab () {
@@ -8797,8 +8752,6 @@
8797
8752
  QasDialog: script$x
8798
8753
  },
8799
8754
 
8800
- mixins: [screenMixin],
8801
-
8802
8755
  props: {
8803
8756
  dialogProps: {
8804
8757
  type: Object,
@@ -8838,7 +8791,7 @@
8838
8791
 
8839
8792
  computed: {
8840
8793
  truncateTextClass () {
8841
- return (this.isTruncated || this.mx_isSmall) && 'ellipsis q-pr-sm'
8794
+ return (this.isTruncated || this.$qas.screen.isSmall) && 'ellipsis q-pr-sm'
8842
8795
  },
8843
8796
 
8844
8797
  isTruncated () {
@@ -8940,8 +8893,6 @@
8940
8893
  QasSearchBox: script$8
8941
8894
  },
8942
8895
 
8943
- mixins: [screenMixin],
8944
-
8945
8896
  props: {
8946
8897
  emitValue: {
8947
8898
  type: Boolean
@@ -8999,15 +8950,15 @@
8999
8950
 
9000
8951
  computed: {
9001
8952
  actionsClass () {
9002
- return !this.mx_isSmall && 'column'
8953
+ return !this.$qas.screen.isSmall && 'column'
9003
8954
  },
9004
8955
 
9005
8956
  gutterClass () {
9006
- return `q-col-gutter-${this.mx_untilLarge ? 'md' : 'xl'}`
8957
+ return `q-col-gutter-${this.$qas.screen.untilLarge ? 'md' : 'xl'}`
9007
8958
  },
9008
8959
 
9009
8960
  iconClass () {
9010
- return !this.mx_isSmall && 'qas-transfer__icon'
8961
+ return !this.$qas.screen.isSmall && 'qas-transfer__icon'
9011
8962
  },
9012
8963
 
9013
8964
  searchBoxProps () {
@@ -9264,7 +9215,7 @@
9264
9215
 
9265
9216
  var name = "@bildvitta/quasar-ui-asteroid";
9266
9217
  var description = "Asteroid";
9267
- var version$1 = "3.0.0-beta.2";
9218
+ var version$1 = "3.0.0-beta.3";
9268
9219
  var author = "Bild & Vitta <systemteam@bild.com.br>";
9269
9220
  var license = "MIT";
9270
9221
  var main = "dist/asteroid.cjs.min.js";