quasar 2.6.5 → 2.7.1

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 (218) hide show
  1. package/dist/api/QBreadcrumbsEl.json +1 -1
  2. package/dist/api/QBtn.json +1 -1
  3. package/dist/api/QBtnDropdown.json +2 -1
  4. package/dist/api/QBtnToggle.json +1 -0
  5. package/dist/api/QCarousel.json +2 -1
  6. package/dist/api/QCheckbox.json +1 -0
  7. package/dist/api/QChip.json +3 -1
  8. package/dist/api/QColor.json +1 -0
  9. package/dist/api/QDate.json +1 -0
  10. package/dist/api/QEditor.json +3 -1
  11. package/dist/api/QExpansionItem.json +2 -1
  12. package/dist/api/QFab.json +1 -0
  13. package/dist/api/QFile.json +1 -0
  14. package/dist/api/QFooter.json +1 -0
  15. package/dist/api/QHeader.json +1 -0
  16. package/dist/api/QImg.json +23 -0
  17. package/dist/api/QInput.json +1 -0
  18. package/dist/api/QItem.json +4 -2
  19. package/dist/api/QKnob.json +1 -0
  20. package/dist/api/QOptionGroup.json +1 -0
  21. package/dist/api/QPagination.json +1 -0
  22. package/dist/api/QPopupEdit.json +1 -0
  23. package/dist/api/QPopupProxy.json +1 -0
  24. package/dist/api/QRadio.json +1 -0
  25. package/dist/api/QRange.json +1 -0
  26. package/dist/api/QRating.json +1 -0
  27. package/dist/api/QRouteTab.json +1 -1
  28. package/dist/api/QSelect.json +1 -0
  29. package/dist/api/QSlider.json +1 -0
  30. package/dist/api/QSplitter.json +1 -0
  31. package/dist/api/QTable.json +5 -1
  32. package/dist/api/QTabs.json +1 -0
  33. package/dist/api/QTime.json +1 -0
  34. package/dist/api/QToggle.json +1 -0
  35. package/dist/api/QTree.json +6 -3
  36. package/dist/api/QVideo.json +43 -0
  37. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  38. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  39. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  40. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  41. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  42. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  43. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  44. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  45. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  46. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  47. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  48. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  49. package/dist/icon-set/material-symbols-outlined.umd.prod.js +6 -0
  50. package/dist/icon-set/material-symbols-rounded.umd.prod.js +6 -0
  51. package/dist/icon-set/material-symbols-sharp.umd.prod.js +6 -0
  52. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  53. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  54. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  55. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  56. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  57. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  58. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  59. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  60. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  61. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  62. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  63. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  64. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  65. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  66. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  67. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  68. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +6 -0
  69. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +6 -0
  70. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +6 -0
  71. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  72. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  73. package/dist/icon-set/themify.umd.prod.js +1 -1
  74. package/dist/lang/ar-TN.umd.prod.js +1 -1
  75. package/dist/lang/ar.umd.prod.js +1 -1
  76. package/dist/lang/az-Latn.umd.prod.js +1 -1
  77. package/dist/lang/bg.umd.prod.js +1 -1
  78. package/dist/lang/bn.umd.prod.js +1 -1
  79. package/dist/lang/ca.umd.prod.js +1 -1
  80. package/dist/lang/cs.umd.prod.js +1 -1
  81. package/dist/lang/da.umd.prod.js +1 -1
  82. package/dist/lang/de.umd.prod.js +1 -1
  83. package/dist/lang/el.umd.prod.js +1 -1
  84. package/dist/lang/en-GB.umd.prod.js +1 -1
  85. package/dist/lang/en-US.umd.prod.js +1 -1
  86. package/dist/lang/eo.umd.prod.js +1 -1
  87. package/dist/lang/es.umd.prod.js +2 -2
  88. package/dist/lang/et.umd.prod.js +1 -1
  89. package/dist/lang/eu.umd.prod.js +1 -1
  90. package/dist/lang/fa-IR.umd.prod.js +1 -1
  91. package/dist/lang/fa.umd.prod.js +1 -1
  92. package/dist/lang/fi.umd.prod.js +1 -1
  93. package/dist/lang/fr.umd.prod.js +1 -1
  94. package/dist/lang/gn.umd.prod.js +1 -1
  95. package/dist/lang/he.umd.prod.js +1 -1
  96. package/dist/lang/hr.umd.prod.js +1 -1
  97. package/dist/lang/hu.umd.prod.js +1 -1
  98. package/dist/lang/id.umd.prod.js +1 -1
  99. package/dist/lang/is.umd.prod.js +1 -1
  100. package/dist/lang/it.umd.prod.js +1 -1
  101. package/dist/lang/ja.umd.prod.js +1 -1
  102. package/dist/lang/km.umd.prod.js +1 -1
  103. package/dist/lang/ko-KR.umd.prod.js +1 -1
  104. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  105. package/dist/lang/kz.umd.prod.js +1 -1
  106. package/dist/lang/lt.umd.prod.js +1 -1
  107. package/dist/lang/lu.umd.prod.js +1 -1
  108. package/dist/lang/lv.umd.prod.js +1 -1
  109. package/dist/lang/ml.umd.prod.js +1 -1
  110. package/dist/lang/mm.umd.prod.js +6 -0
  111. package/dist/lang/ms.umd.prod.js +1 -1
  112. package/dist/lang/my.umd.prod.js +1 -1
  113. package/dist/lang/nb-NO.umd.prod.js +1 -1
  114. package/dist/lang/nl.umd.prod.js +1 -1
  115. package/dist/lang/pl.umd.prod.js +1 -1
  116. package/dist/lang/pt-BR.umd.prod.js +1 -1
  117. package/dist/lang/pt.umd.prod.js +1 -1
  118. package/dist/lang/ro.umd.prod.js +1 -1
  119. package/dist/lang/ru.umd.prod.js +1 -1
  120. package/dist/lang/sk.umd.prod.js +1 -1
  121. package/dist/lang/sl.umd.prod.js +1 -1
  122. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  123. package/dist/lang/sr.umd.prod.js +1 -1
  124. package/dist/lang/sv.umd.prod.js +1 -1
  125. package/dist/lang/ta.umd.prod.js +1 -1
  126. package/dist/lang/th.umd.prod.js +1 -1
  127. package/dist/lang/tr.umd.prod.js +1 -1
  128. package/dist/lang/ug.umd.prod.js +1 -1
  129. package/dist/lang/uk.umd.prod.js +1 -1
  130. package/dist/lang/vi.umd.prod.js +1 -1
  131. package/dist/lang/zh-CN.umd.prod.js +1 -1
  132. package/dist/lang/zh-TW.umd.prod.js +1 -1
  133. package/dist/quasar.addon.rtl.css +251 -0
  134. package/dist/quasar.cjs.prod.js +2 -2
  135. package/dist/quasar.css +11 -10
  136. package/dist/quasar.esm.prod.js +2 -2
  137. package/dist/quasar.prod.css +1 -1
  138. package/dist/quasar.rtl.css +1237 -16
  139. package/dist/quasar.rtl.prod.css +1 -1
  140. package/dist/quasar.sass +11 -10
  141. package/dist/quasar.umd.js +223 -135
  142. package/dist/quasar.umd.prod.js +2 -2
  143. package/dist/types/api/quploader.d.ts +7 -7
  144. package/dist/types/api/validation.d.ts +1 -1
  145. package/dist/types/extras/icon-set.d.ts +6 -0
  146. package/dist/types/index.d.ts +298 -255
  147. package/dist/types/utils/dom.d.ts +1 -1
  148. package/dist/types/utils.d.ts +11 -0
  149. package/dist/vetur/quasar-attributes.json +16 -0
  150. package/dist/vetur/quasar-tags.json +5 -1
  151. package/dist/web-types/web-types.json +48 -8
  152. package/icon-set/material-symbols-outlined.js +133 -0
  153. package/icon-set/material-symbols-outlined.mjs +128 -0
  154. package/icon-set/material-symbols-rounded.js +133 -0
  155. package/icon-set/material-symbols-rounded.mjs +128 -0
  156. package/icon-set/material-symbols-sharp.js +133 -0
  157. package/icon-set/material-symbols-sharp.mjs +128 -0
  158. package/icon-set/svg-material-symbols-outlined.js +201 -0
  159. package/icon-set/svg-material-symbols-outlined.mjs +201 -0
  160. package/icon-set/svg-material-symbols-rounded.js +201 -0
  161. package/icon-set/svg-material-symbols-rounded.mjs +201 -0
  162. package/icon-set/svg-material-symbols-sharp.js +201 -0
  163. package/icon-set/svg-material-symbols-sharp.mjs +201 -0
  164. package/lang/es.js +1 -1
  165. package/lang/es.mjs +1 -1
  166. package/lang/index.json +4 -0
  167. package/lang/mm.js +96 -0
  168. package/lang/mm.mjs +91 -0
  169. package/package.json +9 -11
  170. package/src/api.extends.json +1 -0
  171. package/src/components/avatar/__tests__/QAvatar.spec.js +1 -1
  172. package/src/components/badge/QBadge.js +2 -2
  173. package/src/components/badge/__tests__/QBadge.spec.js +1 -1
  174. package/src/components/btn/QBtn.js +2 -2
  175. package/src/components/btn/use-btn.json +1 -1
  176. package/src/components/checkbox/use-checkbox.js +8 -7
  177. package/src/components/dialog/QDialog.js +4 -4
  178. package/src/components/dialog/QDialog.sass +2 -2
  179. package/src/components/editor/QEditor.js +21 -29
  180. package/src/components/icon/QIcon.js +25 -2
  181. package/src/components/icon/QIcon.sass +4 -1
  182. package/src/components/img/QImg.js +5 -0
  183. package/src/components/img/QImg.json +19 -1
  184. package/src/components/infinite-scroll/QInfiniteScroll.js +10 -10
  185. package/src/components/input/QInput.js +6 -1
  186. package/src/components/item/QItem.js +5 -2
  187. package/src/components/item/QItem.json +2 -1
  188. package/src/components/layout/QLayout.js +2 -1
  189. package/src/components/menu/QMenu.js +2 -1
  190. package/src/components/radio/QRadio.js +2 -2
  191. package/src/components/select/QSelect.js +2 -2
  192. package/src/components/slider/use-slider.js +1 -1
  193. package/src/components/table/QTable.js +1 -1
  194. package/src/components/table/QTable.json +3 -0
  195. package/src/components/tabs/QTabs.sass +0 -6
  196. package/src/components/tooltip/QTooltip.js +2 -1
  197. package/src/components/tree/QTree.sass +1 -1
  198. package/src/components/uploader/uploader-core.js +22 -18
  199. package/src/components/video/QVideo.js +17 -1
  200. package/src/components/video/QVideo.json +36 -0
  201. package/src/components/virtual-scroll/QVirtualScroll.sass +4 -1
  202. package/src/components/virtual-scroll/use-virtual-scroll.js +21 -23
  203. package/src/composables/private/__tests__/use-model-toggle.spec.js +2 -2
  204. package/src/composables/private/__tests__/use-size.spec.js +2 -2
  205. package/src/composables/private/__tests__/use-validate.spec.js +1 -1
  206. package/src/composables/private/use-field.js +1 -0
  207. package/src/composables/private/use-key-composition.js +15 -8
  208. package/src/composables/private/use-portal.js +15 -2
  209. package/src/composables/private/use-router-link.json +1 -1
  210. package/src/history.js +2 -2
  211. package/src/utils/copy-to-clipboard.js +1 -1
  212. package/src/utils/patterns.js +8 -0
  213. package/src/utils/private/date-persian.js +0 -9
  214. package/src/utils/private/global-dialog.js +22 -10
  215. package/src/utils/private/position-engine.js +0 -5
  216. package/src/utils/private/sort.js +0 -11
  217. package/src/utils/private/web-storage.js +1 -1
  218. package/src/utils/uid.js +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.6.5
