element-plus
Version:
A Component Library for Vue 3
64 lines (61 loc) • 2.06 kB
JavaScript
import { defineComponent, createBlock, openBlock, Transition, mergeProps, withCtx, renderSlot } from 'vue';
import { useNamespace } from '../../../hooks/use-namespace/index.mjs';
import { addClass, hasClass, removeClass } from '../../../utils/dom/style.mjs';
var _sfc_main = /* @__PURE__ */ defineComponent({
...{
name: "ElMenuCollapseTransition"
},
__name: "menu-collapse-transition",
setup(__props) {
const ns = useNamespace("menu");
const listeners = {
onBeforeEnter: (el) => el.style.opacity = "0.2",
onEnter(el, done) {
addClass(el, `${ns.namespace.value}-opacity-transition`);
el.style.opacity = "1";
done();
},
onAfterEnter(el) {
removeClass(el, `${ns.namespace.value}-opacity-transition`);
el.style.opacity = "";
},
onBeforeLeave(el) {
if (!el.dataset) el.dataset = {};
if (hasClass(el, ns.m("collapse"))) {
removeClass(el, ns.m("collapse"));
el.dataset.oldOverflow = el.style.overflow;
el.dataset.scrollWidth = el.clientWidth.toString();
addClass(el, ns.m("collapse"));
} else {
addClass(el, ns.m("collapse"));
el.dataset.oldOverflow = el.style.overflow;
el.dataset.scrollWidth = el.clientWidth.toString();
removeClass(el, ns.m("collapse"));
}
el.style.width = `${el.scrollWidth}px`;
el.style.overflow = "hidden";
},
onLeave(el) {
addClass(el, "horizontal-collapse-transition");
el.style.width = `${el.dataset.scrollWidth}px`;
}
};
return (_ctx, _cache) => {
return openBlock(), createBlock(
Transition,
mergeProps({ mode: "out-in" }, listeners),
{
default: withCtx(() => [
renderSlot(_ctx.$slots, "default")
]),
_: 3
/* FORWARDED */
},
16
/* FULL_PROPS */
);
};
}
});
export { _sfc_main as default };
//# sourceMappingURL=menu-collapse-transition.vue2.mjs.map