quasar 2.9.1 → 2.10.0

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 (171) hide show
  1. package/dist/api/QBreadcrumbsEl.json +0 -14
  2. package/dist/api/QBtnDropdown.json +36 -0
  3. package/dist/api/QPagination.json +134 -102
  4. package/dist/api/QTabs.json +1 -1
  5. package/dist/api/QTree.json +6 -0
  6. package/dist/api/TouchPan.json +0 -4
  7. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  8. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  9. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  10. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  11. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  12. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  13. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  14. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  15. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  16. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  17. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  18. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  19. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  20. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  21. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  22. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  23. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  24. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  25. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  40. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
  41. package/dist/icon-set/svg-mdi-v6.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 +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/kz.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 +10 -0
  108. package/dist/quasar.esm.js +554 -349
  109. package/dist/quasar.esm.prod.js +2 -2
  110. package/dist/quasar.prod.css +1 -1
  111. package/dist/quasar.rtl.css +26 -0
  112. package/dist/quasar.rtl.prod.css +1 -1
  113. package/dist/quasar.sass +11 -1
  114. package/dist/quasar.umd.js +554 -349
  115. package/dist/quasar.umd.prod.js +2 -2
  116. package/dist/transforms/auto-import.json +7 -3
  117. package/dist/transforms/import-map.json +2 -0
  118. package/dist/types/index.d.ts +70 -51
  119. package/dist/vetur/quasar-attributes.json +65 -49
  120. package/dist/vetur/quasar-tags.json +17 -13
  121. package/dist/web-types/web-types.json +131 -97
  122. package/package.json +1 -1
  123. package/src/components/badge/QBadge.js +1 -1
  124. package/src/components/badge/__tests__/QBadge.spec.js +98 -23
  125. package/src/components/breadcrumbs/QBreadcrumbsEl.json +0 -4
  126. package/src/components/breadcrumbs/__tests__/BasicBreadcrumbs.vue +7 -0
  127. package/src/components/breadcrumbs/__tests__/BreadcrumbWithSeparatorSlot.vue +11 -0
  128. package/src/components/breadcrumbs/__tests__/QBreadcrumbs.spec.js +112 -0
  129. package/src/components/breadcrumbs/__tests__/QBreadcrumbsEl.spec.js +87 -0
  130. package/src/components/btn/use-btn.js +24 -14
  131. package/src/components/btn-dropdown/QBtnDropdown.js +39 -16
  132. package/src/components/btn-dropdown/QBtnDropdown.json +1 -1
  133. package/src/components/btn-toggle/QBtnToggle.js +14 -14
  134. package/src/components/checkbox/use-checkbox.js +1 -1
  135. package/src/components/chip/QChip.js +14 -11
  136. package/src/components/dialog/QDialog.js +2 -1
  137. package/src/components/dialog-bottom-sheet/BottomSheet.js +6 -2
  138. package/src/components/drawer/QDrawer.js +5 -3
  139. package/src/components/footer/QFooter.js +5 -3
  140. package/src/components/header/QHeader.js +5 -3
  141. package/src/components/input/use-mask.js +1 -1
  142. package/src/components/item/QItem.js +1 -0
  143. package/src/components/item/QList.js +1 -1
  144. package/src/components/option-group/QOptionGroup.js +1 -1
  145. package/src/components/page/QPage.js +11 -4
  146. package/src/components/page/QPageContainer.js +5 -3
  147. package/src/components/page-sticky/use-page-sticky.js +5 -3
  148. package/src/components/pagination/QPagination.js +265 -188
  149. package/src/components/pagination/QPagination.json +82 -65
  150. package/src/components/pagination/QPagination.sass +14 -0
  151. package/src/components/pull-to-refresh/QPullToRefresh.js +1 -4
  152. package/src/components/resize-observer/QResizeObserver.js +14 -10
  153. package/src/components/stepper/QStep.js +7 -5
  154. package/src/components/tab-panels/QTabPanel.js +1 -1
  155. package/src/components/tabs/QTabs.js +2 -9
  156. package/src/components/tabs/QTabs.json +1 -1
  157. package/src/components/tabs/use-tab.js +5 -3
  158. package/src/components/timeline/QTimelineEntry.js +5 -3
  159. package/src/components/toolbar/QToolbar.js +1 -1
  160. package/src/components/tooltip/QTooltip.js +1 -1
  161. package/src/components/tree/QTree.js +33 -20
  162. package/src/components/tree/QTree.json +7 -0
  163. package/src/components/uploader/QUploaderAddTrigger.js +7 -3
  164. package/src/composables/private/use-file.js +10 -1
  165. package/src/directives/TouchHold.js +10 -3
  166. package/src/directives/TouchPan.js +21 -8
  167. package/src/directives/TouchPan.json +0 -5
  168. package/src/directives/TouchRepeat.js +20 -6
  169. package/src/directives/TouchSwipe.js +10 -3
  170. package/src/utils/morph.js +7 -3
  171. package/src/utils/private/symbols.js +2 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.9.1
2
+ * Quasar Framework v2.10.0
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -1396,6 +1396,8 @@ const formKey = '_q_fo_';
1396
1396
  const tabsKey = '_q_tabs_';
1397
1397
  const uploaderKey = '_q_u_';
1398
1398
 
1399
+ const emptyRenderFn = () => {};
1400
+
1399
1401
  const globalConfig = {};
1400
1402
  let globalConfigIsFrozen = false;
1401
1403
 
@@ -1608,7 +1610,7 @@ function prepareApp (app, uiOpts, pluginOpts) {
1608
1610
  }
1609
1611
 