2
+ * Quasar Framework v2.7.1
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -837,9 +837,9 @@
837
837
  }
838
838
 
839
839
  function normalizeExitPath (path) {
840
- path.startsWith('#') === true && (path = path.substr(1));
840
+ path.startsWith('#') === true && (path = path.substring(1));
841
841
  path.startsWith('/') === false && (path = '/' + path);
842
- path.endsWith('/') === true && (path = path.substr(0, path.length - 1));
842
+ path.endsWith('/') === true && (path = path.substring(0, path.length - 1));
843
843
  return '#' + path
844
844
  }
845
845
 
@@ -1603,7 +1603,7 @@
1603
1603
  }
1604
1604
 
1605
1605
  var installQuasar = function (parentApp, opts = {}) {
1606
- const $q = { version: '2.6.5' };
1606
+ const $q = { version: '2.7.1' };
1607
1607
 
1608
1608
  if (globalConfigIsFrozen === false) {
1609
1609
  if (opts.config !== void 0) {
@@ -2059,8 +2059,15 @@
2059
2059
  s_: '-sharp'
2060
2060
  };
2061
2061
 
2062
+ const symMap = {
2063
+ sym_o_: '-outlined',
2064
+ sym_r_: '-rounded',
2065
+ sym_s_: '-sharp'
2066
+ };
2067
+
2062
2068
  const libRE = new RegExp('^(' + Object.keys(libMap).join('|') + ')');
2063
2069
  const matRE = new RegExp('^(' + Object.keys(matMap).join('|') + ')');
2070
+ const symRE = new RegExp('^(' + Object.keys(symMap).join('|') + ')');
2064
2071
  const mRE = /^[Mm]\s?[-+]?\.?\d/;
2065
2072
  const imgRE = /^img:/;
2066
2073
  const svgUseRE = /^svguse:/;
@@ -2163,7 +2170,23 @@
2163
2170
  cls = icon;
2164
2171
  }
2165
2172
  else if (ionRE.test(icon) === true) {
2166
- cls = `ionicons ion-${ $q.platform.is.ios === true ? 'ios' : 'md' }${ icon.substr(3) }`;
2173
+ cls = `ionicons ion-${ $q.platform.is.ios === true ? 'ios' : 'md' }${ icon.substring(3) }`;
2174
+ }
2175
+ else if (symRE.test(icon) === true) {
2176
+ // "notranslate" class is for Google Translate
2177
+ // to avoid tampering with Material Symbols ligature font
2178
+ //
2179
+ // Caution: To be able to add suffix to the class name,
2180
+ // keep the 'material-symbols' at the end of the string.
2181
+ cls = 'notranslate material-symbols';
2182
+
2183
+ const matches = icon.match(symRE);
2184
+ if (matches !== null) {
2185
+ icon = icon.substring(6);
2186
+ cls += symMap[ matches[ 1 ] ];
2187
+ }
2188
+
2189
+ content = icon;
2167
2190
  }
2168
2191
  else {
2169
2192
  // "notranslate" class is for Google Translate
@@ -2209,7 +2232,7 @@
2209
2232
  if (type.value.svg === true) {
2210
2233
  return vue.h('span', data, hMergeSlot(slots.default, [
2211
2234
  vue.h('svg', {
2212
- viewBox: type.value.viewBox
2235
+ viewBox: type.value.viewBox || '0 0 24 24'
2213
2236
  }, type.value.nodes)
2214
2237
  ]))
2215
2238
  }
@@ -2341,7 +2364,7 @@
2341
2364
  style: style.value,
2342
2365
  role: 'alert',
2343
2366
  'aria-label': props.label
2344
- }, props.label !== void 0 ? props.label : hSlot(slots.default))
2367
+ }, hMergeSlot(slots.default, props.label !== void 0 ? [ props.label ] : []))
2345
2368
  }
