quasar 2.11.1 → 2.11.3

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 (121) hide show
  1. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  2. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  3. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  4. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  5. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  6. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  7. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  8. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  9. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  10. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  11. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  12. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  13. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  14. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  15. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  16. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  17. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  18. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  19. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  20. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  21. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  22. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  23. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  24. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +2 -2
  25. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-material-icons-round.umd.prod.js +2 -2
  31. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +2 -2
  32. package/dist/icon-set/svg-material-icons.umd.prod.js +2 -2
  33. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +2 -2
  34. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +2 -2
  36. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-mdi-v7.umd.prod.js +2 -2
  38. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  39. package/dist/icon-set/themify.umd.prod.js +1 -1
  40. package/dist/lang/ar-TN.umd.prod.js +1 -1
  41. package/dist/lang/ar.umd.prod.js +1 -1
  42. package/dist/lang/az-Latn.umd.prod.js +1 -1
  43. package/dist/lang/bg.umd.prod.js +1 -1
  44. package/dist/lang/bn.umd.prod.js +1 -1
  45. package/dist/lang/ca.umd.prod.js +1 -1
  46. package/dist/lang/cs.umd.prod.js +1 -1
  47. package/dist/lang/da.umd.prod.js +1 -1
  48. package/dist/lang/de.umd.prod.js +1 -1
  49. package/dist/lang/el.umd.prod.js +1 -1
  50. package/dist/lang/en-GB.umd.prod.js +1 -1
  51. package/dist/lang/en-US.umd.prod.js +1 -1
  52. package/dist/lang/eo.umd.prod.js +1 -1
  53. package/dist/lang/es.umd.prod.js +1 -1
  54. package/dist/lang/et.umd.prod.js +1 -1
  55. package/dist/lang/eu.umd.prod.js +1 -1
  56. package/dist/lang/fa-IR.umd.prod.js +1 -1
  57. package/dist/lang/fa.umd.prod.js +1 -1
  58. package/dist/lang/fi.umd.prod.js +1 -1
  59. package/dist/lang/fr.umd.prod.js +1 -1
  60. package/dist/lang/gn.umd.prod.js +1 -1
  61. package/dist/lang/he.umd.prod.js +1 -1
  62. package/dist/lang/hr.umd.prod.js +1 -1
  63. package/dist/lang/hu.umd.prod.js +1 -1
  64. package/dist/lang/id.umd.prod.js +1 -1
  65. package/dist/lang/is.umd.prod.js +1 -1
  66. package/dist/lang/it.umd.prod.js +1 -1
  67. package/dist/lang/ja.umd.prod.js +1 -1
  68. package/dist/lang/kk.umd.prod.js +1 -1
  69. package/dist/lang/km.umd.prod.js +1 -1
  70. package/dist/lang/ko-KR.umd.prod.js +1 -1
  71. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  72. package/dist/lang/lt.umd.prod.js +1 -1
  73. package/dist/lang/lu.umd.prod.js +1 -1
  74. package/dist/lang/lv.umd.prod.js +1 -1
  75. package/dist/lang/ml.umd.prod.js +1 -1
  76. package/dist/lang/mm.umd.prod.js +1 -1
  77. package/dist/lang/ms.umd.prod.js +1 -1
  78. package/dist/lang/my.umd.prod.js +1 -1
  79. package/dist/lang/nb-NO.umd.prod.js +1 -1
  80. package/dist/lang/nl.umd.prod.js +1 -1
  81. package/dist/lang/pl.umd.prod.js +1 -1
  82. package/dist/lang/pt-BR.umd.prod.js +1 -1
  83. package/dist/lang/pt.umd.prod.js +1 -1
  84. package/dist/lang/ro.umd.prod.js +1 -1
  85. package/dist/lang/ru.umd.prod.js +1 -1
  86. package/dist/lang/sk.umd.prod.js +1 -1
  87. package/dist/lang/sl.umd.prod.js +1 -1
  88. package/dist/lang/sm.umd.prod.js +1 -1
  89. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  90. package/dist/lang/sr.umd.prod.js +1 -1
  91. package/dist/lang/sv.umd.prod.js +1 -1
  92. package/dist/lang/ta.umd.prod.js +1 -1
  93. package/dist/lang/th.umd.prod.js +1 -1
  94. package/dist/lang/tr.umd.prod.js +1 -1
  95. package/dist/lang/ug.umd.prod.js +1 -1
  96. package/dist/lang/uk.umd.prod.js +1 -1
  97. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  98. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  99. package/dist/lang/vi.umd.prod.js +1 -1
  100. package/dist/lang/zh-CN.umd.prod.js +1 -1
  101. package/dist/lang/zh-TW.umd.prod.js +1 -1
  102. package/dist/quasar.cjs.prod.js +2 -2
  103. package/dist/quasar.css +8 -3
  104. package/dist/quasar.esm.js +84 -68
  105. package/dist/quasar.esm.prod.js +2 -2
  106. package/dist/quasar.prod.css +1 -1
  107. package/dist/quasar.rtl.css +9 -3
  108. package/dist/quasar.rtl.prod.css +1 -1
  109. package/dist/quasar.sass +8 -3
  110. package/dist/quasar.umd.js +84 -68
  111. package/dist/quasar.umd.prod.js +2 -2
  112. package/dist/web-types/web-types.json +1 -1
  113. package/package.json +8 -8
  114. package/src/body.js +34 -4
  115. package/src/components/checkbox/use-checkbox.js +2 -0
  116. package/src/components/radio/QRadio.js +2 -0
  117. package/src/components/tabs/QTabs.js +35 -57
  118. package/src/components/tabs/QTabs.sass +5 -1
  119. package/src/css/core/mouse.sass +3 -1
  120. package/src/lang.js +17 -11
  121. package/src/plugins/Platform.js +1 -1
