quasar 2.14.7 → 2.15.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 (158) hide show
  1. package/dist/api/QDialog.json +1 -1
  2. package/dist/api/QImg.json +1 -1
  3. package/dist/api/QSelect.json +1 -1
  4. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  5. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  6. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  7. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  8. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  9. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  10. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  11. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  12. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  13. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  14. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  15. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  16. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  17. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  18. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  19. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  20. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  21. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  22. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  23. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  24. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  25. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  40. package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
  41. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  42. package/dist/icon-set/themify.umd.prod.js +1 -1
  43. package/dist/lang/ar-TN.umd.prod.js +1 -1
  44. package/dist/lang/ar.umd.prod.js +1 -1
  45. package/dist/lang/az-Latn.umd.prod.js +1 -1
  46. package/dist/lang/bg.umd.prod.js +1 -1
  47. package/dist/lang/bn.umd.prod.js +1 -1
  48. package/dist/lang/ca.umd.prod.js +1 -1
  49. package/dist/lang/cs.umd.prod.js +1 -1
  50. package/dist/lang/da.umd.prod.js +1 -1
  51. package/dist/lang/de-CH.umd.prod.js +1 -1
  52. package/dist/lang/de-DE.umd.prod.js +1 -1
  53. package/dist/lang/de.umd.prod.js +1 -1
  54. package/dist/lang/el.umd.prod.js +1 -1
  55. package/dist/lang/en-GB.umd.prod.js +1 -1
  56. package/dist/lang/en-US.umd.prod.js +1 -1
  57. package/dist/lang/eo.umd.prod.js +1 -1
  58. package/dist/lang/es.umd.prod.js +1 -1
  59. package/dist/lang/et.umd.prod.js +1 -1
  60. package/dist/lang/eu.umd.prod.js +1 -1
  61. package/dist/lang/fa-IR.umd.prod.js +1 -1
  62. package/dist/lang/fa.umd.prod.js +1 -1
  63. package/dist/lang/fi.umd.prod.js +1 -1
  64. package/dist/lang/fr.umd.prod.js +1 -1
  65. package/dist/lang/gn.umd.prod.js +1 -1
  66. package/dist/lang/he.umd.prod.js +1 -1
  67. package/dist/lang/hi.umd.prod.js +1 -1
  68. package/dist/lang/hr.umd.prod.js +1 -1
  69. package/dist/lang/hu.umd.prod.js +1 -1
  70. package/dist/lang/id.umd.prod.js +1 -1
  71. package/dist/lang/is.umd.prod.js +1 -1
  72. package/dist/lang/it.umd.prod.js +1 -1
  73. package/dist/lang/ja.umd.prod.js +1 -1
  74. package/dist/lang/kk.umd.prod.js +1 -1
  75. package/dist/lang/km.umd.prod.js +1 -1
  76. package/dist/lang/ko-KR.umd.prod.js +1 -1
  77. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  78. package/dist/lang/lt.umd.prod.js +1 -1
  79. package/dist/lang/lu.umd.prod.js +1 -1
  80. package/dist/lang/lv.umd.prod.js +1 -1
  81. package/dist/lang/mk.umd.prod.js +1 -1
  82. package/dist/lang/ml.umd.prod.js +1 -1
  83. package/dist/lang/mm.umd.prod.js +1 -1
  84. package/dist/lang/ms-MY.umd.prod.js +1 -1
  85. package/dist/lang/ms.umd.prod.js +1 -1
  86. package/dist/lang/my.umd.prod.js +1 -1
  87. package/dist/lang/nb-NO.umd.prod.js +1 -1
  88. package/dist/lang/nl.umd.prod.js +1 -1
  89. package/dist/lang/pl.umd.prod.js +1 -1
  90. package/dist/lang/pt-BR.umd.prod.js +1 -1
  91. package/dist/lang/pt.umd.prod.js +1 -1
  92. package/dist/lang/ro.umd.prod.js +1 -1
  93. package/dist/lang/ru.umd.prod.js +1 -1
  94. package/dist/lang/sk.umd.prod.js +1 -1
  95. package/dist/lang/sl.umd.prod.js +1 -1
  96. package/dist/lang/sm.umd.prod.js +1 -1
  97. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  98. package/dist/lang/sr.umd.prod.js +1 -1
  99. package/dist/lang/sv.umd.prod.js +1 -1
  100. package/dist/lang/ta.umd.prod.js +1 -1
  101. package/dist/lang/th.umd.prod.js +1 -1
  102. package/dist/lang/tl.umd.prod.js +1 -1
  103. package/dist/lang/tr.umd.prod.js +1 -1
  104. package/dist/lang/ug.umd.prod.js +1 -1
  105. package/dist/lang/uk.umd.prod.js +1 -1
  106. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  107. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  108. package/dist/lang/vi.umd.prod.js +1 -1
  109. package/dist/lang/zh-CN.umd.prod.js +1 -1
  110. package/dist/lang/zh-TW.umd.prod.js +1 -1
  111. package/dist/quasar.cjs.prod.js +59 -59
  112. package/dist/quasar.esm.js +963 -931
  113. package/dist/quasar.esm.prod.js +53 -53
  114. package/dist/quasar.sass +1 -1
  115. package/dist/quasar.umd.js +150 -118
  116. package/dist/quasar.umd.prod.js +55 -55
  117. package/dist/transforms/import-map.json +1 -1
  118. package/dist/transforms/loader-asset-urls.json +1 -1
  119. package/dist/types/composables.d.ts +38 -0
  120. package/dist/types/index.d.ts +12 -0
  121. package/dist/types/tsconfig.json +1 -1
  122. package/dist/vetur/quasar-attributes.json +1 -1
  123. package/dist/vetur/quasar-tags.json +1 -1
  124. package/dist/web-types/web-types.json +1 -1
  125. package/package.json +30 -38
  126. package/src/components/btn-dropdown/QBtnDropdown.js +1 -1
  127. package/src/components/color/QColor.js +19 -13
  128. package/src/components/date/QDate.js +2 -2
  129. package/src/components/dialog/QDialog.js +15 -3
  130. package/src/components/dialog/QDialog.json +19 -0
  131. package/src/components/drawer/QDrawer.js +1 -1
  132. package/src/components/editor/QEditor.js +4 -4
  133. package/src/components/expansion-item/QExpansionItem.js +1 -1
  134. package/src/components/fab/QFab.js +1 -1
  135. package/src/components/img/QImg.js +76 -56
  136. package/src/components/img/QImg.json +20 -6
  137. package/src/components/menu/QMenu.js +2 -2
  138. package/src/components/no-ssr/QNoSsr.js +3 -3
  139. package/src/components/resize-observer/QResizeObserver.js +3 -3
  140. package/src/components/select/QSelect.js +3 -0
  141. package/src/components/select/QSelect.json +7 -0
  142. package/src/components/slide-item/QSlideItem.js +3 -3
  143. package/src/components/stepper/QStep.js +3 -3
  144. package/src/components/tabs/QTabs.js +2 -2
  145. package/src/components/tooltip/QTooltip.js +2 -2
  146. package/src/composables/private/use-field.js +9 -12
  147. package/src/composables/private/use-panel.js +3 -3
  148. package/src/composables/use-hydration.js +16 -0
  149. package/src/composables/use-id.js +50 -0
  150. package/src/composables/use-interval.js +36 -0
  151. package/src/composables/use-render-cache.js +40 -0
  152. package/src/composables/{private/use-split-attrs.js → use-split-attrs.js} +4 -2
  153. package/src/composables/{private/use-tick.js → use-tick.js} +1 -1
  154. package/src/composables/{private/use-timeout.js → use-timeout.js} +5 -2
  155. package/src/composables.js +15 -1
  156. package/src/composables/private/use-cache.js +0 -21
  157. package/src/composables/private/use-can-render.js +0 -16
  158. package/src/composables/private/use-id.js +0 -34
