quasar 1.16.3 → 1.17.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.
- package/dist/api/BottomSheet.json +2 -2
- package/dist/api/Loading.json +0 -2
- package/dist/api/Notify.json +15 -15
- package/dist/api/QAvatar.json +1 -1
- package/dist/api/QBreadcrumbsEl.json +32 -11
- package/dist/api/QBtn.json +35 -14
- package/dist/api/QBtnDropdown.json +36 -15
- package/dist/api/QBtnToggle.json +1 -1
- package/dist/api/QCarousel.json +7 -7
- package/dist/api/QCarouselSlide.json +2 -2
- package/dist/api/QChatMessage.json +1 -5
- package/dist/api/QChip.json +4 -4
- package/dist/api/QColor.json +6 -0
- package/dist/api/QDialog.json +7 -1
- package/dist/api/QExpansionItem.json +34 -13
- package/dist/api/QFab.json +34 -2
- package/dist/api/QFabAction.json +9 -1
- package/dist/api/QField.json +80 -6
- package/dist/api/QFile.json +80 -6
- package/dist/api/QImg.json +2 -2
- package/dist/api/QInnerLoading.json +32 -0
- package/dist/api/QInput.json +82 -6
- package/dist/api/QItem.json +31 -10
- package/dist/api/QOptionGroup.json +58 -1
- package/dist/api/QPagination.json +4 -4
- package/dist/api/QParallax.json +1 -1
- package/dist/api/QPopupEdit.json +14 -7
- package/dist/api/QPullToRefresh.json +1 -1
- package/dist/api/QRange.json +581 -96
- package/dist/api/QRating.json +3 -3
- package/dist/api/QRouteTab.json +32 -12
- package/dist/api/QScrollArea.json +188 -20
- package/dist/api/QSelect.json +81 -9
- package/dist/api/QSeparator.json +1 -1
- package/dist/api/QSlider.json +499 -34
- package/dist/api/QStep.json +4 -4
- package/dist/api/QStepper.json +4 -4
- package/dist/api/QTab.json +1 -1
- package/dist/api/QTable.json +4 -4
- package/dist/api/QTabs.json +9 -0
- package/dist/api/QTimelineEntry.json +2 -2
- package/dist/api/QToggle.json +1 -1
- package/dist/api/QTree.json +7 -1
- package/dist/api/QVideo.json +10 -0
- package/dist/icon-set/bootstrap-icons.umd.min.js +1 -1
- package/dist/icon-set/eva-icons.umd.min.js +1 -1
- package/dist/icon-set/fontawesome-v5-pro.umd.min.js +1 -1
- package/dist/icon-set/fontawesome-v5.umd.min.js +1 -1
- package/dist/icon-set/ionicons-v4.umd.min.js +1 -1
- package/dist/icon-set/line-awesome.umd.min.js +1 -1
- package/dist/icon-set/material-icons-outlined.umd.min.js +1 -1
- package/dist/icon-set/material-icons-round.umd.min.js +1 -1
- package/dist/icon-set/material-icons-sharp.umd.min.js +1 -1
- package/dist/icon-set/material-icons.umd.min.js +1 -1
- package/dist/icon-set/mdi-v3.umd.min.js +1 -1
- package/dist/icon-set/mdi-v4.umd.min.js +1 -1
- package/dist/icon-set/mdi-v5.umd.min.js +1 -1
- package/dist/icon-set/mdi-v6.umd.min.js +1 -1
- package/dist/icon-set/svg-bootstrap-icons.umd.min.js +1 -1
- package/dist/icon-set/svg-eva-icons.umd.min.js +1 -1
- package/dist/icon-set/svg-fontawesome-v5.umd.min.js +1 -1
- package/dist/icon-set/svg-ionicons-v4.umd.min.js +1 -1
- package/dist/icon-set/svg-ionicons-v5.umd.min.js +1 -1
- package/dist/icon-set/svg-ionicons-v6.umd.min.js +6 -0
- package/dist/icon-set/svg-line-awesome.umd.min.js +1 -1
- package/dist/icon-set/svg-material-icons-outlined.umd.min.js +1 -1
- package/dist/icon-set/svg-material-icons-round.umd.min.js +1 -1
- package/dist/icon-set/svg-material-icons-sharp.umd.min.js +1 -1
- package/dist/icon-set/svg-material-icons.umd.min.js +1 -1
- package/dist/icon-set/svg-mdi-v4.umd.min.js +1 -1
- package/dist/icon-set/svg-mdi-v5.umd.min.js +1 -1
- package/dist/icon-set/svg-mdi-v6.umd.min.js +1 -1
- package/dist/icon-set/svg-themify.umd.min.js +1 -1
- package/dist/icon-set/themify.umd.min.js +1 -1
- package/dist/lang/ar.umd.min.js +2 -2
- package/dist/lang/az-latn.umd.min.js +1 -1
- package/dist/lang/bg.umd.min.js +1 -1
- package/dist/lang/ca.umd.min.js +1 -1
- package/dist/lang/cs.umd.min.js +1 -1
- package/dist/lang/da.umd.min.js +1 -1
- package/dist/lang/de.umd.min.js +1 -1
- package/dist/lang/el.umd.min.js +1 -1
- package/dist/lang/en-gb.umd.min.js +1 -1
- package/dist/lang/en-us.umd.min.js +1 -1
- package/dist/lang/eo.umd.min.js +1 -1
- package/dist/lang/es.umd.min.js +1 -1
- package/dist/lang/et.umd.min.js +1 -1
- package/dist/lang/fa-ir.umd.min.js +1 -1
- package/dist/lang/fa.umd.min.js +1 -1
- package/dist/lang/fi.umd.min.js +1 -1
- package/dist/lang/fr.umd.min.js +2 -2
- package/dist/lang/gn.umd.min.js +1 -1
- package/dist/lang/he.umd.min.js +1 -1
- package/dist/lang/hr.umd.min.js +1 -1
- package/dist/lang/hu.umd.min.js +1 -1
- package/dist/lang/id.umd.min.js +1 -1
- package/dist/lang/is.umd.min.js +1 -1
- package/dist/lang/it.umd.min.js +1 -1
- package/dist/lang/ja.umd.min.js +1 -1
- package/dist/lang/km.umd.min.js +1 -1
- package/dist/lang/ko-kr.umd.min.js +1 -1
- package/dist/lang/kur-ckb.umd.min.js +1 -1
- package/dist/lang/lu.umd.min.js +1 -1
- package/dist/lang/lv.umd.min.js +1 -1
- package/dist/lang/ml.umd.min.js +1 -1
- package/dist/lang/ms.umd.min.js +1 -1
- package/dist/lang/nb-no.umd.min.js +1 -1
- package/dist/lang/nl.umd.min.js +1 -1
- package/dist/lang/pl.umd.min.js +1 -1
- package/dist/lang/pt-br.umd.min.js +1 -1
- package/dist/lang/pt.umd.min.js +1 -1
- package/dist/lang/ro.umd.min.js +1 -1
- package/dist/lang/ru.umd.min.js +1 -1
- package/dist/lang/sk.umd.min.js +1 -1
- package/dist/lang/sl.umd.min.js +1 -1
- package/dist/lang/sr.umd.min.js +2 -2
- package/dist/lang/sv.umd.min.js +1 -1
- package/dist/lang/ta.umd.min.js +1 -1
- package/dist/lang/th.umd.min.js +1 -1
- package/dist/lang/tr.umd.min.js +1 -1
- package/dist/lang/ug.umd.min.js +2 -2
- package/dist/lang/uk.umd.min.js +1 -1
- package/dist/lang/vi.umd.min.js +1 -1
- package/dist/lang/zh-hans.umd.min.js +2 -2
- package/dist/lang/zh-hant.umd.min.js +2 -2
- package/dist/quasar.addon.css +1 -1
- package/dist/quasar.addon.rtl.css +1 -1
- package/dist/quasar.common.js +2 -2
- package/dist/quasar.css +376 -225
- package/dist/quasar.esm.js +2 -2
- package/dist/quasar.ie.polyfills.js +1 -1
- package/dist/quasar.ie.polyfills.umd.min.js +1 -1
- package/dist/quasar.min.css +1 -1
- package/dist/quasar.rtl.css +508 -301
- package/dist/quasar.rtl.min.css +1 -1
- package/dist/quasar.sass +324 -208
- package/dist/quasar.styl +324 -208
- package/dist/quasar.umd.js +3098 -1836
- package/dist/quasar.umd.min.js +2 -2
- package/dist/quasar.umd.modern.js +3057 -1817
- package/dist/quasar.umd.modern.min.js +2 -2
- package/dist/transform-asset-urls.json +20 -0
- package/dist/types/index.d.ts +421 -103
- package/dist/types/utils/scroll.d.ts +1 -0
- package/dist/vetur/quasar-attributes.json +313 -89
- package/dist/vetur/quasar-tags.json +74 -18
- package/dist/web-types/web-types.json +1289 -259
- package/icon-set/svg-ionicons-v6.js +225 -0
- package/lang/ar.js +1 -1
- package/lang/fa-ir.js +3 -1
- package/lang/fa.js +3 -1
- package/lang/fr.js +1 -1
- package/lang/index.json +1 -1
- package/lang/kur-ckb.js +2 -2
- package/lang/sr.js +4 -4
- package/lang/ug.js +48 -46
- package/lang/zh-hans.js +1 -1
- package/lang/zh-hant.js +18 -18
- package/package.json +1 -1
- package/src/api.extends.json +1 -2
- package/src/components/breadcrumbs/QBreadcrumbs.js +15 -11
- package/src/components/breadcrumbs/QBreadcrumbs.sass +0 -3
- package/src/components/breadcrumbs/QBreadcrumbs.styl +0 -3
- package/src/components/breadcrumbs/QBreadcrumbsEl.js +25 -9
- package/src/components/btn/QBtn.js +3 -3
- package/src/components/btn-dropdown/QBtnDropdown.sass +2 -0
- package/src/components/btn-dropdown/QBtnDropdown.styl +2 -0
- package/src/components/carousel/QCarousel.js +6 -2
- package/src/components/carousel/QCarousel.json +9 -1
- package/src/components/carousel/QCarouselSlide.json +2 -2
- package/src/components/chat/QChatMessage.json +1 -1
- package/src/components/color/QColor.js +100 -85
- package/src/components/color/QColor.json +7 -0
- package/src/components/color/QColor.sass +14 -24
- package/src/components/color/QColor.styl +14 -24
- package/src/components/date/QDate.js +7 -1
- package/src/components/date/QDate.sass +2 -0
- package/src/components/date/QDate.styl +2 -0
- package/src/components/dialog/QDialog.js +8 -4
- package/src/components/dialog/QDialog.json +8 -1
- package/src/components/drawer/QDrawer.js +16 -15
- package/src/components/editor/QEditor.js +2 -2
- package/src/components/editor/QEditor.sass +13 -1
- package/src/components/editor/QEditor.styl +13 -1
- package/src/components/expansion-item/QExpansionItem.js +13 -11
- package/src/components/fab/QFab.js +20 -11
- package/src/components/fab/QFab.json +35 -0
- package/src/components/fab/QFabAction.js +16 -9
- package/src/components/fab/QFabAction.json +10 -0
- package/src/components/field/QField.js +28 -23
- package/src/components/field/__QField.json +72 -8
- package/src/components/file/QFile.js +12 -4
- package/src/components/file/QFile.sass +4 -3
- package/src/components/file/QFile.styl +4 -3
- package/src/components/footer/QFooter.js +1 -1
- package/src/components/form/QForm.js +1 -1
- package/src/components/header/QHeader.js +1 -1
- package/src/components/icon/QIcon.js +54 -49
- package/src/components/img/QImg.json +2 -2
- package/src/components/infinite-scroll/QInfiniteScroll.js +49 -36
- package/src/components/inner-loading/QInnerLoading.js +54 -22
- package/src/components/inner-loading/QInnerLoading.json +29 -0
- package/src/components/inner-loading/QInnerLoading.sass +3 -0
- package/src/components/inner-loading/QInnerLoading.styl +3 -0
- package/src/components/item/QItem.js +9 -15
- package/src/components/linear-progress/QLinearProgress.js +6 -2
- package/src/components/menu/QMenu.js +5 -1
- package/src/components/option-group/QOptionGroup.js +32 -22
- package/src/components/option-group/QOptionGroup.json +50 -1
- package/src/components/parallax/QParallax.js +3 -0
- package/src/components/parallax/QParallax.json +1 -1
- package/src/components/popup-edit/QPopupEdit.js +41 -16
- package/src/components/popup-edit/QPopupEdit.json +15 -8
- package/src/components/range/QRange.js +223 -278
- package/src/components/range/QRange.json +11 -122
- package/src/components/rating/QRating.js +56 -38
- package/src/components/rating/QRating.json +3 -3
- package/src/components/rating/QRating.sass +8 -6
- package/src/components/rating/QRating.styl +8 -6
- package/src/components/resize-observer/QResizeObserver.js +15 -10
- package/src/components/scroll-area/QScrollArea.js +342 -126
- package/src/components/scroll-area/QScrollArea.json +164 -20
- package/src/components/scroll-area/QScrollArea.sass +4 -0
- package/src/components/scroll-area/QScrollArea.styl +4 -0
- package/src/components/scroll-observer/QScrollObserver.js +9 -2
- package/src/components/select/QSelect.js +8 -2
- package/src/components/separator/QSeparator.js +0 -1
- package/src/components/separator/QSeparator.json +1 -1
- package/src/components/slider/QSlider.js +97 -140
- package/src/components/slider/QSlider.json +1 -122
- package/src/components/slider/QSlider.sass +205 -139
- package/src/components/slider/QSlider.styl +205 -139
- package/src/components/slider/slider-utils.js +468 -123
- package/src/components/slider/slider-utils.json +546 -0
- package/src/components/stepper/QStepper.js +1 -1
- package/src/components/stepper/QStepper.sass +25 -26
- package/src/components/stepper/QStepper.styl +25 -26
- package/src/components/table/QTable.sass +3 -0
- package/src/components/table/QTable.styl +3 -0
- package/src/components/tabs/QRouteTab.js +13 -13
- package/src/components/tabs/QRouteTab.json +0 -7
- package/src/components/tabs/QTab.js +71 -20
- package/src/components/tabs/QTabs.js +237 -52
- package/src/components/tabs/QTabs.json +8 -0
- package/src/components/tabs/QTabs.sass +6 -6
- package/src/components/tabs/QTabs.styl +6 -6
- package/src/components/time/QTime.js +6 -2
- package/src/components/timeline/QTimelineEntry.json +1 -1
- package/src/components/tree/QTree.js +10 -6
- package/src/components/tree/QTree.json +5 -0
- package/src/components/tree/QTree.sass +58 -4
- package/src/components/tree/QTree.styl +58 -4
- package/src/components/uploader/QUploaderBase.js +15 -19
- package/src/components/video/QVideo.js +4 -1
- package/src/components/video/QVideo.json +11 -0
- package/src/components/virtual-scroll/QVirtualScroll.sass +1 -0
- package/src/components/virtual-scroll/QVirtualScroll.styl +1 -0
- package/src/css/core/helpers.sass +3 -0
- package/src/css/core/helpers.styl +3 -0
- package/src/css/core/positioning.sass +5 -0
- package/src/css/core/positioning.styl +5 -0
- package/src/css/variables.sass +4 -6
- package/src/css/variables.styl +4 -6
- package/src/directives/Scroll.js +2 -2
- package/src/directives/ScrollFire.js +1 -0
- package/src/ie-compat/ie.js +13 -13
- package/src/install.js +1 -1
- package/src/lang.js +7 -4
- package/src/mixins/anchor.js +3 -13
- package/src/mixins/btn.js +30 -38
- package/src/mixins/btn.json +26 -11
- package/src/mixins/file.js +27 -5
- package/src/mixins/fullscreen.js +16 -4
- package/src/mixins/portal.js +10 -10
- package/src/mixins/router-link.js +88 -14
- package/src/mixins/router-link.json +26 -10
- package/src/mixins/validate.js +33 -15
- package/src/mixins/virtual-scroll.js +40 -42
- package/src/plugins/AppFullscreen.js +41 -16
- package/src/plugins/BottomSheet.json +1 -1
- package/src/plugins/Cookies.js +1 -1
- package/src/plugins/Loading.js +8 -0
- package/src/plugins/LoadingBar.js +9 -0
- package/src/plugins/Notify.js +351 -333
- package/src/plugins/Notify.json +10 -10
- package/src/plugins/Notify.sass +9 -3
- package/src/plugins/Notify.styl +9 -3
- package/src/utils/clone.js +53 -4
- package/src/utils/date.js +134 -69
- package/src/utils/dom.js +28 -9
- package/src/utils/extend.js +2 -2
- package/src/utils/focus-manager.js +8 -10
- package/src/utils/global-dialog.js +18 -1
- package/src/utils/is.js +2 -2
- package/src/utils/morph.js +2 -12
- package/src/utils/scroll.js +71 -35
|
@@ -101,12 +101,19 @@
|
|
|
101
101
|
"type": "Boolean",
|
|
102
102
|
"desc": "(Accessibility) When Dialog gets shown, do not switch focus on it",
|
|
103
103
|
"category": "behavior"
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
"no-shake": {
|
|
107
|
+
"type": "Boolean",
|
|
108
|
+
"desc": "Do not shake up the Dialog to catch user's attention",
|
|
109
|
+
"category": "behavior",
|
|
110
|
+
"addedIn": "v1.17"
|
|
104
111
|
}
|
|
105
112
|
},
|
|
106
113
|
|
|
107
114
|
"events": {
|
|
108
115
|
"shake": {
|
|
109
|
-
"desc": "
|
|
116
|
+
"desc": "Emitted when the Dialog shakes in order to catch user's attention, unless the 'no-shake' property is set"
|
|
110
117
|
},
|
|
111
118
|
|
|
112
119
|
"escape-key": {
|
|
@@ -114,11 +114,10 @@ export default Vue.extend({
|
|
|
114
114
|
}
|
|
115
115
|
},
|
|
116
116
|
|
|
117
|
-
'layout.totalWidth' (
|
|
118
|
-
this.
|
|
119
|
-
this.
|
|
120
|
-
|
|
121
|
-
))
|
|
117
|
+
'layout.totalWidth' () {
|
|
118
|
+
if (this.layout.container === true || document.qScrollPrevented !== true) {
|
|
119
|
+
this.__updateBelowBreakpoint()
|
|
120
|
+
}
|
|
122
121
|
},
|
|
123
122
|
|
|
124
123
|
side (newSide, oldSide) {
|
|
@@ -134,22 +133,17 @@ export default Vue.extend({
|
|
|
134
133
|
this.layout[newSide].offset = this.offset
|
|
135
134
|
},
|
|
136
135
|
|
|
137
|
-
behavior (
|
|
138
|
-
this.
|
|
139
|
-
val === 'mobile' ||
|
|
140
|
-
(val !== 'desktop' && this.layout.totalWidth <= this.breakpoint)
|
|
141
|
-
))
|
|
136
|
+
behavior () {
|
|
137
|
+
this.__updateBelowBreakpoint()
|
|
142
138
|
},
|
|
143
139
|
|
|
144
|
-
breakpoint (
|
|
145
|
-
this.
|
|
146
|
-
this.behavior === 'mobile' ||
|
|
147
|
-
(this.behavior !== 'desktop' && this.layout.totalWidth <= val)
|
|
148
|
-
))
|
|
140
|
+
breakpoint () {
|
|
141
|
+
this.__updateBelowBreakpoint()
|
|
149
142
|
},
|
|
150
143
|
|
|
151
144
|
'layout.container' (val) {
|
|
152
145
|
this.showing === true && this.__preventScroll(val !== true)
|
|
146
|
+
val === true && this.__updateBelowBreakpoint()
|
|
153
147
|
},
|
|
154
148
|
|
|
155
149
|
'layout.scrollbarWidth' () {
|
|
@@ -583,6 +577,13 @@ export default Vue.extend({
|
|
|
583
577
|
|
|
584
578
|
__updateSizeOnLayout (miniToOverlay, size) {
|
|
585
579
|
this.__update('size', miniToOverlay === true ? this.miniWidth : size)
|
|
580
|
+
},
|
|
581
|
+
|
|
582
|
+
__updateBelowBreakpoint () {
|
|
583
|
+
this.__updateLocal('belowBreakpoint', (
|
|
584
|
+
this.behavior === 'mobile' ||
|
|
585
|
+
(this.behavior !== 'desktop' && this.layout.totalWidth <= this.breakpoint)
|
|
586
|
+
))
|
|
586
587
|
}
|
|
587
588
|
},
|
|
588
589
|
|
|
@@ -516,7 +516,7 @@ export default Vue.extend({
|
|
|
516
516
|
|
|
517
517
|
return h('div', {
|
|
518
518
|
style: {
|
|
519
|
-
height: this.inFullscreen === true ? '
|
|
519
|
+
height: this.inFullscreen === true ? '100%' : null
|
|
520
520
|
},
|
|
521
521
|
class: this.classes,
|
|
522
522
|
attrs: this.attrs,
|
|
@@ -537,7 +537,7 @@ export default Vue.extend({
|
|
|
537
537
|
},
|
|
538
538
|
domProps: isSSR
|
|
539
539
|
? { innerHTML: this.value }
|
|
540
|
-
:
|
|
540
|
+
: void 0,
|
|
541
541
|
on
|
|
542
542
|
}
|
|
543
543
|
)
|
|
@@ -6,10 +6,18 @@
|
|
|
6
6
|
&.disabled
|
|
7
7
|
border-style: dashed
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
&.fullscreen
|
|
10
|
+
max-height: 100%
|
|
11
|
+
|
|
12
|
+
> div:first-child,
|
|
13
|
+
&__toolbars-container,
|
|
14
|
+
&__toolbars-container > div:first-child
|
|
10
15
|
border-top-left-radius: inherit
|
|
11
16
|
border-top-right-radius: inherit
|
|
12
17
|
|
|
18
|
+
&__toolbars-container
|
|
19
|
+
max-width: 100%
|
|
20
|
+
|
|
13
21
|
&__content
|
|
14
22
|
outline: 0
|
|
15
23
|
padding: $editor-content-padding
|
|
@@ -17,14 +25,18 @@
|
|
|
17
25
|
border-bottom-left-radius: inherit
|
|
18
26
|
border-bottom-right-radius: inherit
|
|
19
27
|
overflow: auto
|
|
28
|
+
max-width: 100%
|
|
29
|
+
|
|
20
30
|
pre
|
|
21
31
|
white-space: pre-wrap
|
|
32
|
+
|
|
22
33
|
hr
|
|
23
34
|
border: 0
|
|
24
35
|
outline: 0
|
|
25
36
|
margin: 1px
|
|
26
37
|
height: 1px
|
|
27
38
|
background: $editor-hr-color
|
|
39
|
+
|
|
28
40
|
&:empty:not(:focus):before
|
|
29
41
|
content: attr(placeholder)
|
|
30
42
|
opacity: .7
|
|
@@ -6,10 +6,18 @@
|
|
|
6
6
|
&.disabled
|
|
7
7
|
border-style: dashed
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
&.fullscreen
|
|
10
|
+
max-height: 100%
|
|
11
|
+
|
|
12
|
+
> div:first-child,
|
|
13
|
+
&__toolbars-container,
|
|
14
|
+
&__toolbars-container > div:first-child
|
|
10
15
|
border-top-left-radius: inherit
|
|
11
16
|
border-top-right-radius: inherit
|
|
12
17
|
|
|
18
|
+
&__toolbars-container
|
|
19
|
+
max-width: 100%
|
|
20
|
+
|
|
13
21
|
&__content
|
|
14
22
|
outline: 0
|
|
15
23
|
padding: $editor-content-padding
|
|
@@ -17,14 +25,18 @@
|
|
|
17
25
|
border-bottom-left-radius: inherit
|
|
18
26
|
border-bottom-right-radius: inherit
|
|
19
27
|
overflow: auto
|
|
28
|
+
max-width: 100%
|
|
29
|
+
|
|
20
30
|
pre
|
|
21
31
|
white-space: pre-wrap
|
|
32
|
+
|
|
22
33
|
hr
|
|
23
34
|
border: 0
|
|
24
35
|
outline: 0
|
|
25
36
|
margin: 1px
|
|
26
37
|
height: 1px
|
|
27
38
|
background: $editor-hr-color
|
|
39
|
+
|
|
28
40
|
&:empty:not(:focus):before
|
|
29
41
|
content: attr(placeholder)
|
|
30
42
|
opacity: .7
|
|
@@ -7,7 +7,7 @@ import QIcon from '../icon/QIcon.js'
|
|
|
7
7
|
import QSlideTransition from '../slide-transition/QSlideTransition.js'
|
|
8
8
|
import QSeparator from '../separator/QSeparator.js'
|
|
9
9
|
|
|
10
|
-
import
|
|
10
|
+
import RouterLinkMixin from '../../mixins/router-link.js'
|
|
11
11
|
import ModelToggleMixin from '../../mixins/model-toggle.js'
|
|
12
12
|
import DarkMixin from '../../mixins/dark.js'
|
|
13
13
|
|
|
@@ -92,7 +92,7 @@ export default Vue.extend({
|
|
|
92
92
|
},
|
|
93
93
|
|
|
94
94
|
isClickable () {
|
|
95
|
-
return this.
|
|
95
|
+
return this.hasLink === true || this.expandIconToggle !== true
|
|
96
96
|
},
|
|
97
97
|
|
|
98
98
|
expansionIcon () {
|
|
@@ -102,13 +102,13 @@ export default Vue.extend({
|
|
|
102
102
|
},
|
|
103
103
|
|
|
104
104
|
activeToggleIcon () {
|
|
105
|
-
return this.disable !== true && (this.
|
|
105
|
+
return this.disable !== true && (this.hasLink === true || this.expandIconToggle === true)
|
|
106
106
|
}
|
|
107
107
|
},
|
|
108
108
|
|
|
109
109
|
methods: {
|
|
110
110
|
__onHeaderClick (e) {
|
|
111
|
-
this.
|
|
111
|
+
this.hasLink !== true && this.toggle(e)
|
|
112
112
|
this.$emit('click', e)
|
|
113
113
|
},
|
|
114
114
|
|
|
@@ -219,18 +219,20 @@ export default Vue.extend({
|
|
|
219
219
|
}
|
|
220
220
|
|
|
221
221
|
if (this.isClickable === true) {
|
|
222
|
-
const evtProp = this.hasRouterLink === true ? 'nativeOn' : 'on'
|
|
223
|
-
|
|
224
222
|
data.props.clickable = true
|
|
225
|
-
data[
|
|
223
|
+
data[this.hasRouterLink === true ? 'nativeOn' : 'on'] = {
|
|
226
224
|
...this.qListeners,
|
|
227
225
|
click: this.__onHeaderClick
|
|
228
226
|
}
|
|
229
227
|
|
|
230
|
-
this.
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
228
|
+
if (this.hasLink === true) {
|
|
229
|
+
Object.assign(
|
|
230
|
+
data.props,
|
|
231
|
+
this.linkProps.props
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
data.attrs = this.linkProps.attrs
|
|
235
|
+
}
|
|
234
236
|
}
|
|
235
237
|
|
|
236
238
|
return h(QItem, data, child)
|
|
@@ -80,6 +80,10 @@ export default Vue.extend({
|
|
|
80
80
|
'aria-haspopup': 'true',
|
|
81
81
|
...this.qAttrs
|
|
82
82
|
}
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
slotScope () {
|
|
86
|
+
return { opened: this.showing }
|
|
83
87
|
}
|
|
84
88
|
},
|
|
85
89
|
|
|
@@ -90,6 +94,15 @@ export default Vue.extend({
|
|
|
90
94
|
if (this.$refs.trigger && this.$refs.trigger.$el) {
|
|
91
95
|
this.$refs.trigger.$el.focus()
|
|
92
96
|
}
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
__getIcon (h, kebab, camel) {
|
|
100
|
+
const slotFn = this.$scopedSlots[kebab]
|
|
101
|
+
const staticClass = `q-fab__${kebab} absolute-full`
|
|
102
|
+
|
|
103
|
+
return slotFn === void 0
|
|
104
|
+
? h(QIcon, { staticClass, props: { name: this[kebab] || this.$q.iconSet.fab[camel] } })
|
|
105
|
+
: h('div', { staticClass }, slotFn(this.slotScope))
|
|
93
106
|
}
|
|
94
107
|
},
|
|
95
108
|
|
|
@@ -98,20 +111,16 @@ export default Vue.extend({
|
|
|
98
111
|
|
|
99
112
|
this.hideIcon !== true && child.push(
|
|
100
113
|
h('div', { staticClass: 'q-fab__icon-holder', class: this.iconHolderClasses }, [
|
|
101
|
-
h
|
|
102
|
-
|
|
103
|
-
props: { name: this.icon || this.$q.iconSet.fab.icon }
|
|
104
|
-
}),
|
|
105
|
-
h(QIcon, {
|
|
106
|
-
staticClass: 'q-fab__active-icon absolute-full',
|
|
107
|
-
props: { name: this.activeIcon || this.$q.iconSet.fab.activeIcon }
|
|
108
|
-
})
|
|
114
|
+
this.__getIcon(h, 'icon', 'icon'),
|
|
115
|
+
this.__getIcon(h, 'active-icon', 'activeIcon')
|
|
109
116
|
])
|
|
110
117
|
)
|
|
111
118
|
|
|
112
|
-
this.label !== ''
|
|
113
|
-
|
|
114
|
-
|
|
119
|
+
if (this.label !== '' || this.$scopedSlots.label !== void 0) {
|
|
120
|
+
child[this.labelProps.action](
|
|
121
|
+
h('div', this.labelProps.data, this.$scopedSlots.label !== void 0 ? this.$scopedSlots.label(this.slotScope) : [ this.label ])
|
|
122
|
+
)
|
|
123
|
+
}
|
|
115
124
|
|
|
116
125
|
return h('div', {
|
|
117
126
|
staticClass: 'q-fab z-fab row inline justify-center',
|
|
@@ -57,6 +57,41 @@
|
|
|
57
57
|
}
|
|
58
58
|
},
|
|
59
59
|
|
|
60
|
+
"scopedSlots": {
|
|
61
|
+
"icon": {
|
|
62
|
+
"desc": "Slot for icon shown when FAB is closed; Suggestion: QIcon",
|
|
63
|
+
"scope": {
|
|
64
|
+
"opened": {
|
|
65
|
+
"type": "Boolean",
|
|
66
|
+
"desc": "FAB is opened"
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"addedIn": "v1.17"
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
"active-icon": {
|
|
73
|
+
"desc": "Slot for icon shown when FAB is opened; Suggestion: QIcon",
|
|
74
|
+
"scope": {
|
|
75
|
+
"opened": {
|
|
76
|
+
"type": "Boolean",
|
|
77
|
+
"desc": "FAB is opened"
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"addedIn": "v1.17"
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
"label": {
|
|
84
|
+
"desc": "Slot for label",
|
|
85
|
+
"scope": {
|
|
86
|
+
"opened": {
|
|
87
|
+
"type": "Boolean",
|
|
88
|
+
"desc": "FAB is opened"
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"addedIn": "v1.17"
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
|
|
60
95
|
"events": {
|
|
61
96
|
"input": {
|
|
62
97
|
"desc": "Emitted when fab actions are shown/hidden; Captured by v-model directive"
|
|
@@ -75,15 +75,22 @@ export default Vue.extend({
|
|
|
75
75
|
render (h) {
|
|
76
76
|
const child = []
|
|
77
77
|
|
|
78
|
-
this.icon !==
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
78
|
+
if (this.$scopedSlots.icon !== void 0) {
|
|
79
|
+
child.push(this.$scopedSlots.icon())
|
|
80
|
+
}
|
|
81
|
+
else if (this.icon !== '') {
|
|
82
|
+
child.push(
|
|
83
|
+
h(QIcon, {
|
|
84
|
+
props: { name: this.icon }
|
|
85
|
+
})
|
|
86
|
+
)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (this.label !== '' || this.$scopedSlots.label !== void 0) {
|
|
90
|
+
child[this.labelProps.action](
|
|
91
|
+
h('div', this.labelProps.data, this.$scopedSlots.label !== void 0 ? this.$scopedSlots.label() : [ this.label ])
|
|
92
|
+
)
|
|
93
|
+
}
|
|
87
94
|
|
|
88
95
|
return h(QBtn, {
|
|
89
96
|
class: this.classes,
|
|
@@ -36,6 +36,16 @@
|
|
|
36
36
|
"slots": {
|
|
37
37
|
"default": {
|
|
38
38
|
"desc": "Suggestion for this slot: QTooltip"
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
"icon": {
|
|
42
|
+
"desc": "Slot for icon; Suggestion: QIcon",
|
|
43
|
+
"addedIn": "v1.17"
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
"label": {
|
|
47
|
+
"desc": "Slot for label",
|
|
48
|
+
"addedIn": "v1.17"
|
|
39
49
|
}
|
|
40
50
|
},
|
|
41
51
|
|
|
@@ -163,7 +163,7 @@ export default Vue.extend({
|
|
|
163
163
|
'q-field--error': this.hasError,
|
|
164
164
|
|
|
165
165
|
'q-field--readonly': this.readonly === true && this.disable !== true,
|
|
166
|
-
|
|
166
|
+
'q-field--disabled': this.disable === true
|
|
167
167
|
}
|
|
168
168
|
},
|
|
169
169
|
|
|
@@ -220,6 +220,17 @@ export default Vue.extend({
|
|
|
220
220
|
}
|
|
221
221
|
},
|
|
222
222
|
|
|
223
|
+
bottomSlotScope () {
|
|
224
|
+
return {
|
|
225
|
+
id: this.targetUid,
|
|
226
|
+
field: this.$el,
|
|
227
|
+
editable: this.editable,
|
|
228
|
+
focused: this.focused,
|
|
229
|
+
value: this.value,
|
|
230
|
+
errorMessage: this.computedErrorMessage
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
|
|
223
234
|
attrs () {
|
|
224
235
|
const attrs = {
|
|
225
236
|
for: this.targetUid
|
|
@@ -238,19 +249,11 @@ export default Vue.extend({
|
|
|
238
249
|
|
|
239
250
|
methods: {
|
|
240
251
|
focus () {
|
|
241
|
-
|
|
242
|
-
this.focusFn = addFocusFn(() => {
|
|
243
|
-
if (this.showPopup !== void 0) {
|
|
244
|
-
this.showPopup()
|
|
245
|
-
return
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
this.__focus()
|
|
249
|
-
})
|
|
252
|
+
addFocusFn(this.__focus)
|
|
250
253
|
},
|
|
251
254
|
|
|
252
255
|
blur () {
|
|
253
|
-
|
|
256
|
+
removeFocusFn(this.__focus)
|
|
254
257
|
const el = document.activeElement
|
|
255
258
|
// IE can have null document.activeElement
|
|
256
259
|
if (el !== null && this.$el.contains(el)) {
|
|
@@ -393,24 +396,26 @@ export default Vue.extend({
|
|
|
393
396
|
let msg, key
|
|
394
397
|
|
|
395
398
|
if (this.hasError === true) {
|
|
396
|
-
|
|
399
|
+
key = 'q--slot-error'
|
|
400
|
+
|
|
401
|
+
if (this.$scopedSlots.error !== void 0) {
|
|
402
|
+
msg = this.$scopedSlots.error(this.bottomSlotScope)
|
|
403
|
+
}
|
|
404
|
+
else if (this.computedErrorMessage !== void 0) {
|
|
397
405
|
msg = [ h('div', { attrs: { role: 'alert' } }, [ this.computedErrorMessage ]) ]
|
|
398
406
|
key = this.computedErrorMessage
|
|
399
407
|
}
|
|
400
|
-
else {
|
|
401
|
-
msg = slot(this, 'error')
|
|
402
|
-
key = 'q--slot-error'
|
|
403
|
-
}
|
|
404
408
|
}
|
|
405
409
|
else if (this.hideHint !== true || this.focused === true) {
|
|
406
|
-
|
|
410
|
+
key = 'q--slot-hint'
|
|
411
|
+
|
|
412
|
+
if (this.$scopedSlots.hint !== void 0) {
|
|
413
|
+
msg = this.$scopedSlots.hint(this.bottomSlotScope)
|
|
414
|
+
}
|
|
415
|
+
else if (this.hint !== void 0) {
|
|
407
416
|
msg = [ h('div', [ this.hint ]) ]
|
|
408
417
|
key = this.hint
|
|
409
418
|
}
|
|
410
|
-
else {
|
|
411
|
-
msg = slot(this, 'hint')
|
|
412
|
-
key = 'q--slot-hint'
|
|
413
|
-
}
|
|
414
419
|
}
|
|
415
420
|
|
|
416
421
|
const hasCounter = this.counter === true || this.$scopedSlots.counter !== void 0
|
|
@@ -518,7 +523,7 @@ export default Vue.extend({
|
|
|
518
523
|
this.$nextTick(() => {
|
|
519
524
|
this.resetValidation()
|
|
520
525
|
|
|
521
|
-
if (this
|
|
526
|
+
if (this.$q.platform.is.mobile !== true) {
|
|
522
527
|
this.isDirty = false
|
|
523
528
|
}
|
|
524
529
|
})
|
|
@@ -534,7 +539,7 @@ export default Vue.extend({
|
|
|
534
539
|
this.__onPostRender !== void 0 && this.$nextTick(this.__onPostRender)
|
|
535
540
|
|
|
536
541
|
return h('label', {
|
|
537
|
-
staticClass: 'q-field row no-wrap items-start',
|
|
542
|
+
staticClass: 'q-field q-validation-component row no-wrap items-start',
|
|
538
543
|
class: this.classes,
|
|
539
544
|
attrs: this.attrs
|
|
540
545
|
}, [
|
|
@@ -209,14 +209,6 @@
|
|
|
209
209
|
"addedIn": "v1.12.9"
|
|
210
210
|
},
|
|
211
211
|
|
|
212
|
-
"error": {
|
|
213
|
-
"desc": "Slot for errors; Enabled only if 'bottom-slots' prop is used; Suggestion: <div>"
|
|
214
|
-
},
|
|
215
|
-
|
|
216
|
-
"hint": {
|
|
217
|
-
"desc": "Slot for hint text; Enabled only if 'bottom-slots' prop is used; Suggestion: <div>"
|
|
218
|
-
},
|
|
219
|
-
|
|
220
212
|
"counter": {
|
|
221
213
|
"desc": "Slot for counter text; Enabled only if 'bottom-slots' prop is used; Suggestion: <div>"
|
|
222
214
|
},
|
|
@@ -226,6 +218,78 @@
|
|
|
226
218
|
}
|
|
227
219
|
},
|
|
228
220
|
|
|
221
|
+
"scopedSlots": {
|
|
222
|
+
"error": {
|
|
223
|
+
"desc": "Slot for errors; Enabled only if 'bottom-slots' prop is used; Suggestion: <div>",
|
|
224
|
+
"scope": {
|
|
225
|
+
"id": {
|
|
226
|
+
"type": "String",
|
|
227
|
+
"desc": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label",
|
|
228
|
+
"examples": [ "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" ]
|
|
229
|
+
},
|
|
230
|
+
"field": {
|
|
231
|
+
"type": "Object",
|
|
232
|
+
"desc": "DOM element of the field",
|
|
233
|
+
"__exemption": [ "examples" ]
|
|
234
|
+
},
|
|
235
|
+
"editable": {
|
|
236
|
+
"type": "Boolean",
|
|
237
|
+
"desc": "Field is editable"
|
|
238
|
+
},
|
|
239
|
+
"focused": {
|
|
240
|
+
"type": "Boolean",
|
|
241
|
+
"desc": "Field has focus"
|
|
242
|
+
},
|
|
243
|
+
"value": {
|
|
244
|
+
"type": "Any",
|
|
245
|
+
"desc": "Field's value",
|
|
246
|
+
"examples": [ 0.241, "Text" ]
|
|
247
|
+
},
|
|
248
|
+
"errorMessage": {
|
|
249
|
+
"type": "String",
|
|
250
|
+
"desc": "Error message (from errorMessage prop or generated by rules)",
|
|
251
|
+
"examples": [ "The field is required" ]
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
"addedIn": "v1.17"
|
|
255
|
+
},
|
|
256
|
+
|
|
257
|
+
"hint": {
|
|
258
|
+
"desc": "Slot for hint text; Enabled only if 'bottom-slots' prop is used; Suggestion: <div>",
|
|
259
|
+
"scope": {
|
|
260
|
+
"id": {
|
|
261
|
+
"type": "String",
|
|
262
|
+
"desc": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label",
|
|
263
|
+
"examples": [ "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" ]
|
|
264
|
+
},
|
|
265
|
+
"field": {
|
|
266
|
+
"type": "Object",
|
|
267
|
+
"desc": "DOM element of the field",
|
|
268
|
+
"__exemption": [ "examples" ]
|
|
269
|
+
},
|
|
270
|
+
"editable": {
|
|
271
|
+
"type": "Boolean",
|
|
272
|
+
"desc": "Field is editable"
|
|
273
|
+
},
|
|
274
|
+
"focused": {
|
|
275
|
+
"type": "Boolean",
|
|
276
|
+
"desc": "Field has focus"
|
|
277
|
+
},
|
|
278
|
+
"value": {
|
|
279
|
+
"type": "Any",
|
|
280
|
+
"desc": "Field's value",
|
|
281
|
+
"examples": [ 0.241, "Text" ]
|
|
282
|
+
},
|
|
283
|
+
"errorMessage": {
|
|
284
|
+
"type": "String",
|
|
285
|
+
"desc": "Error message (from errorMessage prop or generated by rules)",
|
|
286
|
+
"examples": [ "The field is required" ]
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
"addedIn": "v1.17"
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
|
|
229
293
|
"events": {
|
|
230
294
|
"clear": {
|
|
231
295
|
"desc": "When using the 'clearable' property, this event is emitted when the clear icon is clicked",
|
|
@@ -9,6 +9,7 @@ import FileMixin, { FileValueMixin } from '../../mixins/file.js'
|
|
|
9
9
|
import { isSSR } from '../../plugins/Platform'
|
|
10
10
|
import { humanStorageSize } from '../../utils/format.js'
|
|
11
11
|
import cache from '../../utils/cache.js'
|
|
12
|
+
import { prevent } from '../../utils/event.js'
|
|
12
13
|
|
|
13
14
|
export default Vue.extend({
|
|
14
15
|
name: 'QFile',
|
|
@@ -115,9 +116,16 @@ export default Vue.extend({
|
|
|
115
116
|
this.$emit('input', this.multiple === true ? files : files[0])
|
|
116
117
|
},
|
|
117
118
|
|
|
119
|
+
__onKeydown (e) {
|
|
120
|
+
// prevent form submit if ENTER is pressed
|
|
121
|
+
e.keyCode === 13 && prevent(e)
|
|
122
|
+
},
|
|
123
|
+
|
|
118
124
|
__onKeyup (e) {
|
|
119
|
-
// only on ENTER
|
|
120
|
-
e.keyCode === 13
|
|
125
|
+
// only on ENTER and SPACE to match native input field
|
|
126
|
+
if (e.keyCode === 13 || e.keyCode === 32) {
|
|
127
|
+
this.pickFiles(e)
|
|
128
|
+
}
|
|
121
129
|
},
|
|
122
130
|
|
|
123
131
|
__getFileInput () {
|
|
@@ -159,6 +167,7 @@ export default Vue.extend({
|
|
|
159
167
|
if (this.editable === true) {
|
|
160
168
|
data.on = cache(this, 'native', {
|
|
161
169
|
dragover: this.__onDragOver,
|
|
170
|
+
keydown: this.__onKeydown,
|
|
162
171
|
keyup: this.__onKeyup
|
|
163
172
|
})
|
|
164
173
|
}
|
|
@@ -174,8 +183,7 @@ export default Vue.extend({
|
|
|
174
183
|
return [
|
|
175
184
|
h('input', {
|
|
176
185
|
class: [ this.inputClass, 'q-file__filler' ],
|
|
177
|
-
style: this.inputStyle
|
|
178
|
-
tabindex: -1
|
|
186
|
+
style: this.inputStyle
|
|
179
187
|
})
|
|
180
188
|
]
|
|
181
189
|
},
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
.q-field__native
|
|
4
4
|
word-break: break-all
|
|
5
|
-
overflow: hidden
|
|
6
5
|
|
|
7
6
|
.q-field__input
|
|
8
7
|
opacity: 0 !important
|
|
@@ -11,8 +10,10 @@
|
|
|
11
10
|
cursor: pointer
|
|
12
11
|
|
|
13
12
|
&__filler
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
visibility: hidden
|
|
14
|
+
width: 100%
|
|
15
|
+
border: none
|
|
16
|
+
padding: 0
|
|
16
17
|
|
|
17
18
|
&__dnd
|
|
18
19
|
outline: 1px dashed currentColor
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
.q-field__native
|
|
4
4
|
word-break: break-all
|
|
5
|
-
overflow: hidden
|
|
6
5
|
|
|
7
6
|
.q-field__input
|
|
8
7
|
opacity: 0 !important
|
|
@@ -11,8 +10,10 @@
|
|
|
11
10
|
cursor: pointer
|
|
12
11
|
|
|
13
12
|
&__filler
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
visibility: hidden
|
|
14
|
+
width: 100%
|
|
15
|
+
border: none
|
|
16
|
+
padding: 0
|
|
16
17
|
|
|
17
18
|
&__dnd
|
|
18
19
|
outline: 1px dashed currentColor
|