@bildvitta/quasar-ui-asteroid 3.5.0-beta.8 → 3.5.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.
Files changed (63) hide show
  1. package/package.json +1 -1
  2. package/src/components/actions/QasActions.vue +32 -6
  3. package/src/components/actions/QasActions.yml +11 -1
  4. package/src/components/actions-menu/QasActionsMenu.vue +28 -11
  5. package/src/components/actions-menu/QasActionsMenu.yml +13 -4
  6. package/src/components/alert/QasAlert.vue +1 -1
  7. package/src/components/app-bar/QasAppBar.vue +7 -3
  8. package/src/components/app-menu/QasAppMenu.vue +54 -9
  9. package/src/components/app-user/QasAppUser.vue +8 -4
  10. package/src/components/avatar/QasAvatar.vue +11 -2
  11. package/src/components/avatar/QasAvatar.yml +1 -1
  12. package/src/components/card/QasCard.vue +2 -2
  13. package/src/components/copy/QasCopy.vue +1 -1
  14. package/src/components/copy/QasCopy.yml +1 -1
  15. package/src/components/date-time-input/QasDateTimeInput.vue +67 -6
  16. package/src/components/delete/QasDelete.vue +0 -1
  17. package/src/components/dialog/QasDialog.vue +56 -28
  18. package/src/components/dialog/QasDialog.yml +0 -9
  19. package/src/components/filters/QasFilters.vue +7 -7
  20. package/src/components/form-view/QasFormView.vue +0 -1
  21. package/src/components/gallery/QasGallery.vue +3 -3
  22. package/src/components/gallery/private/PvGalleryCarouselDialog.vue +3 -3
  23. package/src/components/header-actions/QasHeaderActions.vue +62 -0
  24. package/src/components/header-actions/QasHeaderActions.yml +26 -0
  25. package/src/components/list-items/QasListItems.vue +1 -1
  26. package/src/components/list-items/QasListItems.yml +1 -1
  27. package/src/components/nested-fields/QasNestedFields.vue +4 -4
  28. package/src/components/nested-fields/QasNestedFields.yml +2 -2
  29. package/src/components/numeric-input/QasNumericInput.vue +9 -0
  30. package/src/components/page-header/QasPageHeader.vue +92 -17
  31. package/src/components/page-header/QasPageHeader.yml +19 -1
  32. package/src/components/pagination/QasPagination.vue +12 -1
  33. package/src/components/password-input/QasPasswordInput.vue +1 -1
  34. package/src/components/search-box/QasSearchBox.vue +3 -3
  35. package/src/components/select/QasSelect.vue +6 -5
  36. package/src/components/select-list/QasSelectList.vue +1 -1
  37. package/src/components/signature-pad/QasSignaturePad.vue +1 -1
  38. package/src/components/signature-uploader/QasSignatureUploader.vue +7 -8
  39. package/src/components/single-view/QasSingleView.vue +1 -1
  40. package/src/components/table-generator/QasTableGenerator.vue +29 -4
  41. package/src/components/tabs-generator/QasTabsGenerator.vue +140 -37
  42. package/src/components/tabs-generator/QasTabsGenerator.yml +4 -24
  43. package/src/components/tabs-generator/private/PvTabsGeneratorStatus.vue +32 -0
  44. package/src/components/text-truncate/QasTextTruncate.vue +0 -1
  45. package/src/components/transfer/QasTransfer.vue +2 -2
  46. package/src/components/tree-generator/QasTreeGenerator.vue +4 -5
  47. package/src/components/uploader/QasUploader.vue +8 -8
  48. package/src/components/welcome/QasWelcome.vue +108 -0
  49. package/src/components/welcome/QasWelcome.yml +14 -0
  50. package/src/components/welcome/private/PvWelcomeShortcutCard.vue +58 -0
  51. package/src/css/components/base.scss +8 -0
  52. package/src/css/components/item.scss +8 -3
  53. package/src/css/mixins/index.scss +1 -0
  54. package/src/css/mixins/set-typography.scss +8 -0
  55. package/src/css/variables/index.scss +1 -0
  56. package/src/css/variables/shadow.scss +3 -0
  57. package/src/css/variables/spacing.scss +15 -0
  58. package/src/css/variables/typography.scss +1 -1
  59. package/src/mixins/delete.js +0 -1
  60. package/src/plugins/notify-error/NotifyError.js +1 -1
  61. package/src/plugins/notify-success/NotifySuccess.js +1 -1
  62. package/src/shared/date-config.js +26 -0
  63. package/src/vue-plugin.js +6 -0
