VVirtualScrollItem.mjs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { mergeProps as _mergeProps, createVNode as _createVNode, Fragment as _Fragment } from "vue";
  2. // Composables
  3. import { makeComponentProps } from "../../composables/component.mjs";
  4. import { useResizeObserver } from "../../composables/resizeObserver.mjs"; // Utilities
  5. import { watch } from 'vue';
  6. import { genericComponent, propsFactory, useRender } from "../../util/index.mjs"; // Types
  7. export const makeVVirtualScrollItemProps = propsFactory({
  8. renderless: Boolean,
  9. ...makeComponentProps()
  10. }, 'VVirtualScrollItem');
  11. export const VVirtualScrollItem = genericComponent()({
  12. name: 'VVirtualScrollItem',
  13. inheritAttrs: false,
  14. props: makeVVirtualScrollItemProps(),
  15. emits: {
  16. 'update:height': height => true
  17. },
  18. setup(props, _ref) {
  19. let {
  20. attrs,
  21. emit,
  22. slots
  23. } = _ref;
  24. const {
  25. resizeRef,
  26. contentRect
  27. } = useResizeObserver(undefined, 'border');
  28. watch(() => contentRect.value?.height, height => {
  29. if (height != null) emit('update:height', height);
  30. });
  31. useRender(() => props.renderless ? _createVNode(_Fragment, null, [slots.default?.({
  32. itemRef: resizeRef
  33. })]) : _createVNode("div", _mergeProps({
  34. "ref": resizeRef,
  35. "class": ['v-virtual-scroll__item', props.class],
  36. "style": props.style
  37. }, attrs), [slots.default?.()]));
  38. }
  39. });
  40. //# sourceMappingURL=VVirtualScrollItem.mjs.map