quasar 2.11.7 → 2.11.9

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 (163) hide show
  1. package/dist/api/QCarousel.json +9 -0
  2. package/dist/api/QEditor.json +57 -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 +121 -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 +121 -64
  114. package/dist/quasar.umd.prod.js +2 -2
  115. package/dist/types/index.d.ts +43 -0
  116. package/dist/web-types/web-types.json +102 -1
  117. package/lang/ja.js +1 -1
  118. package/lang/ja.mjs +1 -1
  119. package/package.json +9 -6
  120. package/src/components/avatar/__tests__/{QAvatar.spec.js → QAvatar.cy.js} +7 -8
  121. package/src/components/badge/__tests__/{QBadge.spec.js → QBadge.cy.js} +1 -2
  122. package/src/components/banner/__tests__/{QBanner.spec.js → QBanner.cy.js} +7 -8
  123. package/src/components/bar/__tests__/{QBar.spec.js → QBar.cy.js} +3 -4
  124. package/src/components/breadcrumbs/__tests__/{QBreadcrumbs.spec.js → QBreadcrumbs.cy.js} +8 -9
  125. package/src/components/breadcrumbs/__tests__/{QBreadcrumbsEl.spec.js → QBreadcrumbsEl.cy.js} +5 -6
  126. package/src/components/btn/__tests__/{QBtn.spec.js → QBtn.cy.js} +4 -5
  127. package/src/components/btn/__tests__/{use-btn.spec.js → use-btn.cy.js} +1 -2
  128. package/src/components/chip/__tests__/{QChip.spec.js → QChip.cy.js} +1 -2
  129. package/src/components/editor/QEditor.js +12 -1
  130. package/src/components/editor/QEditor.json +50 -0
  131. package/src/components/editor/editor-utils.js +5 -1
  132. package/src/components/field/QField.sass +16 -4
  133. package/src/components/input/QInput.js +24 -7
  134. package/src/components/input/use-mask.js +74 -50
  135. package/src/components/menu/__tests__/{QMenu.spec.js → QMenu.cy.js} +29 -30
  136. package/src/components/select/QSelect.js +2 -1
  137. package/src/components/select/__tests__/{QSelect.spec.js → QSelect.cy.js} +2 -3
  138. package/src/components/table/QTable.js +1 -1
  139. package/src/components/uploader/__tests__/{QUploader.spec.js → QUploader.cy.js} +1 -2
  140. package/src/composables/private/__tests__/{use-anchor.spec.js → use-anchor.cy.js} +7 -8
  141. package/src/composables/private/__tests__/{use-field.spec.js → use-field.cy.js} +7 -8
  142. package/src/composables/private/__tests__/{use-model-toggle.spec.js → use-model-toggle.cy.js} +17 -18
  143. package/src/composables/private/__tests__/{use-size.spec.js → use-size.cy.js} +4 -5
  144. package/src/composables/private/__tests__/{use-transition.spec.js → use-transition.cy.js} +9 -10
  145. package/src/composables/private/__tests__/{use-validate.spec.js → use-validate.cy.js} +5 -6
  146. package/src/composables/private/use-fullscreen.json +12 -0
  147. /package/src/components/date/__tests__/{QDate.spec.js → QDate.cy.js} +0 -0
  148. /package/src/components/dialog/__tests__/{QDialog.spec.js → QDialog.cy.js} +0 -0
  149. /package/src/components/editor/__tests__/{QEditor.spec.js → QEditor.cy.js} +0 -0
  150. /package/src/components/input/__tests__/{QInput.spec.js → QInput.cy.js} +0 -0
  151. /package/src/components/input/__tests__/{use-mask.spec.js → use-mask.cy.js} +0 -0
  152. /package/src/components/table/__tests__/{QTable.spec.js → QTable.cy.js} +0 -0
  153. /package/src/components/table/__tests__/{QTd.spec.js → QTd.cy.js} +0 -0
  154. /package/src/components/table/__tests__/{QTh.spec.js → QTh.cy.js} +0 -0
  155. /package/src/components/table/__tests__/{QTr.spec.js → QTr.cy.js} +0 -0
  156. /package/src/components/tabs/__tests__/{QRouteTab.spec.js → QRouteTab.cy.js} +0 -0
  157. /package/src/components/tabs/__tests__/{QTab.spec.js → QTab.cy.js} +0 -0
  158. /package/src/components/tabs/__tests__/{QTabs.spec.js → QTabs.cy.js} +0 -0
  159. /package/src/composables/private/__tests__/{use-file.spec.js → use-file.cy.js} +0 -0
  160. /package/src/composables/private/__tests__/{use-form.spec.js → use-form.cy.js} +0 -0
  161. /package/src/composables/private/__tests__/{use-fullscreen.spec.js → use-fullscreen.cy.js} +0 -0
  162. /package/src/composables/private/__tests__/{use-portal.spec.js → use-portal.cy.js} +0 -0
  163. /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.9
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.9
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.9' };
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,13 @@
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',
17236
+ 'linkShow',
17237
+ 'linkHide'
17228
17238
  ],
