quasar 2.5.5 → 2.6.2

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 (355) hide show
  1. package/README.md +1 -1
  2. package/dist/api/Dialog.json +9 -2
  3. package/dist/api/QBreadcrumbsEl.json +5 -5
  4. package/dist/api/QBtn.json +2 -2
  5. package/dist/api/QBtnDropdown.json +2 -2
  6. package/dist/api/QExpansionItem.json +5 -5
  7. package/dist/api/QItem.json +5 -5
  8. package/dist/api/QKnob.json +5 -0
  9. package/dist/api/QRouteTab.json +5 -5
  10. package/dist/api/QSelect.json +8 -9
  11. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  12. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  13. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  14. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  15. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +6 -0
  16. package/dist/icon-set/fontawesome-v6.umd.prod.js +6 -0
  17. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  18. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  19. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  20. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  21. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  22. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  23. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  24. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  25. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  26. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +2 -2
  28. package/dist/icon-set/svg-eva-icons.umd.prod.js +2 -2
  29. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +2 -2
  30. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +6 -0
  31. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +2 -2
  34. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-mdi-v6.umd.prod.js +2 -2
  40. package/dist/icon-set/svg-themify.umd.prod.js +2 -2
  41. package/dist/icon-set/themify.umd.prod.js +1 -1
  42. package/dist/lang/ar.umd.prod.js +1 -1
  43. package/dist/lang/az-Latn.umd.prod.js +1 -1
  44. package/dist/lang/bg.umd.prod.js +1 -1
  45. package/dist/lang/bn.umd.prod.js +1 -1
  46. package/dist/lang/ca.umd.prod.js +1 -1
  47. package/dist/lang/cs.umd.prod.js +1 -1
  48. package/dist/lang/da.umd.prod.js +1 -1
  49. package/dist/lang/de.umd.prod.js +1 -1
  50. package/dist/lang/el.umd.prod.js +1 -1
  51. package/dist/lang/en-GB.umd.prod.js +1 -1
  52. package/dist/lang/en-US.umd.prod.js +1 -1
  53. package/dist/lang/eo.umd.prod.js +1 -1
  54. package/dist/lang/es.umd.prod.js +1 -1
  55. package/dist/lang/et.umd.prod.js +1 -1
  56. package/dist/lang/eu.umd.prod.js +6 -0
  57. package/dist/lang/fa-IR.umd.prod.js +1 -1
  58. package/dist/lang/fa.umd.prod.js +1 -1
  59. package/dist/lang/fi.umd.prod.js +1 -1
  60. package/dist/lang/fr.umd.prod.js +1 -1
  61. package/dist/lang/gn.umd.prod.js +1 -1
  62. package/dist/lang/he.umd.prod.js +1 -1
  63. package/dist/lang/hr.umd.prod.js +1 -1
  64. package/dist/lang/hu.umd.prod.js +1 -1
  65. package/dist/lang/id.umd.prod.js +1 -1
  66. package/dist/lang/is.umd.prod.js +1 -1
  67. package/dist/lang/it.umd.prod.js +1 -1
  68. package/dist/lang/ja.umd.prod.js +1 -1
  69. package/dist/lang/km.umd.prod.js +1 -1
  70. package/dist/lang/ko-KR.umd.prod.js +1 -1
  71. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  72. package/dist/lang/kz.umd.prod.js +6 -0
  73. package/dist/lang/lt.umd.prod.js +1 -1
  74. package/dist/lang/lu.umd.prod.js +1 -1
  75. package/dist/lang/lv.umd.prod.js +1 -1
  76. package/dist/lang/ml.umd.prod.js +1 -1
  77. package/dist/lang/ms.umd.prod.js +1 -1
  78. package/dist/lang/my.umd.prod.js +1 -1
  79. package/dist/lang/nb-NO.umd.prod.js +1 -1
  80. package/dist/lang/nl.umd.prod.js +1 -1
  81. package/dist/lang/pl.umd.prod.js +1 -1
  82. package/dist/lang/pt-BR.umd.prod.js +1 -1
  83. package/dist/lang/pt.umd.prod.js +1 -1
  84. package/dist/lang/ro.umd.prod.js +1 -1
  85. package/dist/lang/ru.umd.prod.js +1 -1
  86. package/dist/lang/sk.umd.prod.js +1 -1
  87. package/dist/lang/sl.umd.prod.js +1 -1
  88. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  89. package/dist/lang/sr.umd.prod.js +1 -1
  90. package/dist/lang/sv.umd.prod.js +1 -1
  91. package/dist/lang/ta.umd.prod.js +1 -1
  92. package/dist/lang/th.umd.prod.js +1 -1
  93. package/dist/lang/tr.umd.prod.js +1 -1
  94. package/dist/lang/ug.umd.prod.js +2 -2
  95. package/dist/lang/uk.umd.prod.js +1 -1
  96. package/dist/lang/vi.umd.prod.js +1 -1
  97. package/dist/lang/zh-CN.umd.prod.js +1 -1
  98. package/dist/lang/zh-TW.umd.prod.js +1 -1
  99. package/dist/quasar.cjs.prod.js +2 -2
  100. package/dist/quasar.css +2 -4
  101. package/dist/quasar.esm.prod.js +2 -2
  102. package/dist/quasar.prod.css +1 -1
  103. package/dist/quasar.rtl.css +2 -4
  104. package/dist/quasar.rtl.prod.css +1 -1
  105. package/dist/quasar.sass +2 -1
  106. package/dist/quasar.umd.js +334 -251
  107. package/dist/quasar.umd.prod.js +2 -2
  108. package/dist/types/extras/icon-set.d.ts +3 -0
  109. package/dist/types/globals.d.ts +2 -2
  110. package/dist/types/index.d.ts +35 -27
  111. package/dist/vetur/quasar-attributes.json +28 -24
  112. package/dist/vetur/quasar-tags.json +1 -0
  113. package/dist/web-types/web-types.json +35 -25
  114. package/icon-set/bootstrap-icons.js +11 -6
  115. package/icon-set/bootstrap-icons.mjs +136 -0
  116. package/icon-set/eva-icons.js +10 -5
  117. package/icon-set/{svg-mdi-v4.js → eva-icons.mjs} +62 -94
  118. package/icon-set/fontawesome-v5-pro.js +6 -1
  119. package/icon-set/fontawesome-v5-pro.mjs +128 -0
  120. package/icon-set/fontawesome-v5.js +6 -1
  121. package/icon-set/fontawesome-v5.mjs +128 -0
  122. package/icon-set/fontawesome-v6-pro.js +133 -0
  123. package/icon-set/fontawesome-v6-pro.mjs +128 -0
  124. package/icon-set/fontawesome-v6.js +133 -0
  125. package/icon-set/fontawesome-v6.mjs +128 -0
  126. package/icon-set/ionicons-v4.js +10 -5
  127. package/icon-set/ionicons-v4.mjs +180 -0
  128. package/icon-set/line-awesome.js +6 -1
  129. package/icon-set/line-awesome.mjs +128 -0
  130. package/icon-set/material-icons-outlined.js +6 -1
  131. package/icon-set/material-icons-outlined.mjs +128 -0
  132. package/icon-set/material-icons-round.js +6 -1
  133. package/icon-set/material-icons-round.mjs +128 -0
  134. package/icon-set/material-icons-sharp.js +6 -1
  135. package/icon-set/material-icons-sharp.mjs +128 -0
  136. package/icon-set/material-icons.js +6 -1
  137. package/icon-set/material-icons.mjs +128 -0
  138. package/icon-set/mdi-v3.js +6 -1
  139. package/icon-set/mdi-v3.mjs +141 -0
  140. package/icon-set/mdi-v4.js +6 -1
  141. package/icon-set/mdi-v4.mjs +141 -0
  142. package/icon-set/mdi-v5.js +6 -1
  143. package/icon-set/mdi-v5.mjs +141 -0
  144. package/icon-set/mdi-v6.js +6 -1
  145. package/icon-set/mdi-v6.mjs +141 -0
  146. package/icon-set/svg-bootstrap-icons.js +10 -11
  147. package/icon-set/svg-bootstrap-icons.mjs +210 -0
  148. package/icon-set/svg-eva-icons.js +9 -10
  149. package/icon-set/svg-eva-icons.mjs +233 -0
  150. package/icon-set/svg-fontawesome-v5.js +5 -6
  151. package/icon-set/svg-fontawesome-v5.mjs +197 -0
  152. package/icon-set/svg-fontawesome-v6.js +198 -0
  153. package/icon-set/svg-fontawesome-v6.mjs +198 -0
  154. package/icon-set/svg-ionicons-v4.js +9 -10
  155. package/icon-set/svg-ionicons-v4.mjs +234 -0
  156. package/icon-set/svg-ionicons-v5.js +7 -7
  157. package/icon-set/svg-ionicons-v5.mjs +225 -0
  158. package/icon-set/svg-ionicons-v6.js +7 -7
  159. package/icon-set/svg-ionicons-v6.mjs +225 -0
  160. package/icon-set/svg-line-awesome.js +5 -5
  161. package/icon-set/svg-line-awesome.mjs +198 -0
  162. package/icon-set/svg-material-icons-outlined.js +5 -5
  163. package/icon-set/svg-material-icons-outlined.mjs +203 -0
  164. package/icon-set/svg-material-icons-round.js +5 -5
  165. package/icon-set/svg-material-icons-round.mjs +203 -0
  166. package/icon-set/svg-material-icons-sharp.js +5 -5
  167. package/icon-set/svg-material-icons-sharp.mjs +203 -0
  168. package/icon-set/svg-material-icons.js +5 -5
  169. package/icon-set/svg-material-icons.mjs +203 -0
  170. package/icon-set/svg-mdi-v6.js +5 -5
  171. package/icon-set/{svg-mdi-v5.js → svg-mdi-v6.mjs} +6 -6
  172. package/icon-set/svg-themify.js +9 -10
  173. package/icon-set/svg-themify.mjs +231 -0
  174. package/icon-set/themify.js +10 -5
  175. package/icon-set/themify.mjs +169 -0
  176. package/lang/ar.js +6 -1
  177. package/lang/ar.mjs +96 -0
  178. package/lang/az-Latn.js +6 -1
  179. package/lang/az-Latn.mjs +91 -0
  180. package/lang/bg.js +6 -1
  181. package/lang/bg.mjs +91 -0
  182. package/lang/bn.js +6 -1
  183. package/lang/bn.mjs +91 -0
  184. package/lang/ca.js +6 -1
  185. package/lang/ca.mjs +91 -0
  186. package/lang/cs.js +6 -1
  187. package/lang/cs.mjs +102 -0
  188. package/lang/da.js +6 -1
  189. package/lang/da.mjs +91 -0
  190. package/lang/de.js +6 -1
  191. package/lang/de.mjs +91 -0
  192. package/lang/el.js +6 -1
  193. package/lang/el.mjs +91 -0
  194. package/lang/en-GB.js +6 -1
  195. package/lang/en-GB.mjs +91 -0
  196. package/lang/en-US.js +6 -1
  197. package/lang/en-US.mjs +91 -0
  198. package/lang/eo.js +6 -1
  199. package/lang/eo.mjs +91 -0
  200. package/lang/es.js +6 -1
  201. package/lang/es.mjs +91 -0
  202. package/lang/et.js +6 -1
  203. package/lang/et.mjs +91 -0
  204. package/lang/eu.js +96 -0
  205. package/lang/eu.mjs +91 -0
  206. package/lang/fa-IR.js +6 -1
  207. package/lang/fa-IR.mjs +92 -0
  208. package/lang/fa.js +6 -1
  209. package/lang/fa.mjs +92 -0
  210. package/lang/fi.js +6 -1
  211. package/lang/fi.mjs +92 -0
  212. package/lang/fr.js +6 -1
  213. package/lang/fr.mjs +94 -0
  214. package/lang/gn.js +6 -1
  215. package/lang/gn.mjs +91 -0
  216. package/lang/he.js +6 -1
  217. package/lang/he.mjs +92 -0
  218. package/lang/hr.js +6 -1
  219. package/lang/hr.mjs +91 -0
  220. package/lang/hu.js +6 -1
  221. package/lang/hu.mjs +91 -0
  222. package/lang/id.js +6 -1
  223. package/lang/id.mjs +91 -0
  224. package/lang/index.json +8 -0
  225. package/lang/is.js +6 -1
  226. package/lang/is.mjs +91 -0
  227. package/lang/it.js +6 -1
  228. package/lang/it.mjs +91 -0
  229. package/lang/ja.js +6 -1
  230. package/lang/ja.mjs +90 -0
  231. package/lang/km.js +6 -1
  232. package/lang/km.mjs +91 -0
  233. package/lang/ko-KR.js +6 -1
  234. package/lang/ko-KR.mjs +91 -0
  235. package/lang/kur-CKB.js +6 -1
  236. package/lang/kur-CKB.mjs +101 -0
  237. package/lang/kz.js +100 -0
  238. package/lang/kz.mjs +95 -0
  239. package/lang/lt.js +6 -1
  240. package/lang/lt.mjs +103 -0
  241. package/lang/lu.js +6 -1
  242. package/lang/lu.mjs +91 -0
  243. package/lang/lv.js +6 -1
  244. package/lang/lv.mjs +91 -0
  245. package/lang/ml.js +6 -1
  246. package/lang/ml.mjs +95 -0
  247. package/lang/ms.js +6 -1
  248. package/lang/ms.mjs +91 -0
  249. package/lang/my.js +6 -1
  250. package/lang/my.mjs +90 -0
  251. package/lang/nb-NO.js +6 -1
  252. package/lang/nb-NO.mjs +92 -0
  253. package/lang/nl.js +6 -1
  254. package/lang/nl.mjs +91 -0
  255. package/lang/pl.js +6 -1
  256. package/lang/pl.mjs +91 -0
  257. package/lang/pt-BR.js +6 -1
  258. package/lang/pt-BR.mjs +91 -0
  259. package/lang/pt.js +6 -1
  260. package/lang/pt.mjs +91 -0
  261. package/lang/ro.js +6 -1
  262. package/lang/ro.mjs +91 -0
  263. package/lang/ru.js +6 -1
  264. package/lang/ru.mjs +95 -0
  265. package/lang/sk.js +6 -1
  266. package/lang/sk.mjs +91 -0
  267. package/lang/sl.js +6 -1
  268. package/lang/sl.mjs +91 -0
  269. package/lang/sr-CYR.js +6 -1
  270. package/lang/sr-CYR.mjs +91 -0
  271. package/lang/sr.js +6 -1
  272. package/lang/sr.mjs +91 -0
  273. package/lang/sv.js +6 -1
  274. package/lang/sv.mjs +91 -0
  275. package/lang/ta.js +6 -1
  276. package/lang/ta.mjs +91 -0
  277. package/lang/th.js +6 -1
  278. package/lang/th.mjs +91 -0
  279. package/lang/tr.js +6 -1
  280. package/lang/tr.mjs +87 -0
  281. package/lang/ug.js +55 -51
  282. package/lang/ug.mjs +91 -0
  283. package/lang/uk.js +7 -2
  284. package/lang/uk.mjs +95 -0
  285. package/lang/vi.js +6 -1
  286. package/lang/vi.mjs +91 -0
  287. package/lang/zh-CN.js +6 -1
  288. package/lang/zh-CN.mjs +90 -0
  289. package/lang/zh-TW.js +6 -1
  290. package/lang/zh-TW.mjs +90 -0
  291. package/package.json +7 -5
  292. package/src/components/btn/QBtn.js +16 -14
  293. package/src/components/btn/use-btn.js +7 -7
  294. package/src/components/btn/use-btn.json +2 -2
  295. package/src/components/date/QDate.js +2 -2
  296. package/src/components/dialog/QDialog.js +11 -11
  297. package/src/components/dialog-bottom-sheet/BottomSheet.js +11 -11
  298. package/src/components/dialog-plugin/DialogPlugin.js +6 -6
  299. package/src/components/editor/QEditor.js +10 -10
  300. package/src/components/editor/editor-caret.js +1 -1
  301. package/src/components/editor/editor-utils.js +2 -2
  302. package/src/components/fab/QFab.js +1 -1
  303. package/src/components/file/QFile.js +2 -1
  304. package/src/components/icon/QIcon.js +2 -1
  305. package/src/components/infinite-scroll/QInfiniteScroll.js +3 -1
  306. package/src/components/inner-loading/QInnerLoading.js +7 -7
  307. package/src/components/input/QInput.js +4 -1
  308. package/src/components/knob/QKnob.js +5 -2
  309. package/src/components/knob/QKnob.json +6 -0
  310. package/src/components/linear-progress/QLinearProgress.sass +1 -0
  311. package/src/components/menu/QMenu.js +13 -13
  312. package/src/components/page-scroller/QPageScroller.js +4 -4
  313. package/src/components/pull-to-refresh/QPullToRefresh.js +5 -5
  314. package/src/components/select/QSelect.js +28 -7
  315. package/src/components/select/QSelect.json +4 -7
  316. package/src/components/slider/use-slider.js +4 -4
  317. package/src/components/stepper/QStep.js +6 -6
  318. package/src/components/table/table-column-selection.js +6 -6
  319. package/src/components/table/table-sort.js +2 -2
  320. package/src/components/tabs/QTabs.js +4 -4
  321. package/src/components/tooltip/QTooltip.js +12 -12
  322. package/src/components/uploader/uploader-core.js +11 -10
  323. package/src/components/virtual-scroll/QVirtualScroll.js +3 -3
  324. package/src/components/virtual-scroll/use-virtual-scroll.js +20 -20
  325. package/src/composables/private/__tests__/use-transition.spec.js +2 -2
  326. package/src/composables/private/use-field.js +25 -17
  327. package/src/composables/private/use-file-dom-props.js +5 -5
  328. package/src/composables/private/use-file.js +15 -12
  329. package/src/composables/private/use-router-link.js +2 -2
  330. package/src/composables/private/use-router-link.json +5 -5
  331. package/src/directives/Morph.js +12 -3
  332. package/src/icon-set.js +2 -1
  333. package/src/install-quasar.js +3 -3
  334. package/src/lang.js +2 -1
  335. package/src/plugins/AddressbarColor.js +7 -7
  336. package/src/plugins/Cookies.js +5 -1
  337. package/src/plugins/Dialog.json +3 -2
  338. package/src/plugins/Loading.js +3 -3
  339. package/src/plugins/LoadingBar.js +12 -6
  340. package/src/plugins/Notify.js +4 -4
  341. package/src/utils/create-meta-mixin.js +4 -4
  342. package/src/utils/create-uploader-component.js +2 -2
  343. package/src/utils/date.js +8 -12
  344. package/src/utils/event.js +3 -3
  345. package/src/utils/extend.js +33 -5
  346. package/src/utils/morph.js +2 -2
  347. package/src/utils/private/is.js +4 -2
  348. package/src/utils/private/noop-ssr-directive-transform.js +1 -1
  349. package/wrappers/index.js +33 -5
  350. package/wrappers/index.mjs +63 -0
  351. package/dist/icon-set/svg-mdi-v4.umd.prod.js +0 -6
  352. package/dist/icon-set/svg-mdi-v5.umd.prod.js +0 -6
  353. package/dist/ssr-directives/Morph.js +0 -55
  354. package/dist/ssr-directives/index.js +0 -14
  355. package/src/directives/Morph.ssr.js +0 -45
