tdesign-vue-next
Version:
TDesign Component for vue-next
231 lines (223 loc) • 7.49 kB
JavaScript
/**
* tdesign v1.15.2
* (c) 2025 tdesign
* @license MIT
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var Vue = require('vue');
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
var popup_props = require('./props.js');
require('@babel/runtime/helpers/typeof');
var dom = require('../_chunks/dep-0a9c2d75.js');
require('../config-provider/hooks/useConfig.js');
require('../_chunks/dep-682444b3.js');
var index = require('../_chunks/dep-b048575a.js');
require('@babel/runtime/helpers/defineProperty');
var isArray = require('../_chunks/dep-ce0157af.js');
require('../_chunks/dep-040b3cbb.js');
require('../_chunks/dep-0f5dd876.js');
require('../_chunks/dep-3e1aa2e0.js');
require('../_chunks/dep-79f734cc.js');
require('../_chunks/dep-63ff6e12.js');
require('../_chunks/dep-c6c5ec69.js');
require('../_chunks/dep-41b6fe49.js');
require('../_chunks/dep-ee4f84a5.js');
require('../_chunks/dep-66f974a3.js');
require('dayjs');
require('../_chunks/dep-5e94db90.js');
require('../_chunks/dep-2f309208.js');
require('../_chunks/dep-7154c044.js');
require('../_chunks/dep-020c2a7e.js');
require('../_chunks/dep-79cd6be1.js');
require('../_chunks/dep-06f7d92f.js');
require('../_chunks/dep-0c415789.js');
require('../_chunks/dep-57045e93.js');
require('../_chunks/dep-c66679ef.js');
require('../_chunks/dep-3df90229.js');
require('../_chunks/dep-93426c60.js');
require('../_chunks/dep-1ec17e27.js');
require('../_chunks/dep-15b276e6.js');
require('../_chunks/dep-4d3ddec0.js');
require('../_chunks/dep-d0f125b5.js');
require('@babel/runtime/helpers/createClass');
require('@babel/runtime/helpers/classCallCheck');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
function _isSlot(s) {
return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !Vue.isVNode(s);
}
function filterEmpty() {
var children = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var vnodes = [];
children.forEach(function (child) {
if (isArray.isArray(child)) {
vnodes.push.apply(vnodes, _toConsumableArray__default["default"](child));
} else if (child.type === Vue.Fragment) {
vnodes.push.apply(vnodes, _toConsumableArray__default["default"](filterEmpty(child.children)));
} else {
vnodes.push(child);
}
});
return vnodes.filter(function (c) {
return !(c && (c.type === Vue.Comment || c.type === Vue.Fragment && c.children.length === 0 || c.type === Vue.Text && c.children.trim() === ""));
});
}
function isRectChanged(rect1, rect2) {
if (!rect1 && !rect2) return false;
if (!rect1 || !rect2) return true;
if (["width", "height", "x", "y"].some(function (k) {
return rect1[k] !== rect2[k];
})) {
return true;
}
return false;
}
function useElement(getter) {
var instance = Vue.getCurrentInstance();
var el = Vue.ref();
Vue.onMounted(function () {
el.value = getter(instance);
});
Vue.onUpdated(function () {
var newEl = getter(instance);
if (el.value !== newEl) {
el.value = newEl;
}
});
return el;
}
var Trigger = Vue.defineComponent({
name: "TPopupTrigger",
props: {
forwardRef: Function
},
emits: ["resize"],
setup: function setup(props2, _ref) {
var emit = _ref.emit,
slots = _ref.slots;
var el = useElement(function (vm) {
var containerNode = vm.parent.vnode;
return containerNode.el.nextElementSibling;
});
var contentRect = Vue.ref();
Vue.watch(el, function () {
var _props2$forwardRef;
(_props2$forwardRef = props2.forwardRef) === null || _props2$forwardRef === void 0 || _props2$forwardRef.call(props2, el.value);
});
index.useResizeObserver(el, function (_ref2) {
var _ref3 = _slicedToArray__default["default"](_ref2, 1),
newContentRect = _ref3[0].contentRect;
contentRect.value = newContentRect;
});
Vue.watch(contentRect, function (newRect, oldRect) {
if (isRectChanged(newRect, oldRect)) {
emit("resize");
}
});
return function () {
var _slots$default, _children$;
var children = filterEmpty((_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots));
if (children.length > 1 || ((_children$ = children[0]) === null || _children$ === void 0 ? void 0 : _children$.type) === Vue.Text) {
return Vue.createVNode("span", null, [children]);
}
return children[0];
};
}
});
var Content = Vue.defineComponent({
name: "TPopupContent",
emits: ["resize"],
setup: function setup(props2, _ref4) {
var emit = _ref4.emit,
slots = _ref4.slots;
var contentEl = useElement(function (vm) {
return vm.vnode.el.children[0];
});
index.useResizeObserver(contentEl, function () {
emit("resize");
});
return function () {
return Vue.createVNode("div", {
"style": "position: absolute; top: 0px; left: 0px; width: 100%"
}, [slots["default"]()]);
};
}
});
var Container = Vue.defineComponent({
name: "TPopupContainer",
inheritAttrs: false,
props: {
parent: Object,
visible: Boolean,
attach: popup_props["default"].attach,
forwardRef: Function
},
emits: ["resize", "contentMounted"],
setup: function setup(props2, _ref5) {
var emit = _ref5.emit,
attrs = _ref5.attrs,
slots = _ref5.slots,
expose = _ref5.expose;
var triggerEl = Vue.ref();
var mountContent = Vue.ref(false);
function emitResize() {
emit("resize");
}
Vue.onMounted(function () {
requestAnimationFrame(function () {
mountContent.value = props2.visible;
});
});
Vue.watch(function () {
return props2.visible;
}, function (visible) {
if (visible) {
mountContent.value = props2.visible;
}
});
expose({
unmountContent: function unmountContent() {
mountContent.value = false;
}
});
return function () {
var _slot;
var getElement = function getElement() {
return dom.getAttach(props2.attach, triggerEl.value);
};
return Vue.createVNode(Vue.Fragment, null, [Vue.createVNode(Trigger, {
"class": attrs["class"],
"forwardRef": function forwardRef(el) {
props2.forwardRef(el);
triggerEl.value = el;
},
"onResize": emitResize
}, _isSlot(_slot = slots["default"]()) ? _slot : {
"default": function _default() {
return [_slot];
}
}), mountContent.value && Vue.createVNode(Vue.Teleport, {
"disabled": !getElement(),
"to": getElement()
}, {
"default": function _default() {
return [Vue.createVNode(Content, {
"onResize": emitResize,
"onVnodeMounted": function onVnodeMounted() {
return emit("contentMounted");
}
}, {
"default": function _default() {
return [slots.content && slots.content()];
}
})];
}
})]);
};
}
});
exports["default"] = Container;
//# sourceMappingURL=container.js.map