@vuetify/nightly 3.0.0-next-20220107.0 → 3.0.0-next-20220112.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 +9 -13
- package/dist/json/tags.json +0 -1
- package/dist/json/web-types.json +11 -25
- package/dist/vuetify.css +1 -17
- package/dist/vuetify.d.ts +23 -22
- package/dist/vuetify.esm.js +49 -38
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +49 -38
- 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/VInput/VInput.mjs +3 -2
- package/lib/components/VInput/VInput.mjs.map +1 -1
- 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 +20 -31
- package/lib/components/VPagination/VPagination.mjs.map +1 -1
- package/lib/components/index.d.ts +23 -22
- package/lib/entry-bundler.mjs +1 -1
- package/package.json +1 -1
|
@@ -331,24 +331,8 @@
|
|
|
331
331
|
}
|
|
332
332
|
|
|
333
333
|
.v-pagination .v-btn {
|
|
334
|
-
box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);
|
|
335
334
|
border-radius: 4px;
|
|
336
335
|
}
|
|
337
|
-
.v-pagination .v-btn.v-btn--density-default {
|
|
338
|
-
height: calc(var(--v-btn-height) + 0px);
|
|
339
|
-
width: calc(var(--v-btn-height) + 0px);
|
|
340
|
-
}
|
|
341
|
-
.v-pagination .v-btn.v-btn--density-comfortable {
|
|
342
|
-
height: calc(var(--v-btn-height) + -4px);
|
|
343
|
-
width: calc(var(--v-btn-height) + -4px);
|
|
344
|
-
}
|
|
345
|
-
.v-pagination .v-btn.v-btn--density-compact {
|
|
346
|
-
height: calc(var(--v-btn-height) + -8px);
|
|
347
|
-
width: calc(var(--v-btn-height) + -8px);
|
|
348
|
-
}
|
|
349
|
-
.v-pagination__list .v-btn--elevated {
|
|
350
|
-
box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);
|
|
351
|
-
}
|
|
352
336
|
.v-pagination__item--is-active .v-btn__overlay {
|
|
353
337
|
opacity: var(--v-border-opacity);
|
|
354
338
|
}
|
|
@@ -184,13 +184,7 @@
|
|
|
184
184
|
// VPagination
|
|
185
185
|
.v-btn
|
|
186
186
|
.v-pagination &
|
|
187
|
-
@include tools.elevation($button-pagination-elevation)
|
|
188
187
|
@include tools.rounded($button-pagination-border-radius)
|
|
189
|
-
@include button-density('height' 'width', $button-pagination-density)
|
|
190
|
-
|
|
191
|
-
&--elevated
|
|
192
|
-
.v-pagination__list &
|
|
193
|
-
@include tools.elevation($button-pagination-elevation)
|
|
194
188
|
|
|
195
189
|
&__overlay
|
|
196
190
|
.v-pagination__item--is-active &
|
|
@@ -28,7 +28,6 @@ $button-bottom-navigation-text-transform: none !default;
|
|
|
28
28
|
$button-bottom-navigation-transition-duration: .2s !default;
|
|
29
29
|
$button-pagination-active-overlay-opacity: var(--v-border-opacity) !default;
|
|
30
30
|
$button-pagination-border-radius: settings.$border-radius-root !default;
|
|
31
|
-
$button-pagination-elevation: 0 !default;
|
|
32
31
|
$button-border-color: settings.$border-color-root !default;
|
|
33
32
|
$button-border-radius: settings.$border-radius-root !default;
|
|
34
33
|
$button-border-style: settings.$border-style-root !default;
|
|
@@ -62,7 +61,6 @@ $button-stacked-width-ratio: 1 !default;
|
|
|
62
61
|
$button-density: ('default': 0, 'comfortable': -2, 'compact': -3) !default;
|
|
63
62
|
$button-stacked-density: ('default': 0, 'comfortable': -4, 'compact': -6) !default;
|
|
64
63
|
$button-icon-density: ('default': 3, 'comfortable': 0, 'compact': -2) !default;
|
|
65
|
-
$button-pagination-density: ('default': 0, 'comfortable': -1, 'compact': -2) !default;
|
|
66
64
|
|
|
67
65
|
$button-border: (
|
|
68
66
|
$button-border-color,
|
|
@@ -106,10 +106,11 @@ export const VInput = genericComponent()({
|
|
|
106
106
|
"class": "v-input__details"
|
|
107
107
|
}, [_createVNode(VMessages, {
|
|
108
108
|
"active": showMessages,
|
|
109
|
-
"
|
|
109
|
+
"color": isValid.value === false ? 'error' : undefined,
|
|
110
|
+
"value": errorMessages.value.length > 0 ? errorMessages.value : hasMessages ? props.messages : props.hint
|
|
110
111
|
}, {
|
|
111
112
|
default: slots.messages
|
|
112
|
-
}, 8, ["active", "value"]), (_slots$details = slots.details) == null ? void 0 : _slots$details.call(slots, slotProps.value)])], 2);
|
|
113
|
+
}, 8, ["active", "color", "value"]), (_slots$details = slots.details) == null ? void 0 : _slots$details.call(slots, slotProps.value)])], 2);
|
|
113
114
|
});
|
|
114
115
|
return {
|
|
115
116
|
isValid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/VInput/VInput.tsx"],"names":["VIcon","VMessages","makeDensityProps","useDensity","makeValidationProps","useValidation","computed","provide","toRef","genericComponent","getUid","pick","propsFactory","useRender","VInputSymbol","makeVInputProps","id","String","appendIcon","prependIcon","hideDetails","Boolean","hint","messages","type","Array","default","persistentHint","direction","validator","v","includes","VInput","name","props","focused","emits","val","e","setup","slots","emit","densityClasses","errorMessages","isDisabled","isReadonly","isPristine","isValid","isValidating","reset","resetValidation","validate","validationClasses","uid","isFocused","slotProps","hasPrepend","prepend","hasAppend","append","hasHint","hasMessages","length","value","hasDetails","showMessages","details","filterInputProps","Object","keys"],"mappings":"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","sourcesContent":["// Styles\nimport './VInput.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VMessages } from '@/components/VMessages'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeValidationProps, useValidation } from '@/composables/validation'\n\n// Utilities\nimport { computed, provide, toRef } from 'vue'\nimport { genericComponent, getUid, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { ComputedRef, ExtractPropTypes, InjectionKey, PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nexport interface VInputSlot {\n id: ComputedRef<string>\n isDisabled: ComputedRef<boolean>\n isFocused: Ref<boolean>\n isReadonly: ComputedRef<boolean>\n isPristine: Ref<boolean>\n isValid: ComputedRef<boolean | null>\n isValidating: Ref<boolean>\n reset: () => void\n resetValidation: () => void\n validate: () => void\n}\n\nexport const VInputSymbol = 'VInput' as any as InjectionKey<ComputedRef<VInputSlot>>\n\nexport const makeVInputProps = propsFactory({\n id: String,\n appendIcon: String,\n prependIcon: String,\n hideDetails: [Boolean, String] as PropType<boolean | 'auto'>,\n hint: String,\n messages: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n persistentHint: Boolean,\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n validator: (v: any) => ['horizontal', 'vertical'].includes(v),\n },\n\n ...makeDensityProps(),\n ...makeValidationProps(),\n})\n\nexport const VInput = genericComponent<new <T>() => {\n $slots: MakeSlots<{\n default: [VInputSlot]\n prepend: [VInputSlot]\n append: [VInputSlot]\n details: [VInputSlot]\n }>\n}>()({\n name: 'VInput',\n\n props: {\n focused: Boolean,\n\n ...makeVInputProps(),\n },\n\n emits: {\n 'update:modelValue': (val: any) => true,\n 'click:prepend': (e: MouseEvent) => true,\n 'click:append': (e: MouseEvent) => true,\n },\n\n setup (props, { slots, emit }) {\n const { densityClasses } = useDensity(props)\n const {\n errorMessages,\n isDisabled,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n validationClasses,\n } = useValidation(props)\n\n const uid = getUid()\n const id = computed(() => props.id || `input-${uid}`)\n const isFocused = toRef(props, 'focused')\n\n const slotProps = computed<VInputSlot>(() => ({\n id,\n isDisabled,\n isFocused,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n }))\n\n provide(VInputSymbol, slotProps)\n\n useRender(() => {\n const hasPrepend = (slots.prepend || props.prependIcon)\n const hasAppend = (slots.append || props.appendIcon)\n const hasHint = !!(slots.hint || props.hint)\n const hasMessages = !!(\n slots.messages ||\n props.messages?.length ||\n errorMessages.value.length\n )\n const hasDetails = !props.hideDetails || (\n props.hideDetails === 'auto' &&\n (hasMessages || hasHint)\n )\n const showMessages = hasMessages || (\n hasHint &&\n (props.persistentHint || props.focused)\n )\n\n return (\n <div class={[\n 'v-input',\n `v-input--${props.direction}`,\n densityClasses.value,\n validationClasses.value,\n ]}\n >\n { hasPrepend && (\n <div\n class=\"v-input__prepend\"\n onClick={ e => emit('click:prepend', e) }\n >\n { slots?.prepend?.(slotProps.value) }\n\n { props.prependIcon && (\n <VIcon icon={ props.prependIcon } />\n ) }\n </div>\n ) }\n\n <div class=\"v-input__control\">\n { slots.default?.(slotProps.value) }\n </div>\n\n { hasAppend && (\n <div\n class=\"v-input__append\"\n onClick={ e => emit('click:append', e) }\n >\n { slots?.append?.(slotProps.value) }\n\n { props.appendIcon && (\n <VIcon icon={ props.appendIcon } />\n ) }\n </div>\n ) }\n\n { hasDetails && (\n <div class=\"v-input__details\">\n <VMessages\n active={ showMessages }\n value={ errorMessages.value || (hasMessages ? props.messages : props.hint) }\n v-slots={{ default: slots.messages }}\n />\n\n { slots.details?.(slotProps.value) }\n </div>\n ) }\n </div>\n )\n })\n\n return {\n isValid,\n validate,\n reset,\n resetValidation,\n errorMessages,\n }\n },\n})\n\nexport type VInput = InstanceType<typeof VInput>\n\nexport function filterInputProps (props: ExtractPropTypes<ReturnType<typeof makeVInputProps>>) {\n return pick(props, Object.keys(VInput.props) as any)\n}\n"],"file":"VInput.mjs"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/VInput/VInput.tsx"],"names":["VIcon","VMessages","makeDensityProps","useDensity","makeValidationProps","useValidation","computed","provide","toRef","genericComponent","getUid","pick","propsFactory","useRender","VInputSymbol","makeVInputProps","id","String","appendIcon","prependIcon","hideDetails","Boolean","hint","messages","type","Array","default","persistentHint","direction","validator","v","includes","VInput","name","props","focused","emits","val","e","setup","slots","emit","densityClasses","errorMessages","isDisabled","isReadonly","isPristine","isValid","isValidating","reset","resetValidation","validate","validationClasses","uid","isFocused","slotProps","hasPrepend","prepend","hasAppend","append","hasHint","hasMessages","length","value","hasDetails","showMessages","undefined","details","filterInputProps","Object","keys"],"mappings":"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","sourcesContent":["// Styles\nimport './VInput.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VMessages } from '@/components/VMessages'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeValidationProps, useValidation } from '@/composables/validation'\n\n// Utilities\nimport { computed, provide, toRef } from 'vue'\nimport { genericComponent, getUid, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { ComputedRef, ExtractPropTypes, InjectionKey, PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nexport interface VInputSlot {\n id: ComputedRef<string>\n isDisabled: ComputedRef<boolean>\n isFocused: Ref<boolean>\n isReadonly: ComputedRef<boolean>\n isPristine: Ref<boolean>\n isValid: ComputedRef<boolean | null>\n isValidating: Ref<boolean>\n reset: () => void\n resetValidation: () => void\n validate: () => void\n}\n\nexport const VInputSymbol = 'VInput' as any as InjectionKey<ComputedRef<VInputSlot>>\n\nexport const makeVInputProps = propsFactory({\n id: String,\n appendIcon: String,\n prependIcon: String,\n hideDetails: [Boolean, String] as PropType<boolean | 'auto'>,\n hint: String,\n messages: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n persistentHint: Boolean,\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n validator: (v: any) => ['horizontal', 'vertical'].includes(v),\n },\n\n ...makeDensityProps(),\n ...makeValidationProps(),\n})\n\nexport const VInput = genericComponent<new <T>() => {\n $slots: MakeSlots<{\n default: [VInputSlot]\n prepend: [VInputSlot]\n append: [VInputSlot]\n details: [VInputSlot]\n }>\n}>()({\n name: 'VInput',\n\n props: {\n focused: Boolean,\n\n ...makeVInputProps(),\n },\n\n emits: {\n 'update:modelValue': (val: any) => true,\n 'click:prepend': (e: MouseEvent) => true,\n 'click:append': (e: MouseEvent) => true,\n },\n\n setup (props, { slots, emit }) {\n const { densityClasses } = useDensity(props)\n const {\n errorMessages,\n isDisabled,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n validationClasses,\n } = useValidation(props)\n\n const uid = getUid()\n const id = computed(() => props.id || `input-${uid}`)\n const isFocused = toRef(props, 'focused')\n\n const slotProps = computed<VInputSlot>(() => ({\n id,\n isDisabled,\n isFocused,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n }))\n\n provide(VInputSymbol, slotProps)\n\n useRender(() => {\n const hasPrepend = (slots.prepend || props.prependIcon)\n const hasAppend = (slots.append || props.appendIcon)\n const hasHint = !!(slots.hint || props.hint)\n const hasMessages = !!(\n slots.messages ||\n props.messages?.length ||\n errorMessages.value.length\n )\n const hasDetails = !props.hideDetails || (\n props.hideDetails === 'auto' &&\n (hasMessages || hasHint)\n )\n const showMessages = hasMessages || (\n hasHint &&\n (props.persistentHint || props.focused)\n )\n\n return (\n <div class={[\n 'v-input',\n `v-input--${props.direction}`,\n densityClasses.value,\n validationClasses.value,\n ]}\n >\n { hasPrepend && (\n <div\n class=\"v-input__prepend\"\n onClick={ e => emit('click:prepend', e) }\n >\n { slots?.prepend?.(slotProps.value) }\n\n { props.prependIcon && (\n <VIcon icon={ props.prependIcon } />\n ) }\n </div>\n ) }\n\n <div class=\"v-input__control\">\n { slots.default?.(slotProps.value) }\n </div>\n\n { hasAppend && (\n <div\n class=\"v-input__append\"\n onClick={ e => emit('click:append', e) }\n >\n { slots?.append?.(slotProps.value) }\n\n { props.appendIcon && (\n <VIcon icon={ props.appendIcon } />\n ) }\n </div>\n ) }\n\n { hasDetails && (\n <div class=\"v-input__details\">\n <VMessages\n active={ showMessages }\n color={ isValid.value === false ? 'error' : undefined }\n value={ errorMessages.value.length > 0\n ? errorMessages.value\n : (hasMessages ? props.messages : props.hint)\n }\n v-slots={{ default: slots.messages }}\n />\n\n { slots.details?.(slotProps.value) }\n </div>\n ) }\n </div>\n )\n })\n\n return {\n isValid,\n validate,\n reset,\n resetValidation,\n errorMessages,\n }\n },\n})\n\nexport type VInput = InstanceType<typeof VInput>\n\nexport function filterInputProps (props: ExtractPropTypes<ReturnType<typeof makeVInputProps>>) {\n return pick(props, Object.keys(VInput.props) as any)\n}\n"],"file":"VInput.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"}
|
|
@@ -8,7 +8,6 @@ import { useLocale } from "../../composables/locale.mjs";
|
|
|
8
8
|
import { useRtl } from "../../composables/rtl.mjs";
|
|
9
9
|
import { makeElevationProps } from "../../composables/elevation.mjs";
|
|
10
10
|
import { makeDensityProps } from "../../composables/density.mjs";
|
|
11
|
-
import { makeRoundedProps } from "../../composables/rounded.mjs";
|
|
12
11
|
import { makeSizeProps } from "../../composables/size.mjs";
|
|
13
12
|
import { makeThemeProps, provideTheme } from "../../composables/theme.mjs";
|
|
14
13
|
import { makeVariantProps } from "../../composables/variant.mjs";
|
|
@@ -18,7 +17,7 @@ import { useRefs } from "../../composables/refs.mjs";
|
|
|
18
17
|
import { useProxiedModel } from "../../composables/proxiedModel.mjs";
|
|
19
18
|
import { provideDefaults } from "../../composables/defaults.mjs"; // Utilities
|
|
20
19
|
|
|
21
|
-
import { computed, nextTick, ref } from 'vue';
|
|
20
|
+
import { computed, nextTick, ref, toRef } from 'vue';
|
|
22
21
|
import { createRange, defineComponent, keyValues } from "../../util/index.mjs"; // Types
|
|
23
22
|
|
|
24
23
|
export const VPagination = defineComponent({
|
|
@@ -88,14 +87,13 @@ export const VPagination = defineComponent({
|
|
|
88
87
|
default: '...'
|
|
89
88
|
},
|
|
90
89
|
showFirstLastPage: Boolean,
|
|
90
|
+
...makeBorderProps(),
|
|
91
|
+
...makeDensityProps(),
|
|
92
|
+
...makeElevationProps(),
|
|
93
|
+
...makeSizeProps(),
|
|
91
94
|
...makeTagProps({
|
|
92
95
|
tag: 'nav'
|
|
93
96
|
}),
|
|
94
|
-
...makeElevationProps(),
|
|
95
|
-
...makeDensityProps(),
|
|
96
|
-
...makeRoundedProps(),
|
|
97
|
-
...makeSizeProps(),
|
|
98
|
-
...makeBorderProps(),
|
|
99
97
|
...makeThemeProps(),
|
|
100
98
|
...makeVariantProps({
|
|
101
99
|
variant: 'text'
|
|
@@ -189,12 +187,15 @@ export const VPagination = defineComponent({
|
|
|
189
187
|
refs,
|
|
190
188
|
updateRef
|
|
191
189
|
} = useRefs();
|
|
190
|
+
provideDefaults({
|
|
191
|
+
VBtn: {
|
|
192
|
+
border: toRef(props, 'border'),
|
|
193
|
+
density: toRef(props, 'density'),
|
|
194
|
+
size: toRef(props, 'size'),
|
|
195
|
+
variant: toRef(props, 'variant')
|
|
196
|
+
}
|
|
197
|
+
});
|
|
192
198
|
const items = computed(() => {
|
|
193
|
-
const sharedProps = {
|
|
194
|
-
density: props.density,
|
|
195
|
-
rounded: props.rounded,
|
|
196
|
-
size: props.size
|
|
197
|
-
};
|
|
198
199
|
return range.value.map((item, index) => {
|
|
199
200
|
const ref = e => updateRef(e, index);
|
|
200
201
|
|
|
@@ -202,13 +203,11 @@ export const VPagination = defineComponent({
|
|
|
202
203
|
return {
|
|
203
204
|
isActive: false,
|
|
204
205
|
page: item,
|
|
205
|
-
props: {
|
|
206
|
+
props: {
|
|
206
207
|
ref,
|
|
207
208
|
ellipsis: true,
|
|
208
209
|
icon: true,
|
|
209
|
-
disabled: true
|
|
210
|
-
variant: props.variant,
|
|
211
|
-
border: props.border
|
|
210
|
+
disabled: true
|
|
212
211
|
}
|
|
213
212
|
};
|
|
214
213
|
} else {
|
|
@@ -216,14 +215,12 @@ export const VPagination = defineComponent({
|
|
|
216
215
|
return {
|
|
217
216
|
isActive,
|
|
218
217
|
page: n(item),
|
|
219
|
-
props: {
|
|
218
|
+
props: {
|
|
220
219
|
ref,
|
|
221
220
|
ellipsis: false,
|
|
222
221
|
icon: true,
|
|
223
222
|
disabled: !!props.disabled || props.length < 2,
|
|
224
223
|
elevation: props.elevation,
|
|
225
|
-
variant: props.variant,
|
|
226
|
-
border: props.border,
|
|
227
224
|
color: isActive ? props.color : undefined,
|
|
228
225
|
ariaCurrent: isActive,
|
|
229
226
|
ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, index + 1),
|
|
@@ -234,39 +231,31 @@ export const VPagination = defineComponent({
|
|
|
234
231
|
});
|
|
235
232
|
});
|
|
236
233
|
const controls = computed(() => {
|
|
237
|
-
const sharedProps = {
|
|
238
|
-
color: undefined,
|
|
239
|
-
density: props.density,
|
|
240
|
-
rounded: props.rounded,
|
|
241
|
-
size: props.size,
|
|
242
|
-
variant: props.variant,
|
|
243
|
-
border: props.border
|
|
244
|
-
};
|
|
245
234
|
const prevDisabled = !!props.disabled || page.value <= start.value;
|
|
246
235
|
const nextDisabled = !!props.disabled || page.value >= start.value + length.value - 1;
|
|
247
236
|
return {
|
|
248
|
-
first: props.showFirstLastPage ? {
|
|
237
|
+
first: props.showFirstLastPage ? {
|
|
249
238
|
icon: isRtl.value ? props.lastIcon : props.firstIcon,
|
|
250
239
|
onClick: e => setValue(e, start.value, 'first'),
|
|
251
240
|
disabled: prevDisabled,
|
|
252
241
|
ariaLabel: t(props.firstAriaLabel),
|
|
253
242
|
ariaDisabled: prevDisabled
|
|
254
243
|
} : undefined,
|
|
255
|
-
prev: {
|
|
244
|
+
prev: {
|
|
256
245
|
icon: isRtl.value ? props.nextIcon : props.prevIcon,
|
|
257
246
|
onClick: e => setValue(e, page.value - 1, 'prev'),
|
|
258
247
|
disabled: prevDisabled,
|
|
259
248
|
ariaLabel: t(props.previousAriaLabel),
|
|
260
249
|
ariaDisabled: prevDisabled
|
|
261
250
|
},
|
|
262
|
-
next: {
|
|
251
|
+
next: {
|
|
263
252
|
icon: isRtl.value ? props.prevIcon : props.nextIcon,
|
|
264
253
|
onClick: e => setValue(e, page.value + 1, 'next'),
|
|
265
254
|
disabled: nextDisabled,
|
|
266
255
|
ariaLabel: t(props.nextAriaLabel),
|
|
267
256
|
ariaDisabled: nextDisabled
|
|
268
257
|
},
|
|
269
|
-
last: props.showFirstLastPage ? {
|
|
258
|
+
last: props.showFirstLastPage ? {
|
|
270
259
|
icon: isRtl.value ? props.firstIcon : props.lastIcon,
|
|
271
260
|
onClick: e => setValue(e, start.value + length.value - 1, 'last'),
|
|
272
261
|
disabled: nextDisabled,
|