quasar 2.7.1 → 2.7.4
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.
- package/dist/api/QDialog.json +6 -0
- package/dist/api/QPagination.json +1 -1
- package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
- package/dist/icon-set/eva-icons.umd.prod.js +1 -1
- package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
- package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
- package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
- package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
- package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
- package/dist/icon-set/line-awesome.umd.prod.js +1 -1
- package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
- package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
- package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
- package/dist/icon-set/material-icons.umd.prod.js +1 -1
- package/dist/icon-set/material-symbols-outlined.umd.prod.js +2 -2
- package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
- package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
- package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
- package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
- package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
- package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
- package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
- package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
- package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
- package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
- package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
- package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
- package/dist/icon-set/svg-ionicons-v6.umd.prod.js +2 -2
- package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +2 -2
- package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
- package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
- package/dist/icon-set/svg-themify.umd.prod.js +1 -1
- package/dist/icon-set/themify.umd.prod.js +1 -1
- package/dist/lang/ar-TN.umd.prod.js +1 -1
- package/dist/lang/ar.umd.prod.js +1 -1
- package/dist/lang/az-Latn.umd.prod.js +1 -1
- package/dist/lang/bg.umd.prod.js +1 -1
- package/dist/lang/bn.umd.prod.js +1 -1
- package/dist/lang/ca.umd.prod.js +2 -2
- package/dist/lang/cs.umd.prod.js +1 -1
- package/dist/lang/da.umd.prod.js +1 -1
- package/dist/lang/de.umd.prod.js +1 -1
- package/dist/lang/el.umd.prod.js +1 -1
- package/dist/lang/en-GB.umd.prod.js +1 -1
- package/dist/lang/en-US.umd.prod.js +1 -1
- package/dist/lang/eo.umd.prod.js +1 -1
- package/dist/lang/es.umd.prod.js +1 -1
- package/dist/lang/et.umd.prod.js +1 -1
- package/dist/lang/eu.umd.prod.js +1 -1
- package/dist/lang/fa-IR.umd.prod.js +1 -1
- package/dist/lang/fa.umd.prod.js +1 -1
- package/dist/lang/fi.umd.prod.js +1 -1
- package/dist/lang/fr.umd.prod.js +1 -1
- package/dist/lang/gn.umd.prod.js +1 -1
- package/dist/lang/he.umd.prod.js +1 -1
- package/dist/lang/hr.umd.prod.js +1 -1
- package/dist/lang/hu.umd.prod.js +1 -1
- package/dist/lang/id.umd.prod.js +1 -1
- package/dist/lang/is.umd.prod.js +1 -1
- package/dist/lang/it.umd.prod.js +1 -1
- package/dist/lang/ja.umd.prod.js +1 -1
- package/dist/lang/km.umd.prod.js +1 -1
- package/dist/lang/ko-KR.umd.prod.js +2 -2
- package/dist/lang/kur-CKB.umd.prod.js +1 -1
- package/dist/lang/kz.umd.prod.js +1 -1
- package/dist/lang/lt.umd.prod.js +1 -1
- package/dist/lang/lu.umd.prod.js +1 -1
- package/dist/lang/lv.umd.prod.js +1 -1
- package/dist/lang/ml.umd.prod.js +1 -1
- package/dist/lang/mm.umd.prod.js +1 -1
- package/dist/lang/ms.umd.prod.js +1 -1
- package/dist/lang/my.umd.prod.js +1 -1
- package/dist/lang/nb-NO.umd.prod.js +1 -1
- package/dist/lang/nl.umd.prod.js +1 -1
- package/dist/lang/pl.umd.prod.js +1 -1
- package/dist/lang/pt-BR.umd.prod.js +1 -1
- package/dist/lang/pt.umd.prod.js +1 -1
- package/dist/lang/ro.umd.prod.js +1 -1
- package/dist/lang/ru.umd.prod.js +1 -1
- package/dist/lang/sk.umd.prod.js +1 -1
- package/dist/lang/sl.umd.prod.js +1 -1
- package/dist/lang/sm.umd.prod.js +6 -0
- package/dist/lang/sr-CYR.umd.prod.js +1 -1
- package/dist/lang/sr.umd.prod.js +1 -1
- package/dist/lang/sv.umd.prod.js +1 -1
- package/dist/lang/ta.umd.prod.js +1 -1
- package/dist/lang/th.umd.prod.js +1 -1
- package/dist/lang/tr.umd.prod.js +1 -1
- package/dist/lang/ug.umd.prod.js +1 -1
- package/dist/lang/uk.umd.prod.js +1 -1
- package/dist/lang/uz-Cyrl.umd.prod.js +6 -0
- package/dist/lang/uz-Latn.umd.prod.js +6 -0
- package/dist/lang/vi.umd.prod.js +1 -1
- package/dist/lang/zh-CN.umd.prod.js +1 -1
- package/dist/lang/zh-TW.umd.prod.js +1 -1
- package/dist/quasar.cjs.prod.js +2 -2
- package/dist/quasar.css +10 -3
- package/dist/quasar.esm.prod.js +2 -2
- package/dist/quasar.prod.css +1 -1
- package/dist/quasar.rtl.css +11 -3
- package/dist/quasar.rtl.prod.css +1 -1
- package/dist/quasar.sass +10 -4
- package/dist/quasar.umd.js +77 -55
- package/dist/quasar.umd.prod.js +2 -2
- package/dist/types/index.d.ts +8 -1
- package/dist/vetur/quasar-attributes.json +4 -0
- package/dist/vetur/quasar-tags.json +2 -1
- package/dist/web-types/web-types.json +12 -2
- package/icon-set/material-symbols-outlined.js +87 -87
- package/icon-set/material-symbols-outlined.mjs +87 -87
- package/icon-set/svg-ionicons-v6.js +14 -15
- package/icon-set/svg-ionicons-v6.mjs +14 -15
- package/icon-set/svg-material-symbols-outlined.js +151 -151
- package/icon-set/svg-material-symbols-outlined.mjs +151 -151
- package/lang/ca.js +31 -31
- package/lang/ca.mjs +31 -31
- package/lang/index.json +12 -0
- package/lang/ko-KR.js +21 -21
- package/lang/ko-KR.mjs +21 -21
- package/lang/sm.js +96 -0
- package/lang/sm.mjs +91 -0
- package/lang/uz-Cyrl.js +98 -0
- package/lang/uz-Cyrl.mjs +93 -0
- package/lang/uz-Latn.js +102 -0
- package/lang/uz-Latn.mjs +97 -0
- package/package.json +11 -11
- package/src/components/dialog/QDialog.js +3 -1
- package/src/components/dialog/QDialog.json +7 -0
- package/src/components/file/QFile.js +6 -1
- package/src/components/icon/QIcon.sass +3 -2
- package/src/components/img/QImg.sass +1 -0
- package/src/components/input/QInput.js +7 -1
- package/src/components/menu/__tests__/QMenu.spec.js +23 -23
- package/src/components/pagination/QPagination.json +1 -1
- package/src/components/scroll-area/QScrollArea.js +4 -2
- package/src/components/select/QSelect.js +28 -18
- package/src/components/select/__tests__/QSelect.spec.js +427 -451
- package/src/components/table/QTable.js +0 -1
- package/src/components/table/QTable.sass +1 -1
- package/src/components/timeline/QTimeline.sass +4 -0
- package/src/components/uploader/uploader-core.js +1 -0
- package/src/components/virtual-scroll/use-virtual-scroll.js +6 -1
- package/src/composables/private/__tests__/use-anchor.spec.js +6 -6
- package/src/composables/private/__tests__/use-field.spec.js +7 -7
- package/src/composables/private/__tests__/use-model-toggle.spec.js +18 -17
- package/src/composables/private/__tests__/use-transition.spec.js +5 -5
- package/src/composables/private/__tests__/use-validate.spec.js +4 -4
- package/src/composables/private/use-anchor.js +1 -1
- package/src/composables/private/use-field.js +1 -1
- package/src/composables/private/use-key-composition.js +10 -14
- package/src/directives/Ripple.js +5 -9
- package/src/utils/date.js +2 -2
- package/src/components/select/__tests__/WrapperOne.vue +0 -28
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "quasar",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.4",
|
|
4
4
|
"description": "Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time",
|
|
5
5
|
"main": "dist/quasar.cjs.prod.js",
|
|
6
6
|
"module": "dist/quasar.esm.prod.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"lint": "eslint --ext .js,.vue src dev",
|
|
31
31
|
"lint-fix": "eslint --ext .js,.vue src dev --fix",
|
|
32
32
|
"test:component": "cd ./dev && cypress open-ct && cd ..",
|
|
33
|
-
"test:component:ci": "cd ./dev && cypress run-ct && cd ..",
|
|
33
|
+
"test:component:ci": "cd ./dev && cypress run-ct --record --parallel && cd ..",
|
|
34
34
|
"test:create": "node ./test/cypress/helpers/create-spec.js -c"
|
|
35
35
|
},
|
|
36
36
|
"repository": {
|
|
@@ -65,25 +65,25 @@
|
|
|
65
65
|
},
|
|
66
66
|
"homepage": "https://quasar.dev",
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@quasar/app-vite": "^1.0.
|
|
68
|
+
"@quasar/app-vite": "^1.0.1",
|
|
69
69
|
"@quasar/extras": "^1.12.0",
|
|
70
70
|
"@quasar/quasar-app-extension-testing-e2e-cypress": "^4.1.2",
|
|
71
71
|
"@rollup/plugin-node-resolve": "^11.2.1",
|
|
72
72
|
"@rollup/plugin-replace": "^2.3.3",
|
|
73
|
-
"autoprefixer": "^10.4.
|
|
73
|
+
"autoprefixer": "^10.4.7",
|
|
74
74
|
"babel-preset-es2015-rollup": "^3.0.0",
|
|
75
75
|
"cli-highlight": "^2.1.11",
|
|
76
|
-
"cssnano": "^5.1.
|
|
77
|
-
"diff": "^5.
|
|
76
|
+
"cssnano": "^5.1.12",
|
|
77
|
+
"diff": "^5.1.0",
|
|
78
78
|
"eslint": "^7.4.0",
|
|
79
79
|
"eslint-config-standard": "^17.0.0",
|
|
80
|
-
"eslint-plugin-import": "^2.19.1",
|
|
81
|
-
"eslint-plugin-n": "^15.0.0",
|
|
82
|
-
"eslint-plugin-promise": "^6.0.0",
|
|
83
80
|
"eslint-friendly-formatter": "^4.0.1",
|
|
84
81
|
"eslint-plugin-cypress": "^2.12.1",
|
|
82
|
+
"eslint-plugin-import": "^2.19.1",
|
|
83
|
+
"eslint-plugin-n": "^15.0.0",
|
|
85
84
|
"eslint-plugin-no-only-tests": "^2.6.0",
|
|
86
85
|
"eslint-plugin-node": "^11.1.0",
|
|
86
|
+
"eslint-plugin-promise": "^6.0.0",
|
|
87
87
|
"eslint-plugin-vue": "^8.0.0",
|
|
88
88
|
"fast-glob": "^3.2.7",
|
|
89
89
|
"module-alias": "^2.2.2",
|
|
@@ -95,8 +95,8 @@
|
|
|
95
95
|
"rollup": "^2.34.0",
|
|
96
96
|
"table": "^6.0.4",
|
|
97
97
|
"uglify-es": "^3.3.9",
|
|
98
|
-
"vue": "^3.
|
|
99
|
-
"vue-router": "^4.0.
|
|
98
|
+
"vue": "^3.2.37",
|
|
99
|
+
"vue-router": "^4.0.16",
|
|
100
100
|
"yargs": "^17.3.0"
|
|
101
101
|
},
|
|
102
102
|
"vetur": {
|
|
@@ -47,6 +47,7 @@ export default createComponent({
|
|
|
47
47
|
|
|
48
48
|
persistent: Boolean,
|
|
49
49
|
autoClose: Boolean,
|
|
50
|
+
allowFocusOutside: Boolean,
|
|
50
51
|
|
|
51
52
|
noEscDismiss: Boolean,
|
|
52
53
|
noBackdropDismiss: Boolean,
|
|
@@ -351,7 +352,8 @@ export default createComponent({
|
|
|
351
352
|
function onFocusChange (evt) {
|
|
352
353
|
// the focus is not in a vue child component
|
|
353
354
|
if (
|
|
354
|
-
|
|
355
|
+
props.allowFocusOutside !== true
|
|
356
|
+
&& portalIsAccessible.value === true
|
|
355
357
|
&& childHasFocus(innerRef.value, evt.target) !== true
|
|
356
358
|
) {
|
|
357
359
|
focus('[tabindex]:not([tabindex="-1"])')
|
|
@@ -92,6 +92,13 @@
|
|
|
92
92
|
"desc": "Do not shake up the Dialog to catch user's attention",
|
|
93
93
|
"category": "behavior",
|
|
94
94
|
"addedIn": "v2.1.1"
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
"allow-focus-outside": {
|
|
98
|
+
"type": "Boolean",
|
|
99
|
+
"desc": "Allow elements outside of the Dialog to be focusable; By default, for accessibility reasons, QDialog does not allow outer focus",
|
|
100
|
+
"category": "behavior",
|
|
101
|
+
"addedIn": "v2.7.2"
|
|
95
102
|
}
|
|
96
103
|
},
|
|
97
104
|
|
|
@@ -103,6 +103,11 @@ export default createComponent({
|
|
|
103
103
|
disabled: state.editable.value !== true
|
|
104
104
|
}))
|
|
105
105
|
|
|
106
|
+
const fieldClass = computed(() =>
|
|
107
|
+
'q-file q-field--auto-height'
|
|
108
|
+
+ (dnd.value === true ? ' q-file--dnd' : '')
|
|
109
|
+
)
|
|
110
|
+
|
|
106
111
|
const isAppending = computed(() =>
|
|
107
112
|
props.multiple === true && props.append === true
|
|
108
113
|
)
|
|
@@ -235,7 +240,7 @@ export default createComponent({
|
|
|
235
240
|
}
|
|
236
241
|
|
|
237
242
|
Object.assign(state, {
|
|
238
|
-
fieldClass
|
|
243
|
+
fieldClass,
|
|
239
244
|
emitValue,
|
|
240
245
|
hasValue,
|
|
241
246
|
inputRef,
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
line-height: 1
|
|
3
3
|
width: 1em
|
|
4
4
|
height: 1em
|
|
5
|
+
flex-shrink: 0
|
|
5
6
|
letter-spacing: normal
|
|
6
7
|
text-transform: none
|
|
7
8
|
white-space: nowrap
|
|
@@ -21,8 +22,8 @@
|
|
|
21
22
|
|
|
22
23
|
> svg,
|
|
23
24
|
> img
|
|
24
|
-
width:
|
|
25
|
-
height:
|
|
25
|
+
width: 100%
|
|
26
|
+
height: 100%
|
|
26
27
|
|
|
27
28
|
.q-icon,
|
|
28
29
|
.material-icons,
|
|
@@ -208,7 +208,7 @@ export default createComponent({
|
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
function onInput (e) {
|
|
211
|
-
if (!e || !e.target
|
|
211
|
+
if (!e || !e.target) {
|
|
212
212
|
return
|
|
213
213
|
}
|
|
214
214
|
|
|
@@ -219,6 +219,12 @@ export default createComponent({
|
|
|
219
219
|
|
|
220
220
|
const val = e.target.value
|
|
221
221
|
|
|
222
|
+
if (e.target.qComposing === true) {
|
|
223
|
+
temp.value = val
|
|
224
|
+
|
|
225
|
+
return
|
|
226
|
+
}
|
|
227
|
+
|
|
222
228
|
if (hasMask.value === true) {
|
|
223
229
|
updateMaskValue(val, false, e.inputType)
|
|
224
230
|
}
|
|
@@ -15,7 +15,7 @@ describe('Menu API', () => {
|
|
|
15
15
|
describe('(prop): touch-position', () => {
|
|
16
16
|
it('should show menu at the position of the click', () => {
|
|
17
17
|
mount(WrapperOne, {
|
|
18
|
-
|
|
18
|
+
props: {
|
|
19
19
|
'touch-position': true
|
|
20
20
|
}
|
|
21
21
|
})
|
|
@@ -71,7 +71,7 @@ describe('Menu API', () => {
|
|
|
71
71
|
|
|
72
72
|
it('should not close the menu when clicking outside the menu when persistent', () => {
|
|
73
73
|
mount(WrapperOne, {
|
|
74
|
-
|
|
74
|
+
props: {
|
|
75
75
|
persistent: true
|
|
76
76
|
}
|
|
77
77
|
})
|
|
@@ -89,7 +89,7 @@ describe('Menu API', () => {
|
|
|
89
89
|
|
|
90
90
|
it('should not close the menu when hitting the escape key when persistent', () => {
|
|
91
91
|
mount(WrapperOne, {
|
|
92
|
-
|
|
92
|
+
props: {
|
|
93
93
|
persistent: true
|
|
94
94
|
}
|
|
95
95
|
})
|
|
@@ -129,7 +129,7 @@ describe('Menu API', () => {
|
|
|
129
129
|
|
|
130
130
|
it('should close the menu when clicking a menu child without v-close-popup when auto-close is true', () => {
|
|
131
131
|
mount(WrapperOne, {
|
|
132
|
-
|
|
132
|
+
props: {
|
|
133
133
|
'auto-close': true
|
|
134
134
|
}
|
|
135
135
|
})
|
|
@@ -174,7 +174,7 @@ describe('Menu API', () => {
|
|
|
174
174
|
|
|
175
175
|
it('should not switch focus back to parent element when closing if no-refocus is true', () => {
|
|
176
176
|
mount(WrapperOne, {
|
|
177
|
-
|
|
177
|
+
props: {
|
|
178
178
|
'no-refocus': true
|
|
179
179
|
}
|
|
180
180
|
})
|
|
@@ -208,7 +208,7 @@ describe('Menu API', () => {
|
|
|
208
208
|
|
|
209
209
|
it('should no switch focus to the menu when opening with no-focus is true', () => {
|
|
210
210
|
mount(WrapperOne, {
|
|
211
|
-
|
|
211
|
+
props: {
|
|
212
212
|
'no-focus': true
|
|
213
213
|
}
|
|
214
214
|
})
|
|
@@ -226,7 +226,7 @@ describe('Menu API', () => {
|
|
|
226
226
|
describe('(prop): fit', () => {
|
|
227
227
|
it('should show a menu that matches the full with of the target when fit is supplied', () => {
|
|
228
228
|
mount(WrapperOne, {
|
|
229
|
-
|
|
229
|
+
props: {
|
|
230
230
|
target: '.other-target',
|
|
231
231
|
fit: true
|
|
232
232
|
}
|
|
@@ -245,7 +245,7 @@ describe('Menu API', () => {
|
|
|
245
245
|
|
|
246
246
|
it('should show a menu that not matches the full with of the target when fit is false', () => {
|
|
247
247
|
mount(WrapperOne, {
|
|
248
|
-
|
|
248
|
+
props: {
|
|
249
249
|
target: '.other-target',
|
|
250
250
|
fit: false
|
|
251
251
|
}
|
|
@@ -266,7 +266,7 @@ describe('Menu API', () => {
|
|
|
266
266
|
describe('(prop): cover', () => {
|
|
267
267
|
it('should show a menu that overlays the target when using cover', () => {
|
|
268
268
|
mount(WrapperOne, {
|
|
269
|
-
|
|
269
|
+
props: {
|
|
270
270
|
cover: true
|
|
271
271
|
}
|
|
272
272
|
})
|
|
@@ -279,7 +279,7 @@ describe('Menu API', () => {
|
|
|
279
279
|
|
|
280
280
|
it('should show a menu that overlays the target when using cover', () => {
|
|
281
281
|
mount(WrapperOne, {
|
|
282
|
-
|
|
282
|
+
props: {
|
|
283
283
|
cover: true,
|
|
284
284
|
target: '.other-target'
|
|
285
285
|
}
|
|
@@ -293,7 +293,7 @@ describe('Menu API', () => {
|
|
|
293
293
|
|
|
294
294
|
it('should ignore self property when using cover', () => {
|
|
295
295
|
mount(WrapperOne, {
|
|
296
|
-
|
|
296
|
+
props: {
|
|
297
297
|
cover: true,
|
|
298
298
|
self: 'center right',
|
|
299
299
|
target: '.other-target'
|
|
@@ -328,7 +328,7 @@ describe('Menu API', () => {
|
|
|
328
328
|
horizontalSelf.forEach((hS) => {
|
|
329
329
|
it(`should position Anchor(${ vA } ${ hA }) & Self(${ vS } ${ hS }) correctly`, () => {
|
|
330
330
|
mount(WrapperOne, {
|
|
331
|
-
|
|
331
|
+
props: {
|
|
332
332
|
anchor: `${ vA } ${ hA }`,
|
|
333
333
|
self: `${ vS } ${ hS }`
|
|
334
334
|
}
|
|
@@ -357,7 +357,7 @@ describe('Menu API', () => {
|
|
|
357
357
|
verticalSelf.forEach((vS) => {
|
|
358
358
|
it(`should offset vertical position Anchor(${ vA } left) & Self(${ vS } left) correctly`, () => {
|
|
359
359
|
mount(WrapperOne, {
|
|
360
|
-
|
|
360
|
+
props: {
|
|
361
361
|
anchor: `${ vA } left`,
|
|
362
362
|
self: `${ vS } left`,
|
|
363
363
|
offset: [ 0, 20 ]
|
|
@@ -378,7 +378,7 @@ describe('Menu API', () => {
|
|
|
378
378
|
horizontalSelf.forEach((hS) => {
|
|
379
379
|
it(`should offset horizontal position Anchor(top ${ hA }) & Self(top ${ hS }) correctly`, () => {
|
|
380
380
|
mount(WrapperOne, {
|
|
381
|
-
|
|
381
|
+
props: {
|
|
382
382
|
anchor: `top ${ hA }`,
|
|
383
383
|
self: `top ${ hS }`,
|
|
384
384
|
offset: [ 20, 0 ]
|
|
@@ -399,7 +399,7 @@ describe('Menu API', () => {
|
|
|
399
399
|
describe('(prop): dark', () => {
|
|
400
400
|
it('should set the --q-dark color as background and white text color', () => {
|
|
401
401
|
mount(WrapperOne, {
|
|
402
|
-
|
|
402
|
+
props: {
|
|
403
403
|
dark: true
|
|
404
404
|
}
|
|
405
405
|
})
|
|
@@ -414,7 +414,7 @@ describe('Menu API', () => {
|
|
|
414
414
|
describe('(prop): square', () => {
|
|
415
415
|
it('should not have border-radius when using this prop', () => {
|
|
416
416
|
mount(WrapperOne, {
|
|
417
|
-
|
|
417
|
+
props: {
|
|
418
418
|
square: true
|
|
419
419
|
}
|
|
420
420
|
})
|
|
@@ -429,7 +429,7 @@ describe('Menu API', () => {
|
|
|
429
429
|
it('should specify a max-height when setting this prop', () => {
|
|
430
430
|
const maxHeight = '30px'
|
|
431
431
|
mount(WrapperOne, {
|
|
432
|
-
|
|
432
|
+
props: {
|
|
433
433
|
maxHeight
|
|
434
434
|
}
|
|
435
435
|
})
|
|
@@ -444,7 +444,7 @@ describe('Menu API', () => {
|
|
|
444
444
|
it('should specify a max-width when setting this prop', () => {
|
|
445
445
|
const maxWidth = '30px'
|
|
446
446
|
mount(WrapperOne, {
|
|
447
|
-
|
|
447
|
+
props: {
|
|
448
448
|
maxWidth
|
|
449
449
|
}
|
|
450
450
|
})
|
|
@@ -470,7 +470,7 @@ describe('Menu API', () => {
|
|
|
470
470
|
it('should emit @escape-key event when escape key is pressed', () => {
|
|
471
471
|
const fn = cy.stub()
|
|
472
472
|
mount(WrapperOne, {
|
|
473
|
-
|
|
473
|
+
props: {
|
|
474
474
|
onEscapeKey: fn
|
|
475
475
|
}
|
|
476
476
|
})
|
|
@@ -493,7 +493,7 @@ describe('Menu API', () => {
|
|
|
493
493
|
it('should not emit @escape-key event when menu is persistent', () => {
|
|
494
494
|
const fn = cy.stub()
|
|
495
495
|
mount(WrapperOne, {
|
|
496
|
-
|
|
496
|
+
props: {
|
|
497
497
|
onEscapeKey: fn,
|
|
498
498
|
persistent: true
|
|
499
499
|
}
|
|
@@ -520,7 +520,7 @@ describe('Menu API', () => {
|
|
|
520
520
|
describe('(method): updatePosition', () => {
|
|
521
521
|
it('should reposition the menu when it is no longer in correct position', () => {
|
|
522
522
|
mount(WrapperTwo, {
|
|
523
|
-
|
|
523
|
+
props: {
|
|
524
524
|
anchor: 'bottom left',
|
|
525
525
|
self: 'bottom left'
|
|
526
526
|
}
|
|
@@ -564,7 +564,7 @@ describe('Menu API', () => {
|
|
|
564
564
|
describe('(method): focus', () => {
|
|
565
565
|
it('should focus the menu', () => {
|
|
566
566
|
mount(WrapperOne, {
|
|
567
|
-
|
|
567
|
+
props: {
|
|
568
568
|
'no-focus': true
|
|
569
569
|
}
|
|
570
570
|
})
|
|
@@ -586,7 +586,7 @@ describe('Menu API', () => {
|
|
|
586
586
|
|
|
587
587
|
it('should focus the autofocus element inside the menu', () => {
|
|
588
588
|
mount(WrapperTwo, {
|
|
589
|
-
|
|
589
|
+
props: {
|
|
590
590
|
'no-focus': true
|
|
591
591
|
}
|
|
592
592
|
})
|
|
@@ -24,6 +24,8 @@ const panOpts = {
|
|
|
24
24
|
mouseAllDir: true
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
const getMinThumbSize = size => (size >= 250 ? 50 : Math.ceil(size / 5))
|
|
28
|
+
|
|
27
29
|
export default createComponent({
|
|
28
30
|
name: 'QScrollArea',
|
|
29
31
|
|
|
@@ -115,7 +117,7 @@ export default createComponent({
|
|
|
115
117
|
Math.round(
|
|
116
118
|
between(
|
|
117
119
|
container.vertical.value * container.vertical.value / scroll.vertical.size.value,
|
|
118
|
-
|
|
120
|
+
getMinThumbSize(container.vertical.value),
|
|
119
121
|
container.vertical.value
|
|
120
122
|
)
|
|
121
123
|
)
|
|
@@ -157,7 +159,7 @@ export default createComponent({
|
|
|
157
159
|
Math.round(
|
|
158
160
|
between(
|
|
159
161
|
container.horizontal.value * container.horizontal.value / scroll.horizontal.size.value,
|
|
160
|
-
|
|
162
|
+
getMinThumbSize(container.horizontal.value),
|
|
161
163
|
container.horizontal.value
|
|
162
164
|
)
|
|
163
165
|
)
|
|
@@ -127,7 +127,7 @@ export default createComponent({
|
|
|
127
127
|
|
|
128
128
|
emits: [
|
|
129
129
|
...useFieldEmits,
|
|
130
|
-
'add', 'remove', 'input-value',
|
|
130
|
+
'add', 'remove', 'input-value', 'new-value',
|
|
131
131
|
'keyup', 'keypress', 'keydown',
|
|
132
132
|
'filter-abort'
|
|
133
133
|
],
|
|
@@ -175,7 +175,6 @@ export default createComponent({
|
|
|
175
175
|
localResetVirtualScroll,
|
|
176
176
|
padVirtualScroll,
|
|
177
177
|
onVirtualScrollEvt,
|
|
178
|
-
reset,
|
|
179
178
|
scrollTo,
|
|
180
179
|
setVirtualScrollSize
|
|
181
180
|
} = useVirtualScroll({
|
|
@@ -269,15 +268,23 @@ export default createComponent({
|
|
|
269
268
|
|
|
270
269
|
const tabindex = computed(() => (state.focused.value === true ? props.tabindex : -1))
|
|
271
270
|
|
|
272
|
-
const comboboxAttrs = computed(() =>
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
271
|
+
const comboboxAttrs = computed(() => {
|
|
272
|
+
const attrs = {
|
|
273
|
+
tabindex: props.tabindex,
|
|
274
|
+
role: 'combobox',
|
|
275
|
+
'aria-label': props.label,
|
|
276
|
+
'aria-autocomplete': props.useInput === true ? 'list' : 'none',
|
|
277
|
+
'aria-expanded': menu.value === true ? 'true' : 'false',
|
|
278
|
+
'aria-owns': `${ state.targetUid.value }_lb`,
|
|
279
|
+
'aria-controls': `${ state.targetUid.value }_lb`
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if (optionIndex.value >= 0) {
|
|
283
|
+
attrs[ 'aria-activedescendant' ] = `${ state.targetUid.value }_${ optionIndex.value }`
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
return attrs
|
|
287
|
+
})
|
|
281
288
|
|
|
282
289
|
const listboxAttrs = computed(() => {
|
|
283
290
|
const attrs = {
|
|
@@ -1342,13 +1349,18 @@ export default createComponent({
|
|
|
1342
1349
|
setOptionIndex(optionIndex)
|
|
1343
1350
|
}
|
|
1344
1351
|
|
|
1345
|
-
function rerenderMenu () {
|
|
1352
|
+
function rerenderMenu (newLength, oldLength) {
|
|
1346
1353
|
if (menu.value === true && state.innerLoading.value === false) {
|
|
1347
|
-
|
|
1354
|
+
localResetVirtualScroll(-1, true)
|
|
1348
1355
|
|
|
1349
1356
|
nextTick(() => {
|
|
1350
1357
|
if (menu.value === true && state.innerLoading.value === false) {
|
|
1351
|
-
|
|
1358
|
+
if (newLength > oldLength) {
|
|
1359
|
+
localResetVirtualScroll()
|
|
1360
|
+
}
|
|
1361
|
+
else {
|
|
1362
|
+
updateMenu(true)
|
|
1363
|
+
}
|
|
1352
1364
|
}
|
|
1353
1365
|
})
|
|
1354
1366
|
}
|
|
@@ -1426,10 +1438,8 @@ export default createComponent({
|
|
|
1426
1438
|
showPopup,
|
|
1427
1439
|
|
|
1428
1440
|
floatingLabel: computed(() =>
|
|
1429
|
-
(props.hideSelected === true
|
|
1430
|
-
|
|
1431
|
-
: hasValue.value === true
|
|
1432
|
-
)
|
|
1441
|
+
(props.hideSelected !== true && hasValue.value === true)
|
|
1442
|
+
|| inputValue.value.length > 0
|
|
1433
1443
|
|| fieldValueIsFilled(props.displayValue)
|
|
1434
1444
|
),
|
|
1435
1445
|
|