quasar 2.14.7 → 2.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) 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 +959 -930
  113. package/dist/quasar.esm.prod.js +53 -53
  114. package/dist/quasar.sass +1 -1
  115. package/dist/quasar.umd.js +146 -117
  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 +33 -0
  120. package/dist/types/index.d.ts +12 -0
  121. package/dist/vetur/quasar-attributes.json +1 -1
  122. package/dist/vetur/quasar-tags.json +1 -1
  123. package/dist/web-types/web-types.json +1 -1
  124. package/package.json +1 -1
  125. package/src/components/btn-dropdown/QBtnDropdown.js +1 -1
  126. package/src/components/color/QColor.js +19 -13
  127. package/src/components/date/QDate.js +2 -2
  128. package/src/components/dialog/QDialog.js +15 -3
  129. package/src/components/dialog/QDialog.json +19 -0
  130. package/src/components/drawer/QDrawer.js +1 -1
  131. package/src/components/editor/QEditor.js +4 -4
  132. package/src/components/expansion-item/QExpansionItem.js +1 -1
  133. package/src/components/fab/QFab.js +1 -1
  134. package/src/components/img/QImg.js +76 -56
  135. package/src/components/img/QImg.json +20 -6
  136. package/src/components/menu/QMenu.js +2 -2
  137. package/src/components/no-ssr/QNoSsr.js +3 -3
  138. package/src/components/resize-observer/QResizeObserver.js +3 -3
  139. package/src/components/select/QSelect.js +3 -0
  140. package/src/components/select/QSelect.json +7 -0
  141. package/src/components/slide-item/QSlideItem.js +3 -3
  142. package/src/components/stepper/QStep.js +3 -3
  143. package/src/components/tabs/QTabs.js +2 -2
  144. package/src/components/tooltip/QTooltip.js +2 -2
  145. package/src/composables/private/use-field.js +9 -12
  146. package/src/composables/private/use-panel.js +3 -3
  147. package/src/composables/use-hydration.js +16 -0
  148. package/src/composables/use-id.js +50 -0
  149. package/src/composables/use-render-cache.js +40 -0
  150. package/src/composables/{private/use-split-attrs.js → use-split-attrs.js} +4 -2
  151. package/src/composables/{private/use-tick.js → use-tick.js} +1 -1
  152. package/src/composables/{private/use-timeout.js → use-timeout.js} +1 -1
  153. package/src/composables.js +15 -1
  154. package/src/composables/private/use-cache.js +0 -21
  155. package/src/composables/private/use-can-render.js +0 -16
  156. 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.0
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.0
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.0",
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.0" };
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();
@@ -4602,23 +4602,29 @@
4602
4602
  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
4603
  }
4604
4604
 
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;
4605
+ // src/composables/use-id.js
4606
+ function parseValue(val) {
4607
+ return val === void 0 || val === null ? null : val;
4608
4608
  }
4609
- function use_id_default(initialId, requiredId = true) {
4609
+ function getId(val, required) {
4610
+ return val === void 0 || val === null ? required === true ? `f_${uid_default()}` : null : val;
4611
+ }
4612
+ function use_id_default({ getValue, required = true } = {}) {
4610
4613
  if (isRuntimeSsrPreHydration.value === true) {
4611
- const id3 = ref(initialId);
4612
- if (requiredId === true && initialId === void 0) {
4614
+ const id3 = getValue !== void 0 ? ref(parseValue(getValue())) : ref(null);
4615
+ if (required === true && id3.value === null) {
4613
4616
  onMounted(() => {
4614
4617
  id3.value = `f_${uid_default()}`;
4615
4618
  });
4616
4619
  }
4620
+ if (getValue !== void 0) {
4621
+ watch(getValue, (newId) => {
4622
+ id3.value = getId(newId, required);
4623
+ });
4624
+ }
4617
4625
  return id3;
4618
4626
  }
4619
- return ref(
4620
- getId(initialId, requiredId)
4621
- );
4627
+ return getValue !== void 0 ? computed(() => getId(getValue(), required)) : ref(`f_${uid_default()}`);
4622
4628
  }
4623
4629
 
4624
4630
  // src/components/btn-dropdown/QBtnDropdown.js
@@ -5239,19 +5245,23 @@
5239
5245
  }
5240
5246
  );