2346
2369
  });
2347
2370
 
@@ -3740,10 +3763,10 @@
3740
3763
  if (props.loading === true && props.percentage !== void 0) {
3741
3764
  child.push(
3742
3765
  vue.h('span', {
3743
- class: 'q-btn__progress absolute-full overflow-hidden'
3766
+ class: 'q-btn__progress absolute-full overflow-hidden' + (props.darkPercentage === true ? ' q-btn__progress--dark' : '')
3744
3767
  }, [
3745
3768
  vue.h('span', {
3746
- class: 'q-btn__progress-indicator fit block' + (props.darkPercentage === true ? ' q-btn__progress--dark' : ''),
3769
+ class: 'q-btn__progress-indicator fit block',
3747
3770
  style: percentageStyle.value
3748
3771
  })
3749
3772
  ])
@@ -4386,8 +4409,12 @@
4386
4409
  // You MUST specify "inheritAttrs: false" in your component
4387
4410
 
4388
4411
  function usePortal (vm, innerRef, renderPortalContent, checkGlobalDialog) {
4412
+ // showing, including while in show/hide transition
4389
4413
  const portalIsActive = vue.ref(false);
4390
4414
 
4415
+ // showing & not in any show/hide transition
4416
+ const portalIsAccessible = vue.ref(false);
4417
+
4391
4418
  let portalEl = null;
4392
4419
  const focusObj = {};
4393
4420
  const onGlobalDialog = checkGlobalDialog === true && isOnGlobalDialog(vm);
@@ -4395,9 +4422,12 @@
4395
4422
  function showPortal (isReady) {
4396
4423
  if (isReady === true) {
4397
4424
  removeFocusWaitFlag(focusObj);
4425
+ portalIsAccessible.value = true;
4398
4426
  return
4399
4427
  }
4400
4428
 
4429
+ portalIsAccessible.value = false;
4430
+
4401
4431
  if (portalIsActive.value === false) {
4402
4432
  if (onGlobalDialog === false && portalEl === null) {
4403
4433
  portalEl = createGlobalNode();
@@ -4412,7 +4442,11 @@
4412
4442
  }
4413
4443
  }
4414
4444
 
4415
- function hidePortal () {
4445
+ function hidePortal (isReady) {
4446
+ portalIsAccessible.value = false;
4447
+
4448
+ if (isReady !== true) { return }
4449
+
4416
4450
  removeFocusWaitFlag(focusObj);
4417
4451
  portalIsActive.value = false;
4418
4452
 
@@ -4428,7 +4462,7 @@
4428
4462
  }
4429
4463
  }
4430
4464
 
4431
- vue.onUnmounted(hidePortal);
4465
+ vue.onUnmounted(() => { hidePortal(true); });
4432
4466
 
4433
4467
  // expose publicly needed stuff for portal utils
4434
4468
  Object.assign(vm.proxy, { __qPortalInnerRef: innerRef });
@@ -4438,6 +4472,7 @@
4438
4472
  hidePortal,
4439
4473
 
4440
4474
  portalIsActive,
4475
+ portalIsAccessible,
4441
4476
 
4442
4477
  renderPortal: () => (
4443
4478
  onGlobalDialog === true
@@ -5352,6 +5387,7 @@
5352
5387
  function handleHide (evt) {
5353
5388
  removeTick();
5354
5389
  removeTimeout();
5390
+ hidePortal();
5355
5391
 
5356
5392
  anchorCleanup(true);
5357
5393
 
@@ -5369,7 +5405,7 @@
5369
5405
  }
5370
5406
 
5371
5407
  registerTimeout(() => {
5372
- hidePortal();
5408
+ hidePortal(true); // done hiding, now destroy
5373
5409
  emit('hide', evt);
5374
5410
  }, props.transitionDuration);
5375
5411
  }
@@ -7236,22 +7272,23 @@
7236
7272
  props.val !== void 0 && Array.isArray(props.modelValue)
7237
7273
  );
7238
7274
 
7239
- const index = vue.computed(() => (
7240
- modelIsArray.value === true
7241
- ? props.modelValue.indexOf(props.val)
7275
+ const index = vue.computed(() => {
7276
+ const val = vue.toRaw(props.val);
7277
+ return modelIsArray.value === true
7278
+ ? props.modelValue.findIndex(opt => vue.toRaw(opt) === val)
7242
7279
  : -1
7243
- ));
7280
+ });
7244
7281
 
7245
7282
  const isTrue = vue.computed(() => (
7246
7283
  modelIsArray.value === true
7247
7284
  ? index.value > -1
7248
- : props.modelValue === props.trueValue
7285
+ : vue.toRaw(props.modelValue) === vue.toRaw(props.trueValue)
7249
7286
  ));
7250
7287
 
7251
7288
  const isFalse = vue.computed(() => (
7252
7289
  modelIsArray.value === true
7253
7290
  ? index.value === -1
7254
- : props.modelValue === props.falseValue
7291
+ : vue.toRaw(props.modelValue) === vue.toRaw(props.falseValue)
7255
7292
  ));
7256
7293
 
7257
7294
  const isIndeterminate = vue.computed(() =>
@@ -8368,7 +8405,7 @@
8368
8405
  && innerMin.value < innerMax.value
8369
8406
  ));
8370
8407
 
8371
- const decimals = vue.computed(() => (String(props.step).trim('0').split('.')[ 1 ] || '').length);
8408
+ const decimals = vue.computed(() => (String(props.step).trim().split('.')[ 1 ] || '').length);
8372
8409
  const step = vue.computed(() => (props.step === 0 ? 1 : props.step));
8373
8410
  const tabindex = vue.computed(() => (editable.value === true ? props.tabindex || 0 : -1));
8374
8411
 
@@ -10126,6 +10163,14 @@
10126
10163
  fulltime: v => /^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(v),
10127
10164
  timeOrFulltime: v => /^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(v),
10128
10165
 
10166
+ // -- RFC 5322 --
10167
+ // -- Added in v2.6.6 --
10168
+ // This is a basic helper validation.
10169
+ // For something more complex (like RFC 822) you should write and use your own rule.
10170
+ // We won't be accepting PRs to enhance the one below because of the reason above.
10171
+ // eslint-disable-next-line
10172
+ email: v => /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(v),
10173
+
10129
10174
  hexColor: v => hex.test(v),
10130
10175
  hexaColor: v => hexa.test(v),
10131
10176
  hexOrHexaColor: v => hexOrHexa.test(v),
@@ -14398,7 +14443,7 @@
14398
14443
  const { registerTimeout, removeTimeout } = useTimeout();
14399
14444
  const { registerTick, removeTick } = useTick();
14400
14445
 
14401
- const { showPortal, hidePortal, portalIsActive, renderPortal } = usePortal(
14446
+ const { showPortal, hidePortal, portalIsAccessible, renderPortal } = usePortal(
14402
14447
  vm, innerRef, renderPortalContent, /* pls do check if on a global dialog */ true
14403
14448
  );
14404
14449
 
@@ -14537,6 +14582,7 @@
14537
14582
  removeFromHistory();
14538
14583
  cleanup(true);
14539
14584
  animating.value = true;
14585
+ hidePortal();
14540
14586
 
14541
14587
  if (refocusTarget !== null) {
14542
14588
  refocusTarget.focus();
@@ -14544,7 +14590,7 @@
14544
14590
  }
14545
14591
 
14546
14592
  registerTimeout(() => {
14547
- hidePortal();
14593
+ hidePortal(true); // done hiding, now destroy
14548
14594
  animating.value = false;
14549
14595
  emit('hide', evt);
14550
14596
  }, props.transitionDuration);
@@ -14652,8 +14698,7 @@
14652
14698
  function onFocusChange (evt) {
14653
14699
  // the focus is not in a vue child component
14654
14700
  if (
14655
- showing.value === true
14656
- && portalIsActive.value === true
14701
+ portalIsAccessible.value === true
14657
14702
  && childHasFocus(innerRef.value, evt.target) !== true
14658
14703
  ) {
14659
14704
  focus('[tabindex]:not([tabindex="-1"])');
@@ -15918,11 +15963,12 @@
15918
15963
  function handleHide (evt) {
15919
15964
  removeTick();
15920
15965
  removeTimeout();
15966
+ hidePortal();
15921
15967
 
15922
15968
  anchorCleanup();
15923
15969
 
15924
15970
  registerTimeout(() => {
15925
- hidePortal();
15971
+ hidePortal(true); // done hiding, now destroy
15926
15972
  emit('hide', evt);
15927
15973
  }, props.transitionDuration);
15928
15974
  }
@@ -16066,7 +16112,10 @@
16066
16112
  default: 'div'
16067
16113
  },
16068
16114
 
16069
- active: Boolean,
16115
+ active: {
16116
+ type: Boolean,
16117
+ default: null
16118
+ },
16070
16119
 
16071
16120
  clickable: Boolean,
16072
16121
  dense: Boolean,
@@ -16104,7 +16153,7 @@
16104
16153
  + (props.dense === true ? ' q-item--dense' : '')
16105
16154
  + (isDark.value === true ? ' q-item--dark' : '')
16106
16155
  + (
16107
- hasLink.value === true
16156
+ hasLink.value === true && props.active === null
16108
16157
  ? linkClass.value
16109
16158
  : (
16110
16159
  props.active === true
@@ -16975,11 +17024,14 @@
16975
17024
  }
16976
17025
 
16977
17026
  function onFocusin (e) {
17027
+ const root = rootRef.value;
17028
+
16978
17029
  if (
16979
- rootRef.value.contains(e.target) === true
17030
+ root !== null
17031
+ && root.contains(e.target) === true
16980
17032
  && (
16981
17033
  e.relatedTarget === null
16982
- || rootRef.value.contains(e.relatedTarget) !== true
17034
+ || root.contains(e.relatedTarget) !== true
16983
17035
  )
16984
17036
  ) {
16985
17037
  const prop = `inner${ isViewingSource.value === true ? 'Text' : 'HTML' }`;
@@ -16989,11 +17041,14 @@
16989
17041
  }
16990
17042
 
16991
17043
  function onFocusout (e) {
17044
+ const root = rootRef.value;
17045
+
16992
17046
  if (
16993
- rootRef.value.contains(e.target) === true
17047
+ root !== null
17048
+ && root.contains(e.target) === true
16994
17049
  && (
16995
17050
  e.relatedTarget === null
16996
- || rootRef.value.contains(e.relatedTarget) !== true
17051
+ || root.contains(e.relatedTarget) !== true
16997
17052
  )
16998
17053
  ) {
16999
17054
  eVm.caret.savePosition();
@@ -17001,27 +17056,12 @@
17001
17056
  }
17002
17057
  }
17003
17058
 
17004
- function onMousedown () {
17005
- offsetBottom = void 0;
17006
- }
17007
-
17008
- function onMouseup (e) {
17009
- eVm.caret.save();
17010
- emit('mouseup', e);
17011
- }
17012
-
17013
- function onTouchstartPassive () {
17059
+ function onPointerStart () {
17014
17060
  offsetBottom = void 0;
17015
17061
  }
17016
17062
 
17017
- function onKeyup (e) {
17018
- eVm.caret.save();
17019
- emit('keyup', e);
17020
- }
17021
-
17022
- function onTouchend (e) {
17063
+ function onSelectionchange (e) {
17023
17064
  eVm.caret.save();
17024
- emit('touchend', e);
17025
17065
  }
17026
17066
 
17027
17067
  function setContent (v, restorePosition) {
@@ -17078,6 +17118,12 @@
17078
17118
  eVm.caret = proxy.caret = new Caret(contentRef.value, eVm);
17079
17119
  setContent(props.modelValue);
17080
17120
  refreshToolbar();
17121
+
17122
+ document.addEventListener('selectionchange', onSelectionchange);
17123
+ });
17124
+
17125
+ vue.onBeforeUnmount(() => {
17126
+ document.removeEventListener('selectionchange', onSelectionchange);
17081
17127
  });
17082
17128
 
17083
17129
  return () => {
@@ -17131,13 +17177,8 @@
17131
17177
  onFocus,
17132
17178
 
17133
17179
  // clean saved scroll position
17134
- onMousedown,
17135
- onTouchstartPassive,
17136
-
17137
- // save caret
17138
- onMouseup,
17139
- onKeyup,
17140
- onTouchend
17180
+ onMousedown: onPointerStart,
17181
+ onTouchstartPassive: onPointerStart
17141
17182
  })
17142
17183
  ])
17143
17184
  }
@@ -17387,7 +17428,7 @@
17387
17428
 
17388
17429
  // Pre-calculate toString(16) for speed
17389
17430
  for (let i = 0; i < 256; i++) {
17390
- hexBytes[ i ] = (i + 0x100).toString(16).substr(1);
17431
+ hexBytes[ i ] = (i + 0x100).toString(16).substring(1);
17391
17432
  }
17392
17433
 
17393
17434
  // Use best available PRNG
@@ -18178,7 +18219,7 @@
18178
18219
  function fallback (text) {
18179
18220
  const area = document.createElement('textarea');
18180
18221
  area.value = text;
18181
- area.contentEditable = true;
18222
+ area.contentEditable = 'true';
18182
18223
  area.style.position = 'fixed'; // avoid scrolling to bottom
18183
18224
 
18184
18225
  document.body.appendChild(area);
@@ -18981,28 +19022,32 @@
18981
19022
 
18982
19023
  return [
18983
19024
  vue.h('div', {
18984
- class: 'q-uploader__header-content flex flex-center no-wrap q-gutter-xs'
19025
+ class: 'q-uploader__header-content column'
18985
19026
  }, [
18986
- getBtn(state.queuedFiles.value.length > 0, 'removeQueue', removeQueuedFiles),
18987
- getBtn(state.uploadedFiles.value.length > 0, 'removeUploaded', removeUploadedFiles),
18988
-
18989
- state.isUploading.value === true
18990
- ? vue.h(QSpinner, { class: 'q-uploader__spinner' })
18991
- : null,
19027
+ vue.h('div', {
19028
+ class: 'flex flex-center no-wrap q-gutter-xs'
19029
+ }, [
19030
+ getBtn(state.queuedFiles.value.length > 0, 'removeQueue', removeQueuedFiles),
19031
+ getBtn(state.uploadedFiles.value.length > 0, 'removeUploaded', removeUploadedFiles),
18992
19032
 
18993
- vue.h('div', { class: 'col column justify-center' }, [
18994
- props.label !== void 0
18995
- ? vue.h('div', { class: 'q-uploader__title' }, [ props.label ])
19033
+ state.isUploading.value === true
19034
+ ? vue.h(QSpinner, { class: 'q-uploader__spinner' })
18996
19035
  : null,
18997
19036
 
18998
- vue.h('div', { class: 'q-uploader__subtitle' }, [
18999
- uploadSizeLabel.value + ' / ' + uploadProgressLabel.value
19000
- ])
19001
- ]),
19037
+ vue.h('div', { class: 'col column justify-center' }, [
19038
+ props.label !== void 0
19039
+ ? vue.h('div', { class: 'q-uploader__title' }, [ props.label ])
19040
+ : null,
19041
+
19042
+ vue.h('div', { class: 'q-uploader__subtitle' }, [
19043
+ uploadSizeLabel.value + ' / ' + uploadProgressLabel.value
19044
+ ])
19045
+ ]),
19002
19046
 
19003
- getBtn(canAddFiles.value, 'add'),
19004
- getBtn(props.hideUploadBtn === false && canUpload.value === true, 'upload', state.upload),
19005
- getBtn(state.isUploading.value, 'clear', state.abort)
19047
+ getBtn(canAddFiles.value, 'add'),
19048
+ getBtn(props.hideUploadBtn === false && canUpload.value === true, 'upload', state.upload),
19049
+ getBtn(state.isUploading.value, 'clear', state.abort)
19050
+ ])
19006
19051
  ])
19007
19052
  ]
19008
19053
  }
@@ -19258,7 +19303,7 @@
19258
19303
  return getComputedStyle(element).getPropertyValue(`--q-${ propName }`).trim() || null
19259
19304
  }
19260
19305
 
19261
- let id$1 = 0;
19306
+ let id = 0;
19262
19307
  let offsetBase = void 0;
19263
19308
 
19264
19309
  function getAbsolutePosition (el, resize) {
@@ -19986,7 +20031,7 @@
19986
20031
  };
19987
20032
  }
19988
20033
  else {
19989
- const qAnimId = `q-morph-anim-${ ++id$1 }`;
20034
+ const qAnimId = `q-morph-anim-${ ++id }`;
19990
20035
  const style = document.createElement('style');
19991
20036
  const resizeFrom = options.resize === true
19992
20037
  ? `
@@ -20977,6 +21022,7 @@
20977
21022
  vue.h('div', {
20978
21023
  ref: state.targetRef,
20979
21024
  class: 'q-field__native row',
21025
+ tabindex: -1,
20980
21026
  ...state.splitAttrs.attributes.value,
20981
21027
  'data-autofocus': props.autofocus === true || void 0
20982
21028
  }, slots.control(controlSlotScope.value))
@@ -22092,6 +22138,10 @@
22092
22138
  type: String,
22093
22139
  default: 'lazy'
22094
22140
  },
22141
+ fetchpriority: {
22142
+ type: String,
22143
+ default: 'auto'
22144
+ },
22095
22145
  width: String,
22096
22146
  height: String,
22097
22147
  initialRatio: {
@@ -22254,6 +22304,7 @@
22254
22304
  height: props.height,
22255
22305
  width: props.width,
22256
22306
  loading: props.loading,
22307
+ fetchpriority: props.fetchpriority,
22257
22308
  'aria-hidden': 'true',
22258
22309
  draggable: props.draggable,
22259
22310
  ...img
@@ -22469,6 +22520,16 @@
22469
22520
 
22470
22521
  if (isWorking.value === true) {
22471
22522
  localScrollTarget.addEventListener('scroll', poll, passive$3);
22523
+
22524
+ if (props.reverse === true) {
22525
+ const
22526
+ scrollHeight = getScrollHeight(localScrollTarget),
22527
+ containerHeight = height(localScrollTarget);
22528
+
22529
+ setVerticalScrollPosition(localScrollTarget, scrollHeight - containerHeight);
22530
+ }
22531
+
22532
+ immediatePoll();
22472
22533
  }
22473
22534
  }
22474
22535
 
@@ -22539,16 +22600,6 @@
22539
22600
  setDebounce(props.debounce);
22540
22601
 
22541
22602
  updateScrollTarget();
22542
-
22543
- if (props.reverse === true) {
22544
- const
22545
- scrollHeight = getScrollHeight(localScrollTarget),
22546
- containerHeight = height(localScrollTarget);
22547
-
22548
- setVerticalScrollPosition(localScrollTarget, scrollHeight - containerHeight);
22549
- }
22550
-
22551
- immediatePoll();
22552
22603
  });
22553
22604
 
22554
22605
  return () => {
@@ -23186,26 +23237,31 @@
23186
23237
  const isJapanese = /[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/;
23187
23238
  const isChinese = /[\u4e00-\u9fff\u3400-\u4dbf\u{20000}-\u{2a6df}\u{2a700}-\u{2b73f}\u{2b740}-\u{2b81f}\u{2b820}-\u{2ceaf}\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff\u{2f800}-\u{2fa1f}]/u;
23188
23239
  const isKorean = /[\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]/;
23240
+ const isPlainText = /[a-z0-9_ -]$/i;
23189
23241
 
23190
23242
  function useKeyComposition (onInput) {
23191
23243
  return function onComposition (e) {
23192
23244
  if (e.type === 'compositionend' || e.type === 'change') {
23193
- if (e.target.composing !== true) { return }
23194
- e.target.composing = false;
23245
+ if (e.target.qComposing !== true) { return }
23246
+ e.target.qComposing = false;
23195
23247
  onInput(e);
23196
23248
  }
23197
23249
  else if (e.type === 'compositionupdate') {
23198
23250
  if (
23199
- typeof e.data === 'string'
23200
- && isJapanese.test(e.data) === false
23201
- && isChinese.test(e.data) === false
23202
- && isKorean.test(e.data) === false
23251
+ e.target.qComposing !== true
23252
+ && typeof e.data === 'string'
23203
23253
  ) {
23204
- e.target.composing = false;
23254
+ const isComposing = client.is.firefox === true
23255
+ ? isPlainText.test(e.data) === false
23256
+ : isJapanese.test(e.data) === true && isChinese.test(e.data) === true && isKorean.test(e.data) === true;
23257
+
23258
+ if (isComposing === true) {
23259
+ e.target.qComposing = true;
23260
+ }
23205
23261
  }
23206
23262
  }
23207
23263
  else {
23208
- e.target.composing = true;
23264
+ e.target.qComposing = true;
23209
23265
  }
23210
23266
  }
23211
23267
  }
@@ -23408,7 +23464,7 @@
23408
23464
  }
23409
23465
 
23410
23466
  function onInput (e) {
23411
- if (!e || !e.target || e.target.composing === true) {
23467
+ if (!e || !e.target || e.target.qComposing === true) {
23412
23468
  return
23413
23469
  }
23414
23470
 
@@ -23453,6 +23509,8 @@
23453
23509
  }
23454
23510
 
23455
23511
  if (props.modelValue !== val && emitCachedValue !== val) {
23512
+ emitCachedValue = val;
23513
+
23456
23514
  stopWatcher === true && (stopValueWatcher = true);
23457
23515
  emit('update:modelValue', val);
23458
23516
 
@@ -23484,13 +23542,16 @@
23484
23542
  const inp = inputRef.value;
23485
23543
  if (inp !== null) {
23486
23544
  const parentStyle = inp.parentNode.style;
23545
+ const { overflow } = inp.style;
23487
23546
 
23488
23547
  // reset height of textarea to a small size to detect the real height
23489
23548
  // but keep the total control size the same
23490
23549
  parentStyle.marginBottom = (inp.scrollHeight - 1) + 'px';
23491
23550
  inp.style.height = '1px';
23551
+ inp.style.overflow = 'hidden';
23492
23552
 
23493
23553
  inp.style.height = inp.scrollHeight + 'px';
23554
+ inp.style.overflow = overflow;
23494
23555
  parentStyle.marginBottom = '';
23495
23556
  }
23496
23557
  }
@@ -24452,7 +24513,8 @@
24452
24513
  const layout = vue.h('div', {
24453
24514
  class: classes.value,
24454
24515
  style: style.value,
24455
- ref: props.container === true ? void 0 : rootRef
24516
+ ref: props.container === true ? void 0 : rootRef,
24517
+ tabindex: -1
24456
24518
  }, content);
24457
24519
 
24458
24520
  if (props.container === true) {
@@ -24615,7 +24677,7 @@
24615
24677
  const rootRef = vue.ref(null);
24616
24678
  const { refocusTargetEl, refocusTarget } = useRefocusTarget(props, rootRef);
24617
24679
 
24618
- const isTrue = vue.computed(() => props.modelValue === props.val);
24680
+ const isTrue = vue.computed(() => vue.toRaw(props.modelValue) === vue.toRaw(props.val));
24619
24681
 
24620
24682
  const classes = vue.computed(() =>
24621
24683
  'q-radio cursor-pointer no-outline row inline no-wrap items-center'
@@ -27452,27 +27514,30 @@
27452
27514
  'end-force'
27453
27515
  ];
27454
27516
 
27455
- let id = 1;
27456
27517
  const filterProto = Array.prototype.filter;
27457
27518
 
27458
27519
  const setOverflowAnchor = window.getComputedStyle(document.body).overflowAnchor === void 0
27459
27520
  ? noop
27460
- : function (id, index) {
27461
- const ssId = id + '_ss';
27521
+ : function (contentEl, index) {
27522
+ requestAnimationFrame(() => {
27523
+ if (contentEl === null) {
27524
+ return
27525
+ }
27462
27526
 
27463
- let styleSheet = document.getElementById(ssId);
27527
+ const children = contentEl.children || [];
27464
27528
 
27465
- if (styleSheet === null) {
27466
- styleSheet = document.createElement('style');
27467
- styleSheet.type = 'text/css';
27468
- styleSheet.id = ssId;
27469
- document.head.appendChild(styleSheet);
27470
- }
27529
+ filterProto
27530
+ .call(children, el => el.dataset && el.dataset.qVsAnchor !== void 0)
27531
+ .forEach(el => {
27532
+ delete el.dataset.qVsAnchor;
27533
+ });
27471
27534
 
27472
- if (styleSheet.qChildIndex !== index) {
27473
- styleSheet.qChildIndex = index;
27474
- styleSheet.innerHTML = `#${ id } > *:nth-child(${ index }) { overflow-anchor: auto }`;
27475
- }
27535
+ const el = children[ index ];
27536
+
27537
+ if (el && el.dataset) {
27538
+ el.dataset.qVsAnchor = '';
27539
+ }
27540
+ });
27476
27541
  };
