@bildvitta/quasar-ui-asteroid 3.5.0 → 3.6.0-beta.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.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bildvitta/quasar-ui-asteroid",
3
3
  "description": "Asteroid",
4
- "version": "3.5.0",
4
+ "version": "3.6.0-beta.0",
5
5
  "author": "Bild & Vitta <systemteam@bild.com.br>",
6
6
  "license": "MIT",
7
7
  "main": "dist/asteroid.cjs.min.js",
@@ -279,7 +279,7 @@ export default {
279
279
  }
280
280
 
281
281
  &__select {
282
- border-radius: 4px;
282
+ border-radius: var(--qas-generic-border-radius);
283
283
  }
284
284
 
285
285
  &__item {
@@ -0,0 +1,34 @@
1
+ <template>
2
+ <q-badge v-bind="$props" :aria-multiline="multiLine" class="q-px-sm q-py-xs text-caption">
3
+ <slot />
4
+ </q-badge>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'QasBadge',
10
+
11
+ inheritAttrs: false,
12
+
13
+ props: {
14
+ color: {
15
+ type: String,
16
+ default: 'light-blue-2'
17
+ },
18
+
19
+ label: {
20
+ type: String,
21
+ default: ''
22
+ },
23
+
24
+ multiLine: {
25
+ type: Boolean
26
+ },
27
+
28
+ textColor: {
29
+ type: String,
30
+ default: 'grey-9'
31
+ }
32
+ }
33
+ }
34
+ </script>
@@ -0,0 +1,28 @@
1
+ type: component
2
+
3
+ meta:
4
+ desc: Componente wrapper do QBadge do quasar.
5
+
6
+ props:
7
+ color:
8
+ desc: Cor da badge.
9
+ default: light-blue-2
10
+ type: String
11
+
12
+ label:
13
+ desc: Texto do badge.
14
+ type: String
15
+
16
+ multi-line:
17
+ desc: Habilita o texto a quebrar.
18
+ default: false
19
+ type: Boolean
20
+
21
+ text-color:
22
+ desc: Cor do texto.
23
+ default: grey-9
24
+ type: String
25
+
26
+ slots:
27
+ default:
28
+ desc: Slot do conteúdo do badge.
@@ -1,17 +1,17 @@
1
1
  <template>
2
2
  <qas-input ref="input" v-bind="attributes" v-model="currentValue" :unmasked-value="false" @blur="validateDateTimeOnBlur" @focus="resetError" @update:model-value="updateModelValue">
3
3
  <template #append>
4
- <q-icon v-if="!useTimeOnly" class="cursor-pointer" name="sym_r_event">
4
+ <qas-btn v-if="!useTimeOnly" color="grey-9" dense :disable="$attrs.readonly" flat icon="sym_r_event" rounded>
5
5
  <q-popup-proxy ref="dateProxy" transition-hide="scale" transition-show="scale">
6
- <q-date v-model="currentValue" v-bind="dateProps" :mask="maskDate" @update:model-value="updateModelValue" />
6
+ <q-date v-model="currentValue" v-bind="defaultDateProps" :mask="maskDate" @update:model-value="updateModelValue" />
7
7
  </q-popup-proxy>
8
- </q-icon>
8
+ </qas-btn>
9
9
 
10
- <q-icon v-if="!useDateOnly" class="cursor-pointer q-ml-md" name="sym_r_access_time">
10
+ <qas-btn v-if="!useDateOnly" class="q-ml-sm" color="grey-9" dense :disable="$attrs.readonly" flat icon="sym_r_access_time" rounded>
11
11
  <q-popup-proxy ref="timeProxy" transition-hide="scale" transition-show="scale">
12
- <q-time v-model="currentValue" v-bind="timeProps" format24h :mask="maskDate" @update:model-value="updateModelValue" />
12
+ <q-time v-model="currentValue" v-bind="defaultTimeProps" format24h :mask="maskDate" @update:model-value="updateModelValue" />
13
13
  </q-popup-proxy>
14
- </q-icon>
14
+ </qas-btn>
15
15
  </template>
16
16
  </qas-input>
17
17
  </template>
@@ -88,6 +88,27 @@ export default {
88
88
  }
89
89
  },
90
90
 