5241
5247
 
5242
- // src/composables/private/use-cache.js
5243
- function use_cache_default() {
5244
- const cache = /* @__PURE__ */ new Map();
5248
+ // src/composables/use-render-cache.js
5249
+ function use_render_cache_default() {
5250
+ let cache = /* @__PURE__ */ Object.create(null);
5245
5251
  return {
5246
- getCache: false ? function(_, obj) {
5247
- return obj;
5248
- } : function(key, obj) {
5249
- return cache[key] === void 0 ? cache[key] = obj : cache[key];
5252
+ getCache: false ? (_, defaultValue) => typeof defaultValue === "function" ? defaultValue() : defaultValue : (key, defaultValue) => cache[key] === void 0 ? cache[key] = typeof defaultValue === "function" ? defaultValue() : defaultValue : cache[key],
5253
+ setCache(key, obj) {
5254
+ cache[key] = obj;
5255
+ },
5256
+ hasCache(key) {
5257
+ return cache.hasOwnProperty(key);
5250
5258
  },
5251
- getCacheWithFn: false ? function(_, fn) {
5252
- return fn();
5253
- } : function(key, fn) {
5254
- return cache[key] === void 0 ? cache[key] = fn() : cache[key];
5259
+ clearCache(key) {
5260
+ if (key !== void 0) {
5261
+ delete cache[key];
5262
+ } else {
5263
+ cache = {};
5264
+ }
5255
5265
  }
5256
5266
  };
5257
5267
  }
@@ -5291,7 +5301,7 @@
5291
5301
  var usePanelEmits = ["update:modelValue", "beforeTransition", "transition"];
5292
5302
  function use_panel_default() {
5293
5303
  const { props: props4, emit, proxy } = getCurrentInstance();
5294
- const { getCacheWithFn } = use_cache_default();
5304
+ const { getCache } = use_render_cache_default();
5295
5305
  let panels, forcedPanelTransition;
5296
5306
  const panelIndex = ref(null);
5297
5307
  const panelTransition = ref(null);
@@ -5403,7 +5413,7 @@
5403
5413
  return props4.keepAlive === true ? [
5404
5414
  h(KeepAlive, keepAliveProps.value, [
5405
5415
  h(
5406
- needsUniqueKeepAliveWrapper.value === true ? getCacheWithFn(contentKey.value, () => ({ ...PanelWrapper, name: contentKey.value })) : PanelWrapper,
5416
+ needsUniqueKeepAliveWrapper.value === true ? getCache(contentKey.value, () => ({ ...PanelWrapper, name: contentKey.value })) : PanelWrapper,
5407
5417
  { key: contentKey.value, style: transitionStyle.value },
5408
5418
  () => panel
5409
5419
  )
@@ -7374,15 +7384,15 @@
7374
7384
  }
7375
7385
  });
7376
7386
 
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) {
7387
+ // src/composables/use-hydration.js
7388
+ function use_hydration_default() {
7389
+ const isHydrated = ref(!isRuntimeSsrPreHydration.value);
7390
+ if (isHydrated.value === false) {
7381
7391
  onMounted(() => {
7382
- canRender.value = true;
7392
+ isHydrated.value = true;
7383
7393
  });
7384
7394
  }
7385
- return canRender;
7395
+ return { isHydrated };
7386
7396
  }
7387
7397
 
7388
7398
  // src/components/resize-observer/QResizeObserver.js
@@ -7475,7 +7485,7 @@
7475
7485
  emitEvent();
7476
7486
  }
7477
7487
  };
7478
- const canRender = use_can_render_default();
7488
+ const { isHydrated } = use_hydration_default();
7479
7489
  let curDocView;
7480
7490
  onMounted(() => {
7481
7491
  nextTick(() => {
@@ -7485,7 +7495,7 @@
7485
7495
  });
7486
7496
  onBeforeUnmount(cleanup);
7487
7497
  return () => {
7488
- if (canRender.value === true) {
7498
+ if (isHydrated.value === true) {
7489
7499
  return h("object", {
7490
7500
  class: "q--avoid-card-border",
7491
7501
  style: resizeProps.style,
@@ -8545,7 +8555,7 @@
8545
8555
  const { proxy } = getCurrentInstance();
8546
8556
  const { $q } = proxy;
8547
8557
  const isDark = use_dark_default(props4, $q);
8548
- const { getCache } = use_cache_default();
8558
+ const { getCache } = use_render_cache_default();
8549
8559
  const spectrumRef = ref(null);
8550
8560
  const errorIconRef = ref(null);
8551
8561
  const forceHex = computed(() => props4.formatModel === "auto" ? null : props4.formatModel.indexOf("hex") !== -1);
@@ -8661,7 +8671,7 @@
8661
8671
  model.value.v = v;
8662
8672
  updateModel2(rgb2, change);
8663
8673
  }
8664
- function onHueChange(val, change) {
8674
+ function onHue(val, change) {
8665
8675
  const h2 = Math.round(val);
8666
8676
  const rgb2 = hsvToRgb({
8667
8677
  h: h2,
@@ -8672,6 +8682,9 @@
8672
8682
  model.value.h = h2;
8673
8683
  updateModel2(rgb2, change);
8674
8684
  }
8685
+ function onHueChange(val) {
8686
+ onHueChange(val, true);
8687
+ }
8675
8688
  function onNumericChange(value2, formatModel, max, evt, change) {
8676
8689
  evt !== void 0 && stop(evt);
8677
8690
  if (!/^[0-9]+$/.test(value2)) {
@@ -8809,6 +8822,9 @@
8809
8822
  errorIconRef.value.$el.style.opacity = val ? 1 : 0;
8810
8823
  }
8811
8824
  }
8825
+ function setTopView(val) {
8826
+ topView.value = val;
8827
+ }
8812
8828
  function getHeader() {
8813
8829
  const child = [];
8814
8830
  props4.noHeaderTabs !== true && child.push(
@@ -8817,11 +8833,7 @@
8817
8833
  modelValue: topView.value,
8818
8834
  dense: true,
8819
8835
  align: "justify",
8820
- ...getCache("topVTab", {
8821
- "onUpdate:modelValue": (val) => {
8822
- topView.value = val;
8823
- }
8824
- })
8836
+ "onUpdate:modelValue": setTopView
8825
8837
  }, () => [
8826
8838
  h(QTab_default, {
8827
8839
  label: "HEX" + (hasAlpha.value === true ? "A" : ""),
@@ -8890,6 +8902,9 @@
8890
8902
  }, getPaletteTab)
8891
8903
  ]);
8892
8904
  }
8905
+ function setView(val) {
8906
+ view.value = val;
8907
+ }
8893
8908
  function getFooter() {
8894
8909
  return h("div", {
8895
8910
  class: "q-color-picker__footer relative-position overflow-hidden"
@@ -8899,11 +8914,7 @@
8899
8914
  modelValue: view.value,
8900
8915
  dense: true,
8901
8916
  align: "justify",
8902
- ...getCache("ftIn", {
8903
- "onUpdate:modelValue": (val) => {
8904
- view.value = val;
8905
- }
8906
- })
8917
+ "onUpdate:modelValue": setView
8907
8918
  }, () => [
8908
8919
  h(QTab_default, {
8909
8920
  icon: $q.iconSet.colorPicker.spectrum,
@@ -8955,10 +8966,8 @@
8955
8966
  selectionColor: "transparent",
8956
8967
  readonly: editable.value !== true,
8957
8968
  thumbPath,
8958
- "onUpdate:modelValue": onHueChange,
8959
- ...getCache("lazyhue", {
8960
- onChange: (val) => onHueChange(val, true)
8961
- })
8969
+ "onUpdate:modelValue": onHue,
8970
+ onChange: onHueChange
8962
8971
  })
8963
8972
  ];
8964
8973
  hasAlpha.value === true && sliders.push(
@@ -10165,7 +10174,7 @@
10165
10174
  const { proxy } = getCurrentInstance();
10166
10175
  const { $q } = proxy;
10167
10176
  const isDark = use_dark_default(props4, $q);
10168
- const { getCache } = use_cache_default();
10177
+ const { getCache } = use_render_cache_default();
10169
10178
  const { tabindex, headerClass, getLocale: getLocale2, getCurrentDate } = use_datetime_default(props4, $q);
10170
10179
  let lastEmitValue;
10171
10180
  const formAttrs = useFormAttrs(props4);
@@ -11435,6 +11444,7 @@
11435
11444
  fullWidth: Boolean,
11436
11445
  fullHeight: Boolean,
11437
11446
  square: Boolean,
11447
+ backdropFilter: String,
11438
11448
  position: {
11439
11449
  type: String,
11440
11450
  default: "standard",
@@ -11464,6 +11474,7 @@
11464
11474
  () => defaultTransitions[props4.position][0],
11465
11475
  () => defaultTransitions[props4.position][1]
11466
11476
  );
11477
+ const backdropStyle = computed(() => transitionStyle.value + (props4.backdropFilter !== void 0 ? `;backdrop-filter:${props4.backdropFilter};-webkit-backdrop-filter:${props4.backdropFilter}` : ""));
11467
11478
  const { showPortal, hidePortal, portalIsAccessible, renderPortal } = use_portal_default(
11468
11479
  vm2,
11469
11480
  innerRef,
@@ -11662,7 +11673,7 @@
11662
11673
  appear: true
11663
11674
  }, () => useBackdrop.value === true ? h("div", {
11664
11675
  class: "q-dialog__backdrop fixed-full",
11665
- style: transitionStyle.value,
11676
+ style: backdropStyle.value,
11666
11677
  "aria-hidden": "true",
11667
11678
  tabindex: -1,
11668
11679
  onClick: onBackdropClick
@@ -13008,9 +13019,10 @@
13008
13019
  }
13009
13020
  }
13010
13021
 
13011
- // src/composables/private/use-split-attrs.js
13022
+ // src/composables/use-split-attrs.js
13012
13023
  var listenerRE = /^on[A-Z]/;
13013
- function use_split_attrs_default(attrs, vnode) {
13024
+ function use_split_attrs_default() {
13025
+ const { attrs, vnode } = getCurrentInstance();
13014
13026
  const acc = {
13015
13027
  listeners: ref({}),
13016
13028
  attributes: ref({})
@@ -13163,12 +13175,12 @@
13163
13175
  "linkShow",
13164
13176
  "linkHide"
13165
13177
  ],
13166
- setup(props4, { slots, emit, attrs }) {
13167
- const { proxy, vnode } = getCurrentInstance();
13178
+ setup(props4, { slots, emit }) {
13179
+ const { proxy } = getCurrentInstance();
13168
13180
  const { $q } = proxy;
13169
13181
  const isDark = use_dark_default(props4, $q);
13170
13182
  const { inFullscreen, toggleFullscreen } = use_fullscreen_default();
13171
- const splitAttrs = use_split_attrs_default(attrs, vnode);
13183
+ const splitAttrs = use_split_attrs_default();
13172
13184
  const rootRef = ref(null);
13173
13185
  const contentRef = ref(null);
13174
13186
  const editLinkUrl = ref(null);
@@ -14431,9 +14443,12 @@
14431
14443
  };
14432
14444
  var useFieldEmits = ["update:modelValue", "clear", "focus", "blur", "popupShow", "popupHide"];
14433
14445
  function useFieldState({ requiredForAttr = true, tagProp } = {}) {
14434
- const { props: props4, attrs, proxy, vnode } = getCurrentInstance();
14446
+ const { props: props4, proxy } = getCurrentInstance();
14435
14447
  const isDark = use_dark_default(props4, proxy.$q);
14436
- const targetUid = use_id_default(props4.for, requiredForAttr);
14448
+ const targetUid = use_id_default({
14449
+ required: requiredForAttr,
14450
+ getValue: () => props4.for
14451
+ });
14437
14452
  return {
14438
14453
  requiredForAttr,
14439
14454
  tag: tagProp === true ? computed(() => props4.tag) : { value: "label" },
@@ -14444,7 +14459,7 @@
14444
14459
  innerLoading: ref(false),
14445
14460
  focused: ref(false),
14446
14461
  hasPopupOpen: false,
14447
- splitAttrs: use_split_attrs_default(attrs, vnode),
14462
+ splitAttrs: use_split_attrs_default(),
14448
14463
  targetUid,
14449
14464
  rootRef: ref(null),
14450
14465
  targetRef: ref(null),
@@ -14558,9 +14573,6 @@
14558
14573
  }
14559
14574
  return acc;
14560
14575
  });
14561
- watch(() => props4.for, (val) => {
14562
- state.targetUid.value = getId(val, state.requiredForAttr);
14563
- });
14564
14576
  function focusHandler() {
14565
14577
  const el = document.activeElement;
14566
14578
  let target2 = state.targetRef !== void 0 && state.targetRef.value;
@@ -15705,7 +15717,7 @@
15705
15717
  }
15706
15718
 
15707
15719
  // src/components/img/QImg.js
15708
- var defaultRatio = 16 / 9;
15720
+ var defaultRatio = 1.7778;
15709
15721
  var QImg_default = createComponent({
15710
15722
  name: "QImg",
15711
15723
  props: {
@@ -15737,6 +15749,7 @@
15737
15749
  default: defaultRatio
15738
15750
  },
15739
15751
  placeholderSrc: String,
15752
+ errorSrc: String,
15740
15753
  fit: {
15741
15754
  type: String,
15742
15755
  default: "cover"
@@ -15760,9 +15773,11 @@
15760
15773
  const vm2 = getCurrentInstance();
15761
15774
  const { registerTimeout: registerLoadTimeout, removeTimeout: removeLoadTimeout } = use_timeout_default();
15762
15775
  const { registerTimeout: registerLoadShowTimeout, removeTimeout: removeLoadShowTimeout } = use_timeout_default();
15776
+ const placeholderImg = computed(() => props4.placeholderSrc !== void 0 ? { src: props4.placeholderSrc } : null);
15777
+ const errorImg = computed(() => props4.errorSrc !== void 0 ? { src: props4.errorSrc, __qerror: true } : null);
15763
15778
  const images = [
15764
15779
  ref(null),
15765
- ref(getPlaceholderSrc())
15780
+ ref(placeholderImg.value)
15766
15781
  ];
15767
15782
  const position2 = ref(0);
15768
15783
  const isLoading = ref(false);
@@ -15775,14 +15790,13 @@
15775
15790
  height: props4.height
15776
15791
  }));
15777
15792
  const imgClass = computed(
15778
- () => `q-img__image ${props4.imgClass !== void 0 ? props4.imgClass + " " : ""}q-img__image--with${props4.noTransition === true ? "out" : ""}-transition`
15793
+ () => `q-img__image ${props4.imgClass !== void 0 ? props4.imgClass + " " : ""}q-img__image--with${props4.noTransition === true ? "out" : ""}-transition q-img__image--`
15779
15794
  );
15780
15795
  const imgStyle = computed(() => ({
15781
15796
  ...props4.imgStyle,
15782
15797
  objectFit: props4.fit,
15783
15798
  objectPosition: props4.position
15784
15799
  }));
15785
- watch(() => getCurrentSrc(), addImage);
15786
15800
  function setLoading() {
15787
15801
  removeLoadShowTimeout();
15788
15802
  if (props4.loadingShowDelay === 0) {
@@ -15797,27 +15811,6 @@
15797
15811
  removeLoadShowTimeout();
15798
15812
  isLoading.value = false;
15799
15813
  }
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
15814
  function onLoad({ target: target2 }) {
15822
15815
  if (vmIsDestroyed(vm2) === false) {
15823
15816
  removeLoadTimeout();
@@ -15836,21 +15829,23 @@
15836
15829
  }, 50);
15837
15830
  }
15838
15831
  }
15839
- function onReady(img) {
15832
+ function onReady(target2) {
15840
15833
  if (vmIsDestroyed(vm2) === true)
15841
15834
  return;
15842
15835
  position2.value = position2.value ^ 1;
15843
15836
  images[position2.value].value = null;
15844
15837
  clearLoading();
15845
- hasError.value = false;
15846
- emit("load", img.currentSrc || img.src);
15838
+ if (target2.getAttribute("__qerror") !== "true") {
15839
+ hasError.value = false;
15840
+ }
15841
+ emit("load", target2.currentSrc || target2.src);
15847
15842
  }
15848
15843
  function onError(err) {
15849
15844
  removeLoadTimeout();
15850
15845
  clearLoading();
15851
15846
  hasError.value = true;
15852
- images[position2.value].value = null;
15853
- images[position2.value ^ 1].value = getPlaceholderSrc();
15847
+ images[position2.value].value = errorImg.value;
15848
+ images[position2.value ^ 1].value = placeholderImg.value;
15854
15849
  emit("error", err);
15855
15850
  }
15856
15851
  function getImage(index) {
@@ -15872,10 +15867,13 @@
15872
15867
  ...img
15873
15868
  };
15874
15869
  if (position2.value === index) {
15875
- data.class += " q-img__image--waiting";
15876
- Object.assign(data, { onLoad, onError });
15870
+ Object.assign(data, {
15871
+ class: data.class + "current",
15872
+ onLoad,
15873
+ onError
15874
+ });
15877
15875
  } else {
15878
- data.class += " q-img__image--loaded";
15876
+ data.class += "loaded";
15879
15877
  }
15880
15878
  return h(
15881
15879
  "div",
@@ -15901,12 +15899,31 @@
15901
15899
  ]);
15902
15900
  }
15903
15901
  if (true) {
15904
- if (false) {
15905
- onMounted(() => {
15906
- addImage(getCurrentSrc());
15907
- });
15902
+ let watchSrc = function() {
15903
+ watch(
15904
+ () => props4.src || props4.srcset || props4.sizes ? {
15905
+ src: props4.src,
15906
+ srcset: props4.srcset,
15907
+ sizes: props4.sizes
15908
+ } : null,
15909
+ (imgProps) => {
15910
+ removeLoadTimeout();
15911
+ hasError.value = false;
15912
+ if (imgProps === null) {
15913
+ clearLoading();
15914
+ images[position2.value ^ 1].value = placeholderImg.value;
15915
+ } else {
15916
+ setLoading();
15917
+ }
15918
+ images[position2.value].value = imgProps;
15919
+ },
15920
+ { immediate: true }
15921
+ );
15922
+ };
15923
+ if (isRuntimeSsrPreHydration.value === true) {
15924
+ onMounted(watchSrc);
15908
15925
  } else {
15909
- addImage(getCurrentSrc());
15926
+ watchSrc();
15910
15927
  }
15911
15928
  }
15912
15929
  return () => {
@@ -15916,18 +15933,21 @@
15916
15933
  h("div", { key: "filler", style: ratioStyle.value })
15917
15934
  );
15918
15935
  }
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
- }
15936
+ if (images[0].value !== null) {
15937
+ content.push(
15938
+ getImage(0)
15939
+ );
15940
+ }
15941
+ if (images[1].value !== null) {
15942
+ content.push(
15943
+ getImage(1)
15944
+ );
15926
15945
  }
15927
15946
  content.push(
15928
15947
  h(Transition, { name: "q-transition--fade" }, getContent)
15929
15948
  );
15930
15949
  return h("div", {
15950
+ key: "main",
15931
15951
  class: classes.value,
15932
15952
  style: style2.value,
15933
15953
  role: "img",
@@ -17565,9 +17585,9 @@
17565
17585
  placeholder: String
17566
17586
  },
17567
17587
  setup(props4, { slots }) {
17568
- const canRender = use_can_render_default();
17588
+ const { isHydrated } = use_hydration_default();
17569
17589
  return () => {
17570
- if (canRender.value === true) {
17590
+ if (isHydrated.value === true) {
17571
17591
  const node2 = hSlot(slots.default);
17572
17592
  return node2 === void 0 ? node2 : node2.length > 1 ? h(props4.tag, {}, node2) : node2[0];
17573
17593
  }
@@ -20592,6 +20612,7 @@
20592
20612
  menuOffset: Array,
20593
20613
  popupContentClass: String,
20594
20614
  popupContentStyle: [String, Array, Object],
20615
+ popupNoRouteDismiss: Boolean,
20595
20616
  useInput: Boolean,
20596
20617
  useChips: Boolean,
20597
20618
  newValueMode: {
@@ -21349,6 +21370,7 @@
21349
21370
  noParentEvent: true,
21350
21371
  noRefocus: true,
21351
21372
  noFocus: true,
21373
+ noRouteDismiss: props4.popupNoRouteDismiss,
21352
21374
  square: squaredMenu.value,
21353
21375
  transitionShow: props4.transitionShow,
21354
21376
  transitionHide: props4.transitionHide,
@@ -21419,6 +21441,7 @@
21419
21441
  transitionShow: transitionShowComputed,
21420
21442
  transitionHide: props4.transitionHide,
21421
21443
  transitionDuration: props4.transitionDuration,
21444
+ noRouteDismiss: props4.popupNoRouteDismiss,
21422
21445
  onBeforeShow: onControlPopupShow,
21423
21446
  onBeforeHide: onDialogBeforeHide,
21424
21447
  onHide: onDialogHide,
@@ -21766,7 +21789,7 @@
21766
21789
  const { proxy } = getCurrentInstance();
21767
21790
  const { $q } = proxy;
21768
21791
  const isDark = use_dark_default(props4, $q);
21769
- const { getCacheWithFn } = use_cache_default();
21792
+ const { getCache } = use_render_cache_default();
21770
21793
  const contentRef = ref(null);
21771
21794
  let timer2 = null, pan = {}, dirRefs = {}, dirContentRefs = {};
21772
21795
  const langDir = computed(() => $q.lang.rtl === true ? { left: "right", right: "left" } : { left: "left", right: "right" });
@@ -21887,7 +21910,7 @@
21887
21910
  content.push(node);
21888
21911
  } else {
21889
21912
  content.push(
21890
- withDirectives(node, getCacheWithFn("dir#" + dirs.join(""), () => {
21913
+ withDirectives(node, getCache("dir#" + dirs.join(""), () => {
21891
21914
  const modifiers = {
21892
21915
  prevent: true,
21893
21916
  stop: true,
@@ -24118,7 +24141,7 @@
24118
24141
  console.error("QStep needs to be a child of QStepper");
24119
24142
  return emptyRenderFn;
24120
24143
  }
24121
- const { getCacheWithFn } = use_cache_default();
24144
+ const { getCache } = use_render_cache_default();
24122
24145
  const rootRef = ref(null);
24123
24146
  const isActive = computed(() => $stepper.value.modelValue === props4.name);
24124
24147
  const scrollEvent = computed(() => $q.platform.is.ios !== true && $q.platform.is.chrome === true || isActive.value !== true || $stepper.value.vertical !== true ? {} : {
@@ -24139,7 +24162,7 @@
24139
24162
  $stepper.value.keepAliveProps.value,
24140
24163
  isActive.value === true ? [
24141
24164
  h(
24142
- $stepper.value.needsUniqueKeepAliveWrapper.value === true ? getCacheWithFn(contentKey.value, () => ({ ...PanelWrapper2, name: contentKey.value })) : PanelWrapper2,
24165
+ $stepper.value.needsUniqueKeepAliveWrapper.value === true ? getCache(contentKey.value, () => ({ ...PanelWrapper2, name: contentKey.value })) : PanelWrapper2,
24143
24166
  { key: contentKey.value },
24144
24167
  slots.default
24145
24168
  )
@@ -31185,8 +31208,14 @@
31185
31208
  __export(composables_exports, {
31186
31209
  useDialogPluginComponent: () => use_dialog_plugin_component_default,
31187
31210
  useFormChild: () => use_form_child_default,
31211
+ useHydration: () => use_hydration_default,
31212
+ useId: () => use_id_default,
31188
31213
  useMeta: () => use_meta_default,
31189
- useQuasar: () => useQuasar
31214
+ useQuasar: () => useQuasar,
31215
+ useRenderCache: () => use_render_cache_default,
31216
+ useSplitAttrs: () => use_split_attrs_default,
31217
+ useTick: () => use_tick_default,
31218
+ useTimeout: () => use_timeout_default
31190
31219
  });
31191
31220
 
31192
31221
  // src/composables/use-dialog-plugin-component.js
@@ -31265,7 +31294,7 @@
31265
31294
  console.error("[ Quasar ] Vue is required to run. Please add a script tag for it before loading Quasar.");
31266
31295
  }
31267
31296
  window.Quasar = {
31268
- version: "2.14.7",
31297
+ version: "2.15.0",
31269
31298
  install(app2, opts) {
31270
31299
  install_quasar_default(app2, {
31271
31300
  components: components_exports,