1610
1612
  var installQuasar = function (parentApp, opts = {}) {
1611
- const $q = { version: '2.9.1' };
1613
+ const $q = { version: '2.10.0' };
1612
1614
 
1613
1615
  if (globalConfigIsFrozen === false) {
1614
1616
  if (opts.config !== void 0) {
@@ -2367,7 +2369,7 @@ var QBadge = createComponent({
2367
2369
  return () => h('div', {
2368
2370
  class: classes.value,
2369
2371
  style: style.value,
2370
- role: 'alert',
2372
+ role: 'status',
2371
2373
  'aria-label': props.label
2372
2374
  }, hMergeSlot(slots.default, props.label !== void 0 ? [ props.label ] : []))
2373
2375
  }
@@ -3298,7 +3300,7 @@ var Ripple = createDirective({
3298
3300
  }
3299
3301
  );
3300
3302
 
3301
- const padding = {
3303
+ const btnPadding = {
3302
3304
  none: 0,
3303
3305
  xs: 4,
3304
3306
  sm: 8,
@@ -3318,6 +3320,21 @@ const defaultSizes$2 = {
3318
3320
  const formTypes = [ 'button', 'submit', 'reset' ];
3319
3321
  const mediaTypeRE = /[^\s]\/[^\s]/;
3320
3322
 
3323
+ const btnDesignOptions = [ 'flat', 'outline', 'push', 'unelevated' ];
3324
+ const getBtnDesign = (props, defaultValue) => {
3325
+ if (props.flat === true) return 'flat'
3326
+ if (props.outline === true) return 'outline'
3327
+ if (props.push === true) return 'push'
3328
+ if (props.unelevated === true) return 'unelevated'
3329
+ return defaultValue
3330
+ };
3331
+ const getBtnDesignAttr = props => {
3332
+ const design = getBtnDesign(props);
3333
+ return design !== void 0
3334
+ ? { [ design ]: true }
3335
+ : {}
3336
+ };
3337
+
3321
3338
  const useBtnProps = {
3322
3339
  ...useSizeProps,
3323
3340
  ...useRouterLinkProps,
@@ -3331,13 +3348,14 @@ const useBtnProps = {
3331
3348
  icon: String,
3332
3349
  iconRight: String,
3333
3350
 
3334
- round: Boolean,
3351
+ ...btnDesignOptions.reduce(
3352
+ (acc, val) => (acc[ val ] = Boolean) && acc,
3353
+ {}
3354
+ ),
3355
+
3335
3356
  square: Boolean,
3336
- outline: Boolean,
3337
- flat: Boolean,
3338
- unelevated: Boolean,
3357
+ round: Boolean,
3339
3358
  rounded: Boolean,
3340
- push: Boolean,
3341
3359
  glossy: Boolean,
3342
3360
 
3343
3361
  size: String,
@@ -3387,7 +3405,7 @@ function useBtn (props) {
3387
3405
  ? Object.assign({}, obj, {
3388
3406
  padding: props.padding
3389
3407
  .split(/\s+/)
3390
- .map(v => (v in padding ? padding[ v ] + 'px' : v))
3408
+ .map(v => (v in btnPadding ? btnPadding[ v ] + 'px' : v))
3391
3409
  .join(' '),
3392
3410
  minWidth: '0',
3393
3411
  minHeight: '0'
@@ -3407,13 +3425,7 @@ function useBtn (props) {
3407
3425
  isActionable.value === true ? props.tabindex || 0 : -1
3408
3426
  ));
3409
3427
 
3410
- const design = computed(() => {
3411
- if (props.flat === true) return 'flat'
3412
- if (props.outline === true) return 'outline'
3413
- if (props.push === true) return 'push'
3414
- if (props.unelevated === true) return 'unelevated'
3415
- return 'standard'
3416
- });
3428
+ const design = computed(() => getBtnDesign(props, 'standard'));
3417
3429
 
3418
3430
  const attributes = computed(() => {
3419
3431
  const acc = { tabindex: tabIndex.value };
@@ -5665,11 +5677,32 @@ function uid$3 () {
5665
5677
  + hexBytes[ b[ 14 ] ] + hexBytes[ b[ 15 ] ]
5666
5678
  }
5667
5679
 
5680
+ const btnPropsList = Object.keys(useBtnProps);
5681
+
5682
+ // let's not duplicate type checking and prop validations
5683
+ // so just specify the props here with no type description
5684
+ const btnProps = btnPropsList.reduce(
5685
+ (acc, key) => (acc[ key ] = {}) && acc,
5686
+ {}
5687
+ );
5688
+
5689
+ const passBtnProps = props => btnPropsList.reduce(
5690
+ (acc, key) => {
5691
+ const val = props[ key ];
5692
+ if (val !== void 0) {
5693
+ acc[ key ] = val;
5694
+ }
5695
+ return acc
5696
+ },
5697
+ {}
5698
+ );
5699
+
5668
5700
  var QBtnDropdown = createComponent({
5669
5701
  name: 'QBtnDropdown',
5670
5702
 
5671
5703
  props: {
5672
- ...useBtnProps,
5704
+ ...btnProps,
5705
+ ...useTransitionProps,
5673
5706
 
5674
5707
  modelValue: Boolean,
5675
5708
  split: Boolean,
@@ -5710,7 +5743,7 @@ var QBtnDropdown = createComponent({
5710
5743
  const menuRef = ref(null);
5711
5744
  const targetUid = uid$3();
5712
5745
 
5713
- const attributes = computed(() => {
5746
+ const ariaAttrs = computed(() => {
5714
5747
  const acc = {
5715
5748
  'aria-expanded': showing.value === true ? 'true' : 'false',
5716
5749
  'aria-haspopup': 'true',
@@ -5738,6 +5771,9 @@ var QBtnDropdown = createComponent({
5738
5771
  + (props.split === false ? ' q-btn-dropdown__arrow-container' : '')
5739
5772
  );
5740
5773
 
5774
+ const btnDesignAttr = computed(() => getBtnDesignAttr(props));
5775
+ const btnProps = computed(() => passBtnProps(props));
5776
+
5741
5777
  watch(() => props.modelValue, val => {
5742
5778
  menuRef.value !== null && menuRef.value[ val ? 'show' : 'hide' ]();
5743
5779
  });
@@ -5818,6 +5854,9 @@ var QBtnDropdown = createComponent({
5818
5854
  self: props.menuSelf,
5819
5855
  offset: props.menuOffset,
5820
5856
  separateClosePopup: true,
5857
+ transitionShow: props.transitionShow,
5858
+ transitionHide: props.transitionHide,
5859
+ transitionDuration: props.transitionDuration,
5821
5860
  onBeforeShow,
5822
5861
  onShow,
5823
5862
  onBeforeHide,
@@ -5828,11 +5867,11 @@ var QBtnDropdown = createComponent({
5828
5867
  if (props.split === false) {
5829
5868
  return h(QBtn, {
5830
5869
  class: 'q-btn-dropdown q-btn-dropdown--simple',
5831
- ...props,
5870
+ ...btnProps.value,
5871
+ ...ariaAttrs.value,
5832
5872
  disable: props.disable === true || props.disableMainBtn === true,
5833
5873
  noWrap: true,
5834
5874
  round: false,
5835
- ...attributes.value,
5836
5875
  onClick
5837
5876
  }, {
5838
5877
  default: () => hSlot(slots.label, []).concat(Arrow),
@@ -5842,21 +5881,17 @@ var QBtnDropdown = createComponent({
5842
5881
 
5843
5882
  return h(QBtnGroup, {
5844
5883
  class: 'q-btn-dropdown q-btn-dropdown--split no-wrap q-btn-item',
5845
- outline: props.outline,
5846
- flat: props.flat,
5847
5884
  rounded: props.rounded,
5848
5885
  square: props.square,
5849
- push: props.push,
5850
- unelevated: props.unelevated,
5886
+ ...btnDesignAttr.value,
5851
5887
  glossy: props.glossy,
5852
5888
  stretch: props.stretch
5853
5889
  }, () => [
5854
5890
  h(QBtn, {
5855
5891
  class: 'q-btn-dropdown--current',
5856
- ...props,
5892
+ ...btnProps.value,
5857
5893
  disable: props.disable === true || props.disableMainBtn === true,
5858
5894
  noWrap: true,
5859
- iconRight: props.iconRight,
5860
5895
  round: false,
5861
5896
  onClick: onClickHide
5862
5897
  }, {
@@ -5866,16 +5901,15 @@ var QBtnDropdown = createComponent({
5866
5901
 
5867
5902
  h(QBtn, {
5868
5903
  class: 'q-btn-dropdown__arrow-container q-anchor--skip',
5869
- ...attributes.value,
5904
+ ...ariaAttrs.value,
5905
+ ...btnDesignAttr.value,
5870
5906
  disable: props.disable === true || props.disableDropdown === true,
5871
- outline: props.outline,
5872
- flat: props.flat,
5873
5907
  rounded: props.rounded,
5874
- push: props.push,
5875
- size: props.size,
5876
5908
  color: props.color,
5877
5909
  textColor: props.textColor,
5878
5910
  dense: props.dense,
5911
+ size: props.size,
5912
+ padding: props.padding,
5879
5913
  ripple: props.ripple
5880
5914
  }, () => Arrow)
5881
5915
  ])
@@ -5982,6 +6016,14 @@ var QBtnToggle = createComponent({
5982
6016
 
5983
6017
  const injectFormInput = useFormInject(formAttrs);
5984
6018
 
6019
+ const btnDesignAttr = computed(() => getBtnDesignAttr(props));
6020
+
6021
+ const btnOptionDesign = computed(() => ({
6022
+ rounded: props.rounded,
6023
+ dense: props.dense,
6024
+ ...btnDesignAttr.value
6025
+ }));
6026
+
5985
6027
  const btnOptions = computed(() => props.options.map((item, i) => {
5986
6028
  const { attrs, value, slot, ...opt } = item;
5987
6029
 
@@ -5989,19 +6031,11 @@ var QBtnToggle = createComponent({
5989
6031
  slot,
5990
6032
  props: {
5991
6033
  key: i,
5992
- onClick (e) { set(value, item, e); },
5993
6034
 
5994
6035
  'aria-pressed': value === props.modelValue ? 'true' : 'false',
5995
-
5996
6036
  ...attrs,
5997
6037
  ...opt,
5998
-
5999
- outline: props.outline,
6000
- flat: props.flat,
6001
- rounded: props.rounded,
6002
- push: props.push,
6003
- unelevated: props.unelevated,
6004
- dense: props.dense,
6038
+ ...btnOptionDesign.value,
6005
6039
 
6006
6040
  disable: props.disable === true || opt.disable === true,
6007
6041
 
@@ -6019,7 +6053,9 @@ var QBtnToggle = createComponent({
6019
6053
  padding: mergeOpt(opt, 'padding'),
6020
6054
  ripple: mergeOpt(opt, 'ripple'),
6021
6055
  stack: mergeOpt(opt, 'stack') === true,
6022
- stretch: mergeOpt(opt, 'stretch') === true
6056
+ stretch: mergeOpt(opt, 'stretch') === true,
6057
+
6058
+ onClick (e) { set(value, item, e); }
6023
6059
  }
6024
6060
  }
6025
6061
  }));
@@ -6058,12 +6094,9 @@ var QBtnToggle = createComponent({
6058
6094
 
6059
6095
  return () => h(QBtnGroup, {
6060
6096
  class: 'q-btn-toggle',
6061
- outline: props.outline,
6062
- flat: props.flat,
6097
+ ...btnDesignAttr.value,
6063
6098
  rounded: props.rounded,
6064
- push: props.push,
6065
6099
  stretch: props.stretch,
6066
- unelevated: props.unelevated,
6067
6100
  glossy: props.glossy,
6068
6101
  spread: props.spread
6069
6102
  }, getContent)
@@ -6420,9 +6453,16 @@ var TouchSwipe = createDirective({
6420
6453
 
6421
6454
  el.__qtouchswipe = ctx;
6422
6455
 
6423
- modifiers.mouse === true && addEvt(ctx, 'main', [
6424
- [ el, 'mousedown', 'mouseStart', `passive${ mouseCapture }` ]
6425
- ]);
6456
+ if (modifiers.mouse === true) {
6457
+ // account for UMD too where modifiers will be lowercased to work
6458
+ const capture = modifiers.mouseCapture === true || modifiers.mousecapture === true
6459
+ ? 'Capture'
6460
+ : '';
6461
+
6462
+ addEvt(ctx, 'main', [
6463
+ [ el, 'mousedown', 'mouseStart', `passive${ capture }` ]
6464
+ ]);
6465
+ }
6426
6466
 
6427
6467
  client.has.touch === true && addEvt(ctx, 'main', [
6428
6468
  [ el, 'touchstart', 'touchStart', `passive${ modifiers.capture === true ? 'Capture' : '' }` ],
@@ -7497,7 +7537,7 @@ function useCheckbox (type, getInner) {
7497
7537
  const attributes = computed(() => {
7498
7538
  const attrs = {
7499
7539
  tabindex: tabindex.value,
7500
- role: 'checkbox',
7540
+ role: type === 'toggle' ? 'switch' : 'checkbox',
7501
7541
  'aria-label': props.label,
7502
7542
  'aria-checked': isIndeterminate.value === true
7503
7543
  ? 'mixed'
@@ -7762,16 +7802,19 @@ var QChip = createComponent({
7762
7802
  + (isDark.value === true ? ' q-chip--dark q-dark' : '')
7763
7803
  });
7764
7804
 
7765
- const attributes = computed(() => (
7766
- props.disable === true
7805
+ const attributes = computed(() => {
7806
+ const chip = props.disable === true
7767
7807
  ? { tabindex: -1, 'aria-disabled': 'true' }
7768
- : {
7769
- tabindex: props.tabindex || 0,
7770
- role: 'button',
7771
- 'aria-hidden': 'false',
7772
- 'aria-label': props.removeAriaLabel || $q.lang.label.remove
7773
- }
7774
- ));
7808
+ : { tabindex: props.tabindex || 0 };
7809
+ const remove = {
7810
+ ...chip,
7811
+ role: 'button',
7812
+ 'aria-hidden': 'false',
7813
+ 'aria-label': props.removeAriaLabel || $q.lang.label.remove
7814
+ };
7815
+
7816
+ return { chip, remove }
7817
+ });
7775
7818
 
7776
7819
  function onKeyup (e) {
7777
7820
  e.keyCode === 13 /* ENTER */ && onClick(e);
@@ -7829,7 +7872,7 @@ var QChip = createComponent({
7829
7872
  h(QIcon, {
7830
7873
  class: 'q-chip__icon q-chip__icon--remove cursor-pointer',
7831
7874
  name: removeIcon.value,
7832
- ...attributes.value,
7875
+ ...attributes.value.remove,
7833
7876
  onClick: onRemove,
7834
7877
  onKeyup: onRemove
7835
7878
  })
@@ -7848,7 +7891,7 @@ var QChip = createComponent({
7848
7891
 
7849
7892
  isClickable.value === true && Object.assign(
7850
7893
  data,
7851
- attributes.value,
7894
+ attributes.value.chip,
7852
7895
  { onClick, onKeyup }
7853
7896
  );
7854
7897
 
@@ -8217,7 +8260,8 @@ var TouchPan = createDirective({
8217
8260
  */
8218
8261
  if (
8219
8262
  ctx.direction.all !== true
8220
- && (mouseEvent !== true || ctx.modifiers.mouseAllDir !== true)
8263
+ // account for UMD too where modifiers will be lowercased to work
8264
+ && (mouseEvent !== true || (ctx.modifiers.mouseAllDir !== true && ctx.modifiers.mousealldir !== true))
8221
8265
  ) {
8222
8266
  const clone = evt.type.indexOf('mouse') > -1
8223
8267
  ? new MouseEvent(evt.type, evt)
@@ -8284,9 +8328,12 @@ var TouchPan = createDirective({
8284
8328
  const start = () => {
8285
8329
  handleEvent(evt, isMouseEvt);
8286
8330
 
8287
- if (modifiers.preserveCursor !== true) {
8331
+ let cursor;
8332
+ if (modifiers.preserveCursor !== true && modifiers.preservecursor !== true) {
8333
+ cursor = document.documentElement.style.cursor || '';
8288
8334
  document.documentElement.style.cursor = 'grabbing';
8289
8335
  }
8336
+
8290
8337
  isMouseEvt === true && document.body.classList.add('no-pointer-events--children');
8291
8338
  document.body.classList.add('non-selectable');
8292
8339
  clearSelection();
@@ -8294,9 +8341,10 @@ var TouchPan = createDirective({
8294
8341
  ctx.styleCleanup = withDelayedFn => {
8295
8342
  ctx.styleCleanup = void 0;
8296
8343
 
8297
- if (modifiers.preserveCursor !== true) {
8298
- document.documentElement.style.cursor = '';
8344
+ if (cursor !== void 0) {
8345
+ document.documentElement.style.cursor = cursor;
8299
8346
  }
8347
+
8300
8348
  document.body.classList.remove('non-selectable');
8301
8349
 
8302
8350
  if (isMouseEvt === true) {
@@ -8344,7 +8392,8 @@ var TouchPan = createDirective({
8344
8392
 
8345
8393
  if (
8346
8394
  ctx.direction.all === true
8347
- || (isMouseEvt === true && ctx.modifiers.mouseAllDir === true)
8395
+ // account for UMD too where modifiers will be lowercased to work
8396
+ || (isMouseEvt === true && (ctx.modifiers.mouseAllDir === true || ctx.modifiers.mousealldir === true))
8348
8397
  ) {
8349
8398
  start();
8350
8399
  ctx.event.detected = true;
@@ -8411,9 +8460,16 @@ var TouchPan = createDirective({
8411
8460
 
8412
8461
  el.__qtouchpan = ctx;
8413
8462
 
8414
- modifiers.mouse === true && addEvt(ctx, 'main', [
8415
- [ el, 'mousedown', 'mouseStart', `passive${ modifiers.mouseCapture === true ? 'Capture' : '' }` ]
8416
- ]);
8463
+ if (modifiers.mouse === true) {
8464
+ // account for UMD too where modifiers will be lowercased to work
8465
+ const capture = modifiers.mouseCapture === true || modifiers.mousecapture === true
8466
+ ? 'Capture'
8467
+ : '';
8468
+
8469
+ addEvt(ctx, 'main', [
8470
+ [ el, 'mousedown', 'mouseStart', `passive${ capture }` ]
8471
+ ]);
8472
+ }
8417
8473
 
8418
8474
  client.has.touch === true && addEvt(ctx, 'main', [
8419
8475
  [ el, 'touchstart', 'touchStart', `passive${ modifiers.capture === true ? 'Capture' : '' }` ],
@@ -9319,17 +9375,21 @@ var QResizeObserver = createComponent({
9319
9375
  if (hasObserver === true) {
9320
9376
  let observer;
9321
9377
 
9322
- onMounted(() => {
9323
- nextTick(() => {
9324
- targetEl = proxy.$el.parentNode;
9378
+ // initialize as soon as possible
9379
+ const init = stop => {
9380
+ targetEl = proxy.$el.parentNode;
9325
9381
 
9326
- if (targetEl) {
9327
- observer = new ResizeObserver(trigger);
9328
- observer.observe(targetEl);
9329
- emitEvent();
9330
- }
9331
- });
9332
- });
9382
+ if (targetEl) {
9383
+ observer = new ResizeObserver(trigger);
9384
+ observer.observe(targetEl);
9385
+ emitEvent();
9386
+ }
9387
+ else if (stop !== true) {
9388
+ nextTick(() => { init(true); });
9389
+ }
9390
+ };
9391
+
9392
+ onMounted(() => { init(); });
9333
9393
 
9334
9394
  onBeforeUnmount(() => {
9335
9395
  clearTimeout(timer);
@@ -9988,8 +10048,8 @@ var QTabs = createComponent({
9988
10048
 
9989
10049
  recalculateScroll();
9990
10050
 
9991
- // if it's a QTab
9992
- if (tabData.routeData === void 0) {
10051
+ // if it's a QTab or we don't have Vue Router
10052
+ if (tabData.routeData === void 0 || proxy.$route === void 0) {
9993
10053
  // we should position to the currently active tab (if any)
9994
10054
  registerScrollToTabTimeout(() => {
9995
10055
  if (scrollable.value === true) {
@@ -10013,13 +10073,6 @@ var QTabs = createComponent({
10013
10073
  }
10014
10074
  }
10015
10075
 
10016
- /*
10017
- * Vue has an aggressive diff (in-place replacement) so we cannot
10018
- * ensure that the instance getting destroyed is the actual tab
10019
- * reported here. As a result, we cannot use its name or check
10020
- * if it's a route one to make the necessary updates. We need to
10021
- * always check the existing list again and infer the changes.
10022
- */
10023
10076
  function unregisterTab (tabData) {
10024
10077
  tabDataList.splice(tabDataList.indexOf(tabData), 1);
10025
10078
  tabDataListLen.value--;
@@ -10151,9 +10204,11 @@ const useTabProps = {
10151
10204
  };
10152
10205
 
10153
10206
  function useTab (props, slots, emit, routeData) {
10154
- const $tabs = inject(tabsKey, () => {
10207
+ const $tabs = inject(tabsKey, emptyRenderFn);
10208
+ if ($tabs === emptyRenderFn) {
10155
10209
  console.error('QTab/QRouteTab component needs to be child of QTabs');
10156
- });
10210
+ return emptyRenderFn
10211
+ }
10157
10212
 
10158
10213
  const { proxy } = getCurrentInstance();
10159
10214
 
@@ -10429,7 +10484,7 @@ var QTabPanel = createComponent({
10429
10484
  props: usePanelChildProps,
10430
10485
 
10431
10486
  setup (_, { slots }) {
10432
- return () => h('div', { class: 'q-tab-panel' }, hSlot(slots.default))
10487
+ return () => h('div', { class: 'q-tab-panel', role: 'tabpanel' }, hSlot(slots.default))
10433
10488
  }
10434
10489
  });
10435
10490
 
@@ -15009,7 +15064,8 @@ var QDialog = createComponent({
15009
15064
 
15010
15065
  function renderPortalContent () {
15011
15066
  return h('div', {
15012
- 'aria-modal': 'true',
15067
+ role: 'dialog',
15068
+ 'aria-modal': useBackdrop.value === true ? 'true' : 'false',
15013
15069
  ...attrs,
15014
15070
  class: rootClasses.value
15015
15071
  }, [
@@ -15113,9 +15169,11 @@ var QDrawer = createComponent({
15113
15169
  const { preventBodyScroll } = usePreventScroll();
15114
15170
  const { registerTimeout, removeTimeout } = useTimeout();
15115
15171
 
15116
- const $layout = inject(layoutKey, () => {
15172
+ const $layout = inject(layoutKey, emptyRenderFn);
15173
+ if ($layout === emptyRenderFn) {
15117
15174
  console.error('QDrawer needs to be child of QLayout');
15118
- });
15175
+ return emptyRenderFn
15176
+ }
15119
15177
 
15120
15178
  let lastDesktopState, timerMini, layoutTotalWidthWatcher;
15121
15179
 
@@ -16367,7 +16425,7 @@ var QTooltip = createComponent({
16367
16425
  attrs.style,
16368
16426
  transitionStyle.value
16369
16427
  ],
16370
- role: 'complementary'
16428
+ role: 'tooltip'
16371
16429
  }, hSlot(slots.default))
16372
16430
  : null
16373
16431
  }
@@ -16516,6 +16574,7 @@ var QItem = createComponent({
16516
16574
  ref: rootRef,
16517
16575
  class: classes.value,
16518
16576
  style: style.value,
16577
+ role: 'listitem',
16519
16578
  onClick,
16520
16579
  onKeyup
16521
16580
  };
@@ -19420,7 +19479,14 @@ function useFile ({
19420
19479
 
19421
19480
  function onDragleave (e) {
19422
19481
  stopAndPrevent(e);
19423
- e.relatedTarget !== dndRef.value && (dnd.value = false);
19482
+
19483
+ // Safari bug: relatedTarget is null for over 10 years
19484
+ // https://bugs.webkit.org/show_bug.cgi?id=66547
19485
+ const gone = e.relatedTarget !== null || client.is.safari !== true
19486
+ ? e.relatedTarget !== dndRef.value
19487
+ : document.elementsFromPoint(e.clientX, e.clientY).includes(dndRef.value) === false;
19488
+
19489
+ gone === true && (dnd.value = false);
19424
19490
  }
19425
19491
 
19426
19492
  function onDrop (e) {
@@ -19454,6 +19520,7 @@ function useFile ({
19454
19520
  pickFiles,
19455
19521
  addFiles,
19456
19522
  onDragover,
19523
+ onDragleave,
19457
19524
  processFiles,
19458
19525
  getDndNode,
19459
19526
 
@@ -19807,9 +19874,11 @@ var QFooter = createComponent({
19807
19874
  setup (props, { slots, emit }) {
19808
19875
  const { proxy: { $q } } = getCurrentInstance();
19809
19876
 
19810
- const $layout = inject(layoutKey, () => {
19877
+ const $layout = inject(layoutKey, emptyRenderFn);
19878
+ if ($layout === emptyRenderFn) {
19811
19879
  console.error('QFooter needs to be child of QLayout');
19812
- });
19880
+ return emptyRenderFn
19881
+ }
19813
19882
 
19814
19883
  const size = ref(parseInt(props.heightHint, 10));
19815
19884
  const revealed = ref(true);
@@ -20227,9 +20296,11 @@ var QHeader = createComponent({
20227
20296
  setup (props, { slots, emit }) {
20228
20297
  const { proxy: { $q } } = getCurrentInstance();
20229
20298
 
20230
- const $layout = inject(layoutKey, () => {
20299
+ const $layout = inject(layoutKey, emptyRenderFn);
20300
+ if ($layout === emptyRenderFn) {
20231
20301
  console.error('QHeader needs to be child of QLayout');
20232
- });
20302
+ return emptyRenderFn
20303
+ }
20233
20304
 
20234
20305
  const size = ref(parseInt(props.heightHint, 10));
20235
20306
  const revealed = ref(true);
@@ -21138,7 +21209,7 @@ function useMask (props, emit, emitValue, inputRef) {
21138
21209
  '^'
21139
21210
  + unmask.join('')
21140
21211
  + '(' + (unmaskChar === '' ? '.' : '[^' + unmaskChar + ']') + '+)?'
21141
- + '$'
21212
+ + (unmaskChar === '' ? '' : '[' + unmaskChar + ']*') + '$'
21142
21213
  ),
21143
21214
  extractLast = extract.length - 1,
21144
21215
  extractMatcher = extract.map((re, index) => {
@@ -22164,7 +22235,7 @@ var QList = createComponent({
22164
22235
  + (props.padding === true ? ' q-list--padding' : '')
22165
22236
  );
22166
22237
 
22167
- return () => h('div', { class: classes.value }, hSlot(slots.default))
22238
+ return () => h('div', { class: classes.value, role: 'list' }, hSlot(slots.default))
22168
22239
  }
22169
22240
  });
22170
22241
 
@@ -23205,7 +23276,7 @@ var QOptionGroup = createComponent({
23205
23276
  );
23206
23277
 
23207
23278
  const attrs = computed(() => {
23208
- const attrs = {};
23279
+ const attrs = { role: 'group' };
23209
23280
 
23210
23281
  if (props.type === 'radio') {
23211
23282
  attrs.role = 'radiogroup';
@@ -23270,10 +23341,17 @@ var QPage = createComponent({
23270
23341
  setup (props, { slots }) {
23271
23342
  const { proxy: { $q } } = getCurrentInstance();
23272
23343
 
23273
- const $layout = inject(layoutKey);
23274
- inject(pageContainerKey, () => {
23344
+ const $layout = inject(layoutKey, emptyRenderFn);
23345
+ if ($layout === emptyRenderFn) {
23346
+ console.error('QPage needs to be a deep child of QLayout');
23347
+ return emptyRenderFn
23348
+ }
23349
+
23350
+ const $pageContainer = inject(pageContainerKey, emptyRenderFn);
23351
+ if ($pageContainer === emptyRenderFn) {
23275
23352
  console.error('QPage needs to be child of QPageContainer');
23276
- });
23353
+ return emptyRenderFn
23354
+ }
23277
23355
 
23278
23356
  const style = computed(() => {
23279
23357
  const offset
@@ -23316,9 +23394,11 @@ var QPageContainer = createComponent({
23316
23394
  setup (_, { slots }) {
23317
23395
  const { proxy: { $q } } = getCurrentInstance();
23318
23396
 
23319
- const $layout = inject(layoutKey, () => {
23397
+ const $layout = inject(layoutKey, emptyRenderFn);
23398
+ if ($layout === emptyRenderFn) {
23320
23399
  console.error('QPageContainer needs to be child of QLayout');
23321
- });
23400
+ return emptyRenderFn
23401
+ }
23322
23402
 
23323
23403
  provide(pageContainerKey, true);
23324
23404
 
@@ -23368,9 +23448,11 @@ const usePageStickyProps = {
23368
23448
  function usePageSticky () {
23369
23449
  const { props, proxy: { $q } } = getCurrentInstance();
23370
23450
 
23371
- const $layout = inject(layoutKey, () => {
23451
+ const $layout = inject(layoutKey, emptyRenderFn);
23452
+ if ($layout === emptyRenderFn) {
23372
23453
  console.error('QPageSticky needs to be child of QLayout');
23373
- });
23454
+ return emptyRenderFn
23455
+ }
23374
23456
 
23375
23457
  const attach = computed(() => {
23376
23458
  const pos = props.position;
@@ -23583,6 +23665,12 @@ var QPageSticky = createComponent({
23583
23665
  }
23584
23666
  });
23585
23667
 
23668
+ function getBool (val, otherwise) {
23669
+ return [ true, false ].includes(val)
23670
+ ? val
23671
+ : otherwise
23672
+ }
23673
+
23586
23674
  var QPagination = createComponent({
23587
23675
  name: 'QPagination',
23588
23676
 
@@ -23594,22 +23682,20 @@ var QPagination = createComponent({
23594
23682
  required: true
23595
23683
  },
23596
23684
  min: {
23597
- type: Number,
23685
+ type: [ Number, String ],
23598
23686
  default: 1
23599
23687
  },
23600
23688
  max: {
23601
- type: Number,
23689
+ type: [ Number, String ],
23602
23690
  required: true
23603
23691
  },
23604
-
23605
- color: {
23606
- type: String,
23607
- default: 'primary'
23692
+ maxPages: {
23693
+ type: [ Number, String ],
23694
+ default: 0,
23695
+ validator: v => (
23696
+ (typeof v === 'string' ? parseInt(v, 10) : v) >= 0
23697
+ )
23608
23698
  },
23609
- textColor: String,
23610
-
23611
- activeColor: String,
23612
- activeTextColor: String,
23613
23699
 
23614
23700
  inputStyle: [ Array, String, Object ],
23615
23701
  inputClass: [ Array, String, Object ],
@@ -23643,11 +23729,6 @@ var QPagination = createComponent({
23643
23729
  type: Boolean,
23644
23730
  default: null
23645
23731
  },
23646
- maxPages: {
23647
- type: Number,
23648
- default: 0,
23649
- validator: v => v >= 0
23650
- },
23651
23732
 
23652
23733
  ripple: {
23653
23734
  type: [ Boolean, Object ],
@@ -23663,7 +23744,21 @@ var QPagination = createComponent({
23663
23744
  push: Boolean,
23664
23745
  glossy: Boolean,
23665
23746
 
23666
- dense: Boolean,
23747
+ color: {
23748
+ type: String,
23749
+ default: 'primary'
23750
+ },
23751
+ textColor: String,
23752
+
23753
+ activeDesign: {
23754
+ type: String,
23755
+ default: '',
23756
+ values: v => v === '' || btnDesignOptions.includes(v)
23757
+ },
23758
+ activeColor: String,
23759
+ activeTextColor: String,
23760
+
23761
+ gutter: String,
23667
23762
  padding: {
23668
23763
  type: String,
23669
23764
  default: '3px 2px'
@@ -23678,6 +23773,16 @@ var QPagination = createComponent({
23678
23773
 
23679
23774
  const isDark = useDark(props, $q);
23680
23775
 
23776
+ const minProp = computed(() => parseInt(props.min, 10));
23777
+ const maxProp = computed(() => parseInt(props.max, 10));
23778
+ const maxPagesProp = computed(() => parseInt(props.maxPages, 10));
23779
+
23780
+ const inputPlaceholder = computed(() => model.value + ' / ' + maxProp.value);
23781
+ const boundaryLinksProp = computed(() => getBool(props.boundaryLinks, props.input));
23782
+ const boundaryNumbersProp = computed(() => getBool(props.boundaryNumbers, !props.input));
23783
+ const directionLinksProp = computed(() => getBool(props.directionLinks, props.input));
23784
+ const ellipsesProp = computed(() => getBool(props.ellipses, !props.input));
23785
+
23681
23786
  const newPage = ref(null);
23682
23787
  const model = computed({
23683
23788
  get: () => props.modelValue,
@@ -23686,32 +23791,33 @@ var QPagination = createComponent({
23686
23791
  if (props.disable || isNaN(val)) {
23687
23792
  return
23688
23793
  }
23689
- const value = between(val, props.min, props.max);
23794
+ const value = between(val, minProp.value, maxProp.value);
23690
23795
  if (props.modelValue !== value) {
23691
23796
  emit('update:modelValue', value);
23692
23797
  }
23693
23798
  }
23694
23799
  });
23695
23800
 
23696
- watch(() => props.min + props.max, () => {
23801
+ watch(() => `${ minProp.value }|${ maxProp.value }`, () => {
23697
23802
  model.value = props.modelValue;
23698
23803
  });
23699
23804
 
23700
- function getBool (val, otherwise) {
23701
- return [ true, false ].includes(val)
23702
- ? val
23703
- : otherwise
23704
- }
23705
-
23706
23805
  const classes = computed(() =>
23707
23806
  'q-pagination row no-wrap items-center'
23708
23807
  + (props.disable === true ? ' disabled' : '')
23709
23808
  );
23710
- const inputPlaceholder = computed(() => model.value + ' / ' + props.max);
23711
- const __boundaryLinks = computed(() => getBool(props.boundaryLinks, props.input));
23712
- const __boundaryNumbers = computed(() => getBool(props.boundaryNumbers, !props.input));
23713
- const __directionLinks = computed(() => getBool(props.directionLinks, props.input));
23714
- const __ellipses = computed(() => getBool(props.ellipses, !props.input));
23809
+
23810
+ const gutterProp = computed(() => (
23811
+ props.gutter in btnPadding
23812
+ ? `${ btnPadding[ props.gutter ] }px`
23813
+ : props.gutter || null
23814
+ ));
23815
+ const gutterStyle = computed(() => (
23816
+ gutterProp.value !== null
23817
+ ? `--q-pagination-gutter-parent:-${ gutterProp.value };--q-pagination-gutter-child:${ gutterProp.value }`
23818
+ : null
23819
+ ));
23820
+
23715
23821
  const icons = computed(() => {
23716
23822
  const ico = [
23717
23823
  props.iconFirst || $q.iconSet.pagination.first,
@@ -23722,38 +23828,90 @@ var QPagination = createComponent({
23722
23828
  return $q.lang.rtl === true ? ico.reverse() : ico
23723
23829
  });
23724
23830
 
23725
- const attrs = computed(() => (
23726
- props.disable === true
23727
- ? { 'aria-disabled': 'true' }
23728
- : {}
23729
- ));
23831
+ const attrs = computed(() => ({
23832
+ 'aria-disabled': props.disable === true ? 'true' : 'false',
23833
+ role: 'navigation'
23834
+ }));
23730
23835
 
23836
+ const btnDesignProp = computed(() => getBtnDesign(props, 'flat'));
23731
23837
  const btnProps = computed(() => ({
23838
+ [ btnDesignProp.value ]: true,
23839
+
23732
23840
  round: props.round,
23733
23841
  rounded: props.rounded,
23734
23842
 
23735
- outline: props.outline,
23736
- unelevated: props.unelevated,
23737
- push: props.push,
23738
- glossy: props.glossy,
23739
-
23740
- dense: props.dense,
23741
23843
  padding: props.padding,
23742
23844
 
23743
23845
  color: props.color,
23744
- flat: true,
23846
+ textColor: props.textColor,
23847
+
23745
23848
  size: props.size,
23746
23849
  ripple: props.ripple !== null
23747
23850
  ? props.ripple
23748
23851
  : true
23749
23852
  }));
23750
23853
 
23854
+ const btnActiveDesignProp = computed(() => {
23855
+ // we also reset non-active design
23856
+ const acc = { [ btnDesignProp.value ]: false };
23857
+ if (props.activeDesign !== '') {
23858
+ acc[ props.activeDesign ] = true;
23859
+ }
23860
+ return acc
23861
+ });
23751
23862
  const activeBtnProps = computed(() => ({
23752
- flat: props.flat,
23863
+ ...btnActiveDesignProp.value,
23753
23864
  color: props.activeColor || props.color,
23754
23865
  textColor: props.activeTextColor || props.textColor
23755
23866
  }));
23756
23867
 
23868
+ const btnConfig = computed(() => {
23869
+ let maxPages = Math.max(
23870
+ maxPagesProp.value,
23871
+ 1 + (ellipsesProp.value ? 2 : 0) + (boundaryNumbersProp.value ? 2 : 0)
23872
+ );
23873
+
23874
+ const acc = {
23875
+ pgFrom: minProp.value,
23876
+ pgTo: maxProp.value,
23877
+ ellipsesStart: false,
23878
+ ellipsesEnd: false,
23879
+ boundaryStart: false,
23880
+ boundaryEnd: false,
23881
+ marginalStyle: {
23882
+ minWidth: `${ Math.max(2, String(maxProp.value).length) }em`
23883
+ }
23884
+ };
23885
+
23886
+ if (maxPagesProp.value && maxPages < (maxProp.value - minProp.value + 1)) {
23887
+ maxPages = 1 + Math.floor(maxPages / 2) * 2;
23888
+ acc.pgFrom = Math.max(minProp.value, Math.min(maxProp.value - maxPages + 1, props.modelValue - Math.floor(maxPages / 2)));
23889
+ acc.pgTo = Math.min(maxProp.value, acc.pgFrom + maxPages - 1);
23890
+
23891
+ if (boundaryNumbersProp.value) {
23892
+ acc.boundaryStart = true;
23893
+ acc.pgFrom++;
23894
+ }
23895
+
23896
+ if (ellipsesProp.value && acc.pgFrom > (minProp.value + (boundaryNumbersProp.value ? 1 : 0))) {
23897
+ acc.ellipsesStart = true;
23898
+ acc.pgFrom++;
23899
+ }
23900
+
23901
+ if (boundaryNumbersProp.value) {
23902
+ acc.boundaryEnd = true;
23903
+ acc.pgTo--;
23904
+ }
23905
+
23906
+ if (ellipsesProp.value && acc.pgTo < (maxProp.value - (boundaryNumbersProp.value ? 1 : 0))) {
23907
+ acc.ellipsesEnd = true;
23908
+ acc.pgTo--;
23909
+ }
23910
+ }
23911
+
23912
+ return acc
23913
+ });
23914
+
23757
23915
  function set (value) {
23758
23916
  model.value = value;
23759
23917
  }
@@ -23762,20 +23920,40 @@ var QPagination = createComponent({
23762
23920
  model.value = model.value + offset;
23763
23921
  }
23764
23922
 
23765
- function updateModel () {
23766
- model.value = newPage.value;
23767
- newPage.value = null;
23768
- }
23923
+ const inputEvents = computed(() => {
23924
+ function updateModel () {
23925
+ model.value = newPage.value;
23926
+ newPage.value = null;
23927
+ }
23769
23928
 
23770
- function getBtn (cfg, page) {
23771
- const data = { ...btnProps.value, ...cfg };
23929
+ return {
23930
+ 'onUpdate:modelValue': val => { newPage.value = val; },
23931
+ onKeyup: e => { isKeyCode(e, 13) === true && updateModel(); },
23932
+ onBlur: updateModel
23933
+ }
23934
+ });
23935
+
23936
+ function getBtn (cfg, page, active) {
23937
+ const data = {
23938
+ 'aria-label': page,
23939
+ 'aria-current': 'false',
23940
+ ...btnProps.value,
23941
+ ...cfg
23942
+ };
23943
+
23944
+ if (active === true) {
23945
+ Object.assign(data, {
23946
+ 'aria-current': 'true',
23947
+ ...activeBtnProps.value
23948
+ });
23949
+ }
23772
23950
 
23773
23951
  if (page !== void 0) {
23774
23952
  if (props.toFn !== void 0) {
23775
23953
  data.to = props.toFn(page);
23776
23954
  }
23777
23955
  else {
23778
- data.onClick = () => set(page);
23956
+ data.onClick = () => { set(page); };
23779
23957
  }
23780
23958
  }
23781
23959
 
@@ -23786,147 +23964,107 @@ var QPagination = createComponent({
23786
23964
  Object.assign(proxy, { set, setByOffset });
23787
23965
 
23788
23966
  return () => {
23789
- const
23790
- contentStart = [],
23791
- contentEnd = [],
23792
- contentMiddle = [];
23967
+ const contentStart = [];
23968
+ const contentEnd = [];
23969
+ let contentMiddle;
23970
+
23971
+ if (boundaryLinksProp.value === true) {
23972
+ contentStart.push(
23973
+ getBtn({
23974
+ key: 'bls',
23975
+ disable: props.disable || props.modelValue <= minProp.value,
23976
+ icon: icons.value[ 0 ]
23977
+ }, minProp.value)
23978
+ );
23793
23979
 
23794
- if (__boundaryLinks.value) {
23795
- contentStart.push(getBtn({
23796
- key: 'bls',
23797
- disable: props.disable || props.modelValue <= props.min,
23798
- icon: icons.value[ 0 ]
23799
- }, props.min));
23800
- contentEnd.unshift(getBtn({
23801
- key: 'ble',
23802
- disable: props.disable || props.modelValue >= props.max,
23803
- icon: icons.value[ 3 ]
23804
- }, props.max));
23805
- }
23806
-
23807
- if (__directionLinks.value) {
23808
- contentStart.push(getBtn({
23809
- key: 'bdp',
23810
- disable: props.disable || props.modelValue <= props.min,
23811
- icon: icons.value[ 1 ]
23812
- }, props.modelValue - 1));
23813
- contentEnd.unshift(getBtn({
23814
- key: 'bdn',
23815
- disable: props.disable || props.modelValue >= props.max,
23816
- icon: icons.value[ 2 ]
23817
- }, props.modelValue + 1));
23818
- }
23819
-
23820
- if (props.input === true) {
23821
- contentMiddle.push(h(QInput, {
23822
- class: 'inline',
23823
- style: {
23824
- width: `${ inputPlaceholder.value.length / 1.5 }em`
23825
- },
23826
- type: 'number',
23827
- dense: true,
23828
- value: newPage.value,
23829
- disable: props.disable,
23830
- dark: isDark.value,
23831
- borderless: true,
23832
- inputClass: props.inputClass,
23833
- inputStyle: props.inputStyle,
23834
- placeholder: inputPlaceholder.value,
23835
- min: props.min,
23836
- max: props.max,
23837
- 'onUpdate:modelValue' (value) { newPage.value = value; },
23838
- onKeyup (e) { isKeyCode(e, 13) === true && updateModel(); },
23839
- onBlur: updateModel
23840
- }));
23980
+ contentEnd.unshift(
23981
+ getBtn({
23982
+ key: 'ble',
23983
+ disable: props.disable || props.modelValue >= maxProp.value,
23984
+ icon: icons.value[ 3 ]
23985
+ }, maxProp.value)
23986
+ );
23841
23987
  }
23842
- else { // is type select
23843
- let
23844
- maxPages = Math.max(
23845
- props.maxPages,
23846
- 1 + (__ellipses.value ? 2 : 0) + (__boundaryNumbers.value ? 2 : 0)
23847
- ),
23848
- pgFrom = props.min,
23849
- pgTo = props.max,
23850
- ellipsesStart = false,
23851
- ellipsesEnd = false,
23852
- boundaryStart = false,
23853
- boundaryEnd = false;
23854
-
23855
- if (props.maxPages && maxPages < (props.max - props.min + 1)) {
23856
- maxPages = 1 + Math.floor(maxPages / 2) * 2;
23857
- pgFrom = Math.max(props.min, Math.min(props.max - maxPages + 1, props.modelValue - Math.floor(maxPages / 2)));
23858
- pgTo = Math.min(props.max, pgFrom + maxPages - 1);
23859
- if (__boundaryNumbers.value) {
23860
- boundaryStart = true;
23861
- pgFrom += 1;
23862
- }
23863
- if (__ellipses.value && pgFrom > (props.min + (__boundaryNumbers.value ? 1 : 0))) {
23864
- ellipsesStart = true;
23865
- pgFrom += 1;
23866
- }
23867
- if (__boundaryNumbers.value) {
23868
- boundaryEnd = true;
23869
- pgTo -= 1;
23870
- }
23871
- if (__ellipses.value && pgTo < (props.max - (__boundaryNumbers.value ? 1 : 0))) {
23872
- ellipsesEnd = true;
23873
- pgTo -= 1;
23874
- }
23988
+
23989
+ if (directionLinksProp.value === true) {
23990
+ contentStart.push(
23991
+ getBtn({
23992
+ key: 'bdp',
23993
+ disable: props.disable || props.modelValue <= minProp.value,
23994
+ icon: icons.value[ 1 ]
23995
+ }, props.modelValue - 1)
23996
+ );
23997
+
23998
+ contentEnd.unshift(
23999
+ getBtn({
24000
+ key: 'bdn',
24001
+ disable: props.disable || props.modelValue >= maxProp.value,
24002
+ icon: icons.value[ 2 ]
24003
+ }, props.modelValue + 1)
24004
+ );
24005
+ }
24006
+
24007
+ if (props.input !== true) { // has buttons instead of inputbox
24008
+ contentMiddle = [];
24009
+ const { pgFrom, pgTo, marginalStyle: style } = btnConfig.value;
24010
+
24011
+ if (btnConfig.value.boundaryStart === true) {
24012
+ const active = minProp.value === props.modelValue;
24013
+ contentStart.push(
24014
+ getBtn({
24015
+ key: 'bns',
24016
+ style,
24017
+ disable: props.disable,
24018
+ label: minProp.value
24019
+ }, minProp.value, active)
24020
+ );
23875
24021
  }
23876
- const style = {
23877
- minWidth: `${ Math.max(2, String(props.max).length) }em`
23878
- };
23879
- if (boundaryStart) {
23880
- const active = props.min === props.modelValue;
23881
- contentStart.push(getBtn({
23882
- key: 'bns',
23883
- style,
23884
- disable: props.disable,
23885
- flat: !active,
23886
- label: props.min,
23887
- ...(active ? activeBtnProps.value : {})
23888
- }, props.min));
23889
- }
23890
- if (boundaryEnd) {
23891
- const active = props.max === props.modelValue;
23892
- contentEnd.unshift(getBtn({
23893
- key: 'bne',
23894
- style,
23895
- disable: props.disable,
23896
- flat: !active,
23897
- label: props.max,
23898
- ...(active ? activeBtnProps.value : {})
23899
- }, props.max));
23900
- }
23901
- if (ellipsesStart) {
23902
- contentStart.push(getBtn({
23903
- key: 'bes',
23904
- style,
23905
- disable: props.disable,
23906
- label: '…',
23907
- ripple: false
23908
- }, pgFrom - 1));
23909
- }
23910
- if (ellipsesEnd) {
23911
- contentEnd.unshift(getBtn({
23912
- key: 'bee',
23913
- style,
23914
- disable: props.disable,
23915
- label: '…',
23916
- ripple: false
23917
- }, pgTo + 1));
24022
+
24023
+ if (btnConfig.value.boundaryEnd === true) {
24024
+ const active = maxProp.value === props.modelValue;
24025
+ contentEnd.unshift(
24026
+ getBtn({
24027
+ key: 'bne',
24028
+ style,
24029
+ disable: props.disable,
24030
+ label: maxProp.value
24031
+ }, maxProp.value, active)
24032
+ );
24033
+ }
24034
+
24035
+ if (btnConfig.value.ellipsesStart === true) {
24036
+ contentStart.push(
24037
+ getBtn({
24038
+ key: 'bes',
24039
+ style,
24040
+ disable: props.disable,
24041
+ label: '…',
24042
+ ripple: false
24043
+ }, pgFrom - 1)
24044
+ );
23918
24045
  }
24046
+
24047
+ if (btnConfig.value.ellipsesEnd === true) {
24048
+ contentEnd.unshift(
24049
+ getBtn({
24050
+ key: 'bee',
24051
+ style,
24052
+ disable: props.disable,
24053
+ label: '…',
24054
+ ripple: false
24055
+ }, pgTo + 1)
24056
+ );
24057
+ }
24058
+
23919
24059
  for (let i = pgFrom; i <= pgTo; i++) {
23920
- const btn = {
23921
- key: `bpg${ i }`,
23922
- style,
23923
- disable: props.disable,
23924
- label: i
23925
- };
23926
- if (i === props.modelValue) {
23927
- Object.assign(btn, activeBtnProps.value);
23928
- }
23929
- contentMiddle.push(getBtn(btn, i));
24060
+ contentMiddle.push(
24061
+ getBtn({
24062
+ key: `bpg${ i }`,
24063
+ style,
24064
+ disable: props.disable,
24065
+ label: i
24066
+ }, i, i === props.modelValue)
24067
+ );
23930
24068
  }
23931
24069
  }
23932
24070
 
@@ -23934,15 +24072,35 @@ var QPagination = createComponent({
23934
24072
  class: classes.value,
23935
24073
  ...attrs.value
23936
24074
  }, [
23937
- contentStart,
23938
-
23939
24075
  h('div', {
23940
- class: 'row justify-center'
24076
+ class: 'q-pagination__content row no-wrap items-center',
24077
+ style: gutterStyle.value
23941
24078
  }, [
23942
- contentMiddle
23943
- ]),
24079
+ ...contentStart,
24080
+
24081
+ props.input === true
24082
+ ? h(QInput, {
24083
+ class: 'inline',
24084
+ style: { width: `${ inputPlaceholder.value.length / 1.5 }em` },
24085
+ type: 'number',
24086
+ dense: true,
24087
+ value: newPage.value,
24088
+ disable: props.disable,
24089
+ dark: isDark.value,
24090
+ borderless: true,
24091
+ inputClass: props.inputClass,
24092
+ inputStyle: props.inputStyle,
24093
+ placeholder: inputPlaceholder.value,
24094
+ min: minProp.value,
24095
+ max: maxProp.value,
24096
+ ...inputEvents.value
24097
+ })
24098
+ : h('div', {
24099
+ class: 'q-pagination__middle row justify-center'
24100
+ }, contentMiddle),
23944
24101
 
23945
- contentEnd
24102
+ ...contentEnd
24103
+ ])
23946
24104
  ])
23947
24105
  }
23948
24106
  }
@@ -24676,10 +24834,7 @@ var QPullToRefresh = createComponent({
24676
24834
 
24677
24835
  const directives = computed(() => {
24678
24836
  // if props.disable === false
24679
- const modifiers = {
24680
- down: true,
24681
- mightPrevent: true
24682
- };
24837
+ const modifiers = { down: true };
24683
24838
 
24684
24839
  if (props.noMouse !== true) {
24685
24840
  modifiers.mouse = true;
@@ -30864,9 +31019,11 @@ var QStep = createComponent({
30864
31019
  setup (props, { slots, emit }) {
30865
31020
  const { proxy: { $q } } = getCurrentInstance();
30866
31021
 
30867
- const $stepper = inject(stepperKey, () => {
30868
- console.error('QStep needs to be child of QStepper');
30869
- });
31022
+ const $stepper = inject(stepperKey, emptyRenderFn);
31023
+ if ($stepper === emptyRenderFn) {
31024
+ console.error('QStep needs to be a child of QStepper');
31025
+ return emptyRenderFn
31026
+ }
30870
31027
 
30871
31028
  const { getCacheWithFn } = useCache();
30872
31029
 
@@ -30924,7 +31081,7 @@ var QStep = createComponent({
30924
31081
 
30925
31082
  return () => h(
30926
31083
  'div',
30927
- { ref: rootRef, class: 'q-stepper__step', ...scrollEvent.value },
31084
+ { ref: rootRef, class: 'q-stepper__step', role: 'tabpanel', ...scrollEvent.value },
30928
31085
  $stepper.value.vertical === true
30929
31086
  ? [
30930
31087
  h(StepHeader, {
@@ -33989,9 +34146,11 @@ var QTimelineEntry = createComponent({
33989
34146
  },
33990
34147
 
33991
34148
  setup (props, { slots }) {
33992
- const $timeline = inject(timelineKey, () => {
34149
+ const $timeline = inject(timelineKey, emptyRenderFn);
34150
+ if ($timeline === emptyRenderFn) {
33993
34151
  console.error('QTimelineEntry needs to be child of QTimeline');
33994
- });
34152
+ return emptyRenderFn
34153
+ }
33995
34154
 
33996
34155
  const classes = computed(() =>
33997
34156
  `q-timeline__entry q-timeline__entry--${ props.side }`
@@ -34080,7 +34239,7 @@ var QToolbar = createComponent({
34080
34239
  + (props.inset === true ? ' q-toolbar--inset' : '')
34081
34240
  );
34082
34241
 
34083
- return () => h('div', { class: classes.value }, hSlot(slots.default))
34242
+ return () => h('div', { class: classes.value, role: 'toolbar' }, hSlot(slots.default))
34084
34243
  }
34085
34244
  });
34086
34245
 
@@ -34154,6 +34313,7 @@ var QTree = createComponent({
34154
34313
 
34155
34314
  duration: Number,
34156
34315
  noConnectors: Boolean,
34316
+ noTransition: Boolean,
34157
34317
 
34158
34318
  noNodesLabel: String,
34159
34319
  noResultsLabel: String
@@ -34226,7 +34386,6 @@ var QTree = createComponent({
34226
34386
  const
34227
34387
  key = node[ props.nodeKey ],
34228
34388
  isParent = node[ props.childrenKey ] && node[ props.childrenKey ].length > 0,
34229
- isLeaf = isParent !== true,
34230
34389
  selectable = node.disabled !== true && hasSelection.value === true && node.selectable !== false,
34231
34390
  expandable = node.disabled !== true && node.expandable !== false,
34232
34391
  hasTicking = tickStrategy !== 'none',
@@ -34252,7 +34411,6 @@ var QTree = createComponent({
34252
34411
  key,
34253
34412
  parent,
34254
34413
  isParent,
34255
- isLeaf,
34256
34414
  lazy: localLazy,
34257
34415
  disabled: node.disabled,
34258
34416
  link: node.disabled !== true && (selectable === true || (expandable === true && (isParent === true || localLazy === true))),
@@ -34272,7 +34430,7 @@ var QTree = createComponent({
34272
34430
  leafTicking,
34273
34431
  ticked: strictTicking === true
34274
34432
  ? innerTicked.value.includes(key)
34275
- : (isLeaf === true ? innerTicked.value.includes(key) : false)
34433
+ : (isParent === true ? false : innerTicked.value.includes(key))
34276
34434
  };
34277
34435
 
34278
34436
  meta[ key ] = m;
@@ -34672,23 +34830,37 @@ var QTree = createComponent({
34672
34830
  ]),
34673
34831
 
34674
34832
  isParent === true
34675
- ? h(QSlideTransition, {
34676
- duration: props.duration,
34677
- onShow,
34678
- onHide
34679
- }, () => withDirectives(
34680
- h('div', {
34681
- class: 'q-tree__node-collapsible' + textColorClass.value,
34682
- key: `${ key }__q`
34683
- }, [
34684
- body,
34685
- h('div', {
34686
- class: 'q-tree__children'
34687
- + (m.disabled === true ? ' q-tree__node--disabled' : '')
34688
- }, children)
34689
- ]),
34690
- [ [ vShow, m.expanded ] ]
34691
- ))
34833
+ ? (
34834
+ props.noTransition === true
34835
+ ? h('div', {
34836
+ class: 'q-tree__node-collapsible' + textColorClass.value,
34837
+ key: `${ key }__q`
34838
+ }, [
34839
+ body,
34840
+ h('div', {
34841
+ class: 'q-tree__children'
34842
+ + (m.disabled === true ? ' q-tree__node--disabled' : '')
34843
+ }, m.expanded ? children : null)
34844
+ ])
34845
+
34846
+ : h(QSlideTransition, {
34847
+ duration: props.duration,
34848
+ onShow,
34849
+ onHide
34850
+ }, () => withDirectives(
34851
+ h('div', {
34852
+ class: 'q-tree__node-collapsible' + textColorClass.value,
34853
+ key: `${ key }__q`
34854
+ }, [
34855
+ body,
34856
+ h('div', {
34857
+ class: 'q-tree__children'
34858
+ + (m.disabled === true ? ' q-tree__node--disabled' : '')
34859
+ }, children)
34860
+ ]),
34861
+ [ [ vShow, m.expanded ] ]
34862
+ ))
34863
+ )
34692
34864
  : body
34693
34865
  ])
34694
34866
  }
@@ -35555,9 +35727,13 @@ var QUploaderAddTrigger = createComponent({
35555
35727
  name: 'QUploaderAddTrigger',
35556
35728
 
35557
35729
  setup () {
35558
- return inject(uploaderKey, () => {
35730
+ const $trigger = inject(uploaderKey, emptyRenderFn);
35731
+
35732
+ if ($trigger === emptyRenderFn) {
35559
35733
  console.error('QUploaderAddTrigger needs to be child of QUploader');
35560
- })
35734
+ }
35735
+
35736
+ return $trigger
35561
35737
  }
35562
35738
  });
35563
35739
 
@@ -35829,9 +36005,13 @@ function normalizeOptions (options) {
35829
36005
  fill: typeof options.fill === 'string' && options.fill.length > 0 ? options.fill : 'none',
35830
36006
 
35831
36007
  resize: options.resize === true,
35832
- useCSS: options.useCSS === true,
35833
- hideFromClone: options.hideFromClone === true,
35834
- keepToClone: options.keepToClone === true,
36008
+
36009
+ // account for UMD too where modifiers will be lowercased to work
36010
+ useCSS: options.useCSS === true || options.usecss === true,
36011
+ // account for UMD too where modifiers will be lowercased to work
36012
+ hideFromClone: options.hideFromClone === true || options.hidefromclone === true,
36013
+ // account for UMD too where modifiers will be lowercased to work
36014
+ keepToClone: options.keepToClone === true || options.keeptoclone === true,
35835
36015
 
35836
36016
  tween: options.tween === true,
35837
36017
  tweenFromOpacity: isNaN(options.tweenFromOpacity) === true ? 0.6 : parseFloat(options.tweenFromOpacity),
@@ -37156,9 +37336,16 @@ var TouchHold = createDirective({
37156
37336
 
37157
37337
  el.__qtouchhold = ctx;
37158
37338
 
37159
- modifiers.mouse === true && addEvt(ctx, 'main', [
37160
- [ el, 'mousedown', 'mouseStart', `passive${ modifiers.mouseCapture === true ? 'Capture' : '' }` ]
37161
- ]);
37339
+ if (modifiers.mouse === true) {
37340
+ // account for UMD too where modifiers will be lowercased to work
37341
+ const capture = modifiers.mouseCapture === true || modifiers.mousecapture === true
37342
+ ? 'Capture'
37343
+ : '';
37344
+
37345
+ addEvt(ctx, 'main', [
37346
+ [ el, 'mousedown', 'mouseStart', `passive${ capture }` ]
37347
+ ]);
37348
+ }
37162
37349
 
37163
37350
  client.has.touch === true && addEvt(ctx, 'main', [
37164
37351
  [ el, 'touchstart', 'touchStart', `passive${ modifiers.capture === true ? 'Capture' : '' }` ],
@@ -37386,18 +37573,32 @@ var TouchRepeat = createDirective({
37386
37573
 
37387
37574
  el.__qtouchrepeat = ctx;
37388
37575
 
37389
- modifiers.mouse === true && addEvt(ctx, 'main', [
37390
- [ el, 'mousedown', 'mouseStart', `passive${ modifiers.mouseCapture === true ? 'Capture' : '' }` ]
37391
- ]);
37576
+ if (modifiers.mouse === true) {
37577
+ // account for UMD too where modifiers will be lowercased to work
37578
+ const capture = modifiers.mouseCapture === true || modifiers.mousecapture === true
37579
+ ? 'Capture'
37580
+ : '';
37581
+
37582
+ addEvt(ctx, 'main', [
37583
+ [ el, 'mousedown', 'mouseStart', `passive${ capture }` ]
37584
+ ]);
37585
+ }
37392
37586
 
37393
37587
  client.has.touch === true && addEvt(ctx, 'main', [
37394
37588
  [ el, 'touchstart', 'touchStart', `passive${ modifiers.capture === true ? 'Capture' : '' }` ],
37395
37589
  [ el, 'touchend', 'noop', 'passiveCapture' ]
37396
37590
  ]);
37397
37591
 
37398
- keyboard.length > 0 && addEvt(ctx, 'main', [
37399
- [ el, 'keydown', 'keyboardStart', `notPassive${ modifiers.keyCapture === true ? 'Capture' : '' }` ]
37400
- ]);
37592
+ if (keyboard.length !== 0) {
37593
+ // account for UMD too where modifiers will be lowercased to work
37594
+ const capture = modifiers.keyCapture === true || modifiers.keycapture === true
37595
+ ? 'Capture'
37596
+ : '';
37597
+
37598
+ addEvt(ctx, 'main', [
37599
+ [ el, 'keydown', 'keyboardStart', `notPassive${ capture }` ]
37600
+ ]);
37601
+ }
37401
37602
  },
37402
37603
 
37403
37604
  updated (el, { oldValue, value }) {
@@ -37710,6 +37911,7 @@ var BottomSheet$1 = createComponent({
37710
37911
  action.class
37711
37912
  ],
37712
37913
  tabindex: 0,
37914
+ role: 'listitem',
37713
37915
  onClick () { onOk(action); },
37714
37916
  onKeyup (e) { e.keyCode === 13 && onOk(action); }
37715
37917
  }, [
@@ -37785,9 +37987,12 @@ var BottomSheet$1 = createComponent({
37785
37987
  child.push(
37786
37988
  props.grid === true
37787
37989
  ? h('div', {
37788
- class: 'row items-stretch justify-start'
37990
+ class: 'row items-stretch justify-start',
37991
+ role: 'list'
37789
37992
  }, getGrid())
37790
- : h('div', getList())
37993
+ : h('div', {
37994
+ role: 'list'
37995
+ }, getList())
37791
37996
  );
37792
37997
 
37793
37998
  return child
@@ -40083,7 +40288,7 @@ function runSequentialPromises (
40083
40288
  */
40084
40289
 
40085
40290
  const Quasar = {
40086
- version: '2.9.1',
40291
+ version: '2.10.0',
40087
40292
  install: installQuasar,
40088
40293
  lang: Plugin$8,
40089
40294
  iconSet: Plugin$7