UNPKG

@extclp/vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

329 lines (328 loc) 10.5 kB
import { isVNode as le, defineComponent as se, ref as i, toRef as A, reactive as Z, computed as m, shallowReadonly as ce, provide as fe, watch as f, renderSlot as g, createVNode as o, mergeProps as pe } from "vue"; import "../masker/index.mjs"; import "../native-scroll/index.mjs"; import "../resize-observer/index.mjs"; import { useProps as me, useNameHelper as ve, useZIndex as ge, emitEvent as s } from "@vexip-ui/config"; import { useMounted as he, createSlotRender as d } from "@vexip-ui/hooks"; import { isClient as xe, getYBorder as ye, runQueueFrame as be } from "@vexip-ui/utils"; import ke from "./layout-main.mjs"; import Ce from "./layout-header.mjs"; import Me from "./layout-footer.mjs"; import Se from "./layout-aside.mjs"; import { layoutProps as we } from "./props.mjs"; import { useMediaQuery as N } from "./helper.mjs"; import { LAYOUT_STATE as Ae } from "./symbol.mjs"; import Le from "../masker/masker.vue2.mjs"; import Ee from "../resize-observer/resize-observer.mjs"; import Te from "../native-scroll/native-scroll.mjs"; function q(h) { return typeof h == "function" || Object.prototype.toString.call(h) === "[object Object]" && !le(h); } const Qe = /* @__PURE__ */ se({ name: "Layout", props: we, emits: ["update:expanded", "update:reduced", "update:sign-type", "update:color", "update:dark-mode"], setup(h, { slots: a, emit: x, expose: G }) { const n = me("layout", h, { locale: null, noAside: !1, footer: !1, tag: "section", menus: { default: () => [], static: !0 }, menuProps: null, logo: "", signName: "", config: () => ["nav", "theme", "color"], user: null, actions: () => [], expanded: !1, reduced: !1, avatarCircle: !1, signType: "aside", headerFixed: "lg", asideFixed: "lg", copyright: "", links: () => [], colors: () => ["#339af0", "#f03e3e", "#be4bdb", "#7950f2", "#1b9e44", "#f76707"], color: "", miniHeaderSign: "lg", verticalLinks: "md", darkMode: null, fixedMain: !1, fitWindow: !1, innerClasses: () => ({}), noHeader: !1, noMasker: !1 }), r = ve("layout"), y = i(!1), u = i(n.expanded), l = i(n.reduced), c = i(n.signType), U = i(!1), C = i(n.color), { isMounted: H } = he("frame"), J = i(), b = i(), P = i(), z = i(), F = N(A(n, "headerFixed")), L = N(A(n, "asideFixed")), K = N(A(n, "miniHeaderSign")), p = Z({ isLayout: !0, locked: m(() => y.value), affixed: !1, scrollY: 0, affixMatched: F, expandMatched: L, useExpand: !1, expanded: u, reduced: l, navConfig: m(() => !n.noAside), classes: A(n, "innerClasses"), changeInLock: oe }), I = m(() => [r.b(), r.bs("vars"), { [r.bm("inherit")]: n.inherit, [r.bm("no-aside")]: n.noAside, [r.bm("no-header")]: n.noHeader, [r.bm("header-main")]: c.value === "header", [r.bm("locked")]: !H.value || y.value, [r.bm("fit-window")]: n.fitWindow }]), W = m(() => xe && H.value ? document.documentElement : null), E = m(() => n.noAside || c.value === "header" || p.useExpand), _ = m(() => { var e, t; return ((e = z.value) == null ? void 0 : e.menu) || ((t = P.value) == null ? void 0 : t.menu); }), T = i(n.darkMode), B = i("100%"), O = m(() => ({ [r.cv("view-height")]: n.fitWindow ? "100vh" : B.value })), Y = ge(), R = i(u.value ? Y() : 0), v = ce(Z({ expanded: u, reduced: l, toggleExpanded: k, toggleReduced: M })); fe(Ae, p), G({ scroll: b, menu: _, toggleExpanded: k, toggleReduced: M, expandMenuByLabel: re }), f(F, (e) => { p.affixed = !e && p.scrollY >= 50; }), f(() => n.expanded, (e) => { u.value = e; }), f(u, (e) => { p.useExpand && e && (R.value = Y()); }), f(() => n.reduced, (e) => { l.value = e; }), f(c, (e) => { x("update:sign-type", e), s(n.onNavChange, e); }), f(() => n.color, (e) => { var t; C.value = e || ((t = n.colors) == null ? void 0 : t[0]) || X(); }), f(C, (e) => { x("update:color", e), s(n.onColorChange, e); }), f(() => n.darkMode, (e) => { T.value = e; }); function X() { return W.value ? getComputedStyle(W.value).getPropertyValue("--vxp-color-primary-base") : "#339af0"; } function k(e = !l.value) { u.value = e, x("update:expanded", e), s(n.onExpandedChange, e); } function M(e = !l.value) { l.value = e, x("update:reduced", e), s(n.onReducedChange, e); } function ee(e) { s(n.onSignClick, e); } function $(e, t) { s(n.onMenuSelect, e, t); } function ne(e) { x("update:dark-mode", e), s(n.onToggleTheme, e); } function ae(e, t) { s(n.onUserAction, e, t); } function re(e) { var t; (t = _.value) == null || t.expandItemByLabel(e); } function j() { var e; (e = b.value) != null && e.$el && (B.value = `${b.value.$el.offsetHeight - ye(b.value.$el)}px`), s(n.onContentResize); } let S; function oe(e) { S == null || S(), S = be([() => y.value = !0, e, () => y.value = !1]); } function w(e) { e.stopPropagation(), e.preventDefault(); } function V() { if (!n.logo && !n.signName && !a.sign) return null; if (a.sign) return g(a, "sign", v); const e = n.signName && !(E.value && !K.value); return o("div", { class: [r.be("sign"), !e && r.bem("sign", "logo-only")], onClick: ee }, [[n.logo && o("div", { class: r.be("logo") }, [o("img", { src: n.logo, alt: "Logo" }, null)]), e && o("span", { class: r.be("sign-name") }, [n.signName])]]); } function D() { return n.noHeader ? o("header", { role: "none", "aria-hidden": !0, style: "display: none" }, null) : a.header ? g(a, "header", v) : o(Ce, pe({ ref: P, "sign-type": c.value, "onUpdate:sign-type": (e) => c.value = e, "user-dropped": U.value, "onUpdate:user-dropped": (e) => U.value = e, color: C.value, "onUpdate:color": (e) => C.value = e, "dark-mode": T.value, "onUpdate:dark-mode": (e) => T.value = e, inherit: !0, locale: n.locale, user: n.user, actions: n.actions, config: n.config, "avatar-circle": n.avatarCircle, menus: n.noAside ? n.menus : [], "menu-props": n.noAside ? n.menuProps : null, colors: n.colors, onUserAction: ae, onExpandedChange: k, onReducedChange: M, onMenuSelect: $, onToggleTheme: ne }, { onWheel: w, onMousemove: w }), { left: d(a, ["header-left", "headerLeft"], () => E.value ? V() : null), default: d(a, ["header-main", "headerMain"]), right: d(a, ["header-right", "headerRight"]), user: d(a, ["header-user", "headerUser"]), avatar: d(a, ["header-avatar", "headerAvatar"]) }); } function te() { return n.noAside ? o("div", { role: "none", "aria-hidden": !0, style: "display: none" }, null) : o("div", { class: [r.be("sidebar"), !L.value && r.bem("sidebar", "away"), n.innerClasses.sidebar], style: { zIndex: p.useExpand ? R.value + 1 : void 0 }, onWheel: w, onMousemove: w }, [a.aside ? g(a, "aside", v) : o(Se, { ref: z, expanded: u.value, "onUpdate:expanded": (e) => u.value = e, reduced: l.value, "onUpdate:reduced": (e) => l.value = e, inherit: !0, "sign-type": c.value, menus: n.menus, "menu-props": n.menuProps, fixed: n.asideFixed, onExpandedChange: k, onReducedChange: M, onMenuSelect: $ }, { top: d(a, ["aside-top", "asideTop"], () => E.value ? null : V()), default: d(a, ["aside-main", "asideMain"]), bottom: d(a, ["aside-bottom", "asideBottom"]), expand: d(a, ["aside-expand", "asideExpand"]) })]); } function ie() { return a.default ? g(a, "default", v) : o(ke, { fixed: n.fixedMain }, { default: d(a, ["main"]) }); } function de() { return a.footer ? g(a, "footer", v) : o(Me, { inherit: !0, copyright: n.copyright, links: n.links, "vertical-links": n.verticalLinks }, { links: d(a, ["footer-links", "footerLinks"]), copyright: d(a, ["footer-copyright", "footerCopyright"]) }); } function ue() { return n.noMasker || !p.useExpand ? null : a.masker ? g(a, "masker", v) : o(Le, { active: u.value, "onUpdate:active": (e) => u.value = e, class: r.be("masker"), inner: !0, closable: !0, "auto-remove": !0, transfer: !1, style: { zIndex: R.value }, onToggle: k }, null); } function Q() { const e = n.tag || "section"; return o(e, { class: [r.be("wrapper"), n.fixedMain && r.bem("wrapper", "fixed"), n.innerClasses.wrapper] }, { default: () => [c.value === "header" && D(), te(), o("section", { ref: J, class: [r.be("section"), { [r.bem("section", "away")]: L.value, [r.bem("section", "reduced")]: l.value, [r.bem("section", "locked")]: y.value, [r.bem("section", "fixed")]: n.fixedMain }, n.innerClasses.section] }, [c.value === "aside" && D(), ie(), n.footer && de()]), ue()] }); } return () => { let e; if (n.fitWindow) { let t; return o("section", { class: I.value, style: O.value }, [o(Ee, { throttle: !0, onResize: j }, q(t = Q()) ? t : { default: () => [t] })]); } return o(Te, { ref: b, class: I.value, inherit: n.inherit, "use-y-bar": !0, "observe-deep": !0, "bar-class": [r.be("scrollbar"), n.innerClasses.scrollbar], style: O.value, onResize: j }, q(e = Q()) ? e : { default: () => [e] }); }; } }); export { Qe as default }; //# sourceMappingURL=layout.mjs.map