40 lines
1.4 KiB
JavaScript
40 lines
1.4 KiB
JavaScript
|
import { mergeProps as _mergeProps, createVNode as _createVNode, Fragment as _Fragment } from "vue";
|
||
|
// Composables
|
||
|
import { makeComponentProps } from "../../composables/component.mjs";
|
||
|
import { useResizeObserver } from "../../composables/resizeObserver.mjs"; // Utilities
|
||
|
import { watch } from 'vue';
|
||
|
import { genericComponent, propsFactory, useRender } from "../../util/index.mjs"; // Types
|
||
|
export const makeVVirtualScrollItemProps = propsFactory({
|
||
|
renderless: Boolean,
|
||
|
...makeComponentProps()
|
||
|
}, 'VVirtualScrollItem');
|
||
|
export const VVirtualScrollItem = genericComponent()({
|
||
|
name: 'VVirtualScrollItem',
|
||
|
inheritAttrs: false,
|
||
|
props: makeVVirtualScrollItemProps(),
|
||
|
emits: {
|
||
|
'update:height': height => true
|
||
|
},
|
||
|
setup(props, _ref) {
|
||
|
let {
|
||
|
attrs,
|
||
|
emit,
|
||
|
slots
|
||
|
} = _ref;
|
||
|
const {
|
||
|
resizeRef,
|
||
|
contentRect
|
||
|
} = useResizeObserver(undefined, 'border');
|
||
|
watch(() => contentRect.value?.height, height => {
|
||
|
if (height != null) emit('update:height', height);
|
||
|
});
|
||
|
useRender(() => props.renderless ? _createVNode(_Fragment, null, [slots.default?.({
|
||
|
itemRef: resizeRef
|
||
|
})]) : _createVNode("div", _mergeProps({
|
||
|
"ref": resizeRef,
|
||
|
"class": ['v-virtual-scroll__item', props.class],
|
||
|
"style": props.style
|
||
|
}, attrs), [slots.default?.()]));
|
||
|
}
|
||
|
});
|
||
|
//# sourceMappingURL=VVirtualScrollItem.mjs.map
|