quasar 2.11.7 → 2.11.8

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 (165) hide show
  1. package/dist/api/QCarousel.json +9 -0
  2. package/dist/api/QEditor.json +49 -0
  3. package/dist/api/QTable.json +9 -0
  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.umd.prod.js +1 -1
  52. package/dist/lang/el.umd.prod.js +1 -1
  53. package/dist/lang/en-GB.umd.prod.js +1 -1
  54. package/dist/lang/en-US.umd.prod.js +1 -1
  55. package/dist/lang/eo.umd.prod.js +1 -1
  56. package/dist/lang/es.umd.prod.js +1 -1
  57. package/dist/lang/et.umd.prod.js +1 -1
  58. package/dist/lang/eu.umd.prod.js +1 -1
  59. package/dist/lang/fa-IR.umd.prod.js +1 -1
  60. package/dist/lang/fa.umd.prod.js +1 -1
  61. package/dist/lang/fi.umd.prod.js +1 -1
  62. package/dist/lang/fr.umd.prod.js +1 -1
  63. package/dist/lang/gn.umd.prod.js +1 -1
  64. package/dist/lang/he.umd.prod.js +1 -1
  65. package/dist/lang/hr.umd.prod.js +1 -1
  66. package/dist/lang/hu.umd.prod.js +1 -1
  67. package/dist/lang/id.umd.prod.js +1 -1
  68. package/dist/lang/is.umd.prod.js +1 -1
  69. package/dist/lang/it.umd.prod.js +1 -1
  70. package/dist/lang/ja.umd.prod.js +2 -2
  71. package/dist/lang/kk.umd.prod.js +1 -1
  72. package/dist/lang/km.umd.prod.js +1 -1
  73. package/dist/lang/ko-KR.umd.prod.js +1 -1
  74. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  75. package/dist/lang/lt.umd.prod.js +1 -1
  76. package/dist/lang/lu.umd.prod.js +1 -1
  77. package/dist/lang/lv.umd.prod.js +1 -1
  78. package/dist/lang/ml.umd.prod.js +1 -1
  79. package/dist/lang/mm.umd.prod.js +1 -1
  80. package/dist/lang/ms.umd.prod.js +1 -1
  81. package/dist/lang/my.umd.prod.js +1 -1
  82. package/dist/lang/nb-NO.umd.prod.js +1 -1
  83. package/dist/lang/nl.umd.prod.js +1 -1
  84. package/dist/lang/pl.umd.prod.js +1 -1
  85. package/dist/lang/pt-BR.umd.prod.js +1 -1
  86. package/dist/lang/pt.umd.prod.js +1 -1
  87. package/dist/lang/ro.umd.prod.js +1 -1
  88. package/dist/lang/ru.umd.prod.js +1 -1
  89. package/dist/lang/sk.umd.prod.js +1 -1
  90. package/dist/lang/sl.umd.prod.js +1 -1
  91. package/dist/lang/sm.umd.prod.js +1 -1
  92. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  93. package/dist/lang/sr.umd.prod.js +1 -1
  94. package/dist/lang/sv.umd.prod.js +1 -1
  95. package/dist/lang/ta.umd.prod.js +1 -1
  96. package/dist/lang/th.umd.prod.js +1 -1
  97. package/dist/lang/tr.umd.prod.js +1 -1
  98. package/dist/lang/ug.umd.prod.js +1 -1
  99. package/dist/lang/uk.umd.prod.js +1 -1
  100. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  101. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  102. package/dist/lang/vi.umd.prod.js +1 -1
  103. package/dist/lang/zh-CN.umd.prod.js +1 -1
  104. package/dist/lang/zh-TW.umd.prod.js +1 -1
  105. package/dist/quasar.cjs.prod.js +2 -2
  106. package/dist/quasar.css +2 -2
  107. package/dist/quasar.esm.js +113 -64
  108. package/dist/quasar.esm.prod.js +2 -2
  109. package/dist/quasar.prod.css +1 -1
  110. package/dist/quasar.rtl.css +2 -2
  111. package/dist/quasar.rtl.prod.css +1 -1
  112. package/dist/quasar.sass +17 -5
  113. package/dist/quasar.umd.js +113 -64
  114. package/dist/quasar.umd.prod.js +2 -2
  115. package/dist/transforms/auto-import.json +47 -3
  116. package/dist/transforms/import-map.json +22 -0
  117. package/dist/types/index.d.ts +35 -0
  118. package/dist/web-types/web-types.json +92 -1
  119. package/lang/ja.js +1 -1
  120. package/lang/ja.mjs +1 -1
  121. package/package.json +9 -6
  122. package/src/components/avatar/__tests__/{QAvatar.spec.js → QAvatar.cy.js} +7 -8
  123. package/src/components/badge/__tests__/{QBadge.spec.js → QBadge.cy.js} +1 -2
  124. package/src/components/banner/__tests__/{QBanner.spec.js → QBanner.cy.js} +7 -8
  125. package/src/components/bar/__tests__/{QBar.spec.js → QBar.cy.js} +3 -4
  126. package/src/components/breadcrumbs/__tests__/{QBreadcrumbs.spec.js → QBreadcrumbs.cy.js} +8 -9
  127. package/src/components/breadcrumbs/__tests__/{QBreadcrumbsEl.spec.js → QBreadcrumbsEl.cy.js} +5 -6
  128. package/src/components/btn/__tests__/{QBtn.spec.js → QBtn.cy.js} +4 -5
  129. package/src/components/btn/__tests__/{use-btn.spec.js → use-btn.cy.js} +1 -2
  130. package/src/components/chip/__tests__/{QChip.spec.js → QChip.cy.js} +1 -2
  131. package/src/components/editor/QEditor.js +6 -1
  132. package/src/components/editor/QEditor.json +40 -0
  133. package/src/components/editor/editor-utils.js +5 -1
  134. package/src/components/field/QField.sass +16 -4
  135. package/src/components/input/QInput.js +24 -7
  136. package/src/components/input/use-mask.js +72 -50
  137. package/src/components/menu/__tests__/{QMenu.spec.js → QMenu.cy.js} +29 -30
  138. package/src/components/select/QSelect.js +2 -1
  139. package/src/components/select/__tests__/{QSelect.spec.js → QSelect.cy.js} +2 -3
  140. package/src/components/table/QTable.js +1 -1
  141. package/src/components/uploader/__tests__/{QUploader.spec.js → QUploader.cy.js} +1 -2
  142. package/src/composables/private/__tests__/{use-anchor.spec.js → use-anchor.cy.js} +7 -8
  143. package/src/composables/private/__tests__/{use-field.spec.js → use-field.cy.js} +7 -8
  144. package/src/composables/private/__tests__/{use-model-toggle.spec.js → use-model-toggle.cy.js} +17 -18
  145. package/src/composables/private/__tests__/{use-size.spec.js → use-size.cy.js} +4 -5
  146. package/src/composables/private/__tests__/{use-transition.spec.js → use-transition.cy.js} +9 -10
  147. package/src/composables/private/__tests__/{use-validate.spec.js → use-validate.cy.js} +5 -6
  148. package/src/composables/private/use-fullscreen.json +12 -0
  149. /package/src/components/date/__tests__/{QDate.spec.js → QDate.cy.js} +0 -0
  150. /package/src/components/dialog/__tests__/{QDialog.spec.js → QDialog.cy.js} +0 -0
  151. /package/src/components/editor/__tests__/{QEditor.spec.js → QEditor.cy.js} +0 -0
  152. /package/src/components/input/__tests__/{QInput.spec.js → QInput.cy.js} +0 -0
  153. /package/src/components/input/__tests__/{use-mask.spec.js → use-mask.cy.js} +0 -0
  154. /package/src/components/table/__tests__/{QTable.spec.js → QTable.cy.js} +0 -0
  155. /package/src/components/table/__tests__/{QTd.spec.js → QTd.cy.js} +0 -0
  156. /package/src/components/table/__tests__/{QTh.spec.js → QTh.cy.js} +0 -0
  157. /package/src/components/table/__tests__/{QTr.spec.js → QTr.cy.js} +0 -0
  158. /package/src/components/tabs/__tests__/{QRouteTab.spec.js → QRouteTab.cy.js} +0 -0
  159. /package/src/components/tabs/__tests__/{QTab.spec.js → QTab.cy.js} +0 -0
  160. /package/src/components/tabs/__tests__/{QTabs.spec.js → QTabs.cy.js} +0 -0
  161. /package/src/composables/private/__tests__/{use-file.spec.js → use-file.cy.js} +0 -0
  162. /package/src/composables/private/__tests__/{use-form.spec.js → use-form.cy.js} +0 -0
  163. /package/src/composables/private/__tests__/{use-fullscreen.spec.js → use-fullscreen.cy.js} +0 -0
  164. /package/src/composables/private/__tests__/{use-portal.spec.js → use-portal.cy.js} +0 -0
  165. /package/src/composables/private/__tests__/{use-router-link.spec.js → use-router-link.cy.js} +0 -0
