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