naive-ui
Version:
A Vue 3 Component Library. Fairly Complete, Theme Customizable, Uses TypeScript, Fast
111 lines (110 loc) • 3.63 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const vue_1 = require("vue");
exports.default = (0, vue_1.defineComponent)({
name: 'FadeInExpandTransition',
props: {
appear: Boolean,
group: Boolean,
mode: String,
onLeave: Function,
onAfterLeave: Function,
onAfterEnter: Function,
width: Boolean,
// reverse mode is only used in tree
// it make it from expanded to collapsed after mounted
reverse: Boolean
},
setup(props, { slots }) {
function handleBeforeLeave(el) {
if (props.width) {
el.style.maxWidth = `${el.offsetWidth}px`;
}
else {
el.style.maxHeight = `${el.offsetHeight}px`;
}
void el.offsetWidth;
}
function handleLeave(el) {
if (props.width) {
el.style.maxWidth = '0';
}
else {
el.style.maxHeight = '0';
}
void el.offsetWidth;
const { onLeave } = props;
if (onLeave)
onLeave();
}
function handleAfterLeave(el) {
if (props.width) {
el.style.maxWidth = '';
}
else {
el.style.maxHeight = '';
}
const { onAfterLeave } = props;
if (onAfterLeave)
onAfterLeave();
}
function handleEnter(el) {
el.style.transition = 'none';
if (props.width) {
const memorizedWidth = el.offsetWidth;
el.style.maxWidth = '0';
void el.offsetWidth;
el.style.transition = '';
el.style.maxWidth = `${memorizedWidth}px`;
}
else {
if (props.reverse) {
el.style.maxHeight = `${el.offsetHeight}px`;
void el.offsetHeight;
el.style.transition = '';
el.style.maxHeight = '0';
}
else {
const memorizedHeight = el.offsetHeight;
el.style.maxHeight = '0';
void el.offsetWidth;
el.style.transition = '';
el.style.maxHeight = `${memorizedHeight}px`;
}
}
void el.offsetWidth;
}
function handleAfterEnter(el) {
var _a;
if (props.width) {
el.style.maxWidth = '';
}
else {
if (!props.reverse) {
el.style.maxHeight = '';
}
}
(_a = props.onAfterEnter) === null || _a === void 0 ? void 0 : _a.call(props);
}
return () => {
const { group, width, appear, mode } = props;
const type = group ? vue_1.TransitionGroup : vue_1.Transition;
const resolvedProps = {
name: width
? 'fade-in-width-expand-transition'
: 'fade-in-height-expand-transition',
appear,
onEnter: handleEnter,
onAfterEnter: handleAfterEnter,
onBeforeLeave: handleBeforeLeave,
onLeave: handleLeave,
onAfterLeave: handleAfterLeave
};
if (!group) {
;
resolvedProps.mode = mode;
}
return (0, vue_1.h)(type, resolvedProps, slots);
};
}
});
;