package/dist/quasar.sass CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.11.7
2
+ * Quasar Framework v2.11.8
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -2379,8 +2379,14 @@ $field-transition-label-right-up: .324s cubic-bezier(.4,0,.2,1)
2379
2379
  -webkit-animation-fill-mode: both
2380
2380
  &:-webkit-autofill + .q-field__label
2381
2381
  transform: translateY(-40%) scale(.75)
2382
- &[type="number"]:invalid + .q-field__label
2383
- transform: translateY(-40%) scale(.75)
2382
+ &[type="color"],
2383
+ &[type="date"],
2384
+ &[type="datetime-local"],
2385
+ &[type="month"],
2386
+ &[type="time"],
2387
+ &[type="week"]
2388
+ + .q-field__label
2389
+ transform: translateY(-40%) scale(.75)
2384
2390
  &:invalid
2385
2391
  box-shadow: none
2386
2392
  &__native[type="file"]
@@ -2627,8 +2633,14 @@ $field-transition-label-right-up: .324s cubic-bezier(.4,0,.2,1)
2627
2633
  .q-field__native, .q-field__input
2628
2634
  &:-webkit-autofill + .q-field__label
2629
2635
  transform: translateY(-30%) scale(.75)
2630
- &[type="number"]:invalid + .q-field__label
2631
- transform: translateY(-30%) scale(.75)
2636
+ &[type="color"],
2637
+ &[type="date"],
2638
+ &[type="datetime-local"],
2639
+ &[type="month"],
2640
+ &[type="time"],
2641
+ &[type="week"]
2642
+ + .q-field__label
2643
+ transform: translateY(-30%) scale(.75)
2632
2644
  &--borderless, &--standard