package/dist/quasar.sass CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.14.7
2
+ * Quasar Framework v2.15.1
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.14.7
2
+ * Quasar Framework v2.15.1
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -1370,7 +1370,7 @@
1370
1370
  }
1371
1371
  var install_quasar_default = false ? function(parentApp, opts = {}, ssrContext) {
1372
1372
  const $q = {
1373
- version: "2.14.7",
1373
+ version: "2.15.1",
1374
1374
  config: opts.config || {}
1375
1375
  };
1376
1376
  Object.assign(ssrContext, {
@@ -1400,7 +1400,7 @@
1400
1400
  ssrContext
1401
1401
  });
1402
1402
  } : function(parentApp, opts = {}) {
1403
- const $q = { version: "2.14.7" };
1403
+ const $q = { version: "2.15.1" };
1404
1404
  if (globalConfigIsFrozen === false) {
1405
1405
  if (opts.config !== void 0) {
1406
1406
  Object.assign(globalConfig, opts.config);
@@ -3750,7 +3750,7 @@
3750
3750
  };
3751
3751
  }
3752
3752
 
3753
- // src/composables/private/use-tick.js
3753
+ // src/composables/use-tick.js
3754
3754
  function use_tick_default() {
3755
3755
  let tickFn;
3756
3756
  const vm2 = getCurrentInstance();
@@ -3773,7 +3773,7 @@
3773
3773
  };
3774
3774
  }
3775
3775
 
