@vuetify/nightly 3.3.10-master.2023-08-01 → 3.3.11-dev.2023-08-07
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/CHANGELOG.md +18 -10
- package/dist/_component-variables-labs.sass +3 -1
- package/dist/json/attributes.json +244 -8
- package/dist/json/importMap-labs.json +28 -0
- package/dist/json/importMap.json +8 -8
- package/dist/json/tags.json +91 -0
- package/dist/json/web-types.json +793 -9
- package/dist/vuetify-labs.css +1403 -200
- package/dist/vuetify-labs.d.ts +2962 -356
- package/dist/vuetify-labs.esm.js +712 -48
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +712 -48
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.css +1055 -11
- package/dist/vuetify.d.ts +232 -83
- package/dist/vuetify.esm.js +131 -47
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +131 -47
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +774 -767
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.mjs +11 -8
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VAutocomplete/index.d.mts +12 -6
- package/lib/components/VAvatar/VAvatar.mjs +2 -1
- package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
- package/lib/components/VAvatar/index.d.mts +6 -0
- package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +9 -4
- package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
- package/lib/components/VBreadcrumbs/index.d.mts +28 -2
- package/lib/components/VCarousel/index.d.mts +24 -10
- package/lib/components/VCheckbox/index.d.mts +12 -0
- package/lib/components/VCombobox/VCombobox.mjs +9 -3
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- package/lib/components/VCombobox/index.d.mts +12 -6
- package/lib/components/VDialog/VDialog.css +15 -6
- package/lib/components/VDialog/VDialog.sass +41 -35
- package/lib/components/VField/VField.css +6 -2
- package/lib/components/VField/VField.sass +6 -2
- package/lib/components/VField/index.d.mts +4 -4
- package/lib/components/VFileInput/index.d.mts +4 -4
- package/lib/components/VImg/VImg.mjs +7 -1
- package/lib/components/VImg/VImg.mjs.map +1 -1
- package/lib/components/VImg/index.d.mts +12 -0
- package/lib/components/VList/index.d.mts +12 -12
- package/lib/components/VMenu/VMenu.mjs +29 -4
- package/lib/components/VMenu/VMenu.mjs.map +1 -1
- package/lib/components/VRadio/index.d.mts +6 -0
- package/lib/components/VRangeSlider/VRangeSlider.mjs +4 -2
- package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
- package/lib/components/VRangeSlider/index.d.mts +14 -0
- package/lib/components/VRating/VRating.mjs +4 -2
- package/lib/components/VRating/VRating.mjs.map +1 -1
- package/lib/components/VSelect/VSelect.mjs +10 -3
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSelect/index.d.mts +12 -6
- package/lib/components/VSelectionControl/VSelectionControl.mjs +3 -1
- package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
- package/lib/components/VSelectionControl/index.d.mts +6 -0
- package/lib/components/VSlider/VSlider.mjs +2 -1
- package/lib/components/VSlider/VSlider.mjs.map +1 -1
- package/lib/components/VSlider/index.d.mts +14 -0
- package/lib/components/VSlider/slider.mjs +5 -1
- package/lib/components/VSlider/slider.mjs.map +1 -1
- package/lib/components/VSwitch/VSwitch.css +3 -0
- package/lib/components/VSwitch/VSwitch.sass +3 -0
- package/lib/components/VSwitch/_variables.scss +1 -0
- package/lib/components/VSwitch/index.d.mts +6 -0
- package/lib/components/VTable/VTable.css +2 -0
- package/lib/components/VTable/VTable.sass +2 -0
- package/lib/components/VTextField/index.d.mts +16 -16
- package/lib/components/VTextarea/index.d.mts +4 -4
- package/lib/components/VTimeline/VTimeline.css +2 -2
- package/lib/components/VTimeline/VTimeline.sass +2 -2
- package/lib/components/VWindow/VWindow.mjs +1 -0
- package/lib/components/VWindow/VWindow.mjs.map +1 -1
- package/lib/components/VWindow/VWindowItem.mjs +3 -1
- package/lib/components/VWindow/VWindowItem.mjs.map +1 -1
- package/lib/components/VWindow/index.d.mts +29 -11
- package/lib/components/index.d.mts +223 -81
- package/lib/composables/group.mjs +1 -1
- package/lib/composables/group.mjs.map +1 -1
- package/lib/composables/theme.mjs +12 -6
- package/lib/composables/theme.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/entry-bundler.mjs.map +1 -1
- package/lib/framework.mjs +1 -1
- package/lib/framework.mjs.map +1 -1
- package/lib/index.d.mts +9 -2
- package/lib/labs/VDateInput/index.d.mts +4 -4
- package/lib/labs/VDateRangePicker/VDateRangePickerHeader.mjs +2 -2
- package/lib/labs/VDateRangePicker/VDateRangePickerHeader.mjs.map +1 -1
- package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs +0 -1
- package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -1
- package/lib/labs/VOtpInput/VOtpInput.css +53 -0
- package/lib/labs/VOtpInput/VOtpInput.mjs +215 -0
- package/lib/labs/VOtpInput/VOtpInput.mjs.map +1 -0
- package/lib/labs/VOtpInput/VOtpInput.sass +55 -0
- package/lib/labs/VOtpInput/_variables.scss +2 -0
- package/lib/labs/VOtpInput/index.d.mts +459 -0
- package/lib/labs/VOtpInput/index.mjs +2 -0
- package/lib/labs/VOtpInput/index.mjs.map +1 -0
- package/lib/labs/VStepper/VStepper.css +42 -0
- package/lib/labs/VStepper/VStepper.mjs +150 -0
- package/lib/labs/VStepper/VStepper.mjs.map +1 -0
- package/lib/labs/VStepper/VStepper.sass +44 -0
- package/lib/labs/VStepper/VStepperActions.mjs +61 -0
- package/lib/labs/VStepper/VStepperActions.mjs.map +1 -0
- package/lib/labs/VStepper/VStepperHeader.mjs +4 -0
- package/lib/labs/VStepper/VStepperHeader.mjs.map +1 -0
- package/lib/labs/VStepper/VStepperItem.css +67 -0
- package/lib/labs/VStepper/VStepperItem.mjs +114 -0
- package/lib/labs/VStepper/VStepperItem.mjs.map +1 -0
- package/lib/labs/VStepper/VStepperItem.sass +71 -0
- package/lib/labs/VStepper/VStepperWindow.mjs +50 -0
- package/lib/labs/VStepper/VStepperWindow.mjs.map +1 -0
- package/lib/labs/VStepper/VStepperWindowItem.mjs +24 -0
- package/lib/labs/VStepper/VStepperWindowItem.mjs.map +1 -0
- package/lib/labs/VStepper/_variables.scss +4 -0
- package/lib/labs/VStepper/index.d.mts +2045 -0
- package/lib/labs/VStepper/index.mjs +7 -0
- package/lib/labs/VStepper/index.mjs.map +1 -0
- package/lib/labs/components.d.mts +2745 -267
- package/lib/labs/components.mjs +2 -0
- package/lib/labs/components.mjs.map +1 -1
- package/lib/locale/af.mjs +6 -1
- package/lib/locale/af.mjs.map +1 -1
- package/lib/locale/ar.mjs +6 -1
- package/lib/locale/ar.mjs.map +1 -1
- package/lib/locale/az.mjs +6 -1
- package/lib/locale/az.mjs.map +1 -1
- package/lib/locale/bg.mjs +6 -1
- package/lib/locale/bg.mjs.map +1 -1
- package/lib/locale/ca.mjs +6 -1
- package/lib/locale/ca.mjs.map +1 -1
- package/lib/locale/ckb.mjs +6 -1
- package/lib/locale/ckb.mjs.map +1 -1
- package/lib/locale/cs.mjs +6 -1
- package/lib/locale/cs.mjs.map +1 -1
- package/lib/locale/da.mjs +6 -1
- package/lib/locale/da.mjs.map +1 -1
- package/lib/locale/de.mjs +6 -1
- package/lib/locale/de.mjs.map +1 -1
- package/lib/locale/el.mjs +6 -1
- package/lib/locale/el.mjs.map +1 -1
- package/lib/locale/en.mjs +6 -1
- package/lib/locale/en.mjs.map +1 -1
- package/lib/locale/es.mjs +6 -1
- package/lib/locale/es.mjs.map +1 -1
- package/lib/locale/et.mjs +6 -1
- package/lib/locale/et.mjs.map +1 -1
- package/lib/locale/fa.mjs +6 -1
- package/lib/locale/fa.mjs.map +1 -1
- package/lib/locale/fi.mjs +6 -1
- package/lib/locale/fi.mjs.map +1 -1
- package/lib/locale/fr.mjs +6 -1
- package/lib/locale/fr.mjs.map +1 -1
- package/lib/locale/he.mjs +6 -1
- package/lib/locale/he.mjs.map +1 -1
- package/lib/locale/hr.mjs +6 -1
- package/lib/locale/hr.mjs.map +1 -1
- package/lib/locale/hu.mjs +6 -1
- package/lib/locale/hu.mjs.map +1 -1
- package/lib/locale/id.mjs +6 -1
- package/lib/locale/id.mjs.map +1 -1
- package/lib/locale/index.d.mts +210 -0
- package/lib/locale/it.mjs +6 -1
- package/lib/locale/it.mjs.map +1 -1
- package/lib/locale/ja.mjs +6 -1
- package/lib/locale/ja.mjs.map +1 -1
- package/lib/locale/ko.mjs +6 -1
- package/lib/locale/ko.mjs.map +1 -1
- package/lib/locale/lt.mjs +6 -1
- package/lib/locale/lt.mjs.map +1 -1
- package/lib/locale/lv.mjs +6 -1
- package/lib/locale/lv.mjs.map +1 -1
- package/lib/locale/nl.mjs +6 -1
- package/lib/locale/nl.mjs.map +1 -1
- package/lib/locale/no.mjs +6 -1
- package/lib/locale/no.mjs.map +1 -1
- package/lib/locale/pl.mjs +6 -1
- package/lib/locale/pl.mjs.map +1 -1
- package/lib/locale/pt.mjs +6 -1
- package/lib/locale/pt.mjs.map +1 -1
- package/lib/locale/ro.mjs +23 -18
- package/lib/locale/ro.mjs.map +1 -1
- package/lib/locale/ru.mjs +6 -1
- package/lib/locale/ru.mjs.map +1 -1
- package/lib/locale/sk.mjs +6 -1
- package/lib/locale/sk.mjs.map +1 -1
- package/lib/locale/sl.mjs +6 -1
- package/lib/locale/sl.mjs.map +1 -1
- package/lib/locale/sr-Cyrl.mjs +6 -1
- package/lib/locale/sr-Cyrl.mjs.map +1 -1
- package/lib/locale/sr-Latn.mjs +6 -1
- package/lib/locale/sr-Latn.mjs.map +1 -1
- package/lib/locale/sv.mjs +6 -1
- package/lib/locale/sv.mjs.map +1 -1
- package/lib/locale/th.mjs +6 -1
- package/lib/locale/th.mjs.map +1 -1
- package/lib/locale/tr.mjs +6 -1
- package/lib/locale/tr.mjs.map +1 -1
- package/lib/locale/uk.mjs +6 -1
- package/lib/locale/uk.mjs.map +1 -1
- package/lib/locale/vi.mjs +6 -1
- package/lib/locale/vi.mjs.map +1 -1
- package/lib/locale/zh-Hans.mjs +6 -1
- package/lib/locale/zh-Hans.mjs.map +1 -1
- package/lib/locale/zh-Hant.mjs +6 -1
- package/lib/locale/zh-Hant.mjs.map +1 -1
- package/lib/styles/main.css +1026 -0
- package/lib/styles/settings/_utilities.scss +20 -0
- package/lib/util/helpers.mjs +20 -9
- package/lib/util/helpers.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -158,11 +158,11 @@ declare const VListItem: {
|
|
|
158
158
|
"v-slot:prepend"?: false | ((arg: ListItemSlot) => vue.VNodeChild) | undefined;
|
|
159
159
|
prependIcon?: IconValue | undefined;
|
|
160
160
|
appendIcon?: IconValue | undefined;
|
|
161
|
+
baseColor?: string | undefined;
|
|
161
162
|
activeClass?: string | undefined;
|
|
162
163
|
appendAvatar?: string | undefined;
|
|
163
164
|
prependAvatar?: string | undefined;
|
|
164
165
|
activeColor?: string | undefined;
|
|
165
|
-
baseColor?: string | undefined;
|
|
166
166
|
subtitle?: string | number | boolean | undefined;
|
|
167
167
|
lines?: "one" | "two" | "three" | undefined;
|
|
168
168
|
"v-slot:subtitle"?: false | ((arg: ListItemSubtitleSlot) => vue.VNodeChild) | undefined;
|
|
@@ -229,11 +229,11 @@ declare const VListItem: {
|
|
|
229
229
|
rounded?: string | number | boolean | undefined;
|
|
230
230
|
prependIcon?: IconValue | undefined;
|
|
231
231
|
appendIcon?: IconValue | undefined;
|
|
232
|
+
baseColor?: string | undefined;
|
|
232
233
|
activeClass?: string | undefined;
|
|
233
234
|
appendAvatar?: string | undefined;
|
|
234
235
|
prependAvatar?: string | undefined;
|
|
235
236
|
activeColor?: string | undefined;
|
|
236
|
-
baseColor?: string | undefined;
|
|
237
237
|
subtitle?: string | number | boolean | undefined;
|
|
238
238
|
lines?: "one" | "two" | "three" | undefined;
|
|
239
239
|
} & {
|
|
@@ -347,11 +347,11 @@ declare const VListItem: {
|
|
|
347
347
|
rounded?: string | number | boolean | undefined;
|
|
348
348
|
prependIcon?: IconValue | undefined;
|
|
349
349
|
appendIcon?: IconValue | undefined;
|
|
350
|
+
baseColor?: string | undefined;
|
|
350
351
|
activeClass?: string | undefined;
|
|
351
352
|
appendAvatar?: string | undefined;
|
|
352
353
|
prependAvatar?: string | undefined;
|
|
353
354
|
activeColor?: string | undefined;
|
|
354
|
-
baseColor?: string | undefined;
|
|
355
355
|
subtitle?: string | number | boolean | undefined;
|
|
356
356
|
lines?: "one" | "two" | "three" | undefined;
|
|
357
357
|
} & {
|
|
@@ -416,11 +416,11 @@ declare const VListItem: {
|
|
|
416
416
|
rounded?: string | number | boolean | undefined;
|
|
417
417
|
prependIcon?: IconValue | undefined;
|
|
418
418
|
appendIcon?: IconValue | undefined;
|
|
419
|
+
baseColor?: string | undefined;
|
|
419
420
|
activeClass?: string | undefined;
|
|
420
421
|
appendAvatar?: string | undefined;
|
|
421
422
|
prependAvatar?: string | undefined;
|
|
422
423
|
activeColor?: string | undefined;
|
|
423
|
-
baseColor?: string | undefined;
|
|
424
424
|
subtitle?: string | number | boolean | undefined;
|
|
425
425
|
lines?: "one" | "two" | "three" | undefined;
|
|
426
426
|
} & {
|
|
@@ -774,12 +774,12 @@ declare const VList: {
|
|
|
774
774
|
[key: string]: any;
|
|
775
775
|
}>) => void)[] | undefined;
|
|
776
776
|
bgColor?: string | undefined;
|
|
777
|
+
baseColor?: string | undefined;
|
|
777
778
|
activeClass?: string | undefined;
|
|
778
779
|
opened?: readonly unknown[] | undefined;
|
|
779
780
|
"onUpdate:selected"?: ((val: unknown[]) => any) | undefined;
|
|
780
781
|
"onUpdate:opened"?: ((val: unknown[]) => any) | undefined;
|
|
781
782
|
activeColor?: string | undefined;
|
|
782
|
-
baseColor?: string | undefined;
|
|
783
783
|
"onClick:open"?: ((value: {
|
|
784
784
|
id: unknown;
|
|
785
785
|
value: boolean;
|
|
@@ -912,10 +912,10 @@ declare const VList: {
|
|
|
912
912
|
theme?: string | undefined;
|
|
913
913
|
rounded?: string | number | boolean | undefined;
|
|
914
914
|
bgColor?: string | undefined;
|
|
915
|
+
baseColor?: string | undefined;
|
|
915
916
|
activeClass?: string | undefined;
|
|
916
917
|
opened?: readonly unknown[] | undefined;
|
|
917
918
|
activeColor?: string | undefined;
|
|
918
|
-
baseColor?: string | undefined;
|
|
919
919
|
} & {
|
|
920
920
|
"onUpdate:selected"?: ((val: unknown[]) => any) | undefined;
|
|
921
921
|
"onUpdate:opened"?: ((val: unknown[]) => any) | undefined;
|
|
@@ -1086,10 +1086,10 @@ declare const VList: {
|
|
|
1086
1086
|
theme?: string | undefined;
|
|
1087
1087
|
rounded?: string | number | boolean | undefined;
|
|
1088
1088
|
bgColor?: string | undefined;
|
|
1089
|
+
baseColor?: string | undefined;
|
|
1089
1090
|
activeClass?: string | undefined;
|
|
1090
1091
|
opened?: readonly unknown[] | undefined;
|
|
1091
1092
|
activeColor?: string | undefined;
|
|
1092
|
-
baseColor?: string | undefined;
|
|
1093
1093
|
} & {
|
|
1094
1094
|
"onUpdate:selected"?: ((val: unknown[]) => any) | undefined;
|
|
1095
1095
|
"onUpdate:opened"?: ((val: unknown[]) => any) | undefined;
|
|
@@ -1143,10 +1143,10 @@ declare const VList: {
|
|
|
1143
1143
|
theme?: string | undefined;
|
|
1144
1144
|
rounded?: string | number | boolean | undefined;
|
|
1145
1145
|
bgColor?: string | undefined;
|
|
1146
|
+
baseColor?: string | undefined;
|
|
1146
1147
|
activeClass?: string | undefined;
|
|
1147
1148
|
opened?: readonly unknown[] | undefined;
|
|
1148
1149
|
activeColor?: string | undefined;
|
|
1149
|
-
baseColor?: string | undefined;
|
|
1150
1150
|
} & {
|
|
1151
1151
|
"onUpdate:selected"?: ((val: unknown[]) => any) | undefined;
|
|
1152
1152
|
"onUpdate:opened"?: ((val: unknown[]) => any) | undefined;
|
|
@@ -1518,8 +1518,8 @@ declare const VListGroup: {
|
|
|
1518
1518
|
}>) => void)[] | undefined;
|
|
1519
1519
|
prependIcon?: IconValue | undefined;
|
|
1520
1520
|
appendIcon?: IconValue | undefined;
|
|
1521
|
-
activeColor?: string | undefined;
|
|
1522
1521
|
baseColor?: string | undefined;
|
|
1522
|
+
activeColor?: string | undefined;
|
|
1523
1523
|
"v-slot:activator"?: false | ((arg: {
|
|
1524
1524
|
isOpen: boolean;
|
|
1525
1525
|
props: Record<string, unknown>;
|
|
@@ -1560,8 +1560,8 @@ declare const VListGroup: {
|
|
|
1560
1560
|
class?: any;
|
|
1561
1561
|
prependIcon?: IconValue | undefined;
|
|
1562
1562
|
appendIcon?: IconValue | undefined;
|
|
1563
|
-
activeColor?: string | undefined;
|
|
1564
1563
|
baseColor?: string | undefined;
|
|
1564
|
+
activeColor?: string | undefined;
|
|
1565
1565
|
} & {
|
|
1566
1566
|
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
|
|
1567
1567
|
default?: (() => vue.VNodeChild) | undefined;
|
|
@@ -1634,8 +1634,8 @@ declare const VListGroup: {
|
|
|
1634
1634
|
class?: any;
|
|
1635
1635
|
prependIcon?: IconValue | undefined;
|
|
1636
1636
|
appendIcon?: IconValue | undefined;
|
|
1637
|
-
activeColor?: string | undefined;
|
|
1638
1637
|
baseColor?: string | undefined;
|
|
1638
|
+
activeColor?: string | undefined;
|
|
1639
1639
|
} & {
|
|
1640
1640
|
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
|
|
1641
1641
|
default?: (() => vue.VNodeChild) | undefined;
|
|
@@ -1675,8 +1675,8 @@ declare const VListGroup: {
|
|
|
1675
1675
|
class?: any;
|
|
1676
1676
|
prependIcon?: IconValue | undefined;
|
|
1677
1677
|
appendIcon?: IconValue | undefined;
|
|
1678
|
-
activeColor?: string | undefined;
|
|
1679
1678
|
baseColor?: string | undefined;
|
|
1679
|
+
activeColor?: string | undefined;
|
|
1680
1680
|
} & {
|
|
1681
1681
|
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
|
|
1682
1682
|
default?: (() => vue.VNodeChild) | undefined;
|
|
@@ -12,7 +12,7 @@ import { useProxiedModel } from "../../composables/proxiedModel.mjs";
|
|
|
12
12
|
import { useScopeId } from "../../composables/scopeId.mjs"; // Utilities
|
|
13
13
|
import { computed, inject, mergeProps, provide, ref, shallowRef, watch } from 'vue';
|
|
14
14
|
import { VMenuSymbol } from "./shared.mjs";
|
|
15
|
-
import { focusChild, genericComponent, getUid, omit, propsFactory, useRender } from "../../util/index.mjs"; // Types
|
|
15
|
+
import { focusableChildren, focusChild, genericComponent, getNextElement, getUid, omit, propsFactory, useRender } from "../../util/index.mjs"; // Types
|
|
16
16
|
export const makeVMenuProps = propsFactory({
|
|
17
17
|
// TODO
|
|
18
18
|
// disableKeys: Boolean,
|
|
@@ -64,8 +64,30 @@ export const VMenu = genericComponent()({
|
|
|
64
64
|
}, 40);
|
|
65
65
|
}
|
|
66
66
|
});
|
|
67
|
+
function onFocusIn(e) {
|
|
68
|
+
const before = e.relatedTarget;
|
|
69
|
+
const after = e.target;
|
|
70
|
+
if (before !== after && overlay.value?.contentEl &&
|
|
71
|
+
// We're the topmost menu
|
|
72
|
+
overlay.value?.globalTop &&
|
|
73
|
+
// It isn't the document or the menu body
|
|
74
|
+
![document, overlay.value.contentEl].includes(after) &&
|
|
75
|
+
// It isn't inside the menu body
|
|
76
|
+
!overlay.value.contentEl.contains(after)) {
|
|
77
|
+
const focusable = focusableChildren(overlay.value.contentEl);
|
|
78
|
+
focusable[0]?.focus();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
67
81
|
watch(isActive, val => {
|
|
68
|
-
|
|
82
|
+
if (val) {
|
|
83
|
+
parent?.register();
|
|
84
|
+
document.addEventListener('focusin', onFocusIn, {
|
|
85
|
+
once: true
|
|
86
|
+
});
|
|
87
|
+
} else {
|
|
88
|
+
parent?.unregister();
|
|
89
|
+
document.removeEventListener('focusin', onFocusIn);
|
|
90
|
+
}
|
|
69
91
|
});
|
|
70
92
|
function onClickOutside() {
|
|
71
93
|
parent?.closeParents();
|
|
@@ -73,8 +95,11 @@ export const VMenu = genericComponent()({
|
|
|
73
95
|
function onKeydown(e) {
|
|
74
96
|
if (props.disabled) return;
|
|
75
97
|
if (e.key === 'Tab') {
|
|
76
|
-
|
|
77
|
-
|
|
98
|
+
const nextElement = getNextElement(focusableChildren(overlay.value?.contentEl, false), e.shiftKey ? 'prev' : 'next', el => el.tabIndex >= 0);
|
|
99
|
+
if (!nextElement) {
|
|
100
|
+
isActive.value = false;
|
|
101
|
+
overlay.value?.activatorEl?.focus();
|
|
102
|
+
}
|
|
78
103
|
}
|
|
79
104
|
}
|
|
80
105
|
function onActivatorKeydown(e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VMenu.mjs","names":["VDialogTransition","VDefaultsProvider","VOverlay","makeVOverlayProps","forwardRefs","useProxiedModel","useScopeId","computed","inject","mergeProps","provide","ref","shallowRef","watch","VMenuSymbol","focusChild","genericComponent","getUid","omit","propsFactory","useRender","makeVMenuProps","id","String","closeDelay","closeOnContentClick","locationStrategy","openDelay","scrim","scrollStrategy","transition","component","VMenu","name","props","emits","value","setup","_ref","slots","isActive","scopeId","uid","overlay","parent","openChildren","register","unregister","closeParents","setTimeout","val","onClickOutside","onKeydown","e","disabled","key","activatorEl","focus","onActivatorKeydown","el","contentEl","preventDefault","includes","activatorProps","overlayProps","filterProps","_createVNode","_mergeProps","class","style","$event","activator","default","_len","arguments","length","args","Array","_key","ΨopenChildren"],"sources":["../../../src/components/VMenu/VMenu.tsx"],"sourcesContent":["// Styles\nimport './VMenu.sass'\n\n// Components\nimport { VDialogTransition } from '@/components/transitions'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VOverlay } from '@/components/VOverlay'\nimport { makeVOverlayProps } from '@/components/VOverlay/VOverlay'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useScopeId } from '@/composables/scopeId'\n\n// Utilities\nimport { computed, inject, mergeProps, provide, ref, shallowRef, watch } from 'vue'\nimport { VMenuSymbol } from './shared'\nimport { focusChild, genericComponent, getUid, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Component } from 'vue'\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\n\nexport const makeVMenuProps = propsFactory({\n // TODO\n // disableKeys: Boolean,\n id: String,\n\n ...omit(makeVOverlayProps({\n closeDelay: 250,\n closeOnContentClick: true,\n locationStrategy: 'connected' as const,\n openDelay: 300,\n scrim: false,\n scrollStrategy: 'reposition' as const,\n transition: { component: VDialogTransition as Component },\n }), ['absolute']),\n}, 'VMenu')\n\nexport const VMenu = genericComponent<OverlaySlots>()({\n name: 'VMenu',\n\n props: makeVMenuProps(),\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { scopeId } = useScopeId()\n\n const uid = getUid()\n const id = computed(() => props.id || `v-menu-${uid}`)\n\n const overlay = ref<VOverlay>()\n\n const parent = inject(VMenuSymbol, null)\n const openChildren = shallowRef(0)\n provide(VMenuSymbol, {\n register () {\n ++openChildren.value\n },\n unregister () {\n --openChildren.value\n },\n closeParents () {\n setTimeout(() => {\n if (!openChildren.value) {\n isActive.value = false\n parent?.closeParents()\n }\n }, 40)\n },\n })\n\n watch(isActive, val => {\n val ? parent?.register() : parent?.unregister()\n })\n\n function onClickOutside () {\n parent?.closeParents()\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (props.disabled) return\n\n if (e.key === 'Tab') {\n isActive.value = false\n overlay.value?.activatorEl?.focus()\n }\n }\n\n function onActivatorKeydown (e: KeyboardEvent) {\n if (props.disabled) return\n\n const el = overlay.value?.contentEl\n if (el && isActive.value) {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n focusChild(el, 'next')\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n focusChild(el, 'prev')\n }\n } else if (['ArrowDown', 'ArrowUp'].includes(e.key)) {\n isActive.value = true\n e.preventDefault()\n setTimeout(() => setTimeout(() => onActivatorKeydown(e)))\n }\n }\n\n const activatorProps = computed(() =>\n mergeProps({\n 'aria-haspopup': 'menu',\n 'aria-expanded': String(isActive.value),\n 'aria-owns': id.value,\n onKeydown: onActivatorKeydown,\n }, props.activatorProps)\n )\n\n useRender(() => {\n const [overlayProps] = VOverlay.filterProps(props)\n\n return (\n <VOverlay\n ref={ overlay }\n class={[\n 'v-menu',\n props.class,\n ]}\n style={ props.style }\n { ...overlayProps }\n v-model={ isActive.value }\n absolute\n activatorProps={ activatorProps.value }\n onClick:outside={ onClickOutside }\n onKeydown={ onKeydown }\n { ...scopeId }\n >\n {{\n activator: slots.activator,\n default: (...args) => (\n <VDefaultsProvider root=\"VMenu\">\n { slots.default?.(...args) }\n </VDefaultsProvider>\n ),\n }}\n </VOverlay>\n )\n })\n\n return forwardRefs({ id, ΨopenChildren: openChildren }, overlay)\n },\n})\n\nexport type VMenu = InstanceType<typeof VMenu>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VMenu.mjs","names":["VDialogTransition","VDefaultsProvider","VOverlay","makeVOverlayProps","forwardRefs","useProxiedModel","useScopeId","computed","inject","mergeProps","provide","ref","shallowRef","watch","VMenuSymbol","focusableChildren","focusChild","genericComponent","getNextElement","getUid","omit","propsFactory","useRender","makeVMenuProps","id","String","closeDelay","closeOnContentClick","locationStrategy","openDelay","scrim","scrollStrategy","transition","component","VMenu","name","props","emits","value","setup","_ref","slots","isActive","scopeId","uid","overlay","parent","openChildren","register","unregister","closeParents","setTimeout","onFocusIn","e","before","relatedTarget","after","target","contentEl","globalTop","document","includes","contains","focusable","focus","val","addEventListener","once","removeEventListener","onClickOutside","onKeydown","disabled","key","nextElement","shiftKey","el","tabIndex","activatorEl","onActivatorKeydown","preventDefault","activatorProps","overlayProps","filterProps","_createVNode","_mergeProps","class","style","$event","activator","default","_len","arguments","length","args","Array","_key","ΨopenChildren"],"sources":["../../../src/components/VMenu/VMenu.tsx"],"sourcesContent":["// Styles\nimport './VMenu.sass'\n\n// Components\nimport { VDialogTransition } from '@/components/transitions'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VOverlay } from '@/components/VOverlay'\nimport { makeVOverlayProps } from '@/components/VOverlay/VOverlay'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useScopeId } from '@/composables/scopeId'\n\n// Utilities\nimport { computed, inject, mergeProps, provide, ref, shallowRef, watch } from 'vue'\nimport { VMenuSymbol } from './shared'\nimport { focusableChildren, focusChild, genericComponent, getNextElement, getUid, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Component } from 'vue'\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\n\nexport const makeVMenuProps = propsFactory({\n // TODO\n // disableKeys: Boolean,\n id: String,\n\n ...omit(makeVOverlayProps({\n closeDelay: 250,\n closeOnContentClick: true,\n locationStrategy: 'connected' as const,\n openDelay: 300,\n scrim: false,\n scrollStrategy: 'reposition' as const,\n transition: { component: VDialogTransition as Component },\n }), ['absolute']),\n}, 'VMenu')\n\nexport const VMenu = genericComponent<OverlaySlots>()({\n name: 'VMenu',\n\n props: makeVMenuProps(),\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { scopeId } = useScopeId()\n\n const uid = getUid()\n const id = computed(() => props.id || `v-menu-${uid}`)\n\n const overlay = ref<VOverlay>()\n\n const parent = inject(VMenuSymbol, null)\n const openChildren = shallowRef(0)\n provide(VMenuSymbol, {\n register () {\n ++openChildren.value\n },\n unregister () {\n --openChildren.value\n },\n closeParents () {\n setTimeout(() => {\n if (!openChildren.value) {\n isActive.value = false\n parent?.closeParents()\n }\n }, 40)\n },\n })\n\n function onFocusIn (e: FocusEvent) {\n const before = e.relatedTarget as HTMLElement | null\n const after = e.target as HTMLElement | null\n\n if (\n before !== after &&\n overlay.value?.contentEl &&\n // We're the topmost menu\n overlay.value?.globalTop &&\n // It isn't the document or the menu body\n ![document, overlay.value.contentEl].includes(after!) &&\n // It isn't inside the menu body\n !overlay.value.contentEl.contains(after)\n ) {\n const focusable = focusableChildren(overlay.value.contentEl)\n focusable[0]?.focus()\n }\n }\n\n watch(isActive, val => {\n if (val) {\n parent?.register()\n document.addEventListener('focusin', onFocusIn, { once: true })\n } else {\n parent?.unregister()\n document.removeEventListener('focusin', onFocusIn)\n }\n })\n\n function onClickOutside () {\n parent?.closeParents()\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (props.disabled) return\n\n if (e.key === 'Tab') {\n const nextElement = getNextElement(\n focusableChildren(overlay.value?.contentEl as Element, false),\n e.shiftKey ? 'prev' : 'next',\n (el: HTMLElement) => el.tabIndex >= 0\n )\n if (!nextElement) {\n isActive.value = false\n overlay.value?.activatorEl?.focus()\n }\n }\n }\n\n function onActivatorKeydown (e: KeyboardEvent) {\n if (props.disabled) return\n\n const el = overlay.value?.contentEl\n if (el && isActive.value) {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n focusChild(el, 'next')\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n focusChild(el, 'prev')\n }\n } else if (['ArrowDown', 'ArrowUp'].includes(e.key)) {\n isActive.value = true\n e.preventDefault()\n setTimeout(() => setTimeout(() => onActivatorKeydown(e)))\n }\n }\n\n const activatorProps = computed(() =>\n mergeProps({\n 'aria-haspopup': 'menu',\n 'aria-expanded': String(isActive.value),\n 'aria-owns': id.value,\n onKeydown: onActivatorKeydown,\n }, props.activatorProps)\n )\n\n useRender(() => {\n const [overlayProps] = VOverlay.filterProps(props)\n\n return (\n <VOverlay\n ref={ overlay }\n class={[\n 'v-menu',\n props.class,\n ]}\n style={ props.style }\n { ...overlayProps }\n v-model={ isActive.value }\n absolute\n activatorProps={ activatorProps.value }\n onClick:outside={ onClickOutside }\n onKeydown={ onKeydown }\n { ...scopeId }\n >\n {{\n activator: slots.activator,\n default: (...args) => (\n <VDefaultsProvider root=\"VMenu\">\n { slots.default?.(...args) }\n </VDefaultsProvider>\n ),\n }}\n </VOverlay>\n )\n })\n\n return forwardRefs({ id, ΨopenChildren: openChildren }, overlay)\n },\n})\n\nexport type VMenu = InstanceType<typeof VMenu>\n"],"mappings":"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"}
|
|
@@ -108,6 +108,7 @@ declare const VRadio: {
|
|
|
108
108
|
}>) => void)[] | undefined;
|
|
109
109
|
modelValue?: any;
|
|
110
110
|
defaultsTarget?: string | undefined;
|
|
111
|
+
baseColor?: string | undefined;
|
|
111
112
|
trueValue?: any;
|
|
112
113
|
falseValue?: any;
|
|
113
114
|
"v-slot:input"?: false | ((arg: SelectionControlSlot) => vue.VNodeChild) | undefined;
|
|
@@ -163,6 +164,7 @@ declare const VRadio: {
|
|
|
163
164
|
theme?: string | undefined;
|
|
164
165
|
modelValue?: any;
|
|
165
166
|
defaultsTarget?: string | undefined;
|
|
167
|
+
baseColor?: string | undefined;
|
|
166
168
|
trueValue?: any;
|
|
167
169
|
falseValue?: any;
|
|
168
170
|
} & {
|
|
@@ -257,6 +259,7 @@ declare const VRadio: {
|
|
|
257
259
|
theme?: string | undefined;
|
|
258
260
|
modelValue?: any;
|
|
259
261
|
defaultsTarget?: string | undefined;
|
|
262
|
+
baseColor?: string | undefined;
|
|
260
263
|
trueValue?: any;
|
|
261
264
|
falseValue?: any;
|
|
262
265
|
} & {
|
|
@@ -310,6 +313,7 @@ declare const VRadio: {
|
|
|
310
313
|
theme?: string | undefined;
|
|
311
314
|
modelValue?: any;
|
|
312
315
|
defaultsTarget?: string | undefined;
|
|
316
|
+
baseColor?: string | undefined;
|
|
313
317
|
trueValue?: any;
|
|
314
318
|
falseValue?: any;
|
|
315
319
|
} & {
|
|
@@ -407,6 +411,7 @@ declare const VRadio: {
|
|
|
407
411
|
default: typeof deepEqual;
|
|
408
412
|
};
|
|
409
413
|
label: StringConstructor;
|
|
414
|
+
baseColor: StringConstructor;
|
|
410
415
|
trueValue: null;
|
|
411
416
|
falseValue: null;
|
|
412
417
|
value: null;
|
|
@@ -456,6 +461,7 @@ declare const VRadio: {
|
|
|
456
461
|
default: typeof deepEqual;
|
|
457
462
|
};
|
|
458
463
|
label: StringConstructor;
|
|
464
|
+
baseColor: StringConstructor;
|
|
459
465
|
trueValue: null;
|
|
460
466
|
falseValue: null;
|
|
461
467
|
value: null;
|
|
@@ -180,7 +180,8 @@ export const VRangeSlider = genericComponent()({
|
|
|
180
180
|
},
|
|
181
181
|
"min": min.value,
|
|
182
182
|
"max": model.value[1],
|
|
183
|
-
"position": trackStart.value
|
|
183
|
+
"position": trackStart.value,
|
|
184
|
+
"ripple": props.ripple
|
|
184
185
|
}, {
|
|
185
186
|
'thumb-label': slots['thumb-label']
|
|
186
187
|
}), _createVNode(VSliderThumb, {
|
|
@@ -208,7 +209,8 @@ export const VRangeSlider = genericComponent()({
|
|
|
208
209
|
},
|
|
209
210
|
"min": model.value[0],
|
|
210
211
|
"max": max.value,
|
|
211
|
-
"position": trackStop.value
|
|
212
|
+
"position": trackStop.value,
|
|
213
|
+
"ripple": props.ripple
|
|
212
214
|
}, {
|
|
213
215
|
'thumb-label': slots['thumb-label']
|
|
214
216
|
})]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VRangeSlider.mjs","names":["makeVInputProps","VInput","VLabel","getOffset","makeSliderProps","useSlider","useSteps","VSliderThumb","VSliderTrack","makeFocusProps","useFocus","useRtl","useProxiedModel","computed","ref","genericComponent","propsFactory","useRender","makeVRangeSliderProps","strict","Boolean","modelValue","type","Array","default","VRangeSlider","name","props","emits","value","end","start","setup","_ref","slots","emit","startThumbRef","stopThumbRef","inputRef","rtlClasses","getActiveThumb","e","startOffset","$el","direction","stopOffset","a","Math","abs","b","steps","model","undefined","arr","length","map","roundValue","activeThumbRef","hasLabels","max","min","mousePressed","onSliderMousedown","onSliderTouchstart","position","trackContainerRef","onSliderStart","onSliderEnd","_ref2","newValue","onSliderMove","_ref3","stop","focus","isFocused","blur","trackStart","trackStop","inputProps","_","filterProps","hasPrepend","label","prepend","_createVNode","_mergeProps","disabled","class","style","slotProps","_Fragment","_ref4","id","messagesId","readonly","v","relatedTarget","onBlur"],"sources":["../../../src/components/VRangeSlider/VRangeSlider.tsx"],"sourcesContent":["// Styles\nimport '../VSlider/VSlider.sass'\n\n// Components\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VLabel } from '@/components/VLabel'\nimport { getOffset, makeSliderProps, useSlider, useSteps } from '@/components/VSlider/slider'\nimport { VSliderThumb } from '@/components/VSlider/VSliderThumb'\nimport { VSliderTrack } from '@/components/VSlider/VSliderTrack'\n\n// Composables\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { useRtl } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType, WritableComputedRef } from 'vue'\nimport type { VSliderSlots } from '../VSlider/VSlider'\n\nexport const makeVRangeSliderProps = propsFactory({\n ...makeFocusProps(),\n ...makeVInputProps(),\n ...makeSliderProps(),\n\n strict: Boolean,\n modelValue: {\n type: Array as PropType<readonly (string | number)[]>,\n default: () => ([0, 0]),\n },\n}, 'VRangeSlider')\n\nexport const VRangeSlider = genericComponent<VSliderSlots>()({\n name: 'VRangeSlider',\n\n props: makeVRangeSliderProps(),\n\n emits: {\n 'update:focused': (value: boolean) => true,\n 'update:modelValue': (value: [number, number]) => true,\n end: (value: [number, number]) => true,\n start: (value: [number, number]) => true,\n },\n\n setup (props, { slots, emit }) {\n const startThumbRef = ref<VSliderThumb>()\n const stopThumbRef = ref<VSliderThumb>()\n const inputRef = ref<VInput>()\n const { rtlClasses } = useRtl()\n\n function getActiveThumb (e: MouseEvent | TouchEvent) {\n if (!startThumbRef.value || !stopThumbRef.value) return\n\n const startOffset = getOffset(e, startThumbRef.value.$el, props.direction)\n const stopOffset = getOffset(e, stopThumbRef.value.$el, props.direction)\n\n const a = Math.abs(startOffset)\n const b = Math.abs(stopOffset)\n\n return (a < b || (a === b && startOffset < 0)) ? startThumbRef.value.$el : stopThumbRef.value.$el\n }\n\n const steps = useSteps(props)\n\n const model = useProxiedModel(\n props,\n 'modelValue',\n undefined,\n arr => {\n if (!arr?.length) return [0, 0]\n\n return arr.map(value => steps.roundValue(value))\n },\n ) as WritableComputedRef<[number, number]> & { readonly externalValue: number[] }\n\n const {\n activeThumbRef,\n hasLabels,\n max,\n min,\n mousePressed,\n onSliderMousedown,\n onSliderTouchstart,\n position,\n trackContainerRef,\n } = useSlider({\n props,\n steps,\n onSliderStart: () => {\n emit('start', model.value)\n },\n onSliderEnd: ({ value }) => {\n const newValue: [number, number] = activeThumbRef.value === startThumbRef.value?.$el\n ? [value, model.value[1]]\n : [model.value[0], value]\n\n if (!props.strict && newValue[0] < newValue[1]) {\n model.value = newValue\n }\n\n emit('end', model.value)\n },\n onSliderMove: ({ value }) => {\n const [start, stop] = model.value\n\n if (!props.strict && start === stop && start !== min.value) {\n activeThumbRef.value = value > start ? stopThumbRef.value?.$el : startThumbRef.value?.$el\n activeThumbRef.value?.focus()\n }\n\n if (activeThumbRef.value === startThumbRef.value?.$el) {\n model.value = [Math.min(value, stop), stop]\n } else {\n model.value = [start, Math.max(start, value)]\n }\n },\n getActiveThumb,\n })\n\n const { isFocused, focus, blur } = useFocus(props)\n const trackStart = computed(() => position(model.value[0]))\n const trackStop = computed(() => position(model.value[1]))\n\n useRender(() => {\n const [inputProps, _] = VInput.filterProps(props)\n const hasPrepend = !!(props.label || slots.label || slots.prepend)\n\n return (\n <VInput\n class={[\n 'v-slider',\n 'v-range-slider',\n {\n 'v-slider--has-labels': !!slots['tick-label'] || hasLabels.value,\n 'v-slider--focused': isFocused.value,\n 'v-slider--pressed': mousePressed.value,\n 'v-slider--disabled': props.disabled,\n },\n rtlClasses.value,\n props.class,\n ]}\n style={ props.style }\n ref={ inputRef }\n { ...inputProps }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n prepend: hasPrepend ? slotProps => (\n <>\n { slots.label?.(slotProps) ?? props.label\n ? (\n <VLabel\n class=\"v-slider__label\"\n text={ props.label }\n />\n ) : undefined\n }\n\n { slots.prepend?.(slotProps) }\n </>\n ) : undefined,\n default: ({ id, messagesId }) => (\n <div\n class=\"v-slider__container\"\n onMousedown={ onSliderMousedown }\n onTouchstartPassive={ onSliderTouchstart }\n >\n <input\n id={ `${id.value}_start` }\n name={ props.name || id.value }\n disabled={ !!props.disabled }\n readonly={ !!props.readonly }\n tabindex=\"-1\"\n value={ model.value[0] }\n />\n\n <input\n id={ `${id.value}_stop` }\n name={ props.name || id.value }\n disabled={ !!props.disabled }\n readonly={ !!props.readonly }\n tabindex=\"-1\"\n value={ model.value[1] }\n />\n\n <VSliderTrack\n ref={ trackContainerRef }\n start={ trackStart.value }\n stop={ trackStop.value }\n >\n {{ 'tick-label': slots['tick-label'] }}\n </VSliderTrack>\n\n <VSliderThumb\n ref={ startThumbRef }\n aria-describedby={ messagesId.value }\n focused={ isFocused && activeThumbRef.value === startThumbRef.value?.$el }\n modelValue={ model.value[0] }\n onUpdate:modelValue={ v => (model.value = [v, model.value[1]]) }\n onFocus={ (e: FocusEvent) => {\n focus()\n activeThumbRef.value = startThumbRef.value?.$el\n\n // Make sure second thumb is focused if\n // the thumbs are on top of each other\n // and they are both at minimum value\n // but only if focused from outside.\n if (\n model.value[0] === model.value[1] &&\n model.value[1] === min.value &&\n e.relatedTarget !== stopThumbRef.value?.$el\n ) {\n startThumbRef.value?.$el.blur()\n stopThumbRef.value?.$el.focus()\n }\n }}\n onBlur={ () => {\n blur()\n activeThumbRef.value = undefined\n }}\n min={ min.value }\n max={ model.value[1] }\n position={ trackStart.value }\n >\n {{ 'thumb-label': slots['thumb-label'] }}\n </VSliderThumb>\n\n <VSliderThumb\n ref={ stopThumbRef }\n aria-describedby={ messagesId.value }\n focused={ isFocused && activeThumbRef.value === stopThumbRef.value?.$el }\n modelValue={ model.value[1] }\n onUpdate:modelValue={ v => (model.value = [model.value[0], v]) }\n onFocus={ (e: FocusEvent) => {\n focus()\n activeThumbRef.value = stopThumbRef.value?.$el\n\n // Make sure first thumb is focused if\n // the thumbs are on top of each other\n // and they are both at maximum value\n // but only if focused from outside.\n if (\n model.value[0] === model.value[1] &&\n model.value[0] === max.value &&\n e.relatedTarget !== startThumbRef.value?.$el\n ) {\n stopThumbRef.value?.$el.blur()\n startThumbRef.value?.$el.focus()\n }\n }}\n onBlur={ () => {\n blur()\n activeThumbRef.value = undefined\n }}\n min={ model.value[0] }\n max={ max.value }\n position={ trackStop.value }\n >\n {{ 'thumb-label': slots['thumb-label'] }}\n </VSliderThumb>\n </div>\n ),\n }}\n </VInput>\n )\n })\n\n return {}\n },\n})\n\nexport type VRangeSlider = InstanceType<typeof VRangeSlider>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VRangeSlider.mjs","names":["makeVInputProps","VInput","VLabel","getOffset","makeSliderProps","useSlider","useSteps","VSliderThumb","VSliderTrack","makeFocusProps","useFocus","useRtl","useProxiedModel","computed","ref","genericComponent","propsFactory","useRender","makeVRangeSliderProps","strict","Boolean","modelValue","type","Array","default","VRangeSlider","name","props","emits","value","end","start","setup","_ref","slots","emit","startThumbRef","stopThumbRef","inputRef","rtlClasses","getActiveThumb","e","startOffset","$el","direction","stopOffset","a","Math","abs","b","steps","model","undefined","arr","length","map","roundValue","activeThumbRef","hasLabels","max","min","mousePressed","onSliderMousedown","onSliderTouchstart","position","trackContainerRef","onSliderStart","onSliderEnd","_ref2","newValue","onSliderMove","_ref3","stop","focus","isFocused","blur","trackStart","trackStop","inputProps","_","filterProps","hasPrepend","label","prepend","_createVNode","_mergeProps","disabled","class","style","slotProps","_Fragment","_ref4","id","messagesId","readonly","v","relatedTarget","onBlur","ripple"],"sources":["../../../src/components/VRangeSlider/VRangeSlider.tsx"],"sourcesContent":["// Styles\nimport '../VSlider/VSlider.sass'\n\n// Components\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VLabel } from '@/components/VLabel'\nimport { getOffset, makeSliderProps, useSlider, useSteps } from '@/components/VSlider/slider'\nimport { VSliderThumb } from '@/components/VSlider/VSliderThumb'\nimport { VSliderTrack } from '@/components/VSlider/VSliderTrack'\n\n// Composables\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { useRtl } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType, WritableComputedRef } from 'vue'\nimport type { VSliderSlots } from '../VSlider/VSlider'\n\nexport const makeVRangeSliderProps = propsFactory({\n ...makeFocusProps(),\n ...makeVInputProps(),\n ...makeSliderProps(),\n\n strict: Boolean,\n modelValue: {\n type: Array as PropType<readonly (string | number)[]>,\n default: () => ([0, 0]),\n },\n}, 'VRangeSlider')\n\nexport const VRangeSlider = genericComponent<VSliderSlots>()({\n name: 'VRangeSlider',\n\n props: makeVRangeSliderProps(),\n\n emits: {\n 'update:focused': (value: boolean) => true,\n 'update:modelValue': (value: [number, number]) => true,\n end: (value: [number, number]) => true,\n start: (value: [number, number]) => true,\n },\n\n setup (props, { slots, emit }) {\n const startThumbRef = ref<VSliderThumb>()\n const stopThumbRef = ref<VSliderThumb>()\n const inputRef = ref<VInput>()\n const { rtlClasses } = useRtl()\n\n function getActiveThumb (e: MouseEvent | TouchEvent) {\n if (!startThumbRef.value || !stopThumbRef.value) return\n\n const startOffset = getOffset(e, startThumbRef.value.$el, props.direction)\n const stopOffset = getOffset(e, stopThumbRef.value.$el, props.direction)\n\n const a = Math.abs(startOffset)\n const b = Math.abs(stopOffset)\n\n return (a < b || (a === b && startOffset < 0)) ? startThumbRef.value.$el : stopThumbRef.value.$el\n }\n\n const steps = useSteps(props)\n\n const model = useProxiedModel(\n props,\n 'modelValue',\n undefined,\n arr => {\n if (!arr?.length) return [0, 0]\n\n return arr.map(value => steps.roundValue(value))\n },\n ) as WritableComputedRef<[number, number]> & { readonly externalValue: number[] }\n\n const {\n activeThumbRef,\n hasLabels,\n max,\n min,\n mousePressed,\n onSliderMousedown,\n onSliderTouchstart,\n position,\n trackContainerRef,\n } = useSlider({\n props,\n steps,\n onSliderStart: () => {\n emit('start', model.value)\n },\n onSliderEnd: ({ value }) => {\n const newValue: [number, number] = activeThumbRef.value === startThumbRef.value?.$el\n ? [value, model.value[1]]\n : [model.value[0], value]\n\n if (!props.strict && newValue[0] < newValue[1]) {\n model.value = newValue\n }\n\n emit('end', model.value)\n },\n onSliderMove: ({ value }) => {\n const [start, stop] = model.value\n\n if (!props.strict && start === stop && start !== min.value) {\n activeThumbRef.value = value > start ? stopThumbRef.value?.$el : startThumbRef.value?.$el\n activeThumbRef.value?.focus()\n }\n\n if (activeThumbRef.value === startThumbRef.value?.$el) {\n model.value = [Math.min(value, stop), stop]\n } else {\n model.value = [start, Math.max(start, value)]\n }\n },\n getActiveThumb,\n })\n\n const { isFocused, focus, blur } = useFocus(props)\n const trackStart = computed(() => position(model.value[0]))\n const trackStop = computed(() => position(model.value[1]))\n\n useRender(() => {\n const [inputProps, _] = VInput.filterProps(props)\n const hasPrepend = !!(props.label || slots.label || slots.prepend)\n\n return (\n <VInput\n class={[\n 'v-slider',\n 'v-range-slider',\n {\n 'v-slider--has-labels': !!slots['tick-label'] || hasLabels.value,\n 'v-slider--focused': isFocused.value,\n 'v-slider--pressed': mousePressed.value,\n 'v-slider--disabled': props.disabled,\n },\n rtlClasses.value,\n props.class,\n ]}\n style={ props.style }\n ref={ inputRef }\n { ...inputProps }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n prepend: hasPrepend ? slotProps => (\n <>\n { slots.label?.(slotProps) ?? props.label\n ? (\n <VLabel\n class=\"v-slider__label\"\n text={ props.label }\n />\n ) : undefined\n }\n\n { slots.prepend?.(slotProps) }\n </>\n ) : undefined,\n default: ({ id, messagesId }) => (\n <div\n class=\"v-slider__container\"\n onMousedown={ onSliderMousedown }\n onTouchstartPassive={ onSliderTouchstart }\n >\n <input\n id={ `${id.value}_start` }\n name={ props.name || id.value }\n disabled={ !!props.disabled }\n readonly={ !!props.readonly }\n tabindex=\"-1\"\n value={ model.value[0] }\n />\n\n <input\n id={ `${id.value}_stop` }\n name={ props.name || id.value }\n disabled={ !!props.disabled }\n readonly={ !!props.readonly }\n tabindex=\"-1\"\n value={ model.value[1] }\n />\n\n <VSliderTrack\n ref={ trackContainerRef }\n start={ trackStart.value }\n stop={ trackStop.value }\n >\n {{ 'tick-label': slots['tick-label'] }}\n </VSliderTrack>\n\n <VSliderThumb\n ref={ startThumbRef }\n aria-describedby={ messagesId.value }\n focused={ isFocused && activeThumbRef.value === startThumbRef.value?.$el }\n modelValue={ model.value[0] }\n onUpdate:modelValue={ v => (model.value = [v, model.value[1]]) }\n onFocus={ (e: FocusEvent) => {\n focus()\n activeThumbRef.value = startThumbRef.value?.$el\n\n // Make sure second thumb is focused if\n // the thumbs are on top of each other\n // and they are both at minimum value\n // but only if focused from outside.\n if (\n model.value[0] === model.value[1] &&\n model.value[1] === min.value &&\n e.relatedTarget !== stopThumbRef.value?.$el\n ) {\n startThumbRef.value?.$el.blur()\n stopThumbRef.value?.$el.focus()\n }\n }}\n onBlur={ () => {\n blur()\n activeThumbRef.value = undefined\n }}\n min={ min.value }\n max={ model.value[1] }\n position={ trackStart.value }\n ripple={ props.ripple }\n >\n {{ 'thumb-label': slots['thumb-label'] }}\n </VSliderThumb>\n\n <VSliderThumb\n ref={ stopThumbRef }\n aria-describedby={ messagesId.value }\n focused={ isFocused && activeThumbRef.value === stopThumbRef.value?.$el }\n modelValue={ model.value[1] }\n onUpdate:modelValue={ v => (model.value = [model.value[0], v]) }\n onFocus={ (e: FocusEvent) => {\n focus()\n activeThumbRef.value = stopThumbRef.value?.$el\n\n // Make sure first thumb is focused if\n // the thumbs are on top of each other\n // and they are both at maximum value\n // but only if focused from outside.\n if (\n model.value[0] === model.value[1] &&\n model.value[0] === max.value &&\n e.relatedTarget !== startThumbRef.value?.$el\n ) {\n stopThumbRef.value?.$el.blur()\n startThumbRef.value?.$el.focus()\n }\n }}\n onBlur={ () => {\n blur()\n activeThumbRef.value = undefined\n }}\n min={ model.value[0] }\n max={ max.value }\n position={ trackStop.value }\n ripple={ props.ripple }\n >\n {{ 'thumb-label': slots['thumb-label'] }}\n </VSliderThumb>\n </div>\n ),\n }}\n </VInput>\n )\n })\n\n return {}\n },\n})\n\nexport type VRangeSlider = InstanceType<typeof VRangeSlider>\n"],"mappings":"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"}
|
|
@@ -54,6 +54,7 @@ declare const VRangeSlider: {
|
|
|
54
54
|
rounded?: string | number | boolean | undefined;
|
|
55
55
|
density?: Density | undefined;
|
|
56
56
|
modelValue?: readonly (string | number)[] | undefined;
|
|
57
|
+
ripple?: boolean | undefined;
|
|
57
58
|
focused?: boolean | undefined;
|
|
58
59
|
errorMessages?: string | readonly string[] | undefined;
|
|
59
60
|
maxErrors?: string | number | undefined;
|
|
@@ -208,6 +209,7 @@ declare const VRangeSlider: {
|
|
|
208
209
|
messages: string | readonly string[];
|
|
209
210
|
density: Density;
|
|
210
211
|
modelValue: readonly (string | number)[];
|
|
212
|
+
ripple: boolean;
|
|
211
213
|
focused: boolean;
|
|
212
214
|
errorMessages: string | readonly string[];
|
|
213
215
|
maxErrors: string | number;
|
|
@@ -295,6 +297,7 @@ declare const VRangeSlider: {
|
|
|
295
297
|
rounded: string | number | boolean;
|
|
296
298
|
density: Density;
|
|
297
299
|
modelValue: readonly (string | number)[];
|
|
300
|
+
ripple: boolean;
|
|
298
301
|
focused: boolean;
|
|
299
302
|
errorMessages: string | readonly string[];
|
|
300
303
|
maxErrors: string | number;
|
|
@@ -366,6 +369,7 @@ declare const VRangeSlider: {
|
|
|
366
369
|
messages: string | readonly string[];
|
|
367
370
|
density: Density;
|
|
368
371
|
modelValue: readonly (string | number)[];
|
|
372
|
+
ripple: boolean;
|
|
369
373
|
focused: boolean;
|
|
370
374
|
errorMessages: string | readonly string[];
|
|
371
375
|
maxErrors: string | number;
|
|
@@ -451,6 +455,7 @@ declare const VRangeSlider: {
|
|
|
451
455
|
messages: string | readonly string[];
|
|
452
456
|
density: Density;
|
|
453
457
|
modelValue: readonly (string | number)[];
|
|
458
|
+
ripple: boolean;
|
|
454
459
|
focused: boolean;
|
|
455
460
|
errorMessages: string | readonly string[];
|
|
456
461
|
maxErrors: string | number;
|
|
@@ -538,6 +543,7 @@ declare const VRangeSlider: {
|
|
|
538
543
|
rounded: string | number | boolean;
|
|
539
544
|
density: Density;
|
|
540
545
|
modelValue: readonly (string | number)[];
|
|
546
|
+
ripple: boolean;
|
|
541
547
|
focused: boolean;
|
|
542
548
|
errorMessages: string | readonly string[];
|
|
543
549
|
maxErrors: string | number;
|
|
@@ -580,6 +586,10 @@ declare const VRangeSlider: {
|
|
|
580
586
|
type: PropType<readonly (string | number)[]>;
|
|
581
587
|
default: () => number[];
|
|
582
588
|
};
|
|
589
|
+
ripple: {
|
|
590
|
+
type: BooleanConstructor;
|
|
591
|
+
default: boolean;
|
|
592
|
+
};
|
|
583
593
|
elevation: Omit<{
|
|
584
594
|
type: (StringConstructor | NumberConstructor)[];
|
|
585
595
|
validator(v: any): boolean;
|
|
@@ -697,6 +707,10 @@ declare const VRangeSlider: {
|
|
|
697
707
|
type: PropType<readonly (string | number)[]>;
|
|
698
708
|
default: () => number[];
|
|
699
709
|
};
|
|
710
|
+
ripple: {
|
|
711
|
+
type: BooleanConstructor;
|
|
712
|
+
default: boolean;
|
|
713
|
+
};
|
|
700
714
|
elevation: Omit<{
|
|
701
715
|
type: (StringConstructor | NumberConstructor)[];
|
|
702
716
|
validator(v: any): boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createTextVNode as _createTextVNode, createVNode as _createVNode, Fragment as _Fragment } from "vue";
|
|
1
|
+
import { createTextVNode as _createTextVNode, mergeProps as _mergeProps, createVNode as _createVNode, Fragment as _Fragment } from "vue";
|
|
2
2
|
// Styles
|
|
3
3
|
import "./VRating.css";
|
|
4
4
|
|
|
@@ -148,7 +148,9 @@ export const VRating = genericComponent()({
|
|
|
148
148
|
value,
|
|
149
149
|
index,
|
|
150
150
|
rating: normalizedValue.value
|
|
151
|
-
}) : _createVNode(VBtn,
|
|
151
|
+
}) : _createVNode(VBtn, _mergeProps({
|
|
152
|
+
"aria-label": t(props.itemAriaLabel, value, props.length)
|
|
153
|
+
}, btnProps), null)]), _createVNode("input", {
|
|
152
154
|
"class": "v-rating__hidden",
|
|
153
155
|
"name": name.value,
|
|
154
156
|
"id": id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VRating.mjs","names":["VBtn","makeComponentProps","makeDensityProps","IconValue","useLocale","useProxiedModel","makeSizeProps","makeTagProps","makeThemeProps","provideTheme","computed","shallowRef","clamp","createRange","genericComponent","getUid","propsFactory","useRender","makeVRatingProps","name","String","itemAriaLabel","type","default","activeColor","color","clearable","Boolean","disabled","emptyIcon","fullIcon","halfIncrements","hover","length","Number","readonly","modelValue","itemLabels","Array","itemLabelPosition","validator","v","includes","ripple","VRating","props","emits","value","setup","_ref","slots","t","themeClasses","rating","normalizedValue","parseFloat","range","increments","flatMap","hoverIndex","itemState","map","isHovering","isFilled","isHovered","isFullIcon","icon","eventState","onMouseenter","onMouseleave","onClick","undefined","VRatingItem","_ref2","index","showStar","id","replace","btnProps","density","size","variant","_createVNode","_Fragment","item","createLabel","labelProps","label","_createTextVNode","hasLabels","tag","class","style","i"],"sources":["../../../src/components/VRating/VRating.tsx"],"sourcesContent":["// Styles\nimport './VRating.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps } from '@/composables/density'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, shallowRef } from 'vue'\nimport { clamp, createRange, genericComponent, getUid, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Prop } from 'vue'\nimport type { Variant } from '@/composables/variant'\n\ntype VRatingItemSlot = {\n value: number\n index: number\n isFilled: boolean\n isHovered: boolean\n icon: IconValue\n color?: string\n props: Record<string, unknown>\n rating: number\n}\n\ntype VRatingItemLabelSlot = {\n value: number\n index: number\n label?: string\n}\n\ntype VRatingSlots = {\n item: VRatingItemSlot\n 'item-label': VRatingItemLabelSlot\n}\n\nexport const makeVRatingProps = propsFactory({\n name: String,\n itemAriaLabel: {\n type: String,\n default: '$vuetify.rating.ariaLabel.item',\n },\n activeColor: String,\n color: String,\n clearable: Boolean,\n disabled: Boolean,\n emptyIcon: {\n type: IconValue,\n default: '$ratingEmpty',\n },\n fullIcon: {\n type: IconValue,\n default: '$ratingFull',\n },\n halfIncrements: Boolean,\n hover: Boolean,\n length: {\n type: [Number, String],\n default: 5,\n },\n readonly: Boolean,\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n itemLabels: Array as Prop<string[]>,\n itemLabelPosition: {\n type: String,\n default: 'top',\n validator: (v: any) => ['top', 'bottom'].includes(v),\n },\n ripple: Boolean,\n\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeSizeProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n}, 'VRating')\n\nexport const VRating = genericComponent<VRatingSlots>()({\n name: 'VRating',\n\n props: makeVRatingProps(),\n\n emits: {\n 'update:modelValue': (value: number | string) => true,\n },\n\n setup (props, { slots }) {\n const { t } = useLocale()\n const { themeClasses } = provideTheme(props)\n const rating = useProxiedModel(props, 'modelValue')\n const normalizedValue = computed(() => clamp(parseFloat(rating.value), 0, +props.length))\n\n const range = computed(() => createRange(Number(props.length), 1))\n const increments = computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]))\n const hoverIndex = shallowRef(-1)\n\n const itemState = computed(() => increments.value.map(value => {\n const isHovering = props.hover && hoverIndex.value > -1\n const isFilled = normalizedValue.value >= value\n const isHovered = hoverIndex.value >= value\n const isFullIcon = isHovering ? isHovered : isFilled\n const icon = isFullIcon ? props.fullIcon : props.emptyIcon\n const activeColor = props.activeColor ?? props.color\n const color = (isFilled || isHovered) ? activeColor : props.color\n\n return { isFilled, isHovered, icon, color }\n }))\n\n const eventState = computed(() => [0, ...increments.value].map(value => {\n function onMouseenter () {\n hoverIndex.value = value\n }\n\n function onMouseleave () {\n hoverIndex.value = -1\n }\n\n function onClick () {\n if (props.disabled || props.readonly) return\n rating.value = normalizedValue.value === value && props.clearable ? 0 : value\n }\n\n return {\n onMouseenter: props.hover ? onMouseenter : undefined,\n onMouseleave: props.hover ? onMouseleave : undefined,\n onClick,\n }\n }))\n\n const name = computed(() => props.name ?? `v-rating-${getUid()}`)\n\n function VRatingItem ({ value, index, showStar = true }: { value: number, index: number, showStar?: boolean }) {\n const { onMouseenter, onMouseleave, onClick } = eventState.value[index + 1]\n const id = `${name.value}-${String(value).replace('.', '-')}`\n const btnProps = {\n color: itemState.value[index]?.color,\n density: props.density,\n disabled: props.disabled,\n icon: itemState.value[index]?.icon,\n ripple: props.ripple,\n size: props.size,\n variant: 'plain' as Variant,\n }\n\n return (\n <>\n <label\n for={ id }\n class={{\n 'v-rating__item--half': props.halfIncrements && value % 1 > 0,\n 'v-rating__item--full': props.halfIncrements && value % 1 === 0,\n }}\n onMouseenter={ onMouseenter }\n onMouseleave={ onMouseleave }\n onClick={ onClick }\n >\n <span class=\"v-rating__hidden\">{ t(props.itemAriaLabel, value, props.length) }</span>\n {\n !showStar ? undefined\n : slots.item ? slots.item({\n ...itemState.value[index],\n props: btnProps,\n value,\n index,\n rating: normalizedValue.value,\n })\n : (\n <VBtn { ...btnProps } />\n )\n }\n </label>\n\n <input\n class=\"v-rating__hidden\"\n name={ name.value }\n id={ id }\n type=\"radio\"\n value={ value }\n checked={ normalizedValue.value === value }\n tabindex={ -1 }\n readonly={ props.readonly }\n disabled={ props.disabled }\n />\n </>\n )\n }\n\n function createLabel (labelProps: { value: number, index: number, label?: string }) {\n if (slots['item-label']) return slots['item-label'](labelProps)\n\n if (labelProps.label) return <span>{ labelProps.label }</span>\n\n return <span> </span>\n }\n\n useRender(() => {\n const hasLabels = !!props.itemLabels?.length || slots['item-label']\n\n return (\n <props.tag\n class={[\n 'v-rating',\n {\n 'v-rating--hover': props.hover,\n 'v-rating--readonly': props.readonly,\n },\n themeClasses.value,\n props.class,\n ]}\n style={ props.style }\n >\n <VRatingItem value={ 0 } index={ -1 } showStar={ false } />\n\n { range.value.map((value, i) => (\n <div class=\"v-rating__wrapper\">\n {\n hasLabels && props.itemLabelPosition === 'top'\n ? createLabel({ value, index: i, label: props.itemLabels?.[i] })\n : undefined\n }\n <div class=\"v-rating__item\">\n { props.halfIncrements ? (\n <>\n <VRatingItem value={ value - 0.5 } index={ i * 2 } />\n <VRatingItem value={ value } index={ (i * 2) + 1 } />\n </>\n ) : (\n <VRatingItem value={ value } index={ i } />\n )}\n </div>\n {\n hasLabels && props.itemLabelPosition === 'bottom'\n ? createLabel({ value, index: i, label: props.itemLabels?.[i] })\n : undefined\n }\n </div>\n ))}\n </props.tag>\n )\n })\n\n return {}\n },\n})\n\nexport type VRating = InstanceType<typeof VRating>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VRating.mjs","names":["VBtn","makeComponentProps","makeDensityProps","IconValue","useLocale","useProxiedModel","makeSizeProps","makeTagProps","makeThemeProps","provideTheme","computed","shallowRef","clamp","createRange","genericComponent","getUid","propsFactory","useRender","makeVRatingProps","name","String","itemAriaLabel","type","default","activeColor","color","clearable","Boolean","disabled","emptyIcon","fullIcon","halfIncrements","hover","length","Number","readonly","modelValue","itemLabels","Array","itemLabelPosition","validator","v","includes","ripple","VRating","props","emits","value","setup","_ref","slots","t","themeClasses","rating","normalizedValue","parseFloat","range","increments","flatMap","hoverIndex","itemState","map","isHovering","isFilled","isHovered","isFullIcon","icon","eventState","onMouseenter","onMouseleave","onClick","undefined","VRatingItem","_ref2","index","showStar","id","replace","btnProps","density","size","variant","_createVNode","_Fragment","item","_mergeProps","createLabel","labelProps","label","_createTextVNode","hasLabels","tag","class","style","i"],"sources":["../../../src/components/VRating/VRating.tsx"],"sourcesContent":["// Styles\nimport './VRating.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps } from '@/composables/density'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, shallowRef } from 'vue'\nimport { clamp, createRange, genericComponent, getUid, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Prop } from 'vue'\nimport type { Variant } from '@/composables/variant'\n\ntype VRatingItemSlot = {\n value: number\n index: number\n isFilled: boolean\n isHovered: boolean\n icon: IconValue\n color?: string\n props: Record<string, unknown>\n rating: number\n}\n\ntype VRatingItemLabelSlot = {\n value: number\n index: number\n label?: string\n}\n\ntype VRatingSlots = {\n item: VRatingItemSlot\n 'item-label': VRatingItemLabelSlot\n}\n\nexport const makeVRatingProps = propsFactory({\n name: String,\n itemAriaLabel: {\n type: String,\n default: '$vuetify.rating.ariaLabel.item',\n },\n activeColor: String,\n color: String,\n clearable: Boolean,\n disabled: Boolean,\n emptyIcon: {\n type: IconValue,\n default: '$ratingEmpty',\n },\n fullIcon: {\n type: IconValue,\n default: '$ratingFull',\n },\n halfIncrements: Boolean,\n hover: Boolean,\n length: {\n type: [Number, String],\n default: 5,\n },\n readonly: Boolean,\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n itemLabels: Array as Prop<string[]>,\n itemLabelPosition: {\n type: String,\n default: 'top',\n validator: (v: any) => ['top', 'bottom'].includes(v),\n },\n ripple: Boolean,\n\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeSizeProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n}, 'VRating')\n\nexport const VRating = genericComponent<VRatingSlots>()({\n name: 'VRating',\n\n props: makeVRatingProps(),\n\n emits: {\n 'update:modelValue': (value: number | string) => true,\n },\n\n setup (props, { slots }) {\n const { t } = useLocale()\n const { themeClasses } = provideTheme(props)\n const rating = useProxiedModel(props, 'modelValue')\n const normalizedValue = computed(() => clamp(parseFloat(rating.value), 0, +props.length))\n\n const range = computed(() => createRange(Number(props.length), 1))\n const increments = computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]))\n const hoverIndex = shallowRef(-1)\n\n const itemState = computed(() => increments.value.map(value => {\n const isHovering = props.hover && hoverIndex.value > -1\n const isFilled = normalizedValue.value >= value\n const isHovered = hoverIndex.value >= value\n const isFullIcon = isHovering ? isHovered : isFilled\n const icon = isFullIcon ? props.fullIcon : props.emptyIcon\n const activeColor = props.activeColor ?? props.color\n const color = (isFilled || isHovered) ? activeColor : props.color\n\n return { isFilled, isHovered, icon, color }\n }))\n\n const eventState = computed(() => [0, ...increments.value].map(value => {\n function onMouseenter () {\n hoverIndex.value = value\n }\n\n function onMouseleave () {\n hoverIndex.value = -1\n }\n\n function onClick () {\n if (props.disabled || props.readonly) return\n rating.value = normalizedValue.value === value && props.clearable ? 0 : value\n }\n\n return {\n onMouseenter: props.hover ? onMouseenter : undefined,\n onMouseleave: props.hover ? onMouseleave : undefined,\n onClick,\n }\n }))\n\n const name = computed(() => props.name ?? `v-rating-${getUid()}`)\n\n function VRatingItem ({ value, index, showStar = true }: { value: number, index: number, showStar?: boolean }) {\n const { onMouseenter, onMouseleave, onClick } = eventState.value[index + 1]\n const id = `${name.value}-${String(value).replace('.', '-')}`\n const btnProps = {\n color: itemState.value[index]?.color,\n density: props.density,\n disabled: props.disabled,\n icon: itemState.value[index]?.icon,\n ripple: props.ripple,\n size: props.size,\n variant: 'plain' as Variant,\n }\n\n return (\n <>\n <label\n for={ id }\n class={{\n 'v-rating__item--half': props.halfIncrements && value % 1 > 0,\n 'v-rating__item--full': props.halfIncrements && value % 1 === 0,\n }}\n onMouseenter={ onMouseenter }\n onMouseleave={ onMouseleave }\n onClick={ onClick }\n >\n <span class=\"v-rating__hidden\">{ t(props.itemAriaLabel, value, props.length) }</span>\n {\n !showStar ? undefined\n : slots.item ? slots.item({\n ...itemState.value[index],\n props: btnProps,\n value,\n index,\n rating: normalizedValue.value,\n })\n : (\n <VBtn\n aria-label={ t(props.itemAriaLabel, value, props.length) }\n { ...btnProps }\n />\n )\n }\n </label>\n\n <input\n class=\"v-rating__hidden\"\n name={ name.value }\n id={ id }\n type=\"radio\"\n value={ value }\n checked={ normalizedValue.value === value }\n tabindex={ -1 }\n readonly={ props.readonly }\n disabled={ props.disabled }\n />\n </>\n )\n }\n\n function createLabel (labelProps: { value: number, index: number, label?: string }) {\n if (slots['item-label']) return slots['item-label'](labelProps)\n\n if (labelProps.label) return <span>{ labelProps.label }</span>\n\n return <span> </span>\n }\n\n useRender(() => {\n const hasLabels = !!props.itemLabels?.length || slots['item-label']\n\n return (\n <props.tag\n class={[\n 'v-rating',\n {\n 'v-rating--hover': props.hover,\n 'v-rating--readonly': props.readonly,\n },\n themeClasses.value,\n props.class,\n ]}\n style={ props.style }\n >\n <VRatingItem value={ 0 } index={ -1 } showStar={ false } />\n\n { range.value.map((value, i) => (\n <div class=\"v-rating__wrapper\">\n {\n hasLabels && props.itemLabelPosition === 'top'\n ? createLabel({ value, index: i, label: props.itemLabels?.[i] })\n : undefined\n }\n <div class=\"v-rating__item\">\n { props.halfIncrements ? (\n <>\n <VRatingItem value={ value - 0.5 } index={ i * 2 } />\n <VRatingItem value={ value } index={ (i * 2) + 1 } />\n </>\n ) : (\n <VRatingItem value={ value } index={ i } />\n )}\n </div>\n {\n hasLabels && props.itemLabelPosition === 'bottom'\n ? createLabel({ value, index: i, label: props.itemLabels?.[i] })\n : undefined\n }\n </div>\n ))}\n </props.tag>\n )\n })\n\n return {}\n },\n})\n\nexport type VRating = InstanceType<typeof VRating>\n"],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ import { useLocale } from "../../composables/locale.mjs";
|
|
|
21
21
|
import { useProxiedModel } from "../../composables/proxiedModel.mjs";
|
|
22
22
|
import { makeTransitionProps } from "../../composables/transition.mjs"; // Utilities
|
|
23
23
|
import { computed, mergeProps, ref, shallowRef } from 'vue';
|
|
24
|
-
import { deepEqual, genericComponent, matchesSelector, omit, propsFactory, useRender, wrapInArray } from "../../util/index.mjs"; // Types
|
|
24
|
+
import { deepEqual, genericComponent, getPropertyFromItem, matchesSelector, omit, propsFactory, useRender, wrapInArray } from "../../util/index.mjs"; // Types
|
|
25
25
|
export const makeSelectProps = propsFactory({
|
|
26
26
|
chips: Boolean,
|
|
27
27
|
closableChips: Boolean,
|
|
@@ -46,6 +46,7 @@ export const makeSelectProps = propsFactory({
|
|
|
46
46
|
type: Function,
|
|
47
47
|
default: deepEqual
|
|
48
48
|
},
|
|
49
|
+
itemColor: String,
|
|
49
50
|
...makeItemsProps({
|
|
50
51
|
itemChildren: false
|
|
51
52
|
})
|
|
@@ -98,7 +99,12 @@ export const VSelect = genericComponent()({
|
|
|
98
99
|
const form = useForm();
|
|
99
100
|
const selections = computed(() => {
|
|
100
101
|
return model.value.map(v => {
|
|
101
|
-
return items.value.find(item =>
|
|
102
|
+
return items.value.find(item => {
|
|
103
|
+
const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
|
|
104
|
+
const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
|
|
105
|
+
if (itemRawValue === undefined || modelRawValue === undefined) return false;
|
|
106
|
+
return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
|
|
107
|
+
}) || v;
|
|
102
108
|
});
|
|
103
109
|
});
|
|
104
110
|
const selected = computed(() => selections.value.map(selection => selection.props.value));
|
|
@@ -254,7 +260,8 @@ export const VSelect = genericComponent()({
|
|
|
254
260
|
"onKeydown": onListKeydown,
|
|
255
261
|
"onFocusin": onFocusin,
|
|
256
262
|
"onScrollPassive": onListScroll,
|
|
257
|
-
"tabindex": "-1"
|
|
263
|
+
"tabindex": "-1",
|
|
264
|
+
"color": props.itemColor ?? props.color
|
|
258
265
|
}, {
|
|
259
266
|
default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? _createVNode(VListItem, {
|
|
260
267
|
"title": t(props.noDataText)
|