@@ -76,7 +76,7 @@ export default createComponent({
76
76
  }
77
77
 
78
78
  if (event.isFirst === true) {
79
- if (getVerticalScrollPosition(localScrollTarget) !== 0 || event.direction !== "down") {
79
+ if (getVerticalScrollPosition(localScrollTarget) !== 0 || event.direction !== 'down') {
80
80
  if (pulling.value === true) {
81
81
  pulling.value = false
82
82
  state.value = 'pull'
@@ -189,10 +189,10 @@ export default createComponent({
189
189
  }, [
190
190
  state.value !== 'refreshing'
191
191
  ? h(QIcon, {
192
- name: props.icon || $q.iconSet.pullToRefresh.icon,
193
- color: props.color,
194
- size: '32px'
195
- })
192
+ name: props.icon || $q.iconSet.pullToRefresh.icon,
193
+ color: props.color,
194
+ size: '32px'
195
+ })
196
196
  : h(QSpinner, {
197
197
  size: '24px',
198
198
  color: props.color
@@ -17,7 +17,7 @@ import { useFormProps, useFormInputNameAttr } from '../../composables/private/us
17
17
  import useKeyComposition from '../../composables/private/use-key-composition.js'
18
18
 
19
19
  import { createComponent } from '../../utils/private/create.js'
20
- import { isDeepEqual, isPlainObject } from '../../utils/private/is.js'
20
+ import { isDeepEqual } from '../../utils/private/is.js'
21
21
  import { stop, prevent, stopAndPrevent } from '../../utils/event.js'
22
22
  import { normalizeToInterval } from '../../utils/format.js'
23
23
  import { shouldIgnoreKey, isKeyCode } from '../../utils/private/key-composition.js'
@@ -175,6 +175,7 @@ export default createComponent({
175
175
  localResetVirtualScroll,
176
176
  padVirtualScroll,
177
177
  onVirtualScrollEvt,
178
+ reset,
178
179
  scrollTo,
179
180
  setVirtualScrollSize
180
181
  } = useVirtualScroll({
@@ -432,6 +433,8 @@ export default createComponent({
432
433
 
433
434
  watch(menu, updateMenu)
434
435
 
436
+ watch(virtualScrollLength, rerenderMenu)
437
+
435
438
  function getEmittingOptionValue (opt) {
436
439
  return props.emitValue === true
437
440
  ? getOptionValue.value(opt)
@@ -602,7 +605,7 @@ export default createComponent({
602
605
 
603
606
  return typeof val === 'function'
604
607
  ? val
605
- : opt => (isPlainObject(opt) === true && val in opt ? opt[ val ] : opt)
608
+ : opt => (opt !== null && typeof opt === 'object' && val in opt ? opt[ val ] : opt)
606
609
  }
607
610
 
608
611
  function isOptionSelected (opt) {
@@ -975,6 +978,8 @@ export default createComponent({
975
978
  }
976
979
 
977
980
  function getInput (fromDialog, isTarget) {
981
+ const attrs = isTarget === true ? { ...comboboxAttrs.value, ...state.splitAttrs.attributes.value } : void 0
982
+
978
983
  const data = {
979
984
  ref: isTarget === true ? targetRef : void 0,
980
985
  key: 'i_t',
@@ -983,8 +988,7 @@ export default createComponent({
983
988
  value: inputValue.value !== void 0 ? inputValue.value : '',
984
989
  // required for Android in order to show ENTER key when in form
985
990
  type: 'search',
986
- ...comboboxAttrs.value,
987
- ...state.splitAttrs.attributes.value,
991
+ ...attrs,
988
992
  id: isTarget === true ? state.targetUid.value : void 0,
989
993
  maxlength: props.maxlength,
990
994
  autocomplete: props.autocomplete,
@@ -1338,6 +1342,18 @@ export default createComponent({
1338
1342
  setOptionIndex(optionIndex)
1339
1343
  }
1340
1344
 
1345
+ function rerenderMenu () {
1346
+ if (menu.value === true && state.innerLoading.value === false) {
1347
+ reset()
1348
+
1349
+ nextTick(() => {
1350
+ if (menu.value === true && state.innerLoading.value === false) {
1351
+ updateMenu(true)
1352
+ }
1353
+ })
1354
+ }
1355
+ }
1356
+
1341
1357
  function updateMenuPosition () {
1342
1358
  if (dialog.value === false && menuRef.value !== null) {
1343
1359
  menuRef.value.updatePosition()
@@ -1464,13 +1480,16 @@ export default createComponent({
1464
1480
  }
1465
1481
  // there can be only one (when dialog is opened the control in dialog should be target)
1466
1482
  else if (state.editable.value === true) {
1483
+ const attrs = isTarget === true ? comboboxAttrs.value : void 0
1484
+
1467
1485
  child.push(
1468
- h('div', {
1486
+ h('input', {
1469
1487
  ref: isTarget === true ? targetRef : void 0,
1470
1488
  key: 'd_t',
1471
1489
  class: 'q-select__focus-target',
1472
1490
  id: isTarget === true ? state.targetUid.value : void 0,
1473
- ...comboboxAttrs.value,
1491
+ readonly: true,
1492
+ ...attrs,
1474
1493
  onKeydown: onTargetKeydown,
1475
1494
  onKeyup: onTargetKeyup,
1476
1495
  onKeypress: onTargetKeypress
@@ -1500,9 +1519,11 @@ export default createComponent({
1500
1519
  )
1501
1520
  }
1502
1521
 
1522
+ const attrs = props.useInput === true || isTarget !== true ? void 0 : state.splitAttrs.attributes.value
1523
+
1503
1524
  return h('div', {
1504
1525
  class: 'q-field__native row items-center',
1505
- ...state.splitAttrs.attributes.value
1526
+ ...attrs
1506
1527
  }, child)
1507
1528
  },
1508
1529
 
@@ -716,13 +716,10 @@
716
716
 
717
717
  "getOptionIndex": {
718
718
  "desc": "Gets current focused option index from menu; It's -1 if no option is focused",
719
- "params": {
720
- "index": {
721
- "type": "Number",
722
- "required": true,
723
- "desc": "Index of option from menu; -1 if no option is focused",
724
- "examples": [ 10 ]
725
- }
719
+ "returns": {
720
+ "type": "Number",
721
+ "desc": "Index of option from menu; It's -1 if no option is focused",
722
+ "examples": [ -1, 0, 10 ]
726
723
  },
727
724
  "addedIn": "v2.5.4"
728
725
  },
@@ -7,7 +7,7 @@ import { useFormProps, useFormInject } from '../../composables/private/use-form.
7
7
 
8
8
  import { between } from '../../utils/format.js'
9
9
  import { position } from '../../utils/event.js'
10
- import { isNumber, isPlainObject } from '../../utils/private/is.js'
10
+ import { isNumber, isObject } from '../../utils/private/is.js'
11
11
  import { hDir } from '../../utils/private/render.js'
12
12
 
13
13
  const markerPrefixClass = 'q-slider__marker-labels'
@@ -340,7 +340,7 @@ export default function ({ updateValue, updatePosition, getDragging, formAttrs }
340
340
  if (typeof def === 'function') {
341
341
  return markerTicks.value.map(value => {
342
342
  const item = def(value)
343
- return isPlainObject(item) === true ? { ...item, value } : { value, label: item }
343
+ return isObject(item) === true ? { ...item, value } : { value, label: item }
344
344
  })
345
345
  }
346
346
 
@@ -348,14 +348,14 @@ export default function ({ updateValue, updatePosition, getDragging, formAttrs }
348
348
 
349
349
  if (Array.isArray(def) === true) {
350
350
  return def
351
- .map(item => (isPlainObject(item) === true ? item : { value: item }))
351
+ .map(item => (isObject(item) === true ? item : { value: item }))
352
352
  .filter(filterFn)
353
353
  }
354
354
 
355
355
  return Object.keys(def).map(key => {
356
356
  const item = def[ key ]
357
357
  const value = Number(key)
358
- return isPlainObject(item) === true ? { ...item, value } : { value, label: item }
358
+ return isObject(item) === true ? { ...item, value } : { value, label: item }
359
359
  }).filter(filterFn)
360
360
  }
361
361
 
@@ -75,14 +75,14 @@ export default createComponent({
75
75
  || $stepper.value.vertical !== true
76
76
  ? {}
77
77
  : {
78
- onScroll (e) {
79
- const { target } = e
80
- if (target.scrollTop > 0) {
81
- target.scrollTop = 0
78
+ onScroll (e) {
79
+ const { target } = e
80
+ if (target.scrollTop > 0) {
81
+ target.scrollTop = 0
82
+ }
83
+ attrs.onScroll !== void 0 && attrs.onScroll(e)
82
84
  }
83
- attrs.onScroll !== void 0 && attrs.onScroll(e)
84
85
  }
85
- }
86
86
  ))
87
87
 
88
88
  const contentKey = computed(() => (
@@ -17,12 +17,12 @@ export function useTableColumnSelection (props, computedPagination, hasSelection
17
17
 
18
18
  return row !== void 0
19
19
  ? Object.keys(row).map(name => ({
20
- name,
21
- label: name.toUpperCase(),
22
- field: name,
23
- align: isNumber(row[ name ]) ? 'right' : 'left',
24
- sortable: true
25
- }))
20
+ name,
21
+ label: name.toUpperCase(),
22
+ field: name,
23
+ align: isNumber(row[ name ]) ? 'right' : 'left',
24
+ sortable: true
25
+ }))
26
26
  : []
27
27
  })
28
28
 
@@ -1,7 +1,7 @@
1
1
  import { computed } from 'vue'
2
2
 
3
3
  import { sortDate } from '../../utils/private/sort.js'
4
- import { isNumber, isDate, isPlainObject } from '../../utils/private/is.js'
4
+ import { isNumber, isDate, isObject } from '../../utils/private/is.js'
5
5
 
6
6
  export const useTableSortProps = {
7
7
  sortMethod: Function,
@@ -73,7 +73,7 @@ export function useTableSort (props, computedPagination, colList, setPagination)
73
73
  function sort (col /* String(col name) or Object(col definition) */) {
74
74
  let sortOrder = props.columnSortOrder
75
75
 
76
- if (isPlainObject(col) === true) {
76
+ if (isObject(col) === true) {
77
77
  if (col.sortOrder) {
78
78
  sortOrder = col.sortOrder
79
79
  }
@@ -423,11 +423,11 @@ export default createComponent({
423
423
  let wasItActive = wasActive === true
424
424
  ? emptyFn
425
425
  : tab => {
426
- if (model === tab.name.value) {
427
- wasActive = true
428
- wasItActive = emptyFn
429
- }
426
+ if (model === tab.name.value) {
427
+ wasActive = true
428
+ wasItActive = emptyFn
430
429
  }
430
+ }
431
431
 
432
432
  const tabList = getRouteList()
433
433
 
@@ -280,18 +280,18 @@ export default createComponent({
280
280
  function getTooltipContent () {
281
281
  return showing.value === true
282
282
  ? h('div', {
283
- ...attrs,
284
- ref: innerRef,
285
- class: [
286
- 'q-tooltip q-tooltip--style q-position-engine no-pointer-events',
287
- attrs.class
288
- ],
289
- style: [
290
- attrs.style,
291
- transitionStyle.value
292
- ],
293
- role: 'complementary'
294
- }, hSlot(slots.default))
283
+ ...attrs,
284
+ ref: innerRef,
285
+ class: [
286
+ 'q-tooltip q-tooltip--style q-position-engine no-pointer-events',
287
+ attrs.class
288
+ ],
289
+ style: [
290
+ attrs.style,
291
+ transitionStyle.value
292
+ ],
293
+ role: 'complementary'
294
+ }, hSlot(slots.default))
295
295
  : null
296
296
  }
297
297
 
@@ -108,6 +108,7 @@ export function getRenderer (getPlugin) {
108
108
  pickFiles,
109
109
  addFiles,
110
110
  onDragover,
111
+ onDragleave,
111
112
  processFiles,
112
113
  getDndNode,
113
114
  maxFilesNumber,
@@ -387,10 +388,10 @@ export function getRenderer (getPlugin) {
387
388
  }, [
388
389
  file.__status === 'failed'
389
390
  ? h(QIcon, {
390
- class: 'q-uploader__file-status',
391
- name: $q.iconSet.type.negative,
392
- color: 'negative'
393
- })
391
+ class: 'q-uploader__file-status',
392
+ name: $q.iconSet.type.negative,
393
+ color: 'negative'
394
+ })
394
395
  : null,
395
396
 
396
397
  h('div', { class: 'q-uploader__file-header-content col' }, [
@@ -404,11 +405,11 @@ export function getRenderer (getPlugin) {
404
405
 
405
406
  file.__status === 'uploading'
406
407
  ? h(QCircularProgress, {
407
- value: file.__progress,
408
- min: 0,
409
- max: 1,
410
- indeterminate: file.__progress === 0
411
- })
408
+ value: file.__progress,
409
+ min: 0,
410
+ max: 1,
411
+ indeterminate: file.__progress === 0
412
+ })
412
413
  : h(QBtn, {
413
414
  round: true,
414
415
  dense: true,
@@ -477,7 +478,7 @@ export function getRenderer (getPlugin) {
477
478
  const data = { ref: rootRef, class: classes.value }
478
479
 
479
480
  if (canAddFiles.value === true) {
480
- data.onDragover = onDragover
481
+ Object.assign(data, { onDragover, onDragleave })
481
482
  }
482
483
 
483
484
  return h('div', data, children)
@@ -148,9 +148,9 @@ export default createComponent({
148
148
 
149
149
  return props.type === '__qtable'
150
150
  ? getTableMiddle(
151
- { ref: rootRef, class: 'q-table__middle ' + classes.value },
152
- __getVirtualChildren()
153
- )
151
+ { ref: rootRef, class: 'q-table__middle ' + classes.value },
152
+ __getVirtualChildren()
153
+ )
154
154
  : h(comps[ props.type ], {
155
155
  ...attrs,
156
156
  ref: rootRef,
@@ -622,17 +622,17 @@ export function useVirtualScroll ({
622
622
  return [
623
623
  tag === 'tbody'
624
624
  ? h(tag, {
625
- class: 'q-virtual-scroll__padding',
626
- key: 'before',
627
- ref: beforeRef
628
- }, [
629
- h('tr', [
630
- h('td', {
631
- style: { [ paddingSize ]: `${ virtualScrollPaddingBefore.value }px`, ...style },
632
- colspan: colspanAttr.value
633
- })
634
- ])
625
+ class: 'q-virtual-scroll__padding',
626
+ key: 'before',
627
+ ref: beforeRef
628
+ }, [
629
+ h('tr', [
630
+ h('td', {
631
+ style: { [ paddingSize ]: `${ virtualScrollPaddingBefore.value }px`, ...style },
632
+ colspan: colspanAttr.value
633
+ })
635
634
  ])
635
+ ])
636
636
  : h(tag, {
637
637
  class: 'q-virtual-scroll__padding',
638
638
  key: 'before',
@@ -650,17 +650,17 @@ export function useVirtualScroll ({
650
650
 
651
651
  tag === 'tbody'
652
652
  ? h(tag, {
653
- class: 'q-virtual-scroll__padding',
654
- key: 'after',
655
- ref: afterRef
656
- }, [
657
- h('tr', [
658
- h('td', {
659
- style: { [ paddingSize ]: `${ virtualScrollPaddingAfter.value }px`, ...style },
660
- colspan: colspanAttr.value
661
- })
662
- ])
653
+ class: 'q-virtual-scroll__padding',
654
+ key: 'after',
655
+ ref: afterRef
656
+ }, [
657
+ h('tr', [
658
+ h('td', {
659
+ style: { [ paddingSize ]: `${ virtualScrollPaddingAfter.value }px`, ...style },
660
+ colspan: colspanAttr.value
661
+ })
663
662
  ])
663
+ ])
664
664
  : h(tag, {
665
665
  class: 'q-virtual-scroll__padding',
666
666
  key: 'after',
@@ -13,7 +13,7 @@ describe('use-transition API', () => {
13
13
  .should('have.class', 'q-transition--fade-enter-active')
14
14
  })
15
15
 
16
- it('should use a different show transtion if defined', () => {
16
+ it('should use a different show transition if defined', () => {
17
17
  const transition = 'scale'
18
18
  mount(WrapperOne, {
19
19
  attrs: {
@@ -40,7 +40,7 @@ describe('use-transition API', () => {
40
40
  .should('have.class', 'q-transition--fade-leave-active')
41
41
  })
42
42
 
43
- it('should use a different hide transtion if defined', () => {
43
+ it('should use a different hide transition if defined', () => {
44
44
  const transition = 'scale'
45
45
  mount(WrapperOne, {
46
46
  attrs: {
@@ -366,14 +366,6 @@ export default function (state) {
366
366
  }, getControlContainer())
367
367
  )
368
368
 
369
- slots.append !== void 0 && node.push(
370
- h('div', {
371
- class: 'q-field__append q-field__marginal row no-wrap items-center',
372
- key: 'append',
373
- onClick: prevent
374
- }, slots.append())
375
- )
376
-
377
369
  hasError.value === true && props.noErrorIcon === false && node.push(
378
370
  getInnerAppendNode('error', [
379
371
  h(QIcon, { name: $q.iconSet.field.error, color: 'negative' })
@@ -407,6 +399,14 @@ export default function (state) {
407
399
  )
408
400
  }
409
401
 
402
+ slots.append !== void 0 && node.push(
403
+ h('div', {
404
+ class: 'q-field__append q-field__marginal row no-wrap items-center',
405
+ key: 'append',
406
+ onClick: prevent
407
+ }, slots.append())
408
+ )
409
+
410
410
  state.getInnerAppend !== void 0 && node.push(
411
411
  getInnerAppendNode('inner-append', state.getInnerAppend())
412
412
  )
@@ -511,8 +511,8 @@ export default function (state) {
511
511
 
512
512
  hasCounter === true
513
513
  ? h('div', {
514
- class: 'q-field__counter'
515
- }, slots.counter !== void 0 ? slots.counter() : state.computedCounter.value)
514
+ class: 'q-field__counter'
515
+ }, slots.counter !== void 0 ? slots.counter() : state.computedCounter.value)
516
516
  : null
517
517
  ])
518
518
  }
@@ -552,6 +552,14 @@ export default function (state) {
552
552
  })
553
553
 
554
554
  return function renderField () {
555
+ const labelAttrs = state.getControl === void 0 && slots.control === void 0
556
+ ? {
557
+ ...state.splitAttrs.attributes.value,
558
+ 'data-autofocus': props.autofocus,
559
+ ...attributes.value
560
+ }
561
+ : attributes.value
562
+
555
563
  return h('label', {
556
564
  ref: state.rootRef,
557
565
  class: [
@@ -559,13 +567,13 @@ export default function (state) {
559
567
  attrs.class
560
568
  ],
561
569
  style: attrs.style,
562
- ...attributes.value
570
+ ...labelAttrs
563
571
  }, [
564
572
  slots.before !== void 0
565
573
  ? h('div', {
566
- class: 'q-field__before q-field__marginal row no-wrap items-center',
567
- onClick: prevent
568
- }, slots.before())
574
+ class: 'q-field__before q-field__marginal row no-wrap items-center',
575
+ onClick: prevent
576
+ }, slots.before())
569
577
  : null,
570
578
 
571
579
  h('div', {
@@ -585,9 +593,9 @@ export default function (state) {
585
593
 
586
594
  slots.after !== void 0
587
595
  ? h('div', {
588
- class: 'q-field__after q-field__marginal row no-wrap items-center',
589
- onClick: prevent
590
- }, slots.after())
596
+ class: 'q-field__after q-field__marginal row no-wrap items-center',
597
+ onClick: prevent
598
+ }, slots.after())
591
599
  : null
592
600
  ])
593
601
  }
@@ -34,11 +34,11 @@ export default function (props, typeGuard) {
34
34
 
35
35
  return typeGuard === true
36
36
  ? computed(() => {
37
- if (props.type !== 'file') {
38
- return
39
- }
37
+ if (props.type !== 'file') {
38
+ return
39
+ }
40
40
 
41
- return getFormDomProps()
42
- })
41
+ return getFormDomProps()
42
+ })
43
43
  : computed(getFormDomProps)
44
44
  }
@@ -1,4 +1,4 @@
1
- import { h, computed, getCurrentInstance } from 'vue'
1
+ import { h, ref, computed, getCurrentInstance } from 'vue'
2
2
 
3
3
  import { stop, stopAndPrevent } from '../../utils/event.js'
4
4
 
@@ -42,18 +42,20 @@ export default function ({
42
42
  }) {
43
43
  const { props, emit, proxy } = getCurrentInstance()
44
44
 
45
+ const dndRef = ref(null)
46
+
45
47
  const extensions = computed(() => (
46
48
  props.accept !== void 0
47
49
  ? props.accept.split(',').map(ext => {
48
- ext = ext.trim()
49
- if (ext === '*') { // support "*"
50
- return '*/'
51
- }
52
- else if (ext.endsWith('/*')) { // support "image/*" or "*/*"
53
- ext = ext.slice(0, ext.length - 1)
54
- }
55
- return ext.toUpperCase()
56
- })
50
+ ext = ext.trim()
51
+ if (ext === '*') { // support "*"
52
+ return '*/'
53
+ }
54
+ else if (ext.endsWith('/*')) { // support "image/*" or "*/*"
55
+ ext = ext.slice(0, ext.length - 1)
56
+ }
57
+ return ext.toUpperCase()
58
+ })
57
59
  : null
58
60
  ))
59
61
 
@@ -118,7 +120,7 @@ export default function ({
118
120
  // Cordova/iOS allows selecting multiple files even when the
119
121
  // multiple attribute is not specified. We also normalize drag'n'dropped
120
122
  // files here:
121
- if (props.multiple !== true) {
123
+ if (props.multiple !== true && files.length > 0) {
122
124
  files = [ files[ 0 ] ]
123
125
  }
124
126
 
@@ -183,7 +185,7 @@ export default function ({
183
185
 
184
186
  function onDragleave (e) {
185
187
  stopAndPrevent(e)
186
- dnd.value = false
188
+ e.relatedTarget !== dndRef.value && (dnd.value = false)
187
189
  }
188
190
 
189
191
  function onDrop (e) {
@@ -200,6 +202,7 @@ export default function ({
200
202
  function getDndNode (type) {
201
203
  if (dnd.value === true) {
202
204
  return h('div', {
205
+ ref: dndRef,
203
206
  class: `q-${ type }__dnd absolute-full`,
204
207
  onDragenter: stopAndPreventDrag,
205
208
  onDragover: stopAndPreventDrag,
@@ -191,8 +191,8 @@ export default function (fallbackTag) {
191
191
  // avoid comparing the child with its parent
192
192
  && currentMatched[ currentMatched.length - 1 ].path !== parentRecordPath
193
193
  ? currentMatched.findIndex(
194
- isSameRouteRecord.bind(null, matched[ length - 2 ])
195
- )
194
+ isSameRouteRecord.bind(null, matched[ length - 2 ])
195
+ )
196
196
  : index
197
197
  )
198
198
  })
@@ -2,7 +2,7 @@
2
2
  "props": {
3
3
  "to": {
4
4
  "type": [ "String", "Object" ],
5
- "desc": "Equivalent to Vue Router <router-link> 'to' property; Superseeded by 'href' prop if used",
5
+ "desc": "Equivalent to Vue Router <router-link> 'to' property; Superseded by 'href' prop if used",
6
6
  "examples": [
7
7
  "/home/dashboard",
8
8
  ":to=\"{ name: 'my-route-name' }\""
@@ -12,26 +12,26 @@
12
12
 
13
13
  "exact": {
14
14
  "type": "Boolean",
15
- "desc": "Equivalent to Vue Router <router-link> 'exact' property; Superseeded by 'href' prop if used",
15
+ "desc": "Equivalent to Vue Router <router-link> 'exact' property; Superseded by 'href' prop if used",
16
16
  "category": "navigation"
17
17
  },
18
18
 
19
19
  "replace": {
20
20
  "type": "Boolean",
21
- "desc": "Equivalent to Vue Router <router-link> 'replace' property; Superseeded by 'href' prop if used",
21
+ "desc": "Equivalent to Vue Router <router-link> 'replace' property; Superseded by 'href' prop if used",
22
22
  "category": "navigation"
23
23
  },
24
24
 
25
25
  "active-class": {
26
26
  "type": "String",
27
- "desc": "Equivalent to Vue Router <router-link> 'active-class' property; Superseeded by 'href' prop if used",
27
+ "desc": "Equivalent to Vue Router <router-link> 'active-class' property; Superseded by 'href' prop if used",
28
28
  "examples": [ "my-active-class" ],
29
29
  "category": "navigation"
30
30
  },
31
31
 
32
32
  "exact-active-class": {
33
33
  "type": "String",
34
- "desc": "Equivalent to Vue Router <router-link> 'active-class' property; Superseeded by 'href' prop if used",
34
+ "desc": "Equivalent to Vue Router <router-link> 'active-class' property; Superseded by 'href' prop if used",
35
35
  "examples": [ "my-exact-active-class" ],
36
36
  "category": "navigation"
37
37
  },