3776
- // src/composables/private/use-timeout.js
3776
+ // src/composables/use-timeout.js
3777
3777
  function use_timeout_default() {
3778
3778
  let timer2 = null;
3779
3779
  const vm2 = getCurrentInstance();
@@ -3790,7 +3790,10 @@
3790
3790
  registerTimeout(fn, delay) {
3791
3791
  removeTimeout(timer2);
3792
3792
  if (vmIsDestroyed(vm2) === false) {
3793
- timer2 = setTimeout(fn, delay);
3793
+ timer2 = setTimeout(() => {
3794
+ timer2 = null;
3795
+ fn();
3796
+ }, delay);
3794
3797
  }
3795
3798
  }
3796
3799
  };
@@ -4602,23 +4605,29 @@
4602
4605
  return hexBytes[b[0]] + hexBytes[b[1]] + hexBytes[b[2]] + hexBytes[b[3]] + "-" + hexBytes[b[4]] + hexBytes[b[5]] + "-" + hexBytes[b[6]] + hexBytes[b[7]] + "-" + hexBytes[b[8]] + hexBytes[b[9]] + "-" + hexBytes[b[10]] + hexBytes[b[11]] + hexBytes[b[12]] + hexBytes[b[13]] + hexBytes[b[14]] + hexBytes[b[15]];
4603
4606
  }
4604
4607
 
