quasar 2.4.11 → 2.5.1

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 (216) hide show
  1. package/dist/api/BottomSheet.json +4 -0
  2. package/dist/api/Dialog.json +5 -1
  3. package/dist/api/Notify.json +20 -10
  4. package/dist/api/QBtnDropdown.json +4 -2
  5. package/dist/api/QCheckbox.json +27 -0
  6. package/dist/api/QEditor.json +4 -2
  7. package/dist/api/QExpansionItem.json +6 -3
  8. package/dist/api/QFab.json +4 -2
  9. package/dist/api/QFabAction.json +4 -2
  10. package/dist/api/QFile.json +4 -2
  11. package/dist/api/QImg.json +1 -2
  12. package/dist/api/QInnerLoading.json +2 -1
  13. package/dist/api/QInput.json +4 -2
  14. package/dist/api/QPagination.json +4 -2
  15. package/dist/api/QRadio.json +18 -0
  16. package/dist/api/QRange.json +9 -0
  17. package/dist/api/QScrollArea.json +13 -5
  18. package/dist/api/QSelect.json +6 -3
  19. package/dist/api/QSlider.json +9 -0
  20. package/dist/api/QSplitter.json +8 -4
  21. package/dist/api/QTable.json +9 -0
  22. package/dist/api/QTime.json +8 -2
  23. package/dist/api/QToggle.json +24 -24
  24. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  25. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  26. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  27. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  28. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  29. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  30. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  31. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  32. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  33. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  34. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  35. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  36. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  37. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  40. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  41. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  42. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  43. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  44. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  45. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  46. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  47. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  48. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  49. package/dist/icon-set/svg-mdi-v4.umd.prod.js +1 -1
  50. package/dist/icon-set/svg-mdi-v5.umd.prod.js +1 -1
  51. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  52. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  53. package/dist/icon-set/themify.umd.prod.js +1 -1
  54. package/dist/lang/ar.umd.prod.js +1 -1
  55. package/dist/lang/az-Latn.umd.prod.js +1 -1
  56. package/dist/lang/bg.umd.prod.js +1 -1
  57. package/dist/lang/bn.umd.prod.js +1 -1
  58. package/dist/lang/ca.umd.prod.js +1 -1
  59. package/dist/lang/cs.umd.prod.js +1 -1
  60. package/dist/lang/da.umd.prod.js +1 -1
  61. package/dist/lang/de.umd.prod.js +1 -1
  62. package/dist/lang/el.umd.prod.js +1 -1
  63. package/dist/lang/en-GB.umd.prod.js +1 -1
  64. package/dist/lang/en-US.umd.prod.js +1 -1
  65. package/dist/lang/eo.umd.prod.js +1 -1
  66. package/dist/lang/es.umd.prod.js +1 -1
  67. package/dist/lang/et.umd.prod.js +1 -1
  68. package/dist/lang/fa-IR.umd.prod.js +1 -1
  69. package/dist/lang/fa.umd.prod.js +1 -1
  70. package/dist/lang/fi.umd.prod.js +1 -1
  71. package/dist/lang/fr.umd.prod.js +1 -1
  72. package/dist/lang/gn.umd.prod.js +1 -1
  73. package/dist/lang/he.umd.prod.js +1 -1
  74. package/dist/lang/hr.umd.prod.js +1 -1
  75. package/dist/lang/hu.umd.prod.js +1 -1
  76. package/dist/lang/id.umd.prod.js +1 -1
  77. package/dist/lang/is.umd.prod.js +1 -1
  78. package/dist/lang/it.umd.prod.js +1 -1
  79. package/dist/lang/ja.umd.prod.js +1 -1
  80. package/dist/lang/km.umd.prod.js +1 -1
  81. package/dist/lang/ko-KR.umd.prod.js +1 -1
  82. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  83. package/dist/lang/lt.umd.prod.js +1 -1
  84. package/dist/lang/lu.umd.prod.js +1 -1
  85. package/dist/lang/lv.umd.prod.js +1 -1
  86. package/dist/lang/ml.umd.prod.js +1 -1
  87. package/dist/lang/ms.umd.prod.js +1 -1
  88. package/dist/lang/my.umd.prod.js +1 -1
  89. package/dist/lang/nb-NO.umd.prod.js +1 -1
  90. package/dist/lang/nl.umd.prod.js +1 -1
  91. package/dist/lang/pl.umd.prod.js +1 -1
  92. package/dist/lang/pt-BR.umd.prod.js +1 -1
  93. package/dist/lang/pt.umd.prod.js +1 -1
  94. package/dist/lang/ro.umd.prod.js +1 -1
  95. package/dist/lang/ru.umd.prod.js +1 -1
  96. package/dist/lang/sk.umd.prod.js +1 -1
  97. package/dist/lang/sl.umd.prod.js +1 -1
  98. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  99. package/dist/lang/sr.umd.prod.js +1 -1
  100. package/dist/lang/sv.umd.prod.js +1 -1
  101. package/dist/lang/ta.umd.prod.js +1 -1
  102. package/dist/lang/th.umd.prod.js +1 -1
  103. package/dist/lang/tr.umd.prod.js +1 -1
  104. package/dist/lang/ug.umd.prod.js +1 -1
  105. package/dist/lang/uk.umd.prod.js +1 -1
  106. package/dist/lang/vi.umd.prod.js +1 -1
  107. package/dist/lang/zh-CN.umd.prod.js +1 -1
  108. package/dist/lang/zh-TW.umd.prod.js +1 -1
  109. package/dist/quasar.cjs.prod.js +2 -2
  110. package/dist/quasar.css +43 -10
  111. package/dist/quasar.esm.prod.js +2 -2
  112. package/dist/quasar.prod.css +1 -1
  113. package/dist/quasar.rtl.css +60 -23
  114. package/dist/quasar.rtl.prod.css +1 -1
  115. package/dist/quasar.sass +34 -11
  116. package/dist/quasar.umd.js +314 -157
  117. package/dist/quasar.umd.prod.js +2 -2
  118. package/dist/ssr-directives/Morph.js +1 -1
  119. package/dist/transforms/auto-import.json +39 -3
  120. package/dist/transforms/import-map.json +18 -0
  121. package/dist/types/api/slider.d.ts +6 -7
  122. package/dist/types/api/vue-prop-types.ts +15 -0
  123. package/dist/types/api.d.ts +1 -0
  124. package/dist/types/index.d.ts +110 -184
  125. package/dist/types/utils/date.d.ts +25 -13
  126. package/dist/types/utils/dom.d.ts +4 -2
  127. package/dist/types/utils.d.ts +3 -1
  128. package/dist/vetur/quasar-attributes.json +62 -42
  129. package/dist/vetur/quasar-tags.json +8 -3
  130. package/dist/web-types/web-types.json +103 -58
  131. package/package.json +13 -3
  132. package/src/components/avatar/__tests__/QAvatar.spec.js +121 -0
  133. package/src/components/badge/__tests__/QBadge.spec.js +74 -0
  134. package/src/components/breadcrumbs/QBreadcrumbs.js +1 -1
  135. package/src/components/btn/__tests__/QBtn.spec.js +55 -0
  136. package/src/components/btn/__tests__/use-btn.spec.js +189 -0
  137. package/src/components/btn-dropdown/QBtnDropdown.json +4 -2
  138. package/src/components/checkbox/QCheckbox.js +34 -3
  139. package/src/components/checkbox/QCheckbox.json +17 -0
  140. package/src/components/checkbox/QCheckbox.sass +17 -5
  141. package/src/components/checkbox/use-checkbox.js +4 -0
  142. package/src/components/checkbox/use-checkbox.json +18 -0
  143. package/src/components/chip/__tests__/QChip.spec.js +155 -0
  144. package/src/components/date/__tests__/QDate.spec.js +189 -0
  145. package/src/components/date/__tests__/use-datetime.spec.js +83 -0
  146. package/src/components/dialog/QDialog.js +1 -1
  147. package/src/components/dialog/__tests__/QDialog.spec.js +129 -0
  148. package/src/components/editor/QEditor.js +1 -1
  149. package/src/components/editor/QEditor.json +3 -1
  150. package/src/components/editor/__tests__/QEditor.spec.js +195 -0
  151. package/src/components/expansion-item/QExpansionItem.json +6 -3
  152. package/src/components/fab/use-fab.json +4 -2
  153. package/src/components/field/QField.sass +2 -0
  154. package/src/components/file/QFile.json +4 -2
  155. package/src/components/form/QForm.js +27 -25
  156. package/src/components/img/QImg.json +2 -3
  157. package/src/components/inner-loading/QInnerLoading.json +2 -1
  158. package/src/components/input/QInput.js +10 -1
  159. package/src/components/input/QInput.json +4 -2
  160. package/src/components/input/__tests__/QInput.spec.js +105 -0
  161. package/src/components/input/__tests__/use-mask.spec.js +29 -0
  162. package/src/components/menu/QMenu.js +2 -1
  163. package/src/components/menu/__tests__/QMenu.spec.js +610 -0
  164. package/src/components/menu/__tests__/WrapperOne.vue +51 -0
  165. package/src/components/menu/__tests__/WrapperTwo.vue +38 -0
  166. package/src/components/pagination/QPagination.json +4 -2
  167. package/src/components/radio/QRadio.js +26 -1
  168. package/src/components/radio/QRadio.json +16 -0
  169. package/src/components/radio/QRadio.sass +17 -6
  170. package/src/components/scroll-area/QScrollArea.json +13 -5
  171. package/src/components/select/QSelect.js +13 -9
  172. package/src/components/select/QSelect.json +6 -3
  173. package/src/components/select/QSelect.sass +1 -0
  174. package/src/components/select/__tests__/QSelect.spec.js +2003 -0
  175. package/src/components/select/__tests__/WrapperOne.vue +28 -0
  176. package/src/components/slider/use-slider.json +9 -0
  177. package/src/components/splitter/QSplitter.json +8 -4
  178. package/src/components/stepper/QStep.js +19 -14
  179. package/src/components/stepper/QStepper.sass +3 -0
  180. package/src/components/table/QTable.json +9 -0
  181. package/src/components/table/__tests__/QTable.spec.js +635 -0
  182. package/src/components/table/__tests__/QTd.spec.js +35 -0
  183. package/src/components/table/__tests__/QTh.spec.js +27 -0
  184. package/src/components/table/__tests__/QTr.spec.js +27 -0
  185. package/src/components/tabs/__tests__/QRouteTab.spec.js +9 -0
  186. package/src/components/tabs/__tests__/QTab.spec.js +79 -0
  187. package/src/components/tabs/__tests__/QTabs.spec.js +147 -0
  188. package/src/components/time/QTime.json +2 -2
  189. package/src/components/toggle/QToggle.js +5 -13
  190. package/src/components/toggle/QToggle.json +3 -12
  191. package/src/components/uploader/__tests__/QUploader.spec.js +161 -0
  192. package/src/components/virtual-scroll/use-virtual-scroll.js +9 -6
  193. package/src/composables/private/__tests__/FieldWrapper.vue +39 -0
  194. package/src/composables/private/__tests__/use-anchor.spec.js +99 -0
  195. package/src/composables/private/__tests__/use-field.spec.js +351 -0
  196. package/src/composables/private/__tests__/use-file.spec.js +69 -0
  197. package/src/composables/private/__tests__/use-form.spec.js +11 -0
  198. package/src/composables/private/__tests__/use-fullscreen.spec.js +37 -0
  199. package/src/composables/private/__tests__/use-model-toggle.spec.js +306 -0
  200. package/src/composables/private/__tests__/use-portal.spec.js +4 -0
  201. package/src/composables/private/__tests__/use-router-link.spec.js +55 -0
  202. package/src/composables/private/__tests__/use-size.spec.js +37 -0
  203. package/src/composables/private/__tests__/use-transition.spec.js +108 -0
  204. package/src/composables/private/__tests__/use-validate.spec.js +111 -0
  205. package/src/composables/private/use-field.js +5 -8
  206. package/src/composables/private/use-fullscreen.js +1 -1
  207. package/src/composables/private/use-model-toggle.js +1 -1
  208. package/src/composables/private/use-validate.js +22 -22
  209. package/src/plugins/BottomSheet.json +1 -0
  210. package/src/plugins/Dialog.json +1 -0
  211. package/src/plugins/Meta.js +1 -1
  212. package/src/plugins/Notify.json +20 -10
  213. package/src/plugins/Screen.js +11 -8
  214. package/src/utils/date.js +111 -32
  215. package/src/utils/private/global-dialog.json +3 -0
  216. package/src/utils/private/vm.js +14 -8