91
+ defaultDateProps () {
92
+ return {
93
+ ...this.defaultDateTimeProps,
94
+ ...this.dateProps
95
+ }
96
+ },
97
+
98
+ defaultTimeProps () {
99
+ return {
100
+ ...this.defaultDateTimeProps,
101
+ ...this.timeProps
102
+ }
103
+ },
104
+
105
+ defaultDateTimeProps () {
106
+ return {
107
+ readonly: this.$attrs.readonly,
108
+ disable: this.$attrs.disable
109
+ }
110
+ },
111
+
91
112
  inputElement () {
92
113
  return this.$refs.input
93
114
  },
@@ -4,44 +4,46 @@
4
4
  <div v-if="showSearch" class="col-12 col-md-6">
5
5
  <slot :filter="filter" name="search">
6
6
  <q-form v-if="useSearch" @submit.prevent="filter()">
7
- <qas-input v-model="search" class="bg-white q-px-sm qas-filters__input rounded-borders-sm shadow-2" data-cy="filters-search-input" :debounce="debounce" dense hide-bottom-space input-class="ellipsis text-grey-8" :outlined="false" :placeholder="searchPlaceholder" type="search">
8
- <template #prepend>
9
- <q-icon v-if="useSearchOnType" color="grey-8" name="sym_r_search" />
10
- <qas-btn v-else color="grey-9" flat icon="sym_r_search" padding="0" @click="filter()" />
11
- </template>
12
-
13
- <template #append>
14
- <qas-btn v-if="hasSearch" class="q-mr-sm" color="grey-9" flat icon="sym_r_clear" padding="0" size="sm" @click="clearSearch" />
15
-
16
- <qas-btn v-if="useFilterButton" :color="filterButtonColor" data-cy="filters-btn" flat icon="sym_r_tune" padding="0">
17
- <q-menu anchor="center right" class="full-width" max-width="270px" self="top right">
18
- <div v-if="isFetching" class="q-pa-xl text-center">
19
- <q-spinner color="grey" size="2em" />
20
- </div>
21
-
22
- <div v-else-if="hasFetchError" class="q-pa-xl text-center">
23
- <q-icon color="negative" name="sym_r_warning" size="2em" />
24
- </div>
25
-
26
- <q-form v-else class="q-gutter-y-md q-pa-md" @submit.prevent="filter()">
27
- <div v-for="(field, index) in fields" :key="index">
28
- <qas-field v-model="filters[field.name]" :data-cy="`filters-${field.name}-field`" :field="field" v-bind="fieldsProps[field.name]" />
7
+ <div class="qas-filters__input-content">
8
+ <qas-input v-model="search" class="bg-white q-px-sm rounded-borders-sm shadow-2" data-cy="filters-search-input" :debounce="debounce" dense hide-bottom-space input-class="ellipsis text-grey-8" :outlined="false" :placeholder="searchPlaceholder" type="search">
9
+ <template #prepend>
10
+ <q-icon v-if="useSearchOnType" color="grey-8" name="sym_r_search" />
11
+ <qas-btn v-else color="grey-9" flat icon="sym_r_search" padding="0" @click="filter()" />
12
+ </template>
13
+
14
+ <template #append>
15
+ <qas-btn v-if="hasSearch" class="q-mr-sm" color="grey-9" flat icon="sym_r_clear" padding="0" size="sm" @click="clearSearch" />
16
+
17
+ <qas-btn v-if="useFilterButton" :color="filterButtonColor" data-cy="filters-btn" flat icon="sym_r_tune" padding="0">
18
+ <q-menu anchor="center right" class="full-width" max-width="270px" self="top right">
19
+ <div v-if="isFetching" class="q-pa-xl text-center">
20
+ <q-spinner color="grey" size="2em" />
29
21
  </div>
30
22
 
31
- <div class="q-col-gutter-x-md q-mt-xl row">
32
- <div class="col-6">
33
- <qas-btn class="full-width" data-cy="filters-clear-btn" label="Limpar" outline size="12px" @click="clearFilters" />
23
+ <div v-else-if="hasFetchError" class="q-pa-xl text-center">
24
+ <q-icon color="negative" name="sym_r_warning" size="2em" />
25
+ </div>
26
+
27
+ <q-form v-else class="q-gutter-y-md q-pa-md" @submit.prevent="filter()">
28
+ <div v-for="(field, index) in fields" :key="index">
29
+ <qas-field v-model="filters[field.name]" :data-cy="`filters-${field.name}-field`" :field="field" v-bind="fieldsProps[field.name]" />
34
30
  </div>
