quasar 2.11.6 → 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 (170) hide show
  1. package/dist/api/BottomSheet.json +13 -0
  2. package/dist/api/QCarousel.json +9 -0
  3. package/dist/api/QEditor.json +49 -0
  4. package/dist/api/QTable.json +9 -0
  5. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  6. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  7. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  8. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  9. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  10. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  11. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  12. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  13. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  14. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  15. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  16. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  17. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  18. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  19. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  20. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  21. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  22. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  23. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  24. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  25. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
  40. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  41. package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
  42. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  43. package/dist/icon-set/themify.umd.prod.js +1 -1
  44. package/dist/lang/ar-TN.umd.prod.js +1 -1
  45. package/dist/lang/ar.umd.prod.js +1 -1
  46. package/dist/lang/az-Latn.umd.prod.js +1 -1
  47. package/dist/lang/bg.umd.prod.js +1 -1
  48. package/dist/lang/bn.umd.prod.js +1 -1
  49. package/dist/lang/ca.umd.prod.js +1 -1
  50. package/dist/lang/cs.umd.prod.js +1 -1
  51. package/dist/lang/da.umd.prod.js +1 -1
  52. package/dist/lang/de.umd.prod.js +1 -1
  53. package/dist/lang/el.umd.prod.js +1 -1
  54. package/dist/lang/en-GB.umd.prod.js +1 -1
  55. package/dist/lang/en-US.umd.prod.js +1 -1
  56. package/dist/lang/eo.umd.prod.js +1 -1
  57. package/dist/lang/es.umd.prod.js +1 -1
  58. package/dist/lang/et.umd.prod.js +1 -1
  59. package/dist/lang/eu.umd.prod.js +1 -1
  60. package/dist/lang/fa-IR.umd.prod.js +1 -1
  61. package/dist/lang/fa.umd.prod.js +1 -1
  62. package/dist/lang/fi.umd.prod.js +1 -1
  63. package/dist/lang/fr.umd.prod.js +1 -1
  64. package/dist/lang/gn.umd.prod.js +1 -1
  65. package/dist/lang/he.umd.prod.js +1 -1
  66. package/dist/lang/hr.umd.prod.js +1 -1
  67. package/dist/lang/hu.umd.prod.js +1 -1
  68. package/dist/lang/id.umd.prod.js +1 -1
  69. package/dist/lang/is.umd.prod.js +1 -1
  70. package/dist/lang/it.umd.prod.js +1 -1
  71. package/dist/lang/ja.umd.prod.js +2 -2
  72. package/dist/lang/kk.umd.prod.js +1 -1
  73. package/dist/lang/km.umd.prod.js +1 -1
  74. package/dist/lang/ko-KR.umd.prod.js +1 -1
  75. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  76. package/dist/lang/lt.umd.prod.js +1 -1
  77. package/dist/lang/lu.umd.prod.js +1 -1
  78. package/dist/lang/lv.umd.prod.js +1 -1
  79. package/dist/lang/ml.umd.prod.js +1 -1
  80. package/dist/lang/mm.umd.prod.js +1 -1
  81. package/dist/lang/ms.umd.prod.js +1 -1
  82. package/dist/lang/my.umd.prod.js +1 -1
  83. package/dist/lang/nb-NO.umd.prod.js +1 -1
  84. package/dist/lang/nl.umd.prod.js +1 -1
  85. package/dist/lang/pl.umd.prod.js +1 -1
  86. package/dist/lang/pt-BR.umd.prod.js +1 -1
  87. package/dist/lang/pt.umd.prod.js +1 -1
  88. package/dist/lang/ro.umd.prod.js +1 -1
  89. package/dist/lang/ru.umd.prod.js +1 -1
  90. package/dist/lang/sk.umd.prod.js +1 -1
  91. package/dist/lang/sl.umd.prod.js +1 -1
  92. package/dist/lang/sm.umd.prod.js +1 -1
  93. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  94. package/dist/lang/sr.umd.prod.js +1 -1
  95. package/dist/lang/sv.umd.prod.js +1 -1
  96. package/dist/lang/ta.umd.prod.js +1 -1
  97. package/dist/lang/th.umd.prod.js +1 -1
  98. package/dist/lang/tr.umd.prod.js +1 -1
  99. package/dist/lang/ug.umd.prod.js +1 -1
  100. package/dist/lang/uk.umd.prod.js +1 -1
  101. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  102. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  103. package/dist/lang/vi.umd.prod.js +1 -1
  104. package/dist/lang/zh-CN.umd.prod.js +1 -1
  105. package/dist/lang/zh-TW.umd.prod.js +1 -1
  106. package/dist/quasar.cjs.prod.js +2 -2
  107. package/dist/quasar.css +2 -2
  108. package/dist/quasar.esm.js +127 -75
  109. package/dist/quasar.esm.prod.js +2 -2
  110. package/dist/quasar.prod.css +1 -1
  111. package/dist/quasar.rtl.css +2 -2
  112. package/dist/quasar.rtl.prod.css +1 -1
  113. package/dist/quasar.sass +17 -5
  114. package/dist/quasar.umd.js +127 -75
  115. package/dist/quasar.umd.prod.js +2 -2
  116. package/dist/transforms/auto-import.json +47 -3
  117. package/dist/transforms/import-map.json +22 -0
  118. package/dist/types/index.d.ts +43 -0
  119. package/dist/web-types/web-types.json +92 -1
  120. package/lang/ja.js +1 -1
  121. package/lang/ja.mjs +1 -1
  122. package/package.json +9 -6
  123. package/src/components/avatar/__tests__/{QAvatar.spec.js → QAvatar.cy.js} +7 -8
  124. package/src/components/badge/__tests__/{QBadge.spec.js → QBadge.cy.js} +1 -2
  125. package/src/components/banner/__tests__/{QBanner.spec.js → QBanner.cy.js} +7 -8
  126. package/src/components/bar/__tests__/{QBar.spec.js → QBar.cy.js} +3 -4
  127. package/src/components/breadcrumbs/__tests__/{QBreadcrumbs.spec.js → QBreadcrumbs.cy.js} +8 -9
  128. package/src/components/breadcrumbs/__tests__/{QBreadcrumbsEl.spec.js → QBreadcrumbsEl.cy.js} +5 -6
  129. package/src/components/btn/__tests__/{QBtn.spec.js → QBtn.cy.js} +4 -5
  130. package/src/components/btn/__tests__/{use-btn.spec.js → use-btn.cy.js} +1 -2
  131. package/src/components/chip/__tests__/{QChip.spec.js → QChip.cy.js} +1 -2
  132. package/src/components/date/QDate.js +10 -9
  133. package/src/components/dialog-bottom-sheet/BottomSheet.js +2 -0
  134. package/src/components/editor/QEditor.js +6 -1
  135. package/src/components/editor/QEditor.json +40 -0
  136. package/src/components/editor/editor-utils.js +5 -1
  137. package/src/components/field/QField.sass +16 -4
  138. package/src/components/input/QInput.js +24 -7
  139. package/src/components/input/use-mask.js +72 -50
  140. package/src/components/menu/__tests__/{QMenu.spec.js → QMenu.cy.js} +29 -30
  141. package/src/components/select/QSelect.js +2 -1
  142. package/src/components/select/__tests__/{QSelect.spec.js → QSelect.cy.js} +2 -3
  143. package/src/components/table/QTable.js +1 -1
  144. package/src/components/tree/QTree.js +2 -2
  145. package/src/components/uploader/__tests__/{QUploader.spec.js → QUploader.cy.js} +1 -2
  146. package/src/composables/private/__tests__/{use-anchor.spec.js → use-anchor.cy.js} +7 -8
  147. package/src/composables/private/__tests__/{use-field.spec.js → use-field.cy.js} +7 -8
  148. package/src/composables/private/__tests__/{use-model-toggle.spec.js → use-model-toggle.cy.js} +17 -18
  149. package/src/composables/private/__tests__/{use-size.spec.js → use-size.cy.js} +4 -5
  150. package/src/composables/private/__tests__/{use-transition.spec.js → use-transition.cy.js} +9 -10
  151. package/src/composables/private/__tests__/{use-validate.spec.js → use-validate.cy.js} +5 -6
  152. package/src/composables/private/use-fullscreen.json +12 -0
  153. package/src/plugins/BottomSheet.json +8 -0
  154. /package/src/components/date/__tests__/{QDate.spec.js → QDate.cy.js} +0 -0
  155. /package/src/components/dialog/__tests__/{QDialog.spec.js → QDialog.cy.js} +0 -0
  156. /package/src/components/editor/__tests__/{QEditor.spec.js → QEditor.cy.js} +0 -0
  157. /package/src/components/input/__tests__/{QInput.spec.js → QInput.cy.js} +0 -0
  158. /package/src/components/input/__tests__/{use-mask.spec.js → use-mask.cy.js} +0 -0
  159. /package/src/components/table/__tests__/{QTable.spec.js → QTable.cy.js} +0 -0
  160. /package/src/components/table/__tests__/{QTd.spec.js → QTd.cy.js} +0 -0
  161. /package/src/components/table/__tests__/{QTh.spec.js → QTh.cy.js} +0 -0
  162. /package/src/components/table/__tests__/{QTr.spec.js → QTr.cy.js} +0 -0
  163. /package/src/components/tabs/__tests__/{QRouteTab.spec.js → QRouteTab.cy.js} +0 -0
  164. /package/src/components/tabs/__tests__/{QTab.spec.js → QTab.cy.js} +0 -0
  165. /package/src/components/tabs/__tests__/{QTabs.spec.js → QTabs.cy.js} +0 -0
  166. /package/src/composables/private/__tests__/{use-file.spec.js → use-file.cy.js} +0 -0
  167. /package/src/composables/private/__tests__/{use-form.spec.js → use-form.cy.js} +0 -0
  168. /package/src/composables/private/__tests__/{use-fullscreen.spec.js → use-fullscreen.cy.js} +0 -0
  169. /package/src/composables/private/__tests__/{use-portal.spec.js → use-portal.cy.js} +0 -0
  170. /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.6
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.6' };
1654
+ const $q = { version: '2.11.8' };
1655
1655
 