2633
2645
  .q-field__bottom,
2634
2646
  &.q-field--dense .q-field__control
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.11.7
2
+ * Quasar Framework v2.11.8
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -1653,7 +1653,7 @@
1653
1653
  }
1654
1654
 
1655
1655
  var installQuasar = function (parentApp, opts = {}) {
1656
- const $q = { version: '2.11.7' };
1656
+ const $q = { version: '2.11.8' };
1657
1657
 
1658
1658
  if (globalConfigIsFrozen === false) {
1659
1659
  if (opts.config !== void 0) {
@@ -16912,7 +16912,11 @@
16912
16912
  textColor: highlight && !eVm.props.toolbarPush ? null : eVm.props.toolbarTextColor,
16913
16913
  label: btn.fixedLabel ? btn.label : label,
16914
16914
  icon: btn.fixedIcon ? (btn.icon !== null ? btn.icon : void 0) : icon,
16915
- contentClass
16915
+ contentClass,
16916
+ onShow: evt => eVm.emit('dropdownShow', evt),
16917
+ onHide: evt => eVm.emit('dropdownHide', evt),
16918
+ onBeforeShow: evt => eVm.emit('dropdownBeforeShow', evt),
16919
+ onBeforeHide: evt => eVm.emit('dropdownBeforeHide', evt)
16916
16920
  }, () => Items);
16917
16921
 
16918
16922
  return Dropdown
@@ -17224,7 +17228,11 @@
17224
17228
  ...useFullscreenEmits,
17225
17229
  'update:modelValue',
17226
17230
  'keydown', 'click', 'mouseup', 'keyup', 'touchend',
17227
- 'focus', 'blur'
17231
+ 'focus', 'blur',
17232
+ 'dropdownShow',
17233
+ 'dropdownHide',
17234
+ 'dropdownBeforeShow',
17235
+ 'dropdownBeforeHide'
17228
17236
  ],
