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.css CHANGED
@@ -2269,7 +2269,7 @@ body.q-ios-padding .q-dialog__inner > div {
2269
2269
  .q-field__native:-webkit-autofill + .q-field__label, .q-field__input:-webkit-autofill + .q-field__label {
2270
2270
  transform: translateY(-40%) scale(0.75);
2271
2271
  }
2272
- .q-field__native[type=number]:invalid + .q-field__label, .q-field__input[type=number]:invalid + .q-field__label {
2272
+ .q-field__native[type=color] + .q-field__label, .q-field__native[type=date] + .q-field__label, .q-field__native[type=datetime-local] + .q-field__label, .q-field__native[type=month] + .q-field__label, .q-field__native[type=time] + .q-field__label, .q-field__native[type=week] + .q-field__label, .q-field__input[type=color] + .q-field__label, .q-field__input[type=date] + .q-field__label, .q-field__input[type=datetime-local] + .q-field__label, .q-field__input[type=month] + .q-field__label, .q-field__input[type=time] + .q-field__label, .q-field__input[type=week] + .q-field__label {
2273
2273
  transform: translateY(-40%) scale(0.75);
2274
2274
  }
2275
2275
  .q-field__native:invalid, .q-field__input:invalid {
@@ -2549,7 +2549,7 @@ body.q-ios-padding .q-dialog__inner > div {
2549
2549
  .q-field--dense .q-field__native:-webkit-autofill + .q-field__label, .q-field--dense .q-field__input:-webkit-autofill + .q-field__label {
2550
2550
  transform: translateY(-30%) scale(0.75);
2551
2551
  }
2552
- .q-field--dense .q-field__native[type=number]:invalid + .q-field__label, .q-field--dense .q-field__input[type=number]:invalid + .q-field__label {
2552
+ .q-field--dense .q-field__native[type=color] + .q-field__label, .q-field--dense .q-field__native[type=date] + .q-field__label, .q-field--dense .q-field__native[type=datetime-local] + .q-field__label, .q-field--dense .q-field__native[type=month] + .q-field__label, .q-field--dense .q-field__native[type=time] + .q-field__label, .q-field--dense .q-field__native[type=week] + .q-field__label, .q-field--dense .q-field__input[type=color] + .q-field__label, .q-field--dense .q-field__input[type=date] + .q-field__label, .q-field--dense .q-field__input[type=datetime-local] + .q-field__label, .q-field--dense .q-field__input[type=month] + .q-field__label, .q-field--dense .q-field__input[type=time] + .q-field__label, .q-field--dense .q-field__input[type=week] + .q-field__label {
2553
2553
  transform: translateY(-30%) scale(0.75);
2554
2554
  }
2555
2555
  .q-field--borderless .q-field__bottom, .q-field--borderless.q-field--dense .q-field__control, .q-field--standard .q-field__bottom, .q-field--standard.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
  */
@@ -1651,7 +1651,7 @@ function prepareApp (app, uiOpts, pluginOpts) {
1651
1651
  }
1652
1652
 
1653
1653
  var installQuasar = function (parentApp, opts = {}) {
1654
- const $q = { version: '2.11.7' };
1654
+ const $q = { version: '2.11.8' };
1655
1655
 
1656
1656
  if (globalConfigIsFrozen === false) {
1657
1657
  if (opts.config !== void 0) {
@@ -16910,7 +16910,11 @@ function getDropdown (eVm, btn) {
16910
16910
  textColor: highlight && !eVm.props.toolbarPush ? null : eVm.props.toolbarTextColor,
16911
16911
  label: btn.fixedLabel ? btn.label : label,
16912
16912
  icon: btn.fixedIcon ? (btn.icon !== null ? btn.icon : void 0) : icon,
16913
- contentClass
16913
+ contentClass,
16914
+ onShow: evt => eVm.emit('dropdownShow', evt),
16915
+ onHide: evt => eVm.emit('dropdownHide', evt),
16916
+ onBeforeShow: evt => eVm.emit('dropdownBeforeShow', evt),
16917
+ onBeforeHide: evt => eVm.emit('dropdownBeforeHide', evt)
16914
16918
  }, () => Items);
16915
16919
 
16916
16920
  return Dropdown
@@ -17222,7 +17226,11 @@ var QEditor = createComponent({
17222
17226
  ...useFullscreenEmits,
17223
17227
  'update:modelValue',
17224
17228
  'keydown', 'click', 'mouseup', 'keyup', 'touchend',
17225
- 'focus', 'blur'
17229
+ 'focus', 'blur',
17230
+ 'dropdownShow',
17231
+ 'dropdownHide',
17232
+ 'dropdownBeforeShow',
17233
+ 'dropdownBeforeHide'
17226
17234
  ],
17227
17235
 
17228
17236
  setup (props, { slots, emit, attrs }) {
@@ -17379,6 +17387,7 @@ var QEditor = createComponent({
17379
17387
  $q,
17380
17388
  props,
17381
17389
  slots,
17390
+ emit,
17382
17391
  // caret (will get injected after mount)
17383
17392
  inFullscreen,
17384
17393
  toggleFullscreen,
@@ -21291,7 +21300,7 @@ const useMaskProps = {
21291
21300
  };
21292
21301
 
21293
21302
  function useMask (props, emit, emitValue, inputRef) {
21294
- let maskMarked, maskReplaced, computedMask, computedUnmask;
21303
+ let maskMarked, maskReplaced, computedMask, computedUnmask, pastedTextStart, selectionAnchor;
21295
21304
 
21296
21305
  const hasMask = ref(null);
21297
21306
  const innerValue = ref(getInitialMaskedValue());
@@ -21493,8 +21502,15 @@ function useMask (props, emit, emitValue, inputRef) {
21493
21502
  }
21494
21503
 
21495
21504
  if (inputType === 'insertFromPaste' && props.reverseFillMask !== true) {
21496
- const cursor = end - 1;
21497
- moveCursor.right(inp, cursor, cursor);
21505
+ const maxEnd = inp.selectionEnd;
21506
+ let cursor = end - 1;
21507
+ // each non-marker char means we move once to right
21508
+ for (let i = pastedTextStart; i <= cursor && i < maxEnd; i++) {
21509
+ if (maskMarked[ i ] !== MARKER) {
21510
+ cursor++;
21511
+ }
21512
+ }
21513
+ moveCursor.right(inp, cursor);
21498
21514
 
21499
21515
  return
21500
21516
  }
@@ -21520,7 +21536,7 @@ function useMask (props, emit, emitValue, inputRef) {
21520
21536
  inp.setSelectionRange(cursor, cursor, 'forward');
21521
21537
  }
21522
21538
  else {
21523
- moveCursor.rightReverse(inp, cursor, cursor);
21539
+ moveCursor.rightReverse(inp, cursor);
21524
21540
  }
21525
21541
  }
21526
21542
  else {
@@ -21531,11 +21547,11 @@ function useMask (props, emit, emitValue, inputRef) {
21531
21547
  else {
21532
21548
  if (changed === true) {
21533
21549
  const cursor = Math.max(0, maskMarked.indexOf(MARKER), Math.min(preMasked.length, end) - 1);
21534
- moveCursor.right(inp, cursor, cursor);
21550
+ moveCursor.right(inp, cursor);
21535
21551
  }
21536
21552
  else {
21537
21553
  const cursor = end - 1;
21538
- moveCursor.right(inp, cursor, cursor);
21554
+ moveCursor.right(inp, cursor);
21539
21555
  }
21540
21556
  }
21541
21557
  });
@@ -21551,74 +21567,72 @@ function useMask (props, emit, emitValue, inputRef) {
21551
21567
  const preMasked = maskValue(unmaskValue(inp.value));
21552
21568
 
21553
21569
  start = Math.max(0, maskMarked.indexOf(MARKER), Math.min(preMasked.length, start));
21570
+ pastedTextStart = start;
21554
21571
 
21555
21572
  inp.setSelectionRange(start, end, 'forward');
21556
21573
  }
21557
21574
 
21558
21575
  const moveCursor = {
21559
- left (inp, start, end, selection) {
21560
- const noMarkBefore = maskMarked.slice(start - 1).indexOf(MARKER) === -1;
21561
- let i = Math.max(0, start - 1);
21576
+ left (inp, cursor) {
21577
+ const noMarkBefore = maskMarked.slice(cursor - 1).indexOf(MARKER) === -1;
21578
+ let i = Math.max(0, cursor - 1);
21562
21579
 
21563
21580
  for (; i >= 0; i--) {
21564
21581
  if (maskMarked[ i ] === MARKER) {
21565
- start = i;
21566
- noMarkBefore === true && start++;
21582
+ cursor = i;
21583
+ noMarkBefore === true && cursor++;
21567
21584
  break
21568
21585
  }
21569
21586
  }
21570
21587
 
21571
21588
  if (
21572
21589
  i < 0
21573
- && maskMarked[ start ] !== void 0
21574
- && maskMarked[ start ] !== MARKER
21590
+ && maskMarked[ cursor ] !== void 0
21591
+ && maskMarked[ cursor ] !== MARKER
21575
21592
  ) {
21576
- return moveCursor.right(inp, 0, 0)
21593
+ return moveCursor.right(inp, 0)
21577
21594
  }
21578
21595
 
21579
- start >= 0 && inp.setSelectionRange(
21580
- start,
21581
- selection === true ? end : start, 'backward'
21582
- );
21596
+ cursor >= 0 && inp.setSelectionRange(cursor, cursor, 'backward');
21583
21597
  },
21584
21598
 
21585
- right (inp, start, end, selection) {
21599
+ right (inp, cursor) {
21586
21600
  const limit = inp.value.length;
21587
- let i = Math.min(limit, end + 1);
21601
+ let i = Math.min(limit, cursor + 1);
21588
21602
 
21589
21603
  for (; i <= limit; i++) {
21590
21604
  if (maskMarked[ i ] === MARKER) {
21591
- end = i;
21605
+ cursor = i;
21592
21606
  break
21593
21607
  }
21594
21608
  else if (maskMarked[ i - 1 ] === MARKER) {
21595
- end = i;
21609
+ cursor = i;
21596
21610
  }
21597
21611
  }
21598
21612
 
21599
21613
  if (
21600
21614
  i > limit
21601
- && maskMarked[ end - 1 ] !== void 0
21602
- && maskMarked[ end - 1 ] !== MARKER
21615
+ && maskMarked[ cursor - 1 ] !== void 0
21616
+ && maskMarked[ cursor - 1 ] !== MARKER
21603
21617
  ) {
21604
- return moveCursor.left(inp, limit, limit)
21618
+ return moveCursor.left(inp, limit)
21605
21619
  }
21606
21620
 
21607
- inp.setSelectionRange(selection ? start : end, end, 'forward');
21621
+ inp.setSelectionRange(cursor, cursor, 'forward');
21608
21622
  },
21609
21623
 
21610
- leftReverse (inp, start, end, selection) {
21624
+ leftReverse (inp, cursor) {
21611
21625
  const
21612
21626
  localMaskMarked = getPaddedMaskMarked(inp.value.length);
21613
- let i = Math.max(0, start - 1);
21627
+ let i = Math.max(0, cursor - 1);
21614
21628
 
21615
21629
  for (; i >= 0; i--) {
21616
21630
  if (localMaskMarked[ i - 1 ] === MARKER) {
21617
- start = i;
21631
+ cursor = i;
21618
21632
  break
21619
21633
  }
21620
21634
  else if (localMaskMarked[ i ] === MARKER) {
21621
- start = i;
21635
+ cursor = i;
21622
21636
  if (i === 0) {
21623
21637
  break
21624
21638
  }
@@ -21627,45 +21641,48 @@ function useMask (props, emit, emitValue, inputRef) {
21627
21641
 
21628
21642
  if (
21629
21643
  i < 0
21630
- && localMaskMarked[ start ] !== void 0
21631
- && localMaskMarked[ start ] !== MARKER
21644
+ && localMaskMarked[ cursor ] !== void 0
21645
+ && localMaskMarked[ cursor ] !== MARKER
21632
21646
  ) {
21633
- return moveCursor.rightReverse(inp, 0, 0)
21647
+ return moveCursor.rightReverse(inp, 0)
21634
21648
  }
21635
21649
 
21636
- start >= 0 && inp.setSelectionRange(
21637
- start,
21638
- selection === true ? end : start, 'backward'
21639
- );
21650
+ cursor >= 0 && inp.setSelectionRange(cursor, cursor, 'backward');
21640
21651
  },
21641
21652
 
21642
- rightReverse (inp, start, end, selection) {
21653
+ rightReverse (inp, cursor) {
21643
21654
  const
21644
21655
  limit = inp.value.length,
21645
21656
  localMaskMarked = getPaddedMaskMarked(limit),
21646
- noMarkBefore = localMaskMarked.slice(0, end + 1).indexOf(MARKER) === -1;
21647
- let i = Math.min(limit, end + 1);
21657
+ noMarkBefore = localMaskMarked.slice(0, cursor + 1).indexOf(MARKER) === -1;
21658
+ let i = Math.min(limit, cursor + 1);
21648
21659
 
21649
21660
  for (; i <= limit; i++) {
21650
21661
  if (localMaskMarked[ i - 1 ] === MARKER) {
21651
- end = i;
21652
- end > 0 && noMarkBefore === true && end--;
21662
+ cursor = i;
21663
+ cursor > 0 && noMarkBefore === true && cursor--;
21653
21664
  break
21654
21665
  }
21655
21666
  }
21656
21667
 
21657
21668
  if (
21658
21669
  i > limit
21659
- && localMaskMarked[ end - 1 ] !== void 0
21660
- && localMaskMarked[ end - 1 ] !== MARKER
21670
+ && localMaskMarked[ cursor - 1 ] !== void 0
21671
+ && localMaskMarked[ cursor - 1 ] !== MARKER
21661
21672
  ) {
21662
- return moveCursor.leftReverse(inp, limit, limit)
21673
+ return moveCursor.leftReverse(inp, limit)
21663
21674
  }
21664
21675
 
21665
- inp.setSelectionRange(selection === true ? start : end, end, 'forward');
21676
+ inp.setSelectionRange(cursor, cursor, 'forward');
21666
21677
  }
21667
21678
  };
21668
21679
 
21680
+ function onMaskedClick (e) {
21681
+ emit('click', e);
21682
+
21683
+ selectionAnchor = void 0;
21684
+ }
21685
+
21669
21686
  function onMaskedKeydown (e) {
21670
21687
  emit('keydown', e);
21671
21688
 
@@ -21678,25 +21695,38 @@ function useMask (props, emit, emitValue, inputRef) {
21678
21695
  start = inp.selectionStart,
21679
21696
  end = inp.selectionEnd;
21680
21697
 
21698
+ if (!e.shiftKey) {
21699
+ selectionAnchor = void 0;
21700
+ }
21701
+
21681
21702
  if (e.keyCode === 37 || e.keyCode === 39) { // Left / Right
21703
+ if (e.shiftKey && selectionAnchor === void 0) {
21704
+ selectionAnchor = inp.selectionDirection === 'forward' ? start : end;
21705
+ }
21706
+
21682
21707
  const fn = moveCursor[ (e.keyCode === 39 ? 'right' : 'left') + (props.reverseFillMask === true ? 'Reverse' : '') ];
21683
21708
 
21684
21709
  e.preventDefault();
21685
- fn(inp, start, end, e.shiftKey);
21710
+ fn(inp, selectionAnchor === start ? end : start);
21711
+
21712
+ if (e.shiftKey) {
21713
+ const cursor = inp.selectionStart;
21714
+ inp.setSelectionRange(Math.min(selectionAnchor, cursor), Math.max(selectionAnchor, cursor), 'forward');
21715
+ }
21686
21716
  }
21687
21717
  else if (
21688
21718
  e.keyCode === 8 // Backspace
21689
21719
  && props.reverseFillMask !== true
21690
21720
  && start === end
21691
21721
  ) {
21692
- moveCursor.left(inp, start, end, true);
21722
+ moveCursor.left(inp, start);
21693
21723
  }
21694
21724
  else if (
21695
21725
  e.keyCode === 46 // Delete
21696
21726
  && props.reverseFillMask === true
21697
21727
  && start === end
21698
21728
  ) {
21699
- moveCursor.rightReverse(inp, start, end, true);
21729
+ moveCursor.rightReverse(inp, end);
21700
21730
  }
21701
21731
  }
21702
21732
 
@@ -21787,7 +21817,8 @@ function useMask (props, emit, emitValue, inputRef) {
21787
21817
  hasMask,
21788
21818
  moveCursorForPaste,
21789
21819
  updateMaskValue,
21790
- onMaskedKeydown
21820
+ onMaskedKeydown,
21821
+ onMaskedClick
21791
21822
  }
21792
21823
  }
21793
21824
 
@@ -21849,7 +21880,7 @@ var QInput = createComponent({
21849
21880
  emits: [
21850
21881
  ...useFieldEmits,
21851
21882
  'paste', 'change',
21852
- 'keydown', 'animationend'
21883
+ 'keydown', 'click', 'animationend'
21853
21884
  ],
21854
21885
 
21855
21886
  setup (props, { emit, attrs }) {
@@ -21867,7 +21898,8 @@ var QInput = createComponent({
21867
21898
  hasMask,
21868
21899
  moveCursorForPaste,
21869
21900
  updateMaskValue,
21870
- onMaskedKeydown
21901
+ onMaskedKeydown,
21902
+ onMaskedClick
21871
21903
  } = useMask(props, emit, emitValue, inputRef);
21872
21904
 
21873
21905
  const formDomProps = useFileFormDomProps(props, /* type guard */ true);
@@ -21904,6 +21936,8 @@ var QInput = createComponent({
21904
21936
 
21905
21937
  if (hasMask.value === true) {
21906
21938
  evt.onKeydown = onMaskedKeydown;
21939
+ // reset selection anchor on pointer selection
21940
+ evt.onClick = onMaskedClick;
21907
21941
  }
21908
21942
 
21909
21943
  if (props.autogrow === true) {
@@ -22113,18 +22147,29 @@ var QInput = createComponent({
22113
22147
  const inp = inputRef.value;
22114
22148
  if (inp !== null) {
22115
22149
  const parentStyle = inp.parentNode.style;
22116
- const { overflow } = inp.style;
22150
+ // chrome does not keep scroll #15498
22151
+ const { scrollTop } = inp;
22152
+ // chrome calculates a smaller scrollHeight when in a .column container
22153
+ const { overflowY, maxHeight } = $q.platform.is.firefox === true
22154
+ ? {}
22155
+ : window.getComputedStyle(inp);
22156
+ // on firefox or if overflowY is specified as scroll #14263, #14344
22157
+ // we don't touch overflow
22158
+ // firefox is not so bad in the end
22159
+ const changeOverflow = overflowY !== void 0 && overflowY !== 'scroll';
22117
22160
 
22118
22161
  // reset height of textarea to a small size to detect the real height
22119
22162
  // but keep the total control size the same
22120
- // Firefox rulez #14263, #14344
22121
- $q.platform.is.firefox !== true && (inp.style.overflow = 'hidden');
22163
+ changeOverflow === true && (inp.style.overflowY = 'hidden');
22122
22164
  parentStyle.marginBottom = (inp.scrollHeight - 1) + 'px';
22123
22165
  inp.style.height = '1px';
22124
22166
 
22125
22167
  inp.style.height = inp.scrollHeight + 'px';
22126
- inp.style.overflow = overflow;
22168
+ // we should allow scrollbars only
22169
+ // if there is maxHeight and content is taller than maxHeight
22170
+ changeOverflow === true && (inp.style.overflowY = parseInt(maxHeight, 10) < inp.scrollHeight ? 'auto' : 'hidden');
22127
22171
  parentStyle.marginBottom = '';
22172
+ inp.scrollTop = scrollTop;
22128
22173
  }
22129
22174
  });
22130
22175
  }
@@ -22201,7 +22246,10 @@ var QInput = createComponent({
22201
22246
  hasValue,
22202
22247
 
22203
22248
  floatingLabel: computed(() =>
22204
- hasValue.value === true
22249
+ (
22250
+ hasValue.value === true
22251
+ && (props.type !== 'number' || isNaN(innerValue.value) === false)
22252
+ )
22205
22253
  || fieldValueIsFilled(props.displayValue)
22206
22254
  ),
22207
22255
 
@@ -28584,7 +28632,8 @@ var QSelect = createComponent({
28584
28632
 
28585
28633
  return h('div', {
28586
28634
  class: 'q-field__native row items-center',
28587
- ...attrs
28635
+ ...attrs,
28636
+ ...state.splitAttrs.listeners.value
28588
28637
  }, child)
28589
28638
  },
28590
28639
 
@@ -32872,7 +32921,7 @@ var QTable = createComponent({
32872
32921
 
32873
32922
  if (topLeft !== void 0) {
32874
32923
  child.push(
32875
- h('div', { class: 'q-table-control' }, [
32924
+ h('div', { class: 'q-table__control' }, [
32876
32925
  topLeft(marginalsScope.value)
32877
32926
  ])
32878
32927
  );
@@ -40594,7 +40643,7 @@ function runSequentialPromises (
40594
40643
  */
40595
40644
 
40596
40645
  const Quasar = {
40597
- version: '2.11.7',
40646
+ version: '2.11.8',
40598
40647
  install: installQuasar,
40599
40648
  lang: Plugin$8,
40600
40649
  iconSet: Plugin$7