Files

1060 lines
39 KiB
JavaScript

"use strict";
"require baseclass";
"require ui";
"require dom";
// WARN: generated by rsbuild - do not edit
// The require scope
var __webpack_require__ = {};
// webpack/runtime/define_property_getters
(() => {
__webpack_require__.d = (exports, getters, values) => {
var define = (defs, kind) => {
for(var key in defs) {
if(__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) {
Object.defineProperty(exports, key, { enumerable: true, [kind]: defs[key] });
}
}
};
define(getters, "get");
define(values, "value");
};
})();
// webpack/runtime/has_own_property
(() => {
__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
})();
// webpack/runtime/make_namespace_object
(() => {
// define __esModule on exports
__webpack_require__.r = (exports) => {
if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
}
Object.defineProperty(exports, '__esModule', { value: true });
};
})();
var __webpack_exports__ = {};
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);
// EXPORTS
__webpack_require__.d(__webpack_exports__, {
main: () => (/* binding */ main)
});
;// CONCATENATED MODULE: ../node_modules/.pnpm/@lazulikao+luci-types@https_685a81b9ead15f36368ce6e6ebcf4a27/node_modules/@lazulikao/luci-types/src/jsx/jsx-factory.ts
const Fragment = Symbol.for("jsx.fragment");
function jsx_factory_e(e, t) {
let { children: n, ...r } = null === t || "object" != typeof t || Array.isArray(t) ? {} : t, o = function e(t, n = []) {
for (let r of t)null != r && "boolean" != typeof r && (Array.isArray(r) ? e(r, n) : n.push(r instanceof Node ? r : String(r)));
return n;
}(null == n ? [] : Array.isArray(n) ? n : [
n
]);
if (e === Fragment) {
let e = document.createDocumentFragment();
return e.append(...o), e;
}
if ("function" == typeof e) {
let t = Reflect.apply(e, void 0, [
{
...r,
children: o
}
]);
if (!(t instanceof Node)) throw TypeError("JSX components must return a DOM Node");
return t;
}
if ("string" != typeof e) throw TypeError("JSX element types must be tag names or component functions");
let f = {}, l = {
...r
};
for (let [e, t] of Object.entries(l))e.startsWith("on") && "function" == typeof t ? (f[e] = t, delete l[e]) : "boolean" == typeof t && (t ? l[e] = e : delete l[e]);
let s = Object.keys(l).length > 0 ? o.length > 1 ? E(e, l, o) : E(e, l, o[0]) : o.length > 1 ? E(e, {}, o) : E(e, {}, o[0]);
for (let [e, t] of Object.entries(f)){
let n = e.slice(2).toLowerCase();
s.addEventListener(n, t);
}
return s;
}
function jsx(t, n) {
return jsx_factory_e(t, n);
}
function jsxs(t, n) {
return jsx_factory_e(t, n);
}
function jsxDEV(t, n) {
return jsx_factory_e(t, n);
}
;// CONCATENATED MODULE: ../node_modules/.pnpm/@lazulikao+luci-types@https_685a81b9ead15f36368ce6e6ebcf4a27/node_modules/@lazulikao/luci-types/src/jsx/jsx-runtime.ts
;// CONCATENATED MODULE: ./web/resources/menu-layout.ts
let menu_layout_e = "primary:", menu_layout_t = new Set([
"version",
"custom",
"titles",
"itemTitles",
"categoryMoves",
"itemMoves",
"hiddenCategories",
"hiddenItems"
]);
function menu_layout_n(e) {
return "function" == typeof _ ? _(e) : e;
}
function primaryCategoryId(t) {
return `${menu_layout_e}${t}`;
}
function menu_layout_i(t) {
return t.startsWith(menu_layout_e) ? t.slice(menu_layout_e.length) : null;
}
function menu_layout_r(e) {
let t = [], i = [];
for (let r of ui.menu.getChildren(e))if (r.satisfied) for (let e of ui.menu.getChildren(r)){
let l = e.title?.trim();
if (!e.satisfied || !l) continue;
let o = `${r.name}/${e.name}`, u = menu_layout_n(l);
for (let a of (t.push({
path: o,
pathSegments: [
r.name,
e.name
],
node: e,
title: u,
rawTitle: l
}), ui.menu.getChildren(e))){
let t = a.title?.trim();
a.satisfied && t && i.push({
path: `${o}/${a.name}`,
pathSegments: [
r.name,
e.name,
a.name
],
node: a,
title: menu_layout_n(t),
rawTitle: t,
originalPrimaryPath: o,
originalPrimaryTitle: u
});
}
}
return {
primaries: t,
items: i
};
}
function discoverMenuItems(e) {
return menu_layout_r(e).items;
}
function menu_layout_l(e) {
let t = e.primaries.map((e)=>({
id: primaryCategoryId(e.path),
title: e.title,
items: []
})), n = new Map(t.map((e)=>[
e.id,
e
]));
for (let t of e.items)n.get(primaryCategoryId(t.originalPrimaryPath))?.items.push(t.path);
return t;
}
function buildDefaultMenuCategories(e) {
return menu_layout_l(menu_layout_r(e));
}
function menu_layout_o(e) {
return e.map((e)=>({
...e,
items: [
...e.items
]
}));
}
function moveMenuItem(e, t, n, i) {
let r = menu_layout_o(e), l = r.find((e)=>e.id === n);
if (!l || i === t) return r;
for (let e of r)e.items = e.items.filter((e)=>e !== t);
let u = i ? l.items.indexOf(i) : -1;
return u >= 0 ? l.items.splice(u, 0, t) : l.items.push(t), r;
}
function moveMenuCategory(e, t, n, i = "before") {
let r = menu_layout_o(e), l = r.findIndex((e)=>e.id === t);
if (l < 0 || t === n || !r.some((e)=>e.id === n)) return r;
let [u] = r.splice(l, 1), a = r.findIndex((e)=>e.id === n);
return r.splice("after" === i ? a + 1 : a, 0, u), r;
}
function menu_layout_u(e, t) {
let n = e[t];
return new Set(e.slice(t + 1).filter((e)=>e.originalPrimaryPath === n.originalPrimaryPath).map((e)=>e.path));
}
function canRestoreMenuItem(e, t, n) {
let i = t.findIndex((e)=>e.path === n);
if (i < 0) return !1;
let r = primaryCategoryId(t[i].originalPrimaryPath), l = e.find((e)=>e.id === r);
if (!l) return !0;
let o = 0, a = -1;
for (let t of e)for(let e = 0; e < t.items.length; e += 1)t.items[e] === n && (o += 1, t.id === r && (a = e));
if (1 !== o || a < 0) return !0;
let s = menu_layout_u(t, i), f = l.items.findIndex((e)=>s.has(e));
return (f < 0 ? l.items.length - 1 : f > a ? f - 1 : f) !== a;
}
function restoreMenuItemToOriginalPosition(e, t, n) {
let i = t.findIndex((e)=>e.path === n);
if (i < 0) return menu_layout_o(e);
let r = t[i], l = primaryCategoryId(r.originalPrimaryPath), a = e.some((e)=>e.id === l) ? e : [
...e,
{
id: l,
title: r.originalPrimaryTitle,
items: []
}
], s = menu_layout_u(t, i), f = a.find((e)=>e.id === l);
return moveMenuItem(a, n, l, f?.items.find((e)=>s.has(e)));
}
function menu_layout_a(e, t) {
if ("string" != typeof e || e !== e.trim()) return !1;
let n = e.split("/");
return n.length === t && n.every(Boolean);
}
function menu_layout_s(e) {
return "number" == typeof e ? `custom:${e}` : `primary:${e}`;
}
function menu_layout_f(e, t) {
return Number.isInteger(e) && e >= 0 && e < t || menu_layout_a(e, 2) ? e : null;
}
function menu_layout_d(e, t) {
let n = e[t];
return void 0 === n ? [] : Array.isArray(n) ? n : null;
}
function parseMenuLayout(e) {
let n;
if ("string" != typeof e || "" === e.trim()) return null;
try {
n = JSON.parse(e);
} catch {
return null;
}
if (!n || "object" != typeof n || Array.isArray(n)) return null;
let i = n;
if (1 !== i.version || Object.keys(i).some((e)=>!menu_layout_t.has(e))) return null;
let r = menu_layout_d(i, "custom"), l = menu_layout_d(i, "titles"), o = menu_layout_d(i, "itemTitles"), u = menu_layout_d(i, "categoryMoves"), m = menu_layout_d(i, "itemMoves"), p = menu_layout_d(i, "hiddenCategories"), h = menu_layout_d(i, "hiddenItems");
if (!r || !l || !o || !u || !m || !p || !h) return null;
let g = [], y = new Set();
for (let e of r){
if ("string" != typeof e) return null;
let t = e.trim(), n = t.toLocaleLowerCase();
if (!t || y.has(n)) return null;
y.add(n), g.push(t);
}
let c = [], M = new Set();
for (let e of l){
if (!Array.isArray(e) || 2 !== e.length || !menu_layout_a(e[0], 2) || "string" != typeof e[1]) return null;
let t = e[1].trim();
if (!t || M.has(e[0])) return null;
M.add(e[0]), c.push([
e[0],
t
]);
}
let v = [], w = new Set();
for (let e of o){
if (!Array.isArray(e) || 2 !== e.length || !menu_layout_a(e[0], 3) || "string" != typeof e[1]) return null;
let t = e[1].trim();
if (!t || w.has(e[0])) return null;
w.add(e[0]), v.push([
e[0],
t
]);
}
let I = [], C = new Set();
for (let e of u){
if (!Array.isArray(e) || 2 !== e.length) return null;
let t = menu_layout_f(e[0], g.length), n = null === e[1] ? null : menu_layout_f(e[1], g.length);
if (null === t || null !== e[1] && null === n) return null;
let i = menu_layout_s(t);
if (C.has(i) || null !== n && i === menu_layout_s(n)) return null;
C.add(i), I.push([
t,
n
]);
}
let S = [], x = new Set();
for (let e of m){
if (!Array.isArray(e) || 3 !== e.length || !menu_layout_a(e[0], 3)) return null;
let t = menu_layout_f(e[1], g.length), n = null === e[2] ? null : menu_layout_a(e[2], 3) ? e[2] : null;
if (null === t || null !== e[2] && null === n || x.has(e[0]) || n === e[0]) return null;
x.add(e[0]), S.push([
e[0],
t,
n
]);
}
let P = [], A = new Set();
for (let e of p){
let t = menu_layout_f(e, g.length);
if (null === t || A.has(menu_layout_s(t))) return null;
A.add(menu_layout_s(t)), P.push(t);
}
let T = [], b = new Set();
for (let e of h){
if (!menu_layout_a(e, 3) || b.has(e)) return null;
b.add(e), T.push(e);
}
return {
version: 1,
custom: g,
titles: c,
itemTitles: v,
categoryMoves: I,
itemMoves: S,
hiddenCategories: P,
hiddenItems: T
};
}
function menu_layout_m() {
return {
titles: [],
itemTitles: [],
categoryMoves: [],
itemMoves: []
};
}
function menu_layout_p(e, t) {
return "number" == typeof e ? t[e] ?? null : primaryCategoryId(e);
}
function resolveMenuLayout(e, t) {
let n = menu_layout_r(e), i = menu_layout_l(n), u = new Set(), a = new Set(), s = menu_layout_m();
if (!t) return {
categories: i,
hiddenCategoryIds: u,
hiddenItemPaths: a,
itemTitles: new Map(),
pending: s,
configured: !1
};
let f = t.custom.map((e, t)=>{
let n = `custom:${t}`;
return i.push({
id: n,
title: e,
items: []
}), n;
}), d = new Set(n.items.map((e)=>e.path)), h = f.length > 0;
for (let [e, n] of t.titles){
let t = primaryCategoryId(e), r = i.find((e)=>e.id === t);
r ? (r.title = n, h = !0) : s.titles.push([
t,
n
]);
}
let g = new Map();
for (let [e, n] of t.itemTitles)d.has(e) ? (g.set(e, n), h = !0) : s.itemTitles.push([
e,
n
]);
for (let [e, n] of t.categoryMoves){
let t = menu_layout_p(e, f), r = null === n ? null : menu_layout_p(n, f), l = null !== t && i.some((e)=>e.id === t), u = null === r || i.some((e)=>e.id === r);
t && l && u ? (i = function(e, t, n) {
if (n) return moveMenuCategory(e, t, n);
let i = menu_layout_o(e), r = i.findIndex((e)=>e.id === t);
if (r < 0) return i;
let [l] = i.splice(r, 1);
return i.push(l), i;
}(i, t, r), h = !0) : t && s.categoryMoves.push([
t,
r
]);
}
for (let [e, n, r] of t.itemMoves){
let t = menu_layout_p(n, f), l = t ? i.find((e)=>e.id === t) : void 0, o = null === r || !!l?.items.includes(r);
d.has(e) && t && l && o ? (i = moveMenuItem(i, e, t, r ?? void 0), h = !0) : t && s.itemMoves.push([
e,
t,
r
]);
}
for (let e of t.hiddenCategories){
let t = menu_layout_p(e, f);
t && (u.add(t), i.some((e)=>e.id === t) && (h = !0));
}
for (let e of t.hiddenItems)a.add(e), d.has(e) && (h = !0);
return {
categories: i,
hiddenCategoryIds: u,
hiddenItemPaths: a,
itemTitles: g,
pending: s,
configured: h
};
}
function menu_layout_h(e, t) {
let n = new Map(t.map((e, t)=>[
e,
t
])), i = e.flatMap((e)=>{
let t = n.get(e);
return void 0 === t ? [] : [
{
value: e,
index: t
}
];
}), r = [], l = Array(i.length).fill(-1);
for(let e = 0; e < i.length; e += 1){
let t = 0, n = r.length;
for(; t < n;){
let l = t + n >> 1;
i[r[l]].index < i[e].index ? t = l + 1 : n = l;
}
t > 0 && (l[e] = r[t - 1]), r[t] = e;
}
let o = new Set();
for(let e = r.at(-1) ?? -1; e >= 0; e = l[e])o.add(i[e].value);
return o;
}
function menu_layout_g(e, t) {
let n = menu_layout_i(e);
return n || (t.get(e) ?? null);
}
function menu_layout_y(e, t, n) {
let i = n.get(e), r = n.get(t);
return void 0 !== i && void 0 !== r ? i - r : void 0 !== i ? -1 : void 0 !== r ? 1 : e.localeCompare(t);
}
function serializeMenuLayout(e, t, n, o, u = menu_layout_m(), a = new Map()) {
let s = menu_layout_r(e), f = menu_layout_l(s), d = new Map(f.map((e)=>[
e.id,
e
])), p = t.filter((e)=>!d.has(e.id)), c = new Map(p.map((e, t)=>[
e.id,
t
])), M = p.map((e)=>e.title.trim()), v = [], w = new Set();
for (let e of t){
let t = d.get(e.id), n = e.title.trim();
if (!t || n === t.title) continue;
let r = menu_layout_i(e.id);
r && (v.push([
r,
n
]), w.add(e.id));
}
for (let [e, t] of u.titles){
if (w.has(e)) continue;
let n = menu_layout_i(e);
n && v.push([
n,
t
]);
}
let I = new Map(s.items.map((e)=>[
e.path,
e.title
])), C = [], S = new Set();
for (let [e, t] of a){
let n = t.trim();
n && n !== I.get(e) && (C.push([
e,
n
]), S.add(e));
}
for (let [e, t] of u.itemTitles)S.has(e) || C.push([
e,
t
]);
let x = [
...f.map((e)=>e.id),
...p.map((e)=>e.id)
], P = t.map((e)=>e.id), A = [], T = new Set();
for (let [e, t] of function(e, t) {
let n = menu_layout_h(e, t), i = [];
for(let e = t.length - 1; e >= 0; e -= 1)n.has(t[e]) || i.push([
t[e],
t[e + 1] ?? null
]);
return i;
}(x, P)){
let n = menu_layout_g(e, c), i = null === t ? null : menu_layout_g(t, c);
null !== n && (null === t || null !== i) && (A.push([
n,
i
]), T.add(e));
}
for (let [e, t] of u.categoryMoves){
if (T.has(e)) continue;
let n = menu_layout_g(e, c), i = null === t ? null : menu_layout_g(t, c);
null !== n && (null === t || null !== i) && A.push([
n,
i
]);
}
let b = [], $ = new Set();
for (let e of t){
let t = menu_layout_g(e.id, c);
if (null === t) continue;
let n = menu_layout_h(d.get(e.id)?.items ?? [], e.items);
for(let i = e.items.length - 1; i >= 0; i -= 1){
let r = e.items[i];
n.has(r) || (b.push([
r,
t,
e.items[i + 1] ?? null
]), $.add(r));
}
}
for (let [e, t, n] of u.itemMoves){
if ($.has(e)) continue;
let i = menu_layout_g(t, c);
null !== i && b.push([
e,
i,
n
]);
}
let L = new Map(t.map((e, t)=>[
e.id,
t
])), O = [
...n
].sort((e, t)=>menu_layout_y(e, t, L)).flatMap((e)=>{
let t = menu_layout_g(e, c);
return null === t ? [] : [
t
];
}), j = new Map(s.items.map((e, t)=>[
e.path,
t
])), N = [
...o
].sort((e, t)=>menu_layout_y(e, t, j)), k = {
version: 1
};
return M.length > 0 && (k.custom = M), v.length > 0 && (k.titles = v), C.length > 0 && (k.itemTitles = C), A.length > 0 && (k.categoryMoves = A), b.length > 0 && (k.itemMoves = b), O.length > 0 && (k.hiddenCategories = O), N.length > 0 && (k.hiddenItems = N), 1 === Object.keys(k).length ? "" : JSON.stringify(k);
}
function buildMenuPresentation(e, t) {
let n = menu_layout_r(e), l = resolveMenuLayout(e, parseMenuLayout(t)), o = new Map(n.items.map((e)=>[
e.path,
e
]));
for (let [e, t] of l.itemTitles){
let n = o.get(e);
n && o.set(e, {
...n,
title: t
});
}
let u = new Map(n.primaries.map((e)=>[
primaryCategoryId(e.path),
e
])), a = new Set(l.hiddenItemPaths);
for (let e of l.hiddenCategoryIds){
let t = menu_layout_i(e);
t && a.add(t);
let n = l.categories.find((t)=>t.id === e);
if (n) for (let e of n.items)a.add(e);
}
return {
categories: l.categories.map((e)=>({
id: e.id,
title: e.title,
primary: u.get(e.id) ?? null,
items: e.items.flatMap((e)=>{
let t = o.get(e);
return t ? [
t
] : [];
})
})),
hiddenCategoryIds: l.hiddenCategoryIds,
hiddenPaths: a,
configured: l.configured
};
}
;// CONCATENATED MODULE: ./web/resources/utils/menu-cache.ts
let menu_cache_e = "fluent_menu_cache";
function menu_cache_t(e) {
let t = document.body?.getAttribute("data-menu-cache-scope");
return t ? `${e}_${t}` : null;
}
function getCachedMenu() {
try {
let n = menu_cache_t(menu_cache_e);
if (!n) return null;
let r = sessionStorage.getItem(n);
if (!r) return null;
let u = JSON.parse(r);
if (u && "object" == typeof u) return {
tree: u,
raw: r
};
} catch (e) {}
return null;
}
function saveMenuCache(n) {
try {
let r = menu_cache_t(menu_cache_e);
if (!r) return null;
let u = JSON.stringify(n);
return sessionStorage.setItem(r, u), u;
} catch (e) {
return null;
}
}
function saveRenderedHtmlCache() {
try {
let e = document.querySelector("#mainmenu"), n = menu_cache_t("fluent_sidebar_html");
e && n && sessionStorage.setItem(n, e.innerHTML);
let r = document.querySelector("#tabmenu"), u = menu_cache_t("fluent_tabmenu_html"), l = Array.isArray(L?.env?.dispatchpath) ? JSON.stringify(L.env.dispatchpath) : "";
r && r.children.length > 0 && u && l && sessionStorage.setItem(`${u}_${l}`, r.innerHTML);
} catch (e) {}
}
function getResolvedMenuLayout() {
let e = document.body?.getAttribute?.("data-menu-layout");
if (e) try {
let t = JSON.parse(e);
if ("string" == typeof t || Array.isArray(t) || null === t) return t;
} catch (e) {}
}
;// CONCATENATED MODULE: ./web/resources/utils/table-wrapper.ts
let table_wrapper_e = "table.table, table.cbi-section-table, div.table, div.cbi-section-table";
function table_wrapper_t(e) {
let t = e.parentElement;
if (!t || t.classList.contains("table-wrapper")) return;
let n = document.createElement("div");
n.className = "table-wrapper", t.insertBefore(n, e), n.append(e);
}
function table_wrapper_n(n) {
n instanceof HTMLElement && n.matches(table_wrapper_e) && table_wrapper_t(n), n.querySelectorAll(table_wrapper_e).forEach((e)=>{
table_wrapper_t(e);
});
}
function setupTableWrappers() {
document.body && (table_wrapper_n(document), new MutationObserver((e)=>{
e.forEach((e)=>{
e.addedNodes.forEach((e)=>{
e instanceof Element && table_wrapper_n(e);
});
});
}).observe(document.body, {
childList: !0,
subtree: !0
}));
}
;// CONCATENATED MODULE: ./web/resources/utils/theme-features-lite.ts
function setupThemeFeatures() {
let e = document.body;
if (!e || e.dataset.fluentLiteFeaturesInitialized) return;
e.dataset.fluentLiteFeaturesInitialized = "true";
let t = "1" === e.getAttribute("data-prefers-reduced-motion"), a = (a)=>e.setAttribute("data-reduce-motion", t && a ? "true" : "false"), d = window.matchMedia("(prefers-reduced-motion: reduce)");
a(d.matches), t && d.addEventListener("change", (e)=>a(e.matches));
let r = document.getElementById("theme-toggle");
if (!r) return;
let i = (e)=>{
let t = "auto" === e ? window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light" : e;
document.documentElement.setAttribute("data-theme", t), r.setAttribute("data-active-theme", t), r.setAttribute("data-mode", e);
}, o = L.rpc.declare({
object: "luci.fluent",
method: "set_mode",
params: [
"mode"
]
});
r.hidden = !1, i(e.getAttribute("data-theme-mode") || "auto"), requestAnimationFrame(()=>r.classList.add("visible")), r.addEventListener("click", async ()=>{
if (r.disabled) return;
let t = e.getAttribute("data-theme-mode") || "auto", a = "dark" === t ? "light" : "light" === t ? "auto" : "dark";
r.disabled = !0, i(a);
try {
let t = await o(a);
if (t?.result !== 0) throw Error(_("Failed to save theme mode."));
e.setAttribute("data-theme-mode", a);
} catch (e) {
i(t), L.ui.addNotification(null, String(e), "error");
} finally{
r.disabled = !1;
}
}), window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", ()=>{
let t = e.getAttribute("data-theme-mode") || "auto";
"auto" === t && i(t);
});
}
;// CONCATENATED MODULE: ./web/resources/utils/menu-features-lite.ts
const setupMenuStartup = ()=>{};
const setupMenuFeatures = (r)=>{
setupTableWrappers(), setupThemeFeatures();
};
;// CONCATENATED MODULE: ./web/resources/utils/sidebar-controller.ts
function applyDesktopSidebarState(e) {
document.body.setAttribute("data-sidebar-state", e), document.dispatchEvent(new CustomEvent("fluent-sidebar-state-change"));
}
function getDesktopSidebarState() {
try {
let e = localStorage.getItem("fluent-sidebar-state");
return "collapsed" === e || "expanded" === e ? e : "expanded";
} catch (e) {
return "expanded";
}
}
function closeCollapsedPopups() {
document.querySelectorAll("#mainmenu ul.nav > li > a.menu.popup-open").forEach((e)=>{
e.classList.remove("popup-open");
}), document.querySelectorAll("#mainmenu ul.nav > li > ul.slide-menu.popup-open").forEach((e)=>{
e.classList.remove("popup-open"), e.style.display = "none", e.style.top = "";
});
}
function adjustBrandTextSize() {
let e = document.querySelector(".sidenav-header .brand-text");
if (e) {
let t = e.parentElement;
if (t) {
let a = t.clientWidth - 32;
if (a > 0) {
let t = 16;
for(e.style.fontSize = `${t}px`; e.scrollWidth > a && t > 9;)t -= 0.5, e.style.fontSize = `${t}px`;
}
}
}
}
function handleSidebarToggle(e) {
let t = document.querySelectorAll("a.showSide"), a = document.querySelector("#mainmenu"), d = document.querySelector(".darkMask"), o = document.querySelector(".main-right");
0 !== t.length && a && d && o && (Array.from(t).some((e)=>e.classList.contains("active")) ? (t.forEach((e)=>{
e.classList.remove("active");
}), a.classList.remove("active"), o.classList.remove("active"), d.classList.remove("active")) : (t.forEach((e)=>{
e.classList.add("active");
}), a.classList.add("active"), o.classList.add("active"), d.classList.add("active"), adjustBrandTextSize()));
}
function handleDesktopSidebarToggle(e) {
if (e.preventDefault(), e.stopPropagation(), window.innerWidth <= 768) return;
let t = "collapsed" == ("collapsed" === document.body.getAttribute("data-sidebar-state") ? "collapsed" : "expanded") ? "expanded" : "collapsed";
closeCollapsedPopups();
try {
localStorage.setItem("fluent-sidebar-state", t);
} catch (e) {}
applyDesktopSidebarState(t), "expanded" === t && adjustBrandTextSize();
}
let sidebar_controller_e = !1;
function initSidebarController(t) {
if (sidebar_controller_e) return;
sidebar_controller_e = !0;
let a = document.querySelectorAll("a.showSide"), d = document.querySelector(".darkMask"), o = document.querySelector(".sidebar-collapse-toggle"), n = ui.createHandlerFn(t, "handleSidebarToggle") ?? (()=>{
handleSidebarToggle();
}), r = ui.createHandlerFn(t, "handleDesktopSidebarToggle") ?? ((e)=>{
handleDesktopSidebarToggle(e);
});
a.forEach((e)=>{
e.addEventListener("click", n);
}), d && d.addEventListener("click", n), o && o.addEventListener("click", r), window.innerWidth > 768 ? applyDesktopSidebarState(getDesktopSidebarState()) : document.body.setAttribute("data-sidebar-state", "expanded"), window.addEventListener("resize", ()=>{
adjustBrandTextSize(), window.innerWidth > 768 ? applyDesktopSidebarState(getDesktopSidebarState()) : document.body.setAttribute("data-sidebar-state", "expanded");
}), document.addEventListener("click", (e)=>{
if (window.innerWidth <= 768 || "collapsed" !== document.body.getAttribute("data-sidebar-state")) return;
let t = e.target, a = document.querySelector("#mainmenu");
t && a?.contains(t) || closeCollapsedPopups();
});
}
;// CONCATENATED MODULE: ./web/resources/utils/slide-animations.ts
let slide_animations_t = {
fast: 200,
normal: 400,
slow: 600
}, slide_animations_e = (e)=>{
if ("number" == typeof e) return e || slide_animations_t.normal;
switch(e){
case "fast":
case "slow":
return slide_animations_t[e];
default:
return slide_animations_t.normal;
}
};
const SlideAnimations = {
durations: slide_animations_t,
runningAnimations: new WeakMap(),
slideDown (t, i, n) {
if (!t) return void console.warn("SlideAnimations.slideDown: No element provided");
this.stop(t);
let s = slide_animations_e(i), o = {
display: t.style.display,
overflow: t.style.overflow,
height: t.style.height,
transition: t.style.transition
};
t.style.display = "block", t.style.overflow = "hidden", t.style.height = "0px", t.style.transition = `height ${s}ms ease-out`, t.offsetHeight;
let l = t.scrollHeight;
t.style.height = `${l}px`;
let r = ()=>{
if (t.style.height = o.height || "", t.style.overflow = o.overflow || "", t.style.transition = o.transition || "", this.runningAnimations.delete(t), n && "function" == typeof n) try {
n.call(t);
} catch (t) {
console.error("SlideAnimations callback error:", t);
}
}, a = setTimeout(r, s);
this.runningAnimations.set(t, {
timeoutId: a,
cleanup: r
});
},
slideUp (t, i, n) {
if (!t) return void console.warn("SlideAnimations.slideUp: No element provided");
this.stop(t);
let s = slide_animations_e(i), o = {
display: t.style.display,
overflow: t.style.overflow,
height: t.style.height,
transition: t.style.transition
}, l = t.scrollHeight;
t.style.overflow = "hidden", t.style.height = `${l}px`, t.style.transition = `height ${s}ms ease-out`, t.offsetHeight, t.style.height = "0px";
let r = ()=>{
if (t.style.display = "none", t.style.height = o.height || "", t.style.overflow = o.overflow || "", t.style.transition = o.transition || "", this.runningAnimations.delete(t), n && "function" == typeof n) try {
n.call(t);
} catch (t) {
console.error("SlideAnimations callback error:", t);
}
}, a = setTimeout(r, s);
this.runningAnimations.set(t, {
timeoutId: a,
cleanup: r
});
},
stop (t) {
if (!t) return;
let e = this.runningAnimations.get(t);
e && (clearTimeout(e.timeoutId), e.cleanup()), t.style.transition = "", t.offsetHeight;
},
isAnimating (t) {
return this.runningAnimations.has(t);
}
};
;// CONCATENATED MODULE: ./web/resources/menu-fluent.tsx
let menu_fluent_v = !1;
function menu_fluent_y(e) {
menu_fluent_v || (menu_fluent_v = !0, setupMenuFeatures()), setupMenuFeatures(e);
}
const main = baseclass.extend({
async __init__ () {
setupMenuStartup(), initSidebarController(this);
let e = getResolvedMenuLayout(), t = getCachedMenu(), l = !1;
if (t) {
let i = buildMenuPresentation(t.tree, e ?? null);
this.render(t.tree, i), menu_fluent_y(i), l = !0;
}
try {
let i = void 0 === e, [a] = await Promise.all([
ui.menu.load(),
i ? L.uci.load("fluent") : Promise.resolve()
]), s = saveMenuCache(a);
if (!l || s !== t?.raw) {
if (i) {
let t = L.uci.get_first("fluent", "global", "menu_layout");
e = "string" == typeof t || Array.isArray(t) ? t : null;
}
let t = buildMenuPresentation(a, e ?? null);
this.render(a, t), menu_fluent_y(t);
}
} catch (e) {
l || console.error("Fluent menu: Failed to load menu data", e);
}
},
render (e, t) {
let l = e, n = "";
if (t.configured) this.renderConfiguredMenu(t);
else {
let t = ui.menu.getChildren(e);
for(let e = 0; e < t.length; e++)(L.env.requestpath.length ? t[e].name === L.env.requestpath[0] : 0 === e) && this.renderMainMenu(t[e], t[e].name);
}
if (L.env.dispatchpath.length >= 3) {
for(let e = 0; e < 3 && l; e++){
let t = L.env.dispatchpath[e];
l = l.children?.[t], n = n + (n ? "/" : "") + t;
}
l && this.renderTabMenu(l, n, void 0, t.hiddenPaths);
} else {
let e = document.querySelector("#tabmenu");
e && (e.innerHTML = "", e.style.display = "none");
}
saveRenderedHtmlCache();
},
handleMenuExpand (e) {
let t = e.currentTarget;
if (!t) return;
let l = t.parentNode, n = t.nextElementSibling, i = window.innerWidth > 768 && "collapsed" === document.body.getAttribute("data-sidebar-state"), a = !1;
if (document.querySelectorAll(i ? ".main .main-left .nav > li > ul.slide-menu.popup-open" : ".main .main-left .nav > li > ul.slide-menu.active").forEach((e)=>{
a || e !== n || (a = !0), e.classList.remove("popup-open", "active"), e.previousElementSibling?.classList.remove("popup-open", "active"), SlideAnimations.stop(e), i ? (e.style.display = "none", e.style.top = "") : SlideAnimations.slideUp(e, "fast");
}), n) {
if (!a) {
let e = l?.querySelector(".slide-menu");
if (e) {
if (n.classList.add(i ? "popup-open" : "active"), t.classList.add(i ? "popup-open" : "active"), i) {
SlideAnimations.stop(e), e.style.display = "block";
let l = t.getBoundingClientRect(), n = e.offsetHeight, i = Math.max(8, window.innerHeight - n - 8), a = l.top - 8;
e.style.top = `${Math.min(i, Math.max(8, a))}px`;
} else e.style.top = "", SlideAnimations.slideDown(e, "fast");
e.querySelectorAll("li > a").forEach((e)=>{
e.addEventListener("click", ()=>{
closeCollapsedPopups();
}, {
once: !0
});
});
}
t.blur();
}
document.dispatchEvent(new CustomEvent("fluent-menu-expand")), e.preventDefault(), e.stopPropagation();
}
},
renderMainMenu (n, i, a) {
let r = (a || 0) + 1, s = a && n.title ? n.title.replace(/ /g, "_") : void 0, d = jsx("ul", {
class: a ? "slide-menu" : "nav",
"data-parent": s || void 0
}), u = ui.menu.getChildren(n);
if (0 === u.length || r > 2) return jsx(Fragment, {});
for(let l = 0; l < u.length; l++){
let a = u[l], s = L.env.dispatchpath[r] === a.name && L.env.dispatchpath[r - 1] === n.name, c = this.renderMainMenu(a, `${i}/${a.name}`, r), o = c.children.length > 0, p = o ? "slide" : null, h = o ? "menu" : "item";
s && (d.classList.add("active"), p = p ? `${p} active` : "null active");
let m = s ? `${h} active` : h, f = jsxs("li", {
class: p ?? void 0,
children: [
jsxs("a", {
href: L.url(i, a.name),
onclick: 1 === r ? ui.createHandlerFn(this, "handleMenuExpand") : null,
class: m,
"data-title": (a.title || "").replace(/ /g, "_"),
children: [
1 === r || 2 === r ? jsx("span", {
class: "menu-icon"
}) : null,
jsx("span", {
class: "menu-label",
children: _(a.title || "")
})
]
}),
c
]
});
d.appendChild(f);
}
if (1 === r) {
let e = document.querySelector("#mainmenu");
if (e) {
let t = "function" == typeof e.querySelector ? e.querySelector("ul.nav") : null;
t && "function" == typeof t.replaceWith ? t.replaceWith(d) : e.appendChild(d), e.style.display = "", adjustBrandTextSize();
}
}
return d;
},
renderConfiguredMenu (l) {
let n = jsx("ul", {
class: "nav"
});
for (let i of l.categories){
if (l.hiddenCategoryIds.has(i.id)) continue;
let a = i.items.filter((e)=>!l.hiddenPaths.has(e.path));
if (!i.primary && 0 === a.length) continue;
let r = jsx("ul", {
class: "slide-menu",
"data-parent": i.title.replace(/ /g, "_")
}), s = !1;
for (let l of a){
let n = l.pathSegments.every((e, t)=>L.env.dispatchpath[t] === e);
s ||= n, r.appendChild(jsx("li", {
class: n ? "active" : void 0,
children: jsxs("a", {
href: L.url(l.path),
class: `item${n ? " active" : ""}`,
"data-title": l.rawTitle.replace(/ /g, "_"),
children: [
jsx("span", {
class: "menu-icon"
}),
jsx("span", {
class: "menu-label",
children: l.title
})
]
})
}));
}
s && r.classList.add("active"), i.primary && L.env.dispatchpath.length <= 2 && (s ||= i.primary.pathSegments.every((e, t)=>L.env.dispatchpath[t] === e));
let d = a.length > 0, u = i.primary?.path ?? a[0]?.path ?? "#", c = i.primary?.rawTitle ?? i.title, o = `${d ? "slide" : ""}${s ? " active" : ""}`.trim() || void 0;
n.appendChild(jsxs("li", {
class: o,
children: [
jsxs("a", {
href: "#" === u ? u : L.url(u),
onclick: d ? ui.createHandlerFn(this, "handleMenuExpand") : null,
class: `${d ? "menu" : "item"}${s ? " active" : ""}`,
"data-title": c.replace(/ /g, "_"),
children: [
jsx("span", {
class: "menu-icon"
}),
jsx("span", {
class: "menu-label",
children: i.title
})
]
}),
d ? r : null
]
}));
}
let i = document.querySelector("#mainmenu");
if (i) {
let e = "function" == typeof i.querySelector ? i.querySelector("ul.nav") : null;
e && "function" == typeof e.replaceWith ? e.replaceWith(n) : i.appendChild(n), i.style.display = "", adjustBrandTextSize();
}
return n;
},
renderTabMenu (t, n, i, a) {
let r = L.env.dispatchpath.slice(0, 2).join("/"), s = L.env.dispatchpath.slice(0, 3).join("/");
if (a.has(r) || a.has(s)) return jsx(Fragment, {});
let d = document.querySelector("#tabmenu"), u = (i || 0) + 1, c = jsx("ul", {
class: "tabs"
}), o = ui.menu.getChildren(t), p = null;
if (0 === o.length) return d && 1 === u && (d.innerHTML = "", d.style.display = "none"), jsx(Fragment, {});
for(let t = 0; t < o.length; t++){
let l = o[t], i = L.env.dispatchpath[u + 2] === l.name, a = i ? " active" : "", r = jsx("li", {
class: `tabmenu-item-${l.name}${a}`,
children: jsx("a", {
href: L.url(n, l.name),
children: _(l.title || "")
})
});
c.appendChild(r), i && (p = l);
}
if (d && (1 === u && (d.innerHTML = ""), d.appendChild(c), d.style.display = "", p)) {
let e = this.renderTabMenu(p, `${n}/${p.name}`, u, a);
e.children.length > 0 && d.appendChild(e);
}
return c;
},
adjustBrandTextSize () {
adjustBrandTextSize();
},
handleSidebarToggle (e) {
handleSidebarToggle(e);
},
handleDesktopSidebarToggle (e) {
handleDesktopSidebarToggle(e);
}
});
return main;