17229
17237
 
17230
17238
  setup (props, { slots, emit, attrs }) {
@@ -17381,6 +17389,7 @@
17381
17389
  $q,
17382
17390
  props,
17383
17391
  slots,
17392
+ emit,
17384
17393
  // caret (will get injected after mount)
17385
17394
  inFullscreen,
17386
17395
  toggleFullscreen,
@@ -21288,7 +21297,7 @@
21288
21297
  };
21289
21298
 
21290
21299
  function useMask (props, emit, emitValue, inputRef) {
21291
- let maskMarked, maskReplaced, computedMask, computedUnmask;
21300
+ let maskMarked, maskReplaced, computedMask, computedUnmask, pastedTextStart, selectionAnchor;
21292
21301
 
21293
21302
  const hasMask = vue.ref(null);
21294
21303
  const innerValue = vue.ref(getInitialMaskedValue());
@@ -21490,8 +21499,15 @@
21490
21499
  }
21491
21500
 
21492
21501
  if (inputType === 'insertFromPaste' && props.reverseFillMask !== true) {
21493
- const cursor = end - 1;
21494
- moveCursor.right(inp, cursor, cursor);
21502
+ const maxEnd = inp.selectionEnd;
21503
+ let cursor = end - 1;
21504
+ // each non-marker char means we move once to right
21505
+ for (let i = pastedTextStart; i <= cursor && i < maxEnd; i++) {
21506
+ if (maskMarked[ i ] !== MARKER) {
21507
+ cursor++;
21508
+ }
21509
+ }
21510
+ moveCursor.right(inp, cursor);
21495
21511
 
21496
21512
  return
21497
21513
  }
@@ -21517,7 +21533,7 @@
21517
21533
  inp.setSelectionRange(cursor, cursor, 'forward');
21518
21534
  }
21519
21535
  else {
21520
- moveCursor.rightReverse(inp, cursor, cursor);
21536
+ moveCursor.rightReverse(inp, cursor);
21521
21537
  }
21522
21538
  }
21523
21539
  else {
@@ -21528,11 +21544,11 @@
21528
21544
  else {
21529
21545
  if (changed === true) {
21530
21546
  const cursor = Math.max(0, maskMarked.indexOf(MARKER), Math.min(preMasked.length, end) - 1);
21531
- moveCursor.right(inp, cursor, cursor);
21547
+ moveCursor.right(inp, cursor);
21532
21548
  }
21533
21549
  else {
21534
21550
  const cursor = end - 1;
21535
- moveCursor.right(inp, cursor, cursor);
21551
+ moveCursor.right(inp, cursor);
21536
21552
  }
21537
21553
  }
21538
21554
  });
@@ -21548,74 +21564,72 @@
21548
21564
  const preMasked = maskValue(unmaskValue(inp.value));
21549
21565
 
21550
21566
  start = Math.max(0, maskMarked.indexOf(MARKER), Math.min(preMasked.length, start));
21567
+ pastedTextStart = start;
21551
21568
 
21552
21569
  inp.setSelectionRange(start, end, 'forward');
21553
21570
  }
21554
21571
 