17229
17239
 
17230
17240
  setup (props, { slots, emit, attrs }) {
@@ -17381,6 +17391,7 @@
17381
17391
  $q,
17382
17392
  props,
17383
17393
  slots,
17394
+ emit,
17384
17395
  // caret (will get injected after mount)
17385
17396
  inFullscreen,
17386
17397
  toggleFullscreen,
@@ -17401,6 +17412,10 @@
17401
17412
  }
17402
17413
  });
17403
17414
 
17415
+ vue.watch(editLinkUrl, v => {
17416
+ emit(`link-${ v ? 'Show' : 'Hide' }`);
17417
+ });
17418
+
17404
17419
  const hasToolbar = vue.computed(() => props.toolbar && props.toolbar.length > 0);
17405
17420
 
17406
17421
  const keys = vue.computed(() => {
@@ -21288,7 +21303,7 @@
21288
21303
  };
21289
21304
 
21290
21305
  function useMask (props, emit, emitValue, inputRef) {
21291
- let maskMarked, maskReplaced, computedMask, computedUnmask;
21306
+ let maskMarked, maskReplaced, computedMask, computedUnmask, pastedTextStart, selectionAnchor;
21292
21307
 
21293
21308
  const hasMask = vue.ref(null);
21294
21309
  const innerValue = vue.ref(getInitialMaskedValue());
@@ -21490,8 +21505,15 @@
21490
21505
  }
21491
21506
 
21492
21507
  if (inputType === 'insertFromPaste' && props.reverseFillMask !== true) {
21493
- const cursor = end - 1;
21494
- moveCursor.right(inp, cursor, cursor);
21508
+ const maxEnd = inp.selectionEnd;
21509
+ let cursor = end - 1;
21510
+ // each non-marker char means we move once to right
21511
+ for (let i = pastedTextStart; i <= cursor && i < maxEnd; i++) {
21512
+ if (maskMarked[ i ] !== MARKER) {
21513
+ cursor++;
21514
+ }
21515
+ }
21516
+ moveCursor.right(inp, cursor);
21495
21517
 
21496
21518
  return
21497
21519
  }
@@ -21517,7 +21539,7 @@
21517
21539
  inp.setSelectionRange(cursor, cursor, 'forward');
21518
21540
  }
21519
21541
  else {
21520
- moveCursor.rightReverse(inp, cursor, cursor);
21542
+ moveCursor.rightReverse(inp, cursor);
21521
21543
  }
21522
21544
  }
21523
21545
  else {
@@ -21528,11 +21550,11 @@
21528
21550
  else {
21529
21551
  if (changed === true) {
21530
21552
  const cursor = Math.max(0, maskMarked.indexOf(MARKER), Math.min(preMasked.length, end) - 1);
21531
- moveCursor.right(inp, cursor, cursor);
21553
+ moveCursor.right(inp, cursor);
21532
21554
  }
21533
21555
  else {
21534
21556
  const cursor = end - 1;
21535
- moveCursor.right(inp, cursor, cursor);
21557
+ moveCursor.right(inp, cursor);
21536
21558
  }
21537
21559
  }
21538
21560
  });
@@ -21548,74 +21570,72 @@
21548
21570
  const preMasked = maskValue(unmaskValue(inp.value));
21549
21571
 
21550
21572
  start = Math.max(0, maskMarked.indexOf(MARKER), Math.min(preMasked.length, start));
21573
+ pastedTextStart = start;
21551
21574
 
21552
21575
  inp.setSelectionRange(start, end, 'forward');
21553
21576
  }
21554
21577
 
21555
21578
  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);