35
31
 
36
- <div class="col-6">
37
- <qas-btn class="full-width" color="primary" data-cy="filters-submit-btn" label="Filtrar" size="12px" type="submit" />
32
+ <div class="q-col-gutter-x-md q-mt-xl row">
33
+ <div class="col-6">
34
+ <qas-btn class="full-width" data-cy="filters-clear-btn" label="Limpar" outline size="12px" @click="clearFilters" />
35
+ </div>
36
+
37
+ <div class="col-6">
38
+ <qas-btn class="full-width" color="primary" data-cy="filters-submit-btn" label="Filtrar" size="12px" type="submit" />
39
+ </div>
38
40
  </div>
39
- </div>
40
- </q-form>
41
- </q-menu>
42
- </qas-btn>
43
- </template>
44
- </qas-input>
41
+ </q-form>
42
+ </q-menu>
43
+ </qas-btn>
44
+ </template>
45
+ </qas-input>
46
+ </div>
45
47
  </q-form>
46
48
  </slot>
47
49
  </div>
@@ -225,6 +227,7 @@ export default {
225
227
  created () {
226
228
  this.fetchFilters()
227
229
  this.watchOnceFields()
230
+ this.handleSearchModelOnCreate()
228
231
  },
229
232
 
230
233
  methods: {
@@ -322,8 +325,9 @@ export default {
322
325
  },
323
326
 
324
327
  updateValues () {
325
- const { filters, search } = this.mx_context
326
- this.search = search || ''
328
+ this.setSearch()
329
+
330
+ const { filters } = this.mx_context
327
331
 
328
332
  for (const key in filters) {
329
333
  this.filters[key] = parseValue(this.normalizeValues(filters[key], this.fields[key]?.multiple))
@@ -343,6 +347,15 @@ export default {
343
347
  watchOnce()
344
348
  }
345
349
  })
350
+ },
351
+
352
+ handleSearchModelOnCreate () {
353
+ !this.useFilterButton && this.setSearch()
354
+ },
355
+
356
+ setSearch () {
357
+ const { search } = this.mx_context
358
+ this.search = search || ''
346
359
  }
347
360
  }
348
361
  }
