quasar 2.3.4 → 2.4.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 (204) hide show
  1. package/dist/api/Loading.json +2 -6
  2. package/dist/api/QBreadcrumbsEl.json +31 -10
  3. package/dist/api/QBtn.json +30 -14
  4. package/dist/api/QBtnDropdown.json +30 -14
  5. package/dist/api/QBtnToggle.json +3 -0
  6. package/dist/api/QChatMessage.json +4 -12
  7. package/dist/api/QExpansionItem.json +31 -10
  8. package/dist/api/QFab.json +30 -0
  9. package/dist/api/QFabAction.json +8 -0
  10. package/dist/api/QField.json +1 -0
  11. package/dist/api/QFile.json +1 -0
  12. package/dist/api/QInput.json +1 -0
  13. package/dist/api/QItem.json +31 -10
  14. package/dist/api/QOptionGroup.json +74 -4
  15. package/dist/api/QRange.json +592 -107
  16. package/dist/api/QRouteTab.json +31 -11
  17. package/dist/api/QSelect.json +3 -6
  18. package/dist/api/QSlider.json +504 -39
  19. package/dist/api/QUploader.json +16 -2
  20. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  21. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  22. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  23. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  24. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  25. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  26. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  27. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  28. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  29. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  30. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  31. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  32. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  33. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  40. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  41. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  42. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  43. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  44. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  45. package/dist/icon-set/svg-mdi-v4.umd.prod.js +1 -1
  46. package/dist/icon-set/svg-mdi-v5.umd.prod.js +1 -1
  47. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  48. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  49. package/dist/icon-set/themify.umd.prod.js +1 -1
  50. package/dist/lang/ar.umd.prod.js +1 -1
  51. package/dist/lang/az-Latn.umd.prod.js +1 -1
  52. package/dist/lang/bg.umd.prod.js +1 -1
  53. package/dist/lang/bn.umd.prod.js +1 -1
  54. package/dist/lang/ca.umd.prod.js +1 -1
  55. package/dist/lang/cs.umd.prod.js +1 -1
  56. package/dist/lang/da.umd.prod.js +1 -1
  57. package/dist/lang/de.umd.prod.js +1 -1
  58. package/dist/lang/el.umd.prod.js +1 -1
  59. package/dist/lang/en-GB.umd.prod.js +1 -1
  60. package/dist/lang/en-US.umd.prod.js +1 -1
  61. package/dist/lang/eo.umd.prod.js +1 -1
  62. package/dist/lang/es.umd.prod.js +1 -1
  63. package/dist/lang/et.umd.prod.js +1 -1
  64. package/dist/lang/fa-IR.umd.prod.js +1 -1
  65. package/dist/lang/fa.umd.prod.js +1 -1
  66. package/dist/lang/fi.umd.prod.js +1 -1
  67. package/dist/lang/fr.umd.prod.js +1 -1
  68. package/dist/lang/gn.umd.prod.js +1 -1
  69. package/dist/lang/he.umd.prod.js +1 -1
  70. package/dist/lang/hr.umd.prod.js +1 -1
  71. package/dist/lang/hu.umd.prod.js +1 -1
  72. package/dist/lang/id.umd.prod.js +1 -1
  73. package/dist/lang/is.umd.prod.js +1 -1
  74. package/dist/lang/it.umd.prod.js +1 -1
  75. package/dist/lang/ja.umd.prod.js +1 -1
  76. package/dist/lang/km.umd.prod.js +1 -1
  77. package/dist/lang/ko-KR.umd.prod.js +1 -1
  78. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  79. package/dist/lang/lt.umd.prod.js +1 -1
  80. package/dist/lang/lu.umd.prod.js +1 -1
  81. package/dist/lang/lv.umd.prod.js +1 -1
  82. package/dist/lang/ml.umd.prod.js +1 -1
  83. package/dist/lang/ms.umd.prod.js +1 -1
  84. package/dist/lang/nb-NO.umd.prod.js +1 -1
  85. package/dist/lang/nl.umd.prod.js +1 -1
  86. package/dist/lang/pl.umd.prod.js +1 -1
  87. package/dist/lang/pt-BR.umd.prod.js +1 -1
  88. package/dist/lang/pt.umd.prod.js +1 -1
  89. package/dist/lang/ro.umd.prod.js +1 -1
  90. package/dist/lang/ru.umd.prod.js +1 -1
  91. package/dist/lang/sk.umd.prod.js +1 -1
  92. package/dist/lang/sl.umd.prod.js +1 -1
  93. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  94. package/dist/lang/sr.umd.prod.js +1 -1
  95. package/dist/lang/sv.umd.prod.js +1 -1
  96. package/dist/lang/ta.umd.prod.js +1 -1
  97. package/dist/lang/th.umd.prod.js +1 -1
  98. package/dist/lang/tr.umd.prod.js +1 -1
  99. package/dist/lang/ug.umd.prod.js +1 -1
  100. package/dist/lang/uk.umd.prod.js +1 -1
  101. package/dist/lang/vi.umd.prod.js +1 -1
  102. package/dist/lang/zh-CN.umd.prod.js +1 -1
  103. package/dist/lang/zh-TW.umd.prod.js +1 -1
  104. package/dist/quasar.cjs.prod.js +2 -2
  105. package/dist/quasar.css +264 -183
  106. package/dist/quasar.esm.prod.js +2 -2
  107. package/dist/quasar.prod.css +1 -1
  108. package/dist/quasar.rtl.css +331 -262
  109. package/dist/quasar.rtl.prod.css +1 -1
  110. package/dist/quasar.sass +235 -178
  111. package/dist/quasar.umd.js +16537 -16226
  112. package/dist/quasar.umd.prod.js +2 -2
  113. package/dist/ssr-directives/Morph.js +1 -1
  114. package/dist/transforms/loader-asset-urls.json +20 -0
  115. package/dist/types/api/slider.d.ts +46 -0
  116. package/dist/types/api/validation.d.ts +4 -0
  117. package/dist/types/api.d.ts +2 -0
  118. package/dist/types/composables.d.ts +3 -3
  119. package/dist/types/index.d.ts +594 -120
  120. package/dist/vetur/quasar-attributes.json +250 -82
  121. package/dist/vetur/quasar-tags.json +59 -17
  122. package/dist/web-types/web-types.json +578 -149
  123. package/package.json +1 -1
  124. package/src/api.extends.json +0 -1
  125. package/src/components/breadcrumbs/QBreadcrumbs.js +7 -2
  126. package/src/components/breadcrumbs/QBreadcrumbs.sass +0 -3
  127. package/src/components/breadcrumbs/QBreadcrumbsEl.js +14 -8
  128. package/src/components/btn/QBtn.js +5 -5
  129. package/src/components/btn/use-btn.js +21 -21
  130. package/src/components/btn/use-btn.json +22 -13
  131. package/src/components/btn-toggle/QBtnToggle.json +3 -0
  132. package/src/components/checkbox/use-checkbox.js +1 -1
  133. package/src/components/color/QColor.js +32 -26
  134. package/src/components/color/QColor.sass +10 -23
  135. package/src/components/date/QDate.sass +2 -0
  136. package/src/components/drawer/QDrawer.js +18 -15
  137. package/src/components/editor/QEditor.js +1 -1
  138. package/src/components/editor/QEditor.sass +10 -1
  139. package/src/components/expansion-item/QExpansionItem.js +4 -1
  140. package/src/components/fab/QFab.js +18 -12
  141. package/src/components/fab/QFab.json +33 -0
  142. package/src/components/fab/QFab.sass +1 -1
  143. package/src/components/fab/QFabAction.js +14 -7
  144. package/src/components/fab/QFabAction.json +10 -0
  145. package/src/components/file/QFile.js +12 -5
  146. package/src/components/file/QFile.sass +4 -2
  147. package/src/components/footer/QFooter.js +1 -1
  148. package/src/components/header/QHeader.js +1 -1
  149. package/src/components/icon/QIcon.js +1 -1
  150. package/src/components/infinite-scroll/QInfiniteScroll.js +4 -5
  151. package/src/components/item/QItem.js +2 -3
  152. package/src/components/option-group/QOptionGroup.js +3 -0
  153. package/src/components/option-group/QOptionGroup.json +48 -2
  154. package/src/components/parallax/QParallax.js +4 -2
  155. package/src/components/popup-edit/QPopupEdit.js +2 -5
  156. package/src/components/radio/QRadio.js +2 -7
  157. package/src/components/range/QRange.js +103 -222
  158. package/src/components/range/QRange.json +11 -121
  159. package/src/components/scroll-area/QScrollArea.js +3 -1
  160. package/src/components/slider/QSlider.js +46 -132
  161. package/src/components/slider/QSlider.json +1 -121
  162. package/src/components/slider/QSlider.sass +198 -132
  163. package/src/components/slider/use-slider.js +453 -109
  164. package/src/components/slider/use-slider.json +546 -0
  165. package/src/components/stepper/QStepper.js +3 -3
  166. package/src/components/stepper/QStepper.sass +24 -26
  167. package/src/components/table/QTable.js +26 -46
  168. package/src/components/tabs/QRouteTab.js +1 -2
  169. package/src/components/tabs/QRouteTab.json +0 -7
  170. package/src/components/tabs/QTabs.js +71 -20
  171. package/src/components/tabs/use-tab.js +26 -13
  172. package/src/components/tree/QTree.js +14 -12
  173. package/src/components/uploader/QUploader.json +14 -2
  174. package/src/components/uploader/uploader-core.js +16 -9
  175. package/src/components/virtual-scroll/QVirtualScroll.sass +1 -0
  176. package/src/components/virtual-scroll/use-virtual-scroll.js +30 -17
  177. package/src/composables/private/use-field.js +5 -5
  178. package/src/composables/private/use-file.js +20 -5
  179. package/src/composables/private/use-form.js +2 -3
  180. package/src/composables/private/use-fullscreen.js +15 -4
  181. package/src/composables/private/use-router-link.js +44 -23
  182. package/src/composables/private/use-router-link.json +26 -10
  183. package/src/composables/private/use-split-attrs.js +4 -4
  184. package/src/composables/private/use-validate.js +21 -15
  185. package/src/composables/private/use-validate.json +1 -0
  186. package/src/css/core/helpers.sass +3 -0
  187. package/src/css/core/positioning.sass +5 -0
  188. package/src/directives/ScrollFire.js +1 -0
  189. package/src/icon-set.js +2 -4
  190. package/src/plugins/AppFullscreen.js +70 -53
  191. package/src/plugins/AppVisibility.js +2 -3
  192. package/src/plugins/BottomSheet.js +3 -5
  193. package/src/plugins/Dialog.js +3 -5
  194. package/src/plugins/LoadingBar.js +17 -18
  195. package/src/plugins/Notify.js +296 -295
  196. package/src/plugins/Platform.js +14 -14
  197. package/src/utils/date.js +4 -4
  198. package/src/utils/dom.js +2 -2
  199. package/src/utils/open-url.js +2 -2
  200. package/src/utils/patterns.js +1 -0
  201. package/src/utils/private/define-reactive-plugin.js +10 -8
  202. package/src/utils/private/global-dialog.js +6 -8
  203. package/src/utils/private/inject-obj-prop.js +13 -0
  204. package/src/utils/private/is.js +2 -2
