@vuetify/nightly 3.0.0-next-20220107.0 → 3.0.0-next-20220126.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/json/attributes.json +96 -20
- package/dist/json/importMap.json +8 -0
- package/dist/json/tags.json +32 -3
- package/dist/json/web-types.json +338 -41
- package/dist/vuetify.css +77 -20
- package/dist/vuetify.d.ts +204 -48
- package/dist/vuetify.esm.js +707 -387
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +707 -387
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +2 -2
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VBtn/VBtn.css +0 -16
- package/lib/components/VBtn/VBtn.sass +0 -6
- package/lib/components/VBtn/_variables.scss +0 -2
- package/lib/components/VExpansionPanel/VExpansionPanel.mjs +2 -2
- package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
- package/lib/components/VHover/VHover.mjs +3 -3
- package/lib/components/VHover/VHover.mjs.map +1 -1
- package/lib/components/VInput/VInput.mjs +3 -2
- package/lib/components/VInput/VInput.mjs.map +1 -1
- package/lib/components/VList/VList.css +4 -2
- package/lib/components/VList/VList.mjs +34 -35
- package/lib/components/VList/VList.mjs.map +1 -1
- package/lib/components/VList/VList.sass +5 -2
- package/lib/components/VList/VListChildren.mjs +19 -14
- package/lib/components/VList/VListChildren.mjs.map +1 -1
- package/lib/components/VList/VListGroup.mjs +16 -40
- package/lib/components/VList/VListGroup.mjs.map +1 -1
- package/lib/components/VList/VListItem.mjs +3 -3
- package/lib/components/VList/VListItem.mjs.map +1 -1
- package/lib/components/VList/VListSubheader.mjs +20 -12
- package/lib/components/VList/VListSubheader.mjs.map +1 -1
- package/lib/components/VList/list.mjs +31 -0
- package/lib/components/VList/list.mjs.map +1 -0
- package/lib/components/VMessages/VMessages.mjs +12 -4
- package/lib/components/VMessages/VMessages.mjs.map +1 -1
- package/lib/components/VOverlay/VOverlay.mjs +2 -2
- package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
- package/lib/components/VOverlay/useActivator.mjs +12 -2
- package/lib/components/VOverlay/useActivator.mjs.map +1 -1
- package/lib/components/VPagination/VPagination.mjs +23 -31
- package/lib/components/VPagination/VPagination.mjs.map +1 -1
- package/lib/components/VWindow/VWindow.css +70 -0
- package/lib/components/VWindow/VWindow.mjs +158 -233
- package/lib/components/VWindow/VWindow.mjs.map +1 -1
- package/lib/components/VWindow/VWindow.sass +26 -50
- package/lib/components/VWindow/VWindowItem.mjs +72 -98
- package/lib/components/VWindow/VWindowItem.mjs.map +1 -1
- package/lib/components/VWindow/_variables.scss +2 -3
- package/lib/components/VWindow/index.mjs +2 -9
- package/lib/components/VWindow/index.mjs.map +1 -1
- package/lib/components/index.d.ts +200 -47
- package/lib/components/index.mjs +1 -1
- package/lib/components/index.mjs.map +1 -1
- package/lib/composables/group.mjs +1 -6
- package/lib/composables/group.mjs.map +1 -1
- package/lib/composables/nested/nested.mjs +1 -1
- package/lib/composables/nested/nested.mjs.map +1 -1
- package/lib/composables/nested/openStrategies.mjs +1 -1
- package/lib/composables/nested/openStrategies.mjs.map +1 -1
- package/lib/directives/touch/index.mjs +6 -3
- package/lib/directives/touch/index.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/index.d.ts +2 -0
- package/package.json +2 -1
|
@@ -1,39 +1,14 @@
|
|
|
1
|
-
import { withDirectives as _withDirectives,
|
|
1
|
+
import { withDirectives as _withDirectives, createVNode as _createVNode, vShow as _vShow } from "vue";
|
|
2
2
|
// Components
|
|
3
|
-
import { VExpandTransition } from "../transitions/index.mjs";
|
|
4
|
-
import { VListChildren } from "./VListChildren.mjs"; // Composables
|
|
3
|
+
import { VExpandTransition } from "../transitions/index.mjs"; // Composables
|
|
5
4
|
|
|
6
|
-
import {
|
|
7
|
-
import { makeTagProps } from "../../composables/tag.mjs";
|
|
5
|
+
import { useList } from "./list.mjs";
|
|
6
|
+
import { makeTagProps } from "../../composables/tag.mjs";
|
|
7
|
+
import { useNestedGroup } from "../../composables/nested/nested.mjs"; // Utilities
|
|
8
8
|
|
|
9
9
|
import { computed } from 'vue';
|
|
10
|
-
import {
|
|
11
|
-
import { createList, useList } from "./VList.mjs"; // Types
|
|
10
|
+
import { genericComponent } from "../../util/index.mjs"; // Types
|
|
12
11
|
|
|
13
|
-
const VListGroupItems = defineComponent({
|
|
14
|
-
name: 'VListGroupItems',
|
|
15
|
-
props: {
|
|
16
|
-
open: Boolean,
|
|
17
|
-
items: Array
|
|
18
|
-
},
|
|
19
|
-
|
|
20
|
-
setup(props, _ref) {
|
|
21
|
-
let {
|
|
22
|
-
slots
|
|
23
|
-
} = _ref;
|
|
24
|
-
createList();
|
|
25
|
-
return () => {
|
|
26
|
-
return _createVNode(VExpandTransition, null, {
|
|
27
|
-
default: () => [_withDirectives(_createVNode("div", {
|
|
28
|
-
"class": "v-list-group__items"
|
|
29
|
-
}, [_createVNode(VListChildren, {
|
|
30
|
-
"items": props.items
|
|
31
|
-
}, slots, 8, ["items"])], 512), [[_vShow, props.open]])]
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
});
|
|
37
12
|
export const VListGroup = genericComponent()({
|
|
38
13
|
name: 'VListGroup',
|
|
39
14
|
props: {
|
|
@@ -46,14 +21,13 @@ export const VListGroup = genericComponent()({
|
|
|
46
21
|
type: String,
|
|
47
22
|
default: '$expand'
|
|
48
23
|
},
|
|
49
|
-
items: Array,
|
|
50
24
|
...makeTagProps()
|
|
51
25
|
},
|
|
52
26
|
|
|
53
|
-
setup(props,
|
|
27
|
+
setup(props, _ref) {
|
|
54
28
|
let {
|
|
55
29
|
slots
|
|
56
|
-
} =
|
|
30
|
+
} = _ref;
|
|
57
31
|
const {
|
|
58
32
|
isOpen,
|
|
59
33
|
open
|
|
@@ -67,20 +41,22 @@ export const VListGroup = genericComponent()({
|
|
|
67
41
|
const headerProps = computed(() => ({
|
|
68
42
|
onClick,
|
|
69
43
|
appendIcon: isOpen.value ? props.collapseIcon : props.expandIcon,
|
|
70
|
-
class: 'v-list-group__header'
|
|
44
|
+
class: 'v-list-group__header',
|
|
45
|
+
value: `${props.value}_header`
|
|
71
46
|
}));
|
|
72
47
|
return () => {
|
|
73
|
-
var _slots$header;
|
|
48
|
+
var _slots$header, _slots$items;
|
|
74
49
|
|
|
75
50
|
return _createVNode(props.tag, {
|
|
76
51
|
"class": ['v-list-group', {
|
|
77
52
|
'v-list-group--prepend': list == null ? void 0 : list.hasPrepend.value
|
|
78
53
|
}]
|
|
79
54
|
}, {
|
|
80
|
-
default: () => [(_slots$header = slots.header) == null ? void 0 : _slots$header.call(slots, headerProps.value), _createVNode(
|
|
81
|
-
"
|
|
82
|
-
|
|
83
|
-
|
|
55
|
+
default: () => [(_slots$header = slots.header) == null ? void 0 : _slots$header.call(slots, headerProps.value), _createVNode(VExpandTransition, null, {
|
|
56
|
+
default: () => [_withDirectives(_createVNode("div", {
|
|
57
|
+
"class": "v-list-group__items"
|
|
58
|
+
}, [(_slots$items = slots.items) == null ? void 0 : _slots$items.call(slots)], 512), [[_vShow, isOpen.value]])]
|
|
59
|
+
})],
|
|
84
60
|
_: 1
|
|
85
61
|
}, 8, ["class"]);
|
|
86
62
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/VList/VListGroup.tsx"],"names":["VExpandTransition","
|
|
1
|
+
{"version":3,"sources":["../../../src/components/VList/VListGroup.tsx"],"names":["VExpandTransition","useList","makeTagProps","useNestedGroup","computed","genericComponent","VListGroup","name","props","value","collapseIcon","type","String","default","expandIcon","setup","slots","isOpen","open","list","onClick","e","headerProps","appendIcon","class","hasPrepend","header","items"],"mappings":";AAAA;SACSA,iB,oCAET;;SACSC,O;SACAC,Y;SACAC,c,+CAET;;AACA,SAASC,QAAT,QAAyB,KAAzB;SACSC,gB,gCAET;;AAUA,OAAO,MAAMC,UAAU,GAAGD,gBAAgB,GASrC;AACHE,EAAAA,IAAI,EAAE,YADH;AAGHC,EAAAA,KAAK,EAAE;AACLC,IAAAA,KAAK,EAAE,IADF;AAELC,IAAAA,YAAY,EAAE;AACZC,MAAAA,IAAI,EAAEC,MADM;AAEZC,MAAAA,OAAO,EAAE;AAFG,KAFT;AAMLC,IAAAA,UAAU,EAAE;AACVH,MAAAA,IAAI,EAAEC,MADI;AAEVC,MAAAA,OAAO,EAAE;AAFC,KANP;AAWL,OAAGX,YAAY;AAXV,GAHJ;;AAiBHa,EAAAA,KAAK,CAAEP,KAAF,QAAoB;AAAA,QAAX;AAAEQ,MAAAA;AAAF,KAAW;AACvB,UAAM;AAAEC,MAAAA,MAAF;AAAUC,MAAAA;AAAV,QAAmBf,cAAc,CAACK,KAAD,CAAvC;AACA,UAAMW,IAAI,GAAGlB,OAAO,EAApB;;AAEA,UAAMmB,OAAO,GAAIC,CAAD,IAAc;AAC5BH,MAAAA,IAAI,CAAC,CAACD,MAAM,CAACR,KAAT,EAAgBY,CAAhB,CAAJ;AACD,KAFD;;AAIA,UAAMC,WAAW,GAAGlB,QAAQ,CAAC,OAAO;AAClCgB,MAAAA,OADkC;AAElCG,MAAAA,UAAU,EAAEN,MAAM,CAACR,KAAP,GAAeD,KAAK,CAACE,YAArB,GAAoCF,KAAK,CAACM,UAFpB;AAGlCU,MAAAA,KAAK,EAAE,sBAH2B;AAIlCf,MAAAA,KAAK,EAAG,GAAED,KAAK,CAACC,KAAM;AAJY,KAAP,CAAD,CAA5B;AAOA,WAAO,MAAM;AAAA;;AACX;AAAA,iBAEW,CACL,cADK,EAEL;AACE,mCAAyBU,IAAzB,oBAAyBA,IAAI,CAAEM,UAAN,CAAiBhB;AAD5C,SAFK;AAFX;AAAA,yCASMO,KAAK,CAACU,MATZ,qBASM,mBAAAV,KAAK,EAAUM,WAAW,CAACb,KAAtB,CATX;AAAA;AAAA,qBAWiB;AAXjB,8BAYUO,KAAK,CAACW,KAZhB,qBAYU,kBAAAX,KAAK,CAZf,mBAW+CC,MAAM,CAACR,KAXtD;AAAA;AAAA;AAAA;AAiBD,KAlBD;AAmBD;;AAnDE,CATqC,CAAnC","sourcesContent":["// Components\nimport { VExpandTransition } from '@/components/transitions'\n\n// Composables\nimport { useList } from './list'\nimport { makeTagProps } from '@/composables/tag'\nimport { useNestedGroup } from '@/composables/nested/nested'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent } from '@/util'\n\n// Types\nimport type { InternalListItem } from './VList'\nimport type { MakeSlots } from '@/util'\n\nexport type ListGroupHeaderSlot = {\n onClick: (e: Event) => void\n appendIcon: string\n class: string\n}\n\nexport const VListGroup = genericComponent<new <T extends InternalListItem>() => {\n $props: {\n items?: T[]\n }\n $slots: MakeSlots<{\n header: [ListGroupHeaderSlot]\n items: []\n default: []\n }>\n}>()({\n name: 'VListGroup',\n\n props: {\n value: null,\n collapseIcon: {\n type: String,\n default: '$collapse',\n },\n expandIcon: {\n type: String,\n default: '$expand',\n },\n\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const { isOpen, open } = useNestedGroup(props)\n const list = useList()\n\n const onClick = (e: Event) => {\n open(!isOpen.value, e)\n }\n\n const headerProps = computed(() => ({\n onClick,\n appendIcon: isOpen.value ? props.collapseIcon : props.expandIcon,\n class: 'v-list-group__header',\n value: `${props.value}_header`,\n }))\n\n return () => {\n return (\n <props.tag\n class={[\n 'v-list-group',\n {\n 'v-list-group--prepend': list?.hasPrepend.value,\n },\n ]}\n >\n { slots.header?.(headerProps.value) }\n <VExpandTransition>\n <div class=\"v-list-group__items\" v-show={isOpen.value}>\n { slots.items?.() }\n </div>\n </VExpandTransition>\n </props.tag>\n )\n }\n },\n})\n"],"file":"VListGroup.mjs"}
|
|
@@ -8,6 +8,7 @@ import { VListItemHeader } from "./VListItemHeader.mjs";
|
|
|
8
8
|
import { VListItemSubtitle } from "./VListItemSubtitle.mjs";
|
|
9
9
|
import { VListItemTitle } from "./VListItemTitle.mjs"; // Composables
|
|
10
10
|
|
|
11
|
+
import { genOverlays, makeVariantProps, useVariant } from "../../composables/variant.mjs";
|
|
11
12
|
import { makeBorderProps, useBorder } from "../../composables/border.mjs";
|
|
12
13
|
import { makeDensityProps, useDensity } from "../../composables/density.mjs";
|
|
13
14
|
import { makeDimensionProps, useDimension } from "../../composables/dimensions.mjs";
|
|
@@ -16,14 +17,13 @@ import { makeRoundedProps, useRounded } from "../../composables/rounded.mjs";
|
|
|
16
17
|
import { makeRouterProps, useLink } from "../../composables/router.mjs";
|
|
17
18
|
import { makeTagProps } from "../../composables/tag.mjs";
|
|
18
19
|
import { makeThemeProps, provideTheme } from "../../composables/theme.mjs";
|
|
19
|
-
import {
|
|
20
|
+
import { useList } from "./list.mjs"; // Directives
|
|
20
21
|
|
|
21
22
|
import { Ripple } from "../../directives/ripple/index.mjs"; // Utilities
|
|
22
23
|
|
|
23
24
|
import { computed, onMounted } from 'vue';
|
|
24
25
|
import { genericComponent } from "../../util/index.mjs";
|
|
25
|
-
import { useNestedItem } from "../../composables/nested/nested.mjs";
|
|
26
|
-
import { useList } from "./VList.mjs"; // Types
|
|
26
|
+
import { useNestedItem } from "../../composables/nested/nested.mjs"; // Types
|
|
27
27
|
|
|
28
28
|
export const VListItem = genericComponent()({
|
|
29
29
|
name: 'VListItem',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/VList/VListItem.tsx"],"names":["VAvatar","VListItemAvatar","VListItemHeader","VListItemSubtitle","VListItemTitle","makeBorderProps","useBorder","makeDensityProps","useDensity","makeDimensionProps","useDimension","makeElevationProps","useElevation","makeRoundedProps","useRounded","makeRouterProps","useLink","makeTagProps","makeThemeProps","provideTheme","genOverlays","makeVariantProps","useVariant","Ripple","computed","onMounted","genericComponent","useNestedItem","useList","VListItem","name","directives","props","active","Boolean","activeColor","String","activeClass","appendAvatar","appendIcon","disabled","link","prependAvatar","prependIcon","subtitle","title","value","variant","setup","attrs","slots","id","href","activate","isActive","isNestedActive","select","isSelected","root","parent","list","isExactActive","color","variantProps","textColor","open","themeClasses","borderClasses","colorClasses","colorStyles","variantClasses","densityClasses","dimensionStyles","elevationClasses","roundedClasses","slotProps","Tag","isLink","tag","hasTitle","hasSubtitle","hasHeader","hasAppend","append","hasPrepend","prepend","isClickable","updateHasPrepend","undefined","e","navigate","density","default"],"mappings":"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","sourcesContent":["// Styles\nimport './VListItem.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VListItemAvatar } from './VListItemAvatar'\nimport { VListItemHeader } from './VListItemHeader'\nimport { VListItemSubtitle } from './VListItemSubtitle'\nimport { VListItemTitle } from './VListItemTitle'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { computed, onMounted } from 'vue'\nimport { genericComponent } from '@/util'\nimport { useNestedItem } from '@/composables/nested/nested'\nimport { useList } from './VList'\n\n// Types\nimport type { MakeSlots } from '@/util'\n\ntype ListItemSlot = {\n isActive: boolean\n activate: (value: boolean) => void\n isSelected: boolean\n select: (value: boolean) => void\n}\n\nexport const VListItem = genericComponent<new () => {\n $slots: MakeSlots<{\n prepend: [ListItemSlot]\n append: [ListItemSlot]\n default: [ListItemSlot]\n title: []\n subtitle: []\n }>\n}>()({\n name: 'VListItem',\n\n directives: { Ripple },\n\n props: {\n active: Boolean,\n activeColor: String,\n activeClass: String,\n appendAvatar: String,\n appendIcon: String,\n disabled: Boolean,\n link: Boolean,\n prependAvatar: String,\n prependIcon: String,\n subtitle: String,\n title: String,\n value: null,\n\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeRouterProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeVariantProps({ variant: 'text' } as const),\n },\n\n setup (props, { attrs, slots }) {\n const link = useLink(props, attrs)\n const id = computed(() => props.value ?? link.href.value)\n const { activate, isActive: isNestedActive, select, isSelected, root, parent } = useNestedItem(id)\n const list = useList()\n const isActive = computed(() => {\n return props.active || link.isExactActive?.value || isNestedActive.value\n })\n const activeColor = props.activeColor ?? props.color\n const variantProps = computed(() => ({\n color: isActive.value ? activeColor : props.color,\n textColor: props.textColor,\n variant: props.variant,\n }))\n\n onMounted(() => {\n if (link.isExactActive?.value && parent.value != null) {\n root.open(parent.value, true)\n }\n })\n\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(variantProps)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n\n const slotProps = computed(() => ({\n isActive: isActive.value,\n activate,\n select,\n isSelected: isSelected.value,\n }))\n\n return () => {\n const Tag = (link.isLink.value) ? 'a' : props.tag\n const hasTitle = (slots.title || props.title)\n const hasSubtitle = (slots.subtitle || props.subtitle)\n const hasHeader = !!(hasTitle || hasSubtitle)\n const hasAppend = !!(slots.append || props.appendAvatar || props.appendIcon)\n const hasPrepend = !!(slots.prepend || props.prependAvatar || props.prependIcon)\n const isClickable = !props.disabled && (link.isClickable.value || props.link || props.value != null)\n\n list?.updateHasPrepend(hasPrepend)\n\n return (\n <Tag\n class={[\n 'v-list-item',\n {\n 'v-list-item--active': isActive.value,\n 'v-list-item--disabled': props.disabled,\n 'v-list-item--link': isClickable,\n 'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,\n [`${props.activeClass}`]: isActive.value && props.activeClass,\n },\n themeClasses.value,\n borderClasses.value,\n colorClasses.value,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n variantClasses.value,\n ]}\n style={[\n colorStyles.value,\n dimensionStyles.value,\n ]}\n href={ link.href.value }\n tabindex={ isClickable ? 0 : undefined }\n onClick={ isClickable && ((e: MouseEvent) => {\n link.navigate?.(e)\n props.value != null && activate(!isNestedActive.value, e)\n })}\n v-ripple={ isClickable }\n >\n { genOverlays(isClickable || isActive.value, 'v-list-item') }\n\n { hasPrepend && (\n slots.prepend\n ? slots.prepend(slotProps.value)\n : (\n <VListItemAvatar left>\n <VAvatar\n density={ props.density }\n icon={ props.prependIcon }\n image={ props.prependAvatar }\n />\n </VListItemAvatar>\n )\n ) }\n\n { hasHeader && (\n <VListItemHeader>\n { hasTitle && (\n <VListItemTitle>\n { slots.title\n ? slots.title()\n : props.title\n }\n </VListItemTitle>\n ) }\n\n { hasSubtitle && (\n <VListItemSubtitle>\n { slots.subtitle\n ? slots.subtitle()\n : props.subtitle\n }\n </VListItemSubtitle>\n ) }\n </VListItemHeader>\n ) }\n\n { slots.default?.(slotProps.value) }\n\n { hasAppend && (\n slots.append\n ? slots.append(slotProps.value)\n : (\n <VListItemAvatar right>\n <VAvatar\n density={ props.density }\n icon={ props.appendIcon }\n image={ props.appendAvatar }\n />\n </VListItemAvatar>\n )\n ) }\n </Tag>\n )\n }\n },\n})\n\nexport type VListItem = InstanceType<typeof VListItem>\n"],"file":"VListItem.mjs"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/VList/VListItem.tsx"],"names":["VAvatar","VListItemAvatar","VListItemHeader","VListItemSubtitle","VListItemTitle","genOverlays","makeVariantProps","useVariant","makeBorderProps","useBorder","makeDensityProps","useDensity","makeDimensionProps","useDimension","makeElevationProps","useElevation","makeRoundedProps","useRounded","makeRouterProps","useLink","makeTagProps","makeThemeProps","provideTheme","useList","Ripple","computed","onMounted","genericComponent","useNestedItem","VListItem","name","directives","props","active","Boolean","activeColor","String","activeClass","appendAvatar","appendIcon","disabled","link","prependAvatar","prependIcon","subtitle","title","value","variant","setup","attrs","slots","id","href","activate","isActive","isNestedActive","select","isSelected","root","parent","list","isExactActive","color","variantProps","textColor","open","themeClasses","borderClasses","colorClasses","colorStyles","variantClasses","densityClasses","dimensionStyles","elevationClasses","roundedClasses","slotProps","Tag","isLink","tag","hasTitle","hasSubtitle","hasHeader","hasAppend","append","hasPrepend","prepend","isClickable","updateHasPrepend","undefined","e","navigate","density","default"],"mappings":";AAAA;AACA,yB,CAEA;;SACSA,O;SACAC,e;SACAC,e;SACAC,iB;SACAC,c,gCAET;;SACSC,W,EAAaC,gB,EAAkBC,U;SAC/BC,e,EAAiBC,S;SACjBC,gB,EAAkBC,U;SAClBC,kB,EAAoBC,Y;SACpBC,kB,EAAoBC,Y;SACpBC,gB,EAAkBC,U;SAClBC,e,EAAiBC,O;SACjBC,Y;SACAC,c,EAAgBC,Y;SAChBC,O,sBAET;;SACSC,M,6CAET;;AACA,SAASC,QAAT,EAAmBC,SAAnB,QAAoC,KAApC;SACSC,gB;SACAC,a,+CAET;;AAUA,OAAO,MAAMC,SAAS,GAAGF,gBAAgB,GAQpC;AACHG,EAAAA,IAAI,EAAE,WADH;AAGHC,EAAAA,UAAU,EAAE;AAAEP,IAAAA;AAAF,GAHT;AAKHQ,EAAAA,KAAK,EAAE;AACLC,IAAAA,MAAM,EAAEC,OADH;AAELC,IAAAA,WAAW,EAAEC,MAFR;AAGLC,IAAAA,WAAW,EAAED,MAHR;AAILE,IAAAA,YAAY,EAAEF,MAJT;AAKLG,IAAAA,UAAU,EAAEH,MALP;AAMLI,IAAAA,QAAQ,EAAEN,OANL;AAOLO,IAAAA,IAAI,EAAEP,OAPD;AAQLQ,IAAAA,aAAa,EAAEN,MARV;AASLO,IAAAA,WAAW,EAAEP,MATR;AAULQ,IAAAA,QAAQ,EAAER,MAVL;AAWLS,IAAAA,KAAK,EAAET,MAXF;AAYLU,IAAAA,KAAK,EAAE,IAZF;AAcL,OAAGtC,eAAe,EAdb;AAeL,OAAGE,gBAAgB,EAfd;AAgBL,OAAGE,kBAAkB,EAhBhB;AAiBL,OAAGE,kBAAkB,EAjBhB;AAkBL,OAAGE,gBAAgB,EAlBd;AAmBL,OAAGE,eAAe,EAnBb;AAoBL,OAAGE,YAAY,EApBV;AAqBL,OAAGC,cAAc,EArBZ;AAsBL,OAAGf,gBAAgB,CAAC;AAAEyC,MAAAA,OAAO,EAAE;AAAX,KAAD;AAtBd,GALJ;;AA8BHC,EAAAA,KAAK,CAAEhB,KAAF,QAA2B;AAAA;;AAAA,QAAlB;AAAEiB,MAAAA,KAAF;AAASC,MAAAA;AAAT,KAAkB;AAC9B,UAAMT,IAAI,GAAGtB,OAAO,CAACa,KAAD,EAAQiB,KAAR,CAApB;AACA,UAAME,EAAE,GAAG1B,QAAQ,CAAC;AAAA;;AAAA,6BAAMO,KAAK,CAACc,KAAZ,2BAAqBL,IAAI,CAACW,IAAL,CAAUN,KAA/B;AAAA,KAAD,CAAnB;AACA,UAAM;AAAEO,MAAAA,QAAF;AAAYC,MAAAA,QAAQ,EAAEC,cAAtB;AAAsCC,MAAAA,MAAtC;AAA8CC,MAAAA,UAA9C;AAA0DC,MAAAA,IAA1D;AAAgEC,MAAAA;AAAhE,QAA2E/B,aAAa,CAACuB,EAAD,CAA9F;AACA,UAAMS,IAAI,GAAGrC,OAAO,EAApB;AACA,UAAM+B,QAAQ,GAAG7B,QAAQ,CAAC,MAAM;AAAA;;AAC9B,aAAOO,KAAK,CAACC,MAAN,4BAAgBQ,IAAI,CAACoB,aAArB,qBAAgB,oBAAoBf,KAApC,KAA6CS,cAAc,CAACT,KAAnE;AACD,KAFwB,CAAzB;AAGA,UAAMX,WAAW,yBAAGH,KAAK,CAACG,WAAT,iCAAwBH,KAAK,CAAC8B,KAA/C;AACA,UAAMC,YAAY,GAAGtC,QAAQ,CAAC,OAAO;AACnCqC,MAAAA,KAAK,EAAER,QAAQ,CAACR,KAAT,GAAiBX,WAAjB,GAA+BH,KAAK,CAAC8B,KADT;AAEnCE,MAAAA,SAAS,EAAEhC,KAAK,CAACgC,SAFkB;AAGnCjB,MAAAA,OAAO,EAAEf,KAAK,CAACe;AAHoB,KAAP,CAAD,CAA7B;AAMArB,IAAAA,SAAS,CAAC,MAAM;AAAA;;AACd,UAAI,wBAAAe,IAAI,CAACoB,aAAL,kCAAoBf,KAApB,IAA6Ba,MAAM,CAACb,KAAP,IAAgB,IAAjD,EAAuD;AACrDY,QAAAA,IAAI,CAACO,IAAL,CAAUN,MAAM,CAACb,KAAjB,EAAwB,IAAxB;AACD;AACF,KAJQ,CAAT;AAMA,UAAM;AAAEoB,MAAAA;AAAF,QAAmB5C,YAAY,CAACU,KAAD,CAArC;AACA,UAAM;AAAEmC,MAAAA;AAAF,QAAoB1D,SAAS,CAACuB,KAAD,CAAnC;AACA,UAAM;AAAEoC,MAAAA,YAAF;AAAgBC,MAAAA,WAAhB;AAA6BC,MAAAA;AAA7B,QAAgD/D,UAAU,CAACwD,YAAD,CAAhE;AACA,UAAM;AAAEQ,MAAAA;AAAF,QAAqB5D,UAAU,CAACqB,KAAD,CAArC;AACA,UAAM;AAAEwC,MAAAA;AAAF,QAAsB3D,YAAY,CAACmB,KAAD,CAAxC;AACA,UAAM;AAAEyC,MAAAA;AAAF,QAAuB1D,YAAY,CAACiB,KAAD,CAAzC;AACA,UAAM;AAAE0C,MAAAA;AAAF,QAAqBzD,UAAU,CAACe,KAAD,CAArC;AAEA,UAAM2C,SAAS,GAAGlD,QAAQ,CAAC,OAAO;AAChC6B,MAAAA,QAAQ,EAAEA,QAAQ,CAACR,KADa;AAEhCO,MAAAA,QAFgC;AAGhCG,MAAAA,MAHgC;AAIhCC,MAAAA,UAAU,EAAEA,UAAU,CAACX;AAJS,KAAP,CAAD,CAA1B;AAOA,WAAO,MAAM;AAAA;;AACX,YAAM8B,GAAG,GAAInC,IAAI,CAACoC,MAAL,CAAY/B,KAAb,GAAsB,GAAtB,GAA4Bd,KAAK,CAAC8C,GAA9C;AACA,YAAMC,QAAQ,GAAI7B,KAAK,CAACL,KAAN,IAAeb,KAAK,CAACa,KAAvC;AACA,YAAMmC,WAAW,GAAI9B,KAAK,CAACN,QAAN,IAAkBZ,KAAK,CAACY,QAA7C;AACA,YAAMqC,SAAS,GAAG,CAAC,EAAEF,QAAQ,IAAIC,WAAd,CAAnB;AACA,YAAME,SAAS,GAAG,CAAC,EAAEhC,KAAK,CAACiC,MAAN,IAAgBnD,KAAK,CAACM,YAAtB,IAAsCN,KAAK,CAACO,UAA9C,CAAnB;AACA,YAAM6C,UAAU,GAAG,CAAC,EAAElC,KAAK,CAACmC,OAAN,IAAiBrD,KAAK,CAACU,aAAvB,IAAwCV,KAAK,CAACW,WAAhD,CAApB;AACA,YAAM2C,WAAW,GAAG,CAACtD,KAAK,CAACQ,QAAP,KAAoBC,IAAI,CAAC6C,WAAL,CAAiBxC,KAAjB,IAA0Bd,KAAK,CAACS,IAAhC,IAAwCT,KAAK,CAACc,KAAN,IAAe,IAA3E,CAApB;AAEAc,MAAAA,IAAI,QAAJ,YAAAA,IAAI,CAAE2B,gBAAN,CAAuBH,UAAvB;AAEA;AAAA,iBAEW,CACL,aADK,EAEL;AACE,iCAAuB9B,QAAQ,CAACR,KADlC;AAEE,mCAAyBd,KAAK,CAACQ,QAFjC;AAGE,+BAAqB8C,WAHvB;AAIE,kCAAwB,CAACF,UAAD,KAAexB,IAAf,oBAAeA,IAAI,CAAEwB,UAAN,CAAiBtC,KAAhC,CAJ1B;AAKE,WAAE,GAAEd,KAAK,CAACK,WAAY,EAAtB,GAA0BiB,QAAQ,CAACR,KAAT,IAAkBd,KAAK,CAACK;AALpD,SAFK,EASL6B,YAAY,CAACpB,KATR,EAULqB,aAAa,CAACrB,KAVT,EAWLsB,YAAY,CAACtB,KAXR,EAYLyB,cAAc,CAACzB,KAZV,EAaL2B,gBAAgB,CAAC3B,KAbZ,EAcL4B,cAAc,CAAC5B,KAdV,EAeLwB,cAAc,CAACxB,KAfV,CAFX;AAAA,iBAmBW,CACLuB,WAAW,CAACvB,KADP,EAEL0B,eAAe,CAAC1B,KAFX,CAnBX;AAAA,gBAuBWL,IAAI,CAACW,IAAL,CAAUN,KAvBrB;AAAA,oBAwBewC,WAAW,GAAG,CAAH,GAAOE,SAxBjC;AAAA,mBAyBcF,WAAW,KAAMG,CAAD,IAAmB;AAAA;;AAC3C,4BAAAhD,IAAI,CAACiD,QAAL,yCAAAjD,IAAI,EAAYgD,CAAZ,CAAJ;AACAzD,UAAAA,KAAK,CAACc,KAAN,IAAe,IAAf,IAAuBO,QAAQ,CAAC,CAACE,cAAc,CAACT,KAAjB,EAAwB2C,CAAxB,CAA/B;AACD,SAHoB;AAzBzB;AAAA,wBA+BMpF,WAAW,CAACiF,WAAW,IAAIhC,QAAQ,CAACR,KAAzB,EAAgC,aAAhC,CA/BjB,EAiCMsC,UAAU,KACVlC,KAAK,CAACmC,OAAN,GACInC,KAAK,CAACmC,OAAN,CAAcV,SAAS,CAAC7B,KAAxB,CADJ;AAAA;AAAA;AAAA;AAAA,uBAKkBd,KAAK,CAAC2D,OALxB;AAAA,oBAMe3D,KAAK,CAACW,WANrB;AAAA,qBAOgBX,KAAK,CAACU;AAPtB;AAAA,uBADU,CAjChB,EA+CMuC,SAAS;AAAA,0BAELF,QAAQ;AAAA,4BAEJ7B,KAAK,CAACL,KAAN,GACEK,KAAK,CAACL,KAAN,EADF,GAEEb,KAAK,CAACa,KAJJ;AAAA,YAFH,EAWLmC,WAAW;AAAA,4BAEP9B,KAAK,CAACN,QAAN,GACEM,KAAK,CAACN,QAAN,EADF,GAEEZ,KAAK,CAACY,QAJD;AAAA,YAXN;AAAA;AAAA,UA/Cf,oBAqEMM,KAAK,CAAC0C,OArEZ,qBAqEM,oBAAA1C,KAAK,EAAWyB,SAAS,CAAC7B,KAArB,CArEX,EAuEMoC,SAAS,KACThC,KAAK,CAACiC,MAAN,GACIjC,KAAK,CAACiC,MAAN,CAAaR,SAAS,CAAC7B,KAAvB,CADJ;AAAA;AAAA;AAAA;AAAA,uBAKkBd,KAAK,CAAC2D,OALxB;AAAA,oBAMe3D,KAAK,CAACO,UANrB;AAAA,qBAOgBP,KAAK,CAACM;AAPtB;AAAA,wBADS,CAvEf;AAAA;AAAA,+FA6BegD,WA7Bf;AAsFD,KAjGD;AAkGD;;AApKE,CARoC,CAAlC","sourcesContent":["// Styles\nimport './VListItem.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VListItemAvatar } from './VListItemAvatar'\nimport { VListItemHeader } from './VListItemHeader'\nimport { VListItemSubtitle } from './VListItemSubtitle'\nimport { VListItemTitle } from './VListItemTitle'\n\n// Composables\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useList } from './list'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { computed, onMounted } from 'vue'\nimport { genericComponent } from '@/util'\nimport { useNestedItem } from '@/composables/nested/nested'\n\n// Types\nimport type { MakeSlots } from '@/util'\n\ntype ListItemSlot = {\n isActive: boolean\n activate: (value: boolean) => void\n isSelected: boolean\n select: (value: boolean) => void\n}\n\nexport const VListItem = genericComponent<new () => {\n $slots: MakeSlots<{\n prepend: [ListItemSlot]\n append: [ListItemSlot]\n default: [ListItemSlot]\n title: []\n subtitle: []\n }>\n}>()({\n name: 'VListItem',\n\n directives: { Ripple },\n\n props: {\n active: Boolean,\n activeColor: String,\n activeClass: String,\n appendAvatar: String,\n appendIcon: String,\n disabled: Boolean,\n link: Boolean,\n prependAvatar: String,\n prependIcon: String,\n subtitle: String,\n title: String,\n value: null,\n\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeRouterProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeVariantProps({ variant: 'text' } as const),\n },\n\n setup (props, { attrs, slots }) {\n const link = useLink(props, attrs)\n const id = computed(() => props.value ?? link.href.value)\n const { activate, isActive: isNestedActive, select, isSelected, root, parent } = useNestedItem(id)\n const list = useList()\n const isActive = computed(() => {\n return props.active || link.isExactActive?.value || isNestedActive.value\n })\n const activeColor = props.activeColor ?? props.color\n const variantProps = computed(() => ({\n color: isActive.value ? activeColor : props.color,\n textColor: props.textColor,\n variant: props.variant,\n }))\n\n onMounted(() => {\n if (link.isExactActive?.value && parent.value != null) {\n root.open(parent.value, true)\n }\n })\n\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(variantProps)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n\n const slotProps = computed(() => ({\n isActive: isActive.value,\n activate,\n select,\n isSelected: isSelected.value,\n }))\n\n return () => {\n const Tag = (link.isLink.value) ? 'a' : props.tag\n const hasTitle = (slots.title || props.title)\n const hasSubtitle = (slots.subtitle || props.subtitle)\n const hasHeader = !!(hasTitle || hasSubtitle)\n const hasAppend = !!(slots.append || props.appendAvatar || props.appendIcon)\n const hasPrepend = !!(slots.prepend || props.prependAvatar || props.prependIcon)\n const isClickable = !props.disabled && (link.isClickable.value || props.link || props.value != null)\n\n list?.updateHasPrepend(hasPrepend)\n\n return (\n <Tag\n class={[\n 'v-list-item',\n {\n 'v-list-item--active': isActive.value,\n 'v-list-item--disabled': props.disabled,\n 'v-list-item--link': isClickable,\n 'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,\n [`${props.activeClass}`]: isActive.value && props.activeClass,\n },\n themeClasses.value,\n borderClasses.value,\n colorClasses.value,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n variantClasses.value,\n ]}\n style={[\n colorStyles.value,\n dimensionStyles.value,\n ]}\n href={ link.href.value }\n tabindex={ isClickable ? 0 : undefined }\n onClick={ isClickable && ((e: MouseEvent) => {\n link.navigate?.(e)\n props.value != null && activate(!isNestedActive.value, e)\n })}\n v-ripple={ isClickable }\n >\n { genOverlays(isClickable || isActive.value, 'v-list-item') }\n\n { hasPrepend && (\n slots.prepend\n ? slots.prepend(slotProps.value)\n : (\n <VListItemAvatar left>\n <VAvatar\n density={ props.density }\n icon={ props.prependIcon }\n image={ props.prependAvatar }\n />\n </VListItemAvatar>\n )\n ) }\n\n { hasHeader && (\n <VListItemHeader>\n { hasTitle && (\n <VListItemTitle>\n { slots.title\n ? slots.title()\n : props.title\n }\n </VListItemTitle>\n ) }\n\n { hasSubtitle && (\n <VListItemSubtitle>\n { slots.subtitle\n ? slots.subtitle()\n : props.subtitle\n }\n </VListItemSubtitle>\n ) }\n </VListItemHeader>\n ) }\n\n { slots.default?.(slotProps.value) }\n\n { hasAppend && (\n slots.append\n ? slots.append(slotProps.value)\n : (\n <VListItemAvatar right>\n <VAvatar\n density={ props.density }\n icon={ props.appendIcon }\n image={ props.appendAvatar }\n />\n </VListItemAvatar>\n )\n ) }\n </Tag>\n )\n }\n },\n})\n\nexport type VListItem = InstanceType<typeof VListItem>\n"],"file":"VListItem.mjs"}
|
|
@@ -10,6 +10,8 @@ export const VListSubheader = defineComponent({
|
|
|
10
10
|
props: {
|
|
11
11
|
color: String,
|
|
12
12
|
inset: Boolean,
|
|
13
|
+
sticky: Boolean,
|
|
14
|
+
text: String,
|
|
13
15
|
...makeTagProps()
|
|
14
16
|
},
|
|
15
17
|
|
|
@@ -21,18 +23,24 @@ export const VListSubheader = defineComponent({
|
|
|
21
23
|
textColorClasses,
|
|
22
24
|
textColorStyles
|
|
23
25
|
} = useTextColor(toRef(props, 'color'));
|
|
24
|
-
return () =>
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
26
|
+
return () => {
|
|
27
|
+
var _slots$default, _slots$default2;
|
|
28
|
+
|
|
29
|
+
const hasText = !!(slots.default || props.text);
|
|
30
|
+
return _createVNode(props.tag, {
|
|
31
|
+
"class": ['v-list-subheader', {
|
|
32
|
+
'v-list-subheader--inset': props.inset,
|
|
33
|
+
'v-list-subheader--sticky': props.sticky
|
|
34
|
+
}, textColorClasses.value],
|
|
35
|
+
"style": {
|
|
36
|
+
textColorStyles
|
|
37
|
+
}
|
|
38
|
+
}, {
|
|
39
|
+
default: () => [hasText && _createVNode("div", {
|
|
40
|
+
"class": "v-list-subheader__text"
|
|
41
|
+
}, [(_slots$default = (_slots$default2 = slots.default) == null ? void 0 : _slots$default2.call(slots)) != null ? _slots$default : props.text])]
|
|
42
|
+
}, 8, ["class", "style"]);
|
|
43
|
+
};
|
|
36
44
|
}
|
|
37
45
|
|
|
38
46
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/VList/VListSubheader.tsx"],"names":["makeTagProps","useTextColor","toRef","defineComponent","VListSubheader","name","props","color","String","inset","Boolean","setup","slots","textColorClasses","textColorStyles","
|
|
1
|
+
{"version":3,"sources":["../../../src/components/VList/VListSubheader.tsx"],"names":["makeTagProps","useTextColor","toRef","defineComponent","VListSubheader","name","props","color","String","inset","Boolean","sticky","text","setup","slots","textColorClasses","textColorStyles","hasText","default","value"],"mappings":";AAAA;SACSA,Y;SACAC,Y,uCAET;;AACA,SAASC,KAAT,QAAsB,KAAtB;SACSC,e;AAET,OAAO,MAAMC,cAAc,GAAGD,eAAe,CAAC;AAC5CE,EAAAA,IAAI,EAAE,gBADsC;AAG5CC,EAAAA,KAAK,EAAE;AACLC,IAAAA,KAAK,EAAEC,MADF;AAELC,IAAAA,KAAK,EAAEC,OAFF;AAGLC,IAAAA,MAAM,EAAED,OAHH;AAILE,IAAAA,IAAI,EAAEJ,MAJD;AAML,OAAGR,YAAY;AANV,GAHqC;;AAY5Ca,EAAAA,KAAK,CAAEP,KAAF,QAAoB;AAAA,QAAX;AAAEQ,MAAAA;AAAF,KAAW;AACvB,UAAM;AAAEC,MAAAA,gBAAF;AAAoBC,MAAAA;AAApB,QAAwCf,YAAY,CAACC,KAAK,CAACI,KAAD,EAAQ,OAAR,CAAN,CAA1D;AAEA,WAAO,MAAM;AAAA;;AACX,YAAMW,OAAO,GAAG,CAAC,EAAEH,KAAK,CAACI,OAAN,IAAiBZ,KAAK,CAACM,IAAzB,CAAjB;AAEA;AAAA,iBAEW,CACL,kBADK,EAEL;AACE,qCAA2BN,KAAK,CAACG,KADnC;AAEE,sCAA4BH,KAAK,CAACK;AAFpC,SAFK,EAMLI,gBAAgB,CAACI,KANZ,CAFX;AAAA,iBAUW;AAAEH,UAAAA;AAAF;AAVX;AAAA,wBAYMC,OAAO;AAAA,mBACI;AADJ,iDAEHH,KAAK,CAACI,OAFH,qBAEH,qBAAAJ,KAAK,CAFF,6BAEkBR,KAAK,CAACM,IAFxB,EAZb;AAAA;AAmBD,KAtBD;AAuBD;;AAtC2C,CAAD,CAAtC","sourcesContent":["// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VListSubheader = defineComponent({\n name: 'VListSubheader',\n\n props: {\n color: String,\n inset: Boolean,\n sticky: Boolean,\n text: String,\n\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'color'))\n\n return () => {\n const hasText = !!(slots.default || props.text)\n\n return (\n <props.tag\n class={[\n 'v-list-subheader',\n {\n 'v-list-subheader--inset': props.inset,\n 'v-list-subheader--sticky': props.sticky,\n },\n textColorClasses.value,\n ]}\n style={{ textColorStyles }}\n >\n { hasText && (\n <div class=\"v-list-subheader__text\">\n { slots.default?.() ?? props.text }\n </div>\n ) }\n </props.tag>\n )\n }\n },\n})\n"],"file":"VListSubheader.mjs"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Utilities
|
|
2
|
+
import { computed, inject, provide, ref } from 'vue'; // Types
|
|
3
|
+
|
|
4
|
+
// Depth
|
|
5
|
+
export const DepthKey = Symbol.for('vuetify:depth');
|
|
6
|
+
export function useDepth(hasPrepend) {
|
|
7
|
+
const parent = inject(DepthKey, ref(-1));
|
|
8
|
+
const depth = computed(() => parent.value + 1 + (hasPrepend != null && hasPrepend.value ? 1 : 0));
|
|
9
|
+
provide(DepthKey, depth);
|
|
10
|
+
return depth;
|
|
11
|
+
} // List
|
|
12
|
+
|
|
13
|
+
export const ListKey = Symbol.for('vuetify:list');
|
|
14
|
+
export function createList() {
|
|
15
|
+
const parent = inject(ListKey, {
|
|
16
|
+
hasPrepend: ref(false),
|
|
17
|
+
updateHasPrepend: () => null
|
|
18
|
+
});
|
|
19
|
+
const data = {
|
|
20
|
+
hasPrepend: ref(false),
|
|
21
|
+
updateHasPrepend: value => {
|
|
22
|
+
if (value) data.hasPrepend.value = value;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
provide(ListKey, data);
|
|
26
|
+
return parent;
|
|
27
|
+
}
|
|
28
|
+
export function useList() {
|
|
29
|
+
return inject(ListKey, null);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=list.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/VList/list.ts"],"names":["computed","inject","provide","ref","DepthKey","Symbol","for","useDepth","hasPrepend","parent","depth","value","ListKey","createList","updateHasPrepend","data","useList"],"mappings":"AAAA;AACA,SAASA,QAAT,EAAmBC,MAAnB,EAA2BC,OAA3B,EAAoCC,GAApC,QAA+C,KAA/C,C,CAEA;;AAGA;AACA,OAAO,MAAMC,QAAmC,GAAGC,MAAM,CAACC,GAAP,CAAW,eAAX,CAA5C;AAEP,OAAO,SAASC,QAAT,CAAmBC,UAAnB,EAA8C;AACnD,QAAMC,MAAM,GAAGR,MAAM,CAACG,QAAD,EAAWD,GAAG,CAAC,CAAC,CAAF,CAAd,CAArB;AAEA,QAAMO,KAAK,GAAGV,QAAQ,CAAC,MAAMS,MAAM,CAACE,KAAP,GAAe,CAAf,IAAoBH,UAAU,QAAV,IAAAA,UAAU,CAAEG,KAAZ,GAAoB,CAApB,GAAwB,CAA5C,CAAP,CAAtB;AAEAT,EAAAA,OAAO,CAACE,QAAD,EAAWM,KAAX,CAAP;AAEA,SAAOA,KAAP;AACD,C,CAED;;AACA,OAAO,MAAME,OAGX,GAAGP,MAAM,CAACC,GAAP,CAAW,cAAX,CAHE;AAKP,OAAO,SAASO,UAAT,GAAuB;AAC5B,QAAMJ,MAAM,GAAGR,MAAM,CAACW,OAAD,EAAU;AAAEJ,IAAAA,UAAU,EAAEL,GAAG,CAAC,KAAD,CAAjB;AAA0BW,IAAAA,gBAAgB,EAAE,MAAM;AAAlD,GAAV,CAArB;AAEA,QAAMC,IAAI,GAAG;AACXP,IAAAA,UAAU,EAAEL,GAAG,CAAC,KAAD,CADJ;AAEXW,IAAAA,gBAAgB,EAAGH,KAAD,IAAoB;AACpC,UAAIA,KAAJ,EAAWI,IAAI,CAACP,UAAL,CAAgBG,KAAhB,GAAwBA,KAAxB;AACZ;AAJU,GAAb;AAOAT,EAAAA,OAAO,CAACU,OAAD,EAAUG,IAAV,CAAP;AAEA,SAAON,MAAP;AACD;AAED,OAAO,SAASO,OAAT,GAAoB;AACzB,SAAOf,MAAM,CAACW,OAAD,EAAU,IAAV,CAAb;AACD","sourcesContent":["// Utilities\nimport { computed, inject, provide, ref } from 'vue'\n\n// Types\nimport type { InjectionKey, Ref } from 'vue'\n\n// Depth\nexport const DepthKey: InjectionKey<Ref<number>> = Symbol.for('vuetify:depth')\n\nexport function useDepth (hasPrepend?: Ref<boolean>) {\n const parent = inject(DepthKey, ref(-1))\n\n const depth = computed(() => parent.value + 1 + (hasPrepend?.value ? 1 : 0))\n\n provide(DepthKey, depth)\n\n return depth\n}\n\n// List\nexport const ListKey: InjectionKey<{\n hasPrepend: Ref<boolean>\n updateHasPrepend: (value: boolean) => void\n}> = Symbol.for('vuetify:list')\n\nexport function createList () {\n const parent = inject(ListKey, { hasPrepend: ref(false), updateHasPrepend: () => null })\n\n const data = {\n hasPrepend: ref(false),\n updateHasPrepend: (value: boolean) => {\n if (value) data.hasPrepend.value = value\n },\n }\n\n provide(ListKey, data)\n\n return parent\n}\n\nexport function useList () {\n return inject(ListKey, null)\n}\n"],"file":"list.mjs"}
|
|
@@ -4,7 +4,8 @@ import "./VMessages.css"; // Components
|
|
|
4
4
|
|
|
5
5
|
import { VSlideYTransition } from "../transitions/index.mjs"; // Composables
|
|
6
6
|
|
|
7
|
-
import { makeTransitionProps, MaybeTransition } from "../../composables/transition.mjs";
|
|
7
|
+
import { makeTransitionProps, MaybeTransition } from "../../composables/transition.mjs";
|
|
8
|
+
import { useTextColor } from "../../composables/color.mjs"; // Utilities
|
|
8
9
|
|
|
9
10
|
import { defineComponent, wrapInArray } from "../../util/index.mjs";
|
|
10
11
|
import { computed } from 'vue';
|
|
@@ -12,6 +13,7 @@ export const VMessages = defineComponent({
|
|
|
12
13
|
name: 'VMessages',
|
|
13
14
|
props: {
|
|
14
15
|
active: Boolean,
|
|
16
|
+
color: String,
|
|
15
17
|
value: {
|
|
16
18
|
type: [Array, String],
|
|
17
19
|
default: () => []
|
|
@@ -19,6 +21,7 @@ export const VMessages = defineComponent({
|
|
|
19
21
|
...makeTransitionProps({
|
|
20
22
|
transition: {
|
|
21
23
|
component: VSlideYTransition,
|
|
24
|
+
leaveAbsolute: true,
|
|
22
25
|
group: true
|
|
23
26
|
}
|
|
24
27
|
})
|
|
@@ -29,20 +32,25 @@ export const VMessages = defineComponent({
|
|
|
29
32
|
slots
|
|
30
33
|
} = _ref;
|
|
31
34
|
const messages = computed(() => wrapInArray(props.value));
|
|
35
|
+
const {
|
|
36
|
+
textColorClasses,
|
|
37
|
+
textColorStyles
|
|
38
|
+
} = useTextColor(computed(() => props.color));
|
|
32
39
|
return () => {
|
|
33
40
|
var _slots$default;
|
|
34
41
|
|
|
35
42
|
return _createVNode(MaybeTransition, {
|
|
36
43
|
"transition": props.transition,
|
|
37
44
|
"tag": "div",
|
|
38
|
-
"class":
|
|
45
|
+
"class": ['v-messages', textColorClasses.value],
|
|
46
|
+
"style": textColorStyles.value
|
|
39
47
|
}, {
|
|
40
48
|
default: () => [messages.value.length > 0 && props.active && messages.value.map((message, i) => _createVNode("div", {
|
|
41
49
|
"class": "v-messages__message",
|
|
42
|
-
"key": i
|
|
50
|
+
"key": `${i}-${messages.value}`
|
|
43
51
|
}, [message])), slots == null ? void 0 : (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)],
|
|
44
52
|
_: 1
|
|
45
|
-
}, 8, ["transition"]);
|
|
53
|
+
}, 8, ["transition", "class", "style"]);
|
|
46
54
|
};
|
|
47
55
|
}
|
|
48
56
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/VMessages/VMessages.tsx"],"names":["VSlideYTransition","makeTransitionProps","MaybeTransition","defineComponent","wrapInArray","computed","VMessages","name","props","active","Boolean","value","type","Array","
|
|
1
|
+
{"version":3,"sources":["../../../src/components/VMessages/VMessages.tsx"],"names":["VSlideYTransition","makeTransitionProps","MaybeTransition","useTextColor","defineComponent","wrapInArray","computed","VMessages","name","props","active","Boolean","color","String","value","type","Array","default","transition","component","leaveAbsolute","group","setup","slots","messages","textColorClasses","textColorStyles","length","map","message","i"],"mappings":";AAAA;AACA,yB,CAEA;;SACSA,iB,oCAET;;SACSC,mB,EAAqBC,e;SACrBC,Y,uCAET;;SACSC,e,EAAiBC,W;AAC1B,SAASC,QAAT,QAAyB,KAAzB;AAGA,OAAO,MAAMC,SAAS,GAAGH,eAAe,CAAC;AACvCI,EAAAA,IAAI,EAAE,WADiC;AAGvCC,EAAAA,KAAK,EAAE;AACLC,IAAAA,MAAM,EAAEC,OADH;AAELC,IAAAA,KAAK,EAAEC,MAFF;AAGLC,IAAAA,KAAK,EAAE;AACLC,MAAAA,IAAI,EAAE,CAACC,KAAD,EAAQH,MAAR,CADD;AAELI,MAAAA,OAAO,EAAE,MAAO;AAFX,KAHF;AAQL,OAAGhB,mBAAmB,CAAC;AACrBiB,MAAAA,UAAU,EAAE;AACVC,QAAAA,SAAS,EAAEnB,iBADD;AAEVoB,QAAAA,aAAa,EAAE,IAFL;AAGVC,QAAAA,KAAK,EAAE;AAHG;AADS,KAAD;AARjB,GAHgC;;AAoBvCC,EAAAA,KAAK,CAAEb,KAAF,QAAoB;AAAA,QAAX;AAAEc,MAAAA;AAAF,KAAW;AACvB,UAAMC,QAAQ,GAAGlB,QAAQ,CAAC,MAAMD,WAAW,CAACI,KAAK,CAACK,KAAP,CAAlB,CAAzB;AACA,UAAM;AAAEW,MAAAA,gBAAF;AAAoBC,MAAAA;AAApB,QAAwCvB,YAAY,CAACG,QAAQ,CAAC,MAAMG,KAAK,CAACG,KAAb,CAAT,CAA1D;AAEA,WAAO;AAAA;;AAAA;AAAA,sBAEUH,KAAK,CAACS,UAFhB;AAAA,eAGC,KAHD;AAAA,iBAII,CACL,YADK,EAELO,gBAAgB,CAACX,KAFZ,CAJJ;AAAA,iBAQKY,eAAe,CAACZ;AARrB;AAAA,wBAUAU,QAAQ,CAACV,KAAT,CAAea,MAAf,GAAwB,CAAxB,IAA6BlB,KAAK,CAACC,MAApC,IACAc,QAAQ,CAACV,KAAT,CAAec,GAAf,CAAmB,CAACC,OAAD,EAAUC,CAAV;AAAA,mBACN,qBADM;AAAA,iBACuB,GAAEA,CAAE,IAAGN,QAAQ,CAACV,KAAM;AAD7C,YAEbe,OAFa,EAAnB,CAXC,EAkBDN,KAlBC,sCAkBDA,KAAK,CAAEN,OAlBN,qBAkBD,oBAAAM,KAAK,CAlBJ;AAAA;AAAA;AAAA,KAAP;AAqBD;;AA7CsC,CAAD,CAAjC","sourcesContent":["// Styles\nimport './VMessages.sass'\n\n// Components\nimport { VSlideYTransition } from '@/components/transitions'\n\n// Composables\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { defineComponent, wrapInArray } from '@/util'\nimport { computed } from 'vue'\nimport type { PropType } from 'vue'\n\nexport const VMessages = defineComponent({\n name: 'VMessages',\n\n props: {\n active: Boolean,\n color: String,\n value: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n\n ...makeTransitionProps({\n transition: {\n component: VSlideYTransition,\n leaveAbsolute: true,\n group: true,\n },\n }),\n },\n\n setup (props, { slots }) {\n const messages = computed(() => wrapInArray(props.value))\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => props.color))\n\n return () => (\n <MaybeTransition\n transition={ props.transition }\n tag=\"div\"\n class={[\n 'v-messages',\n textColorClasses.value,\n ]}\n style={ textColorStyles.value }\n >\n { (messages.value.length > 0 && props.active) && (\n messages.value.map((message, i) => (\n <div class=\"v-messages__message\" key={ `${i}-${messages.value}` }>\n { message }\n </div>\n ))\n ) }\n\n { slots?.default?.() }\n </MaybeTransition>\n )\n },\n})\n"],"file":"VMessages.mjs"}
|
|
@@ -94,6 +94,7 @@ export const VOverlay = genericComponent()({
|
|
|
94
94
|
}));
|
|
95
95
|
const {
|
|
96
96
|
activatorEl,
|
|
97
|
+
activatorRef,
|
|
97
98
|
activatorEvents
|
|
98
99
|
} = useActivator(props, isActive);
|
|
99
100
|
const {
|
|
@@ -188,8 +189,7 @@ export const VOverlay = genericComponent()({
|
|
|
188
189
|
return _createVNode(_Fragment, null, [(_slots$activator = slots.activator) == null ? void 0 : _slots$activator.call(slots, {
|
|
189
190
|
isActive: isActive.value,
|
|
190
191
|
props: mergeProps({
|
|
191
|
-
|
|
192
|
-
'onUpdate:modelValue': val => isActive.value = val
|
|
192
|
+
ref: activatorRef
|
|
193
193
|
}, toHandlers(activatorEvents.value), props.activatorProps)
|
|
194
194
|
}), _createVNode(Teleport, {
|
|
195
195
|
"disabled": !teleportTarget.value,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/VOverlay/VOverlay.tsx"],"names":["makeActivatorProps","useActivator","makePositionStrategyProps","usePositionStrategies","makeScrollStrategyProps","useScrollStrategies","makeThemeProps","provideTheme","makeTransitionProps","MaybeTransition","useBackButton","useBackgroundColor","useProxiedModel","useRtl","useTeleport","makeDimensionProps","useDimension","makeLazyProps","useLazy","useStack","ClickOutside","convertToUnit","genericComponent","getScrollParent","IN_BROWSER","standardEasing","useRender","computed","mergeProps","ref","Teleport","toHandlers","Transition","watch","Scrim","props","modelValue","color","rest","backgroundColorClasses","value","backgroundColorStyles","VOverlay","name","directives","inheritAttrs","absolute","Boolean","attach","String","Object","contained","contentClass","noClickAnimation","persistent","scrim","type","default","emits","e","setup","slots","attrs","emit","isActive","teleportTarget","themeClasses","rtlClasses","hasContent","onAfterLeave","scrimColor","activatorEl","activatorEvents","dimensionStyles","isTop","root","contentEl","contentStyles","updatePosition","onClickOutside","animateClick","closeConditional","val","window","addEventListener","onKeydown","removeEventListener","immediate","key","next","top","scrollParent","document","scrollingElement","scrollTop","animate","transformOrigin","transform","duration","easing","activator","activatorProps","undefined","transition","handler","include"],"mappings":"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","sourcesContent":["// Styles\nimport './VOverlay.sass'\n\n// Composables\nimport { makeActivatorProps, useActivator } from './useActivator'\nimport { makePositionStrategyProps, usePositionStrategies } from './positionStrategies'\nimport { makeScrollStrategyProps, useScrollStrategies } from './scrollStrategies'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useBackButton } from '@/composables/router'\nimport { useBackgroundColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRtl } from '@/composables/rtl'\nimport { useTeleport } from '@/composables/teleport'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\nimport { useStack } from '@/composables/stack'\n\n// Directives\nimport { ClickOutside } from '@/directives/click-outside'\n\n// Utilities\nimport {\n convertToUnit,\n genericComponent,\n getScrollParent,\n IN_BROWSER,\n standardEasing,\n useRender,\n} from '@/util'\nimport {\n computed,\n mergeProps,\n ref,\n Teleport,\n toHandlers,\n Transition,\n watch,\n} from 'vue'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { BackgroundColorData } from '@/composables/color'\n\ninterface ScrimProps {\n [key: string]: unknown\n modelValue: boolean\n color: BackgroundColorData\n}\nfunction Scrim (props: ScrimProps) {\n const { modelValue, color, ...rest } = props\n return (\n <Transition name=\"fade-transition\" appear>\n { props.modelValue && (\n <div\n class={[\n 'v-overlay__scrim',\n props.color.backgroundColorClasses.value,\n ]}\n style={ props.color.backgroundColorStyles.value }\n { ...rest }\n />\n )}\n </Transition>\n )\n}\n\nexport type OverlaySlots = MakeSlots<{\n default: [{ isActive: Ref<boolean> }]\n activator: [{ isActive: boolean, props: Record<string, any> }]\n}>\n\nexport const VOverlay = genericComponent<new () => {\n $slots: OverlaySlots\n}>()({\n name: 'VOverlay',\n\n directives: { ClickOutside },\n\n inheritAttrs: false,\n\n props: {\n absolute: Boolean,\n attach: [Boolean, String, Object] as PropType<boolean | string | Element>,\n contained: Boolean,\n contentClass: null,\n noClickAnimation: Boolean,\n modelValue: Boolean,\n persistent: Boolean,\n scrim: {\n type: [String, Boolean],\n default: true,\n },\n\n ...makeActivatorProps(),\n ...makeDimensionProps(),\n ...makePositionStrategyProps(),\n ...makeScrollStrategyProps(),\n ...makeThemeProps(),\n ...makeTransitionProps(),\n ...makeLazyProps(),\n },\n\n emits: {\n 'click:outside': (e: MouseEvent) => true,\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots, attrs, emit }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { teleportTarget } = useTeleport(computed(() => props.attach || props.contained))\n const { themeClasses } = provideTheme(props)\n const { rtlClasses } = useRtl()\n const { hasContent, onAfterLeave } = useLazy(props, isActive)\n const scrimColor = useBackgroundColor(computed(() => {\n return typeof props.scrim === 'string' ? props.scrim : null\n }))\n const { activatorEl, activatorEvents } = useActivator(props, isActive)\n const { dimensionStyles } = useDimension(props)\n const { isTop } = useStack(isActive)\n\n const root = ref<HTMLElement>()\n const contentEl = ref<HTMLElement>()\n const { contentStyles, updatePosition } = usePositionStrategies(props, {\n contentEl,\n activatorEl,\n isActive,\n })\n useScrollStrategies(props, {\n root,\n contentEl,\n activatorEl,\n isActive,\n updatePosition,\n })\n\n function onClickOutside (e: MouseEvent) {\n emit('click:outside', e)\n\n if (!props.persistent) isActive.value = false\n else animateClick()\n }\n\n function closeConditional () {\n return isActive.value && isTop.value\n }\n\n IN_BROWSER && watch(isActive, val => {\n if (val) {\n window.addEventListener('keydown', onKeydown)\n } else {\n window.removeEventListener('keydown', onKeydown)\n }\n }, { immediate: true })\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key === 'Escape' && isTop.value) {\n if (!props.persistent) {\n isActive.value = false\n } else animateClick()\n }\n }\n\n useBackButton(next => {\n if (isTop.value && isActive.value) {\n next(false)\n if (!props.persistent) isActive.value = false\n else animateClick()\n } else {\n next()\n }\n })\n\n const top = ref<number>()\n watch(() => isActive.value && (props.absolute || props.contained) && teleportTarget.value == null, val => {\n if (val) {\n const scrollParent = getScrollParent(root.value)\n if (scrollParent && scrollParent !== document.scrollingElement) {\n top.value = scrollParent.scrollTop\n }\n }\n })\n\n // Add a quick \"bounce\" animation to the content\n function animateClick () {\n if (props.noClickAnimation) return\n\n contentEl.value?.animate([\n { transformOrigin: 'center' },\n { transform: 'scale(1.03)' },\n { transformOrigin: 'center' },\n ], {\n duration: 150,\n easing: standardEasing,\n })\n }\n\n useRender(() => (\n <>\n { slots.activator?.({\n isActive: isActive.value,\n props: mergeProps({\n modelValue: isActive.value,\n 'onUpdate:modelValue': (val: boolean) => isActive.value = val,\n }, toHandlers(activatorEvents.value), props.activatorProps),\n }) }\n <Teleport\n disabled={ !teleportTarget.value }\n to={ teleportTarget.value }\n >\n { hasContent.value && (\n <div\n class={[\n 'v-overlay',\n {\n 'v-overlay--absolute': props.absolute || props.contained,\n 'v-overlay--active': isActive.value,\n 'v-overlay--contained': props.contained,\n },\n themeClasses.value,\n rtlClasses.value,\n ]}\n style={ top.value != null ? `top: ${convertToUnit(top.value)}` : undefined }\n ref={ root }\n {...attrs}\n >\n <Scrim\n color={ scrimColor }\n modelValue={ isActive.value && !!props.scrim }\n />\n <MaybeTransition\n appear\n onAfterLeave={ onAfterLeave }\n persisted\n transition={ props.transition }\n target={ activatorEl.value }\n >\n <div\n ref={ contentEl }\n v-show={ isActive.value }\n v-click-outside={{ handler: onClickOutside, closeConditional, include: () => [activatorEl.value] }}\n class={[\n 'v-overlay__content',\n props.contentClass,\n ]}\n style={[\n dimensionStyles.value,\n contentStyles.value,\n ]}\n >\n { slots.default?.({ isActive }) }\n </div>\n </MaybeTransition>\n </div>\n )}\n </Teleport>\n </>\n ))\n\n return {\n animateClick,\n contentEl,\n activatorEl,\n }\n },\n})\n\nexport type VOverlay = InstanceType<typeof VOverlay>\n"],"file":"VOverlay.mjs"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/VOverlay/VOverlay.tsx"],"names":["makeActivatorProps","useActivator","makePositionStrategyProps","usePositionStrategies","makeScrollStrategyProps","useScrollStrategies","makeThemeProps","provideTheme","makeTransitionProps","MaybeTransition","useBackButton","useBackgroundColor","useProxiedModel","useRtl","useTeleport","makeDimensionProps","useDimension","makeLazyProps","useLazy","useStack","ClickOutside","convertToUnit","genericComponent","getScrollParent","IN_BROWSER","standardEasing","useRender","computed","mergeProps","ref","Teleport","toHandlers","Transition","watch","Scrim","props","modelValue","color","rest","backgroundColorClasses","value","backgroundColorStyles","VOverlay","name","directives","inheritAttrs","absolute","Boolean","attach","String","Object","contained","contentClass","noClickAnimation","persistent","scrim","type","default","emits","e","setup","slots","attrs","emit","isActive","teleportTarget","themeClasses","rtlClasses","hasContent","onAfterLeave","scrimColor","activatorEl","activatorRef","activatorEvents","dimensionStyles","isTop","root","contentEl","contentStyles","updatePosition","onClickOutside","animateClick","closeConditional","val","window","addEventListener","onKeydown","removeEventListener","immediate","key","next","top","scrollParent","document","scrollingElement","scrollTop","animate","transformOrigin","transform","duration","easing","activator","activatorProps","undefined","transition","handler","include"],"mappings":"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","sourcesContent":["// Styles\nimport './VOverlay.sass'\n\n// Composables\nimport { makeActivatorProps, useActivator } from './useActivator'\nimport { makePositionStrategyProps, usePositionStrategies } from './positionStrategies'\nimport { makeScrollStrategyProps, useScrollStrategies } from './scrollStrategies'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useBackButton } from '@/composables/router'\nimport { useBackgroundColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRtl } from '@/composables/rtl'\nimport { useTeleport } from '@/composables/teleport'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\nimport { useStack } from '@/composables/stack'\n\n// Directives\nimport { ClickOutside } from '@/directives/click-outside'\n\n// Utilities\nimport {\n convertToUnit,\n genericComponent,\n getScrollParent,\n IN_BROWSER,\n standardEasing,\n useRender,\n} from '@/util'\nimport {\n computed,\n mergeProps,\n ref,\n Teleport,\n toHandlers,\n Transition,\n watch,\n} from 'vue'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { BackgroundColorData } from '@/composables/color'\n\ninterface ScrimProps {\n [key: string]: unknown\n modelValue: boolean\n color: BackgroundColorData\n}\nfunction Scrim (props: ScrimProps) {\n const { modelValue, color, ...rest } = props\n return (\n <Transition name=\"fade-transition\" appear>\n { props.modelValue && (\n <div\n class={[\n 'v-overlay__scrim',\n props.color.backgroundColorClasses.value,\n ]}\n style={ props.color.backgroundColorStyles.value }\n { ...rest }\n />\n )}\n </Transition>\n )\n}\n\nexport type OverlaySlots = MakeSlots<{\n default: [{ isActive: Ref<boolean> }]\n activator: [{ isActive: boolean, props: Record<string, any> }]\n}>\n\nexport const VOverlay = genericComponent<new () => {\n $slots: OverlaySlots\n}>()({\n name: 'VOverlay',\n\n directives: { ClickOutside },\n\n inheritAttrs: false,\n\n props: {\n absolute: Boolean,\n attach: [Boolean, String, Object] as PropType<boolean | string | Element>,\n contained: Boolean,\n contentClass: null,\n noClickAnimation: Boolean,\n modelValue: Boolean,\n persistent: Boolean,\n scrim: {\n type: [String, Boolean],\n default: true,\n },\n\n ...makeActivatorProps(),\n ...makeDimensionProps(),\n ...makePositionStrategyProps(),\n ...makeScrollStrategyProps(),\n ...makeThemeProps(),\n ...makeTransitionProps(),\n ...makeLazyProps(),\n },\n\n emits: {\n 'click:outside': (e: MouseEvent) => true,\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots, attrs, emit }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { teleportTarget } = useTeleport(computed(() => props.attach || props.contained))\n const { themeClasses } = provideTheme(props)\n const { rtlClasses } = useRtl()\n const { hasContent, onAfterLeave } = useLazy(props, isActive)\n const scrimColor = useBackgroundColor(computed(() => {\n return typeof props.scrim === 'string' ? props.scrim : null\n }))\n const { activatorEl, activatorRef, activatorEvents } = useActivator(props, isActive)\n const { dimensionStyles } = useDimension(props)\n const { isTop } = useStack(isActive)\n\n const root = ref<HTMLElement>()\n const contentEl = ref<HTMLElement>()\n const { contentStyles, updatePosition } = usePositionStrategies(props, {\n contentEl,\n activatorEl,\n isActive,\n })\n useScrollStrategies(props, {\n root,\n contentEl,\n activatorEl,\n isActive,\n updatePosition,\n })\n\n function onClickOutside (e: MouseEvent) {\n emit('click:outside', e)\n\n if (!props.persistent) isActive.value = false\n else animateClick()\n }\n\n function closeConditional () {\n return isActive.value && isTop.value\n }\n\n IN_BROWSER && watch(isActive, val => {\n if (val) {\n window.addEventListener('keydown', onKeydown)\n } else {\n window.removeEventListener('keydown', onKeydown)\n }\n }, { immediate: true })\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key === 'Escape' && isTop.value) {\n if (!props.persistent) {\n isActive.value = false\n } else animateClick()\n }\n }\n\n useBackButton(next => {\n if (isTop.value && isActive.value) {\n next(false)\n if (!props.persistent) isActive.value = false\n else animateClick()\n } else {\n next()\n }\n })\n\n const top = ref<number>()\n watch(() => isActive.value && (props.absolute || props.contained) && teleportTarget.value == null, val => {\n if (val) {\n const scrollParent = getScrollParent(root.value)\n if (scrollParent && scrollParent !== document.scrollingElement) {\n top.value = scrollParent.scrollTop\n }\n }\n })\n\n // Add a quick \"bounce\" animation to the content\n function animateClick () {\n if (props.noClickAnimation) return\n\n contentEl.value?.animate([\n { transformOrigin: 'center' },\n { transform: 'scale(1.03)' },\n { transformOrigin: 'center' },\n ], {\n duration: 150,\n easing: standardEasing,\n })\n }\n\n useRender(() => (\n <>\n { slots.activator?.({\n isActive: isActive.value,\n props: mergeProps({\n ref: activatorRef,\n }, toHandlers(activatorEvents.value), props.activatorProps),\n }) }\n <Teleport\n disabled={ !teleportTarget.value }\n to={ teleportTarget.value }\n >\n { hasContent.value && (\n <div\n class={[\n 'v-overlay',\n {\n 'v-overlay--absolute': props.absolute || props.contained,\n 'v-overlay--active': isActive.value,\n 'v-overlay--contained': props.contained,\n },\n themeClasses.value,\n rtlClasses.value,\n ]}\n style={ top.value != null ? `top: ${convertToUnit(top.value)}` : undefined }\n ref={ root }\n {...attrs}\n >\n <Scrim\n color={ scrimColor }\n modelValue={ isActive.value && !!props.scrim }\n />\n <MaybeTransition\n appear\n onAfterLeave={ onAfterLeave }\n persisted\n transition={ props.transition }\n target={ activatorEl.value }\n >\n <div\n ref={ contentEl }\n v-show={ isActive.value }\n v-click-outside={{ handler: onClickOutside, closeConditional, include: () => [activatorEl.value] }}\n class={[\n 'v-overlay__content',\n props.contentClass,\n ]}\n style={[\n dimensionStyles.value,\n contentStyles.value,\n ]}\n >\n { slots.default?.({ isActive }) }\n </div>\n </MaybeTransition>\n </div>\n )}\n </Teleport>\n </>\n ))\n\n return {\n animateClick,\n contentEl,\n activatorEl,\n }\n },\n})\n\nexport type VOverlay = InstanceType<typeof VOverlay>\n"],"file":"VOverlay.mjs"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Utilities
|
|
2
|
-
import { getCurrentInstance, IN_BROWSER, propsFactory, SUPPORTS_FOCUS_VISIBLE } from "../../util/index.mjs";
|
|
2
|
+
import { getCurrentInstance, IN_BROWSER, isComponentInstance, propsFactory, SUPPORTS_FOCUS_VISIBLE } from "../../util/index.mjs";
|
|
3
3
|
import { makeDelayProps, useDelay } from "../../composables/delay.mjs";
|
|
4
|
-
import { computed, effectScope, nextTick, onScopeDispose, ref, watch } from 'vue'; // Types
|
|
4
|
+
import { computed, effectScope, nextTick, onScopeDispose, ref, watch, watchEffect } from 'vue'; // Types
|
|
5
5
|
|
|
6
6
|
export const makeActivatorProps = propsFactory({
|
|
7
7
|
activator: [String, Object],
|
|
@@ -81,6 +81,14 @@ export function useActivator(props, isActive) {
|
|
|
81
81
|
|
|
82
82
|
return events;
|
|
83
83
|
});
|
|
84
|
+
const activatorRef = ref();
|
|
85
|
+
watchEffect(() => {
|
|
86
|
+
if (!activatorRef.value) return;
|
|
87
|
+
nextTick(() => {
|
|
88
|
+
const activator = activatorRef.value;
|
|
89
|
+
activatorEl.value = isComponentInstance(activator) ? activator.$el : activator;
|
|
90
|
+
});
|
|
91
|
+
});
|
|
84
92
|
let scope;
|
|
85
93
|
watch(() => !!props.activator, val => {
|
|
86
94
|
if (val && IN_BROWSER) {
|
|
@@ -88,6 +96,7 @@ export function useActivator(props, isActive) {
|
|
|
88
96
|
scope.run(() => {
|
|
89
97
|
_useActivator(props, {
|
|
90
98
|
activatorEl,
|
|
99
|
+
activatorRef,
|
|
91
100
|
activatorEvents
|
|
92
101
|
});
|
|
93
102
|
});
|
|
@@ -100,6 +109,7 @@ export function useActivator(props, isActive) {
|
|
|
100
109
|
});
|
|
101
110
|
return {
|
|
102
111
|
activatorEl,
|
|
112
|
+
activatorRef,
|
|
103
113
|
activatorEvents
|
|
104
114
|
};
|
|
105
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/VOverlay/useActivator.tsx"],"names":["getCurrentInstance","IN_BROWSER","propsFactory","SUPPORTS_FOCUS_VISIBLE","makeDelayProps","useDelay","computed","effectScope","nextTick","onScopeDispose","ref","watch","makeActivatorProps","activator","String","Object","activatorProps","type","default","openOnClick","Boolean","undefined","openOnHover","openOnFocus","useActivator","props","isActive","activatorEl","isHovered","isFocused","value","runOpenDelay","runCloseDelay","availableEvents","click","e","stopPropagation","currentTarget","target","mouseenter","mouseleave","focus","matches","blur","activatorEvents","events","scope","val","run","_useActivator","stop","flush","immediate","oldVal","getActivator","unbindActivatorProps","bindActivatorProps","el","_props","entries","forEach","name","cb","addEventListener","keys","k","removeAttribute","setAttribute","removeEventListener","vm","selector","proxy","$el","parentNode","document","querySelector","nodeType","Node","ELEMENT_NODE"],"mappings":"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","sourcesContent":["// Utilities\nimport { getCurrentInstance, IN_BROWSER, propsFactory, SUPPORTS_FOCUS_VISIBLE } from '@/util'\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport {\n computed,\n effectScope,\n nextTick,\n onScopeDispose,\n ref,\n watch,\n} from 'vue'\n\n// Types\nimport type { DelayProps } from '@/composables/delay'\nimport type {\n ComponentPublicInstance,\n EffectScope,\n PropType,\n Ref,\n} from 'vue'\n\ninterface ActivatorProps extends DelayProps {\n activator?: 'parent' | string | Element | ComponentPublicInstance\n activatorProps: Record<string, any>\n\n openOnClick: boolean | undefined\n openOnHover: boolean\n openOnFocus: boolean | undefined\n}\n\nexport const makeActivatorProps = propsFactory({\n activator: [String, Object] as PropType<ActivatorProps['activator']>,\n activatorProps: {\n type: Object as PropType<ActivatorProps['activatorProps']>,\n default: () => ({}),\n },\n\n openOnClick: {\n type: Boolean,\n default: undefined,\n },\n openOnHover: Boolean,\n openOnFocus: {\n type: Boolean,\n default: undefined,\n },\n\n ...makeDelayProps(),\n})\n\nexport function useActivator (\n props: ActivatorProps,\n isActive: Ref<boolean>\n) {\n const activatorEl = ref<HTMLElement>()\n\n let isHovered = false\n let isFocused = false\n\n const openOnFocus = computed(() => props.openOnFocus || (props.openOnFocus == null && props.openOnHover))\n const openOnClick = computed(() => props.openOnClick || (props.openOnClick == null && !props.openOnHover && !openOnFocus.value))\n\n const { runOpenDelay, runCloseDelay } = useDelay(props, value => {\n if (value === (\n (props.openOnHover && isHovered) ||\n (openOnFocus.value && isFocused)\n )) {\n isActive.value = value\n }\n })\n\n const availableEvents = {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n isActive.value = !isActive.value\n },\n mouseenter: (e: MouseEvent) => {\n isHovered = true\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n runOpenDelay()\n },\n mouseleave: (e: MouseEvent) => {\n isHovered = false\n runCloseDelay()\n },\n focus: (e: FocusEvent) => {\n if (\n SUPPORTS_FOCUS_VISIBLE &&\n !(e.target as HTMLElement).matches(':focus-visible')\n ) return\n\n isFocused = true\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n\n runOpenDelay()\n },\n blur: (e: FocusEvent) => {\n isFocused = false\n e.stopPropagation()\n\n runCloseDelay()\n },\n }\n\n const activatorEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (openOnClick.value) {\n events.click = availableEvents.click\n }\n if (props.openOnHover) {\n events.mouseenter = availableEvents.mouseenter\n events.mouseleave = availableEvents.mouseleave\n }\n if (openOnFocus.value) {\n events.focus = availableEvents.focus\n events.blur = availableEvents.blur\n }\n\n return events\n })\n\n let scope: EffectScope\n watch(() => !!props.activator, val => {\n if (val && IN_BROWSER) {\n scope = effectScope()\n scope.run(() => {\n _useActivator(props, { activatorEl, activatorEvents })\n })\n } else if (scope) {\n scope.stop()\n }\n }, { flush: 'post', immediate: true })\n\n return { activatorEl, activatorEvents }\n}\n\nfunction _useActivator (props: ActivatorProps, { activatorEl, activatorEvents }: ReturnType<typeof useActivator>) {\n watch(() => props.activator, (val, oldVal) => {\n if (oldVal && val !== oldVal) {\n const activator = getActivator(oldVal)\n activator && unbindActivatorProps(activator)\n }\n if (val) {\n nextTick(() => bindActivatorProps())\n }\n }, { immediate: true })\n\n watch(() => props.activatorProps, () => {\n bindActivatorProps()\n })\n\n onScopeDispose(() => {\n unbindActivatorProps()\n })\n\n function bindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.addEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n if (_props[k] == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, _props[k])\n }\n })\n }\n\n function unbindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.removeEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n el.removeAttribute(k)\n })\n }\n\n const vm = getCurrentInstance('useActivator')\n function getActivator (selector = props.activator): HTMLElement | undefined {\n let activator\n if (selector) {\n if (selector === 'parent') {\n activator = vm?.proxy?.$el?.parentNode\n } else if (typeof selector === 'string') {\n // Selector\n activator = document.querySelector(selector)\n } else if ('$el' in selector) {\n // Component (ref)\n activator = selector.$el\n } else {\n // HTMLElement | Element\n activator = selector\n }\n }\n\n // The activator should only be a valid element (Ignore comments and text nodes)\n activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null\n\n return activatorEl.value\n }\n}\n"],"file":"useActivator.mjs"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/VOverlay/useActivator.tsx"],"names":["getCurrentInstance","IN_BROWSER","isComponentInstance","propsFactory","SUPPORTS_FOCUS_VISIBLE","makeDelayProps","useDelay","computed","effectScope","nextTick","onScopeDispose","ref","watch","watchEffect","makeActivatorProps","activator","String","Object","activatorProps","type","default","openOnClick","Boolean","undefined","openOnHover","openOnFocus","useActivator","props","isActive","activatorEl","isHovered","isFocused","value","runOpenDelay","runCloseDelay","availableEvents","click","e","stopPropagation","currentTarget","target","mouseenter","mouseleave","focus","matches","blur","activatorEvents","events","activatorRef","$el","scope","val","run","_useActivator","stop","flush","immediate","oldVal","getActivator","unbindActivatorProps","bindActivatorProps","el","_props","entries","forEach","name","cb","addEventListener","keys","k","removeAttribute","setAttribute","removeEventListener","vm","selector","proxy","parentNode","document","querySelector","nodeType","Node","ELEMENT_NODE"],"mappings":"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","sourcesContent":["// Utilities\nimport { getCurrentInstance, IN_BROWSER, isComponentInstance, propsFactory, SUPPORTS_FOCUS_VISIBLE } from '@/util'\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport {\n computed,\n effectScope,\n nextTick,\n onScopeDispose,\n ref,\n watch,\n watchEffect,\n} from 'vue'\n\n// Types\nimport type { DelayProps } from '@/composables/delay'\nimport type {\n ComponentPublicInstance,\n EffectScope,\n PropType,\n Ref,\n} from 'vue'\n\ninterface ActivatorProps extends DelayProps {\n activator?: 'parent' | string | Element | ComponentPublicInstance\n activatorProps: Record<string, any>\n\n openOnClick: boolean | undefined\n openOnHover: boolean\n openOnFocus: boolean | undefined\n}\n\nexport const makeActivatorProps = propsFactory({\n activator: [String, Object] as PropType<ActivatorProps['activator']>,\n activatorProps: {\n type: Object as PropType<ActivatorProps['activatorProps']>,\n default: () => ({}),\n },\n\n openOnClick: {\n type: Boolean,\n default: undefined,\n },\n openOnHover: Boolean,\n openOnFocus: {\n type: Boolean,\n default: undefined,\n },\n\n ...makeDelayProps(),\n})\n\nexport function useActivator (\n props: ActivatorProps,\n isActive: Ref<boolean>\n) {\n const activatorEl = ref<HTMLElement>()\n\n let isHovered = false\n let isFocused = false\n\n const openOnFocus = computed(() => props.openOnFocus || (props.openOnFocus == null && props.openOnHover))\n const openOnClick = computed(() => props.openOnClick || (props.openOnClick == null && !props.openOnHover && !openOnFocus.value))\n\n const { runOpenDelay, runCloseDelay } = useDelay(props, value => {\n if (value === (\n (props.openOnHover && isHovered) ||\n (openOnFocus.value && isFocused)\n )) {\n isActive.value = value\n }\n })\n\n const availableEvents = {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n isActive.value = !isActive.value\n },\n mouseenter: (e: MouseEvent) => {\n isHovered = true\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n runOpenDelay()\n },\n mouseleave: (e: MouseEvent) => {\n isHovered = false\n runCloseDelay()\n },\n focus: (e: FocusEvent) => {\n if (\n SUPPORTS_FOCUS_VISIBLE &&\n !(e.target as HTMLElement).matches(':focus-visible')\n ) return\n\n isFocused = true\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n\n runOpenDelay()\n },\n blur: (e: FocusEvent) => {\n isFocused = false\n e.stopPropagation()\n\n runCloseDelay()\n },\n }\n\n const activatorEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (openOnClick.value) {\n events.click = availableEvents.click\n }\n if (props.openOnHover) {\n events.mouseenter = availableEvents.mouseenter\n events.mouseleave = availableEvents.mouseleave\n }\n if (openOnFocus.value) {\n events.focus = availableEvents.focus\n events.blur = availableEvents.blur\n }\n\n return events\n })\n\n const activatorRef = ref()\n watchEffect(() => {\n if (!activatorRef.value) return\n\n nextTick(() => {\n const activator = activatorRef.value\n activatorEl.value = isComponentInstance(activator) ? activator.$el : activator\n })\n })\n\n let scope: EffectScope\n watch(() => !!props.activator, val => {\n if (val && IN_BROWSER) {\n scope = effectScope()\n scope.run(() => {\n _useActivator(props, { activatorEl, activatorRef, activatorEvents })\n })\n } else if (scope) {\n scope.stop()\n }\n }, { flush: 'post', immediate: true })\n\n return { activatorEl, activatorRef, activatorEvents }\n}\n\nfunction _useActivator (props: ActivatorProps, { activatorEl, activatorEvents }: ReturnType<typeof useActivator>) {\n watch(() => props.activator, (val, oldVal) => {\n if (oldVal && val !== oldVal) {\n const activator = getActivator(oldVal)\n activator && unbindActivatorProps(activator)\n }\n if (val) {\n nextTick(() => bindActivatorProps())\n }\n }, { immediate: true })\n\n watch(() => props.activatorProps, () => {\n bindActivatorProps()\n })\n\n onScopeDispose(() => {\n unbindActivatorProps()\n })\n\n function bindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.addEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n if (_props[k] == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, _props[k])\n }\n })\n }\n\n function unbindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.removeEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n el.removeAttribute(k)\n })\n }\n\n const vm = getCurrentInstance('useActivator')\n function getActivator (selector = props.activator): HTMLElement | undefined {\n let activator\n if (selector) {\n if (selector === 'parent') {\n activator = vm?.proxy?.$el?.parentNode\n } else if (typeof selector === 'string') {\n // Selector\n activator = document.querySelector(selector)\n } else if ('$el' in selector) {\n // Component (ref)\n activator = selector.$el\n } else {\n // HTMLElement | Element\n activator = selector\n }\n }\n\n // The activator should only be a valid element (Ignore comments and text nodes)\n activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null\n\n return activatorEl.value\n }\n}\n"],"file":"useActivator.mjs"}
|