quasar 1.18.3 → 1.18.6

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 (175) hide show
  1. package/dist/api/BottomSheet.json +1 -1
  2. package/dist/api/Notify.json +205 -5
  3. package/dist/api/QAvatar.json +1 -1
  4. package/dist/api/QBreadcrumbsEl.json +1 -1
  5. package/dist/api/QBtn.json +2 -2
  6. package/dist/api/QBtnDropdown.json +3 -3
  7. package/dist/api/QCarousel.json +3 -3
  8. package/dist/api/QChip.json +4 -4
  9. package/dist/api/QExpansionItem.json +2 -2
  10. package/dist/api/QFab.json +2 -2
  11. package/dist/api/QFabAction.json +1 -1
  12. package/dist/api/QIcon.json +4 -2
  13. package/dist/api/QKnob.json +23 -0
  14. package/dist/api/QPagination.json +4 -4
  15. package/dist/api/QRange.json +1 -1
  16. package/dist/api/QRouteTab.json +1 -1
  17. package/dist/api/QSelect.json +1 -1
  18. package/dist/api/QSlider.json +1 -1
  19. package/dist/api/QStep.json +4 -4
  20. package/dist/api/QStepper.json +4 -4
  21. package/dist/api/QTab.json +1 -1
  22. package/dist/api/QTimelineEntry.json +1 -1
  23. package/dist/api/QToggle.json +1 -1
  24. package/dist/api/QTree.json +1 -1
  25. package/dist/icon-set/bootstrap-icons.umd.min.js +1 -1
  26. package/dist/icon-set/eva-icons.umd.min.js +1 -1
  27. package/dist/icon-set/fontawesome-v5-pro.umd.min.js +1 -1
  28. package/dist/icon-set/fontawesome-v5.umd.min.js +1 -1
  29. package/dist/icon-set/fontawesome-v6-pro.umd.min.js +6 -0
  30. package/dist/icon-set/fontawesome-v6.umd.min.js +6 -0
  31. package/dist/icon-set/ionicons-v4.umd.min.js +1 -1
  32. package/dist/icon-set/line-awesome.umd.min.js +1 -1
  33. package/dist/icon-set/material-icons-outlined.umd.min.js +1 -1
  34. package/dist/icon-set/material-icons-round.umd.min.js +1 -1
  35. package/dist/icon-set/material-icons-sharp.umd.min.js +1 -1
  36. package/dist/icon-set/material-icons.umd.min.js +1 -1
  37. package/dist/icon-set/mdi-v3.umd.min.js +1 -1
  38. package/dist/icon-set/mdi-v4.umd.min.js +1 -1
  39. package/dist/icon-set/mdi-v5.umd.min.js +1 -1
  40. package/dist/icon-set/mdi-v6.umd.min.js +1 -1
  41. package/dist/icon-set/svg-bootstrap-icons.umd.min.js +2 -2
  42. package/dist/icon-set/svg-eva-icons.umd.min.js +2 -2
  43. package/dist/icon-set/svg-fontawesome-v5.umd.min.js +2 -2
  44. package/dist/icon-set/svg-fontawesome-v6.umd.min.js +6 -0
  45. package/dist/icon-set/svg-ionicons-v4.umd.min.js +1 -1
  46. package/dist/icon-set/svg-ionicons-v5.umd.min.js +1 -1
  47. package/dist/icon-set/svg-ionicons-v6.umd.min.js +2 -2
  48. package/dist/icon-set/svg-line-awesome.umd.min.js +1 -1
  49. package/dist/icon-set/svg-material-icons-outlined.umd.min.js +1 -1
  50. package/dist/icon-set/svg-material-icons-round.umd.min.js +1 -1
  51. package/dist/icon-set/svg-material-icons-sharp.umd.min.js +1 -1
  52. package/dist/icon-set/svg-material-icons.umd.min.js +1 -1
  53. package/dist/icon-set/svg-mdi-v4.umd.min.js +1 -1
  54. package/dist/icon-set/svg-mdi-v5.umd.min.js +1 -1
  55. package/dist/icon-set/svg-mdi-v6.umd.min.js +2 -2
  56. package/dist/icon-set/svg-themify.umd.min.js +1 -1
  57. package/dist/icon-set/themify.umd.min.js +1 -1
  58. package/dist/lang/ar.umd.min.js +1 -1
  59. package/dist/lang/az-latn.umd.min.js +1 -1
  60. package/dist/lang/bg.umd.min.js +1 -1
  61. package/dist/lang/ca.umd.min.js +1 -1
  62. package/dist/lang/cs.umd.min.js +1 -1
  63. package/dist/lang/da.umd.min.js +1 -1
  64. package/dist/lang/de.umd.min.js +1 -1
  65. package/dist/lang/el.umd.min.js +1 -1
  66. package/dist/lang/en-gb.umd.min.js +1 -1
  67. package/dist/lang/en-us.umd.min.js +1 -1
  68. package/dist/lang/eo.umd.min.js +1 -1
  69. package/dist/lang/es.umd.min.js +1 -1
  70. package/dist/lang/et.umd.min.js +1 -1
  71. package/dist/lang/eu.umd.min.js +6 -0
  72. package/dist/lang/fa-ir.umd.min.js +1 -1
  73. package/dist/lang/fa.umd.min.js +1 -1
  74. package/dist/lang/fi.umd.min.js +1 -1
  75. package/dist/lang/fr.umd.min.js +1 -1
  76. package/dist/lang/gn.umd.min.js +1 -1
  77. package/dist/lang/he.umd.min.js +1 -1
  78. package/dist/lang/hr.umd.min.js +1 -1
  79. package/dist/lang/hu.umd.min.js +1 -1
  80. package/dist/lang/id.umd.min.js +1 -1
  81. package/dist/lang/is.umd.min.js +1 -1
  82. package/dist/lang/it.umd.min.js +1 -1
  83. package/dist/lang/ja.umd.min.js +1 -1
  84. package/dist/lang/km.umd.min.js +1 -1
  85. package/dist/lang/ko-kr.umd.min.js +1 -1
  86. package/dist/lang/kur-ckb.umd.min.js +1 -1
  87. package/dist/lang/kz.umd.min.js +6 -0
  88. package/dist/lang/lu.umd.min.js +1 -1
  89. package/dist/lang/lv.umd.min.js +1 -1
  90. package/dist/lang/ml.umd.min.js +1 -1
  91. package/dist/lang/ms.umd.min.js +1 -1
  92. package/dist/lang/my.umd.min.js +1 -1
  93. package/dist/lang/nb-no.umd.min.js +1 -1
  94. package/dist/lang/nl.umd.min.js +1 -1
  95. package/dist/lang/pl.umd.min.js +1 -1
  96. package/dist/lang/pt-br.umd.min.js +1 -1
  97. package/dist/lang/pt.umd.min.js +1 -1
  98. package/dist/lang/ro.umd.min.js +1 -1
  99. package/dist/lang/ru.umd.min.js +1 -1
  100. package/dist/lang/sk.umd.min.js +1 -1
  101. package/dist/lang/sl.umd.min.js +1 -1
  102. package/dist/lang/sr.umd.min.js +1 -1
  103. package/dist/lang/sv.umd.min.js +1 -1
  104. package/dist/lang/ta.umd.min.js +1 -1
  105. package/dist/lang/th.umd.min.js +1 -1
  106. package/dist/lang/tr.umd.min.js +1 -1
  107. package/dist/lang/ug.umd.min.js +2 -2
  108. package/dist/lang/uk.umd.min.js +1 -1
  109. package/dist/lang/vi.umd.min.js +1 -1
  110. package/dist/lang/zh-hans.umd.min.js +1 -1
  111. package/dist/lang/zh-hant.umd.min.js +1 -1
  112. package/dist/quasar.addon.css +1 -1
  113. package/dist/quasar.addon.rtl.css +1 -1
  114. package/dist/quasar.common.js +2 -2
  115. package/dist/quasar.css +6 -3
  116. package/dist/quasar.esm.js +2 -2
  117. package/dist/quasar.ie.polyfills.js +1 -1
  118. package/dist/quasar.ie.polyfills.umd.min.js +1 -1
  119. package/dist/quasar.min.css +1 -1
  120. package/dist/quasar.rtl.css +8 -3
  121. package/dist/quasar.rtl.min.css +1 -1
  122. package/dist/quasar.sass +4 -1
  123. package/dist/quasar.styl +4 -1
  124. package/dist/quasar.umd.js +212 -159
  125. package/dist/quasar.umd.min.js +2 -2
  126. package/dist/quasar.umd.modern.js +214 -159
  127. package/dist/quasar.umd.modern.min.js +2 -2
  128. package/dist/types/extras/icon-set.d.ts +2 -0
  129. package/dist/types/index.d.ts +122 -44
  130. package/dist/vetur/quasar-attributes.json +50 -38
  131. package/dist/vetur/quasar-tags.json +3 -0
  132. package/dist/web-types/web-types.json +69 -41
  133. package/icon-set/fontawesome-v6-pro.js +128 -0
  134. package/icon-set/fontawesome-v6.js +128 -0
  135. package/icon-set/svg-fontawesome-v6.js +198 -0
  136. package/lang/eu.js +93 -0
  137. package/lang/index.json +8 -0
  138. package/lang/kz.js +97 -0
  139. package/lang/ug.js +49 -52
  140. package/package.json +1 -1
  141. package/src/api.extends.json +1 -1
  142. package/src/components/btn/QBtn.js +30 -22
  143. package/src/components/date/QDate.js +2 -1
  144. package/src/components/dialog-plugin/DialogPlugin.js +6 -5
  145. package/src/components/field/QField.js +17 -9
  146. package/src/components/file/QFile.js +1 -0
  147. package/src/components/icon/QIcon.js +6 -2
  148. package/src/components/icon/QIcon.json +1 -3
  149. package/src/components/input/QInput.js +4 -1
  150. package/src/components/knob/QKnob.js +46 -25
  151. package/src/components/knob/QKnob.json +22 -0
  152. package/src/components/linear-progress/QLinearProgress.sass +1 -0
  153. package/src/components/linear-progress/QLinearProgress.styl +1 -0
  154. package/src/components/select/QSelect.js +12 -9
  155. package/src/components/slide-transition/QSlideTransition.js +4 -4
  156. package/src/components/slider/slider-utils.js +4 -4
  157. package/src/components/slider/slider-utils.json +1 -1
  158. package/src/components/stepper/QStep.json +3 -0
  159. package/src/components/stepper/QStepper.json +3 -0
  160. package/src/components/stepper/QStepper.sass +2 -0
  161. package/src/components/stepper/QStepper.styl +2 -0
  162. package/src/components/stepper/StepHeader.js +23 -8
  163. package/src/components/table/table-sort.js +2 -2
  164. package/src/components/uploader/QUploaderBase.js +4 -1
  165. package/src/mixins/datetime.js +3 -1
  166. package/src/mixins/file.js +2 -1
  167. package/src/mixins/mask.js +1 -1
  168. package/src/plugins/Loading.js +3 -2
  169. package/src/plugins/LoadingBar.js +15 -10
  170. package/src/plugins/Notify.js +8 -5
  171. package/src/plugins/Notify.json +100 -0
  172. package/src/utils/extend.js +12 -40
  173. package/src/utils/is.js +4 -14
  174. package/src/utils/morph.js +4 -3
  175. package/src/utils/web-storage.js +3 -2