21555
21572
  const moveCursor = {
21556
- left (inp, start, end, selection) {
21557
- const noMarkBefore = maskMarked.slice(start - 1).indexOf(MARKER) === -1;
21558
- let i = Math.max(0, start - 1);
21573
+ left (inp, cursor) {
21574
+ const noMarkBefore = maskMarked.slice(cursor - 1).indexOf(MARKER) === -1;
21575
+ let i = Math.max(0, cursor - 1);
21559
21576
 
21560
21577
  for (; i >= 0; i--) {
21561
21578
  if (maskMarked[ i ] === MARKER) {
21562
- start = i;
21563
- noMarkBefore === true && start++;
21579
+ cursor = i;
21580
+ noMarkBefore === true && cursor++;
21564
21581
  break
21565
21582
  }
21566
21583
  }
21567
21584
 
21568
21585
  if (
21569
21586
  i < 0
21570
- && maskMarked[ start ] !== void 0
21571
- && maskMarked[ start ] !== MARKER
21587
+ && maskMarked[ cursor ] !== void 0
21588
+ && maskMarked[ cursor ] !== MARKER
21572
21589
  ) {
21573
- return moveCursor.right(inp, 0, 0)
21590
+ return moveCursor.right(inp, 0)
21574
21591
  }
21575
21592
 
21576
- start >= 0 && inp.setSelectionRange(
21577
- start,
21578
- selection === true ? end : start, 'backward'
21579
- );
21593
+ cursor >= 0 && inp.setSelectionRange(cursor, cursor, 'backward');
21580
21594
  },
21581
21595
 
21582
- right (inp, start, end, selection) {
21596
+ right (inp, cursor) {
21583
21597
  const limit = inp.value.length;
21584
- let i = Math.min(limit, end + 1);
21598
+ let i = Math.min(limit, cursor + 1);
21585
21599
 
21586
21600
  for (; i <= limit; i++) {
21587
21601
  if (maskMarked[ i ] === MARKER) {
21588
- end = i;
21602
+ cursor = i;
21589
21603
  break
21590
21604
  }
21591
21605
  else if (maskMarked[ i - 1 ] === MARKER) {
21592
- end = i;
21606
+ cursor = i;
21593
21607
  }
21594
21608
  }
21595
21609
 
21596
21610
  if (
21597
21611
  i > limit
21598
- && maskMarked[ end - 1 ] !== void 0
21599
- && maskMarked[ end - 1 ] !== MARKER
21612
+ && maskMarked[ cursor - 1 ] !== void 0
21613
+ && maskMarked[ cursor - 1 ] !== MARKER
21600
21614
  ) {
21601
- return moveCursor.left(inp, limit, limit)
21615
+ return moveCursor.left(inp, limit)
21602
21616
  }
21603
21617
 
21604
- inp.setSelectionRange(selection ? start : end, end, 'forward');
21618
+ inp.setSelectionRange(cursor, cursor, 'forward');
21605
21619
  },
21606
21620
 
21607
- leftReverse (inp, start, end, selection) {
21621
+ leftReverse (inp, cursor) {
21608
21622
  const
21609
21623
  localMaskMarked = getPaddedMaskMarked(inp.value.length);
21610
- let i = Math.max(0, start - 1);
21624
+ let i = Math.max(0, cursor - 1);
21611
21625
 
21612
21626
  for (; i >= 0; i--) {
21613
21627
  if (localMaskMarked[ i - 1 ] === MARKER) {
21614
- start = i;
21628
+ cursor = i;
21615
21629
  break
21616
21630
  }
21617
21631
  else if (localMaskMarked[ i ] === MARKER) {
21618
- start = i;
21632
+ cursor = i;
21619
21633
  if (i === 0) {
21620
21634
  break
21621
21635
  }
@@ -21624,45 +21638,48 @@
21624
21638
 
21625
21639
  if (
21626
21640
  i < 0
21627
- && localMaskMarked[ start ] !== void 0
21628
- && localMaskMarked[ start ] !== MARKER
21641
+ && localMaskMarked[ cursor ] !== void 0
21642
+ && localMaskMarked[ cursor ] !== MARKER
21629
21643
  ) {
21630
- return moveCursor.rightReverse(inp, 0, 0)
21644
+ return moveCursor.rightReverse(inp, 0)
21631
21645
  }
21632
21646
 
21633
- start >= 0 && inp.setSelectionRange(
21634
- start,
21635
- selection === true ? end : start, 'backward'
21636
- );
21647
+ cursor >= 0 && inp.setSelectionRange(cursor, cursor, 'backward');
21637
21648
  },
21638
21649
 
21639
- rightReverse (inp, start, end, selection) {
21650
+ rightReverse (inp, cursor) {
21640
21651
  const
21641
21652
  limit = inp.value.length,
21642
21653
  localMaskMarked = getPaddedMaskMarked(limit),
21643
- noMarkBefore = localMaskMarked.slice(0, end + 1).indexOf(MARKER) === -1;
21644
- let i = Math.min(limit, end + 1);
21654
+ noMarkBefore = localMaskMarked.slice(0, cursor + 1).indexOf(MARKER) === -1;
21655
+ let i = Math.min(limit, cursor + 1);
21645
21656
 
21646
21657
  for (; i <= limit; i++) {
21647
21658
  if (localMaskMarked[ i - 1 ] === MARKER) {
21648
- end = i;
21649
- end > 0 && noMarkBefore === true && end--;
21659
+ cursor = i;
21660
+ cursor > 0 && noMarkBefore === true && cursor--;
21650
21661
  break
21651
21662
  }
21652
21663
  }
21653
21664
 
21654
21665
  if (
21655
21666
  i > limit
21656
- && localMaskMarked[ end - 1 ] !== void 0
21657
- && localMaskMarked[ end - 1 ] !== MARKER
21667
+ && localMaskMarked[ cursor - 1 ] !== void 0
21668
+ && localMaskMarked[ cursor - 1 ] !== MARKER
21658
21669
  ) {
21659
- return moveCursor.leftReverse(inp, limit, limit)
21670
+ return moveCursor.leftReverse(inp, limit)
21660
21671
  }
21661
21672
 
21662
- inp.setSelectionRange(selection === true ? start : end, end, 'forward');
21673
+ inp.setSelectionRange(cursor, cursor, 'forward');
21663
21674
  }
21664
21675
  };
21665
21676
 
21677
+ function onMaskedClick (e) {
21678
+ emit('click', e);
21679
+
21680
+ selectionAnchor = void 0;
21681
+ }
21682
+
21666
21683
  function onMaskedKeydown (e) {
21667
21684
  emit('keydown', e);
21668
21685
 
@@ -21675,25 +21692,38 @@
21675
21692
  start = inp.selectionStart,
21676
21693
  end = inp.selectionEnd;
21677
21694
 
21695
+ if (!e.shiftKey) {
21696
+ selectionAnchor = void 0;
21697
+ }
21698
+
21678
21699
  if (e.keyCode === 37 || e.keyCode === 39) { // Left / Right
21700
+ if (e.shiftKey && selectionAnchor === void 0) {
21701
+ selectionAnchor = inp.selectionDirection === 'forward' ? start : end;
21702
+ }
21703
+
21679
21704
  const fn = moveCursor[ (e.keyCode === 39 ? 'right' : 'left') + (props.reverseFillMask === true ? 'Reverse' : '') ];
21680
21705
 
21681
21706
  e.preventDefault();
21682
- fn(inp, start, end, e.shiftKey);
21707
+ fn(inp, selectionAnchor === start ? end : start);
21708
+
21709
+ if (e.shiftKey) {
21710
+ const cursor = inp.selectionStart;
21711
+ inp.setSelectionRange(Math.min(selectionAnchor, cursor), Math.max(selectionAnchor, cursor), 'forward');
21712
+ }
21683
21713
  }
21684
21714
  else if (
21685
21715
  e.keyCode === 8 // Backspace
21686
21716
  && props.reverseFillMask !== true
21687
21717
  && start === end
21688
21718
  ) {
21689
- moveCursor.left(inp, start, end, true);
21719
+ moveCursor.left(inp, start);
21690
21720
  }
21691
21721
  else if (
21692
21722
  e.keyCode === 46 // Delete
21693
21723
  && props.reverseFillMask === true
21694
21724
  && start === end
21695
21725
  ) {
21696
- moveCursor.rightReverse(inp, start, end, true);
21726
+ moveCursor.rightReverse(inp, end);
21697
21727
  }
21698
21728
  }
21699
21729
 
@@ -21784,7 +21814,8 @@
21784
21814
  hasMask,
21785
21815
  moveCursorForPaste,
21786
21816
  updateMaskValue,
21787
- onMaskedKeydown
21817
+ onMaskedKeydown,
21818
+ onMaskedClick
21788
21819
  }
21789
21820
  }
21790
21821
 
@@ -21846,7 +21877,7 @@
21846
21877
  emits: [
21847
21878
  ...useFieldEmits,
21848
21879
  'paste', 'change',
21849
- 'keydown', 'animationend'
21880
+ 'keydown', 'click', 'animationend'
21850
21881
  ],
21851
21882
 
21852
21883
  setup (props, { emit, attrs }) {
@@ -21864,7 +21895,8 @@
21864
21895
  hasMask,
21865
21896
  moveCursorForPaste,
21866
21897
  updateMaskValue,
21867
- onMaskedKeydown
21898
+ onMaskedKeydown,
21899
+ onMaskedClick
21868
21900
  } = useMask(props, emit, emitValue, inputRef);
21869
21901
 
21870
21902
  const formDomProps = useFileFormDomProps(props, /* type guard */ true);
@@ -21901,6 +21933,8 @@
21901
21933
 
21902
21934
  if (hasMask.value === true) {
21903
21935
  evt.onKeydown = onMaskedKeydown;
21936
+ // reset selection anchor on pointer selection
21937
+ evt.onClick = onMaskedClick;
21904
21938
  }
21905
21939
 
21906
21940
  if (props.autogrow === true) {
@@ -22110,18 +22144,29 @@
22110
22144
  const inp = inputRef.value;
22111
22145
  if (inp !== null) {
22112
22146
  const parentStyle = inp.parentNode.style;
22113
- const { overflow } = inp.style;
22147
+ // chrome does not keep scroll #15498
22148
+ const { scrollTop } = inp;
22149
+ // chrome calculates a smaller scrollHeight when in a .column container
22150
+ const { overflowY, maxHeight } = $q.platform.is.firefox === true
22151
+ ? {}
22152
+ : window.getComputedStyle(inp);
22153
+ // on firefox or if overflowY is specified as scroll #14263, #14344
22154
+ // we don't touch overflow
22155
+ // firefox is not so bad in the end
22156
+ const changeOverflow = overflowY !== void 0 && overflowY !== 'scroll';
22114
22157
 
22115
22158
  // reset height of textarea to a small size to detect the real height
22116
22159
  // but keep the total control size the same
22117
- // Firefox rulez #14263, #14344
22118
- $q.platform.is.firefox !== true && (inp.style.overflow = 'hidden');
22160
+ changeOverflow === true && (inp.style.overflowY = 'hidden');
22119
22161
  parentStyle.marginBottom = (inp.scrollHeight - 1) + 'px';
22120
22162
  inp.style.height = '1px';
22121
22163
 
22122
22164
  inp.style.height = inp.scrollHeight + 'px';
22123
- inp.style.overflow = overflow;
22165
+ // we should allow scrollbars only
22166
+ // if there is maxHeight and content is taller than maxHeight
22167
+ changeOverflow === true && (inp.style.overflowY = parseInt(maxHeight, 10) < inp.scrollHeight ? 'auto' : 'hidden');
22124
22168
  parentStyle.marginBottom = '';
22169
+ inp.scrollTop = scrollTop;
22125
22170
  }
22126
22171
  });
22127
22172
  }
@@ -22198,7 +22243,10 @@
22198
22243
  hasValue,
22199
22244
 
22200
22245
  floatingLabel: vue.computed(() =>
22201
- hasValue.value === true
22246
+ (
22247
+ hasValue.value === true
22248
+ && (props.type !== 'number' || isNaN(innerValue.value) === false)
22249
+ )
22202
22250
  || fieldValueIsFilled(props.displayValue)
22203
22251
  ),
22204
22252
 
@@ -28581,7 +28629,8 @@
28581
28629
 
28582
28630
  return vue.h('div', {
28583
28631
  class: 'q-field__native row items-center',
28584
- ...attrs
28632
+ ...attrs,
28633
+ ...state.splitAttrs.listeners.value
28585
28634
  }, child)
28586
28635
  },
28587
28636
 
@@ -32869,7 +32918,7 @@
32869
32918
 
32870
32919
  if (topLeft !== void 0) {
32871
32920
  child.push(
32872
- vue.h('div', { class: 'q-table-control' }, [
32921
+ vue.h('div', { class: 'q-table__control' }, [
32873
32922
  topLeft(marginalsScope.value)
32874
32923
  ])
32875
32924
  );
@@ -40781,7 +40830,7 @@
40781
40830
  */
40782
40831
 
40783
40832
  var index_umd = {
40784
- version: '2.11.7',
40833
+ version: '2.11.8',
40785
40834
  install (app, opts) {
40786
40835
  installQuasar(app, {
40787
40836
  components,