All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
package.lib.components.VLazy.VLazy.mjs Maven / Gradle / Ivy
import { withDirectives as _withDirectives, resolveDirective as _resolveDirective, createVNode as _createVNode } from "vue";
// Composables
import { makeComponentProps } from "../../composables/component.mjs";
import { makeDimensionProps, useDimension } from "../../composables/dimensions.mjs";
import { useProxiedModel } from "../../composables/proxiedModel.mjs";
import { makeTagProps } from "../../composables/tag.mjs";
import { makeTransitionProps, MaybeTransition } from "../../composables/transition.mjs"; // Directives
import intersect from "../../directives/intersect/index.mjs"; // Utilities
import { genericComponent, propsFactory, useRender } from "../../util/index.mjs"; // Types
export const makeVLazyProps = propsFactory({
modelValue: Boolean,
options: {
type: Object,
// For more information on types, navigate to:
// https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
default: () => ({
root: undefined,
rootMargin: undefined,
threshold: undefined
})
},
...makeComponentProps(),
...makeDimensionProps(),
...makeTagProps(),
...makeTransitionProps({
transition: 'fade-transition'
})
}, 'VLazy');
export const VLazy = genericComponent()({
name: 'VLazy',
directives: {
intersect
},
props: makeVLazyProps(),
emits: {
'update:modelValue': value => true
},
setup(props, _ref) {
let {
slots
} = _ref;
const {
dimensionStyles
} = useDimension(props);
const isActive = useProxiedModel(props, 'modelValue');
function onIntersect(isIntersecting) {
if (isActive.value) return;
isActive.value = isIntersecting;
}
useRender(() => _withDirectives(_createVNode(props.tag, {
"class": ['v-lazy', props.class],
"style": [dimensionStyles.value, props.style]
}, {
default: () => [isActive.value && _createVNode(MaybeTransition, {
"transition": props.transition,
"appear": true
}, {
default: () => [slots.default?.()]
})]
}), [[_resolveDirective("intersect"), {
handler: onIntersect,
options: props.options
}, null]]));
return {};
}
});
//# sourceMappingURL=VLazy.mjs.map