quasar 2.16.10 → 2.17.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 (174) hide show
  1. package/dist/api/Platform.json +1 -1
  2. package/dist/api/QOptionGroup.json +1 -1
  3. package/dist/api/QScrollArea.json +1 -1
  4. package/dist/api/QSelect.json +1 -1
  5. package/dist/api/QUploader.json +1 -1
  6. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  7. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  8. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  9. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  10. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  11. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  12. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  13. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  14. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  15. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  16. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  17. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  18. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  19. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  20. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  21. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  22. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  23. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  24. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  25. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  40. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
  41. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  42. package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
  43. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  44. package/dist/icon-set/themify.umd.prod.js +1 -1
  45. package/dist/lang/ar-TN.umd.prod.js +1 -1
  46. package/dist/lang/ar.umd.prod.js +1 -1
  47. package/dist/lang/az-Latn.umd.prod.js +1 -1
  48. package/dist/lang/bg.umd.prod.js +1 -1
  49. package/dist/lang/bn.umd.prod.js +1 -1
  50. package/dist/lang/bs-BA.umd.prod.js +1 -1
  51. package/dist/lang/ca.umd.prod.js +1 -1
  52. package/dist/lang/cs.umd.prod.js +1 -1
  53. package/dist/lang/da.umd.prod.js +1 -1
  54. package/dist/lang/de-CH.umd.prod.js +1 -1
  55. package/dist/lang/de-DE.umd.prod.js +1 -1
  56. package/dist/lang/de.umd.prod.js +1 -1
  57. package/dist/lang/el.umd.prod.js +1 -1
  58. package/dist/lang/en-GB.umd.prod.js +1 -1
  59. package/dist/lang/en-US.umd.prod.js +1 -1
  60. package/dist/lang/eo.umd.prod.js +1 -1
  61. package/dist/lang/es.umd.prod.js +1 -1
  62. package/dist/lang/et.umd.prod.js +1 -1
  63. package/dist/lang/eu.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/hi.umd.prod.js +1 -1
  71. package/dist/lang/hr.umd.prod.js +1 -1
  72. package/dist/lang/hu.umd.prod.js +1 -1
  73. package/dist/lang/id.umd.prod.js +1 -1
  74. package/dist/lang/is.umd.prod.js +1 -1
  75. package/dist/lang/it.umd.prod.js +1 -1
  76. package/dist/lang/ja.umd.prod.js +1 -1
  77. package/dist/lang/kk.umd.prod.js +1 -1
  78. package/dist/lang/km.umd.prod.js +1 -1
  79. package/dist/lang/ko-KR.umd.prod.js +1 -1
  80. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  81. package/dist/lang/lt.umd.prod.js +1 -1
  82. package/dist/lang/lu.umd.prod.js +1 -1
  83. package/dist/lang/lv.umd.prod.js +1 -1
  84. package/dist/lang/mk.umd.prod.js +1 -1
  85. package/dist/lang/ml.umd.prod.js +1 -1
  86. package/dist/lang/mm.umd.prod.js +1 -1
  87. package/dist/lang/ms-MY.umd.prod.js +1 -1
  88. package/dist/lang/ms.umd.prod.js +1 -1
  89. package/dist/lang/my.umd.prod.js +1 -1
  90. package/dist/lang/nb-NO.umd.prod.js +1 -1
  91. package/dist/lang/nl.umd.prod.js +1 -1
  92. package/dist/lang/pl.umd.prod.js +1 -1
  93. package/dist/lang/pt-BR.umd.prod.js +1 -1
  94. package/dist/lang/pt.umd.prod.js +1 -1
  95. package/dist/lang/ro.umd.prod.js +1 -1
  96. package/dist/lang/ru.umd.prod.js +1 -1
  97. package/dist/lang/sk.umd.prod.js +1 -1
  98. package/dist/lang/sl.umd.prod.js +1 -1
  99. package/dist/lang/sm.umd.prod.js +1 -1
  100. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  101. package/dist/lang/sr.umd.prod.js +1 -1
  102. package/dist/lang/sv.umd.prod.js +1 -1
  103. package/dist/lang/ta.umd.prod.js +1 -1
  104. package/dist/lang/th.umd.prod.js +1 -1
  105. package/dist/lang/tl.umd.prod.js +1 -1
  106. package/dist/lang/tr.umd.prod.js +1 -1
  107. package/dist/lang/ug.umd.prod.js +1 -1
  108. package/dist/lang/uk.umd.prod.js +1 -1
  109. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  110. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  111. package/dist/lang/vi.umd.prod.js +1 -1
  112. package/dist/lang/zh-CN.umd.prod.js +1 -1
  113. package/dist/lang/zh-TW.umd.prod.js +1 -1
  114. package/dist/quasar.client.js +753 -2121
  115. package/dist/quasar.css +3 -2
  116. package/dist/quasar.prod.css +1 -1
  117. package/dist/quasar.rtl.css +3 -2
  118. package/dist/quasar.rtl.prod.css +1 -1
  119. package/dist/quasar.sass +8 -4
  120. package/dist/quasar.server.prod.cjs +53 -53
  121. package/dist/quasar.server.prod.js +51 -51
  122. package/dist/quasar.umd.js +344 -1715
  123. package/dist/quasar.umd.prod.js +44 -44
  124. package/dist/types/index.d.ts +120 -51
  125. package/dist/vetur/quasar-attributes.json +1 -1
  126. package/dist/vetur/quasar-tags.json +1 -1
  127. package/dist/web-types/web-types.json +1 -1
  128. package/package.json +9 -9
  129. package/src/components/checkbox/QCheckbox.js +3 -1
  130. package/src/components/icon/QIcon.js +1 -1
  131. package/src/components/menu/QMenu.sass +2 -2
  132. package/src/components/option-group/QOptionGroup.js +38 -15
  133. package/src/components/option-group/QOptionGroup.json +88 -1
  134. package/src/components/radio/QRadio.js +3 -1
  135. package/src/components/scroll-area/QScrollArea.js +115 -107
  136. package/src/components/scroll-area/QScrollArea.json +40 -0
  137. package/src/components/scroll-area/ScrollAreaControls.js +54 -0
  138. package/src/components/select/QSelect.js +16 -18
  139. package/src/components/select/QSelect.json +7 -0
  140. package/src/components/space/QSpace.js +1 -2
  141. package/src/components/spinner/QSpinnerAudio.js +4 -69
  142. package/src/components/spinner/QSpinnerBall.js +4 -85
  143. package/src/components/spinner/QSpinnerBars.js +4 -124
  144. package/src/components/spinner/QSpinnerBox.js +4 -42
  145. package/src/components/spinner/QSpinnerClock.js +4 -53
  146. package/src/components/spinner/QSpinnerComment.js +4 -65
  147. package/src/components/spinner/QSpinnerCube.js +4 -113
  148. package/src/components/spinner/QSpinnerDots.js +4 -85
  149. package/src/components/spinner/QSpinnerFacebook.js +4 -84
  150. package/src/components/spinner/QSpinnerGears.js +4 -40
  151. package/src/components/spinner/QSpinnerGrid.js +4 -133
  152. package/src/components/spinner/QSpinnerHearts.js +4 -35
  153. package/src/components/spinner/QSpinnerHourglass.js +4 -93
  154. package/src/components/spinner/QSpinnerInfinity.js +4 -24
  155. package/src/components/spinner/QSpinnerIos.js +4 -155
  156. package/src/components/spinner/QSpinnerOrbit.js +4 -32
  157. package/src/components/spinner/QSpinnerOval.js +4 -31
  158. package/src/components/spinner/QSpinnerPie.js +4 -62
  159. package/src/components/spinner/QSpinnerPuff.js +4 -64
  160. package/src/components/spinner/QSpinnerRadio.js +4 -57
  161. package/src/components/spinner/QSpinnerRings.js +4 -87
  162. package/src/components/spinner/QSpinnerTail.js +4 -65
  163. package/src/components/tabs/QRouteTab.js +4 -3
  164. package/src/components/tabs/QTabs.js +28 -15
  165. package/src/components/tooltip/QTooltip.sass +2 -0
  166. package/src/components/uploader/QUploader.json +9 -0
  167. package/src/components/uploader/QUploader.sass +0 -1
  168. package/src/components/uploader/uploader-core.js +6 -2
  169. package/src/composables/private.use-panel/use-panel.js +5 -3
  170. package/src/css/variables.sass +3 -0
  171. package/src/plugins/platform/Platform.js +40 -5
  172. package/src/plugins/platform/Platform.json +52 -69
  173. package/src/plugins/platform/Platform.test.js +22 -14
  174. package/src/utils/private.position-engine/position-engine.js +11 -4