@@ -351,41 +364,43 @@ export default {
351
364
  <style lang="scss">
352
365
  // TODO rever
353
366
  .qas-filters {
354
- .q-field::before {
355
- border: 2px solid transparent;
356
- border-radius: 4px;
357
- bottom: 0;
358
- content: '';
359
- left: 0;
360
- pointer-events: none;
361
- position: absolute;
362
- right: 0;
363
- top: 0;
364
- transition: border-color var(--qas-generic-transition);
365
- }
367
+ &__input-content {
368
+ .q-field {
369
+ &::before {
370
+ border: 2px solid transparent;
371
+ border-radius: var(--qas-generic-border-radius);
372
+ bottom: 0;
373
+ content: '';
374
+ left: 0;
375
+ pointer-events: none;
376
+ position: absolute;
377
+ right: 0;
378
+ top: 0;
379
+ transition: border-color var(--qas-generic-transition);
380
+ }
366
381
 
367
- .q-field--focused::before {
368
- border-color: var(--q-primary);
369
- color: var(--q-primary);
370
- }
382
+ &--dense .q-field__prepend {
383
+ padding-right: var(--qas-spacing-xs);
384
+ }
371
385
 
372
- .q-field--dense .q-field__prepend {
373
- padding-right: var(--qas-spacing-xs);
374
- }
386
+ &--dense .q-field__append {
387
+ padding-left: var(--qas-spacing-sm);
388
+ }
375
389
 
376
- .q-field--dense .q-field__append {
377
- padding-left: var(--qas-spacing-sm);
378
- }
390
+ &--focused::before {
391
+ border-color: var(--q-primary);
392
+ color: var(--q-primary);
393
+ }
379
394
 
380
- &__input {
381
- .q-field__control::before,
382
- .q-field__control::after {
383
- display: none;
384
- }
395
+ &__control::after,
396
+ &__control::before {
397
+ display: none !important;
398
+ }
385
399
 
386
- .q-field__native {
387
- padding-bottom: var(--qas-spacing-sm);
388
- padding-top: var(--qas-spacing-sm);
400
+ &__native {
401
+ padding-bottom: var(--qas-spacing-sm);
402
+ padding-top: var(--qas-spacing-sm);
403
+ }
389
404
  }
390
405
  }
391
406
  }
@@ -153,7 +153,6 @@ export default {
153
153
 
154
154
  defaultFuseOptions () {
155
155
  return {
156
- threshold: 0.1,
157
156
  ignoreLocation: true,
158
157
 
159
158
  ...this.fuseOptions
@@ -34,7 +34,7 @@ props:
34
34
  examples: ["{ keys: ['label'] }"]
35
35
  default:
36
36
  ignoreLocation: true
37
- threshold: 0.1
37
+ threshold: 0.6
38
38
 
39
39
  height:
40
40
  desc: Define altura do box quando a lista não está vazia.
@@ -105,7 +105,6 @@ export default {
105
105
  return {
106
106
  ignoreLocation: true,
107
107
  keys: ['label', 'value'],
108
- threshold: 0.1,
109
108
 
110
109
  ...this.fuseOptions
111
110
  }
@@ -27,7 +27,7 @@ props:
27
27
  default:
28
28
  ignoreLocation: true
29
29
  keys: [label, value]
30
- threshold: 0.1
30
+ threshold: 0.6
31
31
 
32
32
  label-key:
33
33
  desc: O componente internamente espera receber na propriedade "options" um array de objeto contendo "label" e "value", caso o seu objeto não tenha "label" mas um "name" por exemplo, você pode definir esta prop "label-key" como "name".
@@ -1,17 +1,17 @@
1
1
  <template>
2
- <div class="pv-tabs-generator-status" :class="backgroundClass" />
2
+ <div aria-live="polite" class="qas-status" :class="backgroundClass" role="status" />
3
3
  </template>
4
4
 
5
5
  <script>
6
6
  export default {
7
- name: 'PvTabsGeneratorStatus',
7
+ name: 'QasStatus',
8
8
 
9
9
  inheritAttrs: false,
10
10
 
11
11
  props: {
12
12
  color: {
13
13
  type: String,
14
- default: ''
14
+ default: 'light-blue-2'
15
15
  }
16
16
  },
17
17
 
@@ -24,7 +24,7 @@ export default {
24
24
  </script>
25
25
 
26
26
  <style lang="scss">
27
- .pv-tabs-generator-status {
27
+ .qas-status {
28
28
  border-radius: 100%;
29
29
  height: 16px;
30
30
  width: 16px;
@@ -0,0 +1,10 @@
1
+ type: component
2
+
3
+ meta:
4
+ desc: Componente que gera um status circular com a cor do status.
5
+
6
+ props:
7
+ color:
8
+ desc: cor dos status.
9
+ default: light-blue-2
10
+ type: String
@@ -6,7 +6,7 @@
6
6
  <slot :item="tab" :name="`tab-after-${tab.value}`">
7
7
  <q-icon v-if="tab.icon" :name="tab.icon" size="sm" />
8
8
 
9
- <pv-tabs-generator-status v-if="tab.status" :color="tab.status" />
9
+ <qas-status v-if="tab.status" :color="tab.status" />
10
10
 
11
11
  <div class="q-ml-xs">
12
12
  {{ getFormattedLabel(tab) }}
@@ -19,7 +19,7 @@
19
19
  </template>
20
20
 
21
21
  <script>
22
- import PvTabsGeneratorStatus from './private/PvTabsGeneratorStatus.vue'
22
+ import QasStatus from '../status/QasStatus.vue'
23
23
 
24
24
  import { extend } from 'quasar'
25
25
 
@@ -27,7 +27,7 @@ export default {
27
27
  name: 'QasTabsGenerator',
28
28
 
29
29
  components: {
30
- PvTabsGeneratorStatus
30
+ QasStatus
31
31
  },
32
32
 
33
33
  props: {
@@ -4,16 +4,13 @@
4
4
  <div ref="truncate" :class="truncateTextClass">
5
5
  <slot>{{ text }}</slot>
6
6
  </div>
7
- <div v-if="isTruncated" class="cursor-pointer text-primary" @click.stop="toggleDialog">{{ seeMoreLabel }}</div>
7
+
8
+ <div v-if="isTruncated" class="cursor-pointer text-primary" @click.stop="toggleDialog">
9
+ {{ seeMoreLabel }}
10
+ </div>
8
11
  </div>
9
12
 
10
- <qas-dialog v-model="showDialog" v-bind="defaultDialogProps">
11
- <template #description>
12
- <slot>
13
- <div>{{ text }}</div>
14
- </slot>
15
- </template>
16
- </qas-dialog>
13
+ <qas-dialog v-model="showDialog" v-bind="defaultDialogProps" aria-label="Diálogo de texto completo" role="dialog" />
17
14
  </div>
18
15
  </template>
19
16
 
@@ -60,7 +57,8 @@ export default {
60
57
  return {
61
58
  maxPossibleWidth: '',
62
59
  showDialog: false,
63
- textWidth: ''
60
+ textWidth: '',
61
+ observer: null
64
62
  }
65
63
  },
66
64
 
@@ -98,6 +96,11 @@ export default {
98
96
 
99
97
  mounted () {
100
98
  this.truncateText()
99
+ this.observeContentChange()
100
+ },
101
+
102
+ unmounted () {
103
+ this.observer.disconnect()
101
104
  },
102
105
 
103
106
  methods: {
@@ -110,6 +113,18 @@ export default {
110
113
 
111
114
  toggleDialog () {
112
115
  this.showDialog = !this.showDialog
116
+ },
117
+
118
+ observeContentChange () {
119
+ const element = this.$refs.truncate
120
+ const config = { childList: true, subtree: true, characterData: true }
121
+
122
+ const callback = mutationList => {
123
+ mutationList.forEach(() => this.truncateText())
124
+ }
125
+
126
+ this.observer = new MutationObserver(callback)
127
+ this.observer.observe(element, config)
113
128
  }
114
129
  }
115
130
  }
@@ -10,7 +10,7 @@
10
10
  // headings
11
11
  $h1: (
12
12
  size: 3rem,
13
- line-height: 1.5rem,
13
+ line-height: 3rem,
14
14
  letter-spacing: 0,
15
15
  weight: 800,
16
16
  margin: 0
@@ -18,7 +18,7 @@ $h1: (
18
18
 
19
19
  $h2: (
20
20
  size: 2rem,
21
- line-height: 1.5rem,
21
+ line-height: 2rem,
22
22
  letter-spacing: 0,
23
23
  weight: 700,
24
24
  margin: 0
@@ -34,7 +34,7 @@ $h3: (
34
34
 
35
35
  $h4: (
36
36
  size: 1.125rem,
37
- line-height: 1.5rem,
37
+ line-height: 1.125rem,
38
38
  letter-spacing: 0,
39
39
  weight: 600,
40
40
  margin: 0
@@ -42,7 +42,7 @@ $h4: (
42
42
 
43
43
  $h5: (
44
44
  size: 1rem,
45
- line-height: 1.5rem,
45
+ line-height: 1rem,
46
46
  letter-spacing: 0,
47
47
  weight: 600,
48
48
  margin: 0
@@ -50,7 +50,7 @@ $h5: (
50
50
 
51
51
  $h6: (
52
52
  size: 0.875rem,
53
- line-height: 1.5rem,
53
+ line-height: 0.875rem,
54
54
  letter-spacing: 0,
55
55
  weight: 600,
56
56
  margin: 0
@@ -59,14 +59,14 @@ $h6: (
59
59
  // subtitles
60
60
  $subtitle1: (
61
61
  size: 1rem,
62
- line-height: 1.5rem,
62
+ line-height: 1rem,
63
63
  letter-spacing: 0,
64
64
  weight: 600
65
65
  );
66
66
 
67
67
  $subtitle2: (
68
68
  size: 0.875rem,
69
- line-height: 1.5rem,
69
+ line-height: 0.875rem,
70
70
  letter-spacing: 0,
71
71
  weight: 600
72
72
  );
@@ -74,14 +74,14 @@ $subtitle2: (
74
74
  // body
75
75
  $body1: (
76
76
  size: 1rem,
77
- line-height: 1.5rem,
77
+ line-height: 1rem,
78
78
  letter-spacing: 0,
79
79
  weight: 400
80
80
  );
81
81
 
82
82
  $body2: (
83
83
  size: 0.875rem,
84
- line-height: 1.5rem,
84
+ line-height: 0.875rem,
85
85
  letter-spacing: 0,
86
86
  weight: 400
87
87
  );
@@ -89,7 +89,7 @@ $body2: (
89
89
  // overline
90
90
  $overline: (
91
91
  size: 0.875rem,
92
- line-height: 1.5rem,
92
+ line-height: 0.875rem,
93
93
  letter-spacing: 0.25rem,
94
94
  weight: 600
95
95
  );
@@ -97,7 +97,7 @@ $overline: (
97
97
  // caption
98
98
  $caption: (
99
99
  size: 0.75rem,
100
- line-height: 1.5rem,
100
+ line-height: 0.75rem,
101
101
  letter-spacing: 0,
102
102
  weight: 400
103
103
  );
package/src/index.scss CHANGED
@@ -11,7 +11,7 @@ $accent: var(--q-accent);
11
11
  :root {
12
12
  --qas-background-color: #fbfbfb;
13
13
  --qas-border-grey: #{$grey-4};
14
- --qas-generic-border-radius: 8px;
14
+ --qas-generic-border-radius: 4px;
15
15
  --qas-generic-transition: 300ms;
16
16
  }
17
17
 
package/src/vue-plugin.js CHANGED
@@ -5,6 +5,7 @@ import QasAppBar from './components/app-bar/QasAppBar.vue'
5
5
  import QasAppMenu from './components/app-menu/QasAppMenu.vue'
6
6
  import QasAppUser from './components/app-user/QasAppUser.vue'
7
7
  import QasAvatar from './components/avatar/QasAvatar.vue'
8
+ import QasBadge from './components/badge/QasBadge.vue'
8
9
  import QasBox from './components/box/QasBox.vue'
9
10
  import QasBreakline from './components/breakline/QasBreakline.vue'
10
11
  import QasBtn from './components/btn/QasBtn.vue'
@@ -45,6 +46,7 @@ import QasSignaturePad from './components/signature-pad/QasSignaturePad.vue'
45
46
  import QasSignatureUploader from './components/signature-uploader/QasSignatureUploader.vue'
46
47
  import QasSingleView from './components/single-view/QasSingleView.vue'
47
48
  import QasSortable from './components/sortable/QasSortable.vue'
49
+ import QasStatus from './components/status/QasStatus.vue'
48
50
  import QasTableGenerator from './components/table-generator/QasTableGenerator.vue'
49
51
  import QasTabsGenerator from './components/tabs-generator/QasTabsGenerator.vue'
50
52
  import QasTextTruncate from './components/text-truncate/QasTextTruncate.vue'
@@ -80,6 +82,7 @@ function install (app) {
80
82
  app.component('QasAppMenu', QasAppMenu)
81
83
  app.component('QasAppUser', QasAppUser)
82
84
  app.component('QasAvatar', QasAvatar)
85
+ app.component('QasBadge', QasBadge)
83
86
  app.component('QasBox', QasBox)
84
87
  app.component('QasBreakline', QasBreakline)
85
88
  app.component('QasBtn', QasBtn)
@@ -120,6 +123,7 @@ function install (app) {
120
123
  app.component('QasSignatureUploader', QasSignatureUploader)
121
124
  app.component('QasSingleView', QasSingleView)
122
125
  app.component('QasSortable', QasSortable)
126
+ app.component('QasStatus', QasStatus)
123
127
  app.component('QasTableGenerator', QasTableGenerator)
124
128
  app.component('QasTabsGenerator', QasTabsGenerator)
125
129
  app.component('QasTextTruncate', QasTextTruncate)
@@ -156,6 +160,7 @@ export {
156
160
  QasAppMenu,
157
161
  QasAppUser,
158
162
  QasAvatar,
163
+ QasBadge,
159
164
  QasBox,
160
165
  QasBreakline,
161
166
  QasBtn,
@@ -196,6 +201,7 @@ export {
196
201
  QasSignatureUploader,
197
202
  QasSingleView,
198
203
  QasSortable,
204
+ QasStatus,
199
205
  QasTableGenerator,
200
206
  QasTabsGenerator,
201
207
  QasTextTruncate,