@@ -3,15 +3,41 @@ import { changeGlobalNodesTarget } from '../utils/private/global-nodes.js'
3
3
 
4
4
  const prefixes = {}
5
5
 
6
+ function assignFn (fn) {
7
+ Object.assign(Plugin, {
8
+ request: fn,
9
+ exit: fn,
10
+ toggle: fn
11
+ })
12
+ }
13
+
6
14
  function getFullscreenElement () {
7
15
  return (
8
16
  document.fullscreenElement
9
17
  || document.mozFullScreenElement
10
18
  || document.webkitFullscreenElement
11
19
  || document.msFullscreenElement
20
+ || null
12
21
  )
13
22
  }
14
23
 
24
+ function updateEl () {
25
+ const newEl = Plugin.activeEl = Plugin.isActive === false
26
+ ? null
27
+ : getFullscreenElement()
28
+
29
+ changeGlobalNodesTarget(
30
+ newEl === null || newEl === document.documentElement
31
+ ? document.body
32
+ : newEl
33
+ )
34
+ }
35
+
36
+ function togglePluginState () {
37
+ Plugin.isActive = Plugin.isActive === false
38
+ updateEl()
39
+ }
40
+
15
41
  // needed for consistency across browsers
16
42
  function promisify (target, fn) {
17
43
  try {
@@ -31,80 +57,71 @@ const Plugin = defineReactivePlugin({
31
57
  }, {
32
58
  isCapable: false,
33
59
 
34
- request (target) {
35
- if (Plugin.isCapable === true && Plugin.isActive === false) {
36
- const el = target || document.documentElement
37
- return promisify(el, prefixes.request)
38
- }
39
-
40
- return Plugin.__getErr()
41
- },
42
-
43
- exit () {
44
- return Plugin.isCapable === true && Plugin.isActive === true
45
- ? promisify(document, prefixes.exit)
46
- : Plugin.__getErr()
47
- },
48
-
49
- toggle (target) {
50
- return Plugin.isActive === true
51
- ? Plugin.exit()
52
- : Plugin.request(target)
53
- },
54
-
55
60
  install ({ $q }) {
56
61
  $q.fullscreen = this
57
62
  }
58
63
  })
59
64
 
60
- if (__QUASAR_SSR_SERVER__ !== true) {
61
- function init () {
62
- prefixes.request = [
63
- 'requestFullscreen',
64
- 'msRequestFullscreen', 'mozRequestFullScreen', 'webkitRequestFullscreen'
65
- ].find(request => document.documentElement[ request ] !== void 0)
65
+ if (__QUASAR_SSR_SERVER__ === true) {
66
+ assignFn(() => Promise.resolve())
67
+ }
68
+ else {
69
+ prefixes.request = [
70
+ 'requestFullscreen',
71
+ 'msRequestFullscreen', 'mozRequestFullScreen', 'webkitRequestFullscreen'
72
+ ].find(request => document.documentElement[ request ] !== void 0)
66
73
 
67
- Plugin.isCapable = prefixes.request !== void 0
74
+ Plugin.isCapable = prefixes.request !== void 0
68
75
 
69
- if (Plugin.isCapable === false) {
70
- // it means the browser does NOT support it
71
- Plugin.__getErr = () => Promise.reject('Not capable')
72
- return
73
- }
76
+ if (Plugin.isCapable === false) {
77
+ // it means the browser does NOT support it
78
+ assignFn(() => Promise.reject('Not capable'))
79
+ }
80
+ else {
81
+ Object.assign(Plugin, {
82
+ request (target) {
83
+ const el = target || document.documentElement
84
+ const { activeEl } = Plugin
85
+
86
+ if (el === activeEl) {
87
+ return Promise.resolve()
88
+ }
89
+
90
+ const queue = activeEl !== null && el.contains(activeEl) === true
91
+ ? Plugin.exit()
92
+ : Promise.resolve()
74
93
 
75
- Plugin.__getErr = () => Promise.resolve()
94
+ return queue.finally(() => promisify(el, prefixes.request))
95
+ },
96
+
97
+ exit () {
98
+ return Plugin.isActive === true
99
+ ? promisify(document, prefixes.exit)
100
+ : Promise.resolve()
101
+ },
102
+
103
+ toggle (target) {
104
+ return Plugin.isActive === true
105
+ ? Plugin.exit()
106
+ : Plugin.request(target)
107
+ }
108
+ })
76
109
 
77
110
  prefixes.exit = [
78
111
  'exitFullscreen',
79
112
  'msExitFullscreen', 'mozCancelFullScreen', 'webkitExitFullscreen'
80
113
  ].find(exit => document[ exit ])
81
114
 
82
- Plugin.isActive = !!getFullscreenElement()
115
+ Plugin.isActive = Boolean(getFullscreenElement())
116
+ Plugin.isActive === true && updateEl()
83
117
 
84
118
  ;[
85
119
  'onfullscreenchange',
86
120
  'onmsfullscreenchange', 'onwebkitfullscreenchange'
87
121
  ].forEach(evt => {
88
- document[ evt ] = () => {
89
- Plugin.isActive = Plugin.isActive === false
90
-
91
- if (Plugin.isActive === false) {
92
- Plugin.activeEl = null
93
- changeGlobalNodesTarget(document.body)
94
- }
95
- else {
96
- Plugin.activeEl = getFullscreenElement()
97
- changeGlobalNodesTarget(
98
- Plugin.activeEl === document.documentElement
99
- ? document.body
100
- : Plugin.activeEl
101
- )
102
- }
103
- }
122
+ document[ evt ] = togglePluginState
104
123
  })
105
124
  }
106
-
107
- init()
108
125
  }
109
126
 
110
127
  export default Plugin
@@ -1,4 +1,5 @@
1
1
  import defineReactivePlugin from '../utils/private/define-reactive-plugin.js'
2
+ import { injectProp } from '../utils/private/inject-obj-prop.js'
2
3
 
3
4
  const Plugin = defineReactivePlugin({
4
5
  appVisible: true
@@ -9,9 +10,7 @@ const Plugin = defineReactivePlugin({
9
10
  return
10
11
  }
11
12
 
12
- Object.defineProperty($q, 'appVisible', {
13
- get: () => this.appVisible
14
- })
13
+ injectProp($q, 'appVisible', () => this.appVisible)
15
14
  }
16
15
  })
17
16
 
@@ -3,11 +3,9 @@ import globalDialog from '../utils/private/global-dialog.js'
3
3
 
4
4
  export default {
5
5
  install ({ $q, parentApp }) {
6
- if (this.__installed === true) {
7
- $q.bottomSheet = globalDialog(BottomSheet, false, parentApp)
8
- }
9
- else {
10
- this.create = $q.bottomSheet = globalDialog(BottomSheet, false, parentApp)
6
+ $q.bottomSheet = globalDialog(BottomSheet, false, parentApp)
7
+ if (this.__installed !== true) {
8
+ this.create = $q.bottomSheet
11
9
  }
12
10
  }
13
11
  }
@@ -3,11 +3,9 @@ import globalDialog from '../utils/private/global-dialog.js'
3
3
 
4
4
  export default {
5
5
  install ({ $q, parentApp }) {
6
- if (this.__installed === true) {
7
- $q.dialog = globalDialog(DialogPlugin, true, parentApp)
8
- }
9
- else {
10
- this.create = $q.dialog = globalDialog(DialogPlugin, true, parentApp)
6
+ $q.dialog = globalDialog(DialogPlugin, true, parentApp)
7
+ if (this.__installed !== true) {
8
+ this.create = $q.dialog
11
9
  }
12
10
  }
13
11
  }
@@ -7,9 +7,9 @@ import { createChildApp } from '../install-quasar.js'
7
7
 
8
8
  import QAjaxBar from '../components/ajax-bar/QAjaxBar.js'
9
9
 
10
- const reqProps = { ref: 'bar' }
10
+ const barRef = ref(null)
11
11
 
12
- export default defineReactivePlugin({
12
+ const Plugin = defineReactivePlugin({
13
13
  isActive: false
14
14
  }, {
15
15
  start: noop,
@@ -31,41 +31,40 @@ export default defineReactivePlugin({
31
31
 
32
32
  const props = ref(
33
33
  $q.config.loadingBar !== void 0
34
- ? { ...$q.config.loadingBar, ...reqProps }
35
- : { ...reqProps }
34
+ ? { ...$q.config.loadingBar }
35
+ : {}
36
36
  )
37
37
 
38
38
  const el = createGlobalNode('q-loading-bar')
39
39
 
40
- const vm = createChildApp({
40
+ createChildApp({
41
41
  name: 'LoadingBar',
42
42
 
43
43
  // hide App from Vue devtools
44
44
  devtools: { hide: true },
45
45
 
46
- setup: () => () => h(QAjaxBar, props.value)
46
+ setup: () => () => h(QAjaxBar, { ...props.value, ref: barRef })
47
47
  }, parentApp).mount(el)
48
48
 
49
49
  Object.assign(this, {
50
- start: speed => {
51
- const bar = vm.$refs.bar
52
- bar.start(speed)
53
- this.isActive = bar.calls > 0
50
+ start (speed) {
51
+ barRef.value.start(speed)
52
+ Plugin.isActive = barRef.value.calls > 0
54
53
  },
55
- stop: () => {
56
- const bar = vm.$refs.bar
57
- bar.stop()
58
- this.isActive = bar.calls > 0
54
+ stop () {
55
+ barRef.value.stop()
56
+ Plugin.isActive = barRef.value.calls > 0
59
57
  },
60
58
  increment () {
61
- const bar = vm.$refs.bar
62
- bar.increment.apply(null, arguments)
59
+ barRef.value.increment.apply(null, arguments)
63
60
  },
64
- setDefaults: opts => {
61
+ setDefaults (opts) {
65
62
  if (opts === Object(opts)) {
66
- props.value = { ...props.value, ...opts, ...reqProps }
63
+ Object.assign(props.value, opts)
67
64
  }
68
65
  }
69
66
  })
70
67
  }
71
68
  })
69
+
70
+ export default Plugin