@@ -77,7 +77,8 @@
77
77
  },
78
78
 
79
79
  "input-class": {
80
- "type": [ "Array", "String", "Object" ],
80
+ "type": [ "String", "Array", "Object" ],
81
+ "tsType": "VueClassProp",
81
82
  "desc": "Class definitions to be attributed to the underlying selection container",
82
83
  "examples": [
83
84
  "my-special-class",
@@ -87,7 +88,8 @@
87
88
  },
88
89
 
89
90
  "input-style": {
90
- "type": [ "Array", "String", "Object" ],
91
+ "type": [ "String", "Array", "Object" ],
92
+ "tsType": "VueStyleProp",
91
93
  "desc": "Style definitions to be attributed to the underlying selection container",
92
94
  "examples": [
93
95
  "background-color: #ff0000",
@@ -33,7 +33,7 @@ export default createComponent({
33
33
  ? shouldFocus
34
34
  : props.noErrorFocus !== true
35
35
 
36
- validateIndex++
36
+ const index = ++validateIndex
37
37
 
38
38
  const emitEvent = (res, ref) => {
39
39
  emit('validation-' + (res === true ? 'success' : 'error'), ref)
@@ -47,7 +47,7 @@ export default createComponent({
47
47
  promises.push(
48
48
  valid.then(
49
49
  valid => ({ valid, comp }),
50
- error => ({ valid: false, comp, error })
50
+ err => ({ valid: false, comp, err })
51
51
  )
52
52
  )
53
53
  }
@@ -71,34 +71,33 @@ export default createComponent({
71
71
  return Promise.resolve(true)
72
72
  }
73
73
 
74
- const index = validateIndex
75
-
76
- return Promise.all(promises).then(
77
- res => {
78
- if (index === validateIndex) {
79
- const errors = res.filter(r => r.valid !== true)
74
+ return Promise.all(promises).then(res => {
75
+ const errors = res.filter(r => r.valid !== true)
80
76
 
81
- if (errors.length === 0) {
82
- emitEvent(true)
83
- return true
84
- }
77
+ if (errors.length === 0) {
78
+ index === validateIndex && emitEvent(true)
79
+ return true
80
+ }
85
81
 
86
- const { valid, comp } = errors[ 0 ]
82
+ const { valid, comp, err } = errors[ 0 ]
87
83
 
88
- emitEvent(false, comp)
84
+ // if not outdated already
85
+ if (index === validateIndex) {
86
+ err !== void 0 && console.error(err)
89
87
 
90
- if (
91
- focus === true
92
- && valid !== true
93
- && typeof comp.focus === 'function'
94
- ) {
95
- comp.focus()
96
- }
88
+ emitEvent(false, comp)
97
89
 
98
- return false
90
+ if (
91
+ focus === true
92
+ && valid !== true
93
+ && typeof comp.focus === 'function'
94
+ ) {
95
+ comp.focus()
99
96
  }
100
97
  }
101
- )
98
+
99
+ return false
100
+ })
102
101
  }
103
102
 
104
103
  function resetValidation () {
@@ -112,8 +111,11 @@ export default createComponent({
112
111
  function submit (evt) {
113
112
  evt !== void 0 && stopAndPrevent(evt)
114
113
 
114
+ const index = validateIndex + 1
115
+
115
116
  validate().then(val => {
116
- if (val === true) {
117
+ // if not outdated && validation succeeded
118
+ if (index === validateIndex && val === true) {
117
119
  if (props.onSubmit !== void 0) {
118
120
  emit('submit', evt)
119
121
  }
@@ -144,7 +146,7 @@ export default createComponent({
144
146
  const target = rootRef.value.querySelector('[autofocus], [data-autofocus]')
145
147
  || Array.prototype.find.call(rootRef.value.querySelectorAll('[tabindex]'), el => el.tabIndex > -1)
146
148
 
147
- target !== null && target !== void 0 && target.focus()
149
+ target !== null && target !== void 0 && target.focus({ preventScroll: true })
148
150
  })
149
151
  }
150
152
 
@@ -53,13 +53,11 @@
53
53
  },
54
54
 
55
55
  "ratio": {
56
- "type": [ "String", "Number" ],
57
56
  "desc": "Force the component to maintain an aspect ratio",
58
57
  "examples": [
59
58
  "(Number format) :ratio=\"16/9\"",
60
59
  "(String format) ratio=\"1\""
61
- ],
62
- "category": "style"
60
+ ]
63
61
  },
64
62
 
65
63
  "initial-ratio": {
@@ -162,6 +160,7 @@
162
160
 
163
161
  "img-style": {
164
162
  "type": "Object",
163
+ "tsType": "VueStyleObjectProp",
165
164
  "desc": "Apply CSS to the native img element",
166
165
  "examples": [ ":img-style=\"{ transform: 'rotate(45deg)' }\" "],
167
166
  "category": "style"
@@ -41,7 +41,8 @@
41
41
  },
42
42
 
43
43
  "label-style": {
44
- "type": [ "Array", "String", "Object" ],
44
+ "type": [ "String", "Array", "Object" ],
45
+ "tsType": "VueStyleProp",
45
46
  "desc": "Apply custom style to the label; Works along the 'label' prop only",
46
47
  "examples": [
47
48
  "font-size: 28px",
@@ -125,6 +125,15 @@ export default createComponent({
125
125
  return attrs
126
126
  })
127
127
 
128
+ // some browsers lose the native input value
129
+ // so we need to reattach it dynamically
130
+ // (like type="password" <-> type="text"; see #12078)
131
+ watch(() => props.type, () => {
132
+ if (inputRef.value) {
133
+ inputRef.value.value = props.modelValue
134
+ }
135
+ })
136
+
128
137
  watch(() => props.modelValue, v => {
129
138
  if (hasMask.value === true) {
130
139
  if (stopValueWatcher === true) {
@@ -177,7 +186,7 @@ export default createComponent({
177
186
  && inputRef.value !== el
178
187
  && (el === null || el.id !== state.targetUid.value)
179
188
  ) {
180
- inputRef.value.focus()
189
+ inputRef.value.focus({ preventScroll: true })
181
190
  }
182
191
  })
183
192
  }
@@ -53,7 +53,8 @@
53
53
  },
54
54
 
55
55
  "input-class": {
56
- "type": [ "Array", "String", "Object" ],
56
+ "type": [ "String", "Array", "Object" ],
57
+ "tsType": "VueClassProp",
57
58
  "desc": "Class definitions to be attributed to the underlying input tag",
58
59
  "examples": [
59
60
  "my-special-class",
@@ -63,7 +64,8 @@
63
64
  },
64
65
 
65
66
  "input-style": {
66
- "type": [ "Array", "String", "Object" ],
67
+ "type": [ "String", "Array", "Object" ],
68
+ "tsType": "VueStyleProp",
67
69
  "desc": "Style definitions to be attributed to the underlying input tag",
68
70
  "examples": [
69
71
  "background-color: #ff0000",
@@ -0,0 +1,105 @@
1
+ describe('Input API', () => {
2
+ describe('Props', () => {
3
+ describe('Category: content', () => {
4
+ describe('(prop): shadow-text', () => {
5
+ it.skip(' ', () => {
6
+ //
7
+ })
8
+ })
9
+
10
+ describe('(prop): autogrow', () => {
11
+ it.skip(' ', () => {
12
+ //
13
+ })
14
+ })
15
+ })
16
+
17
+ describe('Category: general', () => {
18
+ describe('(prop): type', () => {
19
+ it.skip(' ', () => {
20
+ //
21
+ })
22
+ })
23
+ })
24
+
25
+ describe('Category: model', () => {
26
+ describe('(prop): model-value', () => {
27
+ it.skip(' ', () => {
28
+ //
29
+ })
30
+ })
31
+
32
+ describe('(prop): debounce', () => {
33
+ it.skip(' ', () => {
34
+ //
35
+ })
36
+ })
37
+
38
+ describe('(prop): maxlength', () => {
39
+ it.skip(' ', () => {
40
+ //
41
+ })
42
+ })
43
+ })
44
+
45
+ describe('Category: style', () => {
46
+ describe('(prop): input-class', () => {
47
+ it.skip(' ', () => {
48
+ //
49
+ })
50
+ })
51
+
52
+ describe('(prop): input-style', () => {
53
+ it.skip(' ', () => {
54
+ //
55
+ })
56
+ })
57
+ })
58
+ })
59
+
60
+ describe('Events', () => {
61
+ describe('(event): update:model-value', () => {
62
+ it.skip(' ', () => {
63
+ //
64
+ })
65
+ })
66
+
67
+ describe('(event): focus', () => {
68
+ it.skip(' ', () => {
69
+ //
70
+ })
71
+ })
72
+
73
+ describe('(event): blur', () => {
74
+ it.skip(' ', () => {
75
+ //
76
+ })
77
+ })
78
+ })
79
+
80
+ describe('Methods', () => {
81
+ describe('(method): focus', () => {
82
+ it.skip(' ', () => {
83
+ //
84
+ })
85
+ })
86
+
87
+ describe('(method): blur', () => {
88
+ it.skip(' ', () => {
89
+ //
90
+ })
91
+ })
92
+
93
+ describe('(method): select', () => {
94
+ it.skip(' ', () => {
95
+ //
96
+ })
97
+ })
98
+
99
+ describe('(method): getNativeElement', () => {
100
+ it.skip(' ', () => {
101
+ //
102
+ })
103
+ })
104
+ })
105
+ })
@@ -0,0 +1,29 @@
1
+ describe('use-mask API', () => {
2
+ describe('Props', () => {
3
+ describe('Category: behavior', () => {
4
+ describe('(prop): mask', () => {
5
+ it.skip(' ', () => {
6
+ //
7
+ })
8
+ })
9
+
10
+ describe('(prop): fill-mask', () => {
11
+ it.skip(' ', () => {
12
+ //
13
+ })
14
+ })
15
+
16
+ describe('(prop): reverse-fill-mask', () => {
17
+ it.skip(' ', () => {
18
+ //
19
+ })
20
+ })
21
+
22
+ describe('(prop): unmasked-value', () => {
23
+ it.skip(' ', () => {
24
+ //
25
+ })
26
+ })
27
+ })
28
+ })
29
+ })
@@ -181,7 +181,7 @@ export default createComponent({
181
181
 
182
182
  if (node && node.contains(document.activeElement) !== true) {
183
183
  node = node.querySelector('[autofocus], [data-autofocus]') || node
184
- node.focus()
184
+ node.focus({ preventScroll: true })
185
185
  }
186
186
  })
187
187
  }
@@ -309,6 +309,7 @@ export default createComponent({
309
309
  // the focus is not in a vue child component
310
310
  if (
311
311
  handlesFocus.value === true
312
+ && props.noFocus !== true
312
313
  && childHasFocus(innerRef.value, evt.target) !== true
313
314
  ) {
314
315
  focus()