21579
+ left (inp, cursor) {
21580
+ const noMarkBefore = maskMarked.slice(cursor - 1).indexOf(MARKER) === -1;
21581
+ let i = Math.max(0, cursor - 1);
21559
21582
 
21560
21583
  for (; i >= 0; i--) {
21561
21584
  if (maskMarked[ i ] === MARKER) {
21562
- start = i;
21563
- noMarkBefore === true && start++;
21585
+ cursor = i;
21586
+ noMarkBefore === true && cursor++;
21564
21587
  break
21565
21588
  }
21566
21589
  }
21567
21590
 
21568
21591
  if (
21569
21592
  i < 0
21570
- && maskMarked[ start ] !== void 0
21571
- && maskMarked[ start ] !== MARKER
21593
+ && maskMarked[ cursor ] !== void 0
21594
+ && maskMarked[ cursor ] !== MARKER
21572
21595
  ) {
21573
- return moveCursor.right(inp, 0, 0)
21596
+ return moveCursor.right(inp, 0)
21574
21597
  }
21575
21598
 
21576
- start >= 0 && inp.setSelectionRange(
21577
- start,
21578
- selection === true ? end : start, 'backward'
21579
- );
21599
+ cursor >= 0 && inp.setSelectionRange(cursor, cursor, 'backward');
21580
21600
  },
21581
21601
 
