2025-02-28 19:43:11 +08:00

50 lines
1.8 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const vue_1 = require("vue");
const delegate_1 = __importDefault(require("./delegate"));
const shared_1 = require("../../shared");
exports.default = (0, vue_1.defineComponent)({
name: 'ResizeObserver',
props: {
onResize: Function
},
setup(props) {
let registered = false;
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const proxy = (0, vue_1.getCurrentInstance)().proxy;
function handleResize(entry) {
const { onResize } = props;
if (onResize !== undefined)
onResize(entry);
}
(0, vue_1.onMounted)(() => {
const el = proxy.$el;
if (el === undefined) {
(0, shared_1.warn)('resize-observer', '$el does not exist.');
return;
}
if (el.nextElementSibling !== el.nextSibling) {
if (el.nodeType === 3 && el.nodeValue !== '') {
(0, shared_1.warn)('resize-observer', '$el can not be observed (it may be a text node).');
return;
}
}
if (el.nextElementSibling !== null) {
delegate_1.default.registerHandler(el.nextElementSibling, handleResize);
registered = true;
}
});
(0, vue_1.onBeforeUnmount)(() => {
if (registered) {
delegate_1.default.unregisterHandler(proxy.$el.nextElementSibling);
}
});
},
render() {
return (0, vue_1.renderSlot)(this.$slots, 'default');
}
});