quasar 2.1.6 → 2.2.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/QCarousel.json +19 -5
- package/dist/api/QColor.json +8 -1
- package/dist/api/QDate.json +2 -1
- package/dist/api/QFile.json +2 -1
- package/dist/api/QInnerLoading.json +32 -0
- package/dist/api/QInput.json +2 -1
- package/dist/api/QOptionGroup.json +22 -0
- package/dist/api/QRadio.json +2 -1
- package/dist/api/QRange.json +5 -1
- package/dist/api/QSelect.json +2 -1
- package/dist/api/QSkeleton.json +14 -0
- package/dist/api/QSlider.json +2 -1
- package/dist/api/QStepper.json +16 -2
- package/dist/api/QTabPanels.json +16 -2
- package/dist/api/QTabs.json +2 -1
- package/dist/api/QTime.json +2 -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/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/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-ionicons-v4.umd.prod.js +1 -1
- package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
- 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-mdi-v4.umd.prod.js +1 -1
- package/dist/icon-set/svg-mdi-v5.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.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 +1 -1
- 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/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 +1 -1
- package/dist/lang/kur-CKB.umd.prod.js +1 -1
- package/dist/lang/lt.umd.prod.js +6 -0
- 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/ms.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/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 +2 -2
- package/dist/lang/uk.umd.prod.js +1 -1
- 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 +24 -17
- package/dist/quasar.esm.prod.js +2 -2
- package/dist/quasar.prod.css +1 -1
- package/dist/quasar.rtl.css +29 -22
- package/dist/quasar.rtl.prod.css +1 -1
- package/dist/quasar.sass +24 -16
- package/dist/quasar.umd.js +240 -195
- package/dist/quasar.umd.prod.js +2 -2
- package/dist/ssr-directives/Morph.js +1 -1
- package/dist/types/index.d.ts +1868 -1521
- package/dist/vetur/quasar-attributes.json +43 -11
- package/dist/vetur/quasar-tags.json +9 -1
- package/dist/web-types/web-types.json +103 -15
- package/lang/index.json +4 -0
- package/lang/lt.js +103 -0
- package/lang/ug.js +42 -42
- package/package.json +1 -1
- package/src/components/carousel/QCarousel.js +8 -1
- package/src/components/carousel/QCarousel.json +9 -1
- package/src/components/color/QColor.js +73 -61
- package/src/components/color/QColor.json +8 -1
- package/src/components/color/QColor.sass +5 -1
- package/src/components/date/QDate.json +1 -1
- package/src/components/dialog/QDialog.js +6 -0
- package/src/components/file/QFile.json +1 -1
- package/src/components/inner-loading/QInnerLoading.js +31 -7
- package/src/components/inner-loading/QInnerLoading.json +29 -0
- package/src/components/inner-loading/QInnerLoading.sass +4 -0
- package/src/components/input/QInput.json +1 -1
- package/src/components/option-group/QOptionGroup.js +29 -19
- package/src/components/option-group/QOptionGroup.json +26 -0
- package/src/components/radio/QRadio.json +1 -1
- package/src/components/range/QRange.json +1 -1
- package/src/components/rating/QRating.js +59 -39
- package/src/components/rating/QRating.sass +8 -6
- package/src/components/select/QSelect.js +5 -53
- package/src/components/select/QSelect.json +1 -1
- package/src/components/skeleton/QSkeleton.js +15 -5
- package/src/components/skeleton/QSkeleton.json +9 -0
- package/src/components/skeleton/QSkeleton.sass +7 -6
- package/src/components/slider/QSlider.json +1 -1
- package/src/components/tabs/QTabs.json +1 -1
- package/src/components/time/QTime.json +1 -1
- package/src/composables/private/use-panel.js +13 -8
- package/src/composables/private/use-panel.json +11 -2
- package/src/css/core/transitions.sass +4 -4
|
@@ -4,6 +4,7 @@ import QIcon from '../icon/QIcon.js'
|
|
|
4
4
|
|
|
5
5
|
import { stopAndPrevent } from '../../utils/event.js'
|
|
6
6
|
import { between } from '../../utils/format.js'
|
|
7
|
+
import { hMergeSlot } from '../../utils/private/render.js'
|
|
7
8
|
|
|
8
9
|
import useSize, { useSizeProps } from '../../composables/private/use-size.js'
|
|
9
10
|
import { useFormProps, useFormAttrs, useFormInject } from '../../composables/private/use-form.js'
|
|
@@ -94,6 +95,51 @@ export default defineComponent({
|
|
|
94
95
|
}
|
|
95
96
|
})
|
|
96
97
|
|
|
98
|
+
const stars = computed(() => {
|
|
99
|
+
const
|
|
100
|
+
acc = [],
|
|
101
|
+
icons = iconData.value,
|
|
102
|
+
ceil = Math.ceil(props.modelValue)
|
|
103
|
+
|
|
104
|
+
const halfIndex = props.iconHalf === void 0 || ceil === props.modelValue
|
|
105
|
+
? -1
|
|
106
|
+
: ceil
|
|
107
|
+
|
|
108
|
+
for (let i = 1; i <= props.max; i++) {
|
|
109
|
+
const
|
|
110
|
+
active = (mouseModel.value === 0 && props.modelValue >= i) || (mouseModel.value > 0 && mouseModel.value >= i),
|
|
111
|
+
half = halfIndex === i && mouseModel.value < i,
|
|
112
|
+
exSelected = mouseModel.value > 0 && (half === true ? ceil : props.modelValue) >= i && mouseModel.value < i,
|
|
113
|
+
color = half === true
|
|
114
|
+
? (i <= icons.halfColorLen ? props.colorHalf[ i - 1 ] : icons.halfColor)
|
|
115
|
+
: (
|
|
116
|
+
icons.selColor !== void 0 && active === true
|
|
117
|
+
? (i <= icons.selColorLen ? props.colorSelected[ i - 1 ] : icons.selColor)
|
|
118
|
+
: (i <= icons.colorLen ? props.color[ i - 1 ] : icons.color)
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
acc.push({
|
|
122
|
+
name: (
|
|
123
|
+
half === true
|
|
124
|
+
? (i <= icons.halfIconLen ? props.iconHalf[ i - 1 ] : icons.halfIcon)
|
|
125
|
+
: (
|
|
126
|
+
icons.selIcon !== void 0 && (active === true || exSelected === true)
|
|
127
|
+
? (i <= icons.selIconLen ? props.iconSelected[ i - 1 ] : icons.selIcon)
|
|
128
|
+
: (i <= icons.iconLen ? props.icon[ i - 1 ] : icons.icon)
|
|
129
|
+
)
|
|
130
|
+
) || $q.iconSet.rating.icon,
|
|
131
|
+
|
|
132
|
+
classes: 'q-rating__icon'
|
|
133
|
+
+ (active === true || half === true ? ' q-rating__icon--active' : '')
|
|
134
|
+
+ (exSelected === true ? ' q-rating__icon--exselected' : '')
|
|
135
|
+
+ (mouseModel.value === i ? ' q-rating__icon--hovered' : '')
|
|
136
|
+
+ (color !== void 0 ? ` text-${ color }` : '')
|
|
137
|
+
})
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return acc
|
|
141
|
+
})
|
|
142
|
+
|
|
97
143
|
const attributes = computed(() => {
|
|
98
144
|
if (props.disable === true) {
|
|
99
145
|
return { 'aria-disabled': 'true' }
|
|
@@ -103,6 +149,8 @@ export default defineComponent({
|
|
|
103
149
|
}
|
|
104
150
|
})
|
|
105
151
|
|
|
152
|
+
const tabindex = computed(() => (editable.value === true ? 0 : null))
|
|
153
|
+
|
|
106
154
|
function set (value) {
|
|
107
155
|
if (editable.value === true) {
|
|
108
156
|
const
|
|
@@ -150,57 +198,29 @@ export default defineComponent({
|
|
|
150
198
|
})
|
|
151
199
|
|
|
152
200
|
return () => {
|
|
153
|
-
const
|
|
154
|
-
child = [],
|
|
155
|
-
tabindex = editable.value === true ? 0 : null,
|
|
156
|
-
icons = iconData.value,
|
|
157
|
-
ceil = Math.ceil(props.modelValue)
|
|
201
|
+
const child = []
|
|
158
202
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
: ceil
|
|
162
|
-
|
|
163
|
-
for (let i = 1; i <= props.max; i++) {
|
|
164
|
-
const
|
|
165
|
-
active = (mouseModel.value === 0 && props.modelValue >= i) || (mouseModel.value > 0 && mouseModel.value >= i),
|
|
166
|
-
half = halfIndex === i && mouseModel.value < i,
|
|
167
|
-
exSelected = mouseModel.value > 0 && (half === true ? ceil : props.modelValue) >= i && mouseModel.value < i,
|
|
168
|
-
name = half === true
|
|
169
|
-
? (i <= icons.halfIconLen ? props.iconHalf[ i - 1 ] : icons.halfIcon)
|
|
170
|
-
: (
|
|
171
|
-
icons.selIcon !== void 0 && (active === true || exSelected === true)
|
|
172
|
-
? (i <= icons.selIconLen ? props.iconSelected[ i - 1 ] : icons.selIcon)
|
|
173
|
-
: (i <= icons.iconLen ? props.icon[ i - 1 ] : icons.icon)
|
|
174
|
-
),
|
|
175
|
-
color = half === true
|
|
176
|
-
? (i <= icons.halfColorLen ? props.colorHalf[ i - 1 ] : icons.halfColor)
|
|
177
|
-
: (
|
|
178
|
-
icons.selColor !== void 0 && active === true
|
|
179
|
-
? (i <= icons.selColorLen ? props.colorSelected[ i - 1 ] : icons.selColor)
|
|
180
|
-
: (i <= icons.colorLen ? props.color[ i - 1 ] : icons.color)
|
|
181
|
-
),
|
|
182
|
-
classes = 'q-rating__icon'
|
|
183
|
-
+ (active === true || half === true ? ' q-rating__icon--active' : '')
|
|
184
|
-
+ (exSelected === true ? ' q-rating__icon--exselected' : '')
|
|
185
|
-
+ (mouseModel.value === i ? ' q-rating__icon--hovered' : '')
|
|
186
|
-
+ (color !== void 0 ? ` text-${ color }` : '')
|
|
203
|
+
stars.value.forEach(({ classes, name }, index) => {
|
|
204
|
+
const i = index + 1
|
|
187
205
|
|
|
188
206
|
child.push(
|
|
189
|
-
h(
|
|
207
|
+
h('div', {
|
|
190
208
|
key: i,
|
|
191
209
|
ref: vm => { iconRefs[ `rt${ i }` ] = vm },
|
|
192
|
-
class:
|
|
193
|
-
|
|
194
|
-
tabindex,
|
|
210
|
+
class: 'q-rating__icon-container flex flex-center',
|
|
211
|
+
tabindex: tabindex.value,
|
|
195
212
|
onClick () { set(i) },
|
|
196
213
|
onMouseover () { setHoverValue(i) },
|
|
197
214
|
onMouseout: resetMouseModel,
|
|
198
215
|
onFocus () { setHoverValue(i) },
|
|
199
216
|
onBlur: resetMouseModel,
|
|
200
217
|
onKeyup (e) { onKeyup(e, i) }
|
|
201
|
-
},
|
|
218
|
+
}, hMergeSlot(
|
|
219
|
+
slots[ `tip-${ i }` ],
|
|
220
|
+
[ h(QIcon, { class: classes, name }) ]
|
|
221
|
+
))
|
|
202
222
|
)
|
|
203
|
-
}
|
|
223
|
+
})
|
|
204
224
|
|
|
205
225
|
if (props.name !== void 0 && props.disable !== true) {
|
|
206
226
|
injectFormInput(child, 'push')
|
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
color: $rating-grade-color
|
|
3
3
|
vertical-align: middle
|
|
4
4
|
|
|
5
|
+
&__icon-container
|
|
6
|
+
height: 1em
|
|
7
|
+
outline: 0
|
|
8
|
+
|
|
9
|
+
& + &
|
|
10
|
+
margin-left: 2px
|
|
11
|
+
|
|
5
12
|
&__icon
|
|
6
13
|
color: currentColor
|
|
7
14
|
text-shadow: $rating-shadow
|
|
@@ -17,13 +24,8 @@
|
|
|
17
24
|
&--exselected
|
|
18
25
|
opacity: .7
|
|
19
26
|
|
|
20
|
-
& + &
|
|
21
|
-
margin-left: 2px
|
|
22
|
-
|
|
23
27
|
&--no-dimming .q-rating__icon
|
|
24
28
|
opacity: 1
|
|
25
29
|
|
|
26
|
-
&--editable .q-
|
|
30
|
+
&--editable .q-rating__icon-container
|
|
27
31
|
cursor: pointer
|
|
28
|
-
&--non-editable span, .q-icon
|
|
29
|
-
outline: 0
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { h, defineComponent, ref, computed, watch, onBeforeUpdate, onUpdated,
|
|
1
|
+
import { h, defineComponent, ref, computed, watch, onBeforeUpdate, onUpdated, onBeforeUnmount, nextTick, getCurrentInstance } from 'vue'
|
|
2
2
|
|
|
3
3
|
import QField from '../field/QField.js'
|
|
4
4
|
import QIcon from '../icon/QIcon.js'
|
|
@@ -142,7 +142,7 @@ export default defineComponent({
|
|
|
142
142
|
const dialogFieldFocused = ref(false)
|
|
143
143
|
const innerLoadingIndicator = ref(false)
|
|
144
144
|
|
|
145
|
-
let inputTimer, innerValueCache,
|
|
145
|
+
let inputTimer, innerValueCache,
|
|
146
146
|
hasDialog, userInputValue, filterId, defaultInputValue,
|
|
147
147
|
transitionShowComputed, searchBuffer, searchBufferExp
|
|
148
148
|
|
|
@@ -268,7 +268,7 @@ export default defineComponent({
|
|
|
268
268
|
const tabindex = computed(() => (state.focused.value === true ? props.tabindex : -1))
|
|
269
269
|
|
|
270
270
|
const comboboxAttrs = computed(() => ({
|
|
271
|
-
tabindex: tabindex
|
|
271
|
+
tabindex: props.tabindex,
|
|
272
272
|
role: 'combobox',
|
|
273
273
|
'aria-label': props.label,
|
|
274
274
|
'aria-autocomplete': props.useInput === true ? 'list' : 'none',
|
|
@@ -309,7 +309,6 @@ export default defineComponent({
|
|
|
309
309
|
}
|
|
310
310
|
|
|
311
311
|
const { from, to } = virtualScrollSliceRange.value
|
|
312
|
-
const { options, optionEls } = optionScopeCache
|
|
313
312
|
|
|
314
313
|
return props.options.slice(from, to).map((opt, i) => {
|
|
315
314
|
const disable = isOptionDisabled.value(opt) === true
|
|
@@ -341,7 +340,7 @@ export default defineComponent({
|
|
|
341
340
|
}
|
|
342
341
|
}
|
|
343
342
|
|
|
344
|
-
|
|
343
|
+
return {
|
|
345
344
|
index,
|
|
346
345
|
opt,
|
|
347
346
|
html: needsHtmlFn.value(opt),
|
|
@@ -352,22 +351,6 @@ export default defineComponent({
|
|
|
352
351
|
setOptionIndex,
|
|
353
352
|
itemProps
|
|
354
353
|
}
|
|
355
|
-
|
|
356
|
-
const optionWithoutEvents = {
|
|
357
|
-
...option,
|
|
358
|
-
itemProps: {
|
|
359
|
-
...itemProps,
|
|
360
|
-
onClick: void 0,
|
|
361
|
-
onMousemove: void 0
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
if (options[ i ] === void 0 || isDeepEqual(optionWithoutEvents, options[ i ]) !== true) {
|
|
366
|
-
options[ i ] = optionWithoutEvents
|
|
367
|
-
optionEls[ i ] = void 0
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
return option
|
|
371
354
|
})
|
|
372
355
|
})
|
|
373
356
|
|
|
@@ -949,14 +932,6 @@ export default defineComponent({
|
|
|
949
932
|
}
|
|
950
933
|
|
|
951
934
|
function getAllOptions () {
|
|
952
|
-
if (
|
|
953
|
-
slots.option !== void 0
|
|
954
|
-
&& optionScopeCache.optionSlot !== slots.option
|
|
955
|
-
) {
|
|
956
|
-
optionScopeCache.optionSlot = slots.option
|
|
957
|
-
optionScopeCache.optionEls = []
|
|
958
|
-
}
|
|
959
|
-
|
|
960
935
|
const fn = slots.option !== void 0
|
|
961
936
|
? slots.option
|
|
962
937
|
: scope => {
|
|
@@ -976,17 +951,7 @@ export default defineComponent({
|
|
|
976
951
|
})
|
|
977
952
|
}
|
|
978
953
|
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
let options = padVirtualScroll('div', optionScope.value.map((scope, i) => {
|
|
982
|
-
if (optionEls[ i ] === void 0) {
|
|
983
|
-
optionEls[ i ] = fn(scope)
|
|
984
|
-
}
|
|
985
|
-
|
|
986
|
-
// rendered vnode always needs a new
|
|
987
|
-
// "instance" otherwise DOM diff will say nothing changed
|
|
988
|
-
return { ...optionEls[ i ] }
|
|
989
|
-
}))
|
|
954
|
+
let options = padVirtualScroll('div', optionScope.value.map(fn))
|
|
990
955
|
|
|
991
956
|
if (slots[ 'before-options' ] !== void 0) {
|
|
992
957
|
options = slots[ 'before-options' ]().concat(options)
|
|
@@ -1298,10 +1263,6 @@ export default defineComponent({
|
|
|
1298
1263
|
}
|
|
1299
1264
|
|
|
1300
1265
|
function closeMenu () {
|
|
1301
|
-
if (optionScopeCache !== void 0) {
|
|
1302
|
-
optionScopeCache.optionEls = []
|
|
1303
|
-
}
|
|
1304
|
-
|
|
1305
1266
|
if (dialog.value === true) {
|
|
1306
1267
|
return
|
|
1307
1268
|
}
|
|
@@ -1417,16 +1378,7 @@ export default defineComponent({
|
|
|
1417
1378
|
|
|
1418
1379
|
updatePreState()
|
|
1419
1380
|
|
|
1420
|
-
onBeforeMount(() => {
|
|
1421
|
-
optionScopeCache = {
|
|
1422
|
-
optionSlot: slots.option,
|
|
1423
|
-
options: [],
|
|
1424
|
-
optionEls: []
|
|
1425
|
-
}
|
|
1426
|
-
})
|
|
1427
|
-
|
|
1428
1381
|
onBeforeUnmount(() => {
|
|
1429
|
-
optionScopeCache = void 0
|
|
1430
1382
|
clearTimeout(inputTimer)
|
|
1431
1383
|
})
|
|
1432
1384
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"props": {
|
|
9
9
|
"model-value": {
|
|
10
10
|
"extends": "model-value",
|
|
11
|
-
"type": [ "Number", "String", "Array", "null" ],
|
|
11
|
+
"type": [ "Number", "String", "Array", "null", "undefined" ],
|
|
12
12
|
"desc": "Model of the component; Must be Array if using 'multiple' prop; Either use this property (along with a listener for 'update:modelValue' event) OR use v-model directive",
|
|
13
13
|
"examples": [ "v-model=\"myModel\"" ]
|
|
14
14
|
},
|
|
@@ -38,6 +38,10 @@ export default defineComponent({
|
|
|
38
38
|
validator: v => skeletonAnimations.includes(v),
|
|
39
39
|
default: 'wave'
|
|
40
40
|
},
|
|
41
|
+
animationSpeed: {
|
|
42
|
+
type: [ String, Number ],
|
|
43
|
+
default: 1500
|
|
44
|
+
},
|
|
41
45
|
|
|
42
46
|
square: Boolean,
|
|
43
47
|
bordered: Boolean,
|
|
@@ -51,11 +55,17 @@ export default defineComponent({
|
|
|
51
55
|
const vm = getCurrentInstance()
|
|
52
56
|
const isDark = useDark(props, vm.proxy.$q)
|
|
53
57
|
|
|
54
|
-
const style = computed(() =>
|
|
55
|
-
props.size !== void 0
|
|
56
|
-
?
|
|
57
|
-
:
|
|
58
|
-
|
|
58
|
+
const style = computed(() => {
|
|
59
|
+
const size = props.size !== void 0
|
|
60
|
+
? [ props.size, props.size ]
|
|
61
|
+
: [ props.width, props.height ]
|
|
62
|
+
|
|
63
|
+
return {
|
|
64
|
+
'--q-skeleton-speed': `${ props.animationSpeed }ms`,
|
|
65
|
+
width: size[ 0 ],
|
|
66
|
+
height: size[ 1 ]
|
|
67
|
+
}
|
|
68
|
+
})
|
|
59
69
|
|
|
60
70
|
const classes = computed(() =>
|
|
61
71
|
`q-skeleton q-skeleton--${ isDark.value === true ? 'dark' : 'light' } q-skeleton--type-${ props.type }`
|
|
@@ -32,6 +32,15 @@
|
|
|
32
32
|
"category": "style"
|
|
33
33
|
},
|
|
34
34
|
|
|
35
|
+
"animation-speed": {
|
|
36
|
+
"type": [ "String", "Number" ],
|
|
37
|
+
"desc": "Animation speed (in milliseconds, without unit)",
|
|
38
|
+
"default": 300,
|
|
39
|
+
"examples": [ 500, "1200" ],
|
|
40
|
+
"category": "style",
|
|
41
|
+
"addedIn": "v2.2"
|
|
42
|
+
},
|
|
43
|
+
|
|
35
44
|
"square": {
|
|
36
45
|
"extends": "square"
|
|
37
46
|
},
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
.q-skeleton
|
|
2
|
+
--q-skeleton-speed: 1500ms
|
|
2
3
|
background: $separator-color
|
|
3
4
|
border-radius: $generic-border-radius
|
|
4
5
|
|
|
@@ -58,14 +59,14 @@
|
|
|
58
59
|
border-radius: 0
|
|
59
60
|
|
|
60
61
|
&--anim-fade
|
|
61
|
-
animation: q-skeleton--fade
|
|
62
|
+
animation: q-skeleton--fade var(--q-skeleton-speed) linear .5s infinite
|
|
62
63
|
|
|
63
64
|
&--anim-pulse
|
|
64
|
-
animation: q-skeleton--pulse
|
|
65
|
+
animation: q-skeleton--pulse var(--q-skeleton-speed) ease-in-out .5s infinite
|
|
65
66
|
&--anim-pulse-x
|
|
66
|
-
animation: q-skeleton--pulse-x
|
|
67
|
+
animation: q-skeleton--pulse-x var(--q-skeleton-speed) ease-in-out .5s infinite
|
|
67
68
|
&--anim-pulse-y
|
|
68
|
-
animation: q-skeleton--pulse-y
|
|
69
|
+
animation: q-skeleton--pulse-y var(--q-skeleton-speed) ease-in-out .5s infinite
|
|
69
70
|
|
|
70
71
|
&--anim-wave,
|
|
71
72
|
&--anim-blink,
|
|
@@ -84,10 +85,10 @@
|
|
|
84
85
|
|
|
85
86
|
&--anim-blink:after
|
|
86
87
|
background: rgba(255,255,255,.7)
|
|
87
|
-
animation: q-skeleton--fade
|
|
88
|
+
animation: q-skeleton--fade var(--q-skeleton-speed) linear .5s infinite
|
|
88
89
|
&--anim-wave:after
|
|
89
90
|
background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,.5), rgba(255,255,255,0))
|
|
90
|
-
animation: q-skeleton--wave
|
|
91
|
+
animation: q-skeleton--wave var(--q-skeleton-speed) linear .5s infinite
|
|
91
92
|
|
|
92
93
|
&--dark
|
|
93
94
|
background: rgba(255, 255, 255, 0.05)
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"props": {
|
|
9
9
|
"model-value": {
|
|
10
10
|
"extends": "model-value",
|
|
11
|
-
"type": [ "Number", "null" ],
|
|
11
|
+
"type": [ "Number", "null", "undefined" ],
|
|
12
12
|
"desc": "Model of the component (must be between min/max); Either use this property (along with a listener for 'update:modelValue' event) OR use v-model directive",
|
|
13
13
|
"examples": [ "v-model=\"positionModel\"" ]
|
|
14
14
|
},
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"props": {
|
|
7
7
|
"model-value":{
|
|
8
8
|
"extends": "model-value",
|
|
9
|
-
"type": [ "Number", "String", "null" ],
|
|
9
|
+
"type": [ "Number", "String", "null", "undefined" ],
|
|
10
10
|
"desc": "Model of the component defining current panel name; Either use this property (along with a listener for 'update:modelValue' event) OR use v-model directive",
|
|
11
11
|
"required": false,
|
|
12
12
|
"examples": [ "v-model=\"selectedTab\"" ]
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"props": {
|
|
9
9
|
"model-value": {
|
|
10
10
|
"extends": "model-value",
|
|
11
|
-
"type": [ "String", "null" ],
|
|
11
|
+
"type": [ "String", "null", "undefined" ],
|
|
12
12
|
"desc": "Time of the component; Either use this property (along with a listener for 'update:modelValue' event) OR use v-model directive",
|
|
13
13
|
"examples": [
|
|
14
14
|
"v-model=\"currentTime\""
|
|
@@ -33,6 +33,10 @@ export const usePanelProps = {
|
|
|
33
33
|
|
|
34
34
|
transitionPrev: String,
|
|
35
35
|
transitionNext: String,
|
|
36
|
+
transitionDuration: {
|
|
37
|
+
type: [ String, Number ],
|
|
38
|
+
default: 300
|
|
39
|
+
},
|
|
36
40
|
|
|
37
41
|
keepAlive: Boolean,
|
|
38
42
|
keepAliveInclude: [ String, Array, RegExp ],
|
|
@@ -78,6 +82,10 @@ export default function () {
|
|
|
78
82
|
props.transitionNext || `slide-${ props.vertical === true ? 'up' : 'left' }`
|
|
79
83
|
)
|
|
80
84
|
|
|
85
|
+
const transitionStyle = computed(
|
|
86
|
+
() => `--q-transition-duration: ${ props.transitionDuration }ms`
|
|
87
|
+
)
|
|
88
|
+
|
|
81
89
|
const contentKey = computed(() => (
|
|
82
90
|
typeof props.modelValue === 'string' || typeof props.modelValue === 'number'
|
|
83
91
|
? props.modelValue
|
|
@@ -197,7 +205,7 @@ export default function () {
|
|
|
197
205
|
}
|
|
198
206
|
|
|
199
207
|
function getPanelContentChild () {
|
|
200
|
-
const panel = isValidPanelName(props.modelValue)
|
|
208
|
+
const panel = isValidPanelName(props.modelValue) === true
|
|
201
209
|
&& updatePanelIndex()
|
|
202
210
|
&& panels[ panelIndex.value ]
|
|
203
211
|
|
|
@@ -208,7 +216,7 @@ export default function () {
|
|
|
208
216
|
needsUniqueKeepAliveWrapper.value === true
|
|
209
217
|
? getCacheWithFn(contentKey.value, () => ({ ...PanelWrapper, name: contentKey.value }))
|
|
210
218
|
: PanelWrapper,
|
|
211
|
-
{ key: contentKey.value },
|
|
219
|
+
{ key: contentKey.value, style: transitionStyle.value },
|
|
212
220
|
() => panel
|
|
213
221
|
)
|
|
214
222
|
])
|
|
@@ -216,6 +224,7 @@ export default function () {
|
|
|
216
224
|
: [
|
|
217
225
|
h('div', {
|
|
218
226
|
class: 'q-panel scroll',
|
|
227
|
+
style: transitionStyle.value,
|
|
219
228
|
key: contentKey.value,
|
|
220
229
|
role: 'tabpanel'
|
|
221
230
|
}, [ panel ])
|
|
@@ -228,11 +237,7 @@ export default function () {
|
|
|
228
237
|
}
|
|
229
238
|
|
|
230
239
|
return props.animated === true
|
|
231
|
-
? [
|
|
232
|
-
h(Transition, {
|
|
233
|
-
name: panelTransition.value
|
|
234
|
-
}, getPanelContentChild)
|
|
235
|
-
]
|
|
240
|
+
? [ h(Transition, { name: panelTransition.value }, getPanelContentChild) ]
|
|
236
241
|
: getPanelContentChild()
|
|
237
242
|
}
|
|
238
243
|
|
|
@@ -242,7 +247,7 @@ export default function () {
|
|
|
242
247
|
).filter(
|
|
243
248
|
panel => panel.props !== null
|
|
244
249
|
&& panel.props.slot === void 0
|
|
245
|
-
&& isValidPanelName(panel.props.name)
|
|
250
|
+
&& isValidPanelName(panel.props.name) === true
|
|
246
251
|
)
|
|
247
252
|
|
|
248
253
|
return panels.length
|
|
@@ -62,14 +62,23 @@
|
|
|
62
62
|
"extends": "transition",
|
|
63
63
|
"desc": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)",
|
|
64
64
|
"default": "slide-right/slide-down",
|
|
65
|
-
"category": "
|
|
65
|
+
"category": "transition"
|
|
66
66
|
},
|
|
67
67
|
|
|
68
68
|
"transition-next": {
|
|
69
69
|
"extends": "transition",
|
|
70
70
|
"desc": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)",
|
|
71
71
|
"default": "slide-left/slide-up",
|
|
72
|
-
"category": "
|
|
72
|
+
"category": "transition"
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
"transition-duration": {
|
|
76
|
+
"type": [ "String", "Number" ],
|
|
77
|
+
"desc": "Transition duration (in milliseconds, without unit)",
|
|
78
|
+
"default": 300,
|
|
79
|
+
"examples": [ 500, "1200" ],
|
|
80
|
+
"category": "transition",
|
|
81
|
+
"addedIn": "v2.2"
|
|
73
82
|
}
|
|
74
83
|
},
|
|
75
84
|
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
// default easing is easeOutCubic
|
|
2
2
|
|
|
3
|
-
\:root
|
|
4
|
-
--q-transition-duration: .3s
|
|
5
|
-
--q-transition-easing: cubic-bezier(0.215,0.61,0.355,1)
|
|
6
|
-
|
|
7
3
|
.q-transition
|
|
8
4
|
&--slide-right,
|
|
9
5
|
&--slide-left,
|
|
@@ -17,6 +13,10 @@
|
|
|
17
13
|
&--scale,
|
|
18
14
|
&--rotate,
|
|
19
15
|
&--flip
|
|
16
|
+
&-enter-active,
|
|
17
|
+
&-leave-active
|
|
18
|
+
--q-transition-duration: .3s
|
|
19
|
+
--q-transition-easing: cubic-bezier(0.215,0.61,0.355,1)
|
|
20
20
|
&-leave-active
|
|
21
21
|
position: absolute
|
|
22
22
|
|