element-plus
Version:
A Component Library for Vue 3
40 lines (37 loc) • 1.2 kB
JavaScript
import { ref, onMounted, onBeforeUnmount, watch } from 'vue';
import { useResizeObserver } from '@vueuse/core';
const useAutoResize = (props) => {
const sizer = ref();
const width$ = ref(0);
const height$ = ref(0);
let resizerStopper;
onMounted(() => {
resizerStopper = useResizeObserver(sizer, ([entry]) => {
const { width, height } = entry.contentRect;
const { paddingLeft, paddingRight, paddingTop, paddingBottom } = getComputedStyle(entry.target);
const left = Number.parseInt(paddingLeft) || 0;
const right = Number.parseInt(paddingRight) || 0;
const top = Number.parseInt(paddingTop) || 0;
const bottom = Number.parseInt(paddingBottom) || 0;
width$.value = width - left - right;
height$.value = height - top - bottom;
}).stop;
});
onBeforeUnmount(() => {
resizerStopper == null ? void 0 : resizerStopper();
});
watch([width$, height$], ([width, height]) => {
var _a;
(_a = props.onResize) == null ? void 0 : _a.call(props, {
width,
height
});
});
return {
sizer,
width: width$,
height: height$
};
};
export { useAutoResize };
//# sourceMappingURL=use-auto-resize.mjs.map