package/dist/quasar.sass CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.11.1
2
+ * Quasar Framework v2.11.3
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -4406,7 +4406,11 @@ body.desktop .q-table > tbody > tr:not(.q-tr--no-hover):hover > td:not(.q-td--no
4406
4406
  &.q-tabs__arrows--inside
4407
4407
  .q-tabs__arrow--faded
4408
4408
  display: none
4409
- &--not-scrollable
4409
+ &--not-scrollable,
4410
+ body.mobile &--scrollable.q-tabs--mobile-without-arrows
4411
+ &.q-tabs__arrows--outside
4412
+ padding-left: 0
4413
+ padding-right: 0
4410
4414
  .q-tabs__arrow
4411
4415
  display: none
4412
4416
  .q-tabs__content
@@ -7003,7 +7007,8 @@ img.responsive
7003
7007
  height: auto
7004
7008
  .non-selectable
7005
7009
  user-select: none !important
7006
- .scroll
7010
+ .scroll,
7011
+ body.mobile .scroll--mobile
7007
7012
  overflow: auto
7008
7013
  .scroll, .scroll-x, .scroll-y
7009
7014
  -webkit-overflow-scrolling: touch
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.11.1
2
+ * Quasar Framework v2.11.3
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -318,8 +318,8 @@
318
318
  // the rest of the props; we also avoid
319
319
  // hydration errors
320
320
  opts.onSSRHydrated.push(() => {
321
- isRuntimeSsrPreHydration.value = false;
322
321
  Object.assign($q.platform, client);
322
+ isRuntimeSsrPreHydration.value = false;
323
323
  iosCorrection = void 0;
324
324
  });
325
325
 
@@ -1071,12 +1071,14 @@
1071
1071
  };
1072
1072
 