27477
27542
 
27478
27543
  function sumFn (acc, h) {
@@ -27668,8 +27733,6 @@
27668
27733
 
27669
27734
  let prevScrollStart, prevToIndex, localScrollViewSize, virtualScrollSizesAgg = [], virtualScrollSizes;
27670
27735
 
27671
- const vsId = 'qvs_' + id++;
27672
-
27673
27736
  const virtualScrollPaddingBefore = vue.ref(0);
27674
27737
  const virtualScrollPaddingAfter = vue.ref(0);
27675
27738
  const virtualScrollSliceSizeComputed = vue.ref({});
@@ -27851,11 +27914,11 @@
27851
27914
  contentEl.addEventListener('focusout', onBlurRefocusFn);
27852
27915
 
27853
27916
  setTimeout(() => {
27854
- contentEl !== void 0 && contentEl.removeEventListener('focusout', onBlurRefocusFn);
27917
+ contentEl !== null && contentEl.removeEventListener('focusout', onBlurRefocusFn);
27855
27918
  });
27856
27919
  }
27857
27920
 
27858
- setOverflowAnchor(vsId, toIndex - from + 1);
27921
+ setOverflowAnchor(contentEl, toIndex - from);
27859
27922
 
27860
27923
  const sizeBefore = alignEnd !== void 0 ? virtualScrollSizes.slice(from, toIndex).reduce(sumFn, 0) : 0;