4605
- // src/composables/private/use-id.js
4606
- function getId(val, requiredId) {
4607
- return val === void 0 ? requiredId === true ? `f_${uid_default()}` : void 0 : val;
4608
+ // src/composables/use-id.js
4609
+ function parseValue(val) {
4610
+ return val === void 0 || val === null ? null : val;
4611
+ }
4612
+ function getId(val, required) {
4613
+ return val === void 0 || val === null ? required === true ? `f_${uid_default()}` : null : val;
4608
4614
  }
4609
- function use_id_default(initialId, requiredId = true) {
4615
+ function use_id_default({ getValue, required = true } = {}) {
4610
4616
  if (isRuntimeSsrPreHydration.value === true) {
4611
- const id3 = ref(initialId);
4612
- if (requiredId === true && initialId === void 0) {
4617
+ const id3 = getValue !== void 0 ? ref(parseValue(getValue())) : ref(null);
4618
+ if (required === true && id3.value === null) {
4613
4619
  onMounted(() => {
4614
4620
  id3.value = `f_${uid_default()}`;
4615
4621
  });
4616
4622
  }
4623
+ if (getValue !== void 0) {
4624
+ watch(getValue, (newId) => {
4625
+ id3.value = getId(newId, required);
4626
+ });
4627
+ }
4617
4628
  return id3;
4618
4629
  }
4619
- return ref(
4620
- getId(initialId, requiredId)
4621
- );
4630
+ return getValue !== void 0 ? computed(() => getId(getValue(), required)) : ref(`f_${uid_default()}`);
4622
4631
  }
4623
4632
 
4624
4633
  // src/components/btn-dropdown/QBtnDropdown.js
@@ -5239,19 +5248,23 @@
5239
5248
  }
5240
5249
  );
5241
5250
 
5242
- // src/composables/private/use-cache.js
5243
- function use_cache_default() {
5244
- const cache = /* @__PURE__ */ new Map();
5251
+ // src/composables/use-render-cache.js
5252
+ function use_render_cache_default() {
5253
+ let cache = /* @__PURE__ */ Object.create(null);
5245
5254
  return {
5246
- getCache: false ? function(_, obj) {
5247
- return obj;
5248
- } : function(key, obj) {
5249
- return cache[key] === void 0 ? cache[key] = obj : cache[key];
5255
+ getCache: false ? (_, defaultValue) => typeof defaultValue === "function" ? defaultValue() : defaultValue : (key, defaultValue) => cache[key] === void 0 ? cache[key] = typeof defaultValue === "function" ? defaultValue() : defaultValue : cache[key],
5256
+ setCache(key, obj) {
5257
+ cache[key] = obj;
5258
+ },
5259
+ hasCache(key) {
5260
+ return cache.hasOwnProperty(key);
5250
5261
  },
5251
- getCacheWithFn: false ? function(_, fn) {
5252
- return fn();
5253
- } : function(key, fn) {
5254
- return cache[key] === void 0 ? cache[key] = fn() : cache[key];
5262
+ clearCache(key) {
5263
+ if (key !== void 0) {
5264
+ delete cache[key];
5265
+ } else {
5266
+ cache = {};
5267
+ }
5255
5268
  }
5256
5269
  };
5257
5270
  }
@@ -5291,7 +5304,7 @@
5291
5304
  var usePanelEmits = ["update:modelValue", "beforeTransition", "transition"];
5292
5305
  function use_panel_default() {
5293
5306
  const { props: props4, emit, proxy } = getCurrentInstance();
5294
- const { getCacheWithFn } = use_cache_default();
5307
+ const { getCache } = use_render_cache_default();
5295
5308
  let panels, forcedPanelTransition;
5296
5309
  const panelIndex = ref(null);
5297
5310
  const panelTransition = ref(null);
@@ -5403,7 +5416,7 @@
5403
5416
  return props4.keepAlive === true ? [
5404
5417
  h(KeepAlive, keepAliveProps.value, [
5405
5418
  h(
5406
- needsUniqueKeepAliveWrapper.value === true ? getCacheWithFn(contentKey.value, () => ({ ...PanelWrapper, name: contentKey.value })) : PanelWrapper,
5419
+ needsUniqueKeepAliveWrapper.value === true ? getCache(contentKey.value, () => ({ ...PanelWrapper, name: contentKey.value })) : PanelWrapper,
5407
5420
  { key: contentKey.value, style: transitionStyle.value },
5408
5421
  () => panel
5409
5422
  )
@@ -7374,15 +7387,15 @@
7374
7387
  }
7375
7388
  });
7376
7389
 
7377
- // src/composables/private/use-can-render.js
7378
- function use_can_render_default() {
7379
- const canRender = ref(!isRuntimeSsrPreHydration.value);
7380
- if (canRender.value === false) {
7390
+ // src/composables/use-hydration.js
7391
+ function use_hydration_default() {
7392
+ const isHydrated = ref(!isRuntimeSsrPreHydration.value);
7393
+ if (isHydrated.value === false) {
7381
7394
  onMounted(() => {
7382
- canRender.value = true;
7395
+ isHydrated.value = true;
7383
7396
  });
7384
7397
  }
7385
- return canRender;
7398
+ return { isHydrated };
7386
7399
  }
7387
7400
 
7388
7401
  // src/components/resize-observer/QResizeObserver.js
@@ -7475,7 +7488,7 @@
7475
7488
  emitEvent();
7476
7489
  }
7477
7490
  };
7478
- const canRender = use_can_render_default();
7491
+ const { isHydrated } = use_hydration_default();
7479
7492
  let curDocView;
7480
7493
  onMounted(() => {
7481
7494
  nextTick(() => {
@@ -7485,7 +7498,7 @@
7485
7498
  });
7486
7499
  onBeforeUnmount(cleanup);
7487
7500
  return () => {
7488
- if (canRender.value === true) {
7501
+ if (isHydrated.value === true) {
7489
7502
  return h("object", {
7490
7503
  class: "q--avoid-card-border",
7491
7504
  style: resizeProps.style,
@@ -8545,7 +8558,7 @@
8545
8558
  const { proxy } = getCurrentInstance();
8546
8559
  const { $q } = proxy;
8547
8560
  const isDark = use_dark_default(props4, $q);
8548
- const { getCache } = use_cache_default();
8561
+ const { getCache } = use_render_cache_default();
8549
8562
  const spectrumRef = ref(null);
8550
8563
  const errorIconRef = ref(null);
8551
8564
  const forceHex = computed(() => props4.formatModel === "auto" ? null : props4.formatModel.indexOf("hex") !== -1);
@@ -8661,7 +8674,7 @@
8661
8674
  model.value.v = v;
8662
8675
  updateModel2(rgb2, change);
8663
8676
  }
8664
- function onHueChange(val, change) {
8677
+ function onHue(val, change) {
8665
8678
  const h2 = Math.round(val);
8666
8679
  const rgb2 = hsvToRgb({
8667
8680
  h: h2,
@@ -8672,6 +8685,9 @@
8672
8685
  model.value.h = h2;
8673
8686
  updateModel2(rgb2, change);
8674
8687
  }
8688
+ function onHueChange(val) {
8689
+ onHue(val, true);
8690
+ }
8675
8691
  function onNumericChange(value2, formatModel, max, evt, change) {
8676
8692
  evt !== void 0 && stop(evt);
8677
8693
  if (!/^[0-9]+$/.test(value2)) {
@@ -8809,6 +8825,9 @@
8809
8825
  errorIconRef.value.$el.style.opacity = val ? 1 : 0;
8810
8826
  }
8811
8827
  }
8828
+ function setTopView(val) {
8829
+ topView.value = val;
8830
+ }
8812
8831
  function getHeader() {
8813
8832
  const child = [];
8814
8833
  props4.noHeaderTabs !== true && child.push(
@@ -8817,11 +8836,7 @@
8817
8836
  modelValue: topView.value,
8818
8837
  dense: true,
8819
8838
  align: "justify",
8820
- ...getCache("topVTab", {
8821
- "onUpdate:modelValue": (val) => {
8822
- topView.value = val;
8823
- }
8824
- })
8839
+ "onUpdate:modelValue": setTopView
8825
8840
  }, () => [
8826
8841
  h(QTab_default, {
8827
8842
  label: "HEX" + (hasAlpha.value === true ? "A" : ""),
@@ -8890,6 +8905,9 @@
8890
8905
  }, getPaletteTab)
8891
8906
  ]);
8892
8907
  }
8908
+ function setView(val) {
8909
+ view.value = val;
8910
+ }
8893
8911
  function getFooter() {
8894
8912
  return h("div", {
8895
8913
  class: "q-color-picker__footer relative-position overflow-hidden"
@@ -8899,11 +8917,7 @@
8899
8917
  modelValue: view.value,
8900
8918
  dense: true,
8901
8919
  align: "justify",
8902
- ...getCache("ftIn", {
8903
- "onUpdate:modelValue": (val) => {
8904
- view.value = val;
8905
- }
8906
- })
8920
+ "onUpdate:modelValue": setView
8907
8921
  }, () => [
8908
8922
  h(QTab_default, {
8909
8923
  icon: $q.iconSet.colorPicker.spectrum,
@@ -8955,10 +8969,8 @@
8955
8969
  selectionColor: "transparent",
8956
8970
  readonly: editable.value !== true,
8957
8971
  thumbPath,
8958
- "onUpdate:modelValue": onHueChange,
8959
- ...getCache("lazyhue", {
8960
- onChange: (val) => onHueChange(val, true)
8961
- })
8972
+ "onUpdate:modelValue": onHue,
8973
+ onChange: onHueChange
8962
8974
  })
8963
8975
  ];
8964
8976
  hasAlpha.value === true && sliders.push(
@@ -10165,7 +10177,7 @@
10165
10177
  const { proxy } = getCurrentInstance();
10166
10178
  const { $q } = proxy;
10167
10179
  const isDark = use_dark_default(props4, $q);
10168
- const { getCache } = use_cache_default();
10180
+ const { getCache } = use_render_cache_default();
10169
10181
  const { tabindex, headerClass, getLocale: getLocale2, getCurrentDate } = use_datetime_default(props4, $q);
10170
10182
  let lastEmitValue;
10171
10183
  const formAttrs = useFormAttrs(props4);
@@ -11435,6 +11447,7 @@
11435
11447
  fullWidth: Boolean,
11436
11448
  fullHeight: Boolean,
11437
11449
  square: Boolean,
11450
+ backdropFilter: String,
11438
11451
  position: {
11439
11452
  type: String,
11440
11453
  default: "standard",
@@ -11464,6 +11477,7 @@
11464
11477
  () => defaultTransitions[props4.position][0],
11465
11478
  () => defaultTransitions[props4.position][1]
11466
11479
  );
11480
+ const backdropStyle = computed(() => transitionStyle.value + (props4.backdropFilter !== void 0 ? `;backdrop-filter:${props4.backdropFilter};-webkit-backdrop-filter:${props4.backdropFilter}` : ""));
11467
11481
  const { showPortal, hidePortal, portalIsAccessible, renderPortal } = use_portal_default(
11468
11482
  vm2,
11469
11483
  innerRef,
@@ -11662,7 +11676,7 @@
11662
11676
  appear: true
11663
11677
  }, () => useBackdrop.value === true ? h("div", {
11664
11678
  class: "q-dialog__backdrop fixed-full",
11665
- style: transitionStyle.value,
11679
+ style: backdropStyle.value,
11666
11680
  "aria-hidden": "true",
11667
11681
  tabindex: -1,
11668
11682
  onClick: onBackdropClick
@@ -13008,9 +13022,10 @@
13008
13022
  }
13009
13023
  }
13010
13024
 
13011
- // src/composables/private/use-split-attrs.js
13025
+ // src/composables/use-split-attrs.js
13012
13026
  var listenerRE = /^on[A-Z]/;
13013
- function use_split_attrs_default(attrs, vnode) {
13027
+ function use_split_attrs_default() {
13028
+ const { attrs, vnode } = getCurrentInstance();
13014
13029
  const acc = {
13015
13030
  listeners: ref({}),
13016
13031
  attributes: ref({})
@@ -13163,12 +13178,12 @@
13163
13178
  "linkShow",
13164
13179
  "linkHide"
13165
13180
  ],
13166
- setup(props4, { slots, emit, attrs }) {
13167
- const { proxy, vnode } = getCurrentInstance();
13181
+ setup(props4, { slots, emit }) {
13182
+ const { proxy } = getCurrentInstance();
13168
13183
  const { $q } = proxy;
13169
13184
  const isDark = use_dark_default(props4, $q);
13170
13185
  const { inFullscreen, toggleFullscreen } = use_fullscreen_default();
13171
- const splitAttrs = use_split_attrs_default(attrs, vnode);
13186
+ const splitAttrs = use_split_attrs_default();
13172
13187
  const rootRef = ref(null);
13173
13188
  const contentRef = ref(null);
13174
13189
  const editLinkUrl = ref(null);
@@ -14431,9 +14446,12 @@
14431
14446
  };
14432
14447
  var useFieldEmits = ["update:modelValue", "clear", "focus", "blur", "popupShow", "popupHide"];
14433
14448
  function useFieldState({ requiredForAttr = true, tagProp } = {}) {
14434
- const { props: props4, attrs, proxy, vnode } = getCurrentInstance();
14449
+ const { props: props4, proxy } = getCurrentInstance();
14435
14450
  const isDark = use_dark_default(props4, proxy.$q);
14436
- const targetUid = use_id_default(props4.for, requiredForAttr);
14451
+ const targetUid = use_id_default({
14452
+ required: requiredForAttr,
14453
+ getValue: () => props4.for
14454
+ });
14437
14455
  return {
14438
14456
  requiredForAttr,
14439
14457
  tag: tagProp === true ? computed(() => props4.tag) : { value: "label" },
@@ -14444,7 +14462,7 @@
14444
14462
  innerLoading: ref(false),
14445
14463
  focused: ref(false),
14446
14464
  hasPopupOpen: false,
14447
- splitAttrs: use_split_attrs_default(attrs, vnode),
14465
+ splitAttrs: use_split_attrs_default(),
14448
14466
  targetUid,
14449
14467
  rootRef: ref(null),
14450
14468
  targetRef: ref(null),
@@ -14558,9 +14576,6 @@
14558
14576
  }
14559
14577
  return acc;
14560
14578
  });
14561
- watch(() => props4.for, (val) => {
14562
- state.targetUid.value = getId(val, state.requiredForAttr);
14563
- });
14564
14579
  function focusHandler() {
14565
14580
  const el = document.activeElement;
14566
14581
  let target2 = state.targetRef !== void 0 && state.targetRef.value;
@@ -15705,7 +15720,7 @@
15705
15720
  }
15706
15721
 
15707
15722
  // src/components/img/QImg.js
15708
- var defaultRatio = 16 / 9;
15723
+ var defaultRatio = 1.7778;
15709
15724
  var QImg_default = createComponent({
15710
15725
  name: "QImg",
15711
15726
  props: {
@@ -15737,6 +15752,7 @@
15737
15752
  default: defaultRatio
15738
15753
  },
15739
15754
  placeholderSrc: String,
15755
+ errorSrc: String,
15740
15756
  fit: {
15741
15757
  type: String,
15742
15758
  default: "cover"
@@ -15760,9 +15776,11 @@
15760
15776
  const vm2 = getCurrentInstance();
15761
15777
  const { registerTimeout: registerLoadTimeout, removeTimeout: removeLoadTimeout } = use_timeout_default();
15762
15778
  const { registerTimeout: registerLoadShowTimeout, removeTimeout: removeLoadShowTimeout } = use_timeout_default();
15779
+ const placeholderImg = computed(() => props4.placeholderSrc !== void 0 ? { src: props4.placeholderSrc } : null);
15780
+ const errorImg = computed(() => props4.errorSrc !== void 0 ? { src: props4.errorSrc, __qerror: true } : null);
15763
15781
  const images = [
15764
15782
  ref(null),
15765
- ref(getPlaceholderSrc())
15783
+ ref(placeholderImg.value)
15766
15784
  ];
15767
15785
  const position2 = ref(0);
15768
15786
  const isLoading = ref(false);
@@ -15775,14 +15793,13 @@
15775
15793
  height: props4.height
15776
15794
  }));
15777
15795
  const imgClass = computed(
15778
- () => `q-img__image ${props4.imgClass !== void 0 ? props4.imgClass + " " : ""}q-img__image--with${props4.noTransition === true ? "out" : ""}-transition`
15796
+ () => `q-img__image ${props4.imgClass !== void 0 ? props4.imgClass + " " : ""}q-img__image--with${props4.noTransition === true ? "out" : ""}-transition q-img__image--`
15779
15797
  );
15780
15798
  const imgStyle = computed(() => ({
15781
15799
  ...props4.imgStyle,
15782
15800
  objectFit: props4.fit,
15783
15801
  objectPosition: props4.position
15784
15802
  }));
15785
- watch(() => getCurrentSrc(), addImage);
15786
15803
  function setLoading() {
15787
15804
  removeLoadShowTimeout();
15788
15805
  if (props4.loadingShowDelay === 0) {
@@ -15797,27 +15814,6 @@
15797
15814
  removeLoadShowTimeout();
15798
15815
  isLoading.value = false;
15799
15816
  }
15800
- function getCurrentSrc() {
15801
- return props4.src || props4.srcset || props4.sizes ? {
15802
- src: props4.src,
15803
- srcset: props4.srcset,
15804
- sizes: props4.sizes
15805
- } : null;
15806
- }
15807
- function getPlaceholderSrc() {
15808
- return props4.placeholderSrc !== void 0 ? { src: props4.placeholderSrc } : null;
15809
- }
15810
- function addImage(imgProps) {
15811
- removeLoadTimeout();
15812
- hasError.value = false;
15813
- if (imgProps === null) {
15814
- clearLoading();
15815
- images[position2.value ^ 1].value = getPlaceholderSrc();
15816
- } else {
15817
- setLoading();
15818
- }
15819
- images[position2.value].value = imgProps;
15820
- }
15821
15817
  function onLoad({ target: target2 }) {
15822
15818
  if (vmIsDestroyed(vm2) === false) {
15823
15819
  removeLoadTimeout();
@@ -15836,21 +15832,23 @@
15836
15832
  }, 50);
15837
15833
  }
15838
15834
  }
15839
- function onReady(img) {
15835
+ function onReady(target2) {
15840
15836
  if (vmIsDestroyed(vm2) === true)
15841
15837
  return;
15842
15838
  position2.value = position2.value ^ 1;
15843
15839
  images[position2.value].value = null;
15844
15840
  clearLoading();
15845
- hasError.value = false;
15846
- emit("load", img.currentSrc || img.src);
15841
+ if (target2.getAttribute("__qerror") !== "true") {
15842
+ hasError.value = false;
15843
+ }
15844
+ emit("load", target2.currentSrc || target2.src);
15847
15845
  }
15848
15846
  function onError(err) {
15849
15847
  removeLoadTimeout();
15850
15848
  clearLoading();
15851
15849
  hasError.value = true;
15852
- images[position2.value].value = null;
15853
- images[position2.value ^ 1].value = getPlaceholderSrc();
15850
+ images[position2.value].value = errorImg.value;
15851
+ images[position2.value ^ 1].value = placeholderImg.value;
15854
15852
  emit("error", err);
15855
15853
  }
15856
15854
  function getImage(index) {
@@ -15872,10 +15870,13 @@
15872
15870
  ...img
15873
15871
  };
15874
15872
  if (position2.value === index) {
15875
- data.class += " q-img__image--waiting";
15876
- Object.assign(data, { onLoad, onError });
15873
+ Object.assign(data, {
15874
+ class: data.class + "current",
15875
+ onLoad,
15876
+ onError
15877
+ });
15877
15878
  } else {
15878
- data.class += " q-img__image--loaded";
15879
+ data.class += "loaded";
15879
15880
  }
15880
15881
  return h(
15881
15882
  "div",
@@ -15901,12 +15902,31 @@
15901
15902
  ]);
15902
15903
  }
15903
15904
  if (true) {
15904
- if (false) {
15905
- onMounted(() => {
15906
- addImage(getCurrentSrc());
15907
- });
15905
+ let watchSrc = function() {
15906
+ watch(
15907
+ () => props4.src || props4.srcset || props4.sizes ? {
15908
+ src: props4.src,
15909
+ srcset: props4.srcset,
15910
+ sizes: props4.sizes
15911
+ } : null,
15912
+ (imgProps) => {
15913
+ removeLoadTimeout();
15914
+ hasError.value = false;
15915
+ if (imgProps === null) {
15916
+ clearLoading();
15917
+ images[position2.value ^ 1].value = placeholderImg.value;
15918
+ } else {
15919
+ setLoading();
15920
+ }
15921
+ images[position2.value].value = imgProps;
15922
+ },
15923
+ { immediate: true }
15924
+ );
15925
+ };
15926
+ if (isRuntimeSsrPreHydration.value === true) {
15927
+ onMounted(watchSrc);
15908
15928
  } else {
15909
- addImage(getCurrentSrc());
15929
+ watchSrc();
15910
15930
  }
15911
15931
  }
15912
15932
  return () => {
@@ -15916,18 +15936,21 @@
15916
15936
  h("div", { key: "filler", style: ratioStyle.value })
15917
15937
  );
15918
15938
  }
15919
- if (hasError.value !== true) {
15920
- if (images[0].value !== null) {
15921
- content.push(getImage(0));
15922
- }
15923
- if (images[1].value !== null) {
15924
- content.push(getImage(1));
15925
- }
15939
+ if (images[0].value !== null) {
15940
+ content.push(
15941
+ getImage(0)
15942
+ );
15943
+ }
15944
+ if (images[1].value !== null) {
15945
+ content.push(
15946
+ getImage(1)
15947
+ );
15926
15948
  }
15927
15949
  content.push(
15928
15950
  h(Transition, { name: "q-transition--fade" }, getContent)
15929
15951
  );
15930
15952
  return h("div", {
15953
+ key: "main",
15931
15954
  class: classes.value,
15932
15955
  style: style2.value,
15933
15956
  role: "img",
@@ -17565,9 +17588,9 @@
17565
17588
  placeholder: String
17566
17589
  },
17567
17590
  setup(props4, { slots }) {
17568
- const canRender = use_can_render_default();
17591
+ const { isHydrated } = use_hydration_default();
17569
17592
  return () => {
17570
- if (canRender.value === true) {
17593
+ if (isHydrated.value === true) {
17571
17594
  const node2 = hSlot(slots.default);
17572
17595
  return node2 === void 0 ? node2 : node2.length > 1 ? h(props4.tag, {}, node2) : node2[0];
17573
17596
  }
@@ -20592,6 +20615,7 @@
20592
20615
  menuOffset: Array,
20593
20616
  popupContentClass: String,
20594
20617
  popupContentStyle: [String, Array, Object],
20618
+ popupNoRouteDismiss: Boolean,
20595
20619
  useInput: Boolean,
20596
20620
  useChips: Boolean,
20597
20621
  newValueMode: {
@@ -21349,6 +21373,7 @@
21349
21373
  noParentEvent: true,
21350
21374
  noRefocus: true,
21351
21375
  noFocus: true,
21376
+ noRouteDismiss: props4.popupNoRouteDismiss,
21352
21377
  square: squaredMenu.value,
21353
21378
  transitionShow: props4.transitionShow,
21354
21379
  transitionHide: props4.transitionHide,
@@ -21419,6 +21444,7 @@
21419
21444
  transitionShow: transitionShowComputed,
21420
21445
  transitionHide: props4.transitionHide,
21421
21446
  transitionDuration: props4.transitionDuration,
21447
+ noRouteDismiss: props4.popupNoRouteDismiss,
21422
21448
  onBeforeShow: onControlPopupShow,
21423
21449
  onBeforeHide: onDialogBeforeHide,
21424
21450
  onHide: onDialogHide,
@@ -21766,7 +21792,7 @@
21766
21792
  const { proxy } = getCurrentInstance();
21767
21793
  const { $q } = proxy;
21768
21794
  const isDark = use_dark_default(props4, $q);
21769
- const { getCacheWithFn } = use_cache_default();
21795
+ const { getCache } = use_render_cache_default();
21770
21796
  const contentRef = ref(null);
21771
21797
  let timer2 = null, pan = {}, dirRefs = {}, dirContentRefs = {};
21772
21798
  const langDir = computed(() => $q.lang.rtl === true ? { left: "right", right: "left" } : { left: "left", right: "right" });
@@ -21887,7 +21913,7 @@
21887
21913
  content.push(node);
21888
21914
  } else {
21889
21915
  content.push(
21890
- withDirectives(node, getCacheWithFn("dir#" + dirs.join(""), () => {
21916
+ withDirectives(node, getCache("dir#" + dirs.join(""), () => {
21891
21917
  const modifiers = {
21892
21918
  prevent: true,
21893
21919
  stop: true,
@@ -24118,7 +24144,7 @@
24118
24144
  console.error("QStep needs to be a child of QStepper");
24119
24145
  return emptyRenderFn;
24120
24146
  }
24121
- const { getCacheWithFn } = use_cache_default();
24147
+ const { getCache } = use_render_cache_default();
24122
24148
  const rootRef = ref(null);
24123
24149
  const isActive = computed(() => $stepper.value.modelValue === props4.name);
24124
24150
  const scrollEvent = computed(() => $q.platform.is.ios !== true && $q.platform.is.chrome === true || isActive.value !== true || $stepper.value.vertical !== true ? {} : {
@@ -24139,7 +24165,7 @@
24139
24165
  $stepper.value.keepAliveProps.value,
24140
24166
  isActive.value === true ? [
24141
24167
  h(
24142
- $stepper.value.needsUniqueKeepAliveWrapper.value === true ? getCacheWithFn(contentKey.value, () => ({ ...PanelWrapper2, name: contentKey.value })) : PanelWrapper2,
24168
+ $stepper.value.needsUniqueKeepAliveWrapper.value === true ? getCache(contentKey.value, () => ({ ...PanelWrapper2, name: contentKey.value })) : PanelWrapper2,
24143
24169
  { key: contentKey.value },
24144
24170
  slots.default
24145
24171
  )
@@ -31185,8 +31211,14 @@
31185
31211
  __export(composables_exports, {
31186
31212
  useDialogPluginComponent: () => use_dialog_plugin_component_default,
31187
31213
  useFormChild: () => use_form_child_default,
31214
+ useHydration: () => use_hydration_default,
31215
+ useId: () => use_id_default,
31188
31216
  useMeta: () => use_meta_default,
31189
- useQuasar: () => useQuasar
31217
+ useQuasar: () => useQuasar,
31218
+ useRenderCache: () => use_render_cache_default,
31219
+ useSplitAttrs: () => use_split_attrs_default,
31220
+ useTick: () => use_tick_default,
31221
+ useTimeout: () => use_timeout_default
31190
31222
  });
31191
31223
 
31192
31224
  // src/composables/use-dialog-plugin-component.js
@@ -31265,7 +31297,7 @@
31265
31297
  console.error("[ Quasar ] Vue is required to run. Please add a script tag for it before loading Quasar.");
31266
31298
  }
31267
31299
  window.Quasar = {
31268
- version: "2.14.7",
31300
+ version: "2.15.1",
31269
31301
  install(app2, opts) {
31270
31302
  install_quasar_default(app2, {
31271
31303
  components: components_exports,