1073
1073
  {
1074
- const el = document.documentElement;
1075
- el.setAttribute('dir', lang.rtl === true ? 'rtl' : 'ltr');
1076
- el.setAttribute('lang', lang.isoName);
1077
-
1078
1074
  lang.set = Plugin$8.set;
1079
1075
 
1076
+ if (Plugin$8.__langConfig === void 0 || Plugin$8.__langConfig.noHtmlAttrs !== true) {
1077
+ const el = document.documentElement;
1078
+ el.setAttribute('dir', lang.rtl === true ? 'rtl' : 'ltr');
1079
+ el.setAttribute('lang', lang.isoName);
1080
+ }
1081
+
1080
1082
  Object.assign(Plugin$8.__langPack, lang);
1081
1083
 
1082
1084
  Plugin$8.props = lang;
@@ -1088,6 +1090,7 @@
1088
1090
  install ({ $q, lang, ssrContext }) {
1089
1091
  {
1090
1092
  $q.lang = Plugin$8.__langPack;
1093
+ Plugin$8.__langConfig = $q.config.lang;
1091
1094
 
1092
1095
  if (this.__installed === true) {
1093
1096
  lang !== void 0 && this.set(lang);
@@ -1174,21 +1177,51 @@
1174
1177
  }
1175
1178
 
1176
1179
  function applyClientSsrCorrections () {
1180
+ const { is } = client;
1177
1181
  const classes = document.body.className;
1178
- let newCls = classes;
1182
+
1183
+ const classList = new Set(classes.replace(/ {2}/g, ' ').split(' '));
1179
1184
 
1180
1185
  if (iosCorrection !== void 0) {
1181
- newCls = newCls.replace('desktop', 'platform-ios mobile');
1186
+ classList.delete('desktop');
1187
+ classList.add('platform-ios');
1188
+ classList.add('mobile');
1189
+ }
1190
+ // else: is it SSG?
1191
+ else if (is.nativeMobile !== true && is.electron !== true && is.bex !== true) {
1192
+ if (is.desktop === true) {
1193
+ classList.delete('mobile');
1194
+ classList.delete('platform-ios');
1195
+ classList.delete('platform-android');
1196
+ classList.add('desktop');
1197
+ }
1198
+ else if (is.mobile === true) {
1199
+ classList.delete('desktop');
1200
+ classList.add('mobile');
1201
+
1202
+ const mobile = getMobilePlatform(is);
1203
+ if (mobile !== void 0) {
1204
+ classList.add(`platform-${ mobile }`);
1205
+ classList.delete(`platform-${ mobile === 'ios' ? 'android' : 'ios' }`);
1206
+ }
1207
+ else {
1208
+ classList.delete('platform-ios');
1209
+ classList.delete('platform-android');
1210
+ }
1211
+ }
1182
1212
  }
1183
1213
 
1184
1214
  if (client.has.touch === true) {
1185
- newCls = newCls.replace('no-touch', 'touch');
1215
+ classList.delete('no-touch');
1216
+ classList.add('touch');
1186
1217
  }
1187
1218
 
1188
1219
  if (client.within.iframe === true) {
1189
- newCls += ' within-iframe';
1220
+ classList.add('within-iframe');
1190
1221
  }
1191
1222
 
1223
+ const newCls = Array.from(classList).join(' ');
1224
+
1192
1225
  if (classes !== newCls) {
1193
1226
  document.body.className = newCls;
1194
1227
  }
@@ -1612,7 +1645,7 @@
1612
1645
  }
1613
1646
 
1614
1647
  var installQuasar = function (parentApp, opts = {}) {
1615
- const $q = { version: '2.11.1' };
1648
+ const $q = { version: '2.11.3' };
1616
1649
 
1617
1650
  if (globalConfigIsFrozen === false) {
1618
1651
  if (opts.config !== void 0) {
@@ -7531,6 +7564,8 @@
7531
7564
  const prop = { type: 'checkbox' };
7532
7565
 
7533
7566
  props.name !== void 0 && Object.assign(prop, {
7567
+ // see https://vuejs.org/guide/extras/render-function.html#creating-vnodes (.prop)
7568
+ '.checked': isTrue.value,
7534
7569
  '^checked': isTrue.value === true ? 'checked' : void 0,
7535
7570
  name: props.name,
7536
7571
  value: modelIsArray.value === true
@@ -9570,18 +9605,11 @@
9570
9605
  const rightArrow = vue.ref(false);
9571
9606
  const justify = vue.ref(false);
9572
9607
 
9573
- const arrowsEnabled = vue.computed(() =>
9574
- $q.platform.is.desktop === true || props.mobileArrows === true
9575
- );
9576
-
9577
9608
  const tabDataList = [];
9578
9609
  const tabDataListLen = vue.ref(0);
9579
9610
  const hasFocus = vue.ref(false);
9580
9611
 
9581
9612
  let animateTimer, scrollTimer, unwatchRoute;
9582
- let localUpdateArrows = arrowsEnabled.value === true
9583
- ? updateArrowsFn
9584
- : noop;
9585
9613
 
9586
9614
  const tabProps = vue.computed(() => ({
9587
9615
  activeClass: props.activeClass,
@@ -9622,17 +9650,17 @@
9622
9650
  'q-tabs row no-wrap items-center'
9623
9651
  + ` q-tabs--${ scrollable.value === true ? '' : 'not-' }scrollable`
9624
9652
  + ` q-tabs--${ props.vertical === true ? 'vertical' : 'horizontal' }`
9625
- + ` q-tabs__arrows--${ arrowsEnabled.value === true && props.outsideArrows === true ? 'outside' : 'inside' }`
9653
+ + ` q-tabs__arrows--${ props.outsideArrows === true ? 'outside' : 'inside' }`
9654
+ + ` q-tabs--mobile-with${ props.mobileArrows === true ? '' : 'out' }-arrows`
9626
9655
  + (props.dense === true ? ' q-tabs--dense' : '')
9627
9656
  + (props.shrink === true ? ' col-shrink' : '')
9628
9657
  + (props.stretch === true ? ' self-stretch' : '')
9629
9658
  );
9630
9659
 
9631
9660
  const innerClass = vue.computed(() =>
9632
- 'q-tabs__content row no-wrap items-center self-stretch hide-scrollbar relative-position '
9661
+ 'q-tabs__content scroll--mobile row no-wrap items-center self-stretch hide-scrollbar relative-position '
9633
9662
  + alignClass.value
9634
9663
  + (props.contentClass !== void 0 ? ` ${ props.contentClass }` : '')
9635
- + ($q.platform.is.mobile === true ? ' scroll' : '')
9636
9664
  );
9637
9665
 
9638
9666
  const domProps = vue.computed(() => (
@@ -9644,25 +9672,15 @@
9644
9672
  const isRTL = vue.computed(() => props.vertical !== true && $q.lang.rtl === true);
9645
9673
  const rtlPosCorrection = vue.computed(() => rtlHasScrollBug === false && isRTL.value === true);
9646
9674
 
9647
- vue.watch(isRTL, localUpdateArrows);
9675
+ vue.watch(isRTL, updateArrows);
9648
9676
 
9649
9677
  vue.watch(() => props.modelValue, name => {
9650
9678
  updateModel({ name, setCurrent: true, skipEmit: true });
9651
9679
  });
9652
9680
 
9653
- vue.watch(() => props.outsideArrows, () => {
9654
- recalculateScroll();
9655
- });
9656
-
9657
- vue.watch(arrowsEnabled, v => {
9658
- localUpdateArrows = v === true
9659
- ? updateArrowsFn
9660
- : noop;
9661
-
9662
- recalculateScroll();
9663
- });
9681
+ vue.watch(() => props.outsideArrows, recalculateScroll);
9664
9682
 
9665
- function updateModel ({ name, setCurrent, skipEmit, fromRoute }) {
9683
+ function updateModel ({ name, setCurrent, skipEmit }) {
9666
9684
  if (currentModel.value !== name) {
9667
9685
  if (skipEmit !== true && props[ 'onUpdate:modelValue' ] !== void 0) {
9668
9686
  emit('update:modelValue', name);
@@ -9708,7 +9726,7 @@
9708
9726
  scrollable.value = scroll;
9709
9727
 
9710
9728
  // Arrows need to be updated even if the scroll status was already true
9711
- scroll === true && registerUpdateArrowsTick(localUpdateArrows);
9729
+ scroll === true && registerUpdateArrowsTick(updateArrows);
9712
9730
 
9713
9731
  justify.value = size < parseInt(props.breakpoint, 10);
9714
9732
  }
@@ -9765,34 +9783,34 @@
9765
9783
 
9766
9784
  if (offset < 0) {
9767
9785
  contentRef.value[ props.vertical === true ? 'scrollTop' : 'scrollLeft' ] += Math.floor(offset);
9768
- localUpdateArrows();
9786
+ updateArrows();
9769
9787
  return
9770
9788
  }
9771
9789
 
9772
9790
  offset += props.vertical === true ? newPos.height - height : newPos.width - width;
9773
9791
  if (offset > 0) {
9774
9792
  contentRef.value[ props.vertical === true ? 'scrollTop' : 'scrollLeft' ] += Math.ceil(offset);
9775
- localUpdateArrows();
9793
+ updateArrows();
9776
9794
  }
9777
9795
  }
9778
9796
 
9779
- function updateArrowsFn () {
9797
+ function updateArrows () {
9780
9798
  const content = contentRef.value;
9781
- if (content !== null) {
9782
- const
9783
- rect = content.getBoundingClientRect(),
9784
- pos = props.vertical === true ? content.scrollTop : Math.abs(content.scrollLeft);
9799
+ if (content === null) { return }
9785
9800
 
9786
- if (isRTL.value === true) {
9787
- leftArrow.value = Math.ceil(pos + rect.width) < content.scrollWidth - 1;
9788
- rightArrow.value = pos > 0;
9789
- }
9790
- else {
9791
- leftArrow.value = pos > 0;
9792
- rightArrow.value = props.vertical === true
9793
- ? Math.ceil(pos + rect.height) < content.scrollHeight
9794
- : Math.ceil(pos + rect.width) < content.scrollWidth;
9795
- }
9801
+ const
9802
+ rect = content.getBoundingClientRect(),
9803
+ pos = props.vertical === true ? content.scrollTop : Math.abs(content.scrollLeft);
9804
+
9805
+ if (isRTL.value === true) {
9806
+ leftArrow.value = Math.ceil(pos + rect.width) < content.scrollWidth - 1;
9807
+ rightArrow.value = pos > 0;
9808
+ }
9809
+ else {
9810
+ leftArrow.value = pos > 0;
9811
+ rightArrow.value = props.vertical === true
9812
+ ? Math.ceil(pos + rect.height) < content.scrollHeight
9813
+ : Math.ceil(pos + rect.width) < content.scrollWidth;
9796
9814
  }
9797
9815
  }
9798
9816
 
@@ -9894,7 +9912,7 @@
9894
9912
  }
9895
9913
 
9896
9914
  set(content, pos);
9897
- localUpdateArrows();
9915
+ updateArrows();
9898
9916
 
9899
9917
  return done
9900
9918
  }
@@ -10138,17 +10156,21 @@
10138
10156
  });
10139
10157
 
10140
10158
  return () => {
10141
- const child = [
10159
+ return vue.h('div', {
10160
+ ref: rootRef,
10161
+ class: classes.value,
10162
+ role: 'tablist',
10163
+ onFocusin,
10164
+ onFocusout
10165
+ }, [
10142
10166
  vue.h(QResizeObserver, { onResize: updateContainer }),
10143
10167
 
10144
10168
  vue.h('div', {
10145
10169
  ref: contentRef,
10146
10170
  class: innerClass.value,
10147
- onScroll: localUpdateArrows
10148
- }, hSlot(slots.default))
10149
- ];
10171
+ onScroll: updateArrows
10172
+ }, hSlot(slots.default)),
10150
10173
 
10151
- arrowsEnabled.value === true && child.push(
10152
10174
  vue.h(QIcon, {
10153
10175
  class: 'q-tabs__arrow q-tabs__arrow--left absolute q-tab__icon'
10154
10176
  + (leftArrow.value === true ? '' : ' q-tabs__arrow--faded'),
@@ -10170,15 +10192,7 @@
10170
10192
  onMouseleavePassive: stopAnimScroll,
10171
10193
  onTouchendPassive: stopAnimScroll
10172
10194
  })
10173
- );
10174
-
10175
- return vue.h('div', {
10176
- ref: rootRef,
10177
- class: classes.value,
10178
- role: 'tablist',
10179
- onFocusin,
10180
- onFocusout
10181
- }, child)
10195
+ ])
10182
10196
  }
10183
10197
  }
10184
10198
  });
@@ -23085,6 +23099,8 @@
23085
23099
  const prop = { type: 'radio' };
23086
23100
 
23087
23101
  props.name !== void 0 && Object.assign(prop, {
23102
+ // see https://vuejs.org/guide/extras/render-function.html#creating-vnodes (.prop)
23103
+ '.checked': isTrue.value === true,
23088
23104
  '^checked': isTrue.value === true ? 'checked' : void 0,
23089
23105
  name: props.name,
23090
23106
  value: props.val
@@ -40511,7 +40527,7 @@
40511
40527
  */
40512
40528
 
40513
40529
  var index_umd = {
40514
- version: '2.11.1',
40530
+ version: '2.11.3',
40515
40531
  install (app, opts) {
40516
40532
  installQuasar(app, {
40517
40533
  components,