@@ -53,10 +53,12 @@
53
53
  color: $negative
54
54
  color: var(--q-color-negative)
55
55
 
56
+ &--error-with-icon
56
57
  .q-stepper__dot
57
58
  background: transparent !important
58
59
  span
59
60
  color: currentColor
61
+ .q-icon
60
62
  font-size: 24px
61
63
 
62
64
  &__header
@@ -53,10 +53,12 @@
53
53
  color: $negative
54
54
  color: var(--q-color-negative)
55
55
 
56
+ &--error-with-icon
56
57
  .q-stepper__dot
57
58
  background: transparent !important
58
59
  span
59
60
  color: currentColor
61
+ .q-icon
60
62
  font-size: 24px
61
63
 
62
64
  &__header
@@ -53,23 +53,36 @@ export default Vue.extend({
53
53
 
54
54
  hasPrefix () {
55
55
  return this.step.prefix &&
56
- this.isActive === false &&
57
- this.isError === false &&
58
- this.isDone === false
56
+ (this.isActive === false || this.stepper.activeIcon === 'none') &&
57
+ (this.isError === false || this.stepper.errorIcon === 'none') &&
58
+ (this.isDone === false || this.stepper.doneIcon === 'none')
59
59
  },
60
60
 
61
61
  icon () {
62
+ const defaultIcon = this.step.icon || this.stepper.inactiveIcon
63
+
62
64
  if (this.isActive === true) {
63
- return this.step.activeIcon || this.stepper.activeIcon || this.$q.iconSet.stepper.active
65
+ const icon = this.step.activeIcon || this.stepper.activeIcon
66
+ return icon === 'none'
67
+ ? defaultIcon
68
+ : icon || this.$q.iconSet.stepper.active
64
69
  }
70
+
65
71
  if (this.isError === true) {
66
- return this.step.errorIcon || this.stepper.errorIcon || this.$q.iconSet.stepper.error
72
+ const icon = this.step.errorIcon || this.stepper.errorIcon
73
+ return icon === 'none'
74
+ ? defaultIcon
75
+ : icon || this.$q.iconSet.stepper.error
67
76
  }
77
+
68
78
  if (this.isDisable === false && this.isDone === true) {
69
- return this.step.doneIcon || this.stepper.doneIcon || this.$q.iconSet.stepper.done
79
+ const icon = this.step.doneIcon || this.stepper.doneIcon
80
+ return icon === 'none'
81
+ ? defaultIcon
82
+ : icon || this.$q.iconSet.stepper.done
70
83
  }
71
84
 
72
- return this.step.icon || this.stepper.inactiveIcon
85
+ return defaultIcon
73
86
  },
74
87
 
75
88
  color () {
@@ -96,7 +109,9 @@ export default Vue.extend({
96
109
  classes () {
97
110
  return `q-stepper__tab col-grow flex items-center no-wrap relative-position` +
98
111
  (this.color !== void 0 ? ` text-${this.color}` : '') +
99
- (this.isError === true ? ' q-stepper__tab--error' : '') +
112
+ (this.isError === true
113
+ ? ' q-stepper__tab--error q-stepper__tab--error-with-' + (this.hasPrefix === true ? 'prefix' : 'icon')
114
+ : '') +
100
115
  (this.isActive === true ? ' q-stepper__tab--active' : '') +
101
116
  (this.isDone === true ? ' q-stepper__tab--done' : '') +
102
117
  (this.headerNav === true ? ' q-stepper__tab--navigation q-focusable q-hoverable' : '') +
@@ -1,5 +1,5 @@
1
1
  import { sortDate } from '../../utils/sort.js'
2
- import { isNumber, isDate } from '../../utils/is.js'
2
+ import { isNumber, isDate, isObject } from '../../utils/is.js'
3
3
 
4
4
  export default {
5
5
  props: {
@@ -71,7 +71,7 @@ export default {
71
71
  sort (col /* String(col name) or Object(col definition) */) {
72
72
  let sortOrder = this.columnSortOrder
73
73
 
74
- if (col === Object(col)) {
74
+ if (isObject(col) === true) {
75
75
  if (col.sortOrder) {
76
76
  sortOrder = col.sortOrder
77
77
  }
@@ -441,7 +441,10 @@ export default Vue.extend({
441
441
  'disabled q-uploader--disable': this.disable
442
442
  },
443
443
  on: this.canAddFiles === true
444
- ? cache(this, 'drag', { dragover: this.__onDragOver })
444
+ ? cache(this, 'drag', {
445
+ dragover: this.__onDragOver,
446
+ dragleave: this.__onDragLeave
447
+ })
445
448
  : null
446
449
  }, children)
447
450
  }
@@ -75,7 +75,9 @@ export default {
75
75
 
76
76
  methods: {
77
77
  __getLocale () {
78
- return this.locale || this.$q.lang.date
78
+ return this.locale !== void 0
79
+ ? { ...this.$q.lang.date, ...this.locale }
80
+ : this.$q.lang.date
79
81
  },
80
82
 
81
83
  __getCurrentDate (dateOnly) {
@@ -180,7 +180,7 @@ export default {
180
180
 
181
181
  __onDragLeave (e) {
182
182
  stopAndPrevent(e)
183
- this.dnd = false
183
+ e.relatedTarget !== this.$refs.dnd && (this.dnd = false)
184
184
  },
185
185
 
186
186
  __onDrop (e) {
@@ -198,6 +198,7 @@ export default {
198
198
  if (this.dnd === true) {
199
199
  return h('div', {
200
200
  staticClass: `q-${type}__dnd absolute-full`,
201
+ ref: 'dnd',
201
202
  on: cache(this, 'dnd', {
202
203
  dragenter: stopAndPreventDrag,
203
204
  dragover: stopAndPreventDrag,
@@ -301,7 +301,7 @@ export default {
301
301
  ? this.__unmask(masked)
302
302
  : masked
303
303
 
304
- this.value !== val && this.__emitValue(val, true)
304
+ String(this.value) !== val && this.__emitValue(val, true)
305
305
  },
306
306
 
307
307
  __moveCursorForPaste (inp, start, end) {
@@ -3,6 +3,7 @@ import Vue from 'vue'
3
3
  import QSpinner from '../components/spinner/QSpinner.js'
4
4
  import { isSSR } from './Platform.js'
5
5
  import cache from '../utils/cache.js'
6
+ import { isObject } from '../utils/is.js'
6
7
  import { preventScroll } from '../mixins/prevent-scroll.js'
7
8
 
8
9
  let
@@ -29,7 +30,7 @@ const Loading = {
29
30
  show (opts) {
30
31
  if (isSSR === true) { return }
31
32
 
32
- props = opts === Object(opts) && opts.ignoreDefaults === true
33
+ props = isObject(opts) === true && opts.ignoreDefaults === true
33
34
  ? { ...originalDefaults, ...opts }
34
35
  : { ...defaults, ...opts }
35
36
 
@@ -125,7 +126,7 @@ const Loading = {
125
126
  },
126
127
 
127
128
  setDefaults (opts) {
128
- opts === Object(opts) && Object.assign(defaults, opts)
129
+ isObject(opts) === true && Object.assign(defaults, opts)
129
130
  },
130
131
 
131
132
  install ({ $q, cfg: { loading } }) {
@@ -2,6 +2,7 @@ import Vue from 'vue'
2
2
 
3
3
  import { isSSR } from './Platform.js'
4
4
  import { noop } from '../utils/event.js'
5
+ import { isObject } from '../utils/is.js'
5
6
  import QAjaxBar from '../components/ajax-bar/QAjaxBar.js'
6
7
 
7
8
  export default {
@@ -21,6 +22,15 @@ export default {
21
22
  const props = cfg.loadingBar !== void 0
22
23
  ? { ...cfg.loadingBar }
23
24
  : {}
25
+ const on = {
26
+ start: () => {
27
+ this.isActive = true
28
+ },
29
+
30
+ stop: () => {
31
+ this.isActive = false
32
+ }
33
+ }
24
34
 
25
35
  const bar = new Vue({
26
36
  name: 'LoadingBar',
@@ -35,22 +45,17 @@ export default {
35
45
 
36
46
  render: h => h(QAjaxBar, {
37
47
  ref: 'bar',
38
- props
48
+ props,
49
+ on
39
50
  })
40
51
  }).$mount().$refs.bar
41
52
 
42
53
  Object.assign(this, {
43
- start: speed => {
44
- bar.start(speed)
45
- this.isActive = bar.isActive = true
46
- },
47
- stop: () => {
48
- const sessions = bar.stop()
49
- this.isActive = bar.isActive = sessions > 0
50
- },
54
+ start: bar.start,
55
+ stop: bar.stop,
51
56
  increment: bar.increment,
52
57
  setDefaults: opts => {
53
- opts === Object(opts) && Object.assign(props, opts)
58
+ isObject(opts) === true && Object.assign(props, opts)
54
59
  bar.$parent.$forceUpdate()
55
60
  }
56
61
  })
@@ -8,6 +8,8 @@ import QSpinner from '../components/spinner/QSpinner.js'
8
8
  import { noop } from '../utils/event.js'
9
9
  import { getBodyFullscreenElement } from '../utils/dom.js'
10
10
  import debounce from '../utils/debounce.js'
11
+ import { isObject } from '../utils/is.js'
12
+
11
13
  import { isSSR } from './Platform.js'
12
14
 
13
15
  let uid = 0, vm
@@ -71,7 +73,7 @@ function addNotification (config, vm, originalApi) {
71
73
  Object.assign(notif, defaults)
72
74
  }
73
75
 
74
- if (Object(config) !== config) {
76
+ if (isObject(config) === false) {
75
77
  if (notif.type) {
76
78
  Object.assign(notif, notifTypes[notif.type])
77
79
  }
@@ -407,7 +409,8 @@ const Notifications = {
407
409
  if (notif.spinner !== false) {
408
410
  mainChild.push(
409
411
  h(notif.spinner, {
410
- staticClass: 'q-notification__spinner q-notification__spinner--' + meta.leftClass
412
+ staticClass: 'q-notification__spinner q-notification__spinner--' + meta.leftClass,
413
+ props: { color: notif.spinnerColor, size: notif.spinnerSize }
411
414
  })
412
415
  )
413
416
  }
@@ -416,7 +419,7 @@ const Notifications = {
416
419
  h(QIcon, {
417
420
  staticClass: 'q-notification__icon q-notification__icon--' + meta.leftClass,
418
421
  attrs: { role: 'img' },
419
- props: { name: notif.icon }
422
+ props: { name: notif.icon, color: notif.iconColor, size: notif.iconSize }
420
423
  })
421
424
  )
422
425
  }
@@ -518,13 +521,13 @@ const Notifications = {
518
521
 
519
522
  export default {
520
523
  setDefaults (opts) {
521
- if (isSSR !== true && opts === Object(opts)) {
524
+ if (isSSR !== true && isObject(opts) === true) {
522
525
  Object.assign(defaults, opts)
523
526
  }
524
527
  },
525
528
 
526
529
  registerType (typeName, typeOpts) {
527
- if (isSSR !== true && typeOpts === Object(typeOpts)) {
530
+ if (isSSR !== true && isObject(typeOpts) === true) {
528
531
  notifTypes[typeName] = typeOpts
529
532
  }
530
533
  },
@@ -45,6 +45,16 @@
45
45
  "extends": "icon"
46
46
  },
47
47
 
48
+ "iconColor": {
49
+ "extends": "color",
50
+ "addedIn": "v1.18.5"
51
+ },
52
+
53
+ "iconSize": {
54
+ "extends": "size",
55
+ "addedIn": "v1.18.5"
56
+ },
57
+
48
58
  "avatar": {
49
59
  "type": "String",
50
60
  "desc": "URL to an avatar/image; Suggestion: use public folder",
@@ -61,6 +71,16 @@
61
71
  "addedIn": "v1.14.0"
62
72
  },
63
73
 
74
+ "spinnerColor": {
75
+ "extends": "color",
76
+ "addedIn": "v1.18.5"
77
+ },
78
+
79
+ "spinnerSize": {
80
+ "extends": "size",
81
+ "addedIn": "v1.18.5"
82
+ },
83
+
64
84
  "position": {
65
85
  "type": "String",
66
86
  "desc": "Window side/corner to stick to",
@@ -215,6 +235,16 @@
215
235
  "extends": "icon"
216
236
  },
217
237
 
238
+ "iconColor": {
239
+ "extends": "color",
240
+ "addedIn": "v1.18.5"
241
+ },
242
+
243
+ "iconSize": {
244
+ "extends": "size",
245
+ "addedIn": "v1.18.5"
246
+ },
247
+
218
248
  "avatar": {
219
249
  "type": "String",
220
250
  "desc": "URL to an avatar/image; Suggestion: use public folder",
@@ -232,6 +262,16 @@
232
262
  "addedIn": "v1.14.0"
233
263
  },
234
264
 
265
+ "spinnerColor": {
266
+ "extends": "color",
267
+ "addedIn": "v1.18.5"
268
+ },
269
+
270
+ "spinnerSize": {
271
+ "extends": "size",
272
+ "addedIn": "v1.18.5"
273
+ },
274
+
235
275
  "position": {
236
276
  "type": "String",
237
277
  "desc": "Window side/corner to stick to",
@@ -413,6 +453,16 @@
413
453
  "extends": "icon"
414
454
  },
415
455
 
456
+ "iconColor": {
457
+ "extends": "color",
458
+ "addedIn": "v1.18.5"
459
+ },
460
+
461
+ "iconSize": {
462
+ "extends": "size",
463
+ "addedIn": "v1.18.5"
464
+ },
465
+
416
466
  "avatar": {
417
467
  "type": "String",
418
468
  "desc": "URL to an avatar/image; Suggestion: use public folder",
@@ -430,6 +480,16 @@
430
480
  "addedIn": "v1.14.0"
431
481
  },
432
482
 
483
+ "spinnerColor": {
484
+ "extends": "color",
485
+ "addedIn": "v1.18.5"
486
+ },
487
+
488
+ "spinnerSize": {
489
+ "extends": "size",
490
+ "addedIn": "v1.18.5"
491
+ },
492
+
433
493
  "progress": {
434
494
  "type": "Boolean",
435
495
  "desc": "Show progress bar to detail when notification will disappear automatically (unless timeout is 0)",
@@ -554,6 +614,16 @@
554
614
  "extends": "icon"
555
615
  },
556
616
 
617
+ "iconColor": {
618
+ "extends": "color",
619
+ "addedIn": "v1.18.5"
620
+ },
621
+
622
+ "iconSize": {
623
+ "extends": "size",
624
+ "addedIn": "v1.18.5"
625
+ },
626
+
557
627
  "avatar": {
558
628
  "type": "String",
559
629
  "desc": "URL to an avatar/image; Suggestion: use public folder",
@@ -571,6 +641,16 @@
571
641
  "addedIn": "v1.14.0"
572
642
  },
573
643
 
644
+ "spinnerColor": {
645
+ "extends": "color",
646
+ "addedIn": "v1.18.5"
647
+ },
648
+
649
+ "spinnerSize": {
650
+ "extends": "size",
651
+ "addedIn": "v1.18.5"
652
+ },
653
+
574
654
  "position": {
575
655
  "type": "String",
576
656
  "desc": "Window side/corner to stick to",
@@ -748,6 +828,16 @@
748
828
  "extends": "icon"
749
829
  },
750
830
 
831
+ "iconColor": {
832
+ "extends": "color",
833
+ "addedIn": "v1.18.5"
834
+ },
835
+
836
+ "iconSize": {
837
+ "extends": "size",
838
+ "addedIn": "v1.18.5"
839
+ },
840
+
751
841
  "avatar": {
752
842
  "type": "String",
753
843
  "desc": "URL to an avatar/image; Suggestion: use public folder",
@@ -765,6 +855,16 @@
765
855
  "addedIn": "v1.14.0"
766
856
  },
767
857
 
858
+ "spinnerColor": {
859
+ "extends": "color",
860
+ "addedIn": "v1.18.5"
861
+ },
862
+
863
+ "spinnerSize": {
864
+ "extends": "size",
865
+ "addedIn": "v1.18.5"
866
+ },
867
+
768
868
  "position": {
769
869
  "type": "String",
770
870
  "desc": "Window side/corner to stick to",
@@ -1,48 +1,20 @@
1
- const
2
- toString = Object.prototype.toString,
3
- hasOwn = Object.prototype.hasOwnProperty,
4
- class2type = {}
5
-
6
- 'Boolean Number String Function Array Date RegExp Object'.split(' ').forEach(name => {
7
- class2type['[object ' + name + ']'] = name.toLowerCase()
8
- })
9
-
10
- function type (obj) {
11
- return obj === null ? String(obj) : class2type[toString.call(obj)] || 'object'
12
- }
13
-
14
- function isPlainObject (obj) {
15
- if (!obj || type(obj) !== 'object') {
16
- return false
17
- }
18
-
19
- if (obj.constructor &&
20
- !hasOwn.call(obj, 'constructor') &&
21
- !hasOwn.call(obj.constructor.prototype, 'isPrototypeOf')) {
22
- return false
23
- }
24
-
25
- let key
26
- for (key in obj) {}
27
-
28
- return key === void 0 || hasOwn.call(obj, key)
29
- }
1
+ import { isObject } from './is'
30
2
 
31
3
  export default function extend () {
32
4
  let
33
5
  options, name, src, copy, copyIsArray, clone,
34
- target = arguments[0] || {},
6
+ target = arguments[ 0 ] || {},
35
7
  i = 1,
36
8
  deep = false
37
9
  const length = arguments.length
38
10
 
39
11
  if (typeof target === 'boolean') {
40
12
  deep = target
41
- target = arguments[1] || {}
13
+ target = arguments[ 1 ] || {}
42
14
  i = 2
43
15
  }
44
16
 
45
- if (Object(target) !== target && type(target) !== 'function') {
17
+ if (Object(target) !== target && typeof target !== 'function') {
46
18
  target = {}
47
19
  }
48
20
 
@@ -52,28 +24,28 @@ export default function extend () {
52
24
  }
53
25
 
54
26
  for (; i < length; i++) {
55
- if ((options = arguments[i]) !== null) {
27
+ if ((options = arguments[ i ]) !== null) {
56
28
  for (name in options) {
57
- src = target[name]
58
- copy = options[name]
29
+ src = target[ name ]
30
+ copy = options[ name ]
59
31
 
60
32
  if (target === copy) {
61
33
  continue
62
34
  }
63
35
 
64
- if (deep && copy && (isPlainObject(copy) || (copyIsArray = type(copy) === 'array'))) {
36
+ if (deep && copy && (isObject(copy) === true || (copyIsArray = Array.isArray(copy) === true))) {
65
37
  if (copyIsArray) {
66
38
  copyIsArray = false
67
- clone = src && type(src) === 'array' ? src : []
39
+ clone = src && Array.isArray(src) === true ? src : []
68
40
  }
69
41
  else {
70
- clone = src && isPlainObject(src) ? src : {}
42
+ clone = src && isObject(src) === true ? src : {}
71
43
  }
72
44
 
73
- target[name] = extend(deep, clone, copy)
45
+ target[ name ] = extend(deep, clone, copy)
74
46
  }
75
47
  else if (copy !== void 0) {
76
- target[name] = copy
48
+ target[ name ] = copy
77
49
  }
78
50
  }
79
51
  }
package/src/utils/is.js CHANGED
@@ -120,17 +120,11 @@ export function isDeepEqual (a, b) {
120
120
  return a !== a && b !== b // eslint-disable-line no-self-compare
121
121
  }
122
122
 
123
- export function isPrintableChar (v) {
124
- return (v > 47 && v < 58) || // number keys
125
- v === 32 || v === 13 || // spacebar & return key(s) (if you want to allow carriage returns)
126
- (v > 64 && v < 91) || // letter keys
127
- (v > 95 && v < 112) || // numpad keys
128
- (v > 185 && v < 193) || // ;=,-./` (in order)
129
- (v > 218 && v < 223)
130
- }
131
-
123
+ // not perfect, but what we ARE interested is for Arrays not to slip in
124
+ // as spread operator will mess things up in various areas
125
+ // see https://jsbench.me/tbl0iliyax/1
132
126
  export function isObject (v) {
133
- return Object(v) === v
127
+ return v !== null && typeof v === 'object' && Array.isArray(v) !== true
134
128
  }
135
129
 
136
130
  export function isDate (v) {
@@ -144,7 +138,3 @@ export function isRegexp (v) {
144
138
  export function isNumber (v) {
145
139
  return typeof v === 'number' && isFinite(v)
146
140
  }
147
-
148
- export function isString (v) {
149
- return typeof v === 'string'
150
- }
@@ -1,4 +1,5 @@
1
1
  import { getElement } from './dom.js'
2
+ import { isObject } from './is'
2
3
 
3
4
  let id = 0
4
5
  let offsetBase = void 0
@@ -433,7 +434,7 @@ export default function morph (_options) {
433
434
  if (typeof options.style === 'string') {
434
435
  elTo.style.cssText += ' ' + options.style
435
436
  }
436
- else if (options.style === Object(options.style)) {
437
+ else if (isObject(options.style) === true) {
437
438
  for (const prop in options.style) {
438
439
  elTo.style[prop] = options.style[prop]
439
440
  }
@@ -870,8 +871,8 @@ export default function morph (_options) {
870
871
  elToClone.style.animation = `${options.duration}ms ${options.easing} ${options.delay}ms ${animationDirection} ${options.fill} ${qAnimId}-to`
871
872
  elTo.style.animation = `${options.duration}ms ${options.easing} ${options.delay}ms ${animationDirection} ${options.fill} ${qAnimId}`
872
873
 
873
- const cleanup = ev => {
874
- if (ev === Object(ev) && ev.animationName !== qAnimId) {
874
+ const cleanup = evt => {
875
+ if (evt === Object(evt) && evt.animationName !== qAnimId) {
875
876
  return
876
877
  }
877
878
 
@@ -1,10 +1,11 @@
1
1
  import { noop } from '../utils/event.js'
2
+ import { isDate, isRegexp } from '../utils/is.js'
2
3
 
3
4
  function encode (value) {
4
- if (Object.prototype.toString.call(value) === '[object Date]') {
5
+ if (isDate(value) === true) {
5
6
  return '__q_date|' + value.toUTCString()
6
7
  }
7
- if (Object.prototype.toString.call(value) === '[object RegExp]') {
8
+ if (isRegexp(value) === true) {
8
9
  return '__q_expr|' + value.source
9
10
  }
10
11
  if (typeof value === 'number') {