@@ -2,7 +2,7 @@
2
2
  <qas-box>
3
3
  <qas-input v-bind="attributes" ref="search" v-model="mx_search">
4
4
  <template #append>
5
- <q-icon color="primary" name="o_search" />
5
+ <q-icon color="primary" name="sym_r_search" />
6
6
  </template>
7
7
  </qas-input>
8
8
 
@@ -19,7 +19,7 @@
19
19
 
20
20
  <slot v-if="showEmptyResult" name="empty-result">
21
21
  <div class="absolute-center text-center">
22
- <q-icon class="q-mb-sm text-center" color="primary" name="o_search" size="38px" />
22
+ <q-icon class="q-mb-sm text-center" color="primary" name="sym_r_search" size="38px" />
23
23
  <div>{{ emptyResultText }}</div>
24
24
  </div>
25
25
  </slot>
@@ -112,7 +112,7 @@ export default {
112
112
  return {
113
113
  clearable: true,
114
114
  disable: this.isDisabled,
115
- debounce: this.useLazyLoading ? 800 : 0,
115
+ debounce: this.useLazyLoading ? 1200 : 0,
116
116
  outlined: true,
117
117
  placeholder: this.placeholder,
118
118
  hideBottomSpace: true,
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <q-select v-model="model" v-bind="attributes">
3
3
  <template v-if="isSearchable" #prepend>
4
- <q-icon name="o_search" />
4
+ <q-icon name="sym_r_search" />
5
5
  </template>
6
6
 
7
7
  <template #no-option>
@@ -91,12 +91,13 @@ export default {
91
91
  outlined: true,
92
92
  ...this.$attrs,
93
93
 
94
- options: this.mx_filteredOptions,
95
- useInput: this.isSearchable,
96
94
  error: this.hasError,
95
+ inputDebounce: this.useLazyLoading ? 1200 : 0,
97
96
  loading: this.hasLoading,
98
- ...(this.useLazyLoading && { onVirtualScroll: this.mx_onVirtualScroll }),
99
- ...(this.isSearchable && { onFilter: this.onFilter })
97
+ options: this.mx_filteredOptions,
98
+ useInput: this.isSearchable,
99
+ ...(this.isSearchable && { onFilter: this.onFilter }),
100
+ ...(this.useLazyLoading && { onVirtualScroll: this.mx_onVirtualScroll })
100
101
  }
101
102
  },
102
103
 
@@ -130,7 +130,7 @@ export default {
130
130
  return {
131
131
  dense: this.$qas.screen.isSmall,
132
132
  useLabelOnSmallScreen: false,
133
- icon: !this.$qas.screen.isSmall ? undefined : isSelected ? 'o_close' : 'o_add',
133
+ icon: !this.$qas.screen.isSmall ? undefined : isSelected ? 'sym_r_close' : 'sym_r_add',
134
134
  label: isSelected ? 'Remover' : 'Adicionar',
135
135
  outline: isSelected,
136
136
  size: 'sm'
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div ref="signatureContainer" class="qas-signature-pad relative-position">
3
3
  <canvas :id="canvasId" :ref="$attrs.ref" class="qas-signature-pad__canvas rounded-borders vertical-bottom" :height="height" />
4
- <qas-btn v-if="!empty" class="absolute-bottom-right q-mb-sm q-mr-sm" color="primary" dense icon="o_delete" round @click="clearSignature" />
4
+ <qas-btn v-if="!empty" class="absolute-bottom-right q-mb-sm q-mr-sm" color="primary" dense icon="sym_r_delete" round @click="clearSignature" />
5
5
  </div>
6
6
 
7
7
  <div>
@@ -1,13 +1,13 @@
1
1
  <template>
2
2
  <div>
3
- <qas-uploader ref="uploader" v-model="model" :label="uploadLabel" :readonly="readonly" :use-resize="false" v-bind="$attrs">
3
+ <qas-uploader ref="uploader" v-model="model" :label="uploadLabel" v-bind="$attrs" :readonly="readonly" :use-resize="false">
4
4
  <template #header="{ scope }">
5
5
  <div class="cursor-pointer flex flex-center full-width justify-between no-border no-wrap q-gutter-xs text-white transparent" :class="headerClass" @click="openDialog">
6
6
  <div class="col column items-start justify-center">
7
7
  <div v-if="uploadLabel" class="q-uploader__title">{{ uploadLabel }}</div>
8
8
  </div>
9
9
 
10
- <qas-btn v-if="!readonly" color="white" dense flat icon="o_add" round @click="openDialog" />
10
+ <qas-btn v-if="!readonly" color="white" dense flat icon="sym_r_add" round @click="openDialog" />
11
11
 
12
12
  <qas-btn ref="forceUpload" class="hidden" @click="upload(scope)" />
13
13
  <qas-btn ref="buttonCleanFiles" class="hidden" @click="scope.removeUploadedFiles" />
@@ -25,11 +25,6 @@
25
25
  <qas-signature-pad ref="signaturePadModal" v-model:empty="isEmpty" :height="signaturePadHeight" />
26
26
  </div>
27
27
  </template>
28
-
29
- <template #actions>
30
- <qas-btn class="full-width" color="primary" :disable="isEmpty" label="Salvar" no-caps @click="getSignatureData" />
31
- <qas-btn class="full-width q-mt-sm" color="primary" flat label="Cancelar" no-caps @click="closeSignature" />
32
- </template>
33
28
  </qas-dialog>
34
29
  </div>
35
30
  </template>
@@ -111,7 +106,11 @@ export default {
111
106
  defaultDialogProps () {
112
107
  return {
113
108
  maxWidth: '620px',
114
- ...this.dialogProps
109
+ ...this.dialogProps,
110
+ ok: {
111
+ label: 'Salvar',
112
+ onClick: () => this.getSignatureData()
113
+ }
115
114
  }
116
115
  },
117
116
 
@@ -9,7 +9,7 @@
9
9
  </template>
10
10
 
11
11
  <div v-else-if="!mx_isFetching" class="q-my-xl text-center">
12
- <q-icon class="q-mb-sm text-center" color="grey-7" name="o_search" size="38px" />
12
+ <q-icon class="q-mb-sm text-center" color="grey-7" name="sym_r_search" size="38px" />
13
13
  <div class="text-grey-7">Nenhum item encontrado.</div>
14
14
  </div>
15
15
 
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <qas-box class="q-px-lg q-py-md">
3
- <q-table ref="table" class="bg-transparent qas-table-generator" :class="tableClass" v-bind="attributes">
3
+ <q-table ref="table" class="bg-white qas-table-generator text-grey-8" :class="tableClass" v-bind="attributes">
4
4
  <template v-for="(_, name) in $slots" #[name]="context">
5
5
  <slot v-if="hasBodySlot" name="body" :props="context" />
6
6
 
@@ -94,7 +94,7 @@ export default {
94
94
  field: name,
95
95
  label,
96
96
  name,
97
- headerClasses: 'text-primary'
97
+ headerClasses: 'text-grey-9'
98
98
  })
99
99
  }
100
100
 
@@ -246,8 +246,33 @@ export default {
246
246
 
247
247
  <style lang="scss">
248
248
  .qas-table-generator {
249
- .q-table th {
250
- font-weight: bold;
249
+ .q-table {
250
+ th {
251
+ @include set-typography($subtitle1);
252
+ }
253
+
254
+ td,
255
+ th,
256
+ thead,
257
+ tr {
258
+ border-color: $grey-4;
259
+ }
260
+
261
+ td {
262
+ @include set-typography($body1);
263
+ }
264
+
265
+ tr {
266
+ transition: background-color var(--qas-generic-transition);
267
+
268
+ &:hover {
269
+ background-color: $grey-2;
270
+ }
271
+ }
272
+
273
+ thead tr:hover {
274
+ background-color: white;
275
+ }
251
276
  }
252
277
 
253
278
  &--mobile {
@@ -1,52 +1,46 @@
1
1
  <template>
2
- <q-tabs v-model="model" :active-color="activeColor" :indicator-color="indicatorColor" outside-arrows>
3
- <slot v-for="(tab, key) in formattedTabs" :item="tab" :name="`tab-${tab.value}`">
4
- <q-tab :key="key" v-bind="tab" :class="tabClass" :label="tab.label" :name="tab.value">
5
- <slot :item="tab" :name="`tab-after-${tab.value}`">
6
- <q-badge v-if="counters[tab.value]" :label="counters[tab.value]" v-bind="defaultCounterProps" />
7
- </slot>
8
- </q-tab>
9
- </slot>
10
- </q-tabs>
2
+ <div class="qas-tabs-generator">
3
+ <q-tabs v-model="model" active-color="primary" align="left" :breakpoint="0" content-class="text-grey-8" dense inline-label left-icon="sym_r_chevron_left" outside-arrows right-icon="sym_r_chevron_right">
4
+ <slot v-for="(tab, key) in formattedTabs" :item="tab" :name="`tab-${tab.value}`">
5
+ <q-tab :key="key" v-bind="getTabProps(tab)" class="text-body1" :name="tab.value" no-caps :ripple="false">
6
+ <slot :item="tab" :name="`tab-after-${tab.value}`">
7
+ <q-icon v-if="tab.icon" :name="tab.icon" size="sm" />
8
+
9
+ <pv-tabs-generator-status v-if="tab.status" :color="tab.status" />
10
+
11
+ <div class="q-ml-xs">
12
+ {{ getFormattedLabel(tab) }}
13
+ </div>
14
+ </slot>
15
+ </q-tab>
16
+ </slot>
17
+ </q-tabs>
18
+ </div>
11
19
  </template>
12
20
 
13
21
  <script>
22
+ import PvTabsGeneratorStatus from './private/PvTabsGeneratorStatus.vue'
23
+
14
24
  import { extend } from 'quasar'
15
25
 
16
26
  export default {
17
27
  name: 'QasTabsGenerator',
18
28
 
19
- props: {
20
- activeColor: {
21
- default: 'primary',
22
- type: String
23
- },
24
-
25
- counterProps: {
26
- default: () => ({}),
27
- type: Object
28
- },
29
+ components: {
30
+ PvTabsGeneratorStatus
31
+ },
29
32
 
33
+ props: {
30
34
  counters: {
31
35
  default: () => ({}),
32
36
  type: Object
33
37
  },
34
38
 
35
- indicatorColor: {
36
- default: 'primary',
37
- type: String
38
- },
39
-
40
39
  modelValue: {
41
40
  default: '',
42
41
  type: [String, Number]
43
42
  },
44
43
 
45
- tabClass: {
46
- default: 'text-primary',
47
- type: String
48
- },
49
-
50
44
  tabs: {
51
45
  default: () => ({}),
52
46
  required: true,
@@ -57,14 +51,6 @@ export default {
57
51
  emits: ['update:modelValue'],
58
52
 
59
53
  computed: {
60
- defaultCounterProps () {
61
- return {
62
- color: 'negative',
63
- floating: true,
64
- ...this.counterProps
65
- }
66
- },
67
-
68
54
  formattedTabs () {
69
55
  const tabs = extend(true, {}, this.tabs)
70
56
 
@@ -83,9 +69,126 @@ export default {
83
69
  },
84
70
 
85
71
  set (value) {
72
+ const currentTab = Array.isArray(this.tabs)
73
+ ? this.tabs.find(tab => tab?.value === value)
74
+ : this.formattedTabs[value]
75
+
76
+ if (currentTab?.disabled) return
77
+
86
78
  this.$emit('update:modelValue', value)
87
79
  }
88
80
  }
81
+ },
82
+
83
+ methods: {
84
+ getFormattedLabel ({ label, counter, value }) {
85
+ const normalizedCount = this.counters[value] || counter
86
+
87
+ if (!normalizedCount) return label
88
+
89
+ const countString = String(normalizedCount)
90
+
91
+ return `${label} (${countString.padStart(2, '0')})`
92
+ },
93
+
94
+ getTabProps (tab) {
95
+ const { icon, label, ...payload } = tab
96
+ return payload
97
+ }
89
98
  }
90
99
  }
91
100
  </script>
101
+
102
+ <style lang="scss">
103
+ .qas-tabs-generator {
104
+ .q-tabs {
105
+ &--scrollable {
106
+ .q-tab {
107
+ &:first-child {
108
+ padding-left: var(--qas-spacing-xs);
109
+ }
110
+
111
+ &:last-child {
112
+ padding-right: var(--qas-spacing-xs);
113
+ }
114
+ }
115
+ }
116
+
117
+ .q-tab {
118
+ &--inactive {
119
+ opacity: 1;
120
+ }
121
+
122
+ &__content {
123
+ position: relative;
124
+
125
+ &::before {
126
+ background: var(--q-primary);
127
+ bottom: 0;
128
+ content: '';
129
+ height: 2px;
130
+ left: 0;
131
+ position: absolute;
132
+ right: 0;
133
+ transform: scale(0);
134
+ transition: transform var(--qas-generic-transition);
135
+ }
136
+ }
137
+
138
+ &--active {
139
+ font-weight: 600;
140
+
141
+ .q-tab__content {
142
+ position: relative;
143
+
144
+ &::before {
145
+ transform: scale(100%);
146
+ }
147
+ }
148
+ }
149
+
150
+ &:not(.q-tabs--scrollable .q-tab):first-child {
151
+ padding-left: 0;
152
+ }
153
+
154
+ &:not(.q-tabs--scrollable .q-tab):last-child {
155
+ padding-right: 0;
156
+ }
157
+
158
+ &:not(&--active) {
159
+ transition: color var(--qas-generic-transition);
160
+
161
+ &:not([disabled]):hover {
162
+ color: var(--q-primary-contrast) !important;
163
+ }
164
+ }
165
+
166
+ &__icon {
167
+ font-size: 24px;
168
+ }
169
+
170
+ &__arrow--faded {
171
+ color: $grey-6;
172
+ opacity: 1 !important;
173
+ }
174
+
175
+ &__indicator {
176
+ display: none;
177
+ }
178
+ }
179
+
180
+ &__arrow:not(&--faded) {
181
+ color: $grey-9;
182
+ transition: color var(--qas-generic-transition);
183
+
184
+ &:hover {
185
+ color: var(--q-primary-contrast);
186
+ }
187
+ }
188
+ }
189
+
190
+ .q-focus-helper {
191
+ display: none;
192
+ }
193
+ }
194
+ </style>
@@ -4,40 +4,20 @@ mixins:
4
4
  - quasar/dist/api/QTabs.json
5
5
 
6
6
  meta:
7
- desc: Componente para gerar tab dinamicamente, implementa o QTab e Qtabs.
7
+ desc: Componente para gerar tabs dinamicamente, implementa o QTab e QTabs.
8
8
 
9
9
  props:
10
- active-color:
11
- desc: Cor da tab quando ela está ativa.
12
- type: String
13
- examples: ['primary', 'negative', 'positive']
14
-
15
- counter-props:
16
- desc: Contador de cada tags, funciona como um "notificação"
10
+ counters:
11
+ desc: Contador que ficará junto a label "Todos (24)"
17
12
  default: {}
18
13
  type: Object
19
- examples: ["{ tab: 2 }"]
20
-
21
- fuse-options:
22
- desc: Configurações do [fuse.js](https://fusejs.io/api/options.html).
23
- default: { keys: ['label'] }
24
- type: Object
25
-
26
- indicator-color:
27
- desc: Cor do indicador.
28
- default: primary
29
- type: String
14
+ examples: ["{ all: 24 }"]
30
15
 
31
16
  model-value:
32
17
  desc: Model do componente, controla qual é a tab atual selecionada.
33
18
  type: [String, Number]
34
19
  model: true
35
20
 
36
- tab-class:
37
- desc: Classe do QTab
38
- default: text-primary
39
- type: String
40
-
41
21
  tabs:
42
22
  desc: Objeto ou Array contendo todas as tabs a serem geradas.
43
23
  default: {}
@@ -0,0 +1,32 @@
1
+ <template>
2
+ <div class="pv-tabs-generator-status" :class="backgroundClass" />
3
+ </template>
4
+
5
+ <script>
6
+ export default {
7
+ name: 'PvTabsGeneratorStatus',
8
+
9
+ inheritAttrs: false,
10
+
11
+ props: {
12
+ color: {
13
+ type: String,
14
+ default: ''
15
+ }
16
+ },
17
+
18
+ computed: {
19
+ backgroundClass () {
20
+ return `bg-${this.color}`
21
+ }
22
+ }
23
+ }
24
+ </script>
25
+
26
+ <style lang="scss">
27
+ .pv-tabs-generator-status {
28
+ border-radius: 100%;
29
+ height: 16px;
30
+ width: 16px;
31
+ }
32
+ </style>
@@ -81,7 +81,6 @@ export default {
81
81
  return {
82
82
  cancel: false,
83
83
  ok: false,
84
- useCloseButton: true,
85
84
  ...this.dialogProps,
86
85
  card: {
87
86
  title: this.dialogTitle,
@@ -19,12 +19,12 @@
19
19
 
20
20
  <div class="col-12 col-sm-auto items-center justify-center q-col-gutter-md row" :class="actionsClass">
21
21
  <div>
22
- <qas-btn :class="iconClass" dense :disabled="!firstQueue.length" flat icon="o_arrow_circle_down" rounded @click="setSelectedFromClick(true)" />
22
+ <qas-btn :class="iconClass" dense :disabled="!firstQueue.length" flat icon="sym_r_arrow_circle_down" rounded @click="setSelectedFromClick(true)" />
23
23
  <q-tooltip anchor="top middle" self="center middle">Selecionar</q-tooltip>
24
24
  </div>
25
25
  <div>
26
26
  <div>
27
- <qas-btn :class="iconClass" dense :disabled="!secondQueue.length" flat icon="o_arrow_circle_up" rounded @click="setSelectedFromClick()" />
27
+ <qas-btn :class="iconClass" dense :disabled="!secondQueue.length" flat icon="sym_r_arrow_circle_up" rounded @click="setSelectedFromClick()" />
28
28
  <q-tooltip anchor="bottom middle" self="center middle">Remover</q-tooltip>
29
29
  </div>
30
30
  </div>
@@ -8,12 +8,12 @@
8
8
  </span>
9
9
 
10
10
  <span v-if="hasMenuButton(node)" class="q-ml-sm">
11
- <qas-btn dense flat icon="o_more_vert" round @click.stop>
11
+ <qas-btn dense flat icon="sym_r_more_vert" round @click.stop>
12
12
  <q-menu auto-close>
13
13
  <q-list separator>
14
14
  <q-item v-if="useAddButton" v-ripple class="qas-tree-generator__item" clickable @click="handleTreeFormDialog(node, true, tree)">
15
15
  <q-item-section avatar>
16
- <q-icon name="o_add_circle_outline" />
16
+ <q-icon name="sym_r_add_circle_outline" />
17
17
  </q-item-section>
18
18
 
19
19
  <q-item-section>Adicionar subnível</q-item-section>
@@ -21,7 +21,7 @@
21
21
 
22
22
  <q-item v-if="useEditButton" v-ripple class="qas-tree-generator__item" clickable @click="handleTreeFormDialog(node)">
23
23
  <q-item-section avatar>
24
- <q-icon name="o_edit" />
24
+ <q-icon name="sym_r_edit" />
25
25
  </q-item-section>
26
26
 
27
27
  <q-item-section>Editar</q-item-section>
@@ -29,7 +29,7 @@
29
29
 
30
30
  <q-item v-if="hasDestroyButton(node)" v-ripple class="qas-tree-generator__item" clickable @click="onDestroy(node)">
31
31
  <q-item-section avatar>
32
- <q-icon name="o_highlight_off" />
32
+ <q-icon name="sym_r_highlight_off" />
33
33
  </q-item-section>
34
34
 
35
35
  <q-item-section>Excluir</q-item-section>
@@ -169,7 +169,6 @@ export default {
169
169
  destroyDialogConfig () {
170
170
  return {
171
171
  card: {
172
- title: 'Excluir ramo da árvore?',
173
172
  description: 'Todas as informações serão perdidas. Deseja realmente continuar?'
174
173
  },
175
174
  ok: {
@@ -13,13 +13,13 @@
13
13
  </div>
14
14
  </div>
15
15
 
16
- <qas-btn v-if="showAddFile" ref="buttonUpload" color="white" dense flat icon="o_add" round @click="$refs.hiddenInput.click()" />
16
+ <qas-btn v-if="showAddFile" ref="buttonUpload" color="white" dense flat icon="sym_r_add" round @click="$refs.hiddenInput.click()" />
17
17
 
18
18
  <input ref="hiddenInput" :accept="attributes.accept" class="qas-uploader__input" :multiple="isMultiple" type="file">
19
19
 
20
20
  <qas-btn ref="buttonCleanFiles" class="hidden" color="white" @click="scope.removeUploadedFiles" />
21
- <qas-btn v-if="scope.canUpload" color="white" dense flat icon="o_cloud_upload" round @click="scope.upload" />
22
- <qas-btn v-if="scope.isUploading" color="white" dense flat icon="o_clear" round @click="scope.abort" />
21
+ <qas-btn v-if="scope.canUpload" color="white" dense flat icon="sym_r_cloud_upload" round @click="scope.upload" />
22
+ <qas-btn v-if="scope.isUploading" color="white" dense flat icon="sym_r_clear" round @click="scope.abort" />
23
23
  </div>
24
24
  </slot>
25
25
  </template>
@@ -28,7 +28,7 @@
28
28
  <slot name="list" :scope="scope">
29
29
  <div class="col-12 q-col-gutter-md row">
30
30
  <div v-for="(file, index) in getFilesList(scope.files, scope)" :key="index" class="row" :class="itemClass">
31
- <qas-avatar class="q-mr-sm" color="contrast-primary" icon="o_attach_file" :image="file.url" rounded :text-color="getColorFileIcon(file)" />
31
+ <qas-avatar class="q-mr-sm" color="primary" icon="sym_r_attach_file" :image="file.url" rounded :text-color="getColorFileIcon(file)" />
32
32
 
33
33
  <div class="col items-center no-wrap row">
34
34
  <div class="column no-wrap" :class="{ col: isMultiple }">
@@ -36,8 +36,8 @@
36
36
  <div v-if="file.isUploaded" class="text-caption">{{ file.progressLabel }} ({{ file.sizeLabel }})</div>
37
37
  </div>
38
38
  <div class="items-center q-ml-sm row">
39
- <q-icon v-if="file.isFailed" color="negative" name="o_warning" size="20px" />
40
- <qas-btn v-if="!scope.readonly" dense flat icon="o_delete" round @click="removeItem(index, scope, file)" />
39
+ <q-icon v-if="file.isFailed" color="negative" name="sym_r_warning" size="20px" />
40
+ <qas-btn v-if="!scope.readonly" dense flat icon="sym_r_delete" round @click="removeItem(index, scope, file)" />
41
41
  </div>
42
42
  </div>
43
43
  </div>
@@ -49,7 +49,7 @@
49
49
  <slot :context="self" name="custom-upload" />
50
50
 
51
51
  <template v-if="hasErrorMessage" #after>
52
- <q-icon color="negative" name="o_error" />
52
+ <q-icon color="negative" name="sym_r_error" />
53
53
  </template>
54
54
  </q-field>
55
55
  </template>
@@ -370,7 +370,7 @@ export default {
370
370
  },
371
371
 
372
372
  getColorFileIcon (file) {
373
- return this.isFailed(file) ? 'negative' : 'primary'
373
+ return this.isFailed(file) ? 'negative' : 'white'
374
374
  },
375
375
 
376
376
  async addFiles () {