27861
27924
 
@@ -27964,7 +28027,7 @@
27964
28027
  }
27965
28028
 
27966
28029
  function onBlurRefocusFn () {
27967
- contentRef.value !== void 0 && contentRef.value.focus();
28030
+ contentRef.value !== null && contentRef.value !== void 0 && contentRef.value.focus();
27968
28031
  }
27969
28032
 
27970
28033
  function localResetVirtualScroll (toIndex, fullReset) {
@@ -28081,7 +28144,6 @@
28081
28144
  class: 'q-virtual-scroll__content',
28082
28145
  key: 'content',
28083
28146
  ref: contentRef,
28084
- id: vsId,
28085
28147
  tabindex: -1
28086
28148
  }, content.flat()),
28087
28149
 
@@ -28155,9 +28217,7 @@
28155
28217
  }
28156
28218
  });
28157
28219
 
28158
- setOverflowAnchor !== noop && vue.onBeforeUnmount(() => {
28159
- const styleSheet = document.getElementById(vsId + '_ss');
28160
- styleSheet !== null && styleSheet.remove();
28220
+ vue.onBeforeUnmount(() => {
28161
28221
  onVirtualScrollEvt.cancel();
28162
28222
  });
28163
28223
 
@@ -28321,7 +28381,7 @@
28321
28381
 
28322
28382
  const virtualScrollItemSizeComputed = vue.computed(() => (
28323
28383
  props.virtualScrollItemSize === void 0
28324
- ? (props.dense === true ? 24 : 48)
28384
+ ? (props.optionsDense === true ? 24 : 48)
28325
28385
  : props.virtualScrollItemSize
28326
28386
  ));
28327
28387
 
@@ -29169,7 +29229,7 @@
29169
29229
  function onInput (e) {
29170
29230
  clearTimeout(inputTimer);
29171
29231
 
29172
- if (e && e.target && e.target.composing === true) {
29232
+ if (e && e.target && e.target.qComposing === true) {
29173
29233
  return
29174
29234
  }
29175
29235
 
@@ -34374,7 +34434,7 @@
34374
34434
 
34375
34435
  return vue.h('div', {
34376
34436
  class: 'q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3'
34377
- + (scope.selected === true ? 'q-table__grid-item--selected' : '')
34437
+ + (scope.selected === true ? ' q-table__grid-item--selected' : '')
34378
34438
  }, [
34379
34439
  vue.h('div', data, child)
34380
34440
  ])
@@ -36594,7 +36654,20 @@
36594
36654
  required: true
36595
36655
  },
36596
36656
 
36597
- title: String
36657
+ title: String,
36658
+
36659
+ fetchpriority: {
36660
+ type: String,
36661
+ default: 'auto'
36662
+ },
36663
+ loading: {
36664
+ type: String,
36665
+ default: 'eager'
36666
+ },
36667
+ referrerpolicy: {
36668
+ type: String,
36669
+ default: 'strict-origin-when-cross-origin'
36670
+ }
36598
36671
  },
36599
36672
 
36600
36673
  setup (props) {
@@ -36612,6 +36685,9 @@
36612
36685
  vue.h('iframe', {
36613
36686
  src: props.src,
36614
36687
  title: props.title,
36688
+ fetchpriority: props.fetchpriority,
36689
+ loading: props.loading,
36690
+ referrerpolicy: props.referrerpolicy,
36615
36691
  frameborder: '0',
36616
36692
  allowfullscreen: true
36617
36693
  })
@@ -38013,19 +38089,31 @@
38013
38089
  const applyState = cmd => {
38014
38090
  if (dialogRef.value !== null && dialogRef.value[ cmd ] !== void 0) {
38015
38091
  dialogRef.value[ cmd ]();
38092
+ return
38016
38093
  }
38017
- else if (
38094
+
38095
+ const target = vm.$.subTree;
38096
+
38097
+ if (target && target.component) {
38018
38098
  // account for "script setup" way of declaring component
38019
- vm.$.subTree
38020
- && vm.$.subTree.component
38021
- && vm.$.subTree.component.proxy
38022
- && vm.$.subTree.component.proxy[ cmd ]
38023
- ) {
38024
- vm.$.subTree.component.proxy[ cmd ]();
38025
- }
38026
- else {
38027
- console.error('[Quasar] Incorrectly defined Dialog component');
38099
+ if (target.component.proxy && target.component.proxy[ cmd ]) {
38100
+ target.component.proxy[ cmd ]();
38101
+ return
38102
+ }
38103
+
38104
+ // account for "script setup" + async component way of declaring component
38105
+ if (
38106
+ target.component.subTree &&
38107
+ target.component.subTree.component &&
38108
+ target.component.subTree.component.proxy &&
38109
+ target.component.subTree.component.proxy[ cmd ]
38110
+ ) {
38111
+ target.component.subTree.component.proxy[ cmd ]();
38112
+ return
38113
+ }
38028
38114
  }
38115
+
38116
+ console.error('[Quasar] Incorrectly defined Dialog component');
38029
38117
  };
38030
38118
 
38031
38119
  const
@@ -39392,7 +39480,7 @@
39392
39480
  return value
39393
39481
  }
39394
39482
 
39395
- const type = value.substr(0, 8);
39483
+ const type = value.substring(0, 8);
39396
39484
  const source = value.substring(9);
39397
39485
 
39398
39486
  switch (type) {
@@ -39628,7 +39716,7 @@
39628
39716
  });
39629
39717
 
39630
39718
  var index_umd = {
39631
- version: '2.6.5',
39719
+ version: '2.7.1',
39632
39720
  install (app, opts) {
39633
39721
  installQuasar(app, {
39634
39722
  components,