kodama-ui
Version:
Kodama UI is a Vue 3 component library that provides a set of components & funcionality to build your application.
701 lines (700 loc) ⢠23.6 kB
JavaScript
import { defineComponent as A, inject as B, computed as z, onMounted as K, watch as W, resolveComponent as p, openBlock as n, createElementBlock as u, normalizeClass as T, Fragment as E, renderList as L, createTextVNode as w, toDisplayString as N, createCommentVNode as m, createVNode as i, withCtx as y, createBlock as M, createElementVNode as a, resolveDynamicComponent as D, ref as U, createStaticVNode as x } from "vue";
import { u as R, v as V, A as P, _ as F, a as C, d as G } from "./main-ac44fa27.mjs";
const J = [
// {
// separator: true
// },
// {
// // heading: 'Config',
// // route: '/produccion',
// pages: [
// {
// sectionTitle: 'Changelog v1.0',
// route: '/cupones',
// icon: ['fad', 'fa-file']
// }
// ]
// }
], X = A({
name: "KMenu",
props: {
collapsed: {
type: Boolean,
default: !1
}
},
setup() {
const e = R(), o = B("$menu") || (() => []), _ = [{ separator: !0 }], c = z(() => [...o(), ..._, ...J]), $ = (l) => e.path.indexOf(l.toString()) !== -1, f = (l) => l.auth !== void 0 ? !!l.auth : !0, d = (l) => {
if (l.auth)
return l.auth;
if (l.pages)
for (let k = 0; k < l.pages.length; k++) {
const h = l.pages[k];
if (h.auth)
return h.auth;
if (h.pages)
for (let t = 0; t < h.pages.length; t++) {
const g = h.pages[t];
if (f(g))
return !0;
}
}
return !1;
}, r = () => {
let l = [];
c.value.forEach((h) => {
h.pages && h.pages.forEach((t) => {
if (t.pages) {
const g = document.getElementById(
`k-menu-dropdown-${t.title}`
), s = document.getElementById(
`k-menu-dropdown-${t.title}-body`
);
g && s && l.push({
id: `k-menu-dropdown-${t.title}`,
triggerEl: g,
targetEl: s,
active: !1
});
}
});
});
const k = {
alwaysOpen: !0,
activeClasses: "bg-gray-800 text-gray-200",
inactiveClasses: "text-gray-200"
};
new P(l, k);
};
return K(() => {
r();
}), W(
c,
() => {
setTimeout(() => {
r();
}, 500);
},
{ deep: !0 }
), {
hasActiveChildren: $,
hasOneAccess: d,
menu: c,
version: V,
checkRoles: f
};
}
});
const q = {
key: 0,
class: "k-menu-header"
}, O = {
key: 1,
class: "k-menu-separator"
}, H = { key: 0 }, Q = ["data-href", "onClick"], Y = {
key: 0,
class: "k-menu-icon"
}, Z = {
key: 1,
class: "k-menu-title"
}, I = ["id"], ee = {
key: 0,
class: "k-menu-icon"
}, te = {
key: 1,
class: "k-menu-title"
}, oe = ["id"], ne = { key: 0 }, se = ["data-href", "onClick"], le = {
key: 0,
class: "k-menu-icon"
}, ae = {
key: 1,
class: "k-menu-title"
};
function ie(e, o, _, c, $, f) {
const d = p("k-icon"), r = p("router-link"), l = p("k-tooltip");
return n(), u("ul", {
class: T(["k-menu", { "k-menu-collapsed": e.collapsed }])
}, [
(n(!0), u(E, null, L(e.menu, (k, h) => (n(), u(E, { key: h }, [
e.checkRoles(k) ? (n(), u(E, { key: 0 }, [
k.heading && e.hasOneAccess(k) ? (n(), u("li", q, [
e.collapsed ? m("", !0) : (n(), u(E, { key: 0 }, [
w(N(k.heading), 1)
], 64))
])) : k.separator ? (n(), u("li", O)) : m("", !0),
(n(!0), u(E, null, L(k.pages, (t, g) => (n(), u(E, { key: g }, [
e.checkRoles(t) ? (n(), u(E, { key: 0 }, [
t.pages ? e.hasOneAccess(t) ? (n(), u("li", {
key: 1,
class: T({
show: e.hasActiveChildren(t.route)
})
}, [
i(l, {
content: t.title,
placement: "right",
arrow: !1,
disabled: !e.collapsed
}, {
default: y(() => [
a("button", {
id: `k-menu-dropdown-${t.title}`,
class: "k-menu-item"
}, [
t.icon ? (n(), u("span", ee, [
i(d, {
icon: t.icon,
type: t.iconType || "fal"
}, null, 8, ["icon", "type"])
])) : m("", !0),
e.collapsed ? m("", !0) : (n(), u("span", te, N(t.title), 1)),
t.pages && !e.collapsed ? (n(), M(d, {
key: 2,
icon: "chevron-down",
type: "fal",
class: "k-menu-chevron"
})) : m("", !0)
], 8, I)
]),
_: 2
}, 1032, ["content", "disabled"]),
a("ul", {
id: `k-menu-dropdown-${t.title}-body`,
class: "k-menu-sub hidden"
}, [
(n(!0), u(E, null, L(t.pages, (s, v) => (n(), u(E, { key: v }, [
s.title && e.checkRoles(s) ? (n(), u("li", ne, [
i(l, {
content: s.title,
placement: "right",
arrow: !1,
disabled: !e.collapsed
}, {
default: y(() => [
s.pages ? m("", !0) : (n(), M(r, {
key: 0,
"active-class": "active",
to: s.disabled ? {} : s.route
}, {
default: y(({
href: b,
navigate: S,
isActive: j
}) => [
a("button", {
class: T(["k-menu-item", {
"k-menu-item-active": j,
"k-menu-item-disabled": s.disabled
}]),
"data-href": b,
onClick: S
}, [
s.icon ? (n(), u("span", le, [
i(d, {
icon: s.icon,
type: s.iconType || "fal"
}, null, 8, ["icon", "type"])
])) : m("", !0),
e.collapsed ? m("", !0) : (n(), u("span", ae, N(s.title), 1))
], 10, se)
]),
_: 2
}, 1032, ["to"]))
]),
_: 2
}, 1032, ["content", "disabled"])
])) : m("", !0)
], 64))), 128))
], 8, oe)
], 2)) : m("", !0) : (n(), u("li", H, [
i(l, {
hover: t.title,
placement: "right",
arrow: !1,
disabled: !e.collapsed
}, {
default: y(() => [
t.pages ? m("", !0) : (n(), M(r, {
key: 0,
"active-class": "active",
to: t.disabled ? {} : t.route
}, {
default: y(({ href: s, navigate: v, isActive: b }) => [
a("button", {
class: T(["k-menu-item", {
"k-menu-item-active": b,
"k-menu-item-disabled": t.disabled
}]),
"data-href": s,
onClick: v
}, [
t.icon ? (n(), u("span", Y, [
i(d, {
icon: t.icon,
type: t.iconType || "fal"
}, null, 8, ["icon", "type"])
])) : m("", !0),
e.collapsed ? m("", !0) : (n(), u("span", Z, N(t.title), 1)),
t.pages && !e.collapsed ? (n(), M(d, {
key: 2,
icon: "chevron-down",
type: "fal",
class: "k-menu-chevron"
})) : m("", !0)
], 10, Q)
]),
_: 2
}, 1032, ["to"]))
]),
_: 2
}, 1032, ["hover", "disabled"])
]))
], 64)) : m("", !0)
], 64))), 128))
], 64)) : m("", !0)
], 64))), 128))
], 2);
}
const ce = /* @__PURE__ */ F(X, [["render", ie], ["__scopeId", "data-v-d5790965"]]), re = A({
name: "KAside",
components: {
KMenu: ce
},
setup() {
const e = (f) => typeof D(f) != "string", o = z({
get() {
return C().get("aside.collapsed") || !1;
},
set(f) {
C().set("aside.collapsed", f);
}
}), _ = z(() => C().get("isMobileView") || !1), c = z(() => C().get("menuType") || "default");
return {
collapsed: o,
menuType: c,
isMobile: _,
isComponent: e,
handlerColapsed: (f) => {
!o.value && c.value === "block" && !_.value || !o.value && c.value === "simple" && !_.value ? o.value = !1 : o.value = f ?? !o.value;
}
};
}
});
const de = { class: "overflow-y-auto py-5 px-3 h-full flex-1" }, ue = { class: "justify-center p-4 space-x-4" };
function pe(e, o, _, c, $, f) {
const d = p("k-icon"), r = p("k-title"), l = p("k-logo"), k = p("k-button"), h = p("k-menu"), t = p("k-aside-footer");
return n(), u("aside", {
id: "k-aside",
class: T({ collapsed: e.collapsed })
}, [
a("div", {
class: T(["px-3 pb-5 pt-5 flex relative", e.collapsed ? "justify-center" : "justify-between"])
}, [
e.isMobile && e.menuType === "simple" ? (n(), u("div", {
key: 0,
class: "flex items-center cursor-pointer",
onClick: o[0] || (o[0] = (g) => e.handlerColapsed(!0))
}, [
i(d, {
icon: "xmark",
type: "far",
class: "text-lg mx-2"
}),
i(r, { size: 5 }, {
default: y(() => [
w("MENU")
]),
_: 1
})
])) : e.collapsed ? (n(), M(l, {
key: 2,
dark: "",
side: !1,
class: "cursor-pointer max-w-[54px]",
onClick: o[2] || (o[2] = (g) => e.handlerColapsed(!1))
})) : (n(), M(l, {
key: 1,
dark: "",
side: "",
class: "cursor-pointer max-w-[14rem]",
onClick: o[1] || (o[1] = (g) => e.handlerColapsed(!0))
})),
(e.isMobile || e.menuType === "default") && !e.collapsed ? (n(), M(k, {
key: 3,
icon: "chevrons-left",
link: "",
color: "primary",
class: "-mr-2",
onClick: o[3] || (o[3] = (g) => e.handlerColapsed(!0))
})) : m("", !0)
], 2),
a("div", de, [
i(h, { collapsed: e.collapsed }, null, 8, ["collapsed"])
]),
a("div", ue, [
i(t, { collapsed: e.collapsed }, null, 8, ["collapsed"])
])
], 2);
}
const fe = /* @__PURE__ */ F(re, [["render", pe], ["__scopeId", "data-v-618367f0"]]);
function ke(e = {}) {
const {
immediate: o = !1,
onNeedRefresh: _,
onOfflineReady: c,
onRegistered: $,
onRegisteredSW: f,
onRegisterError: d
} = e;
let r, l, k;
const h = async (g = !0) => {
await l, await (k == null ? void 0 : k());
};
async function t() {
if ("serviceWorker" in navigator) {
const { Workbox: g } = await import("./workbox-window.prod.es5-5e28cea8.mjs");
r = new g("/sw.js", { scope: "/", type: "classic" }), k = async () => {
await (r == null ? void 0 : r.messageSkipWaiting());
};
{
let s = !1;
const v = () => {
s = !0, r == null || r.addEventListener("controlling", (b) => {
b.isUpdate && window.location.reload();
}), _ == null || _();
};
r.addEventListener("installed", (b) => {
typeof b.isUpdate > "u" ? typeof b.isExternal < "u" ? b.isExternal ? v() : !s && (c == null || c()) : b.isExternal ? window.location.reload() : !s && (c == null || c()) : b.isUpdate || c == null || c();
}), r.addEventListener("waiting", v), r.addEventListener("externalwaiting", v);
}
r.register({ immediate: o }).then((s) => {
f ? f("/sw.js", s) : $ == null || $(s);
}).catch((s) => {
d == null || d(s);
});
}
}
return l = t(), h;
}
const ge = A({
name: "KUpdater",
setup() {
let e = U(!1), o = null;
const _ = () => {
o && o(!0);
};
return K(() => {
"serviceWorker" in navigator && (o = ke({
onNeedRefresh() {
e.value = !0;
},
onRegistered(c) {
c && setInterval(() => {
c.update();
}, 6e4);
}
}));
}), { update: _, updateAvailable: e };
}
});
function me(e, o, _, c, $, f) {
const d = p("k-button"), r = p("k-tooltip");
return e.updateAvailable ? (n(), M(r, {
key: 0,
content: "š¾ Actualización disponible",
placement: "left"
}, {
default: y(() => [
i(d, {
neon: "",
color: "success",
icon: "cloud-arrow-down",
onClick: e.update
}, null, 8, ["onClick"])
]),
_: 1
})) : m("", !0);
}
const _e = /* @__PURE__ */ F(ge, [["render", me]]), he = A({
name: "KDebug",
setup() {
const e = C();
return { debug: z(() => e.get("debug")) };
}
}), ve = "_debug_54i91_1", ye = {
debug: ve
}, $e = /* @__PURE__ */ x('<div class="block sm:hidden">XS</div><div class="hidden sm:block md:hidden">SM</div><div class="hidden md:block lg:hidden">MD</div><div class="hidden lg:block xl:hidden">LG</div><div class="hidden xl:block">XL</div>', 5), be = [
$e
];
function we(e, o, _, c, $, f) {
return e.debug ? (n(), u("div", {
key: 0,
class: T(e.$style.debug)
}, be, 2)) : m("", !0);
}
const Ce = {
$style: ye
}, Me = /* @__PURE__ */ F(he, [["render", we], ["__cssModules", Ce]]), ze = A({
name: "KTopbar",
components: {
KUpdater: _e,
KDebug: Me
},
setup() {
const e = B("$auth"), o = () => {
e.logout();
}, _ = z(() => e.getLastName() || "Jhon"), c = z(() => {
const t = e.getName() || "Jhon", g = e.getLastName() || "Doe";
return `${t} ${g}`;
}), $ = z({
get() {
return C().get("aside.collapsed") || !1;
},
set(t) {
C().set("aside.collapsed", t);
}
}), f = z(() => C().get("darkMode")), d = () => {
const t = C();
f.value ? (t.set("darkMode", !1), document.getElementsByTagName("html")[0].classList.remove("dark"), document.getElementsByTagName("html")[0].classList.add("light")) : (t.set("darkMode", !0), document.getElementsByTagName("html")[0].classList.remove("light"), document.getElementsByTagName("html")[0].classList.add("dark"));
}, r = z(() => C().get("fontSize") || "medium"), l = (t) => {
C().set("fontSize", t);
const s = document.documentElement, v = {
small: ".8rem",
medium: ".9rem",
large: "1rem"
};
s.style.setProperty("--font-size-base", v[t]);
}, k = (t) => {
if (t.target.closest("label"))
return;
const g = ["small", "medium", "large"], v = (g.indexOf(
r.value
) + 1) % g.length;
l(g[v]);
}, h = z(() => C().get("menuType") || "default");
return {
//Variables
firstname: _,
fullname: c,
collapsed: $,
darkMode: f,
defaultRoutes: G,
fontSize: r,
menuType: h,
// Methods
logout: o,
toggleTheme: d,
setFontSize: l,
cycleFontSize: k
};
}
});
const Se = { class: "px-4 lg:px-6 py-2.5 bg-sidebar text-gray-200 select-none" }, Ee = { class: "flex flex-wrap items-center" }, Te = { class: "flex sm:hidden" }, Ne = { class: "hidden sm:flex justify-start items-center" }, Ae = /* @__PURE__ */ a("div", { class: "ml-auto" }, null, -1), Fe = { class: "flex flex-row gap-4 items-center" }, Le = { class: "flex items-center lg:order-2" }, Be = { class: "flex gap-4 items-center" }, Ke = /* @__PURE__ */ a("br", null, null, -1), je = { class: "size-list" }, We = ["checked"], De = ["checked"], Ue = ["checked"];
function xe(e, o, _, c, $, f) {
const d = p("k-icon"), r = p("k-title"), l = p("k-button"), k = p("k-toolbar-left"), h = p("k-updater"), t = p("k-toolbar-right"), g = p("k-debug"), s = p("k-avatar"), v = p("k-dropdown-menu"), b = p("k-dropdown");
return n(), u("header", null, [
a("nav", Se, [
a("div", Ee, [
a("div", Te, [
e.menuType === "simple" ? (n(), u("div", {
key: 0,
class: "flex items-center cursor-pointer",
onClick: o[0] || (o[0] = (S) => e.collapsed = !1)
}, [
i(d, {
icon: "bars",
type: "far",
class: "text-lg mx-2"
}),
i(r, { size: 5 }, {
default: y(() => [
w("MENU")
]),
_: 1
})
])) : (n(), M(l, {
key: 1,
icon: "chevrons-right",
link: "",
color: "primary",
onClick: o[1] || (o[1] = (S) => e.collapsed = !1)
}))
]),
a("div", Ne, [
i(k, { collapsed: e.collapsed }, null, 8, ["collapsed"])
]),
Ae,
a("div", Fe, [
i(h),
i(t, { collapsed: e.collapsed }, null, 8, ["collapsed"]),
e.menuType !== "simple" ? (n(), M(g, { key: 0 })) : m("", !0),
a("div", Le, [
i(b, null, {
header: y(() => [
a("div", Be, [
i(s, {
name: e.fullname,
size: 40,
tooltip: !1
}, null, 8, ["name"]),
a("div", null, [
w(" Bienvenido "),
Ke,
a("strong", null, N(e.firstname), 1)
])
])
]),
content: y(() => [
i(v, { onClick: e.toggleTheme }, {
default: y(() => [
i(d, {
icon: e.darkMode ? "sun" : "moon",
type: "fal",
class: "mr-2"
}, null, 8, ["icon"]),
w(" " + N(e.darkMode ? "Modo claro" : "Modo oscuro"), 1)
]),
_: 1
}, 8, ["onClick"]),
i(v, {
class: "size-config",
onClick: e.cycleFontSize
}, {
default: y(() => [
i(d, {
icon: "text-size",
type: "fal",
class: "mr-2"
}),
w(" TamaƱo "),
a("ul", je, [
a("li", null, [
a("label", null, [
a("input", {
type: "radio",
name: "size",
value: "small",
checked: e.fontSize === "small",
onChange: o[2] || (o[2] = (S) => e.setFontSize("small"))
}, null, 40, We),
w(" SM ")
])
]),
a("li", null, [
a("label", null, [
a("input", {
type: "radio",
name: "size",
value: "medium",
checked: e.fontSize === "medium",
onChange: o[3] || (o[3] = (S) => e.setFontSize("medium"))
}, null, 40, De),
w(" MD ")
])
]),
a("li", null, [
a("label", null, [
a("input", {
type: "radio",
name: "size",
value: "large",
checked: e.fontSize === "large",
onChange: o[4] || (o[4] = (S) => e.setFontSize("large"))
}, null, 40, Ue),
w(" LG ")
])
])
])
]),
_: 1
}, 8, ["onClick"]),
e.defaultRoutes.profile ? (n(), M(v, {
key: 0,
onClick: o[5] || (o[5] = (S) => e.$router.push(e.defaultRoutes.profile))
}, {
default: y(() => [
i(d, {
icon: "address-card",
type: "fal",
class: "mr-2"
}),
w(" Mi Perfil ")
]),
_: 1
})) : m("", !0),
e.defaultRoutes.configuration ? (n(), M(v, {
key: 1,
onClick: o[6] || (o[6] = (S) => e.$router.push(
e.defaultRoutes.configuration
))
}, {
default: y(() => [
i(d, {
icon: "gear",
type: "fal",
class: "mr-2"
}),
w(" Configuración ")
]),
_: 1
})) : m("", !0)
]),
footer: y(() => [
a("a", {
class: "text-danger cursor-pointer block",
onClick: o[7] || (o[7] = (S) => e.logout())
}, [
i(d, {
icon: "right-from-bracket",
class: "mr-2"
}),
w(" Cerrar sesión ")
])
]),
default: y(() => [
a("div", null, [
i(s, {
name: e.fullname,
size: 42,
tooltip: !1,
square: "",
class: "cursor-pointer"
}, null, 8, ["name"])
])
]),
_: 1
})
])
])
])
])
]);
}
const Re = /* @__PURE__ */ F(ze, [["render", xe]]), Ve = A({
name: "KMain",
components: {
KAside: fe,
KTopbar: Re
},
setup() {
return {};
}
});
const Pe = { class: "flex flex-row bg-white dark:bg-gray-800" }, Ge = {
id: "k-wrapper",
class: "flex flex-col flex-row-fluid w-full bg-gray-100 dark:bg-gray-900 h-screen overflow-y-auto overflow-x-hidden"
};
function Je(e, o, _, c, $, f) {
const d = p("k-aside"), r = p("k-topbar"), l = p("router-view");
return n(), u("div", Pe, [
i(d),
a("div", Ge, [
i(r),
i(l)
])
]);
}
const Oe = /* @__PURE__ */ F(Ve, [["render", Je]]);
export {
Oe as default
};