1656
1656
  if (globalConfigIsFrozen === false) {
1657
1657
  if (opts.config !== void 0) {
@@ -13841,8 +13841,8 @@ var QDate = createComponent({
13841
13841
  lastEmitValue = 0;
13842
13842
  }
13843
13843
  else {
13844
- const { year, month } = getViewModel(innerMask.value, innerLocale.value);
13845
- updateViewModel(year, month);
13844
+ const model = getViewModel(innerMask.value, innerLocale.value);
13845
+ updateViewModel(model.year, model.month, model);
13846
13846
  }
13847
13847
  });
13848
13848
 
@@ -13852,12 +13852,8 @@ var QDate = createComponent({
13852
13852
  }
13853
13853
  });
13854
13854
 
13855
- watch(() => viewModel.value.year, year => {
13856
- emit('navigation', { year, month: viewModel.value.month });
13857
- });
13858
-
13859
- watch(() => viewModel.value.month, month => {
13860
- emit('navigation', { year: viewModel.value.year, month });
13855
+ watch(() => viewModel.value.year + '|' + viewModel.value.month, () => {
13856
+ emit('navigation', { year: viewModel.value.year, month: viewModel.value.month });
13861
13857
  });
13862
13858
 
13863
13859
  watch(mask, val => {
@@ -14039,7 +14035,7 @@ var QDate = createComponent({
14039
14035
  return { year: date.year, month: date.month, day: date.day }
14040
14036
  }
14041
14037
 
14042
- function updateViewModel (year, month) {
14038
+ function updateViewModel (year, month, time) {
14043
14039
  if (minNav.value !== null && year <= minNav.value.year) {
14044
14040
  year = minNav.value.year;
14045
14041
  if (month < minNav.value.month) {
@@ -14054,6 +14050,11 @@ var QDate = createComponent({
14054
14050
  }
14055
14051
  }
14056
14052
 
14053
+ if (time !== void 0) {
14054
+ const { hour, minute, second, millisecond, timezoneOffset, timeHash } = time;
14055
+ Object.assign(viewModel.value, { hour, minute, second, millisecond, timezoneOffset, timeHash });
14056
+ }
14057
+
14057
14058
  const newHash = year + '/' + pad(month) + '/01';
14058
14059
 
14059
14060
  if (newHash !== viewModel.value.dateHash) {
@@ -16909,7 +16910,11 @@ function getDropdown (eVm, btn) {
16909
16910
  textColor: highlight && !eVm.props.toolbarPush ? null : eVm.props.toolbarTextColor,
16910
16911
  label: btn.fixedLabel ? btn.label : label,
16911
16912
  icon: btn.fixedIcon ? (btn.icon !== null ? btn.icon : void 0) : icon,
16912
- 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)
16913
16918
  }, () => Items);
16914
16919
 
16915
16920
  return Dropdown
@@ -17221,7 +17226,11 @@ var QEditor = createComponent({
17221
17226
  ...useFullscreenEmits,
17222
17227
  'update:modelValue',
17223
17228
  'keydown', 'click', 'mouseup', 'keyup', 'touchend',
17224
- 'focus', 'blur'
17229
+ 'focus', 'blur',
17230
+ 'dropdownShow',
17231
+ 'dropdownHide',
17232
+ 'dropdownBeforeShow',
17233
+ 'dropdownBeforeHide'
17225
17234
  ],
17226
17235
 
17227
17236
  setup (props, { slots, emit, attrs }) {
@@ -17378,6 +17387,7 @@ var QEditor = createComponent({
17378
17387
  $q,
17379
17388
  props,
17380
17389
  slots,
17390
+ emit,
17381
17391
  // caret (will get injected after mount)
17382
17392
  inFullscreen,
17383
17393
  toggleFullscreen,
@@ -21290,7 +21300,7 @@ const useMaskProps = {
21290
21300
  };
21291
21301
 
21292
21302
  function useMask (props, emit, emitValue, inputRef) {
21293
- let maskMarked, maskReplaced, computedMask, computedUnmask;
21303
+ let maskMarked, maskReplaced, computedMask, computedUnmask, pastedTextStart, selectionAnchor;
21294
21304
 
21295
21305
  const hasMask = ref(null);
21296
21306
  const innerValue = ref(getInitialMaskedValue());
@@ -21492,8 +21502,15 @@ function useMask (props, emit, emitValue, inputRef) {
21492
21502
  }
21493
21503
 
21494
21504
  if (inputType === 'insertFromPaste' && props.reverseFillMask !== true) {
21495
- const cursor = end - 1;
21496
- 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);
21497
21514
 
21498
21515
  return
21499
21516
  }
@@ -21519,7 +21536,7 @@ function useMask (props, emit, emitValue, inputRef) {
21519
21536
  inp.setSelectionRange(cursor, cursor, 'forward');
21520
21537
  }
21521
21538
  else {
21522
- moveCursor.rightReverse(inp, cursor, cursor);
21539
+ moveCursor.rightReverse(inp, cursor);
21523
21540
  }
21524
21541
  }
21525
21542
  else {
@@ -21530,11 +21547,11 @@ function useMask (props, emit, emitValue, inputRef) {
21530
21547
  else {
21531
21548
  if (changed === true) {
21532
21549
  const cursor = Math.max(0, maskMarked.indexOf(MARKER), Math.min(preMasked.length, end) - 1);
21533
- moveCursor.right(inp, cursor, cursor);
21550
+ moveCursor.right(inp, cursor);
21534
21551
  }
21535
21552
  else {
21536
21553
  const cursor = end - 1;
21537
- moveCursor.right(inp, cursor, cursor);
21554
+ moveCursor.right(inp, cursor);
21538
21555
  }
21539
21556
  }
21540
21557
  });
@@ -21550,74 +21567,72 @@ function useMask (props, emit, emitValue, inputRef) {
21550
21567
  const preMasked = maskValue(unmaskValue(inp.value));
21551
21568
 
21552
21569
  start = Math.max(0, maskMarked.indexOf(MARKER), Math.min(preMasked.length, start));
21570
+ pastedTextStart = start;
21553
21571
 
21554
21572
  inp.setSelectionRange(start, end, 'forward');
21555
21573
  }
21556
21574
 
21557
21575
  const moveCursor = {
21558
- left (inp, start, end, selection) {
21559
- const noMarkBefore = maskMarked.slice(start - 1).indexOf(MARKER) === -1;
21560
- 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);
21561
21579
 
21562
21580
  for (; i >= 0; i--) {
21563
21581
  if (maskMarked[ i ] === MARKER) {
21564
- start = i;
21565
- noMarkBefore === true && start++;
21582
+ cursor = i;
21583
+ noMarkBefore === true && cursor++;
21566
21584
  break
21567
21585
  }
21568
21586
  }
21569
21587
 
21570
21588
  if (
21571
21589
  i < 0
21572
- && maskMarked[ start ] !== void 0
21573
- && maskMarked[ start ] !== MARKER
21590
+ && maskMarked[ cursor ] !== void 0
21591
+ && maskMarked[ cursor ] !== MARKER
21574
21592
  ) {
21575
- return moveCursor.right(inp, 0, 0)
21593
+ return moveCursor.right(inp, 0)
21576
21594
  }
21577
21595
 
21578
- start >= 0 && inp.setSelectionRange(
21579
- start,
21580
- selection === true ? end : start, 'backward'
21581
- );
21596
+ cursor >= 0 && inp.setSelectionRange(cursor, cursor, 'backward');
21582
21597
  },
21583
21598
 
21584
- right (inp, start, end, selection) {
21599
+ right (inp, cursor) {
21585
21600
  const limit = inp.value.length;
21586
- let i = Math.min(limit, end + 1);
21601
+ let i = Math.min(limit, cursor + 1);
21587
21602
 
21588
21603
  for (; i <= limit; i++) {
21589
21604
  if (maskMarked[ i ] === MARKER) {
21590
- end = i;
21605
+ cursor = i;
21591
21606
  break
21592
21607
  }
21593
21608
  else if (maskMarked[ i - 1 ] === MARKER) {
21594
- end = i;
21609
+ cursor = i;
21595
21610
  }
21596
21611
  }
21597
21612
 
21598
21613
  if (
21599
21614
  i > limit
21600
- && maskMarked[ end - 1 ] !== void 0
21601
- && maskMarked[ end - 1 ] !== MARKER
21615
+ && maskMarked[ cursor - 1 ] !== void 0
21616
+ && maskMarked[ cursor - 1 ] !== MARKER
21602
21617
  ) {
21603
- return moveCursor.left(inp, limit, limit)
21618
+ return moveCursor.left(inp, limit)
21604
21619
  }
21605
21620
 
21606
- inp.setSelectionRange(selection ? start : end, end, 'forward');
21621
+ inp.setSelectionRange(cursor, cursor, 'forward');
21607
21622
  },
21608
21623
 
21609
- leftReverse (inp, start, end, selection) {
21624
+ leftReverse (inp, cursor) {
21610
21625
  const
21611
21626
  localMaskMarked = getPaddedMaskMarked(inp.value.length);
21612
- let i = Math.max(0, start - 1);
21627
+ let i = Math.max(0, cursor - 1);
21613
21628
 
21614
21629
  for (; i >= 0; i--) {
21615
21630
  if (localMaskMarked[ i - 1 ] === MARKER) {
21616
- start = i;
21631
+ cursor = i;
21617
21632
  break
21618
21633
  }
21619
21634
  else if (localMaskMarked[ i ] === MARKER) {
21620
- start = i;
21635
+ cursor = i;
21621
21636
  if (i === 0) {
21622
21637
  break
21623
21638
  }
@@ -21626,45 +21641,48 @@ function useMask (props, emit, emitValue, inputRef) {
21626
21641
 
21627
21642
  if (
21628
21643
  i < 0
21629
- && localMaskMarked[ start ] !== void 0
21630
- && localMaskMarked[ start ] !== MARKER
21644
+ && localMaskMarked[ cursor ] !== void 0
21645
+ && localMaskMarked[ cursor ] !== MARKER
21631
21646
  ) {
21632
- return moveCursor.rightReverse(inp, 0, 0)
21647
+ return moveCursor.rightReverse(inp, 0)
21633
21648
  }
21634
21649
 
21635
- start >= 0 && inp.setSelectionRange(
21636
- start,
21637
- selection === true ? end : start, 'backward'
21638
- );
21650
+ cursor >= 0 && inp.setSelectionRange(cursor, cursor, 'backward');
21639
21651
  },
21640
21652
 
21641
- rightReverse (inp, start, end, selection) {
21653
+ rightReverse (inp, cursor) {
21642
21654
  const
21643
21655
  limit = inp.value.length,
21644
21656
  localMaskMarked = getPaddedMaskMarked(limit),
21645
- noMarkBefore = localMaskMarked.slice(0, end + 1).indexOf(MARKER) === -1;
21646
- 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);
21647
21659
 
21648
21660
  for (; i <= limit; i++) {
21649
21661
  if (localMaskMarked[ i - 1 ] === MARKER) {
21650
- end = i;
21651
- end > 0 && noMarkBefore === true && end--;
21662
+ cursor = i;
21663
+ cursor > 0 && noMarkBefore === true && cursor--;
21652
21664
  break
21653
21665
  }
21654
21666
  }
21655
21667
 
21656
21668
  if (
21657
21669
  i > limit
21658
- && localMaskMarked[ end - 1 ] !== void 0
21659
- && localMaskMarked[ end - 1 ] !== MARKER
21670
+ && localMaskMarked[ cursor - 1 ] !== void 0
21671
+ && localMaskMarked[ cursor - 1 ] !== MARKER
21660
21672
  ) {
21661
- return moveCursor.leftReverse(inp, limit, limit)
21673
+ return moveCursor.leftReverse(inp, limit)
21662
21674
  }
21663
21675
 
21664
- inp.setSelectionRange(selection === true ? start : end, end, 'forward');
21676
+ inp.setSelectionRange(cursor, cursor, 'forward');
21665
21677
  }
21666
21678
  };
21667
21679
 
21680
+ function onMaskedClick (e) {
21681
+ emit('click', e);
21682
+
21683
+ selectionAnchor = void 0;
21684
+ }
21685
+
21668
21686
  function onMaskedKeydown (e) {
21669
21687
  emit('keydown', e);
21670
21688
 
@@ -21677,25 +21695,38 @@ function useMask (props, emit, emitValue, inputRef) {
21677
21695
  start = inp.selectionStart,
21678
21696
  end = inp.selectionEnd;
21679
21697
 
21698
+ if (!e.shiftKey) {
21699
+ selectionAnchor = void 0;
21700
+ }
21701
+
21680
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
+
21681
21707
  const fn = moveCursor[ (e.keyCode === 39 ? 'right' : 'left') + (props.reverseFillMask === true ? 'Reverse' : '') ];
21682
21708
 
21683
21709
  e.preventDefault();
21684
- 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
+ }
21685
21716
  }
21686
21717
  else if (
21687
21718
  e.keyCode === 8 // Backspace
21688
21719
  && props.reverseFillMask !== true
21689
21720
  && start === end
21690
21721
  ) {
21691
- moveCursor.left(inp, start, end, true);
21722
+ moveCursor.left(inp, start);
21692
21723
  }
21693
21724
  else if (
21694
21725
  e.keyCode === 46 // Delete
21695
21726
  && props.reverseFillMask === true
21696
21727
  && start === end
21697
21728
  ) {
21698
- moveCursor.rightReverse(inp, start, end, true);
21729
+ moveCursor.rightReverse(inp, end);
21699
21730
  }
21700
21731
  }
21701
21732
 
@@ -21786,7 +21817,8 @@ function useMask (props, emit, emitValue, inputRef) {
21786
21817
  hasMask,
21787
21818
  moveCursorForPaste,
21788
21819
  updateMaskValue,
21789
- onMaskedKeydown
21820
+ onMaskedKeydown,
21821
+ onMaskedClick
21790
21822
  }
21791
21823
  }
21792
21824
 
@@ -21848,7 +21880,7 @@ var QInput = createComponent({
21848
21880
  emits: [
21849
21881
  ...useFieldEmits,
21850
21882
  'paste', 'change',
21851
- 'keydown', 'animationend'
21883
+ 'keydown', 'click', 'animationend'
21852
21884
  ],
21853
21885
 
21854
21886
  setup (props, { emit, attrs }) {
@@ -21866,7 +21898,8 @@ var QInput = createComponent({
21866
21898
  hasMask,
21867
21899
  moveCursorForPaste,
21868
21900
  updateMaskValue,
21869
- onMaskedKeydown
21901
+ onMaskedKeydown,
21902
+ onMaskedClick
21870
21903
  } = useMask(props, emit, emitValue, inputRef);
21871
21904
 
21872
21905
  const formDomProps = useFileFormDomProps(props, /* type guard */ true);
@@ -21903,6 +21936,8 @@ var QInput = createComponent({
21903
21936
 
21904
21937
  if (hasMask.value === true) {
21905
21938
  evt.onKeydown = onMaskedKeydown;
21939
+ // reset selection anchor on pointer selection
21940
+ evt.onClick = onMaskedClick;
21906
21941
  }
21907
21942
 
21908
21943
  if (props.autogrow === true) {
@@ -22112,18 +22147,29 @@ var QInput = createComponent({
22112
22147
  const inp = inputRef.value;
22113
22148
  if (inp !== null) {
22114
22149
  const parentStyle = inp.parentNode.style;
22115
- 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';
22116
22160
 
22117
22161
  // reset height of textarea to a small size to detect the real height
22118
22162
  // but keep the total control size the same
22119
- // Firefox rulez #14263, #14344
22120
- $q.platform.is.firefox !== true && (inp.style.overflow = 'hidden');
22163
+ changeOverflow === true && (inp.style.overflowY = 'hidden');
22121
22164
  parentStyle.marginBottom = (inp.scrollHeight - 1) + 'px';
22122
22165
  inp.style.height = '1px';
22123
22166
 
22124
22167
  inp.style.height = inp.scrollHeight + 'px';
22125
- 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');
22126
22171
  parentStyle.marginBottom = '';
22172
+ inp.scrollTop = scrollTop;
22127
22173
  }
22128
22174
  });
22129
22175
  }
@@ -22200,7 +22246,10 @@ var QInput = createComponent({
22200
22246
  hasValue,
22201
22247
 
22202
22248
  floatingLabel: computed(() =>
22203
- hasValue.value === true
22249
+ (
22250
+ hasValue.value === true
22251
+ && (props.type !== 'number' || isNaN(innerValue.value) === false)
22252
+ )
22204
22253
  || fieldValueIsFilled(props.displayValue)
22205
22254
  ),
22206
22255
 
@@ -28583,7 +28632,8 @@ var QSelect = createComponent({
28583
28632
 
28584
28633
  return h('div', {
28585
28634
  class: 'q-field__native row items-center',
28586
- ...attrs
28635
+ ...attrs,
28636
+ ...state.splitAttrs.listeners.value
28587
28637
  }, child)
28588
28638
  },
28589
28639
 
@@ -32871,7 +32921,7 @@ var QTable = createComponent({
32871
32921
 
32872
32922
  if (topLeft !== void 0) {
32873
32923
  child.push(
32874
- h('div', { class: 'q-table-control' }, [
32924
+ h('div', { class: 'q-table__control' }, [
32875
32925
  topLeft(marginalsScope.value)
32876
32926
  ])
32877
32927
  );
@@ -35141,7 +35191,7 @@ var QTree = createComponent({
35141
35191
  }
35142
35192
 
35143
35193
  function onClick (node, meta, e, keyboard) {
35144
- keyboard !== true && blur(meta.key);
35194
+ keyboard !== true && meta.selectable !== false && blur(meta.key);
35145
35195
 
35146
35196
  if (hasSelection.value && meta.selectable) {
35147
35197
  if (props.noSelectionUnset === false) {
@@ -35164,7 +35214,7 @@ var QTree = createComponent({
35164
35214
  if (e !== void 0) {
35165
35215
  stopAndPrevent(e);
35166
35216
  }
35167
- keyboard !== true && blur(meta.key);
35217
+ keyboard !== true && meta.selectable !== false && blur(meta.key);
35168
35218
  setExpanded(meta.key, !meta.expanded, node, meta);
35169
35219
  }
35170
35220
 
@@ -38193,6 +38243,7 @@ var BottomSheet$1 = createComponent({
38193
38243
  'q-bottom-sheet__item q-hoverable q-focusable cursor-pointer relative-position',
38194
38244
  action.class
38195
38245
  ],
38246
+ style: action.style,
38196
38247
  tabindex: 0,
38197
38248
  role: 'listitem',
38198
38249
  onClick () { onOk(action); },
@@ -38224,6 +38275,7 @@ var BottomSheet$1 = createComponent({
38224
38275
  ? h(QSeparator, { spaced: true, dark: isDark.value })
38225
38276
  : h(QItem, {
38226
38277
  class: [ 'q-bottom-sheet__item', action.classes ],
38278
+ style: action.style,
38227
38279
  tabindex: 0,
38228
38280
  clickable: true,
38229
38281
  dark: isDark.value,
@@ -40591,7 +40643,7 @@ function runSequentialPromises (
40591
40643
  */
40592
40644
 
40593
40645
  const Quasar = {
40594
- version: '2.11.6',
40646
+ version: '2.11.8',
40595
40647
  install: installQuasar,
40596
40648
  lang: Plugin$8,
40597
40649
  iconSet: Plugin$7