21582
- right (inp, start, end, selection) {
21602
+ right (inp, cursor) {
21583
21603
  const limit = inp.value.length;
21584
- let i = Math.min(limit, end + 1);
21604
+ let i = Math.min(limit, cursor + 1);
21585
21605
 
21586
21606
  for (; i <= limit; i++) {
21587
21607
  if (maskMarked[ i ] === MARKER) {
21588
- end = i;
21608
+ cursor = i;
21589
21609
  break
21590
21610
  }
21591
21611
  else if (maskMarked[ i - 1 ] === MARKER) {
21592
- end = i;
21612
+ cursor = i;
21593
21613
  }
21594
21614
  }
21595
21615
 
21596
21616
  if (
21597
21617
  i > limit
21598
- && maskMarked[ end - 1 ] !== void 0
21599
- && maskMarked[ end - 1 ] !== MARKER
21618
+ && maskMarked[ cursor - 1 ] !== void 0
21619
+ && maskMarked[ cursor - 1 ] !== MARKER
21600
21620
  ) {
21601
- return moveCursor.left(inp, limit, limit)
21621
+ return moveCursor.left(inp, limit)
21602
21622
  }
21603
21623
 
21604
- inp.setSelectionRange(selection ? start : end, end, 'forward');
21624
+ inp.setSelectionRange(cursor, cursor, 'forward');
21605
21625
  },
21606
21626
 
21607
- leftReverse (inp, start, end, selection) {
21627
+ leftReverse (inp, cursor) {
21608
21628
  const
21609
21629
  localMaskMarked = getPaddedMaskMarked(inp.value.length);
21610
- let i = Math.max(0, start - 1);
21630
+ let i = Math.max(0, cursor - 1);
21611
21631
 
21612
21632
  for (; i >= 0; i--) {
21613
21633
  if (localMaskMarked[ i - 1 ] === MARKER) {
21614
- start = i;
21634
+ cursor = i;
21615
21635
  break
21616
21636
  }
21617
21637
  else if (localMaskMarked[ i ] === MARKER) {
21618
- start = i;
21638
+ cursor = i;
21619
21639
  if (i === 0) {
21620
21640
  break
21621
21641
  }
@@ -21624,45 +21644,48 @@
21624
21644
 
21625
21645
  if (
21626
21646
  i < 0
21627
- && localMaskMarked[ start ] !== void 0
21628
- && localMaskMarked[ start ] !== MARKER
21647
+ && localMaskMarked[ cursor ] !== void 0
21648
+ && localMaskMarked[ cursor ] !== MARKER
21629
21649
  ) {
21630
- return moveCursor.rightReverse(inp, 0, 0)
21650
+ return moveCursor.rightReverse(inp, 0)
21631
21651
  }
21632
21652
 
21633
- start >= 0 && inp.setSelectionRange(
21634
- start,
21635
- selection === true ? end : start, 'backward'
21636
- );
21653
+ cursor >= 0 && inp.setSelectionRange(cursor, cursor, 'backward');
21637
21654
  },
21638
21655
 
21639
- rightReverse (inp, start, end, selection) {
21656
+ rightReverse (inp, cursor) {
21640
21657
  const
21641
21658
  limit = inp.value.length,
21642
21659
  localMaskMarked = getPaddedMaskMarked(limit),
21643
- noMarkBefore = localMaskMarked.slice(0, end + 1).indexOf(MARKER) === -1;
21644
- let i = Math.min(limit, end + 1);
21660
+ noMarkBefore = localMaskMarked.slice(0, cursor + 1).indexOf(MARKER) === -1;
21661
+ let i = Math.min(limit, cursor + 1);
21645
21662
 
21646
21663
  for (; i <= limit; i++) {
21647
21664
  if (localMaskMarked[ i - 1 ] === MARKER) {
21648
- end = i;
21649
- end > 0 && noMarkBefore === true && end--;
21665
+ cursor = i;
21666
+ cursor > 0 && noMarkBefore === true && cursor--;
21650
21667
  break
21651
21668
  }
21652
21669
  }
21653
21670
 
21654
21671
  if (
21655
21672
  i > limit
21656
- && localMaskMarked[ end - 1 ] !== void 0
21657
- && localMaskMarked[ end - 1 ] !== MARKER
21673
+ && localMaskMarked[ cursor - 1 ] !== void 0
21674
+ && localMaskMarked[ cursor - 1 ] !== MARKER
21658
21675
  ) {
21659
- return moveCursor.leftReverse(inp, limit, limit)
21676
+ return moveCursor.leftReverse(inp, limit)
21660
21677
  }
21661
21678
 
21662
- inp.setSelectionRange(selection === true ? start : end, end, 'forward');
21679
+ inp.setSelectionRange(cursor, cursor, 'forward');
21663
21680
  }
21664
21681
  };
21665
21682
 
21683
+ function onMaskedClick (e) {
21684
+ emit('click', e);
21685
+
21686
+ selectionAnchor = void 0;
21687
+ }
21688
+
21666
21689
  function onMaskedKeydown (e) {
21667
21690
  emit('keydown', e);
21668
21691
 
@@ -21675,25 +21698,40 @@
21675
21698
  start = inp.selectionStart,
21676
21699
  end = inp.selectionEnd;
21677
21700
 
21701
+ if (!e.shiftKey) {
21702
+ selectionAnchor = void 0;
21703
+ }
21704
+
21678
21705
  if (e.keyCode === 37 || e.keyCode === 39) { // Left / Right
21706
+ if (e.shiftKey && selectionAnchor === void 0) {
21707
+ selectionAnchor = inp.selectionDirection === 'forward' ? start : end;
21708
+ }
21709
+
21679
21710
  const fn = moveCursor[ (e.keyCode === 39 ? 'right' : 'left') + (props.reverseFillMask === true ? 'Reverse' : '') ];
21680
21711
 
21681
21712
  e.preventDefault();
21682
- fn(inp, start, end, e.shiftKey);
21713
+ fn(inp, selectionAnchor === start ? end : start);
21714
+
21715
+ if (e.shiftKey) {
21716
+ const cursor = inp.selectionStart;
21717
+ inp.setSelectionRange(Math.min(selectionAnchor, cursor), Math.max(selectionAnchor, cursor), 'forward');
21718
+ }
21683
21719
  }
21684
21720
  else if (
21685
21721
  e.keyCode === 8 // Backspace
21686
21722
  && props.reverseFillMask !== true
21687
21723
  && start === end
21688
21724
  ) {
21689
- moveCursor.left(inp, start, end, true);
21725
+ moveCursor.left(inp, start);
21726
+ inp.setSelectionRange(inp.selectionStart, end, 'backward');
21690
21727
  }
21691
21728
  else if (
21692
21729
  e.keyCode === 46 // Delete
21693
21730
  && props.reverseFillMask === true
21694
21731
  && start === end
21695
21732
  ) {
21696
- moveCursor.rightReverse(inp, start, end, true);
21733
+ moveCursor.rightReverse(inp, end);
21734
+ inp.setSelectionRange(start, inp.selectionEnd, 'forward');
21697
21735
  }
21698
21736
  }
21699
21737
 
@@ -21784,7 +21822,8 @@
21784
21822
  hasMask,
21785
21823
  moveCursorForPaste,
21786
21824
  updateMaskValue,
21787
- onMaskedKeydown
21825
+ onMaskedKeydown,
21826
+ onMaskedClick
21788
21827
  }
21789
21828
  }
21790
21829
 
@@ -21846,7 +21885,7 @@
21846
21885
  emits: [
21847
21886
  ...useFieldEmits,
21848
21887
  'paste', 'change',
21849
- 'keydown', 'animationend'
21888
+ 'keydown', 'click', 'animationend'
21850
21889
  ],
21851
21890
 
21852
21891
  setup (props, { emit, attrs }) {
@@ -21864,7 +21903,8 @@
21864
21903
  hasMask,
21865
21904
  moveCursorForPaste,
21866
21905
  updateMaskValue,
21867
- onMaskedKeydown
21906
+ onMaskedKeydown,
21907
+ onMaskedClick
21868
21908
  } = useMask(props, emit, emitValue, inputRef);
21869
21909
 
21870
21910
  const formDomProps = useFileFormDomProps(props, /* type guard */ true);
@@ -21901,6 +21941,8 @@
21901
21941
 
21902
21942
  if (hasMask.value === true) {
21903
21943
  evt.onKeydown = onMaskedKeydown;
21944
+ // reset selection anchor on pointer selection
21945
+ evt.onClick = onMaskedClick;
21904
21946
  }
21905
21947
 
21906
21948
  if (props.autogrow === true) {
@@ -22110,18 +22152,29 @@
22110
22152
  const inp = inputRef.value;
22111
22153
  if (inp !== null) {
22112
22154
  const parentStyle = inp.parentNode.style;
22113
- const { overflow } = inp.style;
22155
+ // chrome does not keep scroll #15498
22156
+ const { scrollTop } = inp;
22157
+ // chrome calculates a smaller scrollHeight when in a .column container
22158
+ const { overflowY, maxHeight } = $q.platform.is.firefox === true
22159
+ ? {}
22160
+ : window.getComputedStyle(inp);
22161
+ // on firefox or if overflowY is specified as scroll #14263, #14344
22162
+ // we don't touch overflow
22163
+ // firefox is not so bad in the end
22164
+ const changeOverflow = overflowY !== void 0 && overflowY !== 'scroll';
22114
22165
 
22115
22166
  // reset height of textarea to a small size to detect the real height
22116
22167
  // but keep the total control size the same
22117
- // Firefox rulez #14263, #14344
22118
- $q.platform.is.firefox !== true && (inp.style.overflow = 'hidden');
22168
+ changeOverflow === true && (inp.style.overflowY = 'hidden');
22119
22169
  parentStyle.marginBottom = (inp.scrollHeight - 1) + 'px';
22120
22170
  inp.style.height = '1px';
22121
22171
 
22122
22172
  inp.style.height = inp.scrollHeight + 'px';
22123
- inp.style.overflow = overflow;
22173
+ // we should allow scrollbars only
22174
+ // if there is maxHeight and content is taller than maxHeight
22175
+ changeOverflow === true && (inp.style.overflowY = parseInt(maxHeight, 10) < inp.scrollHeight ? 'auto' : 'hidden');
22124
22176
  parentStyle.marginBottom = '';
22177
+ inp.scrollTop = scrollTop;
22125
22178
  }
22126
22179
  });
22127
22180
  }