@@ -65,11 +65,46 @@ const hasTouch = __QUASAR_SSR_SERVER__
65
65
  : 'ontouchstart' in window || window.navigator.maxTouchPoints > 0
66
66
 
67
67
  function getPlatform (UA) {
68
- const
69
- userAgent = UA.toLowerCase(),
70
- platformMatch = getPlatformMatch(userAgent),
71
- matched = getMatch(userAgent, platformMatch),
72
- browser = {}
68
+ const userAgent = UA.toLowerCase()
69
+ const platformMatch = getPlatformMatch(userAgent)
70
+ const matched = getMatch(userAgent, platformMatch)
71
+ const browser = {
72
+ mobile: false,
73
+ desktop: false,
74
+
75
+ cordova: false,
76
+ capacitor: false,
77
+ nativeMobile: false,
78
+ // nativeMobileWrapper: void 0,
79
+ electron: false,
80
+ bex: false,
81
+
82
+ linux: false,
83
+ mac: false,
84
+ win: false,
85
+ cros: false,
86
+
87
+ chrome: false,
88
+ firefox: false,
89
+ opera: false,
90
+ safari: false,
91
+ vivaldi: false,
92
+ edge: false,
93
+ edgeChromium: false,
94
+ ie: false,
95
+ webkit: false,
96
+
97
+ android: false,
98
+ ios: false,
99
+ ipad: false,
100
+ iphone: false,
101
+ ipod: false,
102
+ kindle: false,
103
+ winphone: false,
104
+ blackberry: false,
105
+ playbook: false,
106
+ silk: false
107
+ }
73
108
 
74
109
  if (matched.browser) {
75
110
  browser[ matched.browser ] = true
@@ -38,39 +38,25 @@
38
38
  "desc": "Major browser version as a number"
39
39
  },
40
40
 
41
- "desktop": {
42
- "type": "Boolean",
43
- "required": false,
44
- "desc": "Whether the platform is desktop"
45
- },
46
41
  "mobile": {
47
42
  "type": "Boolean",
48
- "required": false,
49
43
  "desc": "Whether the platform is mobile"
50
44
  },
51
- "electron": {
45
+ "desktop": {
52
46
  "type": "Boolean",
53
- "required": false,
54
- "desc": "Whether the platform is Electron"
47
+ "desc": "Whether the platform is desktop"
55
48
  },
56
- "bex": {
49
+
50
+ "cordova": {
57
51
  "type": "Boolean",
58
- "required": false,
59
- "desc": "Whether the platform is BEX(Browser Extension)"
52
+ "desc": "Whether the platform is Cordova"
60
53
  },
61
54
  "capacitor": {
62
55
  "type": "Boolean",
63
- "required": false,
64
56
  "desc": "Whether the platform is Capacitor"
65
57
  },
66
- "cordova": {
67
- "type": "Boolean",
68
- "required": false,
69
- "desc": "Whether the platform is Cordova"
70
- },
71
58
  "nativeMobile": {
72
59
  "type": "Boolean",
73
- "required": false,
74
60
  "desc": "Whether the platform is a native mobile wrapper"
75
61
  },
76
62
  "nativeMobileWrapper": {
@@ -79,110 +65,107 @@
79
65
  "values": [ "'cordova'", "'capacitor'" ],
80
66
  "desc": "Type of the native mobile wrapper"
81
67
  },
82
-
83
- "webkit": {
68
+ "electron": {
84
69
  "type": "Boolean",
85
- "required": false,
86
- "desc": "Whether the browser is a Webkit one"
70
+ "desc": "Whether the platform is Electron"
71
+ },
72
+ "bex": {
73
+ "type": "Boolean",
74
+ "desc": "Whether the platform is BEX(Browser Extension)"
87
75
  },
88
76
 
89
- "chrome": {
77
+ "linux": {
90
78
  "type": "Boolean",
91
- "required": false,
92
- "desc": "Whether the browser is Google Chrome"
79
+ "desc": "Whether the operating system is Linux"
93
80
  },
94
- "firefox": {
81
+ "mac": {
95
82
  "type": "Boolean",
96
- "required": false,
97
- "desc": "Whether the browser is Firefox"
83
+ "desc": "Whether the operating system is Mac OS"
98
84
  },
99
- "safari": {
85
+ "win": {
100
86
  "type": "Boolean",
101
- "required": false,
102
- "desc": "Whether the browser is Safari"
87
+ "desc": "Whether the operating system is Windows"
103
88
  },
104
- "edgeChromium": {
89
+ "cros": {
105
90
  "type": "Boolean",
106
- "required": false,
107
- "desc": "Whether the browser is Microsoft Edge (Chromium)"
91
+ "desc": "Whether the operating system is Chrome OS"
108
92
  },
109
- "edge": {
93
+
94
+ "chrome": {
110
95
  "type": "Boolean",
111
- "required": false,
112
- "desc": "Whether the browser is Microsoft Edge Legacy"
96
+ "desc": "Whether the browser is Google Chrome"
97
+ },
98
+ "firefox": {
99
+ "type": "Boolean",
100
+ "desc": "Whether the browser is Firefox"
113
101
  },
114
102
  "opera": {
115
103
  "type": "Boolean",
116
- "required": false,
117
104
  "desc": "Whether the browser is Opera"
118
105
  },
106
+ "safari": {
107
+ "type": "Boolean",
108
+ "desc": "Whether the browser is Safari"
109
+ },
119
110
  "vivaldi": {
120
111
  "type": "Boolean",
121
- "required": false,
122
112
  "desc": "Whether the browser is Vivaldi"
123
113
  },
124
-
125
- "win": {
114
+ "edge": {
126
115
  "type": "Boolean",
127
- "required": false,
128
- "desc": "Whether the operating system is Windows"
116
+ "desc": "Whether the browser is Microsoft Edge Legacy"
129
117
  },
130
- "linux": {
118
+ "edgeChromium": {
131
119
  "type": "Boolean",
132
- "required": false,
133
- "desc": "Whether the operating system is Linux"
120
+ "desc": "Whether the browser is Microsoft Edge (Chromium)"
134
121
  },
135
- "mac": {
122
+ "ie": {
136
123
  "type": "Boolean",
137
- "required": false,
138
- "desc": "Whether the operating system is Mac OS"
124
+ "desc": "Whether the browser is Internet Explorer"
139
125
  },
140
- "cros": {
126
+ "webkit": {
141
127
  "type": "Boolean",
142
- "required": false,
143
- "desc": "Whether the operating system is Chrome OS"
128
+ "desc": "Whether the browser is a Webkit or Webkit-based one"
144
129
  },
145
130
 
146
131
  "android": {
147
132
  "type": "Boolean",
148
- "required": false,
149
133
  "desc": "Whether the operating system is Android"
150
134
  },
151
135
  "ios": {
152
136
  "type": "Boolean",
153
- "required": false,
154
137
  "desc": "Whether the operating system is iOS"
155
138
  },
156
- "winphone": {
139
+ "ipad": {
157
140
  "type": "Boolean",
158
- "required": false,
159
- "desc": "Whether the operating system is Windows Phone"
141
+ "desc": "Whether the device is an iPad"
160
142
  },
161
-
162
143
  "iphone": {
163
144
  "type": "Boolean",
164
- "required": false,
165
145
  "desc": "Whether the device is an iPhone"
166
146
  },
167
- "ipad": {
168
- "type": "Boolean",
169
- "required": false,
170
- "desc": "Whether the device is an iPad"
171
- },
172
147
  "ipod": {
173
148
  "type": "Boolean",
174
- "required": false,
175
149
  "desc": "Whether the device is an iPod"
176
150
  },
177
-
178
151
  "kindle": {
179
152
  "type": "Boolean",
180
- "required": false,
181
153
  "desc": "Whether the device is a Kindle"
182
154
  },
155
+ "winphone": {
156
+ "type": "Boolean",
157
+ "desc": "Whether the operating system is Windows Phone"
158
+ },
159
+ "blackberry": {
160
+ "type": "Boolean",
161
+ "desc": "Whether the device is a Blackberry"
162
+ },
163
+ "playbook": {
164
+ "type": "Boolean",
165
+ "desc": "Whether the device is a Blackberry Playbook"
166
+ },
183
167
  "silk": {
184
168
  "type": "Boolean",
185
- "required": false,
186
169
  "desc": "Whether the browser is Amazon Silk"
187
170
  }
188
171
  },
@@ -35,36 +35,44 @@ describe('[Platform API]', () => {
35
35
  platform: expect.any(String),
36
36
  version: expect.any(String),
37
37
  versionNumber: expect.any(Number),
38
- desktop: expect.any(Boolean),
38
+
39
39
  mobile: expect.any(Boolean),
40
- electron: expect.any(Boolean),
41
- bex: expect.any(Boolean),
42
- capacitor: expect.any(Boolean),
40
+ desktop: expect.any(Boolean),
41
+
43
42
  cordova: expect.any(Boolean),
43
+ capacitor: expect.any(Boolean),
44
44
  nativeMobile: expect.any(Boolean),
45
45
  nativeMobileWrapper: expect.$any([
46
46
  'cordova',
47
47
  'capacitor'
48
48
  ]),
49
- webkit: expect.any(Boolean),
49
+ electron: expect.any(Boolean),
50
+ bex: expect.any(Boolean),
51
+
52
+ linux: expect.any(Boolean),
53
+ mac: expect.any(Boolean),
54
+ win: expect.any(Boolean),
55
+ cros: expect.any(Boolean),
56
+
50
57
  chrome: expect.any(Boolean),
51
58
  firefox: expect.any(Boolean),
52
- safari: expect.any(Boolean),
53
- edgeChromium: expect.any(Boolean),
54
- edge: expect.any(Boolean),
55
59
  opera: expect.any(Boolean),
60
+ safari: expect.any(Boolean),
56
61
  vivaldi: expect.any(Boolean),
57
- win: expect.any(Boolean),
58
- linux: expect.any(Boolean),
59
- mac: expect.any(Boolean),
60
- cros: expect.any(Boolean),
62
+ edge: expect.any(Boolean),
63
+ edgeChromium: expect.any(Boolean),
64
+ ie: expect.any(Boolean),
65
+ webkit: expect.any(Boolean),
66
+
61
67
  android: expect.any(Boolean),
62
68
  ios: expect.any(Boolean),
63
- winphone: expect.any(Boolean),
64
- iphone: expect.any(Boolean),
65
69
  ipad: expect.any(Boolean),
70
+ iphone: expect.any(Boolean),
66
71
  ipod: expect.any(Boolean),
67
72
  kindle: expect.any(Boolean),
73
+ winphone: expect.any(Boolean),
74
+ blackberry: expect.any(Boolean),
75
+ playbook: expect.any(Boolean),
68
76
  silk: expect.any(Boolean)
69
77
  }
70
78
 
@@ -163,15 +163,22 @@ export function setPosition (cfg, retryNumber = 0) {
163
163
  ? getAnchorProps(anchorEl, cover === true ? [ 0, 0 ] : offset)
164
164
  : getAbsoluteAnchorProps(anchorEl, absoluteOffset, offset)
165
165
 
166
- // we "reset" the critical CSS properties
167
- // so we can take an accurate measurement
166
+ /**
167
+ * We "reset" the critical CSS properties
168
+ * so we can take an accurate measurement.
169
+ *
170
+ * Ensure that targetEl has a max-width & max-height
171
+ * set in CSS and that the value does NOT exceeds 100vw/vh.
172
+ * All users of the position-engine (currently QMenu & QTooltip)
173
+ * have CSS for this.
174
+ */
168
175
  Object.assign(targetEl.style, {
169
176
  top: 0,
170
177
  left: 0,
171
178
  minWidth: null,
172
179
  minHeight: null,
173
- maxWidth: maxWidth || '100vw',
174
- maxHeight: maxHeight || '100vh',
180
+ maxWidth,
181
+ maxHeight,
175
182
  visibility: 'visible'
176
183
  })
177
184