@bildvitta/quasar-ui-asteroid 2.12.2 → 2.14.0

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.
@@ -0,0 +1,3793 @@
1
+ /*!
2
+ * @bildvitta/quasar-ui-asteroid v3.0.0-alpha.2
3
+ * (c) 2022 Bild & Vitta <systemteam@bild.com.br>
4
+ * Released under the MIT License.
5
+ */
6
+ (function (global, factory) {
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('vue'), require('quasar'), require('autonumeric'), require('fuse.js'), require('lodash-es'), require('signature_pad'), require('sortablejs')) :
8
+ typeof define === 'function' && define.amd ? define(['vue', 'quasar', 'autonumeric', 'fuse.js', 'lodash-es', 'signature_pad', 'sortablejs'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global["{{ umdExportName }}"] = factory(global.Vue, global.Quasar, global.AutoNumeric, global.Fuse, global._, global.SignaturePad, global.Sortable));
10
+ })(this, (function (vue, quasar, AutoNumeric, Fuse, lodashEs, SignaturePad, Sortable) { 'use strict';
11
+
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ var AutoNumeric__default = /*#__PURE__*/_interopDefaultLegacy(AutoNumeric);
15
+ var Fuse__default = /*#__PURE__*/_interopDefaultLegacy(Fuse);
16
+ var SignaturePad__default = /*#__PURE__*/_interopDefaultLegacy(SignaturePad);
17
+ var Sortable__default = /*#__PURE__*/_interopDefaultLegacy(Sortable);
18
+
19
+ const levels = {
20
+ good: {
21
+ color: 'warning',
22
+ label: 'Good',
23
+ progress: 0.5,
24
+ textClass: 'text-warning'
25
+ },
26
+
27
+ strong: {
28
+ color: 'positive',
29
+ label: 'Strong',
30
+ progress: 0.75,
31
+ textClass: 'text-positive'
32
+ },
33
+
34
+ veryStrong: {
35
+ color: 'positive',
36
+ label: 'Very strong',
37
+ progress: 1,
38
+ textClass: 'text-positive'
39
+ },
40
+
41
+ veryWeak: {
42
+ color: 'negative',
43
+ label: 'Very weak',
44
+ progress: 0,
45
+ textClass: 'text-negative'
46
+ },
47
+
48
+ weak: {
49
+ color: 'warning',
50
+ label: 'Weak',
51
+ progress: 0.25,
52
+ textClass: 'text-warning'
53
+ }
54
+ };
55
+
56
+ var passwordMixin = {
57
+ props: {
58
+ levels: {
59
+ default: () => levels,
60
+ type: Object
61
+ },
62
+
63
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/minlength
64
+ minlength: {
65
+ default: 8,
66
+ type: [Number, String]
67
+ },
68
+
69
+ specials: {
70
+ default: /[!@#$%^&*()_+\-=[\]{}|;:'",<.>/?`~]/g,
71
+ type: RegExp
72
+ },
73
+
74
+ trackColor: {
75
+ default: 'blue-grey-1',
76
+ type: String
77
+ },
78
+
79
+ useLowercase: {
80
+ default: true,
81
+ type: Boolean
82
+ },
83
+
84
+ useNumbers: {
85
+ default: true,
86
+ type: Boolean
87
+ },
88
+
89
+ useSpecial: {
90
+ default: true,
91
+ type: Boolean
92
+ },
93
+
94
+ useUppercase: {
95
+ default: true,
96
+ type: Boolean
97
+ }
98
+ }
99
+ };
100
+
101
+ var screenMixin = {
102
+ // TODO: Esses nomes precisam ser alterados para algo mais inteligente.
103
+
104
+ computed: {
105
+ $_isSmall () {
106
+ // until 599
107
+ return this.$q.screen.xs
108
+ },
109
+
110
+ $_isMedium () {
111
+ // from 600 until 1023
112
+ return this.$q.screen.sm
113
+ },
114
+
115
+ $_isLarge () {
116
+ // from 1024 until the limit
117
+ return this.$q.screen.gt.sm
118
+ },
119
+
120
+ $_untilMedium () {
121
+ // from 0 until 599
122
+ return this.$q.screen.lt.sm
123
+ },
124
+
125
+ $_untilLarge () {
126
+ // from 0 until 1023
127
+ return this.$q.screen.lt.md
128
+ },
129
+
130
+ $_isMobile () {
131
+ return this.$q.platform.is.mobile
132
+ }
133
+ }
134
+ };
135
+
136
+ var script$q = {
137
+ name: 'QasActions',
138
+
139
+ mixins: [screenMixin],
140
+
141
+ props: {
142
+ align: {
143
+ default: 'end',
144
+ type: String,
145
+ validator: value => ['start', 'around', 'between', 'center', 'end'].includes(value)
146
+ },
147
+
148
+ gutter: {
149
+ default: 'md',
150
+ type: String,
151
+ validator: value => ['xs', 'sm', 'md', 'lg', 'xl'].includes(value)
152
+ }
153
+ },
154
+
155
+ computed: {
156
+ classes () {
157
+ return [
158
+ `justify-${this.align}`,
159
+ `q-col-gutter-${this.gutter}`,
160
+ this.$_isSmall ? 'column reverse' : 'row'
161
+ ]
162
+ }
163
+ }
164
+ };
165
+
166
+ const _hoisted_1$f = { class: "col-12 col-sm-auto" };
167
+ const _hoisted_2$9 = { class: "col-12 col-sm-auto" };
168
+
169
+ function render$q(_ctx, _cache, $props, $setup, $data, $options) {
170
+ return (vue.openBlock(), vue.createElementBlock("div", {
171
+ class: vue.normalizeClass($options.classes)
172
+ }, [
173
+ vue.createElementVNode("div", _hoisted_1$f, [
174
+ vue.renderSlot(_ctx.$slots, "secondary")
175
+ ]),
176
+ vue.createElementVNode("div", _hoisted_2$9, [
177
+ vue.renderSlot(_ctx.$slots, "primary")
178
+ ])
179
+ ], 2 /* CLASS */))
180
+ }
181
+
182
+ script$q.render = render$q;
183
+ script$q.__file = "src/components/actions/QasActions.vue";
184
+
185
+ var script$p = {
186
+ name: 'QasBtn',
187
+
188
+ mixins: [screenMixin],
189
+
190
+ inheritAttrs: false,
191
+
192
+ props: {
193
+ hideLabelOnSmallScreen: {
194
+ type: Boolean
195
+ }
196
+ },
197
+
198
+ computed: {
199
+ attributes () {
200
+ const { label, ...attributes } = this.$attrs;
201
+ return attributes
202
+ },
203
+
204
+ hasLabel () {
205
+ return !!(this.$attrs.label || this.$slots.default)
206
+ },
207
+
208
+ showLabel () {
209
+ return this.hasLabel && !(this.hideLabelOnSmallScreen && this.$_isSmall)
210
+ },
211
+
212
+ slots () {
213
+ const { default: _, ...slots } = this.$slots;
214
+ return slots
215
+ }
216
+ }
217
+ };
218
+
219
+ function render$p(_ctx, _cache, $props, $setup, $data, $options) {
220
+ const _component_q_btn = vue.resolveComponent("q-btn");
221
+
222
+ return (vue.openBlock(), vue.createBlock(_component_q_btn, vue.mergeProps({
223
+ color: "primary",
224
+ "no-caps": "",
225
+ unelevated: ""
226
+ }, $options.attributes), vue.createSlots({
227
+ default: vue.withCtx(() => [
228
+ ($options.showLabel)
229
+ ? vue.renderSlot(_ctx.$slots, "default", { key: 0 }, () => [
230
+ vue.createTextVNode(vue.toDisplayString(_ctx.$attrs.label), 1 /* TEXT */)
231
+ ])
232
+ : vue.createCommentVNode("v-if", true)
233
+ ]),
234
+ _: 2 /* DYNAMIC */
235
+ }, [
236
+ vue.renderList($options.slots, (_, name) => {
237
+ return {
238
+ name: name,
239
+ fn: vue.withCtx((context) => [
240
+ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(context || {})))
241
+ ])
242
+ }
243
+ })
244
+ ]), 1040 /* FULL_PROPS, DYNAMIC_SLOTS */))
245
+ }
246
+
247
+ script$p.render = render$p;
248
+ script$p.__file = "src/components/btn/QasBtn.vue";
249
+
250
+ var script$o = {
251
+ name: 'QasActionsMenu',
252
+
253
+ components: {
254
+ QasBtn: script$p
255
+ },
256
+
257
+ props: {
258
+ icon: {
259
+ default: 'o_settings',
260
+ type: String
261
+ },
262
+
263
+ label: {
264
+ default: 'Configurações',
265
+ type: String
266
+ },
267
+
268
+ list: {
269
+ default: () => ({}),
270
+ type: Object
271
+ }
272
+ },
273
+
274
+ methods: {
275
+ onClick (item) {
276
+ if (typeof item.handler === 'function') {
277
+ const { handler, ...filtered } = item;
278
+ item.handler(filtered);
279
+ }
280
+ }
281
+ }
282
+ };
283
+
284
+ const _hoisted_1$e = { class: "flex items-center justify-center q-gutter-x-md" };
285
+
286
+ function render$o(_ctx, _cache, $props, $setup, $data, $options) {
287
+ const _component_q_icon = vue.resolveComponent("q-icon");
288
+ const _component_q_item_section = vue.resolveComponent("q-item-section");
289
+ const _component_q_item = vue.resolveComponent("q-item");
290
+ const _component_q_list = vue.resolveComponent("q-list");
291
+ const _component_q_menu = vue.resolveComponent("q-menu");
292
+ const _component_qas_btn = vue.resolveComponent("qas-btn");
293
+
294
+ return (vue.openBlock(), vue.createBlock(_component_qas_btn, {
295
+ class: "qas-actions-menu",
296
+ color: "primary",
297
+ "hide-label-on-small-screen": "",
298
+ icon: $props.icon,
299
+ label: $props.label,
300
+ outline: ""
301
+ }, {
302
+ default: vue.withCtx(() => [
303
+ vue.createVNode(_component_q_menu, { class: "qas-actions-menu__menu" }, {
304
+ default: vue.withCtx(() => [
305
+ vue.createVNode(_component_q_list, {
306
+ class: "qas-actions-menu__list",
307
+ separator: ""
308
+ }, {
309
+ default: vue.withCtx(() => [
310
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($props.list, (item, key) => {
311
+ return vue.renderSlot(_ctx.$slots, key, { item: item }, () => [
312
+ (vue.openBlock(), vue.createBlock(_component_q_item, vue.mergeProps({
313
+ key: key,
314
+ class: "text-bold text-primary",
315
+ clickable: ""
316
+ }, item.props, {
317
+ onClick: $event => ($options.onClick(item))
318
+ }), {
319
+ default: vue.withCtx(() => [
320
+ vue.createVNode(_component_q_item_section, null, {
321
+ default: vue.withCtx(() => [
322
+ vue.createElementVNode("div", _hoisted_1$e, [
323
+ vue.createVNode(_component_q_icon, {
324
+ name: item.icon,
325
+ size: item.iconSize
326
+ }, null, 8 /* PROPS */, ["name", "size"]),
327
+ vue.createElementVNode("div", null, vue.toDisplayString(item.label), 1 /* TEXT */)
328
+ ])
329
+ ]),
330
+ _: 2 /* DYNAMIC */
331
+ }, 1024 /* DYNAMIC_SLOTS */)
332
+ ]),
333
+ _: 2 /* DYNAMIC */
334
+ }, 1040 /* FULL_PROPS, DYNAMIC_SLOTS */, ["onClick"]))
335
+ ])
336
+ }), 256 /* UNKEYED_FRAGMENT */))
337
+ ]),
338
+ _: 3 /* FORWARDED */
339
+ })
340
+ ]),
341
+ _: 3 /* FORWARDED */
342
+ })
343
+ ]),
344
+ _: 3 /* FORWARDED */
345
+ }, 8 /* PROPS */, ["icon", "label"]))
346
+ }
347
+
348
+ script$o.render = render$o;
349
+ script$o.__file = "src/components/actions-menu/QasActionsMenu.vue";
350
+
351
+ function addCounterSuffix (label, counter) {
352
+ return counter ? `${label} (${counter})` : label
353
+ }
354
+
355
+ // https://stackoverflow.com/a/64167032/977687
356
+
357
+ function getSlotChildrenText (children) {
358
+ return children.map(node => {
359
+ if (!node.children || typeof node.children === 'string') {
360
+ return node.children || ''
361
+ } else if (Array.isArray(node.children)) {
362
+ return getSlotChildrenText(node.children)
363
+ } else if (node.children.default) {
364
+ return getSlotChildrenText(node.children.default())
365
+ }
366
+
367
+ return undefined
368
+ }).join('')
369
+ }
370
+
371
+ var script$n = {
372
+ name: 'QasBreakline',
373
+
374
+ props: {
375
+ split: {
376
+ default: '\n',
377
+ type: String
378
+ },
379
+
380
+ tag: {
381
+ default: 'div',
382
+ type: String
383
+ },
384
+
385
+ text: {
386
+ default: '',
387
+ type: String
388
+ }
389
+ },
390
+
391
+ computed: {
392
+ lines () {
393
+ const text = this.text || getSlotChildrenText(this.$slots.default());
394
+ return text.split(this.split)
395
+ }
396
+ }
397
+ };
398
+
399
+ function render$n(_ctx, _cache, $props, $setup, $data, $options) {
400
+ return (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($options.lines, (line, index) => {
401
+ return (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent($props.tag), vue.mergeProps({ key: index }, _ctx.$attrs), {
402
+ default: vue.withCtx(() => [
403
+ vue.createTextVNode(vue.toDisplayString(line), 1 /* TEXT */)
404
+ ]),
405
+ _: 2 /* DYNAMIC */
406
+ }, 1040 /* FULL_PROPS, DYNAMIC_SLOTS */))
407
+ }), 128 /* KEYED_FRAGMENT */))
408
+ }
409
+
410
+ script$n.render = render$n;
411
+ script$n.__file = "src/components/breakline/QasBreakline.vue";
412
+
413
+ var script$m = {
414
+ name: 'QasAlert',
415
+
416
+ components: {
417
+ QasBreakline: script$n,
418
+ QasBtn: script$p
419
+ },
420
+
421
+ props: {
422
+ color: {
423
+ default: 'primary',
424
+ type: String
425
+ },
426
+
427
+ modelValue: {
428
+ default: true,
429
+ type: Boolean
430
+ },
431
+
432
+ text: {
433
+ default: '',
434
+ type: String
435
+ },
436
+
437
+ title: {
438
+ default: '',
439
+ type: String
440
+ }
441
+ },
442
+
443
+ emits: ['update:modelValue'],
444
+
445
+ data () {
446
+ return {
447
+ model: true
448
+ }
449
+ },
450
+
451
+ computed: {
452
+ classes () {
453
+ return {
454
+ [`text-${this.color}`]: true,
455
+ [`bg-${this.color}-contrast`]: ['primary', 'secondary'].includes(this.color)
456
+ }
457
+ }
458
+ },
459
+
460
+ watch: {
461
+ modelValue: {
462
+ handler (value) {
463
+ this.model = value;
464
+ },
465
+ immediate: true
466
+ }
467
+ },
468
+
469
+ methods: {
470
+ close () {
471
+ this.$emit('update:modelValue', false);
472
+ }
473
+ }
474
+ };
475
+
476
+ const _hoisted_1$d = { class: "q-gutter-md q-mr-lg" };
477
+ const _hoisted_2$8 = {
478
+ key: 0,
479
+ class: "text-bold text-h5"
480
+ };
481
+
482
+ function render$m(_ctx, _cache, $props, $setup, $data, $options) {
483
+ const _component_qas_btn = vue.resolveComponent("qas-btn");
484
+ const _component_qas_breakline = vue.resolveComponent("qas-breakline");
485
+
486
+ return ($data.model)
487
+ ? (vue.openBlock(), vue.createElementBlock("div", {
488
+ key: 0,
489
+ class: vue.normalizeClass(["q-pa-lg qas-alert relative-position rounded-borders", $options.classes])
490
+ }, [
491
+ vue.createVNode(_component_qas_btn, {
492
+ class: "absolute-top-right q-mr-md q-mt-sm",
493
+ color: $props.color,
494
+ dense: "",
495
+ flat: "",
496
+ icon: "o_close",
497
+ rounded: "",
498
+ onClick: $options.close
499
+ }, null, 8 /* PROPS */, ["color", "onClick"]),
500
+ vue.createElementVNode("div", _hoisted_1$d, [
501
+ vue.renderSlot(_ctx.$slots, "header", {}, () => [
502
+ ($props.title)
503
+ ? (vue.openBlock(), vue.createElementBlock("h5", _hoisted_2$8, vue.toDisplayString($props.title), 1 /* TEXT */))
504
+ : vue.createCommentVNode("v-if", true)
505
+ ]),
506
+ vue.renderSlot(_ctx.$slots, "default", {}, () => [
507
+ vue.createVNode(_component_qas_breakline, {
508
+ tag: "p",
509
+ text: $props.text
510
+ }, null, 8 /* PROPS */, ["text"])
511
+ ])
512
+ ])
513
+ ], 2 /* CLASS */))
514
+ : vue.createCommentVNode("v-if", true)
515
+ }
516
+
517
+ script$m.render = render$m;
518
+ script$m.__file = "src/components/alert/QasAlert.vue";
519
+
520
+ var script$l = {
521
+ props: {
522
+ apps: {
523
+ default: () => [],
524
+ type: Array
525
+ },
526
+
527
+ brand: {
528
+ default: '',
529
+ type: String
530
+ },
531
+
532
+ isAuth: {
533
+ type: Boolean
534
+ },
535
+
536
+ notifications: {
537
+ default: () => ({}),
538
+ type: Object
539
+ },
540
+
541
+ title: {
542
+ default: '',
543
+ required: true,
544
+ type: String
545
+ },
546
+
547
+ user: {
548
+ default: () => ({}),
549
+ require: true,
550
+ type: Object
551
+ }
552
+ },
553
+
554
+ emits: ['sign-out', 'toggle-menu'],
555
+
556
+ data () {
557
+ return {
558
+ menuDrawer: true
559
+ }
560
+ },
561
+
562
+ computed: {
563
+ developmentBadgeLabel () {
564
+ const hosts = {
565
+ develop: 'Develop',
566
+ feature: 'Feature',
567
+ localhost: 'Local',
568
+ release: 'Release'
569
+ };
570
+
571
+ if (process.env.DEV) {
572
+ return hosts.localhost
573
+ }
574
+
575
+ const current = Object.keys(hosts).find(
576
+ host => location.hostname.includes(host)
577
+ );
578
+
579
+ return current ? hosts[current] : ''
580
+ },
581
+
582
+ hasApps () {
583
+ return !!this.apps.length
584
+ },
585
+
586
+ hasDevelopmentBadge () {
587
+ return !!this.developmentBadgeLabel
588
+ },
589
+
590
+ hasNotifications () {
591
+ return !!Object.keys(this.notifications).length
592
+ }
593
+ },
594
+
595
+ methods: {
596
+ goToProfile () {
597
+ return this.$router.push(this.user.to)
598
+ },
599
+
600
+ signOut () {
601
+ this.$emit('sign-out');
602
+ },
603
+
604
+ toggleMenuDrawer () {
605
+ this.$emit('toggle-menu');
606
+ }
607
+ }
608
+ };
609
+
610
+ const _hoisted_1$c = ["alt", "src"];
611
+ const _hoisted_2$7 = {
612
+ key: 1,
613
+ class: "text-bold text-primary-contrast text-subtitle1 text-uppercase"
614
+ };
615
+ const _hoisted_3$3 = { class: "items-center no-wrap q-gutter-md row" };
616
+ const _hoisted_4$2 = { key: 0 };
617
+ const _hoisted_5$1 = ["title"];
618
+ const _hoisted_6 = { class: "q-px-sm qas-toolbar__user-data qs-lh-lg text-caption" };
619
+ const _hoisted_7 = { class: "ellipsis" };
620
+ const _hoisted_8 = { class: "ellipsis text-bold" };
621
+ const _hoisted_9 = { class: "qas-toolbar__user-menu" };
622
+ const _hoisted_10 = { class: "q-pa-lg text-center" };
623
+ const _hoisted_11 = { class: "ellipsis q-mt-lg qs-lh-sm text-bold text-subtitle1" };
624
+ const _hoisted_12 = { class: "ellipsis q-mt-xs text-caption" };
625
+ const _hoisted_13 = { class: "q-mt-sm" };
626
+ const _hoisted_14 = { class: "q-mt-sm" };
627
+
628
+ function render$l(_ctx, _cache, $props, $setup, $data, $options) {
629
+ const _component_q_ajax_bar = vue.resolveComponent("q-ajax-bar");
630
+ const _component_q_btn = vue.resolveComponent("q-btn");
631
+ const _component_q_badge = vue.resolveComponent("q-badge");
632
+ const _component_router_link = vue.resolveComponent("router-link");
633
+ const _component_q_toolbar_title = vue.resolveComponent("q-toolbar-title");
634
+ const _component_qas_btn = vue.resolveComponent("qas-btn");
635
+ const _component_qas_apps_menu = vue.resolveComponent("qas-apps-menu");
636
+ const _component_qas_avatar = vue.resolveComponent("qas-avatar");
637
+ const _component_q_menu = vue.resolveComponent("q-menu");
638
+ const _component_q_toolbar = vue.resolveComponent("q-toolbar");
639
+ const _directive_close_popup = vue.resolveDirective("close-popup");
640
+
641
+ return (vue.openBlock(), vue.createBlock(_component_q_toolbar, { class: "qas-toolbar" }, {
642
+ default: vue.withCtx(() => [
643
+ vue.createVNode(_component_q_ajax_bar, {
644
+ color: "white",
645
+ position: "top",
646
+ size: "2px"
647
+ }),
648
+ vue.createVNode(_component_q_btn, {
649
+ dense: "",
650
+ flat: "",
651
+ icon: "o_menu",
652
+ round: "",
653
+ onClick: $options.toggleMenuDrawer
654
+ }, null, 8 /* PROPS */, ["onClick"]),
655
+ vue.createVNode(_component_q_toolbar_title, { class: "flex" }, {
656
+ default: vue.withCtx(() => [
657
+ vue.createVNode(_component_router_link, {
658
+ class: "cursor-pointer text-no-decoration",
659
+ to: "/"
660
+ }, {
661
+ default: vue.withCtx(() => [
662
+ ($props.brand)
663
+ ? (vue.openBlock(), vue.createElementBlock("img", {
664
+ key: 0,
665
+ alt: $props.title,
666
+ class: "q-mr-sm qas-toolbar__brand",
667
+ src: $props.brand
668
+ }, null, 8 /* PROPS */, _hoisted_1$c))
669
+ : vue.createCommentVNode("v-if", true),
670
+ ($props.title)
671
+ ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$7, vue.toDisplayString($props.title), 1 /* TEXT */))
672
+ : vue.createCommentVNode("v-if", true),
673
+ ($options.hasDevelopmentBadge)
674
+ ? (vue.openBlock(), vue.createBlock(_component_q_badge, {
675
+ key: 2,
676
+ align: "middle",
677
+ class: "q-ml-sm",
678
+ color: "negative",
679
+ label: $options.developmentBadgeLabel
680
+ }, null, 8 /* PROPS */, ["label"]))
681
+ : vue.createCommentVNode("v-if", true)
682
+ ]),
683
+ _: 1 /* STABLE */
684
+ })
685
+ ]),
686
+ _: 1 /* STABLE */
687
+ }),
688
+ vue.createElementVNode("div", _hoisted_3$3, [
689
+ vue.createCommentVNode(" TODO: Notificações. "),
690
+ ($options.hasNotifications)
691
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$2, [
692
+ vue.createVNode(_component_qas_btn, {
693
+ class: "q-mr-md",
694
+ dense: "",
695
+ icon: "o_notifications",
696
+ round: ""
697
+ }, {
698
+ default: vue.withCtx(() => [
699
+ ($props.notifications)
700
+ ? (vue.openBlock(), vue.createBlock(_component_q_badge, {
701
+ key: 0,
702
+ color: "red",
703
+ floating: ""
704
+ }, {
705
+ default: vue.withCtx(() => [
706
+ vue.createTextVNode(vue.toDisplayString($props.notifications.count), 1 /* TEXT */)
707
+ ]),
708
+ _: 1 /* STABLE */
709
+ }))
710
+ : vue.createCommentVNode("v-if", true)
711
+ ]),
712
+ _: 1 /* STABLE */
713
+ })
714
+ ]))
715
+ : vue.createCommentVNode("v-if", true),
716
+ ($options.hasApps)
717
+ ? (vue.openBlock(), vue.createBlock(_component_qas_apps_menu, {
718
+ key: 1,
719
+ apps: $props.apps
720
+ }, null, 8 /* PROPS */, ["apps"]))
721
+ : vue.createCommentVNode("v-if", true),
722
+ vue.renderSlot(_ctx.$slots, "tools"),
723
+ ($props.isAuth)
724
+ ? (vue.openBlock(), vue.createElementBlock("div", {
725
+ key: 2,
726
+ class: "cursor-pointer items-center q-mr-sm qas-toolbar__user rounded-borders row",
727
+ title: $props.user.name || $props.user.givenName
728
+ }, [
729
+ vue.createVNode(_component_qas_avatar, {
730
+ class: "rounded-borders-left",
731
+ color: "white",
732
+ dark: "",
733
+ image: $props.user.photo,
734
+ rounded: "",
735
+ size: "42px",
736
+ "text-color": "primary",
737
+ title: $props.user.name || $props.user.givenName
738
+ }, null, 8 /* PROPS */, ["image", "title"]),
739
+ vue.createElementVNode("div", _hoisted_6, [
740
+ vue.createElementVNode("div", _hoisted_7, vue.toDisplayString($props.user.name || $props.user.givenName), 1 /* TEXT */),
741
+ vue.createElementVNode("div", _hoisted_8, vue.toDisplayString($props.user.email), 1 /* TEXT */)
742
+ ]),
743
+ vue.createVNode(_component_q_menu, {
744
+ anchor: "bottom end",
745
+ "max-height": "400px",
746
+ offset: [0, 5],
747
+ self: "top end"
748
+ }, {
749
+ default: vue.withCtx(() => [
750
+ vue.createElementVNode("div", _hoisted_9, [
751
+ vue.createElementVNode("div", _hoisted_10, [
752
+ vue.createElementVNode("button", {
753
+ class: "unset",
754
+ onClick: _cache[0] || (_cache[0] = (...args) => ($options.goToProfile && $options.goToProfile(...args)))
755
+ }, [
756
+ vue.createVNode(_component_qas_avatar, {
757
+ image: $props.user.photo,
758
+ size: "145px",
759
+ title: $props.user.name || $props.user.givenName
760
+ }, null, 8 /* PROPS */, ["image", "title"])
761
+ ]),
762
+ vue.createElementVNode("div", _hoisted_11, vue.toDisplayString($props.user.name || $props.user.givenName), 1 /* TEXT */),
763
+ vue.createElementVNode("div", _hoisted_12, vue.toDisplayString($props.user.email), 1 /* TEXT */),
764
+ vue.createElementVNode("div", _hoisted_13, [
765
+ vue.createVNode(_component_qas_btn, {
766
+ flat: "",
767
+ icon: "o_edit",
768
+ label: "Editar",
769
+ to: $props.user.to
770
+ }, null, 8 /* PROPS */, ["to"])
771
+ ]),
772
+ vue.createElementVNode("div", _hoisted_14, [
773
+ vue.withDirectives(vue.createVNode(_component_qas_btn, {
774
+ class: "q-px-lg q-py-xs",
775
+ dense: "",
776
+ icon: "o_exit_to_app",
777
+ label: "Sair",
778
+ outline: "",
779
+ onClick: $options.signOut
780
+ }, null, 8 /* PROPS */, ["onClick"]), [
781
+ [_directive_close_popup]
782
+ ])
783
+ ]),
784
+ vue.renderSlot(_ctx.$slots, "user", { user: $props.user })
785
+ ])
786
+ ])
787
+ ]),
788
+ _: 3 /* FORWARDED */
789
+ })
790
+ ], 8 /* PROPS */, _hoisted_5$1))
791
+ : vue.createCommentVNode("v-if", true)
792
+ ])
793
+ ]),
794
+ _: 3 /* FORWARDED */
795
+ }))
796
+ }
797
+
798
+ script$l.render = render$l;
799
+ script$l.__file = "src/components/app-bar/QasAppBar.vue";
800
+
801
+ var script$k = {
802
+ mixins: [screenMixin],
803
+
804
+ props: {
805
+ itemClass: {
806
+ default: '',
807
+ type: [Array, Object, String]
808
+ },
809
+
810
+ items: {
811
+ default: () => [],
812
+ type: Array
813
+ },
814
+
815
+ modelValue: {
816
+ default: true,
817
+ type: Boolean
818
+ }
819
+ },
820
+
821
+ emits: ['update:modelValue'],
822
+
823
+ data () {
824
+ return {
825
+ miniMode: false
826
+ }
827
+ },
828
+
829
+ computed: {
830
+ activeHeaderClass () {
831
+ return 'qas-app-menu__header--active'
832
+ },
833
+
834
+ activeItemClass () {
835
+ return 'bg-primary text-primary-contrast'
836
+ },
837
+
838
+ model: {
839
+ get () {
840
+ return this.modelValue
841
+ },
842
+
843
+ set (value) {
844
+ return this.$emit('update:modelValue', value)
845
+ }
846
+ }
847
+ },
848
+
849
+ methods: {
850
+ beforeHide () {
851
+ if (this.$_isLarge) {
852
+ this.model = true;
853
+ this.miniMode = !this.miniMode;
854
+ }
855
+ },
856
+
857
+ hasChildren ({ children }) {
858
+ return !!children?.length
859
+ },
860
+
861
+ shouldExpand ({ children, to }) {
862
+ return !!children?.length && this.$route.matched.some(item => item.path === to.path)
863
+ }
864
+ }
865
+ };
866
+
867
+ function render$k(_ctx, _cache, $props, $setup, $data, $options) {
868
+ const _component_q_icon = vue.resolveComponent("q-icon");
869
+ const _component_q_item_section = vue.resolveComponent("q-item-section");
870
+ const _component_q_item_label = vue.resolveComponent("q-item-label");
871
+ const _component_q_item = vue.resolveComponent("q-item");
872
+ const _component_q_expansion_item = vue.resolveComponent("q-expansion-item");
873
+ const _component_q_list = vue.resolveComponent("q-list");
874
+ const _component_q_drawer = vue.resolveComponent("q-drawer");
875
+ const _directive_ripple = vue.resolveDirective("ripple");
876
+
877
+ return (vue.openBlock(), vue.createBlock(_component_q_drawer, {
878
+ modelValue: $options.model,
879
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.model) = $event)),
880
+ class: "bg-primary-contrast qas-app-menu",
881
+ mini: $data.miniMode,
882
+ width: 230,
883
+ onBeforeHide: $options.beforeHide
884
+ }, {
885
+ default: vue.withCtx(() => [
886
+ vue.createVNode(_component_q_list, {
887
+ class: "text-primary",
888
+ padding: ""
889
+ }, {
890
+ default: vue.withCtx(() => [
891
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($props.items, (header, index) => {
892
+ return (vue.openBlock(), vue.createElementBlock("div", { key: index }, [
893
+ ($options.hasChildren(header))
894
+ ? (vue.openBlock(), vue.createBlock(_component_q_expansion_item, {
895
+ key: 0,
896
+ "active-class": $options.activeHeaderClass,
897
+ "default-opened": $options.shouldExpand(header),
898
+ "expand-icon": "o_keyboard_arrow_down",
899
+ "expand-separator": "",
900
+ icon: header.icon,
901
+ label: header.label,
902
+ to: header.to
903
+ }, {
904
+ default: vue.withCtx(() => [
905
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(header.children, (item, itemIndex) => {
906
+ return vue.withDirectives((vue.openBlock(), vue.createBlock(_component_q_item, {
907
+ key: itemIndex,
908
+ "active-class": $options.activeItemClass,
909
+ clickable: "",
910
+ to: item.to
911
+ }, {
912
+ default: vue.withCtx(() => [
913
+ (item.icon)
914
+ ? (vue.openBlock(), vue.createBlock(_component_q_item_section, {
915
+ key: 0,
916
+ avatar: ""
917
+ }, {
918
+ default: vue.withCtx(() => [
919
+ vue.createVNode(_component_q_icon, {
920
+ name: item.icon
921
+ }, null, 8 /* PROPS */, ["name"])
922
+ ]),
923
+ _: 2 /* DYNAMIC */
924
+ }, 1024 /* DYNAMIC_SLOTS */))
925
+ : vue.createCommentVNode("v-if", true),
926
+ vue.createVNode(_component_q_item_section, null, {
927
+ default: vue.withCtx(() => [
928
+ vue.createVNode(_component_q_item_label, null, {
929
+ default: vue.withCtx(() => [
930
+ vue.createTextVNode(vue.toDisplayString(item.label), 1 /* TEXT */)
931
+ ]),
932
+ _: 2 /* DYNAMIC */
933
+ }, 1024 /* DYNAMIC_SLOTS */)
934
+ ]),
935
+ _: 2 /* DYNAMIC */
936
+ }, 1024 /* DYNAMIC_SLOTS */)
937
+ ]),
938
+ _: 2 /* DYNAMIC */
939
+ }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["active-class", "to"])), [
940
+ [_directive_ripple]
941
+ ])
942
+ }), 128 /* KEYED_FRAGMENT */))
943
+ ]),
944
+ _: 2 /* DYNAMIC */
945
+ }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["active-class", "default-opened", "icon", "label", "to"]))
946
+ : vue.withDirectives((vue.openBlock(), vue.createBlock(_component_q_item, {
947
+ key: index,
948
+ "active-class": $options.activeItemClass,
949
+ clickable: "",
950
+ to: header.to
951
+ }, {
952
+ default: vue.withCtx(() => [
953
+ (header.icon)
954
+ ? (vue.openBlock(), vue.createBlock(_component_q_item_section, {
955
+ key: 0,
956
+ avatar: ""
957
+ }, {
958
+ default: vue.withCtx(() => [
959
+ vue.createVNode(_component_q_icon, {
960
+ name: header.icon
961
+ }, null, 8 /* PROPS */, ["name"])
962
+ ]),
963
+ _: 2 /* DYNAMIC */
964
+ }, 1024 /* DYNAMIC_SLOTS */))
965
+ : vue.createCommentVNode("v-if", true),
966
+ vue.createVNode(_component_q_item_section, null, {
967
+ default: vue.withCtx(() => [
968
+ vue.createVNode(_component_q_item_label, null, {
969
+ default: vue.withCtx(() => [
970
+ vue.createTextVNode(vue.toDisplayString(header.label), 1 /* TEXT */)
971
+ ]),
972
+ _: 2 /* DYNAMIC */
973
+ }, 1024 /* DYNAMIC_SLOTS */)
974
+ ]),
975
+ _: 2 /* DYNAMIC */
976
+ }, 1024 /* DYNAMIC_SLOTS */)
977
+ ]),
978
+ _: 2 /* DYNAMIC */
979
+ }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["active-class", "to"])), [
980
+ [_directive_ripple]
981
+ ])
982
+ ]))
983
+ }), 128 /* KEYED_FRAGMENT */))
984
+ ]),
985
+ _: 1 /* STABLE */
986
+ })
987
+ ]),
988
+ _: 1 /* STABLE */
989
+ }, 8 /* PROPS */, ["modelValue", "mini", "onBeforeHide"]))
990
+ }
991
+
992
+ script$k.render = render$k;
993
+ script$k.__file = "src/components/app-menu/QasAppMenu.vue";
994
+
995
+ var script$j = {
996
+ props: {
997
+ apps: {
998
+ default: () => [],
999
+ type: Array
1000
+ }
1001
+ }
1002
+ };
1003
+
1004
+ const _hoisted_1$b = { class: "bg-white q-col-gutter-sm q-pa-sm row" };
1005
+ const _hoisted_2$6 = { class: "q-mt-xs" };
1006
+
1007
+ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
1008
+ const _component_q_img = vue.resolveComponent("q-img");
1009
+ const _component_q_btn = vue.resolveComponent("q-btn");
1010
+ const _component_q_popup_proxy = vue.resolveComponent("q-popup-proxy");
1011
+ const _component_qas_btn = vue.resolveComponent("qas-btn");
1012
+
1013
+ return (vue.openBlock(), vue.createBlock(_component_qas_btn, {
1014
+ dense: "",
1015
+ icon: "o_apps",
1016
+ round: ""
1017
+ }, {
1018
+ default: vue.withCtx(() => [
1019
+ vue.createVNode(_component_q_popup_proxy, {
1020
+ anchor: "bottom middle",
1021
+ "max-width": "400px",
1022
+ self: "top middle"
1023
+ }, {
1024
+ default: vue.withCtx(() => [
1025
+ vue.createElementVNode("div", _hoisted_1$b, [
1026
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($props.apps, (app, index) => {
1027
+ return (vue.openBlock(), vue.createElementBlock("div", {
1028
+ key: index,
1029
+ class: "col-6 col-sm-4"
1030
+ }, [
1031
+ vue.createVNode(_component_q_btn, {
1032
+ class: "full-width q-pa-sm",
1033
+ flat: "",
1034
+ href: app.href,
1035
+ "no-caps": "",
1036
+ type: "a"
1037
+ }, {
1038
+ default: vue.withCtx(() => [
1039
+ vue.createVNode(_component_q_img, {
1040
+ alt: app.label,
1041
+ class: "rounded-borders",
1042
+ src: app.image
1043
+ }, null, 8 /* PROPS */, ["alt", "src"]),
1044
+ vue.createElementVNode("div", _hoisted_2$6, vue.toDisplayString(app.label), 1 /* TEXT */)
1045
+ ]),
1046
+ _: 2 /* DYNAMIC */
1047
+ }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["href"])
1048
+ ]))
1049
+ }), 128 /* KEYED_FRAGMENT */))
1050
+ ])
1051
+ ]),
1052
+ _: 1 /* STABLE */
1053
+ })
1054
+ ]),
1055
+ _: 1 /* STABLE */
1056
+ }))
1057
+ }
1058
+
1059
+ script$j.render = render$j;
1060
+ script$j.__file = "src/components/apps-menu/QasAppsMenu.vue";
1061
+
1062
+ var script$i = {
1063
+ name: 'QasAvatar',
1064
+
1065
+ props: {
1066
+ color: {
1067
+ default: 'primary',
1068
+ type: String
1069
+ },
1070
+
1071
+ dark: {
1072
+ type: Boolean
1073
+ },
1074
+
1075
+ icon: {
1076
+ default: 'o_error',
1077
+ type: String
1078
+ },
1079
+
1080
+ image: {
1081
+ default: '',
1082
+ type: String
1083
+ },
1084
+
1085
+ textColor: {
1086
+ default: '',
1087
+ type: String
1088
+ },
1089
+
1090
+ title: {
1091
+ default: '',
1092
+ type: String
1093
+ }
1094
+ },
1095
+
1096
+ data () {
1097
+ return {
1098
+ hasImageError: false
1099
+ }
1100
+ },
1101
+
1102
+ computed: {
1103
+ avatarClass () {
1104
+ if (this.hasImage) {
1105
+ return null
1106
+ }
1107
+
1108
+ const contrastColor = this.textColor ? this.textColor : this.contrastColor;
1109
+
1110
+ return [
1111
+ this.dark
1112
+ ? `bg-${this.color} text-${contrastColor}`
1113
+ : `bg-${contrastColor} text-${this.color}`
1114
+ ]
1115
+ },
1116
+
1117
+ contrastColor () {
1118
+ return `${this.color}-contrast`
1119
+ },
1120
+
1121
+ firstLetter () {
1122
+ return this.title[0].toUpperCase()
1123
+ },
1124
+
1125
+ hasImage () {
1126
+ return !this.hasImageError && !!this.image
1127
+ },
1128
+
1129
+ hasTitle () {
1130
+ return !!this.title
1131
+ }
1132
+ },
1133
+
1134
+ watch: {
1135
+ image () {
1136
+ this.hasImageError = false;
1137
+ }
1138
+ },
1139
+
1140
+ methods: {
1141
+ onImageLoadedError () {
1142
+ this.hasImageError = true;
1143
+ }
1144
+ }
1145
+ };
1146
+
1147
+ function render$i(_ctx, _cache, $props, $setup, $data, $options) {
1148
+ const _component_q_img = vue.resolveComponent("q-img");
1149
+ const _component_q_icon = vue.resolveComponent("q-icon");
1150
+ const _component_q_avatar = vue.resolveComponent("q-avatar");
1151
+
1152
+ return (vue.openBlock(), vue.createBlock(_component_q_avatar, {
1153
+ class: vue.normalizeClass(["text-bold", $options.avatarClass]),
1154
+ rounded: ""
1155
+ }, {
1156
+ default: vue.withCtx(() => [
1157
+ ($options.hasImage)
1158
+ ? (vue.openBlock(), vue.createBlock(_component_q_img, {
1159
+ key: 0,
1160
+ alt: $props.title,
1161
+ ratio: 1,
1162
+ "spinner-color": "primary",
1163
+ "spinner-size": "16px",
1164
+ src: $props.image,
1165
+ onError: $options.onImageLoadedError
1166
+ }, null, 8 /* PROPS */, ["alt", "src", "onError"]))
1167
+ : ($options.hasTitle)
1168
+ ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
1169
+ vue.createTextVNode(vue.toDisplayString($options.firstLetter), 1 /* TEXT */)
1170
+ ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
1171
+ : (vue.openBlock(), vue.createBlock(_component_q_icon, {
1172
+ key: 2,
1173
+ name: $props.icon
1174
+ }, null, 8 /* PROPS */, ["name"]))
1175
+ ]),
1176
+ _: 1 /* STABLE */
1177
+ }, 8 /* PROPS */, ["class"]))
1178
+ }
1179
+
1180
+ script$i.render = render$i;
1181
+ script$i.__file = "src/components/avatar/QasAvatar.vue";
1182
+
1183
+ var script$h = {
1184
+ name: 'QasBox',
1185
+
1186
+ props: {
1187
+ outlined: {
1188
+ type: Boolean
1189
+ },
1190
+
1191
+ unelevated: {
1192
+ type: Boolean
1193
+ }
1194
+ },
1195
+
1196
+ computed: {
1197
+ boxClass () {
1198
+ return {
1199
+ 'border-primary-contrast': this.outlined,
1200
+ 'shadow-primary': !this.unelevated
1201
+ }
1202
+ }
1203
+ }
1204
+ };
1205
+
1206
+ function render$h(_ctx, _cache, $props, $setup, $data, $options) {
1207
+ return (vue.openBlock(), vue.createElementBlock("div", {
1208
+ class: vue.normalizeClass(["bg-white q-px-md q-py-lg rounded-borders", $options.boxClass])
1209
+ }, [
1210
+ vue.renderSlot(_ctx.$slots, "default")
1211
+ ], 2 /* CLASS */))
1212
+ }
1213
+
1214
+ script$h.render = render$h;
1215
+ script$h.__file = "src/components/box/QasBox.vue";
1216
+
1217
+ var script$g = {
1218
+ name: 'QasActionsMenu',
1219
+
1220
+ props: {
1221
+ bgImagePosition: {
1222
+ type: String,
1223
+ default: 'center'
1224
+ },
1225
+
1226
+ formMode: {
1227
+ type: Boolean
1228
+ },
1229
+
1230
+ gutter: {
1231
+ type: String,
1232
+ default: 'sm'
1233
+ },
1234
+
1235
+ images: {
1236
+ default: () => ([]),
1237
+ type: Array
1238
+ },
1239
+
1240
+ outlined: {
1241
+ type: Boolean
1242
+ },
1243
+
1244
+ result: {
1245
+ default: () => ({}),
1246
+ type: Object
1247
+ },
1248
+
1249
+ useHeader: {
1250
+ type: Boolean
1251
+ }
1252
+ },
1253
+
1254
+ data () {
1255
+ return {
1256
+ slideImage: 0
1257
+ }
1258
+ },
1259
+
1260
+ computed: {
1261
+ bgImagePositionClass () {
1262
+ return `bg-position-${this.bgImagePosition}`
1263
+ },
1264
+
1265
+ cardClasses () {
1266
+ return this.formMode ? 'bg-white border-primary no-shadow' : 'box-shadow-1'
1267
+ },
1268
+
1269
+ gutterClass () {
1270
+ return `q-col-gutter-${this.gutter}`
1271
+ },
1272
+
1273
+ hasActionsSlot () {
1274
+ return !!this.$slots.actions
1275
+ },
1276
+
1277
+ hasImages () {
1278
+ return this.images.length > 1
1279
+ },
1280
+
1281
+ imagesLength () {
1282
+ return this.images?.length
1283
+ },
1284
+
1285
+ imagesList () {
1286
+ return this.imagesLength && this.images.slice(0, 3)
1287
+ }
1288
+ },
1289
+
1290
+ methods: {
1291
+ getNavigationIcon (active, btn) {
1292
+ return active ? 'o_radio_button_checked' : btn.icon
1293
+ }
1294
+ }
1295
+ };
1296
+
1297
+ const _hoisted_1$a = { class: "col-12 col-lg-3 col-md-4 col-sm-6" };
1298
+ const _hoisted_2$5 = {
1299
+ key: 0,
1300
+ class: "overflow-hidden relative-position w-full"
1301
+ };
1302
+ const _hoisted_3$2 = { class: "absolute-top flex items-center q-pa-md" };
1303
+ const _hoisted_4$1 = {
1304
+ key: 1,
1305
+ class: "border-primary-contrast border-top overflow-hidden row"
1306
+ };
1307
+
1308
+ function render$g(_ctx, _cache, $props, $setup, $data, $options) {
1309
+ const _component_qas_btn = vue.resolveComponent("qas-btn");
1310
+ const _component_q_carousel_slide = vue.resolveComponent("q-carousel-slide");
1311
+ const _component_q_carousel = vue.resolveComponent("q-carousel");
1312
+ const _component_q_card_section = vue.resolveComponent("q-card-section");
1313
+ const _component_q_card = vue.resolveComponent("q-card");
1314
+
1315
+ return (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [
1316
+ vue.createVNode(_component_q_card, {
1317
+ class: vue.normalizeClass(["border-radius-lg column full-height", $options.cardClasses])
1318
+ }, {
1319
+ default: vue.withCtx(() => [
1320
+ ($props.useHeader)
1321
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$5, [
1322
+ vue.renderSlot(_ctx.$slots, "header", {}, () => [
1323
+ vue.createVNode(_component_q_carousel, {
1324
+ modelValue: $data.slideImage,
1325
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($data.slideImage) = $event)),
1326
+ animated: "",
1327
+ class: "cursor-pointer",
1328
+ height: "205px",
1329
+ infinite: "",
1330
+ navigation: $options.hasImages,
1331
+ "navigation-icon": "o_fiber_manual_record",
1332
+ swipeable: ""
1333
+ }, {
1334
+ "navigation-icon": vue.withCtx(({ active, btnProps, onClick }) => [
1335
+ vue.createVNode(_component_qas_btn, {
1336
+ color: "white",
1337
+ dense: "",
1338
+ flat: "",
1339
+ icon: $options.getNavigationIcon(active, btnProps),
1340
+ round: "",
1341
+ size: "sm",
1342
+ onClick: onClick
1343
+ }, null, 8 /* PROPS */, ["icon", "onClick"])
1344
+ ]),
1345
+ default: vue.withCtx(() => [
1346
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($options.imagesList, (item, index) => {
1347
+ return (vue.openBlock(), vue.createBlock(_component_q_carousel_slide, {
1348
+ key: index,
1349
+ class: vue.normalizeClass(["bg-no-repeat", $options.bgImagePositionClass]),
1350
+ "img-src": item,
1351
+ name: index
1352
+ }, null, 8 /* PROPS */, ["class", "img-src", "name"]))
1353
+ }), 128 /* KEYED_FRAGMENT */))
1354
+ ]),
1355
+ _: 1 /* STABLE */
1356
+ }, 8 /* PROPS */, ["modelValue", "navigation"]),
1357
+ vue.createElementVNode("div", _hoisted_3$2, [
1358
+ vue.renderSlot(_ctx.$slots, "carousel-header")
1359
+ ])
1360
+ ])
1361
+ ]))
1362
+ : vue.createCommentVNode("v-if", true),
1363
+ vue.createVNode(_component_q_card_section, { class: "col-grow column justify-between w-full" }, {
1364
+ default: vue.withCtx(() => [
1365
+ vue.createElementVNode("div", {
1366
+ class: vue.normalizeClass(["w-full", $options.gutterClass])
1367
+ }, [
1368
+ vue.renderSlot(_ctx.$slots, "default")
1369
+ ], 2 /* CLASS */)
1370
+ ]),
1371
+ _: 3 /* FORWARDED */
1372
+ }),
1373
+ ($options.hasActionsSlot)
1374
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$1, [
1375
+ vue.renderSlot(_ctx.$slots, "actions")
1376
+ ]))
1377
+ : vue.createCommentVNode("v-if", true)
1378
+ ]),
1379
+ _: 3 /* FORWARDED */
1380
+ }, 8 /* PROPS */, ["class"])
1381
+ ]))
1382
+ }
1383
+
1384
+ script$g.render = render$g;
1385
+ script$g.__file = "src/components/card/QasCard.vue";
1386
+
1387
+ var script$f = {
1388
+ name: 'QasCopy',
1389
+
1390
+ props: {
1391
+ icon: {
1392
+ default: 'o_file_copy',
1393
+ type: String
1394
+ },
1395
+
1396
+ size: {
1397
+ default: 'xs',
1398
+ type: String
1399
+ },
1400
+
1401
+ text: {
1402
+ required: true,
1403
+ type: String
1404
+ }
1405
+ },
1406
+
1407
+ data () {
1408
+ return {
1409
+ isLoading: false
1410
+ }
1411
+ },
1412
+
1413
+ methods: {
1414
+ async copy () {
1415
+ this.isLoading = true;
1416
+
1417
+ try {
1418
+ await quasar.copyToClipboard(this.text);
1419
+ this.$qas.success('Copiado!', this.text);
1420
+ } catch (error) {
1421
+ this.$qas.error('Não foi possível copiar.', this.text);
1422
+ } finally {
1423
+ setTimeout(() => { this.isLoading = false; }, 500);
1424
+ }
1425
+ }
1426
+ }
1427
+ };
1428
+
1429
+ const _hoisted_1$9 = /*#__PURE__*/vue.createTextVNode("Copiar");
1430
+
1431
+ function render$f(_ctx, _cache, $props, $setup, $data, $options) {
1432
+ const _component_q_tooltip = vue.resolveComponent("q-tooltip");
1433
+ const _component_qas_btn = vue.resolveComponent("qas-btn");
1434
+
1435
+ return (vue.openBlock(), vue.createElementBlock("span", null, [
1436
+ vue.renderSlot(_ctx.$slots, "default", {}, () => [
1437
+ vue.createTextVNode(vue.toDisplayString($props.text), 1 /* TEXT */)
1438
+ ]),
1439
+ vue.createVNode(_component_qas_btn, {
1440
+ class: "q-ml-xs",
1441
+ color: "grey-5",
1442
+ flat: "",
1443
+ icon: $props.icon,
1444
+ loading: $data.isLoading,
1445
+ round: "",
1446
+ size: $props.size,
1447
+ onClick: $options.copy
1448
+ }, {
1449
+ default: vue.withCtx(() => [
1450
+ vue.createVNode(_component_q_tooltip, null, {
1451
+ default: vue.withCtx(() => [
1452
+ _hoisted_1$9
1453
+ ]),
1454
+ _: 1 /* STABLE */
1455
+ })
1456
+ ]),
1457
+ _: 1 /* STABLE */
1458
+ }, 8 /* PROPS */, ["icon", "loading", "size", "onClick"])
1459
+ ]))
1460
+ }
1461
+
1462
+ script$f.render = render$f;
1463
+ script$f.__file = "src/components/copy/QasCopy.vue";
1464
+
1465
+ var script$e = {
1466
+ name: 'QasDebugger',
1467
+
1468
+ props: {
1469
+ inspect: {
1470
+ default: () => [],
1471
+ required: true,
1472
+ type: Array
1473
+ }
1474
+ }
1475
+ };
1476
+
1477
+ const _hoisted_1$8 = { class: "bg-grey-3 q-my-md q-pa-md rounded-borders" };
1478
+ const _hoisted_2$4 = /*#__PURE__*/vue.createElementVNode("summary", null, "Debugger", -1 /* HOISTED */);
1479
+ const _hoisted_3$1 = { class: "row" };
1480
+
1481
+ function render$e(_ctx, _cache, $props, $setup, $data, $options) {
1482
+ return (vue.openBlock(), vue.createElementBlock("details", _hoisted_1$8, [
1483
+ _hoisted_2$4,
1484
+ vue.createElementVNode("div", _hoisted_3$1, [
1485
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($props.inspect, (item, index) => {
1486
+ return (vue.openBlock(), vue.createElementBlock("pre", {
1487
+ key: index,
1488
+ class: "col q-pa-sm scroll",
1489
+ style: {"max-height":"300px"}
1490
+ }, vue.toDisplayString(item), 1 /* TEXT */))
1491
+ }), 128 /* KEYED_FRAGMENT */))
1492
+ ])
1493
+ ]))
1494
+ }
1495
+
1496
+ script$e.render = render$e;
1497
+ script$e.__file = "src/components/debugger/QasDebugger.vue";
1498
+
1499
+ var script$d = {
1500
+ name: 'QasDialog',
1501
+
1502
+ components: {
1503
+ QasBtn: script$p,
1504
+ QasActions: script$q
1505
+ },
1506
+
1507
+ mixins: [screenMixin],
1508
+
1509
+ props: {
1510
+ btnActionsProps: {
1511
+ default: () => ({}),
1512
+ type: Object
1513
+ },
1514
+
1515
+ cancel: {
1516
+ default: () => ({}),
1517
+ type: [Object, Boolean]
1518
+ },
1519
+
1520
+ card: {
1521
+ default: () => ({}),
1522
+ type: Object
1523
+ },
1524
+
1525
+ cardProps: {
1526
+ default: () => ({}),
1527
+ type: Object
1528
+ },
1529
+
1530
+ maxWidth: {
1531
+ default: '',
1532
+ type: String
1533
+ },
1534
+
1535
+ minWidth: {
1536
+ default: '',
1537
+ type: String
1538
+ },
1539
+
1540
+ ok: {
1541
+ default: () => ({}),
1542
+ type: [Object, Boolean]
1543
+ },
1544
+
1545
+ persistent: {
1546
+ default: true,
1547
+ type: Boolean
1548
+ },
1549
+
1550
+ useForm: {
1551
+ type: Boolean
1552
+ },
1553
+
1554
+ modelValue: {
1555
+ type: Boolean
1556
+ },
1557
+
1558
+ usePlugin: {
1559
+ type: Boolean
1560
+ }
1561
+ },
1562
+
1563
+ emits: [
1564
+ 'update:modelValue',
1565
+ 'validate',
1566
+ 'ok',
1567
+ 'hide',
1568
+ 'update:open'
1569
+ ],
1570
+
1571
+ computed: {
1572
+ defaultCancel () {
1573
+ return {
1574
+ ...this.cancel?.events,
1575
+ label: 'Cancelar',
1576
+ outline: true,
1577
+ ...this.cancel?.props
1578
+ }
1579
+ },
1580
+
1581
+ defaultOk () {
1582
+ return {
1583
+ ...this.ok?.events,
1584
+ label: 'Ok',
1585
+ type: this.ok?.props?.type || this.useForm ? 'submit' : 'button',
1586
+ ...this.ok?.props
1587
+ }
1588
+ },
1589
+
1590
+ style () {
1591
+ return {
1592
+ maxWidth: this.maxWidth || (this.$_isSmall ? '' : '600px'),
1593
+ minWidth: this.minWidth || (this.$_isSmall ? '' : '400px')
1594
+ }
1595
+ },
1596
+
1597
+ componentTag () {
1598
+ return this.useForm ? 'q-form' : 'div'
1599
+ },
1600
+
1601
+ dialogProps () {
1602
+ return {
1603
+ ...(!this.usePlugin && { modelValue: this.modelValue }),
1604
+ ...this.$attrs
1605
+ }
1606
+ }
1607
+ },
1608
+
1609
+ methods: {
1610
+ async submitHandler () {
1611
+ this.useForm && this.$emit('validate', await this.$refs.form.validate());
1612
+ },
1613
+
1614
+ // metodo para funcionar como plugin
1615
+ show () {
1616
+ this.$refs.dialog.show();
1617
+ },
1618
+
1619
+ // metodo para funcionar como plugin
1620
+ hide () {
1621
+ this.$refs.dialog.hide();
1622
+ },
1623
+
1624
+ // metodo para funcionar como plugin
1625
+ onDialogHide () {
1626
+ this.$emit('hide');
1627
+ },
1628
+
1629
+ updateModelValue (value) {
1630
+ this.$emit('update:modelValue', value);
1631
+ }
1632
+ }
1633
+ };
1634
+
1635
+ const _hoisted_1$7 = { class: "text-bold text-h6" };
1636
+ const _hoisted_2$3 = { key: 0 };
1637
+
1638
+ function render$d(_ctx, _cache, $props, $setup, $data, $options) {
1639
+ const _component_q_card_section = vue.resolveComponent("q-card-section");
1640
+ const _component_qas_btn = vue.resolveComponent("qas-btn");
1641
+ const _component_qas_actions = vue.resolveComponent("qas-actions");
1642
+ const _component_q_card = vue.resolveComponent("q-card");
1643
+ const _component_q_dialog = vue.resolveComponent("q-dialog");
1644
+ const _directive_close_popup = vue.resolveDirective("close-popup");
1645
+
1646
+ return (vue.openBlock(), vue.createBlock(_component_q_dialog, vue.mergeProps({
1647
+ ref: "dialog",
1648
+ persistent: $props.persistent
1649
+ }, $options.dialogProps, {
1650
+ onHide: $options.onDialogHide,
1651
+ "onUpdate:modelValue": $options.updateModelValue
1652
+ }), {
1653
+ default: vue.withCtx(() => [
1654
+ vue.createVNode(_component_q_card, vue.mergeProps($props.cardProps, {
1655
+ class: "q-pa-sm",
1656
+ style: $options.style
1657
+ }), {
1658
+ default: vue.withCtx(() => [
1659
+ vue.createVNode(_component_q_card_section, null, {
1660
+ default: vue.withCtx(() => [
1661
+ vue.renderSlot(_ctx.$slots, "header", {}, () => [
1662
+ vue.createElementVNode("div", _hoisted_1$7, vue.toDisplayString($props.card.title), 1 /* TEXT */)
1663
+ ])
1664
+ ]),
1665
+ _: 3 /* FORWARDED */
1666
+ }),
1667
+ vue.createVNode(_component_q_card_section, { class: "q-pt-none" }, {
1668
+ default: vue.withCtx(() => [
1669
+ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent($options.componentTag), { ref: "form" }, {
1670
+ default: vue.withCtx(() => [
1671
+ vue.renderSlot(_ctx.$slots, "description", {}, () => [
1672
+ ($props.card.description)
1673
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$3, vue.toDisplayString($props.card.description), 1 /* TEXT */))
1674
+ : vue.createCommentVNode("v-if", true)
1675
+ ])
1676
+ ]),
1677
+ _: 3 /* FORWARDED */
1678
+ }, 512 /* NEED_PATCH */))
1679
+ ]),
1680
+ _: 3 /* FORWARDED */
1681
+ }),
1682
+ vue.createVNode(_component_q_card_section, null, {
1683
+ default: vue.withCtx(() => [
1684
+ vue.renderSlot(_ctx.$slots, "actions", {}, () => [
1685
+ vue.createVNode(_component_qas_actions, vue.normalizeProps(vue.guardReactiveProps($props.btnActionsProps)), {
1686
+ primary: vue.withCtx(() => [
1687
+ ($props.ok)
1688
+ ? vue.withDirectives((vue.openBlock(), vue.createBlock(_component_qas_btn, vue.mergeProps({
1689
+ key: 0,
1690
+ class: "full-width"
1691
+ }, $options.defaultOk, { onClick: $options.submitHandler }), null, 16 /* FULL_PROPS */, ["onClick"])), [
1692
+ [_directive_close_popup, !$props.useForm]
1693
+ ])
1694
+ : vue.createCommentVNode("v-if", true)
1695
+ ]),
1696
+ secondary: vue.withCtx(() => [
1697
+ ($props.cancel)
1698
+ ? vue.withDirectives((vue.openBlock(), vue.createBlock(_component_qas_btn, vue.mergeProps({
1699
+ key: 0,
1700
+ class: "full-width"
1701
+ }, $options.defaultCancel), null, 16 /* FULL_PROPS */)), [
1702
+ [_directive_close_popup]
1703
+ ])
1704
+ : vue.createCommentVNode("v-if", true)
1705
+ ]),
1706
+ _: 1 /* STABLE */
1707
+ }, 16 /* FULL_PROPS */)
1708
+ ])
1709
+ ]),
1710
+ _: 3 /* FORWARDED */
1711
+ })
1712
+ ]),
1713
+ _: 3 /* FORWARDED */
1714
+ }, 16 /* FULL_PROPS */, ["style"])
1715
+ ]),
1716
+ _: 3 /* FORWARDED */
1717
+ }, 16 /* FULL_PROPS */, ["persistent", "onHide", "onUpdate:modelValue"]))
1718
+ }
1719
+
1720
+ script$d.render = render$d;
1721
+ script$d.__file = "src/components/dialog/QasDialog.vue";
1722
+
1723
+ var script$c = {
1724
+ name: 'QasInput',
1725
+
1726
+ props: {
1727
+ modelValue: {
1728
+ default: '',
1729
+ type: String
1730
+ }
1731
+ },
1732
+
1733
+ emits: ['update:modelValue'],
1734
+
1735
+ computed: {
1736
+ hasError () {
1737
+ return this.inputReference.hasError
1738
+ },
1739
+
1740
+ inputReference () {
1741
+ return this.$refs.input
1742
+ },
1743
+
1744
+ mask () {
1745
+ const { mask } = this.$attrs;
1746
+ const hasDefaultMask = Object.prototype.hasOwnProperty.call(this.masks, mask);
1747
+
1748
+ return hasDefaultMask ? this.masks[mask]() : mask
1749
+ },
1750
+
1751
+ masks () {
1752
+ return {
1753
+ 'company-document': () => '##.###.###/####-##',
1754
+ document: () => this.toggleMask('###.###.###-###', '##.###.###/####-##'),
1755
+ 'personal-document': () => '###.###.###-##',
1756
+ phone: () => this.toggleMask('(##) ####-#####', '(##) #####-####'),
1757
+ 'postal-code': () => '#####-###'
1758
+ }
1759
+ },
1760
+
1761
+ model: {
1762
+ get () {
1763
+ return this.modelValue
1764
+ },
1765
+
1766
+ set (value) {
1767
+ return this.$emit('update:modelValue', value)
1768
+ }
1769
+ }
1770
+ },
1771
+
1772
+ watch: {
1773
+ mask () {
1774
+ const input = this.inputReference.$el?.querySelector('input');
1775
+
1776
+ requestAnimationFrame(() => {
1777
+ input.selectionStart = input.value ? input.value.length : '';
1778
+ });
1779
+ }
1780
+ },
1781
+
1782
+ methods: {
1783
+ focus () {
1784
+ return this.inputReference.focus()
1785
+ },
1786
+
1787
+ resetValidation () {
1788
+ return this.inputReference.resetValidation()
1789
+ },
1790
+
1791
+ toggleMask (first, second) {
1792
+ const length = first.split('#').length - 2;
1793
+ return this.modelValue?.length > length ? second : first
1794
+ },
1795
+
1796
+ validate (value) {
1797
+ return this.inputReference.validate(value)
1798
+ }
1799
+ }
1800
+ };
1801
+
1802
+ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
1803
+ const _component_q_input = vue.resolveComponent("q-input");
1804
+
1805
+ return (vue.openBlock(), vue.createElementBlock("div", null, [
1806
+ vue.createVNode(_component_q_input, vue.mergeProps({
1807
+ ref: "input",
1808
+ modelValue: $options.model,
1809
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.model) = $event)),
1810
+ "bottom-slots": ""
1811
+ }, _ctx.$attrs, {
1812
+ mask: $options.mask,
1813
+ "unmasked-value": ""
1814
+ }), vue.createSlots({ _: 2 /* DYNAMIC */ }, [
1815
+ vue.renderList(_ctx.$slots, (_, name) => {
1816
+ return {
1817
+ name: name,
1818
+ fn: vue.withCtx((context) => [
1819
+ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(context || {})))
1820
+ ])
1821
+ }
1822
+ })
1823
+ ]), 1040 /* FULL_PROPS, DYNAMIC_SLOTS */, ["modelValue", "mask"])
1824
+ ]))
1825
+ }
1826
+
1827
+ script$c.render = render$c;
1828
+ script$c.__file = "src/components/input/QasInput.vue";
1829
+
1830
+ var script$b = {
1831
+ name: 'QasLabel',
1832
+
1833
+ props: {
1834
+ count: {
1835
+ default: 0,
1836
+ type: [Number, String]
1837
+ },
1838
+
1839
+ label: {
1840
+ default: '',
1841
+ type: String
1842
+ },
1843
+
1844
+ margin: {
1845
+ default: 'sm',
1846
+ type: String
1847
+ }
1848
+ },
1849
+
1850
+ computed: {
1851
+ labelClass () {
1852
+ return `q-mb-${this.margin}`
1853
+ },
1854
+
1855
+ labelWithSuffix () {
1856
+ return addCounterSuffix(this.label, parseFloat(this.count))
1857
+ }
1858
+ }
1859
+ };
1860
+
1861
+ function render$b(_ctx, _cache, $props, $setup, $data, $options) {
1862
+ return (vue.openBlock(), vue.createElementBlock("div", {
1863
+ class: vue.normalizeClass(["text-bold text-subtitle2", $options.labelClass])
1864
+ }, [
1865
+ vue.renderSlot(_ctx.$slots, "default", { labelWithSuffix: $options.labelWithSuffix }, () => [
1866
+ vue.createTextVNode(vue.toDisplayString($options.labelWithSuffix), 1 /* TEXT */)
1867
+ ])
1868
+ ], 2 /* CLASS */))
1869
+ }
1870
+
1871
+ script$b.render = render$b;
1872
+ script$b.__file = "src/components/label/QasLabel.vue";
1873
+
1874
+ var script$a = {
1875
+ name: 'QasListItems',
1876
+
1877
+ components: {
1878
+ QasBtn: script$p
1879
+ },
1880
+
1881
+ props: {
1882
+ iconProps: {
1883
+ default: () => ({ color: 'primary', name: 'o_chevron_right' }),
1884
+ type: Object
1885
+ },
1886
+
1887
+ list: {
1888
+ default: () => [],
1889
+ type: Array
1890
+ },
1891
+
1892
+ redirectKey: {
1893
+ default: 'uuid',
1894
+ type: String
1895
+ },
1896
+
1897
+ redirectOnIcon: {
1898
+ default: true,
1899
+ type: Boolean
1900
+ },
1901
+
1902
+ to: {
1903
+ default: () => ({}),
1904
+ type: Object
1905
+ },
1906
+
1907
+ useSectionActions: {
1908
+ default: true,
1909
+ type: Boolean
1910
+ }
1911
+ },
1912
+
1913
+ methods: {
1914
+ getRedirectPayload (item) {
1915
+ return {
1916
+ params: { [this.redirectKey]: item[this.redirectKey] },
1917
+ ...this.to
1918
+ }
1919
+ },
1920
+
1921
+ redirect (item) {
1922
+ return this.redirectOnIcon ? undefined : this.getRedirectPayload(item)
1923
+ }
1924
+ }
1925
+ };
1926
+
1927
+ const _hoisted_1$6 = { class: "qas-list-items shadow-primary" };
1928
+
1929
+ function render$a(_ctx, _cache, $props, $setup, $data, $options) {
1930
+ const _component_q_item_section = vue.resolveComponent("q-item-section");
1931
+ const _component_q_icon = vue.resolveComponent("q-icon");
1932
+ const _component_qas_btn = vue.resolveComponent("qas-btn");
1933
+ const _component_q_item = vue.resolveComponent("q-item");
1934
+ const _component_q_list = vue.resolveComponent("q-list");
1935
+ const _directive_ripple = vue.resolveDirective("ripple");
1936
+
1937
+ return (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
1938
+ vue.createVNode(_component_q_list, {
1939
+ bordered: "",
1940
+ class: "rounded-borders",
1941
+ separator: ""
1942
+ }, {
1943
+ default: vue.withCtx(() => [
1944
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($props.list, (item, index) => {
1945
+ return vue.withDirectives((vue.openBlock(), vue.createBlock(_component_q_item, {
1946
+ key: index,
1947
+ clickable: !$props.redirectOnIcon,
1948
+ to: $options.redirect(item)
1949
+ }, {
1950
+ default: vue.withCtx(() => [
1951
+ vue.renderSlot(_ctx.$slots, "item", {
1952
+ index: index,
1953
+ item: item
1954
+ }, () => [
1955
+ vue.createVNode(_component_q_item_section, null, {
1956
+ default: vue.withCtx(() => [
1957
+ vue.renderSlot(_ctx.$slots, "item-section-left", {
1958
+ index: index,
1959
+ item: item
1960
+ })
1961
+ ]),
1962
+ _: 2 /* DYNAMIC */
1963
+ }, 1024 /* DYNAMIC_SLOTS */),
1964
+ ($props.useSectionActions)
1965
+ ? (vue.openBlock(), vue.createBlock(_component_q_item_section, {
1966
+ key: 0,
1967
+ side: ""
1968
+ }, {
1969
+ default: vue.withCtx(() => [
1970
+ vue.renderSlot(_ctx.$slots, "item-section-side", {
1971
+ index: index,
1972
+ item: item
1973
+ }, () => [
1974
+ vue.createVNode(_component_qas_btn, {
1975
+ flat: "",
1976
+ round: "",
1977
+ to: $options.getRedirectPayload(item)
1978
+ }, {
1979
+ default: vue.withCtx(() => [
1980
+ vue.createVNode(_component_q_icon, vue.normalizeProps(vue.guardReactiveProps($props.iconProps)), null, 16 /* FULL_PROPS */)
1981
+ ]),
1982
+ _: 2 /* DYNAMIC */
1983
+ }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["to"])
1984
+ ])
1985
+ ]),
1986
+ _: 2 /* DYNAMIC */
1987
+ }, 1024 /* DYNAMIC_SLOTS */))
1988
+ : vue.createCommentVNode("v-if", true)
1989
+ ])
1990
+ ]),
1991
+ _: 2 /* DYNAMIC */
1992
+ }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["clickable", "to"])), [
1993
+ [_directive_ripple]
1994
+ ])
1995
+ }), 128 /* KEYED_FRAGMENT */))
1996
+ ]),
1997
+ _: 3 /* FORWARDED */
1998
+ })
1999
+ ]))
2000
+ }
2001
+
2002
+ script$a.render = render$a;
2003
+ script$a.__file = "src/components/list-items/QasListItems.vue";
2004
+
2005
+ const defaultModes = {
2006
+ decimal: 'commaDecimalCharDotSeparator',
2007
+ integer: ['commaDecimalCharDotSeparator', 'integer'],
2008
+ money: 'Brazilian',
2009
+ percent: 'percentageEU2dec'
2010
+ };
2011
+
2012
+ var script$9 = {
2013
+ name: 'QasNumericInput',
2014
+
2015
+ props: {
2016
+ allowNegative: {
2017
+ default: true,
2018
+ type: Boolean
2019
+ },
2020
+
2021
+ allowPositive: {
2022
+ default: true,
2023
+ type: Boolean
2024
+ },
2025
+
2026
+ autonumericProps: {
2027
+ default: () => ({}),
2028
+ type: Object
2029
+ },
2030
+
2031
+ decimalPlaces: {
2032
+ default: 2,
2033
+ type: Number
2034
+ },
2035
+
2036
+ mode: {
2037
+ default: 'integer',
2038
+ type: String,
2039
+ validator: value => ['integer', 'decimal', 'percent', 'money'].includes(value)
2040
+ },
2041
+
2042
+ modelValue: {
2043
+ default: '',
2044
+ validator (value) {
2045
+ return typeof value === 'number' || typeof value === 'string' || value === '' || value === null
2046
+ }
2047
+ },
2048
+
2049
+ preset: {
2050
+ default: false,
2051
+ type: [Boolean, String]
2052
+ }
2053
+ },
2054
+
2055
+ emits: ['update:modelValue'],
2056
+
2057
+ data () {
2058
+ return {
2059
+ autoNumeric: null
2060
+ }
2061
+ },
2062
+
2063
+ computed: {
2064
+ defaultMode () {
2065
+ return defaultModes[this.mode]
2066
+ },
2067
+
2068
+ model: {
2069
+ get () {
2070
+ return this.modelValue
2071
+ },
2072
+
2073
+ set () {
2074
+ this.$emit('update:modelValue', this.autoNumeric.getNumber());
2075
+ }
2076
+ }
2077
+ },
2078
+
2079
+ async created () {
2080
+ const autoNumericPredefinedOptions = AutoNumeric__default["default"].getPredefinedOptions();
2081
+
2082
+ let option = this.preset || this.defaultMode;
2083
+
2084
+ if (!Array.isArray(option)) {
2085
+ option = [option];
2086
+ }
2087
+
2088
+ const options = {};
2089
+
2090
+ for (const value of option) {
2091
+ Object.assign(options, autoNumericPredefinedOptions[value]);
2092
+ }
2093
+
2094
+ if (!this.allowNegative) {
2095
+ options.minimumValue = 0;
2096
+ }
2097
+
2098
+ if (!this.allowPositive) {
2099
+ options.maximumValue = 0;
2100
+ }
2101
+
2102
+ if (this.mode !== 'integer') {
2103
+ options.decimalPlaces = this.decimalPlaces;
2104
+ }
2105
+
2106
+ Object.assign(options, this.autonumericProps);
2107
+
2108
+ this.$nextTick(() => {
2109
+ this.$refs.input.value = this.modelValue;
2110
+ this.autoNumeric = new AutoNumeric__default["default"](this.$refs.input, options);
2111
+ });
2112
+ },
2113
+
2114
+ beforeUnmount () {
2115
+ this.autoNumeric.remove();
2116
+ }
2117
+ };
2118
+
2119
+ const _hoisted_1$5 = ["id", "model-value", "onInput"];
2120
+
2121
+ function render$9(_ctx, _cache, $props, $setup, $data, $options) {
2122
+ const _component_q_field = vue.resolveComponent("q-field");
2123
+
2124
+ return (vue.openBlock(), vue.createBlock(_component_q_field, {
2125
+ modelValue: $options.model,
2126
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.model) = $event))
2127
+ }, {
2128
+ control: vue.withCtx(({ emitValue, floatingLabel, id, value }) => [
2129
+ vue.withDirectives(vue.createElementVNode("input", {
2130
+ id: id,
2131
+ ref: "input",
2132
+ class: "q-field__input",
2133
+ "model-value": value,
2134
+ onInput: $event => (emitValue($event.target.value))
2135
+ }, null, 40 /* PROPS, HYDRATE_EVENTS */, _hoisted_1$5), [
2136
+ [vue.vShow, floatingLabel]
2137
+ ])
2138
+ ]),
2139
+ _: 1 /* STABLE */
2140
+ }, 8 /* PROPS */, ["modelValue"]))
2141
+ }
2142
+
2143
+ script$9.render = render$9;
2144
+ script$9.__file = "src/components/numeric-input/QasNumericInput.vue";
2145
+
2146
+ var script$8 = {
2147
+ name: 'QasPasswordStrengthChecker',
2148
+
2149
+ mixins: [passwordMixin],
2150
+
2151
+ props: {
2152
+ modelValue: {
2153
+ default: false,
2154
+ type: Boolean
2155
+ },
2156
+
2157
+ password: {
2158
+ default: '',
2159
+ type: String
2160
+ }
2161
+ },
2162
+
2163
+ emits: ['update:model-value'],
2164
+
2165
+ computed: {
2166
+ length () {
2167
+ return this.password.length
2168
+ },
2169
+
2170
+ level () {
2171
+ return this.levelsValues[this.score]
2172
+ },
2173
+
2174
+ levelsValues () {
2175
+ return Object.values(this.levels)
2176
+ },
2177
+
2178
+ score () {
2179
+ let score = 0;
2180
+
2181
+ if (this.length >= parseInt(this.minlength)) {
2182
+ score += this.useLowercase
2183
+ ? (this.password.match(/[a-z]/g) ? 1 : 0)
2184
+ : 1;
2185
+
2186
+ score += this.useNumbers
2187
+ ? (this.password.match(/[0-9]/g) ? 1 : 0)
2188
+ : 1;
2189
+
2190
+ score += this.useSpecial
2191
+ ? (this.password.match(this.specials) ? 1 : 0)
2192
+ : 1;
2193
+
2194
+ score += this.useUppercase
2195
+ ? (this.password.match(/[A-Z]/g) ? 1 : 0)
2196
+ : 1;
2197
+ }
2198
+
2199
+ return score
2200
+ }
2201
+ },
2202
+
2203
+ watch: {
2204
+ password () {
2205
+ this.emitValue();
2206
+ }
2207
+ },
2208
+
2209
+ created () {
2210
+ this.emitValue();
2211
+ },
2212
+
2213
+ methods: {
2214
+ emitValue () {
2215
+ this.$emit('update:model-value', this.score === 4);
2216
+ }
2217
+ }
2218
+ };
2219
+
2220
+ const _hoisted_1$4 = { key: 0 };
2221
+
2222
+ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
2223
+ const _component_q_linear_progress = vue.resolveComponent("q-linear-progress");
2224
+
2225
+ return ($options.length)
2226
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
2227
+ vue.renderSlot(_ctx.$slots, "default", { level: $options.level }, () => [
2228
+ vue.createVNode(_component_q_linear_progress, {
2229
+ color: $options.level.color,
2230
+ "track-color": _ctx.trackColor,
2231
+ value: $options.level.progress
2232
+ }, null, 8 /* PROPS */, ["color", "track-color", "value"]),
2233
+ vue.createElementVNode("div", {
2234
+ class: vue.normalizeClass(["text-caption", $options.level.textClass])
2235
+ }, vue.toDisplayString($options.level.label), 3 /* TEXT, CLASS */)
2236
+ ])
2237
+ ]))
2238
+ : vue.createCommentVNode("v-if", true)
2239
+ }
2240
+
2241
+ script$8.render = render$8;
2242
+ script$8.__file = "src/components/password-strength-checker/QasPasswordStrengthChecker.vue";
2243
+
2244
+ var script$7 = {
2245
+ name: 'QasPasswordInput',
2246
+
2247
+ components: {
2248
+ QasPasswordStrengthChecker: script$8
2249
+ },
2250
+
2251
+ mixins: [passwordMixin],
2252
+
2253
+ props: {
2254
+ hideStrengthChecker: {
2255
+ type: Boolean
2256
+ },
2257
+
2258
+ iconColor: {
2259
+ type: String,
2260
+ default: 'primary'
2261
+ },
2262
+
2263
+ modelValue: {
2264
+ type: String,
2265
+ default: ''
2266
+ }
2267
+ },
2268
+
2269
+ emits: ['update:modelValue'],
2270
+
2271
+ data () {
2272
+ return {
2273
+ key: 'error',
2274
+ toggleType: true
2275
+ }
2276
+ },
2277
+
2278
+ computed: {
2279
+ icon () {
2280
+ return this.toggleType ? 'o_visibility_off' : 'o_visibility'
2281
+ },
2282
+
2283
+ model: {
2284
+ get () {
2285
+ return this.modelValue
2286
+ },
2287
+
2288
+ set (value) {
2289
+ return this.$emit('update:modelValue', value)
2290
+ }
2291
+ },
2292
+
2293
+ strengthCheckerProps () {
2294
+ const { modelValue, ...props } = this.$props;
2295
+ return props
2296
+ },
2297
+
2298
+ type () {
2299
+ return this.toggleType ? 'password' : 'text'
2300
+ }
2301
+ },
2302
+
2303
+ watch: {
2304
+ modelValue () {
2305
+ if (this.$attrs.error) {
2306
+ this.$attrs.error = false;
2307
+ this.$attrs.errorMessage = '';
2308
+ }
2309
+ }
2310
+ },
2311
+
2312
+ methods: {
2313
+ toggle () {
2314
+ this.toggleType = !this.toggleType;
2315
+ }
2316
+ }
2317
+ };
2318
+
2319
+ function render$7(_ctx, _cache, $props, $setup, $data, $options) {
2320
+ const _component_q_icon = vue.resolveComponent("q-icon");
2321
+ const _component_qas_password_strength_checker = vue.resolveComponent("qas-password-strength-checker");
2322
+ const _component_q_input = vue.resolveComponent("q-input");
2323
+
2324
+ return (vue.openBlock(), vue.createBlock(_component_q_input, {
2325
+ modelValue: $options.model,
2326
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.model) = $event)),
2327
+ "bottom-slots": "",
2328
+ type: $options.type
2329
+ }, vue.createSlots({
2330
+ append: vue.withCtx(() => [
2331
+ vue.createVNode(_component_q_icon, {
2332
+ class: "cursor-pointer",
2333
+ color: $props.iconColor,
2334
+ name: $options.icon,
2335
+ onClick: $options.toggle
2336
+ }, null, 8 /* PROPS */, ["color", "name", "onClick"])
2337
+ ]),
2338
+ _: 2 /* DYNAMIC */
2339
+ }, [
2340
+ vue.renderList(_ctx.$slots, (_, name) => {
2341
+ return {
2342
+ name: name,
2343
+ fn: vue.withCtx((context) => [
2344
+ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(context || {})))
2345
+ ])
2346
+ }
2347
+ }),
2348
+ (!$props.hideStrengthChecker)
2349
+ ? {
2350
+ name: "hint",
2351
+ fn: vue.withCtx(() => [
2352
+ vue.createVNode(_component_qas_password_strength_checker, vue.mergeProps($options.strengthCheckerProps, { password: $options.model }), null, 16 /* FULL_PROPS */, ["password"])
2353
+ ])
2354
+ }
2355
+ : undefined
2356
+ ]), 1032 /* PROPS, DYNAMIC_SLOTS */, ["modelValue", "type"]))
2357
+ }
2358
+
2359
+ script$7.render = render$7;
2360
+ script$7.__file = "src/components/password-input/QasPasswordInput.vue";
2361
+
2362
+ var script$6 = {
2363
+ name: 'QasSearchBox',
2364
+
2365
+ components: {
2366
+ QasBox: script$h
2367
+ },
2368
+
2369
+ props: {
2370
+ emptyListHeight: {
2371
+ default: '100px',
2372
+ type: String
2373
+ },
2374
+
2375
+ fuseOptions: {
2376
+ default: () => ({}),
2377
+ type: Object
2378
+ },
2379
+
2380
+ height: {
2381
+ default: '300px',
2382
+ type: String
2383
+ },
2384
+
2385
+ list: {
2386
+ default: () => [],
2387
+ type: Array
2388
+ },
2389
+
2390
+ modelValue: {
2391
+ default: '',
2392
+ type: String
2393
+ },
2394
+
2395
+ placeholder: {
2396
+ default: 'Pesquisar',
2397
+ type: String
2398
+ },
2399
+
2400
+ useEmptySlot: {
2401
+ default: true,
2402
+ type: Boolean
2403
+ }
2404
+ },
2405
+
2406
+ emits: ['empty-result', 'update:modelValue'],
2407
+
2408
+ data () {
2409
+ return {
2410
+ fuse: null,
2411
+ results: this.list,
2412
+ search: ''
2413
+ }
2414
+ },
2415
+
2416
+ computed: {
2417
+ contentStyle () {
2418
+ return { height: this.list.length ? this.height : this.emptyListHeight }
2419
+ },
2420
+
2421
+ defaultFuseOptions () {
2422
+ return {
2423
+ distance: 100,
2424
+ location: 0,
2425
+ maxPatternLength: 32,
2426
+ minMatchCharLength: 1,
2427
+ shouldSort: true,
2428
+ threshold: 0.1,
2429
+ tokenize: true,
2430
+
2431
+ ...this.fuseOptions
2432
+ }
2433
+ },
2434
+
2435
+ hasResults () {
2436
+ return !!this.results.length
2437
+ },
2438
+
2439
+ normalizedResults () {
2440
+ return this.results.map(result => result?.item) || []
2441
+ }
2442
+ },
2443
+
2444
+ watch: {
2445
+ defaultFuseOptions (value) {
2446
+ this.fuse.options = { ...this.fuse.options, ...value };
2447
+ },
2448
+
2449
+ hasResults (value) {
2450
+ !value && this.$emit('empty-result');
2451
+ },
2452
+
2453
+ list: {
2454
+ handler (value) {
2455
+ this.fuse.list = value;
2456
+ this.setResults(this.search);
2457
+ },
2458
+
2459
+ deep: true
2460
+ },
2461
+
2462
+ search: {
2463
+ handler (value) {
2464
+ this.setResults(value);
2465
+ this.$emit('update:modelValue', value);
2466
+ },
2467
+
2468
+ immediate: true
2469
+ }
2470
+ },
2471
+
2472
+ async created () {
2473
+ this.search = this.modelValue;
2474
+ this.fuse = new Fuse__default["default"](this.list, this.defaultFuseOptions);
2475
+ this.setResults();
2476
+ },
2477
+
2478
+ methods: {
2479
+ setResults (value) {
2480
+ this.results = value
2481
+ ? this.fuse.search(value)
2482
+ : this.list.map(listItem => ({ item: listItem }));
2483
+ }
2484
+ }
2485
+ };
2486
+
2487
+ const _hoisted_1$3 = { class: "absolute-center text-center" };
2488
+ const _hoisted_2$2 = /*#__PURE__*/vue.createElementVNode("div", null, "Não há resultados disponíveis.", -1 /* HOISTED */);
2489
+
2490
+ function render$6(_ctx, _cache, $props, $setup, $data, $options) {
2491
+ const _component_q_icon = vue.resolveComponent("q-icon");
2492
+ const _component_q_input = vue.resolveComponent("q-input");
2493
+ const _component_qas_box = vue.resolveComponent("qas-box");
2494
+
2495
+ return (vue.openBlock(), vue.createBlock(_component_qas_box, null, {
2496
+ default: vue.withCtx(() => [
2497
+ vue.createVNode(_component_q_input, {
2498
+ modelValue: $data.search,
2499
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($data.search) = $event)),
2500
+ clearable: "",
2501
+ disable: !$props.list.length,
2502
+ outlined: "",
2503
+ placeholder: $props.placeholder
2504
+ }, {
2505
+ append: vue.withCtx(() => [
2506
+ vue.createVNode(_component_q_icon, {
2507
+ color: "primary",
2508
+ name: "o_search"
2509
+ })
2510
+ ]),
2511
+ _: 1 /* STABLE */
2512
+ }, 8 /* PROPS */, ["modelValue", "disable", "placeholder"]),
2513
+ vue.createElementVNode("div", {
2514
+ class: "overflow-auto q-mt-xs relative-position",
2515
+ style: vue.normalizeStyle($options.contentStyle)
2516
+ }, [
2517
+ ($options.hasResults)
2518
+ ? vue.renderSlot(_ctx.$slots, "default", {
2519
+ key: 0,
2520
+ results: $options.normalizedResults
2521
+ })
2522
+ : ($props.useEmptySlot)
2523
+ ? vue.renderSlot(_ctx.$slots, "empty-result", { key: 1 }, () => [
2524
+ vue.createElementVNode("div", _hoisted_1$3, [
2525
+ vue.createVNode(_component_q_icon, {
2526
+ class: "q-mb-sm text-center",
2527
+ color: "primary",
2528
+ name: "o_search",
2529
+ size: "38px"
2530
+ }),
2531
+ _hoisted_2$2
2532
+ ])
2533
+ ])
2534
+ : vue.createCommentVNode("v-if", true)
2535
+ ], 4 /* STYLE */)
2536
+ ]),
2537
+ _: 3 /* FORWARDED */
2538
+ }))
2539
+ }
2540
+
2541
+ script$6.render = render$6;
2542
+ script$6.__file = "src/components/search-box/QasSearchBox.vue";
2543
+
2544
+ var script$5 = {
2545
+ name: 'QasSelect',
2546
+
2547
+ props: {
2548
+ fuseOptions: {
2549
+ default: () => ({}),
2550
+ type: Object
2551
+ },
2552
+
2553
+ labelKey: {
2554
+ default: '',
2555
+ type: String
2556
+ },
2557
+
2558
+ modelValue: {
2559
+ default: () => [],
2560
+ type: [Array, Object, String, Number]
2561
+ },
2562
+
2563
+ noOptionLabel: {
2564
+ default: 'Nenhum resultado foi encontrado.',
2565
+ type: String
2566
+ },
2567
+
2568
+ options: {
2569
+ default: () => [],
2570
+ type: Array
2571
+ },
2572
+
2573
+ searchable: {
2574
+ type: Boolean
2575
+ },
2576
+
2577
+ valueKey: {
2578
+ default: '',
2579
+ type: String
2580
+ }
2581
+ },
2582
+
2583
+ emits: ['update:modelValue'],
2584
+
2585
+ data () {
2586
+ return {
2587
+ filteredOptions: [],
2588
+ fuse: null
2589
+ }
2590
+ },
2591
+
2592
+ computed: {
2593
+ attributes () {
2594
+ return {
2595
+ clearable: this.searchable,
2596
+ emitValue: true,
2597
+ mapOptions: true,
2598
+ outlined: true,
2599
+
2600
+ ...this.$attrs,
2601
+
2602
+ options: this.filteredOptions,
2603
+ useInput: this.searchable
2604
+ }
2605
+ },
2606
+
2607
+ defaultFuseOptions () {
2608
+ return {
2609
+ distance: 100,
2610
+ includeScore: true,
2611
+ keys: ['label', 'value'],
2612
+ location: 0,
2613
+ maxPatternLength: 32,
2614
+ minMatchCharLength: 1,
2615
+ shouldSort: true,
2616
+ threshold: 0.1,
2617
+ tokenize: true,
2618
+
2619
+ ...this.fuseOptions
2620
+ }
2621
+ },
2622
+
2623
+ formattedResult () {
2624
+ if (!this.labelKey && !this.valueKey) {
2625
+ return this.options
2626
+ }
2627
+
2628
+ return this.options.map(item => this.renameKey(item))
2629
+ },
2630
+
2631
+ model: {
2632
+ get () {
2633
+ return this.modelValue
2634
+ },
2635
+
2636
+ set (value) {
2637
+ this.$emit('update:modelValue', value);
2638
+ }
2639
+ }
2640
+ },
2641
+
2642
+ watch: {
2643
+ defaultFuseOptions (value) {
2644
+ this.fuse.options = { ...this.fuse.options, ...value };
2645
+ },
2646
+
2647
+ options: {
2648
+ handler () {
2649
+ if (this.fuse) {
2650
+ this.fuse.list = this.formattedResult;
2651
+ }
2652
+
2653
+ this.filteredOptions = this.formattedResult;
2654
+ },
2655
+
2656
+ immediate: true
2657
+ }
2658
+ },
2659
+
2660
+ async created () {
2661
+ if (this.searchable) {
2662
+ this.fuse = new Fuse__default["default"](this.options, this.defaultFuseOptions);
2663
+ }
2664
+ },
2665
+
2666
+ methods: {
2667
+ filterOptions (value, update) {
2668
+ update(() => {
2669
+ if (!this.searchable) return
2670
+
2671
+ if (value === '') {
2672
+ this.filteredOptions = this.formattedResult;
2673
+ } else {
2674
+ const results = this.fuse.search(value);
2675
+ this.filteredOptions = results.map(item => item.item);
2676
+ }
2677
+ });
2678
+ },
2679
+
2680
+ renameKey (item) {
2681
+ const mapKeys = {
2682
+ label: this.labelKey,
2683
+ value: this.valueKey
2684
+ };
2685
+
2686
+ for (const newKey in mapKeys) {
2687
+ if (!item.hasOwnProperty.call(newKey)) {
2688
+ item[newKey] = item[mapKeys[newKey]];
2689
+ delete item[mapKeys[newKey]];
2690
+ }
2691
+ }
2692
+
2693
+ return item
2694
+ }
2695
+ }
2696
+ };
2697
+
2698
+ function render$5(_ctx, _cache, $props, $setup, $data, $options) {
2699
+ const _component_q_icon = vue.resolveComponent("q-icon");
2700
+ const _component_q_item_section = vue.resolveComponent("q-item-section");
2701
+ const _component_q_item = vue.resolveComponent("q-item");
2702
+ const _component_q_select = vue.resolveComponent("q-select");
2703
+
2704
+ return (vue.openBlock(), vue.createBlock(_component_q_select, vue.mergeProps({
2705
+ modelValue: $options.model,
2706
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.model) = $event))
2707
+ }, $options.attributes, { onFilter: $options.filterOptions }), vue.createSlots({
2708
+ append: vue.withCtx(() => [
2709
+ vue.renderSlot(_ctx.$slots, "append", {}, () => [
2710
+ ($props.searchable)
2711
+ ? (vue.openBlock(), vue.createBlock(_component_q_icon, {
2712
+ key: 0,
2713
+ name: "o_search"
2714
+ }))
2715
+ : vue.createCommentVNode("v-if", true)
2716
+ ])
2717
+ ]),
2718
+ "no-option": vue.withCtx(() => [
2719
+ vue.renderSlot(_ctx.$slots, "no-option", {}, () => [
2720
+ vue.createVNode(_component_q_item, null, {
2721
+ default: vue.withCtx(() => [
2722
+ vue.createVNode(_component_q_item_section, { class: "text-grey" }, {
2723
+ default: vue.withCtx(() => [
2724
+ vue.createTextVNode(vue.toDisplayString($props.noOptionLabel), 1 /* TEXT */)
2725
+ ]),
2726
+ _: 1 /* STABLE */
2727
+ })
2728
+ ]),
2729
+ _: 1 /* STABLE */
2730
+ })
2731
+ ])
2732
+ ]),
2733
+ _: 2 /* DYNAMIC */
2734
+ }, [
2735
+ vue.renderList(_ctx.$slots, (_, name) => {
2736
+ return {
2737
+ name: name,
2738
+ fn: vue.withCtx((context) => [
2739
+ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(context || {})))
2740
+ ])
2741
+ }
2742
+ })
2743
+ ]), 1040 /* FULL_PROPS, DYNAMIC_SLOTS */, ["modelValue", "onFilter"]))
2744
+ }
2745
+
2746
+ script$5.render = render$5;
2747
+ script$5.__file = "src/components/select/QasSelect.vue";
2748
+
2749
+ var script$4 = {
2750
+ name: 'QasSelectList',
2751
+
2752
+ components: {
2753
+ QasBtn: script$p,
2754
+ QasSearchBox: script$6
2755
+ },
2756
+
2757
+ mixins: [screenMixin],
2758
+
2759
+ props: {
2760
+ deleteOnly: {
2761
+ type: Boolean
2762
+ },
2763
+
2764
+ fuseOptions: {
2765
+ default: () => ({ keys: ['label'] }),
2766
+ type: Object
2767
+ },
2768
+
2769
+ list: {
2770
+ default: () => [],
2771
+ type: Array
2772
+ },
2773
+
2774
+ modelValue: {
2775
+ type: Array,
2776
+ default: () => []
2777
+ },
2778
+
2779
+ to: {
2780
+ default: () => ({}),
2781
+ type: Object
2782
+ },
2783
+
2784
+ toIdentifier: {
2785
+ default: 'value',
2786
+ type: String
2787
+ }
2788
+ },
2789
+
2790
+ emits: [
2791
+ 'added',
2792
+ 'update:modelValue',
2793
+ 'removed'
2794
+ ],
2795
+
2796
+ data () {
2797
+ return {
2798
+ sortedList: [],
2799
+ values: []
2800
+ }
2801
+ },
2802
+
2803
+ computed: {
2804
+ isRedirectEnabled () {
2805
+ return Object.keys(this.to).length
2806
+ },
2807
+
2808
+ labelClass () {
2809
+ return this.isRedirectEnabled ? 'cursor-pointer' : ''
2810
+ },
2811
+
2812
+ slotData () {
2813
+ return {
2814
+ add: this.add,
2815
+ handleClick: this.handleClick,
2816
+ remove: this.remove,
2817
+ updateModel: this.updateModel
2818
+ }
2819
+ }
2820
+ },
2821
+
2822
+ watch: {
2823
+ list: {
2824
+ handler (value) {
2825
+ if (!this.sortedList.length) {
2826
+ this.sortedList = value;
2827
+ }
2828
+ },
2829
+
2830
+ immediate: true
2831
+ },
2832
+
2833
+ modelValue (value) {
2834
+ this.values = [...value];
2835
+ }
2836
+ },
2837
+
2838
+ created () {
2839
+ this.values = [...this.modelValue];
2840
+
2841
+ this.handleOptions();
2842
+ },
2843
+
2844
+ methods: {
2845
+ add (item) {
2846
+ this.values.push(item.value);
2847
+ this.updateModel();
2848
+
2849
+ this.$emit('added', item);
2850
+ },
2851
+
2852
+ getButtonProps ({ value }) {
2853
+ const isSelected = this.values.includes(value);
2854
+
2855
+ return {
2856
+ dense: this.$_isSmall,
2857
+ hideLabelOnSmallScreen: true,
2858
+ icon: !this.$_isSmall ? undefined : isSelected ? 'o_close' : 'o_add',
2859
+ label: isSelected ? 'Remover' : 'Adicionar',
2860
+ outline: isSelected,
2861
+ size: 'sm'
2862
+ }
2863
+ },
2864
+
2865
+ handleClick (item) {
2866
+ return this.values.includes(item.value) ? this.remove(item) : this.add(item)
2867
+ },
2868
+
2869
+ handleOptions () {
2870
+ if (this.modelValue.length) {
2871
+ return this.sortList()
2872
+ }
2873
+
2874
+ const unwatch = this.$watch('modelValue', () => {
2875
+ if (!this.sortedList.length) {
2876
+ this.sortList();
2877
+ unwatch();
2878
+ }
2879
+ });
2880
+ },
2881
+
2882
+ redirectRoute (item) {
2883
+ return this.isRedirectEnabled && this.$router.push({
2884
+ params: { id: item[this.toIdentifier] },
2885
+ ...this.to
2886
+ })
2887
+ },
2888
+
2889
+ remove (item) {
2890
+ const index = this.values.findIndex(value => value === item.value);
2891
+
2892
+ this.values.splice(index, 1);
2893
+ this.updateModel();
2894
+
2895
+ this.$emit('removed', item, index);
2896
+ },
2897
+
2898
+ sortList () {
2899
+ this.sortedList = this.deleteOnly
2900
+ ? this.options.filter(option => this.modelValue.includes(option.value))
2901
+ : lodashEs.sortBy(this.options, option => !this.modelValue.includes(option.value));
2902
+ },
2903
+
2904
+ updateModel (model) {
2905
+ this.$emit('update:modelValue', model || this.values);
2906
+ }
2907
+ }
2908
+ };
2909
+
2910
+ const _hoisted_1$2 = ["onClick"];
2911
+
2912
+ function render$4(_ctx, _cache, $props, $setup, $data, $options) {
2913
+ const _component_q_item_section = vue.resolveComponent("q-item-section");
2914
+ const _component_qas_btn = vue.resolveComponent("qas-btn");
2915
+ const _component_q_item = vue.resolveComponent("q-item");
2916
+ const _component_q_list = vue.resolveComponent("q-list");
2917
+ const _component_qas_search_box = vue.resolveComponent("qas-search-box");
2918
+
2919
+ return (vue.openBlock(), vue.createBlock(_component_qas_search_box, {
2920
+ class: "q-pa-md",
2921
+ "fuse-options": $props.fuseOptions,
2922
+ list: $data.sortedList
2923
+ }, {
2924
+ default: vue.withCtx(({ results }) => [
2925
+ vue.createVNode(_component_q_list, { separator: "" }, {
2926
+ default: vue.withCtx(() => [
2927
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(results, (result) => {
2928
+ return (vue.openBlock(), vue.createBlock(_component_q_item, {
2929
+ key: result.value
2930
+ }, {
2931
+ default: vue.withCtx(() => [
2932
+ vue.renderSlot(_ctx.$slots, "item", vue.normalizeProps(vue.guardReactiveProps($options.slotData)), () => [
2933
+ vue.renderSlot(_ctx.$slots, "item-section", { result: result }, () => [
2934
+ vue.createVNode(_component_q_item_section, { class: "items-start text-bold" }, {
2935
+ default: vue.withCtx(() => [
2936
+ vue.createElementVNode("div", {
2937
+ class: vue.normalizeClass($options.labelClass),
2938
+ onClick: $event => ($options.redirectRoute(result))
2939
+ }, vue.toDisplayString(result.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_1$2)
2940
+ ]),
2941
+ _: 2 /* DYNAMIC */
2942
+ }, 1024 /* DYNAMIC_SLOTS */)
2943
+ ]),
2944
+ vue.createVNode(_component_q_item_section, { avatar: "" }, {
2945
+ default: vue.withCtx(() => [
2946
+ vue.renderSlot(_ctx.$slots, "item-action", vue.normalizeProps(vue.guardReactiveProps($options.slotData)), () => [
2947
+ vue.createVNode(_component_qas_btn, vue.mergeProps($options.getButtonProps(result), {
2948
+ onClick: $event => ($options.handleClick(result))
2949
+ }), null, 16 /* FULL_PROPS */, ["onClick"])
2950
+ ])
2951
+ ]),
2952
+ _: 2 /* DYNAMIC */
2953
+ }, 1024 /* DYNAMIC_SLOTS */)
2954
+ ])
2955
+ ]),
2956
+ _: 2 /* DYNAMIC */
2957
+ }, 1024 /* DYNAMIC_SLOTS */))
2958
+ }), 128 /* KEYED_FRAGMENT */))
2959
+ ]),
2960
+ _: 2 /* DYNAMIC */
2961
+ }, 1024 /* DYNAMIC_SLOTS */)
2962
+ ]),
2963
+ _: 3 /* FORWARDED */
2964
+ }, 8 /* PROPS */, ["fuse-options", "list"]))
2965
+ }
2966
+
2967
+ script$4.render = render$4;
2968
+ script$4.__file = "src/components/select-list/QasSelectList.vue";
2969
+
2970
+ var script$3 = {
2971
+ name: 'QasSignaturePad',
2972
+
2973
+ components: {
2974
+ QasBtn: script$p
2975
+ },
2976
+
2977
+ props: {
2978
+ emptyModel: {
2979
+ type: Boolean,
2980
+ default: true
2981
+ },
2982
+
2983
+ height: {
2984
+ default: '250',
2985
+ type: String
2986
+ },
2987
+
2988
+ signatureOptions: {
2989
+ default: () => ({}),
2990
+ type: Object
2991
+ },
2992
+
2993
+ type: {
2994
+ default: 'image/png',
2995
+ type: String
2996
+ }
2997
+ },
2998
+
2999
+ emits: ['update:emptyModel'],
3000
+
3001
+ expose: ['clearSignature', 'saveSignature', 'updateEmptyModel'],
3002
+
3003
+ data () {
3004
+ return {
3005
+ canvasId: quasar.uid(),
3006
+ hasEndStrokeEvent: false,
3007
+ signaturePad: null,
3008
+ SignaturePad: null
3009
+ }
3010
+ },
3011
+
3012
+ watch: {
3013
+ async signatureOptions (newValue, oldValue) {
3014
+ if (lodashEs.isEqual(newValue, oldValue)) return
3015
+
3016
+ await this.setupSignaturePad();
3017
+ this.updateEmptyModel();
3018
+ }
3019
+ },
3020
+
3021
+ async mounted () {
3022
+ window.addEventListener('resize', this.setCanvasWidth);
3023
+ this.setCanvasWidth();
3024
+
3025
+ this.setupSignaturePad();
3026
+ },
3027
+
3028
+ unmounted () {
3029
+ window.removeEventListener('resize', this.setCanvasWidth);
3030
+ this.signaturePad.off();
3031
+ },
3032
+
3033
+ methods: {
3034
+ clearSignature () {
3035
+ this.signaturePad.clear();
3036
+ this.updateEmptyModel();
3037
+ },
3038
+
3039
+ saveSignature () {
3040
+ return this.signaturePad.toDataURL(this.type)
3041
+ },
3042
+
3043
+ setCanvasWidth () {
3044
+ const signatureContainer = this.$refs.signatureContainer;
3045
+ const canvasElement = signatureContainer.querySelector('canvas');
3046
+ canvasElement.setAttribute('width', signatureContainer.offsetWidth);
3047
+ },
3048
+
3049
+ setupSignaturePad () {
3050
+ const canvasElement = document.getElementById(this.canvasId);
3051
+ this.signaturePad = new SignaturePad__default["default"](canvasElement, this.signatureOptions);
3052
+
3053
+ if (!this.hasEndStrokeEvent) {
3054
+ this.signaturePad.addEventListener('endStroke', this.updateEmptyModel);
3055
+ }
3056
+
3057
+ this.hasEndStrokeEvent = true;
3058
+ this.clearSignature();
3059
+ },
3060
+
3061
+ updateEmptyModel () {
3062
+ this.$emit('update:emptyModel', this.signaturePad.isEmpty());
3063
+ }
3064
+ }
3065
+ };
3066
+
3067
+ const _hoisted_1$1 = {
3068
+ ref: "signatureContainer",
3069
+ class: "qas-signature-pad relative-position"
3070
+ };
3071
+ const _hoisted_2$1 = ["id", "height"];
3072
+
3073
+ function render$3(_ctx, _cache, $props, $setup, $data, $options) {
3074
+ const _component_qas_btn = vue.resolveComponent("qas-btn");
3075
+
3076
+ return (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
3077
+ vue.createElementVNode("canvas", {
3078
+ id: $data.canvasId,
3079
+ ref: _ctx.$attrs.ref,
3080
+ class: "qas-signature-pad__canvas rounded-borders vertical-bottom",
3081
+ height: $props.height
3082
+ }, null, 8 /* PROPS */, _hoisted_2$1),
3083
+ (!$props.emptyModel)
3084
+ ? (vue.openBlock(), vue.createBlock(_component_qas_btn, {
3085
+ key: 0,
3086
+ class: "absolute-bottom-right q-mb-sm q-mr-sm",
3087
+ color: "primary",
3088
+ dense: "",
3089
+ icon: "o_delete",
3090
+ round: "",
3091
+ onClick: $options.clearSignature
3092
+ }, null, 8 /* PROPS */, ["onClick"]))
3093
+ : vue.createCommentVNode("v-if", true)
3094
+ ], 512 /* NEED_PATCH */))
3095
+ }
3096
+
3097
+ script$3.render = render$3;
3098
+ script$3.__file = "src/components/signature-pad/QasSignaturePad.vue";
3099
+
3100
+ /**
3101
+ * @param {object} componentProps={}
3102
+ *
3103
+ * @example Dialog({ card: { title: 'Esse é o meu titulo!' } })
3104
+ */
3105
+ var Dialog = (componentProps = {}) => {
3106
+ quasar.Dialog.create({
3107
+ component: script$d,
3108
+ componentProps: { ...componentProps, usePlugin: true }
3109
+ });
3110
+ };
3111
+
3112
+ quasar.Notify.registerType('error', {
3113
+ color: 'negative',
3114
+ progress: true
3115
+ });
3116
+
3117
+ var NotifyError = (message, caption) => {
3118
+ quasar.Notify.create({ caption, message, type: 'error' });
3119
+ };
3120
+
3121
+ quasar.Notify.registerType('success', {
3122
+ icon: 'o_check',
3123
+ progress: true
3124
+ });
3125
+
3126
+ var NotifySuccess = (message, caption) => {
3127
+ quasar.Notify.create({ caption, message, type: 'success' });
3128
+ };
3129
+
3130
+ var script$2 = {
3131
+ name: 'QasSortable',
3132
+
3133
+ props: {
3134
+ entity: {
3135
+ default: '',
3136
+ type: String
3137
+ },
3138
+
3139
+ sortableOptions: {
3140
+ default: () => ({ animation: 500 }),
3141
+ type: Object
3142
+ },
3143
+
3144
+ results: {
3145
+ default: () => [],
3146
+ type: Array
3147
+ },
3148
+
3149
+ tag: {
3150
+ default: 'div',
3151
+ type: String
3152
+ },
3153
+
3154
+ url: {
3155
+ default: '',
3156
+ type: String
3157
+ },
3158
+
3159
+ sortedModel: {
3160
+ default: () => [],
3161
+ type: Array
3162
+ }
3163
+ },
3164
+
3165
+ emits: [
3166
+ 'update:sortedModel',
3167
+ 'sort',
3168
+ 'success'
3169
+ ],
3170
+
3171
+ data () {
3172
+ return {
3173
+ sortable: null,
3174
+ sorted: null
3175
+ }
3176
+ },
3177
+
3178
+ computed: {
3179
+ identifiers () {
3180
+ return this.sorted.map(({ id }) => id)
3181
+ }
3182
+ },
3183
+
3184
+ watch: {
3185
+ sortableOptions (value) {
3186
+ this.sortable.options = { ...this.sortable.options, ...value };
3187
+ },
3188
+
3189
+ results (value) {
3190
+ this.setSortedValue(value);
3191
+ this.sortable.sort(this.sortable.toArray());
3192
+ }
3193
+ },
3194
+
3195
+ created () {
3196
+ this.setSortedValue();
3197
+ },
3198
+
3199
+ async mounted () {
3200
+ this.sortable = new Sortable__default["default"](this.$refs.sortableItems, {
3201
+ ...this.sortableOptions,
3202
+
3203
+ onUpdate: event => {
3204
+ this.updateOrder(event);
3205
+ this.$emit('sort', event);
3206
+ }
3207
+ });
3208
+ },
3209
+
3210
+ unmounted () {
3211
+ this.sortable.destroy();
3212
+ },
3213
+
3214
+ methods: {
3215
+ setError (error) {
3216
+ const { response } = error;
3217
+ const exception = response?.data?.exception || error.message;
3218
+
3219
+ NotifyError('Ops! Erro ao ordernar itens.', exception);
3220
+ },
3221
+
3222
+ // TODO precisa testar este metodo quando tivermos uma API para teste.
3223
+ async replace () {
3224
+ quasar.Loading.show();
3225
+
3226
+ try {
3227
+ const response = await this.$store.dispatch(`${this.entity}/replace`, {
3228
+ payload: { order: this.identifiers },
3229
+ url: this.url || `${this.entity}/sort`
3230
+ });
3231
+
3232
+ this.$emit('success', response);
3233
+ } catch (error) {
3234
+ this.setError(error);
3235
+ } finally {
3236
+ quasar.Loading.hide();
3237
+ }
3238
+ },
3239
+
3240
+ updateOrder ({ newIndex, oldIndex }) {
3241
+ const deleted = this.sorted.splice(oldIndex, 1);
3242
+ this.sorted.splice(newIndex, 0, deleted[0]);
3243
+
3244
+ this.replace();
3245
+ },
3246
+
3247
+ setSortedValue (value) {
3248
+ this.sorted = quasar.extend(true, [], value || this.results);
3249
+ this.updateSortedModel();
3250
+ },
3251
+
3252
+ updateSortedModel () {
3253
+ return this.$emit('update:sortedModel', this.sorted)
3254
+ }
3255
+ }
3256
+ };
3257
+
3258
+ function render$2(_ctx, _cache, $props, $setup, $data, $options) {
3259
+ return (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent($props.tag), { ref: "sortableItems" }, {
3260
+ default: vue.withCtx(() => [
3261
+ vue.renderSlot(_ctx.$slots, "default")
3262
+ ]),
3263
+ _: 3 /* FORWARDED */
3264
+ }, 512 /* NEED_PATCH */))
3265
+ }
3266
+
3267
+ script$2.render = render$2;
3268
+ script$2.__file = "src/components/sortable/QasSortable.vue";
3269
+
3270
+ var script$1 = {
3271
+ name: 'QasTabsGenerator',
3272
+
3273
+ props: {
3274
+ activeColor: {
3275
+ default: 'primary',
3276
+ type: String
3277
+ },
3278
+
3279
+ counterProps: {
3280
+ default: () => ({}),
3281
+ type: Object
3282
+ },
3283
+
3284
+ counters: {
3285
+ default: () => ({}),
3286
+ type: Object
3287
+ },
3288
+
3289
+ indicatorColor: {
3290
+ default: 'primary',
3291
+ type: String
3292
+ },
3293
+
3294
+ modelValue: {
3295
+ default: '',
3296
+ type: String
3297
+ },
3298
+
3299
+ tabClass: {
3300
+ default: 'text-primary',
3301
+ type: String
3302
+ },
3303
+
3304
+ tabs: {
3305
+ default: () => ({}),
3306
+ required: true,
3307
+ type: Object
3308
+ }
3309
+ },
3310
+
3311
+ emits: ['update:modelValue'],
3312
+
3313
+ computed: {
3314
+ defaultCounterProps () {
3315
+ return {
3316
+ color: 'negative',
3317
+ floating: true,
3318
+ ...this.counterProps
3319
+ }
3320
+ },
3321
+
3322
+ formattedTabs () {
3323
+ const tabs = quasar.extend(true, {}, this.tabs);
3324
+
3325
+ for (const key in tabs) {
3326
+ if (typeof tabs[key] === 'string') {
3327
+ tabs[key] = { label: tabs[key] };
3328
+ }
3329
+ }
3330
+
3331
+ return tabs
3332
+ },
3333
+
3334
+ model: {
3335
+ get () {
3336
+ return this.modelValue
3337
+ },
3338
+
3339
+ set (value) {
3340
+ this.$emit('update:modelValue', value);
3341
+ }
3342
+ }
3343
+ }
3344
+ };
3345
+
3346
+ function render$1(_ctx, _cache, $props, $setup, $data, $options) {
3347
+ const _component_q_badge = vue.resolveComponent("q-badge");
3348
+ const _component_q_tab = vue.resolveComponent("q-tab");
3349
+ const _component_q_tabs = vue.resolveComponent("q-tabs");
3350
+
3351
+ return (vue.openBlock(), vue.createBlock(_component_q_tabs, {
3352
+ modelValue: $options.model,
3353
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.model) = $event)),
3354
+ "active-color": $props.activeColor,
3355
+ "indicator-color": $props.indicatorColor,
3356
+ "outside-arrows": ""
3357
+ }, {
3358
+ default: vue.withCtx(() => [
3359
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($options.formattedTabs, (tab, key) => {
3360
+ return vue.renderSlot(_ctx.$slots, `tab-${tab.value}`, { item: tab }, () => [
3361
+ (vue.openBlock(), vue.createBlock(_component_q_tab, vue.mergeProps({ key: key }, tab, {
3362
+ class: $props.tabClass,
3363
+ label: tab.label,
3364
+ name: key
3365
+ }), {
3366
+ default: vue.withCtx(() => [
3367
+ vue.renderSlot(_ctx.$slots, `tab-after-${tab.value}`, { item: tab }, () => [
3368
+ ($props.counters[key])
3369
+ ? (vue.openBlock(), vue.createBlock(_component_q_badge, vue.mergeProps({
3370
+ key: 0,
3371
+ label: $props.counters[key]
3372
+ }, $options.defaultCounterProps), null, 16 /* FULL_PROPS */, ["label"]))
3373
+ : vue.createCommentVNode("v-if", true)
3374
+ ])
3375
+ ]),
3376
+ _: 2 /* DYNAMIC */
3377
+ }, 1040 /* FULL_PROPS, DYNAMIC_SLOTS */, ["class", "label", "name"]))
3378
+ ])
3379
+ }), 256 /* UNKEYED_FRAGMENT */))
3380
+ ]),
3381
+ _: 3 /* FORWARDED */
3382
+ }, 8 /* PROPS */, ["modelValue", "active-color", "indicator-color"]))
3383
+ }
3384
+
3385
+ script$1.render = render$1;
3386
+ script$1.__file = "src/components/tabs-generator/QasTabsGenerator.vue";
3387
+
3388
+ var script = {
3389
+ name: 'QasTransfer',
3390
+
3391
+ components: {
3392
+ QasBtn: script$p,
3393
+ QasLabel: script$b,
3394
+ QasSearchBox: script$6
3395
+ },
3396
+
3397
+ mixins: [screenMixin],
3398
+
3399
+ props: {
3400
+ emitValue: {
3401
+ type: Boolean
3402
+ },
3403
+
3404
+ fuseOptions: {
3405
+ default: () => ({ keys: ['label'] }),
3406
+ type: Object
3407
+ },
3408
+
3409
+ label: {
3410
+ default: '',
3411
+ required: true,
3412
+ type: String
3413
+ },
3414
+
3415
+ labelKey: {
3416
+ default: 'label',
3417
+ type: String
3418
+ },
3419
+
3420
+ modelValue: {
3421
+ default: () => [],
3422
+ type: Array
3423
+ },
3424
+
3425
+ options: {
3426
+ default: () => [],
3427
+ type: Array
3428
+ },
3429
+
3430
+ useEmptySlot: {
3431
+ default: true,
3432
+ type: Boolean
3433
+ },
3434
+
3435
+ valueKey: {
3436
+ default: 'value',
3437
+ type: String
3438
+ }
3439
+ },
3440
+
3441
+ emits: ['update:modelValue'],
3442
+
3443
+ data () {
3444
+ return {
3445
+ firstQueue: [],
3446
+ optionsList: [],
3447
+ secondQueue: [],
3448
+ selectedList: []
3449
+ }
3450
+ },
3451
+
3452
+ computed: {
3453
+ actionsClass () {
3454
+ return !this.$_isSmall && 'column'
3455
+ },
3456
+
3457
+ gutterClass () {
3458
+ return `q-col-gutter-${this.$_untilLarge ? 'md' : 'xl'}`
3459
+ },
3460
+
3461
+ iconClass () {
3462
+ return !this.$_isSmall && 'qas-transfer__icon'
3463
+ },
3464
+
3465
+ searchBoxProps () {
3466
+ return {
3467
+ fuseOptions: this.fuseOptions,
3468
+ useEmptySlot: this.useEmptySlot
3469
+ }
3470
+ }
3471
+ },
3472
+
3473
+ watch: {
3474
+ modelValue: {
3475
+ handler () {
3476
+ this.setSelectedFromValue(true);
3477
+ },
3478
+
3479
+ immediate: true
3480
+ },
3481
+
3482
+ options: {
3483
+ handler (value) {
3484
+ this.optionsList = quasar.extend(true, [], value);
3485
+ },
3486
+
3487
+ immediate: true
3488
+ },
3489
+
3490
+ selectedList: {
3491
+ handler () {
3492
+ this.updateModelValue();
3493
+ }
3494
+ }
3495
+ },
3496
+
3497
+ methods: {
3498
+ deleteItemsFromList (isFirst) {
3499
+ this[isFirst ? 'firstQueue' : 'secondQueue'].forEach(item => {
3500
+ const model = isFirst ? 'optionsList' : 'selectedList';
3501
+ const index = this[model].findIndex(itemValue => {
3502
+ return (itemValue[this.valueKey] || itemValue) === item[this.valueKey]
3503
+ });
3504
+
3505
+ if (~index) {
3506
+ this[model].splice(index, 1);
3507
+ }
3508
+ });
3509
+ },
3510
+
3511
+ getItemClass (object, isFirst) {
3512
+ return this[isFirst
3513
+ ? 'firstQueue'
3514
+ : 'secondQueue'
3515
+ ].some(item => item[this.valueKey] === object[this.valueKey]) && 'bg-secondary'
3516
+ },
3517
+
3518
+ getItemLabel (item) {
3519
+ return item?.[this.labelKey]
3520
+ },
3521
+
3522
+ getModelValue () {
3523
+ const selectedList = quasar.extend(true, [], this.selectedList);
3524
+ return this.emitValue ? selectedList.map(item => item[this.valueKey]) : selectedList
3525
+ },
3526
+
3527
+ handleSelectedList (isFirst) {
3528
+ const model = isFirst ? 'firstQueue' : 'secondQueue';
3529
+
3530
+ this[isFirst ? 'selectedList' : 'optionsList'].push(...this[model]);
3531
+ this.deleteItemsFromList(isFirst);
3532
+ this[model] = [];
3533
+ },
3534
+
3535
+ onSelectQueue (item, isFirst) {
3536
+ const model = isFirst ? 'firstQueue' : 'secondQueue';
3537
+ const index = this[model].findIndex(selected => selected[this.valueKey] === item[this.valueKey]);
3538
+
3539
+ ~index ? this[model].splice(index, 1) : this[model].push(item);
3540
+ },
3541
+
3542
+ setSelectedFromClick (isFirst) {
3543
+ this.handleSelectedList(isFirst);
3544
+ },
3545
+
3546
+ setSelectedFromValue (isFirst) {
3547
+ this.modelValue.forEach(item => {
3548
+ const selected = this.optionsList.find(option => {
3549
+ return option[this.valueKey] === (this.emitValue ? item : item[this.valueKey])
3550
+ });
3551
+
3552
+ if (selected) {
3553
+ this.firstQueue.push(quasar.extend(true, {}, selected));
3554
+ }
3555
+ });
3556
+
3557
+ this.handleSelectedList(isFirst);
3558
+ },
3559
+
3560
+ updateModelValue () {
3561
+ return this.$emit('update:modelValue', this.getModelValue())
3562
+ }
3563
+ }
3564
+ };
3565
+
3566
+ const _hoisted_1 = /*#__PURE__*/vue.createElementVNode("div", { class: "col-12" }, null, -1 /* HOISTED */);
3567
+ const _hoisted_2 = { class: "col-12 col-sm" };
3568
+ const _hoisted_3 = /*#__PURE__*/vue.createTextVNode("Selecionar");
3569
+ const _hoisted_4 = /*#__PURE__*/vue.createTextVNode("Remover");
3570
+ const _hoisted_5 = { class: "col-12 col-sm" };
3571
+
3572
+ function render(_ctx, _cache, $props, $setup, $data, $options) {
3573
+ const _component_qas_label = vue.resolveComponent("qas-label");
3574
+ const _component_q_item_section = vue.resolveComponent("q-item-section");
3575
+ const _component_q_item = vue.resolveComponent("q-item");
3576
+ const _component_q_list = vue.resolveComponent("q-list");
3577
+ const _component_qas_search_box = vue.resolveComponent("qas-search-box");
3578
+ const _component_qas_btn = vue.resolveComponent("qas-btn");
3579
+ const _component_q_tooltip = vue.resolveComponent("q-tooltip");
3580
+
3581
+ return (vue.openBlock(), vue.createElementBlock("div", {
3582
+ class: vue.normalizeClass(["qas-transfer row", $options.gutterClass])
3583
+ }, [
3584
+ _hoisted_1,
3585
+ vue.createElementVNode("div", _hoisted_2, [
3586
+ vue.createVNode(_component_qas_label, {
3587
+ label: $props.label,
3588
+ quantity: $data.optionsList.length
3589
+ }, null, 8 /* PROPS */, ["label", "quantity"]),
3590
+ vue.createVNode(_component_qas_search_box, vue.mergeProps({
3591
+ "form-mode": "",
3592
+ list: $data.optionsList
3593
+ }, $options.searchBoxProps), {
3594
+ default: vue.withCtx(({ results }) => [
3595
+ vue.createVNode(_component_q_list, { separator: "" }, {
3596
+ default: vue.withCtx(() => [
3597
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(results, (item, index) => {
3598
+ return (vue.openBlock(), vue.createBlock(_component_q_item, {
3599
+ key: index,
3600
+ class: vue.normalizeClass($options.getItemClass(item, true)),
3601
+ clickable: "",
3602
+ onClick: $event => ($options.onSelectQueue(item, true))
3603
+ }, {
3604
+ default: vue.withCtx(() => [
3605
+ vue.renderSlot(_ctx.$slots, "item-first-column", {}, () => [
3606
+ vue.createVNode(_component_q_item_section, null, {
3607
+ default: vue.withCtx(() => [
3608
+ vue.createTextVNode(vue.toDisplayString($options.getItemLabel(item)), 1 /* TEXT */)
3609
+ ]),
3610
+ _: 2 /* DYNAMIC */
3611
+ }, 1024 /* DYNAMIC_SLOTS */)
3612
+ ])
3613
+ ]),
3614
+ _: 2 /* DYNAMIC */
3615
+ }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["class", "onClick"]))
3616
+ }), 128 /* KEYED_FRAGMENT */))
3617
+ ]),
3618
+ _: 2 /* DYNAMIC */
3619
+ }, 1024 /* DYNAMIC_SLOTS */)
3620
+ ]),
3621
+ _: 3 /* FORWARDED */
3622
+ }, 16 /* FULL_PROPS */, ["list"])
3623
+ ]),
3624
+ vue.createElementVNode("div", {
3625
+ class: vue.normalizeClass(["col-12 col-sm-auto items-center justify-center q-col-gutter-md row", $options.actionsClass])
3626
+ }, [
3627
+ vue.createElementVNode("div", null, [
3628
+ vue.createVNode(_component_qas_btn, {
3629
+ class: vue.normalizeClass($options.iconClass),
3630
+ dense: "",
3631
+ disabled: !$data.firstQueue.length,
3632
+ flat: "",
3633
+ icon: "o_arrow_circle_down",
3634
+ rounded: "",
3635
+ onClick: _cache[0] || (_cache[0] = $event => ($options.setSelectedFromClick(true)))
3636
+ }, null, 8 /* PROPS */, ["class", "disabled"]),
3637
+ vue.createVNode(_component_q_tooltip, {
3638
+ anchor: "top middle",
3639
+ self: "center middle"
3640
+ }, {
3641
+ default: vue.withCtx(() => [
3642
+ _hoisted_3
3643
+ ]),
3644
+ _: 1 /* STABLE */
3645
+ })
3646
+ ]),
3647
+ vue.createElementVNode("div", null, [
3648
+ vue.createElementVNode("div", null, [
3649
+ vue.createVNode(_component_qas_btn, {
3650
+ class: vue.normalizeClass($options.iconClass),
3651
+ dense: "",
3652
+ disabled: !$data.secondQueue.length,
3653
+ flat: "",
3654
+ icon: "o_arrow_circle_up",
3655
+ rounded: "",
3656
+ onClick: _cache[1] || (_cache[1] = $event => ($options.setSelectedFromClick()))
3657
+ }, null, 8 /* PROPS */, ["class", "disabled"]),
3658
+ vue.createVNode(_component_q_tooltip, {
3659
+ anchor: "bottom middle",
3660
+ self: "center middle"
3661
+ }, {
3662
+ default: vue.withCtx(() => [
3663
+ _hoisted_4
3664
+ ]),
3665
+ _: 1 /* STABLE */
3666
+ })
3667
+ ])
3668
+ ])
3669
+ ], 2 /* CLASS */),
3670
+ vue.createElementVNode("div", _hoisted_5, [
3671
+ vue.createVNode(_component_qas_label, {
3672
+ label: "Selecionadas",
3673
+ quantity: $data.selectedList.length
3674
+ }, null, 8 /* PROPS */, ["quantity"]),
3675
+ vue.createVNode(_component_qas_search_box, vue.mergeProps($options.searchBoxProps, {
3676
+ "empty-list-height": "300px",
3677
+ "form-mode": "",
3678
+ label: "Selecionadas",
3679
+ list: $data.selectedList
3680
+ }), {
3681
+ default: vue.withCtx(({ results }) => [
3682
+ vue.createVNode(_component_q_list, { separator: "" }, {
3683
+ default: vue.withCtx(() => [
3684
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(results, (item, index) => {
3685
+ return (vue.openBlock(), vue.createBlock(_component_q_item, {
3686
+ key: index,
3687
+ class: vue.normalizeClass($options.getItemClass(item)),
3688
+ clickable: "",
3689
+ onClick: $event => ($options.onSelectQueue(item))
3690
+ }, {
3691
+ default: vue.withCtx(() => [
3692
+ vue.renderSlot(_ctx.$slots, "item-second-column", {}, () => [
3693
+ vue.createVNode(_component_q_item_section, null, {
3694
+ default: vue.withCtx(() => [
3695
+ vue.createTextVNode(vue.toDisplayString($options.getItemLabel(item)), 1 /* TEXT */)
3696
+ ]),
3697
+ _: 2 /* DYNAMIC */
3698
+ }, 1024 /* DYNAMIC_SLOTS */)
3699
+ ])
3700
+ ]),
3701
+ _: 2 /* DYNAMIC */
3702
+ }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["class", "onClick"]))
3703
+ }), 128 /* KEYED_FRAGMENT */))
3704
+ ]),
3705
+ _: 2 /* DYNAMIC */
3706
+ }, 1024 /* DYNAMIC_SLOTS */)
3707
+ ]),
3708
+ _: 3 /* FORWARDED */
3709
+ }, 16 /* FULL_PROPS */, ["list"])
3710
+ ])
3711
+ ], 2 /* CLASS */))
3712
+ }
3713
+
3714
+ script.render = render;
3715
+ script.__file = "src/components/transfer/QasTransfer.vue";
3716
+
3717
+ const version = '3.0.0-alpha.2';
3718
+
3719
+ function install (app) {
3720
+ app.component('QasActions', script$q);
3721
+ app.component('QasActionsMenu', script$o);
3722
+ app.component('QasAlert', script$m);
3723
+ app.component('QasAppBar', script$l);
3724
+ app.component('QasAppMenu', script$k);
3725
+ app.component('QasAppsMenu', script$j);
3726
+ app.component('QasAvatar', script$i);
3727
+ app.component('QasBox', script$h);
3728
+ app.component('QasBreakline', script$n);
3729
+ app.component('QasBtn', script$p);
3730
+ app.component('QasCard', script$g);
3731
+ app.component('QasCopy', script$f);
3732
+ app.component('QasDebugger', script$e);
3733
+ app.component('QasDialog', script$d);
3734
+ app.component('QasInput', script$c);
3735
+ app.component('QasLabel', script$b);
3736
+ app.component('QasListItems', script$a);
3737
+ app.component('QasNumericInput', script$9);
3738
+ app.component('QasPasswordInput', script$7);
3739
+ app.component('QasPasswordStrengthChecker', script$8);
3740
+ app.component('QasSearchBox', script$6);
3741
+ app.component('QasSelect', script$5);
3742
+ app.component('QasSelectList', script$4);
3743
+ app.component('QasSignaturePad', script$3);
3744
+ app.component('QasSortable', script$2);
3745
+ app.component('QasTabsGenerator', script$1);
3746
+ app.component('QasTransfer', script);
3747
+
3748
+ app.config.globalProperties.$qas = {
3749
+ error: NotifyError,
3750
+ success: NotifySuccess,
3751
+ dialog: Dialog
3752
+ };
3753
+ }
3754
+
3755
+ var VuePlugin = /*#__PURE__*/Object.freeze({
3756
+ __proto__: null,
3757
+ version: version,
3758
+ QasActions: script$q,
3759
+ QasActionsMenu: script$o,
3760
+ QasAlert: script$m,
3761
+ QasAppBar: script$l,
3762
+ QasAppMenu: script$k,
3763
+ QasAppsMenu: script$j,
3764
+ QasAvatar: script$i,
3765
+ QasBox: script$h,
3766
+ QasBreakline: script$n,
3767
+ QasBtn: script$p,
3768
+ QasCard: script$g,
3769
+ QasCopy: script$f,
3770
+ QasDebugger: script$e,
3771
+ QasDialog: script$d,
3772
+ QasInput: script$c,
3773
+ QasLabel: script$b,
3774
+ QasListItems: script$a,
3775
+ QasNumericInput: script$9,
3776
+ QasPasswordInput: script$7,
3777
+ QasPasswordStrengthChecker: script$8,
3778
+ QasSearchBox: script$6,
3779
+ QasSelect: script$5,
3780
+ QasSelectList: script$4,
3781
+ QasSignaturePad: script$3,
3782
+ QasSortable: script$2,
3783
+ QasTabsGenerator: script$1,
3784
+ QasTransfer: script,
3785
+ Dialog: Dialog,
3786
+ NotifyError: NotifyError,
3787
+ NotifySuccess: NotifySuccess,
3788
+ install: install
3789
+ });
3790
+
3791
+ return VuePlugin;
3792
+
3793
+ }));