@@ -22198,7 +22251,10 @@
22198
22251
  hasValue,
22199
22252
 
22200
22253
  floatingLabel: vue.computed(() =>
22201
- hasValue.value === true
22254
+ (
22255
+ hasValue.value === true
22256
+ && (props.type !== 'number' || isNaN(innerValue.value) === false)
22257
+ )
22202
22258
  || fieldValueIsFilled(props.displayValue)
22203
22259
  ),
22204
22260
 
@@ -28581,7 +28637,8 @@
28581
28637
 
28582
28638
  return vue.h('div', {
28583
28639
  class: 'q-field__native row items-center',
28584
- ...attrs
28640
+ ...attrs,
28641
+ ...state.splitAttrs.listeners.value
28585
28642
  }, child)
28586
28643
  },
28587
28644
 
@@ -32869,7 +32926,7 @@
32869
32926
 
32870
32927
  if (topLeft !== void 0) {
32871
32928
  child.push(
32872
- vue.h('div', { class: 'q-table-control' }, [
32929
+ vue.h('div', { class: 'q-table__control' }, [
32873
32930
  topLeft(marginalsScope.value)
32874
32931
  ])
32875
32932
  );
@@ -40781,7 +40838,7 @@
40781
40838
  */
40782
40839
 
40783
40840
  var index_umd = {
40784
- version: '2.11.7',
40841
+ version: '2.11.9',
40785
40842
  install (app, opts) {
40786
40843
  installQuasar(app, {
40787
40844
  components,